右键 改3

This commit is contained in:
wenhe committed 2026-09-22 11:50:30 +08:00
1 parent 45d328b339
commit 0dc9bec3bc
4 files changed
+24 -46

No files matched your search

@@ -9,9 +9,11 @@
客户端先 cancel/ret, 再由服务端精确处理转换。
【监听事件】(全模组客户端唯一拦截点)
1. ClientBlockUseEvent 右键功能方块 -> cancel=True
2. ClientItemUseOnEvent 手持白名单物品右键方块表面 -> ret=True
3. ClientItemTryUseEvent 手持直接吃物品(饭团/水煮蛋/豆腐) -> cancel=True
1. ClientItemUseOnEvent 手持白名单物品右键方块表面 -> ret=True
2. ClientItemTryUseEvent 手持直接吃物品(饭团/水煮蛋/豆腐) -> cancel=True
【注意】不拦 ClientBlockUseEvent(右键功能方块本体): 那会误拦"对炉灶放置
蒸笼/对空锅放置盘子"等合理放置。右键方块本体的转换由服务端 OnBlockUse
精确路由处理, 不在客户端提前 cancel。
【白名单来源】
共享数据 InterceptData.py (客户端/服务端同一份, 见其注释)
@@ -24,7 +26,7 @@ clientComp = clientApi.GetEngineCompFactory()
from ...BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxClientSystem
from .InterceptData import (ITEM_USE_ON_CANCEL, ITEM_USE_ON_CANCEL_BY_ITEM,
BLOCK_USE_CANCEL, SUSHI_BLOCKS, COATING_ITEMS)
SUSHI_BLOCKS, COATING_ITEMS)
class ClientFeatureDispatcher(BlueFoxClientSystem):
@@ -33,9 +35,6 @@ class ClientFeatureDispatcher(BlueFoxClientSystem):
def __init__(self, namespace, systemName):
BlueFoxClientSystem.__init__(self, namespace, systemName)
print "===== ClientFeatureDispatcher init ====="
self.ListenForEvent(clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientBlockUseEvent", self, self.OnBlockUse)
self.ListenForEvent(clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemUseOnEvent", self, self.OnItemUseOn)
@@ -45,9 +44,6 @@ class ClientFeatureDispatcher(BlueFoxClientSystem):
def Destroy(self):
print "===== ClientFeatureDispatcher Destroy ====="
self.UnListenForEvent(clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientBlockUseEvent", self, self.OnBlockUse)
self.UnListenForEvent(clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemUseOnEvent", self, self.OnItemUseOn)
@@ -56,15 +52,7 @@ class ClientFeatureDispatcher(BlueFoxClientSystem):
"ClientItemTryUseEvent", self, self.OnItemTryUse)
# ============================================================================
# 入口1: 右键功能方块 -> 提前 cancel 默认交互
# ============================================================================
def OnBlockUse(self, args):
blockName = args.get("blockName")
if blockName in BLOCK_USE_CANCEL:
args["cancel"] = True
# ============================================================================
# 入口2: 手持物品右键方块表面 -> 白名单组合才 ret
# 入口1: 手持物品右键方块表面 -> 白名单组合才 ret (取消默认放置/吃)
# ============================================================================
def OnItemUseOn(self, args):
blockName = args.get("blockName")
@@ -83,6 +83,10 @@ CHAOGUO_CANCEL = {
("rtdd:bowlofrice", "rtdd:plate_15"),
("rtdd:bowlofrice_2", "rtdd:plate_15"),
("rtdd:bowlofrice_3", "rtdd:plate_15"),
# 蛋炒饭: 手持米饭(三形态任一) 右键 炒锅_86(蛋炒饭_加胡萝卜_熟) -> 炒锅_87(加米饭_熟)
("rtdd:bowlofrice", "rtdd:riceegg_2"),
("rtdd:bowlofrice_2", "rtdd:riceegg_2"),
("rtdd:bowlofrice_3", "rtdd:riceegg_2"),
}
# ---- 厨具 锅铲/带油锅铲 (Chuju) ----
@@ -135,7 +139,7 @@ ITEM_USE_ON_CANCEL = (PLATE_CANCEL | MIANSHI_CANCEL | TANGGUO_CANCEL
# 二、纯手持物品取消: 只看手持item (右键任意方块表面/空中)
# ============================================================================
# ---- 原版相邻放置 (YuanbanService ITEM_USE_ON_RULES) ----
# ---- 原版相邻放置 (YuanbanService ITEM_USE_ON_RULES) + 水稻种植 (Natural RICE_PLANT) ----
PLACE_ITEMS = {
"minecraft:chicken",
"minecraft:salmon",
@@ -145,6 +149,7 @@ PLACE_ITEMS = {
"minecraft:potato",
"rtdd:qingcai",
"rtdd:scallions",
"rtdd:rice_seeds", # 稻谷: 右键耕地相邻放置水稻苗(RICE_PLANT)
}
# ---- 总食用 手持直接吃 (Shiyongfood TRY_USE_RULES) ----
@@ -154,29 +159,4 @@ EAT_ITEMS = {
"rtdd:beancurd", # 豆腐
}
ITEM_USE_ON_CANCEL_BY_ITEM = PLACE_ITEMS | EAT_ITEMS
# ============================================================================
# 三、右键功能方块集合 (ClientBlockUseEvent 提前 cancel)
# 右键这些功能方块, 无论空手/手持, 客户端都提前取消"默认交互",
# 由服务端 OnBlockUse 精确路由处理(不误伤放置)。
# 注意: 仅列出"交互型"功能方块(灶台/蒸笼/炒锅/汤锅/锅具/柴火/水箱等),
# 不放被右键时应当正常放置的方块。
# ============================================================================
BLOCK_USE_CANCEL = {
"rtdd:stove", "rtdd:stove_1", "rtdd:stove_2",
"rtdd:steamer", "rtdd:steamercover",
"rtdd:wok", "rtdd:coverthepan", "rtdd:oilpan",
"rtdd:stewedsoup", "rtdd:stewedsoupwater", "rtdd:coverthepot",
"rtdd:oilpot_0", "rtdd:oilpot_1",
"rtdd:oilcan",
"rtdd:manger_0", "rtdd:manger_1", "rtdd:manger_2", "rtdd:manger_3",
"rtdd:pigmanger_1", "rtdd:pigmanger_2",
"rtdd:chickenmanger_0", "rtdd:chickenmanger_1",
"rtdd:firewood", "rtdd:firewood_2",
"rtdd:stonemill",
"rtdd:beater", "rtdd:beatermeat_0", "rtdd:beatermeat_1",
"rtdd:beatermike_0", "rtdd:beatermike_1", "rtdd:beatermike_2",
"rtdd:beater_custard_0", "rtdd:beater_custard_1", "rtdd:beater_custard_2",
"rtdd:beater_eggsandmilk_0", "rtdd:beater_eggsandmilk_1", "rtdd:beater_eggsandmilk_2",
}
ITEM_USE_ON_CANCEL_BY_ITEM = PLACE_ITEMS | EAT_ITEMS
+8
View File
@@ -971,4 +971,12 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher)
ClientBlockUseEvent(cancel功能方块)/ ClientItemUseOnEvent(ret白名单组合)/
ClientItemTryUseEvent(cancel手持吃物品), 客户端提前拦截消除"闪一下"
④modMain.py 客户端分支导入 ClientFeatureDispatcher, 由 BlueFox 框架自动注册 [已实现]
- 复查补漏(2026-09-22): 白名单核对全部17服务 getItemUseOnRules + handleItemUseOn 后补:
①水稻种植 rtdd:rice_seeds 加入相邻放置 PLACE_ITEMS(Natural RICE_PLANT 漏)
②蛋炒饭 米饭三形态 x rtdd:riceegg_2 补 3 组进 CHAOGUO_CANCEL
核对确认已覆盖无遗漏: 装盘PLATE_CANCEL9项/面食MIANSHI_CANCEL6项/汤锅TANGGUO_CANCEL
3项/盖饭CHAOGUO_CANCEL 24+3项/锅铲CHUJU_CANCEL3项/寿司SUSHI_CANCEL/裹粉COATING_
CANCEL/原版放置PLACE_ITEMS/手持吃EAT_ITEMS。注意: Chaoguo.handleItemUseOn 有"手持
成品菜/米饭右键炒锅中间态方块→取消放置"的服务端兜底, 因要使客户端白名单宁少勿多
(避免误拦正常放置), 该边缘防误触仍只服务端处理(功能正确, 仅轻微闪烁), 暂不搬客户端 [已复查]
+2
View File
@@ -93,6 +93,8 @@
反向(手持米饭 bowlofrice/2/3 -> 右键上述成品菜方块):
- 米饭三形态 右键 辣子鸡丁plate_47/香菇滑鸡plate_54/麻婆豆腐plate_32/胡萝卜炒鳕鱼plate_15
被点方块原地变对应盖饭
蛋炒饭(手持米饭三形态 右键 炒锅_86 riceegg_2 -> 炒锅_87 riceegg_3):
- bowlofrice/2/3 x riceegg_2 = 3组
========================================