Как изменить количество выпадаемого опыта с мобов 1.16.5

Версия Minecraft
1.16.5
API
Forge
76
3
5
Как изменить/запретить количество выпадаемого опыта с мобов, да и вообще есть ли какой-нибудь док с описанием и примерами всех метадов, сколько не искал, все видут сюда.
И ещё, создал новый проект, при создании новых методов через сочетание клавиш LCtrl + o отсутствуют методы, кроме стандартных, есть инфа как это фиксить?
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    22.9 KB · Просмотры: 12
Последнее редактирование:
76
3
5
Java:
@SubscribeEvent
public static void onDamage(AttackEntityEvent event) {
    if (event.getTarget().isAlive()) {
        LivingEntity target = (LivingEntity) event.getTarget();
        PlayerEntity player = (PlayerEntity) event.getEntity();
        if (target.getHealth() < 0) {
            String msg = TextFormatting.RED + "You kill";
            player.sendMessage(new StringTextComponent(msg), player.getUniqueID());
        }
    }
}

Создал ивент который должен был писать в чат, когда у таргета не оставалось хп, но ничего не происходит, так же вставить onDeath() не могу, не даёт, пробовал сделать через LivingDeathEvent, так и не понял как отлавливать смерть существа.
Можно какой-нибудь пример на отлов смерти существа
 
Последнее редактирование:
76
3
5
С отловом существ и добавлением нового дропа я разобрался, но как теперь изменить имеющуюся таблицу дропа для всех существ?

Java:
@SubscribeEvent
    public static void onDeath(LivingDeathEvent event) {
        if (event.getEntity() instanceof MobEntity) {
            MobEntity entity = (MobEntity) event.getEntity();
            entity.entityDropItem(new ItemStack(Items.DIAMOND));
        }
    }
 
76
3
5
Так, хорошо, дроп экспы с мобов я отключил

Java:
@SubscribeEvent
    public static void DelDropExperienceMob(LivingExperienceDropEvent event){
        if (event.isCancelable()) {
            event.setCanceled(true);
        }
    }
Но таким же метадом с руды не получается.
И попытался выдавать опыт за убийства, но игра крашится через какое-то время после убийства
у меня есть догадки, что выдача опыта происходи с серверной части

Сама ошибка
Java:
Server thread/ERROR] [ne.mi.ev.EventBus/EVENTBUS]: Exception caught during firing event: net.minecraft.util.text.TranslationTextComponent cannot be cast to net.minecraft.entity.player.PlayerEntity


Так пытаюсь выдать опыт
Java:
@SubscribeEvent // доп предметы с мобов
    public static void onDeath(LivingDeathEvent event) {
        if (event.getEntity() instanceof MobEntity) {
            MobEntity entity = (MobEntity) event.getEntity();
            entity.entityDropItem(new ItemStack(Items.DIAMOND));

            PlayerEntity player = (PlayerEntity) event.getEntity().getName();
            player.addExperienceLevel(1);
        }
    }
 
1,330
104
225
(PlayerEntity) event.getEntity().getName();
Ты пытаешься получить ИМЯ игрока, а не игрока. А ИМЯ игрока это не игрок.
Для блоков уже юзается BlockEvent.BreakEvent. Вот пример:

Java:
@SubscribeEvent
public static void xpDrop(BlockEvent.BreakEvent e) {
        if(e.getPlayer() != null && e.getPlayer().getMainHandItem().isEnchanted()) {//Проверка на то что игрок существует и предмет в руке  зачарован
            Map<Enchantment, Integer> data =
                    EnchantmentHelper.getEnchantments(e.getPlayer().getMainHandItem());//Получение зачарований на предмете
            if(data.containsKey(EnchantmentRegister.XP_BOOST.get()))//Если есть нужное мне зачарование
                e.setExpToDrop(e.getExpToDrop() *//Тут и меняется кол-во опыта
                        data.get(EnchantmentRegister.XP_BOOST.get()));//Я вот увеличиваю кол-во опыта путём умножения изначального кол-ва опыта на уровень нужного мне зачарования.
        }
    }
 
Сверху