From 717c026adee2e9df29f375a956cb0f3b430c3325 Mon Sep 17 00:00:00 2001 From: SimolZimol <70102430+SimolZimol@users.noreply.github.com> Date: Fri, 23 May 2025 18:44:15 +0200 Subject: [PATCH] modified: build.gradle modified: src/main/java/com/simolzimol/levelcraft/item/ItemUtil.java modified: src/main/java/com/simolzimol/levelcraft/listener/CraftListener.java new file: src/main/java/com/simolzimol/levelcraft/listener/LootListener.java new file: src/main/java/com/simolzimol/levelcraft/listener/MobDropListener.java --- build.gradle | 4 ++ .../simolzimol/levelcraft/item/ItemUtil.java | 4 ++ .../levelcraft/listener/CraftListener.java | 3 ++ .../levelcraft/listener/LootListener.java | 50 +++++++++++++++++++ .../levelcraft/listener/MobDropListener.java | 32 ++++++++++++ 5 files changed, 93 insertions(+) create mode 100644 src/main/java/com/simolzimol/levelcraft/listener/LootListener.java create mode 100644 src/main/java/com/simolzimol/levelcraft/listener/MobDropListener.java diff --git a/build.gradle b/build.gradle index e2b9e49..4a90c84 100644 --- a/build.gradle +++ b/build.gradle @@ -21,4 +21,8 @@ java { tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' +} + +processResources { + from("plugin.yml") } \ No newline at end of file diff --git a/src/main/java/com/simolzimol/levelcraft/item/ItemUtil.java b/src/main/java/com/simolzimol/levelcraft/item/ItemUtil.java index 6cc23f4..408452d 100644 --- a/src/main/java/com/simolzimol/levelcraft/item/ItemUtil.java +++ b/src/main/java/com/simolzimol/levelcraft/item/ItemUtil.java @@ -50,4 +50,8 @@ public class ItemUtil { if (meta == null) return null; return meta.getPersistentDataContainer().get(uuidKey, PersistentDataType.STRING); } + + public static NamespacedKey getRarityKey() { + return rarityKey; + } } diff --git a/src/main/java/com/simolzimol/levelcraft/listener/CraftListener.java b/src/main/java/com/simolzimol/levelcraft/listener/CraftListener.java index 79e8f97..4f0e8b2 100644 --- a/src/main/java/com/simolzimol/levelcraft/listener/CraftListener.java +++ b/src/main/java/com/simolzimol/levelcraft/listener/CraftListener.java @@ -17,6 +17,9 @@ public class CraftListener implements Listener { ItemStack result = event.getCurrentItem(); if (result == null) return; + // Nur Items mit Haltbarkeit (Waffen, Rüstung, Werkzeuge) + if (result.getType().getMaxDurability() <= 0) return; + // Rarity für gecraftete Items: -1 bis 3 int rarityValue = random.nextInt(5) - 1; // -1,0,1,2,3 if (rarityValue > 3) rarityValue = 3; diff --git a/src/main/java/com/simolzimol/levelcraft/listener/LootListener.java b/src/main/java/com/simolzimol/levelcraft/listener/LootListener.java new file mode 100644 index 0000000..389da1b --- /dev/null +++ b/src/main/java/com/simolzimol/levelcraft/listener/LootListener.java @@ -0,0 +1,50 @@ +package com.simolzimol.levelcraft.listener; + +import com.simolzimol.levelcraft.item.ItemUtil; +import com.simolzimol.levelcraft.item.Rarity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.Container; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.Random; + +public class LootListener implements Listener { + private final Random random = new Random(); + + @EventHandler + public void onChestOpen(PlayerInteractEvent event) { + Block block = event.getClickedBlock(); + if (block == null) return; + BlockState state = block.getState(); + if (!(state instanceof Container container)) return; + + Inventory inv = container.getInventory(); + for (ItemStack item : inv.getContents()) { + if (item == null) continue; + // Nur Items mit Haltbarkeit (Waffen, Rüstung, Werkzeuge, Angel, ...) + if (item.getType().getMaxDurability() <= 0) continue; + + ItemMeta meta = item.getItemMeta(); + if (meta == null) continue; + // Prüfe, ob das Item bereits eine Seltenheit hat + if (meta.getPersistentDataContainer().has( + ItemUtil.getRarityKey(), PersistentDataType.INTEGER)) continue; + + // Rarity für Kisten-Loot: -1 bis 5 + int rarityValue = random.nextInt(7) - 1; // -1 bis 5 + if (rarityValue > 5) rarityValue = 5; + if (rarityValue < -1) rarityValue = -1; + + Rarity rarity = Rarity.fromValue(rarityValue); + ItemUtil.setRarity(item, rarity); + ItemUtil.assignUniqueId(item); + } + } +} diff --git a/src/main/java/com/simolzimol/levelcraft/listener/MobDropListener.java b/src/main/java/com/simolzimol/levelcraft/listener/MobDropListener.java new file mode 100644 index 0000000..bd1eb50 --- /dev/null +++ b/src/main/java/com/simolzimol/levelcraft/listener/MobDropListener.java @@ -0,0 +1,32 @@ +package com.simolzimol.levelcraft.listener; + +import com.simolzimol.levelcraft.item.ItemUtil; +import com.simolzimol.levelcraft.item.Rarity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDropItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.Random; + +public class MobDropListener implements Listener { + private final Random random = new Random(); + + @EventHandler + public void onMobDrop(EntityDropItemEvent event) { + ItemStack item = event.getItemDrop().getItemStack(); + if (item == null) return; + // Nur Items mit Haltbarkeit (Waffen, Rüstung, Werkzeuge) + if (item.getType().getMaxDurability() <= 0) return; + + // Rarity für Mobdrops: -1 bis 7 + int rarityValue = random.nextInt(9) - 1; // -1 bis 7 + if (rarityValue > 7) rarityValue = 7; + if (rarityValue < -1) rarityValue = -1; + + Rarity rarity = Rarity.fromValue(rarityValue); + ItemUtil.setRarity(item, rarity); + ItemUtil.assignUniqueId(item); + event.getItemDrop().setItemStack(item); + } +}