Compare commits

..

10 Commits

Author SHA1 Message Date
hypercross 0d7b06d542 feat: on trades 2025-11-30 17:37:38 +08:00
hypercross 95cb582977 feat: the obsidian & tears stuff 2025-11-30 13:51:37 +08:00
hypercross 814ca75ebb feat: more progression 2025-11-30 13:26:40 +08:00
hypercross 12290d73f4 feat: kubejs extensions 2025-11-30 13:12:07 +08:00
hypercross 7737fc5200 feat: rope 2025-11-30 13:07:11 +08:00
hypercross 5b9a34a4d4 feat: armor, create machine, map recipes 2025-11-30 12:47:34 +08:00
hypercross 80f23fe7d3 feat: kubejs basics 2025-11-30 11:43:11 +08:00
hypercross 984db8eaf5 feat: js 2025-11-30 11:36:51 +08:00
hypercross f2c2bfd7cd feat: default configs 2025-11-30 11:34:04 +08:00
hypercross 10ec129d37 feat: configure map atlas 2025-11-30 11:33:56 +08:00
16 changed files with 1066 additions and 13 deletions

7
.gitignore vendored
View File

@ -1,6 +1,7 @@
*.log
*.log.gz
config/
!configureddefaults/config/
options.txt
mods/
usernamecache.json
@ -10,3 +11,9 @@ modernfix/
saves/
resourcepacks/
shaderpacks/
# kubejs dev shit
.probe
.vscode
rhino.local.properties
local

View File

@ -0,0 +1,12 @@
# Configured Defaults
This whole directory servers as a synchronized mirror of `.minecraft`. Every sub-directory and / or file placed within will be copied to the main `.minecraft` directory during game launch if the directory / file is not already present.
There is no way of overriding an existing file, a copy will only be made when the target destination is empty.
Please note that due to the way Minecraft handles `options.txt` specifically it is sufficient to include only the options you want to set a preset for. All missing options will be filled in using their internal defaults when the file is read by the game.
Examples:
- `.minecraft/configureddefaults/options.txt` will be copied to `.minecraft/options.txt` if not already present
- `.minecraft/configureddefaults/config/jei/jei.toml` will be copied to `.minecraft/config/jei/jei.toml` if not already present
Note that this `README.md` file is excluded from being copied to `.minecraft`.

View File

@ -0,0 +1,125 @@
[minimap]
#Hides minimap when inventory is open
hide_when_inventory_is_open = false
#Shows a background texture for each map, useful to see where each map ends
shows_map_background = false
#Hide minimap when holding the atlas in hand
hide_when_in_hand = true
#Only display y coordinates if atlas holds some slice maps
only_show_y_when_has_slices = true
#Global scale of entire minimap HUD. Keep at 1 for pixel perfect consistency
#Range: 0.0 ~ 20.0
scale = 1.0
#If 'true', the Mini-Map of the Active Map will be drawn on the HUD while the Atlas is active.
enabled = true
#How many maps to display in a single minimap. Essentially zoom. Can be a fraction
#Range: 0.001 ~ 100.0
zoom_multiplier = 1.0
#Controls anchor position of mini-map
#Allowed Values: UPPER_LEFT, UPPER_RIGHT, LOWER_LEFT, LOWER_RIGHT
anchoring = "UPPER_LEFT"
#An integer which will offset the mini-map horizontally
#Range: -4000 ~ 4000
horizontal_offset = 0
#An integer which will offset the mini-map vertically
#Range: -4000 ~ 4000
vertical_offset = 0
#The number of pixels to shift vertically when there's an active effect
#Range: -4000 ~ 4000
active_potion_effects_vertical_offset = 26
#When enabled, the player's current Coords will be displayed
coordinate_text = true
#Displays chunk coordinates
chunk_coordinate_text = false
#When enabled, the player's current Biome will be displayed
biome_text = true
#Sets the scale of the text rendered for Coords and Biome mini-map data
#Range: 0.0 ~ 10.0
coords_and_biome_scale = 1.0
#Sets the scale of the map icons rendered in the mini-map
#Range: 0.0 ~ 10.0
decoration_scale = 1.0
#Scale multiplier for Map Markers text on the mini-map
#Range: 0.0 ~ 10.0
map_markers_text_scale = 1.0
#Allows minimap to follow player movement instead of only displaying current map
follow_player = true
#When enabled the map will align itself with the player
rotate_with_player = false
#Draw cardinal directions on minimap
cardinal_directions = true
#Scale of cardinal directions on minimap
#Range: 0.0 ~ 2.0
cardinal_scale = 1.0
#Only shows north cardinal direction
only_show_north_cardinal = false
#Shows map separation borders
map_borders = true
#Use sky color for minimap
darken_at_night = false
#Plays page turn sound when current active map changes. Works best when paired with no rotation and no player follow
map_change_sound = false
#Automatically switches to the nearest slice when possible
automatic_slice_change = false
[world_map]
crossair = false
#Use bigger book like texture for worldmap view. Makes the view a bit bigger. Recommended to ebe used with map scale 1 (you might want to lower lectern one too if buttons dont show)
alternative_texture = false
#Pan smoothly. When off it will pan in map increments instead
smooth_panning = true
#Makes zooming work smoothly instead of in 2 maps increments
smooth_zooming = true
#Range: 0.0 ~ 10.0
zoom_scroll_speed = 1.0
#Global scale of the entire world map GUI. Keep at 1 for pixel perfect consistency
#Range: 0.0 ~ 20.0
scale = 1.25
#Global scale of the entire world map GUI when opening from lectern. Keep at 1 for pixel perfect consistency
#Range: 0.0 ~ 20.0
lectern_scale = 1.0
#Shows map separation borders
map_borders = true
#When enabled, the Atlas world map coordinates will be displayed
draw_coordinates = true
#Sets the scale of the text rendered for Coords world-map data
#Range: 0.0 ~ 10.0
coordinates_scale = 1.0
#Sets the scale of the map icons rendered in the world-map
#Range: 0.0 ~ 10.0
decoration_scale = 1.0
#Scale multiplier for Map Markers text on the world-map
#Range: 0.0 ~ 10.0
map_markers_text_scale = 1.0
#Rearranges the position of the slice indicator to be more compact. You will need supplementaries slice maps to use this
compact_slices_indicator = false
#Allows minimap to follow player movement instead of only displaying current map
follow_player = true
[misc]
#Multiplier for all the Atlases sound float
#Range: 0.0 ~ 10.0
soundScalar = 1.0
#Render atlas like normal map when in hand
#Allowed Values: ON, NOT_LOCKED, OFF
in_hand_renderer = "NOT_LOCKED"
[moonlight_integration]
#Enables moonlight compat, which allows to place map markers on map via a special pin button
enabled = true
#Allows tracking pins by pressing control, making them follow you on minimap
pin_tracking = true
#Show nearby mobs on minimap. Also requires matching server config
mob_radar = false
#Range: 0 ~ 256
radar_radius = 64
#Entities on radar will have their icon rotate
radar_pins_rotate = false
#Uses yellow markers for all mobs
radar_single_color = false
#Recolors map texture at night to make them use night lightmap. Requires light_map config in common configs
night_lightmap = true
#Turn on to convert Xaeros minimap waypoints. Conversion will happen on world boot. Remember to turn back off
convert_xaeros_waypoints = false

View File

@ -0,0 +1,46 @@
[general]
#The maximum number of Maps (Filled & Empty combined) allowed to be inside an Atlas.
#Range: 0 ~ 1000000
max_map_count = 512
#If enabled, you can increase the Empty Map count by inserting Paper
accept_paper_for_empty_maps = true
#If true, the Atlas is required to have spare Empty Maps stored to expand the Filled Map size
require_empty_maps_to_expand = true
#Controls how many usable Maps are added when you add a single Map to the Atlas
#Range: 0 ~ 64
map_entry_value_multiplier = 1
#Controls how many free Empty Maps you get for 'activating' an Inactive Atlas
#Range: 0 ~ 64
pity_activation_map_count = 9
#If 'true', Atlases will be able to store Empty Maps and auto-fill them as you explore.
enable_empty_map_entry_and_fill = true
#Locations of where an atlas will be scanned for. By default only hotbar will be scanned
#Allowed Values: MAIN_HAND, HOTBAR, HANDS, HOTBAR_AND_HANDS, INVENTORY
activation_locations = "INVENTORY"
#Allows players in creative to teleport using the atlas. Hold shift and press anywhere
creative_teleport = true
#Marker id associated with the red pin button on the atlas screen. Set to empty string to disable
pin_marked_id = "map_atlases:pin"
#Shows light color on maps. Needs Moonlight lib
light_map = false
#Show nearby mobs on minimap. Needs matching client config also set
mob_radar = false
#Adds a shear button to the atlas screen which allows you to cut maps
shear_button = true
[update_logic]
#Update maps in simple round robin fashion instead of prioritizing the ones closer. Overrides configs below
round_robin = false
#Max of maps to update each tick. Increase to make maps update faster
#Range: 0 ~ 9
map_updates_per_tick = 1
#Makes map update on different threads, speeding up the process. Disable if it causes issues. Especially on servers. Try turning on for a big performance improvement regarding map atlas update
#Allowed Values: OFF, SINGLE_PLAYER_ONLY, ALWAYS_ON
multithreaded_update = "SINGLE_PLAYER_ONLY"
#Visually shows map updates
debug_map_updates = false
#Every how many ticks should markers be updated
#Range: 1 ~ 200
markers_update_period = 10

View File

@ -2,18 +2,62 @@
## todo
- [ ] Spelunkery / Caverns n Chasms / Galosphere / Supplementaries: repeated barometers/depth gauge etc
- [ ] Gui compass: remove or tweak since it adds depth as well
- [ ] Map Atlases: should hide coords
- [x] Spelunkery / Caverns n Chasms / Galosphere / Supplementaries: repeated barometers/depth gauge etc
- [x] Gui compass: remove or tweak since it adds depth as well
- [ ] spyglass: 2 copper + glass
- [ ] empty map: 8 paper + spyglass
- [ ] map atlases: book & quill + compass + empty map
- [ ] iron / gold armor: use plates over ingots
- [ ] rope: prefer farmer's rope over supplementaries
- [ ] flax: make more ropes than straws maybe?
- [x] spyglass: 2 copper + glass
- [x] empty map: 8 paper + spyglass
- [x] map atlases: book + compass + empty map
- [x] iron / gold armor: use plates over ingots
- [-] rope: prefer farmer's rope over supplementaries
- [x] flax: make more ropes than straws maybe?
- [ ] fan, reaper use quartz
- [ ] haunting obsidian -> crying obsidian
- [ ] diamond armor requires brass crafter
- [ ] crying obsidian + glowstone dust -> dimension tears don't need blaze
- [x] fan, reaper use quartz -> replace shaft with, like, rose
- [x] haunting obsidian -> crying obsidian
- [x] diamond armor requires brass crafter
- [x] drill/cutter requires brass
- [x] crying obsidian + glowstone dust -> dimension tears don't need blaze
## trades
- [ ] ideology
- buys food at 1, sells staples at 2, sells gears for gems at 3, sells building stuff, buys/sells rare collectibles at 5
- food includes basic cooked fish, crops and meat, best exp source.
- staples are all player gatherables obtainable easily elsewhere, timesaver.
- trades gems (cinnabar, lapiz, spinel, diamond, silver, gold, crystal) for specific enchantment books.
- sells a type of stone at 4.
- collectibles are rare and must trade with other villagers, best emerald source.
- all trades have 1 stock and 1 exp, except for food which has 5 exp.
- you 1. know them 2. build farm for them 3. buy staples for consumables 4. build houses for them 5. stock up collectibles
- all food are basic one ingredient food and are the same big pool for all villagers.
- all collectibles are the same big pool for all villagers.
- only design staples, gear, and deco for each profession.
- armorer
- staples: low durability chainmail, gold armor
- enchantment: fire prot, prot,
- brick: granite, limestone
- butcher
- staples: various animal meat, bones
- enchantment: sharp, strength
- deco: diorite, tuff
- cartographer
- staples: explorer maps
- enchantment: loot, luck
- deco: deepslate cobble, cobble
- cleric
- staples: glass bottles, spider eyes, rotten flesh
- enchantment: undead killer, spider killer
- deco: nether brick, blackstone
- farmer
- staples: seeds, bonemeal, saplings
- enchantment: efficiency, durable
- deco: mud bricks, dirt
- fisherman
- staples: fish, leech, worm, rods
- enchantment: luck of the sea, lure
- deco: coral blocks
- fletcher
- staples: bows, arrows, crossbows
- enchantment: piercing, reloading
- deco: daub, daub_frame
-

15
kubejs/README.txt Normal file
View File

@ -0,0 +1,15 @@
Find out more info on the website: https://kubejs.com/
Directory information:
assets - Acts as a resource pack, you can put any client resources in here, like textures, models, etc. Example: assets/kubejs/textures/item/test_item.png
data - Acts as a datapack, you can put any server resources in here, like loot tables, functions, etc. Example: data/kubejs/loot_tables/blocks/test_block.json
startup_scripts - Scripts that get loaded once during game startup - Used for adding items and other things that can only happen while the game is loading (Can be reloaded with /kubejs reload_startup_scripts, but it may not work!)
server_scripts - Scripts that get loaded every time server resources reload - Used for modifying recipes, tags, loot tables, and handling server events (Can be reloaded with /reload)
client_scripts - Scripts that get loaded every time client resources reload - Used for JEI events, tooltips and other client side things (Can be reloaded with F3+T)
config - KubeJS config storage. This is also the only directory that scripts can access other than world directory
exported - Data dumps like texture atlases end up here
You can find type-specific logs in logs/kubejs/ directory

View File

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

View File

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

View File

@ -0,0 +1,47 @@
ServerEvents.recipes(event => {
// sheet for iron/gold armor
for(const item of ['minecraft:iron_helmet', 'minecraft:iron_chestplate', 'minecraft:iron_leggings', 'minecraft:iron_boots']){
event.replaceInput(
{output: item},
'minecraft:iron_ingot',
'create:iron_sheet'
);
}
for(const item of ['minecraft:golden_helmet', 'minecraft:golden_chestplate', 'minecraft:golden_leggings', 'minecraft:golden_boots']){
event.replaceInput(
{output: item},
'minecraft:gold_ingot',
'create:golden_sheet'
);
}
// diamond requires mechanical crafting
make_mechanical(event, 'minecraft:diamond_helmet', 'minecraft:diamond', [
'AAA',
'A A',
]);
make_mechanical(event, 'minecraft:diamond_chestplate', 'minecraft:diamond', [
'A A',
'AAA',
'AAA',
]);
make_mechanical(event, 'minecraft:diamond_leggings', 'minecraft:diamond', [
'AAA',
'A A',
'A A',
]);
make_mechanical(event, 'minecraft:diamond_boots', 'minecraft:diamond', [
'A A',
'A A',
])
});
function make_mechanical(event, thing, material, shape){
event.remove({output: thing});
event.recipes.create.mechanical_crafting(
thing,
shape,
{
A: material,
}
);
}

View File

@ -0,0 +1,16 @@
ServerEvents.recipes(event => {
event.remove({output:'supplementaries:rope'});
event.shaped(
'8x farmersdelight:rope',
[
' A ',
' A ',
' A '
],
{
A: 'supplementaries:flax'
}
);
event.remove({output:'spelunkery:depth_gauge'});
});

View File

@ -0,0 +1,56 @@
ServerEvents.recipes(event => {
// propeller / fan requires quartz
event.replaceInput(
{output:'create:propeller'},
'create:andesite_alloy',
'minecraft:quartz'
);
// harvester requires electron tube
event.remove({output:'create:mechanical_harvester'});
event.shaped(
'create:mechanical_harvester',
[
'ABA',
'ABA',
'CDC'
],
{
A: 'create:andesite_alloy',
B: 'create:iron_sheet',
C: 'create:electron_tube',
D: 'create:andesite_casing',
}
);
// saw and drill requires mechanical crafting
event.remove({output: 'create:mechanical_saw'});
event.recipes.create.mechanical_crafting(
'create:mechanical_saw',
[
'AAA',
'ABA',
' C ',
],
{
A: 'create:iron_sheet',
B: 'minecraft:iron_ingot',
C: 'create:andesite_casing',
}
);
event.remove({output: 'create:mechanical_drill'});
event.recipes.create.mechanical_crafting(
'create:mechanical_drill',
[
' A ',
'ABA',
' C ',
],
{
A: 'create:andesite_alloy',
B: 'minecraft:iron_ingot',
C: 'create:andesite_casing',
}
);
});

View File

@ -0,0 +1,117 @@
const food_list = [
'8x minecraft:apple',
'8x minecraft:beetroot',
'8x minecraft:baked_potato',
'8x minecraft:bread',
'8x minecraft:carrot',
'8x minecraft:melon_slice',
'8x minecraft:sweet_berries',
'8x farmersdelight:pumpkin_slice',
'8x farmersdelight:cabbage_leaf',
'8x farmersdelight:tomato',
'8x farmersdelight:cooked_rice',
'8x farmersdelight:fried_egg',
'8x neapolitan:strawberries',
'8x neapolitan:banana',
'8x neapolitan:dried_banana',
'8x neapolitan:roasted_adzuki_beans',
'8x neapolitan:mint_candies',
'8x atmospheric:passion_fruit',
'8x atmospheric:currant',
'8x atmospheric:dragon_fruit',
'8x atmospheric:candied_orange_slices',
'8x atmospheric:roasted_yucca_fruit',
];
const deco_list = [
'32x minecraft:diorite',
'32x minecraft:granite',
'32x minecraft:andesite',
'32x minecraft:stone',
'32x minecraft:mossy_cobblestone',
'32x minecraft:blackstone',
'32x minecraft:tuff',
'32x minecraft:dirt',
'32x minecraft:gravel',
'32x minecraft:mud',
'32x minecraft:mud_bricks',
'32x minecraft:stone_bricks',
'32x minecraft:cobbled_deepslate',
'32x supplementaries:daub',
'32x supplementaries:daub_frame',
'32x clayworks:concrete',
];
const feast_list = [
'farmersdelight:rice_roll_medley_block',
'farmersdelight:shepherds_pie_block',
'farmersdelight:honey_glazed_ham_block',
'farmersdelight:stuffed_pumpkin_block',
'farmersdelight:roast_chicken_block',
'farmersdelight:pasta_with_meatballs',
];
const enchantment_list = {
armorer: ['projectile_protection', 'blast_protection'],
butcher: ['sharpness', 'sweeping'],
cartographer: ['looting', 'fortune'],
cleric: ['fire_aspect', 'fire_protection', 'flame'],
farmer: ['efficiency', 'thorns'],
fisherman: ['lure', 'luck_of_the_sea'],
fletcher: ['power', 'punch', 'quick_charge', 'piercing'],
leatherworker: ['feather_falling', 'depth_strider'],
librarian: ['smite', 'bane_of_arthropods'],
mason: ['protection', 'unbreaking'],
shepherd: ['knockback', 'aqua_affinity'],
toolsmith: ['silk_touch', 'fortune'],
weaponsmith: ['sharpness', 'fire_aspect'],
'chefsdelight:delightchef': ['flame', 'fire_aspect'],
'chefsdelight:delightcook': ['flame', 'fire_aspect'],
'sawmill:carpenter': ['knockback', 'fortune'],
}
function roll(list, random){
return list[Math.floor(random.next() * list.length)];
}
MoreJSEvents.villagerTrades((event) => {
return;
event.removeVanillaTrades();
event.removeModdedTrades();
const professions = VillagerUtils.getProfessions();
for(const prof of professions){
event.addCustomTrade(prof, 1, (offer, entity, random) => {
offer.setFirstInput(roll(food_list, random));
offer.setOutput('emerald');
offer.setMaxUses(1);
offer.setVillagerExperience(5);
offer.setPriceMultiplier(1);
});
event.addCustomTrade(prof, 4, (offer, entity, random) => {
offer.setFirstInput('3x emerald');
offer.setOutput(roll(deco_list, random));
offer.setMaxUses(4);
offer.setVillagerExperience(1);
offer.setPriceMultiplier(1);
});
event.addCustomTrade(prof, 4, (offer, entity, random) => {
offer.setFirstInput(roll(feast_list, random));
offer.setOutput('5x emerald');
offer.setMaxUses(1);
offer.setVillagerExperience(1);
offer.setPriceMultiplier(1);
});
// for(const enchant of enchantment_list[prof]){
// const trade = VillagerUtils.createEnchantedItemTrade(['6x emerald'], 'minecraft:enchanted_book');
// trade.maxUses(1);
// trade.villagerExperience(1);
// trade.enchantments(enchant).amount(1);
// event.addTrade(prof, 3, trade);
// }
}
});

View File

@ -0,0 +1,14 @@
ServerEvents.recipes(event => {
// obsidian -> crying obsidian
event.recipes.create.haunting('minecraft:crying_obsidian', 'minecraft:obsidian');
event.remove({output: Fluid.of('spelunkery:portal_fluid')});
event.recipes.create.mixing(
['minecraft:obsidian',
Fluid.of('spelunkery:portal_fluid', 144),
],
[
'minecraft:crying_obsidian',
'minecraft:glowstone_dust'
]
);
});

View File

@ -0,0 +1,43 @@
ServerEvents.recipes(event => {
// cheaper spyglass
event.remove({output: 'minecraft:spyglass'});
event.shaped(
'minecraft:spyglass',
[
' A',
' B ',
'B ',
],
{
A: 'minecraft:glass',
B: 'minecraft:copper_ingot'
}
);
// cheaper map
event.remove({output: 'minecraft:map'});
event.shaped(
'minecraft:map',
[
'BBB',
'BAB',
'BBB'
],
{
A: 'minecraft:spyglass',
B: 'minecraft:paper'
}
);
// map atlas shapeless
event.remove({output: 'map_atlases:atlas'});
event.shapeless(
'map_atlases:atlas',
[
'minecraft:map',
'minecraft:book',
'minecraft:compass'
]
);
});

View File

@ -0,0 +1,20 @@
{
"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

@ -292,6 +292,69 @@
}
]
},
{
"pakku_id": "iofxW1Jqc7WazBkR",
"type": "MOD",
"side": "BOTH",
"slug": {
"curseforge": "architectury-api",
"modrinth": "architectury-api"
},
"name": {
"curseforge": "Architectury API",
"modrinth": "Architectury API"
},
"id": {
"curseforge": "419699",
"modrinth": "lhGA9TYQ"
},
"files": [
{
"type": "curseforge",
"file_name": "architectury-9.2.14-forge.jar",
"mc_versions": [
"1.20.1",
"1.20"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/5137/938/architectury-9.2.14-forge.jar",
"id": "5137938",
"parent_id": "419699",
"hashes": {
"sha1": "a52918a500ff421180a1cbd1a0cabee712134ec4",
"md5": "76b40d407b6bf0257dd1dab6d3d395d5"
},
"required_dependencies": [],
"size": 580602,
"date_published": "2024-02-26T13:18:59.227Z"
},
{
"type": "modrinth",
"file_name": "architectury-9.2.14-forge.jar",
"mc_versions": [
"1.20",
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/lhGA9TYQ/versions/1MKTLiiG/architectury-9.2.14-forge.jar",
"id": "1MKTLiiG",
"parent_id": "lhGA9TYQ",
"hashes": {
"sha512": "cf67f2050cafa00f0bee42e6d7bef77fdb808ac4f71742f7b4d6d5c1e6ffb49561a5a252f332d2b78a9767bdb5faa284611790dba303fbdc736ae36d794f61c7",
"sha1": "a52918a500ff421180a1cbd1a0cabee712134ec4"
},
"required_dependencies": [],
"size": 580602,
"date_published": "2024-02-26T13:19:00.816154Z"
}
]
},
{
"pakku_id": "qImgYPBsdAUzo8vy",
"type": "MOD",
@ -1608,6 +1671,44 @@
}
]
},
{
"pakku_id": "OGfrDMPpouh6R3nj",
"type": "MOD",
"side": "CLIENT",
"slug": {
"modrinth": "emitrades"
},
"name": {
"modrinth": "EMI Trades"
},
"id": {
"modrinth": "j2HhbEE7"
},
"files": [
{
"type": "modrinth",
"file_name": "emitrades-forge-1.2.1+mc1.20.1.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge",
"neoforge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/j2HhbEE7/versions/LBT7pcVH/emitrades-forge-1.2.1+mc1.20.1.jar",
"id": "LBT7pcVH",
"parent_id": "j2HhbEE7",
"hashes": {
"sha512": "b0344906a3da867373edf6a4d5a7bcb1d0aa0aaf11825244b9d1d5aeb1aec1c5d023b754ab8f881905c7086ba11d2cdc5740ba29ab967b4549346531bcbc1b86",
"sha1": "ea86eceb04978bc366fe022bbab5dd5ea0bd3ab4"
},
"required_dependencies": [],
"size": 53378,
"date_published": "2023-11-26T01:20:56.880729Z"
}
]
},
{
"pakku_id": "3MtNCQOTQWS3Ll9u",
"type": "MOD",
@ -2798,6 +2899,184 @@
}
]
},
{
"pakku_id": "JDySZxFoIumoxNrh",
"pakku_links": [
"iofxW1Jqc7WazBkR",
"3MMdEeWR1863MGao"
],
"type": "MOD",
"side": "BOTH",
"slug": {
"curseforge": "kubejs",
"modrinth": "kubejs"
},
"name": {
"curseforge": "KubeJS",
"modrinth": "KubeJS"
},
"id": {
"curseforge": "238086",
"modrinth": "umyGl7zF"
},
"files": [
{
"type": "curseforge",
"file_name": "kubejs-forge-2001.6.5-build.16.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/5853/326/kubejs-forge-2001.6.5-build.16.jar",
"id": "5853326",
"parent_id": "238086",
"hashes": {
"sha1": "93fcf0eacc5dc08a4f719eaaed1dc93f0dc80f66",
"md5": "f4c6924bef764748d26ee51e4d4c0b00"
},
"required_dependencies": [
"419699",
"416294"
],
"size": 1654660,
"date_published": "2024-10-28T09:20:33.537Z"
},
{
"type": "modrinth",
"file_name": "kubejs-forge-2001.6.5-build.16.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/umyGl7zF/versions/g5igndAv/kubejs-forge-2001.6.5-build.16.jar",
"id": "g5igndAv",
"parent_id": "umyGl7zF",
"hashes": {
"sha512": "819f730d2a9d980bb246d30d67793f06f6a1608381c7ce3577cf25e70dd3d595271f8fcfbf3ae037168842f660e79e49846756bd18c79793b310ff18ab826cbd",
"sha1": "93fcf0eacc5dc08a4f719eaaed1dc93f0dc80f66"
},
"required_dependencies": [
"lhGA9TYQ",
"sk9knFPE"
],
"size": 1654660,
"date_published": "2024-10-28T09:20:35.912552Z"
}
]
},
{
"pakku_id": "zo8DCmsYBqq0bSMp",
"pakku_links": [
"sRvyoSr2dSbDwbrQ",
"JDySZxFoIumoxNrh"
],
"type": "MOD",
"side": "BOTH",
"slug": {
"curseforge": "kubejs-create",
"modrinth": "kubejs-create"
},
"name": {
"curseforge": "KubeJS Create",
"modrinth": "KubeJS Create"
},
"id": {
"curseforge": "429371",
"modrinth": "T38eAZQC"
},
"files": [
{
"type": "curseforge",
"file_name": "kubejs-create-forge-2001.3.0-build.8.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/6265/498/kubejs-create-forge-2001.3.0-build.8.jar",
"id": "6265498",
"parent_id": "429371",
"hashes": {
"sha1": "cbeb6643d1cea979a7e01c87cfb08b9210a1c393",
"md5": "c76f71ba6d16e6fe50e76b1862b58dff"
},
"required_dependencies": [
"328085",
"238086"
],
"size": 30960,
"date_published": "2025-03-05T00:02:55.447Z"
},
{
"type": "modrinth",
"file_name": "kubejs-create-forge-2001.3.0-build.8.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/T38eAZQC/versions/5vppyenb/kubejs-create-forge-2001.3.0-build.8.jar",
"id": "5vppyenb",
"parent_id": "T38eAZQC",
"hashes": {
"sha512": "1c6fa2b3dc52683bdf124ebfc507ad5adb5f1ceb147181466be4e495bc6eab1411976911477df538369ff2529607cb73bf3b4a05a8ed2f24804f4891d7635981",
"sha1": "cbeb6643d1cea979a7e01c87cfb08b9210a1c393"
},
"required_dependencies": [
"LNytGWDc",
"umyGl7zF"
],
"size": 30960,
"date_published": "2025-03-05T00:02:57.116010Z"
}
]
},
{
"pakku_id": "G7c4eHHOPhMUCabw",
"type": "MOD",
"slug": {
"curseforge": "kubejs-delight"
},
"name": {
"curseforge": "KubeJS Delight"
},
"id": {
"curseforge": "864875"
},
"files": [
{
"type": "curseforge",
"file_name": "kubejsdelight-1.1.2.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/5586/257/kubejsdelight-1.1.2.jar",
"id": "5586257",
"parent_id": "864875",
"hashes": {
"sha1": "198fb6534973e04c353287de7234df557834ddc8",
"md5": "f0362736a296e74a4765d8ac0c21ddf0"
},
"required_dependencies": [],
"size": 13371,
"date_published": "2024-08-01T07:25:04.183Z"
}
]
},
{
"pakku_id": "tsuM36PA8DvFbeOx",
"pakku_links": [
@ -3478,6 +3757,74 @@
}
]
},
{
"pakku_id": "cqaJGO8J1hyj0D84",
"pakku_links": [
"JDySZxFoIumoxNrh"
],
"type": "MOD",
"side": "BOTH",
"slug": {
"curseforge": "morejs",
"modrinth": "morejs"
},
"name": {
"curseforge": "MoreJS",
"modrinth": "MoreJS: KubeJS Addon"
},
"id": {
"curseforge": "666198",
"modrinth": "mo64mR1W"
},
"files": [
{
"type": "curseforge",
"file_name": "morejs-forge-1.20.1-0.10.1.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/6542/592/morejs-forge-1.20.1-0.10.1.jar",
"id": "6542592",
"parent_id": "666198",
"hashes": {
"sha1": "c460ca3e95e40894c78fd327c5ba73c7da83f6d3",
"md5": "3a21bb1bbc96251d4df6a54baeca0afc"
},
"required_dependencies": [
"238086"
],
"size": 173745,
"date_published": "2025-05-18T09:40:55.817Z"
},
{
"type": "modrinth",
"file_name": "morejs-forge-1.20.1-0.10.1.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/mo64mR1W/versions/KsTniWUD/morejs-forge-1.20.1-0.10.1.jar",
"id": "KsTniWUD",
"parent_id": "mo64mR1W",
"hashes": {
"sha512": "c95b79f8bf1888bcf56681d81541fa0d7e9bb5e4f49c766385eb11c3aba4477c19900bbe9cb3861ff8eb35b6783165a8e4a2352e2033ae799c6996e7026fb337",
"sha1": "c460ca3e95e40894c78fd327c5ba73c7da83f6d3"
},
"required_dependencies": [
"umyGl7zF"
],
"size": 173745,
"date_published": "2025-05-18T09:40:58.312974Z"
}
]
},
{
"pakku_id": "DfTTLHlrQBmbThmv",
"type": "MOD",
@ -3743,6 +4090,49 @@
}
]
},
{
"pakku_id": "7u38b7kY6ZPkbYlr",
"pakku_links": [
"JDySZxFoIumoxNrh"
],
"type": "MOD",
"side": "CLIENT",
"slug": {
"modrinth": "probejs"
},
"name": {
"modrinth": "ProbeJS"
},
"id": {
"modrinth": "JJNYRb4B"
},
"files": [
{
"type": "modrinth",
"file_name": "probejs-7.0.0-forge.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge",
"neoforge"
],
"release_type": "alpha",
"url": "https://cdn.modrinth.com/data/JJNYRb4B/versions/oiljyqSe/probejs-7.0.0-forge.jar",
"id": "oiljyqSe",
"parent_id": "JJNYRb4B",
"hashes": {
"sha512": "b10620235e860ef293be856c05d9f7c50a17813b898f18b4534cbf25c4da4e97494be98e460a98a449f05ba1c10e29d00aca62ac27f72138057cda1e72a22eee",
"sha1": "77e3583413568ea27745aeffb2bfc3b0128238ee"
},
"required_dependencies": [
"umyGl7zF"
],
"size": 4342166,
"date_published": "2024-06-18T09:30:41.254877Z"
}
]
},
{
"pakku_id": "K3hLdnX1Uz0LGCYC",
"type": "MOD",
@ -3780,6 +4170,67 @@
}
]
},
{
"pakku_id": "3MMdEeWR1863MGao",
"type": "MOD",
"side": "BOTH",
"slug": {
"curseforge": "rhino",
"modrinth": "rhino"
},
"name": {
"curseforge": "Rhino",
"modrinth": "Rhino"
},
"id": {
"curseforge": "416294",
"modrinth": "sk9knFPE"
},
"files": [
{
"type": "curseforge",
"file_name": "rhino-forge-2001.2.3-build.10.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/6186/971/rhino-forge-2001.2.3-build.10.jar",
"id": "6186971",
"parent_id": "416294",
"hashes": {
"sha1": "c83c9b719a6bab33fbd2b3f2f680eb3adbfc1aa1",
"md5": "59387620b0ef6becbff02c7c1636ad3e"
},
"required_dependencies": [],
"size": 1798244,
"date_published": "2025-02-12T21:26:47.347Z"
},
{
"type": "modrinth",
"file_name": "rhino-forge-2001.2.3-build.10.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/sk9knFPE/versions/uNALdylI/rhino-forge-2001.2.3-build.10.jar",
"id": "uNALdylI",
"parent_id": "sk9knFPE",
"hashes": {
"sha512": "4eb6a635f3eff3baa158539bd55344421cf69b15e28f7da8bf55f370a11c071f3525063a6f81b67fbfca550ad8aaab7e6208df87f65ca6ed2851edd46f032b58",
"sha1": "c83c9b719a6bab33fbd2b3f2f680eb3adbfc1aa1"
},
"required_dependencies": [],
"size": 1798244,
"date_published": "2025-02-12T21:26:49.669723Z"
}
]
},
{
"pakku_id": "9dQhRTIlFOll1TgB",
"pakku_links": [