Untitled
unknown
java
5 months ago
12 kB
4
Indexable
package de.cozy.worldguardaddon.oraxen; import io.th0rgal.oraxen.OraxenPlugin; import io.th0rgal.oraxen.mechanics.Mechanic; import io.th0rgal.oraxen.mechanics.MechanicFactory; import org.bukkit.NamespacedKey; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.persistence.PersistentDataType; public class CustomSmelterMechanic extends Mechanic { // Definiere NAMESPACED_KEY als public static final public static final NamespacedKey NAMESPACED_KEY = new NamespacedKey(OraxenPlugin.get(), "custom_smelter"); public CustomSmelterMechanic(MechanicFactory mechanicFactory, ConfigurationSection section) { super(mechanicFactory, section, item -> item.setCustomTag(NAMESPACED_KEY, PersistentDataType.STRING, "custom_smelter")); } } package de.cozy.worldguardaddon.oraxen; import io.th0rgal.oraxen.mechanics.Mechanic; import io.th0rgal.oraxen.mechanics.MechanicFactory; import org.bukkit.configuration.ConfigurationSection; public class CustomSmelterMechanicFactory extends MechanicFactory { // Konstruktor erwartet ConfigurationSection public CustomSmelterMechanicFactory(ConfigurationSection section) { super(section); // Optional: Hier spezifische Listener registrieren, falls notwendig } @Override public Mechanic parse(ConfigurationSection itemMechanicConfiguration) { CustomSmelterMechanic mechanic = new CustomSmelterMechanic(this, itemMechanicConfiguration); addToImplemented(mechanic); return mechanic; } } package de.cozy.worldguardaddon.oraxen; import io.th0rgal.oraxen.OraxenPlugin; import io.th0rgal.oraxen.api.OraxenItems; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.block.Block; import org.bukkit.block.TileState; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.inventory.*; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.*; import org.bukkit.persistence.PersistentDataType; import org.bukkit.scheduler.BukkitRunnable; import java.util.HashMap; import java.util.Map; public class CustomSmelterMechanicListener implements Listener { private final CustomSmelterMechanicFactory factory; private final Map<Block, CustomSmelterInventory> smelterInventories = new HashMap<>(); public CustomSmelterMechanicListener(CustomSmelterMechanicFactory factory) { this.factory = factory; } @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; Block block = event.getClickedBlock(); if (block == null) return; // Überprüfe, ob der Block unsere Mechanik hat if (!isCustomSmelterBlock(block)) return; event.setCancelled(true); Player player = event.getPlayer(); CustomSmelterInventory smelterInventory = smelterInventories.computeIfAbsent(block, b -> new CustomSmelterInventory(block)); smelterInventory.open(player); } // Event-Handler für Inventar-Klicks und Schließen des Inventars @EventHandler public void onInventoryClick(InventoryClickEvent event) { if (!(event.getInventory().getHolder() instanceof CustomSmelterInventory)) return; CustomSmelterInventory smelterInventory = (CustomSmelterInventory) event.getInventory().getHolder(); smelterInventory.handleInventoryClick(event); } @EventHandler public void onInventoryClose(InventoryCloseEvent event) { if (!(event.getInventory().getHolder() instanceof CustomSmelterInventory)) return; CustomSmelterInventory smelterInventory = (CustomSmelterInventory) event.getInventory().getHolder(); smelterInventory.handleInventoryClose(event); } private boolean isCustomSmelterBlock(Block block) { if (!(block.getState() instanceof TileState)) return false; TileState tileState = (TileState) block.getState(); // Zugriff auf NAMESPACED_KEY aus CustomSmelterMechanic return tileState.getPersistentDataContainer().has(CustomSmelterMechanic.NAMESPACED_KEY, PersistentDataType.STRING); } // Innere Klasse oder separate Klasse für CustomSmelterInventory public class CustomSmelterInventory implements InventoryHolder { private final Inventory inventory; private final Block smelterBlock; private SmeltingProcess smeltingProcess; // Definiere die Slots private final int INPUT_SLOT = 0; private final int FUEL_SLOT = 1; private final int OUTPUT_SLOT = 2; public CustomSmelterInventory(Block smelterBlock) { this.smelterBlock = smelterBlock; this.inventory = Bukkit.createInventory(this, InventoryType.FURNACE, ChatColor.GOLD + "Netherit-Schmelzofen"); // Starte den Schmelzprozess startSmeltingProcess(); } @Override public Inventory getInventory() { return inventory; } public void open(Player player) { player.openInventory(inventory); } public void handleInventoryClick(InventoryClickEvent event) { int slot = event.getRawSlot(); // Verhindere unerlaubte Aktionen if (slot != INPUT_SLOT && slot != FUEL_SLOT && slot != OUTPUT_SLOT) { event.setCancelled(true); return; } // Verhindere, dass Spieler Items in den Ausgabe-Slot legen if (slot == OUTPUT_SLOT && (event.isShiftClick() || event.getCursor() != null)) { event.setCancelled(true); } } public void handleInventoryClose(InventoryCloseEvent event) { // Optional: Schmelzprozess stoppen, wenn kein Spieler mehr das Inventar betrachtet if (inventory.getViewers().isEmpty()) { stopSmeltingProcess(); } } private void startSmeltingProcess() { smeltingProcess = new SmeltingProcess(this); smeltingProcess.runTaskTimerAsynchronously(OraxenPlugin.get(), 0L, 20L); // Läuft jede Sekunde } private void stopSmeltingProcess() { if (smeltingProcess != null) { smeltingProcess.cancel(); } } // Getter und Setter für die Slots wie zuvor // Innere Klasse für den Schmelzprozess public class SmeltingProcess extends BukkitRunnable { private final CustomSmelterInventory smelterInventory; private int smeltTime = 0; private int fuelTime = 0; private final int maxSmeltTime = 200; // Beispielwert für Schmelzzeit private final int maxFuelTime = 600; // Beispielwert für Brenndauer public SmeltingProcess(CustomSmelterInventory smelterInventory) { this.smelterInventory = smelterInventory; } @Override public void run() { // Schmelzlogik wie zuvor } } } } package de.cozy.worldguardaddon.oraxen; import de.cozy.worldguardaddon.Main; import io.th0rgal.oraxen.api.OraxenItems; import io.th0rgal.oraxen.api.events.OraxenNativeMechanicsRegisteredEvent; import io.th0rgal.oraxen.mechanics.MechanicsManager; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; public class MechanicRegisterListener implements Listener { @EventHandler public void onMechanicRegister(OraxenNativeMechanicsRegisteredEvent event) { // Verwende hier einen Lambda-Ausdruck mit dem passenden Typ MechanicsManager.registerMechanicFactory("custom_smelter", section -> { return new CustomSmelterMechanicFactory(section); }, true); // Lade die Items neu, um den Mechanic anzuwenden OraxenItems.loadItems(); // Registriere den CustomSmelterMechanicListener nach der Registrierung CustomSmelterMechanicFactory factory = (CustomSmelterMechanicFactory) MechanicsManager.getMechanicFactory("custom_smelter"); if (factory != null) { Bukkit.getPluginManager().registerEvents(new CustomSmelterMechanicListener(factory), JavaPlugin.getPlugin(Main.class)); } } } package de.cozy.worldguardaddon; import de.cozy.worldguardaddon.Listener.PortalWarpListener; import de.cozy.worldguardaddon.Listener.VoidFallingListener; import de.cozy.worldguardaddon.Manager.FlagManager; import de.cozy.worldguardaddon.Manager.PlaceholderManager; import de.cozy.worldguardaddon.Manager.StatsManager; import de.cozy.worldguardaddon.Scripts.DataCreation; import de.cozy.worldguardaddon.adminmode.adminmode; import de.cozy.worldguardaddon.buildmode.OnBuildInteract; import de.cozy.worldguardaddon.buildmode.OnJL; import de.cozy.worldguardaddon.buildmode.buildmode; import de.cozy.worldguardaddon.dungeons.DungeonChecker; import de.cozy.worldguardaddon.dungeons.DungeonScoreboardManager; import de.cozy.worldguardaddon.dungeons.DungeonStatsListener; import de.cozy.worldguardaddon.oraxen.MechanicRegisterListener; import de.cozy.worldguardaddon.pvp.CombatManager; import de.cozy.worldguardaddon.pvp.PvPChecker; import de.cozy.worldguardaddon.pvp.PvPScoreboardManager; import de.cozy.worldguardaddon.pvp.StatsListener; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; public final class Main extends JavaPlugin { private PvPScoreboardManager pvpScoreboardManager; // Instanzvariable für PvPScoreboardManager private DungeonScoreboardManager dungeonScoreboardManager; // Instanzvariable für DungeonScoreboardManager private static Main instance; @Override public void onLoad() { DataCreation.create(); FlagManager.InitializeWG(); // Initialisiere WorldGuard-Flags } @Override public void onEnable() { instance = this; Bukkit.getPluginManager().registerEvents(new MechanicRegisterListener(), this); saveDefaultConfig(); FlagManager.Initialize(); CombatManager.loadCombatTime(getConfig()); pvpScoreboardManager = new PvPScoreboardManager(getConfig()); dungeonScoreboardManager = new DungeonScoreboardManager(getConfig()); // Registriere Events und Listener PvPChecker pvpChecker = new PvPChecker(this, pvpScoreboardManager); Bukkit.getPluginManager().registerEvents(pvpChecker, this); DungeonChecker dungeonChecker = new DungeonChecker(this, dungeonScoreboardManager); Bukkit.getPluginManager().registerEvents(dungeonChecker, this); Bukkit.getPluginManager().registerEvents(new OnBuildInteract(), this); Bukkit.getPluginManager().registerEvents(new OnJL(), this); Bukkit.getPluginManager().registerEvents(new StatsListener(), this); Bukkit.getPluginManager().registerEvents(new DungeonStatsListener(), this); Bukkit.getPluginManager().registerEvents(new VoidFallingListener(), this); Bukkit.getPluginManager().registerEvents(new PortalWarpListener(this), this); StatsManager.setup(); new PlaceholderManager().register(); getCommand("buildmode").setExecutor(new buildmode()); getCommand("adminmode").setExecutor(new adminmode()); } @Override public void onDisable() { // Nachricht in der Konsole bei Plugin-Disable Bukkit.getConsoleSender().sendMessage("§7[§8§lWorldguardAddon§7]§c Good bye!"); } public static Main getInstance() { return instance; } }
Editor is loading...
Leave a Comment