diff options
Diffstat (limited to 'src/main/java/cat/freya/khs/util/packet')
4 files changed, 151 insertions, 0 deletions
diff --git a/src/main/java/cat/freya/khs/util/packet/AbstractPacket.java b/src/main/java/cat/freya/khs/util/packet/AbstractPacket.java new file mode 100644 index 0000000..cede0e1 --- /dev/null +++ b/src/main/java/cat/freya/khs/util/packet/AbstractPacket.java @@ -0,0 +1,29 @@ +package cat.freya.khs.util.packet; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.PacketContainer; +import org.bukkit.entity.Player; + +import java.lang.reflect.InvocationTargetException; + +public class AbstractPacket { + + private static final ProtocolManager protocolManager; + static { + protocolManager = ProtocolLibrary.getProtocolManager(); + } + + protected final PacketContainer packet; + + protected AbstractPacket(PacketType type){ + packet = protocolManager.createPacket(type); + packet.getModifier().writeDefaults(); + } + + public void send(Player player){ + protocolManager.sendServerPacket(player, packet); + } + +} diff --git a/src/main/java/cat/freya/khs/util/packet/BlockChangePacket.java b/src/main/java/cat/freya/khs/util/packet/BlockChangePacket.java new file mode 100644 index 0000000..7b71b0d --- /dev/null +++ b/src/main/java/cat/freya/khs/util/packet/BlockChangePacket.java @@ -0,0 +1,24 @@ +package cat.freya.khs.util.packet; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.WrappedBlockData; +import org.bukkit.Location; +import org.bukkit.Material; +import org.jetbrains.annotations.NotNull; + +public class BlockChangePacket extends AbstractPacket { + + public BlockChangePacket(){ + super(PacketType.Play.Server.BLOCK_CHANGE); + } + + public void setBlockPosition(@NotNull Location location){ + super.packet.getBlockPositionModifier().write(0, new BlockPosition(location.toVector())); + } + + public void setMaterial(Material material){ + super.packet.getBlockData().write(0, WrappedBlockData.createData(material)); + } + +} diff --git a/src/main/java/cat/freya/khs/util/packet/EntityMetadataPacket.java b/src/main/java/cat/freya/khs/util/packet/EntityMetadataPacket.java new file mode 100644 index 0000000..04f1ad5 --- /dev/null +++ b/src/main/java/cat/freya/khs/util/packet/EntityMetadataPacket.java @@ -0,0 +1,69 @@ +package cat.freya.khs.util.packet; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.wrappers.WrappedDataValue; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.comphenix.protocol.wrappers.WrappedWatchableObject; + +import cat.freya.khs.Main; + +import org.bukkit.entity.Entity; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +public class EntityMetadataPacket extends AbstractPacket { + + private final WrappedDataWatcher watcher; + private final WrappedDataWatcher.Serializer serializer; + + public EntityMetadataPacket(){ + super(PacketType.Play.Server.ENTITY_METADATA); + watcher = new WrappedDataWatcher(); + serializer = WrappedDataWatcher.Registry.get(Byte.class); + } + + public void setEntity(@NotNull Entity target){ + super.packet.getIntegers().write(0, target.getEntityId()); + watcher.setEntity(target); + } + + public void setGlow(boolean glowing){ + if (glowing) { + watcher.setObject(0, serializer, (byte) (0x40)); + } else { + watcher.setObject(0, serializer, (byte) (0x0)); + } + } + + public void writeMetadata() { + + if (Main.getInstance().supports(19, 3)) { + + final List<WrappedDataValue> wrappedDataValueList = new ArrayList<>(); + + for(final WrappedWatchableObject entry : watcher.getWatchableObjects()) { + if(entry == null) continue; + + final WrappedDataWatcher.WrappedDataWatcherObject watcherObject = entry.getWatcherObject(); + wrappedDataValueList.add( + new WrappedDataValue( + watcherObject.getIndex(), + watcherObject.getSerializer(), + entry.getRawValue() + ) + ); + } + + packet.getDataValueCollectionModifier().write(0, wrappedDataValueList); + + } else { + + packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); + + } + + } + +} diff --git a/src/main/java/cat/freya/khs/util/packet/EntityTeleportPacket.java b/src/main/java/cat/freya/khs/util/packet/EntityTeleportPacket.java new file mode 100644 index 0000000..eec03d0 --- /dev/null +++ b/src/main/java/cat/freya/khs/util/packet/EntityTeleportPacket.java @@ -0,0 +1,29 @@ +package cat.freya.khs.util.packet; + +import com.comphenix.protocol.PacketType; +import org.bukkit.entity.Entity; +import org.jetbrains.annotations.NotNull; + +public class EntityTeleportPacket extends AbstractPacket { + + public EntityTeleportPacket(){ + super(PacketType.Play.Server.ENTITY_TELEPORT); + } + + public void setEntity(@NotNull Entity entity){ + super.packet.getIntegers().write(0, entity.getEntityId()); + } + + public void setX(double x){ + super.packet.getDoubles().write(0, x); + } + + public void setY(double y){ + super.packet.getDoubles().write(1, y); + } + + public void setZ(double z){ + super.packet.getDoubles().write(2, z); + } + +} |