diff --git a/gradle.properties b/gradle.properties index 4353e16eb..a28e0bc4c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Mod properties -mod_version=1.89.1 +mod_version=1.89.2 # Minecraft properties (update mods.toml when changing) mc_version=1.14.4 diff --git a/src/main/java/dan200/computercraft/shared/util/DropConsumer.java b/src/main/java/dan200/computercraft/shared/util/DropConsumer.java index abb774b45..14200f0eb 100644 --- a/src/main/java/dan200/computercraft/shared/util/DropConsumer.java +++ b/src/main/java/dan200/computercraft/shared/util/DropConsumer.java @@ -13,13 +13,12 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import java.lang.ref.WeakReference; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.function.Function; @@ -32,16 +31,16 @@ private DropConsumer() private static Function dropConsumer; private static List remainingDrops; - private static WeakReference dropWorld; + private static World dropWorld; private static AxisAlignedBB dropBounds; - private static WeakReference dropEntity; + private static Entity dropEntity; public static void set( Entity entity, Function consumer ) { dropConsumer = consumer; remainingDrops = new ArrayList<>(); - dropEntity = new WeakReference<>( entity ); - dropWorld = new WeakReference<>( entity.world ); + dropEntity = entity; + dropWorld = entity.world; dropBounds = new AxisAlignedBB( entity.getPosition() ).grow( 2, 2, 2 ); entity.captureDrops( new ArrayList<>() ); @@ -52,25 +51,12 @@ public static void set( World world, BlockPos pos, Function( 2 ); dropEntity = null; - dropWorld = new WeakReference<>( world ); + dropWorld = world; dropBounds = new AxisAlignedBB( pos ).grow( 2, 2, 2 ); } public static List clear() { - if( dropEntity != null ) - { - Entity entity = dropEntity.get(); - if( entity != null ) - { - Collection dropped = entity.captureDrops( null ); - if( dropped != null ) - { - for( ItemEntity entityItem : dropped ) handleDrops( entityItem.getItem() ); - } - } - } - List remainingStacks = remainingDrops; dropConsumer = null; @@ -92,11 +78,20 @@ private static void handleDrops( ItemStack stack ) public static void onEntitySpawn( EntityJoinWorldEvent event ) { // Capture any nearby item spawns - if( dropWorld != null && dropWorld.get() == event.getWorld() && event.getEntity() instanceof ItemEntity + if( dropWorld == event.getWorld() && event.getEntity() instanceof ItemEntity && dropBounds.contains( event.getEntity().getPositionVector() ) ) { handleDrops( ((ItemEntity) event.getEntity()).getItem() ); event.setCanceled( true ); } } + + @SubscribeEvent + public static void onLivingDrops( LivingDropsEvent drops ) + { + if( dropEntity == null || drops.getEntity() != dropEntity ) return; + + for( ItemEntity drop : drops.getDrops() ) handleDrops( drop.getItem() ); + drops.setCanceled( true ); + } } diff --git a/src/main/resources/data/computercraft/lua/rom/help/changelog.txt b/src/main/resources/data/computercraft/lua/rom/help/changelog.txt index 81fcebce0..94dd88b8b 100644 --- a/src/main/resources/data/computercraft/lua/rom/help/changelog.txt +++ b/src/main/resources/data/computercraft/lua/rom/help/changelog.txt @@ -1,3 +1,7 @@ +# New features in CC: Tweaked 1.89.2 + +* Fix dupe bug when killing an entity with a turtle. + # New features in CC: Tweaked 1.89.1 * Fix crashes when rendering monitors of varying sizes. diff --git a/src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt b/src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt index ddb0a9fe9..d6718d6b8 100644 --- a/src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt +++ b/src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt @@ -1,5 +1,5 @@ -New features in CC: Tweaked 1.89.1 +New features in CC: Tweaked 1.89.2 -* Fix crashes when rendering monitors of varying sizes. +* Fix dupe bug when killing an entity with a turtle. Type "help changelog" to see the full version history.