Teleport now specifies orientation, closes #2977
This commit is contained in:
parent
6466463a63
commit
f5c48f60e6
2 changed files with 47 additions and 8 deletions
|
@ -1,10 +1,10 @@
|
||||||
package mekanism.common.network;
|
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 io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
import mekanism.api.Range4D;
|
import mekanism.api.Range4D;
|
||||||
import mekanism.common.Mekanism;
|
import mekanism.common.Mekanism;
|
||||||
|
@ -22,10 +22,9 @@ import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.network.NetHandlerPlayServer;
|
import net.minecraft.network.NetHandlerPlayServer;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import cpw.mods.fml.common.FMLCommonHandler;
|
|
||||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
import java.util.ArrayList;
|
||||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
import java.util.List;
|
||||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
|
||||||
|
|
||||||
public class PacketPortableTeleporter implements IMessageHandler<PortableTeleporterMessage, IMessage>
|
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));
|
Mekanism.packetHandler.sendToAllAround(new PortalFXMessage(new Coord4D(player)), coords.getTargetPoint(40D));
|
||||||
TileEntityTeleporter.teleportPlayerTo((EntityPlayerMP)player, coords, teleporter);
|
TileEntityTeleporter.teleportPlayerTo((EntityPlayerMP)player, coords, teleporter);
|
||||||
|
TileEntityTeleporter.alignPlayer((EntityPlayerMP)player, coords);
|
||||||
|
|
||||||
world.playSoundAtEntity(player, "mob.endermen.portal", 1.0F, 1.0F);
|
world.playSoundAtEntity(player, "mob.endermen.portal", 1.0F, 1.0F);
|
||||||
Mekanism.packetHandler.sendToReceivers(new PortalFXMessage(coords), new Range4D(coords));
|
Mekanism.packetHandler.sendToReceivers(new PortalFXMessage(coords), new Range4D(coords));
|
||||||
|
|
|
@ -34,6 +34,7 @@ import net.minecraft.world.WorldServer;
|
||||||
import net.minecraftforge.common.ForgeChunkManager;
|
import net.minecraftforge.common.ForgeChunkManager;
|
||||||
import net.minecraftforge.common.ForgeChunkManager.Ticket;
|
import net.minecraftforge.common.ForgeChunkManager.Ticket;
|
||||||
import net.minecraftforge.common.ForgeChunkManager.Type;
|
import net.minecraftforge.common.ForgeChunkManager.Type;
|
||||||
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
@ -347,6 +348,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements ICo
|
||||||
if(entity instanceof EntityPlayerMP)
|
if(entity instanceof EntityPlayerMP)
|
||||||
{
|
{
|
||||||
teleportPlayerTo((EntityPlayerMP)entity, closestCoords, teleporter);
|
teleportPlayerTo((EntityPlayerMP)entity, closestCoords, teleporter);
|
||||||
|
alignPlayer((EntityPlayerMP)entity, closestCoords);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
teleportEntityTo(entity, closestCoords, teleporter);
|
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()
|
public List<Entity> getToTeleport()
|
||||||
{
|
{
|
||||||
List<Entity> entities = worldObj.getEntitiesWithinAABB(Entity.class, teleportBounds);
|
List<Entity> entities = worldObj.getEntitiesWithinAABB(Entity.class, teleportBounds);
|
||||||
|
|
Loading…
Reference in a new issue