From e45bbfc07b64c05076b42217313f61c230921da3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 29 Dec 2024 16:33:38 +0100 Subject: [PATCH] fixed crafting advancement and crafting bug --- .../eu/mhsl/minecraft/pixelblocks/Main.java | 3 +- .../minecraft/pixelblocks/PixelBlockItem.java | 4 ++- .../listeners/CraftPixelBlockListener.java | 30 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/CraftPixelBlockListener.java diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/Main.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/Main.java index 772427e..1aecd1f 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/Main.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/Main.java @@ -73,7 +73,8 @@ public final class Main extends JavaPlugin { new PreventEntityPlacementListener(), new DiscoverRecipesListener(), new QuitWhileInPixelBlockListener(), - new PreventGrowthListener() + new PreventGrowthListener(), + new CraftPixelBlockListener() }; for(Listener listener : listeners) { diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java index d9cbafd..ab7f647 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java @@ -25,6 +25,7 @@ public class PixelBlockItem { public static final NamespacedKey recipeKey = new NamespacedKey(Main.plugin(), "pixelblock"); public static NamespacedKey idProperty = new NamespacedKey(Main.plugin(), "id"); public static NamespacedKey ownerProperty = new NamespacedKey(Main.plugin(), "owner"); + public static UUID emptyBlockUUID = UUID.fromString("98fdf0ae-c3ab-4ef7-ae25-efd518d600de"); public static final String itemTexture = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQ" + "ubmV0L3RleHR1cmUvYzE5NGU5ZTc3NTdkMDZkNmY1ZTViZTg0NTQ4YTdjYjUyMTczZDY4Y2NmODAyZDIxMTI3NWQzMWNkYmEwYTA2ZSJ9fX0="; @@ -68,12 +69,13 @@ public class PixelBlockItem { ItemStack item = HeadUtil.getCustomTextureHead(itemTexture); ItemMeta meta = item.getItemMeta(); meta.setMaxStackSize(1); + meta.itemName(Component.text(emptyBlockUUID.toString())); meta.displayName(Component.text("Leerer Pixelblock")); meta.lore(List.of( Component.text("Der erste Spieler, der den Block platziert wird zum Besitzer des Blocks."), Component.text("Klicke auf den gesetzten Block, um diesen zu bearbeiten!") )); - meta.getPersistentDataContainer().set(idProperty, PersistentDataType.STRING, UUID.randomUUID().toString()); + meta.getPersistentDataContainer().set(idProperty, PersistentDataType.STRING, emptyBlockUUID.toString()); item.setItemMeta(meta); return item; } diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/CraftPixelBlockListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/CraftPixelBlockListener.java new file mode 100644 index 0000000..e6e524b --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/CraftPixelBlockListener.java @@ -0,0 +1,30 @@ +package eu.mhsl.minecraft.pixelblocks.listeners; + +import eu.mhsl.minecraft.pixelblocks.PixelBlockItem; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +import java.util.Objects; +import java.util.UUID; + +public class CraftPixelBlockListener implements Listener { + @EventHandler + public void onCraft(CraftItemEvent event) { + ItemStack result = event.getInventory().getResult(); + if(result == null) return; + ItemMeta itemMeta = result.getItemMeta(); + PersistentDataContainer dataContainer = itemMeta.getPersistentDataContainer(); + if(!dataContainer.has(PixelBlockItem.idProperty)) return; + String currentId = dataContainer.get(PixelBlockItem.idProperty, PersistentDataType.STRING); + Objects.requireNonNull(currentId); + if(!UUID.fromString(currentId).equals(PixelBlockItem.emptyBlockUUID)) return; + + dataContainer.set(PixelBlockItem.idProperty, PersistentDataType.STRING, UUID.randomUUID().toString()); + result.setItemMeta(itemMeta); + } +}