This commit is contained in:
paulevsGitch 2021-01-14 06:52:03 +03:00
parent 9c31454a46
commit fcce1b363b
3 changed files with 20 additions and 26 deletions

View file

@ -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);

View file

@ -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<Entity, BlockPos> 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<TeleportTarget> 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;
};
}

View file

@ -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<TeleportTarget> info) {
info.setReturnValue(new TeleportTarget(new Vec3d(0, 100, 0), Vec3d.ZERO, 0, 0));
}
}