From d7539e23bfe27cc6252b5c784ba232ae2276fb4f Mon Sep 17 00:00:00 2001 From: M_Viper Date: Wed, 26 Nov 2025 15:44:15 +0000 Subject: [PATCH] Dateien nach "src/main/java/vpd/bowandaero12/furnacelv/commands" hochladen --- .../furnacelv/commands/GiveCommand.java | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 src/main/java/vpd/bowandaero12/furnacelv/commands/GiveCommand.java diff --git a/src/main/java/vpd/bowandaero12/furnacelv/commands/GiveCommand.java b/src/main/java/vpd/bowandaero12/furnacelv/commands/GiveCommand.java new file mode 100644 index 0000000..917e503 --- /dev/null +++ b/src/main/java/vpd/bowandaero12/furnacelv/commands/GiveCommand.java @@ -0,0 +1,170 @@ +package vpd.bowandaero12.furnacelv.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import vpd.bowandaero12.furnacelv.FurnaceLevels; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class GiveCommand implements CommandExecutor { + private final FurnaceLevels plugin; + + public GiveCommand(FurnaceLevels plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + + // --- Fall 1: Keine Argumente (/flgive) --- + if (args.length == 0) { + if (!(sender instanceof Player)) { + sender.sendMessage("Dieser Befehl kann nur von einem Spieler ausgeführt werden."); + return true; + } + Player player = (Player) sender; + if (!player.hasPermission("furnacelevels.give")) { + player.sendMessage(ChatColor.RED + "Du hast keine Berechtigung, diesen Befehl zu verwenden."); + return true; + } + giveItem(sender, 1, player); // Gib 1 Item an sich selbst + return true; + } + + // --- Fall 2: Ein Argument (/flgive oder /flgive ) --- + if (args.length == 1) { + try { + // Versuche, das Argument als Zahl (Menge) zu interpretieren + int amount = Integer.parseInt(args[0]); + if (amount <= 0) { + sender.sendMessage(ChatColor.RED + "Die Menge muss eine positive Zahl sein."); + return true; + } + if (!(sender instanceof Player)) { + sender.sendMessage("Dieser Befehl kann nur von einem Spieler ausgeführt werden."); + return true; + } + Player player = (Player) sender; + if (!player.hasPermission("furnacelevels.give")) { + player.sendMessage(ChatColor.RED + "Du hast keine Berechtigung, diesen Befehl zu verwenden."); + return true; + } + giveItem(player, amount, player); // Gib Items an sich selbst + return true; + } catch (NumberFormatException e) { + // Argument war keine Zahl, also ist es ein Spielername + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + sender.sendMessage(ChatColor.RED + "Der Spieler '" + args[0] + "' ist nicht online."); + return true; + } + if (!sender.hasPermission("furnacelevels.give.other")) { + sender.sendMessage(ChatColor.RED + "Du hast keine Berechtigung, anderen Spielern Items zu geben."); + return true; + } + giveItem(sender, 1, target); // Gib 1 Item an den anderen Spieler + return true; + } + } + + // --- Fall 3: Zwei Argumente (/flgive ) --- + if (args.length == 2) { + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + sender.sendMessage(ChatColor.RED + "Der Spieler '" + args[0] + "' ist nicht online."); + return true; + } + if (!sender.hasPermission("furnacelevels.give.other")) { + sender.sendMessage(ChatColor.RED + "Du hast keine Berechtigung, anderen Spielern Items zu geben."); + return true; + } + try { + int amount = Integer.parseInt(args[1]); + if (amount <= 0) { + sender.sendMessage(ChatColor.RED + "Die Menge muss eine positive Zahl sein."); + return true; + } + giveItem(sender, amount, target); // Gib Items an den anderen Spieler + return true; + } catch (NumberFormatException e) { + sender.sendMessage(ChatColor.RED + "'" + args[1] + "' ist keine gültige Zahl."); + return true; + } + } + + // --- Fall 4: Zu viele Argumente --- + sender.sendMessage(ChatColor.RED + "Falsche Verwendung! Benutze: /flgive [Spieler] [Menge]"); + return true; + } + + /** + * Erstellt das Upgrade-Item und gibt es dem Ziel-Spieler. + * + * @param sender Der, der den Befehl ausführt. + * @param amount Die Menge des Items. + * @param target Der Spieler, der das Item erhält. + */ + private void giveItem(CommandSender sender, int amount, Player target) { + ItemStack upgradeItem = createUpgradeItem(); + if (upgradeItem == null) { + sender.sendMessage(ChatColor.RED + "Das Upgrade-Item konnte aufgrund eines Fehlers in der Config nicht erstellt werden."); + return; + } + upgradeItem.setAmount(amount); + + // Füge das Item zum Inventar hinzu und prüfe, ob es voll ist + // Die Map 'leftover' enthält die Items, die NICHT ins Inventar gepasst haben. + Map leftover = target.getInventory().addItem(upgradeItem); + + // KORREKTUR: Die Logik war hier vertauscht. + // Wenn 'leftover' NICHT leer ist, war das Inventar voll. + if (!leftover.isEmpty()) { + sender.sendMessage(ChatColor.RED + "Das Inventar von " + target.getName() + " ist voll! Die restlichen Items wurden am Boden fallengelassen."); + for (ItemStack item : leftover.values()) { + target.getWorld().dropItem(target.getLocation(), item); + } + } else { + // Erfolgsmeldung + if (sender.equals(target)) { + target.sendMessage(ChatColor.GREEN + "Du hast " + amount + " Ofen-Upgrade-Token erhalten."); + } else { + sender.sendMessage(ChatColor.GREEN + "Du hast " + amount + " Ofen-Upgrade-Token an " + target.getName() + " gegeben."); + target.sendMessage(ChatColor.GREEN + "Du hast " + amount + " Ofen-Upgrade-Token von " + sender.getName() + " erhalten."); + } + } + } + + private ItemStack createUpgradeItem() { + String configMaterialName = plugin.getConfig().getString("item.material-type", "SUNFLOWER").toUpperCase(); + String configDisplayName = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("item.displayname", "&6&lOfen-Upgrade-Token")); + List configLore = plugin.getConfig().getStringList("item.lore").stream() + .map(line -> ChatColor.translateAlternateColorCodes('&', line)) + .collect(Collectors.toList()); + + Material configMaterial; + try { + configMaterial = Material.valueOf(configMaterialName); + } catch (IllegalArgumentException e) { + return null; + } + + ItemStack item = new ItemStack(configMaterial); + ItemMeta meta = item.getItemMeta(); + if (meta != null) { + meta.setDisplayName(configDisplayName); + meta.setLore(configLore); + item.setItemMeta(meta); + } + return item; + } +} \ No newline at end of file