Jinnai4 Geschrieben 27. August 2017 Share Geschrieben 27. August 2017 (bearbeitet) 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 27. August 2017 von Jinnai4 Code-Layout Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 28. August 2017 Share Geschrieben 28. August 2017 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 More sharing options...
Jinnai4 Geschrieben 28. August 2017 Autor Share Geschrieben 28. August 2017 (bearbeitet) 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 28. August 2017 von Jinnai4 erneute Formatierung Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden