Stamina Attributes

Stamina Attributes

一个为实体属性所控制的小型API,用于添加耐力系统。

冒险

耐力属性

本 API 添加了一套由实体属性控制的耐力系统。

默认实现

活体实体(LivingEntity)最多可以拥有 staminaattributes:max_stamina 的耐力值。耐力会按照 staminaattributes:stamina_regeneration 的速度,每 staminaattributes:stamina_tick_threshold 刻恢复一次。

当耐力减少时,恢复会在 staminaattributes:stamina_regeneration_delay_threshold 刻内暂停。

当耐力降至 0 或以下时,恢复会在 staminaattributes:depleted_stamina_regeneration_delay_threshold 刻内暂停。

staminaattributes:reserved_stamina 描述了当前不可用的最大耐力百分比。

staminaattributes:item_use_stamina_cost 是在使用具有耐力消耗的物品时减少的耐力值。 有两种方式可以为物品设置耐力消耗:

  1. 位于 "staminaattributes:using_costs_stamina" 物品标签中的物品,每次使用时减少 staminaattributes:item_use_stamina_cost 的耐力。当耐力 < 0 时,使用动作不会执行。在这种情况下,物品会获得一个冷却时间,该冷却时间在服务端配置中设置。
  2. 位于 "staminaattributes:continuous_using_costs_stamina" 物品标签中的物品,在使用期间每刻减少 staminaattributes:item_use_stamina_cost 的耐力。当耐力 < 0 时,使用会被取消。在这种情况下,物品会获得一个冷却时间,该冷却时间在服务端配置中设置。

不同的 staminaattributes:*_tick_stamina_cost 属性描述了对应活动的耐力消耗。此消耗每刻(每秒 20 次)应用一次。包括以下活动:

  • 疾跑
  • 潜行
  • 行走
  • 游泳
  • 水下行走
  • 水中行走
  • 攀爬

不同的 staminaattributes:*_action_stamina_cost 属性描述了对应动作的耐力消耗。此消耗在每次执行动作时应用一次。包括以下动作:

  • 跳跃
  • 疾跑跳跃
  • 攻击格挡
  • 攻击
  • 破坏方块

可以配置多种活动和动作需要消耗耐力。如果耐力为 0 或更低,则无法执行这些活动和动作。包括:

  • 跳跃
  • 疾跑
  • 游泳
  • 攻击
  • 破坏方块
  • 攻击
  • 攻击格挡

可以被徒手瞬间破坏的方块("破坏时间"为 0 的方块)可以不受耐力需求的限制。

力竭

如果玩家的耐力为 0 或更低,他们会进入力竭状态,这意味着会应用一个状态效果。此状态效果在服务端配置中定义。

此功能可以在服务端配置中启用,但默认情况下是禁用的。

默认属性值

  • staminaattributes:max_stamina:10(玩家为 10)
  • staminaattributes:stamina_regeneration:0(玩家为 1)
  • staminaattributes:stamina_tick_threshold:20
  • staminaattributes:stamina_regeneration_delay_threshold:20
  • staminaattributes:depleted_stamina_regeneration_delay_threshold:60
  • staminaattributes:reserved_stamina:0
  • staminaattributes:item_use_stamina_cost:0(玩家为 0.05)
  • staminaattributes:sprinting_tick_stamina_cost:0(玩家为 0.05)
  • staminaattributes:sneaking_tick_stamina_cost:0(玩家为 0.05)
  • staminaattributes:walking_tick_stamina_cost:0
  • staminaattributes:swimming_tick_stamina_cost:0(玩家为 0.05)
  • staminaattributes:walking_underwater_tick_stamina_cost:0(玩家为 0.05)
  • staminaattributes:walking_in_water_tick_stamina_cost:0(玩家为 0.05)
  • staminaattributes:climbing_tick_stamina_cost:0(玩家为 0.05)
  • staminaattributes:jumping_action_stamina_cost:0(玩家为 1)
  • staminaattributes:sprint_jumping_action_stamina_cost:0(玩家为 1)
  • staminaattributes:attack_blocking_action_stamina_cost:0(玩家为 1)
  • staminaattributes:attacking_action_stamina_cost:0(玩家为 1)
  • staminaattributes:block_breaking_action_stamina_cost:0(玩家为 1)

所有玩家的默认值都可以在服务端配置中设置。

默认物品标签

"staminaattributes:using_costs_stamina":

{
	"values": [
		"minecraft:snowball"
	]
}

"staminaattributes:continuous_using_costs_stamina":

{
	"values": [
		"minecraft:bow",
		"minecraft:crossbow",
		"minecraft:shield"
	]
}

自定义

客户端配置允许自定义 HUD 元素。

使用耐力系统

Java

将 "LivingEntity" 转换为 "StaminaUsingEntity" 接口,即可访问所有相关方法。

数据包

耐力属性实现了多种数据驱动的方法来与实体的当前耐力值进行交互。

  • "staminaattributes:add_stamina" 附魔效果允许向当前耐力添加指定数量
  • "staminaattributes:stamina_using_entity" 实体子谓词在实体的当前耐力符合定义范围时通过

示例

这个附魔会减少攻击者 2 点耐力,只要攻击者拥有至少 5 点耐力:

{
	"anvil_cost": 1,
	"description": {
		"translate": "enchantment.staminaattributes.test"
	},
	"effects": {
		"minecraft:post_attack": [
			{
				"affected": "attacker",
				"effect": {
					"type": "staminaattributes:add_stamina",
					"amount": {
						"type": "minecraft:linear",
						"base": -2.0,
						"per_level_above_first": -2.0
					}
				},
				"enchanted": "attacker",
				"requirements": {
					"condition": "minecraft:entity_properties",
					"entity": "direct_attacker",
					"predicate": {
						"type_specific": {
							"type": "staminaattributes:stamina_using_entity",
							"stamina_amount": {
								"min": 5.0
							}
						}
					}
				}
			}
		]
	},
	"max_cost": {
		"base": 25,
		"per_level_above_first": 8
	},
	"max_level": 1,
	"min_cost": {
		"base": 5,
		"per_level_above_first": 8
	},
	"slots": [
		"hand"
	],
	"supported_items": "#minecraft:swords",
	"weight": 5
}