From d3c5a6c6b0fa3f0fad733b1f16ff41240a89d57b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Wed, 18 Dec 2024 23:34:45 +0100 Subject: [PATCH] fixed race condition --- .../minecraft/pixelblocks/PixelBlockItem.java | 3 ++- .../pixelblocks/pixelblock/PixelBlock.java | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java index 495de65..d9cbafd 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java @@ -26,7 +26,8 @@ public class PixelBlockItem { public static NamespacedKey idProperty = new NamespacedKey(Main.plugin(), "id"); public static NamespacedKey ownerProperty = new NamespacedKey(Main.plugin(), "owner"); - public static final String itemTexture = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzE5NGU5ZTc3NTdkMDZkNmY1ZTViZTg0NTQ4YTdjYjUyMTczZDY4Y2NmODAyZDIxMTI3NWQzMWNkYmEwYTA2ZSJ9fX0="; + public static final String itemTexture = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQ" + + "ubmV0L3RleHR1cmUvYzE5NGU5ZTc3NTdkMDZkNmY1ZTViZTg0NTQ4YTdjYjUyMTczZDY4Y2NmODAyZDIxMTI3NWQzMWNkYmEwYTA2ZSJ9fX0="; public record BlockInfo(UUID id, @Nullable UUID owner) { public boolean hasOwner() { 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 bd539f0..2fc9068 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java @@ -22,7 +22,7 @@ import java.util.Objects; import java.util.UUID; public class PixelBlock { - private boolean exists = true; + private boolean isAccessible = false; private PixelBlockWorld pixelWorld; private final Location pixelBlockLocation; @@ -83,6 +83,8 @@ public class PixelBlock { this.placeholder = new PixelBlockPlaceholder(this); this.hitbox = new PixelBlockHitbox(this); + this.getBlockTaskChain().sync(() -> this.isAccessible = true).execute(); + Main.logger().info(String.format("Loaded existing pixelblock '%s'", this.blockUUID)); } catch(Exception e) { Main.logger().info(String.format("Failed initializing existing pixelblock '%s': %s", this.blockUUID, e.getMessage())); @@ -122,6 +124,8 @@ public class PixelBlock { Main.pixelBlocks.add(this); }) .execute(); + + this.getBlockTaskChain().sync(() -> this.isAccessible = true).execute(); } public TaskChain getBlockTaskChain() { @@ -134,13 +138,12 @@ public class PixelBlock { return; } + this.lastEntryLocation = player.getLocation(); + getBlockTaskChain() - .async(() -> { - this.lastEntryLocation = player.getLocation(); - Main.database().savePixelBlock(this); - }) + .async(() -> Main.database().savePixelBlock(this)) .sync(() -> { - if(!exists) return; + if(!this.isAccessible) return; player.teleport(this.pixelWorld.getSpawnLocation()); }) .current(() -> Main.logger() @@ -193,7 +196,7 @@ public class PixelBlock { // } public void destroy(Player destroyedBy) { - if(!this.exists) return; + if(!this.isAccessible) return; if(Main.configuration().onlyBreakableByOwner() && !destroyedBy.getUniqueId().equals(ownerUUID)) { destroyedBy.sendMessage("Dieser Pixelblock gehört nicht dir!"); return; @@ -205,7 +208,7 @@ public class PixelBlock { }); Main.logger().info(String.format("Destroying PixelBlock '%s' at %s", this.blockUUID, pixelBlockLocation)); - this.exists = false; + this.isAccessible = false; this.pixelWorld.getEntitiesInWorld().stream() .filter(entity -> entity instanceof Item)