From 744f1dd6e281be06217058a697e9e934732871c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Tue, 15 Oct 2024 21:25:11 +0200 Subject: [PATCH] fixed pixel duplication because of unloaded chunks --- .../pixelblocks/pixelblock/PixelBlock.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java index 81ae410..bd539f0 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java @@ -6,6 +6,7 @@ import eu.mhsl.minecraft.pixelblocks.PixelBlockItem; import eu.mhsl.minecraft.pixelblocks.utils.Direction; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.World; @@ -150,8 +151,9 @@ public class PixelBlock { public void exitBlock(@NotNull Player player) { this.getBlockTaskChain() .sync(() -> player.teleport(this.lastEntryLocation != null ? this.lastEntryLocation : this.pixelBlockLocation)) - .current(() -> Main.logger().info(String.format("%s exited PixelBlock", player.getName()))) .sync(() -> this.pixelData = this.pixelWorld.getPixels(this.facingDirection)) + .current(() -> Main.logger().info(String.format("%s exited PixelBlock", player.getName()))) + .delay(1) .execute(); this.scheduleEntityUpdate(); @@ -159,9 +161,12 @@ public class PixelBlock { private void scheduleEntityUpdate() { this.getBlockTaskChain() + .sync(this::ensureChunksLoaded) .sync(this::removeEntities) + .delay(1) .async(() -> Collections.shuffle(this.pixelData)) .delay(1) + .sync(this::ensureChunksLoaded) .syncLast((pixelData) -> { this.pixels.spawn(); this.hitbox.spawn(); @@ -221,11 +226,21 @@ public class PixelBlock { } private void removeEntities() { + this.ensureChunksLoaded(); this.pixels.destroy(); this.placeholder.destroy(); this.hitbox.destroy(); } + private void ensureChunksLoaded() { + Chunk chunk = this.pixelBlockLocation.getChunk(); + if(!chunk.isLoaded() || !chunk.isEntitiesLoaded()) { + Main.logger().info(String.format("Loading chunk '%d, %d' for pixelblock '%s'", chunk.getX(), chunk.getZ(), this.blockUUID)); + chunk.load(); + chunk.getEntities(); + } + } + public @NotNull PixelBlockWorld getPixelWorld() { return pixelWorld; }