菜单功能

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

@@ -1,5 +1,6 @@
# coding=utf-8
import time
from math import *
class GraduallySum(object):
@@ -72,7 +72,7 @@ class SystemTools(object):
"""
return self.ListenForEvent(namespace=MOD_NAME, systemName='BlueFoxClientSystem')
def ListenForEvent(self, eventName=None, namespace=MC_SYSTEM_NAMESPACE, systemName=MC_SYSTEM_NAME, priority=0):
def ListenForEvent(self, namespace=MC_SYSTEM_NAMESPACE, systemName=MC_SYSTEM_NAME, eventName=None, priority=0):
"""
监听事件,binding的服务端可监听服务端事件,binding的客户端则可监听客户端事件
:param eventName: 可选:事件名 or 不传入参数.若不传入参数,则将函数名称视为事件名称
@@ -99,13 +99,14 @@ class SystemTools(object):
self.bindingInstance.ListenForEvent(*eventName)
self.lastListened.add(eventName)
def FilterListener(self, eventName, namespace=MC_SYSTEM_NAMESPACE, systemName=MC_SYSTEM_NAME, priority=0):
def FilterListener(self, namespace=MC_SYSTEM_NAMESPACE, systemName=MC_SYSTEM_NAME, eventName=None, priority=0):
"""
滤过监听器, 通常用于优化代码可读性
"""
def Filter(*args):
# type:(Callable) -> Callable
def Listener(func):
_filter = EventFilter(func, self.bindingInstance, *args)
EventName = (namespace, systemName, eventName, _filter, _filter.Filter, priority)
@@ -5,7 +5,7 @@ import mod.client.extraClientApi as clientApi
import mod.server.extraServerApi as serverApi
if False:
pass
from typing import *
IsDebug = 1
@@ -155,4 +155,8 @@ if not serverApi.IsInServer():
nativeScreenManager = clientApi.GetNativeScreenManagerCls().instance() # type:clientApi.GetNativeScreenManagerCls()
viewBinder = clientApi.GetViewBinderCls()
baseScreen = clientApi.GetScreenNodeCls()
customUIScreenProxy = clientApi.GetUIScreenProxyCls()
customUIScreenProxy = clientApi.GetUIScreenProxyCls()
RootScreenPathHead = (
'variables_button_mappings_and_controls/safezone_screen_matrix/'
'inner_matrix/safezone_screen_panel/root_screen_panel'
)
@@ -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
@@ -1,3 +1,4 @@
# coding=utf-8
from BlueFoxTools.ModLoader import *
from xiangyemod.service.FeatureDispatcher import FeatureDispatcher
from xiangyemod.dongwuyangzhi.service.AnimalService import AnimalService
@@ -32,5 +33,8 @@ if not serverApi.IsInServer():
# 客户端进程: 导入客户端拦截系统(继承 BlueFoxClientSystem, 框架自动注册),
# 提前取消右键默认行为, 消除服务端拦截的"闪一下"
from xiangyemod.service.ClientFeatureDispatcher import ClientFeatureDispatcher
pass
LoadMod()
import System
LoadMod()
@@ -148,20 +148,20 @@ CUPBOARD_RULES = [
# 书柜_13(12本)=bookcase_2, 书柜_14(13本)=bookcase_1
# ============================================================
_BOOKCASE_CHAIN = [
"rtdd:bookcase", # 书柜_1(空)
"rtdd:bookcase_12", # 书柜_2(1本)
"rtdd:bookcase_11", # 书柜_3(2本)
"rtdd:bookcase_10", # 书柜_4(3本)
"rtdd:bookcase_9", # 书柜_5(4本)
"rtdd:bookcase_8", # 书柜_6(5本)
"rtdd:bookcase_7", # 书柜_7(6本)
"rtdd:bookcase_6", # 书柜_8(7本)
"rtdd:bookcase_5", # 书柜_9(8本)
"rtdd:bookcase_4", # 书柜_10(9本)
"rtdd:b_196", # 书柜_11(10本)
"rtdd:bookcase_3", # 书柜_12(11本)
"rtdd:bookcase_2", # 书柜_13(12本)
"rtdd:bookcase_1", # 书柜_14(13本)
"rtdd:bookcase", # 书柜_1(空)
"rtdd:bookcase_12", # 书柜_2(1本)
"rtdd:bookcase_11", # 书柜_3(2本)
"rtdd:bookcase_10", # 书柜_4(3本)
"rtdd:bookcase_9", # 书柜_5(4本)
"rtdd:bookcase_8", # 书柜_6(5本)
"rtdd:bookcase_7", # 书柜_7(6本)
"rtdd:bookcase_6", # 书柜_8(7本)
"rtdd:bookcase_5", # 书柜_9(8本)
"rtdd:bookcase_4", # 书柜_10(9本)
"rtdd:b_196", # 书柜_11(10本)
"rtdd:bookcase_3", # 书柜_12(11本)
"rtdd:bookcase_2", # 书柜_13(12本)
"rtdd:bookcase_1", # 书柜_14(13本)
]
BOOKCASE_RULES = []
@@ -195,10 +195,10 @@ for _i in range(len(_BOOKCASE_CHAIN) - 1, 0, -1):
# 药水架_3(两瓶)=lotion_2, 药水架_4(三瓶)=lotion_3
# ============================================================
_POTIONRACK_CHAIN = [
"rtdd:lotion_0", # 药水架_1(空)
"rtdd:lotion_1", # 药水架_2(一瓶)
"rtdd:lotion_2", # 药水架_3(两瓶)
"rtdd:lotion_3", # 药水架_4(三瓶)
"rtdd:lotion_0", # 药水架_1(空)
"rtdd:lotion_1", # 药水架_2(一瓶)
"rtdd:lotion_2", # 药水架_3(两瓶)
"rtdd:lotion_3", # 药水架_4(三瓶)
]
POTIONRACK_RULES = []
@@ -230,18 +230,18 @@ POTIONRACK_RULES.append({
# 可放: 锅铲(spatula) / 锅勺(potandspoon) / 菜刀(cleaver) / 炒锅(wok)
# ============================================================
KITCHENRACK_BLOCKS = [
"rtdd:kitchenwarerack", # 厨具架(空)
"rtdd:kitchenwareracka_1", # 单锅铲
"rtdd:kitchenwareracka_2", # 双锅铲
"rtdd:kitchenwareracka_3", # 锅铲+锅勺
"rtdd:kitchenwarerackb_1", # 单锅勺
"rtdd:kitchenwarerackb_2", # 双锅勺
"rtdd:kitchenwarerackc_1", # 单炒锅
"rtdd:kitchenwarerackc_2", # 炒锅+菜刀
"rtdd:kitchenwarerackd_1", # 单菜刀
"rtdd:kitchenwarerackd_2", # 菜刀+锅铲
"rtdd:kitchenwarerackd_3", # 双菜刀
"rtdd:kitchenwarerackd_4", # 菜刀+锅勺
"rtdd:kitchenwarerack", # 厨具架(空)
"rtdd:kitchenwareracka_1", # 单锅铲
"rtdd:kitchenwareracka_2", # 双锅铲
"rtdd:kitchenwareracka_3", # 锅铲+锅勺
"rtdd:kitchenwarerackb_1", # 单锅勺
"rtdd:kitchenwarerackb_2", # 双锅勺
"rtdd:kitchenwarerackc_1", # 单炒锅
"rtdd:kitchenwarerackc_2", # 炒锅+菜刀
"rtdd:kitchenwarerackd_1", # 单菜刀
"rtdd:kitchenwarerackd_2", # 菜刀+锅铲
"rtdd:kitchenwarerackd_3", # 双菜刀
"rtdd:kitchenwarerackd_4", # 菜刀+锅勺
]
# 可上架的厨具物品
@@ -257,30 +257,30 @@ KITCHENRACK_SINGLE_BLOCK = {
# 双件组合(sorted) -> 对应方块, 顺序无关(先放A再放B == 先放B再放A)
KITCHENRACK_COMBO_BLOCK = {
("rtdd:potandspoon", "rtdd:spatula"): "rtdd:kitchenwareracka_3", # 锅铲+锅勺
("rtdd:cleaver", "rtdd:wok"): "rtdd:kitchenwarerackc_2", # 炒锅+菜刀
("rtdd:cleaver", "rtdd:spatula"): "rtdd:kitchenwarerackd_2", # 菜刀+锅铲
("rtdd:cleaver", "rtdd:potandspoon"): "rtdd:kitchenwarerackd_4", # 菜刀+锅勺
("rtdd:spatula", "rtdd:spatula"): "rtdd:kitchenwareracka_2", # 双锅铲
("rtdd:potandspoon", "rtdd:spatula"): "rtdd:kitchenwareracka_3", # 锅铲+锅勺
("rtdd:cleaver", "rtdd:wok"): "rtdd:kitchenwarerackc_2", # 炒锅+菜刀
("rtdd:cleaver", "rtdd:spatula"): "rtdd:kitchenwarerackd_2", # 菜刀+锅铲
("rtdd:cleaver", "rtdd:potandspoon"): "rtdd:kitchenwarerackd_4", # 菜刀+锅勺
("rtdd:spatula", "rtdd:spatula"): "rtdd:kitchenwareracka_2", # 双锅铲
("rtdd:potandspoon", "rtdd:potandspoon"): "rtdd:kitchenwarerackb_2", # 双锅勺
("rtdd:cleaver", "rtdd:cleaver"): "rtdd:kitchenwarerackd_3", # 双菜刀
("rtdd:cleaver", "rtdd:cleaver"): "rtdd:kitchenwarerackd_3", # 双菜刀
}
# 方块状态 -> 厨具物品列表(名称即组合, 顺序按方块名从左到右, 最后一件=后放入)
# 用于"无记录"时推断(如创造模式直接放置带厨具的厨具架), 取回按此顺序后放先取
KITCHENRACK_BLOCK_ITEMS = {
"rtdd:kitchenwarerack": [], # 空
"rtdd:kitchenwareracka_1": ["rtdd:spatula"], # 单锅铲
"rtdd:kitchenwareracka_2": ["rtdd:spatula", "rtdd:spatula"], # 双锅铲
"rtdd:kitchenwarerack": [], # 空
"rtdd:kitchenwareracka_1": ["rtdd:spatula"], # 单锅铲
"rtdd:kitchenwareracka_2": ["rtdd:spatula", "rtdd:spatula"], # 双锅铲
"rtdd:kitchenwareracka_3": ["rtdd:spatula", "rtdd:potandspoon"], # 锅铲+锅勺
"rtdd:kitchenwarerackb_1": ["rtdd:potandspoon"], # 单锅勺
"rtdd:kitchenwarerackb_1": ["rtdd:potandspoon"], # 单锅勺
"rtdd:kitchenwarerackb_2": ["rtdd:potandspoon", "rtdd:potandspoon"], # 双锅勺
"rtdd:kitchenwarerackc_1": ["rtdd:wok"], # 单炒锅
"rtdd:kitchenwarerackc_2": ["rtdd:wok", "rtdd:cleaver"], # 炒锅+菜刀
"rtdd:kitchenwarerackd_1": ["rtdd:cleaver"], # 单菜刀
"rtdd:kitchenwarerackd_2": ["rtdd:cleaver", "rtdd:spatula"], # 菜刀+锅铲
"rtdd:kitchenwarerackd_3": ["rtdd:cleaver", "rtdd:cleaver"], # 双菜刀
"rtdd:kitchenwarerackd_4": ["rtdd:cleaver", "rtdd:potandspoon"], # 菜刀+锅勺
"rtdd:kitchenwarerackc_1": ["rtdd:wok"], # 单炒锅
"rtdd:kitchenwarerackc_2": ["rtdd:wok", "rtdd:cleaver"], # 炒锅+菜刀
"rtdd:kitchenwarerackd_1": ["rtdd:cleaver"], # 单菜刀
"rtdd:kitchenwarerackd_2": ["rtdd:cleaver", "rtdd:spatula"], # 菜刀+锅铲
"rtdd:kitchenwarerackd_3": ["rtdd:cleaver", "rtdd:cleaver"], # 双菜刀
"rtdd:kitchenwarerackd_4": ["rtdd:cleaver", "rtdd:potandspoon"], # 菜刀+锅勺
}
# ============================================================
@@ -339,11 +339,11 @@ FIREPLACE_RULES = [
# 与售卖盒不同: 破坏后记录随方块一起消失, 重新放置右键取不到东西。
# ============================================================
STORAGE_EMPTY_BLOCK = {}
for _b in _BOOKCASE_CHAIN[1:]: # 书柜_2~14(有书) -> 书柜_1(空)
for _b in _BOOKCASE_CHAIN[1:]: # 书柜_2~14(有书) -> 书柜_1(空)
STORAGE_EMPTY_BLOCK[_b] = _BOOKCASE_CHAIN[0]
for _b in _POTIONRACK_CHAIN[1:]: # 药水架_2~4(有药水) -> 药水架_1(空)
for _b in _POTIONRACK_CHAIN[1:]: # 药水架_2~4(有药水) -> 药水架_1(空)
STORAGE_EMPTY_BLOCK[_b] = _POTIONRACK_CHAIN[0]
for _b in KITCHENRACK_BLOCKS[1:]: # 厨具架各形态 -> 厨具架(空)
for _b in KITCHENRACK_BLOCKS[1:]: # 厨具架各形态 -> 厨具架(空)
STORAGE_EMPTY_BLOCK[_b] = KITCHENRACK_BLOCKS[0]
# ============================================================
@@ -81,12 +81,16 @@ class ClientFeatureDispatcher(BlueFoxClientSystem):
def Destroy(self):
print "===== ClientFeatureDispatcher Destroy ====="
self.UnListenForEvent(clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemUseOnEvent", self, self.OnItemUseOn)
self.UnListenForEvent(clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemTryUseEvent", self, self.OnItemTryUse)
self.UnListenForEvent(
clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemUseOnEvent", self, self.OnItemUseOn
)
self.UnListenForEvent(
clientApi.GetEngineNamespace(),
clientApi.GetEngineSystemName(),
"ClientItemTryUseEvent", self, self.OnItemTryUse
)
# ============================================================================
# 入口1: 手持物品右键方块表面 -> 白名单组合才 ret (取消默认放置/吃)
@@ -128,7 +132,7 @@ class ClientFeatureDispatcher(BlueFoxClientSystem):
if blockName and (itemName, blockName) in BLOCKUSE_CANCEL:
args["ret"] = True
self._blockCd[cdKey] = time.time()
self._blockCdPlayer[pId] = time.time() # 玩家级短标记, 取消随后 0.2s 内投掷动画
self._blockCdPlayer[pId] = time.time() # 玩家级短标记, 取消随后 0.2s 内投掷动画
self.NotifyToServer(BLOCK_USE_REQUEST, {
"playerId": pId,
"x": args.get("x"), "y": args.get("y"), "z": args.get("z"),
@@ -228,17 +232,16 @@ class ClientFeatureDispatcher(BlueFoxClientSystem):
# 饭团/水煮蛋/豆腐 在 ITEM_USE_ON_CANCEL_BY_ITEM 里(EAT_ITEMS)
if itemName in ITEM_USE_ON_CANCEL_BY_ITEM:
args["cancel"] = True
# 投掷/使用抑制: 玩家刚做过 BlockUse 转换(0.2s 内, 如放蛋/放料), 引擎重置右键会立即
# 再触发一次"投掷/使用"动画(鸡蛋右键鸡窝放蛋 -> 扔蛋)。此窗口内若手持 BlockUse 可投掷/
# 可用物品, 直接 cancel 掉投掷; 窗口过后放行(对地扔蛋正常)。
# 注意: 玩家级标记(pId)而非坐标——投掷事件无目标方块坐标, 只有玩家。0.2s 极短且仅在
# 刚做完方块转换后生效, 不会影响玩家正常对地面/空中扔蛋。
_pId = args.get("playerId") or args.get("entityId")
_pc = self._blockCdPlayer.get(_pId, 0)
if _pc and (time.time() - _pc) < 0.2 and itemName in BLOCKUSE_CANCEL_ITEMS:
args["cancel"] = True
# 投掷/使用抑制: 玩家刚做过 BlockUse 转换(0.2s 内, 如放蛋/放料), 引擎重置右键会立即
# 再触发一次"投掷/使用"动画(鸡蛋右键鸡窝放蛋 -> 扔蛋)。此窗口内若手持 BlockUse 可投掷/
# 可用物品, 直接 cancel 掉投掷; 窗口过后放行(对地扔蛋正常)。
# 注意: 玩家级标记(pId)而非坐标——投掷事件无目标方块坐标, 只有玩家。0.2s 极短且仅在
# 刚做完方块转换后生效, 不会影响玩家正常对地面/空中扔蛋。
_pId = args.get("playerId") or args.get("entityId")
_pc = self._blockCdPlayer.get(_pId, 0)
if _pc and (time.time() - _pc) < 0.2 and itemName in BLOCKUSE_CANCEL_ITEMS:
args["cancel"] = True
# 注: 客户端系统需在客户端进程被实例化。modMain 只能在服务端 import 服务端
# 系统; 客户端系统由 BlueFox 框架自动注册其子类。为确保本类被加载, 需在
# modMain 客户端分支(IsInServer()==False)里 import 本模块。
# modMain 客户端分支(IsInServer()==False)里 import 本模块。
@@ -0,0 +1,12 @@
{
"format_version": "1.10",
"minecraft:item": {
"components": {
"minecraft:max_stack_size": 1
},
"description": {
"category": "items",
"identifier": "rtdd:recipe_book"
}
}
}
@@ -0,0 +1,11 @@
{
"format_version": "1.10",
"minecraft:item": {
"components": {
"minecraft:icon": "rtdd:recipe_book"
},
"description": {
"identifier": "rtdd:recipe_book"
}
}
}
+1
View File
@@ -1243,5 +1243,6 @@ item.rtdd:vegetable.name=青菜碎
item.rtdd:qingcai.name=青菜
item.rtdd:rice_balls.name=饭团
item.rtdd:boiled_egg.name=水煮蛋
item.rtdd:recipe_book.name=乡野装饰:菜谱
entity.villager_v2.name=村民
item.spawn_egg.entity.villager_v2.name=村民生物蛋
@@ -7,6 +7,9 @@
"beef_tenderloin": {
"textures": "textures/items/beef_tenderloin"
},
"boiled_egg": {
"textures": "textures/items/boiled_egg"
},
"brownrice": {
"textures": "textures/items/rice"
},
@@ -19,6 +22,15 @@
"crab": {
"textures": "textures/items/crab"
},
"cream_0": {
"textures": "textures/items/cream_0"
},
"crushed_carrots": {
"textures": "textures/items/crushed_carrots"
},
"crushed_scallions": {
"textures": "textures/items/crushed_scallions"
},
"crushedgarlic": {
"textures": "textures/items/crushedgarlic"
},
@@ -76,9 +88,24 @@
"potandspoon": {
"textures": "textures/items/pot_and_spoon"
},
"potato_wedges": {
"textures": "textures/items/potato_wedges"
},
"qingcai": {
"textures": "textures/items/meiqiedeqingcai"
},
"rawsquidwhiskersr": {
"textures": "textures/items/rawsquidwhiskersr"
},
"rice_balls": {
"textures": "textures/items/rice_balls"
},
"rice_seeds": {
"textures": "textures/items/rice_seeds"
},
"rtdd:recipe_book": {
"textures": "textures/items/rtdd/rtdd_recipe_book"
},
"rtdd:soybean": {
"textures": "textures/items/soybean"
},
@@ -106,32 +133,8 @@
"thedriedfish": {
"textures": "textures/items/thedriedfish"
},
"boiled_egg": {
"textures": "textures/items/boiled_egg"
},
"cream_0": {
"textures": "textures/items/cream_0"
},
"crushed_carrots": {
"textures": "textures/items/crushed_carrots"
},
"crushed_scallions": {
"textures": "textures/items/crushed_scallions"
},
"potato_wedges": {
"textures": "textures/items/potato_wedges"
},
"rice_balls": {
"textures": "textures/items/rice_balls"
},
"rice_seeds": {
"textures": "textures/items/rice_seeds"
},
"vegetable": {
"textures": "textures/items/vegetable"
},
"qingcai": {
"textures": "textures/items/meiqiedeqingcai"
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+5
View File
@@ -0,0 +1,5 @@
{
"ui_defs": [
"ui/rtdd_caipu.json"
]
}
File diff suppressed because it is too large. Load diff