原版熟食物品放置 (keyong)
This commit is contained in:
1 parent
620500ab45
commit
38f2ff2b33
7 files changed
+117
-27
No files matched your search
+31
-3
@@ -3,24 +3,29 @@
|
|||||||
================================================================================
|
================================================================================
|
||||||
原版放置分类转换规则数据
|
原版放置分类转换规则数据
|
||||||
================================================================================
|
================================================================================
|
||||||
统一管理"手持原版物品右键方块表面 → 放置对应方块"的规则(ServerItemUseOnEvent)。
|
统一管理"手持原版物品右键方块表面"的规则(ServerItemUseOnEvent)。
|
||||||
从各功能分类中剔除出来单独成目录, 避免散落在各处。
|
从各功能分类中剔除出来单独成目录, 避免散落在各处。
|
||||||
|
|
||||||
当前规则:
|
【一、相邻空格放置】(ITEM_USE_ON_RULES) —— 手持原版物品右键任意方块表面, 在相邻空格放置方块
|
||||||
1) 原版生鸡肉(minecraft:chicken) → 生鸡肉(放置后) roastchickenplace_0 [烧烤用]
|
1) 原版生鸡肉(minecraft:chicken) → 生鸡肉(放置后) roastchickenplace_0 [烧烤用]
|
||||||
2) 原版生鲑鱼(minecraft:salmon) → 死鲑鱼 killfish_0 [死亡生物用]
|
2) 原版生鲑鱼(minecraft:salmon) → 死鲑鱼 killfish_0 [死亡生物用]
|
||||||
3) 原版生鳕鱼(minecraft:cod) → 死鳕鱼 killcod_0 [死亡生物用]
|
3) 原版生鳕鱼(minecraft:cod) → 死鳕鱼 killcod_0 [死亡生物用]
|
||||||
4) minecraft:fish → 死鳕鱼 killcod_0 (网易端 ItemUseOn 事件对
|
4) minecraft:fish → 死鳕鱼 killcod_0 (网易端 ItemUseOn 事件对
|
||||||
生鳕鱼报的 itemName 是 minecraft:fish, 与 GetPlayerItem 的 minecraft:cod 不同)
|
生鳕鱼报的 itemName 是 minecraft:fish, 与 GetPlayerItem 的 minecraft:cod 不同)
|
||||||
|
|
||||||
|
【二、盘子转换】(PLATE_RULES) —— 手持原版食物右键 空盘子(rtdd:plate_0),
|
||||||
|
盘子本身变为对应成品盘 (乡野食物·原版食物 分类, 与上面的相邻放置不同, 是替换被右键方块)
|
||||||
|
|
||||||
字段说明:
|
字段说明:
|
||||||
item: 手持的原版物品
|
item: 手持的原版物品
|
||||||
|
source: 被右键的方块(盘子转换用, 必须匹配才替换)
|
||||||
target: 放置成的方块
|
target: 放置成的方块
|
||||||
consume: 消耗数量(默认1)
|
consume: 消耗数量(默认1)
|
||||||
tip: 放置成功提示
|
tip: 转换成功提示
|
||||||
================================================================================
|
================================================================================
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# ---- 一、相邻空格放置 ----
|
||||||
ITEM_USE_ON_RULES = [
|
ITEM_USE_ON_RULES = [
|
||||||
{
|
{
|
||||||
"item": "minecraft:chicken", # 原版生鸡肉
|
"item": "minecraft:chicken", # 原版生鸡肉
|
||||||
@@ -49,3 +54,26 @@ ITEM_USE_ON_RULES = [
|
|||||||
"tip": "§a已放置死鳕鱼",
|
"tip": "§a已放置死鳕鱼",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# ---- 二、盘子转换: 手持原版食物右键 空盘子(plate_0), 盘子变为对应成品盘 ----
|
||||||
|
# 生鱼片(plate_17)可用 鳕鱼/鲑鱼/热带鱼 右键(含网易端鳕鱼报 minecraft:fish 的兼容)
|
||||||
|
PLATE_RULES = [
|
||||||
|
{"item": "minecraft:pumpkin_pie", "source": "rtdd:plate_0",
|
||||||
|
"target": "rtdd:plate_16", "consume": 1, "tip": "§a南瓜派装盘了"},
|
||||||
|
{"item": "minecraft:cod", "source": "rtdd:plate_0",
|
||||||
|
"target": "rtdd:plate_17", "consume": 1, "tip": "§a生鱼片装盘了"},
|
||||||
|
{"item": "minecraft:salmon", "source": "rtdd:plate_0",
|
||||||
|
"target": "rtdd:plate_17", "consume": 1, "tip": "§a生鱼片装盘了"},
|
||||||
|
{"item": "minecraft:tropical_fish", "source": "rtdd:plate_0",
|
||||||
|
"target": "rtdd:plate_17", "consume": 1, "tip": "§a生鱼片装盘了"},
|
||||||
|
{"item": "minecraft:fish", "source": "rtdd:plate_0",
|
||||||
|
"target": "rtdd:plate_17", "consume": 1, "tip": "§a生鱼片装盘了"},
|
||||||
|
{"item": "minecraft:melon_slice", "source": "rtdd:plate_0",
|
||||||
|
"target": "rtdd:plate_18", "consume": 1, "tip": "§a西瓜装盘了"},
|
||||||
|
{"item": "minecraft:bread", "source": "rtdd:plate_0",
|
||||||
|
"target": "rtdd:plate_20", "consume": 1, "tip": "§a面包装盘了"},
|
||||||
|
{"item": "minecraft:cookie", "source": "rtdd:plate_0",
|
||||||
|
"target": "rtdd:plate_21", "consume": 1, "tip": "§a曲奇装盘了"},
|
||||||
|
{"item": "minecraft:cooked_chicken", "source": "rtdd:plate_0",
|
||||||
|
"target": "rtdd:plate_4", "consume": 1, "tip": "§a熟鸡肉装盘了"},
|
||||||
|
]
|
||||||
+49
-10
@@ -36,7 +36,7 @@ from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
|
|||||||
from ....BlueFoxTools.ToolsConfig import LevelId
|
from ....BlueFoxTools.ToolsConfig import LevelId
|
||||||
|
|
||||||
# ---- 只导入原版放置自己的数据库 ----
|
# ---- 只导入原版放置自己的数据库 ----
|
||||||
from ..YuanbanData import ITEM_USE_ON_RULES
|
from ..YuanbanData import ITEM_USE_ON_RULES, PLATE_RULES
|
||||||
|
|
||||||
# ---- 统一分发器 ----
|
# ---- 统一分发器 ----
|
||||||
from ...service.FeatureDispatcher import FeatureDispatcher
|
from ...service.FeatureDispatcher import FeatureDispatcher
|
||||||
@@ -73,6 +73,11 @@ class YuanbanService(BlueFoxServerSystem):
|
|||||||
for rule in ITEM_USE_ON_RULES:
|
for rule in ITEM_USE_ON_RULES:
|
||||||
self.itemUseOnRecipes[rule["item"]] = rule
|
self.itemUseOnRecipes[rule["item"]] = rule
|
||||||
|
|
||||||
|
# ---- 构建盘子转换规则字典(手持原版食物右键空盘子 → 成品盘) ----
|
||||||
|
self.plateRecipes = {}
|
||||||
|
for rule in PLATE_RULES:
|
||||||
|
self.plateRecipes[rule["item"]] = rule
|
||||||
|
|
||||||
# ---- 右键冷却表 ----
|
# ---- 右键冷却表 ----
|
||||||
self.cooldown = {}
|
self.cooldown = {}
|
||||||
|
|
||||||
@@ -88,25 +93,57 @@ class YuanbanService(BlueFoxServerSystem):
|
|||||||
return set()
|
return set()
|
||||||
|
|
||||||
def getItemUseOnRules(self):
|
def getItemUseOnRules(self):
|
||||||
"""返回"手持物品右键方块表面"的规则: {物品名: 规则dict}"""
|
"""返回"手持物品右键方块表面"的规则: 相邻放置+盘子转换的物品名合集
|
||||||
return self.itemUseOnRecipes
|
(分发器只按物品名路由到本类, 值随意)"""
|
||||||
|
rules = {}
|
||||||
|
for k in self.itemUseOnRecipes:
|
||||||
|
rules[k] = True
|
||||||
|
for k in self.plateRecipes:
|
||||||
|
rules[k] = True
|
||||||
|
return rules
|
||||||
|
|
||||||
def handleItemUseOn(self, args):
|
def handleItemUseOn(self, args):
|
||||||
"""
|
"""
|
||||||
由 FeatureDispatcher 转发的"手持物品右键方块表面"事件。
|
由 FeatureDispatcher 转发的"手持物品右键方块表面"事件。
|
||||||
在方块表面放置对应方块(生鸡肉/死鲑鱼/死鳕鱼)。
|
两种模式:
|
||||||
|
1. 盘子转换: 手持原版食物右键 空盘子(plate_0) → 盘子本身变为对应成品盘
|
||||||
|
2. 相邻空格放置: 手持原版生鸡肉/鲑鱼/鳕鱼右键任意方块表面 → 相邻空格放置对应方块
|
||||||
返回 True=已处理,False=当前组合无匹配规则。
|
返回 True=已处理,False=当前组合无匹配规则。
|
||||||
"""
|
"""
|
||||||
itemName = args.get("itemName")
|
itemName = args.get("itemName")
|
||||||
# ServerItemUseOnEvent 的玩家键是 entityId,不是 playerId
|
# ServerItemUseOnEvent 的玩家键是 entityId,不是 playerId
|
||||||
playerId = args.get("playerId") or args.get("entityId")
|
playerId = args.get("playerId") or args.get("entityId")
|
||||||
rule = self.itemUseOnRecipes.get(itemName)
|
|
||||||
if not rule:
|
|
||||||
return False
|
|
||||||
|
|
||||||
x, y, z = args.get("x"), args.get("y"), args.get("z")
|
x, y, z = args.get("x"), args.get("y"), args.get("z")
|
||||||
face = args.get("face", 1)
|
face = args.get("face", 1)
|
||||||
dim = comp.CreateDimension(playerId).GetEntityDimensionId()
|
dim = comp.CreateDimension(playerId).GetEntityDimensionId()
|
||||||
|
pos = (x, y, z)
|
||||||
|
|
||||||
|
# ---- 优先: 盘子转换(右键的必须是空盘子) ----
|
||||||
|
plateRule = self.plateRecipes.get(itemName)
|
||||||
|
if plateRule:
|
||||||
|
try:
|
||||||
|
cur = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim)
|
||||||
|
except Exception:
|
||||||
|
cur = None
|
||||||
|
if cur and cur.get("name") == plateRule.get("source"):
|
||||||
|
key = (dim, x, y, z)
|
||||||
|
if not self.checkCooldown(key, 0.5):
|
||||||
|
return True
|
||||||
|
itemDict = self.getCarriedItem(playerId)
|
||||||
|
if not itemDict:
|
||||||
|
return False
|
||||||
|
self.consumeItem(playerId, itemDict, plateRule.get("consume", 1))
|
||||||
|
# 直接替换被右键的盘子方块
|
||||||
|
self.replaceBlock(pos, dim, plateRule["target"], playerId)
|
||||||
|
if plateRule.get("tip"):
|
||||||
|
comp.CreateMsg(playerId).NotifyOneMessage(playerId, plateRule["tip"])
|
||||||
|
return True
|
||||||
|
# 被右键的不是盘子 → 交给下面的相邻放置处理
|
||||||
|
|
||||||
|
# ---- 相邻空格放置 ----
|
||||||
|
rule = self.itemUseOnRecipes.get(itemName)
|
||||||
|
if not rule:
|
||||||
|
return False
|
||||||
|
|
||||||
# 计算被点方块表面相邻的目标格
|
# 计算被点方块表面相邻的目标格
|
||||||
off = FACE_OFFSET.get(face, (0, 1, 0))
|
off = FACE_OFFSET.get(face, (0, 1, 0))
|
||||||
@@ -144,8 +181,9 @@ class YuanbanService(BlueFoxServerSystem):
|
|||||||
|
|
||||||
def getCarriedItem(self, playerId):
|
def getCarriedItem(self, playerId):
|
||||||
itemComp = comp.CreateItem(playerId)
|
itemComp = comp.CreateItem(playerId)
|
||||||
|
# getUserData=True 必须传, 否则取不到 userData(消耗堆叠物品时保留)
|
||||||
return itemComp.GetPlayerItem(
|
return itemComp.GetPlayerItem(
|
||||||
serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0)
|
serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# 三、工具方法:消耗物品
|
# 三、工具方法:消耗物品
|
||||||
@@ -165,7 +203,8 @@ class YuanbanService(BlueFoxServerSystem):
|
|||||||
serverApi.GetMinecraftEnum().ItemPosType.CARRIED,
|
serverApi.GetMinecraftEnum().ItemPosType.CARRIED,
|
||||||
{"itemName": itemDict["newItemName"],
|
{"itemName": itemDict["newItemName"],
|
||||||
"count": itemDict["count"],
|
"count": itemDict["count"],
|
||||||
"auxValue": itemDict.get("newAuxValue", 0)})
|
"auxValue": itemDict.get("newAuxValue", 0),
|
||||||
|
"userData": itemDict.get("userData", {})})
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# 四、工具方法:替换方块
|
# 四、工具方法:替换方块
|
||||||
|
|||||||
File renamed without changes.
@@ -39,9 +39,7 @@
|
|||||||
========================================
|
========================================
|
||||||
二、药罐(制药)
|
二、药罐(制药)
|
||||||
========================================
|
========================================
|
||||||
7. 玻璃罐(药罐) -> 药罐_1 -> 药罐_2 -> 药罐_3 -> 药罐_4
|
|
||||||
转换条件:[手持 药材 右键 依次制药]
|
|
||||||
机制: 手持药材右键,消耗1个,逐级制药(药材与配方待确认)
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
三、其他静态方块
|
三、其他静态方块
|
||||||
+18
-11
@@ -3,21 +3,28 @@
|
|||||||
========================================
|
========================================
|
||||||
说明:
|
说明:
|
||||||
- 当前tab展示3个分组: 章鱼小丸子 / 原版食物 / 烤制·串烧
|
- 当前tab展示3个分组: 章鱼小丸子 / 原版食物 / 烤制·串烧
|
||||||
- 另有 汤面、盖饭、炒锅成品 分组与炒锅/汤锅页共用(不在此tab重复展示)
|
- 本分类方块以"成品菜"为主
|
||||||
- 本分类方块以"成品菜"为主,多为静态成品,无后续转换
|
- 食用类转换(吃)由统一的"总食用功能"后续实现, 本分类只记录形态转换
|
||||||
|
- 烤制·串烧分组的转换见 烧烤(xy_barbecue) 相关文档
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
一、章鱼小丸子
|
一、章鱼小丸子
|
||||||
========================================
|
========================================
|
||||||
1. 章鱼小丸子(完整) -> 章鱼小丸子(半份)
|
1. 章鱼小丸子(完整) plate_40 -> 章鱼小丸子(半份) plate_40a
|
||||||
转换条件:[右键 吃 进行转换]
|
转换条件:[右键 进行转换] 【待实现】
|
||||||
机制: 点击右键,转换为半份的章鱼小丸子 (属于吃的东西,后续实现)
|
机制: 右键点击, 转换为半份的章鱼小丸子 (属于吃的东西, 后续实现)
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
二、原版食物(静态成品盘)
|
二、原版食物(成品盘)
|
||||||
========================================
|
========================================
|
||||||
plate_16(南瓜派盘)、plate_17(生鱼片)、plate_18(西瓜盘)、plate_20(面包盘)、plate_21(曲奇盘)、plate_4(熟鸡肉盘)
|
盘子(空) plate_0 -> 对应成品盘 【已实现】(由 xiangyemod/yuanbanfangzhi 实现)
|
||||||
以上均为静态成品,无转化关系
|
转换条件:[手持 原版对应食物 右键盘子 进行转换, 消耗1个食物]
|
||||||
|
机制: 手持对应的原版食物右键空盘子, 消耗1个, 盘子变为对应成品盘
|
||||||
todo 转换: 拿原版对应食物 右键盘子 进行转换
|
(转换后为静态成品盘, 无取回/无逆向)
|
||||||
生鱼片 拿 鳕鱼鲑鱼热带鱼右键都可以
|
- 南瓜派盘 plate_16: 手持 原版南瓜派 minecraft:pumpkin_pie
|
||||||
|
- 生鱼片 plate_17: 手持 原版生鱼(鳕鱼 minecraft:cod / 鲑鱼 minecraft:salmon /
|
||||||
|
热带鱼 minecraft:tropical_fish 右键都可以, 含网易端鳕鱼兼容)
|
||||||
|
- 西瓜盘 plate_18: 手持 原版西瓜片 minecraft:melon_slice
|
||||||
|
- 面包盘 plate_20: 手持 原版面包 minecraft:bread
|
||||||
|
- 曲奇盘 plate_21: 手持 原版曲奇 minecraft:cookie
|
||||||
|
- 熟鸡肉盘 plate_4: 手持 原版熟鸡肉 minecraft:cooked_chicken
|
||||||
@@ -90,6 +90,11 @@
|
|||||||
- 计时用绝对时间戳写入方块实体数据, 支持退出/重启后继续计时 [已实现]
|
- 计时用绝对时间戳写入方块实体数据, 支持退出/重启后继续计时 [已实现]
|
||||||
- 原版放置(手持原版生鸡肉/鲑鱼/鳕鱼右键方块表面放置对应方块)已拆到独立目录
|
- 原版放置(手持原版生鸡肉/鲑鱼/鳕鱼右键方块表面放置对应方块)已拆到独立目录
|
||||||
xiangyemod/yuanbanfangzhi (YuanbanData/YuanbanService), 从烧烤/死亡生物中剔除 [已重构]
|
xiangyemod/yuanbanfangzhi (YuanbanData/YuanbanService), 从烧烤/死亡生物中剔除 [已重构]
|
||||||
|
- 原版食物成品盘转换(乡野食物·原版食物): 手持原版食物右键 空盘子(rtdd:plate_0) →
|
||||||
|
盘子本身变为对应成品盘, 消耗1个食物; 生鱼片(plate_17)可用 鳕鱼/鲑鱼/热带鱼
|
||||||
|
(含网易端鳕鱼报 minecraft:fish 兼容) [已实现]
|
||||||
|
南瓜派→plate_16 / 西瓜片→plate_18 / 面包→plate_20 / 曲奇→plate_21 / 熟鸡肉→plate_4
|
||||||
|
(实现于 xiangyemod/yuanbanfangzhi/YuanbanData.py PLATE_RULES + YuanbanService, 替换模式)
|
||||||
|
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
|
|||||||
@@ -93,3 +93,16 @@
|
|||||||
- 方块: b_35(双人床)
|
- 方块: b_35(双人床)
|
||||||
- 设想: 床, 但是可以两个人一起睡
|
- 设想: 床, 但是可以两个人一起睡
|
||||||
- 未做原因: 未实现 (家具家私转化关系.txt 静态段 todo 已标注)
|
- 未做原因: 未实现 (家具家私转化关系.txt 静态段 todo 已标注)
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
【乡野食物】(xy_food)
|
||||||
|
########################################
|
||||||
|
|
||||||
|
一、章鱼小丸子-完整转半份
|
||||||
|
- 方块: plate_40(章鱼小丸子完整) -> plate_40a(章鱼小丸子半份)
|
||||||
|
- 设想: 右键点击, 完整转为半份
|
||||||
|
- 未做原因: 属于吃的东西, 食用部分由统一的"总食用功能"后续实现
|
||||||
|
(乡野食物转化关系.txt 一、章鱼小丸子 todo 已标注)
|
||||||
|
|
||||||
|
(原版食物-成品盘转换 已实现于 xiangyemod/yuanbanfangzhi, 见 全部功能做了什么.txt)
|
||||||
Reference in new issue
Block a user