跳到正文
烈焰甘蔗Wiki

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 写),即浏览位置会随存档保存。

源码缺陷

  1. func_94041_b 恒返回 false → 付款槽不接受漏斗/管道自动化投入。
  2. takeEmeraldFromSlot 方法名写死「Emerald(绿宝石)」(:66),但实际货币由 BlockRegistry.marketcurrency*(10 个 int 配置项,取值 0–3)决定,可能是另外 3 种物品之一 → 方法名与实际行为脱节。
  3. func_70298_a 抽走物品后调 func_70296_d() 标记刷新,但 paySlot 的 NBT 读写依赖调用方;无内部一致性校验。
  4. 调试输出 System.out.println("Trying to open") 在方块类里(BlockPamMarket.java:40),不在本类。

相关条目

  • 方块:Market
  • 兄弟:其余 8 个 TileEntity 全部有 tick 逻辑,本类是唯一无处理过程的
浏览全部模组