Щит абсолютно не тратит прочность

Версия Minecraft
1.21.1
API
Fabric
39
3
3
Я захотел сделать копирку щита с некими отличиями, вроде всё как надо сделал, но он не ломался, дальше я в попытках понять проблему убрал ВСЕ кодовые различия с ванильным щитом, не помогло, а потом я вообще сделал предмет взяв класс щита напрямую, но он всё не ломался, я не понимаю в чём дело
Внизу я выложил все кодовые отличия от ванильного щита, из визуальных отличии (не знаю, правда, к чему это): нет модельки
Ванила:
public static final Item SHIELD = register(
        "shield", new ShieldItem(new Item.Settings().maxDamage(336).component(DataComponentTypes.BANNER_PATTERNS, BannerPatternsComponent.DEFAULT))
    );
Мод:
public static final Item BUCKLER = registerItem(
            "buckler", new ShieldItem(new Item.Settings().maxDamage(336).component(DataComponentTypes.BANNER_PATTERNS, BannerPatternsComponent.DEFAULT))
    );
Это аномалия какая-то
 
Если ваш предмет (копирка щита) не ломается, несмотря на то, что вы сделали его аналогом ванильного щита, это может быть связано с несколькими моментами. Давайте рассмотрим некоторые возможные причины и их решения:

1. Регистрация предмета Убедитесь, что ваш предмет BUCKLER корректно зарегистрирован в вашем моде. Проверьте, что метод registerItem работает так же, как и register для ванильного щита.

2. Проверка механики Возможно, ваша реализация механики сломки щита не совсем правильная. Убедитесь, что механика работает так, как задумано в ванильном щите. Вы можете использовать отладку, чтобы посмотреть, вызываются ли методы, отвечающие за логику сломки.

3. Компоненты и их взаимодействие Убедитесь, что все компоненты (например, DataComponentTypes.BANNER_PATTERNS) корректно настроены. Если в вашем коде есть проблемы с этими компонентами, это может повлиять на поведение предмета.

4. Класс предмета Если вы создаете класс для BUCKLER, убедитесь, что он наследует все необходимые методы от ShieldItem. Проверьте, переопределяются ли какие-либо методы, отвечающие за логику сломки.

5. События Возможно, ваше событие, отвечающее за ломку предметов, не срабатывает для BUCKLER. Проверьте, добавили ли вы обработчик события для вашего нового предмета.

6. Модель и текстура отя отсутствие модели не должно влиять на механики, убедитесь, что у вас есть все необходимые ресурсы для вашего предмета, чтобы избежать других проблем.

Пример кода для регистрации предмета

Убедитесь, что ваш код регистрации выглядит примерно так:

Java:
public static final Item BUCKLER = registerItem(
    "buckler",
    new ShieldItem(new Item.Settings().maxDamage(336).group(ItemGroup.COMBAT))
);

Проверка механики сломки

Если у вас есть доступ к коду ванильного щита, посмотрите на его методы. Например, методы, отвечающие за повреждение и сломку, могут выглядеть так:

Java:
@Override
public boolean damage(ItemStack stack, int amount, LivingEntity user, Consumer<LivingEntity> onBroken) {
    // Логика повреждения
    return true; // или false, в зависимости от результата
}

Пример проверки событий

Также убедитесь, что ваше событие сломки предмета выглядит так:

Java:
@SubscribeEvent
public void onPlayerDamageEvent(LivingHurtEvent event) {
    if (event.getEntity() instanceof PlayerEntity) {
        PlayerEntity player = (PlayerEntity) event.getEntity();
        ItemStack itemStack = player.getMainHandStack();
        if (itemStack.getItem() instanceof YourCustomShieldItem) {
            // Логика обработки урона
        }
    }
}

Если все вышеперечисленное не помогло, попробуйте изолировать проблему, создав минимальный рабочий пример вашего предмета и проверить, будет ли он функционировать.
 
Если ваш предмет (копирка щита) не ломается, несмотря на то, что вы сделали его аналогом ванильного щита, это может быть связано с несколькими моментами. Давайте рассмотрим некоторые возможные причины и их решения:
Это же ответ chatgpt
 
Назад
Сверху