Search in sources :

Example 1 with PacketPlayOutEntityTeleportHandle

use of com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityTeleportHandle in project BKCommonLib by bergerhealer.

the class VehicleMountHandler_BaseImpl method handlePacketSend.

/**
 * Call this to handle a relevant packet that was sent from the server to the client
 *
 * @param packet The packet sent
 */
public final void handlePacketSend(CommonPacket packet) {
    synchronizeAndQueuePackets(() -> {
        // Refresh player dimension if none could be set (temporary player, pre-join)
        if (this._playerDimension == null) {
            this._playerDimension = PlayerUtil.getPlayerDimension(this._player);
        }
        // Event handler for further implementations
        onPacketSend(packet);
        // Handle packets
        PacketType type = packet.getType();
        if (type == PacketType.OUT_ENTITY_DESTROY) {
            PacketPlayOutEntityDestroyHandle dp = PacketPlayOutEntityDestroyHandle.createHandle(packet.getHandle());
            if (dp.hasMultipleEntityIds()) {
                for (int entityId : dp.getEntityIds()) {
                    handleDespawn(entityId);
                }
            } else {
                handleDespawn(dp.getSingleEntityId());
            }
        } else if (type == PacketType.OUT_RESPAWN) {
            DimensionType dimension;
            try {
                dimension = packet.read(PacketType.OUT_RESPAWN.dimensionType);
            } catch (IllegalArgumentException ex) {
                // Logging.LOGGER_NETWORK.log(Level.WARNING, "Failed to decide dimension from respawn packet", ex);
                dimension = null;
            }
            if (dimension != null && !dimension.equals(this._playerDimension)) {
                this._playerDimension = dimension;
                handleReset();
            }
        } else if (type == PacketType.OUT_CAMERA) {
            // Called when vanilla/server/Bukkit starts or stops spectating an Entity
            // We remember this choice for later
            this._vanillaSpectatedEntity = packet.read(PacketType.OUT_CAMERA.entityId);
            // If currently spectating something already, override
            int len = this._spectatorStack.length;
            if (len > 0) {
                packet.write(PacketType.OUT_CAMERA.entityId, this._spectatorStack[len - 1]);
            }
        } else {
            if (this.isPositionTracked()) {
                // Also decode position
                if (type == PacketType.OUT_ENTITY_SPAWN) {
                    PacketPlayOutSpawnEntityHandle handle = PacketPlayOutSpawnEntityHandle.createHandle(packet.getHandle());
                    handleSpawn(handle.getEntityId(), handle.getCommonEntityType(), new Vector(handle.getPosX(), handle.getPosY(), handle.getPosZ()));
                } else if (type == PacketType.OUT_ENTITY_SPAWN_LIVING) {
                    PacketPlayOutSpawnEntityLivingHandle handle = PacketPlayOutSpawnEntityLivingHandle.createHandle(packet.getHandle());
                    handleSpawn(handle.getEntityId(), handle.getCommonEntityType(), new Vector(handle.getPosX(), handle.getPosY(), handle.getPosZ()));
                } else if (type == PacketType.OUT_ENTITY_SPAWN_NAMED) {
                    PacketPlayOutNamedEntitySpawnHandle handle = PacketPlayOutNamedEntitySpawnHandle.createHandle(packet.getHandle());
                    handleSpawn(handle.getEntityId(), CommonEntityType.PLAYER, new Vector(handle.getPosX(), handle.getPosY(), handle.getPosZ()));
                } else if (type == PacketType.OUT_ENTITY_TELEPORT) {
                    PacketPlayOutEntityTeleportHandle handle = PacketPlayOutEntityTeleportHandle.createHandle(packet.getHandle());
                    handleMove(handle.getEntityId(), (position) -> {
                        position.setX(handle.getPosX());
                        position.setY(handle.getPosY());
                        position.setZ(handle.getPosZ());
                    });
                } else if (type == PacketType.OUT_ENTITY_MOVE || type == PacketType.OUT_ENTITY_MOVE_LOOK) {
                    PacketPlayOutEntityHandle handle = PacketPlayOutEntityHandle.createHandle(packet.getHandle());
                    handleMove(handle.getEntityId(), (position) -> {
                        position.setX(position.getX() + handle.getDeltaX());
                        position.setY(position.getY() + handle.getDeltaY());
                        position.setZ(position.getZ() + handle.getDeltaZ());
                    });
                }
            } else {
                // No decoding/tracking of position
                if (type == PacketType.OUT_ENTITY_SPAWN) {
                    PacketPlayOutSpawnEntityHandle handle = PacketPlayOutSpawnEntityHandle.createHandle(packet.getHandle());
                    handleSpawn(handle.getEntityId(), handle.getCommonEntityType(), null);
                } else if (type == PacketType.OUT_ENTITY_SPAWN_LIVING) {
                    PacketPlayOutSpawnEntityLivingHandle handle = PacketPlayOutSpawnEntityLivingHandle.createHandle(packet.getHandle());
                    handleSpawn(handle.getEntityId(), handle.getCommonEntityType(), null);
                } else if (type == PacketType.OUT_ENTITY_SPAWN_NAMED) {
                    PacketPlayOutNamedEntitySpawnHandle handle = PacketPlayOutNamedEntitySpawnHandle.createHandle(packet.getHandle());
                    handleSpawn(handle.getEntityId(), CommonEntityType.PLAYER, null);
                }
            }
        }
    });
}
Also used : Arrays(java.util.Arrays) PacketPlayOutCameraHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutCameraHandle) PacketPlayOutEntityDestroyHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityDestroyHandle) CommonPlugin(com.bergerkiller.bukkit.common.internal.CommonPlugin) PacketPlayOutSpawnEntityHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutSpawnEntityHandle) Player(org.bukkit.entity.Player) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) PacketPlayOutSpawnEntityLivingHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutSpawnEntityLivingHandle) MathUtil(com.bergerkiller.bukkit.common.utils.MathUtil) VehicleMountController(com.bergerkiller.bukkit.common.controller.VehicleMountController) CommonEntityType(com.bergerkiller.bukkit.common.entity.CommonEntityType) DimensionType(com.bergerkiller.bukkit.common.resources.DimensionType) PacketType(com.bergerkiller.bukkit.common.protocol.PacketType) PacketPlayOutEntityHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityHandle) CommonPacket(com.bergerkiller.bukkit.common.protocol.CommonPacket) IntHashMap(com.bergerkiller.bukkit.common.wrappers.IntHashMap) PacketUtil(com.bergerkiller.bukkit.common.utils.PacketUtil) Logging(com.bergerkiller.bukkit.common.Logging) PacketPlayOutEntityTeleportHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityTeleportHandle) PlayerUtil(com.bergerkiller.bukkit.common.utils.PlayerUtil) Consumer(java.util.function.Consumer) Vector(org.bukkit.util.Vector) PacketPlayOutNamedEntitySpawnHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutNamedEntitySpawnHandle) List(java.util.List) PacketPlayOutMountHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutMountHandle) PacketHandle(com.bergerkiller.generated.net.minecraft.network.protocol.PacketHandle) Queue(java.util.Queue) Collections(java.util.Collections) ConcurrentLinkedQueue(java.util.concurrent.ConcurrentLinkedQueue) DimensionType(com.bergerkiller.bukkit.common.resources.DimensionType) PacketPlayOutEntityHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityHandle) PacketType(com.bergerkiller.bukkit.common.protocol.PacketType) PacketPlayOutSpawnEntityHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutSpawnEntityHandle) PacketPlayOutEntityDestroyHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityDestroyHandle) Vector(org.bukkit.util.Vector) PacketPlayOutEntityTeleportHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityTeleportHandle) PacketPlayOutNamedEntitySpawnHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutNamedEntitySpawnHandle) PacketPlayOutSpawnEntityLivingHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutSpawnEntityLivingHandle)

Example 2 with PacketPlayOutEntityTeleportHandle

use of com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityTeleportHandle in project BKCommonLib by bergerhealer.

the class MapPlayerInput method updateInputInterception.

private void updateInputInterception(boolean intercept) {
    if (!intercept && _fakeMountShown) {
        _fakeMountShown = false;
        // Despawn the mount
        PacketUtil.sendPacket(player, PacketType.OUT_ENTITY_DESTROY.newInstanceSingle(this._fakeMountId));
        // Resend current player position to the player
        Location loc = this.player.getLocation();
        PacketPlayOutPositionHandle positionPacket = PacketPlayOutPositionHandle.createAbsolute(loc);
        PacketUtil.sendPacket(player, positionPacket);
        return;
    }
    if (intercept) {
        // Get expected position of the mount
        Vector pos = player.getLocation().toVector();
        pos.setZ(pos.getZ() + 0.1);
        pos.setY(pos.getY() + 0.002);
        if (!_fakeMountShown) {
            _fakeMountShown = true;
            // Generate unique mount Id (we can re-use it)
            if (this._fakeMountId == -1) {
                this._fakeMountId = EntityUtil.getUniqueEntityId();
            }
            // Store initial position
            this._fakeMountLastPos = pos;
            // Spawn the mount
            {
                DataWatcher data = new DataWatcher();
                data.set(EntityHandle.DATA_FLAGS, (byte) (EntityHandle.DATA_FLAG_INVISIBLE));
                data.set(EntityLivingHandle.DATA_HEALTH, 10.0F);
                PacketPlayOutSpawnEntityLivingHandle packet = PacketPlayOutSpawnEntityLivingHandle.createNew();
                packet.setEntityId(this._fakeMountId);
                packet.setEntityUUID(UUID.randomUUID());
                packet.setEntityType(EntityType.CHICKEN);
                packet.setPosX(pos.getX());
                packet.setPosY(pos.getY());
                packet.setPosZ(pos.getZ());
                PacketUtil.sendEntityLivingSpawnPacket(player, packet, data);
                // Send attribute for max health = 0 to hide the health bar
                PacketUtil.sendPacket(player, PacketPlayOutUpdateAttributesHandle.createZeroMaxHealth(this._fakeMountId));
            }
            sendMountPacket();
        }
        // When player position changes, refresh mount position with a simple teleport packet
        if (this._fakeMountId != -1 && !pos.equals(this._fakeMountLastPos)) {
            this._fakeMountLastPos = pos;
            PacketPlayOutEntityTeleportHandle tp_packet = PacketPlayOutEntityTeleportHandle.createNew(this._fakeMountId, pos.getX(), pos.getY(), pos.getZ(), 0.0f, 0.0f, false);
            PacketUtil.sendPacket(player, tp_packet);
        }
    }
}
Also used : Vector(org.bukkit.util.Vector) PacketPlayOutEntityTeleportHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityTeleportHandle) PacketPlayOutPositionHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutPositionHandle) Location(org.bukkit.Location) DataWatcher(com.bergerkiller.bukkit.common.wrappers.DataWatcher) PacketPlayOutSpawnEntityLivingHandle(com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutSpawnEntityLivingHandle)

Aggregations

PacketPlayOutEntityTeleportHandle (com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityTeleportHandle)2 PacketPlayOutSpawnEntityLivingHandle (com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutSpawnEntityLivingHandle)2 Vector (org.bukkit.util.Vector)2 Logging (com.bergerkiller.bukkit.common.Logging)1 VehicleMountController (com.bergerkiller.bukkit.common.controller.VehicleMountController)1 CommonEntityType (com.bergerkiller.bukkit.common.entity.CommonEntityType)1 CommonPlugin (com.bergerkiller.bukkit.common.internal.CommonPlugin)1 CommonPacket (com.bergerkiller.bukkit.common.protocol.CommonPacket)1 PacketType (com.bergerkiller.bukkit.common.protocol.PacketType)1 DimensionType (com.bergerkiller.bukkit.common.resources.DimensionType)1 MathUtil (com.bergerkiller.bukkit.common.utils.MathUtil)1 PacketUtil (com.bergerkiller.bukkit.common.utils.PacketUtil)1 PlayerUtil (com.bergerkiller.bukkit.common.utils.PlayerUtil)1 DataWatcher (com.bergerkiller.bukkit.common.wrappers.DataWatcher)1 IntHashMap (com.bergerkiller.bukkit.common.wrappers.IntHashMap)1 PacketHandle (com.bergerkiller.generated.net.minecraft.network.protocol.PacketHandle)1 PacketPlayOutCameraHandle (com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutCameraHandle)1 PacketPlayOutEntityDestroyHandle (com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityDestroyHandle)1 PacketPlayOutEntityHandle (com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutEntityHandle)1 PacketPlayOutMountHandle (com.bergerkiller.generated.net.minecraft.network.protocol.game.PacketPlayOutMountHandle)1