diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/IMixinServerPlayer.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/IMixinServerPlayer.java index 54e5a4dac..2e2783843 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/IMixinServerPlayer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/misc/IMixinServerPlayer.java @@ -8,4 +8,8 @@ public interface IMixinServerPlayer @Nullable ServerLevel distantHorizons$getDimensionChangeDestination(); + #if MC_VER == MC_1_16_5 + void distantHorizons$setDimensionChangeDestination(ServerLevel dimensionChangeDestination); + #endif + } diff --git a/coreSubProjects b/coreSubProjects index 840b0a7fe..f7bf05b62 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 840b0a7fe2845fec667b3a8e93e9edbb9860b1f4 +Subproject commit f7bf05b62f804c5e44ab8c894d8e49f4f1ea9f89 diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinEntity.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinEntity.java new file mode 100644 index 000000000..18a37be40 --- /dev/null +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinEntity.java @@ -0,0 +1,38 @@ +#if MC_VER == MC_1_16_5 +package com.seibel.distanthorizons.fabric.mixins.server; + +import com.seibel.distanthorizons.common.wrappers.misc.IMixinServerPlayer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +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.callback.CallbackInfo; + +@Mixin(Entity.class) +public class MixinEntity +{ + @Inject(at = @At("TAIL"), method = "setLevel") + public void setLevel(Level level, CallbackInfo ci) + { + if (this instanceof IMixinServerPlayer) + { + ((IMixinServerPlayer) this).distantHorizons$setDimensionChangeDestination((ServerLevel) level); + } + } + +} + +#else + +package com.seibel.distanthorizons.fabric.mixins.server; + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Entity.class) +public class MixinEntity +{ +} +#endif diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinServerPlayer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinServerPlayer.java index 0578772df..50b529017 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinServerPlayer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/server/MixinServerPlayer.java @@ -48,6 +48,12 @@ public class MixinServerPlayer implements IMixinServerPlayer public ServerLevel distantHorizons$getDimensionChangeDestination() { return this.dimensionChangeDestination; } + #if MC_VER == MC_1_16_5 + @Override + public void distantHorizons$setDimensionChangeDestination(ServerLevel dimensionChangeDestination) + { this.dimensionChangeDestination = dimensionChangeDestination; } + #endif + @Inject(at = @At("HEAD"), method = "changeDimension") #if MC_VER >= MC_1_21_1 public void changeDimension(DimensionTransition dimensionTransition, CallbackInfoReturnable cir) @@ -60,10 +66,11 @@ public class MixinServerPlayer implements IMixinServerPlayer #if MC_VER >= MC_1_20_1 @Inject(at = @At("RETURN"), method = "setServerLevel") public void setServerLevel(ServerLevel level, CallbackInfo ci) - #else + { this.dimensionChangeDestination = null; } + #elif MC_VER >= MC_1_17_1 @Inject(at = @At("RETURN"), method = "setLevel") public void setLevel(ServerLevel level, CallbackInfo ci) - #endif { this.dimensionChangeDestination = null; } + #endif } \ No newline at end of file diff --git a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json index ee57216f0..0ca4b0ad2 100644 --- a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json +++ b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json @@ -6,7 +6,8 @@ "server.MixinChunkGenerator", "server.MixinChunkMap", "server.MixinUtilBackgroundThread", - "server.MixinServerPlayer" + "server.MixinServerPlayer", + "server.MixinEntity" ], "client": [ "client.MixinClientLevel", diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinEntity.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinEntity.java new file mode 100644 index 000000000..015d21304 --- /dev/null +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinEntity.java @@ -0,0 +1,39 @@ +#if MC_VER == MC_1_16_5 + +package com.seibel.distanthorizons.forge.mixins.server; + +import com.seibel.distanthorizons.common.wrappers.misc.IMixinServerPlayer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +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.callback.CallbackInfo; + +@Mixin(Entity.class) +public class MixinEntity +{ + @Inject(at = @At("TAIL"), method = "setLevel") + public void setLevel(Level level, CallbackInfo ci) + { + if (this instanceof IMixinServerPlayer) + { + ((IMixinServerPlayer) this).distantHorizons$setDimensionChangeDestination((ServerLevel) level); + } + } + +} + +#else + +package com.seibel.distanthorizons.forge.mixins.server; + +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Entity.class) +public class MixinEntity +{ +} +#endif diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinServerPlayer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinServerPlayer.java index 8cdd2da16..bc96c3daf 100644 --- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinServerPlayer.java +++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/server/MixinServerPlayer.java @@ -45,6 +45,12 @@ public class MixinServerPlayer implements IMixinServerPlayer public ServerLevel distantHorizons$getDimensionChangeDestination() { return this.distantHorizons$dimensionChangeDestination; } + #if MC_VER == MC_1_16_5 + @Override + public void distantHorizons$setDimensionChangeDestination(ServerLevel dimensionChangeDestination) + { this.distantHorizons$dimensionChangeDestination = dimensionChangeDestination; } + #endif + @Inject(at = @At("HEAD"), method = "changeDimension", remap = false) public void changeDimension(ServerLevel destination, ITeleporter teleporter, CallbackInfoReturnable cir) { this.distantHorizons$dimensionChangeDestination = destination; } @@ -52,10 +58,11 @@ public class MixinServerPlayer implements IMixinServerPlayer #if MC_VER >= MC_1_20_1 @Inject(at = @At("RETURN"), method = "setServerLevel") public void setServerLevel(ServerLevel level, CallbackInfo ci) - #else + { this.distantHorizons$dimensionChangeDestination = null; } + #elif MC_VER >= MC_1_17_1 @Inject(at = @At("RETURN"), method = "setLevel") public void setLevel(ServerLevel level, CallbackInfo ci) - #endif { this.distantHorizons$dimensionChangeDestination = null; } + #endif } \ No newline at end of file diff --git a/forge/src/main/resources/DistantHorizons.forge.mixins.json b/forge/src/main/resources/DistantHorizons.forge.mixins.json index 3824c154c..5ff0aafeb 100644 --- a/forge/src/main/resources/DistantHorizons.forge.mixins.json +++ b/forge/src/main/resources/DistantHorizons.forge.mixins.json @@ -7,7 +7,8 @@ "server.MixinChunkGenerator", "server.MixinTFChunkGenerator", "server.MixinChunkMap", - "server.MixinServerPlayer" + "server.MixinServerPlayer", + "server.MixinEntity" ], "client": [ "client.MixinClientPacketListener",