HyGuard - 领地 / 区域

HyGuard - 领地 / 区域

一个管理玩家领地及/或可配置管理员区域的插件

实用

管理玩家领地和管理员区域的插件。我们希望它能有所帮助。


配置文件 - V1.1.1

  • MapRefreshTick: 100 每隔多久刷新世界地图(以刷新后的总计tick数表示)
  • PlayerMaxChunks = 4; 玩家最大领地限制
  • PlayerChunksCanDetach = false; 玩家区域内的区块是否可以彼此分离
  • PlayerChunksDecay = false; 如果玩家在总时间内未登录,区块是否自动删除
  • WorkbenchChestRadius = 14; 工作台检测箱子内物品的半径

当前命令

  • /hg 打开领地GUI(仍在开发中)
  • /hg claim 认领你的区块
  • /hg unclaim 取消认领你的区块
  • /hg trust {player} 信任一个玩家,允许其编辑你的区块
  • /hg untrust {player} 取消信任一个玩家,使其无法编辑你的区块
  • /hg ban {player} 禁止一个玩家进入你的区块
  • /hg unban {player} 解禁一个玩家,允许其进入你的区块
  • /hg funclaim {region} [管理员命令] 强制取消认领一个区块
  • /hg fclaim {region} [管理员命令] 强制认领一个区块
  • /hg region tp {region} [管理员命令] 传送至一个区域

你可以创建管理区域!这些是完全可配置的! 实际上,所有玩家领地都是这些区域的自定义预设!

  • /hg region create {region}
  • /hg region delete {region}
  • /hg region group create {region} {group}
  • /hg region group delete {region} {group}
  • /hg region group add {region} {group} {player}
  • /hg region group remove {region} {group} {player}
  • /hg region group permission add {region} {group} {permission} {DENY/ALLOW}
  • /hg region group permission remove {region} {group} {permission}

当前事件

  • event.movement
  • event.breakblock
  • event.placeblock
  • event.interact

新增API支持 - V1.1.1

MAVEN 集成

将文件添加到主项目目录下的 lib 配置中。

<dependency>
    <groupId>it.hytale</groupId>
    <artifactId>HyGuard</artifactId>
    <version>1.1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/HyGuard-1.1.0.jar</systemPath>
</dependency>

API 方法

public interface IRegionManager {

    CompletableFuture<Void> create(Ref<EntityStore> ref, String regionName);

    CompletableFuture<Void> delete(Ref<EntityStore> ref, String regionName);

    CompletableFuture<Void> teleport(Ref<EntityStore> ref, Player player, String regionName);

    void decay(String regionName);

}
public interface IPermissionManager {

    CompletableFuture<Void> remove(Ref<EntityStore> ref, String regionName, String groupName, String permission);

    CompletableFuture<Void> add(Ref<EntityStore> ref, String regionName, String groupName, String permission, State state);

}
public interface IGroupManager {

    CompletableFuture<Void> create(Ref<EntityStore> ref, String regionName, String groupName);

    CompletableFuture<Void> delete(Ref<EntityStore> ref, String regionName, String groupName);

    CompletableFuture<Void> add(Ref<EntityStore> ref, String regionName, String groupName, UUID targetUuid);

    CompletableFuture<Void> remove(Ref<EntityStore> ref, String regionName, String groupName, UUID targetUuid);

}

如果你正在使用 SimpleClaim 并且想使用本插件,我制作了一个将配置文件区域转换的 python 转换器。如果你愿意,可以在 google.colab 中运行它,代码如下:

import json

from collections import defaultdict

input_path = "/content/Claims.json"

output_path = "/content/Regions.json"

with open(input_path, "r", encoding="utf-8") as f:

    data = json.load(f)

regions_map = defaultdict(lambda: {

    "UUID": None,

    "Region": None,

    "Chunks": [],

    "Groups": [],

    "IsFullChunkOnly": True,

    "IsOverlapable": True,

    "IsOverlapping": False,

    "IsDecayable": False,

    "Priority": 0,

    "MapColor": 16092226,

    "Title": None

})

for dim in data.get("Dimensions", []):

    dimension_name = dim.get("Dimension", "default")

    for chunk in dim.get("ChunkInfo", []):

        owner_uuid = chunk.get("CreatedTracker", {}).get("UserUUID")

        chunk_x = chunk.get("ChunkX")

        chunk_z = chunk.get("ChunkY")

        username = chunk.get("CreatedTracker", {}).get("UserName", "Unknown")

        title = f"{username} Claim"

        region_name = title.replace(" ", "")

        if regions_map[owner_uuid]["UUID"] is None:

            regions_map[owner_uuid]["UUID"] = owner_uuid

            regions_map[owner_uuid]["Region"] = region_name

            regions_map[owner_uuid]["Title"] = title

            regions_map[owner_uuid]["Groups"] = [

                {

                    "Permissions": [

                        {"State": "DENY", "Permission": "event.breakblock"},

                        {"State": "DENY", "Permission": "event.placeblock"},

                        {"State": "DENY", "Permission": "event.interact"}

                    ],

                    "Players": [],

                    "Group": "DEFAULT",

                    "Priority": 0

                },

                {

                    "Permissions": [

                        {"State": "ALLOW", "Permission": "event.breakblock"},

                        {"State": "ALLOW", "Permission": "event.placeblock"},

                        {"State": "ALLOW", "Permission": "event.interact"}

                    ],

                    "Players": [{"UUID": owner_uuid}],

                    "Group": "trust",

                    "Priority": 10

                },

                {

                    "Permissions": [

                        {"State": "DENY", "Permission": "event.movement"}

                    ],

                    "Players": [],

                    "Group": "ban",

                    "Priority": 10

                }

            ]

        regions_map[owner_uuid]["Chunks"].append({

            "X": chunk_x,

            "Z": chunk_z,

            "World": dimension_name,

            "Offsets": []

        })

regions = list(regions_map.values())

output = {"Regions": regions}

with open(output_path, "w", encoding="utf-8") as f:

    json.dump(output, f, indent=2, ensure_ascii=False)

对于玩家可以使用工作台从已认领箱子中偷取物品的BUG,考虑安装 AntiWorkBenchDetectChest 作为临时应对措施!