Enchantments in spigot

Cury

Aktives Mitglied
Guten Morgen,
Ich habe ein kleines Problem mit eigenen Enchantments. Ich habe mir 2 specail Enchantments ausgedacht, und diese umgesetzt. Das funktioniert auch alles prima. Ich will jetzt aber einfügen, dass man seine specail Enchantments mit Scherben, die einens der specail enchants erhalten, leveln kann. Dafür habe ich mir eine Scherbe gemacht, die ein Specailenchantment hat:

Java:
ItemStack scherbe2 = new ItemStack(Material.PRISMARINE_SHARD);
scherbe2.addEnchantment(blind, 1);
ItemMeta meta3 = scherbe2.getItemMeta();
meta3.setDisplayName("§bSpecial Scherbe");
meta3.setLore(Arrays.asList("§7" + blind.getName() + " I"));
scherbe2.setItemMeta(meta3);
p.getInventory().addItem(scherbe2);

Das Item im Spiel hat eine Lore und leuchtet, wie es bei Enchanteten Items üblich ist.
Ich habe mir jetzt ein eigenes Inventar erstellt, in dem man die Items aufleveln können soll.

Dort will ich abfragen, ob das 2. Item eine Scherbe ist, ob das 1. Item ein Item ist, welches verbaubert werden darf. Dann will ich die Enchantments von der Scherbe getten und abfragen, ob das erste Item dieses Enchantment auch hat und auf dem gelichen Level hat, wie das vom 2. Item und nicht auf dem maximal Level ist.

Hier ist meine Abfrage:
Java:
if(anvil.getItem(13).getType() == Material.PRISMARINE_SHARD){
   ItemStack slot11 = anvil.getItem(11);
   if(msg.getAllowedItems().contains(slot11.getType())) {
           ItemStack shard = anvil.getItem(13);
         Map<Enchantment, Integer> enchants = shard.getItemMeta().getEnchants();
      //Map<Enchantment, Integer> enchants = shard.getEnchantments(); hatte beides ausprobiert, ging beides nicht
        Bukkit.broadcastMessage(enchants.keySet().size() + " anzahl der enchants");  //Hier wird immer 0 ausgegeben
        for (Enchantment ench : enchants.keySet()) {
            Bukkit.broadcastMessage(ench.getName()); //für mich zum debuggen...wird aber nie ausgefürht
            if (slot11.containsEnchantment(ench)) {
                 if(enchants.get(ench) >= ench.getMaxLevel()){
                     return;
                 }
                 if(slot11.getEnchantmentLevel(ench) == Prison.getInstance().getLevel(shard, ench)){
                     Bukkit.broadcastMessage("geht"); //wird nie ausgeführt
                     anvil.setItem(16, go);
                 }
             }
           }
       }else if(anvil.getItem(13).getType().equals(Material.PRISMARINE_SHARD)){
           p.sendMessage("2 shards");
     }
}


Hier ist eines meiner Specail Enchants:
Java:
package de.blaunitrox.prison.enchants;

import de.blaunitrox.prison.main.Prison;
import org.bukkit.Bukkit;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.enchantments.EnchantmentTarget;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

public class BlindEnchantment extends Enchantment implements Listener {

    public BlindEnchantment(int id) {
        super(id);
    }

    @EventHandler
    public void onHit(EntityDamageByEntityEvent e){
         //Hier ist mein Event
    }

    @Override
    public int getId(){
        return 101;
    }

    @Override
    public String getName() {
        return "Blind";
    }

    @Override
    public int getMaxLevel() {
        return 1;
    }

    @Override
    public int getStartLevel() {
        return 1;
    }

    public int getLevel(ItemStack item){
        if(item.containsEnchantment(this)){
            return item.getEnchantmentLevel(this);
        }
        return 0;
    }

    @Override
    public EnchantmentTarget getItemTarget() {
        return EnchantmentTarget.WEAPON;
    }

    @Override
    public boolean conflictsWith(Enchantment enchantment) {
        return false;
    }

    @Override
    public boolean canEnchantItem(ItemStack itemStack) {
        return true;
    }
}
 

Cury

Aktives Mitglied
Muss ich das Enchantment anders getten z.B. per ID, bzw. der einen unique eigenschaft, also in meinem Fall die ID
 

Cury

Aktives Mitglied
Achso...wenn ich schon bei dem Thema bist, wie kann ich in einer Abfrage abfragen, ob das Item auf slot11 das richtigeItemTarget hat?
 

Neue Themen


Oben