
在《Thaumcraft 4》中,傀儡是自动化农场管理的重要工具。当傀儡装备“收获”(Harvest)核心并辅以“秩序”(Ordo)升级时,它们不仅能收割成熟的作物,还会尝试重新种植。然而,在管理不同属性的魔力豆(Mana Beans)农场时,玩家可能会观察到不同属性的魔力豆混杂生长,这并非通常意义上的“Bug”,而是其内部逻辑运作的结果。
问题的核心在于傀儡的harvest()方法,特别是当它拥有“秩序”升级(ID为4)时:
void harvest() {
this.count = 200;
final int md = this.blockMd;
final FakePlayer fp = FakePlayerFactory.get((WorldServer)this.theWorld, new GameProfile((UUID)null, "FakeThaumcraftGolem"));
fp.func_70107_b(this.theGolem.field_70165_t, this.theGolem.field_70163_u, this.theGolem.field_70161_v);
if (CropUtils.clickableCrops.contains(this.block.func_149739_a() + md)) {
this.block.func_149727_a(this.theWorld, this.xx, this.yy, this.zz, (EntityPlayer)fp, 0, 0.0f, 0.0f, 0.0f);
}
else {
this.theWorld.func_147480_a(this.xx, this.yy, this.zz, true); // 破坏方块
if (this.theGolem.getUpgradeAmount(4) > 0) { // 判断是否有秩序升级
final ArrayList<ItemStack> items = new ArrayList<ItemStack>();
// 获取周围掉落的物品实体
final ArrayList<Entity> drops = (ArrayList<Entity>)EntityUtils.getEntitiesInRange(this.theWorld, this.theGolem.field_70165_t, this.theGolem.field_70163_u, this.theGolem.field_70161_v, (Entity)this.theGolem, (Class)EntityItem.class, 6.0);
if (drops.size() > 0) {
for (final Entity e : drops) {
if (e instanceof EntityItem) {
// ... 物品物理行为调整 ...
boolean done = false;
final EntityItem item = (EntityItem)e;
final ItemStack st = item.func_92059_d(); // 获取掉落物堆栈
// 处理橡树苗(与魔力豆无关)
if (st.func_77973_b() != null && st.func_77973_b() == Items.field_151100_aR && st.func_77960_j() == 3) {
// ... 橡树苗种植逻辑 ...
done = true;
}
// 处理魔力豆物品
else if (st.func_77973_b() != null && st.func_77973_b() == ConfigItems.itemManaBean) {
if (this.block.func_149707_d(this.theWorld, this.xx, this.yy, this.zz, 0)) {
final ItemStack itemStack2 = st;
--itemStack2.field_77994_a; // 消耗掉落的魔力豆物品
// 尝试使用物品种植
if (!st.func_77973_b().func_77648_a(st.func_77946_l(), (EntityPlayer)fp, this.theWorld, this.xx, this.yy + 1, this.zz, 0, 0.5f, 0.5f, 0.5f)) {
// 如果使用物品种植失败,则放置一个默认的魔力豆荚方块
this.theWorld.func_147465_d(this.xx, this.yy, this.zz, ConfigBlocks.blockManaPod, 0, 3);
}
}
done = true;
}
// 处理其他可种植物品(种子等)
else {
// ... 其他物品种植逻辑 ...
}
// ... 物品堆栈更新及实体销毁 ...
if (done) {
break;
}
continue;
}
}
}
}
}
fp.func_70106_y();
this.theGolem.startActionTimer();
}通过对上述代码的分析,我们可以发现导致魔力豆种类混杂的几个关键点:
宽泛的物品拾取范围: 代码中的EntityUtils.getEntitiesInRange(...)函数显示,傀儡会获取以自身为中心,半径6格内的所有掉落物品实体(EntityItem)。这意味着,即使玩家为不同属性的魔力豆设置了独立的种植区域,只要这些区域距离傀儡的活动范围足够近,或者它们的掉落物进入了傀儡的6格拾取范围,傀儡就有可能拾取到“错误”属性的魔力豆物品。
优先尝试使用掉落物品种植: 在处理魔力豆时,傀儡会优先尝试使用它刚刚拾取到的ConfigItems.itemManaBean物品来重新种植。如果它拾取到了来自相邻区域的、不同属性的魔力豆物品,它就会尝试在当前位置种植该属性的魔力豆。
默认魔力豆荚的放置: 尤其关键的是这行代码:
this.theWorld.func_147465_d(this.xx, this.yy, this.zz, ConfigBlocks.blockManaPod, 0, 3);
当傀儡无法使用拾取到的魔力豆物品进行种植(例如,物品堆栈为空,或某种未知原因导致func_77648_a返回false)时,它会退而求其次,直接在当前位置放置一个ConfigBlocks.blockManaPod方块。这里的metadata参数是0。在《Thaumcraft 4》中,当魔力豆荚以metadata 0被放置时,其最终的魔力属性是随机生成的。这意味着,即使傀儡没有拾取到任何“错误”的魔力豆物品,它也可能因为这种默认放置行为而导致农场中出现随机属性的魔力豆。
综合来看,魔力豆的“洗牌”效应并非一个程序错误,而是傀儡设计逻辑的体现:它会收集附近所有掉落的魔力豆物品并尝试用它们来种植,同时在特定情况下会放置一个随机属性的魔力豆荚。
为了避免或最小化魔力豆农场中的属性混杂问题,可以采取以下策略:
严格隔离农场:
优化物品收集机制:
理解随机性:
通过以上方法,玩家可以更好地管理《Thaumcraft 4》中的魔力豆农场,确保不同属性的魔力豆能够按照预期生长,避免不必要的混杂。
以上就是Thaumcraft 4 傀儡收获核心与魔力豆种植机制深度解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号