feat: use item model definition to change model

use the item_model component instead of overriding a vanilla item model
definition to make the datapack/resourcepack more compatible with other
resourcepacks

created a javascript script to genenrate the item model, recipes and
translated text of items to streamline creation

changed returned item to poisonous potato since it doesn't has a use
This commit is contained in:
Guz
2026-04-25 19:55:35 -03:00
parent 9d68e3e1b1
commit af5bcd9ef8
25 changed files with 530 additions and 300 deletions

327
.meta/generate_helmets.js Normal file
View File

@@ -0,0 +1,327 @@
import fs from "node:fs/promises";
const NAMESPACE = "sixsides_cosmetics";
const LEATHER_HELMET_MODEL = Object.freeze({});
/**
* @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 = true
* italic?: boolean = false
* }
* recipe: {
* type?: RecipeType = "shaped"
* category?: RecipeCategory = "equipment"
* key: {[key: string]: string}
* pattern: [string, 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 = {
guz_ears: {
name: {
pt_br: "Orelhas de Lobo",
fallback: "Wolf Ears",
color: "white",
},
lore: {
pt_br: "Você é um furry?",
fallback: "Are you a furry?",
},
recipe: {
key: {
A: "minecraft:black_dye",
B: "minecraft:bone",
},
pattern: [
"A A", //
" # ", //
" B ",
],
},
},
koi_horns: {
name: {
pt_br: "Chifres de Dragão",
fallback: "Dragon Horns",
color: "red",
},
lore: {
pt_br: '"glub glub"',
fallback: '"glub glub"',
},
recipe: {
key: {
A: "minecraft:bone",
B: "minecraft:salmon",
},
pattern: ["A A", " # ", " B "],
},
},
miku_hair: {
name: {
pt_br: "Cabelo da Miku",
fallback: "Miku's Hair",
color: "aqua",
},
lore: {
pt_br:
"MIKU MIKU BEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMMMMMMMMMMMMMMM",
fallback:
"MIKU MIKU BEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMMMMMMMMMMMMMMM",
},
recipe: {
key: {
A: "minecraft:iron_nugget",
B: "minecraft:cyan_dye",
},
pattern: ["A#A", "B B", "B B"],
},
},
neru_hair: {
name: {
pt_br: "Cabelo da Neru",
fallback: "Neru's Hair",
color: "yellow",
},
lore: {
pt_br:
"Im sobbing, Im falling off. Its not enough. Look, Im burning! Im yearning! But can I call it love?",
fallback:
"Im sobbing, Im falling off. Its not enough. Look, Im burning! Im yearning! But can I call it love?",
},
recipe: {
key: {
A: "minecraft:iron_nugget",
B: "minecraft:yellow_dye",
},
pattern: [" #A", " B", " B"],
},
},
straw_hat: {
name: {
pt_br: "Chapéu de Palha",
fallback: "Straw Hat",
color: "yellow",
},
lore: {
pt_br: "Provê um pouco de sombra para o seu rosto.",
fallback: "Provide a little shade for your head.",
},
recipe: {
key: {
A: "minecraft:wheat",
},
pattern: ["AAA", "A#A", "AAA"],
},
},
teto_hair: {
name: {
pt_br: "Cabelo da Teto",
fallback: "Teto's Hair",
color: "red",
},
lore: {
pt_br:
"but i falter on the forethought. i keep on running like a chicken with its head cut off",
fallback:
"but i falter on the forethought. i keep on running like a chicken with its head cut off",
},
recipe: {
key: {
A: "minecraft:iron_nugget",
B: "minecraft:red_dye",
},
pattern: ["A#A", "B B"],
},
},
};
/** @type {Map<string, {[key: string]: string}} */
const langFiles = new Map();
for (const [k, v] of Object.entries(ITEMS)) {
console.log(`${k}: Generating helmet`);
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;
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 ??= "equipment";
v.recipe.key["#"] ??= "minecraft:leather_helmet";
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_helmet.js",
model: {
type: "minecraft:model",
model: `${NAMESPACE}:item/${k}`,
},
},
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_helmet.js",
type: "minecraft:crafting_shaped",
category: "equipment",
key: v.recipe.key,
pattern: v.recipe.pattern,
result: {
count: 1,
id: "minecraft:poisonous_potato", // This is the only item in minecraft that doesn't has an actual use
components: {
"!minecraft:consumable": {},
"minecraft:enchantable": { value: 15 },
"minecraft:enchantment_glint_override": false,
"minecraft:equippable": {
slot: "head",
equip_on_interact: true,
},
"!minecraft:food": {},
"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,
},
"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: "minecraft:leather" },
"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,
),
);
}

View File

@@ -1,34 +0,0 @@
{
"model": {
"type": "minecraft:condition",
"property": "minecraft:has_component",
"component": "minecraft:custom_data",
"on_true": {
"type": "minecraft:select",
"model": "minecraft:item/bone",
"property": "minecraft:component",
"component": "minecraft:custom_data",
"cases": [
{
"when": [
{
"sixsides_cosmetics:model": "GUZ_EARS"
}
],
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/guz_ears"
}
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/bone"
}
},
"on_false": {
"type": "minecraft:model",
"model": "minecraft:item/bone"
}
}
}

View File

@@ -1,34 +0,0 @@
{
"model": {
"type": "minecraft:condition",
"property": "minecraft:has_component",
"component": "minecraft:custom_data",
"on_true": {
"type": "minecraft:select",
"model": "minecraft:item/cyan_dye",
"property": "minecraft:component",
"component": "minecraft:custom_data",
"cases": [
{
"when": [
{
"sixsides_cosmetics:model": "MIKU_HAIR"
}
],
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/miku_hair"
}
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/cyan_dye"
}
},
"on_false": {
"type": "minecraft:model",
"model": "minecraft:item/cyan_dye"
}
}
}

View File

@@ -1,34 +0,0 @@
{
"model": {
"type": "minecraft:condition",
"property": "minecraft:has_component",
"component": "minecraft:custom_data",
"on_true": {
"type": "minecraft:select",
"model": "minecraft:item/red_dye",
"property": "minecraft:component",
"component": "minecraft:custom_data",
"cases": [
{
"when": [
{
"sixsides_cosmetics:model": "TETO_HAIR"
}
],
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/teto_hair"
}
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/red_dye"
}
},
"on_false": {
"type": "minecraft:model",
"model": "minecraft:item/red_dye"
}
}
}

View File

@@ -1,34 +0,0 @@
{
"model": {
"type": "minecraft:condition",
"property": "minecraft:has_component",
"component": "minecraft:custom_data",
"on_true": {
"type": "minecraft:select",
"model": "minecraft:item/salmon",
"property": "minecraft:component",
"component": "minecraft:custom_data",
"cases": [
{
"when": [
{
"sixsides_cosmetics:model": "KOI_HORNS"
}
],
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/koi_horns"
}
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/salmon"
}
},
"on_false": {
"type": "minecraft:model",
"model": "minecraft:item/salmon"
}
}
}

View File

@@ -1,34 +0,0 @@
{
"model": {
"type": "minecraft:condition",
"property": "minecraft:has_component",
"component": "minecraft:custom_data",
"on_true": {
"type": "minecraft:select",
"model": "minecraft:item/wheat",
"property": "minecraft:component",
"component": "minecraft:custom_data",
"cases": [
{
"when": [
{
"sixsides_cosmetics:model": "STRAW_HAT"
}
],
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/straw_hat"
}
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/wheat"
}
},
"on_false": {
"type": "minecraft:model",
"model": "minecraft:item/wheat"
}
}
}

View File

@@ -1,34 +0,0 @@
{
"model": {
"type": "minecraft:condition",
"property": "minecraft:has_component",
"component": "minecraft:custom_data",
"on_true": {
"type": "minecraft:select",
"model": "minecraft:item/yellow_dye",
"property": "minecraft:component",
"component": "minecraft:custom_data",
"cases": [
{
"when": [
{
"sixsides_cosmetics:model": "NERU_HAIR"
}
],
"model": {
"type": "minecraft:model",
"model": "sixsides_cosmetics:item/neru_hair"
}
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/yellow_dye"
}
},
"on_false": {
"type": "minecraft:model",
"model": "minecraft:item/yellow_dye"
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,5 @@
{
"sixsides_cosmetics.mcmeta.description": "%s - Small collection of cosmetics for your survival world.",
"sixsides_cosmetics.item.guz_ears": "Wolf Ears",
"sixsides_cosmetics.item.guz_ears.lore": "Are you a furry?",
"sixsides_cosmetics.item.koi_horns": "Dragon Horns",
@@ -10,6 +11,5 @@
"sixsides_cosmetics.item.straw_hat": "Straw Hat",
"sixsides_cosmetics.item.straw_hat.lore": "Provide a little shade for your head.",
"sixsides_cosmetics.item.teto_hair": "Teto's Hair",
"sixsides_cosmetics.item.teto_hair.lore": "but i falter on the forethought. i keep on running like a chicken with its head cut off",
"sixsides_cosmetics.mcmeta.description": "%s - Small collection of cosmetics for your survival world."
}
"sixsides_cosmetics.item.teto_hair.lore": "but i falter on the forethought. i keep on running like a chicken with its head cut off"
}

View File

@@ -1,4 +1,5 @@
{
"sixsides_cosmetics.mcmeta.description": "%s - Pequena coleção de cosméticos para seu mundo survival.",
"sixsides_cosmetics.item.guz_ears": "Orelhas de Lobo",
"sixsides_cosmetics.item.guz_ears.lore": "Você é um furry?",
"sixsides_cosmetics.item.koi_horns": "Chifres de Dragão",
@@ -10,6 +11,5 @@
"sixsides_cosmetics.item.straw_hat": "Chapéu de Palha",
"sixsides_cosmetics.item.straw_hat.lore": "Provê um pouco de sombra para o seu rosto.",
"sixsides_cosmetics.item.teto_hair": "Cabelo da Teto",
"sixsides_cosmetics.item.teto_hair.lore": "but i falter on the forethought. i keep on running like a chicken with its head cut off",
"sixsides_cosmetics.mcmeta.description": "%s - Pequena coleção de cosméticos para seu mundo survival."
}
"sixsides_cosmetics.item.teto_hair.lore": "but i falter on the forethought. i keep on running like a chicken with its head cut off"
}

View File

@@ -1,4 +1,5 @@
{
"sixsides_cosmetics.mcmeta.description": "%s - Pequena coleção de cosméticos para seu mundo survival.",
"sixsides_cosmetics.item.guz_ears": "Orelhas de Lobo",
"sixsides_cosmetics.item.guz_ears.lore": "Você é um furry?",
"sixsides_cosmetics.item.koi_horns": "Chifres de Dragão",
@@ -10,6 +11,5 @@
"sixsides_cosmetics.item.straw_hat": "Chapéu de Palha",
"sixsides_cosmetics.item.straw_hat.lore": "Provê um pouco de sombra para o seu rosto.",
"sixsides_cosmetics.item.teto_hair": "Cabelo da Teto",
"sixsides_cosmetics.item.teto_hair.lore": "but i falter on the forethought. i keep on running like a chicken with its head cut off",
"sixsides_cosmetics.mcmeta.description": "%s - Pequena coleção de cosméticos para seu mundo survival."
}
"sixsides_cosmetics.item.teto_hair.lore": "but i falter on the forethought. i keep on running like a chicken with its head cut off"
}

View File

@@ -1,29 +1,32 @@
{
"__sixsides_generator": "generate_helmet.js",
"type": "minecraft:crafting_shaped",
"category": "equipment",
"key": {
"A": "minecraft:black_dye",
"B": "minecraft:leather_helmet",
"C": "minecraft:bone"
"B": "minecraft:bone",
"#": "minecraft:leather_helmet"
},
"pattern": ["A A", " B ", " C "],
"pattern": [
"A A",
" # ",
" B "
],
"result": {
"count": 1,
"id": "minecraft:bone",
"id": "minecraft:poisonous_potato",
"components": {
"minecraft:custom_data": {
"sixsides_cosmetics:model": "GUZ_EARS"
},
"minecraft:enchantable": { "value": 15 },
"minecraft:enchantments": {
"minecraft:protection": 1
"!minecraft:consumable": {},
"minecraft:enchantable": {
"value": 15
},
"minecraft:enchantment_glint_override": false,
"minecraft:equippable": {
"slot": "head",
"damage_on_hurt": false,
"equip_on_interact": true
},
"!minecraft:food": {},
"minecraft:item_model": "sixsides_cosmetics:guz_ears",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.guz_ears",
@@ -38,9 +41,15 @@
"translate": "sixsides_cosmetics.item.guz_ears.lore",
"fallback": "Are you a furry?",
"color": "white",
"bold": false,
"italic": true
}
]
],
"minecraft:repairable": {
"items": "minecraft:leather"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}
}

View File

@@ -1,29 +1,32 @@
{
"__sixsides_generator": "generate_helmet.js",
"type": "minecraft:crafting_shaped",
"category": "equipment",
"key": {
"A": "minecraft:bone",
"B": "minecraft:leather_helmet",
"C": "minecraft:salmon"
"B": "minecraft:salmon",
"#": "minecraft:leather_helmet"
},
"pattern": ["A A", " B ", " C "],
"pattern": [
"A A",
" # ",
" B "
],
"result": {
"count": 1,
"id": "minecraft:salmon",
"id": "minecraft:poisonous_potato",
"components": {
"minecraft:custom_data": {
"sixsides_cosmetics:model": "KOI_HORNS"
},
"minecraft:enchantable": { "value": 15 },
"minecraft:equippable": {
"slot": "head",
"damage_on_hurt": false,
"equip_on_interact": true
},
"minecraft:enchantments": {
"minecraft:protection": 1
"!minecraft:consumable": {},
"minecraft:enchantable": {
"value": 15
},
"minecraft:enchantment_glint_override": false,
"minecraft:equippable": {
"slot": "head",
"equip_on_interact": true
},
"!minecraft:food": {},
"minecraft:item_model": "sixsides_cosmetics:koi_horns",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.koi_horns",
@@ -38,9 +41,15 @@
"translate": "sixsides_cosmetics.item.koi_horns.lore",
"fallback": "\"glub glub\"",
"color": "white",
"bold": false,
"italic": true
}
]
],
"minecraft:repairable": {
"items": "minecraft:leather"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}
}

View File

@@ -1,45 +1,55 @@
{
"__sixsides_generator": "generate_helmet.js",
"type": "minecraft:crafting_shaped",
"category": "equipment",
"key": {
"A": "minecraft:iron_nugget",
"B": "minecraft:leather_helmet",
"C": "minecraft:cyan_dye"
"B": "minecraft:cyan_dye",
"#": "minecraft:leather_helmet"
},
"pattern": ["ABA", "C C", "C C"],
"pattern": [
"A#A",
"B B",
"B B"
],
"result": {
"count": 1,
"id": "minecraft:cyan_dye",
"id": "minecraft:poisonous_potato",
"components": {
"minecraft:custom_data": {
"sixsides_cosmetics:model": "MIKU_HAIR"
},
"minecraft:enchantable": { "value": 15 },
"minecraft:enchantments": {
"minecraft:protection": 1
"!minecraft:consumable": {},
"minecraft:enchantable": {
"value": 15
},
"minecraft:enchantment_glint_override": false,
"minecraft:equippable": {
"slot": "head",
"damage_on_hurt": false,
"equip_on_interact": true
},
"!minecraft:food": {},
"minecraft:item_model": "sixsides_cosmetics:miku_hair",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.miku_hair",
"fallback": "Miku's Hair",
"color": "aqua",
"bold": true,
"italic": false
},
"minecraft:lore": [
{
"type": "translatable",
"translate": "sixsides_cosmetics.item.miku_hair.lore",
"fallback": "",
"fallback": "MIKU MIKU BEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMMMMMMMMMMMMMMM",
"color": "white",
"bold": false,
"italic": true
}
]
],
"minecraft:repairable": {
"items": "minecraft:leather"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}
}

View File

@@ -1,45 +1,55 @@
{
"__sixsides_generator": "generate_helmet.js",
"type": "minecraft:crafting_shaped",
"category": "equipment",
"key": {
"A": "minecraft:iron_nugget",
"B": "minecraft:leather_helmet",
"C": "minecraft:yellow_dye"
"B": "minecraft:yellow_dye",
"#": "minecraft:leather_helmet"
},
"pattern": [" BA", " C", " C"],
"pattern": [
" #A",
" B",
" B"
],
"result": {
"count": 1,
"id": "minecraft:yellow_dye",
"id": "minecraft:poisonous_potato",
"components": {
"minecraft:custom_data": {
"sixsides_cosmetics:model": "NERU_HAIR"
},
"minecraft:enchantable": { "value": 15 },
"minecraft:enchantments": {
"minecraft:protection": 1
"!minecraft:consumable": {},
"minecraft:enchantable": {
"value": 15
},
"minecraft:enchantment_glint_override": false,
"minecraft:equippable": {
"slot": "head",
"damage_on_hurt": false,
"equip_on_interact": true
},
"!minecraft:food": {},
"minecraft:item_model": "sixsides_cosmetics:neru_hair",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.neru_hair",
"fallback": "Neru's Hair",
"color": "gold",
"color": "yellow",
"bold": true,
"italic": false
},
"minecraft:lore": [
{
"type": "translatable",
"translate": "sixsides_cosmetics.item.neru_hair.lore",
"fallback": "",
"fallback": "Im sobbing, Im falling off. Its not enough. Look, Im burning! Im yearning! But can I call it love?",
"color": "white",
"bold": false,
"italic": true
}
]
],
"minecraft:repairable": {
"items": "minecraft:leather"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}
}

View File

@@ -1,33 +1,37 @@
{
"__sixsides_generator": "generate_helmet.js",
"type": "minecraft:crafting_shaped",
"category": "equipment",
"key": {
"A": "minecraft:wheat",
"B": "minecraft:leather_helmet"
"#": "minecraft:leather_helmet"
},
"pattern": ["AAA", "ABA", "AAA"],
"pattern": [
"AAA",
"A#A",
"AAA"
],
"result": {
"count": 1,
"id": "minecraft:wheat",
"id": "minecraft:poisonous_potato",
"components": {
"minecraft:custom_data": {
"sixsides_cosmetics:model": "STRAW_HAT"
},
"minecraft:enchantable": { "value": 15 },
"minecraft:enchantments": {
"minecraft:protection": 1
"!minecraft:consumable": {},
"minecraft:enchantable": {
"value": 15
},
"minecraft:enchantment_glint_override": false,
"minecraft:equippable": {
"slot": "head",
"damage_on_hurt": false,
"equip_on_interact": true
},
"!minecraft:food": {},
"minecraft:item_model": "sixsides_cosmetics:straw_hat",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.straw_hat",
"fallback": "Straw Hat",
"color": "gold",
"color": "yellow",
"bold": true,
"italic": false
},
"minecraft:lore": [
@@ -36,9 +40,15 @@
"translate": "sixsides_cosmetics.item.straw_hat.lore",
"fallback": "Provide a little shade for your head.",
"color": "white",
"bold": false,
"italic": true
}
]
],
"minecraft:repairable": {
"items": "minecraft:leather"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}
}

View File

@@ -1,45 +1,54 @@
{
"__sixsides_generator": "generate_helmet.js",
"type": "minecraft:crafting_shaped",
"category": "equipment",
"key": {
"A": "minecraft:iron_nugget",
"B": "minecraft:leather_helmet",
"C": "minecraft:red_dye"
"B": "minecraft:red_dye",
"#": "minecraft:leather_helmet"
},
"pattern": ["ABA", "C C"],
"pattern": [
"A#A",
"B B"
],
"result": {
"count": 1,
"id": "minecraft:red_dye",
"id": "minecraft:poisonous_potato",
"components": {
"minecraft:custom_data": {
"sixsides_cosmetics:model": "TETO_HAIR"
},
"minecraft:enchantable": { "value": 15 },
"minecraft:enchantments": {
"minecraft:protection": 1
"!minecraft:consumable": {},
"minecraft:enchantable": {
"value": 15
},
"minecraft:enchantment_glint_override": false,
"minecraft:equippable": {
"slot": "head",
"damage_on_hurt": false,
"equip_on_interact": true
},
"!minecraft:food": {},
"minecraft:item_model": "sixsides_cosmetics:teto_hair",
"minecraft:item_name": {
"type": "translatable",
"translate": "sixsides_cosmetics.item.teto_hair",
"fallback": "Teto's Hair",
"color": "red",
"bold": true,
"italic": false
},
"minecraft:lore": [
{
"type": "translatable",
"translate": "sixsides_cosmetics.item.teto_hair.lore",
"fallback": "",
"fallback": "but i falter on the forethought. i keep on running like a chicken with its head cut off",
"color": "white",
"bold": false,
"italic": true
}
]
],
"minecraft:repairable": {
"items": "minecraft:leather"
},
"minecraft:max_damage": 55,
"minecraft:max_stack_size": 1
}
}
}
}

View File

@@ -29,7 +29,7 @@
set +a
'';
buildInputs = with pkgs; [
deno
nodejs
gnumake
jq
zip

View File

@@ -1,4 +1,5 @@
release: clean
node ./.meta/generate_helmets.js
jq --arg version $$(cat VERSION) '.pack.description.with[0].fallback = $$version' ./pack.mcmeta > ./pack.mcmeta.tmp
mv ./pack.mcmeta.tmp ./pack.mcmeta
find ./assets ./data pack.mcmeta -type f -print | zip SixSides\ Cosmetics\ \(v$$(cat VERSION)\).zip -@