From fcce1b363b9fbc135dae7e9de4786677cf280d5c Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 14 Jan 2021 06:52:03 +0300 Subject: [PATCH] Fixes --- .../ru/betterend/blocks/EndPortalBlock.java | 11 ++++++-- .../betterend/mixin/common/EntityMixin.java | 27 ++++++++----------- .../mixin/common/ServerPlayerEntityMixin.java | 8 ------ 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/EndPortalBlock.java b/src/main/java/ru/betterend/blocks/EndPortalBlock.java index 87270399..9255f46f 100644 --- a/src/main/java/ru/betterend/blocks/EndPortalBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPortalBlock.java @@ -95,10 +95,17 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTypeable if (destination.getRegistryKey() == World.OVERWORLD) { //player.teleport(destination, pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, player.yaw, player.pitch); //player.updatePositionAndAngles(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, player.yaw, player.pitch); - player.moveToWorld(destination); - player.teleport(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); + //player.moveToWorld(destination); + //player.teleport(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); //player.updatePositionAndAngles(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, player.yaw, player.pitch); //player.teleport(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); + + //player.teleport(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); + + // The most safe way + player.moveToWorld(destination); + + //player.teleport(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5); } else { player.moveToWorld(destination); diff --git a/src/main/java/ru/betterend/mixin/common/EntityMixin.java b/src/main/java/ru/betterend/mixin/common/EntityMixin.java index 6297dc6f..466e34aa 100644 --- a/src/main/java/ru/betterend/mixin/common/EntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EntityMixin.java @@ -1,7 +1,5 @@ package ru.betterend.mixin.common; -import java.util.Map; - import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -9,8 +7,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.google.common.collect.Maps; - import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.server.world.ServerWorld; @@ -22,7 +18,7 @@ import ru.betterend.interfaces.TeleportingEntity; @Mixin(Entity.class) public abstract class EntityMixin implements TeleportingEntity { - private static final Map EXIT_POS = Maps.newHashMap(); + private BlockPos exitPos; @Shadow public float yaw; @@ -68,7 +64,7 @@ public abstract class EntityMixin implements TeleportingEntity { ((ServerWorld) world).resetIdleTimeout(); destination.resetIdleTimeout(); this.world.getProfiler().pop(); - be_resetTeleport(); + beResetTeleport(); info.setReturnValue(entity); info.cancel(); } @@ -78,9 +74,8 @@ public abstract class EntityMixin implements TeleportingEntity { @Inject(method = "getTeleportTarget", at = @At("HEAD"), cancellable = true) protected void be_getTeleportTarget(ServerWorld destination, CallbackInfoReturnable info) { if (beCanTeleport()) { - BlockPos pos = EXIT_POS.get(be_getSelf()); - info.setReturnValue(new TeleportTarget(new Vec3d(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5), getVelocity(), yaw, pitch)); - be_resetTeleport(); + info.setReturnValue(new TeleportTarget(new Vec3d(exitPos.getX() + 0.5, exitPos.getY(), exitPos.getZ() + 0.5), getVelocity(), yaw, pitch)); + beResetTeleport(); info.cancel(); } } @@ -90,19 +85,19 @@ public abstract class EntityMixin implements TeleportingEntity { @Override public void beSetExitPos(BlockPos pos) { - EXIT_POS.put(be_getSelf(), pos.toImmutable()); + exitPos = pos.toImmutable(); } - private void be_resetTeleport() { - EXIT_POS.remove(be_getSelf()); + public void beResetTeleport() { + exitPos = null; } @Override public boolean beCanTeleport() { - return EXIT_POS.containsKey(be_getSelf()); + return exitPos != null; } - private Entity be_getSelf() { - return (Entity) (Object) this; - } + public BlockPos beGetExit() { + return exitPos; + }; } diff --git a/src/main/java/ru/betterend/mixin/common/ServerPlayerEntityMixin.java b/src/main/java/ru/betterend/mixin/common/ServerPlayerEntityMixin.java index 9288555c..0ee31988 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerPlayerEntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerPlayerEntityMixin.java @@ -4,13 +4,10 @@ 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; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.TeleportTarget; @Mixin(ServerPlayerEntity.class) public class ServerPlayerEntityMixin { @@ -20,9 +17,4 @@ public class ServerPlayerEntityMixin { info.cancel(); } } - - @Inject(method = "getTeleportTarget", at = @At("HEAD"), cancellable = true) - protected void be_getTeleportTarget(ServerWorld destination, CallbackInfoReturnable info) { - info.setReturnValue(new TeleportTarget(new Vec3d(0, 100, 0), Vec3d.ZERO, 0, 0)); - } }