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

Помогите Как правильно создать кастомное зачарование?

Тема в разделе "Разработка плагинов для новичков", создана пользователем MySoR, 30 май 2022.

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

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

    Баллы:
    76
    Имя в Minecraft:
    MySoR
    Недавно увидел как можно создать свое кастом зачарование, чтобы оно и в чаровальном столе выпадало и в данжах в виде книг лежало. Попытался сделать свое но на клиенте не видно его название и уровень.
    Код:
    public class Enchantment3x3 extends Enchantment {
    
        public Enchantment3x3(@NotNull NamespacedKey key) {
            super(key);
            fix(this);
        }
    
        @Override
        public @NotNull String getName() {
            return "Копатель";
        }
    
        @Override
        public int getMaxLevel() {
            return 3;
        }
    
        @Override
        public int getStartLevel() {
            return 0;
        }
    
        @Override
        public @NotNull EnchantmentTarget getItemTarget() {
            return EnchantmentTarget.TOOL;
        }
    
        @Override
        public boolean isTreasure() {
            return false;
        }
    
        @Override
        public boolean isCursed() {
            return false;
        }
    
        @Override
        public boolean conflictsWith(@NotNull Enchantment other) {
            return false;
        }
    
        @Override
        public boolean canEnchantItem(@NotNull ItemStack item) {
            return true;
        }
    
        @Override
        public @NotNull Component displayName(int level) {
            return Component.text("Копатель");
        }
    
        @Override
        public boolean isTradeable() {
            return false;
        }
    
        @Override
        public boolean isDiscoverable() {
            return true;
        }
    
        @Override
        public @NotNull EnchantmentRarity getRarity() {
            return EnchantmentRarity.VERY_RARE;
        }
    
        @Override
        public float getDamageIncrease(int level, @NotNull EntityCategory entityCategory) {
            return 0;
        }
    
        @Override
        public @NotNull Set<EquipmentSlot> getActiveSlots() {
            return Set.of(EquipmentSlot.HAND);
        }
    
        @Override
        public @NotNull String translationKey() {
            return "customenchants.3x3";
        }
    
        private void fix(Enchantment ench) {
            try {
                try {
                    Field f = Enchantment.class.getDeclaredField("acceptingNew");
                    f.setAccessible(true);
                    f.set(null, true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    Enchantment.registerEnchantment(ench);
                } catch (IllegalArgumentException e) {
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    На клиенте ключ локализации customenchants.3x3 есть?
    В логах клиента что?
     
    Последнее редактирование: 31 май 2022
  3. Автор темы
    MySoR

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

    Баллы:
    76
    Имя в Minecraft:
    MySoR
    ключа customenchants.3x3 нет, поставил ключ от game paused для теста тоже не отображает (
    menu.paused
    ). И кстати на одном сервере сделаны эти зачарования без всяких ключей локализации и рп просто ванильный сервер. И там отображаются все имена и тд. Если нужен рп то это не проблема.
    Код:
    [11:57:05] [Render thread/INFO]: Connecting to localhost, 25565
    [11:57:49] [Render thread/INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD'
    [11:57:85] [Render thread/WARN]: Unknown custom packed identifier: minecraft:register
    [11:57:52] [Render thread/INFO]: [CHAT] [PlayerParticles] An update (v8.1) is available! You are running v8.0. https://www.spigotmc.org/resources/playerparticles.40261/
    [11:57:52] [Render thread/INFO]: [CHAT] Lairon1 присоединился к игре
    [11:57:52] [Render thread/WARN]: Received packet for unknown team 7Lairon1A: team action: REMOVE, player action: null
    [11:57:64] [Render thread/INFO]: Loaded 209 advancements
    [11:57:83] [Render thread/INFO]: [CHAT] Доступна новая версия §eOptiFine§f: §e§nHD Ultra H6§r§f
    [11:57:30] [Render thread/INFO]: [CHAT] 36
    [11:57:73] [Render thread/INFO]: [CHAT] 36
    
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Есть предложение getStartLevel() сменить на 1. Но сомневаюсь, что поможет.
    Других идей пока нет.
    Зачарован е точно вешается на предмет?
    Было бы неплохо на клиенте просмотреть его NBT модом
     
  5. Автор темы
    MySoR

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

    Баллы:
    76
    Имя в Minecraft:
    MySoR
    Зачарование точно весит на предмете, я могу его отслеживать в листенерах и давать ему какую-то логику. Предмет даже стает зачарованым типо перелевается но имени зачара нет.
     
  6. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Клиент же не знает, что это за зачарование такое, вот и не отображает - ему ж только NBT предмета поступает, в котором содержится лишь циферный id и уровень чара. translationKey же в основном лишь вспомогательный метод для работы с чарами (мб где-то внутренне и используется, но так сходу не вспомню). Остается лишь костылить - либо править предметы пакетами, либо просто добавить чар в описание.
     
  7. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    А как пакеты помогут клиенту узнать о зачаровании?

    ТС, какая версия сервера?
     
  8. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Имею ввиду, чтоб крепить пакетами описания чаров к предметам, чтоб не конфликтовало с другими плагинами на изменение описаний. Хотя и звучит как слишком большой объем работы для подобной мелочи.
     
  9. Автор темы
    MySoR

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

    Баллы:
    76
    Имя в Minecraft:
    MySoR
    А если сделать мод на какомто из ML чтобы оно добавляло этот зачар а на сервере сделать зачар плагином то это в теории будет работать?
     
  10. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Схема упроротая, но если будут совпадать id, то, думаю, работать будет.
     

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