use of org.dragonet.proxy.network.cache.CachedEntity in project DragonProxy by DragonetMC.
the class PEMovePlayerPacketTranslator method translate.
public Packet[] translate(UpstreamSession session, MovePlayerPacket packet) {
CachedEntity entity = session.getEntityCache().getClientEntity();
if (entity.riding != 0 && packet.ridingRuntimeId != 0) {
// Riding case
ClientVehicleMovePacket pk = new ClientVehicleMovePacket(packet.position.x, packet.position.y - EntityType.PLAYER.getOffset(), packet.position.z, packet.yaw, packet.pitch);
session.getDownstream().send(pk);
} else {
// not riding
ClientPlayerPositionRotationPacket pk = new ClientPlayerPositionRotationPacket(packet.onGround, packet.position.x, // To simplify the movements
ceilToHalf(packet.position.y - EntityType.PLAYER.getOffset()), packet.position.z, packet.yaw, packet.pitch);
// Special blocks handling
boolean isColliding = false;
BlockPosition blockPos = new BlockPosition(NukkitMath.floorDouble(packet.position.x), NukkitMath.floorDouble(packet.position.y), NukkitMath.floorDouble(packet.position.z));
// System.out.println("block " + blockPos.toString());
try {
ItemEntry PEBlock = session.getChunkCache().translateBlock(blockPos.asPosition());
if (PEBlock != null) {
Block b = Block.get(PEBlock.getId(), PEBlock.getPEDamage(), blockPos);
if (b != null && b.collidesWithBB(session.getEntityCache().getClientEntity().boundingBox.clone())) {
DragonProxy.getInstance().getLogger().info("Player position : " + entity.x + ", " + entity.y + ", " + entity.z + " collide with " + b.getClass().getSimpleName() + " on " + blockPos.toString());
isColliding = true;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
entity.absoluteMove(pk.getX(), pk.getY(), pk.getZ(), (float) pk.getYaw(), (float) pk.getPitch());
if (!isColliding) {
session.getDownstream().send(pk);
session.getChunkCache().sendOrderedChunks();
}
}
return null;
}
use of org.dragonet.proxy.network.cache.CachedEntity in project DragonProxy by DragonetMC.
the class PCAnimationPacketTranslator method translate.
public PEPacket[] translate(UpstreamSession session, ServerEntityAnimationPacket packet) {
CachedEntity entity = session.getEntityCache().getByRemoteEID(packet.getEntityId());
if (entity == null) {
return null;
}
AnimatePacket pk = new AnimatePacket();
switch(packet.getAnimation()) {
case CRITICAL_HIT:
pk.action = AnimatePacket.ACTION_CRITICAL_HIT;
break;
case DAMAGE:
break;
case EAT_FOOD:
break;
case ENCHANTMENT_CRITICAL_HIT:
break;
case LEAVE_BED:
pk.action = AnimatePacket.ANIMATION_LEAVE_BED;
break;
case SWING_ARM:
pk.action = AnimatePacket.ANIMATION_SWING_ARM;
}
pk.eid = entity.proxyEid;
return new PEPacket[] { pk };
}
use of org.dragonet.proxy.network.cache.CachedEntity in project DragonProxy by DragonetMC.
the class PCEntityRotationPacketTranslator method translate.
public PEPacket[] translate(UpstreamSession session, ServerEntityRotationPacket packet) {
CachedEntity entity = session.getEntityCache().getByRemoteEID(packet.getEntityId());
if (entity == null) {
if (packet.getEntityId() == (int) session.getDataCache().get(CacheKey.PLAYER_EID)) {
entity = session.getEntityCache().getClientEntity();
} else {
return null;
}
}
entity.relativeMove(packet.getMovementX(), packet.getMovementY(), packet.getMovementZ(), packet.getYaw(), packet.getPitch());
if (entity.shouldMove) {
MoveEntityPacket pk = new MoveEntityPacket();
pk.rtid = entity.proxyEid;
pk.yaw = (byte) (entity.yaw / (360d / 256d));
pk.headYaw = (byte) (entity.headYaw / (360d / 256d));
pk.pitch = (byte) (entity.pitch / (360d / 256d));
pk.position = new Vector3F((float) entity.x, (float) entity.y + entity.peType.getOffset(), (float) entity.z);
pk.onGround = packet.isOnGround();
entity.shouldMove = false;
return new PEPacket[] { pk };
}
return null;
}
use of org.dragonet.proxy.network.cache.CachedEntity in project DragonProxy by DragonetMC.
the class PCDestroyEntitiesPacketTranslator method translate.
public PEPacket[] translate(UpstreamSession session, ServerEntityDestroyPacket packet) {
PEPacket[] ret = new PEPacket[packet.getEntityIds().length];
for (int i = 0; i < ret.length; i++) {
CachedEntity e = session.getEntityCache().removeByRemoteEID(packet.getEntityIds()[i]);
if (e == null) {
continue;
}
ret[i] = new RemoveEntityPacket();
((RemoveEntityPacket) ret[i]).eid = e.proxyEid;
}
return ret;
}
use of org.dragonet.proxy.network.cache.CachedEntity in project DragonProxy by DragonetMC.
the class PCEntityPositionPacketTranslator method translate.
public PEPacket[] translate(UpstreamSession session, ServerEntityPositionPacket packet) {
CachedEntity entity = session.getEntityCache().getByRemoteEID(packet.getEntityId());
if (entity == null) {
if (packet.getEntityId() == (int) session.getDataCache().get(CacheKey.PLAYER_EID)) {
entity = session.getEntityCache().getClientEntity();
} else {
return null;
}
}
entity.relativeMove(packet.getMovementX(), packet.getMovementY(), packet.getMovementZ(), packet.getYaw(), packet.getPitch());
if (entity.shouldMove) {
MoveEntityPacket pk = new MoveEntityPacket();
pk.rtid = entity.proxyEid;
pk.yaw = (byte) (entity.yaw / (360d / 256d));
pk.headYaw = (byte) (entity.headYaw / (360d / 256d));
pk.pitch = (byte) (entity.pitch / (360d / 256d));
pk.position = new Vector3F((float) entity.x, (float) entity.y + entity.peType.getOffset(), (float) entity.z);
pk.onGround = packet.isOnGround();
entity.shouldMove = false;
return new PEPacket[] { pk };
}
return null;
}
Aggregations