bedrock-development
Version:
APIs for creating and editing files related to Minecraft Bedrock development.
433 lines (432 loc) • 15.5 kB
JavaScript
import { Directories } from "../../file_manager.js";
import { MinecraftDataType } from "../minecraft.js";
export class ClientGeometry extends MinecraftDataType {
static get DirectoryPath() {
return Directories.RESOURCE_PATH + 'models/';
}
constructor(filepath, template) {
super(filepath, template);
this.format_version = template.format_version;
if ("minecraft:geometry" in template) {
this["minecraft:geometry"] = template["minecraft:geometry"];
}
else {
Object.getOwnPropertyNames(template).forEach(prop => {
if (prop.startsWith('geometry.')) {
this[prop] = template[prop];
}
});
}
}
static createFromTemplate(nameData) {
return new ClientGeometry(this.createFilePath(nameData), {
format_version: "1.20.50",
"minecraft:geometry": [
{
description: {
identifier: `geometry.${nameData.namespace}.${nameData.shortname}`,
texture_width: 64,
texture_height: 64,
visible_bounds_width: 2,
visible_bounds_height: 3,
visible_bounds_offset: [0, 0.5, 0]
},
bones: [
{
name: "body",
pivot: [0, 0, 0],
cubes: [
{
origin: [-8, 0, -8],
size: [16, 16, 16],
uv: [0, 0],
}
]
}
]
}
]
});
}
static createFilePath(nameData) {
return this.DirectoryPath + nameData.directory + nameData.shortname + ".geo.json";
}
}
export class ClientGeometryAttachable extends ClientGeometry {
static get DirectoryPath() {
return Directories.RESOURCE_PATH + 'models/entity/player/';
}
static createFromTemplate(nameData) {
return new ClientGeometry(this.createFilePath(nameData), {
format_version: "1.20.50",
"minecraft:geometry": [
{
description: {
identifier: `geometry.${nameData.namespace}.player.${nameData.shortname}`,
texture_width: 32,
texture_height: 32,
visible_bounds_width: 3,
visible_bounds_height: 4.5,
visible_bounds_offset: [0, 1.75, 0]
},
bones: [
{
name: "root",
pivot: [0, 0, 0]
},
{
name: "waist",
parent: "root",
pivot: [0, 12, 0]
},
{
name: "body",
parent: "waist",
pivot: [0, 24, 0]
},
{
name: "head",
parent: "body",
pivot: [0, 24, 0]
},
{
name: "hat",
parent: "head",
pivot: [0, 24, 0]
},
{
name: "cape",
parent: "body",
pivot: [0, 24, 3]
},
{
name: "leftArm",
parent: "body",
pivot: [5, 22, 0]
},
{
name: "leftSleeve",
parent: "leftArm",
pivot: [5, 22, 0]
},
{
name: "leftItem",
parent: "leftArm",
pivot: [6, 15, 1]
},
{
name: "rightArm",
parent: "body",
pivot: [-5, 22, 0]
},
{
name: "rightSleeve",
parent: "rightArm",
pivot: [-5, 22, 0]
},
{
name: "rightItem",
parent: "rightArm",
pivot: [-6, 15, 1],
locators: {
lead_hold: [-6, 15, 1]
}
},
{
name: "first_person_fix",
parent: "rightItem",
pivot: [-6, 8, 0]
},
{
name: nameData.shortname,
parent: "first_person_fix",
pivot: [-6, 8, 0],
cubes: [
{ origin: [-10, 4, -4], size: [8, 8, 8], uv: [0, 0] }
]
},
{
name: "jacket",
parent: "body",
pivot: [0, 24, 0]
},
{
name: "leftLeg",
parent: "root",
pivot: [1.9, 12, 0]
},
{
name: "leftPants",
parent: "leftLeg",
pivot: [1.9, 12, 0]
},
{
name: "rightLeg",
parent: "root",
pivot: [-1.9, 12, 0]
},
{
name: "rightPants",
parent: "rightLeg",
pivot: [-1.9, 12, 0]
}
]
}
]
});
}
static createFilePath(nameData) {
return this.DirectoryPath + nameData.directory + nameData.shortname + ".geo.json";
}
}
export class ClientGeometryArmor extends ClientGeometry {
static get DirectoryPath() {
return Directories.RESOURCE_PATH + 'models/entity/armor/';
}
static createFromTemplate(nameData) {
const geo = new ClientGeometry(this.createFilePath(nameData), {
format_version: "1.8.0",
});
geo[`geometry.${nameData.namespace}.player.${nameData.shortname}.armor.base`] = {
texturewidth: 64,
textureheight: 64,
visible_bounds_width: 3,
visible_bounds_height: 3,
visible_bounds_offset: [0, 1.5, 0],
bones: [
{
"name": "waist",
"pivot": [0, 12, 0]
},
{
"name": "body",
"parent": "waist",
"pivot": [0, 24, 0],
"cubes": [
{ "origin": [-4, 12, -2], "size": [8, 12, 4], "uv": [16, 16], "inflate": 1.01 }
]
},
{
"name": "head",
"parent": "body",
"pivot": [0, 24, 0],
"cubes": [
{ "origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [0, 0], "inflate": 1 }
]
},
{
"name": "hat",
"parent": "head",
"pivot": [0, 24, 0],
"cubes": [
{ "origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 1 }
]
},
{
"name": "rightArm",
"parent": "body",
"pivot": [-5, 22, 0],
"cubes": [
{ "origin": [-8, 12, -2], "size": [4, 12, 4], "uv": [40, 16], "inflate": 1 }
]
},
{
"name": "rightItem",
"parent": "rightArm",
"pivot": [-6, 15, 1]
},
{
"name": "leftArm",
"parent": "body",
"pivot": [5, 22, 0],
"mirror": true,
"cubes": [
{ "origin": [4, 12, -2], "size": [4, 12, 4], "uv": [40, 16], "inflate": 1 }
]
},
{
"name": "torso",
"parent": "body",
"pivot": [0, 24, 0],
"cubes": [
{ "origin": [-4, 12, -2], "size": [8, 12, 4], "uv": [16, 48], "inflate": 0.5 }
]
},
{
"name": "rightLeg",
"parent": "body",
"pivot": [-1.9, 12, 0],
"cubes": [
{ "origin": [-3.9, 0, -2], "size": [4, 12, 4], "uv": [0, 48], "inflate": 0.49 }
]
},
{
"name": "rightBoot",
"parent": "rightLeg",
"pivot": [-1.9, 12, 0],
"cubes": [
{ "origin": [-3.9, 0, -2], "size": [4, 12, 4], "uv": [0, 16], "inflate": 1 }
]
},
{
"name": "leftLeg",
"parent": "body",
"pivot": [1.9, 12, 0],
"mirror": true,
"cubes": [
{ "origin": [-0.1, 0, -2], "size": [4, 12, 4], "uv": [0, 48], "inflate": 0.49 }
]
},
{
"name": "leftBoot",
"parent": "leftLeg",
"pivot": [1.9, 12, 0],
"mirror": true,
"cubes": [
{ "origin": [-0.1, 0, -2], "size": [4, 12, 4], "uv": [0, 16], "inflate": 1 }
]
}
],
};
geo[`geometry.${nameData.namespace}.player.${nameData.shortname}.armor.helmet:geometry.${nameData.namespace}.player.${nameData.shortname}.armor.base`] = {
bones: [
{
"name": "body",
"neverRender": true
},
{
"name": "torso",
"neverRender": true
},
{
"name": "rightArm",
"neverRender": true
},
{
"name": "leftArm",
"neverRender": true
},
{
"name": "rightLeg",
"neverRender": true
},
{
"name": "leftLeg",
"neverRender": true
},
{
"name": "rightBoot",
"neverRender": true
},
{
"name": "leftBoot",
"neverRender": true
}
]
};
geo[`geometry.${nameData.namespace}.player.${nameData.shortname}.armor.chestplate:geometry.${nameData.namespace}.player.${nameData.shortname}.armor.base`] = {
bones: [
{
"name": "head",
"neverRender": true
},
{
"name": "hat",
"neverRender": true
},
{
"name": "torso",
"neverRender": true
},
{
"name": "rightLeg",
"neverRender": true
},
{
"name": "leftLeg",
"neverRender": true
},
{
"name": "rightBoot",
"neverRender": true
},
{
"name": "leftBoot",
"neverRender": true
}
]
};
geo[`geometry.${nameData.namespace}.player.${nameData.shortname}.armor.leggings:geometry.${nameData.namespace}.player.${nameData.shortname}.armor.base`] = {
bones: [
{
"name": "body",
"neverRender": true
},
{
"name": "head",
"neverRender": true
},
{
"name": "hat",
"neverRender": true
},
{
"name": "rightArm",
"neverRender": true
},
{
"name": "leftArm",
"neverRender": true
},
{
"name": "rightBoot",
"neverRender": true
},
{
"name": "leftBoot",
"neverRender": true
}
]
};
geo[`geometry.${nameData.namespace}.player.${nameData.shortname}.armor.boots:geometry.${nameData.namespace}.player.${nameData.shortname}.armor.base`] = {
bones: [
{
"name": "head",
"neverRender": true
},
{
"name": "hat",
"neverRender": true
},
{
"name": "body",
"neverRender": true
},
{
"name": "torso",
"neverRender": true
},
{
"name": "rightArm",
"neverRender": true
},
{
"name": "leftArm",
"neverRender": true
},
{
"name": "rightLeg",
"neverRender": true
},
{
"name": "leftLeg",
"neverRender": true
}
]
};
return geo;
}
static createFilePath(nameData) {
return this.DirectoryPath + nameData.directory + nameData.shortname + ".geo.json";
}
}