Решил сделать отдельную тему для моего перевода зарубежного туториала.
(моя основная тема).
Много вопросов связаны с событиями, хотел бы их урезать на корню одной темой.
Также даже бывалые моддеры может что-то полезное узнают, например, как работать с приоритетами событий.
Иностранный оригинал туториала сделал: coolAlias
Исходник урока можно найти в теме со списком всех моих уроков.
Об ошибках, вопросах и предложениях о переводе писать сюда: ВК или в ЛС этого форума.
Если вы хотите изменить любую стандартную реакцию Minecraft’а на какое либо действие, то применяйте обработчик событий. В нем есть События Игрока (Player Events), События Живых Существ (Living Events), События Предметов (Item Events), События Мира(World Events), Событие Генерации Мира (TerrainGenEvents), События Вагонетки (Minecart Events). и многое другое. Так что вы можете сделать что-то невероятное, применяя события. Лично я предпочитаю применять EventHandler, вместо TickHandler’а. Так как многие вещи в TickHandler’е нужно писать самостоятельно, тогда как в EventHandler’e они уже сделаны.
Как сделать простой топовый ивент в Майнкрафте?
- Построении и использовании Event Handler’а
[/*] - Расширенной информации про обработку событий
[/*] - Простых событиях и их возможных применениях
Спойлер: Часть 1: Создание класса TutEventHandler
ВАЖНО. Не называйте ваш обработчик событий ‘EventHandler’ — это название уже занято форджем. Также, ни в коем случае НЕ изменяйте классы форджа.
Вам нужно создать новый класс для обработки событий.
public class TutEventHandler
Спойлер: Часть 2: Регистрация вашего EventHandler
Регистрируйте ваш обработчик событий через EVENT_BUS в методах ‘load’ или ‘postInit’ вашего главного класса мода. Эта часть является одинаковой для 1.6 и 1.7, дополнительная информация в конце туториала.
- MinecraftForge.EVENT_BUS: Здесь большая часть событий.
- MinecraftForge.TERRAIN_GEN_BUS: Большая часть событий генерации здесь — заселение, декорирование мира. но есть странное исключение для Pre и Post событий, они находятся в EVENT_BUS
- MinecraftForge.ORE_GEN_BUS: Очевидно — события генерации руд здесь
- FML Events: Эти события очень важны в 1.7.х, т.к. там существуют события TickEvent и KeyInputEvent, которые являются заменой для TickHandler’a и KeyHandler’a в 1.6.х.
Это было легко, но пока ничего не делайте. Переходим к части 3.
Спойлер: Часть 3: Добавление событий в ваш обработчик (как пример)
Никогда, я повторю, никогда НЕ изменяйте классы форджа. Также, вам не требуется создание класса, унаследованного от класса события.
Если вам станет интересно какие еще переменные содержит событие — напишите в методе ‘event.’ и Eclipse выведет вам все возможные переменные. Или просмотрите их с помощью нажатия Ctrl’a по классу события.
Спойлер: Часть 4: Использование событий в ваших классах
События Форджа автоматически встраиваются в ванильный код, но скажем вы сделали свой лук и хотите использовать события ArrowNock и ArrowLoose? Вам нужно вставить их и зарегистрировать в шине событий в коде предмета.
2 МЕСЯЦА ИВЕНТОВ | PepeLand 5 | Серия 19
Спойлер: Часть 5: Добавление событий в ваш EventHandler
Никогда, я повторю, никогда НЕ изменяйте классы форджа. Также, вам не требуется создание класса, унаследованного от класса события.
Показанный шаблон подходит для любого метода с событием, который вы захотите сделать. Название метода делайте любое, но не забывайте про правильное название события. Доступ к переменным событий можно получить по примеру ‘event.variableName’.
Спойлер: Продвинутая Информация: Установка приоритета
Если два слушателя имеют одинаковые приоритеты, то они так же вызываются по порядку регистрации в коде. Для решения этого, слушатели могут быть помещены в разные обработчики (EventHandler) зарегистрированные в нужном порядке:
// В данном варианте слушатель PlayerHurtHandler будет вызван первым MinecraftForge.EVENT_BUS.register(new PlayerHurtHandler()); MinecraftForge.EVENT_BUS.register(new LivingHurtHandler());
Для нескольких модов, вызывающих одно и тоже событие, порядок регистрации имеет такое же значение.
Спойлер: Продвинутая Информация: Отменяемые События
Благодаря контролированию порядка, в котором вызываются слушатели, можно избежать возобновления события, отмененного в другом слушателе. Хотя и бывают особые обстоятельства, в которых приходится применять другие меры, дабы избежать логических ошибок.
Теперь вы можете поиграться со слушателями событий и переменными событий, чтобы понять что и когда вызывается, но добавлю предупреждающее словечко: многие события могут быть вызваны только на ОДНОЙ из сторон (клиент / сервер), так что если что-то работает не так, как задумано, проверьте на какой стороне может работать событие. Самый простой способ проверить вызывается ли метод, это поставить в начале каждого метода оповещатель в консоль об успешном выполнении:
Спойлер: Полное описание работы и применение самых полезных событий
ВАЖНО: Последующие события из 1.6.х; многие из них не изменились в новых версиях, но есть и поменявшиеся. Всегда заглядывайте в пакет net.minecraftforge.event для просмотра доступных событий, доступных в версии, на который вы пишите модификацию.
1. ArrowNockEvent
Параметры: EntityPlayer player, ItemStack result
Обычно вызывается из ‘onItemRightClick’.
Применение: Т.к. событие отменяемое, вы можете при несоблюдении условий (например, нет стрел в инвентаре) прекратить прицеливание из лука.
2. ArrowLooseEvent
Параметры: EntityPlayer player, ItemStack bow, int charge
Обычно вызывается из ‘onPlayerStoppedUsing’. Отменяем.
Применение: Применяется в тандеме описанном свыше, для проверки отсутствия стрел. Если стрел нет — событие отменяется.
3. EntityConstructing
Параметры: Entity entity
Вызывается с каждым объектом, если его конструктор вызван.
Применение: Полезен, если вам нужно добавить расширенные свойства (ExtendedEntityProperties).
4. EntityJoinWorldEvent
Параметры: Entity entity, World world
Вызывается когда любое существо попадает в мир первый раз.
Применение: Полезен для синхронизации расширенных свойств (ExtendedEntityProperties), также для выдачи предметов при первом входе игрока и т.п.
5. LivingUpdateEvent
Параметры: EntityLivingBase entity
Вызывается каждый тик в начале метода onUpdate() сущности.
Применение: Скорее всего, это самое полезное событие. Вы можете позволить игроку летать, если он держит определенный предмет
или одет в броню, вы можете изменить скорость падения игрока, вы можете добавить эффект зелья и многое другое, что сможете представить.
Это и вправду полезное событие.
6. LivingDropsEvent
Параметры: EntityLivingBase entity, DamageSource source, ArrayList drops, int lootingLevel, boolean
recentlyHit, int specialDropValue
Вызывается когда сущность умирает и выбрасывает предметы.
Применение: Удобен если вы хотите изменить дроп с ванильных мобов или добавить особый дроп, если вы убиваете предметом
из своего мода. Вы конечно можете удалить выпадающие предметы вообще. Полезно.
7. LivingFallEvent
Параметры: EntityLivingBase entity, float distance
Вызывается, когда сущность касается земли после падения.
ОБРАТИТЕ ВНИМАНИЕ: Это событие не вызывается в творческом режиме; PlayerFlyableFallEvent вместо него.
Применение: Отменяем, так что ‘event.setCanceled(true)’ отключается обработку падения.
Вы можете изменить высоту падения, но запомните, что событие срабатывает ТОЛЬКО при касании. Если хотите
изменить высоту падения в определенных условия, лучше применить LivingUpdateEvent.
Также, убедитесь что изменяете ‘event.distance’, а не ‘entity.fallDistance’, иначе вы не измените исход падения.
8. LivingJumpEvent
Параметры: EntityLivingBase entity
Вызывается всегда, когда сущность прыгает.
Применение: Полезно для ‘entity.motionY += 10.0D’. Просто попробуйте.
9. LivingAttackEvent
Параметры: EntityLivingBase entity, DamageSource source, float ammount
Вызывается, когда сущность атакует.
Применение: Отменяемо. Здесь вы можете сделать предварительную обработку атаки перед событием LivingHurtEvent. Информация о
источнике атаки находится в DamageSource, так что вы можете изменить нужные вам параметры урона. Изменения
равнозначны таким же в событии LivingHurtEvent, но здесь сделаны они будут раньше.
10. LivingHurtEvent
Параметры: EntityLivingBase entity, DamageSource source, float ammount
Вызывается, когда сущность ранят.
Применение: Супер полезное событие, если вам нужно сделать броню которая будет оборонять от огненного урона, увеличивать
урон от магии и т.д.
11. LivingDeathEvent
Параметры: EntityLivingBase entity, DamageSource source
Вызывается, когда сущность умирает; отменяемо!
Применение: Напомню, что DamageSource имеет множество переменных, таких как getEntity(), которая возвращает существо
которое нанесло урон и исходя из этого — кто убийца. Можно отменить смерть и воскресить себя,
или установить таймер для воскрешения. Если у вас есть свойства которые должны добавляться при смерти игрока,
такие как IExtendedEntityProperties, вы можете добавить их здесь.
12. EntityInteractEvent
Параметры: EntityPlayer player, Entity target
Вызывается, когда игрок жмет ПКМ по существу.
Применение: Вы можете сделать много интересного с применением этого события. Одним из применений может оказаться сбор молока в ваше ведро.
13. EntityItemPickupEvent
Параметры: EntityPlayer player, EntityItem item
Вызывается, когда игрок поднимает предмет
Применение: Это полезное событие для тех предметов, которые должны как-то обрабатываться при подборе;
например, вы можете сделать что-то на подобие сфер опыта, сфер маны, которые восстанавливают ману, при подборе их с земли.
14. HarvestCheck
Параметры: EntityPlayer player, Block block, boolean success
Вызывается в момент, когда игрок сломал блок, но дроп еще не выпал
Применение: Может компоноваться с событием BreakSpeed, это, пожалуй, лучший способ изменить шахтерское ремесло.
Источник: forum.mcmodding.ru
[Гайды][1.9.2] Создание плагина spigot, часть 2 — «Эвенты»
Эвент(с англ. событие) — какое либо действие, в котором участвует
моб и/или игрок, в Spigot-api этих эвентов огромное множество, от
событий вроде удара, до броска снежка. Их (не полный) список
Вы сможете найти по ссылке в конце статьи.
Сначала чуть-чуть подредактируем главный класс:
// сюда пишем вашу папку
package ru.Stebbilust.test;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
Теперь после захода на сервер игрок услышит звук падения наковальни
и получит в чате сообщение «Привет». Теперь перейдем к разбору кода,
а точнее этой части:
onPlayerJoin — название функции
PlayerJoinEvent e — эвент захода игрока на сервер
e.getPlayer() — получаем игрока, который участвовал
в нашем эвенте
ChatColor.BLUE — цвет сообщения
«Привет» — сообщение
p.getLocation() — получаем расположение игрока
Sound.BLOCK_ANVIL_FALL — звук упавшей наковальни
Теперь экспортируем плагин(читаем об этом в предыдущем гайде),
и теперь мы при заходе на сервер видим:
Список эвентов на русском: ТЫК
Список эвентов на английском: ТЫК
Предыдущий гайд: ТЫК
Постарайтесь изменить сообщение игроку, а так же
его цвет. И попробуйте поменять звук при входе,
например на звук фейерверка или шум крипера.
Источник: ru-minecraft.ru
Что такое ивенты на серверах minecraft?
Когда Админы проводят какие-нибудь конкурсы, испытания за награду.
Остальные ответы
мероприятие от администрации.
Мероприятия, конкурсы которые проводит администрация сервера, обычно без использование модов, плагинов (вручную), за выполнения этих ивентов могут выдавать ценные призы, так и денежные!
Похожие вопросы
Ваш браузер устарел
Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.
Источник: otvet.mail.ru