Dateien nach "src/main/java/vpd/bowandaero12/furnacelv/commands" hochladen
This commit is contained in:
@@ -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 <Menge> oder /flgive <Spieler>) ---
|
||||||
|
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 <Menge> 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 <Spieler> <Menge>) ---
|
||||||
|
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 <Menge> 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<Integer, ItemStack> 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<String> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user