Dropt - 使用示例
前言
此页面列出大量 Dropt 使用实例以供参考.
导包:
import mods.dropt.Dropt;想要使用 Dropt 添加一个掉落规则, 首先要创建一个 RuleList, 接着向 RuleList 中添加 Rule, 再为 Rule 定义 Match 条件和 Drop 掉落.
Dropt 会检测并应用所有被创建的 RuleList, 空的也是.
不会被复用的规则和条件一般会直接在 RuleList 部分的本体中被现学现卖, 可能会造成混淆, 如:
import mods.dropt.Dropt;
Dropt.list("list_name")
.add(Dropt.rule()
.matchBlocks(["minecraft:stone"])
.addDrop(Dropt.drop()
.items([<minecraft:string>])
)
);实际上等价于:
简而言之, Dropt 有着很强的模块性, 这点在需要复用等进阶用途时十分重要.
正文
请注意在阅读示例时, 不要因为因添加注释增加的空行忽视链式调用.
基础替换
将 "minecraft:stone" 的所有掉落替换为 1 个 <minecraft:string>.
选择性替换
阻止 <minecraft:cobblestone> 在 <minecraft:stone> 或 <minecraft:cobblestone> 被破坏时掉落.
此脚本要求 Dropt 匹配 "minecraft:stone" 或 "minecraft:cobblestone" 被破坏时掉落 <minecraft:cobblestone>. 替换策略会替换所有匹配上述条件的掉落为一个新的, 空的 Drop 对象. 由于目标规则中仅有一个空掉落池, 此空池总是会被选中.
打草掉落
在破坏高草丛时, 有 15% 的概率掉落 <minecraft:string>.
注意 Dropt 不提供直接的设置概率概率方法, 于是此处同时添加了一个权重为 85 的空掉落, 此掉落仍会被选择, 但什么也不掉落, 即可实现概率掉落.
树叶掉落
在破坏树叶时, 掉落 <minecraft:stick>.
树叶方块在是否检测消散时有不同的 blockstate, 使得其很难通过 META 检测其是否应被匹配
此时, 使用 Dropt 提供的 /dropt verbose 指令即可打开/关闭 verbose 模式, 此模式下会将所有被破坏的方块的信息打印到日志中, 便于提取准确的所需信息.
工具限制
当玩家挖掘泥土时没有使用铲子, 则什么都不会掉落.
此处的 .mainHand("BLACKLIST", [], "shovel;0;-1") 起了主要作用. 即将所有没有 shovel 工具类型的, 且挖掘等级小于 0 的主手物品列入黑名单. 最后设置当此规则被匹配时, 将泥土的掉落替换为一个空的 Drop 对象 (默认替换策略即是 "REPLACE_ALL").
进阶时运修正
时运等级越高, 挖掘 "minecraft:quartz_ore" 得到的 <minecraft:quartz> 数量越多.
通过权重设置, 将就算拥有时运三效果仍会匹配到最低数量 (1~2 个) 的理论可能性减小到了 1/1111.
重点在于使用 selector 方法的 fortuneLevelRequired 参数匹配时运等级. 示例脚本因为直观展示需求, 并非是实现此目的的最优解.
精准采集
当使用精准采集效果破坏 <minecraft:stone>, 掉落 1 个 <minecraft:string>.
此处使用了 REPLACE_ALL_IF_SELECTED 替换策略, 即仅在掉落池中物品被选中时, 才替换方块掉落物. 又因为添加的唯一一个掉落池定义了需要精准采集的选择器, 所以只有在方块被使用精准采集效果破坏时才会替换方块掉落物.
等数替换
掉落多少个 <minecraft:redstone>, 就将掉落替换为多少个 <minecraft:dirt>.
出生距离匹配
当采掘地点在距世界出生点 32 格内, 将所有 "minecraft:cobblestone" 的掉落物替换为 <minecraft:dirt>.
NBT 匹配
匹配手持物品是否包含指定 NBT.
是的, Dropt 支持匹配手持物品的 NBT, 也支持掉落带有 NBT 的物品.
如果玩家将物品重命名, 附魔等, NBT 可能会不再匹配.
另外使用 /dropt hand 指令打印如下所示的信息 (留意 RepairCost:0).
但在 CrT 加持下, 使用 /ct hand 打印的 withTag 结果即可.
游戏阶段匹配
当 "minecraft:stone" 被一个同时拥有 "stage_A" 和 "stage_B" 阶段的玩家破坏时, 将所有掉落替换为 <minecraft:string> * 1.
强制掉落
当破坏 "minecraft:stone" 时, 永远掉落 <minecraft:string> * 1, 且有 25% 的概率掉落一个 <minecraft:diamond>.
全部掉落替换
当破坏 "minecraft:stone" 时, 将所有掉落替换为 <minecraft:string> * 100 与 <minecraft:diamond> * 10.
要达成此目的实际上有两种解法. 两个物品都可以被单独定义在两个 RuleList 对象中并单独定义 dropCount 为 2, dropStrategy 为 UNIQUE. 而另一种方法, 也是此处使用的方法则是将两个掉落定义在同一 RuleList 对象中, 并使用 ALL 掉落规则表策略, 且在此情况下就算掉落了多个物品, 多个掉落物也会被视为一次掉落.
BlockState 替换
当破坏 "minecraft:stone" 时, 将所有内容为 <minecraft:cobblestone> * 1 的掉落替换为将原方块随机替换为一块朝向各不同的橡木, 云杉或白桦原木("oak", "spruce" 或 "birch")
落空匹配
当一个 Rule 对象启用了 fallthrough 时, Dropt 将试图为对应方块匹配另一个 Rule 对象. 即继续为该方块匹配父 RuleList 中其余的规则,直到匹配到一个没有启用 fallthrough 的 Rule 对象或父 RuleList 中没有更多匹配对应方块的 Rule 对象.
最后更新于
这有帮助吗?