diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocks.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocks.java index cca3a92..aa4b72b 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocks.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocks.java @@ -36,6 +36,7 @@ public final class PixelBlocks extends JavaPlugin { getServer().getPluginManager().registerEvents(new BlockExplodeListener(), this); getServer().getPluginManager().registerEvents(new PlayerPortalListener(), this); getServer().getPluginManager().registerEvents(new InventoryListener(), this); +// getServer().getPluginManager().registerEvents(new ChunkLoadListener(), this); getServer().getPluginManager().registerEvents(new PlayerChangeWorldListener(), this); Objects.requireNonNull(getCommand("createpixelblock")).setExecutor(new CreatePixelBlockCommand()); diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/commands/ExitWorldCommand.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/commands/ExitWorldCommand.java index faa4f8c..0448e39 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/commands/ExitWorldCommand.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/commands/ExitWorldCommand.java @@ -21,7 +21,7 @@ public class ExitWorldCommand implements CommandExecutor { if(!Arrays.stream(standardWorlds).toList().contains(playerWorld)) { - List ownedBlocks = PixelBlock.placedBlocks.stream() + List ownedBlocks = PixelBlock.placedPixelBlocks.stream() .filter(pixelBlock -> pixelBlock.ownerUID.equals(p.getUniqueId())) .sorted(Comparator.comparing(pixelBlock -> pixelBlock.lastEntryTime)) .toList(); diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/BlockBreakListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/BlockBreakListener.java index 7bb0120..da105f8 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/BlockBreakListener.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/BlockBreakListener.java @@ -12,7 +12,7 @@ public class BlockBreakListener implements Listener { PixelBlock pixelBlock = PixelBlock.getPixelBlockFromWorld(event.getBlock().getLocation().getWorld()); assert pixelBlock != null; - pixelBlock.handleBlockBreak(event, true); + pixelBlock.handleBlockBreak(event, false); } } } diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/BlockPlaceListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/BlockPlaceListener.java index 247f97b..3b9231f 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/BlockPlaceListener.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/BlockPlaceListener.java @@ -44,7 +44,7 @@ public class BlockPlaceListener implements Listener { PixelBlock pixelBlock = PixelBlock.getPixelBlockFromWorld(event.getBlock().getLocation().getWorld()); assert pixelBlock != null; - pixelBlock.handleBlockPlace(event, true); + pixelBlock.handleBlockPlace(event, false); } } } diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/ChunkLoadListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/ChunkLoadListener.java new file mode 100644 index 0000000..253e1be --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/ChunkLoadListener.java @@ -0,0 +1,27 @@ +package eu.mhsl.minecraft.pixelblocks.listeners; + +import eu.mhsl.minecraft.pixelblocks.pixelblock.PixelBlock; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.event.world.ChunkUnloadEvent; + +public class ChunkLoadListener implements Listener { + @EventHandler + static void onChunkLoad(ChunkLoadEvent event) { + PixelBlock.placedPixelBlocks.forEach(pixelBlock -> { + if(pixelBlock.hitbox == null) { + pixelBlock.update(); + } + }); + } + + @EventHandler + static void onChunkUnload(ChunkUnloadEvent event) { + PixelBlock.placedPixelBlocks.forEach(pixelBlock -> { + if(pixelBlock.hitbox != null) { + pixelBlock.clearEntities(); + } + }); + } +} diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PlayerChangeWorldListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PlayerChangeWorldListener.java index 1777d9c..a7bd135 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PlayerChangeWorldListener.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PlayerChangeWorldListener.java @@ -1,17 +1,20 @@ package eu.mhsl.minecraft.pixelblocks.listeners; import eu.mhsl.minecraft.pixelblocks.pixelblock.PixelBlock; +import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChangedWorldEvent; import java.util.Objects; +import static eu.mhsl.minecraft.pixelblocks.PixelBlocks.plugin; + public class PlayerChangeWorldListener implements Listener { @EventHandler static void onPlayerChangeWorld(PlayerChangedWorldEvent event) { if(CommonEventHandlers.isInPixelWorld(event.getFrom())) { - Objects.requireNonNull(PixelBlock.getPixelBlockFromWorld(event.getFrom())).update(); + Bukkit.getScheduler().runTaskLater(plugin, () -> Objects.requireNonNull(PixelBlock.getPixelBlockFromWorld(event.getFrom())).update(), 60); } } } 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 89dcbd0..0a2148d 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java @@ -18,7 +18,7 @@ import java.util.*; import static eu.mhsl.minecraft.pixelblocks.PixelBlocks.*; public class PixelBlock { - public static List placedBlocks = new ArrayList<>(); + public static List placedPixelBlocks = new ArrayList<>(); public static float hitboxOffset = 0.005F; public static int worldGrassBorderWidth = 5; public static int pixelsPerBlock = 16; @@ -34,7 +34,6 @@ public class PixelBlock { public UUID uuid; public PixelBlock(Location originLocation, UUID ownerUID, UUID blockUUID) { - PixelBlock.placedBlocks.add(this); this.uuid = blockUUID; this.pixelBlockLocation = originLocation.toBlockLocation(); @@ -47,7 +46,7 @@ public class PixelBlock { public static PixelBlock getPixelBlockFromWorld(World world) { String blockUUID = Arrays.stream(world.getName().split(pathSeparator)).toList().getLast(); - List pixelBlocks = placedBlocks.stream().filter(block -> block.uuid.toString().equals(blockUUID)).toList(); + List pixelBlocks = placedPixelBlocks.stream().filter(block -> block.uuid.toString().equals(blockUUID)).toList(); if(!pixelBlocks.isEmpty()) { return pixelBlocks.getFirst(); @@ -61,7 +60,7 @@ public class PixelBlock { loc.setPitch(0); loc.setYaw(0); - List pixelBlocks = placedBlocks.stream() + List pixelBlocks = placedPixelBlocks.stream() .filter(block -> block.pixelBlockLocation.equals(loc)) .toList(); @@ -289,7 +288,7 @@ public class PixelBlock { public void update() { Bukkit.getScheduler().runTask(plugin, () -> { - clearEntities(); + this.clearEntities(); for (int x = 0; x < 16; x++) { for (int y = 0; y < 16; y++) { @@ -336,17 +335,22 @@ public class PixelBlock { } public void clearEntities() { + System.out.println("Clear Entities"); + if(!pixels.isEmpty()) { + System.out.println("Clear Pixels"); this.pixels.forEach(Pixel::remove); - pixels.clear(); + this.pixels.clear(); } if(hitbox != null) { - hitbox.remove(); - hitbox = null; + System.out.println("Clear Hitbox"); + this.hitbox.remove(); + this.hitbox = null; } if(barrier != null) { + System.out.println("Clear Barrier"); this.barrier.remove(); this.barrier = null; } @@ -361,6 +365,7 @@ public class PixelBlock { this.pixelBlockLocation = newLocation; update(); dataBase.savePixelBlock(this); + placedPixelBlocks.add(this); return true; } return false; @@ -370,7 +375,7 @@ public class PixelBlock { dataBase.removePixelBlock(this); clearEntities(); - placedBlocks.remove(this); + placedPixelBlocks.remove(this); } public void delete() {