Jump to content

Zugriff auf Itemslot


Empfohlene Beiträge

Hallo !

Bin gerade dabei mich mit der Plugin-Programmierung zu beschäftigen und Java-Anfänger.
Bis jetzt bin ich auch ganz gut zurechtgekommen.
Jetzt hänge ich allerdings und suche schon seit 2 Stunden nach einer Möglichkeit auf den 1. Slot in der Hotbar zuzugreifen.
Da fertige Plugin soll ein Schwert erzeugen was an den Spieler gebunden ist und nicht entfernt werden kann, sowie mit jedem Kill 1 Enchantment Stufe steigt.
Mein Problem ist jetzt aber, dass das Schwert zwar auf den 1 Slot gesetzt wird, falls sich aber ein Item auf diesem Slot befindet, dieses einfach überschrieben wird.
Gibt es einen drop Befehl mit dem ich, bevor das Schwert auf den Slot gesetzt wird, das Item welches sich dort befindet dropen kann?

Vielen Dank für die Hilfe

liebe Grüße

 

import java.util.ArrayList;
import java.util.Arrays;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

@SuppressWarnings("deprecation")
public class thecurse<privat> extends JavaPlugin implements Listener {

    ArrayList<String> verflucht = new ArrayList<String>();

    private static ItemStack cursedsword = new ItemStack(Material.DIAMOND_SWORD);

    public void onEnable() {
        this.getLogger().info("\n\n\n[PLUGIN] THE_CURSED_SWORD wurde aktiviert!\n\n\n");
        getServer().getPluginManager().registerEvents(this, this);

        ItemMeta metaData = cursedsword.getItemMeta();
        metaData.setDisplayName("Muramasa");
        metaData.setLore(Arrays.asList("TEXT1",
                "TEXT2",
                "~seelengebunden"));
        metaData.setUnbreakable(true);
        cursedsword.setItemMeta(metaData);
        cursedsword.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, 1);
        cursedsword.addUnsafeEnchantment(Enchantment.LUCK, 99);
        ShapedRecipe cursedswordrecipe = new ShapedRecipe(cursedsword);
        cursedswordrecipe.shape("odo", "odo", "o/o");
        cursedswordrecipe.setIngredient('o', Material.BEDROCK);
        cursedswordrecipe.setIngredient('d', Material.DIAMOND);
        cursedswordrecipe.setIngredient('/', Material.STICK);

        this.getServer().addRecipe(cursedswordrecipe);

    }

    public void onDisable() {
        this.getLogger().info("\n\n\n[PLUGIN] THE_CURSED_SWORD wurde deaktiviert!\n\n\n");
    }

    public boolean onCommand(CommandSender sender, Command cmd, String string, String[] args) {

        return true;
    }

    @EventHandler
    public void onEvent(PlayerPickupItemEvent e) {

        Player player = e.getPlayer();
        ItemStack vergleich = e.getItem().getItemStack();
        

        if (vergleich.equals(cursedsword)) {
            player.sendMessage(ChatColor.DARK_RED + "" + ChatColor.BOLD + "Du wurdest verflucht!");
            verflucht.add(player.getUniqueId().toString());
            player.sendMessage(verflucht.toString());                             // Später LÖSCHEN und Liste erzeugen
            player.getInventory().setItem(0, cursedsword);
        }
         

    }

    @EventHandler
    public void onEvent(PlayerDropItemEvent e) {
        Player player = e.getPlayer();
        Item drop = e.getItemDrop();

        if (drop.getItemStack().equals(cursedsword)) {
            player.sendMessage(ChatColor.DARK_RED + "" + ChatColor.BOLD + "TEXT");
            e.setCancelled(true);
        } 

    }

    @EventHandler
    public void onEvent(InventoryClickEvent e) {
        
        Player player = (Player) e.getWhoClicked();
        if(e.getCurrentItem().equals(cursedsword)) {
            player.sendMessage(ChatColor.DARK_RED + "" + ChatColor.BOLD + "TEXT");
            player.getInventory().setItem(0, cursedsword);
            e.setCancelled(true);
            
        }
    }
}	 



 

bearbeitet von Jinnai4
Code-Layout
Link zu diesem Kommentar
Auf anderen Seiten teilen

Schau dir mal die Methode

world.dropItem(player.getLocation(), item);

an. Hier müsste world halt die Welt des Spielers ein (player.getLocation().getWorld()), player der Spieler, und item der ItemStack in seiner Hotbar.
Du solltest vielleicht noch überprüfen, ob item überhaupt existiert (Nullcheck).

 

 

Liebe Grüße,
Baustein

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Baustein:

Schau dir mal die Methode


world.dropItem(player.getLocation(), item);

an. Hier müsste world halt die Welt des Spielers ein (player.getLocation().getWorld()), player der Spieler, und item der ItemStack in seiner Hotbar.
Du solltest vielleicht noch überprüfen, ob item überhaupt existiert (Nullcheck).

 

 

Liebe Grüße,
Baustein

Vielen Dank für die schnelle Antwort!
Ah das macht das wesentlich einfacher, dachte man muss den ItemStack auswählen, aber gut das man da direkt auf den Slot zugreifen kann.
Danke nochmals

lg

 

Für die, welche es interessiert ein kleiner Ausschnitt 

@EventHandler
    public void onEvent(InventoryClickEvent e) {

        Player player = (Player) e.getWhoClicked();
        ItemStack drop = player.getInventory().getItem(0);
        boolean curse = player.getInventory().contains(cursedsword);

        if (e.getCurrentItem().equals(cursedsword) && curse == false) { // Item wird zum Beispiel von Truhe genommen
                                                                        // oder erschaffen

            e.setCancelled(false);

        }

        else if(e.getCurrentItem().equals(cursedsword) && curse == true) { // Item wird im Inventar angeklickt
            
            if(drop != cursedsword) {                                
            try {
                player.getWorld().dropItem(player.getLocation(), drop);

            } catch (NullPointerException ex) {

            }	 


 

 

bearbeitet von Jinnai4
erneute Formatierung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B