
TaleGuard - 防护桥
Hytale的Mixin/转换器保护桥。

Hytale 的 Mixin/转换器保护桥接层。
拦截常规服务器事件 API 无法触及的低层级交互界面,并将其通过一个简单的钩子进行路由,以便保护插件(地区、岛屿、小游戏)能够在所有场景中执行其规则。
💬 加入社区!
有问题、想法或只是想聊聊天?加入 Stoshe Labs Discord 服务器:
discord.gg/rC9eSzH3tf
 
它是什么
Hytale 的高级事件涵盖了方块破坏/放置,但大量游戏交互是通过插件无法从事件中取消的路径发生的:F键/自动物品拾取、物品使用、流体放置和流动、坐骑、作物收获、锤子/建造工具、爆炸、死亡物品掉落和命令。
TaleGuard 在类加载时将这些代码路径安装Mixin,并提出一个单一、共享的问题:
该玩家是否被允许在此处执行此操作?
任何插件都可以通过注册一个ProtectionHook来回答。这意味着一个统一的保护层,无论哪个插件拥有该世界,都能一致地应用。
为什么它是一个“早期”插件
Mixin 会在游戏类加载时重写它们,因此 TaleGuard 必须在服务器完成启动之前运行。
将
TaleGuard-1.0.0.jar安装到你服务器的earlyplugins/文件夹中——而不是mods/。
加载后,它会暴露其钩子注册表,并且其 Mixin 在该会话的剩余时间内保持活动。
它保护什么
TaleGuard 将这些交互界面引导至钩子(InteractionType):
| 界面 | 类型 |
|---|---|
| 方块破坏/放置/收获 | BLOCK_HARVEST、BUILDER、HAMMER |
| 容器打开 | CONTAINER_OPEN |
| 作物收获/生长阶段 | CROP_HARVEST、CROP_STAGE_CHANGE |
| 实体伤害/交互 | ENTITY_DAMAGE、ENTITY_INTERACT |
| 爆炸方块破坏 | EXPLOSION_DAMAGE |
| 流体放置/流动 | FLUID_PLACE |
| 物品拾取(F键/自动) | ITEM_PICKUP |
| 物品使用、坐骑、死亡物品掉落、物品耐久度、NPC生成 | (通过钩子路由) |
| 受保护世界中的命令过滤 | (通过 checkCommand) |
对于开发者
TaleGuard 是一个软依赖:不存在编译时耦合。注册一个钩子,TaleGuard 就会调用它;如果未安装 TaleGuard,你的注册就是一个无害的空操作。
钩子接口
public interface ProtectionHook {
// 返回 false 以拒绝交互
boolean isAllowed(UUID playerUuid, String worldName, double x, double y, double z, String type);
void notifyDenied(UUID playerUuid, String worldName, double x, double y, double z, String type);
}
注册——反射方式(零依赖,推荐用于软依赖)
@SuppressWarnings("unchecked")
Map<String, Object> registry =
(Map<String, Object>) System.getProperties().get("taleguard.hook.registry");
if (registry != null) {
registry.put("myplugin", myProtectionHook); // 你的暴露了 isAllowed / notifyDenied 方法的对象
}
注册——通过 API
HookRegistry.registerHook("myplugin", myProtectionHook);
一个钩子还可以暴露 int getPriority()——较小值优先运行。流体流动和命令过滤有自己的入口点(HookRegistry.checkFluidFlow(...)、HookRegistry.checkCommand(...))。
将 TaleGuard 添加为可选依赖,以便在存在时优先加载:
"OptionalDependencies": { "Stoshe:stoshe.taleguard": "*" }正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。