跳转至

Go:事件

函数

Subscribe

Go
func Subscribe(id string, priority Priority, fn func(*Event)) (*Listener, error)

对这个 id 的每一个事件,在服务器线程上调用 fn。id 是完整的 id,例如 "ll::event::PlayerJoinEvent",也可以是它唯一的后缀。只能在服务器线程调用。

  • 参数:
    • id : string
    • priority : Priority
    • fn : func(*Event)
  • 返回值类型:(*Listener, error)
  • 对应槽位:subscribe_event

ListEvents

Go
func ListEvents() ([]string, error)

列出这个宿主可以订阅的所有事件 id。只能在服务器线程调用。

  • 返回值类型:([]string, error)
  • 对应槽位:list_events

Event

Go
1
2
3
4
5
type Event struct {
    ID   string
    SNBT string
    // unexported fields
}

监听器收到的一个事件。SNBT 是载荷,它的字段写在事件载荷参考里;它是一份副本,回调返回以后仍然有效。

Event.Payload

Go
func (e *Event) Payload() (*Nbt, error)

解析后的 SNBT,每个事件只解析一次。

  • 返回值类型:(*Nbt, error)

Event.Unresolved

Go
func (e *Event) Unresolved() []string

列出宿主没能解析的字段,取自 _unresolved。载荷本身解析不了时它也是空的,CheckComplete 不会把这种情况算作完整。

  • 返回值类型:[]string

Event.CheckComplete

Go
func (e *Event) CheckComplete() bool

判断载荷是否解析成功,并且里面没有未解析的字段。基于不完整的载荷做保护判断时,应当拒绝,不要去猜。

  • 返回值类型:bool

Event.Dim

Go
func (e *Event) Dim() (int32, error)

事件发生的维度。载荷读不出来或者不完整时返回错误,永远不会返回 0:如果当成主世界,自定义维度里的事件就会通过为主世界定的规则。

  • 返回值类型:(int32, error)

Event.Set

Go
func (e *Event) Set(key string, value *Nbt)

在回调返回时把 key 写回事件里。只有设置过的键会写回去,宿主会合并它们,所以两个监听器设置不同的键时,两边的改动都会保留。

  • 参数:
    • key : string
    • value : *Nbt

Event.Cancel

Go
func (e *Event) Cancel()

请求宿主在回调返回后取消这个事件。不能取消的事件会忽略这个请求;每个事件能不能取消,写在它的文档里。

Event.Uncancel

Go
func (e *Event) Uncancel()

撤销这个回调里做的 Cancel。之前的监听器做的取消会保留。

Listener

Go
1
2
3
type Listener struct {
    // unexported fields
}

一个订阅,保存下来用来结束它。

Listener.Unsubscribe

Go
func (l *Listener) Unsubscribe() error

结束订阅。调用两次也没有问题。只能在服务器线程调用。

ListenerHandle

Go
type ListenerHandle struct{ p unsafe.Pointer }
type ListenerHandle struct{ p unsafe.Pointer }

宿主用来指代一个事件监听器的句柄。

ListenerHandle.IsZero

Go
func (h ListenerHandle) IsZero() bool

判断这个句柄是否什么都不指向。

  • 返回值类型:bool

Priority

Go
type Priority int32

同一个事件的监听器之间的顺序,对应 ll::event::EventPriority。

名称 值 说明
PriorityHighest 0
PriorityHigh 1
PriorityNormal 2
PriorityLow 3
PriorityLowest 4