ProtectionHandlers

基本信息

属性 值
类名 mytown.protection.ProtectionHandlers
文件 src/main/java/mytown/protection/ProtectionHandlers.java
行数 554
订阅方法 20 个 @SubscribeEvent
单例 ProtectionHandlers.instance
启用版本 Minecraft 1.7.10

功能

把 ProtectionManager 的静态判定挂到 Forge 事件总线上。 注册位置在 Mod 入口 的 registerHandlers(),双总线注册:

FMLCommonHandler.instance().bus().register(ProtectionHandlers.instance);
MinecraftForge.EVENT_BUS.register(ProtectionHandlers.instance);

事件清单(20 个)

事件 优先级 关注点
AttackEntityEvent HIGHEST 攻击实体
BlockEvent.PlaceEvent 默认 放置方块
BlockEvent.MultiPlaceEvent 默认 多方块整体放置
EntityInteractEvent 默认 实体交互
ProjectileImpactEvent HIGHEST 抛射物命中
PlayerInteractEvent HIGHEST 玩家交互
AE2PartPlaceEvent HIGHEST AE2 部件放置
ModifyBlockEvent HIGHEST 改写方块
BlockTrampleEvent HIGHEST 踩踏破坏(Forestry)
ModifyBiomeEvent HIGHEST 改写生物群系
BlockEvent.BreakEvent HIGHEST 破坏方块
EntityItemPickupEvent 默认 拾取掉落物
LivingAttackEvent 默认 生物攻击
FillBucketEvent 默认 桶装取
PlayerEvent.PlayerChangedDimensionEvent 默认 换维度
另 5 个 — 见文件

实现要点

⚠️ AE2PartPlaceEvent / BlockTrampleEvent / ModifyBiomeEvent / ModifyBlockEvent / ProjectileImpactEvent 并非 Minecraft 或 AE2 / Forestry 原生事件, 它们的包名是 myessentials.event(ProtectionHandlers.java:34-36 等), 由 MyEssentials-Core 定义并代为投递。

即 MyEssentials-Core 充当统一事件兼容层:AE2 部件放置、Forestry 踩踏、 生物群系改写等被包成自己的事件再 post 到 Forge 总线。

因此不能说 MyTown2 直接依赖 Applied Energistics 2 或 Forestry —— Constants.DEPENDENCIES 里没有它们,AE2 / Forestry 缺失时只是相应保护不生效, 不会导致启动失败。

  • 多数高危判定用 EventPriority.HIGHEST,以便在其他 mod 改写事件前先行拦截。
  • onMultiBlockPlacement 与 onBlockPlacement 共用 onAnyBlockPlacement(...) 处理逻辑。
  • 换维度事件 onPlayerChangedDimensionEvent 与 ProtectionManager 的 checkLocationOnDimensionChanged(...) 配合。

相关条目