Java源码示例:com.comphenix.protocol.reflect.StructureModifier
示例1
/**
* Construct a chunk packet processor from a givne MAP_CHUNK packet.
* @param packet - the map chunk packet.
* @return The chunk packet processor.
*/
public static ChunkPacketProcessor fromMapPacket(PacketContainer packet, World world) {
if (!packet.getType().equals(PacketType.Play.Server.MAP_CHUNK))
throw new IllegalArgumentException(packet + " must be a MAP_CHUNK packet.");
StructureModifier<Integer> ints = packet.getIntegers();
StructureModifier<byte[]> byteArray = packet.getByteArrays();
// Create an info objects
ChunkPacketProcessor processor = new ChunkPacketProcessor();
processor.world = world;
processor.chunkX = ints.read(0); // packet.a;
processor.chunkZ = ints.read(1); // packet.b;
processor.chunkMask = ints.read(2); // packet.c;
processor.extraMask = ints.read(3); // packet.d;
processor.data = byteArray.read(1); // packet.inflatedBuffer;
processor.startIndex = 0;
if (packet.getBooleans().size() > 0) {
processor.hasContinous = packet.getBooleans().read(0);
}
return processor;
}
示例2
/**
* Sends a blanked out packet to the given player in order to hide the inventory.
*
* @param player the player to send the blank inventory packet to
*/
public void sendBlankInventoryPacket(Player player) {
ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
PacketContainer inventoryPacket = protocolManager.createPacket(PacketType.Play.Server.WINDOW_ITEMS);
inventoryPacket.getIntegers().write(0, PLAYER_INVENTORY);
int inventorySize = CRAFTING_SIZE + ARMOR_SIZE + MAIN_SIZE + HOTBAR_SIZE;
ItemStack[] blankInventory = new ItemStack[inventorySize];
Arrays.fill(blankInventory, new ItemStack(Material.AIR));
//old minecraft versions
StructureModifier<ItemStack[]> itemArrayModifier = inventoryPacket.getItemArrayModifier();
if (itemArrayModifier.size() > 0) {
itemArrayModifier.write(0, blankInventory);
} else {
//minecraft versions above 1.11
StructureModifier<List<ItemStack>> itemListModifier = inventoryPacket.getItemListModifier();
itemListModifier.write(0, Arrays.asList(blankInventory));
}
try {
protocolManager.sendServerPacket(player, inventoryPacket, false);
} catch (InvocationTargetException invocationExc) {
logger.logException("Error during sending blank inventory", invocationExc);
}
}
示例3
private Vector getRelPos(PacketEvent event, VirtualWorld generator) {
PacketContainer packet = event.getPacket();
StructureModifier<BlockPosition> position = packet.getBlockPositionModifier();
BlockPosition loc = position.readSafely(0);
if (loc == null) return null;
Vector origin = generator.getOrigin();
Vector pt = new Vector(loc.getX() - origin.getBlockX(), loc.getY() - origin.getBlockY(), loc.getZ() - origin.getBlockZ());
return pt;
}
示例4
private Vector getRelative(PacketEvent container, Vector pt) {
PacketContainer packet = container.getPacket();
StructureModifier<EnumWrappers.Direction> dirs = packet.getDirections();
EnumWrappers.Direction dir = dirs.readSafely(0);
if (dir == null) return pt;
switch (dir.ordinal()) {
case 0: return pt.add(0, -1, 0);
case 1: return pt.add(0, 1, 0);
case 2: return pt.add(0, 0, -1);
case 3: return pt.add(0, 0, 1);
case 4: return pt.add(-1, 0, 0);
case 5: return pt.add(1, 0, 0);
default: return pt;
}
}
示例5
/**
* Construct an array of chunk packet processors from a given MAP_CHUNK_BULK packet.
* @param packet - the map chunk bulk packet.
* @return The chunk packet processors.
*/
public static ChunkPacketProcessor[] fromMapBulkPacket(PacketContainer packet, World world) {
if (!packet.getType().equals(PacketType.Play.Server.MAP_CHUNK_BULK))
throw new IllegalArgumentException(packet + " must be a MAP_CHUNK_BULK packet.");
StructureModifier<int[]> intArrays = packet.getIntegerArrays();
StructureModifier<byte[]> byteArrays = packet.getByteArrays();
int[] x = intArrays.read(0); // packet.c;
int[] z = intArrays.read(1); // packet.d;
ChunkPacketProcessor[] processors = new ChunkPacketProcessor[x.length];
int[] chunkMask = intArrays.read(2); // packet.a;
int[] extraMask = intArrays.read(3); // packet.b;
int dataStartIndex = 0;
for (int chunkNum = 0; chunkNum < processors.length; chunkNum++) {
// Create an info objects
ChunkPacketProcessor processor = new ChunkPacketProcessor();
processors[chunkNum] = processor;
processor.world = world;
processor.chunkX = x[chunkNum];
processor.chunkZ = z[chunkNum];
processor.chunkMask = chunkMask[chunkNum];
processor.extraMask = extraMask[chunkNum];
processor.hasContinous = true; // Always true
processor.data = byteArrays.read(1); //packet.buildBuffer;
// Check for Spigot
if (processor.data == null || processor.data.length == 0) {
processor.data = packet.getSpecificModifier(byte[][].class).read(0)[chunkNum];
} else {
processor.startIndex = dataStartIndex;
}
dataStartIndex += processor.size;
}
return processors;
}
示例6
private StructureModifier<Set<PlayerTeleportFlag>> getFlagsModifier()
{
return handle.getSets(EnumWrappers.getGenericConverter(FLAGS_CLASS, PlayerTeleportFlag.class));
}