From 0fe81e3a4079e2250aef09c40dd320c85bd443b2 Mon Sep 17 00:00:00 2001 From: Kooper <74805059+Kooperlol@users.noreply.github.com> Date: Thu, 16 May 2024 12:30:10 -0500 Subject: [PATCH] Fixed block changes not sending because it was not getting the amount of blocks correctly. --- .../blockify/managers/BlockChangeManager.java | 27 +++++-------------- .../blockify/managers/StageManager.java | 6 ++++- .../codes/kooper/blockify/models/Stage.java | 1 + .../blockify/protocol/ChunkLoadAdapter.java | 5 ---- 4 files changed, 12 insertions(+), 27 deletions(-) diff --git a/src/main/java/codes/kooper/blockify/managers/BlockChangeManager.java b/src/main/java/codes/kooper/blockify/managers/BlockChangeManager.java index 1353e11..fdef9ea 100644 --- a/src/main/java/codes/kooper/blockify/managers/BlockChangeManager.java +++ b/src/main/java/codes/kooper/blockify/managers/BlockChangeManager.java @@ -27,12 +27,11 @@ public class BlockChangeManager { private final ConcurrentHashMap blockChangeTasks; - private final ConcurrentHashMap> chunksBeingSent; private final ConcurrentHashMap blockDataToId; public BlockChangeManager() { this.blockChangeTasks = new ConcurrentHashMap<>(); - this.chunksBeingSent = new ConcurrentHashMap<>(); + //this.chunksBeingSent = new ConcurrentHashMap<>(); this.blockDataToId = new ConcurrentHashMap<>(); } @@ -133,7 +132,11 @@ public void sendBlockChanges(Stage stage, Audience audience, ConcurrentHashMap new OnBlockChangeSendEvent(stage, blockChanges).callEvent()); // If there is only one block change, send it to the player directly - if (blockChanges.size() == 1) { + int blockCount = 0; + for (Map.Entry> entry : blockChanges.entrySet()) { + blockCount += entry.getValue().size(); + } + if (blockCount == 1) { for (Player onlinePlayer : audience.getPlayers()) { if (onlinePlayer != null) { for (Map.Entry> entry : blockChanges.entrySet()) { @@ -222,18 +225,6 @@ public void sendChunkPacket(Stage stage, Player player, BlockifyChunk chunk, Con // Get the user from PacketEvents API User user = PacketEvents.getAPI().getPlayerManager().getUser(player); - // Initialize the chunksBeingSent map for this player if not present - chunksBeingSent.computeIfAbsent(player, k -> new Vector<>()); - - Vector playerChunksBeingSent = chunksBeingSent.get(player); - - // Ensure the chunk isn't already being sent - if (playerChunksBeingSent.contains(chunk.getChunkKey())) { - return; - } - // Add this chunk to the chunks being sent list - playerChunksBeingSent.add(chunk.getChunkKey()); - // Loop through the chunks y positions for (int chunkY = stage.getMinPosition().getY() >> 4; chunkY <= stage.getMaxPosition().getY() >> 4; chunkY++) { // Create a list of encoded blocks for PacketEvents wrapper @@ -264,12 +255,6 @@ public void sendChunkPacket(Stage stage, Player player, BlockifyChunk chunk, Con WrapperPlayServerMultiBlockChange wrapper = new WrapperPlayServerMultiBlockChange(new Vector3i(chunk.x(), chunkY, chunk.z()), true, encodedBlocksArray); Bukkit.getScheduler().runTask(Blockify.getInstance(), () -> user.sendPacket(wrapper)); } - - // Remove the chunk from the chunks being sent list - playerChunksBeingSent.remove(chunk.getChunkKey()); - if (playerChunksBeingSent.isEmpty()) { - chunksBeingSent.remove(player); - } } diff --git a/src/main/java/codes/kooper/blockify/managers/StageManager.java b/src/main/java/codes/kooper/blockify/managers/StageManager.java index 8e107db..1ae4368 100644 --- a/src/main/java/codes/kooper/blockify/managers/StageManager.java +++ b/src/main/java/codes/kooper/blockify/managers/StageManager.java @@ -14,7 +14,11 @@ @Getter public class StageManager { - private final Map stages = new HashMap<>(); + private final Map stages; + + public StageManager() { + this.stages = new HashMap<>(); + } /** * Create a new stage diff --git a/src/main/java/codes/kooper/blockify/models/Stage.java b/src/main/java/codes/kooper/blockify/models/Stage.java index b087a28..aafba68 100644 --- a/src/main/java/codes/kooper/blockify/models/Stage.java +++ b/src/main/java/codes/kooper/blockify/models/Stage.java @@ -71,6 +71,7 @@ public void sendBlocksToAudience() { * @param blocks Blocks to refresh to the audience. */ public void refreshBlocksToAudience(Set blocks) { + Blockify.getInstance().getLogger().info("Refresh with size " + blocks.size()); ConcurrentHashMap> blockChanges = new ConcurrentHashMap<>(); for (View view : views) { for (BlockifyPosition position : blocks) { diff --git a/src/main/java/codes/kooper/blockify/protocol/ChunkLoadAdapter.java b/src/main/java/codes/kooper/blockify/protocol/ChunkLoadAdapter.java index 8d4b23a..959e404 100644 --- a/src/main/java/codes/kooper/blockify/protocol/ChunkLoadAdapter.java +++ b/src/main/java/codes/kooper/blockify/protocol/ChunkLoadAdapter.java @@ -41,11 +41,6 @@ public void onPacketPlaySend(PacketPlaySendEvent event) { // If the chunk is not in the world, return. if (!stage.getWorld().equals(player.getWorld())) return; - // If the chunk is being sent to the player, return. - if (Blockify.getInstance().getBlockChangeManager().getChunksBeingSent().get(player.getUniqueId()) != null && Blockify.getInstance().getBlockChangeManager().getChunksBeingSent().get(player.getUniqueId()).contains(blockifyChunk.getChunkKey())) { - return; - } - Blockify.getInstance().getBlockChangeManager().sendChunkPacket(stage, player, blockifyChunk, view.getBlocks()); } }