死亡 生成 黄豆获取1
This commit is contained in:
1 parent
faa3a22631
commit
104603fd64
6 files changed
+654
-2
No files matched your search
+45
-2
@@ -44,6 +44,10 @@ from ...BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
|
|||||||
from ...BlueFoxTools.ToolsConfig import LevelId
|
from ...BlueFoxTools.ToolsConfig import LevelId
|
||||||
from ...BlueFoxTools.ModConfig import MOD_NAME
|
from ...BlueFoxTools.ModConfig import MOD_NAME
|
||||||
|
|
||||||
|
# ---- 死亡生物·生成引擎: 玩家杀猪/牛/羊/鱿鱼/村民 -> 尸体方块 ----
|
||||||
|
# 它是"普通逻辑类"(自己不监听), 由本分发器实例化并把 ServerEntityDieEvent 转给它。
|
||||||
|
from ..siwangshengwu.service.DeadmobGeneratorService import DeadmobGeneratorService
|
||||||
|
|
||||||
# ---- 汤锅盛出自定义事件名(与客户端 ClientFeatureDispatcher TAKEOUT_EVENT 一致) ----
|
# ---- 汤锅盛出自定义事件名(与客户端 ClientFeatureDispatcher TAKEOUT_EVENT 一致) ----
|
||||||
TAKEOUT_EVENT = "TakeoutRequest"
|
TAKEOUT_EVENT = "TakeoutRequest"
|
||||||
|
|
||||||
@@ -112,6 +116,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
|||||||
timerSet = set()
|
timerSet = set()
|
||||||
tryUseOwner = {} # 物品名 -> 服务: 手持"直接吃"物品(长按使用)路由
|
tryUseOwner = {} # 物品名 -> 服务: 手持"直接吃"物品(长按使用)路由
|
||||||
tryUseSet = set()
|
tryUseSet = set()
|
||||||
|
grassDropOwners = [] # 破坏"草/杂草"时概率掉食材(如黄豆)的服务列表; OnDestroy 逐个尝试
|
||||||
|
|
||||||
# ---- 拆方块掉落映射: 方块名 → 掉落对应的原版生食材 ----
|
# ---- 拆方块掉落映射: 方块名 → 掉落对应的原版生食材 ----
|
||||||
# 玩家左键破坏这些"放置的半成品/死鱼"方块时, 取消默认掉落, 改为掉对应的原版生食材
|
# 玩家左键破坏这些"放置的半成品/死鱼"方块时, 取消默认掉落, 改为掉对应的原版生食材
|
||||||
@@ -166,6 +171,15 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
|||||||
cls.tryUseOwner[item] = service
|
cls.tryUseOwner[item] = service
|
||||||
cls.tryUseSet.add(item)
|
cls.tryUseSet.add(item)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def registerGrassDrop(cls, service):
|
||||||
|
"""
|
||||||
|
破坏草/杂草掉食材(如黄豆)的服务初始化时调用:把自己挂进 grassDropOwners。
|
||||||
|
OnDestroy 遇到草/杂草方块会逐个调用这些服务的 handleGrassDrop(args)。
|
||||||
|
"""
|
||||||
|
if service not in cls.grassDropOwners:
|
||||||
|
cls.grassDropOwners.append(service)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def startTimerFor(cls, blockName, dim, pos, playerId=None):
|
def startTimerFor(cls, blockName, dim, pos, playerId=None):
|
||||||
"""
|
"""
|
||||||
@@ -190,6 +204,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
|||||||
super(FeatureDispatcher, self).__init__(namespace, systemName)
|
super(FeatureDispatcher, self).__init__(namespace, systemName)
|
||||||
print "===== FeatureDispatcher init ====="
|
print "===== FeatureDispatcher init ====="
|
||||||
self._cancelItemUse = {} # 将要取消下一次物品使用的玩家ID集合(防止喝药水等)
|
self._cancelItemUse = {} # 将要取消下一次物品使用的玩家ID集合(防止喝药水等)
|
||||||
|
self._deadmobGen = DeadmobGeneratorService() # 死亡生物·生成引擎(杀猪牛羊等->尸体方块)
|
||||||
self.ListenEvent()
|
self.ListenEvent()
|
||||||
|
|
||||||
def Destroy(self):
|
def Destroy(self):
|
||||||
@@ -202,15 +217,19 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
|||||||
|
|
||||||
def ListenEvent(self):
|
def ListenEvent(self):
|
||||||
"""
|
"""
|
||||||
注册六个事件:
|
注册七个事件:
|
||||||
1. ServerBlockUseEvent —— 玩家右键方块(所有功能的右键转换入口)
|
1. ServerBlockUseEvent —— 玩家右键方块(所有功能的右键转换入口)
|
||||||
2. ServerItemUseOnEvent —— 手持物品右键方块表面(如放置生鸡肉)
|
2. ServerItemUseOnEvent —— 手持物品右键方块表面(如放置生鸡肉)
|
||||||
3. ServerItemTryUseEvent —— 玩家尝试使用物品(拦截喝药水/吃食物等默认行为)
|
3. ServerItemTryUseEvent —— 玩家尝试使用物品(拦截喝药水/吃食物等默认行为)
|
||||||
4. ServerBlockEntityTickEvent —— 计时方块每tick触发(烤制/饲料变空等,持久化计时)
|
4. ServerBlockEntityTickEvent —— 计时方块每tick触发(烤制/饲料变空等,持久化计时)
|
||||||
5. ServerPlayerTryDestroyBlockEvent —— 玩家拆方块(放置的死鱼/生鸡肉掉回原版生食材)
|
5. ServerPlayerTryDestroyBlockEvent —— 玩家拆方块(放置的死鱼/生鸡肉掉回原版生食材;
|
||||||
|
以及草/杂草 概率掉黄豆→ 转给 shicai 的 handleGrassDrop)
|
||||||
6. ItemUseOnAfterServerEvent —— 放置方块/生态后触发(携带放置者 entityId)。
|
6. ItemUseOnAfterServerEvent —— 放置方块/生态后触发(携带放置者 entityId)。
|
||||||
用于"创造模式直接放生态"也能拿到是谁放的 → 记录到计时源方块 rtdd_tp,
|
用于"创造模式直接放生态"也能拿到是谁放的 → 记录到计时源方块 rtdd_tp,
|
||||||
让计时源服务能"谁放提示发给谁"(如烧烤直接放烤乳猪也提示营火)。
|
让计时源服务能"谁放提示发给谁"(如烧烤直接放烤乳猪也提示营火)。
|
||||||
|
7. MobDieEvent —— 生物死亡(玩家杀死猪/牛/羊/鱿鱼/村民 →
|
||||||
|
转给 _deadmobGen 生成尸体方块)。注意: 网易该 SDK 里死亡事件叫 MobDieEvent
|
||||||
|
(参数 id=死亡实体, attacker=击杀者), 不是 ServerEntityDieEvent。
|
||||||
"""
|
"""
|
||||||
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
||||||
serverApi.GetEngineSystemName(),
|
serverApi.GetEngineSystemName(),
|
||||||
@@ -230,6 +249,9 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
|||||||
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
||||||
serverApi.GetEngineSystemName(),
|
serverApi.GetEngineSystemName(),
|
||||||
"ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter)
|
"ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter)
|
||||||
|
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
||||||
|
serverApi.GetEngineSystemName(),
|
||||||
|
"MobDieEvent", self, self.OnEntityDie)
|
||||||
# 7. TakeoutRequest —— 客户端拦截(碗/盘,汤锅/炒锅/油锅成品)放置预览后, 显式请求服务端盛出。
|
# 7. TakeoutRequest —— 客户端拦截(碗/盘,汤锅/炒锅/油锅成品)放置预览后, 显式请求服务端盛出。
|
||||||
# 客户端系统 ClientFeatureDispatcher 用 NotifyToServer(TAKEOUT_EVENT) 发送,
|
# 客户端系统 ClientFeatureDispatcher 用 NotifyToServer(TAKEOUT_EVENT) 发送,
|
||||||
# 服务端以 MOD_NAME + 客户端系统名 监听该自定义事件。
|
# 服务端以 MOD_NAME + 客户端系统名 监听该自定义事件。
|
||||||
@@ -268,6 +290,9 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
|||||||
self.UnListenForEvent(serverApi.GetEngineNamespace(),
|
self.UnListenForEvent(serverApi.GetEngineNamespace(),
|
||||||
serverApi.GetEngineSystemName(),
|
serverApi.GetEngineSystemName(),
|
||||||
"ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter)
|
"ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter)
|
||||||
|
self.UnListenForEvent(serverApi.GetEngineNamespace(),
|
||||||
|
serverApi.GetEngineSystemName(),
|
||||||
|
"MobDieEvent", self, self.OnEntityDie)
|
||||||
self.UnListenForEvent(MOD_NAME, "ClientFeatureDispatcher",
|
self.UnListenForEvent(MOD_NAME, "ClientFeatureDispatcher",
|
||||||
TAKEOUT_EVENT, self, self.OnTakeoutRequest)
|
TAKEOUT_EVENT, self, self.OnTakeoutRequest)
|
||||||
self.UnListenForEvent(MOD_NAME, "ClientFeatureDispatcher",
|
self.UnListenForEvent(MOD_NAME, "ClientFeatureDispatcher",
|
||||||
@@ -630,6 +655,17 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
|||||||
# 主入口5:玩家拆方块 → 放置的死鱼/生鸡肉掉回原版生食材
|
# 主入口5:玩家拆方块 → 放置的死鱼/生鸡肉掉回原版生食材
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
||||||
|
def OnEntityDie(self, args):
|
||||||
|
"""
|
||||||
|
玩家杀死生物时触发(ServerEntityDieEvent)。
|
||||||
|
转给死亡生物·生成引擎: 若击杀者是玩家且被杀是 猪/牛/羊/鱿鱼/村民,
|
||||||
|
在死亡位置生成对应尸体方块。
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
self._deadmobGen.OnEntityDie(args)
|
||||||
|
except Exception as e:
|
||||||
|
print "[FD-OnEntityDie-ERR]", e
|
||||||
|
|
||||||
def OnDestroy(self, args):
|
def OnDestroy(self, args):
|
||||||
"""
|
"""
|
||||||
玩家拆方块时触发。
|
玩家拆方块时触发。
|
||||||
@@ -642,6 +678,13 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
|||||||
blockName = args.get("fullName") or args.get("blockName")
|
blockName = args.get("fullName") or args.get("blockName")
|
||||||
args["blockName"] = blockName # 统一成 blockName 字段, 服务内部直接用
|
args["blockName"] = blockName # 统一成 blockName 字段, 服务内部直接用
|
||||||
|
|
||||||
|
# 0. 草/杂草 概率掉食材(黄豆): 逐个尝试挂了 handleGrassDrop 的服务。
|
||||||
|
# 如 shicai: 打草概率掉黄豆, 不取消破坏本身。
|
||||||
|
if self.grassDropOwners:
|
||||||
|
for _s in self.grassDropOwners:
|
||||||
|
if hasattr(_s, "handleGrassDrop") and _s.handleGrassDrop(args):
|
||||||
|
return
|
||||||
|
|
||||||
# 1. 优先: 归属的右键服务实现了 handleDestroy → 交给服务处理(逐个 fallback)
|
# 1. 优先: 归属的右键服务实现了 handleDestroy → 交给服务处理(逐个 fallback)
|
||||||
services = self.blockOwnerAll.get(blockName)
|
services = self.blockOwnerAll.get(blockName)
|
||||||
if services:
|
if services:
|
||||||
|
|||||||
@@ -107,4 +107,14 @@ DESTROY_DROP = {
|
|||||||
"rtdd:cutscallions_2": "rtdd:scallions",
|
"rtdd:cutscallions_2": "rtdd:scallions",
|
||||||
"rtdd:cutscallions_3": "rtdd:scallions",
|
"rtdd:cutscallions_3": "rtdd:scallions",
|
||||||
"rtdd:cutscallions_4": "rtdd:scallions",
|
"rtdd:cutscallions_4": "rtdd:scallions",
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---- 打碎草/杂草 概率获得黄豆(和黄原版打草掉小麦种子一样, ~14%) ----
|
||||||
|
# 黄豆物品与石磨(CHUJU)共用同一物品 rtndd:soybean
|
||||||
|
SOYBEAN_ITEM = "rtdd:soybean" # 黄豆(与石磨同物品, 见 ChujuData)
|
||||||
|
GRASS_DROP_CHANCE = 0.15 # 打草掉黄豆概率(参照原版小麦种子)
|
||||||
|
GRASS_BLOCKS = { # 草/杂草方块(网易 tallgrass 含 aux 变体)
|
||||||
|
"minecraft:tallgrass",
|
||||||
|
"minecraft:short_grass",
|
||||||
|
"minecraft:double_plant",
|
||||||
}
|
}
|
||||||
+27
@@ -21,6 +21,7 @@
|
|||||||
================================================================================
|
================================================================================
|
||||||
"""
|
"""
|
||||||
import time
|
import time
|
||||||
|
import random
|
||||||
import mod.server.extraServerApi as serverApi
|
import mod.server.extraServerApi as serverApi
|
||||||
|
|
||||||
# ---- 网易API基础对象 ----
|
# ---- 网易API基础对象 ----
|
||||||
@@ -36,6 +37,7 @@ from ..ShicaiData import (
|
|||||||
CLEAVER_ITEM, CHOP_CHAINS, GARLIC_BLOCK, GARLIC_CHOP_COUNT,
|
CLEAVER_ITEM, CHOP_CHAINS, GARLIC_BLOCK, GARLIC_CHOP_COUNT,
|
||||||
GARLIC_DROP, FLOUR_BLOCK, COATING_RULES, DESTROY_DROP,
|
GARLIC_DROP, FLOUR_BLOCK, COATING_RULES, DESTROY_DROP,
|
||||||
MEAT_PRESS_RULES,
|
MEAT_PRESS_RULES,
|
||||||
|
SOYBEAN_ITEM, GRASS_DROP_CHANCE, GRASS_BLOCKS,
|
||||||
)
|
)
|
||||||
|
|
||||||
# ---- 统一分发器 ----
|
# ---- 统一分发器 ----
|
||||||
@@ -87,6 +89,8 @@ class ShicaiService(BlueFoxServerSystem):
|
|||||||
|
|
||||||
# ---- 注册到统一分发器 ----
|
# ---- 注册到统一分发器 ----
|
||||||
FeatureDispatcher.register(self)
|
FeatureDispatcher.register(self)
|
||||||
|
# 打碎草掉黄豆: 把本服务的草掉落逻辑挂到分发器的破坏方块路由上
|
||||||
|
FeatureDispatcher.registerGrassDrop(self)
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# 一、给 FeatureDispatcher 的接口
|
# 一、给 FeatureDispatcher 的接口
|
||||||
@@ -161,6 +165,29 @@ class ShicaiService(BlueFoxServerSystem):
|
|||||||
pass
|
pass
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def handleGrassDrop(self, args):
|
||||||
|
"""由 FeatureDispatcher 破坏方块路由调用的"打草掉黄豆"。
|
||||||
|
被破坏方块是草/杂草时, 按 GRASS_DROP_CHANCE 概率掉 1 个黄豆掉落物。
|
||||||
|
只产生掉落, 不取消破坏本身、不设 skip, 原版打草行为保持不变。
|
||||||
|
返回 True=已处理(是草); False=不属本功能(非草)。"""
|
||||||
|
blockName = args.get("fullName") or args.get("blockName")
|
||||||
|
if not blockName or blockName not in GRASS_BLOCKS:
|
||||||
|
return False
|
||||||
|
playerId = args.get("playerId")
|
||||||
|
if not playerId:
|
||||||
|
return True
|
||||||
|
# 概率掉落黄豆
|
||||||
|
if random.random() <= GRASS_DROP_CHANCE:
|
||||||
|
x, y, z = args.get("x"), args.get("y"), args.get("z")
|
||||||
|
dim = comp.CreateDimension(playerId).GetEntityDimensionId()
|
||||||
|
try:
|
||||||
|
self.CreateEngineItemEntity(
|
||||||
|
{"itemName": SOYBEAN_ITEM, "count": 1, "auxValue": 0},
|
||||||
|
dim, (x, y + 0.5, z))
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return True
|
||||||
|
|
||||||
def handleBlockUse(self, args):
|
def handleBlockUse(self, args):
|
||||||
"""由 FeatureDispatcher 转发的右键方块入口"""
|
"""由 FeatureDispatcher 转发的右键方块入口"""
|
||||||
blockName = args.get("blockName")
|
blockName = args.get("blockName")
|
||||||
|
|||||||
+191
@@ -0,0 +1,191 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
================================================================================
|
||||||
|
死亡生物·生成引擎(服务端逻辑类)
|
||||||
|
================================================================================
|
||||||
|
功能:
|
||||||
|
玩家杀死对应生物(牛/猪/羊/鱿鱼/村民)后, 在该生物死亡位置附近生成对应
|
||||||
|
死亡方块(尸体), 供其后的"挂肉钩挂放/切肉"体系使用。
|
||||||
|
|
||||||
|
【这个类为什么是"普通类"、不继承 BlueFoxServerSystem、也不监听事件】
|
||||||
|
全模组只有 FeatureDispatcher 监听游戏事件(架构约定), 本类不监听任何东西。
|
||||||
|
由于此前本类继承 BlueFoxServerSystem 想靠框架自动注册监听, 但新类未被打进
|
||||||
|
运行环境 -> 一直没被实例化, 日志里连 init 都没有。现在改为:
|
||||||
|
- 本类只是"逻辑处理类": __init__ 不需要 namespace/systemName, 方法用模块级
|
||||||
|
comp / LevelId 直接工作。
|
||||||
|
- 真正的 ServerEntityDieEvent 监听在 FeatureDispatcher, 由它实例化本类并
|
||||||
|
把事件转发给本类的 OnEntityDie。
|
||||||
|
|
||||||
|
【黄豆打草掉黄豆】
|
||||||
|
已移回"乡野食材"(shicai): 常量在 ShicaiData, 掉落方法在 ShicaiService,
|
||||||
|
由 FeatureDispatcher 的破坏方块路由调用。本类不再包含黄豆逻辑。
|
||||||
|
|
||||||
|
【死亡方块清单】
|
||||||
|
死亡方块: 牛=rtdd:dead_cow, 猪=rtdd:dead_pig, 羊=rtdd:dead_sheep,
|
||||||
|
鱿鱼=rtdd:deadsquida, 村民=rtdd:dead_villager
|
||||||
|
对应实体类型(minecraft EntityType 枚举名): Cow/Pig/Sheep/Squid/Villager
|
||||||
|
================================================================================
|
||||||
|
"""
|
||||||
|
import mod.server.extraServerApi as serverApi
|
||||||
|
|
||||||
|
# ---- 网易API基础对象 ----
|
||||||
|
comp = serverApi.GetEngineCompFactory() # 组件工厂
|
||||||
|
|
||||||
|
# ---- 只有方块信息组件用 LevelId(查询全维方块) ----
|
||||||
|
from ....BlueFoxTools.ToolsConfig import LevelId
|
||||||
|
|
||||||
|
# ---- 尸体生成延迟(秒): 死亡 1.5 秒后才生成尸体方块, 不会刚死瞬间就出现 ----
|
||||||
|
GEN_DELAY = 1.5
|
||||||
|
|
||||||
|
|
||||||
|
class DeadmobGeneratorService(object):
|
||||||
|
"""
|
||||||
|
死亡生物·生成引擎(逻辑类, 由 FeatureDispatcher 实例化并调用)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
print "===== DeadmobGeneratorService 逻辑类已挂载到 FeatureDispatcher ====="
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# 一、玩家杀死生物 → 生成死亡方块(由 FeatureDispatcher 的
|
||||||
|
# MobDieEvent 监听转发到这里)
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
def OnEntityDie(self, args):
|
||||||
|
"""
|
||||||
|
玩家杀死对应生物时触发(网易死亡事件 MobDieEvent)。args:
|
||||||
|
id 死亡实体
|
||||||
|
attacker 伤害来源(击杀者)实体(近战=玩家; 远程=玩家射出的抛射物)
|
||||||
|
仅当击杀者是玩家、且死亡生物属于牛/猪/羊/鱿鱼/村民时, 在死亡位置延迟生成尸体。
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
killedId = args.get("id") or args.get("entityId")
|
||||||
|
attackerId = args.get("attacker") or args.get("attackedByEntId")
|
||||||
|
if not killedId or not attackerId:
|
||||||
|
return
|
||||||
|
# 解析"由玩家击杀": 近战 attacker 就是玩家; 远程 attacker 是抛射物, 取其发射者
|
||||||
|
if not self._resolvePlayerAttacker(attackerId):
|
||||||
|
return
|
||||||
|
# 命中"被玩家击杀": 打印实际类型串与映射结果, 便于确认事件与类型判断是否命中
|
||||||
|
blockName = self._mobTypeToBlock(killedId)
|
||||||
|
print "[DeadmobGen-Attack] killedType=%s -> block=%s" % (
|
||||||
|
self._mobTypeStr(killedId), blockName)
|
||||||
|
if not blockName:
|
||||||
|
return
|
||||||
|
# 死亡位置: 取实体脚下坐标(死亡时实体仍在场)
|
||||||
|
pos = self._getFootPos(killedId)
|
||||||
|
if not pos:
|
||||||
|
return
|
||||||
|
px, py, pz = (int(pos[0]), int(pos[1]), int(pos[2]))
|
||||||
|
dim = self._getDim(killedId)
|
||||||
|
# 该格若非空气则垫高找到可放格, 避免覆盖已存在的方块(如草/其他方块)
|
||||||
|
target = (px, py, pz)
|
||||||
|
if not self._isPlaceable(target, dim):
|
||||||
|
for dy in range(1, 4):
|
||||||
|
candidate = (px, py + dy, pz)
|
||||||
|
if self._isAir(candidate, dim):
|
||||||
|
target = candidate
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
return # 周围都放不下
|
||||||
|
# 延迟生成尸体方块: 死亡后约 1.5 秒才出现(不是刚死瞬间)
|
||||||
|
comp.CreateGame(LevelId).AddTimer(
|
||||||
|
GEN_DELAY, self._placeBlockDelayed, target, blockName, dim)
|
||||||
|
except Exception as e:
|
||||||
|
print "[DeadmobGen-ERR]", e
|
||||||
|
|
||||||
|
def _resolvePlayerAttacker(self, attackerId):
|
||||||
|
"""判断击杀者是否玩家(近战直接是玩家; 远程是玩家射出的抛射物)。
|
||||||
|
返回 True 表示由玩家击杀。"""
|
||||||
|
if not attackerId:
|
||||||
|
return False
|
||||||
|
if self._isPlayer(attackerId):
|
||||||
|
return True
|
||||||
|
# 远程: attacker 是抛射物(箭等), 取发射者, 发射者是玩家则算玩家击杀
|
||||||
|
try:
|
||||||
|
owner = comp.CreateBulletAttributes(attackerId).GetSourceEntityId()
|
||||||
|
return bool(owner) and self._isPlayer(owner)
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _placeBlockDelayed(self, target, blockName, dim):
|
||||||
|
"""AddTimer 到点后真正放置尸体方块"""
|
||||||
|
self._setBlock(target, blockName, dim)
|
||||||
|
print "[DeadmobGen]", blockName, "at", target
|
||||||
|
|
||||||
|
def _mobTypeStr(self, entityId):
|
||||||
|
"""取实体类型字符串(如 minecraft:pig), 小写; 取不到返回空串"""
|
||||||
|
try:
|
||||||
|
return (comp.CreateEngineType(entityId).GetEngineTypeStr() or "").lower()
|
||||||
|
except Exception:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def _mobTypeToBlock(self, entityId):
|
||||||
|
"""返回该实体对应的死亡方块名; 非目标生物返回 None。
|
||||||
|
用 GetEngineTypeStr() 拿类型字符串精确匹配(项目已有用法见 EventFilter),
|
||||||
|
不使用 EntityType 位掩码(不同版本的枚举/Squid/Villager 存在性不稳)。"""
|
||||||
|
return {
|
||||||
|
"minecraft:pig": "rtdd:dead_pig",
|
||||||
|
"minecraft:cow": "rtdd:dead_cow",
|
||||||
|
"minecraft:sheep": "rtdd:dead_sheep",
|
||||||
|
"minecraft:squid": "rtdd:deadsquida",
|
||||||
|
"minecraft:villager": "rtdd:dead_villager",
|
||||||
|
"minecraft:villager_v2": "rtdd:dead_villager",
|
||||||
|
}.get(self._mobTypeStr(entityId))
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# 二、工具方法
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
def _isPlayer(self, entityId):
|
||||||
|
try:
|
||||||
|
ET = serverApi.GetMinecraftEnum().EntityType
|
||||||
|
v = comp.CreateEngineType(entityId).GetEngineType()
|
||||||
|
return v & ET.Player == ET.Player
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _getFootPos(self, entityId):
|
||||||
|
try:
|
||||||
|
return comp.CreatePos(entityId).GetFootPos()
|
||||||
|
except Exception:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _getDim(self, entityId):
|
||||||
|
try:
|
||||||
|
return comp.CreateDimension(entityId).GetEntityDimensionId()
|
||||||
|
except Exception:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def _isAir(self, pos, dim):
|
||||||
|
try:
|
||||||
|
b = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim)
|
||||||
|
return b is None or b.get("name") == "minecraft:air"
|
||||||
|
except Exception:
|
||||||
|
return True
|
||||||
|
|
||||||
|
def _isPlaceable(self, pos, dim):
|
||||||
|
"""目标格要么是空气、要么是可通过的草/花等非实体方块(可直接替换)"""
|
||||||
|
try:
|
||||||
|
b = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim)
|
||||||
|
if not b:
|
||||||
|
return True
|
||||||
|
name = b.get("name", "minecraft:air")
|
||||||
|
if name == "minecraft:air":
|
||||||
|
return True
|
||||||
|
if name in ("minecraft:tallgrass", "minecraft:short_grass",
|
||||||
|
"minecraft:red_flower", "minecraft:yellow_flower",
|
||||||
|
"minecraft:double_plant"):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
except Exception:
|
||||||
|
return True
|
||||||
|
|
||||||
|
def _setBlock(self, pos, blockName, dim):
|
||||||
|
"""放置死亡方块, aux 强制 0"""
|
||||||
|
try:
|
||||||
|
comp.CreateBlockInfo(LevelId).SetBlockNew(
|
||||||
|
pos, blockDict={"name": blockName, "aux": 0},
|
||||||
|
oldBlockHandling=0, dimensionId=dim)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
@@ -1079,3 +1079,21 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher)
|
|||||||
cancel 掉投掷动画; 窗口过后放行, 对地扔蛋正常。不设全局取消(会破坏对地投掷, 已弃)。
|
cancel 掉投掷动画; 窗口过后放行, 对地扔蛋正常。不设全局取消(会破坏对地投掷, 已弃)。
|
||||||
时长 0.2s, 不卡翻炒(0.3s 间隔)。 [已修]
|
时长 0.2s, 不卡翻炒(0.3s 间隔)。 [已修]
|
||||||
|
|
||||||
|
########################################
|
||||||
|
【死亡生物·生成引擎】(2026-09-24)
|
||||||
|
########################################
|
||||||
|
新增 死亡生物包 下新文件 DeadmobGeneratorService.py (在 modMain 注册), 两个功能:
|
||||||
|
一、玩家杀死生物生成死亡方块
|
||||||
|
- 监听 ServerEntityDieEvent, 判断击杀者是否为玩家(attackedByEntId 判断 Player)。
|
||||||
|
- 死亡生物为 牛/猪/羊/鱿鱼/村民 时, 在死亡位置附近生成对应死亡方块:
|
||||||
|
牛=dead_cow, 猪=dead_pig, 羊=dead_sheep, 鱿鱼=deadsquida, 村民=dead_villager
|
||||||
|
- 该格被占则向上寻 1~3 格找空气放; aux 强制 0。
|
||||||
|
- 实体类型判定: 用 comp.CreateEngineType(entId).GetEngineType() 与
|
||||||
|
serverApi.GetMinecraftEnum().EntityType 枚举比对(Cow/Pig/Sheep/Squid/Villager)。
|
||||||
|
二、打碎草概率获得黄豆(参照原版打草掉小麦种子)
|
||||||
|
- 监听 ServerPlayerTryDestroyBlockEvent, 被破坏方块为 minecraft:tallgrass /
|
||||||
|
short_grass / double_plant 时, 以 15% 概率生成 1 个 黄豆(rtdd:soybean) 掉落物。
|
||||||
|
- 不取消破坏本身(只额外掉落黄豆, 不动默认破坏)。
|
||||||
|
【待验证】网易事件参数名(entityId/attackedByEntId)、实体类型枚举名在不同版本可能不同,
|
||||||
|
需进游戏验证; 若类型判定不准, 改用实体类型字符串接口再调。
|
||||||
|
|
||||||
@@ -0,0 +1,363 @@
|
|||||||
|
========================================================================
|
||||||
|
乡野模组 - 自定义合成配方汇总(含九宫格摆法)
|
||||||
|
(netease_recipes 工作台配方,严格按分类组织)
|
||||||
|
========================================================================
|
||||||
|
【图例】
|
||||||
|
撑=支撑杆(support_rod) 板条=木板条(barwood) 木板=木板(planks任意)
|
||||||
|
板阶=木头台阶(wooden_slabs) 棍=木棍(stick) 铁粒=铁粒(iron_nugget)
|
||||||
|
铁=铁锭 煤=煤炭 石=石头 麦=小麦 竹=竹子 线=线(string)
|
||||||
|
· = 此格留空
|
||||||
|
|
||||||
|
【排布说明】
|
||||||
|
- 每个有序配方(recipe_shaped)下方画 3×3 九宫格(第一行为第1列~第3列),
|
||||||
|
按该配方 JSON 的 pattern 实际摆放,· 表示留空。
|
||||||
|
- 【无序】(recipe_shapeless) 配方的材料任意摆满即可,不画格子。
|
||||||
|
- (x N)= 一次合成产出 N 个。
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
一、乡野食材 (xy_ingredients)
|
||||||
|
########################################################################
|
||||||
|
【食材堆 - 合成】(9 个对应食材 -> 堆)
|
||||||
|
- 苹果堆(apple_pile)【有序】
|
||||||
|
苹果 苹果 苹果
|
||||||
|
苹果 苹果 苹果
|
||||||
|
苹果 苹果 苹果
|
||||||
|
|
||||||
|
- 面包堆(bread_pile) / 胡萝卜堆 / 鳕鱼堆 / 鸡蛋堆 / 土豆堆 / 鲑鱼堆:同上,9 满格各自食材
|
||||||
|
- 桃子堆(peachpile_0) / 橙子堆(orangepile_0):
|
||||||
|
桃/橙 桃/橙 桃/橙
|
||||||
|
桃/橙 桃/橙 桃/橙
|
||||||
|
桃/橙 桃/橙 桃/橙
|
||||||
|
|
||||||
|
【食材堆 - 分解】(堆放工作台 -> 9 个食材)【有序 · 单格】
|
||||||
|
(苹果堆/面包堆/胡萝卜堆/鳕鱼堆/鸡蛋堆/土豆堆/鲑鱼堆/桃子堆/橙子堆)
|
||||||
|
堆块 · ·
|
||||||
|
· · ·
|
||||||
|
· · ·
|
||||||
|
|
||||||
|
【食材堆 - 8 取用】(堆 -> 8 个食材)【无序】苹果堆/面包堆/胡萝卜堆/鳕鱼堆/土豆堆/鲑鱼堆
|
||||||
|
|
||||||
|
【锭堆】(6 个对应锭 -> 堆)【有序】铁锭堆(ingotpile)/金锭堆/铜锭堆
|
||||||
|
· · 铁
|
||||||
|
· 铁 铁
|
||||||
|
铁 铁 铁
|
||||||
|
|
||||||
|
【锭堆分解】(堆 -> 6 锭)【有序 · 单格】
|
||||||
|
堆 · ·
|
||||||
|
· · ·
|
||||||
|
· · ·
|
||||||
|
|
||||||
|
【串】
|
||||||
|
- 大蒜串(garlicskewers)【有序】
|
||||||
|
大 大 大
|
||||||
|
大 支杆 大
|
||||||
|
大 支杆 大
|
||||||
|
(支杆=b_34)
|
||||||
|
- 辣椒串(chiliskewer)【有序】(辣椒=pepper)
|
||||||
|
椒 椒 椒
|
||||||
|
椒 支杆 椒
|
||||||
|
椒 支杆 椒
|
||||||
|
|
||||||
|
【骨】
|
||||||
|
- 骨头(minecraft:bone)【有序 · 单格】
|
||||||
|
牛头骨 · ·
|
||||||
|
· · ·
|
||||||
|
· · ·
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
二、乡野自然 (xy_natural)
|
||||||
|
########################################################################
|
||||||
|
- 柴火堆_1(firewood) x9【有序】
|
||||||
|
木 木 木
|
||||||
|
木 木 木
|
||||||
|
木 木 木
|
||||||
|
(木=任意原版木头 logs)
|
||||||
|
|
||||||
|
- 柴火堆_2(firewood_2) x9【有序】
|
||||||
|
· · 木
|
||||||
|
· 木 木
|
||||||
|
木 木 木
|
||||||
|
|
||||||
|
- 木条(b_15) x9 = 柴火堆_1 x1【无序】(任意摆放)
|
||||||
|
- 竹栏(bamboomeshfence)【有序】
|
||||||
|
竹 竹 竹
|
||||||
|
竹 竹 竹
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
三、厨具 (xy_kitchenware)
|
||||||
|
########################################################################
|
||||||
|
- 搅拌器(beater)【有序】
|
||||||
|
板条 棍 板条
|
||||||
|
· 板条 ·
|
||||||
|
· · ·
|
||||||
|
|
||||||
|
- 丸子机(meatballmaker_0)【有序】
|
||||||
|
撑 铁 铁
|
||||||
|
|
||||||
|
- 擀面杖(rollingpin) x4【有序】
|
||||||
|
撑 木板
|
||||||
|
|
||||||
|
- 锅铲(spatula)【有序】
|
||||||
|
· · 铁
|
||||||
|
· 撑 ·
|
||||||
|
撑 · ·
|
||||||
|
|
||||||
|
- 蒸笼(steamer)【有序】
|
||||||
|
竹 竹 竹
|
||||||
|
木板 木板 木板
|
||||||
|
|
||||||
|
- 石磨(stonemill)【有序】
|
||||||
|
石 · ·
|
||||||
|
石 撑 ·
|
||||||
|
石 · ·
|
||||||
|
|
||||||
|
- 盘子(plate_0) x6【有序】
|
||||||
|
木板 板阶 木板
|
||||||
|
|
||||||
|
- 盘子堆(platepile)【有序】(9 盘子满格)
|
||||||
|
盘 盘 盘
|
||||||
|
盘 盘 盘
|
||||||
|
盘 盘 盘
|
||||||
|
|
||||||
|
- 盘子(plate_0) = 盘子堆 x1【有序 · 单格】
|
||||||
|
盘堆 · ·
|
||||||
|
· · ·
|
||||||
|
· · ·
|
||||||
|
|
||||||
|
- 玻璃罐(medicinetank)【有序】
|
||||||
|
木板
|
||||||
|
玻璃
|
||||||
|
|
||||||
|
- 马克杯(mug)【有序】
|
||||||
|
木板 铁粒
|
||||||
|
木板 · ·
|
||||||
|
|
||||||
|
- 支撑杆(support_rod) 配方1【有序】(3 木棍)
|
||||||
|
棍 棍 棍
|
||||||
|
- 支撑杆(support_rod) 配方2【有序】(6 板条)
|
||||||
|
板条 板条
|
||||||
|
板条 板条
|
||||||
|
板条 板条
|
||||||
|
- 支撑杆(support_rod) x2 配方3【有序】(3 板条)
|
||||||
|
板条 板条 板条
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
四、动物养殖 (xy_animal)
|
||||||
|
########################################################################
|
||||||
|
- 鸡窝(chickencoop_0) x3【有序】
|
||||||
|
麦 · 麦
|
||||||
|
· 麦 ·
|
||||||
|
- 鸡饲料盆(chickenmanger_0)【有序 · 单格】
|
||||||
|
板条 · ·
|
||||||
|
- 饲料槽(manger_0)【有序】
|
||||||
|
板条 · 板条
|
||||||
|
板阶 板条 板阶
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
五、烧烤 (xy_barbecue)
|
||||||
|
########################################################################
|
||||||
|
- 烧烤架(barbecuegrill_0) 配方1【有序】
|
||||||
|
铁 铁粒 铁
|
||||||
|
铁粒 煤 铁粒
|
||||||
|
- 烧烤架(barbecuegrill_0) 配方2【有序】
|
||||||
|
铁粒 铁栅栏 铁粒
|
||||||
|
铁粒 煤 铁粒
|
||||||
|
- 烤香菇串(roastedmushrooms_0)【无序】:棕蘑菇 x5 + 木棍 x1
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
六、汤锅 (xy_tangguo)
|
||||||
|
########################################################################
|
||||||
|
- 汤锅(stewedsoup)【有序】
|
||||||
|
砖 · 砖
|
||||||
|
铁 · 铁
|
||||||
|
黑 铁 黑
|
||||||
|
(黑=黑色染料 black_dye)
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
七、炒锅 (xy_chaoguo)
|
||||||
|
########################################################################
|
||||||
|
- 炒锅(wok)【有序】
|
||||||
|
· 铁 ·
|
||||||
|
铁 煤 铁
|
||||||
|
· 铁 ·
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
八、油锅 (xy_youguo)
|
||||||
|
########################################################################
|
||||||
|
- 油锅(oilpot_0)【有序】
|
||||||
|
铁粒 铁栅栏 铁粒
|
||||||
|
铁 黑 铁
|
||||||
|
(黑=黑色染料)
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
九、乡野饮料 (xy_drink)
|
||||||
|
########################################################################
|
||||||
|
- 榨汁机(juicer)【有序】
|
||||||
|
· 铁粒 ·
|
||||||
|
板条 铁 板条
|
||||||
|
木板 石 木板
|
||||||
|
|
||||||
|
- 冰棍盒(icelollybox_1)【有序】
|
||||||
|
板条 棍 板条
|
||||||
|
板阶 板条 板阶
|
||||||
|
|
||||||
|
- 炒冰盒(frytheicebox)【有序】
|
||||||
|
板条 板阶 板条
|
||||||
|
板阶 板条 板阶
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
十、死亡生物 (xy_deadmob)
|
||||||
|
########################################################################
|
||||||
|
(挂肉钩/尸体等为右键方块转换,无工作台配方;牛头骨→骨见 乡野食材)
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
十一、家具家私 (xy_furniture)
|
||||||
|
########################################################################
|
||||||
|
- 箭桶(arrowbarrel_0)【有序 · 单格】
|
||||||
|
云杉活板门 · ·
|
||||||
|
- 书柜(bookcase)【有序】
|
||||||
|
箱子 木板
|
||||||
|
- 碗柜(cupboard_0)【有序】
|
||||||
|
板条 板条
|
||||||
|
板条 板条
|
||||||
|
木板 木板
|
||||||
|
- 水槽(flume_0)【有序】
|
||||||
|
· 铁粒 ·
|
||||||
|
铁 铁 铁
|
||||||
|
砖 砖 砖
|
||||||
|
- 厨具架(kitchenwarerack) 配方1【有序】
|
||||||
|
板条 板条 板条
|
||||||
|
板条 · 板条
|
||||||
|
- 厨具架(kitchenwarerack) 配方2【有序】
|
||||||
|
板条 撑 板条
|
||||||
|
- 药水架(lotion_0) x4【有序】
|
||||||
|
· · 木
|
||||||
|
· 板条 木
|
||||||
|
木 木 木
|
||||||
|
(木=任意原版木头 logs)
|
||||||
|
- 置物架(shelving)【有序】
|
||||||
|
云杉活板门 ·
|
||||||
|
· 云杉活板门
|
||||||
|
- 调料架(seasoningrack)【有序】
|
||||||
|
撑 板条 撑
|
||||||
|
- 垃圾桶(storage_buckets)【有序】
|
||||||
|
木板 板阶 木板
|
||||||
|
木板 · 木板
|
||||||
|
木板 木板 木板
|
||||||
|
- 桌凳(stool)【有序】
|
||||||
|
板条 板条
|
||||||
|
棍 棍
|
||||||
|
- 盘子架(trayracks_1)【有序】
|
||||||
|
板条 板条
|
||||||
|
木板 木板
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
十二、市场贸易 (xy_market)
|
||||||
|
########################################################################
|
||||||
|
- 条箱(woodenbox_0)【有序】
|
||||||
|
板条 · 板条
|
||||||
|
板条 板条 板条
|
||||||
|
- 货桶(fishbucket_0)【有序】
|
||||||
|
板条 · 板条
|
||||||
|
板条 · 板条
|
||||||
|
板条 板条 板条
|
||||||
|
- 售卖盒(sellingboxes)【有序】
|
||||||
|
板条 板条 板条
|
||||||
|
板条 · 板条
|
||||||
|
板条 · 板条
|
||||||
|
- 餐牌(menus) x4【有序】
|
||||||
|
板条
|
||||||
|
板条
|
||||||
|
- 悬赏纸(bountypaper) x2【无序】:纸 x1
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
十三、乡野食物 (xy_food)
|
||||||
|
########################################################################
|
||||||
|
(成品盘等为方块右键转换,无工作台配方)
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
十四、方块工具 (xy_blocktools)
|
||||||
|
########################################################################
|
||||||
|
- 渔网(fishingnet)【有序】
|
||||||
|
· 线 ·
|
||||||
|
线 线 线
|
||||||
|
· 线 ·
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
十五、机械装置 (xy_machine)
|
||||||
|
########################################################################
|
||||||
|
- 车(cart)【有序】
|
||||||
|
板条 · ·
|
||||||
|
板条 板条 板条
|
||||||
|
轮 · 轮
|
||||||
|
(轮=车轮 wheel)
|
||||||
|
- 风车叶(fanblades)【有序】
|
||||||
|
板条 羊毛 板条
|
||||||
|
羊毛 撑 羊毛
|
||||||
|
板条 羊毛 板条
|
||||||
|
- 梯子(ladder)【有序】
|
||||||
|
撑 棍 撑
|
||||||
|
撑 棍 撑
|
||||||
|
撑 棍 撑
|
||||||
|
- 支撑柱(prop_up) x2【有序】
|
||||||
|
撑 · 撑
|
||||||
|
· 撑 ·
|
||||||
|
撑 · 撑
|
||||||
|
- 车轮(wheel)【有序】
|
||||||
|
· 棍 ·
|
||||||
|
棍 棍 棍
|
||||||
|
· 棍 ·
|
||||||
|
- 纺纱机(spinner)【有序】
|
||||||
|
· · 轮
|
||||||
|
撑 线 线
|
||||||
|
撑 · 撑
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
十六、铸造·晾晒·观赏用具
|
||||||
|
########################################################################
|
||||||
|
- 铸造台(casting_table)【有序】
|
||||||
|
铁粒 铁粒
|
||||||
|
高炉 砖
|
||||||
|
- 晾干架(dryingrack) x2【有序】
|
||||||
|
撑 棍 撑
|
||||||
|
撑 棍 撑
|
||||||
|
- 鱼缸(fishtank)【有序】
|
||||||
|
玻璃 石头
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
十七、布料·旗帜·阳伞·帐篷(装饰)
|
||||||
|
########################################################################
|
||||||
|
【布料】(3 格一行)【有序】
|
||||||
|
对应色羊毛 白/中色羊毛 对应色羊毛
|
||||||
|
- 蓝布(cloth_blue) = 淡蓝羊毛 + 白羊毛 + 淡蓝羊毛
|
||||||
|
- 绿布(cloth_lime) = 绿色羊毛 + 黄绿羊毛 + 绿色羊毛
|
||||||
|
- 紫布(cloth_purple) = 紫色羊毛 + 白羊毛 + 紫色羊毛
|
||||||
|
- 红布(cloth_red) = 红色羊毛 + 白羊毛 + 红色羊毛
|
||||||
|
- 黄布(cloth_yellow) = 黄色羊毛 + 白羊毛 + 黄色羊毛
|
||||||
|
|
||||||
|
【旗】(x4)【有序】
|
||||||
|
- 旗(flag)
|
||||||
|
撑 撑 撑
|
||||||
|
绿布 · 黄布
|
||||||
|
- 斜纹蓝绿旗(flag_blue_lime_oblique)
|
||||||
|
撑 · ·
|
||||||
|
蓝布 撑 ·
|
||||||
|
· 绿布 撑
|
||||||
|
|
||||||
|
【阳伞】= 撑 + 对应布【有序】
|
||||||
|
撑
|
||||||
|
布
|
||||||
|
(蓝阳伞=撑+蓝布 / 紫阳伞=撑+紫布 / 红阳伞=撑+红布 / 黄阳伞=撑+黄布 / 绿阳伞=撑+绿布)
|
||||||
|
|
||||||
|
【帐篷】(tent) x8【有序】
|
||||||
|
羊毛 · 羊毛
|
||||||
|
板条 羊毛 ·
|
||||||
|
羊毛 · ·
|
||||||
|
|
||||||
|
========================================================================
|
||||||
|
附注
|
||||||
|
========================================================================
|
||||||
|
- 上述均为合成台(crafting_table)配方,见 behavior_pack_v8jz0zSR/netecase_recipes/xy_*.json。
|
||||||
|
- 【有序】= minecraft:recipe_shaped,按上方九宫格摆放;
|
||||||
|
【无序】= minecraft:recipe_shapeless,材料对数即可。
|
||||||
|
- 本文件只收录该目录下现有的工作台配方;方块右键转换类合成(汤锅/炒锅/油锅/面食等)不在此目录。
|
||||||
Reference in new issue
Block a user