Помогите Добавление урона для предмета

xXCopafumeXx

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
xXCopafumeXx
Я создал предмет, который можно крафтить у верстаке. Так вот мне нужно выставить ему урон. Слышал про attribute modifiers но как его написать. Вот сам предмет
private void craft() {
ItemStack item = new ItemStack(Material.DIAMOND_AXE);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(ChatColor.RED + "Боевой топор");
List<String> lore = new ArrayList<String>();
lore.add("Боевой топор");
meta.setLore(lore);
item.setItemMeta(meta);
ShapedRecipe s = new ShapedRecipe(item);
s.shape(new String[] {"A A", " B ", "A A"});
s.setIngredient('A', Material.DIAMOND);
s.setIngredient('B', Material.DIAMOND_AXE);
Bukkit.getServer().addRecipe(s);
 
Я создал предмет, который можно крафтить у верстаке. Так вот мне нужно выставить ему урон. Слышал про attribute modifiers но как его написать. Вот сам предмет
private void craft() {
ItemStack item = new ItemStack(Material.DIAMOND_AXE);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(ChatColor.RED + "Боевой топор");
List<String> lore = new ArrayList<String>();
lore.add("Боевой топор");
meta.setLore(lore);
item.setItemMeta(meta);
ShapedRecipe s = new ShapedRecipe(item);
s.shape(new String[] {"A A", " B ", "A A"});
s.setIngredient('A', Material.DIAMOND);
s.setIngredient('B', Material.DIAMOND_AXE);
Bukkit.getServer().addRecipe(s);
Кастишь мету к Damageable (не забыв проверить, что кастится)
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/meta/Damageable.html#setDamage-int-
 
Код:
    public ItemBuilder setDamage(int damage) {
        ItemMeta meta = stack.getItemMeta();
        if(meta instanceof Damageable) {
            ((Damageable) meta).setDamage(damage);
        }
        this.stack.setItemMeta(meta);
        return this;
    }
Код:
public class ItemBuilder {
    ItemStack stack;
    public ItemBuilder(Material m) {
        this.stack = new ItemStack(m);
    }
    public ItemBuilder setName(String name) {
        ItemMeta meta = stack.getItemMeta();
        meta.setDisplayName(name);
        this.stack.setItemMeta(meta);
        return this;
    }
   
    public ItemBuilder setRepaircost(int damage) {
        ItemMeta meta = stack.getItemMeta();
        if(meta instanceof Repairable) {
            ((Repairable) meta).setRepairCost(damage);
        }
        this.stack.setItemMeta(meta);
        return this;
    }
   
    public ItemBuilder setDamage(int damage) {
        ItemMeta meta = stack.getItemMeta();
        if(meta instanceof Damageable) {
            ((Damageable) meta).setDamage(damage);
        }
        this.stack.setItemMeta(meta);
        return this;
    }
    public ItemBuilder setAmount(int amount) {
        this.stack.setAmount(amount);
        return this;
    }
    public ItemBuilder setLore(String... name) {
        ItemMeta meta = stack.getItemMeta();
        meta.setLore(Arrays.asList(name));
        this.stack.setItemMeta(meta);
        return this;
    }
    public ItemBuilder addEnchantment(String... name) {
        ItemMeta meta = stack.getItemMeta();
        for (String e : name) {
            EnchantmentWrapper ench = new EnchantmentWrapper(e.split(":")[0]);
            meta.addEnchant(ench, Integer.parseInt(e.split(":")[1]), true);
        }
        this.stack.setItemMeta(meta);
        return this;
    }
    public ItemBuilder setUnbreakable() {
        ItemMeta meta = stack.getItemMeta();
        meta.setUnbreakable(true);
        this.stack.setItemMeta(meta);
        return this;
    }
   
    public ItemBuilder setCustomModelData(int data) {
        ItemMeta meta = stack.getItemMeta();
        meta.setCustomModelData(data);
        this.stack.setItemMeta(meta);
        return this;
    }
    public ItemStack build() {
        return this.stack;
    }
}
 
Последнее редактирование:
public ItemBuilder setDamage(int damage) { ItemMeta meta = stack.getItemMeta(); if(meta instanceof Damageable) { ((Damageable) meta).setDamage(damage); } this.stack.setItemMeta(meta); return this; }
У меня неработает, как его именно в мой код вставить ?
 
Ну можешь мой итем билдер целиком забрать из спойлера.
Нет, смотри можешь его сойденить с моим кодом на крафт, ну и показать как это будет у меня просто там ошибки
 
Нет, смотри можешь его сойденить с моим кодом на крафт, ну и показать как это будет у меня просто там ошибки
ItemStack item = new ItemBuilder(Material.STONE).setName(ChatColor.RED + "Боевой топор").setLore("Боевой топор").setDamage(100).build();
 
Назад
Верх