• 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!

PlayerHider - Programmierung

eleminaiter

Minecrafter
Registriert
25 November 2015
Beiträge
7
Alter
26
Diamanten
300
Hallo,

ich programmiere derzeit ein Plugin welches Spieler versteckt. Nun soll auf das Item auf welches geklickt wird, die Verzauberungungs Animation bekommen. Nur wenn ich auf das Item klicke, dann werden alle Spieler versteckt und der entsprechende Sound wird abgegeben, aber das Item ändern sich nicht bzw kriegt die Animation.

Code:
    @EventHandler
    public void onInventoryClick(InventoryClickEvent e) {

        FileConfiguration messages = Main.getPlugin().getMessagesFile();
        FileConfiguration config = Main.getPlugin().getConfigFile();

        Player p = (Player) e.getWhoClicked();

        if (e.getView().getTitle().equalsIgnoreCase(ChatColor.translateAlternateColorCodes('&', messages.getString("PlayerHider.Settings.Inventory.Name")))) {

            e.setCancelled(true);

            if (e.getClickedInventory() != null) {
                if (!e.getCurrentItem().getType().equals(Material.valueOf(config.getString("PlayerHiderPlaceholderItem")))) {

                    if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§4Hide All Players")) {

                        for (Player onlineplayers : Bukkit.getOnlinePlayers()) {
                            p.hidePlayer(Main.getPlugin(), onlineplayers);
                        }
                           
                        ItemStack item = e.getCurrentItem();
                        ItemMeta itemmeta = item.getItemMeta();
                        item.addUnsafeEnchantment(Enchantment.LUCK, 1);
                        itemmeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
                        item.setItemMeta(itemmeta);

                        p.playSound(p.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 2F, 1F);
                    }

                } else {
                    return;
                }
            } else {
                return;
            }
        }

    }
 
Zuletzt bearbeitet:

eleminaiter

Minecrafter
Registriert
25 November 2015
Beiträge
7
Alter
26
Diamanten
300
Nun habe ich das Item entfernt und dann ein neues Item mit den selben Namen usw.. an den gleich Platz gesetzt. Nur wird komischerweise das die Verzauberungsanimation nicht gesetzt.

Code:
    @EventHandler
    public void onInventoryClick(InventoryClickEvent e) {

        FileConfiguration messages = Main.getPlugin().getMessagesFile();
        FileConfiguration config = Main.getPlugin().getConfigFile();

        Player p = (Player) e.getWhoClicked();

        if (e.getView().getTitle().equalsIgnoreCase(ChatColor.translateAlternateColorCodes('&', messages.getString("PlayerHider.Settings.Inventory.Name")))) {

            e.setCancelled(true);

            if (e.getClickedInventory() != null) {
                if (!e.getCurrentItem().getType().equals(Material.valueOf(config.getString("PlayerHiderPlaceholderItem")))) {

                    if (e.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§4Hide All Players")) {

                        for (Player onlineplayers : Bukkit.getOnlinePlayers()) {
                            p.hidePlayer(Main.getPlugin(), onlineplayers);
                        }
                        
                        Inventory inv = e.getInventory();
                            
                        ItemStack item = e.getCurrentItem();
                        inv.remove(item);
                        
                        ItemStack newitem = new ItemStack(Material.RED_WOOL);
                        ItemMeta newitemmeta = newitem.getItemMeta();
                        newitem.addUnsafeEnchantment(Enchantment.LUCK, 1);
                        newitemmeta.setDisplayName("§4Hide All Players");
                        newitemmeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
                        newitem.setItemMeta(newitemmeta);
                        inv.setItem(8 - 1, newitem);
                        

                        p.playSound(p.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 2F, 1F);
                    }

                } else {
                    return;
                }
            } else {
                return;
            }
        }

    }
 

TrinityX

Redstoneengineer
Registriert
17 Mai 2020
Beiträge
47
Alter
23
Diamanten
337
Minecraft
NichtTrinity
Erstens, wieso schreibst du
Java:
inv.setItem(8 - 1, newitem);
anstatt einfach
Java:
inv.setItem(7, newitem);
Außerdem müsstest du nicht einen neuen ItemStack erstellen sondern einfach das alte Item verändern.
Und die Enchantments werden in der Regel vor den Metadaten definiert.
 

TrinityX

Redstoneengineer
Registriert
17 Mai 2020
Beiträge
47
Alter
23
Diamanten
337
Minecraft
NichtTrinity
Also sieht das jetzt so bei dir aus?
Java:
ItemStack item = e.getCurrentItem();
item.addUnsafeEnchantment(Enchantment.LUCK, 1);
ItemMeta itemmeta = item.getItemMeta();
itemmeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
item.setItemMeta(itemmeta);
 
Oben