Teleport now specifies orientation, closes #2977

This commit is contained in:
aidancbrady 2015-11-27 10:41:45 -07:00
parent 6466463a63
commit f5c48f60e6
2 changed files with 47 additions and 8 deletions

View file

@ -1,10 +1,10 @@
package mekanism.common.network;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import java.util.ArrayList;
import java.util.List;
import mekanism.api.Coord4D;
import mekanism.api.Range4D;
import mekanism.common.Mekanism;
@ -22,10 +22,9 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.network.NetHandlerPlayServer;
import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import java.util.ArrayList;
import java.util.List;
public class PacketPortableTeleporter implements IMessageHandler<PortableTeleporterMessage, IMessage>
{
@ -115,6 +114,7 @@ public class PacketPortableTeleporter implements IMessageHandler<PortableTelepor
Mekanism.packetHandler.sendToAllAround(new PortalFXMessage(new Coord4D(player)), coords.getTargetPoint(40D));
TileEntityTeleporter.teleportPlayerTo((EntityPlayerMP)player, coords, teleporter);
TileEntityTeleporter.alignPlayer((EntityPlayerMP)player, coords);
world.playSoundAtEntity(player, "mob.endermen.portal", 1.0F, 1.0F);
Mekanism.packetHandler.sendToReceivers(new PortalFXMessage(coords), new Range4D(coords));

View file

@ -34,6 +34,7 @@ import net.minecraft.world.WorldServer;
import net.minecraftforge.common.ForgeChunkManager;
import net.minecraftforge.common.ForgeChunkManager.Ticket;
import net.minecraftforge.common.ForgeChunkManager.Type;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.*;
@ -347,6 +348,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements ICo
if(entity instanceof EntityPlayerMP)
{
teleportPlayerTo((EntityPlayerMP)entity, closestCoords, teleporter);
alignPlayer((EntityPlayerMP)entity, closestCoords);
}
else {
teleportEntityTo(entity, closestCoords, teleporter);
@ -435,6 +437,43 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements ICo
}
}
public static void alignPlayer(EntityPlayerMP player, Coord4D coord)
{
Coord4D upperCoord = coord.getFromSide(ForgeDirection.UP);
ForgeDirection side = null;
float yaw = player.rotationYaw;
for(ForgeDirection iterSide : MekanismUtils.SIDE_DIRS)
{
if(upperCoord.getFromSide(iterSide).isAirBlock(player.worldObj))
{
side = iterSide;
break;
}
}
if(side != null)
{
switch(side)
{
case NORTH:
yaw = 180;
break;
case SOUTH:
yaw = 0;
break;
case WEST:
yaw = 90;
break;
case EAST:
yaw = 270;
break;
}
}
player.playerNetServerHandler.setPlayerLocation(player.posX, player.posY, player.posZ, yaw, player.rotationPitch);
}
public List<Entity> getToTeleport()
{
List<Entity> entities = worldObj.getEntitiesWithinAABB(Entity.class, teleportBounds);