本篇教程由作者设定未经允许禁止转载。

废话就不多讲了,适用版本1.20.1,模组版本9.2.8

修改生物血量的补充

对于spawn.json,你能够使用的所有格式:

result:这可以是'deny'(拒绝)、'allow'(允许)、'default'(默认)或未指定。如果不指定结果,则保留其他生物控制模组所做的决定。如果指定了result,则“In Control”将接管(因为“In C

ontrol”规则将最后触发)。使用'deny'可以阻止生物生成。如果使用'allow',则即使原版通常会阻止(例如光线过强),也会允许生物生成。如果使用'default',则由于光线不足等原因,生物生成仍可能被拒绝。除非使用'deny',否则可以使用以下任何操作:

NBT:允许为生成的生物添加NBT

customname:允许为生成的生物设置自定义名称

healthmultiply:表示生成生物的最大生命值乘数的浮点数。例如,使用2会使生成的生物生命值加倍。

healthadd:添加到最大生命值的浮点数

healthset:用作最大生命值的浮点数

speedmultiply:表示生成生物速度乘数的浮点数

speedadd:添加到速度的浮点数

speedset:用作速度的浮点数

damagemultiply:表示生成生物造成伤害乘数的浮点数

damageadd:添加到伤害的浮点数

damageset:用作伤害的浮点数

armormultiply:表示生成生物护甲乘数的浮点数

armoradd:添加到护甲的浮点数

armorset:用作护甲的浮点数

armortoughnessmultiply:表示生成生物护甲韧性乘数的浮点数

armortoughnessadd:添加到护甲韧性的浮点数

armortoughnessset:用作护甲韧性的浮点数

attackspeedmultiply:表示生成生物攻击速度乘数的浮点数(

attackspeedadd:添加到攻击速度的浮点数

attackspeedset:用作攻击速度的浮点数

followrangemultiply:表示生成生物跟随范围乘数的浮点数

followrangeadd:添加到跟随范围的浮点数

followrangeset:用作跟随范围的浮点数

angry:表示生物是否会愤怒并/或瞄准最近的玩家(布尔值)对于僵尸猪人,这会使它们立即对玩家愤怒。同样适用于末影人和狼

potion:可以是单个字符串或字符串列表。每个字符串表示一个药水效果,格式为:<药水>,<持续时间>,<等级>

例如“minecraft:invisibility,10,1”  

(注:0级等级在游戏里是1级,1级等级则是2级,以此类推)

helditem:可以是单个字符串或字符串列表。每个字符串表示生成生物可能手持的物品。这仅适用于允许此操作的生物,如骷髅和僵尸。还可以通过在字符串前添加<数字>=来指定权重,例如:“1=minecraft:diamond_sword”,“2=minecraft:iron_sword”

armorboots:表示生成生物将穿戴的随机靴子的单个字符串或字符串列表

armorhelmet:表示生成生物将穿戴的随机头盔的单个字符串或字符串列表

armorlegs:表示生成生物将穿戴的随机护腿的单个字符串或字符串列表

armorchest:表示生成生物将穿戴的随机胸甲的单个字符串或字符串列表

此外,还支持gamestage(游戏阶段)、playerhelditem(玩家手持物品)和相关标签。在这种情况下,将使用最近的玩家作为决定规则的基础。


在此基础上,我们活用游戏阶段,可以做出随阶段运行的难度系统,甚至可以写出一些比较好玩的东西

  {
    "setphase": 1
  },
  {
    "setphase": 2
  },
  {
    "gamestage": "difficult1",
    "togglephase": "1",
    "when": "onjoin",
    "result": "allow",
    "healthmultiply": 2,
    "damagemultiply": 2
  },
  {
    "gamestage": "difficult2",
    "togglephase": "2",
    "when": "onjoin",
    "result": "allow",
    "healthmultiply": 4,
    "damagemultiply": 2,
    "armoradd": 2
  },

这里定义阶段是为了后边做独特阶段掉落物等使用

打开in control文件夹里的loot文件夹

文本规范及解释(loot.json):

  • item:这是一个字符串或字符串列表,代表新的掉落物品。

    • 解释:在游戏中,当满足特定条件时,玩家可以获得的物品。

  • itemcount:这是一个字符串,表示应该掉落多少物品(可选地取决于掠夺等级)。例如:“5/7-10/20-30”表示在掠夺等级为0时掉落5个物品,在掠夺等级为1时掉落7到10个物品,在掠夺等级为2或更高时掉落20到30个物品。

    • 解释:游戏中的掠夺等级可能会影响掉落的物品数量。

  • nbt:这是一个JSON,指定用于掉落物品的NBT(Named Binary Tag,命名二进制标签)。

    • 解释:NBT是Minecraft中用于存储复杂数据的格式,可以定义物品的属性和特性。

  • remove:这是一个字符串或字符串列表,表示要从掉落物品中移除的物品。

    • 解释:如果某些物品不应该出现在掉落列表中,可以通过这个参数来移除它们。

  • removeall:如果这个参数存在,则将从掉落物品中移除所有物品(在添加由这条规则指定的新物品之前)。

    • 解释:这个参数用于清空当前的掉落列表,然后添加新的掉落物品

  {
        "phase": "1",
        "player": true,
        "item": "kubejs:confusion",
        "itemcount": "0-1"
    },
    {
        "phase": "2",
        "player": true,
        "item": "kubejs:confusion",
        "itemcount": "0-2"
    },

当阶段在1时,掉落0-1个"kubejs:confusion"


如果想要让掉落物吃抢夺,需要这么写:

  "itemcount": "2-3/3-4/4-6"

experience.json

填入experience.json文件夹里

这与掉落控制类似,但它控制的是从击杀怪物中获得多少经验值。除了与伤害类型(如魔法、爆炸等)相关的关键字外,掉落控制中的所有关键字都可以在这里使用,因为在这个事件中不包含伤害类型的信息。这些规则有四个输出选项:

  • result:将其设置为“deny”以完全不给予经验值。

  • setxp:设置固定的经验值,而不是默认值。

  • multxp:将正常经验值乘以这个数。

  • addxp:在正常经验值乘以某个数之后,再将这个数值加到最终经验值上。

于是我们就可以写出,在难度2时,掉落2倍exp等...

{
        "phase": 2,
        "player": true,
        "multxp": 2
},

effects.json

在规则中,你可以使用“effects”来指定一个额外的“timeout”关键字。这个关键字代表在再次测试规则之前将等待的游戏刻(tick)数。请注意,其中一些规则可能会消耗较多资源,因此使用较高的timeout会使规则触发频率降低

  • explosion(爆炸):这是一个字符串,格式为:<强度>,<是否燃烧>,<是否冒烟>。例如,10,true,true 会引发一个给定强度的爆炸。

  • setblock(放置方块):这是一个包含方块描述的JSON,用于放置方块。例如:{'block': 'minecraft:chest', 'properties': {'name': 'facing', 'value': 'west'}} 会放置一个朝西的箱子。

  • give(给予):这是一个字符串或字符串列表,每个字符串代表玩家可能获得的物品。通过在字符串前添加<数字>=,还可以指定权重。例如:1=minecraft:diamond_sword, 2=minecraft:iron_sword。

  • drop(掉落):这与“give”类似,但用于指定掉落的物品。

  • potion(药水效果):这是一个字符串或字符串列表,每个字符串代表一个药水效果,格式为:<药水>,<持续时间>,<等级>。例如:minecraft:invisibility,10,1。

  • fire(着火):这是一个整数,表示玩家应该着火的秒数。

  • clear(清除):清除所有药水效果。

  • message(消息):向玩家发送一条消息。

  • damage(伤害):这是一个字符串,包含伤害源名称和伤害量。例如:fall=1.0 会造成1.0点的跌落伤害。支持所有原版伤害源(如'inFire', 'lightningBolt', 'lava', 'cramming', 'outOfWorld', 'magic'等)。

  • setstate(设置状态):如果EnigmaScript存在,可以使用此动作来设置一个状态,格式为:state=value。

  • setpstate(设置玩家状态):这与“setstate”类似,但用于设置玩家状态。

  • command(命令):这是一个字符串,表示将要执行的命令。其中的@p将被替换为玩家名称。例如:give @p minecraft:diamond_sword。

  • addstage(添加游戏阶段):这是一个字符串,表示将要添加到玩家的游戏阶段。

  • removestage(移除游戏阶段):这是一个字符串,表示将从玩家处移除的游戏阶段。

breakevents.json,placeevents.json

在breakevents.json,placeevents.json中的文本规范:

这里并没有“timeout”关键字。除了可以为effect执行的动作之外,它还有一个结果输出,可以是“allow”(允许)或“deny”(拒绝)。请注意,(与spawn.json不同)即使规则表示“false”,其他操作仍然会被执行

leftclicks.json,rightclicks.json

同上

Phase System

Phase System允许您定义全局条件并为它们命名。在控制规则中,可以使用这些相位,以便它们仅在一个或多个相位处于活动状态时才有效。这更加高效,因为全局条件每10个滴答(ticks,游戏内的时间单位)评估一次,而不是每次生物尝试生成时都评估。此外,这种方法也更加清晰。相位仅适用于一组有限的条件(仅全局为真的条件):

  • 时间(time)、最小时间(mintime)和最大时间(maxtime)

  • 天数(daycount)、最小天数(mindaycount)和最大天数(maxdaycount)

  • 天气(weather)

  • 冬季(winter)、夏季(summer)、春季(spring)和秋季(autumn)

  • 状态(state,可能指游戏内的某种全局状态)

自1.20.1版本起,现在也可以在spawn.json或其他规则文件中设置相位。请注意,这些相位应与在phases.json中定义的相位分开,否则设置它们将不会生效。