Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
69 lines (60 sloc) 3.5 KB

Использование событий

События в Minecraft это тоже, что и у нас. К примеру "Пошёл дождь", только в Minecraft событий не так много, как существует у нас в жизни. В данной статье вы научитесь использовать события.

Создадим класс EventsHandler.

public class EventsHandler
{
    @SubscribeEvent
    public void onJoin(EntityJoinWorldEvent e)
    {
        if (e.getEntity() instanceof EntityPlayer)
        {
            EntityPlayer player = (EntityPlayer) e.getEntity();
            player.sendMessage(new TextComponentString("Hello, %p!".replace("%p", player.getName())));
        }
    }

    @SubscribeEvent
    public void onDeath(LivingDeathEvent e)
    {
        if (e.getEntity() instanceof EntityPlayer)
        {
            EntityPlayer player = (EntityPlayer) e.getEntity();

            if (player.getName().equals("_Ivasik_"))
            {
                player.dropItem(new ItemStack(Items.GOLDEN_APPLE, 1, 1), false);
            }
        }
    }
}

В первом методе, при заходе сущности(Игрока) в мир, ему будет высвечиваться приветствие. А во втором методе, если игрок _Ivasik_ погибает, то на его месте дропается золотое яблоко. Вы так же можете отменить событие используя метод e.setCanceled(true), но не все события можно отменять. Подробнее смотрите в статье Таблица событий

Приступим к регистрации, перейдём в CommonProxy и в метод preInit добавим шину регистрации. Рекомендуется использовать именно эту шину, а не FMLCommonHandler, который устарела и используется только на 1.7 и ниже версиях!

MinecraftForge.EVENT_BUS.register(new EventsHandler());

Так же с приходом 1.12 версии события можно регистрировать автоматически, без добавления MinecraftForge.EVENT_BUS, для этого нужно:

  1. В начале класса добавить аннотацию @Mod.EventBusSubscriber, должно получиться так:
@Mod.EventBusSubscriber
public class EventsHandler
{
    //что-то делаем
}
  1. Методы должны быть статичными, пример:
@SubscribeEvent
public static void onJoin(EntityJoinWorldEvent e)
{
    //Что-то делаем
}

В аннотации @Mod.EventBusSubscriber, так же есть параметры:

  • side - сторона на которой будет зарегистрировано событие. Доступные стороны: Client, Server
  • modid - modid вашего мода, этот параметр нужен лишь для того, чтобы избежать ошибки в регистрации, если используется несколько модов. Пример использования:
@Mod.EventBusSubscriber(Side.SERVER, modid = "myModid")

Данный способ работает не со всеми событиями!

Переходим в игру и смотрим на получившийся результат!