配方错误修改 厨具架左右取 修改

This commit is contained in:
wenhe committed 2026-09-29 17:59:47 +08:00
1 parent e1e63f43a4
commit 51db95c43a
4 files changed
+16 -14

No files matched your search

@@ -376,7 +376,7 @@ class FurnitureService(BlueFoxServerSystem):
if not stackNames:
return
# 点左/点右 决定取哪个厨具(单件时无论点左右都取那一个)
side = self._rackSideByClick(click.get("face"), click.get("cx"), click.get("cz"))
side = self._rackSideByClick(click.get("aux"), click.get("cx"), click.get("cz"))
if len(layout) >= 2:
idx = 0 if side == "left" else 1
else:
@@ -422,16 +422,18 @@ class FurnitureService(BlueFoxServerSystem):
self.replaceBlock(pos, dim, target, playerId)
self._saveRecordDelayed(pos, dim, {"stack": self._namesToObjs(stackNames)})
def _rackSideByClick(self, face, cx, cz):
"""根据点击的面 + 命中比例位置, 判断点的是左槽还是右槽。
顶面/南北面(法线沿Z): 沿X分左右; 东西面(法线沿X): 沿Z分左右。
返回 'left' / 'right'。若实测与实际相反, 直接翻转本方法即可。"""
if face in (4, 5): # 东/西面: 沿 Z 分
v = cz
else: # 顶/北/南面(默认): 沿 X 分
v = cx
v = float(v) if v is not None else 0
return "left" if v < 0.5 else "right"
def _rackSideByClick(self, aux, cx, cz):
"""根据方块朝向(aux) + 命中点在方块内的坐标, 判定点的是左槽还是右槽。
与玩家站在哪一侧/点哪个面无关 —— 只按 aux 定出架子的"右轴"与右槽所在端,
取命中点沿该轴坐标(v, clickX 或 clickZ)与 0.5 比较。
aux 编码(实测): 0=朝北(-Z) 1=朝东(+X) 2=朝南(+Z) 3=朝西(-X)。
以 d_4(左锅勺右菜刀)为锚: 朝北时左槽在低X端, 依 rotation 推得其余朝向。"""
axis_x = aux in (0, 2) # 右轴沿 X(朝北0/朝南2); 否则沿 Z(朝东1/朝西3)
positive = aux in (0, 1) # 右槽在 +轴端: 0→+X, 1→+Z; 2/3 则在 -轴端
v = float((cx if axis_x else cz) or 0)
if positive:
return "right" if v >= 0.5 else "left"
return "right" if v < 0.5 else "left"
def _rackTarget(self, itemNames):
"""根据厨具物品名列表计算厨具架目标方块(0件=空, 1件=单件, 2件=组合, 顺序无关)"""
@@ -29,7 +29,7 @@
"pattern": [
"0 ",
"34 ",
"6 8"
" 68"
],
"result": {
"data": 0,
@@ -20,7 +20,7 @@
},
"pattern": [
"000",
"34 "
"3 4"
],
"result": {
"data": 0,
@@ -29,7 +29,7 @@
"pattern": [
"0 ",
"34 ",
"6 8"
" 68"
],
"result": {
"data": 0,