黄豆 饮料 冰棍 实现2
This commit is contained in:
1 parent
f89b95fb99
commit
bae1755069
11 files changed
+193
-132
No files matched your search
+12
-6
@@ -96,13 +96,19 @@ POPSICLE_FRUITS = {
|
||||
# 冰棍盒方块 → (水果物品名, 冰棍方块, 口味名) 反向表(取冰棍用)
|
||||
POPSICLE_BOX_INFO = {v[0]: (k, v[1], v[2]) for k, v in POPSICLE_FRUITS.items()}
|
||||
|
||||
# 冰棍堆组合:
|
||||
# popsiclepile_2(橙子+西瓜) + 苹果冰棍 → popsiclepile_3(橙子+西瓜+苹果)
|
||||
# popsiclepile_3 空手取回 → 苹果冰棍, 退回 popsiclepile_2
|
||||
# 冰棍堆组合(顺序无关, 空手取回按方块状态固定, 不存数据):
|
||||
# 单根 橙子冰棍/西瓜冰棍 放在地上, 手持另一根右键 → 冰棍堆(橙子+西瓜 popsiclepile_2)
|
||||
# (先放橙子再放西瓜 == 先放西瓜再放橙子, 都会变成 冰棍堆(橙子+西瓜))
|
||||
# 冰棍堆 + 苹果冰棍 → 冰棍堆2(橙子+西瓜+苹果 popsiclepile_3)
|
||||
# 空手右键(按方块状态固定, 无需记录):
|
||||
# - 冰棍堆2 取出 苹果冰棍 → 退回 冰棍堆
|
||||
# - 冰棍堆 取出 西瓜冰棍 → 变回 单根橙子冰棍
|
||||
# (其他口味组合暂无对应堆方块, 不支持堆叠)
|
||||
POPSICLE_PILE_ADD = "rtdd:apple_popsicleplace" # 能插上堆的冰棍
|
||||
POPSICLE_PILE_2 = "rtdd:popsiclepile_2" # 2根堆(基础)
|
||||
POPSICLE_PILE_3 = "rtdd:popsiclepile_3" # 3根堆
|
||||
POPSICLE_SINGLE_ORANGE = "rtdd:orange_popsicle_place" # 单根橙子冰棍(放地上)
|
||||
POPSICLE_SINGLE_MELON = "rtdd:melon_popsicleplace" # 单根西瓜冰棍(放地上)
|
||||
POPSICLE_PILE_2 = "rtdd:popsiclepile_2" # 冰棍堆(橙子+西瓜)
|
||||
POPSICLE_PILE_3 = "rtdd:popsiclepile_3" # 冰棍堆2(橙子+西瓜+苹果)
|
||||
POPSICLE_PILE_ADD = "rtdd:apple_popsicleplace" # 第三根(苹果冰棍)
|
||||
|
||||
# ============================================================================
|
||||
# 四、炒冰盒(冰棍盒·炒冰盒 分组)
|
||||
|
||||
+61
-26
@@ -7,7 +7,7 @@
|
||||
1) 榨汁机(果汁·榨汁饮品): 全流程右键
|
||||
空(juicer) + 水果 → 放入水果(juicer_0, 记录水果类型)
|
||||
→ 榨汁中1/2/3(juicer_1/2/3) → 完成(juicer_4)
|
||||
→ 空手右键取出对应果汁, 还原空
|
||||
→ 手持玻璃杯(fruitjuice_0)右键取出对应果汁, 还原空
|
||||
【水果类型持久化】放入水果时把水果写进方块实体数据(rtdd_jf), 之后每次
|
||||
换态(SetBlockNew 会清空方块实体)都【先读旧→替换→写回新】, 因此玩家
|
||||
在 榨汁2→榨汁3 过程中退出游戏, 重进后取出的果汁仍是第一步放入的水果。
|
||||
@@ -18,10 +18,13 @@
|
||||
3) 炒冰盒(冰棍盒·炒冰盒):
|
||||
空(frytheicebox) + 冰块 → 放冰(frytheicebox_1)
|
||||
放冰 + 水果 → 各水果炒冰盒(appleicebox 等)
|
||||
各水果炒冰盒(除西瓜) 空手右键 → 取出1个冰沙, 还原空
|
||||
4) 冰棍堆(组合, 同厨具架逻辑):
|
||||
popsiclepile_2(橙子+西瓜) + 苹果冰棍 → popsiclepile_3(橙子+西瓜+苹果)
|
||||
popsiclepile_3 空手右键 → 取出苹果冰棍(LIFO), 退回 popsiclepile_2
|
||||
各水果炒冰盒 空手右键 → 取出1个冰沙, 还原空
|
||||
4) 冰棍堆(组合, 顺序无关, 空手取回按方块状态固定, 不存数据):
|
||||
单根 橙子冰棍/西瓜冰棍 放地上 + 手持另一根右键 → 冰棍堆(橙子+西瓜 popsiclepile_2)
|
||||
(先放橙子再放西瓜 == 先放西瓜再放橙子, 都会变成 冰棍堆)
|
||||
冰棍堆 + 苹果冰棍 → 冰棍堆2(橙子+西瓜+苹果 popsiclepile_3)
|
||||
空手右键: 冰棍堆2 取出 苹果冰棍 → 退回 冰棍堆;
|
||||
冰棍堆 取出 西瓜冰棍 → 变回 单根橙子冰棍
|
||||
|
||||
【与计时转换解耦】
|
||||
冰棍盒"未定型→定型"的 30 秒计时拆到独立类 YinliaoTimerService。
|
||||
@@ -34,11 +37,11 @@
|
||||
|
||||
【本类怎么做(自上而下的方法系列)】
|
||||
handleBlockUse ← 入口:分发器转发右键方块事件
|
||||
├─ _handleJuicer ← 榨汁机: 放入水果/逐级榨汁/取出果汁
|
||||
├─ _handleJuicer ← 榨汁机: 放入水果/逐级榨汁/手持玻璃杯取出果汁
|
||||
│ ├─ _readFruit / _writeFruit ← 水果类型 读/写(持久化)
|
||||
├─ _handleLollyBox ← 冰棍盒: 加冰块(启动计时)/加水果/取冰棍
|
||||
├─ _handleFryIceBox ← 炒冰盒: 加冰块/加水果/取冰沙
|
||||
└─ _handlePopsiclePile ← 冰棍堆: 插苹果冰棍/取回
|
||||
└─ _handlePopsiclePile ← 冰棍堆: 单根+另一根叠堆/插苹果冰棍/空手取回
|
||||
(通用工具) getCarriedItem / consumeItem / replaceBlock / dropItems / checkCooldown
|
||||
================================================================================
|
||||
"""
|
||||
@@ -63,6 +66,7 @@ from ..YinliaoData import (
|
||||
ICE_ITEMS,
|
||||
JUICE_FRUITS, JUICER_CHAIN, JUICER_ADVANCE_TIPS,
|
||||
ICE_LOLLY_TIMER, POPSICLE_FRUITS, POPSICLE_BOX_INFO,
|
||||
POPSICLE_SINGLE_ORANGE, POPSICLE_SINGLE_MELON,
|
||||
POPSICLE_PILE_ADD, POPSICLE_PILE_2, POPSICLE_PILE_3,
|
||||
FRYICE_FRUITS, FRYICE_BOX_INFO,
|
||||
)
|
||||
@@ -96,7 +100,9 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
self.featureBlocks.add("rtdd:frytheicebox_1")
|
||||
for _f, info in FRYICE_FRUITS.items(): # 各水果炒冰盒
|
||||
self.featureBlocks.add(info[0])
|
||||
self.featureBlocks.add(POPSICLE_PILE_2) # 冰棍堆
|
||||
self.featureBlocks.add(POPSICLE_SINGLE_ORANGE) # 单根橙子冰棍(冰棍堆底)
|
||||
self.featureBlocks.add(POPSICLE_SINGLE_MELON) # 单根西瓜冰棍(冰棍堆底)
|
||||
self.featureBlocks.add(POPSICLE_PILE_2) # 冰棍堆
|
||||
self.featureBlocks.add(POPSICLE_PILE_3)
|
||||
|
||||
# ---- 右键冷却表 ----
|
||||
@@ -146,8 +152,9 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
if blockName == "rtdd:frytheicebox" or blockName == "rtdd:frytheicebox_1" \
|
||||
or blockName in FRYICE_BOX_INFO:
|
||||
return self._handleFryIceBox(blockName, playerId, pos, dim, itemDict, itemName, key)
|
||||
# ---- 冰棍堆 ----
|
||||
if blockName == POPSICLE_PILE_2 or blockName == POPSICLE_PILE_3:
|
||||
# ---- 冰棍堆(含单根橙子/西瓜冰棍作底) ----
|
||||
if blockName == POPSICLE_SINGLE_ORANGE or blockName == POPSICLE_SINGLE_MELON \
|
||||
or blockName == POPSICLE_PILE_2 or blockName == POPSICLE_PILE_3:
|
||||
return self._handlePopsiclePile(blockName, playerId, pos, dim, itemDict, itemName, key)
|
||||
return False
|
||||
|
||||
@@ -186,10 +193,10 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, tip)
|
||||
return True
|
||||
|
||||
# ---- 完成(juicer_4) 空手右键 → 取出果汁, 还原空 ----
|
||||
# ---- 完成(juicer_4) 手持玻璃杯右键 → 取出果汁, 还原空 ----
|
||||
if blockName == "rtdd:juicer_4":
|
||||
if itemName and itemName != "minecraft:air":
|
||||
return False # 必须空手取出, 手持其他物品不处理
|
||||
if itemName != "rtdd:fruitjuice_0":
|
||||
return False # 必须手持玻璃杯(fruitjuice_0)取出, 手持其他物品不处理
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
fruit = self._readFruit(pos, dim)
|
||||
@@ -197,6 +204,7 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
if not juiceInfo:
|
||||
return False # 无水果记录(创造直接放置的完成态) → 不反应
|
||||
juiceBlock, juiceName = juiceInfo
|
||||
self.consumeItem(playerId, itemDict, 1) # 消耗玻璃杯(果汁成品自带杯)
|
||||
self.dropItems(dim, pos, [{"name": juiceBlock, "count": 1}])
|
||||
self.replaceBlock(pos, dim, "rtdd:juicer", playerId) # 还原空, 记录随方块清除
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a取出了" + juiceName)
|
||||
@@ -306,28 +314,55 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def _handlePopsiclePile(self, blockName, playerId, pos, dim, itemDict, itemName, key):
|
||||
# ---- 堆(橙子+西瓜) + 苹果冰棍 → 堆2(橙子+西瓜+苹果) ----
|
||||
if blockName == POPSICLE_PILE_2:
|
||||
if itemName != POPSICLE_PILE_ADD:
|
||||
return False
|
||||
# ---- 单根橙子冰棍(地上) + 手持西瓜冰棍 → 冰棍堆(橙子+西瓜) ----
|
||||
if blockName == POPSICLE_SINGLE_ORANGE and itemName == POPSICLE_SINGLE_MELON:
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.replaceBlock(pos, dim, POPSICLE_PILE_3, playerId)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a把苹果冰棍插到冰棍堆上")
|
||||
self.replaceBlock(pos, dim, POPSICLE_PILE_2, playerId)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a把西瓜冰棍叠到橙子冰棍上,变成冰棍堆")
|
||||
return True
|
||||
|
||||
# ---- 堆2 空手右键 → 取出苹果冰棍(后放先取), 退回堆 ----
|
||||
if blockName == POPSICLE_PILE_3:
|
||||
if itemName and itemName != "minecraft:air":
|
||||
return False
|
||||
# ---- 单根西瓜冰棍(地上) + 手持橙子冰棍 → 冰棍堆(橙子+西瓜), 顺序无关 ----
|
||||
if blockName == POPSICLE_SINGLE_MELON and itemName == POPSICLE_SINGLE_ORANGE:
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.dropItems(dim, pos, [{"name": POPSICLE_PILE_ADD, "count": 1}])
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.replaceBlock(pos, dim, POPSICLE_PILE_2, playerId)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a取走了苹果冰棍")
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a把橙子冰棍叠到西瓜冰棍上,变成冰棍堆")
|
||||
return True
|
||||
|
||||
# ---- 冰棍堆(橙子+西瓜) ----
|
||||
if blockName == POPSICLE_PILE_2:
|
||||
# + 苹果冰棍 → 冰棍堆2(橙子+西瓜+苹果)
|
||||
if itemName == POPSICLE_PILE_ADD:
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.replaceBlock(pos, dim, POPSICLE_PILE_3, playerId)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a把苹果冰棍插到冰棍堆上,叠成三层")
|
||||
return True
|
||||
# 空手右键 → 取出西瓜冰棍(按方块状态固定), 变回 单根橙子冰棍
|
||||
if not itemName or itemName == "minecraft:air":
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.dropItems(dim, pos, [{"name": POPSICLE_SINGLE_MELON, "count": 1}])
|
||||
self.replaceBlock(pos, dim, POPSICLE_SINGLE_ORANGE, playerId)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a取走了西瓜冰棍,剩下一根橙子冰棍")
|
||||
return True
|
||||
return False
|
||||
|
||||
# ---- 冰棍堆2(橙子+西瓜+苹果) ----
|
||||
if blockName == POPSICLE_PILE_3:
|
||||
# 空手右键 → 取出苹果冰棍, 退回 冰棍堆
|
||||
if not itemName or itemName == "minecraft:air":
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.dropItems(dim, pos, [{"name": POPSICLE_PILE_ADD, "count": 1}])
|
||||
self.replaceBlock(pos, dim, POPSICLE_PILE_2, playerId)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a取走了苹果冰棍")
|
||||
return True
|
||||
return False
|
||||
|
||||
return False
|
||||
|
||||
# ============================================================================
|
||||
|
||||
Reference in new issue
Block a user