Untitled
unknown
java
a year ago
9.5 kB
9
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