эвенты для сервера майнкрафт
[Туториал] Работа с событиями (Events)
keelfy
Решил сделать отдельную тему для моего перевода зарубежного туториала.
(моя основная тема).
Много вопросов связаны с событиями, хотел бы их урезать на корню одной темой.
Также даже бывалые моддеры может что-то полезное узнают, например, как работать с приоритетами событий.
Иностранный оригинал туториала сделал: coolAlias
Исходник урока можно найти в теме со списком всех моих уроков.
Об ошибках, вопросах и предложениях о переводе писать сюда: ВК или в ЛС этого форума.
Если вы хотите изменить любую стандартную реакцию Minecraft’а на какое либо действие, то применяйте обработчик событий. В нем есть События Игрока (Player Events), События Живых Существ (Living Events), События Предметов (Item Events), События Мира(World Events), Событие Генерации Мира (TerrainGenEvents), События Вагонетки (Minecart Events). и многое другое. Так что вы можете сделать что-то невероятное, применяя события. Лично я предпочитаю применять EventHandler, вместо TickHandler’а. Так как многие вещи в TickHandler’е нужно писать самостоятельно, тогда как в EventHandler’e они уже сделаны.
Регистрируйте ваш обработчик событий через EVENT_BUS в методах ‘load’ или ‘postInit’ вашего главного класса мода. Эта часть является одинаковой для 1.6 и 1.7, дополнительная информация в конце туториала.
Это было легко, но пока ничего не делайте. Переходим к части 3.
Выберите нужное вам событие из MinecraftForge, и добавьте его в свой EventHandler (обработчик событий) путем создания нового метод и установки события (Event’а) в качестве параметра метода.
1.6: Используйте аннотацию «@ForgeSubscribe». Она вызывает событие в нужный момент.
1.7+: Используйте аннотацию «@SubscribeEvent». Она вызывает событие в нужный момент.
Никогда, я повторю, никогда НЕ изменяйте классы форджа. Также, вам не требуется создание класса, унаследованного от класса события.
События Форджа автоматически встраиваются в ванильный код, но скажем вы сделали свой лук и хотите использовать события ArrowNock и ArrowLoose? Вам нужно вставить их и зарегистрировать в шине событий в коде предмета.
Выберите нужное вам событие из MinecraftForge, и добавьте его в свой EventHandler (обработчик событий) путем создания нового метод и установки события (Event’а) в качестве параметра метода.
1.6: Используйте аннотацию «@ForgeSubscribe». Она вызывает событие в нужный момент.
1.7+: Используйте аннотацию «@SubscribeEvent». Она вызывает событие в нужный момент.
Никогда, я повторю, никогда НЕ изменяйте классы форджа. Также, вам не требуется создание класса, унаследованного от класса события.
Показанный шаблон подходит для любого метода с событием, который вы захотите сделать. Название метода делайте любое, но не забывайте про правильное название события. Доступ к переменным событий можно получить по примеру ‘event.variableName’.
Заметьте, что приоритеты работают одинаково как в 1.6.х, так и в 1.7.х, отличие лишь в том, что аннотация меняется с @ForgeSubscribe на @SubscribeEvent. Приоритет дает возможность определять обработчикам понимать в каком порядке читать слушателей событий. Слушатель событий это метод с аннотацией @ForgeSubscribe (или @SubscrubeEvent для 1.7+) и если данный метод был зарегистрирован в MinecraftForge EVENT_BUS. Когда вызывается множество одинаковых событий, игра выбирает какой слушатель событий (метод с событием) будет вызван первым. Это определяется по порядку слушателя в коде или по выставленному приоритету. Это может быть применено среди отменяющих событий. Одно и тоже событие может быть вызвано множество раз из разных слушателей, с разными иминами и в разных обработчиках:
Если два слушателя имеют одинаковые приоритеты, то они так же вызываются по порядку регистрации в коде. Для решения этого, слушатели могут быть помещены в разные обработчики (EventHandler) зарегистрированные в нужном порядке:
События с аннотацией @Cancelable имеют особый эффект при отмене. Если событие отменено последующие слушатели с подобным событием не будут обрабатываться, пока не будет поставлена специальная аннотация:
Благодаря контролированию порядка, в котором вызываются слушатели, можно избежать возобновления события, отмененного в другом слушателе. Хотя и бывают особые обстоятельства, в которых приходится применять другие меры, дабы избежать логических ошибок.
Теперь вы можете поиграться со слушателями событий и переменными событий, чтобы понять что и когда вызывается, но добавлю предупреждающее словечко: многие события могут быть вызваны только на ОДНОЙ из сторон (клиент / сервер), так что если что-то работает не так, как задумано, проверьте на какой стороне может работать событие. Самый простой способ проверить вызывается ли метод, это поставить в начале каждого метода оповещатель в консоль об успешном выполнении:
ВАЖНО: Последующие события из 1.6.х; многие из них не изменились в новых версиях, но есть и поменявшиеся. Всегда заглядывайте в пакет net.minecraftforge.event для просмотра доступных событий, доступных в версии, на который вы пишите модификацию.
1. ArrowNockEvent
Параметры: EntityPlayer player, ItemStack result
Обычно вызывается из ‘onItemRightClick’.
Применение: Т.к. событие отменяемое, вы можете при несоблюдении условий (например, нет стрел в инвентаре) прекратить прицеливание из лука.
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
Вызывается, когда сущность ранят.
Применение: Супер полезное событие, если вам нужно сделать броню которая будет оборонять от огненного урона, увеличивать
урон от магии и т.д.
12. EntityInteractEvent
Параметры: EntityPlayer player, Entity target
Вызывается, когда игрок жмет ПКМ по существу.
Применение: Вы можете сделать много интересного с применением этого события. Одним из применений может оказаться сбор молока в ваше ведро.
13. EntityItemPickupEvent
Параметры: EntityPlayer player, EntityItem item
Вызывается, когда игрок поднимает предмет
Применение: Это полезное событие для тех предметов, которые должны как-то обрабатываться при подборе;
например, вы можете сделать что-то на подобие сфер опыта, сфер маны, которые восстанавливают ману, при подборе их с земли.
14. HarvestCheck
Параметры: EntityPlayer player, Block block, boolean success
Вызывается в момент, когда игрок сломал блок, но дроп еще не выпал
Применение: Может компоноваться с событием BreakSpeed, это, пожалуй, лучший способ изменить шахтерское ремесло.
Тема: Списки и расписания ивентов
Опции темы
Поиск по теме
Отображение
Списки и расписания ивентов
В данной теме можно ознакомиться с ивентами, которые проводятся на нашем проекте.
Всю необходимую информацию по конкретным серверам Вы найдёте в постах ниже.
В них Хед-Модераторы серверов оставят всю необходимую информацию и обновления для игроков.
Список серверов и их Хед-Модераторов:
4 пользователей сказали cпасибо cheald за это полезное сообщение:
1 пользователь сказал cпасибо MrKlad за это полезное сообщение:
Место проведения: /warp mobs.
Призы: Дроп выпавший с мобов.
Место проведения: /warp spleef.
Призы: Определяет модератор.
Проводящие: Любой модератор.
Место проведения: /warp labirint.
Призы: Определяет модератор.
Проводящие: Любой модератор.
Место проведения: /warp labirint.
Призы: Определяет модератор.
Проводящие: Любой модератор.
Место проведения: /warp parkur.
Призы: Определяет модератор.
Проводящие: Любой модератор.
Место проведения: /warp cub.
Призы: Определяет модератор.
Проводящие: Любой модератор.
Место проведения: /warp baggi.
Призы: Определяет модератор.
Проводящие: Любой модератор.
Место проведения: /warp snow.
Призы: Определяет модератор.
Проводящие: Любой модератор.
Место проведения: Определяет модератор.
Призы: Определяет модератор.
Место проведения: /warp gnom.
Призы: Определяет модератор.
Проводящие: Желающий модератор
Место проведения: /warp snow
Призы: Определяются хэд-модератором
Место проведения: /warp parkour
Призы: Определяются хэд-модератором
Проводящие: Желающий модератор
Место проведения: /warp hockey
Призы: Определяются хэд-модератором
Место проведения: /warp spleef
Призы: Определяются хэд-модератором
Проводящие: Желающий модератор
Место проведения: /warp lab
Призы: Определяются хэд-модератором
Место проведения: /warp mobs
Призы: Дроп с убитых мобов
Место проведения: /warp tree
Призы: Определяются хэд-модератором
Место проведения: /spawn
Призы: Определяются хэд-модератором
Так же часто проходят такие эвенты как турнир, осада. Для них создаются отдельные темы в этом разделе, поэтому не буду им упоминать. Позже добавлю информацию про эвент гора, как поправлю его.
Так же проходят сезонные эвенты, такой как был на нг. Об таких эвентах можно узнать на сервере, так что о них тоже не будет тут написанно
1 пользователь сказал cпасибо Crisis2 за это полезное сообщение:
Разрешено: | Запрещено: |
— Стандартные, а так же бронзовые и кварцевые лопаты. | — Любая броня, позволяющая летать (гравинано/квант, дракон). |
— Ставить траву/землю/снег. | — Использование /fly, /speed, сапог путешественника. |
— Зачарования лопаты. | — Использование удочки. |
— Описание:
Простая викторина на абсолютно любые темы: от истории до электроники.
Те, у кого быстрый компьютер и не менее быстрые пальцы могут успеть ответ и нагуглить. А что? Тоже спортивный интерес 🙂
— Описание:
Каждый раз новый путь, новая дорожка к заветному концу. Что может быть лучше лабиринта?
Красные факелы покажут возможно правильный путь!
— Правила*:
Запрещены: /fly, /speed; любая броня, дающая ускорение/полет; любые «баффы» (маяк, зелья);
Эвенты для сервера майнкрафт
Перейдём к вопросу актуальности поднимаемого вопроса и тут я выделяю три основные проблемы: замкнутость организационного состава, бессистемность судейского аппарата и частое недопонимание со стороны игроков.
В данной теме не будет переходов на личности, даже не будет вымышленных персонажей, так как это все таки руководство, а не бугурт-тред. Данная тема является сугубо моим личным видением того, как должно все происходить, а значит, что это вполне можно назвать имхо-гайдом. Давайте уже приступим к разбору всех элементов по пунктам.
Игроки приходят и уходят, но все всё равно возвращаются. Этим блоком я намереваюсь дать общую базу по организации ивентов для тех игроков, кто хочет, но так и не начал, и для тех, кто уже пробует, но считает, что получается недостаточно хорошо.
Сразу уточню, что если вы желаете быть организатором в рамках собственного сообщества, то без группы EventModer получать призы для проведения ивентов будет затруднительно.
Мой первый ивент проводился сугубо на голд мэра и строителей спавна Guest. Думаю, если вы правда загорелись данной деятельностью, то трудности финансирования далеко не самая большая головная боль.
Имейте в виду, что труд организатора предполагает, что вы должны гореть идеей продвижения ивентов, вам должно нравиться заниматься этим. Организатору положено обладать многими социальными качествами, так как он занимается «развлечением» народа. Если уверены, что социально открытый образ жизни вам не характерен, то попробуйте себя в качестве судьи, где это не так важно.
Мероприятия и ивенты | Отзывы и предложения (Страница 1 из 3)
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений с 1 по 25 из 60
1 Тема от TheThomas 29/06/2020 01:39:27
Тема: Мероприятия и ивенты | Отзывы и предложения
Список постоянных мероприятий:
Тематические мероприятия
Существуют и специальные тематические мероприятия, в виде конкурсов или ивентов. За участие и победу в них, вам выдается большой приз. Данные мероприятия проводятся во время праздников либо в особый день или в любой обычный день.
ОБЫЧНЫЕ ИВЕНТЫ:
ЧАТОВЫЕ ИВЕНТЫ:
Каждое мероприятие создано для того, чтобы разнообразить Вашу игру на сервере, принести Вам много новых эмоций и хорошего настроения. Нам важно, чтобы они нравились Вам, поэтому делитесь своим мнением и отношением.
Возможно Вы бы хотели что-то изменить в проведении того или иного ивента/мероприятия
а может у Вас есть идеи новых мероприятий
— делитесь своими мыслями под этой темой.
Лучшие идеи будут реализованы, а их авторы щедро вознаграждены.
Сделаем сервер лучше вместе!
2 Ответ от justRescue 29/06/2020 10:48:25
Re: Мероприятия и ивенты | Отзывы и предложения
3 Ответ от TheThomas 29/06/2020 12:19:15
Re: Мероприятия и ивенты | Отзывы и предложения
В этом и идея ивента. Одному может повести, другому нет. Рандом решает.
4 Ответ от ItzzLittle_ 29/06/2020 12:49:27
Re: Мероприятия и ивенты | Отзывы и предложения
Можно добавить ивент Murder Mystery.
Также нужны новые карты на ивенты SpeedRun и Parkour.
5 Ответ от DanielAkun 29/06/2020 14:22:12
Re: Мероприятия и ивенты | Отзывы и предложения
Можно добавить ивент Murder Mystery.
6 Ответ от justRescue 29/06/2020 14:35:25
Re: Мероприятия и ивенты | Отзывы и предложения
В этом и идея ивента. Одному может повести, другому нет. Рандом решает.
проще уж провести розыгрыш зависящий на рандоме, а не городить эту херь
7 Ответ от dis 29/06/2020 15:43:02
Re: Мероприятия и ивенты | Отзывы и предложения
Также нужны новые карты на ивенты SpeedRun и Parkour.
Можно добавить ивент Murder Mystery.
Можно так же мафию попробовать, но хз.
Возьмём на рассмотрение.
Спасибо за идеи и отзывы.
8 Ответ от dis 29/06/2020 16:00:19
Re: Мероприятия и ивенты | Отзывы и предложения
О б н о в л е н и е
9 Ответ от TheThomas 30/06/2020 12:46:20
Re: Мероприятия и ивенты | Отзывы и предложения
О б н о в л е н и е
// сюда пишем вашу папку
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;
public class Main extends JavaPlugin implements Listener < // Теперь мы следим за событиями
public void onEnable() <
Bukkit.getServer().getPluginManager().registerEvents(this, this); // регестрируем эвенты в этом классе
getLogger().info(«Hello. «);
>
public void onDisable() <
getLogger().info(«Bye. «);
>
@EventHandler
// Пишем перед каждым эвентом
public void onPlayerJoin(PlayerJoinEvent e) < // Когда заходит игрок то происходит.
Player p = e.getPlayer(); // Передаем переменной p игрока, который зашел
p.sendMessage(ChatColor.BLUE+»Привет»); // Пишем игроку сообщение «Привет» синим цветом
p.playSound(p.getLocation(), Sound.BLOCK_ANVIL_FALL, 1, 1); // Проигрываем игроку звук
>
>
Теперь экспортируем плагин(читаем об этом в предыдущем гайде),
и теперь мы при заходе на сервер видим: