1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Проблема в создании зачарований

Тема в разделе "Разработка плагинов для новичков", создана пользователем kolis1on, 23 мар 2023.

  1. Автор темы
    kolis1on

    kolis1on Активный участник Пользователь

    Баллы:
    76
    Вообщем пытаюсь создать кастомное зачарование.

    Есть такой класс EnchantmentWrapper

    Код:
    package org.kolis1on.enchants;
    
    import org.bukkit.ChatColor;
    import org.bukkit.NamespacedKey;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.enchantments.EnchantmentTarget;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    
    
    public class EnchantmentWrapper extends Enchantment {
    
        private final String name;
        private final int maxLvl;
    
        private final EnchantmentTarget target;
    
        public EnchantmentWrapper(String namespace, String name, int maxLvl, EnchantmentTarget target) {
            super(NamespacedKey.minecraft(namespace));
            this.name = name;
            this.maxLvl = maxLvl;
            this.target = target;
        }
    
        @Override
        public String getName() {
            return this.name;
        }
        @Override
        public int getMaxLevel() {
            return maxLvl;
        }
    
        @Override
        public int getStartLevel() {
            return 1;
        }
    
        @Override
        public EnchantmentTarget getItemTarget() {
            return target;
        }
    
        @Override
        public boolean isTreasure() {
            return false;
        }
    
        @Override
        public boolean isCursed() {
            return false;
        }
    
        @Override
        public boolean conflictsWith(Enchantment enchantment) {
            return false;
        }
    
        @Override
        public boolean canEnchantItem(ItemStack itemStack) {
            return true;
        }
    }
    
    А так же класс с зачарованием

    Код:
    package org.kolis1on.enchants.enchants;
    
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.enchantments.EnchantmentTarget;
    import org.kolis1on.enchants.EnchantmentWrapper;
    
    import java.lang.reflect.Field;
    import java.util.Arrays;
    import java.util.stream.Collectors;
    
    public class CustomEnchants {
        public static final Enchantment LAVA_WALKER = new EnchantmentWrapper("lava_walker", "Лаваход", 1, EnchantmentTarget.ARMOR_FEET  );
    
        public static void register(){
            boolean registered = Arrays.stream(Enchantment.values()).collect(Collectors.toList()).contains(LAVA_WALKER);
            if(!registered){
                registerEnchantment(LAVA_WALKER);
            }
        }
    
        public static void registerEnchantment(Enchantment enchantment){
            boolean registered = true;
            try{
                Field f = Enchantment.class.getDeclaredField("acceptingNew");
                f.setAccessible(true);
                f.set(null, true);
                Enchantment.registerEnchantment(LAVA_WALKER);
            }
            catch(Exception e){
                registered = false;
                e.printStackTrace();
            }
            if(registered){
                System.out.println("Enchant successfully register");
            }
        }
    }
    
    В главном класе вызываю метод

    CustomEnchants.register();

    Но пробелма в том что как бы я не пытался зачарить через команду либо же добавлять чар с помощью addUnsafedEnchant(), он никак не работает. Но сам чар успешно регистрируеться
     
  2. 0xLairon1

    0xLairon1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    BukkitAPI не позволяет нормально регать новые зачарования, даже если получится то его имя не будет отображено на клиенте, потому что на клиенте нету такого зачарования.
    Когдато я пытался добавить свой чар.
    Могу посоветовать использовать плагин EcoEnchants для кастомных чаров, он работает на пакетах и nms и зачарования можно получить всеми ванильными способами
     
  3. Автор темы
    kolis1on

    kolis1on Активный участник Пользователь

    Баллы:
    76
    А есть вариант использовать стороннее API для создания заварований?
     
  4. 0xLairon1

    0xLairon1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    Можешь попробовать использовать EcoEnchants как API, Но он на котлине и доков к нему нет, но есть открытый код на github
     

Поделиться этой страницей