mods: add rarityjs, and start creating some grist based rarity tiers

This commit is contained in:
2025-06-21 11:49:03 +02:00
parent 64a6513064
commit 7c4fcbe515
9 changed files with 196 additions and 70 deletions

View File

@ -14,7 +14,7 @@ hash = "a60442351eb4a2fb2c74d4a7c62fd25d32faca43c0f192a1c261c13db9a71551"
[[files]] [[files]]
file = "config/almostunified/unify.json" file = "config/almostunified/unify.json"
hash = "5b48d3d81a66c2132171023e7d79b51bf23012bf7f7d3621f528b00889406c1e" hash = "fe3dba76719ae817115e2c8b6b428fe790f8724e33148b55148e6769bf4026c3"
[[files]] [[files]]
file = "config/apotheosis/adventure.cfg" file = "config/apotheosis/adventure.cfg"
@ -148,6 +148,10 @@ hash = "2b957dd01aaf5435d451b7845dddb9c7af7cecf6308d98bf9d9cea4a893eabd4"
file = "config/ftbquests/quests/reward_tables/random_metal_dust.snbt" file = "config/ftbquests/quests/reward_tables/random_metal_dust.snbt"
hash = "749e6bd14eca63555b9193c6fc1f550b953ef742bf912c6eb0d7ef18fc063116" hash = "749e6bd14eca63555b9193c6fc1f550b953ef742bf912c6eb0d7ef18fc063116"
[[files]]
file = "config/itemborders-common.toml"
hash = "4cb2d1d9f341908317ddecdfbdfe15d3e66cb34ecd5c4cd9dabf376167ec0a4d"
[[files]] [[files]]
file = "config/miapi.jsonc" file = "config/miapi.jsonc"
hash = "3e03896b16e429035a401f2d947c01852b39cd7036e8816401f9e6a0700b357a" hash = "3e03896b16e429035a401f2d947c01852b39cd7036e8816401f9e6a0700b357a"
@ -571,7 +575,7 @@ hash = "7dc5f3ae65fd65800df171420bdb6c69b3c62a99337822a3426c07db73eb6db0"
[[files]] [[files]]
file = "kubejs/server_scripts/grist/tags.js" file = "kubejs/server_scripts/grist/tags.js"
hash = "f8c23be0553da9ec51e7f58e94d5b547e9ee813cea2a8c97d7cc5def3c680ddd" hash = "0863a1d0a2d67ea44bd174fbe19642e73a3f85aae6bdeb12599e61f174079f2b"
[[files]] [[files]]
file = "kubejs/server_scripts/init.js" file = "kubejs/server_scripts/init.js"
@ -635,7 +639,11 @@ hash = "c01b0faf4eac2658f0f1e5d95fc6e4365888a2a3c8171d448594abf69d34332a"
[[files]] [[files]]
file = "kubejs/server_scripts/mods/create_new_age.js" file = "kubejs/server_scripts/mods/create_new_age.js"
hash = "06b10973ef4e2d9b053643a50d443a9e16134d46ba1dc8ed68b2f7b02b44cc7e" hash = "a2d6c92c9878380c3b1ffb625fd984bc3f0159fd45ec7d92cab0862748badc14"
[[files]]
file = "kubejs/server_scripts/mods/create_power_loader.js"
hash = "99c87081cbcba79e032cf8c33c5bf9ff032e841da349c1fc720048711b064584"
[[files]] [[files]]
file = "kubejs/server_scripts/mods/croptopia.js" file = "kubejs/server_scripts/mods/croptopia.js"
@ -707,7 +715,7 @@ hash = "93b1aee5ea41c226a2dd5e453824518ab0eeb6d15f649f0a74e5b0e4be9a2e17"
[[files]] [[files]]
file = "kubejs/server_scripts/mods/powder_power.js" file = "kubejs/server_scripts/mods/powder_power.js"
hash = "ced0c73d8fb97517edc911f6c13f59895e1d5d00fbd70de919f2a417d8335c25" hash = "097a39eae999417e3ac5bb94724654b04935cec220f22ab03e52c5d995438087"
[[files]] [[files]]
file = "kubejs/server_scripts/mods/prettypipes.js" file = "kubejs/server_scripts/mods/prettypipes.js"
@ -727,7 +735,7 @@ hash = "d37bfb9bc41aa46d0aa075dbe19a5eeb947b4ea3d8f13c03ac370cb00763d7a1"
[[files]] [[files]]
file = "kubejs/server_scripts/mods/thermal.js" file = "kubejs/server_scripts/mods/thermal.js"
hash = "b33f603a2121bc90e47b27680ee55655dca46c9d7b07d97d1c06698d0a1c762d" hash = "b81ffc5905fe81de8d66015b0814714a8db8ecb6a4a2d927e600b328665c617a"
[[files]] [[files]]
file = "kubejs/server_scripts/mods/torchmaster.js" file = "kubejs/server_scripts/mods/torchmaster.js"
@ -747,7 +755,7 @@ hash = "4003082f31011049402ff31504a6db0f4fdd6c7076167109c66fa412286be462"
[[files]] [[files]]
file = "kubejs/server_scripts/ore-processing.js" file = "kubejs/server_scripts/ore-processing.js"
hash = "c2d3d5b00a259d7109916ee9a9f6e46ad52a8084ed435d4bc2ccd69312eff0ce" hash = "bb085e326aa85a8c8e86aac25f1a2a2c7fe53ebacb74d5de44b34769c73dc3e1"
[[files]] [[files]]
file = "kubejs/server_scripts/progression/report.js" file = "kubejs/server_scripts/progression/report.js"
@ -759,7 +767,7 @@ hash = "b443372ed45f43ba1d596455b9a5c9c3a90d9886012d253c091fb935970aae7a"
[[files]] [[files]]
file = "kubejs/server_scripts/tags.js" file = "kubejs/server_scripts/tags.js"
hash = "373b175bd3a2415b31f7b29b4b2075df82f2d059c8b120c09e8f6e6a862aa7b7" hash = "94e9b3fcf597ee4eeeaaa4e596905f2be97ea5ff3b838d3530a33505cdeb2892"
[[files]] [[files]]
file = "kubejs/startup_scripts/example.js" file = "kubejs/startup_scripts/example.js"
@ -767,19 +775,19 @@ hash = "395c96d3ddd178821db851f387e91560e606ea752177f66d2016f12bd0542b8f"
[[files]] [[files]]
file = "kubejs/startup_scripts/grist.js" file = "kubejs/startup_scripts/grist.js"
hash = "b79ebd1ba18eeb0dc59bb6b7ed375cf348edd90fa648f5759dd45f890db5f3d6" hash = "d851746c6e7ae1c679f576b984662289c10e4195c0f52b459fd1ce3a83666ed4"
[[files]] [[files]]
file = "kubejs/startup_scripts/init.js" file = "kubejs/startup_scripts/init.js"
hash = "86b0c3c97240c008d6de87d66ff77a80e47a07c105e89d743cb74c9fdc1b031e" hash = "80483290133f2ab1a969008335c29758884b20e4611ffbfb4e4253f3207ef74a"
[[files]]
file = "kubejs/startup_scripts/jsconfig.json"
hash = "a9e6912b8515be242dd76c6c9a536a8d7c73f6b8b949787f538436ebeafbb7ee"
[[files]] [[files]]
file = "kubejs/startup_scripts/progression-items.js" file = "kubejs/startup_scripts/progression-items.js"
hash = "3ae96e7bb9f83d1fd2d2af269ae5706f2fff283807c65ab3cbe197d8b69644b6" hash = "eda5964bf26b3ea17ab806944e79c16007e525da8f3ba4d6222dcbb0437f9f90"
[[files]]
file = "kubejs/startup_scripts/rarities.js"
hash = "6077f20a66943e6de311f5cccb465471633524cfb3584d207cc2f1cb2632d675"
[[files]] [[files]]
file = "mods/ae2-things-forge.pw.toml" file = "mods/ae2-things-forge.pw.toml"
@ -961,6 +969,11 @@ file = "mods/caelus.pw.toml"
hash = "5155ae1ca2c606df2001422a48cd167d2449160d5fe12a302753dee69af7fe92" hash = "5155ae1ca2c606df2001422a48cd167d2449160d5fe12a302753dee69af7fe92"
metafile = true metafile = true
[[files]]
file = "mods/canary.pw.toml"
hash = "14481081a9e233f4ba57df8a77ce028184818143eae1c73b60749ea482c912e9"
metafile = true
[[files]] [[files]]
file = "mods/caupona.pw.toml" file = "mods/caupona.pw.toml"
hash = "8517132706f5a99edaf7705b6a4c2c934972dabcacca279f6d8abdef874d9949" hash = "8517132706f5a99edaf7705b6a4c2c934972dabcacca279f6d8abdef874d9949"
@ -1091,9 +1104,14 @@ file = "mods/create-power-loader.pw.toml"
hash = "255864fc7aa8e28619e5ddbf9094623bfcc9d6caa260bc0cd3d32b39d45a532f" hash = "255864fc7aa8e28619e5ddbf9094623bfcc9d6caa260bc0cd3d32b39d45a532f"
metafile = true metafile = true
[[files]]
file = "mods/create-railways-navigator.pw.toml"
hash = "00929d51a65b0b8c417691b3312fc858ccff50bce507fc1d1b85dc7a2b2df20b"
metafile = true
[[files]] [[files]]
file = "mods/create.pw.toml" file = "mods/create.pw.toml"
hash = "119d501c87aef8afa8cf89ed6f17499518c21240d7781f4331e3007e57957a79" hash = "97f7c75ac9bf6ee2a4f15c0f1e3e4cd161f3d2e33f32ebf623811ac90b3c2a83"
metafile = true metafile = true
[[files]] [[files]]
@ -1126,6 +1144,11 @@ file = "mods/curios.pw.toml"
hash = "68960354be9294d5761b636b94e4f54715119602e83c4dd107698021dbeca16b" hash = "68960354be9294d5761b636b94e4f54715119602e83c4dd107698021dbeca16b"
metafile = true metafile = true
[[files]]
file = "mods/custom-rarity.pw.toml"
hash = "9c1c5002ed732af9361b06b0f72de65f69d241c8bdec7a88579e66e7fd4f1645"
metafile = true
[[files]] [[files]]
file = "mods/cyclops-core.pw.toml" file = "mods/cyclops-core.pw.toml"
hash = "de937c84384b9e99dc858f1e68f1a34789e357e111dd74cf8d8ff87df2d0dc6f" hash = "de937c84384b9e99dc858f1e68f1a34789e357e111dd74cf8d8ff87df2d0dc6f"
@ -1191,16 +1214,6 @@ file = "mods/dynamic-fps.pw.toml"
hash = "62c8188f48d71d21bf114d4dcfbc35d1e3251456e07f2caef1a2457d2e2a2947" hash = "62c8188f48d71d21bf114d4dcfbc35d1e3251456e07f2caef1a2457d2e2a2947"
metafile = true metafile = true
[[files]]
file = "mods/dynamic-lights.pw.toml"
hash = "9e509b2046271caf29aa1f0f91f1db22d981a3e84f0dd4b13047b3010fba078f"
metafile = true
[[files]]
file = "mods/dynamiclights-reforged.pw.toml"
hash = "8f2270a50a633db681826cbfb691e6efdb25e1e0c4702125c13d525b52fe229f"
metafile = true
[[files]] [[files]]
file = "mods/easy-villagers.pw.toml" file = "mods/easy-villagers.pw.toml"
hash = "9f9d2f8a99a2599ab346e2b3d2a6a70ffa5b1a41dd36f59bad5f14ee96f0e6fd" hash = "9f9d2f8a99a2599ab346e2b3d2a6a70ffa5b1a41dd36f59bad5f14ee96f0e6fd"
@ -1711,6 +1724,11 @@ file = "mods/notrample.pw.toml"
hash = "f08e47a8b608a67794114836dcefe16e07c853ca4271c2fa8def9bd84b58020e" hash = "f08e47a8b608a67794114836dcefe16e07c853ca4271c2fa8def9bd84b58020e"
metafile = true metafile = true
[[files]]
file = "mods/obscure-tooltips.pw.toml"
hash = "fd65b1e838edc65558b89ae72af29051ac92997d1d6ef4260fc889dd350a826e"
metafile = true
[[files]] [[files]]
file = "mods/oceans-delight.pw.toml" file = "mods/oceans-delight.pw.toml"
hash = "57f6793fdca748db18eb33a34344f68804e881af07c5e032073d8b33ee683a54" hash = "57f6793fdca748db18eb33a34344f68804e881af07c5e032073d8b33ee683a54"
@ -1911,6 +1929,16 @@ file = "mods/smooth-chunk-save.pw.toml"
hash = "a061b4f98461fc38b4ff6495b5e3a9b8708e9d87333c2cbb29e6b265053a5abe" hash = "a061b4f98461fc38b4ff6495b5e3a9b8708e9d87333c2cbb29e6b265053a5abe"
metafile = true metafile = true
[[files]]
file = "mods/sodium-dynamic-lights.pw.toml"
hash = "82bb7cd6c8b68bb1831bb7c374bd316b6403cd01195d582f19c31076c908953a"
metafile = true
[[files]]
file = "mods/sodium-options-api.pw.toml"
hash = "75a60e6b443b351b7a4a78ffce7c71e44b3e20ca10c374aea1de516c785d6e2d"
metafile = true
[[files]] [[files]]
file = "mods/sooty-chimneys.pw.toml" file = "mods/sooty-chimneys.pw.toml"
hash = "e8f11d351338010339f2bfe8d3a28e7b56fbb802b29c74f205490e46e2a5ea14" hash = "e8f11d351338010339f2bfe8d3a28e7b56fbb802b29c74f205490e46e2a5ea14"

View File

@ -15,7 +15,6 @@ StartupEvents.registry('item', e => {
console.log(`Create ${grist}`); console.log(`Create ${grist}`);
e.create(grist.id()) e.create(grist.id())
.displayName(grist.displayName()) .displayName(grist.displayName())
.rarity('rare')
.fireResistant(true) .fireResistant(true)
.textureJson({layer0: grist.itemTexture()}); .textureJson({layer0: grist.itemTexture()});
}); });

View File

@ -22,9 +22,10 @@ function HSVtoRGB(h, s, v) {
return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toString(); return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toString();
} }
function Tier(name, colorValue) { function Tier(name, colorValue, rarity) {
this.name = name; this.name = name;
this.colorValue = colorValue; this.colorValue = colorValue;
this.rarity = rarity;
}; };
Tier.prototype.displayName = function() { Tier.prototype.displayName = function() {
@ -83,9 +84,9 @@ Grist.Primitives = [
// Color values are 0-1 floats // Color values are 0-1 floats
Grist.Tiers = { Grist.Tiers = {
basic: new Tier('basic', 0.5), basic: new Tier('basic', 0.5, 'uncommon'),
improved: new Tier('improved', 0.75), improved: new Tier('improved', 0.75, 'rare'),
radiant: new Tier('radiant', 1.0) radiant: new Tier('radiant', 1.0, 'epic')
}; };
Grist.Tiers.forEach = function(f) { Grist.Tiers.forEach = function(f) {
@ -148,6 +149,14 @@ Grist.prototype.exact = function() {
return this; return this;
}; };
Grist.prototype.rarity = function() {
if (this.element == 'universal') {
return 'kubejs:legendary'
} else {
return this.tier.rarity;
}
}
Grist.prototype.color = function() { Grist.prototype.color = function() {
//return '#0d6aff'; //return '#0d6aff';
if (this.element.hue == -1) { if (this.element.hue == -1) {
@ -190,11 +199,20 @@ Grist.prototype.elementalTag = function() {
}; };
Grist.prototype.tags = function() { Grist.prototype.tags = function() {
if (this.state == 'item') {
return [ return [
'kubejs:grist', 'kubejs:grist',
this.tag(), this.tag(),
this.elementalTag() this.elementalTag()
]; ];
} else if (this.state == 'block') {
return [
'kubejs:grist_block',
this.tag(),
this.elementalTag(),
`forge:storage_blocks/grist_${this.element.name}_${this.tier.name}`
];
}
}; };
Grist.prototype.id = function() { Grist.prototype.id = function() {

View File

@ -1,20 +0,0 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "ES2015",
"lib": [
"ES5",
"ES2015"
],
"rootDir": "./src",
"typeRoots": [
"../../.probe/startup/probe-types"
],
"baseUrl": "../../.probe/startup/probe-types",
"skipLibCheck": true
},
"include": [
"./src/**/*",
null
]
}

View File

@ -13,7 +13,7 @@ StartupEvents.registry('fluid', e => {
}); });
StartupEvents.registry('item', e => { StartupEvents.registry('item', e => {
e.create('grist_essence').displayName('Grist Essence').rarity('rare'); e.create('grist_essence').displayName('Grist Essence').rarity('uncommon');
// Intelligent progress // Intelligent progress
// Basic // Basic
@ -28,10 +28,10 @@ StartupEvents.registry('item', e => {
e.create('intelligent_catalyst').displayName('Intelligent Catalyst').rarity('rare').textureJson({layer0: 'malloc:item/intelligent_catalyst'}); e.create('intelligent_catalyst').displayName('Intelligent Catalyst').rarity('rare').textureJson({layer0: 'malloc:item/intelligent_catalyst'});
// Radiant // Radiant
e.create('intelligent_processor').displayName('Intelligent Processor').rarity('rare').texture('malloc:item/intelligent_processor'); e.create('intelligent_processor').displayName('Intelligent Processor').rarity('epic').texture('malloc:item/intelligent_processor');
e.create('raw_intelligent_processor').displayName('Raw Intelligent Processor').rarity('rare').texture('malloc:item/raw_intelligent_processor'); e.create('raw_intelligent_processor').displayName('Raw Intelligent Processor').rarity('epic').texture('malloc:item/raw_intelligent_processor');
e.create('deep_intelligent_processor').displayName('Deep Intelligent Processor').rarity('rare').texture('malloc:item/deep_intelligent_processor'); e.create('deep_intelligent_processor').displayName('Deep Intelligent Processor').rarity('epic').texture('malloc:item/deep_intelligent_processor');
e.create('raw_deep_intelligent_processor').displayName('Deep Raw Intelligent Processor').rarity('rare').texture('malloc:item/raw_deep_intelligent_processor'); e.create('raw_deep_intelligent_processor').displayName('Deep Raw Intelligent Processor').rarity('epic').texture('malloc:item/raw_deep_intelligent_processor');
// Energetic progression // Energetic progression
// Basic // Basic
@ -69,13 +69,13 @@ StartupEvents.registry('item', e => {
e.create('reinforced_grist_blend').displayName('Reinforced Grist Blend').rarity('rare').textureJson({layer0: 'minecraft:item/redstone'}).color(0, Grist.of('build', 'improved').color()); e.create('reinforced_grist_blend').displayName('Reinforced Grist Blend').rarity('rare').textureJson({layer0: 'minecraft:item/redstone'}).color(0, Grist.of('build', 'improved').color());
// Radiant // Radiant
e.create('grist_crucible'); e.create('grist_crucible').rarity('epic');
e.create('grist_crucible_filled'); e.create('grist_crucible_filled').rarity('epic');
e.create('grist_crucible_hot'); e.create('grist_crucible_hot').rarity('epic');
e.create('tempered_grist_alloy_ingot'); e.create('tempered_grist_alloy_ingot').rarity('epic');
e.create('tempered_grist_alloy_nugget'); e.create('tempered_grist_alloy_nugget').rarity('epic');
e.create('perfect_grist_alloy_ingot'); e.create('perfect_grist_alloy_ingot').rarity('epic');
e.create('perfect_grist_alloy_nugget'); e.create('perfect_grist_alloy_nugget').rarity('epic');
e.create('flawed_grist_alloy_ingot'); e.create('flawed_grist_alloy_ingot').rarity('epic');
e.create('flawed_grist_alloy_nugget'); e.create('flawed_grist_alloy_nugget').rarity('epic');
}); });

View File

@ -0,0 +1,75 @@
// priority: 10000
RarityJSEvents.register(event => {
console.warn("Setting up rarities");
event.addRarity("kubejs:legendary", "yellow");
event.addRarity("kubejs:mythic", "red");
event.addRarity("kubejs:unique", "red");
event.addRarity("kubejs:intelligent_grist", "dark_green");
event.addRarity("kubejs:build_grist", "dark_blue");
event.addRarity("kubejs:energetic_grist", "dark_red");
event.addRarity("kubejs:agricultural_grist", "dark_yellow");
// TODO: Put modular items into the unique tier
// TODO: Put gobber compat stuff into legendary
// TODO: Put powder power stuff into mythic/legendary
Grist.forEach(grist => {
console.warn(`${grist.id()} => ${grist.rarity()}`);
event.setRarity(grist.id(), grist.rarity());
});
Grist.forEachBlock(grist => {
console.warn(`${grist.id()} => ${grist.rarity()}`);
event.setRarity(grist.id(), grist.rarity());
});
event.setRarityByMod('kubejs', 'rare');
event.setRarityByMod('miapi', 'kubejs:unique');
event.setRarity("miapi:modular_work_bench", "rare");
event.setRarityByMod('gobber2', 'uncommon');
// Lots of mid-game mods should be uncommon by default
event.setRarityByMod('wormhole_artifact', 'epic');
event.setRarityByMod('artifacts', 'epic');
event.setRarityByMod('sophisticatedbackpacks', 'kubejs:intelligent_grist');
event.setRarityByMod('ae2', 'kubejs:intelligent_grist');
event.setRarityByMod('torchmaster', 'kubejs:intelligent_grist');
event.setRarityByMod('experienceobelisk', 'kubejs:intelligent_grist');
event.setRarityByMod('functionalstorage', 'kubejs:intelligent_grist');
event.setRarityByMod('waystones', 'kubejs:intelligent_grist');
event.setRarityByMod('modularrouters', 'kubejs:intelligent_grist');
event.setRarityByMod('summoningrituals', 'epic');
event.setRarityByMod('tempad', 'epic');
event.setRarity('create:precision_mechanism', 'kubejs:intelligent_grist');
event.setRarity('create:experience_nugget', 'uncommon');
event.setRarityByMod('botanypots', 'kubejs:agricultural_grist');
event.setRarityByMod('industrialforegoing', 'kubejs:agricultural_grist');
event.setRarityByMod('hostilenetworks', 'kubejs:agricultural_grist');
event.setRarityByMod('easy_villagers', 'kubejs:agricultural_grist');
event.setRarity('thermal:redstone_servo', 'kubejs:agricultural_grist');
event.setRarity('thermal:device_fischer', 'kubejs:agricultural_grist');
event.setRarity('farmersdelight:cooking_pot', 'kubejs:agricultural_grist');
event.setRarityByMod('darkutils', 'kubejs:agricultural_grist');
event.setRarityByMod('systeams', 'kubejs:energetic_grist');
event.setRarityByMod('powah', 'kubejs:energetic_grist');
event.setRarityByMod('create_new_age', 'kubejs:energetic_grist');
event.setRarity('thermal:energy_duct', 'kubejs:energetic_grist');
event.setRarity('thermal:energy_cell', 'kubejs:energetic_grist');
event.setRarity('thermal:rf_coil', 'kubejs:energetic_grist');
event.setRarity('thermal:energy_cell_frame', 'kubejs:energetic_grist');
event.setRarity('create:windmill_bearing', 'kubejs:energetic_grist');
event.setRarity('immersive_aircraft:boiler', 'kubejs:energetic_grist');
event.setRarity('iron_furnaces:augment_factory', 'kubejs:energetic_grist');
event.setRarityByMod('thermal', 'kubejs:build_grist');
event.setRarityByMod('ironfurnaces', 'kubejs:build_grist');
event.setRarityByMod('buildinggadgets2', 'epic');
event.setRarity('create:crushing_wheel', 'kubejs:build_grist');
});

View File

@ -0,0 +1,13 @@
name = "RarityJS"
filename = "raritymod-1.0.5.jar"
side = "both"
[download]
hash-format = "sha1"
hash = "d8ad367b715ce62a42e0651b1bb7c90f7220e050"
mode = "metadata:curseforge"
[update]
[update.curseforge]
file-id = 6359655
project-id = 1037072

View File

@ -0,0 +1,13 @@
name = "Obscure Tooltips"
filename = "Obscure-Tooltips-2.2.jar"
side = "both"
[download]
hash-format = "sha1"
hash = "8cc7c31f79a11bef3d5cc69b1740f07d5adbfc96"
mode = "metadata:curseforge"
[update]
[update.curseforge]
file-id = 4686579
project-id = 715660

View File

@ -6,7 +6,7 @@ pack-format = "packwiz:1.1.0"
[index] [index]
file = "index.toml" file = "index.toml"
hash-format = "sha256" hash-format = "sha256"
hash = "4170d8bbe4ddaff347c3caa5b2c37a9e1cfe163e6d9b4d13d83425a15f5ee90e" hash = "39ea775ae65074e1f92ce8ee0d1d802bc37c0a2a777cc16c4543a3d779bead98"
[versions] [versions]
forge = "47.4.0" forge = "47.4.0"