neuralgia/kubejs/server_scripts/tfg/json_tool.armor_trim.js
Pyritie 89030d3564
Stone dust rework (#2782)
* geology

* starting some loot table stuff

* more stuff

* swap some rocks

* refactor

* phew

* drive-by fix

* all done I think

* remove sylvite

* oh yeah baby it's all coming together

* cleaned up some lines that didn't do anything, added more comments, removed log spam

* blah blah

* fix drying mat

* fix ladders

* tfc, beneath, and moon stuff done...? this is gonna take 5ever

* a

* some sand stuff, more stone types

* wrong way around

* unifying various brick block recipes

* remove shaped create deco brick recipes

* some progress on block creation

* we got into the create world screen!

* getting somewhere

* Reloaded with no KubeJS errors!

* new assets

* I thiiiink that's about everything

* fix some stonecutting

* recipe declared but never used
2026-01-19 22:39:15 +00:00

220 lines
11 KiB
JavaScript

//priority: 0
"use strict";
/*
* Set this const to true only when you need to run the tool because you added a new material.
* It does not need to be enabled all the time.
*/
const enableTool = false;
//#region Assign materials
//Assign a new material here with the name of the material, the hex color for the name display, the item id that is used during smithing, and an index number that should be !!!unique!!!
const materials = [
//Gems
{materialName: 'almandine_tfc', nameColor: '#7b1112', itemName: 'gtceu:exquisite_almandine_gem', indexNumber: 0.11},
{materialName: 'andradite_tfc', nameColor: '#c29d1e', itemName: 'gtceu:exquisite_andradite_gem', indexNumber: 0.12},
{materialName: 'blue_topaz_tfc', nameColor: '#a7c1c6', itemName: 'gtceu:exquisite_blue_topaz_gem', indexNumber: 0.13},
{materialName: 'cinnabar_tfc', nameColor: '#c2274a', itemName: 'gtceu:exquisite_cinnabar_gem', indexNumber: 0.14},
{materialName: 'coal_tfc', nameColor: '#2b2f32', itemName: 'gtceu:exquisite_coal_gem', indexNumber: 0.15},
{materialName: 'diamond_tfc', nameColor: '#98c2c6', itemName: 'gtceu:exquisite_diamond_gem', indexNumber: 0.16},
{materialName: 'emerald_tfc', nameColor: '#11c254', itemName: 'gtceu:exquisite_emerald_gem', indexNumber: 0.17},
{materialName: 'green_sapphire_tfc', nameColor: '#75af89', itemName: 'gtceu:exquisite_green_sapphire_gem', indexNumber: 0.18},
{materialName: 'grossular_tfc', nameColor: '#c28b5c', itemName: 'gtceu:exquisite_grossular_gem', indexNumber: 0.19},
{materialName: 'rutile_tfc', nameColor: '#681c05', itemName: 'gtceu:exquisite_rutile_gem', indexNumber: 0.191},
{materialName: 'lazurite_tfc', nameColor: '#1e29bb', itemName: 'gtceu:exquisite_lazurite_gem', indexNumber: 0.192},
{materialName: 'pyrope_tfc', nameColor: '#b11344', itemName: 'gtceu:exquisite_pyrope_gem', indexNumber: 0.193},
{materialName: 'rock_salt_tfc', nameColor: '#c2b2af', itemName: 'gtceu:exquisite_rock_salt_gem', indexNumber: 0.194},
{materialName: 'ruby_tfc', nameColor: '#a41b0c', itemName: 'gtceu:exquisite_ruby_gem', indexNumber: 0.195},
{materialName: 'salt_tfc', nameColor: '#bebec2', itemName: 'gtceu:exquisite_salt_gem', indexNumber: 0.196},
{materialName: 'sapphire_tfc', nameColor: '#2628b0', itemName: 'gtceu:exquisite_sapphire_gem', indexNumber: 0.197},
{materialName: 'sodalite_tfc', nameColor: '#2e40c6', itemName: 'gtceu:exquisite_sodalite_gem', indexNumber: 0.198},
{materialName: 'armalcolite_tfc', nameColor: '#424847', itemName: 'gtceu:exquisite_armalcolite_gem', indexNumber: 0.199},
{materialName: 'spessartine_tfc', nameColor: '#c28017', itemName: 'gtceu:exquisite_spessartine_gem', indexNumber: 0.181},
{materialName: 'topaz_tfc', nameColor: '#b1a42d', itemName: 'gtceu:exquisite_topaz_gem', indexNumber: 0.182},
{materialName: 'uvarovite_tfc', nameColor: '#22b43b', itemName: 'gtceu:exquisite_uvarovite_gem', indexNumber: 0.183},
{materialName: 'nether_quartz_tfc', nameColor: '#bdb6b0', itemName: 'gtceu:exquisite_nether_quartz_gem', indexNumber: 0.184},
{materialName: 'certus_quartz_tfc', nameColor: '#8ca4c4', itemName: 'gtceu:exquisite_certus_quartz_gem', indexNumber: 0.185},
{materialName: 'quartzite_tfc', nameColor: '#b8bab8', itemName: 'gtceu:exquisite_quartzite_gem', indexNumber: 0.186},
{materialName: 'realgar_tfc', nameColor: '#c22e28', itemName: 'gtceu:exquisite_realgar_gem', indexNumber: 0.187},
{materialName: 'malachite_tfc', nameColor: '#00b789', itemName: 'gtceu:exquisite_malachite_gem', indexNumber: 0.188},
{materialName: 'olivine_tfc', nameColor: '#7fad03', itemName: 'gtceu:exquisite_olivine_gem', indexNumber: 0.171},
{materialName: 'opal_tfc', nameColor: '#bdadb6', itemName: 'gtceu:exquisite_opal_gem', indexNumber: 0.172},
{materialName: 'amethyst_tfc', nameColor: '#9b78ba', itemName: 'gtceu:exquisite_amethyst_gem', indexNumber: 0.173},
// {materialName: 'echo_shard_tfc', nameColor: '#002123', itemName: 'gtceu:exquisite_echo_shard_gem', indexNumber: 0.174}, // disabled
{materialName: 'lapis_tfc', nameColor: '#6581c6', itemName: 'gtceu:exquisite_lapis_gem', indexNumber: 0.175},
{materialName: 'apatite_tfc', nameColor: '#059cbb', itemName: 'gtceu:exquisite_apatite_gem', indexNumber: 0.176},
{materialName: 'red_garnet_tfc', nameColor: '#710910', itemName: 'gtceu:exquisite_red_garnet_gem', indexNumber: 0.177},
{materialName: 'yellow_garnet_tfc', nameColor: '#bbc207', itemName: 'gtceu:exquisite_yellow_garnet_gem', indexNumber: 0.178},
{materialName: 'monazite_tfc', nameColor: '#9eb576', itemName: 'gtceu:exquisite_monazite_gem', indexNumber: 0.179},
{materialName: 'rose_quartz_tfc', nameColor: '#ba3458', itemName: 'greate:exquisite_rose_quartz_gem', indexNumber: 0.161},
{materialName: 'fluix_tfc', nameColor: '#53458d', itemName: 'tfg:exquisite_fluix_gem', indexNumber: 0.162},
//Metals
{materialName: 'silver_tfc', nameColor: '#d8d8f4', itemName: 'vintageimprovements:silver_sheet', indexNumber: 0.162},
{materialName: 'sterling_silver_tfc', nameColor: '#eae5d3', itemName: 'gtceu:sterling_silver_plate', indexNumber: 0.163},
{materialName: 'gold_tfc', nameColor: '#ede65b', itemName: 'create:golden_sheet', indexNumber: 0.164},
{materialName: 'rose_gold_tfc', nameColor: '#eddedb', itemName: 'vintageimprovements:rose_gold_sheet', indexNumber: 0.165},
{materialName: 'nickel_tfc', nameColor: '#bfd1ea', itemName: 'vintageimprovements:nickel_sheet', indexNumber: 0.166},
{materialName: 'platinum_tfc', nameColor: '#d8cea1', itemName: 'vintageimprovements:platinum_sheet', indexNumber: 0.167},
{materialName: 'titanium_tfc', nameColor: '#c496d8', itemName: 'gtceu:titanium_plate', indexNumber: 0.168},
{materialName: 'bismuth_tfc', nameColor: '#607c79', itemName: 'gtceu:bismuth_plate', indexNumber: 0.169},
{materialName: 'neutronium_tfc', nameColor: '#d7d7db', itemName: 'gtceu:neutronium_plate', indexNumber: 0.151},
//Other
{materialName: 'pyrite_tfc', nameColor: '#a75e10', itemName: 'gtceu:rich_raw_pyrite', indexNumber: 0.152},
{materialName: 'redx_tfc', nameColor: '#a06156', itemName: 'morered:red_alloy_wire', indexNumber: 0.153}
]
/////////////////////////////
/////////////////////////////
// #region Tags
// Assigns trim_materials tag to items registered above
function registerTFGTrimItemTags(event) {
event.removeAll('minecraft:trim_materials')
materials.forEach(material => {
event.add('minecraft:trim_materials', material.itemName)
})
}
// #endregion
//#region Trim Item Atlas
//Automatically creates armor_trims.json file
if (enableTool) {
const trimfilePath = 'kubejs/assets/minecraft/atlases/armor_trims.json';
let trimdata = JsonIO.read(trimfilePath) || {};
trimdata["sources"] = trimdata["sources"] || [];
let trimsource = trimdata["sources"].find(s => s.type === "paletted_permutations");
if (!trimsource) {
trimsource = {
type: "paletted_permutations",
textures: [
"trims/models/armor/coast",
"trims/models/armor/coast_leggings",
"trims/models/armor/sentry",
"trims/models/armor/sentry_leggings",
"trims/models/armor/dune",
"trims/models/armor/dune_leggings",
"trims/models/armor/wild",
"trims/models/armor/wild_leggings",
"trims/models/armor/ward",
"trims/models/armor/ward_leggings",
"trims/models/armor/eye",
"trims/models/armor/eye_leggings",
"trims/models/armor/vex",
"trims/models/armor/vex_leggings",
"trims/models/armor/tide",
"trims/models/armor/tide_leggings",
"trims/models/armor/snout",
"trims/models/armor/snout_leggings",
"trims/models/armor/rib",
"trims/models/armor/rib_leggings",
"trims/models/armor/spire",
"trims/models/armor/spire_leggings",
"trims/models/armor/wayfinder",
"trims/models/armor/wayfinder_leggings",
"trims/models/armor/shaper",
"trims/models/armor/shaper_leggings",
"trims/models/armor/silence",
"trims/models/armor/silence_leggings",
"trims/models/armor/raiser",
"trims/models/armor/raiser_leggings",
"trims/models/armor/host",
"trims/models/armor/host_leggings"
],
palette_key: "trims/color_palettes/trim_palette",
permutations: {}
};
trimdata["sources"].push(trimsource);
}
trimsource.permutations = trimsource.permutations || {};
materials.forEach(material => {
trimsource.permutations[material.materialName] = `tfc:color_palettes/trims/${material.materialName}`;
});
JsonIO.write(trimfilePath, trimdata);
//#endregion
//#region Trim Block Atlas
//Automatically creates blocks.json file
const blockfilePath = 'kubejs/assets/minecraft/atlases/blocks.json';
let blockdata = JsonIO.read(blockfilePath) || {};
blockdata["sources"] = blockdata["sources"] || [];
let blocksource = blockdata["sources"].find(s => s.type === "paletted_permutations");
if (!blocksource) {
blocksource = {
type: "paletted_permutations",
textures: [
"trims/items/leggings_trim",
"trims/items/chestplate_trim",
"trims/items/helmet_trim",
"trims/items/boots_trim",
"tfc:item/helmet_trim",
"tfc:item/chestplate_trim",
"tfc:item/greaves_trim",
"tfc:item/boots_trim"
],
palette_key: "trims/color_palettes/trim_palette",
permutations: {}
};
blockdata["sources"].push(blocksource);
}
blocksource.permutations = blocksource.permutations || {};
materials.forEach(material => {
blocksource.permutations[material.materialName] = `tfc:color_palettes/trims/${material.materialName}`;
});
JsonIO.write(blockfilePath, blockdata);
//#endregion
//#region Trim Material Data
//Automatically creates material.json files
materials.forEach(material => {
const trimfilepaths = [
`kubejs/data/minecraft/trim_material/${material.materialName}.json`,
`kubejs/data/tfc/trim_material/${material.materialName}.json`
];
const newtrimdata = {
asset_name: material.materialName,
description: {
color: material.nameColor,
translate: `trim_material.tfc.${material.materialName}`
},
ingredient: material.itemName,
item_model_index: material.indexNumber
};
trimfilepaths.forEach(trimfilepaths => {
const existingData = JsonIO.read(trimfilepaths);
// Only write if the file is missing or contents are different
if (JSON.stringify(existingData) !== JSON.stringify(newtrimdata)) {
JsonIO.write(trimfilepaths, newtrimdata);
}
});
});
//#endregion
/*
** Depreciated. I will leave this here for future reference. **
en_us
reads the existing file, inserts new key-value pair, writes info back to the file
const langfilePath = 'kubejs/assets/tfc/lang/en_us.json';
let langdata = JsonIO.read(langfilePath) || {};
materials.forEach(material => {
langdata[`trim_material.tfc.${material.materialName}`] = material.lang_en_us;
});
JsonIO.write(langfilePath, langdata);
*/
};
//#endregion