Skip to content

Event API

XiaoColorful edited this page Nov 13, 2025 · 7 revisions

事件API

事件机制简述:

  • 编写一些事件处理函数,将他们集中添加至注册处
  • 玩家登录时派发(玩家登录)事件;玩家被击杀时派发(玩家死亡)事件;……
  • 派发事件即从注册处按优先级顺序逐个执行事件处理函数

事件类型

自定义事件类型

本模组创建的自定义事件

package xiao.battleroyale.api.event;  
  
public enum CustomEventType {
	// 自定义事件类型
}
  • 名称带 "Finish" 的事件类型不可取消
package xiao.battleroyale.api.event;

public interface ICustomEvent extends IEvent {
	CustomEventType getEventType();
}
  • 通过查看ICustomEvent具体事件类的getEventType判断是否对应该事件

模组事件类型

Forge/NeoForge提供的事件

package xiao.battleroyale.api.event;

public enum EventType {
	SERVER_TICK_EVENT,
	CLIENT_TICK_EVENT,
	LIVING_DAMAGE_EVENT,
	LIVING_DEATH_EVENT,
	PLAYER_LOGGED_IN_EVENT,
	PLAYER_LOGGED_OUT_EVENT
}
  • 仅包含本模组需要使用的事件类型

事件属性

事件优先级

package xiao.battleroyale.api.event;  
  
public enum EventPriority {  
    HIGHEST,  
    HIGH,  
    NORMAL,  
    LOW,  
    LOWEST;  
}
  • 自定义事件优先级与模组事件一致

接收被取消的事件

boolean receiveCanceled;
  • 通过本模组提供的API注册,对于相同优先级的自定义事件模组事件receivedCanceled = true 的事件一定在所有 receivedCanceled = false 的事件之后执行

注册事件处理器

  • 在Forge/NeoForge该操作为“监听事件”,而本模组已经封装相关接口,即只需要注册事件处理器即可自动监听
  • 建议保留注册的事件处理器的实例,以取消注册

注册自定义事件处理器

ICustomEventRegister customEventRegister = xiao.battleroyale.BattleRoyale.getEventRegister(); // 自定义事件注册API
ICustomEventHandler handler; // 自定义事件处理器
ICustomEventType customEventType; // 自定义事件类型
Priority priority; // 事件优先级
boolean receiveCanceled; // 是否接收被取消的事件
customEventRegister.register(handler, customEventType, priority, receiveCanceled);
  • BattleRoyale.getEventRegister()自模组加载时即可用

注册模组事件处理器

EventRegister eventRegister = xiao.battleroyale.event.EventRegister.get(); // 模组事件注册API
EventHandler handler; // 模组事件处理器
IEventType eventType; // 模组事件类型
Priority priority; // 事件优先级
boolean receiveCanceled; // 是否接收被取消的事件
  • 模组事件处理器需要在游戏中手动注册/取消注册,而不是在模组加载时就注册

English

A brief description of the event mechanism:

  • Write event handler functions and register them collectively to the registry.
  • An event is dispatched (e.g., Player Logged In) when a player logs in; an event is dispatched (e.g., Player Death) when a player is killed; etc.
  • Dispatching an event means executing the event handler functions in priority order from the registry one by one.

Event types

Custom event type

Custom events created in this mod.

package xiao.battleroyale.api.event;  
  
public enum CustomEventType {
	// Custom event types
}
  • Event types with "Finish" in their name are non-cancellable.
package xiao.battleroyale.api.event;

public interface ICustomEvent extends IEvent {
	CustomEventType getEventType();
}
  • Determine if it corresponds to the event by checking the getEventType of the specific event class of ICustomEvent.

Mod event type

Events provided by Forge/NeoForge.

package xiao.battleroyale.api.event;

public enum EventType {
	SERVER_TICK_EVENT,
	CLIENT_TICK_EVENT,
	LIVING_DAMAGE_EVENT,
	LIVING_DEATH_EVENT,
	PLAYER_LOGGED_IN_EVENT,
	PLAYER_LOGGED_OUT_EVENT
}
  • Only includes event types required by this mod.

Event property

Event priority

package xiao.battleroyale.api.event;  
  
public enum EventPriority {  
    HIGHEST,  
    HIGH,  
    NORMAL,  
    LOW,  
    LOWEST;  
}
  • Custom event priorities are consistent with mod events.

Receive canceled event

boolean receiveCanceled;
  • When registered via the API provided by this mod, for Custom Events and Mod Events of the same priority, events with receivedCanceled = true will always be executed after all events with receivedCanceled = false.

Register event handler

  • In Forge/NeoForge, this operation is "listening for events." This mod has encapsulated the relevant interfaces, meaning you only need to register the event handler to automatically listen for events.
  • It is recommended to retain the instance of the registered event handler for unregistration purposes.

Register custom event handler

ICustomEventRegister customEventRegister = xiao.battleroyale.BattleRoyale.getEventRegister(); // Custom event registration API
ICustomEventHandler handler; // Custom event handler
ICustomEventType customEventType; // Custom event type
Priority priority; // Event priority
boolean receiveCanceled; // Whether to receive canceled events
customEventRegister.register(handler, customEventType, priority, receiveCanceled);
  • BattleRoyale.getEventRegister() is available from the moment the mod is loaded.

Register mod event handler

EventRegister eventRegister = xiao.battleroyale.event.EventRegister.get(); // Mod event registration API
EventHandler handler; // Mod event handler
IEventType eventType; // Mod event type
Priority priority; // Event priority
boolean receiveCanceled; // Whether to receive canceled events
  • Mod event handlers need to be manually registered/unregistered in-game, not upon mod loading.

🌐 Language / 语言


Clone this wiki locally