Use UUID instead of entity reference in teleporter calculations, fixed entity teleport
This commit is contained in:
parent
176f82ab2f
commit
4227439a96
4 changed files with 90 additions and 13 deletions
|
@ -27,8 +27,8 @@ import mekanism.common.network.PacketEditFilter;
|
|||
import mekanism.common.network.PacketEditFilter.EditFilterMessage;
|
||||
import mekanism.common.network.PacketElectricBowState;
|
||||
import mekanism.common.network.PacketElectricBowState.ElectricBowStateMessage;
|
||||
import mekanism.common.network.PacketPersonalChest;
|
||||
import mekanism.common.network.PacketPersonalChest.PersonalChestMessage;
|
||||
import mekanism.common.network.PacketEntityMove;
|
||||
import mekanism.common.network.PacketEntityMove.EntityMoveMessage;
|
||||
import mekanism.common.network.PacketFlamethrowerData;
|
||||
import mekanism.common.network.PacketFlamethrowerData.FlamethrowerDataMessage;
|
||||
import mekanism.common.network.PacketJetpackData;
|
||||
|
@ -41,6 +41,8 @@ import mekanism.common.network.PacketNewFilter;
|
|||
import mekanism.common.network.PacketNewFilter.NewFilterMessage;
|
||||
import mekanism.common.network.PacketOredictionificatorGui;
|
||||
import mekanism.common.network.PacketOredictionificatorGui.OredictionificatorGuiMessage;
|
||||
import mekanism.common.network.PacketPersonalChest;
|
||||
import mekanism.common.network.PacketPersonalChest.PersonalChestMessage;
|
||||
import mekanism.common.network.PacketPortableTankState;
|
||||
import mekanism.common.network.PacketPortableTankState.PortableTankStateMessage;
|
||||
import mekanism.common.network.PacketPortableTeleporter;
|
||||
|
@ -131,6 +133,7 @@ public class PacketHandler
|
|||
netHandler.registerMessage(PacketFlamethrowerData.class, FlamethrowerDataMessage.class, 27, Side.CLIENT);
|
||||
netHandler.registerMessage(PacketFlamethrowerData.class, FlamethrowerDataMessage.class, 27, Side.SERVER);
|
||||
netHandler.registerMessage(PacketDropperUse.class, DropperUseMessage.class, 28, Side.SERVER);
|
||||
netHandler.registerMessage(PacketEntityMove.class, EntityMoveMessage.class, 29, Side.CLIENT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
61
src/main/java/mekanism/common/network/PacketEntityMove.java
Normal file
61
src/main/java/mekanism/common/network/PacketEntityMove.java
Normal file
|
@ -0,0 +1,61 @@
|
|||
package mekanism.common.network;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import mekanism.api.Pos3D;
|
||||
import mekanism.common.PacketHandler;
|
||||
import mekanism.common.network.PacketEntityMove.EntityMoveMessage;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
|
||||
public class PacketEntityMove implements IMessageHandler<EntityMoveMessage, IMessage>
|
||||
{
|
||||
@Override
|
||||
public IMessage onMessage(EntityMoveMessage message, MessageContext context)
|
||||
{
|
||||
EntityPlayer player = PacketHandler.getPlayer(context);
|
||||
Entity entity = player.worldObj.getEntityByID(message.entityId);
|
||||
|
||||
if(entity != null)
|
||||
{
|
||||
entity.setLocationAndAngles(message.pos.xPos, message.pos.yPos, message.pos.zPos, entity.rotationYaw, entity.rotationPitch);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static class EntityMoveMessage implements IMessage
|
||||
{
|
||||
public int entityId;
|
||||
|
||||
public Pos3D pos;
|
||||
|
||||
public EntityMoveMessage() {}
|
||||
|
||||
public EntityMoveMessage(Entity e)
|
||||
{
|
||||
entityId = e.getEntityId();
|
||||
pos = new Pos3D(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf dataStream)
|
||||
{
|
||||
dataStream.writeInt(entityId);
|
||||
|
||||
dataStream.writeFloat((float)pos.xPos);
|
||||
dataStream.writeFloat((float)pos.yPos);
|
||||
dataStream.writeFloat((float)pos.zPos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf dataStream)
|
||||
{
|
||||
entityId = dataStream.readInt();
|
||||
|
||||
pos = new Pos3D(dataStream.readFloat(), dataStream.readFloat(), dataStream.readFloat());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -107,7 +107,7 @@ public class PacketPortableTeleporter implements IMessageHandler<PortableTelepor
|
|||
if(teleporter != null)
|
||||
{
|
||||
try {
|
||||
teleporter.didTeleport.add(player);
|
||||
teleporter.didTeleport.add(player.getPersistentID());
|
||||
teleporter.teleDelay = 5;
|
||||
|
||||
item.setEnergy(itemstack, item.getEnergy(itemstack) - item.calculateEnergyCost(player, coords));
|
||||
|
|
|
@ -7,9 +7,11 @@ import java.util.HashSet;
|
|||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import mekanism.api.Chunk3D;
|
||||
import mekanism.api.Coord4D;
|
||||
import mekanism.api.Range4D;
|
||||
import mekanism.common.Mekanism;
|
||||
import mekanism.common.MekanismBlocks;
|
||||
import mekanism.common.PacketHandler;
|
||||
|
@ -20,6 +22,7 @@ import mekanism.common.frequency.Frequency;
|
|||
import mekanism.common.frequency.FrequencyManager;
|
||||
import mekanism.common.frequency.IFrequencyHandler;
|
||||
import mekanism.common.integration.IComputerIntegration;
|
||||
import mekanism.common.network.PacketEntityMove.EntityMoveMessage;
|
||||
import mekanism.common.network.PacketPortalFX.PortalFXMessage;
|
||||
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
||||
import mekanism.common.security.ISecurityTile;
|
||||
|
@ -53,7 +56,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements ICo
|
|||
|
||||
public AxisAlignedBB teleportBounds = null;
|
||||
|
||||
public Set<Entity> didTeleport = new HashSet<Entity>();
|
||||
public Set<UUID> didTeleport = new HashSet<UUID>();
|
||||
|
||||
public int teleDelay = 0;
|
||||
|
||||
|
@ -271,14 +274,20 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements ICo
|
|||
|
||||
public void cleanTeleportCache()
|
||||
{
|
||||
List<Entity> list = worldObj.getEntitiesWithinAABB(Entity.class, teleportBounds);
|
||||
Set<Entity> teleportCopy = (Set<Entity>)((HashSet<Entity>)didTeleport).clone();
|
||||
|
||||
for(Entity entity : teleportCopy)
|
||||
List<UUID> list = new ArrayList<UUID>();
|
||||
|
||||
for(Entity e : (List<Entity>)worldObj.getEntitiesWithinAABB(Entity.class, teleportBounds))
|
||||
{
|
||||
if(!list.contains(entity))
|
||||
list.add(e.getPersistentID());
|
||||
}
|
||||
|
||||
Set<UUID> teleportCopy = (Set<UUID>)((HashSet<UUID>)didTeleport).clone();
|
||||
|
||||
for(UUID id : teleportCopy)
|
||||
{
|
||||
if(!list.contains(id))
|
||||
{
|
||||
didTeleport.remove(entity);
|
||||
didTeleport.remove(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -362,7 +371,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements ICo
|
|||
|
||||
if(teleporter != null)
|
||||
{
|
||||
teleporter.didTeleport.add(entity);
|
||||
teleporter.didTeleport.add(entity.getPersistentID());
|
||||
teleporter.teleDelay = 5;
|
||||
|
||||
if(entity instanceof EntityPlayerMP)
|
||||
|
@ -450,11 +459,15 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements ICo
|
|||
{
|
||||
e.copyDataFrom(entity, true);
|
||||
world.spawnEntityInWorld(e);
|
||||
teleporter.didTeleport.add(e);
|
||||
teleporter.didTeleport.add(e.getPersistentID());
|
||||
}
|
||||
|
||||
entity.isDead = true;
|
||||
}
|
||||
else {
|
||||
entity.setLocationAndAngles(coord.xCoord+0.5, coord.yCoord+1, coord.zCoord+0.5, entity.rotationYaw, entity.rotationPitch);
|
||||
Mekanism.packetHandler.sendToReceivers(new EntityMoveMessage(entity), new Range4D(new Coord4D(entity)));
|
||||
}
|
||||
}
|
||||
|
||||
public static void alignPlayer(EntityPlayerMP player, Coord4D coord)
|
||||
|
@ -501,7 +514,7 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements ICo
|
|||
|
||||
for(Entity entity : entities)
|
||||
{
|
||||
if(!didTeleport.contains(entity))
|
||||
if(!didTeleport.contains(entity.getPersistentID()))
|
||||
{
|
||||
ret.add(entity);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue