diff --git a/kubejs/client_scripts/_main_.js b/kubejs/client_scripts/_main_.js index 8acfb66..81549ce 100644 --- a/kubejs/client_scripts/_main_.js +++ b/kubejs/client_scripts/_main_.js @@ -1,3 +1,21 @@ // priority: 100 -console.info(`${global.LOG_PREFIX} 加载客户端内容`); +const JSON_ASSETS = global.JSON_ASSETS; +const LOG_PREFIX = global.LOG_PREFIX; + +console.info(`${LOG_PREFIX} 加载客户端内容`); + +// 生成客户端资源 +// event.add(new ResourceLocation(`<命名空间>:<资源相对路径>`), `JSON`); +// event.add(new ResourceLocation(`minecraft:models/block/stone`), {}); +onEvent('client.generate_assets', (event) => { + + console.info(`${LOG_PREFIX} 生成客户端资源 - 开始`); + + JSON_ASSETS.forEach((item) => { + event.add(new ResourceLocation(item.PATH), item.DATA); + }); + + console.info(`${LOG_PREFIX} 生成客户端资源 - 完成`); + +}); diff --git a/kubejs/probe/user/constants.d.ts b/kubejs/probe/user/constants.d.ts index 80d7ed8..626a392 100644 --- a/kubejs/probe/user/constants.d.ts +++ b/kubejs/probe/user/constants.d.ts @@ -24,6 +24,12 @@ declare const global: { }; }; + /** 需要在 `client.generate_assets` 生成的 JSON 文件 */ + JSON_ASSETS: Array<{ + PATH: string; + DATA: Internal.JsonElement; + }>; + /** 日志前缀 */ LOG_PREFIX: string; diff --git a/kubejs/startup_scripts/_main_.js b/kubejs/startup_scripts/_main_.js index c03e948..c73905c 100644 --- a/kubejs/startup_scripts/_main_.js +++ b/kubejs/startup_scripts/_main_.js @@ -118,6 +118,7 @@ global.COLORS = { }, }; +global.JSON_ASSETS = []; global.LOG_PREFIX = '[KubeJS]'; console.info(`${global.LOG_PREFIX} 启动`); diff --git a/kubejs/startup_scripts/wheat_plus.js b/kubejs/startup_scripts/wheat_plus.js index 21975ac..a59a6f9 100644 --- a/kubejs/startup_scripts/wheat_plus.js +++ b/kubejs/startup_scripts/wheat_plus.js @@ -2,6 +2,7 @@ const defaults = global.defaults; const COLORS = global.COLORS; +const JSON_ASSETS = global.JSON_ASSETS; const LOG_PREFIX = global.LOG_PREFIX; /** @@ -27,7 +28,7 @@ const LOG_PREFIX = global.LOG_PREFIX; * - `cutout`: required for blocks with texture like glass * - `translucent`: required for blocks like stained glass * @typedef B.RenderType - * @type {'solid'|'cutout'|'translucent'} + * @type {'solid'|'cutout'|'cutout_mipped'|'translucent'} */ /** 模组 ID */ @@ -44,12 +45,14 @@ const PATH_TEXTURE = `${MOD_ID}:block`; * @param {B.Builder} block * @param {object} options * @param {B.BoxType} options.boxType 碰撞箱类型 + * @param {boolean} options.collision 开启碰撞箱 * @param {string} options.displayName * @param {number} options.hardness * @param {boolean} options.isFull 是否完整方块 * @param {boolean} options.isOpaque 是否不透明 * @param {number} options.lightLevel 范围 0 ~ 1 * @param {B.Material} options.material + * @param {string} options.modelPath 模型文件路径 * @param {B.RenderType} options.renderType * @param {number} options.resistance */ @@ -65,12 +68,14 @@ const setBlockProps = function (block, options) { } const boxType = defaults(options.boxType, ''); + const collision = defaults(options.collision, true); const displayName = defaults(options.displayName, ''); const hardness = defaults(options.hardness, 8); const isFull = defaults(options.isFull, true); const isOpaque = defaults(options.isOpaque, true); const lightLevel = defaults(options.lightLevel, 0); const material = defaults(options.material, 'stone'); + const modelPath = defaults(options.modelPath, ''); const renderType = defaults(options.renderType, 'solid'); const resistance = defaults(options.resistance, 16); @@ -84,6 +89,14 @@ const setBlockProps = function (block, options) { block.box(0, 0, 0, 16, 8, 16, true); } + if (!collision) { + block.noCollision(); + } + + if (modelPath) { + block.model(modelPath); + } + block.fullBlock(isFull); block.hardness(hardness); block.lightLevel(lightLevel); @@ -316,10 +329,10 @@ onEvent('block.registry', (event) => { }); -// 注册方块 - 灯 +// 注册方块 - 现代灯 onEvent('block.registry', (event) => { - console.info(`${LOG_PREFIX} 注册方块 - 灯 - 开始`); + console.info(`${LOG_PREFIX} 注册方块 - 现代灯 - 开始`); const keys = Object.keys(COLORS); @@ -355,7 +368,75 @@ onEvent('block.registry', (event) => { }); - console.info(`${LOG_PREFIX} 注册方块 - 灯 - 完成`); + console.info(`${LOG_PREFIX} 注册方块 - 现代灯 - 完成`); + +}); + +// 注册方块 - 简约灯 +onEvent('block.registry', (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, 'stone_button'); + + // 用于替换默认模型 + const modelJSON = { parent: `${PATH_MODEL}/${config.model}` }; + + setBlockProps(block, { + displayName: config.label, + lightLevel: 0.8, + material: 'glass', + renderType: 'translucent', + }); + + // 按钮方块默认状态 + JSON_ASSETS.push({ + PATH: `${MOD_ID}:models/block/${blockName}`, + DATA: modelJSON, + }); + + // 按钮方块按下状态 + JSON_ASSETS.push({ + PATH: `${MOD_ID}:models/block/${blockName}_pressed`, + DATA: modelJSON, + }); + + // 按钮物品状态 + JSON_ASSETS.push({ + PATH: `${MOD_ID}:models/item/${blockName}`, + DATA: modelJSON, + }); + + }); + + console.info(`${LOG_PREFIX} 注册方块 - 简约灯 - 完成`); }); diff --git a/resourcepack/assets/wheat_plus/models/block/lamp/simple_large.json b/resourcepack/assets/wheat_plus/models/block/lamp/simple_large.json new file mode 100644 index 0000000..bbee5f7 --- /dev/null +++ b/resourcepack/assets/wheat_plus/models/block/lamp/simple_large.json @@ -0,0 +1,54 @@ +{ + "credit": "Created by Frost-ZX using Blockbench.", + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "block/gray_concrete", + "base": "block/gray_concrete", + "core": "wheat_plus:block/lamp_common/white_core", + "glow": "wheat_plus:block/lamp_common/white_glow" + }, + "elements": [ + { + "name": "core", + "from": [3, 1.5, 3], + "to": [13, 3.5, 13], + "shade": false, + "faces": { + "north": {"uv": [3, 13, 13, 15], "texture": "#core"}, + "east": {"uv": [3, 13, 13, 15], "texture": "#core"}, + "south": {"uv": [3, 13, 13, 15], "texture": "#core"}, + "west": {"uv": [3, 13, 13, 15], "texture": "#core"}, + "up": {"uv": [3, 3, 13, 13], "texture": "#core"}, + "down": {"uv": [3, 3, 13, 13], "texture": "#core"} + } + }, + { + "name": "glow", + "from": [2, 1.5, 2], + "to": [14, 4.5, 14], + "shade": false, + "faces": { + "north": {"uv": [2, 12, 14, 15], "texture": "#glow"}, + "east": {"uv": [2, 12, 14, 15], "texture": "#glow"}, + "south": {"uv": [2, 12, 14, 15], "texture": "#glow"}, + "west": {"uv": [2, 12, 14, 15], "texture": "#glow"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#glow"}, + "down": {"uv": [2, 2, 14, 14], "texture": "#glow"} + } + }, + { + "name": "base", + "from": [1, 0, 1], + "to": [15, 1.5, 15], + "faces": { + "north": {"uv": [1, 15, 15, 16], "texture": "#base"}, + "east": {"uv": [1, 15, 15, 16], "texture": "#base"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#base"}, + "west": {"uv": [1, 15, 15, 16], "texture": "#base"}, + "up": {"uv": [1, 1, 15, 15], "texture": "#base"}, + "down": {"uv": [1, 1, 15, 15], "texture": "#base"} + } + } + ] +} \ No newline at end of file diff --git a/resourcepack/assets/wheat_plus/models/block/lamp/simple_medium.json b/resourcepack/assets/wheat_plus/models/block/lamp/simple_medium.json new file mode 100644 index 0000000..1ce1b13 --- /dev/null +++ b/resourcepack/assets/wheat_plus/models/block/lamp/simple_medium.json @@ -0,0 +1,54 @@ +{ + "credit": "Created by Frost-ZX using Blockbench.", + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "block/gray_concrete", + "base": "block/gray_concrete", + "core": "wheat_plus:block/lamp_common/white_core", + "glow": "wheat_plus:block/lamp_common/white_glow" + }, + "elements": [ + { + "name": "core", + "from": [4.5, 1, 4.5], + "to": [11.5, 3, 11.5], + "shade": false, + "faces": { + "north": {"uv": [4.5, 13, 11.5, 15], "texture": "#core"}, + "east": {"uv": [4.5, 13, 11.5, 15], "texture": "#core"}, + "south": {"uv": [4.5, 13, 11.5, 15], "texture": "#core"}, + "west": {"uv": [4.5, 13, 11.5, 15], "texture": "#core"}, + "up": {"uv": [4.5, 4.5, 11.5, 11.5], "texture": "#core"}, + "down": {"uv": [4.5, 4.5, 11.5, 11.5], "texture": "#core"} + } + }, + { + "name": "glow", + "from": [4, 1, 4], + "to": [12, 3.5, 12], + "shade": false, + "faces": { + "north": {"uv": [4, 12.5, 12, 15], "texture": "#glow"}, + "east": {"uv": [4, 12.5, 12, 15], "texture": "#glow"}, + "south": {"uv": [4, 12.5, 12, 15], "texture": "#glow"}, + "west": {"uv": [4, 12.5, 12, 15], "texture": "#glow"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#glow"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#glow"} + } + }, + { + "name": "base", + "from": [3.5, 0, 3.5], + "to": [12.5, 1, 12.5], + "faces": { + "north": {"uv": [3.5, 15, 12.5, 16], "texture": "#base"}, + "east": {"uv": [3.5, 15, 12.5, 16], "texture": "#base"}, + "south": {"uv": [3.5, 15, 12.5, 16], "texture": "#base"}, + "west": {"uv": [3.5, 15, 12.5, 16], "texture": "#base"}, + "up": {"uv": [3.5, 3.5, 12.5, 12.5], "texture": "#base"}, + "down": {"uv": [3.5, 3.5, 12.5, 12.5], "texture": "#base"} + } + } + ] +} \ No newline at end of file diff --git a/resourcepack/assets/wheat_plus/models/block/lamp/simple_small.json b/resourcepack/assets/wheat_plus/models/block/lamp/simple_small.json new file mode 100644 index 0000000..4c0f8c3 --- /dev/null +++ b/resourcepack/assets/wheat_plus/models/block/lamp/simple_small.json @@ -0,0 +1,54 @@ +{ + "credit": "Created by Frost-ZX using Blockbench.", + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "block/gray_concrete", + "base": "block/gray_concrete", + "core": "wheat_plus:block/lamp_common/white_core", + "glow": "wheat_plus:block/lamp_common/white_glow" + }, + "elements": [ + { + "name": "core", + "from": [7, 0.5, 7], + "to": [9, 1, 9], + "shade": false, + "faces": { + "north": {"uv": [7, 15, 9, 15.5], "texture": "#core"}, + "east": {"uv": [7, 15, 9, 15.5], "texture": "#core"}, + "south": {"uv": [7, 15, 9, 15.5], "texture": "#core"}, + "west": {"uv": [7, 15, 9, 15.5], "texture": "#core"}, + "up": {"uv": [7, 7, 9, 9], "texture": "#core"}, + "down": {"uv": [7, 7, 9, 9], "texture": "#core"} + } + }, + { + "name": "glow", + "from": [6.75, 0.25, 6.75], + "to": [9.25, 1.25, 9.25], + "shade": false, + "faces": { + "north": {"uv": [6.75, 14.75, 9.25, 15.75], "texture": "#glow"}, + "east": {"uv": [6.75, 14.75, 9.25, 15.75], "texture": "#glow"}, + "south": {"uv": [6.75, 14.75, 9.25, 15.75], "texture": "#glow"}, + "west": {"uv": [6.75, 14.75, 9.25, 15.75], "texture": "#glow"}, + "up": {"uv": [6.75, 6.75, 9.25, 9.25], "texture": "#glow"}, + "down": {"uv": [6.75, 6.75, 9.25, 9.25], "texture": "#glow"} + } + }, + { + "name": "base", + "from": [6.5, 0, 6.5], + "to": [9.5, 0.5, 9.5], + "faces": { + "north": {"uv": [6.5, 15.5, 9.5, 16], "texture": "#base"}, + "east": {"uv": [6.5, 15.5, 9.5, 16], "texture": "#base"}, + "south": {"uv": [6.5, 15.5, 9.5, 16], "texture": "#base"}, + "west": {"uv": [6.5, 15.5, 9.5, 16], "texture": "#base"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "texture": "#base"}, + "down": {"uv": [6.5, 6.5, 9.5, 9.5], "texture": "#base"} + } + } + ] +} \ No newline at end of file diff --git a/resourcepack/assets/wheat_plus/models/block/lamp/simple_stripe.json b/resourcepack/assets/wheat_plus/models/block/lamp/simple_stripe.json new file mode 100644 index 0000000..4eb9221 --- /dev/null +++ b/resourcepack/assets/wheat_plus/models/block/lamp/simple_stripe.json @@ -0,0 +1,54 @@ +{ + "credit": "Created by Frost-ZX using Blockbench.", + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "block/gray_concrete", + "base": "block/gray_concrete", + "core": "wheat_plus:block/lamp_common/white_core", + "glow": "wheat_plus:block/lamp_common/white_glow" + }, + "elements": [ + { + "name": "core", + "from": [3, 1, 7], + "to": [13, 2, 9], + "shade": false, + "faces": { + "north": {"uv": [3, 14, 13, 15], "texture": "#core"}, + "east": {"uv": [7, 14, 9, 15], "texture": "#core"}, + "south": {"uv": [3, 14, 13, 15], "texture": "#core"}, + "west": {"uv": [7, 14, 9, 15], "texture": "#core"}, + "up": {"uv": [3, 7, 13, 9], "texture": "#core"}, + "down": {"uv": [3, 7, 13, 9], "texture": "#core"} + } + }, + { + "name": "glow", + "from": [2.5, 1, 6.5], + "to": [13.5, 2.5, 9.5], + "shade": false, + "faces": { + "north": {"uv": [2.5, 13.5, 13.5, 15], "texture": "#glow"}, + "east": {"uv": [6.5, 13.5, 9.5, 15], "texture": "#glow"}, + "south": {"uv": [2.5, 13.5, 13.5, 15], "texture": "#glow"}, + "west": {"uv": [6.5, 13.5, 9.5, 15], "texture": "#glow"}, + "up": {"uv": [2.5, 6.5, 13.5, 9.5], "texture": "#glow"}, + "down": {"uv": [2.5, 6.5, 13.5, 9.5], "texture": "#glow"} + } + }, + { + "name": "base", + "from": [2, 0, 6], + "to": [14, 1, 10], + "faces": { + "north": {"uv": [2, 15, 14, 16], "texture": "#base"}, + "east": {"uv": [6, 15, 10, 16], "texture": "#base"}, + "south": {"uv": [2, 15, 14, 16], "texture": "#base"}, + "west": {"uv": [6, 15, 10, 16], "texture": "#base"}, + "up": {"uv": [2, 6, 14, 10], "texture": "#base"}, + "down": {"uv": [2, 6, 14, 10], "texture": "#base"} + } + } + ] +} \ No newline at end of file diff --git a/resourcepack/assets/wheat_plus/textures/block/lamp_common/white_core.png b/resourcepack/assets/wheat_plus/textures/block/lamp_common/white_core.png new file mode 100644 index 0000000..c53cd0f Binary files /dev/null and b/resourcepack/assets/wheat_plus/textures/block/lamp_common/white_core.png differ diff --git a/resourcepack/assets/wheat_plus/textures/block/lamp_common/white_glow.png b/resourcepack/assets/wheat_plus/textures/block/lamp_common/white_glow.png new file mode 100644 index 0000000..983a01e Binary files /dev/null and b/resourcepack/assets/wheat_plus/textures/block/lamp_common/white_glow.png differ diff --git a/resourcepack/assets/wheat_plus/textures/block/lamp_common/white_glow_l.png b/resourcepack/assets/wheat_plus/textures/block/lamp_common/white_glow_l.png new file mode 100644 index 0000000..5c3df36 Binary files /dev/null and b/resourcepack/assets/wheat_plus/textures/block/lamp_common/white_glow_l.png differ