From b6e2669b61a3412db9210d2d44d808b25a599408 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 01:25:00 +0800 Subject: [PATCH 01/32] feat: do curseforge multiplatform --- pakku-lock.json | 126 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 125 insertions(+), 1 deletion(-) diff --git a/pakku-lock.json b/pakku-lock.json index cf20d18..9c3ef6d 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -1,5 +1,5 @@ { - "target": "modrinth", + "target": "multiplatform", "mc_versions": [ "1.20.1" ], @@ -211,6 +211,87 @@ } ] }, + { + "pakku_id": "omnCPGgKRLLLDkZq", + "type": "MOD", + "slug": { + "curseforge": "aquaculture" + }, + "name": { + "curseforge": "Aquaculture 2" + }, + "id": { + "curseforge": "60028" + }, + "files": [ + { + "type": "curseforge", + "file_name": "Aquaculture-1.20.1-2.5.5.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "neoforge", + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/6296/111/Aquaculture-1.20.1-2.5.5.jar", + "id": "6296111", + "parent_id": "60028", + "hashes": { + "sha1": "726e1058f839e98786877d3f94527b1a0917e924", + "md5": "515dde53d77858310af77cd93a5d1316" + }, + "required_dependencies": [], + "size": 601173, + "date_published": "2025-03-12T13:57:50.437Z" + } + ] + }, + { + "pakku_id": "t0OYgbwALwTxhoEZ", + "pakku_links": [ + "skcZWAsFgQJkvCzd", + "omnCPGgKRLLLDkZq" + ], + "type": "MOD", + "slug": { + "curseforge": "aquaculture-delight" + }, + "name": { + "curseforge": "Aquaculture Delight (A Farmer's Delight Add-on)" + }, + "id": { + "curseforge": "961988" + }, + "redistributable": false, + "files": [ + { + "type": "curseforge", + "file_name": "aquaculturedelight-1.1.1-forge-1.20.1.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/6259/758/aquaculturedelight-1.1.1-forge-1.20.1.jar", + "id": "6259758", + "parent_id": "961988", + "hashes": { + "sha1": "e20e281d1d8909d334a331e110ad091d4b03027f", + "md5": "e1aa5ae3c8f5ceafbda9298804d9daaf" + }, + "required_dependencies": [ + "398521", + "60028" + ], + "size": 225149, + "date_published": "2025-03-03T12:58:41.293Z" + } + ] + }, { "pakku_id": "qImgYPBsdAUzo8vy", "type": "MOD", @@ -3799,6 +3880,49 @@ } ] }, + { + "pakku_id": "qTuo0eAtexUYcgkL", + "pakku_links": [ + "t78YlpbjD070ugwm", + "S9F3abE5OrkiBcOS" + ], + "type": "MOD", + "slug": { + "curseforge": "spelunkery-plus" + }, + "name": { + "curseforge": "Spelunkery+" + }, + "id": { + "curseforge": "1307013" + }, + "files": [ + { + "type": "curseforge", + "file_name": "spelunkeryplus-1.6.4.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/6901/666/spelunkeryplus-1.6.4.jar", + "id": "6901666", + "parent_id": "1307013", + "hashes": { + "sha1": "0698a0fda8edbe79f40aba728f3f13ad9b08d3b7", + "md5": "77eefa640327cc2f187c23dee13ad84a" + }, + "required_dependencies": [ + "499980", + "790530" + ], + "size": 375636, + "date_published": "2025-08-18T20:24:05.813Z" + } + ] + }, { "pakku_id": "Ed0oScSKPsEkEASP", "pakku_links": [ From 70e000abcb16dae302b635eaeab19913f6148d3b Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 01:28:42 +0800 Subject: [PATCH 02/32] feat: more cf stuff --- pakku-lock.json | 106 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/pakku-lock.json b/pakku-lock.json index 9c3ef6d..315c640 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -1082,6 +1082,51 @@ } ] }, + { + "pakku_id": "sB4TLS8M1xWjFOgf", + "pakku_links": [ + "sRvyoSr2dSbDwbrQ", + "qHP2JJwJwnQJujce" + ], + "type": "MOD", + "side": "SERVER", + "slug": { + "modrinth": "create-caverns-and-chasms-silver-compatibility" + }, + "name": { + "modrinth": "Create: Caverns And Chasms Silver Compatibility" + }, + "id": { + "modrinth": "LmRHh2N2" + }, + "files": [ + { + "type": "modrinth", + "file_name": "create-caverns-and-chasms-silver-compatibility-1.0.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge", + "neoforge" + ], + "release_type": "release", + "url": "https://cdn.modrinth.com/data/LmRHh2N2/versions/bqdqAZm9/create-caverns-and-chasms-silver-compatibility-1.0.jar", + "id": "bqdqAZm9", + "parent_id": "LmRHh2N2", + "hashes": { + "sha512": "3696ba8176041efc8526d0155f4586bebc059066056c904f925706fe724bb8ce0d6d7abdfbc1dfe5dd23962efe21c4c0d18e6ea2a6a114b5b34af9fabff38ac6", + "sha1": "c8d8276c5a8122f3349af879cd8e883215fd0fe9" + }, + "required_dependencies": [ + "LNytGWDc", + "tfjmPSbI" + ], + "size": 123406, + "date_published": "2025-09-07T22:23:54.073974Z" + } + ] + }, { "pakku_id": "BWNwDytzaLav0dBZ", "pakku_links": [ @@ -1690,6 +1735,67 @@ } ] }, + { + "pakku_id": "TvjmH4lYoLSNblxB", + "type": "MOD", + "side": "BOTH", + "slug": { + "curseforge": "ecologics", + "modrinth": "ecologics" + }, + "name": { + "curseforge": "Ecologics", + "modrinth": "Ecologics" + }, + "id": { + "curseforge": "570463", + "modrinth": "NCKpPR0Z" + }, + "files": [ + { + "type": "curseforge", + "file_name": "ecologics-forge-1.20.1-2.2.2.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/6733/908/ecologics-forge-1.20.1-2.2.2.jar", + "id": "6733908", + "parent_id": "570463", + "hashes": { + "sha1": "709fba5e3fc727944b66e2d1a556cff6fc5d591e", + "md5": "c01743d2beaa3129af16c335a83c877e" + }, + "required_dependencies": [], + "size": 1809159, + "date_published": "2025-07-05T17:03:51.620Z" + }, + { + "type": "modrinth", + "file_name": "ecologics-forge-1.20.1-2.2.2.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://cdn.modrinth.com/data/NCKpPR0Z/versions/cUQnkGgj/ecologics-forge-1.20.1-2.2.2.jar", + "id": "cUQnkGgj", + "parent_id": "NCKpPR0Z", + "hashes": { + "sha512": "9339d69bacaea6706287a941ff9fdb983244d3ce96091b43ec6e1f5b735ddda3b764ead9fc095fe16e668a016271aba504de85120f6780c79d019670a4e3a0b8", + "sha1": "709fba5e3fc727944b66e2d1a556cff6fc5d591e" + }, + "required_dependencies": [], + "size": 1809159, + "date_published": "2025-07-05T17:07:10.340689Z" + } + ] + }, { "pakku_id": "eL2hTLJZxgWPQnmS", "type": "MOD", From 01170e97d469e743bf84e705192bdaf2df5b48d9 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 01:29:23 +0800 Subject: [PATCH 03/32] feat: add ignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index a76edb8..23d9336 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ usercache.json emi.json modernfix/ saves/ +resourcepacks/ +shaderpacks/ From 2f5d99fab90ac7ae7ee51e0ee0570a8a5859e126 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 11:09:36 +0800 Subject: [PATCH 04/32] feat: todo and mod tweaks --- edits.md | 19 ++++++ pakku-lock.json | 169 +++++++++++++++++++++++++++++++++++------------- 2 files changed, 143 insertions(+), 45 deletions(-) create mode 100644 edits.md diff --git a/edits.md b/edits.md new file mode 100644 index 0000000..be17719 --- /dev/null +++ b/edits.md @@ -0,0 +1,19 @@ +# Edits + +## 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 + +- [ ] 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? + +- [ ] fan, reaper use quartz +- [ ] haunting obsidian -> crying obsidian +- [ ] diamond armor requires brass crafter +- [ ] crying obsidian + glowstone dust -> dimension tears don't need blaze diff --git a/pakku-lock.json b/pakku-lock.json index 315c640..c1b9091 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -2371,51 +2371,6 @@ } ] }, - { - "pakku_id": "6YNBIZ6cKKHmCt5i", - "pakku_links": [ - "JgzCtF1NHsa2NLSo" - ], - "type": "MOD", - "side": "CLIENT", - "slug": { - "modrinth": "gui-compass" - }, - "name": { - "modrinth": "GUI Compass" - }, - "id": { - "modrinth": "ZORMkttv" - }, - "files": [ - { - "type": "modrinth", - "file_name": "guicompass-1.20.1-4.9.jar", - "mc_versions": [ - "1.20.1" - ], - "loaders": [ - "fabric", - "forge", - "neoforge", - "quilt" - ], - "release_type": "release", - "url": "https://cdn.modrinth.com/data/ZORMkttv/versions/9DiaGkWm/guicompass-1.20.1-4.9.jar", - "id": "9DiaGkWm", - "parent_id": "ZORMkttv", - "hashes": { - "sha512": "4f24b965d8fee065de0550a92e1fd8f11670306265bef749083dfac5709ed7eca60a673b87fa508b02d6339f93cec54838297bc98cd90f59b6f2b69c6439fbac", - "sha1": "abbf51dd4a2f368517c17da4e990567746419d94" - }, - "required_dependencies": [ - "e0M1UDsY" - ], - "size": 34661, - "date_published": "2025-02-23T10:39:52.605071Z" - } - ] - }, { "pakku_id": "0k1sBNE2t5VaaWEI", "type": "MOD", @@ -2499,6 +2454,67 @@ } ] }, + { + "pakku_id": "jJMgxKZGqKNk6ATf", + "type": "MOD", + "side": "BOTH", + "slug": { + "curseforge": "gliders", + "modrinth": "gliders" + }, + "name": { + "curseforge": "Gliders", + "modrinth": "Gliders" + }, + "id": { + "curseforge": "828331", + "modrinth": "XiC6HzoU" + }, + "files": [ + { + "type": "curseforge", + "file_name": "gliders-forge-1.1.7.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/6517/195/gliders-forge-1.1.7.jar", + "id": "6517195", + "parent_id": "828331", + "hashes": { + "sha1": "b04dd3c921dedea97c5fe2de3dc07096d71defdc", + "md5": "fa32e93cf26dda761fcf9c02a6656374" + }, + "required_dependencies": [], + "size": 745083, + "date_published": "2025-05-10T20:36:17.027Z" + }, + { + "type": "modrinth", + "file_name": "gliders-forge-1.1.7.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://cdn.modrinth.com/data/XiC6HzoU/versions/XtIYEB1p/gliders-forge-1.1.7.jar", + "id": "XtIYEB1p", + "parent_id": "XiC6HzoU", + "hashes": { + "sha512": "a0c63486c7d7dd703e352bc6bc4e91615e94166303f606812eee1cb18f28ff6e66d9848773334b3dc38826b458787528987e0f0574ee8f6d544bdf9ec7055f66", + "sha1": "b04dd3c921dedea97c5fe2de3dc07096d71defdc" + }, + "required_dependencies": [], + "size": 745083, + "date_published": "2025-05-10T20:36:19.664078Z" + } + ] + }, { "pakku_id": "YMiSH9Bzjh1wXwtg", "type": "MOD", @@ -3747,6 +3763,69 @@ } ] }, + { + "pakku_id": "vjHRspr95lQuVFdo", + "type": "MOD", + "side": "BOTH", + "slug": { + "curseforge": "potion-cauldron", + "modrinth": "potion-cauldron" + }, + "name": { + "curseforge": "Potion Cauldron", + "modrinth": "Potion Cauldron" + }, + "id": { + "curseforge": "911826", + "modrinth": "yTSyrZpM" + }, + "files": [ + { + "type": "curseforge", + "file_name": "potion-cauldron-forge-1.0.1+mc1.20.jar", + "mc_versions": [ + "1.20.1", + "1.20" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/4946/77/potion-cauldron-forge-1.0.1+mc1.20.jar", + "id": "4946077", + "parent_id": "911826", + "hashes": { + "sha1": "fd85b61a9e1149d42e23b750514f20a58639347b", + "md5": "1dcdc31f42f184879197d31e66a988da" + }, + "required_dependencies": [], + "size": 115195, + "date_published": "2023-12-10T14:26:42.047Z" + }, + { + "type": "modrinth", + "file_name": "potion-cauldron-forge-1.0.1+mc1.20.jar", + "mc_versions": [ + "1.20", + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://cdn.modrinth.com/data/yTSyrZpM/versions/bIagB5v4/potion-cauldron-forge-1.0.1+mc1.20.jar", + "id": "bIagB5v4", + "parent_id": "yTSyrZpM", + "hashes": { + "sha512": "d88633f5309c36cf46bcd9b6bdb6bc17fcaee34efafe518a9d2a19026a5df5dd5b916515f08f379f188bd185886da2fd77dd6d556e30b07edd6b8bcb175ada94", + "sha1": "fd85b61a9e1149d42e23b750514f20a58639347b" + }, + "required_dependencies": [], + "size": 115195, + "date_published": "2023-12-10T14:17:58.639065Z" + } + ] + }, { "pakku_id": "K3hLdnX1Uz0LGCYC", "type": "MOD", From 520a7afff0be79e5bf47038dcbc596b96108ea6a Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 11:19:08 +0800 Subject: [PATCH 05/32] refactor: remove galosphere --- pakku-lock.json | 83 ------------------------------------------------- 1 file changed, 83 deletions(-) diff --git a/pakku-lock.json b/pakku-lock.json index c1b9091..e261b3e 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -2371,89 +2371,6 @@ } ] }, - { - "pakku_id": "0k1sBNE2t5VaaWEI", - "type": "MOD", - "side": "BOTH", - "slug": { - "modrinth": "galosphere" - }, - "name": { - "modrinth": "Galosphere" - }, - "id": { - "modrinth": "Kn7xyQ1v" - }, - "files": [ - { - "type": "modrinth", - "file_name": "Galosphere-1.20.1-1.4.1-Forge.jar", - "mc_versions": [ - "1.20.1" - ], - "loaders": [ - "forge" - ], - "release_type": "release", - "url": "https://cdn.modrinth.com/data/Kn7xyQ1v/versions/JCd7hBd9/Galosphere-1.20.1-1.4.1-Forge.jar", - "id": "JCd7hBd9", - "parent_id": "Kn7xyQ1v", - "hashes": { - "sha512": "b8da969941750d8e6aad849400e0cb313cdcefc03385c77c1514d2569eb7e05f03c59f277527ad8ccb4005e3b3d9a4c93cd789466f9ee018cbdc9f3ff9a45118", - "sha1": "0b21651dc768383bcd4b6cc417335b4c43d208b3" - }, - "required_dependencies": [], - "size": 34909449, - "date_published": "2023-12-26T06:47:13.499556Z" - } - ] - }, - { - "pakku_id": "W1vNN5qx5aDNSOpD", - "pakku_links": [ - "S9F3abE5OrkiBcOS", - "0k1sBNE2t5VaaWEI" - ], - "type": "MOD", - "side": "BOTH", - "slug": { - "modrinth": "galosphere-spelunkery-compat" - }, - "name": { - "modrinth": "Galosphere - Spelunkery Compat" - }, - "id": { - "modrinth": "ibiMtU5c" - }, - "files": [ - { - "type": "modrinth", - "file_name": "Compat_Galosphere-Spelunkery.jar", - "mc_versions": [ - "1.18.2", - "1.19.2", - "1.20.1" - ], - "loaders": [ - "forge" - ], - "release_type": "release", - "url": "https://cdn.modrinth.com/data/ibiMtU5c/versions/c8wPlbUP/Compat_Galosphere-Spelunkery.jar", - "id": "c8wPlbUP", - "parent_id": "ibiMtU5c", - "hashes": { - "sha512": "59ab0abc3970b579ac4e838bd26710b3df371859230225af3afb3fd697ddb540ca0e3ffb4012a4bc4fdbb0a5f7d9c4ad67a513ec2e6ea93ea992981a25af5b81", - "sha1": "9569acbf1d214e535ce9fcbeec24eaf4ff573744" - }, - "required_dependencies": [ - "krskFMfA", - "Kn7xyQ1v" - ], - "size": 99501, - "date_published": "2025-08-22T18:50:57.257640Z" - } - ] - }, { "pakku_id": "jJMgxKZGqKNk6ATf", "type": "MOD", From 10ec129d379083ae333e2e5c18c9da4d81b20acf Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 11:33:56 +0800 Subject: [PATCH 06/32] feat: configure map atlas --- .../config/map_atlases-client.toml | 125 ++++++++++++++++++ .../config/map_atlases-common.toml | 46 +++++++ 2 files changed, 171 insertions(+) create mode 100644 configureddefaults/config/map_atlases-client.toml create mode 100644 configureddefaults/config/map_atlases-common.toml diff --git a/configureddefaults/config/map_atlases-client.toml b/configureddefaults/config/map_atlases-client.toml new file mode 100644 index 0000000..0608a43 --- /dev/null +++ b/configureddefaults/config/map_atlases-client.toml @@ -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 + diff --git a/configureddefaults/config/map_atlases-common.toml b/configureddefaults/config/map_atlases-common.toml new file mode 100644 index 0000000..881bdca --- /dev/null +++ b/configureddefaults/config/map_atlases-common.toml @@ -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 + From f2c2bfd7cd3881fcdbb6f4de7d4d48899f9c3f2f Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 11:34:04 +0800 Subject: [PATCH 07/32] feat: default configs --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 23d9336..0e8e3b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.log *.log.gz config/ +!configureddefaults/config/ options.txt mods/ usernamecache.json From 984db8eaf55c807cef5916e3892ffc20d348c199 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 11:36:51 +0800 Subject: [PATCH 08/32] feat: js --- configureddefaults/README.md | 12 ++ edits.md | 5 +- pakku-lock.json | 238 +++++++++++++++++++++++++++++++++++ 3 files changed, 252 insertions(+), 3 deletions(-) create mode 100644 configureddefaults/README.md diff --git a/configureddefaults/README.md b/configureddefaults/README.md new file mode 100644 index 0000000..5ca012d --- /dev/null +++ b/configureddefaults/README.md @@ -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`. diff --git a/edits.md b/edits.md index be17719..7dc0297 100644 --- a/edits.md +++ b/edits.md @@ -2,9 +2,8 @@ ## 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 diff --git a/pakku-lock.json b/pakku-lock.json index e261b3e..d13630d 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -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", @@ -2798,6 +2861,77 @@ } ] }, + { + "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": "tsuM36PA8DvFbeOx", "pakku_links": [ @@ -3743,6 +3877,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 +3957,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": [ From 80f23fe7d3992263a9280efc0cf13dd652952c0a Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 11:43:11 +0800 Subject: [PATCH 09/32] feat: kubejs basics --- .gitignore | 6 ++++++ kubejs/README.txt | 15 +++++++++++++++ kubejs/client_scripts/jsconfig.json | 20 ++++++++++++++++++++ kubejs/server_scripts/jsconfig.json | 20 ++++++++++++++++++++ kubejs/startup_scripts/jsconfig.json | 20 ++++++++++++++++++++ 5 files changed, 81 insertions(+) create mode 100644 kubejs/README.txt create mode 100644 kubejs/client_scripts/jsconfig.json create mode 100644 kubejs/server_scripts/jsconfig.json create mode 100644 kubejs/startup_scripts/jsconfig.json diff --git a/.gitignore b/.gitignore index 0e8e3b5..86bfa5b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,9 @@ modernfix/ saves/ resourcepacks/ shaderpacks/ + +# kubejs dev shit +.probe +.vscode +rhino.local.properties +local diff --git a/kubejs/README.txt b/kubejs/README.txt new file mode 100644 index 0000000..5cf0fdf --- /dev/null +++ b/kubejs/README.txt @@ -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 \ No newline at end of file diff --git a/kubejs/client_scripts/jsconfig.json b/kubejs/client_scripts/jsconfig.json new file mode 100644 index 0000000..0203d61 --- /dev/null +++ b/kubejs/client_scripts/jsconfig.json @@ -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 + ] +} \ No newline at end of file diff --git a/kubejs/server_scripts/jsconfig.json b/kubejs/server_scripts/jsconfig.json new file mode 100644 index 0000000..ace5557 --- /dev/null +++ b/kubejs/server_scripts/jsconfig.json @@ -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 + ] +} \ No newline at end of file diff --git a/kubejs/startup_scripts/jsconfig.json b/kubejs/startup_scripts/jsconfig.json new file mode 100644 index 0000000..a97546a --- /dev/null +++ b/kubejs/startup_scripts/jsconfig.json @@ -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 + ] +} \ No newline at end of file From 5b9a34a4d4f6c136aeb69e14462615cbcba55a0b Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 12:47:34 +0800 Subject: [PATCH 10/32] feat: armor, create machine, map recipes --- edits.md | 11 ++--- kubejs/server_scripts/src/armor_recipes.js | 17 ++++++++ .../src/create_machine_recipes.js | 41 ++++++++++++++++++ kubejs/server_scripts/src/map_recipes.js | 43 +++++++++++++++++++ 4 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 kubejs/server_scripts/src/armor_recipes.js create mode 100644 kubejs/server_scripts/src/create_machine_recipes.js create mode 100644 kubejs/server_scripts/src/map_recipes.js diff --git a/edits.md b/edits.md index 7dc0297..7f291ae 100644 --- a/edits.md +++ b/edits.md @@ -5,14 +5,15 @@ - [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 +- [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 - [ ] flax: make more ropes than straws maybe? -- [ ] fan, reaper use quartz +- [x] fan, reaper use quartz -> replace shaft with, like, rose - [ ] haunting obsidian -> crying obsidian - [ ] diamond armor requires brass crafter +- [ ] drill/cutter requires brass - [ ] crying obsidian + glowstone dust -> dimension tears don't need blaze diff --git a/kubejs/server_scripts/src/armor_recipes.js b/kubejs/server_scripts/src/armor_recipes.js new file mode 100644 index 0000000..9c5d022 --- /dev/null +++ b/kubejs/server_scripts/src/armor_recipes.js @@ -0,0 +1,17 @@ +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' + ); + } +}); \ No newline at end of file diff --git a/kubejs/server_scripts/src/create_machine_recipes.js b/kubejs/server_scripts/src/create_machine_recipes.js new file mode 100644 index 0000000..2e8975d --- /dev/null +++ b/kubejs/server_scripts/src/create_machine_recipes.js @@ -0,0 +1,41 @@ +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: 'create:shaft', + // C: 'create:andesite_casing', + // } + // ); +}); diff --git a/kubejs/server_scripts/src/map_recipes.js b/kubejs/server_scripts/src/map_recipes.js new file mode 100644 index 0000000..a3c67ed --- /dev/null +++ b/kubejs/server_scripts/src/map_recipes.js @@ -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' + ] + ); +}); From 7737fc5200fa732d7a198dbbe5e0d83c7027bf34 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 13:07:11 +0800 Subject: [PATCH 11/32] feat: rope --- edits.md | 4 ++-- kubejs/server_scripts/src/rope_recipes.js | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 kubejs/server_scripts/src/rope_recipes.js diff --git a/edits.md b/edits.md index 7f291ae..dd338a7 100644 --- a/edits.md +++ b/edits.md @@ -9,8 +9,8 @@ - [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 -- [ ] flax: make more ropes than straws maybe? +- [-] rope: prefer farmer's rope over supplementaries +- [x] flax: make more ropes than straws maybe? - [x] fan, reaper use quartz -> replace shaft with, like, rose - [ ] haunting obsidian -> crying obsidian diff --git a/kubejs/server_scripts/src/rope_recipes.js b/kubejs/server_scripts/src/rope_recipes.js new file mode 100644 index 0000000..b60c80d --- /dev/null +++ b/kubejs/server_scripts/src/rope_recipes.js @@ -0,0 +1,14 @@ +ServerEvents.recipes(event => { + event.remove({output:'supplementaries:rope'}); + event.shaped( + '8x farmersdelight:rope', + [ + ' A ', + ' A ', + ' A ' + ], + { + A: 'supplementaries:flax' + } + ); +}); \ No newline at end of file From 12290d73f4b85d745b8304782472f75308dedef1 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 13:12:07 +0800 Subject: [PATCH 12/32] feat: kubejs extensions --- pakku-lock.json | 175 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) diff --git a/pakku-lock.json b/pakku-lock.json index d13630d..d983128 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -2932,6 +2932,113 @@ } ] }, + { + "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": [ @@ -3612,6 +3719,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", From 814ca75ebb0c426e4bb952a17e3ea8200b895619 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 13:26:40 +0800 Subject: [PATCH 13/32] feat: more progression --- kubejs/server_scripts/src/armor_recipes.js | 32 +++++++++++++- .../{rope_recipes.js => compat_recipes.js} | 2 + .../src/create_machine_recipes.js | 43 +++++++++++++------ 3 files changed, 62 insertions(+), 15 deletions(-) rename kubejs/server_scripts/src/{rope_recipes.js => compat_recipes.js} (82%) diff --git a/kubejs/server_scripts/src/armor_recipes.js b/kubejs/server_scripts/src/armor_recipes.js index 9c5d022..f9aca10 100644 --- a/kubejs/server_scripts/src/armor_recipes.js +++ b/kubejs/server_scripts/src/armor_recipes.js @@ -14,4 +14,34 @@ 'create:golden_sheet' ); } -}); \ No newline at end of file + + // 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, + } + ); +} \ No newline at end of file diff --git a/kubejs/server_scripts/src/rope_recipes.js b/kubejs/server_scripts/src/compat_recipes.js similarity index 82% rename from kubejs/server_scripts/src/rope_recipes.js rename to kubejs/server_scripts/src/compat_recipes.js index b60c80d..c474f43 100644 --- a/kubejs/server_scripts/src/rope_recipes.js +++ b/kubejs/server_scripts/src/compat_recipes.js @@ -11,4 +11,6 @@ A: 'supplementaries:flax' } ); + + event.remove({output:'spelunkery:depth_gauge'}); }); \ No newline at end of file diff --git a/kubejs/server_scripts/src/create_machine_recipes.js b/kubejs/server_scripts/src/create_machine_recipes.js index 2e8975d..b321c53 100644 --- a/kubejs/server_scripts/src/create_machine_recipes.js +++ b/kubejs/server_scripts/src/create_machine_recipes.js @@ -24,18 +24,33 @@ ); // 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: 'create:shaft', - // C: 'create:andesite_casing', - // } - // ); + 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', + } + ); }); From 95cb58297701c5732cc038d9033ac5a6e4a54fcd Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 13:51:37 +0800 Subject: [PATCH 14/32] feat: the obsidian & tears stuff --- edits.md | 8 ++++---- kubejs/server_scripts/src/fluid_recipes.js | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 kubejs/server_scripts/src/fluid_recipes.js diff --git a/edits.md b/edits.md index dd338a7..e807e6b 100644 --- a/edits.md +++ b/edits.md @@ -13,7 +13,7 @@ - [x] flax: make more ropes than straws maybe? - [x] fan, reaper use quartz -> replace shaft with, like, rose -- [ ] haunting obsidian -> crying obsidian -- [ ] diamond armor requires brass crafter -- [ ] drill/cutter requires brass -- [ ] crying obsidian + glowstone dust -> dimension tears don't need blaze +- [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 diff --git a/kubejs/server_scripts/src/fluid_recipes.js b/kubejs/server_scripts/src/fluid_recipes.js new file mode 100644 index 0000000..6999ba8 --- /dev/null +++ b/kubejs/server_scripts/src/fluid_recipes.js @@ -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' + ] + ); +}); From 0d7b06d542c02bce2eda70dc8230e57d90ccac50 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 17:37:38 +0800 Subject: [PATCH 15/32] feat: on trades --- edits.md | 44 ++++++++ kubejs/server_scripts/src/custom_trades.js | 117 +++++++++++++++++++++ pakku-lock.json | 38 +++++++ 3 files changed, 199 insertions(+) create mode 100644 kubejs/server_scripts/src/custom_trades.js diff --git a/edits.md b/edits.md index e807e6b..115e60a 100644 --- a/edits.md +++ b/edits.md @@ -17,3 +17,47 @@ - [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 +- \ No newline at end of file diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js new file mode 100644 index 0000000..793f2c9 --- /dev/null +++ b/kubejs/server_scripts/src/custom_trades.js @@ -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); + // } + } +}); \ No newline at end of file diff --git a/pakku-lock.json b/pakku-lock.json index d983128..79fc252 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -1671,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", From 29fe7de4dda06102cf3110e424740aac272512f4 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 21:23:02 +0800 Subject: [PATCH 16/32] feat: more on trades --- kubejs/server_scripts/src/custom_trades.js | 267 +++++++++++++++------ 1 file changed, 193 insertions(+), 74 deletions(-) diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js index 793f2c9..b9eb3c9 100644 --- a/kubejs/server_scripts/src/custom_trades.js +++ b/kubejs/server_scripts/src/custom_trades.js @@ -1,4 +1,107 @@ -const food_list = [ +const { $RandomSource } = require("packages/net/minecraft/util/$RandomSource"); + +// level 5 just eat feast for 5 emeralds +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', +]; + +// level 4 helps you with block collection +const deco_list = [ + '32x minecraft:diorite', + '32x minecraft:granite', + '32x minecraft:andesite', + '32x minecraft:stone', + '32x minecraft:mossy_cobblestone', + '32x minecraft:tuff', + '32x minecraft:dirt', + '32x minecraft:gravel', + '32x minecraft:sand', + '32x minecraft:mud', + '32x minecraft:mud_bricks', + '32x minecraft:stone_bricks', + '32x minecraft:cobbled_deepslate', +]; + +// level 3 sells enchantment books for random gem +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'], +}; + +// level 2 villagers sell consumables for 2 emerald +const consumables = { + // chainmail / gold armor pieces + armorer: [ + 'chainmail_helmet', 'chainmail_chestplate', 'chainmail_leggings', 'chainmail_boots', + 'golden_helmet', 'golden_chestplate', 'golden_leggings', 'golden_boots' + ], + // raw meat, bones, leather + butcher: ['3x beef', '3x porkchop', '3x mutton', '3x environmental:vension', '4x chicken', + '4x environmental:duck', '6x rabbit', '5x bone'], + // explorer maps + cartographer: [], + // torches, saltpeter, lanterns, salt, sulfur, spider eyes, rotten flesh + cleric: ['32x torch', '16x lantern', '16x spelunkery:salt', '16x spelunkery:saltpeter'], + // bonemeal, seed, hoe, organic_compost + farmer: ['6x bone_meal', '2x farmersdelight:organic_compost', '24x farmersdelight:straw', '18x supplementaries:flax'], + // fish bones, leech, worm, fishing rod, treasure boxes + fisherman: ['2x aquaculture:fish_bones', '3x aquaculture:leech', '5x aquaculture:worm', '8x aquaculture:box', + '5x aquaculture:lockbox', '2x aquaculture:treasure_chest'], + // various potion arrows, bows, crossbows + fletcher: ['bow', 'bow', 'bow', 'crossbow', 'crowssbow'], + // leather armor, bedrolls + leatherworker: ['leather_helmet', 'leather_chestplate', 'leather_leggings', 'leather_boots'], + // various dyes + librarian: ['5x black_dye', '5x blue_dye', '5x brown_dye', '5x cyan_dye', + '5x gray_dye', '5x green_dye', '5x light_blue_dye', '5x light_gray_dye', + '5x lime_dye', '5x magenta_dye', '5x orange_dye', '5x pink_dye', + '5x purple_dye', '5x red_dye', '5x yellow_dye', '5x white_dye'], + // brick, concrete, terracotta + mason: ['12x brick', '12x supplementaries:ash_brick', '12x terracotta', '24x concrete'], + // wool, eggs, milk, honey, slime ball + shepherd: ['3x white_wool', '8x environmental:duck_egg', '8x autumnity:turkey_egg', '4x environmental:yak_hair'], + // shovel, pick + toolsmith: ['iron_shovel', 'iron_pickaxe', 'golden_shovel', 'golden_pickaxe'], + // sword, axe + weaponsmith: ['iron_sword', 'iron_axe', 'golden_sword', 'golden_axe'], + // rice, spaghetti, dough, crust + 'chefsdelight:delightchef': ['8x farmersdelight:rice', '10x farmersdelight:raw_pasta', '10x farmersdelight:crust', '16x sugar'], + // cut raw meat + 'chefsdelight:delightcook': ['16x bowl', '16x glass_bottle', '1x bucket', '8x farmersdelight:minced_beef', '8x farmersdelight:bacon'], + // planks + 'sawmill:carpenter': ['32x oak_planks', '32x spruce_planks', '32x birch_planks', '32x jungle_planks', '32x pine_planks', '32x bamboo_planks', + '32x cherry_planks'], +}; + +const enchant_consumables = { + armorer: 1, + fletcher: 1, + leatherworker: 2, + toolsmith: 3, + weaponsmith: 2 +}; + +// level 1 villagers buy food for 1 emerald +const food_list = [ '8x minecraft:apple', '8x minecraft:beetroot', '8x minecraft:baked_potato', @@ -26,92 +129,108 @@ '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'], -} +/** + * @param {string[]} list + * @param {$RandomSource} random + * @returns {string} + */ function roll(list, random){ - return list[Math.floor(random.next() * list.length)]; + return list[Math.floor(random.nextFloat() * list.length)]; } +/** + * @param {string[]} ids + * @param {string[]} enchant_pool + * @param {number} enchant_rolls + * @param {$RandomSource} random + * @param {boolean} damage + */ +function genEnchanted(ids, enchant_pool, enchant_rolls, random, damage ){ + const id = roll(ids, random); + const item = Item.of(id); + + if(damage) { + const dmg = Math.floor(item.maxDamage * (0.2 + 0.1 * random.nextFloat())); + item.setDamageValue(dmg); + } + + /** @type {Record} */ + const enchantments = {}; + + for(let i = 0; i < enchant_rolls; i ++){ + const enchant = roll(enchant_pool, random); + enchantments[enchant] = (enchantments[enchant] || 0) + 1; + } + + for(const [enchant, level] of Object.entries(enchantments)){ + item.enchant(enchant, level); + } + + return item; +} + +const gems = [ + 'diamond', + '2x gold_ingot', + '3x caverns_and_chasms:spinel', + '4x spelunkery:cinnabar', + '5x lapis_lazuli', + '6x amethyst_shard', +]; + 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) => { + const profName = prof.name(); + // 1 level 5 trade + event.addCustomTrade(prof, 5, (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); - // } + // 2 for the rest + for(let i = 0; i < 2; i ++) { + // level 4 + 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); + }); + // level 3 + event.addCustomTrade(prof, 3, (offer, entity, random) => { + const rolls = 1 + (enchant_consumables[profName] || 0); + offer.setFirstInput(roll(gems, random)); + offer.setSecondInput('8x emerald'); + offer.setOutput(genEnchanted(['enchanted_book'], enchantment_list[profName], rolls, random, false)); + offer.setMaxUses(1); + offer.setVillagerExperience(1); + offer.setPriceMultiplier(1); + }); + // level 2 + event.addCustomTrade(prof, 2, (offer, entity, random) => { + const rolls = enchant_consumables[profName] || 0; + offer.setFirstInput('2x emerald'); + if(rolls > 0) offer.setOutput(genEnchanted(consumables[profName], enchantment_list[profName], rolls, random, true)); + else offer.setOutput(roll(consumables[profName], random)); + offer.setMaxUses(1); + offer.setVillagerExperience(1); + offer.setPriceMultiplier(1); + }); + // level 1 + event.addCustomTrade(prof, 1, (offer, entity, random) => { + offer.setFirstInput(roll(food_list, random)); + offer.setOutput('1x emerald'); + offer.setMaxUses(1); + offer.setVillagerExperience(5); + offer.setPriceMultiplier(1); + }); + } } -}); \ No newline at end of file +}); From 1f76541b84039305d34da7e98755f811d42bbdf2 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 21:29:50 +0800 Subject: [PATCH 17/32] fix: trade profession name --- kubejs/server_scripts/src/custom_trades.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js index b9eb3c9..6685d7b 100644 --- a/kubejs/server_scripts/src/custom_trades.js +++ b/kubejs/server_scripts/src/custom_trades.js @@ -183,8 +183,9 @@ MoreJSEvents.villagerTrades((event) => { event.removeVanillaTrades(); event.removeModdedTrades(); const professions = VillagerUtils.getProfessions(); + let profName = ''; for(const prof of professions){ - const profName = prof.name(); + profName = prof.getName(); // 1 level 5 trade event.addCustomTrade(prof, 5, (offer, entity, random) => { offer.setFirstInput(roll(feast_list, random)); From 72fccde0173c3c9390325cc06d8bdc094d13b3f3 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 21:39:13 +0800 Subject: [PATCH 18/32] fix: more --- kubejs/server_scripts/src/custom_trades.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js index 6685d7b..c234c59 100644 --- a/kubejs/server_scripts/src/custom_trades.js +++ b/kubejs/server_scripts/src/custom_trades.js @@ -136,6 +136,7 @@ const food_list = [ * @returns {string} */ function roll(list, random){ + if (list == null) throw new Error("list not valid..."); return list[Math.floor(random.nextFloat() * list.length)]; } @@ -184,8 +185,16 @@ MoreJSEvents.villagerTrades((event) => { event.removeModdedTrades(); const professions = VillagerUtils.getProfessions(); let profName = ''; - for(const prof of professions){ - profName = prof.getName(); + let rolls = 0; + let enchantments = null; + let staples = null; + for(const prof of professions) { + profName = prof.name(); + rolls = enchant_consumables[profName] || 0; + enchantments = enchantment_list[profName]; + staples = consumables[profName]; + if(!enchantments) throw new Error("No enchantments for " + profName); + if(!staples) throw new Error("No staples for " + profName); // 1 level 5 trade event.addCustomTrade(prof, 5, (offer, entity, random) => { offer.setFirstInput(roll(feast_list, random)); @@ -206,20 +215,18 @@ MoreJSEvents.villagerTrades((event) => { }); // level 3 event.addCustomTrade(prof, 3, (offer, entity, random) => { - const rolls = 1 + (enchant_consumables[profName] || 0); offer.setFirstInput(roll(gems, random)); offer.setSecondInput('8x emerald'); - offer.setOutput(genEnchanted(['enchanted_book'], enchantment_list[profName], rolls, random, false)); + offer.setOutput(genEnchanted(['enchanted_book'], enchantments, rolls+1, random, false)); offer.setMaxUses(1); offer.setVillagerExperience(1); offer.setPriceMultiplier(1); }); // level 2 event.addCustomTrade(prof, 2, (offer, entity, random) => { - const rolls = enchant_consumables[profName] || 0; offer.setFirstInput('2x emerald'); - if(rolls > 0) offer.setOutput(genEnchanted(consumables[profName], enchantment_list[profName], rolls, random, true)); - else offer.setOutput(roll(consumables[profName], random)); + if(rolls > 0) offer.setOutput(genEnchanted(staples, enchantments, rolls, random, true)); + else offer.setOutput(roll(staples, random)); offer.setMaxUses(1); offer.setVillagerExperience(1); offer.setPriceMultiplier(1); From dfd0f54ef417aa4c2e45c9c94c328029832b4aa1 Mon Sep 17 00:00:00 2001 From: hypercross Date: Sun, 30 Nov 2025 21:51:08 +0800 Subject: [PATCH 19/32] feat: fix --- kubejs/server_scripts/src/custom_trades.js | 29 ++++++++++------------ 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js index c234c59..d5d7fbb 100644 --- a/kubejs/server_scripts/src/custom_trades.js +++ b/kubejs/server_scripts/src/custom_trades.js @@ -42,9 +42,9 @@ const enchantment_list = { 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'], + delightchef: ['flame', 'fire_aspect'], + delightcook: ['flame', 'fire_aspect'], + carpenter: ['knockback', 'fortune'], }; // level 2 villagers sell consumables for 2 emerald @@ -84,11 +84,11 @@ const consumables = { // sword, axe weaponsmith: ['iron_sword', 'iron_axe', 'golden_sword', 'golden_axe'], // rice, spaghetti, dough, crust - 'chefsdelight:delightchef': ['8x farmersdelight:rice', '10x farmersdelight:raw_pasta', '10x farmersdelight:crust', '16x sugar'], + delightchef: ['8x farmersdelight:rice', '10x farmersdelight:raw_pasta', '10x farmersdelight:crust', '16x sugar'], // cut raw meat - 'chefsdelight:delightcook': ['16x bowl', '16x glass_bottle', '1x bucket', '8x farmersdelight:minced_beef', '8x farmersdelight:bacon'], + delightcook: ['16x bowl', '16x glass_bottle', '1x bucket', '8x farmersdelight:minced_beef', '8x farmersdelight:bacon'], // planks - 'sawmill:carpenter': ['32x oak_planks', '32x spruce_planks', '32x birch_planks', '32x jungle_planks', '32x pine_planks', '32x bamboo_planks', + carpenter: ['32x oak_planks', '32x spruce_planks', '32x birch_planks', '32x jungle_planks', '32x pine_planks', '32x bamboo_planks', '32x cherry_planks'], }; @@ -184,15 +184,12 @@ MoreJSEvents.villagerTrades((event) => { event.removeVanillaTrades(); event.removeModdedTrades(); const professions = VillagerUtils.getProfessions(); - let profName = ''; - let rolls = 0; - let enchantments = null; - let staples = null; - for(const prof of professions) { - profName = prof.name(); - rolls = enchant_consumables[profName] || 0; - enchantments = enchantment_list[profName]; - staples = consumables[profName]; + professions.forEach(prof => { + const profName = prof.name(); + if(profName === 'nitwit') return; + const rolls = enchant_consumables[profName] || 0; + const enchantments = enchantment_list[profName]; + const staples = consumables[profName]; if(!enchantments) throw new Error("No enchantments for " + profName); if(!staples) throw new Error("No staples for " + profName); // 1 level 5 trade @@ -240,5 +237,5 @@ MoreJSEvents.villagerTrades((event) => { offer.setPriceMultiplier(1); }); } - } + }); }); From fd8d29da3baa4f2576e363030a7e23b506c5a739 Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 08:57:34 +0800 Subject: [PATCH 20/32] feat: add sfx & vfx --- pakku-lock.json | 106 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/pakku-lock.json b/pakku-lock.json index 79fc252..d8e9bc4 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -4354,6 +4354,43 @@ } ] }, + { + "pakku_id": "Rvlt5eg7pyyR99Zh", + "type": "MOD", + "side": "CLIENT", + "slug": { + "modrinth": "sound-physics-remastered" + }, + "name": { + "modrinth": "Sound Physics Remastered" + }, + "id": { + "modrinth": "qyVF9oeo" + }, + "files": [ + { + "type": "modrinth", + "file_name": "sound-physics-remastered-forge-1.20.1-1.5.1.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "alpha", + "url": "https://cdn.modrinth.com/data/qyVF9oeo/versions/x0sJ9PeR/sound-physics-remastered-forge-1.20.1-1.5.1.jar", + "id": "x0sJ9PeR", + "parent_id": "qyVF9oeo", + "hashes": { + "sha512": "5509a7b51ec1d57aae2af0a0200bda474539fcfe28303f3ff0158ba95b8e7a88ae023d8a9bd97d4626a6a8ce809506e19cdcb05b76e8be5bf8a0450c5d6a46b1", + "sha1": "944b4673bcab118f411d050b2cd6b693262bb664" + }, + "required_dependencies": [], + "size": 206984, + "date_published": "2025-09-25T14:25:25.304739Z" + } + ] + }, { "pakku_id": "yANW1yV5Q5t4pM4M", "type": "MOD", @@ -4521,6 +4558,75 @@ } ] }, + { + "pakku_id": "PIR4FG2NYA0KQ8hV", + "pakku_links": [ + "FIgFrzEfA7vo3IaV" + ], + "type": "MOD", + "side": "CLIENT", + "slug": { + "curseforge": "subtle-effects", + "modrinth": "subtle-effects" + }, + "name": { + "curseforge": "Subtle Effects", + "modrinth": "Subtle Effects" + }, + "id": { + "curseforge": "1023913", + "modrinth": "4q8UOK1d" + }, + "redistributable": false, + "files": [ + { + "type": "curseforge", + "file_name": "SubtleEffects-forge-1.20.1-1.13.1.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/7139/104/SubtleEffects-forge-1.20.1-1.13.1.jar", + "id": "7139104", + "parent_id": "1023913", + "hashes": { + "sha1": "b481cf019821beaa27ab2797e600c50f142ea77c", + "md5": "d2ad78f772021d92a8737d4fd5c7e84e" + }, + "required_dependencies": [ + "1005914" + ], + "size": 3366021, + "date_published": "2025-10-22T23:15:30.500Z" + }, + { + "type": "modrinth", + "file_name": "SubtleEffects-forge-1.20.1-1.13.1.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://cdn.modrinth.com/data/4q8UOK1d/versions/y1lCS0Hd/SubtleEffects-forge-1.20.1-1.13.1.jar", + "id": "y1lCS0Hd", + "parent_id": "4q8UOK1d", + "hashes": { + "sha512": "4b48ad967314ad3be6ba0277bf7ed201e2c410266bf5253d216ee90885c61b04940bc09d2d9f4510630328a89ead5387d16f39a89c7cae0febc4beed8a2d8d7d", + "sha1": "b481cf019821beaa27ab2797e600c50f142ea77c" + }, + "required_dependencies": [ + "hYykXjDp" + ], + "size": 3366021, + "date_published": "2025-10-22T23:23:26.418679Z" + } + ] + }, { "pakku_id": "ekZtVegxB1qLr5Rw", "pakku_links": [ From 431f0d1841bbc25e8ebeedf403ed23f0518f8233 Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 09:40:57 +0800 Subject: [PATCH 21/32] feat: mod config --- .../config/bettermineshafts-forge-1_20.toml | 105 ++++++++++++++++++ configureddefaults/config/via_romana.json | 35 ++++++ modconfig.md | 25 +++++ 3 files changed, 165 insertions(+) create mode 100644 configureddefaults/config/bettermineshafts-forge-1_20.toml create mode 100644 configureddefaults/config/via_romana.json create mode 100644 modconfig.md diff --git a/configureddefaults/config/bettermineshafts-forge-1_20.toml b/configureddefaults/config/bettermineshafts-forge-1_20.toml new file mode 100644 index 0000000..c1027a1 --- /dev/null +++ b/configureddefaults/config/bettermineshafts-forge-1_20.toml @@ -0,0 +1,105 @@ +["YUNG's Better Mineshafts"] + # Whether or not vanilla mineshafts should be disabled. + # Default: true + "Disable Vanilla Mineshafts" = true + # The lowest a mineshaft can spawn. + # Default: -55 + "Minimum y-coordinate" = -55 + # The highest a mineshaft can spawn. + # Default: 30 + # + "Maximum y-coordinate" = 30 + + ########################################################################################################### + ## Ore deposit settings. + ########################################################################################################### + ["YUNG's Better Mineshafts"."Ore Deposits"] + "Enable Ore Deposits" = true + # Chance of an ore deposit being cobblestone only. + # Default: 50 + #Range: 0 ~ 100 + "Cobble Spawn Chance (Empty Deposit)" = 0 + # Chance of an ore deposit containing coal. + # Default: 20 + #Range: 0 ~ 100 + "Coal Spawn Chance" = 30 + # Chance of an ore deposit containing iron. + # Default: 9 + #Range: 0 ~ 100 + "Iron Spawn Chance" = 20 + # Chance of an ore deposit containing redstone. + # Default: 7 + #Range: 0 ~ 100 + "Redstone Spawn Chance" = 15 + # Chance of an ore deposit containing gold. + # Default: 7 + #Range: 0 ~ 100 + "Gold Spawn Chance" = 15 + # Chance of an ore deposit containing lapis lazuli. + # Default: 3 + #Range: 0 ~ 100 + "Lapis Spawn Chance" = 15 + # Chance of an ore deposit containing emerald. + # Default: 3 + #Range: 0 ~ 100 + "Emerald Spawn Chance" = 4 + # Chance of an ore deposit containing diamond. + # Default: 1 + #Range: 0 ~ 100 + "Diamond Spawn Chance" = 1 + + ########################################################################################################### + ## Spawn rates for various mineshaft parts and decorations. + ########################################################################################################### + ["YUNG's Better Mineshafts"."Spawn Rates & More"] + # The spawn rate for lanterns in the main shaft. + # Default: .0067 + #Range: 0.0 ~ 1.0 + "Lantern Spawn Rate" = 0.0067 + # The spawn rate for torches in small shafts. + # Default: .02 + #Range: 0.0 ~ 1.0 + "Torch Spawn Rate" = 0.02 + # The spawn rate for workstation side rooms along the main shaft. + # Default: .025 + #Range: 0.0 ~ 1.0 + "Workstation Spawn Rate" = 0.025 + # The spawn rate for workstation cellars below workstations along the main shaft. + # Default: .25 + #Range: 0.0 ~ 1.0 + "Workstation Cellar Spawn Rate" = 0.25 + # The spawn rate for smaller tunnels that generate along the main shaft. + # Default: .07 + #Range: 0.0 ~ 1.0 + "Small Shaft Spawn Rate" = 0.07 + # The spawn rate for cobwebs. + # Default: .15 + #Range: 0.0 ~ 1.0 + "Cobweb Spawn Rate" = 0.15 + # The spawn rate for minecarts holding chests in small shafts. + # Default: .00125 + #Range: 0.0 ~ 1.0 + "Small Shaft Chest Minecart Spawn Rate" = 0.00125 + # The spawn rate for minecarts holding TNT in small shafts. + # Default: .0025 + #Range: 0.0 ~ 1.0 + "Small Shaft TNT Minecart Spawn Rate" = 0.0025 + # The spawn rate for minecarts holding chests in the main shaft. + # Default: .01 + #Range: 0.0 ~ 1.0 + "Main Shaft Chest Minecart Spawn Rate" = 0.01 + # The spawn rate for minecarts holding TNT in the main shaft. + # Default: .0025 + #Range: 0.0 ~ 1.0 + "Main Shaft TNT Minecart Spawn Rate" = 0.0025 + # Percent chance of an Abandoned Miners' Outpost to spawn at the end of a small mineshaft tunnel. + # Default: 2 + #Range: 0 ~ 100 + "Abandoned Miners' Outpost Spawn Chance" = 2 + # The number of "pieces" (e.g. straight, turn, ladder, intersection, etc.) in a single small shaft. + # This determines the overall length of small shafts. + # Default: 9 + # + #Range: 0 ~ 1000 + "Small Shaft Piece Chain Length" = 9 + diff --git a/configureddefaults/config/via_romana.json b/configureddefaults/config/via_romana.json new file mode 100644 index 0000000..dec4c8e --- /dev/null +++ b/configureddefaults/config/via_romana.json @@ -0,0 +1,35 @@ +{ + "infrastructure_check_radius": 2, + "path_quality_threshold": 0.3, + "node_distance_minimum": 4, + "node_distance_maximum": 8, + "node_utility_distance": 3, + "path_block_ids": ["minecraft:dirt_path", "minecraft:water"], + "path_block_tags": [], + "path_block_strings": [], + "block_string_blacklist": [ + "diagonalwalls:", + "diagonalfences:", + "diagonalwindows:" + ], + "invalid_dimensions": ["nether", "end"], + "invalid_entities": [], + "warp_block_ids": ["via_romana:warp_block"], + "warp_block_tags": ["minecraft:all_signs"], + "travel_fatigue_cooldown": 0, + "fog_of_war_distance": 10, + "spline_animation_time": 2.0, + "maximum_map_dimension": 512, + "map_refresh_interval": 10, + "map_refresh_threshold": 10, + "map_save_interval": 5, + "biomeColor": [], + "use_biome_fallback_for_lowres": true, + "enable_surveyor_landmark": false, + "enable_surveyor_landmark_coloring": false, + "invalid_block_overlay_opacity": 0.4, + "biome_map_opacity": 0.3, + "node_vignette_opacity": 1.0, + "enable_teleport_particles": false, + "logging_enum": "NONE" +} diff --git a/modconfig.md b/modconfig.md new file mode 100644 index 0000000..50d1751 --- /dev/null +++ b/modconfig.md @@ -0,0 +1,25 @@ +# mod configs + +## options + +- disable oculus keys. +- disable puzzle lib cycle keys. +- disable treechop config key. +- enable resource packs. + +## map atlases + +- don't rotate follow player. +- shows hud in inventory. +- accepts paper for maps. + +## via romana + +- allow water charting. +- allow dirt path. +- disallow everything else. +- disallow nether and end. + +## better mineshafts + +- increased ore spawn rate to 100%. From c94e3724988c6ca78a7a68d0dc22c300e40d27aa Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 09:53:33 +0800 Subject: [PATCH 22/32] feat: mod config --- configureddefaults/config/emitrades.json5 | 4 +++ .../config/healingcampfire.json5 | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 configureddefaults/config/emitrades.json5 create mode 100644 configureddefaults/config/healingcampfire.json5 diff --git a/configureddefaults/config/emitrades.json5 b/configureddefaults/config/emitrades.json5 new file mode 100644 index 0000000..b804957 --- /dev/null +++ b/configureddefaults/config/emitrades.json5 @@ -0,0 +1,4 @@ +{ + // Declares whether the villager entity model is shown in the recipe UI. + enable3DVillagerModelInRecipes: false +} diff --git a/configureddefaults/config/healingcampfire.json5 b/configureddefaults/config/healingcampfire.json5 new file mode 100644 index 0000000..55efb04 --- /dev/null +++ b/configureddefaults/config/healingcampfire.json5 @@ -0,0 +1,26 @@ +{ + // How often in ticks the mod checks for campfires around the player. 1 second = 20 ticks, so by default every 2 seconds. + // min: 1, max: 1200 + "checkForCampfireDelayInTicks": 40, + // The radius around the campfire in blocks where players receive the regeneration effect. + // min: 1, max: 64 + "healingRadius": 8, + // The duration of the regeneration effect which the campfire applies. + // min: 1, max: 600 + "effectDurationSeconds": 30, + // The level of regeneration which the campfire applies, by default 1. + // min: 1, max: 50 + "regenerationLevel": 1, + // When enabled, the campfire heals passive mobs around where the radius is half the width of a bounding box. + "healPassiveMobs": true, + // When enabled, hides the particles from the regeneration effect around the campfire. + "hideEffectParticles": true, + // When enabled, the campfire only has an effect when the block is lit up. + "campfireMustBeLit": true, + // When enabled, the campfire only has an effect when the block is signalling. + "campfireMustBeSignalling": false, + // When enabled, the mod will work with normal campfires. + "enableEffectForNormalCampfires": true, + // When enabled, the mod will work with soul campfires. + "enableEffectForSoulCampfires": true +} From 910c0b67b5213c35a7286ef90d7e78080493edfe Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 10:14:39 +0800 Subject: [PATCH 23/32] feat: more mod config --- .../config/spelunkery-common.toml | 58 ++ .../config/supplementaries-common.toml | 680 ++++++++++++++++++ modconfig.md | 20 + 3 files changed, 758 insertions(+) create mode 100644 configureddefaults/config/spelunkery-common.toml create mode 100644 configureddefaults/config/supplementaries-common.toml diff --git a/configureddefaults/config/spelunkery-common.toml b/configureddefaults/config/spelunkery-common.toml new file mode 100644 index 0000000..874323e --- /dev/null +++ b/configureddefaults/config/spelunkery-common.toml @@ -0,0 +1,58 @@ +[misc] + spelunkery_creative_tab = true + #Range: 0 ~ 128 + diamond_grindstone_deplete_chance = 64 + #Range: 0 ~ 128 + parachute_opening_delay = 10 + enable_mores = true + enable_rough_gems = true + enable_raw_nuggets = true + +[utilities] + #Range: 1 ~ 128 + hammer_and_chisel_charge_time = 30 + #Range: 1 ~ 256 + tuning_fork_range = 128 + #Range: 1 ~ 256 + echo_fork_range = 16 + #Range: 1 ~ 72000 + echo_fork_cooldown = 600 + #Range: 1 ~ 72000 + echo_glow_duration = 1200 + sculk_drops_with_shears = true + #Range: 1 ~ 32 + magnet_range = 8 + #Range: 1 ~ 512 + magnetite_range = 64 + +[nether_portals_and_portal_fluid] + flint_and_steel_portal_lighting = true + portal_destruction_crying_obsidian = true + portal_creation_sound = true + portal_destruction_sound = true + portal_fluid_drinking = true + instant_teleportation = true + piglins_give_crying_obsidian = true + dimensional_tears_from_crying_obsidian = false + dimensional_tears_from_respawn_anchor = true + portal_fluid_ocean = true + end_ocean_bucketable = false + +[slimes] + slimes_spawn_in_all_caves = true + create_slimes_in_cauldrons = true + slimes_friendly_to_players_with_regeneration = true + slimes_always_friendly = false + #Range: 1 ~ 2400 + slime_eating_cooldown = 150 + enable_slime_growth = true + #Range: 1 ~ 127 + slime_growth_chance = 10 + #Range: 1 ~ 127 + slime_growth_max = 5 + +[worldgen] + stone_stripe_features = true + sporophytes_in_lush_caves = true + dark_forest_portabellas = true + diff --git a/configureddefaults/config/supplementaries-common.toml b/configureddefaults/config/supplementaries-common.toml new file mode 100644 index 0000000..f4e1f39 --- /dev/null +++ b/configureddefaults/config/supplementaries-common.toml @@ -0,0 +1,680 @@ +[redstone] + wind_vane = true + clock_block = true + redstone_illuminator = true + crank = true + cog_block = true + gold_door = true + gold_trapdoor = true + lock_block = true + relayer = true + + [redstone.speaker_block] + enabled = true + #Enable/disable speaker block narrator mode + narrator_enabled = true + #Max text + #Range: 0 ~ 10000 + max_text = 32 + #Maximum block range + #Range: 0 ~ 100000000 + range = 64 + + [redstone.bellows] + enabled = true + #bellows pushes air following this equation: + #air=(sin(2PI*ticks/period)<0), with period = base_period-(redstone_power-1)*power_scaling + #represents base period at 1 power + #Range: 1 ~ 512 + base_period = 78 + #entities with velocity greater than this won't be pushed + #Range: 0.0 ~ 16.0 + power_scaling = 2.0 + #velocity increase uses this equation: + #vel = base_vel*((range-entity_distance)/range) with base_vel = base_velocity_scaling/period + #note that the block will push further the faster it's pulsing + #Range: 0.0 ~ 64.0 + base_velocity_scaling = 5.0 + #maximum range + #note that it will still only keep alive the two fire blocks closer to it + #Range: 0 ~ 16 + range = 5 + + [redstone.spring_launcher] + enabled = true + #spring launcher launch speed + #Range: 0.0 ~ 16.0 + velocity = 1.5 + #fall distance needed to trigger the automatic spring launch + #Range: 0 ~ 512 + fall_height_required = 5 + + [redstone.enderman_head] + enabled = true + drop_head = true + #Time to increase 1 power level when being looked at + #Range: 0 ~ 10000 + ticks_to_increase_power = 15 + #do enderman heads work when looked from any side? + work_from_any_side = false + + [redstone.turn_table] + enabled = true + #can rotate entities standing on it? + rotate_entities = true + #Allows turn table to shuffle containers content when rotated over horizontal axis + shuffle_containers = true + + [redstone.pulley_block] + enabled = true + #Chance for a new mineshaft elevator piece to spawn + #Range: 0.0 ~ 1.0 + mineshaft_elevator = 0.035 + + [redstone.dispenser_minecart] + enabled = true + #Makes projectiles shot from dispenser minecart retain the minecart velocity and be shot at an angle when the minecart is on a rail slope + adjust_projectile_angle = true + + [redstone.faucet] + enabled = true + #Turn off to prevent faucets from dropping items + spill_items = true + #Allows faucets to fill entities inventories + fill_entities_below = false + + [redstone.crystal_display] + enabled = true + #Allows chaining 2 crystal displays, letting one power the other to its left IF its own power exceeds 10. Given power will be its own divided by 10. Note that to work the decimal display must NOT have power directly behind it. Doing so will override the behavior to non chaining mode + chaining = true + +[functional] + fodder = true + hourglass = true + + [functional.rope] + #Allows ropes to be supported & attached to solid block sides + block_side_attachment = true + #Makes sliding down ropes as fast as free falling, still negating fall damage + slide_on_fall = true + #In case you want to disable supplementaries ropes you can specify here another mod rope and they will be used for rope arrows and in mineshafts instead + rope_override = "farmersdelight:rope" + #Enables horizontal placement of ropes. Disabling will make ropes always non solid + horizontal_ropes = true + #Use this config to turn allow supplementaries to replace all items tagged as #supplementaies:ropes with supplementaries own rope or turn them to air instead. This is applied to all loot tables (chests and drops) + #Allowed Values: REPLACE, NONE, REMOVE + replace_in_loot_tables = "NONE" + + [functional.jar] + enabled = true + #Jar liquid capacity: leave at 12 for pixel accuracy + #Range: 0 ~ 1024 + capacity = 12 + #Allow right click to instantly eat or drink food or potions inside a placed jar. + #Disable if you think this ability is op (honey for example). Cookies are excluded + drink_from_jar = false + #Allows the player to directly drink from jar items + drink_from_jar_item = false + #Dynamically allows all small mobs inside jars depending on their hitbox size + jar_auto_detect = false + #Allow Jars to capture small mobs + jar_capture = true + #Allow Jars to hold cookies + jar_cookies = true + #Allow Jars to hold liquids from bottles, buckets and bowls + jar_liquids = true + + [functional.cage] + enabled = true + #Allows all entities to be captured by cages and jars. Not meant for survival + allow_all_mobs = false + #Allows all baby mobs to be captured by cages + cage_allow_all_babies = false + #Dynamically allows all small mobs inside cages depending on their hitbox size + cage_auto_detect = false + #Makes it so all (hostile) mobs captured by cages and jars will be set to persistent so they won't despawn when released + persistent_mobs = false + #Health percentage under which mobs will be allowed to be captured by cages and jars. Leave at 100 to accept any health level + #Range: 1 ~ 100 + health_threshold = 100 + #When on, if a mob is tameable, it will only be capturable when tamed. + require_taming = true + + [functional.safe] + enabled = true + #Makes safes only breakable by their owner or by a player in creative + prevent_breaking = false + #Make safes simpler so they do not require keys: + #they will be bound to the first person that opens one and only that person will be able to interact with them + simple_safes = false + + [functional.sack] + enabled = true + #Penalize the player with slowness effect when carrying too many sacks + sack_penalty = false + #Maximum number of sacks after which the overencumbered effect will be applied. Each multiple of this number will increase the effect strength by one + #Range: 0 ~ 50 + sack_increment = 2 + #How many slots should a sack have + #Range: 1 ~ 27 + slots = 9 + + [functional.bamboo_spikes] + enabled = true + tipped_spikes = true + #Allows entities killed by spikes to drop loot as if they were killed by a player + player_loot = false + #Alternative mode for bamboo spikes. Allows only harmful effects to be applied on them and they obtain infinite durability + only_allow_harmful_effects = true + #Populate the creative inventory with all tipped spikes variations + populate_creative_tab = true + + [functional.urn] + enabled = true + #Chance for an urn to spawn a critter from the urn_spawn tag + #Range: 0.0 ~ 1.0 + critter_spawn_chance = 0.01 + cave_urns = true + + [functional.soap] + enabled = true + #Dyed Bock types that cannot be cleaned with soap + clean_blacklist = ["minecraft:glazed_terracotta", "botania:mystical_flower", "mna:chimerite_crystal", "botania:floating_flower", ",minecraft:mushroom", "botania:mushroom", "botania:tall_mystical_flower", "botania:petal_block", "morered:network_cable", "xycraft_world:glowing_shiny_aurey_block", "xycraft_world:shiny_aurey_block", "xycraft_world:rgb_lamp", "xycraft_world:glowing_rgb_viewer", "xycraft_world:glowing_matte_rgb_block", "xycraft_world:rgb_lamp_pole"] + + #This is a map of special blocks that can be cleaned with soap + [functional.soap.special_blocks] + "quark:dirty_glass_pane" = "minecraft:glass_pane" + "quark:dirty_glass" = "minecraft:glass" + "#alexscaves:cave_paintings" = "alexscaves:smooth_limestone" + + [functional.cannon] + enabled = true + #Makes TNT-like block shot from a cannon explode on impact + #Allowed Values: IGNITE, IGNITE_ON_IMPACT, NONE + explode_tnt = "IGNITE" + #Cannon fire power multiplier + #Range: 0.0 ~ 5.0 + fire_power = 0.6 + #Time for a cannon to fire a projectile after it has been lit up + #Range: 0 ~ 500 + fuse_time = 40 + #Time for a cannon to be able to fire again after it has been fired + #Range: 0 ~ 500 + cooldown = 60 + music_disc_heave_ho = true + + [functional.cannon.cannonball] + enabled = true + #Cannonball power scaling. Higher values will make cannonballs have more energy. Reminder that the damage and breaking power of a cannonball is proportional to its energy (speed squared) times this constant + #Range: 0.0 ~ 100.0 + power_scaling = 3.5 + #Radius of the 'explosion' when a cannonball hits a block. Set to 0 to disable + #Range: 0.0 ~ 10.0 + break_radius = 1.1 + + [functional.present] + enabled = true + trapped_present = true + + [functional.flax] + enabled = true + wild_flax = true + + [functional.lumisene] + enabled = true + #Gives the flammable effext also when merely stepping on lumisene. Turning this off if you think effects are not something that should be applied like that and just by drinking it. + #Range: 0 ~ 10000 + flammable_from_lumisene_block_duration = 50 + + [functional.lumisene.lumisene_bottle] + #Enables lumisene bottles and the flammable effect and lumisene bottles. Turn off if you think its over the top and doesnt match with existing effects + enabled = true + #Duration of the flammable effect when you drink a lumisene bottle + #Range: 0 ~ 10000 + flammable_duration = 300 + #Duration of the glowing effect when you drink a lumisene bottle + #Range: 0 ~ 10000 + glowing_duration = 200 + +[building] + lapis_bricks = true + deepslate_lamp = true + end_stone_lamp = true + blackstone_lamp = true + stone_lamp = true + stone_tile = true + blackstone_tile = true + bunting = true + sconce = true + sconce_lever = true + pancake = true + checker_block = true + raked_gravel = true + feather_block = true + statue = true + doormat = true + flint_block = true + fine_wood = true + candle_holder = true + fire_pit = true + wicker_fence = true + + [building.blackboard] + enabled = true + #Enable to draw directly on a blackboard using any dye. Gui still only works in black and white + colored_blackboard = false + #Interaction mode for blackboards + #Allowed Values: BOTH, GUI, MANUAL + interaction_mode = "BOTH" + + [building.gravel_bricks] + enabled = true + + [building.slidy_block] + enabled = true + #Slidy block speed + #Range: 0.0 ~ 1.0 + speed = 0.125 + + [building.timber_frame] + enabled = true + #Allow placing a timber frame directly on a block by holding shift + swap_on_shift = false + #Allows axes to remove a framed block leaving the contained block intact + axes_strip = true + #Replace a timber frame with wattle and daub block when daub is placed in it + replace_daub = true + + [building.iron_gate] + enabled = true + #Allows two iron gates to be opened simultaneously when on top of the other + double_opening = true + #Makes iron (ang gold) gates behave like their door counterpart so for example iron gates will only be openable by redstone + door-like_gates = false + + [building.item_shelf] + enabled = true + #Makes item shelves climbable + climbable_shelves = false + + [building.sugar_cube] + enabled = true + #Makes sugar cubes dissolve in rain + dissolve_in_rain = true + #Duration in seconts of speed effect garanted to horses that eat a sugar cube + #Range: 0 ~ 1000 + horse_speed_duration = 10 + + [building.planter] + enabled = true + #Makes so saplings that grow in a planter will break it turning into rooted dirt + broken_by_sapling = false + #When Farmers Delight is on planter will also act like rich soil and use it in its recipe + rich_soil_planter = true + + [building.notice_board] + enabled = true + #Allows notice boards to accept and display any item, not just maps and books + allow_any_item = false + #Enables a GUI for the block. Not needed as the block just holds one item which you can place by clicking on it + gui = true + + [building.pedestal] + enabled = true + #If enabled end crystals placed on a pedestals will provide an enchantment power bonus equivalent to 3 bookshelves + #Range: 0.0 ~ 100.0 + crystal_enchanting = 3.0 + + [building.ash] + enabled = true + #Burnable blocks will have a chance to create ash layers when burned. Greater this number the greater the chance will be + #Range: 0.0 ~ 1.0 + ash_from_fire_chance = 1.0 + #Burning mobs will drop ash when they die + ash_from_burning_mobs = true + #Allows rain to wash away ash layers overtime + rain_wash_ash = true + #Use a datapack to tweak rarity + basalt_ash = true + + [building.flag] + enabled = true + #Allows right/left clicking on a stick to lower/raise a flag attached to it + stick_pole = true + #Maximum allowed pole length + #Range: 0 ~ 256 + pole_length = 16 + + [building.goblet] + enabled = true + #Allows drinking from goblets + allow_drinking = true + + [building.globe] + enabled = true + sepia_globe = true + + [building.sign_post] + enabled = true + + [building.sign_post.way_sign] + #Entirely disables them from spawning + enabled = true + #With this option road signs will display the distance to the structure that they are pointing to + show_distance_text = true + + [building.daub] + enabled = true + wattle_and_daub = true + + [building.ash_bricks] + enabled = true + + [building.hat_stand] + enabled = true + #Allow all items to go on hat stand + unrestricted = false + + [building.awning] + enabled = true + #Allows having slanted awnings. Disabled if you feel its cursed. + slant = true + #Allows entities to fall through awnings, when shifting. + shift_through = true + #Bouncing angle of slanted awnings + #Range: 0.0 ~ 90.0 + angle = 69.44395478041653 + + [building.flower_box] + enabled = true + #Makes so flower boxes can only contain one tall flower item per block + simple_mode = true + + [building.netherite_doors] + door = true + trapdoor = true + +[tools] + candy = true + stasis = true + altimeter = true + confetti_popper = true + + [tools.quiver] + enabled = true + #Allows using a quiver without being slowed down + use_without_slow = true + #Arrow stacks that can fit inside a quiver. Requires reboot + #Range: 1 ~ 9 + slots = 6 + #Increase this number to alter the probability for a Skeleton with quiver to spawn. + #Range: 0.0 ~ 1.0 + quiver_skeleton_spawn_chance = 0.025 + #If the chance for a skeleton to spawn with a quiver will be affected by local difficulty. If true, you wont ever see them on easy and very rarely on normal. Similar logic to equipment + quiver_skeleton_spawn_affected_by_local_difficulty = true + #Allows quiver to only be used when in offhand or in curio slot + only_works_in_curio = false + #Arrows you pickup will try to go in a quiver if available provided it has some arrow of the same type + quiver_pickup = true + + [tools.lunch_basket] + enabled = true + #Allows lunch baskets to be placed on the ground + placeable = true + #Arrow stacks that can fit inside a lunch basket. Requires reboot + #Range: 1 ~ 9 + slots = 6 + + [tools.slice_map] + enabled = true + #Multiplier that will be applied by slice maps to lower their range compared to normal maps + #Range: 0.0 ~ 1.0 + range_multiplier = 0.25 + + [tools.bubble_blower] + enabled = true + #Amount of soap consumed per bubble block placed + #Range: 1 ~ 25 + stasis_cost = 5 + + [tools.bubble_blower.bubble_block] + #Max lifetime of bubble blocks. Set to 10000 to have it infinite + #Range: 1 ~ 10000 + lifetime = 1200 + #Can bubble break when touched on? + break_when_touched = true + #If true feather falling prevents breaking bubbles when stepping on them + feather_falling_prevents_breaking = true + + [tools.wrench] + enabled = true + #Allows wrenches to bypass a block interaction action prioritizing their own when on said hand + #Allowed Values: MAIN_HAND, OFF_HAND, BOTH, NONE + bypass_when_on = "MAIN_HAND" + + [tools.rope_arrow] + enabled = true + #Max number of rope items allowed to be stored inside a rope arrow + #Range: 1 ~ 256 + capacity = 32 + #Makes rope arrows exclusive to crossbows + exclusive_to_crossbows = false + + [tools.flute] + enabled = true + #Radius in which an unbound flute will search pets + #Range: 0 ~ 500 + unbound_radius = 64 + #Max distance at which a bound flute will allow a pet to teleport + #Range: 0 ~ 500 + bound_distance = 64 + + [tools.bomb] + enabled = true + #Bomb explosion radius (damage depends on this) + #Range: 0.1 ~ 10.0 + explosion_radius = 2.0 + #Do bombs break blocks like tnt? + #Allowed Values: ALL, WEAK, NONE + break_blocks = "WEAK" + #Put here any number other than 0 to have your bombs explode after a certain amount of ticks instead than on contact + #Range: 0 ~ 100000 + bomb_fuse = 0 + #Enable bomb item cooldown + cooldown = true + + [tools.bomb.blue_bomb] + #Bomb explosion radius (damage depends on this) + #Range: 0.1 ~ 10.0 + explosion_radius = 5.15 + #Do bombs break blocks like tnt? + #Allowed Values: ALL, WEAK, NONE + break_blocks = "WEAK" + + [tools.slingshot] + enabled = true + #Slingshot range multiplier. Affect the initial projectile speed + #Range: 0.0 ~ 5.0 + range_multiplier = 1.0 + #Time in ticks to fully charge a slingshot + #Range: 0 ~ 100 + charge_time = 20 + #Deceleration for the stasis projectile + #Range: 0.1 ~ 1.0 + stasis_deceleration = 0.9625 + #Allow enderman to intercept any slingshot projectile + unrestricted_enderman_intercept = true + #Allows buckets to be thrown by slingshots. Thrown buckets will place their content when they land + allow_buckets = true + #Damage that items in the 'supplementaries:slingshot_damageable' tag will deal. Scales with thrown speed. Tag is empty by default. + #Range: 0.0 ~ 100.0 + damageable_damage = 0.5 + #Allows splash potions to be thrown by slingshots + allow_splash_potions = false + #Allows bombs to be thrown by slingshots + allow_bombs = false + #Allows fire charges to be thrown by slingshots + allow_fire_charges = false + #Allows snowballs to be thrown by slingshots + allow_snowballs = false + #Allows enderpearls to be thrown by slingshots + allow_enderpearls = false + + [tools.antique_ink] + enabled = true + +#General settings +[general] + #Enable Creative Tab + creative_tab = true + #Set to false to disable custom dispenser behaviors (i.e: filling jars) if for some reason they are causing trouble + dispensers = true + #Creates a creative tab full of filled jars + jar_tab = false + #Save generated resources to disk in a 'debug' folder in your game directory. Mainly for debug purposes but can be used to generate assets in all wood types for your mods :0 + debug_save_dynamic_pack = false + #Turn this on to disable any interaction on blocks placed by other players. This affects item shelves, signs, flower pots, and boards. Useful for protected servers. Note that it will affect only blocks placed after this is turned on and such blocks will keep being protected after this option is disabled + server_protection = false + #Disable startup messages and sanity check that the mod performs to inform of possible detected crashes that might occur due to issues + sanity_checks_messages = true + #slightly increase this or decrease this number to tweak the red merchant spawn chance. Won't spawn at 0 and will spawn twice as often on 2 + #Range: 0.0 ~ 10.0 + red_merchant_spawn_multiplier = 1.0 + +#Vanilla tweaks +[tweaks] + + [tweaks.dragon_banner_pattern] + #Adds dragon banner pattern made from dragon head + enabled = true + + [tweaks.shulker_helmet] + #Allows wearing shulker shells + enabled = true + + [tweaks.golden_apple_disenchant] + enabled = true + + [tweaks.traders_open_doors] + #Allows traders to open doors (because they couldn't apparently) + enabled = true + + [tweaks.dispenser_tweaks] + #Allows dispensers to use axes on blocks to strip logs and scrape off copper oxidation and wax + axe_strip = true + #Enables shooting ender pearls with dispensers + shoot_ender_pearls = true + #Enables extracting bundles items with dispensers + extract_from_bundles = true + + [tweaks.throwable_bricks] + #Throw bricks at your foes! Might break glass blocks + enabled = true + + [tweaks.placeable_sticks] + #Allow placeable sticks + sticks = true + #Allow placeable blaze rods + blaze_rods = true + + [tweaks.placeable_gunpowder] + #Allow placeable gunpowder + enabled = true + #Number of ticks it takes for gunpowder to burn 1 stage (out of 8). Increase to slow it down + #Range: 0 ~ 20 + speed = 2 + #Age at which it spread to the next gunpowder block. Also affects speed + #Range: 0 ~ 8 + spread_age = 2 + + [tweaks.raked_gravel] + #allow gravel to be raked with a hoe + enabled = true + + [tweaks.bottle_xp] + #Allow bottling up xp by using a bottle on an enchanting table + enabled = false + #bottling health cost + #Range: 0 ~ 20 + cost = 2 + #Block that should be clicked on for bottling to work. Leave blank for enchanting table. You can put another block here from another mod if you find it more fitting + target_block = "" + + [tweaks.map_tweaks] + #Cartographers will sell 'adventurer maps' that will lead to a random vanilla structure (choosen from a thought out preset list). + #Best kept disabled if you are adding custom adventurer maps with datapack (check the wiki for more) + random_adventurer_maps = false + #Select a random structure to look for instead of iterating through all of the ones in the tag returning the closest. Turning on will make ones that have diff structures (aka all different ruined portals) show up more. On could take much more time to compute + random_adventurer_maps_select_random_structure = false + #Enables beacons, lodestones, respawn anchors, beds, conduits, portals to be displayed on maps by clicking one of them with a map + block_map_markers = true + #Shows a death marker on your map when you die. Requires a recovery compass in player inventory or similar + #Allowed Values: OFF, WITH_COMPASS, ALWAYS + death_marker = "WITH_COMPASS" + #If Quark is installed adventurer maps will be replaced by adventurer quills. These will not lag the server when generating + quill_adventurer_maps = true + #If Quark is installed replaces buried treasure and mansion maps with their equivalent quill form. This removes the lag spike they create when generating + quill_vanilla_maps = true + #Miminum search radius for quill. Used to incrase the radius of vanilla searches. For reference buried treasures are at 50 and locate is at 100 chunks + #Range: 10 ~ 600 + min_search_radius = 75 + #Makes blocks tagged as 'tinted_on_map' use their tint color. This allows for accurate biome colors for water and grass as well as other custom block that use any tint + tinted_blocks_on_maps = true + + [tweaks.placeable_books] + #Allows written books to be placed down. Requires shift clicking + written_books = true + #Allow books and enchanted books to be placed on the ground + enabled = true + #Enchantment power bonus given by normal book piles with 4 books. Piles with less books will have their respective fraction of this total. For reference a vanilla bookshelf provides 1 + #Range: 0.0 ~ 5.0 + book_power = 1.0 + #Enchantment power bonus given by normal book piles with 4 books. Piles with less books will have their respective fraction of this total. For reference a vanilla bookshelf provides 1 + #Range: 0.0 ~ 5.0 + enchanted_book_power = 1.334 + #Allow all books to be placed both vertically and horizontally + mixed_books = false + + [tweaks.zombie_horse] + #Feed a stack of rotten flesh to a skeleton horse to buff him up to a zombie horse + zombie_horse_conversion = true + #Amount of rotten flesh needed + #Range: 1 ~ 1000 + rotten_flesh = 64 + #Allows zombie horses to be ridden underwater + rideable_underwater = true + #Convert a zombie horse back by feeding it a golden carrot + zombie_horse_inverse_conversion = true + + [tweaks.noteblocks_scare] + #Noteblocks with a zombie head will scare off villagers + enabled = true + + [tweaks.bad_luck_tweaks] + #Hit a void cat, get the unluck + cat_unluck = true + #If you have unluck you are more likely to get hit by a lighting + lightning_unluck = true + + [tweaks.item_lore] + #Adds a recipe to add 'lore' strings to an item by combining it with a named nametag + enabled = true + + [tweaks.sus_recipes] + #Adds recipes to craft suspicious gravel and suspicious sand + enabled = true + + [tweaks.slimed_effect] + enabled = true + #Allow slimeballs to be thrown + throwable_slimeballs = true + #Thrown slimeballs will shortly nerf the player jump height. Disable if you don't want this effect as it can be quite powerful + #Allowed Values: NEVER, ALWAYS, NORMAL_DIFFICULTY, HARD_DIFFICULTY + hinders_jump = "NORMAL_DIFFICULTY" + #Duration of the slimed effect in ticks + #Range: 0 ~ 1000 + duration = 300 + #Chance that a slime mob will apply slimed effect on successful attack. Multiplied by the slime size + #Range: 0.0 ~ 1.0 + chance_per_slime_size = 0.15 + diff --git a/modconfig.md b/modconfig.md index 50d1751..8941905 100644 --- a/modconfig.md +++ b/modconfig.md @@ -23,3 +23,23 @@ ## better mineshafts - increased ore spawn rate to 100%. + +## emitrades + +- hide villager mob model which is bugged. + +## healingcampfire + +- cut down healing range and buff time by half (8 blocks / 30s) + +## spelunkery + +- independent creative tab +- slower chisel (I could move diamond tools to brass crafter when we have obsidian chisels...) + +## supplementaries + +- independent creative tab +- use farmers rope instead +- disable slow explorer maps generation (will do it in kubejs) +- disable sack penalty (why) From 300c590326fbdb4ff232f1c4bbce611dcbb69510 Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 10:21:09 +0800 Subject: [PATCH 24/32] todo --- edits.md | 51 ++++++--------------------------------------------- 1 file changed, 6 insertions(+), 45 deletions(-) diff --git a/edits.md b/edits.md index 115e60a..d6f09f8 100644 --- a/edits.md +++ b/edits.md @@ -2,62 +2,23 @@ ## todo -- [x] Spelunkery / Caverns n Chasms / Galosphere / Supplementaries: repeated barometers/depth gauge etc +- [x] Spelunkery / Caverns n Chasms / Supplementaries: repeated barometers/depth gauge etc - [x] Gui compass: remove or tweak since it adds depth as well - [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] rope: prefer farmer's rope over supplementaries - [x] flax: make more ropes than straws maybe? -- [x] fan, reaper use quartz -> replace shaft with, like, rose +- [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 +- [x] common villager trades +- [ ] villager explorer map trades +- [ ] move diamond tools to brass crafter as well -- [ ] 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 -- \ No newline at end of file From 6096cc95623999828613e3a18efa9d6a5cf2e5f5 Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 11:59:26 +0800 Subject: [PATCH 25/32] refactor: try to add adventure maps --- .../config/supplementaries-common.toml | 4 ++-- .../structure/adventure_map_destinations.json | 21 +++++++++++++++++++ kubejs/server_scripts/src/armor_recipes.js | 2 +- kubejs/server_scripts/src/custom_trades.js | 9 ++++---- 4 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 kubejs/data/supplementaries/tags/worldgen/structure/adventure_map_destinations.json diff --git a/configureddefaults/config/supplementaries-common.toml b/configureddefaults/config/supplementaries-common.toml index f4e1f39..1c9d40c 100644 --- a/configureddefaults/config/supplementaries-common.toml +++ b/configureddefaults/config/supplementaries-common.toml @@ -603,9 +603,9 @@ [tweaks.map_tweaks] #Cartographers will sell 'adventurer maps' that will lead to a random vanilla structure (choosen from a thought out preset list). #Best kept disabled if you are adding custom adventurer maps with datapack (check the wiki for more) - random_adventurer_maps = false + random_adventurer_maps = true #Select a random structure to look for instead of iterating through all of the ones in the tag returning the closest. Turning on will make ones that have diff structures (aka all different ruined portals) show up more. On could take much more time to compute - random_adventurer_maps_select_random_structure = false + random_adventurer_maps_select_random_structure = true #Enables beacons, lodestones, respawn anchors, beds, conduits, portals to be displayed on maps by clicking one of them with a map block_map_markers = true #Shows a death marker on your map when you die. Requires a recovery compass in player inventory or similar diff --git a/kubejs/data/supplementaries/tags/worldgen/structure/adventure_map_destinations.json b/kubejs/data/supplementaries/tags/worldgen/structure/adventure_map_destinations.json new file mode 100644 index 0000000..1b0c3d0 --- /dev/null +++ b/kubejs/data/supplementaries/tags/worldgen/structure/adventure_map_destinations.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "#minecraft:village", + "#minecraft:shipwreck", + "#minecraft:mineshaft", + "#minecraft:ocean_ruin", + "#minecraft:ruined_portal", + "#minecraft:bastion_remnant", + "#minecraft:desert_pyramid", + "#minecraft:end_city", + "#minecraft:jungle_pyramid", + "#minecraft:igloo", + "#minecraft:pillager_outpost", + "#minecraft:swamp_hut", + + "#betterdungeons:better_dungeons", + "#bettermineshafts:better_mineshafts", + "#betteroceanmonuments:better_ocean_monuments" + ] +} \ No newline at end of file diff --git a/kubejs/server_scripts/src/armor_recipes.js b/kubejs/server_scripts/src/armor_recipes.js index f9aca10..9f564bc 100644 --- a/kubejs/server_scripts/src/armor_recipes.js +++ b/kubejs/server_scripts/src/armor_recipes.js @@ -33,7 +33,7 @@ make_mechanical(event, 'minecraft:diamond_boots', 'minecraft:diamond', [ 'A A', 'A A', - ]) + ]); }); function make_mechanical(event, thing, material, shape){ event.remove({output: thing}); diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js index d5d7fbb..8ee5e8f 100644 --- a/kubejs/server_scripts/src/custom_trades.js +++ b/kubejs/server_scripts/src/custom_trades.js @@ -15,16 +15,18 @@ const deco_list = [ '32x minecraft:diorite', '32x minecraft:granite', '32x minecraft:andesite', - '32x minecraft:stone', - '32x minecraft:mossy_cobblestone', + '32x minecraft:calcite', '32x minecraft:tuff', + '32x minecraft:cobblestone', + '32x minecraft:stone', + '32x minecraft:cobbled_deepslate', + '32x minecraft:deepslate', '32x minecraft:dirt', '32x minecraft:gravel', '32x minecraft:sand', '32x minecraft:mud', '32x minecraft:mud_bricks', '32x minecraft:stone_bricks', - '32x minecraft:cobbled_deepslate', ]; // level 3 sells enchantment books for random gem @@ -182,7 +184,6 @@ const gems = [ MoreJSEvents.villagerTrades((event) => { event.removeVanillaTrades(); - event.removeModdedTrades(); const professions = VillagerUtils.getProfessions(); professions.forEach(prof => { const profName = prof.name(); From bde6d1881bbe95de599f0a5745a16735449e2d6d Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 15:01:19 +0800 Subject: [PATCH 26/32] refactor: actually manually code the maps --- kubejs/server_scripts/src/custom_trades.js | 81 +++++++++++++++++++--- 1 file changed, 73 insertions(+), 8 deletions(-) diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js index 8ee5e8f..63bca23 100644 --- a/kubejs/server_scripts/src/custom_trades.js +++ b/kubejs/server_scripts/src/custom_trades.js @@ -182,8 +182,72 @@ const gems = [ '6x amethyst_shard', ]; +/** + * explorer maps: + * - villages: not very useful, since we're already in one. could be good for biome discovery though. + * - dungeons & mineshafts: fights with chests but are optional. good candidates. + * - shipwreck / ocean_ruins / pyramids / temples / pillager_outpost: optional treasures. + * - woodland mansion & ocean monuments: important for exclusive loot. + * - ancient city: again, exclusive loot. + * - nether portal: required to get to the nether. + * + * it makes little sense to gate the maps, since structures can be stumbled upon anyway and are optional anyway. + * only two maps are created per cartographer upgrade, and you need to move them into the wild. + * so we want to tie new maps to villages, since new villages have new cartographers. + * + * let's do 3 trades + * - a village from a different biome. + * - one of woodland mansion / ocean monument / ancient city / nether portal. + * - one of dungeon / mineshaft / pyramid / temple / pillager outpost. + */ +const treasure_structures = { + '#minecraft:mineshaft': 10, + '#minecraft:pillager_outpost' : 10, + '#betterdungeons:better_dungeons': 5, +}; +const progression_structures = { + '#minecraft:ruined_portal' : 15, + '#minecraft:ancient_city' : 5, + '#minecraft:mansion' : 5, + '#betteroceanmonuments:better_ocean_monuments' : 5, +}; +const village_structures = { + 'village_desert': 1, + 'village_plains': 1, + 'village_savanna': 1, + 'village_snowy': 1, + 'village_taiga': 1, + 'mmv:village_jungle': 1, + 'mmv:village_swamp': 1, + "atmospheric:village_scrubland" : 1 +}; +/** + * @param {Record} map + */ +function make_weighted_list(map){ + const list = MoreJS.weightedList(); + for(const [key, weight] of Object.entries(map)){ + list.add(weight, key); + } + return list; +} + MoreJSEvents.villagerTrades((event) => { event.removeVanillaTrades(); + event.removeModdedTrades(); + + const villages = make_weighted_list(village_structures) + const villageTrade = VillagerUtils.createStructureMapTrade(['empty_map', '2x emerald'], villages); + event.addTrade('cartographer', 2, villageTrade); + + const treasures = make_weighted_list(treasure_structures); + const treasureTrade = VillagerUtils.createStructureMapTrade(['empty_map', '3x emerald'], treasures); + event.addTrade('cartographer', 2, treasureTrade); + + const progression = make_weighted_list(progression_structures); + const progressionTrade = VillagerUtils.createStructureMapTrade(['empty_map', '5x emerald'], progression); + event.addTrade('cartographer', 2, progressionTrade); + const professions = VillagerUtils.getProfessions(); professions.forEach(prof => { const profName = prof.name(); @@ -221,14 +285,15 @@ MoreJSEvents.villagerTrades((event) => { offer.setPriceMultiplier(1); }); // level 2 - event.addCustomTrade(prof, 2, (offer, entity, random) => { - offer.setFirstInput('2x emerald'); - if(rolls > 0) offer.setOutput(genEnchanted(staples, enchantments, rolls, random, true)); - else offer.setOutput(roll(staples, random)); - offer.setMaxUses(1); - offer.setVillagerExperience(1); - offer.setPriceMultiplier(1); - }); + if(staples.length > 0) + event.addCustomTrade(prof, 2, (offer, entity, random) => { + offer.setFirstInput('2x emerald'); + if(rolls > 0) offer.setOutput(genEnchanted(staples, enchantments, rolls, random, true)); + else offer.setOutput(roll(staples, random)); + offer.setMaxUses(1); + offer.setVillagerExperience(1); + offer.setPriceMultiplier(1); + }); // level 1 event.addCustomTrade(prof, 1, (offer, entity, random) => { offer.setFirstInput(roll(food_list, random)); From 1e436b8fd5c67788107ea9f5b439cf2ae718e6de Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 15:02:31 +0800 Subject: [PATCH 27/32] damn --- kubejs/server_scripts/src/custom_trades.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js index 63bca23..531c2e0 100644 --- a/kubejs/server_scripts/src/custom_trades.js +++ b/kubejs/server_scripts/src/custom_trades.js @@ -237,15 +237,15 @@ MoreJSEvents.villagerTrades((event) => { event.removeModdedTrades(); const villages = make_weighted_list(village_structures) - const villageTrade = VillagerUtils.createStructureMapTrade(['empty_map', '2x emerald'], villages); + const villageTrade = VillagerUtils.createStructureMapTrade(['2x emerald', 'map'], villages); event.addTrade('cartographer', 2, villageTrade); const treasures = make_weighted_list(treasure_structures); - const treasureTrade = VillagerUtils.createStructureMapTrade(['empty_map', '3x emerald'], treasures); + const treasureTrade = VillagerUtils.createStructureMapTrade(['3x emerald', 'map'], treasures); event.addTrade('cartographer', 2, treasureTrade); const progression = make_weighted_list(progression_structures); - const progressionTrade = VillagerUtils.createStructureMapTrade(['empty_map', '5x emerald'], progression); + const progressionTrade = VillagerUtils.createStructureMapTrade(['5x emerald', 'map'], progression); event.addTrade('cartographer', 2, progressionTrade); const professions = VillagerUtils.getProfessions(); From 656f468e05383ca192138897b18062b2b70db95d Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 15:08:05 +0800 Subject: [PATCH 28/32] fix: uses --- kubejs/server_scripts/src/custom_trades.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js index 531c2e0..32499f6 100644 --- a/kubejs/server_scripts/src/custom_trades.js +++ b/kubejs/server_scripts/src/custom_trades.js @@ -238,14 +238,17 @@ MoreJSEvents.villagerTrades((event) => { const villages = make_weighted_list(village_structures) const villageTrade = VillagerUtils.createStructureMapTrade(['2x emerald', 'map'], villages); + villageTrade.maxUses(1); event.addTrade('cartographer', 2, villageTrade); const treasures = make_weighted_list(treasure_structures); const treasureTrade = VillagerUtils.createStructureMapTrade(['3x emerald', 'map'], treasures); + treasureTrade.maxUses(1); event.addTrade('cartographer', 2, treasureTrade); const progression = make_weighted_list(progression_structures); const progressionTrade = VillagerUtils.createStructureMapTrade(['5x emerald', 'map'], progression); + progressionTrade.maxUses(1); event.addTrade('cartographer', 2, progressionTrade); const professions = VillagerUtils.getProfessions(); From 2d67e9e6688680043985b0588abfe0ae650c1364 Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 15:09:57 +0800 Subject: [PATCH 29/32] refactor: add nullscape & ybei --- pakku-lock.json | 113 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/pakku-lock.json b/pakku-lock.json index d8e9bc4..60e3e9a 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -3905,6 +3905,49 @@ } ] }, + { + "pakku_id": "udA1QDwH9R4cmwsu", + "type": "MOD", + "side": "SERVER", + "slug": { + "modrinth": "nullscape" + }, + "name": { + "modrinth": "Nullscape" + }, + "id": { + "modrinth": "LPjGiSO4" + }, + "files": [ + { + "type": "modrinth", + "file_name": "Nullscape_1.20_v1.2.8.zip", + "mc_versions": [ + "1.20", + "1.20.1", + "1.20.2", + "1.20.3", + "1.20.4", + "1.20.5", + "1.20.6" + ], + "loaders": [ + "datapack" + ], + "release_type": "release", + "url": "https://cdn.modrinth.com/data/LPjGiSO4/versions/ZMeTWsSm/Nullscape_1.20_v1.2.8.zip", + "id": "ZMeTWsSm", + "parent_id": "LPjGiSO4", + "hashes": { + "sha512": "e53e41a32c316ca7fb1400b8c2f484a1ebb409a3f30c6451b7a79020b88d443ecdeb523b94504f36aab821f26336a8d3d785a82d6b1318c9fe03f5f8fe89be07", + "sha1": "db7f3e0a17e0367780501a02c64f69cbe947ea37" + }, + "required_dependencies": [], + "size": 396047, + "date_published": "2024-09-26T16:59:13.935501Z" + } + ] + }, { "pakku_id": "51n1lkaUS6JM9gta", "pakku_links": [ @@ -5054,6 +5097,76 @@ } ] }, + { + "pakku_id": "KTTMcIoYk2ld3rGr", + "pakku_links": [ + "GgvU402zjjdGunQy" + ], + "type": "MOD", + "side": "SERVER", + "slug": { + "curseforge": "yungs-better-end-island", + "modrinth": "yungs-better-end-island" + }, + "name": { + "curseforge": "YUNG's Better End Island (Forge/NeoForge)", + "modrinth": "YUNG's Better End Island" + }, + "id": { + "curseforge": "901344", + "modrinth": "2BwBOmBQ" + }, + "files": [ + { + "type": "curseforge", + "file_name": "YungsBetterEndIsland-1.20-Forge-2.0.6.jar", + "mc_versions": [ + "1.20.1", + "1.20" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/5193/815/YungsBetterEndIsland-1.20-Forge-2.0.6.jar", + "id": "5193815", + "parent_id": "901344", + "hashes": { + "sha1": "4e7bf109981593061b8100bc8bf23e1c9bbcbb76", + "md5": "7f5ed661e5478668a91ea199fba75fb3" + }, + "required_dependencies": [ + "421850" + ], + "size": 387111, + "date_published": "2024-03-19T02:34:02.700Z" + }, + { + "type": "modrinth", + "file_name": "YungsBetterEndIsland-1.20-Forge-2.0.6.jar", + "mc_versions": [ + "1.20", + "1.20.1" + ], + "loaders": [ + "forge" + ], + "release_type": "release", + "url": "https://cdn.modrinth.com/data/2BwBOmBQ/versions/Izqhg3Va/YungsBetterEndIsland-1.20-Forge-2.0.6.jar", + "id": "Izqhg3Va", + "parent_id": "2BwBOmBQ", + "hashes": { + "sha512": "a51b76fc41d19276bea2ebe081b153d3be53c502ef9de93593990f8b7bf644e3e4fd4cff17477abce16692f23aff3077be1762606f10ca1058771741ad652e2e", + "sha1": "4e7bf109981593061b8100bc8bf23e1c9bbcbb76" + }, + "required_dependencies": [ + "Ua7DFN59" + ], + "size": 387111, + "date_published": "2024-03-19T02:34:06.515205Z" + } + ] + }, { "pakku_id": "2sYz1QbARcY1g5Zv", "pakku_links": [ From 968297a2f861c3bd8b374fb05d7a49fa710ef40b Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 18:32:17 +0800 Subject: [PATCH 30/32] fix: trade price multipliers --- kubejs/server_scripts/src/custom_trades.js | 16 ++++++++-------- pakku-lock.json | 17 +++++++++-------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/kubejs/server_scripts/src/custom_trades.js b/kubejs/server_scripts/src/custom_trades.js index 32499f6..eefeb7c 100644 --- a/kubejs/server_scripts/src/custom_trades.js +++ b/kubejs/server_scripts/src/custom_trades.js @@ -266,7 +266,7 @@ MoreJSEvents.villagerTrades((event) => { offer.setOutput('5x emerald'); offer.setMaxUses(1); offer.setVillagerExperience(1); - offer.setPriceMultiplier(1); + offer.setPriceMultiplier(0.2); }); // 2 for the rest for(let i = 0; i < 2; i ++) { @@ -276,16 +276,16 @@ MoreJSEvents.villagerTrades((event) => { offer.setOutput(roll(deco_list, random)); offer.setMaxUses(4); offer.setVillagerExperience(1); - offer.setPriceMultiplier(1); + offer.setPriceMultiplier(0.05); }); // level 3 event.addCustomTrade(prof, 3, (offer, entity, random) => { - offer.setFirstInput(roll(gems, random)); - offer.setSecondInput('8x emerald'); + offer.setFirstInput('8x emerald'); + offer.setSecondInput(roll(gems, random)); offer.setOutput(genEnchanted(['enchanted_book'], enchantments, rolls+1, random, false)); offer.setMaxUses(1); offer.setVillagerExperience(1); - offer.setPriceMultiplier(1); + offer.setPriceMultiplier(0.2); }); // level 2 if(staples.length > 0) @@ -295,15 +295,15 @@ MoreJSEvents.villagerTrades((event) => { else offer.setOutput(roll(staples, random)); offer.setMaxUses(1); offer.setVillagerExperience(1); - offer.setPriceMultiplier(1); + offer.setPriceMultiplier(0.05); }); // level 1 - event.addCustomTrade(prof, 1, (offer, entity, random) => { + event.addCustomTrade(prof, 1, (offer, entity, random) => { offer.setFirstInput(roll(food_list, random)); offer.setOutput('1x emerald'); offer.setMaxUses(1); offer.setVillagerExperience(5); - offer.setPriceMultiplier(1); + offer.setPriceMultiplier(0.05); }); } }); diff --git a/pakku-lock.json b/pakku-lock.json index 60e3e9a..7f135e0 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -4450,24 +4450,25 @@ "files": [ { "type": "modrinth", - "file_name": "spawn-3.2.jar", + "file_name": "spawn-3.3.jar", "mc_versions": [ "1.20.1" ], "loaders": [ - "forge" + "forge", + "neoforge" ], "release_type": "release", - "url": "https://cdn.modrinth.com/data/rex9wwpz/versions/S8LFiSXq/spawn-3.2.jar", - "id": "S8LFiSXq", + "url": "https://cdn.modrinth.com/data/rex9wwpz/versions/leymEt9o/spawn-3.3.jar", + "id": "leymEt9o", "parent_id": "rex9wwpz", "hashes": { - "sha512": "c254a3717560bd053877dc44e5cec1b3ecdcf77d6ac7c3163be2723b05e61c0be0a3cdff0c809b323a6b305b621565b0031bab8208137f66a541cfbdc8524810", - "sha1": "7ab6e4a7848743afbc9ab662331137c019ea1595" + "sha512": "52387c93b42a70dd12702f513f7e48c9c6e13baee24b549a4c61b6fc4dae6b5eb3861f0358f3bd3736cd5ff3753f18895e878d4930b0623b42d767eb4df86db7", + "sha1": "fb25c00462dc106c41e739e4e28c765867b4a73d" }, "required_dependencies": [], - "size": 27774954, - "date_published": "2025-11-27T15:39:01.100787Z" + "size": 27777409, + "date_published": "2025-11-29T17:33:19.625649Z" } ] }, From b340f675dfffbcdb4e6ea40c02c0af64d3d301ee Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 19:29:53 +0800 Subject: [PATCH 31/32] feat: add pakku credentials --- .pakku_credentials | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .pakku_credentials diff --git a/.pakku_credentials b/.pakku_credentials new file mode 100644 index 0000000..87293e9 --- /dev/null +++ b/.pakku_credentials @@ -0,0 +1,3 @@ +{ + "curseforge_api_key": "$2a$10$GYII5tOhqOIwlikNgnqnLOBDCBtL0s/J1w7a.LAYc4b07EQB3tOLu" +} \ No newline at end of file From 6cb86e4e74a0f799d8176fb9dfe5f47b7b982de7 Mon Sep 17 00:00:00 2001 From: hypercross Date: Mon, 1 Dec 2025 22:54:51 +0800 Subject: [PATCH 32/32] feat: add watut --- pakku-lock.json | 133 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/pakku-lock.json b/pakku-lock.json index 7f135e0..32bfc89 100644 --- a/pakku-lock.json +++ b/pakku-lock.json @@ -1065,6 +1065,69 @@ } ] }, + { + "pakku_id": "OkaoVg0G5SvMtcAC", + "type": "MOD", + "side": "BOTH", + "slug": { + "curseforge": "coroutil", + "modrinth": "coroutil" + }, + "name": { + "curseforge": "CoroUtil", + "modrinth": "CoroUtil" + }, + "id": { + "curseforge": "237749", + "modrinth": "rLLJ1OZM" + }, + "files": [ + { + "type": "curseforge", + "file_name": "coroutil-forge-1.20.1-1.3.7.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "neoforge", + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/5096/38/coroutil-forge-1.20.1-1.3.7.jar", + "id": "5096038", + "parent_id": "237749", + "hashes": { + "sha1": "7f5f0b62a638b6053c95919cbe8c2bea2e0c93d0", + "md5": "6fb9ccbe8c05c1da61c224d1127e9643" + }, + "required_dependencies": [], + "size": 64187, + "date_published": "2024-02-10T13:46:20.167Z" + }, + { + "type": "modrinth", + "file_name": "coroutil-forge-1.20.1-1.3.7.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge", + "neoforge" + ], + "release_type": "release", + "url": "https://cdn.modrinth.com/data/rLLJ1OZM/versions/6rPDKAT8/coroutil-forge-1.20.1-1.3.7.jar", + "id": "6rPDKAT8", + "parent_id": "rLLJ1OZM", + "hashes": { + "sha512": "37a13eaa68579dd45204ebdfa43b2909123a2e5e875a2ca51da0d0882d4c524be1e95fce4bb26db21901b7d100ad9363968814e3566d44b5afce8fb8e8088057", + "sha1": "7f5f0b62a638b6053c95919cbe8c2bea2e0c93d0" + }, + "required_dependencies": [], + "size": 64187, + "date_published": "2024-02-10T13:49:56.138975Z" + } + ] + }, { "pakku_id": "sRvyoSr2dSbDwbrQ", "type": "MOD", @@ -5017,6 +5080,76 @@ } ] }, + { + "pakku_id": "uViRNhxguQze5W1I", + "pakku_links": [ + "OkaoVg0G5SvMtcAC" + ], + "type": "MOD", + "side": "BOTH", + "slug": { + "curseforge": "what-are-they-up-to", + "modrinth": "what-are-they-up-to" + }, + "name": { + "curseforge": "What Are They Up To (Watut)", + "modrinth": "What Are They Up To (Watut)" + }, + "id": { + "curseforge": "945479", + "modrinth": "AtB5mHky" + }, + "files": [ + { + "type": "curseforge", + "file_name": "watut-forge-1.20.1-1.2.3.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "neoforge", + "forge" + ], + "release_type": "release", + "url": "https://edge.forgecdn.net/files/6315/241/watut-forge-1.20.1-1.2.3.jar", + "id": "6315241", + "parent_id": "945479", + "hashes": { + "sha1": "d376debf1f96f37dbedf56919baeb7da2dcef9ab", + "md5": "345d3ecdf94dffaa0e3ba55538c65f80" + }, + "required_dependencies": [ + "237749" + ], + "size": 435496, + "date_published": "2025-03-17T12:36:07.270Z" + }, + { + "type": "modrinth", + "file_name": "watut-forge-1.20.1-1.2.3.jar", + "mc_versions": [ + "1.20.1" + ], + "loaders": [ + "forge", + "neoforge" + ], + "release_type": "release", + "url": "https://cdn.modrinth.com/data/AtB5mHky/versions/GpiXMxvP/watut-forge-1.20.1-1.2.3.jar", + "id": "GpiXMxvP", + "parent_id": "AtB5mHky", + "hashes": { + "sha512": "80be5011a6f3a933bf87cc1815febde79e915a9fb3d2ff304bfda199ad8a09e5acb32b91dc6a56db4765209c83ca977870b11bc7dbfeb7c4efa0fda6cc370386", + "sha1": "d376debf1f96f37dbedf56919baeb7da2dcef9ab" + }, + "required_dependencies": [ + "rLLJ1OZM" + ], + "size": 435496, + "date_published": "2025-03-17T12:36:11.313441Z" + } + ] + }, { "pakku_id": "GgvU402zjjdGunQy", "type": "MOD",