稻谷bug修复 提示删除
This commit is contained in:
1 parent
344fad19ac
commit
bd2ebfb154
43 files changed
+700
-846
No files matched your search
+56
@@ -52,6 +52,9 @@ from ..siwangshengwu.service.DeadmobGeneratorService import DeadmobGeneratorServ
|
||||
# ---- 钓鱼掉落: 螃蟹/龙虾(普通逻辑类, 由本分发器转发 PlayerFishingServerEvent) ----
|
||||
from ..yuanbanfangzhi.service.YuanbanFishing import YuanbanFishingService
|
||||
|
||||
# ---- 乡野自然·水稻: 踩踏耕地等下方方块变化时 清理作物+掉稻谷 ----
|
||||
from ..ziran.NaturalData import RICE_BLOCKS, RICE_SEED_ITEM, RICE_CROP_ITEM
|
||||
|
||||
# ---- 汤锅盛出自定义事件名(与客户端 ClientFeatureDispatcher TAKEOUT_EVENT 一致) ----
|
||||
TAKEOUT_EVENT = "TakeoutRequest"
|
||||
|
||||
@@ -252,6 +255,10 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"ServerPlayerTryDestroyBlockEvent", self, self.OnDestroy)
|
||||
# 水稻/自定义方块周围方块变化(踩踏耕地使下方变泥土/草地等) -> 清理作物+掉稻谷
|
||||
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"BlockNeighborChangedServerEvent", self, self.OnBlockNeighborChanged)
|
||||
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter)
|
||||
@@ -296,6 +303,9 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
self.UnListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"ServerPlayerTryDestroyBlockEvent", self, self.OnDestroy)
|
||||
self.UnListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"BlockNeighborChangedServerEvent", self, self.OnBlockNeighborChanged)
|
||||
self.UnListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter)
|
||||
@@ -739,3 +749,49 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
self.CreateEngineItemEntity(itemDict, dim, (x, y + 0.5, z))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def OnBlockNeighborChanged(self, args):
|
||||
"""
|
||||
BlockNeighborChangedServerEvent —— 自定义方块周围方块变化时触发。
|
||||
用途: 稻谷(riceseedlingsb/c/d)下方是耕地(farmland)时, 一旦耕地被踩踏/替换/推动
|
||||
(变成泥土/草方块等), 原版会把作物连根。为保证"踩耕地→作物消失且掉稻谷"(跟原版
|
||||
一致, 而不掉方块本体), 这里在下方耕地变化的瞬间:
|
||||
- 若稻谷方块仍存在于原地, 手动清空它;
|
||||
- 并掉落稻谷(b/c 掉1; 成熟 d 掉 稻谷1 + 大米16)。
|
||||
只处理稻谷块; 其余方块直接放行。
|
||||
"""
|
||||
blockName = args.get("blockName")
|
||||
if blockName not in RICE_BLOCKS:
|
||||
return
|
||||
posX, posY, posZ = args.get("posX"), args.get("posY"), args.get("posZ")
|
||||
dim = args.get("dimensionId")
|
||||
# 仅当下方(正下方一格)方块变化才处理, 避免同层/上方邻居变化误清
|
||||
if (args.get("neighborPosX") != posX or
|
||||
args.get("neighborPosZ") != posZ or
|
||||
args.get("neighborPosY") != (posY - 1)):
|
||||
return
|
||||
try:
|
||||
below = comp.CreateBlockInfo(LevelId).GetBlockNew((posX, posY - 1, posZ), dim)
|
||||
belowName = below.get("name") if below else None
|
||||
except Exception:
|
||||
belowName = None
|
||||
# 下方仍是耕地 -> 不算失去支撑, 放行
|
||||
if belowName == "minecraft:farmland":
|
||||
return
|
||||
# 清空作物方块(取消默认掉落, 手动掉)
|
||||
try:
|
||||
comp.CreateBlockInfo(LevelId).SetBlockNew(
|
||||
(posX, posY, posZ), blockDict={"name": "minecraft:air", "aux": 0},
|
||||
oldBlockHandling=0, dimensionId=dim)
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
self.CreateEngineItemEntity(
|
||||
{"itemName": RICE_SEED_ITEM, "count": 1, "auxValue": 0},
|
||||
dim, (posX, posY + 0.5, posZ))
|
||||
if blockName == "rtdd:riceseedlingsd":
|
||||
self.CreateEngineItemEntity(
|
||||
{"itemName": RICE_CROP_ITEM, "count": 16, "auxValue": 0},
|
||||
dim, (posX, posY + 0.5, posZ))
|
||||
except Exception:
|
||||
pass
|
||||
Reference in new issue
Block a user