Skip to content

拦截器配置文件 ​

配置文件位于 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"
      // ...
    }
    // ...
  }
}

AGPL-3.0 Licensed