Player Events

当玩家死亡并离开或加入服务器时发送可配置的消息/命令

工具

玩家事件

GitHub 发布 GitHub 工作流状态

注意:此模组仅限服务端使用,在客户端上无法运行

这是一个 Fabric 模组,当玩家触发某些事件(如死亡、加入服务器、击杀其他玩家等)时,它会执行并发送可配置的命令和消息。

自 2.2.0 版本起,数据包可以通过相应的函数标签 #player_events:<事件> 定义在事件发生时执行的函数。

配置文件位于配置目录(config/player_events.json),内容如下:

{
  "death": {
    "actions": [
      "${player} 刚刚死了!"
    ],
    "broadcast_to_everyone": true,
    "pick_message_randomly": false
  },
  "first_join": {
    "actions": [
      "欢迎来到服务器 ${player}!记得阅读规则"
    ],
    "broadcast_to_everyone": false,
    "pick_message_randomly": false
  },
  "join": {
    "actions": [
      "欢迎 ${player}",
      "/say 你好 ${player}"
    ],
    "broadcast_to_everyone": true,
    "pick_message_randomly": false
  },
  "kill_entity": {
    "actions": [
      "${player} 杀死了 ${killedEntity}"
    ],
    "broadcast_to_everyone": true,
    "pick_message_randomly": false
  },
  "kill_player": {
    "actions": [
      "${player} 杀死了 ${killedPlayer}",
      "F ${killedPlayer}"
    ],
    "broadcast_to_everyone": true,
    "pick_message_randomly": true
  },
  "leave": {
    "actions": [
      "再见 ${player}!",
      "/say 希望很快再见到你 ${player}"
    ],
    "broadcast_to_everyone": true,
    "pick_message_randomly": false
  },
  "custom_commands": [
    {
      "command": "/plugins",
      "actions": [
        "嘿!我们不用插件"
      ],
      "broadcast_to_everyone": false,
      "pick_message_randomly": false
    },
    {
      "command": "/spawn",
      "actions": [
        "/tp ${player} 0 64 0 0 0"
      ],
      "broadcast_to_everyone": true,
      "pick_message_randomly": false
    }
  ]
}

在 JSON 文件中,你可以在每个 <事件> 对象的 actions 数组下声明在该事件发生时将要发送和/或执行的内容。你也可以通过将 broadcast_to_everyone 设置为 false,让这些消息仅发送给玩家,但这不适用于像 leave 这样的事件(因为该玩家已经不在服务器上了)。

自 2.2.0 版本起,你可以通过将 pick_message_randomly 设置为 true,为某个事件随机发送一条已定义的消息。

每个事件都有一个 ${player} 令牌,该令牌的每个实例都会被替换为触发事件的玩家。其他事件还有额外的工作方式相同的令牌。 大多数(如果不是全部)令牌都具有可以通过类似 ${player.name} 的方式访问的属性。 以下是所有属性的列表:

  • display 实体的显示名称,即你在玩家列表/聊天中看到的名称。示例:“[蓝色队伍] Tom421”
  • uuid 实体的 UUID
  • x y z 实体坐标
  • 更多功能敬请期待™

同样支持 颜色代码!

使用 /pe reload 或 /player_events reload 来重新加载模组配置。

你可以使用 /pe test <事件> 或 /player_events test <事件> 来测试特定事件的操作,或使用 /pe test * 来测试所有事件。

2.2.0 版本支持的事件

  • death - 在玩家死亡时执行。
  • first_join - 在玩家首次加入时执行。
  • join - 在玩家加入时执行。
  • kill_entity - 在玩家杀死一个实体时执行。额外令牌:
    • ${killedEntity} - 被杀的实体。
  • kill_player - 在玩家杀死另一名玩家时执行。额外令牌:
    • ${killedPlayer} - 被杀的玩家。
  • leave - 在玩家离开时执行。
  • custom_commands - 通过使用已定义的命令触发的自定义事件。注意:此事件不支持数据包函数

此外,你可以创建简单命令(如果你需要更复杂的命令,这个模组可能不适合你)或监听现有命令。

故障排除

如果在初始化服务器或操作应执行时遇到错误,以下是如何解决的步骤。

  • “配置文件中的 JSON 语法无效”:这很可能是因为命令中包含未转义的双引号。解决方法如下:
    1. 检查下面一行的异常信息。它会准确指出错误位置。
    2. 使用反斜杠转义操作中的任何双引号,例如 " -> \"
  • “无效的转义序列” 这是因为转义序列(如 \n 或 \u)未正确转义。要修复此问题,只需在转义序列的反斜杠前再加一个反斜杠,例如 \n -> \\n 或 \\u -> \\\\u

开发

此部分面向希望使用模组 API 的模组开发者。

编译

  1. 克隆或下载仓库
  2. 在命令提示符中运行 gradlew build 来编译模组。(如果你只需要 API 文件, 可以改为运行 gradlew api:build)。你可以在 <仓库>/build/libs 和 <仓库>/api/build/libs 下找到编译好的 .jar 文件

API

将 API 添加到你的模组依赖中

将以下片段添加到你的 build.gradle:

repositories {
    maven {
        url 'https://maven.bymartrixx.me'    
    }
}

dependencies {
    // 使用 gradle.properties 中的版本
    modImplementation "me.bymartrixx.player-events:api:${project.player_events_api_version}"

    // 直接设置版本(将 2.1.3 替换为最新的可用版本)
    modImplementation "me.bymartrixx.player-events:api:2.1.3"
}

如果你没有直接在 build.gradle 文件中设置版本,请将以下片段添加到你的 gradle.properties:

# 将 2.1.3 替换为最新的可用版本
player_events_api_version = 2.1.3

此外,如果你希望你的模组依赖此 API,请将以下片段添加到你的 fabric.mod.json:

{
  "depends": {
    "player_events_api": ">=2.0.0"
  }
}

事件

  • death - me.bymartrixx.playerevents.api.event.PlayerDeathCallback.EVENT
  • first_join - me.bymartrixx.playerevents.api.event.PlayerFirstJoinCallback.EVENT
  • join - me.bymartrixx.playerevents.api.event.PlayerJoinCallback.EVENT
  • kill_entity - me.bymartrixx.playerevents.api.event.PlayerKillEntityCallback.EVENT
  • kill_player - me.bymartrixx.playerevents.api.event.PlayerKillPlayerCallback.EVENT
  • leave - me.bymartrixx.playerevents.api.event.PlayerLeaveCallback.EVENT
  • 命令执行 - me.bymartrixx.playerevents.api.event.CommandExecutionCallback.EVENT

注意

io.github.bymartrixx.playerevents.api 包已在 2.2.0 版本中移除。

使用事件

示例代码片段

public class FooMod implements DedicatedServerModInitializer {
    public void onInitializeServer() {
        PlayerDeathCallback.EVENT.register((player, source) -> {
            // 执行某些操作
        });

        PlayerKillEntityCallback.EVENT.register((player, killedEntity) -> {
            // 执行某些操作
        });
    }
}