Untitled
unknown
java
6 months ago
9.5 kB
5
Indexable
package de.cozy.worldguardaddon.oraxen; import de.cozy.worldguardaddon.Main; import io.th0rgal.oraxen.api.OraxenItems; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.block.Block; import org.bukkit.block.Furnace; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.inventory.*; import org.bukkit.inventory.FurnaceRecipe; import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataType; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.inventory.RecipeChoice; public class CustomOraxenListener implements Listener { private final JavaPlugin plugin = Main.getInstance(); private static final String SMELTER_KEY = "netherite_smelter"; public CustomOraxenListener() { registerCustomRecipes(); } @EventHandler public void onBlockPlace(BlockPlaceEvent event) { ItemStack item = event.getItemInHand(); if (OraxenItems.getIdByItem(item).equals(SMELTER_KEY)) { Block block = event.getBlockPlaced(); Furnace furnace = (Furnace) block.getState(); furnace.getPersistentDataContainer().set(new NamespacedKey(plugin, SMELTER_KEY), PersistentDataType.BYTE, (byte) 1); // Setze den benutzerdefinierten Namen mit einfachen Farbcodes String customName = ChatColor.translateAlternateColorCodes('&', "&6Netherit-Schmelzofen"); furnace.setCustomName(customName); furnace.update(); } } @EventHandler public void onInventoryClick(InventoryClickEvent event) { if (!(event.getInventory().getHolder() instanceof Furnace)) { return; } Furnace furnace = (Furnace) event.getInventory().getHolder(); if (!isCustomFurnace(furnace)) { return; } int slot = event.getRawSlot(); ItemStack cursorItem = event.getCursor(); ItemStack currentItem = event.getCurrentItem(); String cursorItemId = cursorItem != null ? OraxenItems.getIdByItem(cursorItem) : null; if (event.isShiftClick()) { ItemStack shiftItem = event.getCurrentItem(); String shiftItemId = shiftItem != null ? OraxenItems.getIdByItem(shiftItem) : null; if (isCustomSmeltable(shiftItemId) || isCustomFuel(shiftItemId)) { // Erlaube Shift-Klick von benutzerdefinierten Items ins Ofen-Inventar event.setCancelled(false); } else { // Verhindere Shift-Klick von anderen Items event.setCancelled(true); } return; } if (slot >= 0 && slot <= 2) { // Ofen-Slots if (cursorItem != null && cursorItem.getType() != Material.AIR) { // Spieler versucht, ein Item in den Slot zu legen if (slot == 0) { // Input-Slot if (isCustomSmeltable(cursorItemId)) { // Erlauben event.setCancelled(false); } else { // Verhindern event.setCancelled(true); } } else if (slot == 1) { // Brennstoff-Slot if (isCustomFuel(cursorItemId)) { // Erlauben event.setCancelled(false); } else { // Verhindern event.setCancelled(true); } } else if (slot == 2) { // Ausgabe-Slot // Verhindere das Einlegen von Items in den Ausgabe-Slot event.setCancelled(true); } } else { // Spieler versucht, ein Item aus dem Slot zu entnehmen // Erlaube das Entnehmen von Items aus allen Slots event.setCancelled(false); } } else { // Klick außerhalb des Ofen-Inventars // Keine Aktion erforderlich } } @EventHandler public void onFurnaceBurn(FurnaceBurnEvent event) { Block block = event.getBlock(); Furnace furnace = (Furnace) block.getState(); ItemStack fuel = event.getFuel(); String fuelId = OraxenItems.getIdByItem(fuel); if (isCustomFuel(fuelId)) { if (isCustomFurnace(furnace)) { int burnTime = 600; // Brenndauer für 3 Items (3 * 200 Ticks) event.setBurnTime(burnTime); event.setBurning(true); // Manuelles Reduzieren des Brennstoffs im nächsten Server-Tick Bukkit.getScheduler().runTask(plugin, () -> { ItemStack furnaceFuel = furnace.getInventory().getFuel(); if (furnaceFuel != null && furnaceFuel.getAmount() > 0) { furnaceFuel.setAmount(furnaceFuel.getAmount() - 1); if (furnaceFuel.getAmount() <= 0) { furnace.getInventory().setFuel(null); } else { furnace.getInventory().setFuel(furnaceFuel); } } }); // Speichere die aktuelle Brennstoff-ID furnace.getPersistentDataContainer().set(new NamespacedKey(plugin, "current_fuel"), PersistentDataType.STRING, fuelId); furnace.update(); } else { // Verhindere das Verwenden der benutzerdefinierten Brennstoffe in normalen Öfen event.setCancelled(true); } } else { // Verhindere das Verwenden von anderen Brennstoffen im benutzerdefinierten Ofen if (isCustomFurnace(furnace)) { event.setCancelled(true); } } } @EventHandler public void onFurnaceSmelt(FurnaceSmeltEvent event) { Block block = event.getBlock(); Furnace furnace = (Furnace) block.getState(); ItemStack source = event.getSource(); String sourceId = OraxenItems.getIdByItem(source); if (isCustomFurnace(furnace)) { String fuelId = furnace.getPersistentDataContainer().get(new NamespacedKey(plugin, "current_fuel"), PersistentDataType.STRING); if (isCustomSmeltable(sourceId) && fuelId != null) { // Überprüfe, ob Brennstoff und Erz zusammenpassen if ((sourceId.equals("titan_ore") && fuelId.equals("inferno_coal")) || (sourceId.equals("platin_ore") && fuelId.equals("lava_crystal"))) { ItemStack result = null; switch (sourceId) { case "titan_ore": result = OraxenItems.getItemById("titan_nugget").build(); break; case "platin_ore": result = OraxenItems.getItemById("platin_nugget").build(); break; } event.setResult(result); } else { // Erz und Brennstoff passen nicht zusammen, Schmelzen verhindern event.setCancelled(true); } } else { // Verhindern, dass andere Items geschmolzen werden event.setCancelled(true); } } else { // Verhindere das Schmelzen der benutzerdefinierten Erze in normalen Öfen if (isCustomSmeltable(sourceId)) { event.setCancelled(true); } } } private boolean isCustomFurnace(Furnace furnace) { return furnace.getPersistentDataContainer().has(new NamespacedKey(plugin, SMELTER_KEY), PersistentDataType.BYTE); } private boolean isCustomFuel(String itemId) { return itemId != null && (itemId.equals("inferno_coal") || itemId.equals("lava_crystal")); } private boolean isCustomSmeltable(String itemId) { return itemId != null && (itemId.equals("titan_ore") || itemId.equals("platin_ore")); } private void registerCustomRecipes() { // Titanerz zu Titannugget ItemStack titanNugget = OraxenItems.getItemById("titan_nugget").build(); FurnaceRecipe titanRecipe = new FurnaceRecipe( new NamespacedKey(plugin, "titan_nugget_smelting"), titanNugget, new RecipeChoice.ExactChoice(OraxenItems.getItemById("titan_ore").build()), 0.1f, 200 ); Bukkit.addRecipe(titanRecipe); // Platinerz zu Platinnugget ItemStack platinNugget = OraxenItems.getItemById("platin_nugget").build(); FurnaceRecipe platinRecipe = new FurnaceRecipe( new NamespacedKey(plugin, "platin_nugget_smelting"), platinNugget, new RecipeChoice.ExactChoice(OraxenItems.getItemById("platin_ore").build()), 0.1f, 200 ); Bukkit.addRecipe(platinRecipe); } }
Editor is loading...
Leave a Comment