HiddenOre
HiddenOre 是一款高度可配置、低性能消耗的插件,可在世界生成后动态调整矿物平衡。它通过掉落物或按需在世界中即时生成矿脉来实现,是绝佳的反透视工具,也是激励玩家挖矿的强大手段。
Minecraft 1.13 重要说明
Minecraft 1.13 及 Bukkit/Spigot 的实现,对插件原本处理材料子类型(已弃用)的方式带来了变化。具体来说,如果你要定义一个普通的矿石生成序列,你不能再只配置“STONE”方块。现在你需要为 STONE、ANDESITE、DIORITE 和 GRANITE 分别定义方块配置。如果使用生成功能,你还需要为每种类型定义允许的生成物。
这种方式的好处是,你可以对世界中矿石生成的每个细节拥有更强的控制力。你可以在 config.yml 中找到详细的配置示例。
关于 1.13 的更多说明,请见下文常规位置。
概述
每次你破坏一个自然生成的方块时,都会进行一次“抽奖”。这偶尔会掉落酷炫的物品来代替你破坏的方块,或者在矿工周围生成新的方块。
典型用例是石头——破坏石头时,偶尔会掉落矿石,或者在矿工周围生成珍贵的方块。
例如
- 1/100,000 的几率找到海晶石。
- 1/3,000 的几率找到钻石。
- 1/10,000 的几率找到一条包含 10 个钻石矿石的矿脉。
该插件完全可配置,支持生物群系特定设置、工具限制和有限的玩家状态限制,提供了高度的选项灵活性和特异性。
从 1.5.2 版本开始,你可以通过“噪声”生成器构建交叉的概率场,从而颠覆原有的机制。这允许存在一个持久的、隐藏的掉落密度区域地图。概率较难精确约束,但仍可通过一些试验和误差进行测量。但请注意,由于噪声生成器的特性,一旦选择配置,后续将难以平滑地重新平衡——例如,玩家发现的高密度区域在配置更改后可能失效。而传统的概率方法则不受此影响,玩家只会注意到全局或定义区域内的变化,这种“影响”是共享的,不会冲击太多秘密知识。无论如何,这两种方式都是管理员的绝佳选择。
请注意,与其他分支不同,我们基于噪声的生成方法已嵌入现有的配置流程中,并作为一个新的功能机制,而非完全独立的元素。这允许你自由混合搭配这些“矿脉”、掉落物、转换、命令等功能,而不会损失任何特性。我们的目标始终是为你提供最多的功能和最强的控制力。
详细说明
以下是技术细节
- 在方块被破坏时,插件会检查配置,查看是否为此方块定义了抽奖。可选地,会快速检查是否使用了精准采集附魔。
- 你可以指定多个掉落物,每个掉落物都会针对此次破坏进行独立的概率计算,所有掉落物的总和会生成到世界中。
- 或者,你可以指定只允许一种掉落类型。在这种情况下,会生成一个随机数,并根据可能掉落物的概率分布进行测试。这可以模拟 Minecraft 原版的矿石生成行为。
- 针对每种被破坏的方块类型,每种掉落物的掉落几率是可配置的。
- 在 Minecraft 1.13 中,不再直接支持子类型规范;未来的版本可能会添加原生材料组来模拟之前的行为,但目前此功能已被移除。
- 你可以应用生物群系级别的几率、等级和数量修正。
- 掉落物可以限制在特定的 Y 坐标层。
- 掉落物可以限制为使用特定工具,并具有高度的可配置性。请查看
config.yml和config-advanced.yml。 - 掉落几率可以根据玩家的药水/效果状态及该状态的等级进行修改。目前支持急迫、挖掘疲劳、反胃、失明以及幸运/霉运状态。详见
config.yml。 - 插件包含一个默认配置,可有效模拟 Minecraft 原版的矿石生成。理论上,你可以生成一个没有矿石或洞穴的普通 MC 世界,但通过此插件获得与原版相当的丰富资源。这堪称终极的反透视防御——因为那些矿石根本不存在。
- 支持追踪方块破坏以防止“刷”取更多掉落物。额外的事件处理器会监视游戏尝试,并直接惩罚该“区块”(技术上说是区块切片)。一个额外的“高度本地化”循环列表会记录最近的破坏和放置位置,以完全防止通过破坏-放置循环进行的漏洞利用。最后,一个新的追踪器会记录每个被破坏或交互的方块,并防止其被转换为矿石或产生掉落物。
- 你可以为每种方块类型指定多个配置,但从 Minecraft 1.13 开始,只有第一个会被使用。同时请注意,在掉落物方面,将使用遇到的第一个匹配配置,请牢记这一点。
- 你可以为特定类型的掉落物指定自定义消息,让“超级”发现拥有独特的提示。
- 你可以使用
/hiddenore debug true或false来开启或关闭调试模式。请注意,如果有人正在挖掘或有活塞活动,这将在控制台产生大量刷屏信息。 - 支持保存和加载追踪数据库,并完全兼容
/reload命令,无任何困难。 - 从 1.4.2 版本开始,通过名称或 UUID 提供完整的多世界支持。
- 从 1.5.2 版本开始,你可以指定“veinNatures”,它允许基于单纯形噪声的复杂矿石概率分布。其机制不如传统方法直观,因此计算起来比较困难,但最终结果可能非常出色,允许分层、重叠或其他巧妙的矿石交叉分布。玩家也喜欢这种方式,因为它允许一种密度分布,一旦“找到”就可以加以利用。
- 与所有其他功能一样,在主线版本中,完整的配置选项套件(包括掉落物、转换、命令、生物群系和状态修正等)都可以应用于 veinNature 配置。示例请见
config-veins.yml。
待办事项 / 开发中功能
- 配置用于“洞穴除尘”的工具。当前默认为钻石镐。
- 更好的文档。
版本功能增强列表
v1.5.3
- 一些针对方块级漏洞利用追踪的通用修复和改进。
v1.5.2
- 添加了 CivClassic 风格的“矿脉”功能。这基本上是由持久噪声场支持的矿石分布,而非经典的 HiddenOre 概率分布函数。结果在概率上是兼容的,但生成方式有很大不同。请查看
config-veins.yml获取示例。请注意,由于根本的实现差异,为 CivClassic 矿脉制作的配置无法直接移植到此实现中,因为他们的实现重构了配置,并将矿脉作为一个独立的流程引入,只保留了部分传统的掉落或生成能力;而我们的矿脉方法保留了所有现有的功能丰富环境,只是将矿脉作为现有掉落配置的概率分布修正器来实现(同时扩展了 1.5.1 版本中全局掉落配置设计的功能)。
v1.5.1
- 为持续支持 1.13 添加了一些关键的生活质量功能。具体来说(详见
config.yml中的示例和细节),你现在可以在全局部分指定掉落物,并在方块掉落配置中按名称选择这些掉落物。你还可以在同一个方块配置中指定多个应用此掉落配置的方块。这应该能显著提高配置的简洁性,甚至超过之前的子类型系统。请注意,你可以在一个方块中混合使用全局掉落物和本地掉落配置,但不能在单个方块配置中混合使用单个或多个方块类型。
v1.5.0
- 添加了 Minecraft 1.13 支持。请注意,你需要重新制作你的配置。虽然你的旧配置可以加载,但很可能无法按预期工作。子类型支持已被完全移除,子类型的声明将被忽略。Spigot 本身已将许多材料重命名以匹配 Minecraft 的规范风格,而 HiddenOre 不提供向后兼容性。从 1.5.0 开始,不保证对任何更早的 Minecraft 版本提供主动支持,仅会尽最大努力提供(如果有的话)。
- 关于配置的重要说明:所有 ItemStack 序列化都已更改!现在有一个新的
v:规范。我已在演示配置中模拟了它,但为了避免混乱且不受支持的旧版本设置,请重新导出你的序列化掉落物。
v1.4.2
- 添加了完整的多世界支持。标准配置将用作任何没有特定配置的世界的默认配置。可以指定一个新的
worlds部分,每个子部分要么是世界的 UUID,要么是世界的名称,并附带特定配置。世界标识符下的单个blocks子部分包含该世界的所有方块配置。它的配置方式与默认配置类似,但位于世界的blocks子部分内。请查看配置中的示例。
v1.4.1
- 新追踪器的实际使用显示其磁盘使用量大幅增加。添加了一个配置选项来显式禁用它。添加了命令“掉落物”的配置示例和一些修复。
v1.4.0
- 新的漏洞利用追踪器,可追踪实际被破坏或暴露的方块。这将完全防止“但我已经检查过那个方块了”的问题。启发式追踪目前仍然处于激活状态。
v1.3.2
- 你现在可以在方块破坏时运行一个命令。如果你使用奖励箱,可以用来赠送物品,或自定义
/give等——该命令以服务器身份运行,请小心。使用%player%将玩家名注入命令,或使用%uuid%注入玩家的 Minecraft UUID。
v1.3.1
- 为 OP 添加了一个命令,可生成所有配置的掉落物。它有一些小问题,但输入
/hiddenore generate即可生成物品。
v1.2.9
- 支持根据你的活动配置,在你的地图洞穴中“除尘”矿石;这算是 v1.2.7 功能的补充。可用于防止当世界因 1.2.7 功能而缺乏矿石时出现的“无聊洞穴”问题。不要使用你的最终配置,请使用仅生成配置,并且如果生成失败,请关闭掉落物。
v1.2.8
- 支持根据 6 种基本的玩家效果状态(由药水或信标产生)来改变掉落几率。可按掉落物和生物群系进行配置(生物群系作为覆盖)。
v1.2.7
- 实验性功能,允许在世界生成阶段剥离矿石。可按世界名称进行完全配置;你可以将其设置为用单一材料替换任何一组材料。还包括一种新的反绕过方法,直接针对生成器和放置-破坏-放置-破坏循环中仍可能发生的“初始返回”。
配置详解
前缀与提示
prefix: You found a hidden ore!很简单,这是用户在成功破坏方块并“中奖”后显示的消息。
alert_user: true如果不想在用户找到矿石时向其发送游戏内聊天提示,请将其设置为 false。
list_drops: true如果不想让用户知道他们刚刚赢得了什么物品的名称,请将其设置为 false。
方块配置
blocks:
STONE:
allTypes: false
types:
- 0
dropMultiple: false这是魔法发生的地方。首先列出你想要破坏的 Bukkit 材料名称,本例中是 STONE。
allTypes:指定是否希望带有数据值的物品(如花岗岩0:1,而不是石头0:0)被破坏时也能获得奖励。你可以在下面的types部分直接指定类型。在此示例配置中,只有破坏石头才会进行奖励抽奖。dropMultiple:如果为false,则采用累积概率;如果为true,则采用独立概率。- 对于
dropMultiple: false,这意味着我们根据生物群系、工具和被破坏的方块,为每种掉落类型堆叠所有“几率”;我们选择一个随机数,并查看它是否落在由这些堆叠几率“切割”出的“概率范围”内。 - 例如,如果钻石、青金石和红石都是“可能”的掉落物,那么如果随机数在 0 到 0.0001 之间,则掉落钻石;在 0.0001 到 0.0024 之间,则掉落青金石;在 0.0024 到 0.005 之间,则掉落红石(使用假设的数字)。如果随机数高于 0.005,则没有隐藏掉落物。
- 对于
dropMultiple: true,我们为每个可能的掉落物选取一个随机数。如果新的随机数 < 0.0001,则掉落钻石。然后我们选取一个新的随机数。如果 < 0.0023,则掉落青金石。然后再选取一个新的随机数。如果 < 0.0026,则掉落红石。
掉落物配置
drops:
EMERALD_ORE:
tools:
- IRON_PICKAXE
- DIAMOND_PICKAXE
minY: 1
maxY: 32
chance: 0.0
minAmount: 1
maxAmount: 2
biomes:
EXTREME_HILLS:
chance: 0.001437
EXTREME_HILLS_MOUNTAINS:
chance: 0.001437
EXTREME_HILLS_PLUS:
chance: 0.001437
EXTREME_HILLS_PLUS_MOUNTAINS:
chance: 0.001437drops 部分处理奖励是什么。首先指定你想要掉落的 Bukkit 材料名称,本例中是 EMERALD_ORE。
tools:指定必须使用哪种工具挖掘才能获得此材料。minY和maxY:决定玩家必须在哪一高度范围内挖掘才能获得掉落物。chance:破坏方块时获得奖励物品的百分比几率。在此示例中设置为 0,以便我们可以在下面的biomes中指定哪些生物群系会给予奖励。minAmount和maxAmount:决定玩家“中奖”时获得的奖励方块数量。biomes:让你设置会给予奖励的特定生物群系及不同的几率。在本例中,在指定生物群系中挖掘石头有 0.1437% 的几率获得掉落物。
美化名称
pretty_names:
DIAMOND: Diamond
IRON_INGOT: Iron ingot
GOLD_INGOT: Gold ingot
QUARTZ: Quartz
EMERALD: Emerald
PRISMARINE_SHARD: Prismarine Shard
REDSTONE: Redstone
DIAMOND_ORE: Diamond Ore
IRON_ORE: Iron Ore
GOLD_ORE: Gold Ore
QUARTZ_ORE: Quartz Ore
EMERALD_ORE: Emerald Ore
PRISMARINE: Prismarine
REDSTONE_ORE: Redstone Ore
LAPIS_ORE: Lapis Lazuli Ore
COAL_ORE: Coal Ore
COAL: Coal
NETHERRACK: Netherrack
INK_SACK:
4: Lapis Lazuli此部分只是将 Bukkit 材料名称重命名为对用户更友好的名称。