From f9e90ded2a0fc2d6422d58a720efff95d8119021 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sun, 7 Jul 2019 20:46:59 -0300 Subject: [PATCH] lead fix and unloaded entity fix --- .../carpet/mixins/MobEntity_leashMixin.java | 28 +++++++++++++++++++ .../ServerWorld_unloadedEntityMixin.java | 21 ++++++++++++++ .../java/carpet/settings/CarpetSettings.java | 11 +++++--- src/main/java/carpet/settings/Validator.java | 4 +-- src/main/resources/carpet.mixins.json | 2 ++ 5 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 src/main/java/carpet/mixins/MobEntity_leashMixin.java create mode 100644 src/main/java/carpet/mixins/ServerWorld_unloadedEntityMixin.java diff --git a/src/main/java/carpet/mixins/MobEntity_leashMixin.java b/src/main/java/carpet/mixins/MobEntity_leashMixin.java new file mode 100644 index 00000000..f39d0b88 --- /dev/null +++ b/src/main/java/carpet/mixins/MobEntity_leashMixin.java @@ -0,0 +1,28 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.mob.MobEntity; +import net.minecraft.nbt.CompoundTag; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(MobEntity.class) +public abstract class MobEntity_leashMixin +{ + @Shadow /*@Nullable*/ private Entity holdingEntity; + + @Shadow /*@Nullable*/ private CompoundTag leashTag; + + @Inject(method = "writeCustomDataToTag", at = @At("TAIL")) + private void addLeashData(CompoundTag compoundTag_1, CallbackInfo ci) + { + if (holdingEntity == null && CarpetSettings.leadFix && leashTag != null) + { + compoundTag_1.put("Leash", leashTag); + } + } +} diff --git a/src/main/java/carpet/mixins/ServerWorld_unloadedEntityMixin.java b/src/main/java/carpet/mixins/ServerWorld_unloadedEntityMixin.java new file mode 100644 index 00000000..77f12cef --- /dev/null +++ b/src/main/java/carpet/mixins/ServerWorld_unloadedEntityMixin.java @@ -0,0 +1,21 @@ +package carpet.mixins; + +import carpet.settings.CarpetSettings; +import net.minecraft.entity.Entity; +import net.minecraft.server.world.ServerWorld; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(ServerWorld.class) +public class ServerWorld_unloadedEntityMixin +{ + @Redirect(method = "checkChunk", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/entity/Entity;teleportRequested()Z" + )) + private boolean addFastEntityCheck(Entity entity) + { + return CarpetSettings.unloadedEntityFix || entity.teleportRequested(); + } +} diff --git a/src/main/java/carpet/settings/CarpetSettings.java b/src/main/java/carpet/settings/CarpetSettings.java index 5c38ea71..40a33b45 100644 --- a/src/main/java/carpet/settings/CarpetSettings.java +++ b/src/main/java/carpet/settings/CarpetSettings.java @@ -104,7 +104,7 @@ public class CarpetSettings @Rule( desc = "Shulkers will respawn in end cities", category = FEATURE ) public static boolean shulkerSpawningInEndCities = false; - @Rule(desc = "Entities pushed or moved into unloaded chunks no longer disappear", category = {EXPERIMENTAL, BUGFIX}, validate = Validator.WIP.class) + @Rule(desc = "Entities pushed or moved into unloaded chunks no longer disappear", category = {EXPERIMENTAL, BUGFIX}) public static boolean unloadedEntityFix = false; @Rule( desc = "TNT doesn't update when placed against a power source", category = CREATIVE ) @@ -164,7 +164,11 @@ public class CarpetSettings @Rule(desc = "Enables /tick command to control game clocks", category = COMMAND) public static boolean commandTick = true; - @Rule(desc = "Enables /log command to monitor events in the game via chat and overlays", category = COMMAND) + @Rule( + desc = "Enables /log command to monitor events in the game via chat and overlays", + category = COMMAND, + validate = Validator.WIP.class + ) public static boolean commandLog = true; @Rule( @@ -388,8 +392,7 @@ public class CarpetSettings @Rule( desc = "Fixes leads breaking/becoming invisible in unloaded chunks", extra = "You may still get visibly broken leash links on the client side, but server side the link is still there.", - category = BUGFIX, - validate = Validator.WIP.class + category = BUGFIX ) public static boolean leadFix = false; diff --git a/src/main/java/carpet/settings/Validator.java b/src/main/java/carpet/settings/Validator.java index 66ca79cf..706147d7 100644 --- a/src/main/java/carpet/settings/Validator.java +++ b/src/main/java/carpet/settings/Validator.java @@ -47,13 +47,13 @@ public abstract class Validator if (source != null) try { - Messenger.m(source, "r "+currentRule.name+" is not yet fully implemented - we are still working on it."); + Messenger.m(source, "r "+currentRule.name+" is missing a few bits - we are still working on it."); } catch (NullPointerException ignored) { } return newValue; } @Override - public String description() { return "Its not yet fully implemented - we are working on it";} + public String description() { return "A few bits still needs implementing - we are working on it";} } public static class _STRICT extends Validator { diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 1d86b2fa..b0c1ef8d 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -24,6 +24,8 @@ "ThreadedAnvilChunkStorage_tickMixin", "MobEntityMixin", + "ServerWorld_unloadedEntityMixin", + "MobEntity_leashMixin", "ServerPlayNetworkHandlerMixin", "MinecraftServer_scarpetMixin",