危险物品模块
基本信息
| 属性 | 值 |
|---|---|
| 包 | com.dreammaster.modhazardousitems(6 文件 + cause/ 2 文件) |
| 处理器 | HazardousItemsHandler(HazardousItemsHandler.java:37) |
| 开关 | CoreModConfig.Modules.HazardousItems,默认 false |
| 实例化点 | MainRegistry.PreLoad(MainRegistry.java:200-203) |
| 配置文件 | config/GTNewHorizons/HazardousItems.xml(HazardousItemsHandler.java:55) |
| 序列化 | JAXB(javax.xml.bind.JAXBContext / Marshaller / Unmarshaller) |
| 示例配置 | 仓库内 exampleconfigs/HazardousItems.xml |
| 指令 | /hazarditems(见 指令) |
功能
一个完全由 XML 配置驱动的伤害/状态系统:玩家背包里或脚下出现某些物品或流体时,自动扣血并附加药水效果。
启用后 PreLoad 会实例化处理器并把静态引用挂到 MainRegistry.Module_HazardousItems:
if (CoreModConfig.Modules.HazardousItems) {
Module_HazardousItems = new HazardousItemsHandler();
}
(MainRegistry.java:200-203)
配置文件格式
HazardousItems.xml 的根元素是 HazardousItemList,含两类子元素(取自 exampleconfigs/HazardousItems.xml):
<Item> — 普通物品
<Item ItemName="minecraft:lava_bucket" ExactNameMatch="true" OnContactCheck="false" InventoryCheck="true">
<DamageEffect Source="inFire" Amount="0.5"/>
<PotionEffect PotionID="19" TickDuration="100" Level="1"/>
</Item>
| 属性 | 含义 |
|---|---|
ItemName |
物品名,用原版 minecraft:命名空间 写法 |
ExactNameMatch |
true = 精确匹配;false = 名称包含即匹配(会误伤 itemWaterTank 之类的同前缀物品) |
OnContactCheck |
true = 检查玩家脚下方块;false = 不检查 |
InventoryCheck |
true = 检查背包 |
<Fluid> — 流体
<Fluid FluidName="minecraft:water" ExactNameMatch="true" OnContactCheck="true" InventoryCheck="false">
<PotionEffect PotionID="10" TickDuration="100" Level="1"/>
</Fluid>
<Fluid> 用于流体容器物品(如水桶)与玩家浸在流体中两种情形。仓库注释明确:流体在 1.7.10 已是方块,因此命名要写成 minecraft:water 这样的完整形式。
子效果
| 元素 | 含义 |
|---|---|
<DamageEffect> |
Source(伤害源,见 HazardDamageSources)+ Amount(伤害量) |
<PotionEffect> |
PotionID + TickDuration + Level |
关键方法
| 方法 | 作用 | 位置 |
|---|---|---|
HazardousItemsHandler() |
构造器,拼出配置文件路径 config/GTNewHorizons/HazardousItems.xml |
:53-56 |
HasConfigChanged() |
判断是否有未保存的改动 | :58 |
onPlayerTick(TickEvent.PlayerTickEvent) |
每 tick 扫描玩家状态并施加效果 | :63 |
InitSampleConfig() |
写入示例配置 | :126 |
SaveHazardousItems() |
覆盖写回 XML,失败记 error 日志 |
:156-167 |
LoadConfig() |
载入;文件不存在则自动创建 | :176-179 |
本模块是 4 个模块中唯一带存档安全闸的:/hazarditems reload 在 HasConfigChanged() 为真时会拒绝执行,除非显式加 force(HazardousItemsCommand.java:57-59)。
数值
| 数值名 | 值 |
|---|---|
| 文件数 | 6 + 2(cause/) |
| 配置文件路径长度 | config/%s/HazardousItems.xml,%s = GTNewHorizons |
| 默认状态 | 关闭 |
| 子效果类型 | 2(DamageEffect、PotionEffect) |
| 匹配模式类型 | 2(ExactNameMatch 精确 / 包含) |
| 触发方式 | 2(OnContactCheck 脚下 / InventoryCheck 背包) |
交互
| 触发 | 行为 |
|---|---|
玩家背包含匹配 <Item> |
扣血 + 附加药水效果 |
| 玩家脚下是匹配的方块 | 同上(需 OnContactCheck="true") |
| 玩家浸在匹配流体中 | 同上(<Fluid> 的接触判定) |
/hazarditems save |
覆盖写回 HazardousItems.xml |
/hazarditems reload |
重载;有未存改动则拒绝 |
/hazarditems reload force |
强制重载 |
/hazarditems listpotions |
列出所有可用药水 id |
/hazarditems listdamagesources |
列出 HazardDamageSources.DAMAGE_SOURCES 的键集 |
| 模块关闭 | 玩家完全不受影响,指令也不存在 |
相关条目
- 指令 -
/hazarditems的 4 个子命令 - CoreModConfig -
HazardousItems开关 - 数据驱动模块 - 另外 3 个同类 XML 驱动模块