• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Item Stack abfragen

CreepyCat

Minecrafter
Registriert
25 August 2020
Beiträge
5
Diamanten
250
Gute Morgen,
Ich hätte mal eine Frage. Ich möchte ein bestimmtes Item was mit einer Variable definiert ist, aus einem Spielerinventar abfragen und auch die Anzahl. Sollte dies der Fall sein, soll das Item aus dem Spielerinventar enfernt werden. Noch dazu bekommt der Spieler einen bestimmten Betrag an Geld.
Mein Problem:
Ich habe schon mehrere Varianten Probiert,bei dieser sagt er einfach immer das ich das Item nicht habe(oder nicht genug).
Hier der Code;
Java:
package Money;

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.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

public class verkaufen implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {

        if (args.length == 3) {
            Player player = (Player) sender;
            String item = (args[0]);
            int menge = Integer.parseInt(args[1]);
            double preis = Double.parseDouble(args[2]);
            int mengerund = (int) Math.ceil(menge);
            for (ItemStack stack : player.getInventory().getContents()) {
                if(stack!=null) {
                    if (stack.getType() == Material.getMaterial(item)) {
                        if (stack.getAmount() >= menge) {
                            FileConfiguration config = Abfrage.getPlugin().getConfig();
                            double balance = config.getDouble(player.getName() + ".Money");
                            config.set(player.getName() + ".Money", balance + preis);
                            Abfrage.getPlugin().saveConfig();
                            Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "clear " + player.getName() + " " + item + " " + mengerund);
                            sender.sendMessage(ChatColor.YELLOW + "[Money] " + ChatColor.GREEN + "Du hast " + menge + " " + item + " verkauft");
                        }
                        else {
                            sender.sendMessage(ChatColor.RED + "Du hast nicht genug" + item);
                        }
                    }
                }
                else {
                    sender.sendMessage(ChatColor.RED + "Du hast kein");
                }
            }
        }
        return false;
    }
}
 

Taminoful

Schafhirte
Registriert
3 August 2012
Beiträge
137
Diamanten
390
Minecraft
Taminoful
Die Items werden gerundet für die Textausgabe, sonst würde stehen 32.0 Items. Das dass nicht passiert werden sie zu einem Int gemacht
Ja, das .0 kommt durch deine Rundung zustande, das liegt daran, dass die ceil Methode der Klasse Math einen double zurückgibt.
Das beißt dir hier nicht ins Bein, da Java hier implizit den Datentyp, durch die Automatic Type Conversion, int zu einem double erweitert, sollte aber trotzdem nicht notwendig sein, da ItemStack.getAmount einen Integer zurückgibt.

Ansonsten liegt dein Fehler vermutlich in dem Materialvergleich. Du übergibst hier in die Methode Material.getMaterial einen String. Diese Methode erfordert, dass der übergebene String exakt mit dem Namen des Materials im Material Enum übereinstimmt.
Bspw. würde "Brick" oder "brick" nicht mit Material.BRICK übereinstimmen. Eine schnelle Lösung dafür wäre den übergebenen String entsprechend zu "Uppercasen".
 
Zuletzt bearbeitet:

Chojo-chan

Teammaid
Social Media
Moderator
Administrator
Registriert
24 März 2013
Beiträge
293
Alter
5
Diamanten
645
Minecraft
Hadde
Eigentlich kann das alles Minecraft für dich übernehmen
Java:
    /**
     * Takes the item from the inventory.
     *
     * @param player player to take items from
     */
    protected void takeFromInventory(Player player) {
        player.getInventory().removeItem(getItem());
        player.updateInventory();
    }

    /**
     * Checks if a player has a item in his inventory.
     *
     * @param player player to check
     * @return true if the player has the item in his inventory.
     */
    protected boolean hasPlayerItemInInventory(Player player) {
        PlayerInventory inventory = player.getInventory();
        return inventory.containsAtLeast(getItem(), getItem().getAmount());
    }
 
Oben