feat(game): 玩法接线——实体AI/夜间刷僵尸/受伤重生、掉落物拾取、熔炉烧炼产出、服务器与客户端 Mod 加载、客户端单机存档

This commit is contained in:
NianGao Dev
2026-08-15 23:48:58 +08:00
parent 6cc0f12079
commit 90e33380fc
6 changed files with 224 additions and 13 deletions

View File

@@ -67,10 +67,10 @@ func NewFurnace(x, y, z int32) *Entity { return New(KindFurnace, x, y, z) }
func NewChest(x, y, z int32) *Entity { return New(KindChest, x, y, z) }
// Tick 熔炉烧炼(每 tick;箱子无逻辑)。
// 返回 true 表示产出完成了一个物品(调用方取出放入输出槽)。
func (e *Entity) Tick() bool {
// 产出时返回 (输入物品名, true)——输入名在消耗前捕获,供调用方查熔炼配方。
func (e *Entity) Tick() (string, bool) {
if e.Kind != KindFurnace {
return false
return "", false
}
// 燃料耗尽则尝试补充
if e.BurnTicks <= 0 {
@@ -92,15 +92,16 @@ func (e *Entity) Tick() bool {
e.CookTicks++
if e.CookTicks >= CookTime {
e.CookTicks = 0
// 消耗一个输入(产出由调用方放入输出槽,物品与背包.md §6)
// 消耗前捕获输入名(产出配方查询用,物品与背包.md §6)
inputName := e.Slots[SlotInput].Name
e.Slots[SlotInput].Count--
if e.Slots[SlotInput].Count == 0 {
e.Slots[SlotInput] = item.Stack{}
}
return true
return inputName, true
}
}
return false
return "", false
}
// CanInsert 槽位插入规则(容器版:与背包规则表一致,物品与背包.md §3)。

View File

@@ -31,7 +31,7 @@ func TestFurnaceSmelt(t *testing.T) {
// 烧炼 2 炉
produced := 0
for i := 0; i < 2000; i++ {
if f.Tick() {
if _, ok := f.Tick(); ok {
produced++
}
}
@@ -52,7 +52,7 @@ func TestFurnaceFuelExhaust(t *testing.T) {
// 一块煤 1600 tick,最多产出 8 个(1600/200)
produced := 0
for i := 0; i < 4000; i++ {
if f.Tick() {
if _, ok := f.Tick(); ok {
produced++
}
}