feat(items): panda plushie with variations

This commit is contained in:
Guz
2026-06-06 14:31:12 -03:00
parent 49164b5618
commit e6f5b4bd7e
28 changed files with 1192 additions and 8 deletions

475
.meta/generate_plushies.js Normal file
View File

@@ -0,0 +1,475 @@
import fs from "node:fs/promises";
const NAMESPACE = "sixsides_cosmetics";
/**
* @typedef {{
* name: {
* [lang: string]: string
* fallback: string
* color: Color = "white"
* bold?: boolean = true
* italic?: boolean = false
* }
* lore?: {
* [lang: string]: string
* fallback: string
* color: Color = "white"
* bold?: boolean = false
* italic?: boolean = true
* }
* recipe: {
* type?: RecipeType = "shaped"
* category?: RecipeCategory = "equipment"
* group?: string
* key: {
* [key: string]: string
* }
* resultID?: string = "minecraft:white_wool"
* pattern: [string, string, string]
* }
* variants?: {
* [key:string]: {
* parent?: string
* suffix: {
* [lang: string]: string
* fallback?: string
* color?: Color = "white"
* bold?: boolean = false
* italic?: boolean = true
* }
* lore?: {
* [lang: string]: string
* fallback: string
* color?: Color = "white"
* bold?: boolean = false
* italic?: boolean = true
* }
* recipe?: {
* type?: RecipeType = "shaped"
* category?: RecipeCategory = "equipment"
* key?: {
* [key: string]: string
* }
* pattern?: [string, string, string]
* resultID?: string = "minecraft:white_wool"
* }
* textures?: {[key:string]: string}
* }
* }
* model?: {
* parent: string,
* textures?: {[key:string]: string}
* }
* }} Item
*
* @typedef {"black"
* | "dark_blue"
* | "dark_green"
* | "dark_agua"
* | "dark_red"
* | "dark_purple"
* | "gold"
* | "gray"
* | "dark_gray"
* | "blue"
* | "green"
* | "aqua"
* | "red"
* | "light_purple"
* | "yellow"
* | "white"
* } Color
*
* @typedef {"shaped"} RecipeType
* @typedef {"equipment"} RecipeCategory
*/
/**
* @type {{[item: string]: Item}}
*/
const ITEMS = {
panda_plushie: {
name: {
pt_br: "Pelúcia de Panda",
fallback: "Panda Plushie",
color: "white",
},
recipe: {
key: {
A: "minecraft:bamboo",
},
pattern: [
" A ", //
"A#A",
" A ",
],
},
variants: {
aggressive: {
suffix: {
pt_br: "(Agressivo)",
fallback: "(Agressive)",
},
recipe: {
key: {
B: "minecraft:blaze_powder",
},
pattern: [
" A ", //
"A#A",
" B ",
],
},
textures: {
2: "minecraft:entity/panda/aggressive_panda_baby",
particle: "minecraft:entity/panda/aggressive_panda_baby",
},
},
brown: {
suffix: {
pt_br: "(Marrom)",
fallback: "(Brown)",
color: "gold",
},
recipe: {
key: {
"#": "minecraft:brown_wool",
},
pattern: [
" A ", //
"A#A",
" A ",
],
},
textures: {
2: "minecraft:entity/panda/brown_panda_baby",
particle: "minecraft:entity/panda/brown_panda_baby",
},
},
lazy: {
suffix: {
pt_br: "(Preguiçoso)",
fallback: "(Lazy)",
},
recipe: {
key: {
B: "#minecraft:beds",
},
pattern: [
" A ", //
"A#A",
" B ",
],
},
textures: {
2: "minecraft:entity/panda/lazy_panda_baby",
particle: "minecraft:entity/panda/lazy_panda_baby",
},
},
playful: {
suffix: {
pt_br: "(Brincalhão)",
fallback: "(Playful)",
},
recipe: {
key: {
B: "minecraft:pink_dye",
},
pattern: [
" A ", //
"A#A",
" B ",
],
},
textures: {
2: "minecraft:entity/panda/playful_panda_baby",
particle: "minecraft:entity/panda/playful_panda_baby",
},
},
weak: {
suffix: {
pt_br: "(Fraco)",
fallback: "(Weak)",
},
recipe: {
key: {
B: "minecraft:slime_ball",
},
pattern: [
" A ", //
"A#A",
" B ",
],
},
textures: {
2: "minecraft:entity/panda/weak_panda_baby",
particle: "minecraft:entity/panda/weak_panda_baby",
},
},
worried: {
suffix: {
pt_br: "(Preocupado)",
fallback: "(Worried)",
},
recipe: {
key: {
B: "minecraft:glass_pane",
},
pattern: [
" A ", //
"A#A",
" B ",
],
},
textures: {
2: "minecraft:entity/panda/worried_panda_baby",
particle: "minecraft:entity/panda/worried_panda_baby",
},
},
},
},
};
for (const [k, v] of Object.entries(ITEMS)) {
console.log(`${k}: Adding default values`);
v.name.en_us ??= v.name.fallback;
if (v.name.pt_br) {
v.name.pt_pt ??= v.name.pt_br;
}
v.name.color ??= "white";
v.name.bold ??= true;
v.name.italic ??= false;
if (v.lore) {
v.lore.en_us ??= v.lore.fallback;
if (v.lore.pt_br) {
v.lore.pt_pt ??= v.lore.pt_br;
}
v.lore.color ??= "white";
v.lore.bold ??= false;
v.lore.italic ??= true;
}
v.recipe.type ??= "shaped";
v.recipe.category ??= "misc";
v.recipe.key["#"] ??= "minecraft:white_wool";
v.recipe.resultID ??= v.recipe.key["#"];
}
for (const [k, v] of Object.entries(ITEMS)) {
console.log(`${k}: Generating plushie variants`);
if (!v.recipe.group && v.variants) {
v.recipe.group = `${NAMESPACE}:${k}`;
}
for (const [vk, vv] of Object.entries(v.variants ?? {})) {
console.log(`${k}: Generating variant ${vk}`);
ITEMS[`${k}_${vk}`] = {
name: {
...Object.fromEntries(
Object.entries(vv.suffix).map(([sk, sv]) => [
sk,
`${v.name[sk] ?? v.name.fallback} ${sv}`,
]),
),
color: vv.suffix.color ?? v.name.color,
bold: vv.suffix.bold ?? v.name.bold,
italic: vv.suffix.italic ?? v.name.italic,
},
lore:
v.lore || vv.lore
? {
...v.lore,
...vv.lore,
}
: null,
recipe: {
...v.recipe,
...vv.recipe,
group: v.recipe.group,
key: { ...v.recipe.key, ...vv.recipe.key },
},
model: {
parent: `${NAMESPACE}:item/${k}`,
textures: vv.textures,
},
};
ITEMS[`${k}_${vk}`].name.en_us ??= ITEMS[`${k}_${vk}`].name.fallback;
if (ITEMS[`${k}_${vk}`].name.pt_br) {
ITEMS[`${k}_${vk}`].name.pt_pt ??= ITEMS[`${k}_${vk}`].name.pt_br;
}
if (ITEMS[`${k}_${vk}`].lore) {
ITEMS[`${k}_${vk}`].lore.en_us ??= ITEMS[`${k}_${vk}`].lore.fallback;
if (ITEMS[`${k}_${vk}`].lore.pt_br) {
ITEMS[`${k}_${vk}`].lore.pt_pt ??= ITEMS[`${k}_${vk}`].lore.pt_br;
}
}
}
}
/** @type {Map<string, {[key: string]: string}} */
const langFiles = new Map();
for (const [k, v] of Object.entries(ITEMS)) {
console.log(`${k}: Generating plushie`);
console.log(`${k}: Getting name translations`);
const nameLangs = Object.entries(v.name).filter(([k, _]) => {
if (!k.includes("_")) {
return false;
}
if (k.split("_").length != 2) {
return false;
}
return !["bold", "color", "fallback", "italic"].includes(k);
});
for (const [lang, text] of nameLangs) {
langFiles.set(lang, {
...langFiles.get(lang),
[`${NAMESPACE}.item.${k}`]: text,
});
}
console.log(`${k}: Getting lore translations`);
const loreLangs = Object.entries(v.lore ?? {}).filter(([k, _]) => {
if (!k.includes("_")) {
return false;
}
if (k.split("_").length != 2) {
return false;
}
return !["bold", "color", "fallback", "italic"].includes(k);
});
for (const [lang, text] of loreLangs) {
langFiles.set(lang, {
...langFiles.get(lang),
[`${NAMESPACE}.item.${k}.lore`]: text,
});
}
console.log(`${k}: Writing item model file`);
await fs.mkdir(`./assets/${NAMESPACE}/items`, { recursive: true });
await fs.writeFile(
`./assets/${NAMESPACE}/items/${k}.json`,
JSON.stringify(
{
__sixsides_generator: "generate_plushie.js",
model: {
type: "minecraft:model",
model: `${NAMESPACE}:item/${k}`,
},
},
null,
2,
),
);
if (v.model) {
console.log(`${k}: Writing model file`);
await fs.mkdir(`./assets/${NAMESPACE}/models/item`, { recursive: true });
await fs.writeFile(
`./assets/${NAMESPACE}/models/item/${k}.json`,
JSON.stringify(
{
__sixsides_generator: "generate_plushie.js",
parent: v.model.parent,
textures: Object.fromEntries(
Object.entries(v.model.textures).map(([k, v]) => [
k,
v.includes(":") ? v : `${NAMESPACE}:${v}`,
]),
),
},
null,
2,
),
);
}
console.log(`${k}: Writing recipe file`);
await fs.mkdir(`./data/${NAMESPACE}/recipe`, { recursive: true });
await fs.writeFile(
`./data/${NAMESPACE}/recipe/${k}.json`,
JSON.stringify(
{
__sixsides_generator: "generate_plushie.js",
type: "minecraft:crafting_shaped",
category: v.recipe.category,
...(v.recipe.group ? { group: v.recipe.group } : {}),
key: v.recipe.key,
pattern: v.recipe.pattern,
result: {
count: 1,
id: v.recipe.key["#"] || "minecraft:white_wool",
components: {
"!minecraft:consumable": {},
"minecraft:equippable": {
slot: "head",
equip_on_interact: true,
},
"minecraft:item_model": `${NAMESPACE}:${k}`,
"minecraft:item_name": {
type: "translatable",
translate: `${NAMESPACE}.item.${k}`,
fallback: v.name.fallback,
color: v.name.color,
bold: v.name.bold,
italic: v.name.italic,
},
...(v.lore
? {
"minecraft:lore": [
{
type: "translatable",
translate: `${NAMESPACE}.item.${k}.lore`,
fallback: v.lore.fallback,
color: v.lore.color,
bold: v.lore.bold,
italic: v.lore.italic,
},
],
}
: {}),
"minecraft:repairable": { items: v.recipe.key["#"] },
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1,
},
},
},
null,
2,
),
);
}
for (const [lang, translations] of langFiles) {
console.log(`${lang}: Writing lang file`);
await fs.mkdir(`./assets/${NAMESPACE}/lang`, { recursive: true });
const content = await fs.readFile(`./assets/${NAMESPACE}/lang/${lang}.json`);
await fs.writeFile(
`./assets/${NAMESPACE}/lang/${lang}.json`,
JSON.stringify(
{
...JSON.parse(content.toString()),
...translations,
},
null,
2,
),
);
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,9 @@
{
"sources": [
{
"type": "minecraft:directory",
"prefix": "entity/",
"source": "entity"
}
]
}

View File

@@ -0,0 +1,7 @@
{
"__sixsides_generator": "generate_plushie.js",
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/panda_plushie"
}
}

View File

@@ -0,0 +1,7 @@
{
"__sixsides_generator": "generate_plushie.js",
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/panda_plushie_aggressive"
}
}

View File

@@ -0,0 +1,7 @@
{
"__sixsides_generator": "generate_plushie.js",
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/panda_plushie_brown"
}
}

View File

@@ -0,0 +1,7 @@
{
"__sixsides_generator": "generate_plushie.js",
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/panda_plushie_lazy"
}
}

View File

@@ -0,0 +1,7 @@
{
"__sixsides_generator": "generate_plushie.js",
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/panda_plushie_playful"
}
}

View File

@@ -0,0 +1,7 @@
{
"__sixsides_generator": "generate_plushie.js",
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/panda_plushie_weak"
}
}

View File

@@ -0,0 +1,7 @@
{
"__sixsides_generator": "generate_plushie.js",
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/panda_plushie_worried"
}
}

View File

@@ -51,6 +51,12 @@
"sixsides_cosmetics.item.construction_hat": "Construction Hat",
"sixsides_cosmetics.item.construction_hat.lore": "Safety first!",
"sixsides_cosmetics.item.shark_plushie_head": "Shark Head",
"sixsides_cosmetics.item.shark_plushie_head.lore": "♬ Baby Sha... ♬"
}
"sixsides_cosmetics.item.shark_plushie_head.lore": "♬ Baby Sha... ♬",
"sixsides_cosmetics.item.panda_plushie": "Panda Plushie",
"sixsides_cosmetics.item.panda_plushie_aggressive": "Panda Plushie (Agressive)",
"sixsides_cosmetics.item.panda_plushie_brown": "Panda Plushie (Brown)",
"sixsides_cosmetics.item.panda_plushie_lazy": "Panda Plushie (Lazy)",
"sixsides_cosmetics.item.panda_plushie_playful": "Panda Plushie (Playful)",
"sixsides_cosmetics.item.panda_plushie_weak": "Panda Plushie (Weak)",
"sixsides_cosmetics.item.panda_plushie_worried": "Panda Plushie (Worried)"
}

View File

@@ -51,6 +51,12 @@
"sixsides_cosmetics.item.construction_hat": "Chapéu de Construção",
"sixsides_cosmetics.item.construction_hat.lore": "Segurança em primeiro lugar!",
"sixsides_cosmetics.item.shark_plushie_head": "Cabeça de Tubarão",
"sixsides_cosmetics.item.shark_plushie_head.lore": "♬ Baby Sha... ♬"
}
"sixsides_cosmetics.item.shark_plushie_head.lore": "♬ Baby Sha... ♬",
"sixsides_cosmetics.item.panda_plushie": "Pelúcia de Panda",
"sixsides_cosmetics.item.panda_plushie_aggressive": "Pelúcia de Panda (Agressivo)",
"sixsides_cosmetics.item.panda_plushie_brown": "Pelúcia de Panda (Marrom)",
"sixsides_cosmetics.item.panda_plushie_lazy": "Pelúcia de Panda (Preguiçoso)",
"sixsides_cosmetics.item.panda_plushie_playful": "Pelúcia de Panda (Brincalhão)",
"sixsides_cosmetics.item.panda_plushie_weak": "Pelúcia de Panda (Fraco)",
"sixsides_cosmetics.item.panda_plushie_worried": "Pelúcia de Panda (Preocupado)"
}

View File

@@ -51,5 +51,13 @@
"sixsides_cosmetics.item.construction_hat": "Chapéu de Construção",
"sixsides_cosmetics.item.construction_hat.lore": "Segurança em primeiro lugar!",
"sixsides_cosmetics.item.shark_plushie_head": "Cabeça de Tubarão",
"sixsides_cosmetics.item.shark_plushie_head.lore": "♬ Baby Sha... ♬"
}
"sixsides_cosmetics.item.shark_plushie_head.lore": "♬ Baby Sha... ♬",
"sixsides_cosmetics.item.panda_plushie": "Pelúcia de Panda",
"sixsides_cosmetics.item.panda_plushie_aggressive.lore": "Curiosidade: Os pandas eram originalmente um pouco mais magros.",
"sixsides_cosmetics.item.panda_plushie_aggressive": "Pelúcia de Panda (Agressivo)",
"sixsides_cosmetics.item.panda_plushie_brown": "Pelúcia de Panda (Marrom)",
"sixsides_cosmetics.item.panda_plushie_lazy": "Pelúcia de Panda (Preguiçoso)",
"sixsides_cosmetics.item.panda_plushie_playful": "Pelúcia de Panda (Brincalhão)",
"sixsides_cosmetics.item.panda_plushie_weak": "Pelúcia de Panda (Fraco)",
"sixsides_cosmetics.item.panda_plushie_worried": "Pelúcia de Panda (Preocupado)"
}

View File

@@ -0,0 +1,296 @@
{
"format_version": "1.21.11",
"credit": "Made with Blockbench",
"texture_size": [64, 64],
"textures": {
"2": "minecraft:entity/panda/panda_baby",
"particle": "minecraft:entity/panda/panda_baby"
},
"elements": [
{
"from": [3, 0, 3],
"to": [13, 6.5, 15],
"rotation": { "angle": 0, "axis": "y", "origin": [7, 0, 1] },
"faces": {
"north": { "uv": [2.75, 5.5, 5, 7.25], "texture": "#2" },
"east": { "uv": [0, 5.5, 2.75, 7.25], "texture": "#2" },
"south": { "uv": [7.75, 5.5, 10, 7.25], "texture": "#2" },
"west": { "uv": [5, 5.5, 7.75, 7.25], "texture": "#2" },
"up": { "uv": [5, 5.5, 2.75, 2.75], "texture": "#2" },
"down": { "uv": [7.25, 2.75, 5, 5.5], "texture": "#2" }
}
},
{
"from": [4.5, 0.5, 0.1],
"to": [11.5, 5.5, 5.1],
"rotation": { "angle": -20, "axis": "x", "origin": [5, 0, 3.1] },
"faces": {
"north": { "uv": [1.25, 1.5, 3, 2.75], "texture": "#2" },
"east": { "uv": [0.25, 1.5, 1.25, 2.75], "texture": "#2" },
"south": { "uv": [4, 1.25, 5.75, 2.75], "texture": "#2" },
"west": { "uv": [3, 1.5, 4, 2.75], "texture": "#2" },
"up": { "uv": [3, 1.25, 1.25, 0.25], "texture": "#2" },
"down": { "uv": [4.75, 0, 3, 1], "texture": "#2" }
}
},
{
"from": [6, 0, -0.9],
"to": [10, 2, 0.1],
"rotation": { "angle": -20, "axis": "x", "origin": [7, 0, 2.1] },
"faces": {
"north": { "uv": [6.25, 1.75, 7.25, 2.25], "texture": "#2" },
"east": { "uv": [6, 1.75, 6.25, 2.25], "texture": "#2" },
"south": { "uv": [7.25, 1.75, 8.25, 2.25], "texture": "#2" },
"west": { "uv": [6, 1.75, 6.25, 2.25], "texture": "#2" },
"up": { "uv": [7.25, 1.75, 6.25, 1.5], "texture": "#2" },
"down": { "uv": [8.25, 1.5, 7.25, 1.75], "texture": "#2" }
}
},
{
"from": [4, 3.5, 2.6],
"to": [7, 6.5, 3.6],
"rotation": { "angle": -20, "axis": "x", "origin": [7, 0, 2.6] },
"faces": {
"north": { "uv": [6.25, 0.25, 7, 1], "texture": "#2" },
"east": { "uv": [7.75, 0.25, 8, 1], "texture": "#2" },
"south": { "uv": [7, 0.25, 7.75, 1], "texture": "#2" },
"west": { "uv": [6, 0.25, 6.25, 1], "texture": "#2" },
"up": { "uv": [7, 0.25, 6.25, 0], "texture": "#2" },
"down": { "uv": [7.75, 0, 7, 0.25], "texture": "#2" }
}
},
{
"from": [9, 3.5, 2.6],
"to": [12, 6.5, 3.6],
"rotation": { "angle": -20, "axis": "x", "origin": [9, 0, 2.6] },
"faces": {
"north": { "uv": [8.5, 0.25, 9.25, 1], "texture": "#2" },
"east": { "uv": [8.25, 0.25, 8.5, 1], "texture": "#2" },
"south": { "uv": [9.25, 0.25, 10, 1], "texture": "#2" },
"west": { "uv": [10, 0.25, 10.25, 1], "texture": "#2" },
"up": { "uv": [9.25, 0.25, 8.5, 0], "texture": "#2" },
"down": { "uv": [10, 0, 9.25, 0.25], "texture": "#2" }
}
},
{
"from": [1, -1, 1],
"to": [3, 2, 4],
"rotation": {
"x": -10.11783,
"y": -22.9824,
"z": 24.56202,
"origin": [1, 0, 1]
},
"faces": {
"north": { "uv": [3, 8, 3.75, 8.5], "texture": "#2" },
"east": { "uv": [3.75, 7.25, 4.5, 8], "rotation": 90, "texture": "#2" },
"south": { "uv": [4.5, 8, 5.25, 8.5], "texture": "#2" },
"west": { "uv": [4.5, 7.25, 5.25, 8], "texture": "#2" },
"up": { "uv": [4.5, 8.5, 3.75, 8], "rotation": 270, "texture": "#2" },
"down": { "uv": [5.25, 8.5, 6, 8], "rotation": 270, "texture": "#2" }
}
},
{
"from": [3, -1, 1],
"to": [7, 2, 4],
"rotation": {
"x": -10.11783,
"y": -22.9824,
"z": 24.56202,
"origin": [1, 0, 1]
},
"faces": {
"north": { "uv": [3, 8, 3.75, 8.5], "texture": "#2" },
"east": { "uv": [3.75, 7.25, 4.5, 8], "rotation": 90, "texture": "#2" },
"south": { "uv": [4.5, 8, 5.25, 8.5], "texture": "#2" },
"west": { "uv": [4.5, 7.25, 5.25, 8], "texture": "#2" },
"up": { "uv": [4.5, 8.25, 3.75, 8], "rotation": 270, "texture": "#2" },
"down": { "uv": [5.25, 8.25, 6, 8], "rotation": 270, "texture": "#2" }
}
},
{
"from": [1, -1, 9.5],
"to": [3, 2, 12.5],
"rotation": {
"x": -10.11783,
"y": -22.9824,
"z": 24.56202,
"origin": [1, 0, 10]
},
"faces": {
"north": { "uv": [3, 8, 3.75, 8.5], "texture": "#2" },
"east": { "uv": [3.75, 7.25, 4.5, 8], "rotation": 90, "texture": "#2" },
"south": { "uv": [4.5, 8, 5.25, 8.5], "texture": "#2" },
"west": { "uv": [4.5, 7.25, 5.25, 8], "texture": "#2" },
"up": { "uv": [4.5, 8.5, 3.75, 8], "rotation": 270, "texture": "#2" },
"down": { "uv": [5.25, 8.5, 6, 8], "rotation": 270, "texture": "#2" }
}
},
{
"from": [3, -1, 9.5],
"to": [7, 2, 12.5],
"rotation": {
"x": -10.11783,
"y": -22.9824,
"z": 24.56202,
"origin": [1, 0, 10]
},
"faces": {
"north": { "uv": [3, 8, 3.75, 8.5], "texture": "#2" },
"east": { "uv": [3.75, 7.25, 4.5, 8], "rotation": 90, "texture": "#2" },
"south": { "uv": [4.5, 8, 5.25, 8.5], "texture": "#2" },
"west": { "uv": [4.5, 7.25, 5.25, 8], "texture": "#2" },
"up": { "uv": [4.5, 8.25, 3.75, 8], "rotation": 270, "texture": "#2" },
"down": { "uv": [5.25, 8.25, 6, 8], "rotation": 270, "texture": "#2" }
}
},
{
"from": [13, -1, 1],
"to": [15, 2, 4],
"rotation": {
"x": -10.11783,
"y": 22.9824,
"z": -24.56202,
"origin": [15, 0, 1]
},
"faces": {
"north": { "uv": [3.75, 8, 3, 8.5], "texture": "#2" },
"east": { "uv": [5.25, 7.25, 4.5, 8], "texture": "#2" },
"south": { "uv": [5.25, 8, 4.5, 8.5], "texture": "#2" },
"west": { "uv": [3.75, 8, 4.5, 7.25], "rotation": 90, "texture": "#2" },
"up": { "uv": [4.5, 8, 3.75, 8.5], "rotation": 270, "texture": "#2" },
"down": { "uv": [5.25, 8, 6, 8.5], "rotation": 270, "texture": "#2" }
}
},
{
"from": [9, -1, 1],
"to": [13, 2, 4],
"rotation": {
"x": -10.11783,
"y": 22.9824,
"z": -24.56202,
"origin": [15, 0, 1]
},
"faces": {
"north": { "uv": [3.75, 8, 3, 8.5], "texture": "#2" },
"east": { "uv": [5.25, 7.25, 4.5, 8], "texture": "#2" },
"south": { "uv": [5.25, 8, 4.5, 8.5], "texture": "#2" },
"west": { "uv": [3.75, 8, 4.5, 7.25], "rotation": 90, "texture": "#2" },
"up": { "uv": [4.5, 8, 3.75, 8.25], "rotation": 270, "texture": "#2" },
"down": { "uv": [5.25, 8, 6, 8.25], "rotation": 270, "texture": "#2" }
}
},
{
"from": [13, -1, 9.5],
"to": [15, 2, 12.5],
"rotation": {
"x": -10.11783,
"y": 22.9824,
"z": -24.56202,
"origin": [15, 0, 10]
},
"faces": {
"north": { "uv": [3.75, 8, 3, 8.5], "texture": "#2" },
"east": { "uv": [5.25, 7.25, 4.5, 8], "texture": "#2" },
"south": { "uv": [5.25, 8, 4.5, 8.5], "texture": "#2" },
"west": { "uv": [3.75, 8, 4.5, 7.25], "rotation": 90, "texture": "#2" },
"up": { "uv": [4.5, 8, 3.75, 8.5], "rotation": 270, "texture": "#2" },
"down": { "uv": [5.25, 8, 6, 8.5], "rotation": 270, "texture": "#2" }
}
},
{
"from": [9, -1, 9.5],
"to": [13, 2, 12.5],
"rotation": {
"x": -10.11783,
"y": 22.9824,
"z": -24.56202,
"origin": [15, 0, 10]
},
"faces": {
"north": { "uv": [3.75, 8, 3, 8.5], "texture": "#2" },
"east": { "uv": [5.25, 7.25, 4.5, 8], "texture": "#2" },
"south": { "uv": [5.25, 8, 4.5, 8.5], "texture": "#2" },
"west": { "uv": [3.75, 8, 4.5, 7.25], "rotation": 90, "texture": "#2" },
"up": { "uv": [4.5, 8, 3.75, 8.25], "rotation": 270, "texture": "#2" },
"down": { "uv": [5.25, 8, 6, 8.25], "rotation": 270, "texture": "#2" }
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [51.5, 0, 0],
"scale": [0.74414, 0.74414, 0.74414]
},
"thirdperson_lefthand": {
"rotation": [51.5, 0, 0],
"scale": [0.74414, 0.74414, 0.74414]
},
"firstperson_righthand": {
"rotation": [137.48, 39.04, -177.72],
"translation": [2, 4.25, -5.25],
"scale": [0.87305, 0.87305, 0.87305]
},
"firstperson_lefthand": {
"rotation": [137.48, 39.04, -177.72],
"translation": [2, 4.25, -5.25],
"scale": [0.87305, 0.87305, 0.87305]
},
"ground": {
"translation": [0, 3.75, 0],
"scale": [0.77734, 0.77734, 0.77734]
},
"gui": {
"rotation": [-180, -1.25, -180],
"translation": [0, 4, 0],
"scale": [0.88086, 0.88086, 0.88086]
},
"head": {
"translation": [0, 13.5, 0.25]
},
"fixed": {
"rotation": [-90.75, 0, 0],
"translation": [0, -0.75, -17.25],
"scale": [2.23633, 2.23633, 2.23633]
}
},
"groups": [
{
"name": "group",
"origin": [15, 0, 0],
"color": 0,
"children": [
0,
1,
2,
3,
4,
{
"name": "group",
"origin": [1, 0, 1],
"color": 0,
"children": [5, 6]
},
{
"name": "group",
"origin": [1, 0, 1],
"color": 0,
"children": [7, 8]
},
{
"name": "group",
"origin": [1, 0, 1],
"color": 0,
"children": [9, 10]
},
{
"name": "group",
"origin": [1, 0, 1],
"color": 0,
"children": [11, 12]
}
]
}
]
}

View File

@@ -0,0 +1,8 @@
{
"__sixsides_generator": "generate_plushie.js",
"parent": "sixsides_cosmetics:item/panda_plushie",
"textures": {
"2": "minecraft:entity/panda/aggressive_panda_baby",
"particle": "minecraft:entity/panda/aggressive_panda_baby"
}
}

View File

@@ -0,0 +1,8 @@
{
"__sixsides_generator": "generate_plushie.js",
"parent": "sixsides_cosmetics:item/panda_plushie",
"textures": {
"2": "minecraft:entity/panda/brown_panda_baby",
"particle": "minecraft:entity/panda/brown_panda_baby"
}
}

View File

@@ -0,0 +1,8 @@
{
"__sixsides_generator": "generate_plushie.js",
"parent": "sixsides_cosmetics:item/panda_plushie",
"textures": {
"2": "minecraft:entity/panda/lazy_panda_baby",
"particle": "minecraft:entity/panda/lazy_panda_baby"
}
}

View File

@@ -0,0 +1,8 @@
{
"__sixsides_generator": "generate_plushie.js",
"parent": "sixsides_cosmetics:item/panda_plushie",
"textures": {
"2": "minecraft:entity/panda/playful_panda_baby",
"particle": "minecraft:entity/panda/playful_panda_baby"
}
}

View File

@@ -0,0 +1,8 @@
{
"__sixsides_generator": "generate_plushie.js",
"parent": "sixsides_cosmetics:item/panda_plushie",
"textures": {
"2": "minecraft:entity/panda/weak_panda_baby",
"particle": "minecraft:entity/panda/weak_panda_baby"
}
}

View File

@@ -0,0 +1,8 @@
{
"__sixsides_generator": "generate_plushie.js",
"parent": "sixsides_cosmetics:item/panda_plushie",
"textures": {
"2": "minecraft:entity/panda/worried_panda_baby",
"particle": "minecraft:entity/panda/worried_panda_baby"
}
}

View File

@@ -0,0 +1,40 @@
{
"__sixsides_generator": "generate_plushie.js",
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "sixsides_cosmetics:panda_plushie",
"key": {
"A": "minecraft:bamboo",
"#": "minecraft:white_wool"
},
"pattern": [
" A ",
"A#A",
" A "
],
"result": {
"count": 1,
"id": "minecraft:white_wool",
"components": {
"!minecraft:consumable": {},
"minecraft:equippable": {
"slot": "head",
"equip_on_interact": true
},
"minecraft:item_model": "sixsides_cosmetics:panda_plushie",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.panda_plushie",
"fallback": "Panda Plushie",
"color": "white",
"bold": true,
"italic": false
},
"minecraft:repairable": {
"items": "minecraft:white_wool"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}

View File

@@ -0,0 +1,41 @@
{
"__sixsides_generator": "generate_plushie.js",
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "sixsides_cosmetics:panda_plushie",
"key": {
"A": "minecraft:bamboo",
"#": "minecraft:white_wool",
"B": "minecraft:blaze_powder"
},
"pattern": [
" A ",
"A#A",
" B "
],
"result": {
"count": 1,
"id": "minecraft:white_wool",
"components": {
"!minecraft:consumable": {},
"minecraft:equippable": {
"slot": "head",
"equip_on_interact": true
},
"minecraft:item_model": "sixsides_cosmetics:panda_plushie_aggressive",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.panda_plushie_aggressive",
"fallback": "Panda Plushie (Agressive)",
"color": "white",
"bold": true,
"italic": false
},
"minecraft:repairable": {
"items": "minecraft:white_wool"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}

View File

@@ -0,0 +1,40 @@
{
"__sixsides_generator": "generate_plushie.js",
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "sixsides_cosmetics:panda_plushie",
"key": {
"A": "minecraft:bamboo",
"#": "minecraft:brown_wool"
},
"pattern": [
" A ",
"A#A",
" A "
],
"result": {
"count": 1,
"id": "minecraft:brown_wool",
"components": {
"!minecraft:consumable": {},
"minecraft:equippable": {
"slot": "head",
"equip_on_interact": true
},
"minecraft:item_model": "sixsides_cosmetics:panda_plushie_brown",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.panda_plushie_brown",
"fallback": "Panda Plushie (Brown)",
"color": "gold",
"bold": true,
"italic": false
},
"minecraft:repairable": {
"items": "minecraft:brown_wool"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}

View File

@@ -0,0 +1,41 @@
{
"__sixsides_generator": "generate_plushie.js",
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "sixsides_cosmetics:panda_plushie",
"key": {
"A": "minecraft:bamboo",
"#": "minecraft:white_wool",
"B": "#minecraft:beds"
},
"pattern": [
" A ",
"A#A",
" B "
],
"result": {
"count": 1,
"id": "minecraft:white_wool",
"components": {
"!minecraft:consumable": {},
"minecraft:equippable": {
"slot": "head",
"equip_on_interact": true
},
"minecraft:item_model": "sixsides_cosmetics:panda_plushie_lazy",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.panda_plushie_lazy",
"fallback": "Panda Plushie (Lazy)",
"color": "white",
"bold": true,
"italic": false
},
"minecraft:repairable": {
"items": "minecraft:white_wool"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}

View File

@@ -0,0 +1,41 @@
{
"__sixsides_generator": "generate_plushie.js",
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "sixsides_cosmetics:panda_plushie",
"key": {
"A": "minecraft:bamboo",
"#": "minecraft:white_wool",
"B": "minecraft:pink_dye"
},
"pattern": [
" A ",
"A#A",
" B "
],
"result": {
"count": 1,
"id": "minecraft:white_wool",
"components": {
"!minecraft:consumable": {},
"minecraft:equippable": {
"slot": "head",
"equip_on_interact": true
},
"minecraft:item_model": "sixsides_cosmetics:panda_plushie_playful",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.panda_plushie_playful",
"fallback": "Panda Plushie (Playful)",
"color": "white",
"bold": true,
"italic": false
},
"minecraft:repairable": {
"items": "minecraft:white_wool"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}

View File

@@ -0,0 +1,41 @@
{
"__sixsides_generator": "generate_plushie.js",
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "sixsides_cosmetics:panda_plushie",
"key": {
"A": "minecraft:bamboo",
"#": "minecraft:white_wool",
"B": "minecraft:slime_ball"
},
"pattern": [
" A ",
"A#A",
" B "
],
"result": {
"count": 1,
"id": "minecraft:white_wool",
"components": {
"!minecraft:consumable": {},
"minecraft:equippable": {
"slot": "head",
"equip_on_interact": true
},
"minecraft:item_model": "sixsides_cosmetics:panda_plushie_weak",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.panda_plushie_weak",
"fallback": "Panda Plushie (Weak)",
"color": "white",
"bold": true,
"italic": false
},
"minecraft:repairable": {
"items": "minecraft:white_wool"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}

View File

@@ -0,0 +1,41 @@
{
"__sixsides_generator": "generate_plushie.js",
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "sixsides_cosmetics:panda_plushie",
"key": {
"A": "minecraft:bamboo",
"#": "minecraft:white_wool",
"B": "minecraft:glass_pane"
},
"pattern": [
" A ",
"A#A",
" B "
],
"result": {
"count": 1,
"id": "minecraft:white_wool",
"components": {
"!minecraft:consumable": {},
"minecraft:equippable": {
"slot": "head",
"equip_on_interact": true
},
"minecraft:item_model": "sixsides_cosmetics:panda_plushie_worried",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.panda_plushie_worried",
"fallback": "Panda Plushie (Worried)",
"color": "white",
"bold": true,
"italic": false
},
"minecraft:repairable": {
"items": "minecraft:white_wool"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}

View File

@@ -1,5 +1,6 @@
release: clean
node ./.meta/generate_helmets.js
node ./.meta/generate_plushies.js
find ./assets ./data pack.mcmeta -type f -print \
| zip SixSides\ Cosmetics\ \(v$$(jq -r '.pack.description.with[0].fallback' ./pack.mcmeta)\).zip -@