菜谱全部导入 水稻tick

This commit is contained in:
wenhe committed 2026-09-28 13:43:39 +08:00
1 parent b714900001
commit c41a6d3665
13 files changed
+611 -98

No files matched your search

@@ -21,6 +21,7 @@
================================================================================
"""
import time
import random
import mod.server.extraServerApi as serverApi
# ---- 网易API基础对象 ----
@@ -32,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
from ..NaturalData import NATURAL_SWITCHES, RICE_PLANT, RICE_BLOCKS, RICE_SEED_ITEM, RICE_CROP_ITEM, BONE_MEAL
# ---- 统一分发器 ----
from ...service.FeatureDispatcher import FeatureDispatcher
@@ -89,6 +90,11 @@ class NaturalService(BlueFoxServerSystem):
recipe = self.findRecipe(blockName, itemDict)
if not recipe:
# 骨粉右键水稻 -> 概率催熟(还原原版农作物施肥)
if itemName == BONE_MEAL and blockName in RICE_BLOCKS:
if self.checkCooldown(key, 0.3):
self._applyBoneMeal(playerId, pos, dim, blockName, itemDict)
return True
return False
if not self.checkCooldown(key, 0.5):
return True
@@ -216,6 +222,26 @@ class NaturalService(BlueFoxServerSystem):
if recipe.get("tip"):
comp.CreateMsg(playerId).NotifyOneMessage(playerId, recipe["tip"])
def _applyBoneMeal(self, playerId, pos, dim, blockName, itemDict):
"""骨粉催熟水稻: 消耗1个骨粉, 按原版概率一次长多级(无失败时2~3级), 封顶成熟"""
try:
if blockName == RICE_BLOCKS[-1]:
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§c水稻已成熟, 无需施肥")
return
index = RICE_BLOCKS.index(blockName)
# 原版骨粉给作物有失败几率: 20% 无效消耗
if random.random() < 0.2:
self.consumeItem(playerId, itemDict, 1)
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§7施肥没有起效…")
return
add = random.choice([2, 3]) # 生长2级或3级(封顶到成熟)
end = min(index + add, len(RICE_BLOCKS) - 1)
self.consumeItem(playerId, itemDict, 1)
self.replaceBlock(pos, dim, RICE_BLOCKS[end], playerId)
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a水稻长大了!")
except Exception:
pass
# ============================================================================
# 四、工具方法:获取玩家主手物品
# ============================================================================
@@ -23,6 +23,7 @@
================================================================================
"""
import time
import random
import mod.server.extraServerApi as serverApi
# ---- 网易API基础对象 ----
@@ -37,7 +38,7 @@ from ....BlueFoxTools.ToolsConfig import LevelId
blockEntityDataComp = comp.CreateBlockEntityData(LevelId)
# ---- 只导入乡野自然自己的数据库 ----
from ..NaturalData import NATURAL_TIMERS
from ..NaturalData import NATURAL_TIMERS, RICE_BLOCKS, RICE_GROW_PROB
# ---- 统一分发器 ----
from ...service.FeatureDispatcher import FeatureDispatcher
@@ -64,7 +65,9 @@ class NaturalTimerService(BlueFoxServerSystem):
def getTimerBlocks(self):
"""返回本功能的所有"计时源方块"集合(tick 路由用)"""
return set(self.naturalTimers.keys())
blocks = set(self.naturalTimers.keys())
blocks.update(RICE_BLOCKS) # 水稻 tick 概率生长也要路由进来
return blocks
def handleBlockEntityTick(self, args):
"""由 FeatureDispatcher 转发的计时方块 tick 入口"""
@@ -96,6 +99,10 @@ class NaturalTimerService(BlueFoxServerSystem):
def _tickProcess(self, dim, pos, blockName):
try:
# 水稻: 走"原版 tick 概率生长"(不是秒式时长)
if blockName in RICE_BLOCKS:
self._riceTickProcess(dim, pos, blockName)
return
recipe = self.naturalTimers.get(blockName)
if not recipe:
return
@@ -122,6 +129,17 @@ class NaturalTimerService(BlueFoxServerSystem):
except Exception:
pass
def _riceTickProcess(self, dim, pos, blockName):
"""水稻原版式 tick 生长: 每个 block tick 以 RICE_GROW_PROB 概率长大一级(到成熟为止)"""
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)
except Exception:
pass
def _finishTimer(self, dim, pos, recipe, data):
try:
cur = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim)