Ex Deorum 1.6

This commit is contained in:
thedarkcolour 2023-10-10 10:37:04 -07:00
parent 0a69c1f6bd
commit 31a3c287f1
38 changed files with 1401 additions and 140 deletions

View File

@ -5,7 +5,7 @@ plugins {
id 'org.spongepowered.mixin' version '0.7.+'
}
version = '1.5'
version = '1.6'
group = 'thedarkcolour.exdeorum'
base {
archivesName = 'exdeorum'

View File

@ -1,3 +1,8 @@
## Ex Deorum 1.6
- Added way to obtain sky stone dust from AE2.
- Fixed End Portal not generating properly.
- Fixed missing Biomes O' Plenty recipes for the sieves, barrels, and crucibles.
## Ex Deorum 1.5
- Added Random Pottery Sherd and Random Armor Trim items to replace the bloated sand loot tables for obtaining pottery sherds and armor trims.
- Added compatibility with Biomes O' Plenty (sieves, barrels, crucibles, saplings obtainable from sifting moss like other saplings)

View File

@ -1,4 +1,4 @@
// 1.20.1 2023-09-23T17:16:17.6613223 Recipes
// 1.20.1 2023-10-10T10:32:34.2619562 Recipes
5ad481a0c376c1a1785a5d3b992064d0ec0bf3b0 data/exdeorum/advancements/recipes/food/end_cake.json
25dd027e844a72b03c95dbe5e3c3dd8c738ceb00 data/exdeorum/advancements/recipes/misc/acacia_barrel.json
376be94a64c9ca97a9ea2346547b6e617f13a815 data/exdeorum/advancements/recipes/misc/acacia_crucible.json
@ -192,11 +192,17 @@ f6a9036c1bbc4fa0cdc25ef4c851de5ddac0a4ff data/exdeorum/recipes/crook.json
f41b9a2782302d6684a89127b90f47ba432b35f1 data/exdeorum/recipes/dark_oak_barrel.json
88de5b2df3c7cbb668195ebff7d60235fa897cdf data/exdeorum/recipes/dark_oak_crucible.json
b14283dd10c79ddb507aa849a9a432266b615f19 data/exdeorum/recipes/dark_oak_sieve.json
4dd77f3c2a9995562882de58c014882b846c0e46 data/exdeorum/recipes/dead_barrel.json
1d146b95340c76f0f79202dd81fb4f29bb6d074f data/exdeorum/recipes/dead_crucible.json
49db33903b6892db0f17ce50e9a3ca78aef007ed data/exdeorum/recipes/dead_sieve.json
0558034d3940e2bd4046ad2af07c42068852dc76 data/exdeorum/recipes/diamond_hammer.json
4bb1b1df247eaa495b18df77893ac6cfaaa9477a data/exdeorum/recipes/diamond_mesh.json
8244864c8c0fb88af380c18bb593a8cb3982abbd data/exdeorum/recipes/diamond_watering_can.json
596e6fb9a4c633938b7b3c778baad53cdd9fd2ed data/exdeorum/recipes/diorite.json
04ae3d6df1f7ed4d376c3f95bc4924651a1148e8 data/exdeorum/recipes/end_cake.json
a3b9f47a73b9cbb4d908ac0b8ad90b308271c04c data/exdeorum/recipes/fir_barrel.json
7f7a034824513701aa0493267f7f8219d8fdef89 data/exdeorum/recipes/fir_crucible.json
8821d420a2f1dae54a0276cf33f94b5689eda056 data/exdeorum/recipes/fir_sieve.json
fafeef8c11df81d877166ba0d4add3823515dad3 data/exdeorum/recipes/flint_mesh.json
4adddee39d6ff6ee58dedfdeb32265a051f9a722 data/exdeorum/recipes/golden_hammer.json
a32f858ab7b6b5d5546b8474175a44a93d85f8bc data/exdeorum/recipes/golden_mesh.json
@ -227,10 +233,16 @@ b592554bc00ab20d8affdfd1627406858ac10797 data/exdeorum/recipes/hammer/sand.json
0e879c5bcf28023efdcd257d3e12e7153bd0bef7 data/exdeorum/recipes/hammer/stone_pebbles.json
3bf60837b935bd09248a84fd8f22968fc244ea46 data/exdeorum/recipes/hammer/tube_coral.json
f9654d25e05276b2bce6445e2cf7c1f2d9170124 data/exdeorum/recipes/hammer/tube_coral_fan.json
89bc76bd0dd2350b25ac8981f3597e0119dff939 data/exdeorum/recipes/hellbark_barrel.json
4c3b4daf2bed2d4ee662e2e80f4547b3f0b2a271 data/exdeorum/recipes/hellbark_crucible.json
2995ec75979bfb8b0415b8a1da7db7001b9ae433 data/exdeorum/recipes/hellbark_sieve.json
3067ccffd037b6d16ba09ae181813be6471d2050 data/exdeorum/recipes/iron_hammer.json
f046e0fa73b12cea658363a082ad0da48e21e85d data/exdeorum/recipes/iron_mesh.json
6f06b4d91979afc8000988cd20519379152a373b data/exdeorum/recipes/iron_ore.json
f4ea515ec72c867b9c0b54df162bd07c62e1a7ce data/exdeorum/recipes/iron_watering_can.json
4d7d68580f0271eea4728062fa608b87aa04570f data/exdeorum/recipes/jacaranda_barrel.json
15db77ae5c82626af0a52a96b71aef0a55754de5 data/exdeorum/recipes/jacaranda_crucible.json
f1368be282014a882ece8c28d43ea1d3f8c19ad2 data/exdeorum/recipes/jacaranda_sieve.json
332d5396af038b56047e88fcad713478e45cbd97 data/exdeorum/recipes/jungle_barrel.json
7239040d0cee42fe9077c89eaa3d768a07db0557 data/exdeorum/recipes/jungle_crucible.json
bffa756563ac5aa791f299ae6d7d042813c2614a data/exdeorum/recipes/jungle_sieve.json
@ -238,6 +250,12 @@ d24ed2178e5875da5e0a6f82b5ac9c2ece4b64ff data/exdeorum/recipes/lava_crucible/cob
0963c17c9f78907017fa0192c684f016c39f31eb data/exdeorum/recipes/lava_crucible/gravel.json
e9affa16c926fe63ca2270a81aba4e33cd0b198b data/exdeorum/recipes/lava_crucible/netherrack.json
20744c980e4a68f67acea24af617f1ddb865f9a3 data/exdeorum/recipes/lava_crucible/stone.json
eefb8d9a0b49405d1a9788425df1c9c7937458e4 data/exdeorum/recipes/magic_barrel.json
19ccb45f92da97401ef10f7def8d7b439d683910 data/exdeorum/recipes/magic_crucible.json
10c7971c338d0079d1125a7b320fe407ceabe089 data/exdeorum/recipes/magic_sieve.json
b012c1b39678d3e560365bc01a59c9a88182388e data/exdeorum/recipes/mahogany_barrel.json
49cb4e7d62855ef0b42a98c6b3b03a7b2acfe8f5 data/exdeorum/recipes/mahogany_crucible.json
6c10f7034e705ed28d9e9342e18e0675ed14d546 data/exdeorum/recipes/mahogany_sieve.json
8efa8d7c8da52d42d8e1a831004dfc080423a500 data/exdeorum/recipes/mangrove_barrel.json
95edd369ab19abd17ef56cfa2350a2dc185c7747 data/exdeorum/recipes/mangrove_crucible.json
9c38235abb08f3cdd8838c0a0efb98154dee97e3 data/exdeorum/recipes/mangrove_sieve.json
@ -259,9 +277,15 @@ ad3a4c8b0ffd433528d7b2d10b98301843ba5417 data/exdeorum/recipes/ores/osmium_tag.j
e50e0f6fb83cd233214ca62718e0c9155f29d7c1 data/exdeorum/recipes/ores/tin_tag.json
ece0731639c9063416fb0183309fdf8252d774eb data/exdeorum/recipes/ores/uranium_tag.json
56600e7db58d4c74326a2f38bc014a47ddbeb731 data/exdeorum/recipes/ores/zinc_tag.json
bbe74a530536071b2bb8e94563ae8ae426b45188 data/exdeorum/recipes/palm_barrel.json
44f3f267ac2e7de4aa22e2647e4a68736041b039 data/exdeorum/recipes/palm_crucible.json
ec53c60562bd39028e9fe497b73efdc7af562263 data/exdeorum/recipes/palm_sieve.json
fd95c29e2e4f6eb08729c3c821e8f1dad427aef8 data/exdeorum/recipes/porcelain_bucket.json
a2d4a9158c46bf81649e0a16621302cbf3754582 data/exdeorum/recipes/porcelain_clay_ball.json
53adc0da4d944ac57a437a38e14fec0f6563e9b2 data/exdeorum/recipes/porcelain_crucible.json
7e0e860075ea2ed301be1b52babac09130b4ddc5 data/exdeorum/recipes/redwood_barrel.json
586e9a05cc04d028912f40d41bcd067976005dd8 data/exdeorum/recipes/redwood_crucible.json
7c5a28c2621a975df088f28c00729f7495bcf773 data/exdeorum/recipes/redwood_sieve.json
45050ac51fb86e362cec2d35e0a03ec1e5ab51c1 data/exdeorum/recipes/sculk_core.json
9520f7f3b42fb795748c715cb402133fca4b9ce3 data/exdeorum/recipes/sieve/crushed_blackstone/diamond/ancient_debris.json
72e126a6f9808fbe7d4e2fc95d432b1cba33fcea data/exdeorum/recipes/sieve/crushed_blackstone/diamond/blackstone_pebble.json
@ -1032,6 +1056,9 @@ b4531ee1e1478da1145f099271cff9a9c2069c46 data/exdeorum/recipes/spruce_sieve.json
8a3b28ce7f95cb82cd4693caee0cfbd856324fd5 data/exdeorum/recipes/stone_watering_can.json
09df4d1fa4f1e079f6190b943fc45085cc6d6596 data/exdeorum/recipes/string_mesh.json
ba8d21134dd2e019a9dd579a765d12685c19380d data/exdeorum/recipes/tuff.json
f3f7e1c6aac0f738e2c68b07628d0c793bbf4118 data/exdeorum/recipes/umbran_barrel.json
4065e6de49bd7618c9f133cc62123181ed76b99d data/exdeorum/recipes/umbran_crucible.json
390a33dc92677248f4c2d3a6a21d5e553f6df243 data/exdeorum/recipes/umbran_sieve.json
480cf1a3e2f5476e7aa9fc8a9ad310adef9e25e9 data/exdeorum/recipes/unfired_porcelain_bucket.json
e6ff95b6fbc43c73a537174e01c9eb519e8fdef1 data/exdeorum/recipes/unfired_porcelain_crucible.json
346b70c2d2516f6e735fd1f156e22a649175813d data/exdeorum/recipes/warped_barrel.json
@ -1063,5 +1090,8 @@ dabaaa0c9db5dd4668b528df176606609f45c0ce data/exdeorum/recipes/water_crucible/sm
3927d17ed5a24132956fa60b51bdb22e67ef4626 data/exdeorum/recipes/water_crucible/sweet_berries.json
9d4abedfd8af2e988c4f11d62ed66743f3e8ac07 data/exdeorum/recipes/water_crucible/tall_flowers.json
a5333ee537aa0e10b740e20a137a24b7699ff52b data/exdeorum/recipes/water_crucible/vine.json
05c12b51cdd74a0619df2b35d4d6fafffb84ee0c data/exdeorum/recipes/willow_barrel.json
c1dd98278720c97caccca82449d769c6a8a0f5e0 data/exdeorum/recipes/willow_crucible.json
24e72702e3ae9d0832deac8917603c4565f7aed2 data/exdeorum/recipes/willow_sieve.json
8356651dbd67d7c3b820a78d0720afa5a1ee5713 data/exdeorum/recipes/wooden_hammer.json
20b1ab005d3c3d552d4300f53444a931b230cb3b data/exdeorum/recipes/wooden_watering_can.json

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:dead_slab"
},
"s": {
"item": "biomesoplenty:dead_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:dead_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:dead_slab"
},
"s": {
"item": "biomesoplenty:dead_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:dead_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:dead_planks"
},
"_": {
"item": "biomesoplenty:dead_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:dead_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:fir_slab"
},
"s": {
"item": "biomesoplenty:fir_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:fir_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:fir_slab"
},
"s": {
"item": "biomesoplenty:fir_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:fir_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:fir_planks"
},
"_": {
"item": "biomesoplenty:fir_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:fir_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:hellbark_slab"
},
"s": {
"item": "biomesoplenty:hellbark_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:hellbark_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:hellbark_slab"
},
"s": {
"item": "biomesoplenty:hellbark_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:hellbark_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:hellbark_planks"
},
"_": {
"item": "biomesoplenty:hellbark_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:hellbark_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:jacaranda_slab"
},
"s": {
"item": "biomesoplenty:jacaranda_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:jacaranda_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:jacaranda_slab"
},
"s": {
"item": "biomesoplenty:jacaranda_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:jacaranda_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:jacaranda_planks"
},
"_": {
"item": "biomesoplenty:jacaranda_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:jacaranda_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:magic_slab"
},
"s": {
"item": "biomesoplenty:magic_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:magic_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:magic_slab"
},
"s": {
"item": "biomesoplenty:magic_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:magic_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:magic_planks"
},
"_": {
"item": "biomesoplenty:magic_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:magic_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:mahogany_slab"
},
"s": {
"item": "biomesoplenty:mahogany_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:mahogany_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:mahogany_slab"
},
"s": {
"item": "biomesoplenty:mahogany_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:mahogany_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:mahogany_planks"
},
"_": {
"item": "biomesoplenty:mahogany_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:mahogany_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:palm_slab"
},
"s": {
"item": "biomesoplenty:palm_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:palm_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:palm_slab"
},
"s": {
"item": "biomesoplenty:palm_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:palm_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:palm_planks"
},
"_": {
"item": "biomesoplenty:palm_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:palm_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:redwood_slab"
},
"s": {
"item": "biomesoplenty:redwood_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:redwood_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:redwood_slab"
},
"s": {
"item": "biomesoplenty:redwood_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:redwood_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:redwood_planks"
},
"_": {
"item": "biomesoplenty:redwood_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:redwood_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:umbran_slab"
},
"s": {
"item": "biomesoplenty:umbran_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:umbran_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:umbran_slab"
},
"s": {
"item": "biomesoplenty:umbran_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:umbran_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:umbran_planks"
},
"_": {
"item": "biomesoplenty:umbran_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:umbran_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:willow_slab"
},
"s": {
"item": "biomesoplenty:willow_planks"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:willow_barrel"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,34 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"m": {
"item": "biomesoplenty:willow_slab"
},
"s": {
"item": "biomesoplenty:willow_log"
}
},
"pattern": [
"s s",
"s s",
"sms"
],
"result": {
"item": "exdeorum:willow_crucible"
},
"show_notification": true
}
}
]
}

View File

@ -0,0 +1,37 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "biomesoplenty"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"I": {
"tag": "forge:rods/wooden"
},
"O": {
"item": "biomesoplenty:willow_planks"
},
"_": {
"item": "biomesoplenty:willow_slab"
}
},
"pattern": [
"O O",
"O_O",
"I I"
],
"result": {
"item": "exdeorum:willow_sieve"
},
"show_notification": true
}
}
]
}

View File

@ -35,4 +35,17 @@ public final class ASMHooks {
return pos;
}
}
/**
* Called in {@link net.minecraft.world.level.dimension.end.EndDragonFight#spawnExitPortal(boolean)}
* right before EndPodiumFeature.place is called to fix End Portal not spawning fully,
* with part of it being generated outside the world in the void.
*/
public static BlockPos prePlaceEndPodium(BlockPos pos) {
if (pos.getY() < 4) {
return pos.above(32);
} else {
return pos.immutable();
}
}
}

View File

@ -47,6 +47,36 @@ public class ModCompatData {
public static RegistryObject<Block> MAGIC_PLANKS;
public static RegistryObject<Block> UMBRAN_PLANKS;
public static RegistryObject<Block> HELLBARK_PLANKS;
public static RegistryObject<Item> FIR_PLANKS_ITEM;
public static RegistryObject<Item> REDWOOD_PLANKS_ITEM;
public static RegistryObject<Item> MAHOGANY_PLANKS_ITEM;
public static RegistryObject<Item> JACARANDA_PLANKS_ITEM;
public static RegistryObject<Item> PALM_PLANKS_ITEM;
public static RegistryObject<Item> WILLOW_PLANKS_ITEM;
public static RegistryObject<Item> DEAD_PLANKS_ITEM;
public static RegistryObject<Item> MAGIC_PLANKS_ITEM;
public static RegistryObject<Item> UMBRAN_PLANKS_ITEM;
public static RegistryObject<Item> HELLBARK_PLANKS_ITEM;
public static RegistryObject<Item> FIR_SLAB;
public static RegistryObject<Item> REDWOOD_SLAB;
public static RegistryObject<Item> MAHOGANY_SLAB;
public static RegistryObject<Item> JACARANDA_SLAB;
public static RegistryObject<Item> PALM_SLAB;
public static RegistryObject<Item> WILLOW_SLAB;
public static RegistryObject<Item> DEAD_SLAB;
public static RegistryObject<Item> MAGIC_SLAB;
public static RegistryObject<Item> UMBRAN_SLAB;
public static RegistryObject<Item> HELLBARK_SLAB;
public static RegistryObject<Item> FIR_LOG_ITEM;
public static RegistryObject<Item> REDWOOD_LOG_ITEM;
public static RegistryObject<Item> MAHOGANY_LOG_ITEM;
public static RegistryObject<Item> JACARANDA_LOG_ITEM;
public static RegistryObject<Item> PALM_LOG_ITEM;
public static RegistryObject<Item> WILLOW_LOG_ITEM;
public static RegistryObject<Item> DEAD_LOG_ITEM;
public static RegistryObject<Item> MAGIC_LOG_ITEM;
public static RegistryObject<Item> UMBRAN_LOG_ITEM;
public static RegistryObject<Item> HELLBARK_LOG_ITEM;
public static RegistryObject<Block> FIR_LOG;
public static RegistryObject<Block> REDWOOD_LOG;
public static RegistryObject<Block> MAHOGANY_LOG;
@ -78,6 +108,7 @@ public class ModCompatData {
public static RegistryObject<Item> CERTUS_QUARTZ_CRYSTAL;
public static RegistryObject<Item> CHARGED_CERTUS_QUARTZ_CRYSTAL;
public static RegistryObject<Item> CERTUS_QUARTZ_DUST;
public static RegistryObject<Item> SKY_STONE_DUST;
public static void registerModData() {
registerModItems(ModIds.ENDERIO, addItem -> GRAINS_OF_INFINITY = addItem.apply("grains_of_infinity"));
@ -105,6 +136,26 @@ public class ModCompatData {
HELLBARK_LOG = addBlock.apply("hellbark_log");
});
registerModItems(ModIds.BIOMES_O_PLENTY, addItem -> {
FIR_PLANKS_ITEM = addItem.apply("fir_planks");
REDWOOD_PLANKS_ITEM = addItem.apply("redwood_planks");
MAHOGANY_PLANKS_ITEM = addItem.apply("mahogany_planks");
JACARANDA_PLANKS_ITEM = addItem.apply("jacaranda_planks");
PALM_PLANKS_ITEM = addItem.apply("palm_planks");
WILLOW_PLANKS_ITEM = addItem.apply("willow_planks");
DEAD_PLANKS_ITEM = addItem.apply("dead_planks");
MAGIC_PLANKS_ITEM = addItem.apply("magic_planks");
UMBRAN_PLANKS_ITEM = addItem.apply("umbran_planks");
HELLBARK_PLANKS_ITEM = addItem.apply("hellbark_planks");
FIR_SLAB = addItem.apply("fir_slab");
REDWOOD_SLAB = addItem.apply("redwood_slab");
MAHOGANY_SLAB = addItem.apply("mahogany_slab");
JACARANDA_SLAB = addItem.apply("jacaranda_slab");
PALM_SLAB = addItem.apply("palm_slab");
WILLOW_SLAB = addItem.apply("willow_slab");
DEAD_SLAB = addItem.apply("dead_slab");
MAGIC_SLAB = addItem.apply("magic_slab");
UMBRAN_SLAB = addItem.apply("umbran_slab");
HELLBARK_SLAB = addItem.apply("hellbark_slab");
ORIGIN_SAPLING = addItem.apply("origin_sapling");
FLOWERING_OAK_SAPLING = addItem.apply("flowering_oak_sapling");
SNOWBLOSSOM_SAPLING = addItem.apply("snowblossom_sapling");
@ -122,11 +173,22 @@ public class ModCompatData {
MAGIC_SAPLING = addItem.apply("magic_sapling");
UMBRAN_SAPLING = addItem.apply("umbran_sapling");
HELLBARK_SAPLING = addItem.apply("hellbark_sapling");
FIR_LOG_ITEM = addItem.apply("fir_log");
REDWOOD_LOG_ITEM = addItem.apply("redwood_log");
MAHOGANY_LOG_ITEM = addItem.apply("mahogany_log");
JACARANDA_LOG_ITEM = addItem.apply("jacaranda_log");
PALM_LOG_ITEM = addItem.apply("palm_log");
WILLOW_LOG_ITEM = addItem.apply("willow_log");
DEAD_LOG_ITEM = addItem.apply("dead_log");
MAGIC_LOG_ITEM = addItem.apply("magic_log");
UMBRAN_LOG_ITEM = addItem.apply("umbran_log");
HELLBARK_LOG_ITEM = addItem.apply("hellbark_log");
});
registerModItems(ModIds.APPLIED_ENERGISTICS_2, addItem -> {
CERTUS_QUARTZ_CRYSTAL = addItem.apply("certus_quartz_crystal");
CHARGED_CERTUS_QUARTZ_CRYSTAL = addItem.apply("charged_certus_quartz_crystal");
CERTUS_QUARTZ_DUST = addItem.apply("certus_quartz_dust");
SKY_STONE_DUST = addItem.apply("sky_stone_dust");
});
}

View File

@ -35,9 +35,15 @@ import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import net.minecraft.world.level.storage.loot.providers.number.NumberProvider;
import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator;
import net.minecraftforge.common.Tags;
import net.minecraftforge.common.crafting.conditions.ICondition;
import net.minecraftforge.common.crafting.conditions.ModLoadedCondition;
import net.minecraftforge.common.crafting.conditions.NotCondition;
import net.minecraftforge.common.crafting.conditions.TagEmptyCondition;
import net.minecraftforge.registries.RegistryObject;
import org.apache.commons.lang3.mutable.MutableObject;
import thedarkcolour.exdeorum.ExDeorum;
import thedarkcolour.exdeorum.compat.ModIds;
import thedarkcolour.exdeorum.data.ModCompatData;
import thedarkcolour.exdeorum.recipe.TagResultRecipe;
import thedarkcolour.exdeorum.recipe.barrel.FinishedBarrelCompostRecipe;
import thedarkcolour.exdeorum.recipe.barrel.FinishedBarrelMixingRecipe;
@ -50,6 +56,7 @@ import thedarkcolour.exdeorum.registry.ERecipeSerializers;
import thedarkcolour.exdeorum.tag.EItemTags;
import thedarkcolour.modkit.data.MKRecipeProvider;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;
@ -95,6 +102,17 @@ public class Recipes {
uShaped(recipes, EItems.CRIMSON_CRUCIBLE, ingredient(Items.CRIMSON_STEM), ingredient(Items.CRIMSON_SLAB));
uShaped(recipes, EItems.WARPED_CRUCIBLE, ingredient(Items.WARPED_STEM), ingredient(Items.WARPED_SLAB));
uShaped(recipes, EItems.UNFIRED_PORCELAIN_CRUCIBLE, ingredient(EItems.PORCELAIN_CLAY_BALL.get()), ingredient(EItems.PORCELAIN_CLAY_BALL.get()));
// Modded crucibles
bopUShaped(recipes, EItems.FIR_CRUCIBLE, ModCompatData.FIR_LOG_ITEM, ModCompatData.FIR_SLAB);
bopUShaped(recipes, EItems.REDWOOD_CRUCIBLE, ModCompatData.REDWOOD_LOG_ITEM, ModCompatData.REDWOOD_SLAB);
bopUShaped(recipes, EItems.MAHOGANY_CRUCIBLE, ModCompatData.MAHOGANY_LOG_ITEM, ModCompatData.MAHOGANY_SLAB);
bopUShaped(recipes, EItems.JACARANDA_CRUCIBLE, ModCompatData.JACARANDA_LOG_ITEM, ModCompatData.JACARANDA_SLAB);
bopUShaped(recipes, EItems.PALM_CRUCIBLE, ModCompatData.PALM_LOG_ITEM, ModCompatData.PALM_SLAB);
bopUShaped(recipes, EItems.WILLOW_CRUCIBLE, ModCompatData.WILLOW_LOG_ITEM, ModCompatData.WILLOW_SLAB);
bopUShaped(recipes, EItems.DEAD_CRUCIBLE, ModCompatData.DEAD_LOG_ITEM, ModCompatData.DEAD_SLAB);
bopUShaped(recipes, EItems.MAGIC_CRUCIBLE, ModCompatData.MAGIC_LOG_ITEM, ModCompatData.MAGIC_SLAB);
bopUShaped(recipes, EItems.UMBRAN_CRUCIBLE, ModCompatData.UMBRAN_LOG_ITEM, ModCompatData.UMBRAN_SLAB);
bopUShaped(recipes, EItems.HELLBARK_CRUCIBLE, ModCompatData.HELLBARK_LOG_ITEM, ModCompatData.HELLBARK_SLAB);
// Barrels
uShaped(recipes, EItems.OAK_BARREL, ingredient(Items.OAK_PLANKS), ingredient(Items.OAK_SLAB));
@ -109,6 +127,17 @@ public class Recipes {
uShaped(recipes, EItems.CRIMSON_BARREL, ingredient(Items.CRIMSON_PLANKS), ingredient(Items.CRIMSON_SLAB));
uShaped(recipes, EItems.WARPED_BARREL, ingredient(Items.WARPED_PLANKS), ingredient(Items.WARPED_SLAB));
uShaped(recipes, EItems.STONE_BARREL, ingredient(Items.STONE), ingredient(Items.STONE_SLAB));
// Modded barrels
bopUShaped(recipes, EItems.FIR_BARREL, ModCompatData.FIR_PLANKS_ITEM, ModCompatData.FIR_SLAB);
bopUShaped(recipes, EItems.REDWOOD_BARREL, ModCompatData.REDWOOD_PLANKS_ITEM, ModCompatData.REDWOOD_SLAB);
bopUShaped(recipes, EItems.MAHOGANY_BARREL, ModCompatData.MAHOGANY_PLANKS_ITEM, ModCompatData.MAHOGANY_SLAB);
bopUShaped(recipes, EItems.JACARANDA_BARREL, ModCompatData.JACARANDA_PLANKS_ITEM, ModCompatData.JACARANDA_SLAB);
bopUShaped(recipes, EItems.PALM_BARREL, ModCompatData.PALM_PLANKS_ITEM, ModCompatData.PALM_SLAB);
bopUShaped(recipes, EItems.WILLOW_BARREL, ModCompatData.WILLOW_PLANKS_ITEM, ModCompatData.WILLOW_SLAB);
bopUShaped(recipes, EItems.DEAD_BARREL, ModCompatData.DEAD_PLANKS_ITEM, ModCompatData.DEAD_SLAB);
bopUShaped(recipes, EItems.MAGIC_BARREL, ModCompatData.MAGIC_PLANKS_ITEM, ModCompatData.MAGIC_SLAB);
bopUShaped(recipes, EItems.UMBRAN_BARREL, ModCompatData.UMBRAN_PLANKS_ITEM, ModCompatData.UMBRAN_SLAB);
bopUShaped(recipes, EItems.HELLBARK_BARREL, ModCompatData.HELLBARK_PLANKS_ITEM, ModCompatData.HELLBARK_SLAB);
// Pebbles and ore chunks
recipes.grid2x2(Items.COBBLESTONE, ingredient(EItems.STONE_PEBBLE));
@ -150,6 +179,17 @@ public class Recipes {
sieve(recipes, EItems.BAMBOO_SIEVE, Items.BAMBOO_PLANKS, Items.BAMBOO_SLAB);
sieve(recipes, EItems.CRIMSON_SIEVE, Items.CRIMSON_PLANKS, Items.CRIMSON_SLAB);
sieve(recipes, EItems.WARPED_SIEVE, Items.WARPED_PLANKS, Items.WARPED_SLAB);
// Modded sieves
bopSieve(recipes, EItems.FIR_SIEVE, ModCompatData.FIR_PLANKS_ITEM, ModCompatData.FIR_SLAB);
bopSieve(recipes, EItems.REDWOOD_SIEVE, ModCompatData.REDWOOD_PLANKS_ITEM, ModCompatData.REDWOOD_SLAB);
bopSieve(recipes, EItems.MAHOGANY_SIEVE, ModCompatData.MAHOGANY_PLANKS_ITEM, ModCompatData.MAHOGANY_SLAB);
bopSieve(recipes, EItems.JACARANDA_SIEVE, ModCompatData.JACARANDA_PLANKS_ITEM, ModCompatData.JACARANDA_SLAB);
bopSieve(recipes, EItems.PALM_SIEVE, ModCompatData.PALM_PLANKS_ITEM, ModCompatData.PALM_SLAB);
bopSieve(recipes, EItems.WILLOW_SIEVE, ModCompatData.WILLOW_PLANKS_ITEM, ModCompatData.WILLOW_SLAB);
bopSieve(recipes, EItems.DEAD_SIEVE, ModCompatData.DEAD_PLANKS_ITEM, ModCompatData.DEAD_SLAB);
bopSieve(recipes, EItems.MAGIC_SIEVE, ModCompatData.MAGIC_PLANKS_ITEM, ModCompatData.MAGIC_SLAB);
bopSieve(recipes, EItems.UMBRAN_SIEVE, ModCompatData.UMBRAN_PLANKS_ITEM, ModCompatData.UMBRAN_SLAB);
bopSieve(recipes, EItems.HELLBARK_SIEVE, ModCompatData.HELLBARK_PLANKS_ITEM, ModCompatData.HELLBARK_SLAB);
// Meshes
recipes.grid3x3(EItems.STRING_MESH.get(), ingredient(Tags.Items.STRING));
@ -192,6 +232,18 @@ public class Recipes {
});
}
private static void bopUShaped(MKRecipeProvider recipes, RegistryObject<? extends Item> result, RegistryObject<? extends Item> sides, RegistryObject<? extends Item> middle) {
recipes.conditional(result.getId().getPath(), List.of(modInstalled(ModIds.BIOMES_O_PLENTY)), writer1 -> {
uShaped(recipes, result, ingredient(sides), ingredient(middle));
});
}
private static void bopSieve(MKRecipeProvider recipes, RegistryObject<? extends Item> result, RegistryObject<? extends Item> planks, RegistryObject<? extends Item> slab) {
recipes.conditional(result.getId().getPath(), List.of(modInstalled(ModIds.BIOMES_O_PLENTY)), writer1 -> {
sieve(recipes, result, planks.get(), slab.get());
});
}
private static void grid2x2TagResult(Consumer<FinishedRecipe> writer, MKRecipeProvider recipes, TagKey<Item> resultTag, Ingredient ingredient) {
var ref = new MutableObject<FinishedRecipe>();
recipes.pushWriter(ref::setValue, newWriter -> {
@ -454,4 +506,12 @@ public class Recipes {
private static void barrelMixing(Consumer<FinishedRecipe> writer, String suffix, Ingredient ingredient, Fluid fluidType, Item result) {
writer.accept(new FinishedBarrelMixingRecipe(new ResourceLocation(ExDeorum.ID, "barrel_mixing/" + path(result) + suffix), ingredient, fluidType, 1000, result));
}
static ICondition tagNotEmpty(TagKey<Item> tag) {
return new NotCondition(new TagEmptyCondition(tag.location()));
}
static ICondition modInstalled(String modid) {
return new ModLoadedCondition(modid);
}
}

View File

@ -29,9 +29,6 @@ import net.minecraft.world.level.storage.loot.providers.number.BinomialDistribut
import net.minecraft.world.level.storage.loot.providers.number.NumberProvider;
import net.minecraftforge.common.crafting.ConditionalRecipe;
import net.minecraftforge.common.crafting.conditions.ICondition;
import net.minecraftforge.common.crafting.conditions.ModLoadedCondition;
import net.minecraftforge.common.crafting.conditions.NotCondition;
import net.minecraftforge.common.crafting.conditions.TagEmptyCondition;
import net.minecraftforge.registries.RegistryObject;
import thedarkcolour.exdeorum.ExDeorum;
import thedarkcolour.exdeorum.compat.ModIds;
@ -50,6 +47,7 @@ import static net.minecraft.world.level.storage.loot.providers.number.BinomialDi
import static thedarkcolour.modkit.data.MKRecipeProvider.ingredient;
import static thedarkcolour.modkit.data.MKRecipeProvider.path;
// todo sky stone dust from Dust block
class SieveRecipes {
static void sieveRecipes(Consumer<FinishedRecipe> writer) {
var allMeshes = List.of(EItems.STRING_MESH, EItems.FLINT_MESH, EItems.IRON_MESH, EItems.GOLDEN_MESH, EItems.DIAMOND_MESH, EItems.NETHERITE_MESH);
@ -166,14 +164,14 @@ class SieveRecipes {
addDrop.accept(Items.EMERALD, chance(0.01f));
addDrop.accept(Items.AMETHYST_SHARD, chance(0.01f));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.03f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.06f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.035f), tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.03f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.03f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.06f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.035f), Recipes.tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.03f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
});
// Gravel -> Flint mesh
forMesh(writer, ingredient(Items.GRAVEL), EItems.FLINT_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
@ -192,14 +190,14 @@ class SieveRecipes {
addDrop.accept(Items.EMERALD, chance(0.015f));
addDrop.accept(Items.AMETHYST_SHARD, chance(0.015f));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.055f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.03f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.055f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.03f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
});
// Gravel -> Iron mesh
forMesh(writer, ingredient(Items.GRAVEL), EItems.IRON_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
@ -215,14 +213,14 @@ class SieveRecipes {
addDrop.accept(Items.EMERALD, chance(0.04f));
addDrop.accept(Items.AMETHYST_SHARD, chance(0.04f));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.06f), tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.055f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.06f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.045f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.06f), tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.06f), Recipes.tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.055f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.06f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.045f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.06f), Recipes.tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
});
// Golden mesh has much higher drops for gold and gems, but at the cost of much lower drops for metals
// Gravel -> Golden mesh
@ -241,14 +239,14 @@ class SieveRecipes {
addDrop.accept(Items.GOLD_NUGGET, chance(0.08f));
addDrop.accept(Items.RAW_GOLD, chance(0.02f));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.12f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.12f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
});
// Gravel -> Diamond mesh
forMesh(writer, ingredient(Items.GRAVEL), EItems.DIAMOND_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
@ -263,14 +261,14 @@ class SieveRecipes {
addDrop.accept(Items.EMERALD, chance(0.07f));
addDrop.accept(Items.AMETHYST_SHARD, chance(0.06f));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.08f), tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.08f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.11f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.08f), tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.08f), Recipes.tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.08f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.11f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.08f), Recipes.tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
});
// Gravel -> Netherite mesh
forMesh(writer, ingredient(Items.GRAVEL), EItems.NETHERITE_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
@ -286,14 +284,14 @@ class SieveRecipes {
addDrop.accept(Items.GOLD_NUGGET, chance(0.04f));
addDrop.accept(Items.RAW_GOLD, chance(0.01f));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.11f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.11f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.10f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.12f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.08f), tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.055f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.ALUMINUM_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_ALUMINUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.11f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.11f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.10f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.12f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.ZINC_ORE_CHUNK.get(), chance(0.08f), Recipes.tagNotEmpty(EItemTags.ORES_ZINC));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.055f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
});
// Sand -> String mesh
@ -306,8 +304,8 @@ class SieveRecipes {
addDrop.accept(Items.KELP, chance(0.1f));
addDrop.accept(Items.SEA_PICKLE, chance(0.05f));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.03f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.005f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.03f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.005f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
});
forMesh(writer, ingredient(Items.SAND), EItems.FLINT_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.FLINT, binomial(2, 0.2f));
@ -316,8 +314,8 @@ class SieveRecipes {
addDrop.accept(Items.IRON_NUGGET, chance(0.16f));
addDrop.accept(EItems.RANDOM_POTTERY_SHERD.get(), chance(0.04f));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.04f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.005f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.04f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.005f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
});
forMesh(writer, ingredient(Items.SAND), EItems.IRON_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.CACTUS, chance(0.13f));
@ -330,8 +328,8 @@ class SieveRecipes {
addDrop.accept(Items.PRISMARINE_SHARD, chance(0.06f));
addDrop.accept(Items.PRISMARINE_CRYSTALS, chance(0.06f));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.06f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.0125f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.06f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.0125f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
});
forMesh(writer, ingredient(Items.SAND), EItems.GOLDEN_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.CACTUS, chance(0.10f));
@ -346,8 +344,8 @@ class SieveRecipes {
addDrop.accept(Items.RAW_GOLD, chance(0.04f));
addDrop.accept(EItems.RANDOM_ARMOR_TRIM.get(), chance(0.02f));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.07f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.015f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.07f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.015f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
});
forMesh(writer, ingredient(Items.SAND), EItems.DIAMOND_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.FLINT, chance(0.23f));
@ -356,8 +354,8 @@ class SieveRecipes {
addDrop.accept(Items.PRISMARINE_SHARD, chance(0.09f));
addDrop.accept(Items.PRISMARINE_CRYSTALS, chance(0.09f));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.09f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.02f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.09f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.02f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
});
forMesh(writer, ingredient(Items.SAND), EItems.NETHERITE_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.CACTUS, chance(0.15f));
@ -369,8 +367,8 @@ class SieveRecipes {
addDrop.accept(Items.PRISMARINE_SHARD, chance(0.12f));
addDrop.accept(Items.PRISMARINE_CRYSTALS, chance(0.12f));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.095f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.035f), modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CERTUS_QUARTZ_CRYSTAL.get(), chance(0.095f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
addConditionalDrop.accept(ModCompatData.CHARGED_CERTUS_QUARTZ_CRYSTAL.get(), chance(0.035f), Recipes.modInstalled(ModIds.APPLIED_ENERGISTICS_2));
});
// Red Sand -> String mesh
@ -423,8 +421,9 @@ class SieveRecipes {
addDrop.accept(Items.GLOWSTONE_DUST, chance(0.04f));
addDrop.accept(Items.BLAZE_POWDER, chance(0.03f));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.06f), modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.05f), modInstalled(ModIds.EXTREME_REACTORS));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.06f), Recipes.modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.05f), Recipes.modInstalled(ModIds.EXTREME_REACTORS));
});
forMesh(writer, ingredient(EItems.DUST.get()), EItems.FLINT_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.GUNPOWDER, chance(0.11f));
@ -433,8 +432,8 @@ class SieveRecipes {
addDrop.accept(Items.GLOWSTONE_DUST, chance(0.07f));
addDrop.accept(Items.BLAZE_POWDER, chance(0.04f));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.07f), modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.055f), modInstalled(ModIds.EXTREME_REACTORS));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.07f), Recipes.modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.055f), Recipes.modInstalled(ModIds.EXTREME_REACTORS));
});
forMesh(writer, ingredient(EItems.DUST.get()), EItems.IRON_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.GUNPOWDER, chance(0.13f));
@ -444,8 +443,8 @@ class SieveRecipes {
addDrop.accept(Items.BLAZE_POWDER, chance(0.05f));
addDrop.accept(Items.IRON_NUGGET, chance(0.06f));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.09f), modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.08f), modInstalled(ModIds.EXTREME_REACTORS));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.09f), Recipes.modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.08f), Recipes.modInstalled(ModIds.EXTREME_REACTORS));
});
forMesh(writer, ingredient(EItems.DUST.get()), EItems.GOLDEN_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.GUNPOWDER, chance(0.13f));
@ -456,8 +455,8 @@ class SieveRecipes {
addDrop.accept(Items.GOLD_NUGGET, binomial(2, 0.18f));
addDrop.accept(Items.RAW_GOLD, chance(0.02f));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.11f), modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.10f), modInstalled(ModIds.EXTREME_REACTORS));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.11f), Recipes.modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.10f), Recipes.modInstalled(ModIds.EXTREME_REACTORS));
});
forMesh(writer, ingredient(EItems.DUST.get()), EItems.DIAMOND_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.GUNPOWDER, chance(0.14f));
@ -467,8 +466,8 @@ class SieveRecipes {
addDrop.accept(Items.BLAZE_POWDER, chance(0.06f));
addDrop.accept(Items.GOLD_NUGGET, chance(0.08f));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.12f), modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.12f), modInstalled(ModIds.EXTREME_REACTORS));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.12f), Recipes.modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.12f), Recipes.modInstalled(ModIds.EXTREME_REACTORS));
});
forMesh(writer, ingredient(EItems.DUST.get()), EItems.NETHERITE_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(Items.GUNPOWDER, chance(0.14f));
@ -479,8 +478,8 @@ class SieveRecipes {
addDrop.accept(Items.GOLD_NUGGET, chance(0.08f));
addDrop.accept(Items.IRON_NUGGET, chance(0.08f));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.135f), modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.14f), modInstalled(ModIds.EXTREME_REACTORS));
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.135f), Recipes.modInstalled(ModIds.ENDERIO));
addConditionalDrop.accept(ModCompatData.YELLORIUM_DUST.get(), chance(0.14f), Recipes.modInstalled(ModIds.EXTREME_REACTORS));
});
// Crushed Deepslate -> String mesh
@ -494,14 +493,14 @@ class SieveRecipes {
addDrop.accept(Items.LAPIS_LAZULI, chance(0.04f));
addDrop.accept(Items.EMERALD, chance(0.03f));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.06f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.03f), tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_URANIUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.06f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.03f), Recipes.tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_URANIUM));
});
forMesh(writer, ingredient(EItems.CRUSHED_DEEPSLATE.get()), EItems.FLINT_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.DEEPSLATE_PEBBLE.get(), binomial(4, 0.5f));
@ -516,14 +515,14 @@ class SieveRecipes {
addDrop.accept(Items.LAPIS_LAZULI, chance(0.05f));
addDrop.accept(Items.EMERALD, chance(0.04f));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.08f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.08f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.08f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.06f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.06f), tagNotEmpty(EItemTags.ORES_URANIUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.08f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.08f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.08f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.06f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.06f), Recipes.tagNotEmpty(EItemTags.ORES_URANIUM));
});
forMesh(writer, ingredient(EItems.CRUSHED_DEEPSLATE.get()), EItems.IRON_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.DEEPSLATE_PEBBLE.get(), binomial(4, 0.6f));
@ -535,14 +534,14 @@ class SieveRecipes {
addDrop.accept(Items.LAPIS_LAZULI, chance(0.08f));
addDrop.accept(Items.EMERALD, chance(0.05f));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.1f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.1f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.10f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.11f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.06f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.065f), tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.08f), tagNotEmpty(EItemTags.ORES_URANIUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.1f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.1f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.10f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.11f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.06f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.065f), Recipes.tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.08f), Recipes.tagNotEmpty(EItemTags.ORES_URANIUM));
});
forMesh(writer, ingredient(EItems.CRUSHED_DEEPSLATE.get()), EItems.GOLDEN_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.DEEPSLATE_PEBBLE.get(), binomial(4, 0.65f));
@ -556,14 +555,14 @@ class SieveRecipes {
addDrop.accept(Items.RAW_GOLD, chance(0.05f));
addDrop.accept(Items.GOLD_NUGGET, binomial(3, 0.1f));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.15f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.11f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.12f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_URANIUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.15f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.11f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.12f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_URANIUM));
});
forMesh(writer, ingredient(EItems.CRUSHED_DEEPSLATE.get()), EItems.DIAMOND_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.DEEPSLATE_PEBBLE.get(), binomial(4, 0.65f));
@ -575,14 +574,14 @@ class SieveRecipes {
addDrop.accept(Items.LAPIS_LAZULI, chance(0.12f));
addDrop.accept(Items.EMERALD, chance(0.08f));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.11f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.11f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.12f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.11f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.13f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.065f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.075f), tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.1f), tagNotEmpty(EItemTags.ORES_URANIUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.11f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.11f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.12f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.11f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.13f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.065f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.075f), Recipes.tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.1f), Recipes.tagNotEmpty(EItemTags.ORES_URANIUM));
});
forMesh(writer, ingredient(EItems.CRUSHED_DEEPSLATE.get()), EItems.NETHERITE_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.DEEPSLATE_PEBBLE.get(), binomial(4, 0.7f));
@ -594,14 +593,14 @@ class SieveRecipes {
addDrop.accept(Items.LAPIS_LAZULI, chance(0.14f));
addDrop.accept(Items.EMERALD, chance(0.1f));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.12f), tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.12f), tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.14f), tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.15f), tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.16f), tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.065f), tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.12f), tagNotEmpty(EItemTags.ORES_URANIUM));
addConditionalDrop.accept(EItems.SILVER_ORE_CHUNK.get(), chance(0.12f), Recipes.tagNotEmpty(EItemTags.ORES_SILVER));
addConditionalDrop.accept(EItems.LEAD_ORE_CHUNK.get(), chance(0.12f), Recipes.tagNotEmpty(EItemTags.ORES_LEAD));
addConditionalDrop.accept(EItems.OSMIUM_ORE_CHUNK.get(), chance(0.14f), Recipes.tagNotEmpty(EItemTags.ORES_OSMIUM));
addConditionalDrop.accept(EItems.NICKEL_ORE_CHUNK.get(), chance(0.15f), Recipes.tagNotEmpty(EItemTags.ORES_NICKEL));
addConditionalDrop.accept(EItems.TIN_ORE_CHUNK.get(), chance(0.16f), Recipes.tagNotEmpty(EItemTags.ORES_TIN));
addConditionalDrop.accept(EItems.IRIDIUM_ORE_CHUNK.get(), chance(0.065f), Recipes.tagNotEmpty(EItemTags.ORES_IRIDIUM));
addConditionalDrop.accept(EItems.PLATINUM_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_PLATINUM));
addConditionalDrop.accept(EItems.URANIUM_ORE_CHUNK.get(), chance(0.12f), Recipes.tagNotEmpty(EItemTags.ORES_URANIUM));
});
forMesh(writer, ingredient(EItems.CRUSHED_BLACKSTONE.get()), EItems.STRING_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
@ -666,7 +665,7 @@ class SieveRecipes {
addDrop.accept(EItems.CRIMSON_NYLIUM_SPORES.get(), chance(0.05f));
addDrop.accept(Items.GOLD_NUGGET, chance(0.07f));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.04f), tagNotEmpty(EItemTags.ORES_COBALT));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.04f), Recipes.tagNotEmpty(EItemTags.ORES_COBALT));
});
forMesh(writer, ingredient(EItems.CRUSHED_NETHERRACK.get()), EItems.FLINT_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.BLACKSTONE_PEBBLE.get(), binomial(4, 0.5f));
@ -679,7 +678,7 @@ class SieveRecipes {
addDrop.accept(EItems.CRIMSON_NYLIUM_SPORES.get(), chance(0.07f));
addDrop.accept(Items.GOLD_NUGGET, chance(0.08f));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.05f), tagNotEmpty(EItemTags.ORES_COBALT));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.05f), Recipes.tagNotEmpty(EItemTags.ORES_COBALT));
});
forMesh(writer, ingredient(EItems.CRUSHED_NETHERRACK.get()), EItems.IRON_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.BLACKSTONE_PEBBLE.get(), binomial(4, 0.6f));
@ -692,7 +691,7 @@ class SieveRecipes {
addDrop.accept(EItems.CRIMSON_NYLIUM_SPORES.get(), chance(0.08f));
addDrop.accept(Items.GOLD_NUGGET, chance(0.1f));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.065f), tagNotEmpty(EItemTags.ORES_COBALT));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.065f), Recipes.tagNotEmpty(EItemTags.ORES_COBALT));
});
forMesh(writer, ingredient(EItems.CRUSHED_NETHERRACK.get()), EItems.GOLDEN_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.BLACKSTONE_PEBBLE.get(), binomial(4, 0.6f));
@ -706,7 +705,7 @@ class SieveRecipes {
addDrop.accept(Items.GOLD_NUGGET, chance(0.14f));
addDrop.accept(Items.RAW_GOLD, chance(0.03f));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.07f), tagNotEmpty(EItemTags.ORES_COBALT));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.07f), Recipes.tagNotEmpty(EItemTags.ORES_COBALT));
});
forMesh(writer, ingredient(EItems.CRUSHED_NETHERRACK.get()), EItems.DIAMOND_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.BLACKSTONE_PEBBLE.get(), binomial(4, 0.6f));
@ -716,7 +715,7 @@ class SieveRecipes {
addDrop.accept(Items.GUNPOWDER, chance(0.13f));
addDrop.accept(Items.GOLD_NUGGET, chance(0.12f));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.09f), tagNotEmpty(EItemTags.ORES_COBALT));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.09f), Recipes.tagNotEmpty(EItemTags.ORES_COBALT));
});
forMesh(writer, ingredient(EItems.CRUSHED_NETHERRACK.get()), EItems.NETHERITE_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
addDrop.accept(EItems.BLACKSTONE_PEBBLE.get(), binomial(5, 0.65f));
@ -726,7 +725,7 @@ class SieveRecipes {
addDrop.accept(Items.GUNPOWDER, chance(0.13f));
addDrop.accept(Items.GOLD_NUGGET, chance(0.12f));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.11f), tagNotEmpty(EItemTags.ORES_COBALT));
addConditionalDrop.accept(EItems.COBALT_ORE_CHUNK.get(), chance(0.11f), Recipes.tagNotEmpty(EItemTags.ORES_COBALT));
});
forMesh(writer, ingredient(Items.SOUL_SAND), EItems.STRING_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
@ -830,7 +829,7 @@ class SieveRecipes {
addDrop.accept(Items.BIG_DRIPLEAF, chance(0.05f + j * 0.02f));
addDrop.accept(Items.SPORE_BLOSSOM, chance(0.03f + j * 0.015f));
var bop = modInstalled(ModIds.BIOMES_O_PLENTY);
var bop = Recipes.modInstalled(ModIds.BIOMES_O_PLENTY);
addConditionalDrop.accept(ModCompatData.ORIGIN_SAPLING.get(), chance(0.04f), bop);
addConditionalDrop.accept(ModCompatData.FLOWERING_OAK_SAPLING.get(), chance(0.04f), bop);
addConditionalDrop.accept(ModCompatData.SNOWBLOSSOM_SAPLING.get(), chance(0.04f), bop);
@ -863,14 +862,6 @@ class SieveRecipes {
return binomial(1, p);
}
private static ICondition tagNotEmpty(TagKey<Item> tag) {
return new NotCondition(new TagEmptyCondition(tag.location()));
}
private static ICondition modInstalled(String modid) {
return new ModLoadedCondition(modid);
}
private static void forMesh(Consumer<FinishedRecipe> writer, Ingredient block, RegistryObject<? extends Item> mesh, ForMeshContext addDrops) {
var folder = mesh.getId().getPath().replace("_mesh", "/");
var basePath = path(block.getItems()[0].getItem()) + "/" + folder;

View File

@ -3,9 +3,11 @@
var Opcodes = Java.type('org.objectweb.asm.Opcodes');
var InsnList = Java.type('org.objectweb.asm.tree.InsnList');
var VarInsnNode = Java.type('org.objectweb.asm.tree.VarInsnNode');
var FieldInsnNode = Java.type('org.objectweb.asm.tree.FieldInsnNode');
var MethodInsnNode = Java.type('org.objectweb.asm.tree.MethodInsnNode');
var LdcInsnNode = Java.type('org.objectweb.asm.tree.LdcInsnNode');
var TypeInsnNode = Java.type('org.objectweb.asm.tree.TypeInsnNode');
var InsnNode = Java.type('org.objectweb.asm.tree.InsnNode');
var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI');
@ -66,6 +68,54 @@ function initializeCoreMod() {
ASMAPI.log('ERROR', 'Unable to patch server.properties, you will have to set "level-type" to "exdeorum:void_world" manually.');
return method;
}
},
// Fixes heightmap issues when placing the end portal podium that would only spawn half of the portal
'EndPortalPatch': {
'target': {
'type': 'METHOD',
'class': 'net.minecraft.world.level.dimension.end.EndDragonFight',
'methodName': 'm_64093_', // spawnExitPortal
'methodDesc': '(Z)V'
},
'transformer': function(method) {
var insnList = method.instructions;
// Cache the mapped method name
var randomSourceCreate = ASMAPI.mapMethod('m_216327_');
// Start at 2 to avoid null getPrevious().getPrevious()
for (var i = 2; i < insnList.size(); ++i) {
var insn = insnList.get(i);
// we want insn to be the GETFIELD portalLocation instruction after RandomSource.create
var previous = insnList.get(i - 2);
if (previous.getOpcode() === Opcodes.INVOKESTATIC && previous.name.equals(randomSourceCreate)) {
// labels and frame nodes use -1 as their opcode
if (insn.getNext().getOpcode() === -1) {
insn = insn.getNext();
}
// ALOAD 0 (there are two in a row)
insnList.insertBefore(insn, new VarInsnNode(Opcodes.ALOAD, 0));
// INVOKESTATIC to my hook
// DUP_X1
// PUTFIELD
insnList.insert(insn, ASMAPI.listOf(
new MethodInsnNode(Opcodes.INVOKESTATIC, 'thedarkcolour/exdeorum/asm/ASMHooks', 'prePlaceEndPodium', '(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/core/BlockPos;', false),
new InsnNode(Opcodes.DUP_X1),
new FieldInsnNode(Opcodes.PUTFIELD, insn.owner, insn.name, insn.desc)
));
ASMAPI.log('INFO', 'The node we are patching at: { opcode: ' + insn.getOpcode() + ', name: ' + insn.getName());
ASMAPI.log('INFO', 'Successfully patched end portal.');
return method;
}
}
ASMAPI.log('ERROR', 'Unable to patch End Portal, it will not spawn properly and you will be unable to return to the overworld without cheats.');
return method;
}
}
};
}