1
0
Files
wheat-server-kubejs/kubejs/startup_scripts/wheat_plus.js

1573 lines
41 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// priority: 0
const defaults = global.defaults;
const setBlockProps = global.setBlockProps;
const COLORS = global.COLORS;
const JSON_ASSETS = global.JSON_ASSETS;
const LOG_PREFIX = global.LOG_PREFIX;
/** 模组 ID */
const MOD_ID = 'wheat_plus';
/** 方块模型、纹理文件基础短路径 */
const P_BLOCK = `${MOD_ID}:block`;
/** 方块模型文件基础长路径 */
const P_BLOCK_MODEL = `${MOD_ID}:models/block`;
/** 方块透明纹理文件路径 */
const P_BLOCK_TRANSPARENT = `${P_BLOCK}/common/transparent`;
/** 物品模型、纹理文件基础短路径*/
const P_ITEM = `${MOD_ID}:item`;
/** 物品模型文件基础长路径 */
const P_ITEM_MODEL = `${MOD_ID}:models/item`;
/** 属于创造模式标签页 wheat_plus:blocks 的方块 ID 列表 */
const TAB_BLOCKS_ITEMS = [];
/** 属于创造模式标签页 wheat_plus:minecart 的方块 ID 列表 */
const TAB_MINECART_ITEMS = [];
/** 属于创造模式标签页 wheat_plus:roads 的方块 ID 列表 */
const TAB_ROADS_ITEMS = [];
console.info(`${LOG_PREFIX} 处理 ${MOD_ID} 相关内容`);
/**
* @description 注册方块 - 砖块
* @param {_RegistryBlock} event
*/
function regBlockBrick(event) {
console.info(`${LOG_PREFIX} 注册方块 - 砖块 - 开始`);
const blocks = [
{ name: 'brick_a', texture: 'brick/brick_a' },
{ name: 'brick_b', texture: 'brick/brick_b' },
{ name: 'brick_c', texture: 'brick/brick_c' },
{ name: 'brick_d', texture: 'brick/brick_d' },
];
blocks.forEach((config) => {
const id = `${MOD_ID}:${config.name}`;
const block = event.create(id);
TAB_BLOCKS_ITEMS.push(id);
setBlockProps(block, {
displayName: '砖块',
textureAll: `${P_BLOCK}/${config.texture}`,
});
});
console.info(`${LOG_PREFIX} 注册方块 - 砖块 - 完成`);
}
/**
* @description 注册方块 - 建筑和家具
* @param {_RegistryBlock} event
*/
function regBlockBuildingAndFurniture(event) {
console.info(`${LOG_PREFIX} 注册方块 - 建筑和家具 - 开始`);
const blockList = [
// 建筑方块
{
name: 'building_brick_a',
box: [0, 0, 0, 16, 16, 16, true],
label: '砖块(大三角)',
model: 'building/building_brick_a',
texture: '',
orientable: true,
},
{
name: 'building_brick_a_half_down',
box: [0, 0, 0, 16, 8, 16, true],
label: '砖块(大三角,下半部分)',
model: 'building/building_brick_a_half_down',
texture: '',
orientable: true,
},
{
name: 'building_brick_a_half_up',
box: [0, 8, 0, 16, 16, 16, true],
label: '砖块(大三角,上半部分)',
model: 'building/building_brick_a_half_up',
texture: '',
orientable: true,
},
{
name: 'building_brick_b',
box: [8, 0, 8, 16, 16, 16, true],
label: '砖块(小三角)',
model: 'building/building_brick_b',
texture: '',
orientable: true,
},
{
name: 'building_brick_c',
box: [0, 0, 0, 16, 16, 16, true],
label: '砖块(缺一角)',
model: 'building/building_brick_c',
texture: '',
orientable: true,
},
{
name: 'building_brick_d',
box: [0, 0, 12, 16, 16, 16, true],
label: '砖块砖块1/4',
model: 'building/building_brick_d',
texture: '',
orientable: true,
},
{
name: 'building_brick_d_tall',
box: [0, 0, 12, 16, 24, 16, true],
label: '砖块砖块1/4',
model: 'building/building_brick_d_tall',
texture: '',
orientable: true,
},
{
name: 'building_brick_e',
box: [0, 0, 12, 16, 16, 16, true],
label: '砖块青色陶瓦1/4',
model: 'building/building_brick_e',
texture: '',
orientable: true,
},
{
name: 'building_brick_e_tall',
box: [0, 0, 12, 16, 24, 16, true],
label: '砖块青色陶瓦1/4',
model: 'building/building_brick_e_tall',
texture: '',
orientable: true,
},
{
name: 'building_cover_a',
box: [0, 13, 0, 16, 15, 16, true],
label: '井盖',
model: 'building/building_cover_a',
texture: '',
orientable: false,
},
{
name: 'building_fence_a_bottom',
box: [0, 0, 0, 16, 32, 16, true],
label: '围栏(下)',
model: 'building/building_fence_a_bottom',
texture: '',
orientable: true,
},
{
name: 'building_fence_a_top',
box: [0, 0, 0, 16, 32, 16, true],
label: '围栏(上)',
model: 'building/building_fence_a_top',
texture: '',
orientable: true,
},
{
name: 'building_fence_b',
box: [0, 0, 7, 16, 16, 9, true],
label: '白色栅栏',
model: 'building/building_fence_b',
texture: '',
orientable: true,
},
{
name: 'building_fence_b_corner_inner',
box: [6, 0, 0, 16, 16, 10, true],
label: '白色栅栏(角落,向内)',
model: 'building/building_fence_b_corner_inner',
texture: '',
orientable: true,
},
{
name: 'building_fence_b_corner_outer',
box: [0, 0, 6, 10, 16, 16, true],
label: '白色栅栏(角落,向外)',
model: 'building/building_fence_b_corner_outer',
texture: '',
orientable: true,
},
{
name: 'building_ground_a',
box: [0, 0, 0, 16, 16, 16, true],
label: '地面(红色混凝土 + 磨制闪长岩)',
model: 'building/building_ground_a',
texture: '',
orientable: true,
},
{
name: 'building_iron_pole_a',
box: [6, 0, 6, 10, 16, 10, true],
label: '铁杆',
model: 'building/building_iron_pole_a',
texture: '',
orientable: false,
},
{
name: 'building_misc_a',
box: [0, 8, 14, 16, 16, 16, true],
label: '石英片',
model: 'building/building_misc_a',
texture: '',
orientable: true,
},
{
name: 'building_misc_b',
box: [0, 0, 0, 16, 16, 16, true],
label: '石英块',
model: 'building/building_misc_b',
texture: '',
orientable: true,
},
{
name: 'building_misc_c',
box: [0, 0, 0, 16, 16, 16, true],
label: '石英块',
model: 'building/building_misc_c',
texture: '',
orientable: true,
},
{
name: 'building_misc_d',
box: [0, 8, 8, 16, 16, 16, true],
label: '石英块',
model: 'building/building_misc_d',
texture: '',
orientable: true,
},
{
name: 'building_pillar_a',
box: [1, 0, 1, 15, 16, 15, true],
label: '柱子',
model: 'building/building_pillar_a',
texture: '',
orientable: false,
},
{
name: 'building_pillar_a_tall',
box: [1, 0, 1, 15, 24, 15, true],
label: '柱子(高)',
model: 'building/building_pillar_a_tall',
texture: '',
orientable: false,
},
{
name: 'building_pillar_b',
box: [-8, 0, -8, 24, 16, 24, true],
label: '粗柱子',
model: 'building/building_pillar_b',
texture: '',
orientable: false,
},
{
name: 'building_pillar_b_tall',
box: [-8, 0, -8, 24, 24, 24, true],
label: '粗柱子(高)',
model: 'building/building_pillar_b_tall',
texture: '',
orientable: false,
},
{
name: 'building_quartz_vertical_slab',
box: [0, 0, 8, 16, 16, 16, true],
label: '垂直石英台阶',
model: 'building/building_quartz_vertical_slab',
texture: '',
orientable: true,
},
{
name: 'building_rail_a',
box: [0, 6, 6, 16, 10, 10, true],
label: '铁扶手',
model: 'building/building_rail_a',
texture: '',
orientable: true,
},
{
name: 'building_rail_b',
box: [0, 0, 6, 16, 10, 10, true],
label: '铁扶手',
model: 'building/building_rail_b',
texture: '',
orientable: true,
},
{
name: 'building_rail_c',
box: [0, 0, 6, 10, 10, 10, true],
label: '铁扶手',
model: 'building/building_rail_c',
texture: '',
orientable: true,
},
{
name: 'building_rail_d',
box: [0, 6, 0, 10, 10, 10, true],
label: '铁扶手',
model: 'building/building_rail_d',
texture: '',
orientable: true,
},
{
name: 'building_rail_e',
box: [-3, 6, 0, 10, 10, 15, true],
label: '铁扶手(斜向)',
model: 'building/building_rail_e',
texture: '',
orientable: true,
},
{
name: 'building_rail_f',
box: [0, 6, -3, 15, 10, 10, true],
label: '铁扶手(斜向)',
model: 'building/building_rail_f',
texture: '',
orientable: true,
},
{
name: 'building_rail_f_extend',
box: [0, 6, 0, 16, 10, 16, true],
label: '铁扶手(斜向,扩展)',
model: 'building/building_rail_f_extend',
texture: '',
orientable: true,
},
{
name: 'building_rail_g',
box: [0, 0, 1, 16, 10, 16, true],
label: '铁扶手(石英)',
model: 'building/building_rail_g',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_a',
box: [0, 0, 0, 9, 16, 9, true],
label: '楼梯铁扶手',
model: 'building/building_stair_rail_a',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_a_half',
box: [0, 0, 0, 9, 8, 9, true],
label: '楼梯铁扶手(半高)',
model: 'building/building_stair_rail_a_half',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_b',
box: [0, 0, 7, 16, 16, 9, true],
label: '楼梯铁扶手',
model: 'building/building_stair_rail_b',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_b_half',
box: [0, 0, 7, 16, 8, 9, true],
label: '楼梯铁扶手(半高)',
model: 'building/building_stair_rail_b_half',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_c',
box: [0, 0, 7, 9, 16, 9, true],
label: '楼梯铁扶手',
model: 'building/building_stair_rail_c',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_c_half',
box: [0, 0, 7, 9, 8, 9, true],
label: '楼梯铁扶手(半高)',
model: 'building/building_stair_rail_c_half',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_d',
box: [0, 0, 7, 16, 16, 9, true],
label: '楼梯铁扶手',
model: 'building/building_stair_rail_d',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_e',
box: [0, 0, 7, 16, 16, 9, true],
label: '楼梯铁扶手',
model: 'building/building_stair_rail_e',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_f',
box: [0, 0, 7, 16, 16, 9, true],
label: '楼梯铁扶手',
model: 'building/building_stair_rail_f',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_g',
box: [7, 0, 7, 9, 16, 9, true],
label: '楼梯铁扶手(垂直杆子)',
model: 'building/building_stair_rail_g',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_h',
box: [0, 14, 7, 16, 16, 9, true],
label: '楼梯铁扶手(水平杆子)',
model: 'building/building_stair_rail_h',
texture: '',
orientable: true,
},
{
name: 'building_stair_rail_h_half',
box: [0, 6, 7, 16, 8, 9, true],
label: '楼梯铁扶手(水平杆子,半高)',
model: 'building/building_stair_rail_h_half',
texture: '',
orientable: true,
},
{
name: 'building_wall_a',
box: [0, 0, 0, 16, 16, 16, true],
label: '墙(石砖 + 石英)',
model: 'building/building_wall_a',
texture: '',
orientable: true,
},
{
name: 'building_wall_b',
box: [0, 0, 0, 16, 16, 16, true],
label: '墙(青色陶瓦 + 石英)',
model: 'building/building_wall_b',
texture: '',
orientable: true,
},
{
name: 'building_wall_c',
box: [0, 0, 3, 16, 16, 14, true],
label: '墙(石英)',
model: 'building/building_wall_c',
texture: '',
orientable: true,
},
{
name: 'building_wall_d',
box: [0, 0, 3, 16, 16, 16, true],
label: '墙(石英)',
model: 'building/building_wall_d',
texture: '',
orientable: true,
},
// 家具方块
{
name: 'furniture_birch_chair_a',
box: [4, 0, 4, 12, 16, 12, true],
label: '白桦木椅子',
model: 'furniture/furniture_birch_chair_a',
texture: '',
orientable: true,
},
{
name: 'furniture_birch_table_a',
box: [0, 0, 0, 16, 16, 16, true],
label: '白桦木桌子',
model: 'furniture/furniture_birch_table_a',
texture: '',
orientable: true,
},
{
name: 'furniture_faucet_a',
box: [0, 0, 5, 16, 9, 16, true],
label: '水龙头',
model: 'furniture/furniture_faucet_a',
texture: '',
orientable: true,
},
{
name: 'furniture_black_board_a',
box: [0, 0, 15, 16, 16, 16, true],
label: '黑板',
model: 'furniture/furniture_black_board_a',
texture: '',
orientable: true,
},
{
name: 'furniture_kitchen_counter_a',
box: [0, 0, 0, 16, 16, 16, true],
label: '白桦木厨房柜台',
model: 'furniture/furniture_kitchen_counter_a',
texture: '',
orientable: true,
},
{
name: 'furniture_kitchen_sink_a',
box: [0, 0, 0, 16, 16, 16, true],
label: '白桦木厨房水槽',
model: 'furniture/furniture_kitchen_sink_a',
texture: '',
orientable: true,
},
{
name: 'furniture_tv_a',
box: [0, 3, 13, 16, 16, 16, true],
label: '电视机',
model: 'furniture/furniture_tv_a',
texture: '',
orientable: true,
},
{
name: 'furniture_tv_b',
box: [0, 0, 0, 16, 16, 16, true],
label: '电视机',
model: 'furniture/furniture_tv_b',
texture: '',
orientable: true,
},
{
name: 'furniture_tv_c',
box: [3, 0, 2, 13, 14, 13, true],
label: '电视机',
model: 'furniture/furniture_tv_c',
texture: '',
orientable: true,
},
];
blockList.forEach((config) => {
const blockBox = config.box;
const blockLabel = config.label;
const blockName = config.name;
const blockId = `${MOD_ID}:${blockName}`;
const block = config.orientable ? event.create(blockId, 'cardinal') : event.create(blockId);
const modelPath0 = config.model;
const modelPath1 = modelPath0 ? `${P_BLOCK}/${modelPath0}` : '';
const texturePath0 = config.texture;
const texturePath1 = texturePath0 ? `${P_BLOCK}/${texturePath0}` : '';
TAB_BLOCKS_ITEMS.push(blockId);
// 设置基础属性
if (blockBox) {
setBlockProps(block, {
boxConfig: blockBox,
boxType: 'custom',
displayName: blockLabel,
isSolid: false,
modelPath: modelPath1 ? {
blockName: blockName,
blockNamespace: MOD_ID,
filePath: modelPath1,
} : null,
renderType: 'cutout',
textureAll: texturePath1,
});
} else {
setBlockProps(block, {
boxConfig: null,
boxType: 'full',
displayName: blockLabel,
isSolid: true,
modelPath: modelPath1 ? {
blockName: blockName,
blockNamespace: MOD_ID,
filePath: modelPath1,
} : null,
renderType: 'solid',
textureAll: texturePath1,
});
}
});
console.info(`${LOG_PREFIX} 注册方块 - 建筑和家具 - 完成`);
}
/**
* @description 注册方块 - 纯色方块
* @param {_RegistryBlock} event
*/
function regBlockColor(event) {
console.info(`${LOG_PREFIX} 注册方块 - 纯色方块 - 开始`);
const blocks = [
{
name: 'color_white_grow',
label: '纯色方块(白色,发光)',
color: [255, 255, 255, 1],
grow: true,
},
{
name: 'color_blue_grow',
label: '纯色方块(蓝色,发光)',
color: [0, 0, 255, 1],
grow: true,
},
{
name: 'color_green_grow',
label: '纯色方块(绿色,发光)',
color: [0, 255, 0, 1],
grow: true,
},
{
name: 'color_red_grow',
label: '纯色方块(红色)',
color: [255, 0, 0, 1],
grow: true,
},
{
name: 'color_black',
label: '纯色方块(黑色)',
color: [0, 0, 0, 1],
grow: false,
},
{
name: 'color_white',
label: '纯色方块(白色)',
color: [255, 255, 255, 1],
grow: false,
},
{
name: 'color_blue',
label: '纯色方块(蓝色)',
color: [0, 0, 255, 1],
grow: false,
},
{
name: 'color_green',
label: '纯色方块(绿色)',
color: [0, 255, 0, 1],
grow: false,
},
{
name: 'color_red',
label: '纯色方块(红色)',
color: [255, 0, 0, 1],
grow: false,
},
{
name: 'color_yellow',
label: '纯色方块(黄色)',
color: [255, 255, 0, 1],
grow: false,
},
{
name: 'color_39c5bb',
label: '纯色方块(#39C5BB',
color: [57, 197, 187, 1],
grow: false,
},
{
name: 'color_66ccff',
label: '纯色方块(#66CCFF',
color: [102, 204, 255, 1],
grow: false,
},
{
name: 'color_gz_line_one',
label: '纯色方块(广州地铁一号线,#F3D03E',
color: [243, 208, 62, 1],
grow: false,
},
{
name: 'color_gz_line_two',
label: '纯色方块(广州地铁二号线,#00629B',
color: [0, 98, 155, 1],
grow: false,
},
{
name: 'color_gz_line_three',
label: '纯色方块(广州地铁三号线,#ECA154',
color: [236, 161, 84, 1],
grow: false,
},
{
name: 'color_gz_line_four',
label: '纯色方块(广州地铁四号线,#00843D',
color: [0, 132, 61, 1],
grow: false,
},
{
name: 'color_gz_line_five',
label: '纯色方块(广州地铁五号线,#C5003E',
color: [197, 0, 62, 1],
grow: false,
},
{
name: 'color_gz_line_six',
label: '纯色方块(广州地铁六号线,#80225F',
color: [128, 34, 95, 1],
grow: false,
},
{
name: 'color_gz_line_seven',
label: '纯色方块(广州地铁七号线,#97D700',
color: [151, 215, 0, 1],
grow: false,
},
{
name: 'color_gz_line_eight',
label: '纯色方块(广州地铁八号线,#008C95',
color: [0, 140, 149, 1],
grow: false,
},
{
name: 'color_gz_line_nine',
label: '纯色方块(广州地铁九号线,#71CC98',
color: [113, 204, 152, 1],
grow: false,
},
];
const textureGrow = `${P_BLOCK}/common/color_grow`;
const textureNormal = `${P_BLOCK}/common/color_normal`;
blocks.forEach((config) => {
const id = `${MOD_ID}:${config.name}`;
const block = event.create(id);
const colorCfg = config.color;
const isGrow = config.grow;
TAB_BLOCKS_ITEMS.push(id);
setBlockProps(block, {
displayName: config.label,
isSolid: false,
lightLevel: (isGrow ? 1 : 0),
textureAll: (isGrow ? textureGrow : textureNormal),
});
block.color(0, Color.rgba.apply(Color, colorCfg));
block.item((item) => {
item.color(0, Color.rgba.apply(Color, colorCfg));
});
});
console.info(`${LOG_PREFIX} 注册方块 - 纯色方块 - 完成`);
}
/**
* @description 注册方块 - 灯(现代)
* @param {_RegistryBlock} event
*/
function regBlockLampModern(event) {
console.info(`${LOG_PREFIX} 注册方块 - 现代灯 - 开始`);
/** 颜色 key 列表 */
const keys = Object.keys(COLORS);
/** 父模型路径 */
const parentModel = `${P_BLOCK}/lamp/modern`;
keys.forEach((key) => {
const color = COLORS[key];
const blockName = `lamp_modern_${color.CODE}`;
const blockId = `${MOD_ID}:${blockName}`;
const block = event.create(blockId);
// 纹理文件路径前缀
// wheat_plus:block/lamp_modern/color_
const textureBase = `${P_BLOCK}/lamp_modern/${color.CODE}`;
JSON_ASSETS.push({
path: `${P_BLOCK_MODEL}/${blockName}`,
data: {
parent: parentModel,
textures: {
glow: `${textureBase}_glow`,
core: `${textureBase}_core`,
particle: `${textureBase}_core`,
},
},
});
TAB_BLOCKS_ITEMS.push(blockId);
setBlockProps(block, {
boxType: 'full',
displayName: `现代${color.LABEL_CN}`,
isSolid: false,
lightLevel: 1,
renderType: 'translucent',
soundType: 'glass',
});
});
console.info(`${LOG_PREFIX} 注册方块 - 现代灯 - 完成`);
}
/**
* @description 注册方块 - 灯(简约)
* @param {_RegistryBlock} event
*/
function regBlockLampSimple(event) {
console.info(`${LOG_PREFIX} 注册方块 - 简约灯 - 开始`);
const blocks = [
{
name: 'lamp_simple_large',
label: '简约灯(大)',
model: 'lamp/simple_large',
},
{
name: 'lamp_simple_medium',
label: '简约灯(中)',
model: 'lamp/simple_medium',
},
{
name: 'lamp_simple_small',
label: '简约灯(小)',
model: 'lamp/simple_small',
},
{
name: 'lamp_simple_stripe',
label: '简约灯(条状)',
model: 'lamp/simple_stripe',
},
];
blocks.forEach((config) => {
const blockName = config.name;
const blockId = `${MOD_ID}:${blockName}`;
const block = event.create(blockId, 'button');
// 用于替换默认模型
const modelJSON = { parent: `${P_BLOCK}/${config.model}` };
// 按钮方块默认状态
JSON_ASSETS.push({
path: `${P_BLOCK_MODEL}/${blockName}`,
data: modelJSON,
});
// 按钮方块按下状态
JSON_ASSETS.push({
path: `${P_BLOCK_MODEL}/${blockName}_pressed`,
data: modelJSON,
});
// 按钮物品状态
JSON_ASSETS.push({
path: `${P_ITEM_MODEL}/${blockName}`,
data: modelJSON,
});
TAB_BLOCKS_ITEMS.push(blockId);
setBlockProps(block, {
displayName: config.label,
lightLevel: 0.8,
renderType: 'translucent',
soundType: 'glass',
});
});
console.info(`${LOG_PREFIX} 注册方块 - 简约灯 - 完成`);
}
/**
* @description 注册方块 - 矿车方块
* @param {_RegistryBlock} event
*/
function regBlockMinecart(event) {
console.info(`${LOG_PREFIX} 注册方块 - 矿车方块 - 开始`);
/** 父模型路径 */
const modelParent = `${P_BLOCK}/minecart/main`;
/** 纹理文件路径前缀 */
const texturePrefix = `${P_BLOCK}/minecart/`;
const blockList = [
{ name: 'mtr_gz_gf_1', label: '广州地铁 - 广佛线' },
{ name: 'mtr_gz_gf_2', label: '广州地铁 - 广佛线' },
{ name: 'mtr_gz_l1_1', label: '广州地铁 - 一号线' },
{ name: 'mtr_gz_l1_2', label: '广州地铁 - 一号线' },
{ name: 'mtr_gz_l2_1', label: '广州地铁 - 二号线' },
{ name: 'mtr_gz_l3_1', label: '广州地铁 - 三号线' },
{ name: 'mtr_gz_l3_2', label: '广州地铁 - 三号线' },
{ name: 'mtr_gz_l4_1', label: '广州地铁 - 四号线' },
{ name: 'mtr_gz_l5_1', label: '广州地铁 - 五号线' },
{ name: 'mtr_gz_l6_1', label: '广州地铁 - 六号线' },
{ name: 'mtr_gz_l7_1', label: '广州地铁 - 七号线' },
{ name: 'mtr_gz_l8_1', label: '广州地铁 - 八号线' },
{ name: 'mtr_gz_l9_1', label: '广州地铁 - 九号线' },
{ name: 'mtr_gz_l13_1', label: '广州地铁 - 十三号线' },
{ name: 'mtr_gz_l14_1', label: '广州地铁 - 十四号线' },
{ name: 'mtr_gz_l21_1', label: '广州地铁 - 二十一号线' },
{ name: 'cr_ca25g_red', label: '中国铁路 - CA25G_RED' },
{ name: 'cr_cr200j_we', label: '中国铁路 - CR200J_WE' },
{ name: 'cr_cr200j_ze', label: '中国铁路 - CR200J_ZE' },
{ name: 'cr_kd25g_red', label: '中国铁路 - KD25G_RED' },
{ name: 'cr_rw25g_red', label: '中国铁路 - RW25G_RED' },
{ name: 'cr_rz25g_red', label: '中国铁路 - RZ25G_RED' },
{ name: 'cr_rz125z_bj', label: '中国铁路 - RZ125Z_BJ' },
{ name: 'cr_rz125z_gz', label: '中国铁路 - RZ125Z_GZ' },
{ name: 'cr_rz125z_new', label: '中国铁路 - RZ125Z_NEW' },
{ name: 'cr_rz125z_sh', label: '中国铁路 - RZ125Z_SH' },
{ name: 'cr_uz25g_red', label: '中国铁路 - UZ25G_RED' },
{ name: 'cr_xl25g_red', label: '中国铁路 - XL25G_RED' },
{ name: 'cr_yw22b_new', label: '中国铁路 - YW22B_NEW' },
{ name: 'cr_yw22b_old', label: '中国铁路 - YW22B_OLD' },
{ name: 'cr_yw25b_new', label: '中国铁路 - YW25B_NEW' },
{ name: 'cr_yw25b_old', label: '中国铁路 - YW25B_OLD' },
{ name: 'cr_yw25g_new', label: '中国铁路 - YW25G_NEW' },
{ name: 'cr_yw25g_red', label: '中国铁路 - YW25G_RED' },
{ name: 'cr_yw25k_blue', label: '中国铁路 - YW25K_BLUE' },
{ name: 'cr_yw25k_new', label: '中国铁路 - YW25K_NEW' },
{ name: 'cr_yw25t_new', label: '中国铁路 - YW25T_NEW' },
{ name: 'cr_yw25t_white', label: '中国铁路 - YW25T_WHITE' },
{ name: 'cr_yz22b_new', label: '中国铁路 - YZ22B_NEW' },
{ name: 'cr_yz22b_old', label: '中国铁路 - YZ22B_OLD' },
{ name: 'cr_yz25b_new', label: '中国铁路 - YZ25B_NEW' },
{ name: 'cr_yz25b_old', label: '中国铁路 - YZ25B_OLD' },
{ name: 'cr_yz25dt_jl', label: '中国铁路 - YZ25DT_JL' },
{ name: 'cr_yz25g_new', label: '中国铁路 - YZ25G_NEW' },
{ name: 'cr_yz25g_red', label: '中国铁路 - YZ25G_RED' },
{ name: 'cr_yz25k_blue', label: '中国铁路 - YZ25K_BLUE' },
{ name: 'cr_yz25k_new', label: '中国铁路 - YZ25K_NEW' },
{ name: 'cr_yz25t_new', label: '中国铁路 - YZ25T_NEW' },
{ name: 'cr_yz25t_white', label: '中国铁路 - YZ25T_WHITE' },
{ name: 'cr_yz25z_wh', label: '中国铁路 - YZ25Z_WH' },
];
blockList.forEach((config) => {
const blockName = config.name;
const blockId = `${MOD_ID}:minecart_${blockName}`;
const block = event.create(blockId, 'cardinal');
// 生成模型 JSON 文件
JSON_ASSETS.push({
path: `${P_BLOCK_MODEL}/minecart_${blockName}`,
data: {
parent: modelParent,
textures: {
main: `${texturePrefix}${blockName}`,
},
},
});
TAB_MINECART_ITEMS.push(blockId);
// 设置基础属性
setBlockProps(block, {
boxConfig: [-3, 0, -6, 19, 16, 22, true],
boxType: 'custom',
displayName: config.label,
hasCollision: false,
isSolid: false,
renderType: 'cutout',
soundType: 'metal',
});
});
console.info(`${LOG_PREFIX} 注册方块 - 矿车方块 - 完成`);
}
/**
* @description 注册方块 - 强化混凝土
* @param {_RegistryBlock} event
*/
function regBlockReinforcedConcrete(event) {
console.info(`${LOG_PREFIX} 注册方块 - 强化混凝土 - 开始`);
const keys = Object.keys(COLORS);
keys.forEach((key) => {
const color = COLORS[key];
const id = `${MOD_ID}:reinforced_concrete_${color.CODE}`;
const block = event.create(id);
const texture = `${P_BLOCK}/reinforced_concrete/${color.CODE}`;
TAB_BLOCKS_ITEMS.push(id);
setBlockProps(block, {
boxType: 'full',
displayName: `${color.LABEL_CN}强化混凝土`,
textureAll: texture,
});
});
// // 覆盖默认语言en_US
// JSON_ASSETS.push({
// path: 'minecraft:lang/en_us',
// data: {
// 'block.minecraft.ancient_debris': 'White Reinforced Concrete',
// 'block.minecraft.raw_copper_block': 'Gray Reinforced Concrete',
// 'block.minecraft.raw_iron_block': 'Light Gray Reinforced Concrete',
// },
// });
// // 覆盖默认语言zh_CN
// JSON_ASSETS.push({
// path: 'minecraft:lang/zh_cn',
// data: {
// 'block.minecraft.ancient_debris': '白色强化混凝土',
// 'block.minecraft.raw_copper_block': '灰色强化混凝土',
// 'block.minecraft.raw_iron_block': '淡灰色强化混凝土',
// },
// });
console.info(`${LOG_PREFIX} 注册方块 - 强化混凝土 - 完成`);
}
/**
* @description 注册方块 - 路
* @param {_RegistryBlock} event
*/
function regBlockRoad(event) {
console.info(`${LOG_PREFIX} 注册方块 - 路 - 开始`);
const blockList = [
{
name: 'road_blank',
label: '路 - 空白',
texturePath: 'common/transparent',
hasNormal: true, // 普通 / 直线
hasSlant: false, // 斜线
hasSide: false, // 侧边纹理
isBlank: true, // 空白
},
{
name: 'road_white',
label: '路 - 白色',
texturePath: 'road/content_white',
hasNormal: true,
hasSlant: false,
hasSide: false,
isBlank: true,
},
{
name: 'road_yellow',
label: '路 - 黄色',
texturePath: 'road/content_yellow',
hasNormal: true,
hasSlant: false,
hasSide: false,
isBlank: true,
},
{
name: 'road_line_single_white',
label: '路 - 单白线',
texturePath: 'road/line/single_white',
hasNormal: true,
hasSlant: true,
hasSide: true,
isBlank: false,
},
{
name: 'road_line_single_yellow',
label: '路 - 单黄线',
texturePath: 'road/line/single_yellow',
hasNormal: true,
hasSlant: true,
hasSide: true,
isBlank: false,
},
{
name: 'road_line_double_white',
label: '路 - 双白线',
texturePath: 'road/line/double_white',
hasNormal: true,
hasSlant: true,
hasSide: true,
isBlank: false,
},
{
name: 'road_line_double_yellow',
label: '路 - 双黄线',
texturePath: 'road/line/double_yellow',
hasNormal: true,
hasSlant: true,
hasSide: true,
isBlank: false,
},
];
blockList.forEach((config) => {
/** 方块名称 */
const blockName = config.name;
/** 方块文本 */
const label = (config.label || 'Unknown');
/** 纹理文件相对路径 */
const texturePath = config.texturePath;
/** 是否存在侧边纹理 */
const textureSide = config.hasSide;
// 完整,普通 / 直线
if (config.hasNormal) {
const blockId = `${blockName}_full`;
const fullId = `${MOD_ID}:${blockId}`;
const block = event.create(fullId);
const suffix = (config.isBlank ? '' : ',直线');
JSON_ASSETS.push({
path: `${P_BLOCK_MODEL}/${blockId}`,
data: {
parent: `${P_BLOCK}/road/base_full`,
textures: {
content: `${P_BLOCK}/${texturePath}`,
side: textureSide ? `${P_BLOCK}/${texturePath}` : P_BLOCK_TRANSPARENT,
},
},
});
TAB_ROADS_ITEMS.push(fullId);
setBlockProps(block, {
boxType: 'full',
displayName: `${label},完整${suffix}`,
renderType: 'cutout',
});
}
// 完整,斜线
if (config.hasSlant) {
const blockId = `${blockName}_full_slant`;
const fullId = `${MOD_ID}:${blockId}`;
const block = event.create(fullId, 'cardinal');
const suffix = ',斜线';
JSON_ASSETS.push({
path: `${P_BLOCK_MODEL}/${blockId}`,
data: {
parent: `${P_BLOCK}/road/base_full`,
textures: {
content: `${P_BLOCK}/${texturePath}_slant`,
side: textureSide ? `${P_BLOCK}/${texturePath}` : P_BLOCK_TRANSPARENT,
},
},
});
TAB_ROADS_ITEMS.push(fullId);
setBlockProps(block, {
boxType: 'full',
displayName: `${label},完整${suffix}`,
renderType: 'cutout',
});
}
// 一半,普通 / 直线
if (config.hasNormal) {
const blockId = `${blockName}_half`;
const fullId = `${MOD_ID}:${blockId}`;
const block = event.create(fullId);
const suffix = (config.isBlank ? '' : ',直线');
JSON_ASSETS.push({
path: `${P_BLOCK_MODEL}/${blockId}`,
data: {
parent: `${P_BLOCK}/road/base_half`,
textures: {
content: `${P_BLOCK}/${texturePath}`,
side: textureSide ? `${P_BLOCK}/${texturePath}` : P_BLOCK_TRANSPARENT,
},
},
});
TAB_ROADS_ITEMS.push(fullId);
setBlockProps(block, {
boxType: 'half',
displayName: `${label},一半${suffix}`,
renderType: 'cutout',
});
}
// 一半,斜线
if (config.hasSlant) {
const blockId = `${blockName}_half_slant`;
const fullId = `${MOD_ID}:${blockId}`;
const block = event.create(fullId, 'cardinal');
const suffix = ',斜线';
JSON_ASSETS.push({
path: `${P_BLOCK_MODEL}/${blockId}`,
data: {
parent: `${P_BLOCK}/road/base_half`,
textures: {
content: `${P_BLOCK}/${texturePath}_slant`,
side: textureSide ? `${P_BLOCK}/${texturePath}` : P_BLOCK_TRANSPARENT,
},
},
});
TAB_ROADS_ITEMS.push(fullId);
setBlockProps(block, {
boxType: 'half',
displayName: `${label},一半${suffix}`,
renderType: 'cutout',
});
}
});
console.info(`${LOG_PREFIX} 注册方块 - 路 - 完成`);
}
/**
* @description 注册方块 - 其他 - 基础
* @param {_RegistryBlock} event
*/
function regBlockOtherBasic(event) {
console.info(`${LOG_PREFIX} 注册方块 - 其他 - 基础 - 开始`);
const blocks = [
{
name: 'crate_a',
box: null,
label: '板条箱',
model: '',
texture: 'common/crate_a',
orientable: false,
},
{
name: 'isolation_pile_a',
box: [5, 0, 5, 11, 16, 11, true],
label: '隔离桩',
model: 'common/isolation_pile_a',
texture: '',
orientable: false,
},
{
name: 'road_sign_a_ns',
box: [1, 1, 1, 15, 15, 15, true],
label: '路牌NS',
model: 'road_sign/road_sign_a_ns',
texture: '',
orientable: false,
},
{
name: 'road_sign_a_we',
box: [1, 1, 1, 15, 15, 15, true],
label: '路牌WE',
model: 'road_sign/road_sign_a_we',
texture: '',
orientable: false,
},
{
name: 'road_sign_a_pole',
box: [1, 1, 1, 15, 15, 15, true],
label: '路牌(杆子)',
model: 'road_sign/road_sign_a_pole',
texture: '',
orientable: false,
},
{
name: 'station_sign_a',
box: [0, 0, 6, 16, 16, 10, true],
label: '站牌',
model: 'common/station_sign_a',
texture: '',
orientable: true,
},
{
name: 'statue_player_alex',
box: [0, 0, 5, 16, 32, 11, true],
label: '模型Alex',
model: 'statue/player_alex',
texture: '',
orientable: true,
},
{
name: 'statue_player_steve',
box: [0, 0, 5, 16, 32, 11, true],
label: '模型Steve',
model: 'statue/player_steve',
texture: '',
orientable: true,
},
{
name: 'ticket_machine_a',
box: [3, 0, 6, 13, 30, 16, true],
label: '售票机',
model: 'common/ticket_machine_a',
texture: '',
orientable: true,
},
{
name: 'traffic_light_a_pedestrian_ns',
box: [1, 1, 1, 15, 15, 15, true],
label: '人行道红绿灯NS',
model: 'traffic_light/traffic_light_a_pedestrian_ns',
texture: '',
orientable: true,
},
{
name: 'traffic_light_a_pedestrian_we',
box: [1, 1, 1, 15, 15, 15, true],
label: '人行道红绿灯WE',
model: 'traffic_light/traffic_light_a_pedestrian_we',
texture: '',
orientable: true,
},
{
name: 'traffic_light_a_traffic_h_ns',
box: [1, 1, 1, 15, 15, 15, true],
label: '交通红绿灯水平NS',
model: 'traffic_light/traffic_light_a_traffic_h_ns',
texture: '',
orientable: true,
},
{
name: 'traffic_light_a_traffic_h_we',
box: [1, 1, 1, 15, 15, 15, true],
label: '交通红绿灯水平WE',
model: 'traffic_light/traffic_light_a_traffic_h_we',
texture: '',
orientable: true,
},
{
name: 'traffic_light_a_traffic_v_ns',
box: [1, 1, 1, 15, 15, 15, true],
label: '交通红绿灯垂直NS',
model: 'traffic_light/traffic_light_a_traffic_v_ns',
texture: '',
orientable: true,
},
{
name: 'traffic_light_a_traffic_v_we',
box: [1, 1, 1, 15, 15, 15, true],
label: '交通红绿灯垂直we',
model: 'traffic_light/traffic_light_a_traffic_v_we',
texture: '',
orientable: true,
},
];
blocks.forEach((config) => {
const blockBox = config.box;
const blockLabel = config.label;
const blockName = config.name;
const blockId = `${MOD_ID}:${blockName}`;
const block = config.orientable ? event.create(blockId, 'cardinal') : event.create(blockId);
const modelPath0 = config.model;
const modelPath1 = modelPath0 ? `${P_BLOCK}/${modelPath0}` : '';
const texturePath0 = config.texture;
const texturePath1 = texturePath0 ? `${P_BLOCK}/${texturePath0}` : '';
TAB_BLOCKS_ITEMS.push(blockId);
// 设置基础属性
if (blockBox) {
setBlockProps(block, {
boxConfig: blockBox,
boxType: 'custom',
displayName: blockLabel,
isSolid: false,
modelPath: modelPath1 ? {
blockName: blockName,
blockNamespace: MOD_ID,
filePath: modelPath1,
} : null,
renderType: 'cutout',
textureAll: texturePath1,
});
} else {
setBlockProps(block, {
boxConfig: null,
boxType: 'full',
displayName: blockLabel,
isSolid: true,
modelPath: modelPath1 ? {
blockName: blockName,
blockNamespace: MOD_ID,
filePath: modelPath1,
} : null,
renderType: 'solid',
textureAll: texturePath1,
});
}
});
console.info(`${LOG_PREFIX} 注册方块 - 其他 - 基础 - 完成`);
}
/**
* @description 注册方块 - 其他 - 特殊
* @param {_RegistryBlock} event
*/
function regBlockOtherShaped(event) {
console.info(`${LOG_PREFIX} 注册方块 - 其他 - 特殊 - 开始`);
const blocks = [
{
name: 'gravel_stairs',
label: '沙砾楼梯',
texture: 'minecraft:block/gravel',
type: 'stairs',
},
{
name: 'gravel_slab',
label: '沙砾半砖',
texture: 'minecraft:block/gravel',
type: 'slab',
},
{
name: 'oak_leaves_wall',
label: '橡木树叶墙',
texture: `${P_BLOCK}/common/oak_leaves`,
type: 'wall',
},
];
blocks.forEach((config) => {
const id = `${MOD_ID}:${config.name}`;
const block = event.create(id, config.type);
TAB_BLOCKS_ITEMS.push(id);
// 设置基础属性
setBlockProps(block, {
displayName: config.label,
renderType: 'cutout_mipped',
textureAll: config.texture,
});
});
console.info(`${LOG_PREFIX} 注册方块 - 其他 - 特殊 - 完成`);
}
// 注册方块
StartupEvents.registry('block', regBlockBrick);
StartupEvents.registry('block', regBlockBuildingAndFurniture);
StartupEvents.registry('block', regBlockColor);
StartupEvents.registry('block', regBlockLampModern);
StartupEvents.registry('block', regBlockLampSimple);
StartupEvents.registry('block', regBlockMinecart);
StartupEvents.registry('block', regBlockRoad);
StartupEvents.registry('block', regBlockReinforcedConcrete);
StartupEvents.registry('block', regBlockOtherBasic);
StartupEvents.registry('block', regBlockOtherShaped);
// 注册创造模式标签页
StartupEvents.registry('creative_mode_tab', (event) => {
// 创建标签页
const tabBlocks = event.create('wheat_plus:blocks');
const tabMinecart = event.create('wheat_plus:minecart');
const tabRoads = event.create('wheat_plus:roads');
// 设置名称
tabBlocks.displayName('Wheat Plus | 方块');
tabMinecart.displayName('Wheat Plus | 矿车');
tabRoads.displayName('Wheat Plus | 路');
// 设置图标
tabBlocks.icon(() => {
return 'minecraft:hay_block';
});
tabMinecart.icon(() => {
return 'minecraft:minecart';
});
tabRoads.icon(() => {
return 'minecraft:gray_concrete';
});
// 设置内容
// 注:若通过该方式添加,顺序会乱
tabBlocks.content(() => {
return ['minecraft:paper'];
});
tabMinecart.content(() => {
return ['minecraft:paper'];
});
tabRoads.content(() => {
return ['minecraft:paper'];
});
});
StartupEvents.modifyCreativeTab('wheat_plus:blocks', (event) => {
event.add(TAB_BLOCKS_ITEMS);
});
StartupEvents.modifyCreativeTab('wheat_plus:minecart', (event) => {
event.add(TAB_MINECART_ITEMS);
});
StartupEvents.modifyCreativeTab('wheat_plus:roads', (event) => {
event.add(TAB_ROADS_ITEMS);
});
// 注册物品
// onEvent('item.registry', function (event) {
// console.info(`${LOG_PREFIX} 注册物品 - 开始`);
// console.info(`${LOG_PREFIX} 注册物品 - 完成`);
// });
// 注册声音
// onEvent('sound.registry', function (event) {
// console.info(`${LOG_PREFIX} 注册声音 - 开始`);
// console.info(`${LOG_PREFIX} 注册声音 - 完成`);
// });