diff --git a/README.md b/README.md index 12b1587d..b6736d69 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ All changes are toggleable via config files. * **Entity Bounding Boxes:** Saves entity bounding boxes to tags to prevent breakouts and suffocation * **Entity Desync:** Fixes entity motion desyncs most notable with arrows and thrown items * **Entity ID:** Fixes non-functional elytra firework boosting and guardian targeting if the entity ID is 0 +* **Entity Lists:** Fixes entity lists often not getting updated correctly * **Entity NaN:** Prevents corruption of entities caused by invalid health or damage values * **Entity Suffocation:** Pushes entities out of blocks when growing up to prevent suffocation * **Entity Tracker:** Fixes entity tracker to prevent client-sided desyncs when teleporting or changing dimensions diff --git a/src/main/java/mod/acgaming/universaltweaks/bugfixes/entities/entitylists/mixins/UTEntityTilePistonMixin.java b/src/main/java/mod/acgaming/universaltweaks/bugfixes/entities/entitylists/mixins/UTEntityTilePistonMixin.java new file mode 100644 index 00000000..f1875525 --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/bugfixes/entities/entitylists/mixins/UTEntityTilePistonMixin.java @@ -0,0 +1,38 @@ +package mod.acgaming.universaltweaks.bugfixes.entities.entitylists.mixin; + +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityPiston; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; + +import mod.acgaming.universaltweaks.UniversalTweaks; +import mod.acgaming.universaltweaks.config.UTConfigBugfixes; +import mod.acgaming.universaltweaks.config.UTConfigGeneral; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Surrogate; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +// MC-108469 +// https://bugs.mojang.com/browse/MC-108469 +// Courtesy of mrgrim +@Mixin(TileEntityPiston.class) +public abstract class UTEntityTilePistonMixin extends TileEntity +{ + @Inject(method = "moveCollidedEntities", at = @At(value = "INVOKE", target = "Ljava/lang/ThreadLocal;set(Ljava/lang/Object;)V", ordinal = 1, shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD) + public void utUpdateEntity(float p_184322_1_, CallbackInfo ci, EnumFacing enumfacing, double d0, List list, AxisAlignedBB axisalignedbb, List list1, boolean flag, int i, Entity entity, double d1) + { + if (UTConfigBugfixes.ENTITIES.utEntityListsToggle) world.updateEntityWithOptionalForce(entity, false); + } + + @Surrogate + public void utUpdateEntity(float p_184322_1_, CallbackInfo ci, EnumFacing enumfacing, double d0, List list, AxisAlignedBB axisalignedbb, List list1, boolean flag, int i, Entity entity, double d1, int quark0) + { + if (UTConfigBugfixes.ENTITIES.utEntityListsToggle) world.updateEntityWithOptionalForce(entity, false); + } +} \ No newline at end of file diff --git a/src/main/java/mod/acgaming/universaltweaks/bugfixes/entities/entitylists/mixins/UTWorldMixin.java b/src/main/java/mod/acgaming/universaltweaks/bugfixes/entities/entitylists/mixins/UTWorldMixin.java new file mode 100644 index 00000000..8807aae6 --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/bugfixes/entities/entitylists/mixins/UTWorldMixin.java @@ -0,0 +1,37 @@ +package mod.acgaming.universaltweaks.bugfixes.entities.entitylists.mixin; + +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; + +import mod.acgaming.universaltweaks.UniversalTweaks; +import mod.acgaming.universaltweaks.config.UTConfigBugfixes; +import mod.acgaming.universaltweaks.config.UTConfigGeneral; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Slice; + +// MC-108469 +// https://bugs.mojang.com/browse/MC-108469 +// Courtesy of mrgrim +@Mixin(World.class) +public abstract class UTWorldMixin +{ + @Redirect(method = "updateEntityWithOptionalForce", + slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getChunk(II)Lnet/minecraft/world/chunk/Chunk;", ordinal = 0), + to = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getChunk(II)Lnet/minecraft/world/chunk/Chunk;", ordinal = 1)), + at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;setPositionNonDirty()Z", ordinal = 0)) + public boolean utAlwaysLoadChunk(Entity entityIn) + { + if (UTConfigBugfixes.ENTITIES.utEntityListsToggle) + { + return true; + } else + { + // Returns false + return entityIn.setPositionNonDirty(); + } + } +} \ No newline at end of file diff --git a/src/main/java/mod/acgaming/universaltweaks/bugfixes/world/portalduplicationfixes/UTPortalDuplicationFixes.java b/src/main/java/mod/acgaming/universaltweaks/bugfixes/world/portalduplicationfixes/UTPortalDuplicationFix.java similarity index 94% rename from src/main/java/mod/acgaming/universaltweaks/bugfixes/world/portalduplicationfixes/UTPortalDuplicationFixes.java rename to src/main/java/mod/acgaming/universaltweaks/bugfixes/world/portalduplicationfixes/UTPortalDuplicationFix.java index eadfd313..0acf2d76 100644 --- a/src/main/java/mod/acgaming/universaltweaks/bugfixes/world/portalduplicationfixes/UTPortalDuplicationFixes.java +++ b/src/main/java/mod/acgaming/universaltweaks/bugfixes/world/portalduplicationfixes/UTPortalDuplicationFix.java @@ -15,12 +15,12 @@ // Courtesy of fonnymunkey @Mod.EventBusSubscriber(modid = UniversalTweaks.MODID) -public class UTPortalDuplicationFixes +public class UTPortalDuplicationFix { @SubscribeEvent public static void dimensionChangeEvent(EntityTravelToDimensionEvent event) { - if (event.getEntity().world.isRemote || !(UTConfigBugfixes.WORLD.utPortalDuplicationFixesToggle)) return; + if (event.getEntity().world.isRemote || !(UTConfigBugfixes.WORLD.utPortalDuplicationFixToggle)) return; if (event.getEntity() instanceof EntityLiving && !(event.getEntity() instanceof EntityPlayer)) { EntityLiving entity = (EntityLiving) event.getEntity(); diff --git a/src/main/java/mod/acgaming/universaltweaks/config/UTConfigBugfixes.java b/src/main/java/mod/acgaming/universaltweaks/config/UTConfigBugfixes.java index 35c06888..5046965c 100644 --- a/src/main/java/mod/acgaming/universaltweaks/config/UTConfigBugfixes.java +++ b/src/main/java/mod/acgaming/universaltweaks/config/UTConfigBugfixes.java @@ -187,6 +187,11 @@ public static class EntitiesCategory @Config.Comment("Fixes non-functional elytra firework boosting and guardian targeting if the entity ID is 0") public boolean utEntityIDToggle = true; + @Config.RequiresMcRestart + @Config.Name("Entity Lists") + @Config.Comment("Fixes entity lists often not getting updated correctly") + public boolean utEntityListsToggle = true; + @Config.Name("Entity NaN Values") @Config.Comment("Prevents corruption of entities caused by invalid health or damage values") public boolean utEntityNaNToggle = true; @@ -348,7 +353,7 @@ public static class WorldCategory @Config.RequiresMcRestart @Config.Name("Portal Duplication Fix") @Config.Comment("Fixes duplication issues that can occur when entities travel through portals") - public boolean utPortalDuplicationFixesToggle = true; + public boolean utPortalDuplicationFixToggle = true; @Config.RequiresMcRestart @Config.Name("Tile Entity Map") diff --git a/src/main/java/mod/acgaming/universaltweaks/core/UTLoadingPlugin.java b/src/main/java/mod/acgaming/universaltweaks/core/UTLoadingPlugin.java index f2a82899..b421adca 100644 --- a/src/main/java/mod/acgaming/universaltweaks/core/UTLoadingPlugin.java +++ b/src/main/java/mod/acgaming/universaltweaks/core/UTLoadingPlugin.java @@ -165,6 +165,7 @@ public List getMixinConfigs() configs.add("mixins.bugfixes.entities.dimensionchange.json"); configs.add("mixins.bugfixes.entities.disconnectdupe.json"); configs.add("mixins.bugfixes.entities.entityid.json"); + configs.add("mixins.bugfixes.entities.entitylists.json"); configs.add("mixins.bugfixes.entities.horsefalling.json"); configs.add("mixins.bugfixes.entities.maxhealth.json"); configs.add("mixins.bugfixes.entities.mount.json"); @@ -345,6 +346,8 @@ public boolean shouldMixinConfigQueue(String mixinConfig) return UTConfigBugfixes.ENTITIES.utDisconnectDupeToggle; case "mixins.bugfixes.entities.entityid.json": return UTConfigBugfixes.ENTITIES.utEntityIDToggle; + case "mixins.bugfixes.entities.entitylists.json": + return UTConfigBugfixes.ENTITIES.utEntityListsToggle; case "mixins.bugfixes.entities.horsefalling.json": return UTConfigBugfixes.ENTITIES.utHorseFallingToggle; case "mixins.bugfixes.entities.maxhealth.json": diff --git a/src/main/java/mod/acgaming/universaltweaks/util/compat/UTObsoleteModsHandler.java b/src/main/java/mod/acgaming/universaltweaks/util/compat/UTObsoleteModsHandler.java index a194ed93..a4169997 100644 --- a/src/main/java/mod/acgaming/universaltweaks/util/compat/UTObsoleteModsHandler.java +++ b/src/main/java/mod/acgaming/universaltweaks/util/compat/UTObsoleteModsHandler.java @@ -93,7 +93,7 @@ public static List obsoleteModsMessage() if (Loader.isModLoaded("parry") && UTConfigTweaks.ITEMS.PARRY.utParryToggle) messages.add("Shield Parry"); if (Loader.isModLoaded("pathundergates") && UTConfigTweaks.BLOCKS.utLenientPathsToggle) messages.add("Path Under Gates"); if (Loader.isModLoaded("pickupnotifier") && UTConfigTweaks.MISC.PICKUP_NOTIFICATION.utPickupNotificationToggle) messages.add("Pick Up Notifier"); - if (Loader.isModLoaded("portaldupebegone") && UTConfigBugfixes.WORLD.utPortalDuplicationFixesToggle) messages.add("PortalDupeBegone"); + if (Loader.isModLoaded("portaldupebegone") && UTConfigBugfixes.WORLD.utPortalDuplicationFixToggle) messages.add("PortalDupeBegone"); if (Loader.isModLoaded("preventghost") && UTConfigBugfixes.BLOCKS.utMiningGlitchToggle) messages.add("Prevent Ghost Blocks"); if (Loader.isModLoaded("quickleafdecay") && UTConfigTweaks.BLOCKS.utLeafDecayToggle) messages.add("Quick Leaf Decay"); if (Loader.isModLoaded("rallyhealth") && UTConfigTweaks.ENTITIES.RALLY_HEALTH.utRallyHealthToggle) messages.add("Rally Health"); diff --git a/src/main/resources/assets/universaltweaks/lang/en_us.lang b/src/main/resources/assets/universaltweaks/lang/en_us.lang index b5766337..6805dfb9 100644 --- a/src/main/resources/assets/universaltweaks/lang/en_us.lang +++ b/src/main/resources/assets/universaltweaks/lang/en_us.lang @@ -88,6 +88,7 @@ cfg.universaltweaks.tweaks.blocks.overhaulbeacon=Overhaul Beacon cfg.universaltweaks.tweaks.blocks.sapling=Sapling Behavior cfg.universaltweaks.tweaks.entities.attributes=Attributes cfg.universaltweaks.tweaks.entities.betterburning=Better Burning +cfg.universaltweaks.tweaks.entities.chickenshedding=Chicken Shedding cfg.universaltweaks.tweaks.entities.collisiondamage=Collision Damage cfg.universaltweaks.tweaks.entities.creeperconfetti=Creeper Confetti cfg.universaltweaks.tweaks.entities.damagevelocity=Damage Velocity diff --git a/src/main/resources/mixins.bugfixes.entities.entitylists.json b/src/main/resources/mixins.bugfixes.entities.entitylists.json new file mode 100644 index 00000000..c7f840cd --- /dev/null +++ b/src/main/resources/mixins.bugfixes.entities.entitylists.json @@ -0,0 +1,7 @@ +{ + "package": "mod.acgaming.universaltweaks.bugfixes.entities.entitylists.mixin", + "refmap": "universaltweaks.refmap.json", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": ["UTEntityTilePistonMixin", "UTWorldMixin"] +} \ No newline at end of file