@Override public List<Object> transformMapChunkBulk(Object packet, ClientChunks clientChunks) { List<Object> list = Lists.newArrayList(); try { int[] xcoords = mapChunkBulkRef.getFieldValue("field_149266_a", packet, int[].class); int[] zcoords = mapChunkBulkRef.getFieldValue("field_149264_b", packet, int[].class); Object[] chunkMaps = mapChunkBulkRef.getFieldValue("field_179755_c", packet, Object[].class); for (int i = 0; i < chunkMaps.length; i++) { int x = xcoords[i]; int z = zcoords[i]; Object chunkMap = chunkMaps[i]; Object chunkPacket = mapChunkRef.newInstance(); mapChunkRef.setFieldValue("field_149284_a", chunkPacket, x); mapChunkRef.setFieldValue("field_149282_b", chunkPacket, z); mapChunkRef.setFieldValue("field_179758_c", chunkPacket, chunkMap); mapChunkRef.setFieldValue("field_149279_g", chunkPacket, true); // Chunk bulk chunks are always ground-up clientChunks.getBulkChunks().add(ClientChunks.toLong(x, z)); // Store for later list.add(chunkPacket); } } catch (Exception e) { Via.getPlatform().getLogger().log(Level.WARNING, "Failed to transform chunks bulk", e); } return list; }
@Override public Chunk read(ByteBuf input, ClientChunks param) throws Exception { boolean replacePistons = param.getUser().get(ProtocolInfo.class).getPipeline().contains(Protocol1_10To1_9_3_4.class) && Via.getConfig().isReplacePistons(); int replacementId = Via.getConfig().getPistonReplacementId(); boolean isBulkPacket = param.getBulkChunks().remove(chunkHash); if (sectionCount == 0 && groundUp && !isBulkPacket && param.getLoadedChunks().contains(chunkHash)) { param.getLoadedChunks().remove(chunkHash); return new Chunk1_8(chunkX, chunkZ); param.getLoadedChunks().add(chunkHash); // mark chunks as loaded
@Override protected void filterPacket(UserConnection info, Object packet, List output) throws Exception { output.addAll(info.get(ClientChunks.class).transformMapChunkBulk(packet)); }
@Override public void init(UserConnection userConnection) { // Entity tracker userConnection.put(new EntityTracker(userConnection)); // Chunk tracker userConnection.put(new ClientChunks(userConnection)); // Movement tracker userConnection.put(new MovementTracker(userConnection)); // Inventory tracker userConnection.put(new InventoryTracker(userConnection)); // Place block tracker userConnection.put(new PlaceBlockTracker(userConnection)); // CommandBlock storage userConnection.put(new CommandBlockStorage(userConnection)); } }
@Override public void init(UserConnection userConnection) { Ticker.init(); userConnection.put(new Windows(userConnection)); userConnection.put(new EntityTracker(userConnection)); userConnection.put(new PlayerPosition(userConnection)); userConnection.put(new GameProfileStorage(userConnection)); userConnection.put(new ClientChunks(userConnection)); userConnection.put(new Scoreboard(userConnection)); userConnection.put(new CompressionSendStorage(userConnection)); userConnection.put(new WorldBorder(userConnection)); userConnection.put(new PlayerAbilities(userConnection)); userConnection.put(new ClientWorld(userConnection)); } }
mapChunkRef.setFieldValue("c", chunkPacket, chunkMap); mapChunkRef.setFieldValue("d", chunkPacket, true); // Chunk bulk chunks are always ground-up clientChunks.getBulkChunks().add(ClientChunks.toLong(x, z)); // Store for later list.add(chunkPacket);
chunkPacket.write(customByteType, meta.getData()); clientChunks.getBulkChunks().add(ClientChunks.toLong(meta.getX(), meta.getZ())); // Store for later packets.add(chunkPacket);