TileEntityMarket
事实基准:
harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | PamMarket |
HarvestCraft.java:96 |
| 类 | TileEntityMarket |
— |
| 关联方块 | Market(harvestcraft:market) |
BlockRegistry.java:644 |
| GUI ID | 4 |
BlockPamMarket.java:41 |
| 容器类 | ContainerMarket |
GuiHandler.java:61 |
| GUI 类 | GuiMarket |
GuiHandler.java:101 |
槽位数量与布局
只有 1 个槽位。 func_70302_i_() 恒返回 1(TileEntityMarket.java:19-21)。
| 槽位 | 内容 | 堆叠上限 |
|---|---|---|
| 0 | 付款槽 paySlot |
64(func_70297_j_(),:56-58 据此截断) |
- 没有产物槽、没有燃料槽、没有工作槽、没有输入槽。
- 库存名
getInvName()="Market"(:62-64)。 - 另有 2 个非槽位状态字段:
stockNum(当前浏览位置/清单长度,:15)与isTrading(:17)。
可处理的操作
市场不加工任何物品。全部「操作」都是交易动作:
| 操作 | 方法 | 行 |
|---|---|---|
| 扣除货款 | takeEmeraldFromSlot(int price) → paySlot.stackSize -= price |
:66-71 |
| 清空付款槽 | clearInventory() |
:73-75 |
| 设置浏览位置 | setBrowsingInfo(int stockNum) |
:91-93 |
| 存取槽位 | func_70301_a / func_70298_a / func_70304_b / func_70299_a |
:23-60 |
交易流程完全走网络包:PacketMarket、MessageMarketBrowse、MessageMarketBuy、MessageMarketClosed。商品由 MarketItems / MarketData(item, currency, price) 提供。
处理耗时 / 速率
无。 func_145845_h() 只调用父类实现,没有任何 tick 逻辑——无冷却、无计时、无产出。交易是瞬时的。
唯一的「时间」语义是 stockNum:它被写进 NBT(:79 读、:84 写),即浏览位置会随存档保存。
源码缺陷
func_94041_b恒返回 false → 付款槽不接受漏斗/管道自动化投入。takeEmeraldFromSlot方法名写死「Emerald(绿宝石)」(:66),但实际货币由BlockRegistry.marketcurrency*(10 个 int 配置项,取值 0–3)决定,可能是另外 3 种物品之一 → 方法名与实际行为脱节。func_70298_a抽走物品后调func_70296_d()标记刷新,但paySlot的 NBT 读写依赖调用方;无内部一致性校验。- 调试输出
System.out.println("Trying to open")在方块类里(BlockPamMarket.java:40),不在本类。
相关条目
- 方块:Market
- 兄弟:其余 8 个 TileEntity 全部有 tick 逻辑,本类是唯一无处理过程的