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:
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:
Hier ist eines meiner Specail Enchants:
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;
}
}