diff --git a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java index c5064cc..412f421 100644 --- a/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/management/ServerConfigurationManager.java @@ -541,6 +541,11 @@ public void transferPlayerToDimension(EntityPlayerMP p_72356_1_, int p_72356_2_, Teleporter teleporter) { + org.ultramine.server.event.PreDimChangeEvent event = new org.ultramine.server.event.PreDimChangeEvent(p_72356_1_, p_72356_2_, teleporter); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); + p_72356_2_ = event.getDimTo(); + teleporter = event.getTeleporter(); + int j = p_72356_1_.dimension; WorldServer worldserver = this.mcServer.worldServerForDimension(p_72356_1_.dimension); p_72356_1_.dimension = p_72356_2_; diff --git a/src/main/java/org/ultramine/server/event/PreDimChangeEvent.java b/src/main/java/org/ultramine/server/event/PreDimChangeEvent.java new file mode 100644 index 0000000..712e4bf --- /dev/null +++ b/src/main/java/org/ultramine/server/event/PreDimChangeEvent.java @@ -0,0 +1,86 @@ +package org.ultramine.server.event; + +import org.ultramine.server.util.WarpLocation; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.Teleporter; +import net.minecraftforge.event.entity.player.PlayerEvent; + +public class PreDimChangeEvent extends PlayerEvent +{ + private final EntityPlayerMP player; + private int dimTo; + private Teleporter teleporter; + + public PreDimChangeEvent(EntityPlayerMP player, int dimTo, Teleporter teleporter) + { + super(player); + this.player = player; + this.dimTo = dimTo; + this.teleporter = teleporter; + } + + public EntityPlayerMP getPlayer() + { + return player; + } + + public int getDimFrom() + { + return player.dimension; + } + + public int getDimTo() + { + return dimTo; + } + + /** UNSAFE! */ + public void setDimTo(int dimTo) + { + this.dimTo = dimTo; + } + + public Teleporter getTeleporter() + { + return teleporter; + } + + /** UNSAFE! */ + public void setTeleporter(Teleporter teleporter) + { + this.teleporter = teleporter; + } + + public boolean isVanilla() + { + return teleporter != null; + } + + public void setDestination(double x, double y, double z) + { + setTeleporter(null); + player.setPositionAndRotation(x, y, z, player.rotationYaw, player.rotationPitch); + } + + public void setDestination(int dim, double x, double y, double z) + { + setTeleporter(null); + setDimTo(dim); + player.setPositionAndRotation(x, y, z, player.rotationYaw, player.rotationPitch); + } + + public void setDestination(int dim, double x, double y, double z, float yaw, float pitch) + { + setTeleporter(null); + setDimTo(dim); + player.setPositionAndRotation(x, y, z, yaw, pitch); + } + + public void setDestination(WarpLocation loc) + { + setTeleporter(null); + setDimTo(loc.dimension); + player.setPositionAndRotation(loc.x, loc.y, loc.z, loc.yaw, loc.pitch); + } +}