ImprovedHoppers

智能、感知领地的物品路由

资源图片
# ✨ 管理员喜欢它的原因 - 每个系统一个智能漏斗 → 远比Tick方块少,服务器负载更低。 - 在同一世界中远程路由,具有优先级、过滤器、轮询/填满优先。 - 滞后感知批处理,跳过受阻/未加载的目标,可选的有限重试队列。 - 内置申领和信任(或链接您的区域插件);管理绕过支持。 - 正常游戏无需命令 — 所有内容都通过清晰的游戏内 GUI 实现。 - 可选的电源系统(免费、红石或燃料箱 → 电源单位)。 - 演示:YouTube – 快速导览 --- # 📦 需求与兼容性 - **硬依赖:** [**Vault**](https://www.spigotmc.org/resources/vault.34315/) (用于经济;熔炉解锁和升级需要)。 - **软依赖:** - [**DecentHolograms**](https://www.spigotmc.org/resources/decentholograms-1-8-1-21-8-papi-support-no-dependencies.96927/) — 节点上方悬浮的 HUD(活动/空闲、最后传输、电源)。 - [**LuckPerms**](https://luckperms.net/) — 基于动态、权限的限制。 - [**SuperiorSkyblock2**](https://www.spigotmc.org/resources/%E2%9A%A1%EF%B8%8F-superiorskyblock2-%E2%9A%A1%EF%B8%8F-the-best-core-on-market-%E2%9A%A1%EF%B8%8F-1-21-5-support.87411/) 或 [**BentoBox**](https://www.spigotmc.org/resources/bentobox-bskyblock-acidisland-skygrid-caveblock-aoneblock-boxed.73261/) — 每岛限制和信任互操作。 - **服务器:** Paper/Spigot 1.20+ (API 1.21 目标)。 - **区域:** 与 GriefPrevention/WorldGuard 兼容;如果不存在,则包含一个轻量级的内部申领系统。 --- # 🚀 它所做的事情(核心功能) ### 远程物品路由 将一个改进的漏斗链接到同一世界中的许多容器。配置: - 每个目标的优先级(最高优先) - 白名单/黑名单物品过滤器 - 分配:轮询或填满优先 ### 全局游戏内 GUI 右键单击:管理链接、过滤器、电源、信任、统计信息、模拟路由、切换可视化。 ### 聊天搜索过滤器 单击指南针,键入搜索;按下 Esc 或“取消”退出。 ### 电源模式 - 无:免费操作 - 红石:`requireRedstonePower` 或 `pauseWhenPowered` - 燃料:链接一个燃料箱;燃料物品根据距离和数量转换为电源单位 ### 信任和申领 漏斗必须被申领;所有者可以 `/trust` 用户;管理员绕过。制作的节点自动申领。 ### 滞后感知批处理 每Tick上限和明智的跳过空输入/受阻/未加载的目标。 ### 可视化工具 到目标的粒子束;传输轨迹;过滤器聚焦可视化。 ### 内置熔炉(可选) 使用 Vault 解锁和升级的虚拟熔炼。 ### 可制作 改进漏斗和燃料箱的配方可配置。 --- # 🛠️ 安装 1. 将 JAR 放在 `/plugins` 中。 2. 确保安装了 Vault 并且已经激活了经济插件。 3. (可选)安装 DecentHolograms、LuckPerms 和你的 Skyblock 插件。 4. 启动服务器。如果需要,编辑 `/plugins/ImprovedHoppers/config.yml`。 5. `/improvedhoppers reload` 以应用更改。 --- # ⚡ 快速开始(玩家) 1. 制作一个改进的漏斗(如果使用燃料模式,则制作一个燃料箱)。 2. 放置和申领漏斗(制作的节点自动申领)。 3. 打开 GUI → 添加目标 → 单击容器以链接 提示:`/improvedhoppers wand` 用于快速多链接。 4. 设置过滤器、优先级和分配模式。 5. 选择电源模式。如果使用燃料,链接燃料箱并插入燃料。 6. (可选)根据红石设置添加红石。 --- # ⌨️ 命令 | 命令 | 描述 | 权限 | |---------------------------------|------------------------------------------|-----------------------------------------------------------------| | `/improvedhoppers` | 显示子命令 | (无) | | `/improvedhoppers wand` | 获取链接魔杖进行多链接 | `improvedhoppers.user.wand` | | `/improvedhoppers settings` | 打开设置 (节点或管理员视图) | `improvedhoppers.user.settings` / `improvedhoppers.admin.settings` | | `/improvedhoppers remote` | 远程控制器 (随时查看/管理) | `improvedhoppers.user.remote` | | `/improvedhoppers reload` | 重新加载配置 | `improvedhoppers.admin.reload` | | `/improvedhoppers power apply` | 重新应用电源设置 | `improvedhoppers.admin` | --- # 🔐 权限 ## 用户 - `improvedhoppers.user.wand` (默认: true) - `improvedhoppers.user.settings` (默认: true) - `improvedhoppers.user.remote` (默认: true) - `improvedhoppers.user.*` (默认: true) ## 管理员 - `improvedhoppers.admin` (默认: op) — 绕过管理 - `improvedhoppers.admin.reload` (默认: op) - `improvedhoppers.admin.settings` (默认: op) - `improvedhoppers.admin.*` (默认: op) ## 限制 (覆盖配置) - `improvedhoppers.limit.player.` - `improvedhoppers.limit.island.` - `improvedhoppers.limit.links.` - `improvedhoppers.limit.trusted.` - `improvedhoppers.limit.filter.` - `improvedhoppers.hopper.power.` --- # 🧪 制作 **改进漏斗 — 形状配方(所有物品可配置)** ``` I C I R H R I C I ``` **燃料箱 — 可配置(例如,煤 + 箱子)** 参见 `recipes.yml` 获取确切材料、名称和 NBT 设置。 --- # ⚙️ 配置高亮 (示例) ```yaml general: storage: YAML # YAML | SQLITE locale: en_US holograms: enabled: true update_ticks: 20 particles: enabled: true transfer_trail: true filter_focus: true claims: required: true auto_claim_on_craft: true admin_bypass: true routing: link: max_distance: 256 owner_must_be_online: false cleanup_interval_ticks: 200 distribution: ROUND_ROBIN # ROUND_ROBIN | FILL_FIRST filters: default_mode: WHITELIST # WHITELIST | BLACKLIST per_hopper_max: 32 transfer: interval_ticks: 10 per_tick_item_cap: 256 suction: radius: 2.5 enabled: true cost_per_item: 0 retry_queue: enabled: true max_entries: 2048 power: mode: NONE # NONE | REDSTONE | FUEL redstone: require_power: false pause_when_powered: true fuel: enabled: false # 设置为 true 以使用燃料 capacity: 10000 regen_per_tick: 0 distance_cost_per_block: 0.25 amount_cost_per_item: 0.05 auto_refuel: true link_limit: 1 max_link_distance: 16 fuels: COAL: 160 CHARCOAL: 160 BLAZE_ROD: 240 smelter: enabled: true base_cook_ticks: 200 queue_size: 128 unlock_cost: 1000 # Vault currency upgrade_costs: level_2: 2500 level_3: 5000 limits: per_player: 20 per_island: 50 links_per_material: 4 trusted_slots: 8 storage: sqlite: file: data/ihoppers.db ``` > 注意:为了避免冲突,Vanilla `InventoryMoveItemEvent`/`InventoryPickupItemEvent` 会被取消用于申领的节点。 --- # 🧭 路由逻辑 (一览) 1. 从来源库存中提取高达 `per_tick_item_cap` 物品。 2. 过滤物品(白名单/黑名单)。 3. 按优先级对目标排序,移除未加载或受阻的目标。 4. **分配:** - **轮询:** 每个物品类型循环目标。 - **填满优先:** 填充第一个有效目标,直到无法接受更多。 5. 电源核算(如果启用):距离和数量 → PU 成本。 6. 如果启用重试队列,则在移动失败时应用重试队列。 --- # 📈 性能说明 - 使用批处理和每Tick上限,以保持 TPS 平稳。 - 跳过空来源和受阻/未加载的目标以节省时间。 - 可选的距离缩放电源可阻止极端跨地图链接。 - 可视化器按玩家设置;过滤器聚焦轨迹减少粒子垃圾。 --- # 🧩 兼容性与链接 - 链接: Vault, LuckPerms, DecentHolograms, SuperiorSkyblock2, BentoBox, GriefPrevention, WorldGuard。 - 如果未检测到,则包含内部申领。 --- # 🧰 管理员工具 查看一个节点并运行 `/improvedhoppers settings`(管理员视图)以实时微调:链接距离、吸入/传输上限、燃料值、熔炉费率、限制、粒子/全息图、世界允许列表、配方和更多。 --- # 🧑‍💻 API 和事件 (供开发者使用) **事件 (示例)** - `HopperSorterTransferEvent` — 每次成功转移 - `HopperSorterFuelConsumeEvent` — 在燃料 → 电源转换时 - `HopperSorterClaimEvent` — 当所有权/申领发生变化时 - 溢出和警报链接 **示例监听器** ```java @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onTransfer(HopperSorterTransferEvent e) { Player owner = e.getOwner(); ItemStack stack = e.getItem(); Location from = e.getSource(); Location to = e.getTarget(); int moved = e.getAmount(); // e.getCostPU() 如果使用燃料模式;e.isSimulated() 用于干运行 if (owner != null && owner.isOnline()) { owner.sendActionBar(Component.text("§aMoved " + moved + "x " + stack.getType() + " → " + pretty(to))); } } ``` 可以为燃料提供商和虚拟目标提供最小的 API 草图。 --- # 💾 存储与持久性 - YAML 或 SQLite。 - 持久化节点电源、名称、粒子颜色、链接、熔炉状态安全。 --- # ❓ 常见问题解答 **Q:我可以禁用电源系统吗?** A:可以。默认情况下已禁用;将 `power.fuel.enabled: true` 设置为使用燃料。 **Q:玩家可以远程管理漏斗吗?** A:是的。 `/improvedhoppers remote` 打开网络概述或节点 GUI。 **Q:申领节点上是否仍然发生 Vanilla 漏斗提取?** A:不。我们取消了申领节点的移动/提取事件,以避免冲突。 --- # 🧪 故障排除 - 没有发生传输 → 检查申领/所有权和电源模式。 - 缺少全息图 → 安装/启用 DecentHolograms 并确保 `holograms.enabled: true`。 - Skyblock 限制被忽略 → 确保存在 SSB2/BentoBox;如果使用权限覆盖,请确认 LuckPerms dyn-limits。 - 距离成本过高 → 降低 `power.fuel.distance_cost_per_block` 或增加容量。 --- # 🧭 路由逻辑 (一览) 1. 从来源库存中提取高达 `per_tick_item_cap` 物品。 2. 过滤物品(白名单/黑名单)。 3. 按优先级对目标排序,移除未加载或受阻的目标。 4. **分配:** - **轮询:** 每个物品类型循环目标。 - **填满优先:** 填充第一个有效目标,直到无法接受更多。 5. 电源核算(如果启用):距离和数量 → PU 成本。 6. 如果启用重试队列,则在移动失败时应用重试队列。 --- # 📈 性能说明 - 使用批处理和每Tick上限,以保持 TPS 平稳。 - 跳过空来源和受阻/未加载的目标以节省时间。 - 可选的距离缩放电源可阻止极端跨地图链接。 - 可视化器按玩家设置;过滤器聚焦轨迹减少粒子垃圾。 --- # 🧩 兼容性与链接 - 链接: Vault, LuckPerms, DecentHolograms, SuperiorSkyblock2, BentoBox, GriefPrevention, WorldGuard。 - 如果未检测到,则包含内部申领。 --- # 🧰 管理员工具 查看一个节点并运行 `/improvedhoppers settings`(管理员视图)以实时微调:链接距离、吸入/传输上限、燃料值、熔炉费率、限制、粒子/全息图、世界允许列表、配方和更多。 --- # 🧑‍💻 API 和事件 (供开发者使用) **事件 (示例)** - `HopperSorterTransferEvent` — 每次成功转移 - `HopperSorterFuelConsumeEvent` — 在燃料 → 电源转换时 - `HopperSorterClaimEvent` — 当所有权/申领发生变化时 - 溢出和警报链接 **示例监听器** ```java @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onTransfer(HopperSorterTransferEvent e) { Player owner = e.getOwner(); ItemStack stack = e.getItem(); Location from = e.getSource(); Location to = e.getTarget(); int moved = e.getAmount(); // e.getCostPU() 如果使用燃料模式;e.isSimulated() 用于干运行 if (owner != null && owner.isOnline()) { owner.sendActionBar(Component.text("§aMoved " + moved + "x " + stack.getType() + " → " + pretty(to))); } } ``` 可以为燃料提供商和虚拟目标提供最小的 API 草图。 --- # 💾 存储与持久性 - YAML 或 SQLite。 - 持久化节点电源、名称、粒子颜色、链接、熔炉状态安全。 --- # ❓ 常见问题解答 **Q:我可以禁用电源系统吗?** A:可以。默认情况下已禁用;将 `power.fuel.enabled: true` 设置为使用燃料。 **Q:玩家可以远程管理漏斗吗?** A:是的。 `/improvedhoppers remote` 打开网络概述或节点 GUI。 **Q:申领节点上是否仍然发生 Vanilla 漏斗提取?** A:不。我们取消了申领节点的移动/提取事件,以避免冲突。 --- # 🧪 故障排除 - 没有发生传输 → 检查申领/所有权和电源模式。 - 缺少全息图 → 安装/启用 DecentHolograms 并确保 `holograms.enabled: true`。 - Skyblock 限制被忽略 → 确保存在 SSB2/BentoBox;如果使用权限覆盖,请确认 LuckPerms dyn-limits。 - 距离成本过高 → 降低 `power.fuel.distance_cost_per_block` 或增加容量。