稻谷配置 配方txt 修改
This commit is contained in:
1 parent
5f56d9b3db
commit
140e179e2b
10 files changed
+169
-176
No files matched your search
+15
-55
@@ -33,7 +33,7 @@ from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
|
||||
from ....BlueFoxTools.ToolsConfig import LevelId
|
||||
|
||||
# ---- 只导入乡野自然自己的数据库 ----
|
||||
from ..NaturalData import NATURAL_SWITCHES, RICE_PLANT, RICE_BLOCKS, RICE_SEED_ITEM, RICE_CROP_ITEM, BONE_MEAL
|
||||
from ..NaturalData import NATURAL_SWITCHES, RICE_BLOCKS, RICE_SEED_ITEM, RICE_CROP_ITEM, BONE_MEAL, GROW_CHAIN
|
||||
|
||||
# ---- 统一分发器 ----
|
||||
from ...service.FeatureDispatcher import FeatureDispatcher
|
||||
@@ -54,9 +54,13 @@ class NaturalService(BlueFoxServerSystem):
|
||||
for r in NATURAL_SWITCHES:
|
||||
self.switchRecipes[(r["source"], r.get("item"))] = r
|
||||
self.featureBlocks.add(r["source"])
|
||||
# 水稻方块: 只为接收"左键破坏掉落"事件注册(右键无规则, handleBlockUse 会返回 False)
|
||||
# 水稻方块: 只为接收"左键破坏掉落"事件注册; 右键无规则(返回 False),
|
||||
# 其生长/骨粉由原版 base_block=custom_crop_block 的 transform 处理。
|
||||
for b in RICE_BLOCKS:
|
||||
self.featureBlocks.add(b)
|
||||
# 葡萄藤_1: 供"手持骨粉右键催熟"路由进来(走代码 GROW_CHAIN)。
|
||||
for b in GROW_CHAIN.keys():
|
||||
self.featureBlocks.add(b)
|
||||
|
||||
# ---- 右键冷却表 ----
|
||||
self.cooldown = {}
|
||||
@@ -72,10 +76,6 @@ class NaturalService(BlueFoxServerSystem):
|
||||
"""返回本功能管辖的所有右键方块名集合(右键路由用)"""
|
||||
return self.featureBlocks
|
||||
|
||||
def getItemUseOnRules(self):
|
||||
"""返回"手持物品右键方块表面"的规则: 稻谷(rice_seeds) → 种植水稻"""
|
||||
return {RICE_PLANT["item"]: True}
|
||||
|
||||
def handleBlockUse(self, args):
|
||||
"""由 FeatureDispatcher 转发的右键方块入口(柴火/葡萄收获/水稻收获)"""
|
||||
blockName = args.get("blockName")
|
||||
@@ -90,8 +90,9 @@ class NaturalService(BlueFoxServerSystem):
|
||||
|
||||
recipe = self.findRecipe(blockName, itemDict)
|
||||
if not recipe:
|
||||
# 骨粉右键水稻 -> 概率催熟(还原原版农作物施肥)
|
||||
if itemName == BONE_MEAL and blockName in RICE_BLOCKS:
|
||||
# 骨粉右键葡萄藤 -> 催熟一级(葡萄藤走代码 GROW_CHAIN)。
|
||||
# 稻谷走原版 transform(引擎自带骨粉加速), 由 findRecipe 无规则则交给原版, 不在此拦。
|
||||
if itemName == BONE_MEAL and blockName in GROW_CHAIN:
|
||||
if self.checkCooldown(key, 0.3):
|
||||
self._applyBoneMeal(playerId, pos, dim, blockName, itemDict)
|
||||
return True
|
||||
@@ -144,48 +145,6 @@ class NaturalService(BlueFoxServerSystem):
|
||||
pass
|
||||
return True
|
||||
|
||||
def handleItemUseOn(self, args):
|
||||
"""由 FeatureDispatcher 转发的"手持物品右键方块表面"入口(稻谷种水稻)"""
|
||||
itemName = args.get("itemName")
|
||||
playerId = args.get("playerId") or args.get("entityId")
|
||||
x, y, z = args.get("x"), args.get("y"), args.get("z")
|
||||
dim = comp.CreateDimension(playerId).GetEntityDimensionId()
|
||||
|
||||
if itemName != RICE_PLANT["item"]:
|
||||
return False
|
||||
|
||||
# 被点方块必须是原版耕地
|
||||
try:
|
||||
cur = comp.CreateBlockInfo(LevelId).GetBlockNew((x, y, z), dim)
|
||||
if not cur or cur.get("name") != RICE_PLANT["surface"]:
|
||||
return False
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
# 目标格 = 耕地上方一格
|
||||
targetPos = (x, y + 1, z)
|
||||
try:
|
||||
cur = comp.CreateBlockInfo(LevelId).GetBlockNew(targetPos, dim)
|
||||
if cur and cur.get("name") != "minecraft:air":
|
||||
return False
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
# 连点冷却
|
||||
key = (dim, targetPos[0], targetPos[1], targetPos[2])
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
|
||||
# 消耗稻谷
|
||||
itemDict = self.getCarriedItem(playerId)
|
||||
if not itemDict:
|
||||
return False
|
||||
self.consumeItem(playerId, itemDict, RICE_PLANT.get("consume", 1))
|
||||
|
||||
# 放置水稻刚种下
|
||||
self.replaceBlock(targetPos, dim, RICE_PLANT["target"], playerId)
|
||||
return True
|
||||
|
||||
# ============================================================================
|
||||
# 二、规则匹配(精确 + 空手 fallback)
|
||||
# ============================================================================
|
||||
@@ -221,13 +180,14 @@ class NaturalService(BlueFoxServerSystem):
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, recipe["tip"])
|
||||
|
||||
def _applyBoneMeal(self, playerId, pos, dim, blockName, itemDict):
|
||||
"""骨粉催熟水稻: 消耗1个骨粉, 让水稻长大一级(不越级, 到成熟为止), 无提示"""
|
||||
"""骨粉催熟葡萄藤: 消耗1个骨粉, 沿 GROW_CHAIN 长大一级(不越级), 无提示。
|
||||
稻谷骨粉由原版 transform 处理, 不经此。"""
|
||||
try:
|
||||
if blockName == RICE_BLOCKS[-1]:
|
||||
return # 已成熟, 不再消耗
|
||||
index = RICE_BLOCKS.index(blockName)
|
||||
target = GROW_CHAIN.get(blockName)
|
||||
if not target:
|
||||
return # 不在生长链上(已是最终形态), 不消耗
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.replaceBlock(pos, dim, RICE_BLOCKS[index + 1], playerId)
|
||||
self.replaceBlock(pos, dim, target, playerId)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
+12
-12
@@ -38,7 +38,7 @@ from ....BlueFoxTools.ToolsConfig import LevelId
|
||||
blockEntityDataComp = comp.CreateBlockEntityData(LevelId)
|
||||
|
||||
# ---- 只导入乡野自然自己的数据库 ----
|
||||
from ..NaturalData import NATURAL_TIMERS, RICE_BLOCKS, RICE_GROW_PROB
|
||||
from ..NaturalData import NATURAL_TIMERS, GROW_CHAIN, GROW_PROB
|
||||
|
||||
# ---- 统一分发器 ----
|
||||
from ...service.FeatureDispatcher import FeatureDispatcher
|
||||
@@ -66,7 +66,7 @@ class NaturalTimerService(BlueFoxServerSystem):
|
||||
def getTimerBlocks(self):
|
||||
"""返回本功能的所有"计时源方块"集合(tick 路由用)"""
|
||||
blocks = set(self.naturalTimers.keys())
|
||||
blocks.update(RICE_BLOCKS) # 水稻 tick 概率生长也要路由进来
|
||||
blocks.update(GROW_CHAIN.keys()) # 葡萄藤 tick 概率生长路由进来(稻谷已改用原版 transform)
|
||||
return blocks
|
||||
|
||||
def handleBlockEntityTick(self, args):
|
||||
@@ -99,9 +99,9 @@ class NaturalTimerService(BlueFoxServerSystem):
|
||||
|
||||
def _tickProcess(self, dim, pos, blockName):
|
||||
try:
|
||||
# 水稻: 走"原版 tick 概率生长"(不是秒式时长)
|
||||
if blockName in RICE_BLOCKS:
|
||||
self._riceTickProcess(dim, pos, blockName)
|
||||
# 水稻/葡萄藤: 走"原版 tick 概率生长"(不是秒式时长)
|
||||
if blockName in GROW_CHAIN:
|
||||
self._growBlockProcess(dim, pos, blockName)
|
||||
return
|
||||
recipe = self.naturalTimers.get(blockName)
|
||||
if not recipe:
|
||||
@@ -129,14 +129,14 @@ class NaturalTimerService(BlueFoxServerSystem):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def _riceTickProcess(self, dim, pos, blockName):
|
||||
"""水稻原版式 tick 生长: 每个 block tick 以 RICE_GROW_PROB 概率长大一级(到成熟为止)"""
|
||||
def _growBlockProcess(self, dim, pos, blockName):
|
||||
"""水稻/葡萄藤 原版式 tick 生长: 每个 block tick 以 GROW_PROB 概率沿 GROW_CHAIN 长大一级"""
|
||||
try:
|
||||
index = RICE_BLOCKS.index(blockName)
|
||||
if index >= len(RICE_BLOCKS) - 1:
|
||||
return # 已成熟
|
||||
if random.random() < RICE_GROW_PROB:
|
||||
self.replaceBlock(pos, dim, RICE_BLOCKS[index + 1], None)
|
||||
target = GROW_CHAIN.get(blockName)
|
||||
if not target:
|
||||
return
|
||||
if random.random() < GROW_PROB:
|
||||
self.replaceBlock(pos, dim, target, None)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
Reference in new issue
Block a user