1
0

17 Commits

42 changed files with 74991 additions and 70188 deletions
File diff suppressed because it is too large Load Diff
+651
View File
@@ -0,0 +1,651 @@
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"definitions": {
"typePrimitive": {
"type": "object",
"required": [
"type",
"name"
],
"properties": {
"type": {
"const": "type:primitive",
"description": "A primitive type"
},
"name": {
"type": "string"
}
}
},
"typeClass": {
"type": "object",
"required": [
"type",
"name"
],
"properties": {
"type": {
"const": "type:class",
"description": "A class type"
},
"name": {
"type": "string",
"$ref": "probe.class-definitions.json#/definitions/typeClassname"
}
}
},
"typeVariable": {
"type": "object",
"required": [
"type",
"name"
],
"properties": {
"type": {
"const": "type:variable",
"description": "A variable type"
},
"name": {
"type": "string"
}
}
},
"typeParameterized": {
"type": "object",
"required": [
"type",
"base",
"params"
],
"properties": {
"type": {
"const": "type:parameterized"
},
"base": {
"$ref": "#/definitions/propertyType"
},
"params": {
"type": "array",
"items": {
"$ref": "#/definitions/propertyType"
}
}
}
},
"typeIntersection": {
"type": "object",
"required": [
"type",
"types"
],
"properties": {
"type": {
"const": "type:intersection"
},
"types": {
"type": "array",
"items": {
"$ref": "#/definitions/propertyType"
}
}
}
},
"typeUnion": {
"type": "object",
"required": [
"type",
"types"
],
"properties": {
"type": {
"const": "type:union"
},
"types": {
"type": "array",
"items": {
"$ref": "#/definitions/propertyType"
}
}
}
},
"typeArray": {
"type": "object",
"required": [
"type",
"component"
],
"properties": {
"type": {
"const": "type:array"
},
"component": {
"$ref": "#/definitions/propertyType"
}
}
},
"typeObject": {
"type": "object",
"required": [
"type",
"members"
],
"properties": {
"type": {
"const": "type:object"
},
"members": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"anyOf": [
{
"$ref": "#/definitions/propertyObjectKey"
}
]
},
"value": {
"$ref": "#/definitions/propertyType"
}
}
}
}
}
},
"propertyObjectKey": {
"anyOf": [
{
"type": "string"
},
{
"$ref": "#/definitions/propertyType"
},
{
"type": "object",
"required": [
"optional"
],
"properties": {
"optional": {
"type": "boolean",
"default": true
},
"key": {
"$ref": "#/definitions/propertyObjectKey"
}
},
"additionalProperties": false
}
]
},
"typeJSArray": {
"type": "object",
"required": [
"type",
"types"
],
"properties": {
"type": {
"const": "type:jsArray"
},
"types": {
"type": "array",
"items": {
"$ref": "#/definitions/propertyType"
}
}
}
},
"propertyType": {
"properties": {
"type": {
"type": "string",
"enum": [
"type:primitive",
"type:class",
"type:variable",
"type:parameterized",
"type:union",
"type:intersection",
"type:array",
"type:object",
"type:jsArray"
]
},
"properties": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"const": "property:underscored"
},
"underscored": {
"type": "boolean"
}
}
}
}
},
"anyOf": [
{
"$ref": "#/definitions/typePrimitive"
},
{
"$ref": "#/definitions/typeClass"
},
{
"$ref": "#/definitions/typeVariable"
},
{
"$ref": "#/definitions/typeParameterized"
},
{
"$ref": "#/definitions/typeUnion"
},
{
"$ref": "#/definitions/typeIntersection"
},
{
"$ref": "#/definitions/typeArray"
},
{
"$ref": "#/definitions/typeObject"
},
{
"$ref": "#/definitions/typeJSArray"
}
]
},
"propertyComment": {
"type": "object",
"required": [
"type",
"lines"
],
"properties": {
"type": {
"const": "property:comment"
},
"lines": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"propertyHide": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"const": "property:hide"
}
}
},
"propertyAssign": {
"type": "object",
"required": [
"type",
"assign"
],
"properties": {
"type": {
"const": "property:assign"
},
"shield": {
"type": "boolean"
},
"assign": {
"$ref": "#/definitions/propertyType"
}
}
},
"propertyMod": {
"type": "object",
"required": [
"type",
"mod"
],
"properties": {
"type": {
"const": "property:mod"
},
"mod": {
"type": "string"
}
}
},
"propertyModify": {
"type": "object",
"required": [
"type",
"index"
],
"properties": {
"type": {
"const": "property:modify"
},
"index": {
"type": "integer"
},
"newType": {
"$ref": "#/definitions/propertyType"
},
"name": {
"type": "string"
}
}
},
"propertyReturns": {
"type": "object",
"required": [
"type",
"returns"
],
"properties": {
"type": {
"const": "property:returns"
},
"returns": {
"$ref": "#/definitions/propertyType"
}
}
},
"propertyClass": {
"properties": {
"type": {
"type": "string",
"enum": [
"property:comment",
"property:hide",
"property:assign",
"property:mod"
]
}
},
"anyOf": [
{
"$ref": "#/definitions/propertyComment"
},
{
"$ref": "#/definitions/propertyHide"
},
{
"$ref": "#/definitions/propertyAssign"
},
{
"$ref": "#/definitions/propertyMod"
}
]
},
"propertyMethod": {
"properties": {
"type": {
"type": "string",
"enum": [
"property:comment",
"property:hide",
"property:mod",
"property:modify",
"property:returns"
]
}
},
"anyOf": [
{
"$ref": "#/definitions/propertyComment"
},
{
"$ref": "#/definitions/propertyHide"
},
{
"$ref": "#/definitions/propertyMod"
},
{
"$ref": "#/definitions/propertyModify"
},
{
"$ref": "#/definitions/propertyReturns"
}
]
},
"propertyField": {
"properties": {
"type": {
"type": "string",
"enum": [
"property:comment",
"property:hide",
"property:mod"
]
}
},
"anyOf": [
{
"$ref": "#/definitions/propertyComment"
},
{
"$ref": "#/definitions/propertyHide"
},
{
"$ref": "#/definitions/propertyMod"
}
]
},
"propertyConstructor": {
"properties": {
"type": {
"type": "string",
"enum": [
"property:comment",
"property:hide",
"property:mod",
"property:modify"
]
}
},
"anyOf": [
{
"$ref": "#/definitions/propertyComment"
},
{
"$ref": "#/definitions/propertyHide"
},
{
"$ref": "#/definitions/propertyMod"
},
{
"$ref": "#/definitions/propertyModify"
}
]
}
},
"properties": {
"properties": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/propertyMod"
}
]
}
},
"classes": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"const": "document:class"
},
"className": {
"type": "string",
"description": "The class name",
"$ref": "probe.class-definitions.json#/definitions/typeClassname"
},
"properties": {
"type": "array",
"items": {
"$ref": "#/definitions/propertyClass"
}
},
"methods": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"name",
"returns"
],
"properties": {
"type": {
"const": "document:method"
},
"name": {
"type": "string"
},
"static": {
"type": "boolean"
},
"abstract": {
"type": "boolean"
},
"params": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"name",
"paramType"
],
"properties": {
"type": {
"const": "property:param"
},
"name": {
"type": "string"
},
"paramType": {
"$ref": "#/definitions/propertyType"
}
}
}
},
"returns": {
"$ref": "#/definitions/propertyType"
},
"properties": {
"type": "array",
"items": {
"$ref": "#/definitions/propertyMethod"
}
}
}
}
},
"interfaces": {
"type": "array",
"items": {
"$ref": "#/definitions/propertyType"
}
},
"constructors": {
"type": "array",
"items": {
"required": [
"type"
],
"type": "object",
"properties": {
"type": {
"const": "document:constructor"
},
"params": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"name",
"paramType"
],
"properties": {
"type": {
"const": "property:param"
},
"name": {
"type": "string"
},
"paramType": {
"$ref": "#/definitions/propertyType"
}
}
}
},
"properties": {
"type": "array",
"items": {
"$ref": "#/definitions/propertyConstructor"
}
}
}
}
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"name",
"fieldType"
],
"properties": {
"type": {
"const": "document:field"
},
"name": {
"type": "string"
},
"fieldType": {
"$ref": "#/definitions/propertyType"
},
"properties": {
"type": "array",
"items": {
"$ref": "#/definitions/propertyField"
}
},
"final": {
"type": "boolean"
},
"static": {
"type": "boolean"
}
}
}
}
}
}
}
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"json.schemas": [
{
"fileMatch": [
"/probe/docs/*.json"
],
"url": "./.vscode/probe.doc-schema.json"
}
]
}
+28 -1
View File
@@ -1,7 +1,34 @@
# wheat-server-kubejs # wheat-server-kubejs
## Links ## 相关链接
- [KubeJS - Official Website](https://kubejs.com/) - [KubeJS - Official Website](https://kubejs.com/)
- [KubeJS - Mods - Modrinth](https://modrinth.com/mod/kubejs) - [KubeJS - Mods - Modrinth](https://modrinth.com/mod/kubejs)
- [KubeJS Additions](https://www.curseforge.com/minecraft/mc-mods/kubejs-additions)
- [Prunoideae / ProbeJS](https://github.com/Prunoideae/ProbeJS) - [Prunoideae / ProbeJS](https://github.com/Prunoideae/ProbeJS)
## 注意事项
- 暂不支持解构赋值(2022-08-28
- 暂不支持设置函数参数默认值(2022-08-28)
- 暂不支持 try catch2022-08-28
## 参考资料
### Wiki
- [自定义方块](https://mods.latvian.dev/books/kubejs/page/custom-blocks)
- [tintindex | 森罗万象](https://sqwatermark.com/resguide/vanilla/model/tintindex.html)
### 代码
- [KubeJS-Mods / KubeJS](https://github.com/KubeJS-Mods/KubeJS)
- [BlockBuilder.java](https://github.com/KubeJS-Mods/KubeJS/blob/1.18/main/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java)
- [BasicBlockJS.java](https://github.com/KubeJS-Mods/KubeJS/blob/1.18/main/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java)
- [WoodenButtonBlockBuilder.java](https://github.com/KubeJS-Mods/KubeJS/blob/1.18/main/common/src/main/java/dev/latvian/mods/kubejs/block/custom/WoodenButtonBlockBuilder.java)
- [Cardinally Orientable Blocks and Shuffle Asset Generation](https://github.com/KubeJS-Mods/KubeJS/pull/459)
- [Basic BlockState Support and Misc Delegate Methods](https://github.com/KubeJS-Mods/KubeJS/pull/464)
### 颜色列表
- [Railcraft/EnumColor.java](https://github.com/Railcraft/Railcraft/blob/mc-1.12.2/src/main/java/mods/railcraft/common/plugins/color/EnumColor.java)
+23 -1
View File
@@ -1,3 +1,25 @@
// priority: 100 // 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) => {
if (!Array.isArray(JSON_ASSETS)) {
return;
}
console.info(`${LOG_PREFIX} 生成客户端资源 - 开始`);
JSON_ASSETS.forEach((item) => {
event.add(new ResourceLocation(item.PATH), item.DATA);
});
console.info(`${LOG_PREFIX} 生成客户端资源 - 完成`);
});
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

+9 -2
View File
@@ -1,6 +1,13 @@
{ {
"compilerOptions": { "compilerOptions": {
"lib": ["ES5", "ES2015"], "lib": [
"typeRoots": ["./probe/generated", "./probe/user"] "ES5",
"ES2015"
],
"typeRoots": [
"./probe/generated",
"./probe/user"
],
"target": "ES2015"
} }
} }
+1080 -86
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+66234 -66272
View File
File diff suppressed because one or more lines are too long
+2395 -2381
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,4 +1,4 @@
/// <reference path="./globals.d.ts" /> /// <reference path="./globals.d.ts" />
const Vec3d: typeof Vec3 const Vec3d: typeof Vec3
const Direction: typeof Facing
const Text: typeof Component const Text: typeof Component
const Direction: typeof Facing
+4
View File
@@ -0,0 +1,4 @@
interface String {
readonly namespace: string,
readonly path: string
}
+9 -9
View File
@@ -1,6 +1,6 @@
/// <reference path="./globals.d.ts" /> /// <reference path="./globals.d.ts" />
declare namespace Registry { declare namespace Registry {
class Sound_event extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class SoundEvent extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
create(id: string, type: "basic"): Internal.SoundEventBuilder; create(id: string, type: "basic"): Internal.SoundEventBuilder;
create(id: string): Internal.SoundEventBuilder; create(id: string): Internal.SoundEventBuilder;
} }
@@ -42,19 +42,19 @@ declare namespace Registry {
create(id: string, type: "basic"): Internal.EnchantmentBuilder; create(id: string, type: "basic"): Internal.EnchantmentBuilder;
create(id: string): Internal.EnchantmentBuilder; create(id: string): Internal.EnchantmentBuilder;
} }
class Mob_effect extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class MobEffect extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
create(id: string, type: "basic"): Internal.BasicMobEffect$Builder; create(id: string, type: "basic"): Internal.BasicMobEffect$Builder;
create(id: string): Internal.BasicMobEffect$Builder; create(id: string): Internal.BasicMobEffect$Builder;
} }
class Entity_type extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class EntityType extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
} }
class Block_entity_type extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class BlockEntityType extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
} }
class Potion extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class Potion extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
create(id: string, type: "basic"): Internal.PotionBuilder; create(id: string, type: "basic"): Internal.PotionBuilder;
create(id: string): Internal.PotionBuilder; create(id: string): Internal.PotionBuilder;
} }
class Particle_type extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class ParticleType extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
create(id: string, type: "basic"): Internal.ParticleTypeBuilder; create(id: string, type: "basic"): Internal.ParticleTypeBuilder;
create(id: string): Internal.ParticleTypeBuilder; create(id: string): Internal.ParticleTypeBuilder;
} }
@@ -62,19 +62,19 @@ declare namespace Registry {
create(id: string, type: "basic"): Internal.MotiveBuilder; create(id: string, type: "basic"): Internal.MotiveBuilder;
create(id: string): Internal.MotiveBuilder; create(id: string): Internal.MotiveBuilder;
} }
class Custom_stat extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class CustomStat extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
create(id: string, type: "basic"): Internal.CustomStatBuilder; create(id: string, type: "basic"): Internal.CustomStatBuilder;
create(id: string): Internal.CustomStatBuilder; create(id: string): Internal.CustomStatBuilder;
} }
class Point_of_interest_type extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class PointOfInterestType extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
create(id: string, type: "basic"): Internal.PoiTypeBuilder; create(id: string, type: "basic"): Internal.PoiTypeBuilder;
create(id: string): Internal.PoiTypeBuilder; create(id: string): Internal.PoiTypeBuilder;
} }
class Villager_type extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class VillagerType extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
create(id: string, type: "basic"): Internal.VillagerTypeBuilder; create(id: string, type: "basic"): Internal.VillagerTypeBuilder;
create(id: string): Internal.VillagerTypeBuilder; create(id: string): Internal.VillagerTypeBuilder;
} }
class Villager_profession extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> { class VillagerProfession extends Internal.RegistryObjectBuilderTypes$RegistryEventJS<any> {
create(id: string, type: "basic"): Internal.VillagerProfessionBuilder; create(id: string, type: "basic"): Internal.VillagerProfessionBuilder;
create(id: string): Internal.VillagerProfessionBuilder; create(id: string): Internal.VillagerProfessionBuilder;
} }
+73
View File
@@ -1,3 +1,51 @@
/** 方块构造器 */
type B_Builder = Internal.BlockBuilder;
/** 方块碰撞箱类型 */
type B_BoxType = 'custom' | 'full' | 'half';
/** 方块材质类型 */
type B_Material = Internal.MaterialJS_;
/**
* 方块渲染类型
* - `cutout`: required for blocks with texture like glass
* - `translucent`: required for blocks like stained glass
*/
type B_RenderType = 'solid' | 'cutout' | 'cutout_mipped' | 'translucent';
/** 配置选项 */
type SetBlockPropsOpts = {
/** 碰撞箱配置(自定义) */
boxConfig: number[];
/** 碰撞箱类型(内置) */
boxType: B_BoxType;
/** 开启碰撞箱,默认:true */
collision: boolean;
/** 方块显示名称 */
displayName: string;
/** 默认:8 */
hardness: number;
/** 是否为完整方块,默认:true */
isSolid: boolean;
/** 范围:0 ~ 1 */
lightLevel: number;
/** 默认:stone */
material: B_Material;
/** 模型文件路径 */
modelPath: string;
/** 默认:solid */
renderType: B_RenderType;
/** 默认:16 */
resistance: number;
/** fullBlock(未使用)*/
isFull: boolean;
/** opaque(未使用)*/
isOpaque: boolean;
/** transparent(未使用)*/
transparent: boolean;
};
declare const global: { declare const global: {
/** /**
@@ -7,6 +55,25 @@ declare const global: {
*/ */
defaults<TValue>(v: TValue, d: TValue): TValue; defaults<TValue>(v: TValue, d: TValue): TValue;
/**
* @desc 设置方块基础属性
* @param block 方块
* @param opts 配置选项
*/
setBlockProps(block: B_Builder, opts: SetBlockPropsOpts): boolean;
/**
* @desc 设置方块水平旋转属性
* @param block 方块
* @param type 旋转类型
* @param model 模型路径
*/
setHorizontalFacing(
block: B_Builder,
type: 'revert' | 'same',
model: string
): boolean;
/** /**
* @desc 写入 JSON 文件 * @desc 写入 JSON 文件
* @param path 文件路径,相对于 `.minecraft` * @param path 文件路径,相对于 `.minecraft`
@@ -24,6 +91,12 @@ declare const global: {
}; };
}; };
/** 需要在 `client.generate_assets` 生成的 JSON 文件 */
JSON_ASSETS: Array<{
PATH: string;
DATA: Internal.JsonElement;
}>;
/** 日志前缀 */ /** 日志前缀 */
LOG_PREFIX: string; LOG_PREFIX: string;
+19
View File
@@ -0,0 +1,19 @@
// priority: 0
// 玩家切换世界时设置为冒险模式(KubeJS Additions
onEvent('player.change_dimension', (event) => {
const evServer = event.getServer();
const evPlayer = event.getPlayer();
const player = evServer ? evServer.getPlayer(evPlayer) : null;
if (!player) {
console.error('自动切换游戏模式失败:找不到玩家');
return;
}
if (player.isCreativeMode()) {
player.setGameMode('adventure');
}
});
+106 -10
View File
@@ -1,24 +1,119 @@
// priority: 100 // priority: 100
// 注意事项:
// - 暂不支持解构赋值(2022-08-28
// - 暂不支持设置函数参数默认值(2022-08-28)
// - 暂不支持 try catch2022-08-28
// 自定义方块:
// https://mods.latvian.dev/books/kubejs/page/custom-blocks
global.defaults = function (v, d) { global.defaults = function (v, d) {
(typeof d === 'undefined') && (d = null); (typeof d === 'undefined') && (d = null);
return ((typeof v === 'undefined' || v === null) ? d : v); return ((typeof v === 'undefined' || v === null) ? d : v);
}; };
global.setBlockProps = function (block, opts) {
if (!block) {
console.error(`${LOG_PREFIX} 设置方块属性失败:缺少“block”参数`);
return false;
}
if (!opts) {
opts = {};
}
const boxConfig = defaults(opts.boxConfig, null);
const boxType = defaults(opts.boxType, '');
const collision = defaults(opts.collision, true);
const displayName = defaults(opts.displayName, '');
const hardness = defaults(opts.hardness, 8);
const isSolid = defaults(opts.isSolid, true);
const lightLevel = defaults(opts.lightLevel, 0);
const material = defaults(opts.material, 'stone');
const modelPath = defaults(opts.modelPath, '');
const renderType = defaults(opts.renderType, 'solid');
const resistance = defaults(opts.resistance, 16);
if (boxConfig) {
block.box.apply(block, boxConfig);
} else if (boxType === 'full') {
block.box(0, 0, 0, 16, 16, 16, true);
} else if (boxType === 'half') {
block.box(0, 0, 0, 16, 8, 16, true);
}
if (!collision) {
block.noCollision();
}
if (displayName) {
block.displayName(displayName);
}
if (!isSolid) {
block.notSolid();
}
if (modelPath) {
block.model(modelPath);
}
block.hardness(hardness);
block.lightLevel(lightLevel);
block.material(material);
block.renderType(renderType);
block.resistance(resistance);
return true;
};
global.setHorizontalFacing = function (block, type, model) {
const prop = BlockProperties.HORIZONTAL_FACING;
// 设置模型旋转
block.blockstateJson = {
'variants': {
'facing=north': { model: model, y: 0 },
'facing=east': { model: model, y: 90 },
'facing=south': { model: model, y: 180 },
'facing=west': { model: model, y: 270 }
}
};
// 添加属性
block.property(prop);
// 处理默认状态
block.defaultState((ev) => {
ev.set(prop, 'north');
});
// 处理放置状态
switch (type) {
// 与玩家朝向相反
case 'revert':
block.placementState((ev) => {
const d = ev.getHorizontalDirection().getOpposite().toString();
ev.set(prop, d);
});
break;
// 与玩家朝向相同
case 'same':
block.placementState((ev) => {
const d = ev.getHorizontalDirection().toString();
ev.set(prop, d);
});
break;
// 其它
default:
console.error(`${LOG_PREFIX} 设置旋转属性失败:参数“type”错误`);
return false;
}
return true;
};
global.writeJSON = function (path, data) { global.writeJSON = function (path, data) {
JsonIO.write(path, data); JsonIO.write(path, data);
}; };
// 参考:
// https://github.com/Railcraft/Railcraft/blob/mc-1.12.2/src/main/java/mods/railcraft/common/plugins/color/EnumColor.java
global.COLORS = { global.COLORS = {
WHITE: { WHITE: {
CODE: 'white', CODE: 'white',
@@ -118,6 +213,7 @@ global.COLORS = {
}, },
}; };
global.JSON_ASSETS = [];
global.LOG_PREFIX = '[KubeJS]'; global.LOG_PREFIX = '[KubeJS]';
console.info(`${global.LOG_PREFIX} 启动`); console.info(`${global.LOG_PREFIX} 启动`);
+317 -148
View File
@@ -1,100 +1,27 @@
// priority: 0 // priority: 0
const defaults = global.defaults; const defaults = global.defaults;
const setBlockProps = global.setBlockProps;
const setHorizontalFacing = global.setHorizontalFacing;
const COLORS = global.COLORS; const COLORS = global.COLORS;
const JSON_ASSETS = global.JSON_ASSETS;
const LOG_PREFIX = global.LOG_PREFIX; const LOG_PREFIX = global.LOG_PREFIX;
/**
* @desc 方块构造器
* @typedef B.Builder
* @type {Internal.BlockBuilder}
*/
/**
* @desc 方块碰撞箱类型
* @typedef B.BoxType
* @type {'full'|'half'}
*/
/**
* @desc 方块材质类型
* @typedef B.Material
* @type {Internal.MaterialJS_}
*/
/**
* @desc 方块渲染类型
* - `cutout`: required for blocks with texture like glass
* - `translucent`: required for blocks like stained glass
* @typedef B.RenderType
* @type {'solid'|'cutout'|'translucent'}
*/
/** 模组 ID */ /** 模组 ID */
const MOD_ID = 'wheat_plus'; const MOD_ID = 'wheat_plus';
/** 模型文件基础路径 */ /** 方块模型、纹理文件基础路径 */
const PATH_MODEL = `${MOD_ID}:block`; const P_BLOCK = `${MOD_ID}:block`;
/** 纹理文件基础路径 */ /** 方块模型文件基础路径 */
const PATH_TEXTURE = `${MOD_ID}:block`; const P_BLOCK_MODEL = `${MOD_ID}:models/block`;
/** /** 物品模型、纹理文件基础短路径*/
* @description 设置方块基础属性 const P_ITEM = `${MOD_ID}:item`;
* @param {B.Builder} block
* @param {object} options
* @param {B.BoxType} options.boxType 碰撞箱类型
* @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 {B.RenderType} options.renderType
* @param {number} options.resistance
*/
const setBlockProps = function (block, options) {
if (!block) { /** 物品模型文件基础长路径 */
console.error(`${LOG_PREFIX} 设置方块属性失败:缺少“block”参数`); const P_ITEM_MODEL = `${MOD_ID}:models/item`;
return false;
}
if (!options) {
options = {};
}
const boxType = defaults(options.boxType, '');
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 renderType = defaults(options.renderType, 'solid');
const resistance = defaults(options.resistance, 16);
if (displayName) {
block.displayName(displayName);
}
if (boxType === 'full') {
block.box(0, 0, 0, 16, 16, 16, true);
} else if (boxType === 'half') {
block.box(0, 0, 0, 16, 8, 16, true);
}
block.fullBlock(isFull);
block.hardness(hardness);
block.lightLevel(lightLevel);
block.opaque(isOpaque);
block.material(material);
block.renderType(renderType);
block.resistance(resistance);
return true;
};
console.info(`${LOG_PREFIX} 处理 ${MOD_ID} 相关内容`); console.info(`${LOG_PREFIX} 处理 ${MOD_ID} 相关内容`);
@@ -103,12 +30,11 @@ onEvent('block.registry', (event) => {
console.info(`${LOG_PREFIX} 注册方块 - 路 - 开始`); console.info(`${LOG_PREFIX} 注册方块 - 路 - 开始`);
/** 普通路方块 */ const blockList = [
const roadBlocksNormal = [
{ {
name: 'road_blank', name: 'road_blank',
label: '路 - 空白', label: '路 - 空白',
texturePath: 'transparent', texturePath: 'common/transparent',
hasNormal: true, // 普通 / 直线 hasNormal: true, // 普通 / 直线
hasSlant: false, // 斜线 hasSlant: false, // 斜线
hasSide: false, // 侧边纹理 hasSide: false, // 侧边纹理
@@ -170,12 +96,12 @@ onEvent('block.registry', (event) => {
}, },
]; ];
roadBlocksNormal.forEach((config) => { blockList.forEach((config) => {
/** 方块 ID,包含模组 ID */ /** 方块名称 */
const id = `${MOD_ID}:${config.name}`; const blockName = config.name;
/** 方块名称文本 */ /** 方块文本 */
const label = (config.label || 'Unknown'); const label = (config.label || 'Unknown');
/** 纹理文件相对路径 */ /** 纹理文件相对路径 */
@@ -184,99 +110,123 @@ onEvent('block.registry', (event) => {
/** 是否存在侧边纹理 */ /** 是否存在侧边纹理 */
const tSide = config.hasSide; const tSide = config.hasSide;
// 完整,直线 // 完整,普通 / 直线
if (config.hasNormal) { if (config.hasNormal) {
const block = event.create(`${id}_full`, 'basic'); const blockId = `${blockName}_full`;
const fullId = `${MOD_ID}:${blockId}`;
const block = event.create(fullId, 'basic');
const suffix = (config.isBlank ? '' : ',直线'); const suffix = (config.isBlank ? '' : ',直线');
const modelPathL = `${P_BLOCK_MODEL}/${blockId}`;
const modelPathS = `${P_BLOCK}/${blockId}`;
const modelJSON = {
parent: `${P_BLOCK}/road/base_full`,
textures: {
content: `${P_BLOCK}/${tPath}`,
side: tSide ? `${P_BLOCK}/${tPath}` : undefined
}
};
JSON_ASSETS.push({ PATH: modelPathL, DATA: modelJSON });
setBlockProps(block, { setBlockProps(block, {
boxType: 'full', boxType: 'full',
displayName: `${label},完整${suffix}`, displayName: `${label},完整${suffix}`,
modelPath: modelPathS,
renderType: 'cutout', renderType: 'cutout',
}); });
if (tPath) {
block.modelJson = {
parent: `${PATH_MODEL}/road/base_full`,
textures: {
content: `${PATH_TEXTURE}/${tPath}`,
side: tSide ? `${PATH_TEXTURE}/${tPath}` : undefined
}
};
}
} }
// 完整,斜线 // 完整,斜线
if (config.hasSlant) { if (config.hasSlant) {
const block = event.create(`${id}_full_slant`, 'basic'); const blockId = `${blockName}_full_slant`;
const suffix = (config.isBlank ? '' : ',斜线'); const fullId = `${MOD_ID}:${blockId}`;
const block = event.create(fullId, 'basic');
const suffix = ',斜线';
const modelPathL = `${P_BLOCK_MODEL}/${blockId}`;
const modelPathS = `${P_BLOCK}/${blockId}`;
const modelJSON = {
parent: `${P_BLOCK}/road/base_full`,
textures: {
content: `${P_BLOCK}/${tPath}_slant`,
side: tSide ? `${P_BLOCK}/${tPath}` : undefined
}
};
JSON_ASSETS.push({ PATH: modelPathL, DATA: modelJSON });
setBlockProps(block, { setBlockProps(block, {
boxType: 'full', boxType: 'full',
displayName: `${label},完整${suffix}`, displayName: `${label},完整${suffix}`,
modelPath: modelPathS,
renderType: 'cutout', renderType: 'cutout',
}); });
if (tPath) { setHorizontalFacing(block, 'same', modelPathS);
block.modelJson = {
parent: `${PATH_MODEL}/road/base_full`,
textures: {
content: `${PATH_TEXTURE}/${tPath}_slant`,
side: tSide ? `${PATH_TEXTURE}/${tPath}` : undefined
}
};
}
} }
// 一半,直线 // 一半,普通 / 直线
if (config.hasNormal) { if (config.hasNormal) {
const block = event.create(`${id}_half`, 'basic'); const blockId = `${blockName}_half`;
const fullId = `${MOD_ID}:${blockId}`;
const block = event.create(fullId, 'basic');
const suffix = (config.isBlank ? '' : ',直线'); const suffix = (config.isBlank ? '' : ',直线');
const modelPathL = `${P_BLOCK_MODEL}/${blockId}`;
const modelPathS = `${P_BLOCK}/${blockId}`;
const modelJSON = {
parent: `${P_BLOCK}/road/base_half`,
textures: {
content: `${P_BLOCK}/${tPath}`,
side: tSide ? `${P_BLOCK}/${tPath}` : undefined
}
};
JSON_ASSETS.push({ PATH: modelPathL, DATA: modelJSON });
setBlockProps(block, { setBlockProps(block, {
boxType: 'half', boxType: 'half',
displayName: `${label},一半${suffix}`, displayName: `${label},一半${suffix}`,
modelPath: modelPathS,
renderType: 'cutout', renderType: 'cutout',
}); });
if (tPath) {
block.modelJson = {
parent: `${PATH_MODEL}/road/base_half`,
textures: {
content: `${PATH_TEXTURE}/${tPath}`,
side: tSide ? `${PATH_TEXTURE}/${tPath}` : undefined
}
};
}
} }
// 一半,斜线 // 一半,斜线
if (config.hasSlant) { if (config.hasSlant) {
const block = event.create(`${id}_half_slant`, 'basic'); const blockId = `${blockName}_half_slant`;
const suffix = (config.isBlank ? '' : ',斜线'); const fullId = `${MOD_ID}:${blockId}`;
const block = event.create(fullId, 'basic');
const suffix = ',斜线';
const modelPathL = `${P_BLOCK_MODEL}/${blockId}`;
const modelPathS = `${P_BLOCK}/${blockId}`;
const modelJSON = {
parent: `${P_BLOCK}/road/base_half`,
textures: {
content: `${P_BLOCK}/${tPath}_slant`,
side: tSide ? `${P_BLOCK}/${tPath}` : undefined
}
};
JSON_ASSETS.push({ PATH: modelPathL, DATA: modelJSON });
setBlockProps(block, { setBlockProps(block, {
boxType: 'half', boxType: 'half',
displayName: `${label},一半${suffix}`, displayName: `${label},一半${suffix}`,
modelPath: modelPathS,
renderType: 'cutout', renderType: 'cutout',
}); });
if (tPath) { setHorizontalFacing(block, 'same', modelPathS);
block.modelJson = {
parent: `${PATH_MODEL}/road/base_half`,
textures: {
content: `${PATH_TEXTURE}/${tPath}_slant`,
side: tSide ? `${PATH_TEXTURE}/${tPath}` : undefined
}
};
}
} }
@@ -298,33 +248,50 @@ onEvent('block.registry', (event) => {
const color = COLORS[key]; const color = COLORS[key];
const id = `${MOD_ID}:reinforced_concrete_${color.CODE}`; const id = `${MOD_ID}:reinforced_concrete_${color.CODE}`;
const block = event.create(id, 'basic'); const block = event.create(id, 'basic');
const texture = `${PATH_TEXTURE}/reinforced_concrete/${color.CODE}`; const texture = `${P_BLOCK}/reinforced_concrete/${color.CODE}`;
setBlockProps(block, { setBlockProps(block, {
boxType: 'full', boxType: 'full',
displayName: `${color.LABEL_CN}强化混凝土`, displayName: `${color.LABEL_CN}强化混凝土`,
}); });
block.modelJson = { block.textureAll(texture);
parent: 'minecraft:block/cube_all',
textures: { all: 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} 注册方块 - 强化混凝土 - 完成`); console.info(`${LOG_PREFIX} 注册方块 - 强化混凝土 - 完成`);
}); });
// 注册方块 - 灯 // 注册方块 - 现代
onEvent('block.registry', (event) => { onEvent('block.registry', (event) => {
console.info(`${LOG_PREFIX} 注册方块 - 灯 - 开始`); console.info(`${LOG_PREFIX} 注册方块 - 现代灯 - 开始`);
const keys = Object.keys(COLORS); const keys = Object.keys(COLORS);
/** 父模型路径 */ /** 父模型路径 */
const parent = `${PATH_MODEL}/lamp/modern`; const parent = `${P_BLOCK}/lamp/modern`;
keys.forEach((key) => { keys.forEach((key) => {
@@ -334,11 +301,12 @@ onEvent('block.registry', (event) => {
// 纹理文件路径前缀 // 纹理文件路径前缀
// wheat_plus:block/lamp_modern/color_ // wheat_plus:block/lamp_modern/color_
const tBase = `${PATH_TEXTURE}/lamp_modern/${color.CODE}`; const tBase = `${P_BLOCK}/lamp_modern/${color.CODE}`;
setBlockProps(block, { setBlockProps(block, {
boxType: 'full', boxType: 'full',
displayName: `现代${color.LABEL_CN}`, displayName: `现代${color.LABEL_CN}`,
isSolid: false,
lightLevel: 1, lightLevel: 1,
material: 'glass', material: 'glass',
renderType: 'translucent', renderType: 'translucent',
@@ -355,7 +323,202 @@ 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: `${P_BLOCK}/${config.model}` };
setBlockProps(block, {
displayName: config.label,
lightLevel: 0.8,
material: 'glass',
renderType: 'translucent',
});
// 按钮方块默认状态
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,
});
});
console.info(`${LOG_PREFIX} 注册方块 - 简约灯 - 完成`);
});
// 注册方块 - 纯色方块
onEvent('block.registry', (event) => {
console.info(`${LOG_PREFIX} 注册方块 - 纯色方块 - 开始`);
const blocks = [
{
name: 'color_black',
label: '纯色方块(黑色)',
color: [0, 0, 0, 1],
},
{
name: 'color_white',
label: '纯色方块(白色)',
color: [255, 255, 255, 1],
},
{
name: 'color_blue',
label: '纯色方块(蓝色)',
color: [0, 0, 255, 1],
},
{
name: 'color_green',
label: '纯色方块(绿色)',
color: [0, 255, 0, 1],
},
{
name: 'color_red',
label: '纯色方块(红色)',
color: [255, 0, 0, 1],
},
{
name: 'color_yellow',
label: '纯色方块(黄色)',
color: [255, 255, 0, 1],
},
{
name: 'color_39c5bb',
label: '纯色方块(#39C5BB',
color: [57, 197, 187, 1],
},
{
name: 'color_66ccff',
label: '纯色方块(#66CCFF',
color: [102, 204, 255, 1],
},
];
const texture = `${P_BLOCK}/common/color_base`;
blocks.forEach((config) => {
const id = `${MOD_ID}:${config.name}`;
const block = event.create(id, 'basic');
setBlockProps(block, {
displayName: config.label,
isSolid: false,
material: 'stone',
});
block.textureAll(texture);
block.color(0, Color.rgba.apply(Color, config.color));
block.item((item) => {
item.color(0, Color.rgba.apply(Color, config.color));
});
});
console.info(`${LOG_PREFIX} 注册方块 - 纯色方块 - 完成`);
});
// 注册方块 - 其它
onEvent('block.registry', (event) => {
console.info(`${LOG_PREFIX} 注册方块 - 其它 - 开始`);
const blocks = [
{
name: 'isolation_pile_a',
box: [5, 0, 5, 11, 16, 11, true],
label: '隔离桩',
model: 'common/isolation_pile_a',
orientable: false,
},
{
name: 'statue_player_alex',
box: [4, 0, 6, 12, 31, 10, true],
label: '模型(Alex',
model: 'statue/player_alex',
orientable: true,
},
{
name: 'statue_player_steve',
box: [4, 0, 6, 12, 31, 10, true],
label: '模型(Steve',
model: 'statue/player_steve',
orientable: true,
},
];
blocks.forEach((config) => {
const id = `${MOD_ID}:${config.name}`;
const block = event.create(id, 'basic');
const model = `${P_BLOCK}/${config.model}`;
setBlockProps(block, {
boxConfig: config.box,
boxType: 'custom',
displayName: config.label,
isSolid: false,
material: 'stone',
modelPath: model,
renderType: 'cutout',
});
if (config.orientable) {
setHorizontalFacing(block, 'revert', model);
}
});
console.info(`${LOG_PREFIX} 注册方块 - 其它 - 完成`);
}); });
@@ -364,3 +527,9 @@ onEvent('block.registry', (event) => {
// console.info(`${LOG_PREFIX} 注册物品 - 开始`); // console.info(`${LOG_PREFIX} 注册物品 - 开始`);
// console.info(`${LOG_PREFIX} 注册物品 - 完成`); // console.info(`${LOG_PREFIX} 注册物品 - 完成`);
// }); // });
// 注册声音
// onEvent('sound.registry', (event) => {
// console.info(`${LOG_PREFIX} 注册声音 - 开始`);
// console.info(`${LOG_PREFIX} 注册声音 - 完成`);
// });
@@ -1,5 +0,0 @@
{
"block.minecraft.ancient_debris": "White Reinforced Concrete",
"block.minecraft.raw_copper_block": "Gray Reinforced Concrete",
"block.minecraft.raw_iron_block": "Light Gray Reinforced Concrete"
}
@@ -1,5 +0,0 @@
{
"block.minecraft.ancient_debris": "白色强化混凝土",
"block.minecraft.raw_copper_block": "灰色强化混凝土",
"block.minecraft.raw_iron_block": "淡灰色强化混凝土"
}
@@ -0,0 +1,268 @@
{
"credit": "Created by Frost-ZX using Blockbench.",
"parent": "block/block",
"ambientocclusion": false,
"textures": {
"black": "block/black_concrete",
"particle": "block/yellow_concrete",
"yellow": "block/yellow_concrete"
},
"elements": [
{
"name": "A",
"from": [7, 12, 5],
"to": [9, 16, 6],
"faces": {
"north": {"uv": [7, 0, 9, 4], "texture": "#yellow"},
"east": {"uv": [10, 0, 11, 4], "texture": "#yellow"},
"south": {"uv": [7, 0, 9, 4], "texture": "#yellow"},
"west": {"uv": [5, 0, 6, 4], "texture": "#yellow"},
"up": {"uv": [7, 5, 9, 6], "texture": "#yellow", "cullface": "up"}
}
},
{
"name": "B",
"from": [6, 12, 6],
"to": [10, 16, 7],
"faces": {
"north": {"uv": [6, 0, 10, 4], "texture": "#yellow"},
"east": {"uv": [9, 0, 10, 4], "texture": "#yellow"},
"south": {"uv": [6, 0, 10, 4], "texture": "#yellow"},
"west": {"uv": [6, 0, 7, 4], "texture": "#yellow"},
"up": {"uv": [6, 6, 10, 7], "texture": "#yellow", "cullface": "up"}
}
},
{
"name": "C",
"from": [5, 12, 7],
"to": [11, 16, 9],
"faces": {
"north": {"uv": [5, 0, 11, 4], "texture": "#yellow"},
"east": {"uv": [7, 0, 9, 4], "texture": "#yellow"},
"south": {"uv": [5, 0, 11, 4], "texture": "#yellow"},
"west": {"uv": [7, 0, 9, 4], "texture": "#yellow"},
"up": {"uv": [5, 7, 11, 9], "texture": "#yellow", "cullface": "up"}
}
},
{
"name": "D",
"from": [6, 12, 9],
"to": [10, 16, 10],
"faces": {
"north": {"uv": [6, 0, 10, 4], "texture": "#yellow"},
"east": {"uv": [6, 0, 7, 4], "texture": "#yellow"},
"south": {"uv": [6, 0, 10, 4], "texture": "#yellow"},
"west": {"uv": [9, 0, 10, 4], "texture": "#yellow"},
"up": {"uv": [6, 9, 10, 10], "texture": "#yellow", "cullface": "up"}
}
},
{
"name": "E",
"from": [7, 12, 10],
"to": [9, 16, 11],
"faces": {
"north": {"uv": [7, 0, 9, 4], "texture": "#yellow"},
"east": {"uv": [5, 0, 6, 4], "texture": "#yellow"},
"south": {"uv": [7, 0, 9, 4], "texture": "#yellow"},
"west": {"uv": [10, 0, 11, 4], "texture": "#yellow"},
"up": {"uv": [7, 10, 9, 11], "texture": "#yellow", "cullface": "up"}
}
},
{
"name": "A",
"from": [7, 8, 5],
"to": [9, 12, 6],
"faces": {
"north": {"uv": [7, 4, 9, 8], "texture": "#black"},
"east": {"uv": [10, 4, 11, 8], "texture": "#black"},
"south": {"uv": [7, 4, 9, 8], "texture": "#black"},
"west": {"uv": [5, 4, 6, 8], "texture": "#black"}
}
},
{
"name": "B",
"from": [6, 8, 6],
"to": [10, 12, 7],
"faces": {
"north": {"uv": [6, 4, 10, 8], "texture": "#black"},
"east": {"uv": [9, 4, 10, 8], "texture": "#black"},
"south": {"uv": [6, 4, 10, 8], "texture": "#black"},
"west": {"uv": [6, 4, 7, 8], "texture": "#black"}
}
},
{
"name": "C",
"from": [5, 8, 7],
"to": [11, 12, 9],
"faces": {
"north": {"uv": [5, 4, 11, 8], "texture": "#black"},
"east": {"uv": [7, 4, 9, 8], "texture": "#black"},
"south": {"uv": [5, 4, 11, 8], "texture": "#black"},
"west": {"uv": [7, 4, 9, 8], "texture": "#black"}
}
},
{
"name": "D",
"from": [6, 8, 9],
"to": [10, 12, 10],
"faces": {
"north": {"uv": [6, 4, 10, 8], "texture": "#black"},
"east": {"uv": [6, 4, 7, 8], "texture": "#black"},
"south": {"uv": [6, 4, 10, 8], "texture": "#black"},
"west": {"uv": [9, 4, 10, 8], "texture": "#black"}
}
},
{
"name": "E",
"from": [7, 8, 10],
"to": [9, 12, 11],
"faces": {
"north": {"uv": [7, 4, 9, 8], "texture": "#black"},
"east": {"uv": [5, 4, 6, 8], "texture": "#black"},
"south": {"uv": [7, 4, 9, 8], "texture": "#black"},
"west": {"uv": [10, 4, 11, 8], "texture": "#black"}
}
},
{
"name": "A",
"from": [7, 4, 5],
"to": [9, 8, 6],
"faces": {
"north": {"uv": [7, 8, 9, 12], "texture": "#yellow"},
"east": {"uv": [10, 8, 11, 12], "texture": "#yellow"},
"south": {"uv": [7, 8, 9, 12], "texture": "#yellow"},
"west": {"uv": [5, 8, 6, 12], "texture": "#yellow"}
}
},
{
"name": "B",
"from": [6, 4, 6],
"to": [10, 8, 7],
"faces": {
"north": {"uv": [6, 8, 10, 12], "texture": "#yellow"},
"east": {"uv": [9, 8, 10, 12], "texture": "#yellow"},
"south": {"uv": [6, 8, 10, 12], "texture": "#yellow"},
"west": {"uv": [6, 8, 7, 12], "texture": "#yellow"}
}
},
{
"name": "C",
"from": [5, 4, 7],
"to": [11, 8, 9],
"faces": {
"north": {"uv": [5, 8, 11, 12], "texture": "#yellow"},
"east": {"uv": [7, 8, 9, 12], "texture": "#yellow"},
"south": {"uv": [5, 8, 11, 12], "texture": "#yellow"},
"west": {"uv": [7, 8, 9, 12], "texture": "#yellow"}
}
},
{
"name": "D",
"from": [6, 4, 9],
"to": [10, 8, 10],
"faces": {
"north": {"uv": [6, 8, 10, 12], "texture": "#yellow"},
"east": {"uv": [6, 8, 7, 12], "texture": "#yellow"},
"south": {"uv": [6, 8, 10, 12], "texture": "#yellow"},
"west": {"uv": [9, 8, 10, 12], "texture": "#yellow"}
}
},
{
"name": "E",
"from": [7, 4, 10],
"to": [9, 8, 11],
"faces": {
"north": {"uv": [7, 8, 9, 12], "texture": "#yellow"},
"east": {"uv": [5, 8, 6, 12], "texture": "#yellow"},
"south": {"uv": [7, 8, 9, 12], "texture": "#yellow"},
"west": {"uv": [10, 8, 11, 12], "texture": "#yellow"}
}
},
{
"name": "A",
"from": [7, 0, 5],
"to": [9, 4, 6],
"faces": {
"north": {"uv": [7, 12, 9, 16], "texture": "#black"},
"east": {"uv": [10, 12, 11, 16], "texture": "#black"},
"south": {"uv": [7, 12, 9, 16], "texture": "#black"},
"west": {"uv": [5, 12, 6, 16], "texture": "#black"},
"down": {"uv": [7, 10, 9, 11], "texture": "#black", "cullface": "down"}
}
},
{
"name": "B",
"from": [6, 0, 6],
"to": [10, 4, 7],
"faces": {
"north": {"uv": [6, 12, 10, 16], "texture": "#black"},
"east": {"uv": [9, 12, 10, 16], "texture": "#black"},
"south": {"uv": [6, 12, 10, 16], "texture": "#black"},
"west": {"uv": [6, 12, 7, 16], "texture": "#black"},
"down": {"uv": [6, 9, 10, 10], "texture": "#black", "cullface": "down"}
}
},
{
"name": "C",
"from": [5, 0, 7],
"to": [11, 4, 9],
"faces": {
"north": {"uv": [5, 12, 11, 16], "texture": "#black"},
"east": {"uv": [7, 12, 9, 16], "texture": "#black"},
"south": {"uv": [5, 12, 11, 16], "texture": "#black"},
"west": {"uv": [7, 12, 9, 16], "texture": "#black"},
"down": {"uv": [5, 7, 11, 9], "texture": "#black", "cullface": "down"}
}
},
{
"name": "D",
"from": [6, 0, 9],
"to": [10, 4, 10],
"faces": {
"north": {"uv": [6, 12, 10, 16], "texture": "#black"},
"east": {"uv": [6, 12, 7, 16], "texture": "#black"},
"south": {"uv": [6, 12, 10, 16], "texture": "#black"},
"west": {"uv": [9, 12, 10, 16], "texture": "#black"},
"down": {"uv": [6, 6, 10, 7], "texture": "#black", "cullface": "down"}
}
},
{
"name": "E",
"from": [7, 0, 10],
"to": [9, 4, 11],
"faces": {
"north": {"uv": [7, 12, 9, 16], "texture": "#black"},
"east": {"uv": [5, 12, 6, 16], "texture": "#black"},
"south": {"uv": [7, 12, 9, 16], "texture": "#black"},
"west": {"uv": [10, 12, 11, 16], "texture": "#black"},
"down": {"uv": [7, 5, 9, 6], "texture": "#black", "cullface": "down"}
}
}
],
"groups": [
{
"name": "L4",
"origin": [0, 0, 0],
"color": 0,
"children": [0, 1, 2, 3, 4]
},
{
"name": "L3",
"origin": [0, 0, 0],
"color": 0,
"children": [5, 6, 7, 8, 9]
},
{
"name": "L2",
"origin": [0, 0, 0],
"color": 0,
"children": [10, 11, 12, 13, 14]
},
{
"name": "L1",
"origin": [0, 0, 0],
"color": 0,
"children": [15, 16, 17, 18, 19]
}
]
}
@@ -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"}
}
}
]
}
@@ -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"}
}
}
]
}
@@ -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"}
}
}
]
}
@@ -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"}
}
}
]
}
@@ -6,7 +6,7 @@
"particle": "wheat_plus:block/road/base", "particle": "wheat_plus:block/road/base",
"base": "wheat_plus:block/road/base", "base": "wheat_plus:block/road/base",
"content": "wheat_plus:block/road/content_gray", "content": "wheat_plus:block/road/content_gray",
"side": "wheat_plus:block/transparent" "side": "wheat_plus:block/common/transparent"
}, },
"elements": [ "elements": [
{ {
@@ -6,7 +6,7 @@
"particle": "wheat_plus:block/road/base", "particle": "wheat_plus:block/road/base",
"base": "wheat_plus:block/road/base", "base": "wheat_plus:block/road/base",
"content": "wheat_plus:block/road/content_gray", "content": "wheat_plus:block/road/content_gray",
"side": "wheat_plus:block/transparent" "side": "wheat_plus:block/common/transparent"
}, },
"elements": [ "elements": [
{ {
@@ -0,0 +1,39 @@
{
"credit": "Created by Frost-ZX using Blockbench.",
"ambientocclusion": false,
"display": {
"thirdperson_righthand": {
"rotation": [70, 0, 0],
"scale": [0.4, 0.4, 0.4]
},
"thirdperson_lefthand": {
"rotation": [70, 0, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"translation": [1, 0, 0],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_lefthand": {
"translation": [1, 0, 0],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"translation": [0, 2, 0],
"scale": [0.5, 0.5, 0.5]
},
"gui": {
"rotation": [20, -145, 0],
"translation": [0, -3, 0],
"scale": [0.4, 0.4, 0.4]
},
"head": {
"translation": [11, 0, 0],
"scale": [0.4, 0.4, 0.4]
},
"fixed": {
"translation": [0, -4, -1],
"scale": [0.5, 0.5, 0.5]
}
}
}
@@ -0,0 +1,175 @@
{
"credit": "Created by Frost-ZX using Blockbench.",
"parent": "wheat_plus:block/statue/player",
"ambientocclusion": false,
"textures": {
"particle": "wheat_plus:block/statue/alex",
"texture": "wheat_plus:block/statue/alex"
},
"elements": [
{
"name": "head",
"from": [4, 23.5, 4],
"to": [12, 31.5, 12],
"faces": {
"north": {"uv": [2, 2, 4, 4], "texture": "#texture"},
"east": {"uv": [0, 2, 2, 4], "texture": "#texture"},
"south": {"uv": [6, 2, 8, 4], "texture": "#texture"},
"west": {"uv": [4, 2, 6, 4], "texture": "#texture"},
"up": {"uv": [4, 2, 2, 0], "texture": "#texture"},
"down": {"uv": [6, 0, 4, 2], "texture": "#texture"}
}
},
{
"name": "body",
"from": [4, 11.5, 6],
"to": [12, 23.5, 10],
"faces": {
"north": {"uv": [5, 5, 7, 8], "texture": "#texture"},
"east": {"uv": [4, 5, 5, 8], "texture": "#texture"},
"south": {"uv": [8, 5, 10, 8], "texture": "#texture"},
"west": {"uv": [7, 5, 8, 8], "texture": "#texture"},
"up": {"uv": [7, 5, 5, 4], "texture": "#texture"},
"down": {"uv": [9, 4, 7, 5], "texture": "#texture"}
}
},
{
"name": "right_arm",
"from": [12, 11.5, 6],
"to": [15, 23.5, 10],
"faces": {
"north": {"uv": [11, 5, 11.75, 8], "texture": "#texture"},
"east": {"uv": [10, 5, 11, 8], "texture": "#texture"},
"south": {"uv": [12.75, 5, 13.5, 8], "texture": "#texture"},
"west": {"uv": [11.75, 5, 12.75, 8], "texture": "#texture"},
"up": {"uv": [11.75, 5, 11, 4], "texture": "#texture"},
"down": {"uv": [12.5, 4, 11.75, 5], "texture": "#texture"}
}
},
{
"name": "left_arm",
"from": [1, 11.5, 6],
"to": [4, 23.5, 10],
"faces": {
"north": {"uv": [9, 13, 9.75, 16], "texture": "#texture"},
"east": {"uv": [8, 13, 9, 16], "texture": "#texture"},
"south": {"uv": [10.75, 13, 11.5, 16], "texture": "#texture"},
"west": {"uv": [9.75, 13, 10.75, 16], "texture": "#texture"},
"up": {"uv": [9.75, 13, 9, 12], "texture": "#texture"},
"down": {"uv": [10.5, 12, 9.75, 13], "texture": "#texture"}
}
},
{
"name": "right_leg",
"from": [4, -0.5, 6],
"to": [8, 11.5, 10],
"faces": {
"north": {"uv": [5, 13, 6, 16], "texture": "#texture"},
"east": {"uv": [4, 13, 5, 16], "texture": "#texture"},
"south": {"uv": [7, 13, 8, 16], "texture": "#texture"},
"west": {"uv": [6, 13, 7, 16], "texture": "#texture"},
"up": {"uv": [6, 13, 5, 12], "texture": "#texture"},
"down": {"uv": [7, 12, 6, 13], "texture": "#texture"}
}
},
{
"name": "left_leg",
"from": [8, -0.5, 6],
"to": [12, 11.5, 10],
"faces": {
"north": {"uv": [1, 5, 2, 8], "texture": "#texture"},
"east": {"uv": [0, 5, 1, 8], "texture": "#texture"},
"south": {"uv": [3, 5, 4, 8], "texture": "#texture"},
"west": {"uv": [2, 5, 3, 8], "texture": "#texture"},
"up": {"uv": [2, 5, 1, 4], "texture": "#texture"},
"down": {"uv": [3, 4, 2, 5], "texture": "#texture"}
}
},
{
"name": "head_2nd_layer",
"from": [3.5, 23, 3.5],
"to": [12.5, 32, 12.5],
"faces": {
"north": {"uv": [10, 2, 12, 4], "texture": "#texture"},
"east": {"uv": [8, 2, 10, 4], "texture": "#texture"},
"south": {"uv": [14, 2, 16, 4], "texture": "#texture"},
"west": {"uv": [12, 2, 14, 4], "texture": "#texture"},
"up": {"uv": [12, 2, 10, 0], "texture": "#texture"},
"down": {"uv": [14, 0, 12, 2], "texture": "#texture"}
}
},
{
"name": "body_2nd_layer",
"from": [4, 11.02, 5.49],
"to": [12, 24.03, 10.49],
"faces": {
"north": {"uv": [5, 9, 7, 12], "texture": "#texture"},
"east": {"uv": [4, 9, 5, 12], "texture": "#texture"},
"south": {"uv": [8, 9, 10, 12], "texture": "#texture"},
"west": {"uv": [7, 9, 8, 12], "texture": "#texture"},
"up": {"uv": [7, 9, 5, 8], "texture": "#texture"},
"down": {"uv": [9, 8, 7, 9], "texture": "#texture"}
}
},
{
"name": "right_arm_2nd_layer",
"from": [11.5, 11, 5.5],
"to": [15.5, 24, 10.5],
"faces": {
"north": {"uv": [10.75, 9, 11.5, 12], "texture": "#texture"},
"east": {"uv": [10, 9, 11, 12], "texture": "#texture"},
"south": {"uv": [12.75, 9, 13.5, 12], "texture": "#texture"},
"west": {"uv": [11.75, 9, 12.75, 12], "texture": "#texture"},
"up": {"uv": [11.75, 9, 11, 8], "texture": "#texture"},
"down": {"uv": [12.5, 8, 11.75, 9], "texture": "#texture"}
}
},
{
"name": "left_arm_2nd_layer",
"from": [0.5, 11, 5.5],
"to": [4.5, 24, 10.5],
"faces": {
"north": {"uv": [13, 13, 13.75, 16], "texture": "#texture"},
"east": {"uv": [12, 13, 13, 16], "texture": "#texture"},
"south": {"uv": [14.75, 13, 15.5, 16], "texture": "#texture"},
"west": {"uv": [13.75, 13, 14.75, 16], "texture": "#texture"},
"up": {"uv": [13.75, 13, 13, 12], "texture": "#texture"},
"down": {"uv": [14.5, 12, 13.75, 13], "texture": "#texture"}
}
},
{
"name": "right_leg_2nd_layer",
"from": [7.5, -1, 5.5],
"to": [12.5, 12, 10.5],
"faces": {
"north": {"uv": [1, 9, 2, 12], "texture": "#texture"},
"east": {"uv": [0, 9, 1, 12], "texture": "#texture"},
"south": {"uv": [3, 9, 4, 12], "texture": "#texture"},
"west": {"uv": [0, 9, 1, 12], "texture": "#texture"},
"up": {"uv": [2, 9, 1, 8], "texture": "#texture"},
"down": {"uv": [3, 8, 2, 9], "texture": "#texture"}
}
},
{
"name": "left_leg_2nd_layer",
"from": [3.5, -1, 5.5],
"to": [8.5, 12, 10.5],
"faces": {
"north": {"uv": [1, 13, 2, 16], "texture": "#texture"},
"east": {"uv": [0, 13, 1, 16], "texture": "#texture"},
"south": {"uv": [3, 13, 4, 16], "texture": "#texture"},
"west": {"uv": [2, 13, 3, 16], "texture": "#texture"},
"up": {"uv": [2, 13, 1, 12], "texture": "#texture"},
"down": {"uv": [3, 12, 2, 13], "texture": "#texture"}
}
}
],
"groups": [
{
"name": "Alex",
"origin": [8, 8, 8],
"color": 0,
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
}
]
}
@@ -0,0 +1,175 @@
{
"credit": "Created by Frost-ZX using Blockbench.",
"parent": "wheat_plus:block/statue/player",
"ambientocclusion": false,
"textures": {
"particle": "wheat_plus:block/statue/steve",
"texture": "wheat_plus:block/statue/steve"
},
"elements": [
{
"name": "head",
"from": [4, 23.5, 4],
"to": [12, 31.5, 12],
"faces": {
"north": {"uv": [2, 2, 4, 4], "texture": "#texture"},
"east": {"uv": [0, 2, 2, 4], "texture": "#texture"},
"south": {"uv": [6, 2, 8, 4], "texture": "#texture"},
"west": {"uv": [4, 2, 6, 4], "texture": "#texture"},
"up": {"uv": [4, 2, 2, 0], "texture": "#texture"},
"down": {"uv": [6, 0, 4, 2], "texture": "#texture"}
}
},
{
"name": "body",
"from": [4, 11.5, 6],
"to": [12, 23.5, 10],
"faces": {
"north": {"uv": [5, 5, 7, 8], "texture": "#texture"},
"east": {"uv": [4, 5, 5, 8], "texture": "#texture"},
"south": {"uv": [8, 5, 10, 8], "texture": "#texture"},
"west": {"uv": [7, 5, 8, 8], "texture": "#texture"},
"up": {"uv": [7, 5, 5, 4], "texture": "#texture"},
"down": {"uv": [9, 4, 7, 5], "texture": "#texture"}
}
},
{
"name": "right_arm",
"from": [12, 11.5, 6],
"to": [16, 23.5, 10],
"faces": {
"north": {"uv": [11, 5, 12, 8], "texture": "#texture"},
"east": {"uv": [10, 5, 11, 8], "texture": "#texture"},
"south": {"uv": [13, 5, 14, 8], "texture": "#texture"},
"west": {"uv": [12, 5, 13, 8], "texture": "#texture"},
"up": {"uv": [12, 5, 11, 4], "texture": "#texture"},
"down": {"uv": [13, 4, 12, 5], "texture": "#texture"}
}
},
{
"name": "left_arm",
"from": [0, 11.5, 6],
"to": [4, 23.5, 10],
"faces": {
"north": {"uv": [9, 13, 10, 16], "texture": "#texture"},
"east": {"uv": [8, 13, 9, 16], "texture": "#texture"},
"south": {"uv": [11, 13, 12, 16], "texture": "#texture"},
"west": {"uv": [10, 13, 11, 16], "texture": "#texture"},
"up": {"uv": [10, 13, 9, 12], "texture": "#texture"},
"down": {"uv": [11, 12, 10, 13], "texture": "#texture"}
}
},
{
"name": "right_leg",
"from": [8, -0.5, 6],
"to": [12, 11.5, 10],
"faces": {
"north": {"uv": [1, 5, 2, 8], "texture": "#texture"},
"east": {"uv": [0, 5, 1, 8], "texture": "#texture"},
"south": {"uv": [3, 5, 4, 8], "texture": "#texture"},
"west": {"uv": [2, 5, 3, 8], "texture": "#texture"},
"up": {"uv": [2, 5, 1, 4], "texture": "#texture"},
"down": {"uv": [3, 4, 2, 5], "texture": "#texture"}
}
},
{
"name": "left_leg",
"from": [4, -0.5, 6],
"to": [8, 11.5, 10],
"faces": {
"north": {"uv": [5, 13, 6, 16], "texture": "#texture"},
"east": {"uv": [4, 13, 5, 16], "texture": "#texture"},
"south": {"uv": [7, 13, 8, 16], "texture": "#texture"},
"west": {"uv": [6, 13, 7, 16], "texture": "#texture"},
"up": {"uv": [6, 13, 5, 12], "texture": "#texture"},
"down": {"uv": [7, 12, 6, 13], "texture": "#texture"}
}
},
{
"name": "head_2nd_layer",
"from": [3.5, 23, 3.5],
"to": [12.5, 32, 12.5],
"faces": {
"north": {"uv": [10, 2, 12, 4], "texture": "#texture"},
"east": {"uv": [8, 2, 10, 4], "texture": "#texture"},
"south": {"uv": [14, 2, 16, 4], "texture": "#texture"},
"west": {"uv": [12, 2, 14, 4], "texture": "#texture"},
"up": {"uv": [12, 2, 10, 0], "texture": "#texture"},
"down": {"uv": [14, 0, 12, 2], "texture": "#texture"}
}
},
{
"name": "body_2nd_layer",
"from": [4, 11.02, 5.5],
"to": [12, 24.03, 10.5],
"faces": {
"north": {"uv": [5, 9, 7, 12], "texture": "#texture"},
"east": {"uv": [4, 9, 5, 12], "texture": "#texture"},
"south": {"uv": [8, 9, 10, 12], "texture": "#texture"},
"west": {"uv": [7, 9, 8, 12], "texture": "#texture"},
"up": {"uv": [7, 9, 5, 8], "texture": "#texture"},
"down": {"uv": [9, 8, 7, 9], "texture": "#texture"}
}
},
{
"name": "right_arm_2nd_layer",
"from": [11.5, 11, 5.5],
"to": [16.49, 24, 10.5],
"faces": {
"north": {"uv": [11, 9, 12, 12], "texture": "#texture"},
"east": {"uv": [10, 9, 11, 12], "texture": "#texture"},
"south": {"uv": [13, 9, 14, 12], "texture": "#texture"},
"west": {"uv": [12, 9, 13, 12], "texture": "#texture"},
"up": {"uv": [12, 9, 11, 8], "texture": "#texture"},
"down": {"uv": [13, 8, 12, 9], "texture": "#texture"}
}
},
{
"name": "left_arm_2nd_layer",
"from": [-0.5, 11, 5.5],
"to": [4.5, 24, 10.5],
"faces": {
"north": {"uv": [13, 13, 14, 16], "texture": "#texture"},
"east": {"uv": [12, 13, 13, 16], "texture": "#texture"},
"south": {"uv": [15, 13, 16, 16], "texture": "#texture"},
"west": {"uv": [14, 13, 15, 16], "texture": "#texture"},
"up": {"uv": [14, 13, 13, 12], "texture": "#texture"},
"down": {"uv": [15, 12, 14, 13], "texture": "#texture"}
}
},
{
"name": "right_leg_2nd_layer",
"from": [7.5, -1, 5.5],
"to": [12.5, 12, 10.5],
"faces": {
"north": {"uv": [1, 9, 2, 12], "texture": "#texture"},
"east": {"uv": [0, 9, 1, 12], "texture": "#texture"},
"south": {"uv": [3, 9, 4, 12], "texture": "#texture"},
"west": {"uv": [2, 9, 3, 12], "texture": "#texture"},
"up": {"uv": [2, 9, 1, 8], "texture": "#texture"},
"down": {"uv": [3, 8, 2, 9], "texture": "#texture"}
}
},
{
"name": "left_leg_2nd_layer",
"from": [3.5, -1, 5.5],
"to": [8.5, 12, 10.5],
"faces": {
"north": {"uv": [1, 13, 2, 16], "texture": "#texture"},
"east": {"uv": [0, 13, 1, 16], "texture": "#texture"},
"south": {"uv": [3, 13, 4, 16], "texture": "#texture"},
"west": {"uv": [2, 13, 3, 16], "texture": "#texture"},
"up": {"uv": [2, 12, 1, 11], "texture": "#texture"},
"down": {"uv": [3, 12, 2, 13], "texture": "#texture"}
}
}
],
"groups": [
{
"name": "Steve",
"origin": [8, 8, 8],
"color": 0,
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB