Комплексное событие

Версия Minecraft
1.12.2
1,031
19
87
Доброго времени суток. С событиями дело имею впервые, так что не судите строго. Задумка состоит вот в чем: когда умирает конкретный моб от конкретного оружия, при наличии у игрока в инвентаре (будь то хотбар или вторая рука) конкретного предмета, его убрать (если несколько то уменьшить, но это я умею) и в инвентарь игрока добавить другой предмет. По логике представляю себе это так: умирает сущность, если умирает от конкретного оружия продолжить, получить её ID, в соответствии с полученным, получить инвентарь игрока, проверить его на наличие ItemStack-а нужного предмета, по необходимости его уменьшить и в инвентарь игрока добавить новый или добавить в старый ItemStack другого предмета. Опять же, могу ошибаться, ибо первый раз делаю событие и прошу не разводить тут как обычно. Вот тестовая безрезультатная попытка:
Код:
public class EventScytheUsed extends Event {
   
    public LivingDeathEvent getLivingDeathEvent(EntityMob mob, EntityPlayer player) {
       
            ItemStack stack = new ItemStack(Items.GLASS_BOTTLE);
           
            if (player.inventory.getItemStack() == stack) {
               
                if (!player.capabilities.isCreativeMode) {
                   
                    stack.shrink(1);
                   
                }
               
                player.addItemStackToInventory(new ItemStack(Items.EXPERIENCE_BOTTLE));
               
            }
       
        return this.getLivingDeathEvent(mob, player);
       
    }

}
Код:
public class EventsInit {
   
    public static void registerEvents() {
       
        MinecraftForge.EVENT_BUS.register(EventScytheUsed.class);
       
    }

}
Код:
public class CommonProxy {
   
    public void preInit(FMLPreInitializationEvent event) {
       
        ItemsInit.registerItems();
        BlocksInit.registerBlocks();

    }

    public void init(FMLInitializationEvent event) {
       
        RecipesInit.registerRecipes();
        GeneratorsInit.registerGenerators();
        EventsInit.registerEvents();

    }

}
 
5,018
47
783
Эвент, это событие. Событие вызывается в какой то момент посреди выполнения кода. Или в конце. В ванилле нет эвентов. Вот грок кликает по блоку правой рукой и выполняется ванильный код + хук форджа, который вставляет туда еще строчку, которая вызывает метод эвента. И в итоге ты можешь делать что-то, что связано с тем кодом, куда была засунута строчка. Строчка засовывается хуком, как ты уже догадался
 
1,031
19
87
Ладно, в таком случае можно провернуть задумку таким способом: при ударе моим оружием моба ему типу сетается /kill и некоторые предметы заменяются?
PS: если и можно, то у меня траблы с добавлением предметов в инвентарь и с получением инвентаря, потому в некоторой теме сделал дропом, но если бы именно добавить итемстак в инвентарь игрока, но подозреваю это нужно чекать слоты?
 

Sainthozier

Стрелочник
623
11
369
Зачем в 1.12 наследовать от Event? Разве это не для создания кастомных ивентов?
И что это за метод такой? Удаляй всё, делай по новой )

Вот тут можешь вкратце ознакомиться с ивентами, а тут - наглядно увидеть работу с ними. Хоть бы погуглил сперва )

P.S. Посмотрев на код, потом на твою статистику, потом снова на код - мне становится страшно. За 1к сообщений не научился базовым вещам? ) Или только перешёл на 1.12?

P.P.S.
Эвент, это событие
latest
 
1,031
19
87
Посмотрев на код, потом на твою статистику, потом снова на код
Ох чувак, моя статистика на многих ресурсах это "Шото с чем-то". :)
Или только перешёл на 1.12?
Да не, я на 1.12 уже давненько, я с неё и начал второй раз, первый был ещё 1.5.2 в далёком 2010-2012 году. Просто я деревенский и выделить время на изучение этого сложно. Посмотрю те ресурсы, как сделаю закрою эту тему.
 

Icosider

Kotliner
Администратор
3,601
99
664
@LeyxorCheysen, зачем ты создаёшь своё событи когда можешь тоже самое делать с ванильными?! Помимо этого, ты ещё каждое убийство создаёшь новый стак и тем самым твоё условие всегда false. Проверку не через стаки делай, а предметами и метой.
Java:
if (heldStack.getItem() == Items.APPLE && heldStack.getItemDamage() == 1) {
    
}
 
5,018
47
783
Сверху