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

PlugIn Brauche Hilfe beim Droppen von Items, mit einem bestimmten Item und einer bestimmten Chance!

Freestyler431

Minecrafter
Registriert
21 Oktober 2020
Beiträge
9
Diamanten
51
Hey, ich programmiere noch nicht lange und hänge jetzt an einer Stelle fest, ich hoffe ihr könnt mir dort weiterhelfen.
Ich möchte es so machen das wenn man mit dem bestimmten Item Erz abbaut, das eine kleine Chance ist das dabei Smaragde droppen, nun weis ich nicht wie ich dies programmieren soll.


Code::
package de.mixelitems.mixelitems.cmd;

import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.ArrayList;
import java.util.List;

public class spCMD implements CommandExecutor {


    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        Player p = (Player) sender;
        if(sender instanceof Player) {
            if(p.hasPermission("mi.diahunter")) {

                List<String> Lore = new ArrayList();
                Lore.add("");
                Lore.add("§7• §r§a§oMit Smaragden verfeinert..");
                Lore.add("§7• §fDiese Spitzhacke besitzt eine kleine");
                Lore.add("    §fChance während der Nutzung");
                Lore.add("    §aSmaragde §ffallen zu lassen!");
                Lore.add("");

                ItemMeta meta = (ItemMeta) new ItemStack(Material.DIAMOND_PICKAXE).getItemMeta();
                meta.setDisplayName("§2§l§kaa §r§6§l[§a§lSmaragdgrün§6§l] §a§lSpitzhacke §r§2§l§kaa");
                meta.setLore(Lore);

                ItemStack d = (new ItemStack(Material.DIAMOND_PICKAXE));
                d.setItemMeta(meta);
                d.addUnsafeEnchantment(Enchantment.DIG_SPEED, 6);

                p.getInventory().addItem(d);
                p.sendMessage("§2§l§kaa §r§6§l[§a§lSmaragdgrün§6§l] §a§lSpitzhacke §r§2§l§kaa §r§aerhalten!");



            }else{
                p.sendMessage("");
                p.sendMessage("§cDU hast dazu keine Rechte! §9[§emi.smaggi§9]");
                p.sendMessage("");
            }
        }else{
            sender.sendMessage(" ");
            sender.sendMessage("§cDu musst ein Spieler sein!");
            sender.sendMessage(" ");
        }
        return false;
    }
}

~MFG Freestyler431
 

OffclColumbus

Minecrafter
Registriert
19 Oktober 2020
Beiträge
3
Diamanten
50
Wieso nicht? Das BlockBreakEvent benötigst du sowieso um abzufragen ob ein Erz abgebaut wird. Und darüber steuerst du dann auch den Drop.

Als erstes fragst du im Event ab ob es sich bei dem Block um ein Erz handelt. In meinem Beispiel jetzt Eisen
event.getBlock().getType() == Material.IRON_ORE

Als nächstes dann ob der Spieler die Spitzhacke benutzt hat, ich würde das jetzt mit getItemInMainHand() lösen, weiß nicht ob es da andere Wege gibt.
player.getInventory().getItemInMainHand().getItemMeta().getDisplayName().equalsIgnoreCase("§2§l§kaa §r§6§l[§a§lSmaragdgrün§6§l] §a§lSpitzhacke §r§2§l§kaa")

Dann rechnest du aus ob es einen Drop gibt oder nicht. Anschließend dann dropst du das Item. In meinem Fall 3 Smaragde
player.getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.EMERALD, 3));
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
340
Diamanten
73
Als nächstes dann ob der Spieler die Spitzhacke benutzt hat, ich würde das jetzt mit getItemInMainHand() lösen, weiß nicht ob es da andere Wege gibt.
player.getInventory().getItemInMainHand().getItemMeta().getDisplayName().equalsIgnoreCase("§2§l§kaa §r§6§l[§a§lSmaragdgrün§6§l] §a§lSpitzhacke §r§2§l§kaa")
Ich würde anstatt nach dem DisplayName zu schauen, einfach einen Tag in den PersistentDataHolder hinzufügen. Dann überlebt die Spitzhacke auch das umbenennen im Amboss und du kannst auch zwischendrin den Namen der Spitzhacke ändern, solltest du mal einen Schreibfehler finden:

Zudem solltest du natürlich entsprechend null-Prüfungen einbauen, getItemMeta is Nullable.
 
Oben