力场控制器

基本信息

属性 值
注册名 malisisdoors:forcefieldItem
显示名(en_US) Forcefield Controller
类 net.malisis.doors.door.item.ForcefieldItem(继承 Item)
注册方式 GameRegistry.registerItem(Registers.java:451)
创造标签 Malisis' Doors(ForcefieldItem.java:43)
耐久 setMaxDamage(0),无耐久条(ForcefieldItem.java:44)
能量 存于物品 NBT 键 energy,最大 2000

功能

力场控制器是两点框选工具:在世界里点击第一个角点,再点击第二个角点,即可在两个角点围成的矩形体积内生成整面 力场。

工作流程(ForcefieldItem.onItemUse,ForcefieldItem.java:117-156):

  1. 能量不足直接拒绝:getEnergy(itemStack) < getMaxEnergy() 即返回(ForcefieldItem.java:120)。注意这是要求满能量才能继续
  2. 未设起点 → 记录起点 setStartPosition(itemStack, pos, world.getTotalWorldTime()) 并返回(ForcefieldItem.java:125-128)
  3. 已设起点 → 取当前点为终点,按 Y 排序保证 start 在下(ForcefieldItem.java:132-136)
  4. getBoundingBox(start, pos) 计算 AABB(ForcefieldItem.java:145,实现见 ForcefieldItem.java:188-198)
  5. 体积校验:若三轴厚度都小于 1 格则视为无效,清除起点返回(ForcefieldItem.java:138-141)
  6. 尺寸与能量校验:getDoorSize(aabb) <= 0 或能量不足则清除起点返回(ForcefieldItem.java:143-146)
  7. 生成:MultiBlock 填充 forcefieldDoor 方块;仅当 placeBlocks(true) 成功才扣能量 drainEnergy(itemStack, size * 20, ...)(ForcefieldItem.java:148-151)
  8. 无论成败都清除起点(ForcefieldItem.java:153)

起点坐标存于 NBT 的 x / y / z / time 四个键,isStartSet 即判断 hasKey("x")(ForcefieldItem.java:163-186)。doesSneakBypassUse 返回 true,使潜行时不触发方块交互(ForcefieldItem.java:159-161)。

物品图标状态

getIcon(ItemStack, int pass) 按状态返回 5 种贴图(ForcefieldItem.java:60-87):

图标 贴图名 条件
灰(禁用) malisisdoors:forcefielditem_disabled 能量 < 最大值
普通 malisisdoors:forcefielditem 已满能量但未设起点
黄 malisisdoors:forcefielditem_yellow 已设起点,但准星未指向方块
红 malisisdoors:forcefielditem_red 体积过小,或能量不足以覆盖当前框选范围
绿 malisisdoors:forcefielditem_green 框选合法且能量充足

数值

数值名 值 出处
最大能量 2000 ForcefieldItem.java:107-109
单位体积耗能 20 能量/格 ForcefieldItem.java:144、ForcefieldItem.java:150
理论最大力场体积 100 格(2000 ÷ 20) 由上两行推算
能量下限钳制 0 ForcefieldItem.java:98

getDoorSize(ForcefieldItem.java:200-208)返回 diffX × diffY × diffZ 的体积格数;其中 diffY == 1 且 diffX == 1 且 diffZ == 1(即水平方向为一条线)时返回 -1 拒绝——因此力场至少要在两个水平轴上有厚度。

拆除力场时 力场方块 会把控制器能量直接清零(ForcefieldDoor.java:86-90),因此拆除是免费的,但已建成的力场不返还能量。

合成配方

(Registers.java:454-468)

ABA
CDC
AEA
字符 物品
A 钻石 Items.diamond ×4
B 黑曜石 Blocks.obsidian ×1
C 红石中继器 Items.repeater ×2
D 末影眼 Items.ender_eye ×1
E 比较器 Items.comparator ×1

相关条目

  • 力场 - 本物品所创建的方块与其开合行为