目标方块 / 风扇 / 洒水器 / 捕兽夹 / 捐赠站 / 旗帜 / 储罐 / 物品炮 / 村庄高亮灯 / 金蛋 / 幻想方块 / 天空方块 / 墓碑 / 奖杯方块

基本信息

这十四个方块各属独立子系统,行为差异极大,没有可共享的实现,因此合并为一页做索引对照。每项都给出源码位置。

注册名 类 TileEntity 材质 关键构造参数 声明位置
OpenBlocks:target BlockTarget TileEntityTarget rock 发光 0.3、FOUR_DIRECTIONS、TESR_ONLY OpenBlocks.java:279
OpenBlocks:fan BlockFan TileEntityFan circuits 边界 0.2~0.8、TESR_ONLY OpenBlocks.java:323
OpenBlocks:sprinkler BlockSprinkler TileEntitySprinkler Material.water TWO_DIRECTIONS、TESR_ONLY OpenBlocks.java:301
OpenBlocks:beartrap BlockBearTrap TileEntityBearTrap rock TWO_DIRECTIONS、TESR_ONLY、边界 0.1~0.9 / 高 0.4 OpenBlocks.java:298
OpenBlocks:donationStation BlockDonationStation TileEntityDonationStation rock FOUR_DIRECTIONS、TESR_ONLY、边界 0.2~0.8 / 0.25~0.85 OpenBlocks.java:359
OpenBlocks:flag BlockFlag TileEntityFlag circuits SIX_DIRECTIONS、SURFACE 放置、TESR_ONLY、textureName = NONE OpenBlocks.java:286-290
OpenBlocks:tank BlockTank TileEntityTank rock RenderMode.BOTH OpenBlocks.java:292
OpenBlocks:cannon BlockCannon TileEntityCannon rock 边界 0.3~0.6 / 高 0.7、TESR_ONLY OpenBlocks.java:304
OpenBlocks:village_highlighter BlockVillageHighlighter TileEntityVillageHighlighter — — OpenBlocks.java:329
OpenBlocks:goldenegg BlockGoldenEgg TileEntityGoldenEgg — textureName = "egg" OpenBlocks.java:398
OpenBlocks:imaginary BlockImaginary TileEntityImaginary — textureName = "pencilBlock" OpenBlocks.java:317-321
OpenBlocks:sky BlockSky TileEntitySky — textureName = "sky_inactive"、unlocalizedName = "sky.normal" OpenBlocks.java:388-393
OpenBlocks:grave BlockGrave TileEntityGrave — — OpenBlocks.java:282
OpenBlocks:trophy BlockTrophy TileEntityTrophy — itemBlock = ItemTrophyBlock OpenBlocks.java:295

功能

目标方块(TileEntityTarget)

记录被投掷物命中的力度 strength(TileEntityTarget.java:41、:113-118),重置为 0 见 :82。方向决定器 setBlockBoundsBasedOnState(BlockTarget.java:113-132)在水平时把边界压成 0.1 高的平板(:124),否则旋转。

风扇(TileEntityFan)

按红石强度把范围内实体吹走。

  • 锥半张角 CONE_HALF_APERTURE = 1.2 / 2.0(TileEntityFan.java:23)
  • 每刻最大力 maxForce = Config.fanForce * redstonePower(:44)
  • 实体受力随距离线性衰减:(1.0 - distToOrigin / Config.fanRange) * maxForce(:67)
  • 只改水平分量 motionX / motionZ(:70-71)——不吹垂直方向
  • 选区范围是自身 AABB 按 Config.fanRange 三向各扩一次(:93)
  • 红石:Config.redstoneActivatedFan 为真时读 getStrongestIndirectPower,否则恒用 15(:127)——即该配置关闭时风扇永不被红石关闭

洒水器(TileEntitySprinkler)

同时可装水与经验液两种液体(SyncableTank(Config.sprinklerInternalTank, FluidRegistry.WATER, OpenBlocks.Fluids.xpjuice),TileEntitySprinkler.java:79),随机撒骨粉与水。

  • 骨粉物品常量 new ItemStack(Items.dye, 1, 15)(:44)
  • 有效范围 Config.sprinklerEffectiveRange,在正负范围内随机取点(:95-96、:82-84)
  • 施肥概率有骨粉时用 Config.sprinklerBonemealFertizizeChance,否则 Config.sprinklerFertilizeChance(:88-89)
  • 散布角 SPRAY_SIDE_SCATTER = 25°(:124)
  • 骨粉与水各有独立消耗速率 Config.sprinklerBonemealConsumeRate / Config.sprinklerWaterConsumeRate(:184、:188)

储罐(TileEntityTank)

可存任意液体的通用储罐,容量按桶数缩放。

  • 容量 FluidContainerRegistry.BUCKET_VOLUME * Config.bucketsPerTank(TileEntityTank.java:146)
  • 同步阈值 SYNC_THRESHOLD = 8、更新阈值 UPDATE_THRESHOLD = 20(:104-105)
  • 渲染走 TankRenderLogic + NeighbourMap(:133、:160),会绘制相邻储罐之间的连通液体
  • Config.tanksEmitLight 为真时储罐自身发光(BlockTank.java:64)
  • Config.displayAllFilledTanks 为真时即使装满也在创造模式物品栏显示(BlockTank.java:106)

物品炮(TileEntityCannon)

发射 EntityItemProjectile。弹道计算在 TileEntityCannonLogic,GUI 旋钮参数(TileEntityCannon.java:31-39):

常量 值 含义
YAW_OFFSET_DEGREES -90 偏航零点偏移
KNOB_YAW_CHANGE_SPEED 3 偏航调速
KNOB_PITCH_CHANGE_SPEED 20 俯仰调速
KNOB_VEL_CHANGE_SPEED 20 初速调速
KNOB_LOB_MINIMUM_VALUE 20 抛射系数下限
KNOB_LOB_MAXIMUM_VALUE 75 抛射系数上限
KNOB_LOB_VERTICAL_MUL 4 垂直分量倍率
KNOB_LOB_HORIZONTAL_MUL 1 水平分量倍率
KNOB_LOB_BONUS 5 抛射加成

弹道积分器用固定步长 20 Hz(PHYS_STEPS_PER_SECOND = 20D,:286),重力取原版方块重力 PHYS_WORLD_GRAVITY = 0.8D(:296)——注意这是方块更新用的重力,不是实体重力 0.04。源码里有一条自嘲常量 HOURS_WASTED_ON_CANNON_LOGIC = 14(:281)。

奖杯方块

25 种生物奖杯,每种有独立的 ITrophyBehavior 实现。详见奖杯系统。

墓碑(BlockGrave)

玩家死亡时生成的容器方块,行为受游戏规则 openblocks:spawn_graves 控制。详见游戏规则与指令。

天空方块(BlockSky)

textureName = "sky_inactive",激活时切换贴图;由 TileEntitySky 与 ItemSkyBlock 驱动。

村庄高亮灯

生成村庄的辅助设备,方块有 TileEntityVillageHighlighter。

金蛋(BlockGoldenEgg)

由 TileEntityGoldenEgg 驱动。孵化时会生成 EntityMiniMe 克隆体:new EntityMiniMe(worldObj, Objects.firstNonNull(owner, MR_GLITCH))(TileEntityGoldenEgg.java:237),即无主时归属回退到常量 MR_GLITCH。Config.eggCanPickBlocks(默认 true,Config.java:570)控制孵化期间能否放置方块——配置注释自陈「可能导致 glitch」。

幻想方块(BlockImaginary)

textureName = "pencilBlock",与 ItemImaginary 配对。

旗帜(BlockFlag)

SIX_DIRECTIONS + SURFACE 放置,textureName = NONE(贴图全部由 TESR 提供)。

捐赠站(BlockDonationStation)+ 捕兽夹(BlockBearTrap)

TWO_DIRECTIONS 贴地设备。捐赠站打开网页,DonationUrlManager 管理链接。捕兽夹是陷阱方块。

数值

数值名 来源 值
风扇锥半张角 CONE_HALF_APERTURE 0.6(TileEntityFan.java:23)
风扇力 Config.fanForce × 红石强度 见配置页(TileEntityFan.java:44)
风扇范围 Config.fanRange 见配置页(TileEntityFan.java:67)
目标方块发光 硬编码 0.3(BlockTarget.java:24)
储罐容量 BUCKET_VOLUME * Config.bucketsPerTank 见配置页(TileEntityTank.java:146)
储罐同步阈值 SYNC_THRESHOLD 8(TileEntityTank.java:104)
储罐更新阈值 UPDATE_THRESHOLD 20(TileEntityTank.java:105)
洒水器散布角 SPRAY_SIDE_SCATTER 25°(TileEntitySprinkler.java:124)
洒水器罐容量 Config.sprinklerInternalTank 见配置页(TileEntitySprinkler.java:79)
物品炮积分步长 PHYS_STEPS_PER_SECOND 20 Hz(TileEntityCannon.java:286)
物品炮重力 PHYS_WORLD_GRAVITY 0.8(TileEntityCannon.java:296)

交互

触发 行为
风扇红石信号 按信号强度线性施力(TileEntityFan.java:44、:127)
redstoneActivatedFan 关闭 风扇恒为满功率,不响应红石(TileEntityFan.java:127)
洒水器工作 随机施肥 + 洒水,各自独立消耗速率
储罐液位变化超过 8 触发同步(TileEntityTank.java:104)
金蛋孵化 生成 EntityMiniMe(TileEntityGoldenEgg.java:237)
玩家死亡 墓碑是否生成由游戏规则决定(GameRuleManager.GameRule.SPAWN_GRAVES)

合成配方

目标方块(Config.java:688-702):

oeo
oHo
ooo
字符 物品
o Blocks.obsidian 黑曜石
H Blocks.heavy_weighted_pressure_plate 重质压力板
e Items.ender_eye 末影之眼

风扇(Config.java:814-823):

iii
iLi
iii
字符 物品
i ingotIron 铁锭
L Blocks.lever 拉杆

洒水器(Config.java:742-757):

dgd
dWd
dwd
字符 物品
d gemDiamond 钻石
g dustGlowstone 荧石粉
w Blocks.wool 羊毛
W Blocks.water_bucket 水桶

捕兽夹(Config.java:729-740):

dgd
dWd
dwd
字符 物品
d gemDiamond 钻石
g dustGlowstone 荧石粉
w Blocks.wool 羊毛
W Blocks.water_bucket 水桶

捐赠站(Config.java:967-978):

gWg
wgw
dwd
字符 物品
g blockGold 金块
W Blocks.water_bucket 水桶
w Blocks.wool 羊毛
d gemDiamond 钻石

储罐(Config.java:714-726):

iii
i i
iii
字符 物品
i ingotIron 铁锭

物品炮(Config.java:757-772):

i i
idi
iii
字符 物品
i ingotIron 铁锭
d gemDiamond 钻石

村庄高亮灯(Config.java:842-847):

 g
gHg
 g
字符 物品
g blockGlass 玻璃
H Blocks.heavy_weighted_pressure_plate 重质压力板

天空方块(Config.java:1057-1072,共 2 个配方):

gog
oGo
gog
字符 物品
g blockGlass 玻璃
o Blocks.obsidian 黑曜石
G Blocks.glowstone 荧石

金蛋(Config.java:1041-1055):

ggg
geg
ggg
字符 物品
g blockGold 金块
e Items.ender_eye 末影之眼

旗帜、墓碑、奖杯方块、幻想方块没有独立合成配方——奖杯方块由 Config.java:702-704 的物品事件发放,幻想方块通过 ItemImaginary 获得。

相关条目