菜单功能

This commit is contained in:
Giao committed 2026-09-28 11:18:26 +08:00
1 parent a647878ac1
commit 3b63794fe4
42 files changed
+1627 -106

No files matched your search

@@ -3,22 +3,24 @@ from ...BlueFoxTools.ModConfig import MOD_NAME
from ...BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxClientSystem
from ...BlueFoxTools.SystemTools import SystemTools
from ...BlueFoxTools.ToolsConfig import *
from ...BlueFoxTools.EventFilter import BlueFoxFilterEnum as ef
class MainClient(BlueFoxClientSystem):
systemTools = SystemTools.GetTools('MainClient')
mcListener = systemTools.ListenForEvent()
blueFox = systemTools.GetBlueFoxServerListener()
blueFoxListener = systemTools.GetBlueFoxServerListener()
mainServer = systemTools.ListenForEvent(
namespace=MOD_NAME, systemName='MainServer'
)
blockUse = systemTools.FilterListener('ClientBlockUseEvent')
blockUseListener = systemTools.FilterListener(eventName='ClientItemUseOnEvent')
def __init__(self, *args):
super(MainClient, self).__init__(*args)
self.systemTools.Binding(self)
self.usingCd = False
@blueFox
@blueFoxListener
def PlaySound(self, args):
posDim = args['posDim']
pitch = args['pitch']
@@ -27,13 +29,11 @@ class MainClient(BlueFoxClientSystem):
args['soundName'], posDim[:3], pitch=pitch
)
# @blockUse(ef.ClientEvent.NormalEvent.NotInCd('rtdd:blockUse', 0.2))
# def BlockUseNotIn02(self, args):
# print args
# blockName = args['blockName']
# if blockName in blockName:
# args['cancel'] = True
@blockUseListener(ef.ClientEvent.NormalEvent.NotInCd('rtdd:ItemUseOnEvent', 0.2))
def ClientItemUseOnEventNotInCd02(self, args):
if args['itemName'] == 'rtdd:recipe_book':
clientApi.PushScreen(MOD_NAME, 'CookRecipe', {})
@blueFox
@blueFoxListener
def PlayAttackAnim(self, args):
clientCompFactory.CreatePlayer(LevelId).Swing()
@@ -0,0 +1 @@
import MainClient
@@ -0,0 +1 @@
import MainServer
@@ -0,0 +1,124 @@
# coding=utf-8
from ...BlueFoxTools.ScreenTools import ScreenTools
from ...BlueFoxTools.ScreenTools import ButtonTouchTypeEnum as btte
from ...BlueFoxTools.SystemTools import SystemTools
from ...BlueFoxTools.ToolsConfig import *
allCookRecipe = [
{
'publicResult': 'rtdd:oilpan', # 共有步骤产生的结果
'publicStep': [
{'itemName': 'rtdd:spatula', 'count': 1},
{'itemName': 'rtdd:oilcan', 'count': 1},
{},
], # 共有步骤
'splitStep': [
{
'result': 'rtdd:plate_24', # 分步骤产生的结果
'items': [{}, {}, {}], # 分步骤的物品
}
], # 分步骤,一页最多8个分步骤
}, # 这是一页显示的数据
{
'publicResult': 'rtdd:oilpan',
'publicStep': [
{'itemName': 'rtdd:spatula', 'count': 1},
{'itemName': 'rtdd:oilcan', 'count': 1},
{},
],
'splitStep': []
}
]
@ScreenTools.AutoRegister('rtdd_caipu.RecipeScreen')
class CookRecipe(baseScreen):
screenTools = ScreenTools.GetTools('CookRecipe')
buttonBinder = screenTools.ButtonCallFuncBackBinder
def __init__(self, *args):
super(CookRecipe, self).__init__(*args)
self.page = 0
self.pageData = allCookRecipe[self.page]
def Create(self):
self.screenTools.Binding(self)
lastButton = self.GetBaseUIControl(RootScreenPathHead + '/image/stack_panel1/last').asButton()
nextButton = self.GetBaseUIControl(RootScreenPathHead + '/image/stack_panel1/next').asButton()
lastButton.AddTouchEventParams()
nextButton.AddTouchEventParams()
lastButton.SetButtonTouchUpCallback(self.LastPage)
nextButton.SetButtonTouchUpCallback(self.NextPage)
self.anyStepControlRoot = self.GetBaseUIControl(RootScreenPathHead + '/image/stack_panel')
self.anyStemControlItemCells = []
for i in range(1, 5):
self.anyStemControlItemCells.append(
self.anyStepControlRoot.GetChildByName('item_cell{}'.format(i)).GetChildByName(
'item_renderer'
).asItemRenderer()
)
self.splitStepControlRoot = self.GetBaseUIControl(RootScreenPathHead + '/image/recipe3')
self.splitStepControl = []
for i in range(1, 5):
self.splitStepControl.append(
self.splitStepControlRoot.GetChildByName('recipe_list{}'.format(i))
)
self.Build()
def RenderItem(self, itemRender, itemInfo):
if not itemInfo:
itemRender.SetUiItem('minecraft:air', 0)
return
itemName = itemInfo['itemName']
count = itemInfo['count']
itemRender.SetUiItem(itemName, 0)
if count <= 1:
itemRender.GetChildByName('label').SetVisible(False, False)
else:
itemRender.GetChildByName('label').SetVisible(True, False)
itemRender.GetChildByName('label').asLabel().SetText(str(count), False)
def Build(self):
self.RenderItem(
self.anyStemControlItemCells[0],
{'itemName': self.pageData.get('publicResult', ''), 'count': 1}
)
for _ in range(1, 4):
self.RenderItem(
self.anyStemControlItemCells[_],
self.pageData.get('publicStep', [{}, {}, {}, ])[_ - 1]
)
splitStep = self.pageData.get('splitStep', [])
for index in range(4):
control = self.splitStepControl[index]
control.SetVisible(True, False)
for j in range(1, 3):
infoIndex = index * 2 + j - 1
control_j = control.GetChildByName('recipe{}'.format(j)).GetChildByName('recipe')
if infoIndex >= len(splitStep):
control_j.SetVisible(False, False)
continue
control_j.SetVisible(True, False)
splitStepInfo = splitStep[infoIndex]
for k in range(1, 4):
itemCell = control_j.GetChildByName('item{}'.format(k)).asItemRenderer()
self.RenderItem(itemCell, splitStepInfo.get('items', [{}, {}, {}])[k - 1])
itemCell = control_j.GetChildByName('item4').asItemRenderer()
self.RenderItem(itemCell, {'itemName': splitStepInfo.get('result', ''), 'count': 1})
def LastPage(self, args):
if self.page <= 0: return
self.page -= 1
self.pageData = allCookRecipe[self.page]
self.Build()
def NextPage(self, args):
if self.page >= len(allCookRecipe) - 1: return
self.page += 1
self.pageData = allCookRecipe[self.page]
self.Build()
@buttonBinder(btte.TouchUp, RootScreenPathHead + '/close')
def Close(self, args):
clientApi.PopScreen()
@@ -0,0 +1 @@
import CookRecipe
@@ -0,0 +1,3 @@
import Client
import Server
import Ui