2016-09-12 3 views
1

Ich arbeite an einem Plugin, dass, wenn Sie einen Block wie Stein brechen je nachdem, wie viel Vermögen Sie auf Ihrer Spitzhacke haben, hängt davon ab, wie viel es in Ihr Inventar wird.Minecraft Fortune Blöcke

Plugin Details:

  • Es setzt automatisch blockiert und Erze im Inventar

  • Es automatisch Stinte Erze und blockiert

Ich bin mir nicht ganz sicher, wie man Wenn ein Spieler einen Block wie Stein bricht, legt er mehr als 1 Block in sein Inventar. Und was ich genau machen will, ist, wenn sie Glück 6 auf ihrer Spitzhacke haben, wird sie vielleicht 5 - 7 Blöcke in ihrem Inventar haben, aber wenn sie wie Vermögen 30 haben, werden sie 10 - 15 Blöcke in ihr Inventar legen . Ich habe gerade versucht, mit Optionen herumzuspielen und zu sehen, ob ich es herausfinden könnte, aber ich kann es nicht herausfinden. Ich habe auch keine Erfahrung mit hashmaps, also entschuldige ich mich, wenn ich sie auch falsch mache.

Code:

@EventHandler 
public void fortuneBlock(BlockBreakEvent e) { 
    Player p = (Player) e.getPlayer(); 
    Block b = (Block) e.getBlock(); 

    ItemStack DP = new ItemStack(Material.DIAMOND_PICKAXE); 

    if (p.getInventory().contains(DP)) { 
     if (DP.containsEnchantment(Enchantment.LOOT_BONUS_BLOCKS)) { 
      HashMap<Enchantment, Integer> pickaxe = p.getInventory().getItem(Material.DIAMOND_PICKAXE); 
     } 
    } 
} 

Wenn Sie weitere Informationen benötigen lassen Sie mich wissen.

+0

Zunächst einmal: Welche Version von Minecraft Forge verwenden Sie? Ich kann sagen, dass es nicht auf dem neuesten Stand ist, weil es jetzt "EntityPlayer" und nicht "Player" ist. –

+0

@SomePerson Ich benutze Minecraft Version 1.10. Ich benutze keine Schmiede, die ich wahrscheinlich haben sollte, das war ein Plugin, kein Mod. – MrSanfrinsisco

+0

In diesem ein Bukkit Plugin dann? – 4castle

Antwort

1

getEnchantments()

//Map containing all enchantments of the ItemStack 
//The Map looks like: [KEY,VALUE] 
// [Enchantment.DURABILITY,2], 
// [Enchantment.LOOT_BONUS_BLOCKS,4] 
HashMap<Enchantment, Integer> enchantmentMap = YourItemStack.getEnchantments(); 
//Check if this map contains the wanted Enchantment 
if(enchantmentMap.containsKey(Enchantment.LOOT_BONUS_BLOCKS)) 
//Get VALUE of KEY which is the enchantLevel "4" 
Integer enchantmentLevel = enchantmentMap.get(Enchantment.LOOT_BONUS_BLOCKS); 

Sie eine Karte wie eine Tabelle vorstellen können, hat jeder seine eigene KEYvalue. Deshalb ist die KEY einzigartig.

+0

* Sorry für späte Antwort * Okay, ich sehe genau, was Sie hier tun. Wenn ich eine schnelle Erklärung bekommen könnte, wie es funktioniert, so weiß ich, wie man es auch auf andere Weise benutzt. Die Ganzzahl enchantmentLevel = enchantmentMap.get (Verzauberung.LOOT_BONUS_BLOCKS); Wie funktioniert das, um das Niveau der Verzauberung zu erhalten? Wie weiß es, dass du nach dem Level der Verzauberungen suchst? – MrSanfrinsisco

+0

@MrSanfrinsisco Wie gesagt, eine Map enthält 'Keys' und' Values'. Dein 'Key' ist der Indikator für den' Wert', den du willst. Mit 'get (Key)' fragst du irgendwie nach dem 'Wert', der mit diesem einzigartigen' Schlüssel' verbunden ist. Ein ItemStack kann keine Verzauberung zweimal haben, so dass Sie eine Liste mit eindeutigen 'Schlüsseln' (Verzauberungstyp) mit ihrem' Wert' (Verzauberungsstufe) erhalten können. Am Ende ist eine Karte nur ein schöner Container, um einzigartige Datenpaare zu speichern. – Drayke