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

  • Автор темы Автор темы 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();
        }
    }
}
 
На клиенте ключ локализации customenchants.3x3 есть?
В логах клиента что?
 
Последнее редактирование:
На клиенте ключ локализации customenchants.3x3 есть?
В логах клиента что?
ключа 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
 
Есть предложение getStartLevel() сменить на 1. Но сомневаюсь, что поможет.
Других идей пока нет.
Зачарован е точно вешается на предмет?
Было бы неплохо на клиенте просмотреть его NBT модом
 
Есть предложение getStartLevel() сменить на 1. Но сомневаюсь, что поможет.
Других идей пока нет.
Зачарован е точно вешается на предмет?
Было бы неплохо на клиенте просмотреть его NBT модом
Зачарование точно весит на предмете, я могу его отслеживать в листенерах и давать ему какую-то логику. Предмет даже стает зачарованым типо перелевается но имени зачара нет.
 
Клиент же не знает, что это за зачарование такое, вот и не отображает - ему ж только NBT предмета поступает, в котором содержится лишь циферный id и уровень чара. translationKey же в основном лишь вспомогательный метод для работы с чарами (мб где-то внутренне и используется, но так сходу не вспомню). Остается лишь костылить - либо править предметы пакетами, либо просто добавить чар в описание.
 
Клиент же не знает, что это за зачарование такое, вот и не отображает - ему ж только NBT предмета поступает, в котором содержится лишь циферный id и уровень чара. translationKey же в основном лишь вспомогательный метод для работы с чарами (мб где-то внутренне и используется, но так сходу не вспомню). Остается лишь костылить - либо править предметы пакетами, либо просто добавить чар в описание.
А как пакеты помогут клиенту узнать о зачаровании?

ТС, какая версия сервера?
 
А как пакеты помогут клиенту узнать о зачаровании?
Имею ввиду, чтоб крепить пакетами описания чаров к предметам, чтоб не конфликтовало с другими плагинами на изменение описаний. Хотя и звучит как слишком большой объем работы для подобной мелочи.
 
А если сделать мод на какомто из ML чтобы оно добавляло этот зачар а на сервере сделать зачар плагином то это в теории будет работать?
 
А если сделать мод на какомто из ML чтобы оно добавляло этот зачар а на сервере сделать зачар плагином то это в теории будет работать?
Схема упроротая, но если будут совпадать id, то, думаю, работать будет.
 
Назад
Верх