主题
拦截器配置文件
配置文件位于
plugins/PLand/config目录下。
编辑提示
- 请使用支持 JSON 的编辑器编辑,不要使用记事本,否则可能损坏配置文件。
什么是拦截器?
PLand 通过拦截游戏事件来强制领地权限(比如:非领地成员不能破坏方块、不能开箱子等)。
拦截器配置文件 InterceptorConfig.json 由三部分组成:
| 配置项 | 作用 | 风险等级 |
|---|---|---|
listeners | 开关各类事件监听器(玩家破坏、放置、交互、爆炸等) | ⚠️ 高 |
hooks | 开关各类底层 Hook(修补部分事件监听覆盖不到的越权问题) | ⚠️ 高 |
rules | 定义特定物品/方块交互所需的权限,以及生物受伤白名单 | 低 |
非必要请勿关闭监听器和 Hook!
- 关闭它们可能导致领地功能异常(越权破坏、偷取物品等)
- 如果你不知道某个开关是做什么的,请不要关闭它
- 提供的注释仅概括大致作用,具体行为请查看源码
- 当然,如果某个开关导致游戏崩溃,你也可以选择关闭它
完整配置示例
json
{
"version": 8, // 配置文件版本
"listeners": {
// 事件监听器开关 true 为开启,false 为关闭
"PlayerDestroyBlockEvent": true, // 玩家破坏方块事件
"PlayerPlacingBlockEvent": true, // 玩家放置方块事件
"PlayerInteractBlockEvent": true, // 玩家交互方块事件
"PlayerAttackEvent": true, // 玩家攻击事件
"PlayerPickUpItemEvent": true, // 玩家拾取物品事件
"SpawnedMobEvent": true, // 生成生物事件
"ActorHurtEvent": true, // 生物受伤事件
"FireSpreadEvent": true, // 火焰蔓延事件
"ActorDestroyBlockEvent": true, // 生物破坏方块事件
"MobTakeBlockBeforeEvent": true, // 生物取方块事件
"MobPlaceBlockBeforeEvent": true, // 生物放置方块事件
"ActorPickupItemBeforeEvent": true, // 生物拾取物品事件
"ActorRideBeforeEvent": true, // 生物骑乘事件
"MobHurtEffectBeforeEvent": true, // 生物受伤效果事件
"ActorTriggerPressurePlateBeforeEvent": true, // 生物触发压力板事件
"PlayerInteractEntityBeforeEvent": true, // 玩家交互实体事件
"ArmorStandSwapItemBeforeEvent": true, // 僵尸村民交互事件
"PlayerDropItemBeforeEvent": true, // 玩家丢弃物品事件
"PlayerOperatedItemFrameBeforeEvent": true, // 玩家操作物品展示框事件
"PlayerEditSignBeforeEvent": true, // 玩家编辑告示牌事件
"ExplosionBeforeEvent": true, // 爆炸事件
"PistonPushBeforeEvent": true, // 活塞推动事件
"RedstoneUpdateBeforeEvent": true, // 红石更新事件
"WitherDestroyBeforeEvent": true, // 凋落破坏事件
"LiquidFlowBeforeEvent": true, // 液体流动事件
"DragonEggBlockTeleportBeforeEvent": true, // 龙蛋方块传送事件
"SculkBlockGrowthBeforeEvent": true, // 藤蔓生长事件
"SculkSpreadBeforeEvent": true, // 藤蔓蔓延事件
"PlayerUseItemEvent": true // 玩家使用物品事件
},
"hooks": {
// Hook 技术指的是在软件运行过程中,通过拦截、修改或补充原有代码逻辑,实现对目标软件行为的影响和控制的技术手段
// 这里的 Hook 用于 Patch 修补一些领地越权问题
// 每个 Hook 对应一个或多个权限修复,true 为开启,false 为关闭
"ScaffoldingBlockPlaceHook": true, // 脚手架放置
"FishingHookHitHook": true, // 钓鱼钩击中
"LayEggGoalHook": true, // 海龟产卵
"FireBlockBurnHook": true, // 火焰燃烧方块
"ChestBlockActorOpenHook": true, // 箱子实体打开 (铜傀儡)
"LightningBoltHook": true, // 闪电
"LecternBlockUseHook": true, // 使用讲台
"LecternBlockDropBookHook": true, // 取出讲台书本
"OozingMobEffectHook": true, // 渗浆效果
"WeavingMobEffectHook": true, // 盘丝效果
"HopperComponentPullInItemsHook": true, // 漏斗组件吸取物品(漏斗矿车)
"ExperienceOrbPlayerTouchHook": true, // 经验球拾取
"ThrownTridentPlayerTouchHook": true, // 三叉戟拾取
"ArrowPlayerTouchHook": true, // 箭矢拾取
"AbstractArrowPlayerTouchHook": true, // 箭类投射物拾取
"FarmChangeEventHook": true, // 农田踩踏/退化
"BigDripleafBlockHook": true, // 大型垂滴叶
"FallingBlockActorTickHook": true, // 领地上方重力方块下落
"DispenserLiquidDispenseHook": true, // 发射器领地边界倾倒液体
"KineticDamageHook": true, // 矛冲刺命中
"VegetationPatchPlaceHook": true, // 苔藓生长
"FrostWalkerHook": true // 冰霜行者拦截
},
"rules": {
"mob": {
"allowHostileDamage": [
// 允许敌对生物受伤白名单
"minecraft:creeper",
"minecraft:enderman",
"minecraft:zombie",
"minecraft:drowned"
// ....
],
"allowFriendlyDamage": [
// 允许友好(中立)生物受伤白名单
"minecraft:armadillo",
"minecraft:sheep",
"minecraft:cow",
"minecraft:rabbit"
// ....
],
"allowSpecialEntityDamage": [
// 允许特殊生物受伤白名单
// 自定义特殊生物、例如 Addon 生物
"minecraft:painting", // 画
"minecraft:hopper_minecart", // 漏斗矿车
"minecraft:chest_boat", // 箱船
"minecraft:leash_knot" // 拴绳结
// ......
]
},
"item": {
"minecraft:skull": "allowPlace",
"minecraft:banner": "allowPlace",
"minecraft:glow_ink_sac": "allowPlace",
"minecraft:end_crystal": "allowPlace"
// ...
},
"block": {
"minecraft:noteblock": "useNoteBlock",
"minecraft:crafter": "useCrafter",
"minecraft:soul_campfire": "useCampfire",
"minecraft:chest": "allowOpenChest",
"minecraft:anvil": "useAnvil"
// ....
}
}
}listeners 事件监听器
事件监听器负责拦截最常见的越权行为,按功能可以分为几类:
| 分类 | 监听器 | 作用 |
|---|---|---|
| 玩家破坏/放置 | PlayerDestroyBlockEvent、PlayerPlacingBlockEvent | 阻止非成员破坏、放置方块 |
| 玩家交互 | PlayerInteractBlockEvent、PlayerInteractEntityBeforeEvent | 阻止非成员使用箱子、床、按钮等 |
| 玩家战斗 | PlayerAttackEvent | 阻止非成员攻击(配合 PvP 权限) |
| 玩家拾取/丢弃 | PlayerPickUpItemEvent、PlayerDropItemBeforeEvent | 阻止非成员拾取/丢弃物品 |
| 生物行为 | SpawnedMobEvent、ActorDestroyBlockEvent、MobTakeBlockBeforeEvent 等 | 阻止生物破坏领地、取走物品等 |
| 环境变化 | FireSpreadEvent、ExplosionBeforeEvent、LiquidFlowBeforeEvent、PistonPushBeforeEvent 等 | 阻止火灾蔓延、爆炸破坏、液体流动等影响领地 |
| 其他 | PlayerUseItemEvent、PlayerEditSignBeforeEvent 等 | 剩余的特殊交互 |
hooks 底层钩子
Hook(钩子) 是一种更底层的技术:在程序运行过程中,通过拦截、修改或补充原有代码逻辑,实现对目标行为的控制。
PLand 使用 Hook 来修补一些事件监听器覆盖不到的越权问题(例如钓鱼钩、闪电、漏斗矿车吸物、经验球拾取等)。每个 Hook 对应一个或多个权限修复。
与 listeners 一样,非必要请勿关闭 Hook。
rules 特殊权限规则
rules 用于配置特定物品或方块交互所需的权限,以及生物受伤白名单。这允许服主自定义哪些物品/方块在领地内可以被非成员使用。
rules.item 和 rules.block
rules.item: 定义了使用特定物品时所需的权限。键是物品的命名空间 ID,值是权限名称。rules.block: 定义了与特定方块交互时所需的权限(通常是简单交互,如使用床、工作台、熔炉等)。键是方块的命名空间 ID,值是权限名称。
默认配置中包含了大部分原版物品和方块的权限设置,您可以根据需要进行修改、添加或删除。
rules.mob 生物受伤白名单
allowHostileDamage: 允许敌对生物在领地内受伤的白名单allowFriendlyDamage: 允许友好(中立)生物在领地内受伤的白名单allowSpecialEntityDamage: 允许特殊生物(Addon 生物、画、矿车等)在领地内受伤的白名单
可用的权限值
以下是所有可用于 rules.item 和 rules.block 的权限名称字符串:
| 权限字段 | 注释 |
|---|---|
allowDestroy | 允许破坏方块 |
allowPlace | 允许放置方块 |
useBucket | 允许使用桶(水/岩浆/...) |
useAxe | 允许使用斧头 |
useHoe | 允许使用锄头 |
useShovel | 允许使用铲子 |
placeBoat | 允许放置船 |
placeMinecart | 允许放置矿车 |
useButton | 允许使用按钮 |
useDoor | 允许使用门 |
useFenceGate | 允许使用栅栏门 |
allowInteractEntity | 允许与实体交互 |
useTrapdoor | 允许使用活板门 |
editSign | 允许编辑告示牌 |
useLever | 允许使用拉杆 |
useFurnaces | 允许使用所有熔炉类方块(熔炉/高炉/烟熏炉) |
allowPlayerPickupItem | 允许玩家拾取物品 |
allowRideTrans | 允许骑乘运输工具(矿车/船) |
allowRideEntity | 允许骑乘实体 |
usePressurePlate | 触发压力板 |
allowFishingRodAndHook | 允许使用钓鱼竿和鱼钩 |
allowUseThrowable | 允许使用投掷物(雪球/鸡蛋/三叉戟/...) |
useArmorStand | 允许使用盔甲架 |
allowDropItem | 允许丢弃物品 |
useItemFrame | 允许操作物品展示框 |
useFlintAndSteel | 使用打火石 |
useBeacon | 使用信标 |
useBed | 使用床 |
allowPvP | 允许PvP |
allowHostileDamage | 敌对生物受到伤害 |
allowFriendlyDamage | 友好生物受到伤害 |
allowSpecialEntityDamage | 特殊生物受到伤害 |
useContainer | 允许使用容器(箱子/木桶/潜影盒/发射器/投掷器/漏斗/雕纹书架/试炼宝库/...) |
useWorkstation | 工作站类(工作台/铁砧/附魔台/酿造台/锻造台/砂轮/织布机/切石机/制图台/合成器) |
useBell | 使用钟 |
useCampfire | 使用营火 |
useComposter | 使用堆肥桶 |
useDaylightDetector | 使用阳光探测器 |
useJukebox | 使用唱片机 |
useNoteBlock | 使用音符盒 |
useCake | 吃蛋糕 |
useComparator | 使用红石比较器 |
useRepeater | 使用红石中继器 |
useLectern | 使用讲台 |
useCauldron | 使用炼药锅 |
useRespawnAnchor | 使用重生锚 |
useBoneMeal | 使用骨粉 |
useBeeNest | 使用蜂巢(蜂箱) |
editFlowerPot | 编辑花盆 |
allowUseRangedWeapon | 允许使用远程武器(弓/弩) |
allowFrostWalker | 允许冰霜行者冻结水 |
示例: 默认情况下,minecraft:flint_and_steel(打火石)需要 useFlintAndSteel 权限。如果您想让它需要 allowPlace 权限,您可以这样修改:
jsonc
{
// ...
"rules": {
// ...
"item": {
"minecraft:flint_and_steel": "allowPlace"
// ...
}
// ...
}
}