Ex Deorum 1.5
This commit is contained in:
parent
379c470670
commit
bf450086a2
|
|
@ -5,7 +5,7 @@ plugins {
|
|||
id 'org.spongepowered.mixin' version '0.7.+'
|
||||
}
|
||||
|
||||
version = '1.3'
|
||||
version = '1.4'
|
||||
group = 'thedarkcolour.exdeorum'
|
||||
base {
|
||||
archivesName = 'exdeorum'
|
||||
|
|
|
|||
|
|
@ -1,3 +1,10 @@
|
|||
## Ex Deorum 1.4
|
||||
- Red Sand is now obtainable by hammering crushed netherrack.
|
||||
- Sieves can no longer be automated by machines (can be re-enabled in the server config.)
|
||||
- Fixed desync bug when a machine like Create's Deployer interacts with the Sieve
|
||||
- Fixed an edge case where a modded ore wouldn't appear if the item form wasn't in the ore's tag.
|
||||
- Fixed #5, which prevented automating the Crucible
|
||||
|
||||
## Ex Deorum 1.3
|
||||
- Allow modded ores to drop from sieving Gravel and Crushed Deepslate if a mod with that ore is installed. Supported ores are Aluminum, Cobalt, Silver, Lead, Platinum, Nickel, Uranium, Osmium, Tin, Zinc, and Iridium.
|
||||
- Allow some modded drops from sieving if a mod with those resources is installed. Currently, only Grains of Infinity from Ender IO is supported.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// 1.20.1 2023-09-01T15:25:16.1558751 Recipes
|
||||
// 1.20.1 2023-09-09T11:37:17.5523493 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
|
||||
|
|
@ -222,6 +222,7 @@ df7f23b00f23a5ac255345801ac88850877a2e88 data/exdeorum/recipes/hammer/fire_coral
|
|||
808203624a792fcd4a0289975d82b3bff34af90e data/exdeorum/recipes/hammer/horn_coral.json
|
||||
5ebb5a4dfa54230abcd4cdb5af34b2b296c7eb23 data/exdeorum/recipes/hammer/horn_coral_fan.json
|
||||
19c00defa531bfbaa11f19403ff9d1694a9cd04a data/exdeorum/recipes/hammer/prismarine.json
|
||||
fdc243a5cfb1e84220cf6c41f46f454b3aff8b87 data/exdeorum/recipes/hammer/red_sand.json
|
||||
b592554bc00ab20d8affdfd1627406858ac10797 data/exdeorum/recipes/hammer/sand.json
|
||||
0e879c5bcf28023efdcd257d3e12e7153bd0bef7 data/exdeorum/recipes/hammer/stone_pebbles.json
|
||||
3bf60837b935bd09248a84fd8f22968fc244ea46 data/exdeorum/recipes/hammer/tube_coral.json
|
||||
|
|
@ -564,12 +565,14 @@ da3556d43a22a00cfba29419879f8bb1c24f76e0 data/exdeorum/recipes/sieve/dust/diamon
|
|||
0087b10cc106dc6cb22a9574567faf8096fa797e data/exdeorum/recipes/sieve/dust/diamond/grains_of_infinity.json
|
||||
aacdbedc91e09191a6fc335ed82ca481d934ebc3 data/exdeorum/recipes/sieve/dust/diamond/gunpowder.json
|
||||
00907e701451521c3ca793ec337b0b2f0166e895 data/exdeorum/recipes/sieve/dust/diamond/redstone.json
|
||||
64de5902f0aaee9c844ba1316a796e10cb0aed34 data/exdeorum/recipes/sieve/dust/diamond/yellorium_dust.json
|
||||
7eba59b03b5affdc11c937060e99949db301086a data/exdeorum/recipes/sieve/dust/flint/blaze_powder.json
|
||||
7af226b5661b96e0b8ddcb8ec902d37f429b0b48 data/exdeorum/recipes/sieve/dust/flint/bone_meal.json
|
||||
0a7d44bdff5a9b7040f702cb5ff756ce231c9a60 data/exdeorum/recipes/sieve/dust/flint/glowstone_dust.json
|
||||
c418797b65a0c67841c5e99d8fec95d1ee780065 data/exdeorum/recipes/sieve/dust/flint/grains_of_infinity.json
|
||||
52c65219279d46fe5474a8a01d69a1362cb3a2ea data/exdeorum/recipes/sieve/dust/flint/gunpowder.json
|
||||
7ecd5ae5d7f6783ff7535978352190a9af1b0ab4 data/exdeorum/recipes/sieve/dust/flint/redstone.json
|
||||
34cf976c49dbd139da48e9896d700587e0ae75e1 data/exdeorum/recipes/sieve/dust/flint/yellorium_dust.json
|
||||
bdbe4b3434ff67299b47d65eab0c442b235dc654 data/exdeorum/recipes/sieve/dust/golden/blaze_powder.json
|
||||
fab2426618c3f527ed401f1ef2cee3fa81de1969 data/exdeorum/recipes/sieve/dust/golden/bone_meal.json
|
||||
9a9eb3cc996de392e75dd9c6613af1ff382615d5 data/exdeorum/recipes/sieve/dust/golden/glowstone_dust.json
|
||||
|
|
@ -578,6 +581,7 @@ c087c3ba3bd7bda74aac13435f61a998060d4872 data/exdeorum/recipes/sieve/dust/golden
|
|||
4d28a3acd946fd55c3982e5ff9bb8876b8b0baef data/exdeorum/recipes/sieve/dust/golden/gunpowder.json
|
||||
a9c9258b74162f5132b8b47f3981b071ec6b60bf data/exdeorum/recipes/sieve/dust/golden/raw_gold.json
|
||||
65c99881294536c0f59d66d0e7429d85bbec0b9b data/exdeorum/recipes/sieve/dust/golden/redstone.json
|
||||
f5e23ee85134101ff76f64b301e7cc3d86fb87e6 data/exdeorum/recipes/sieve/dust/golden/yellorium_dust.json
|
||||
4b304a265794186e3c1fbd23acfcfde57322d615 data/exdeorum/recipes/sieve/dust/iron/blaze_powder.json
|
||||
758573f460a7f2ff2104a1bbfde2fa8392d002a4 data/exdeorum/recipes/sieve/dust/iron/bone_meal.json
|
||||
e3f7f74c6e84a149282b23f0388e25c7ae5f4352 data/exdeorum/recipes/sieve/dust/iron/glowstone_dust.json
|
||||
|
|
@ -585,6 +589,7 @@ f5c25b6ee05890bdc41ddc45a14b2015665388fe data/exdeorum/recipes/sieve/dust/iron/g
|
|||
5ffc2f95fc5a52aad02e7b063ba64c4cd41836f3 data/exdeorum/recipes/sieve/dust/iron/gunpowder.json
|
||||
eeb2ec19599044971eeff5929e7238fa398f1f08 data/exdeorum/recipes/sieve/dust/iron/iron_nugget.json
|
||||
9dc82b4a79edf9561566137af39399b1621b89a0 data/exdeorum/recipes/sieve/dust/iron/redstone.json
|
||||
9fd60c04e81943398e45a95f8f301fe4ee1f6efd data/exdeorum/recipes/sieve/dust/iron/yellorium_dust.json
|
||||
55bf627cf6c3a8eca57328cb482a6f86326a8e68 data/exdeorum/recipes/sieve/dust/netherite/blaze_powder.json
|
||||
33e35a1af71274a675498234b8dcd9834368c717 data/exdeorum/recipes/sieve/dust/netherite/bone_meal.json
|
||||
0472c65dad0e35df7397dfb2a7b53c5408f5fffc data/exdeorum/recipes/sieve/dust/netherite/glowstone_dust.json
|
||||
|
|
@ -593,12 +598,14 @@ a776c6d6946a02fea8bb346860f525bde2c835de data/exdeorum/recipes/sieve/dust/nether
|
|||
2fb062f8d8be004bd5e54a43a089c579a374abb1 data/exdeorum/recipes/sieve/dust/netherite/gunpowder.json
|
||||
c6a8996009ae3e712a2895001e96c74bb35b224c data/exdeorum/recipes/sieve/dust/netherite/iron_nugget.json
|
||||
44e98c8ce40d6f72596b009398943cb3ac6ef1b5 data/exdeorum/recipes/sieve/dust/netherite/redstone.json
|
||||
20f154dc498320be8037e23b3bdc7b1c483d2f95 data/exdeorum/recipes/sieve/dust/netherite/yellorium_dust.json
|
||||
7bed9653a0d40436bd15531ffb15eb84563cfc4d data/exdeorum/recipes/sieve/dust/string/blaze_powder.json
|
||||
74dc1675b4dc9c0d1d96bc22db0b844f322082b8 data/exdeorum/recipes/sieve/dust/string/bone_meal.json
|
||||
e4ead3b21ece1d4470c2000017586c1730acd1bb data/exdeorum/recipes/sieve/dust/string/glowstone_dust.json
|
||||
91428deb05889718e458b8cd9f6d610f1e652330 data/exdeorum/recipes/sieve/dust/string/grains_of_infinity.json
|
||||
3272a1f8b4534dd8800b07b7ec826d8f7a4fae65 data/exdeorum/recipes/sieve/dust/string/gunpowder.json
|
||||
e1a8558df8270d57cbcdf7255b93b40d0c05d33b data/exdeorum/recipes/sieve/dust/string/redstone.json
|
||||
9b5162b466041d395a2428c2c944b0a450c135b6 data/exdeorum/recipes/sieve/dust/string/yellorium_dust.json
|
||||
9df7ca0a604ab01b33dfe0b342441b9705c9ac9e data/exdeorum/recipes/sieve/gravel/diamond/aluminum_ore_chunk.json
|
||||
b1b1c231670f2622dc2227fac65aff0ebbd2ea19 data/exdeorum/recipes/sieve/gravel/diamond/amethyst_shard.json
|
||||
2284efd2a38ecb63f694ba0586c478b26207adce data/exdeorum/recipes/sieve/gravel/diamond/coal.json
|
||||
|
|
@ -798,6 +805,35 @@ ee240ebb80802c83d48985d9e431bc12410589a4 data/exdeorum/recipes/sieve/moss_block/
|
|||
e5351932ff3700bf95f2ec770cd051f08debee9c data/exdeorum/recipes/sieve/moss_block/string/small_dripleaf.json
|
||||
64280db27eca51b0aa8fddc970756c1e3a25db08 data/exdeorum/recipes/sieve/moss_block/string/spore_blossom.json
|
||||
fec8737e1aba9773807c7cd582c685e4532f488d data/exdeorum/recipes/sieve/moss_block/string/spruce_sapling.json
|
||||
156f165c67999ede3087cb52cb701f0d265a4aed data/exdeorum/recipes/sieve/red_sand/diamond/cactus.json
|
||||
c96dd108668d448619c27dafa1770b8473de904f data/exdeorum/recipes/sieve/red_sand/diamond/dead_bush.json
|
||||
cb16aa3c76c75a47abdad3a42dfdb13676525851 data/exdeorum/recipes/sieve/red_sand/diamond/gold_nugget.json
|
||||
0509eae50392db7a5d04ce937a5f3973f75d9921 data/exdeorum/recipes/sieve/red_sand/diamond/raw_gold.json
|
||||
8dc85127d9bf3d2882b5551b889cbf23eb013f7a data/exdeorum/recipes/sieve/red_sand/diamond/redstone.json
|
||||
0d883ea6b876bbf69711a3ebf367c1e465b72a24 data/exdeorum/recipes/sieve/red_sand/flint/cactus.json
|
||||
404252db62319c367d0564b18c340b66e7fafa28 data/exdeorum/recipes/sieve/red_sand/flint/dead_bush.json
|
||||
a135a5cfc5d6177ece92481fd6ba2a3ae50d28ac data/exdeorum/recipes/sieve/red_sand/flint/gold_nugget.json
|
||||
eff718d36e89f82a96d9ffdc98caa5a5c33e0a2b data/exdeorum/recipes/sieve/red_sand/flint/raw_gold.json
|
||||
9f19e4c9f625de7d3490ab3feef53e4436989a91 data/exdeorum/recipes/sieve/red_sand/flint/redstone.json
|
||||
bdd32c9a8b3fa2f379ad71289bb52b4ef68c0577 data/exdeorum/recipes/sieve/red_sand/golden/cactus.json
|
||||
6281aadf6936c3160d0e261bf1a248ebc86c7f7e data/exdeorum/recipes/sieve/red_sand/golden/dead_bush.json
|
||||
d2329615e5d3a674ff162901518bf91043c4b2bc data/exdeorum/recipes/sieve/red_sand/golden/gold_nugget.json
|
||||
238130e1482e64676b0b45a48e261bf6443fec9f data/exdeorum/recipes/sieve/red_sand/golden/raw_gold.json
|
||||
e836570ca27341f19df56ffe342957ba54fb5e38 data/exdeorum/recipes/sieve/red_sand/golden/redstone.json
|
||||
85c37a8ea69278436f5b354a098fa8dd93a269cb data/exdeorum/recipes/sieve/red_sand/iron/cactus.json
|
||||
e301aa1a48bbb0cba03d0efd4162c4ea27bcd735 data/exdeorum/recipes/sieve/red_sand/iron/dead_bush.json
|
||||
e7890d925decdcd1972508026943b52507ba6ce1 data/exdeorum/recipes/sieve/red_sand/iron/gold_nugget.json
|
||||
ad592d67fba2ae9554f7425d88c13ec106e6e08a data/exdeorum/recipes/sieve/red_sand/iron/raw_gold.json
|
||||
1b82c029f28894e2eee7ab8effca14e745dab1d5 data/exdeorum/recipes/sieve/red_sand/iron/redstone.json
|
||||
a9aa1611d994d1b3f6c4a9bbb6865d8998521a48 data/exdeorum/recipes/sieve/red_sand/netherite/cactus.json
|
||||
1294a1825ceb652ffdb1aac352a20886e4ee162c data/exdeorum/recipes/sieve/red_sand/netherite/gold_nugget.json
|
||||
f31cb4bb77b550f1239f7853ebc95f9671c0a356 data/exdeorum/recipes/sieve/red_sand/netherite/raw_gold.json
|
||||
09bfe3d4ca5ba25fe268ef680f7e1af24bf06da0 data/exdeorum/recipes/sieve/red_sand/netherite/redstone.json
|
||||
0bbec585a6a89b7eb128c2f9475e0ae4c325852f data/exdeorum/recipes/sieve/red_sand/string/cactus.json
|
||||
54b7248def54580a7e88cf538a52e721b1c872d1 data/exdeorum/recipes/sieve/red_sand/string/dead_bush.json
|
||||
b443cbaf342f0fa3a6a88d7205644792bcb47093 data/exdeorum/recipes/sieve/red_sand/string/gold_nugget.json
|
||||
e1c550f09fcddcc09da0f76458f2d2ef429bcc44 data/exdeorum/recipes/sieve/red_sand/string/raw_gold.json
|
||||
5c3788fbc13f9a25dd7e42b27210f258ec337c02 data/exdeorum/recipes/sieve/red_sand/string/redstone.json
|
||||
c63500f17bbac4d47caac5a48f3cedfe750916a5 data/exdeorum/recipes/sieve/sand/diamond/flint.json
|
||||
3b0c8920c2c19e3731e0258bd005b4d2cc2bd5ab data/exdeorum/recipes/sieve/sand/diamond/gold_nugget.json
|
||||
286085cb6ec9ed4d3fb2e84fc19887019dbe2d02 data/exdeorum/recipes/sieve/sand/diamond/iron_nugget.json
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ import net.minecraft.world.item.Items;
|
|||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.SaplingBlock;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityTicker;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
|
@ -121,7 +120,7 @@ public abstract class AbstractCrucibleBlockEntity extends EBlockEntity {
|
|||
return FluidUtil.interactWithFluidHandler(player, hand, tank) ? InteractionResult.sidedSuccess(level.isClientSide) : InteractionResult.PASS;
|
||||
}
|
||||
|
||||
if (!level.isClientSide) {
|
||||
if (!level.isClientSide && canInsertItem(playerItem)) {
|
||||
tryMelt(playerItem, player.getAbilities().instabuild ? stack -> {} : stack -> stack.shrink(1));
|
||||
}
|
||||
|
||||
|
|
@ -138,36 +137,51 @@ public abstract class AbstractCrucibleBlockEntity extends EBlockEntity {
|
|||
* @param shrinkAction What to do when item is melted
|
||||
*/
|
||||
private void tryMelt(ItemStack item, Consumer<ItemStack> shrinkAction) {
|
||||
CrucibleRecipe recipe = getRecipe(item);
|
||||
if (item.isEmpty()) return;
|
||||
|
||||
if (recipe != null) {
|
||||
FluidStack result = recipe.getResult();
|
||||
FluidStack contained = tank.getFluid();
|
||||
var meltItem = item.getItem();
|
||||
var recipe = getRecipe(item);
|
||||
if (recipe == null) {
|
||||
this.item.setStackInSlot(0, ItemStack.EMPTY);
|
||||
return;
|
||||
}
|
||||
var result = recipe.getResult();
|
||||
var contained = this.tank.getFluid();
|
||||
shrinkAction.accept(item);
|
||||
this.solids = (short) Math.max(solids + result.getAmount(), MAX_SOLIDS);
|
||||
|
||||
if (((result.isFluidEqual(contained) || contained.isEmpty()) && result.getAmount() + solids <= MAX_SOLIDS)) {
|
||||
var meltItem = item.getItem();
|
||||
shrinkAction.accept(item);
|
||||
solids += result.getAmount();
|
||||
if (contained.isEmpty()) {
|
||||
fluid = result.getFluid();
|
||||
}
|
||||
|
||||
if (contained.isEmpty()) {
|
||||
fluid = result.getFluid();
|
||||
}
|
||||
|
||||
var melts = MELT_OVERRIDES.get();
|
||||
if (melts.containsKey(meltItem)) {
|
||||
lastMelted = melts.get(meltItem);
|
||||
} else if (meltItem.getClass() == BlockItem.class) {
|
||||
lastMelted = ((BlockItem) meltItem).getBlock();
|
||||
} else {
|
||||
// If we already have something else inside just use that instead of switching to default
|
||||
if (lastMelted == null) {
|
||||
lastMelted = getDefaultMeltBlock();
|
||||
}
|
||||
}
|
||||
|
||||
markUpdated();
|
||||
var melts = MELT_OVERRIDES.get();
|
||||
if (melts.containsKey(meltItem)) {
|
||||
lastMelted = melts.get(meltItem);
|
||||
} else if (meltItem.getClass() == BlockItem.class) {
|
||||
lastMelted = ((BlockItem) meltItem).getBlock();
|
||||
} else {
|
||||
// If we already have something else inside just use that instead of switching to default
|
||||
if (lastMelted == null) {
|
||||
lastMelted = getDefaultMeltBlock();
|
||||
}
|
||||
}
|
||||
|
||||
markUpdated();
|
||||
}
|
||||
|
||||
private boolean canInsertItem(ItemStack item) {
|
||||
if (item.isEmpty()) return false;
|
||||
|
||||
var recipe = getRecipe(item);
|
||||
|
||||
if (recipe != null) {
|
||||
var result = recipe.getResult();
|
||||
var contained = tank.getFluid();
|
||||
|
||||
return (result.isFluidEqual(contained) || contained.isEmpty()) && result.getAmount() + solids <= MAX_SOLIDS;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getMeltingRate() {
|
||||
|
|
@ -250,7 +264,7 @@ public abstract class AbstractCrucibleBlockEntity extends EBlockEntity {
|
|||
|
||||
@Override
|
||||
public boolean isItemValid(int slot, @Nonnull ItemStack stack) {
|
||||
return getRecipe(stack) != null;
|
||||
return canInsertItem(stack);
|
||||
}
|
||||
|
||||
public ItemStack getItem() {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import net.minecraft.world.level.Level;
|
|||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.storage.loot.LootContext;
|
||||
import net.minecraft.world.level.storage.loot.LootParams;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
import thedarkcolour.exdeorum.config.EConfig;
|
||||
import thedarkcolour.exdeorum.recipe.RecipeUtil;
|
||||
import thedarkcolour.exdeorum.recipe.sieve.SieveRecipe;
|
||||
|
|
@ -147,7 +148,9 @@ public class SieveBlockEntity extends EBlockEntity {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if (EConfig.SERVER.simultaneousSieveUsage.get()) {
|
||||
var realPlayer = !(player instanceof FakePlayer);
|
||||
|
||||
if (realPlayer && EConfig.SERVER.simultaneousSieveUsage.get()) {
|
||||
var cursor = worldPosition.mutable().move(-1, 0, -1);
|
||||
|
||||
// Sieve with adjacent sieves
|
||||
|
|
@ -165,7 +168,7 @@ public class SieveBlockEntity extends EBlockEntity {
|
|||
}
|
||||
cursor.move(1, 0, -3);
|
||||
}
|
||||
} else {
|
||||
} else if (realPlayer || EConfig.SERVER.automatedSieves.get()) {
|
||||
performSift(player);
|
||||
}
|
||||
}
|
||||
|
|
@ -211,6 +214,8 @@ public class SieveBlockEntity extends EBlockEntity {
|
|||
if (!level.isClientSide) {
|
||||
giveItems(player);
|
||||
}
|
||||
} else {
|
||||
markUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -39,10 +39,9 @@ public class InfestedLeavesRenderer implements BlockEntityRenderer<InfestedLeave
|
|||
// Default to oak leaves
|
||||
if (state == null) state = Blocks.OAK_LEAVES.defaultBlockState();
|
||||
|
||||
// If something is wrong render default leaves
|
||||
// If something is wrong skip rendering
|
||||
var level = te.getLevel();
|
||||
if (level == null) {
|
||||
Minecraft.getInstance().getBlockRenderer().renderSingleBlock(state, stack, buffer, light, unused, ModelData.EMPTY, null);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -50,7 +49,6 @@ public class InfestedLeavesRenderer implements BlockEntityRenderer<InfestedLeave
|
|||
int progress = Math.min((int) (te.getProgress() * 16000), 16000);
|
||||
// Render
|
||||
var model = mc.getBlockRenderer().getBlockModel(state);
|
||||
//noinspection deprecation
|
||||
mc.getBlockRenderer().getModelRenderer().tesselateBlock(level, model, state, te.getBlockPos(), stack, buffer.getBuffer(RenderUtil.TINTED_CUTOUT_MIPPED), false, level.random, 42L, progress);
|
||||
mc.getBlockRenderer().getModelRenderer().tesselateBlock(level, model, state, te.getBlockPos(), stack, buffer.getBuffer(RenderUtil.TINTED_CUTOUT_MIPPED), false, level.random, 42L, progress, ModelData.EMPTY, null);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,8 @@ public class ModIds {
|
|||
public static final String OCCULTISM = "occultism";
|
||||
public static final String RAILCRAFT = "railcraft";
|
||||
public static final String GREG = "gtceu";
|
||||
public static final String BIG_REACTORS = "bigreactors";
|
||||
public static final String BIGGER_REACTORS = "biggerreactors";
|
||||
public static final String EXTREME_REACTORS = "bigreactors";
|
||||
public static final String MEKANISM = "mekanism";
|
||||
public static final String CREATE = "create";
|
||||
public static final String ENDERIO = "enderio";
|
||||
|
|
|
|||
|
|
@ -98,10 +98,10 @@ public class ModdedTags {
|
|||
}
|
||||
|
||||
public static Item getDefaultUraniumOre() {
|
||||
var item = defaultItem("uranium_ore", ModIds.ALL_THE_ORES, ModIds.MEKANISM);
|
||||
var item = defaultItem("uranium_ore", ModIds.ALL_THE_ORES, ModIds.MEKANISM, ModIds.BIGGER_REACTORS);
|
||||
|
||||
if (item == Items.AIR && ModList.get().isLoaded(ModIds.BIG_REACTORS)) {
|
||||
item = defaultItem("yellorite_ore", ModIds.BIG_REACTORS);
|
||||
if (item == Items.AIR && ModList.get().isLoaded(ModIds.EXTREME_REACTORS)) {
|
||||
item = defaultItem("yellorite_ore", ModIds.EXTREME_REACTORS);
|
||||
}
|
||||
|
||||
return item;
|
||||
|
|
|
|||
|
|
@ -74,6 +74,9 @@ public class ExDeorumInfoProvider implements IProbeInfoProvider {
|
|||
} else if (te instanceof AbstractCrucibleBlockEntity crucible) {
|
||||
info.text(CompoundText.create().style(TextStyleClass.LABEL).text("Rate: ").style(TextStyleClass.WARNING).text(crucible.getMeltingRate() + "x"));
|
||||
} else if (te instanceof SieveBlockEntity sieve) {
|
||||
if (!sieve.getContents().isEmpty()) {
|
||||
info.text(CompoundText.create().style(TextStyleClass.LABEL).text("Progress: ").style(TextStyleClass.WARNING).text((100 - sieve.getProgress()) + "%"));
|
||||
}
|
||||
if (playerEntity.isShiftKeyDown()) {
|
||||
var mesh = sieve.getMesh();
|
||||
info.horizontal(info.defaultLayoutStyle().spacing(10).alignment(ElementAlignment.ALIGN_CENTER))
|
||||
|
|
|
|||
|
|
@ -97,6 +97,7 @@ public class EConfig {
|
|||
public final BooleanValue startingTorch;
|
||||
public final BooleanValue startingWateringCan;
|
||||
public final BooleanValue simultaneousSieveUsage;
|
||||
public final BooleanValue automatedSieves;
|
||||
public final DoubleValue barrelProgressStep;
|
||||
public final BooleanValue witchWaterNetherrackGenerator;
|
||||
public final BooleanValue setVoidWorldAsDefault;
|
||||
|
|
@ -113,6 +114,9 @@ public class EConfig {
|
|||
this.simultaneousSieveUsage = builder
|
||||
.comment("Whether players can use multiple sieves in a 3x3 area at once.")
|
||||
.define("simultaneous_sieve_usage", true);
|
||||
this.automatedSieves = builder
|
||||
.comment("Whether machines/fake players can interact with the Sieve.")
|
||||
.define("automated_sieves", false);
|
||||
this.barrelProgressStep = builder
|
||||
.comment("The progress to increment by each tick for barrel composting and witch water transformation.")
|
||||
.defineInRange("barrel_progress_step", 0.004, 0.0f, 1.0f);
|
||||
|
|
|
|||
|
|
@ -19,13 +19,12 @@
|
|||
package thedarkcolour.exdeorum.data;
|
||||
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.data.DataGenerator;
|
||||
import net.minecraftforge.data.event.GatherDataEvent;
|
||||
import net.minecraftforge.data.loading.DatagenModLoader;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.ModLoader;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import thedarkcolour.exdeorum.ExDeorum;
|
||||
import thedarkcolour.exdeorum.data.recipe.Recipes;
|
||||
import thedarkcolour.modkit.data.DataHelper;
|
||||
|
||||
// these two annotations are equivalent to modEventBus.addListener(Data::generateData)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package thedarkcolour.exdeorum.data;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
|
|
@ -11,9 +10,11 @@ import thedarkcolour.exdeorum.compat.ModIds;
|
|||
// registers dummy items so that data generation can reference modded items without needing those mods installed.
|
||||
public class ModCompatData {
|
||||
public static RegistryObject<Item> GRAINS_OF_INFINITY = null;
|
||||
public static RegistryObject<Item> YELLORITE_DUST = null;
|
||||
|
||||
public static void registerModData() {
|
||||
registerEnderIO();
|
||||
registerExtremeReactors();
|
||||
}
|
||||
|
||||
private static void registerEnderIO() {
|
||||
|
|
@ -22,4 +23,11 @@ public class ModCompatData {
|
|||
|
||||
GRAINS_OF_INFINITY = deferredRegister.register("grains_of_infinity", () -> new Item(new Item.Properties()));
|
||||
}
|
||||
|
||||
private static void registerExtremeReactors() {
|
||||
var deferredRegister = DeferredRegister.create(ForgeRegistries.ITEMS, ModIds.BIGGER_REACTORS);
|
||||
deferredRegister.register(FMLJavaModLoadingContext.get().getModEventBus());
|
||||
|
||||
YELLORITE_DUST = deferredRegister.register("yellorium_dust", () -> new Item(new Item.Properties()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
457
src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java
Normal file
457
src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java
Normal file
|
|
@ -0,0 +1,457 @@
|
|||
/*
|
||||
* Ex Deorum
|
||||
* Copyright (c) 2023 thedarkcolour
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package thedarkcolour.exdeorum.data.recipe;
|
||||
|
||||
import net.minecraft.data.recipes.FinishedRecipe;
|
||||
import net.minecraft.data.recipes.RecipeCategory;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.level.ItemLike;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import net.minecraft.world.level.material.Fluids;
|
||||
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.registries.RegistryObject;
|
||||
import org.apache.commons.lang3.mutable.MutableObject;
|
||||
import thedarkcolour.exdeorum.ExDeorum;
|
||||
import thedarkcolour.exdeorum.recipe.TagResultRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.barrel.FinishedBarrelCompostRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.barrel.FinishedBarrelMixingRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.crucible.FinishedCrucibleRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.hammer.FinishedHammerRecipe;
|
||||
import thedarkcolour.exdeorum.registry.EBlocks;
|
||||
import thedarkcolour.exdeorum.registry.EFluids;
|
||||
import thedarkcolour.exdeorum.registry.EItems;
|
||||
import thedarkcolour.exdeorum.registry.ERecipeSerializers;
|
||||
import thedarkcolour.exdeorum.tag.EItemTags;
|
||||
import thedarkcolour.modkit.data.MKRecipeProvider;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import static net.minecraft.world.level.storage.loot.providers.number.UniformGenerator.between;
|
||||
import static thedarkcolour.modkit.data.MKRecipeProvider.ingredient;
|
||||
import static thedarkcolour.modkit.data.MKRecipeProvider.path;
|
||||
|
||||
public class Recipes {
|
||||
private static final Ingredient SPORES_AND_SEEDS = ingredient(EItems.GRASS_SEEDS, EItems.MYCELIUM_SPORES, EItems.WARPED_NYLIUM_SPORES, EItems.CRIMSON_NYLIUM_SPORES);
|
||||
public static void addRecipes(Consumer<FinishedRecipe> writer, MKRecipeProvider recipes) {
|
||||
craftingRecipes(writer, recipes);
|
||||
smeltingRecipes(recipes);
|
||||
SieveRecipes.sieveRecipes(writer);
|
||||
crucibleRecipes(writer);
|
||||
hammerRecipes(writer);
|
||||
barrelCompostRecipes(writer);
|
||||
barrelMixingRecipes(writer);
|
||||
}
|
||||
|
||||
private static void craftingRecipes(Consumer<FinishedRecipe> writer, MKRecipeProvider recipes) {
|
||||
// Crooks
|
||||
shapedCrook(recipes, EItems.CROOK, ingredient(Tags.Items.RODS_WOODEN));
|
||||
shapedCrook(recipes, EItems.BONE_CROOK, ingredient(Items.BONE));
|
||||
|
||||
// Hammers
|
||||
shapedHammer(recipes, EItems.WOODEN_HAMMER, ingredient(ItemTags.PLANKS));
|
||||
shapedHammer(recipes, EItems.STONE_HAMMER, ingredient(ItemTags.STONE_CRAFTING_MATERIALS));
|
||||
shapedHammer(recipes, EItems.GOLDEN_HAMMER, ingredient(Tags.Items.INGOTS_GOLD));
|
||||
shapedHammer(recipes, EItems.IRON_HAMMER, ingredient(Tags.Items.INGOTS_IRON));
|
||||
shapedHammer(recipes, EItems.DIAMOND_HAMMER, ingredient(Tags.Items.GEMS_DIAMOND));
|
||||
recipes.netheriteUpgrade(RecipeCategory.TOOLS, ingredient(EItems.DIAMOND_HAMMER.get()), EItems.NETHERITE_HAMMER.get());
|
||||
|
||||
// Crucibles
|
||||
uShaped(recipes, EItems.OAK_CRUCIBLE, ingredient(Items.OAK_LOG), ingredient(Items.OAK_SLAB));
|
||||
uShaped(recipes, EItems.SPRUCE_CRUCIBLE, ingredient(Items.SPRUCE_LOG), ingredient(Items.SPRUCE_SLAB));
|
||||
uShaped(recipes, EItems.BIRCH_CRUCIBLE, ingredient(Items.BIRCH_LOG), ingredient(Items.BIRCH_SLAB));
|
||||
uShaped(recipes, EItems.JUNGLE_CRUCIBLE, ingredient(Items.JUNGLE_LOG), ingredient(Items.JUNGLE_SLAB));
|
||||
uShaped(recipes, EItems.ACACIA_CRUCIBLE, ingredient(Items.ACACIA_LOG), ingredient(Items.ACACIA_SLAB));
|
||||
uShaped(recipes, EItems.DARK_OAK_CRUCIBLE, ingredient(Items.DARK_OAK_LOG), ingredient(Items.DARK_OAK_SLAB));
|
||||
uShaped(recipes, EItems.MANGROVE_CRUCIBLE, ingredient(Items.MANGROVE_LOG), ingredient(Items.MANGROVE_SLAB));
|
||||
uShaped(recipes, EItems.CHERRY_CRUCIBLE, ingredient(Items.CHERRY_LOG), ingredient(Items.CHERRY_SLAB));
|
||||
uShaped(recipes, EItems.BAMBOO_CRUCIBLE, ingredient(Items.BAMBOO_BLOCK), ingredient(Items.BAMBOO_SLAB));
|
||||
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()));
|
||||
|
||||
// Barrels
|
||||
uShaped(recipes, EItems.OAK_BARREL, ingredient(Items.OAK_PLANKS), ingredient(Items.OAK_SLAB));
|
||||
uShaped(recipes, EItems.SPRUCE_BARREL, ingredient(Items.SPRUCE_PLANKS), ingredient(Items.SPRUCE_SLAB));
|
||||
uShaped(recipes, EItems.BIRCH_BARREL, ingredient(Items.BIRCH_PLANKS), ingredient(Items.BIRCH_SLAB));
|
||||
uShaped(recipes, EItems.JUNGLE_BARREL, ingredient(Items.JUNGLE_PLANKS), ingredient(Items.JUNGLE_SLAB));
|
||||
uShaped(recipes, EItems.ACACIA_BARREL, ingredient(Items.ACACIA_PLANKS), ingredient(Items.ACACIA_SLAB));
|
||||
uShaped(recipes, EItems.DARK_OAK_BARREL, ingredient(Items.DARK_OAK_PLANKS), ingredient(Items.DARK_OAK_SLAB));
|
||||
uShaped(recipes, EItems.MANGROVE_BARREL, ingredient(Items.MANGROVE_PLANKS), ingredient(Items.MANGROVE_SLAB));
|
||||
uShaped(recipes, EItems.CHERRY_BARREL, ingredient(Items.CHERRY_PLANKS), ingredient(Items.CHERRY_SLAB));
|
||||
uShaped(recipes, EItems.BAMBOO_BARREL, ingredient(Items.BAMBOO_PLANKS), ingredient(Items.BAMBOO_SLAB));
|
||||
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));
|
||||
|
||||
// Pebbles and ore chunks
|
||||
recipes.grid2x2(Items.COBBLESTONE, ingredient(EItems.STONE_PEBBLE));
|
||||
recipes.grid2x2(Items.ANDESITE, ingredient(EItems.ANDESITE_PEBBLE));
|
||||
recipes.grid2x2(Items.DIORITE, ingredient(EItems.DIORITE_PEBBLE));
|
||||
recipes.grid2x2(Items.GRANITE, ingredient(EItems.GRANITE_PEBBLE));
|
||||
recipes.grid2x2(Items.COBBLED_DEEPSLATE, ingredient(EItems.DEEPSLATE_PEBBLE));
|
||||
recipes.grid2x2(Items.TUFF, ingredient(EItems.TUFF_PEBBLE));
|
||||
recipes.grid2x2(Items.CALCITE, ingredient(EItems.CALCITE_PEBBLE));
|
||||
recipes.grid2x2(Items.BLACKSTONE, ingredient(EItems.BLACKSTONE_PEBBLE));
|
||||
recipes.grid2x2(Items.BASALT, ingredient(EItems.BASALT_PEBBLE));
|
||||
recipes.grid2x2(Items.IRON_ORE, ingredient(EItems.IRON_ORE_CHUNK));
|
||||
recipes.grid2x2(Items.GOLD_ORE, ingredient(EItems.GOLD_ORE_CHUNK));
|
||||
recipes.grid2x2(Items.COPPER_ORE, ingredient(EItems.COPPER_ORE_CHUNK));
|
||||
recipes.grid2x2(Items.MOSS_BLOCK, ingredient(EItems.GRASS_SEEDS));
|
||||
|
||||
// Modded ores
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_ALUMINUM, ingredient(EItems.ALUMINUM_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_COBALT, ingredient(EItems.COBALT_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_SILVER, ingredient(EItems.SILVER_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_LEAD, ingredient(EItems.LEAD_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_PLATINUM, ingredient(EItems.PLATINUM_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_NICKEL, ingredient(EItems.NICKEL_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_URANIUM, ingredient(EItems.URANIUM_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_OSMIUM, ingredient(EItems.OSMIUM_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_TIN, ingredient(EItems.TIN_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_ZINC, ingredient(EItems.ZINC_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_IRIDIUM, ingredient(EItems.IRIDIUM_ORE_CHUNK));
|
||||
|
||||
// Sieves
|
||||
sieve(recipes, EItems.OAK_SIEVE, Items.OAK_PLANKS, Items.OAK_SLAB);
|
||||
sieve(recipes, EItems.SPRUCE_SIEVE, Items.SPRUCE_PLANKS, Items.SPRUCE_SLAB);
|
||||
sieve(recipes, EItems.BIRCH_SIEVE, Items.BIRCH_PLANKS, Items.BIRCH_SLAB);
|
||||
sieve(recipes, EItems.JUNGLE_SIEVE, Items.JUNGLE_PLANKS, Items.JUNGLE_SLAB);
|
||||
sieve(recipes, EItems.ACACIA_SIEVE, Items.ACACIA_PLANKS, Items.ACACIA_SLAB);
|
||||
sieve(recipes, EItems.DARK_OAK_SIEVE, Items.DARK_OAK_PLANKS, Items.DARK_OAK_SLAB);
|
||||
sieve(recipes, EItems.MANGROVE_SIEVE, Items.MANGROVE_PLANKS, Items.MANGROVE_SLAB);
|
||||
sieve(recipes, EItems.CHERRY_SIEVE, Items.CHERRY_PLANKS, Items.CHERRY_SLAB);
|
||||
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);
|
||||
|
||||
// Meshes
|
||||
recipes.grid3x3(EItems.STRING_MESH.get(), ingredient(Tags.Items.STRING));
|
||||
mesh(recipes, EItems.FLINT_MESH.get(), ingredient(Items.FLINT));
|
||||
mesh(recipes, EItems.IRON_MESH.get(), ingredient(Tags.Items.INGOTS_IRON));
|
||||
mesh(recipes, EItems.GOLDEN_MESH.get(), ingredient(Tags.Items.INGOTS_GOLD));
|
||||
mesh(recipes, EItems.DIAMOND_MESH.get(), ingredient(Tags.Items.GEMS_DIAMOND));
|
||||
recipes.netheriteUpgrade(RecipeCategory.MISC, ingredient(EItems.DIAMOND_MESH), EItems.NETHERITE_MESH.get());
|
||||
|
||||
// Watering cans
|
||||
wateringCan(recipes, EItems.WOODEN_WATERING_CAN, ingredient(ItemTags.PLANKS));
|
||||
wateringCan(recipes, EItems.STONE_WATERING_CAN, ingredient(ItemTags.STONE_TOOL_MATERIALS));
|
||||
wateringCan(recipes, EItems.IRON_WATERING_CAN, ingredient(Tags.Items.INGOTS_IRON));
|
||||
wateringCan(recipes, EItems.GOLDEN_WATERING_CAN, ingredient(Tags.Items.INGOTS_GOLD));
|
||||
wateringCan(recipes, EItems.DIAMOND_WATERING_CAN, ingredient(Tags.Items.GEMS_DIAMOND));
|
||||
recipes.netheriteUpgrade(RecipeCategory.TOOLS, ingredient(EItems.DIAMOND_WATERING_CAN), EItems.NETHERITE_WATERING_CAN.get());
|
||||
|
||||
// misc
|
||||
recipes.shapelessCrafting(RecipeCategory.MISC, new ItemStack(EItems.PORCELAIN_CLAY_BALL.get()), ingredient(Items.CLAY_BALL), ingredient(Items.BONE_MEAL));
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, EItems.UNFIRED_PORCELAIN_BUCKET.get(), recipe -> {
|
||||
recipe.define('#', EItems.PORCELAIN_CLAY_BALL);
|
||||
recipe.pattern("# #");
|
||||
recipe.pattern(" # ");
|
||||
});
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, EItems.SCULK_CORE.get(), recipe -> {
|
||||
recipe.define('#', Items.ECHO_SHARD);
|
||||
recipe.define('O', Items.ENDER_PEARL);
|
||||
recipe.pattern(" # ");
|
||||
recipe.pattern("#O#");
|
||||
recipe.pattern(" # ");
|
||||
});
|
||||
recipes.shapedCrafting(RecipeCategory.FOOD, EItems.END_CAKE.get(), recipe -> {
|
||||
recipe.define('P', Items.ENDER_EYE);
|
||||
recipe.define('S', Items.SUGAR);
|
||||
recipe.define('E', Tags.Items.EGGS);
|
||||
recipe.define('C', EItems.CRUSHED_END_STONE);
|
||||
recipe.pattern("PPP");
|
||||
recipe.pattern("SES");
|
||||
recipe.pattern("CCC");
|
||||
});
|
||||
}
|
||||
|
||||
private static void grid2x2TagResult(Consumer<FinishedRecipe> writer, MKRecipeProvider recipes, TagKey<Item> resultTag, Ingredient ingredient) {
|
||||
var ref = new MutableObject<FinishedRecipe>();
|
||||
recipes.pushWriter(ref::setValue, newWriter -> {
|
||||
recipes.shapedCrafting(resultTag.location().getPath() + "_tag", RecipeCategory.MISC, Items.AIR, recipe -> {
|
||||
recipe.define('#', ingredient);
|
||||
recipe.pattern("##");
|
||||
recipe.pattern("##");
|
||||
});
|
||||
});
|
||||
writer.accept(new TagResultRecipe.Finished(resultTag, ref.getValue()));
|
||||
}
|
||||
|
||||
private static void shapedCrook(MKRecipeProvider recipes, RegistryObject<? extends Item> crook, Ingredient stick) {
|
||||
recipes.shapedCrafting(RecipeCategory.TOOLS, crook.get(), recipe -> {
|
||||
recipe.define('x', stick);
|
||||
recipe.pattern("xx");
|
||||
recipe.pattern(" x");
|
||||
recipe.pattern(" x");
|
||||
});
|
||||
}
|
||||
|
||||
private static void shapedHammer(MKRecipeProvider recipes, RegistryObject<? extends Item> hammer, Ingredient material) {
|
||||
recipes.shapedCrafting(RecipeCategory.TOOLS, hammer.get(), recipe -> {
|
||||
recipe.define('m', material);
|
||||
recipe.define('s', Tags.Items.RODS_WOODEN);
|
||||
recipe.pattern(" m ");
|
||||
recipe.pattern(" sm");
|
||||
recipe.pattern("s ");
|
||||
});
|
||||
}
|
||||
|
||||
private static void uShaped(MKRecipeProvider recipes, RegistryObject<? extends Item> result, Ingredient sides, Ingredient middle) {
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, result.get(), recipe -> {
|
||||
recipe.define('s', sides);
|
||||
recipe.define('m', middle);
|
||||
recipe.pattern("s s");
|
||||
recipe.pattern("s s");
|
||||
recipe.pattern("sms");
|
||||
});
|
||||
}
|
||||
|
||||
private static void sieve(MKRecipeProvider recipes, Supplier<? extends Item> result, Item planks, Item slab) {
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, result.get(), recipe -> {
|
||||
recipe.define('O', planks);
|
||||
recipe.define('_', slab);
|
||||
recipe.define('I', Tags.Items.RODS_WOODEN);
|
||||
recipe.pattern("O O");
|
||||
recipe.pattern("O_O");
|
||||
recipe.pattern("I I");
|
||||
});
|
||||
}
|
||||
|
||||
private static void mesh(MKRecipeProvider recipes, Item result, Ingredient ingredient) {
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, result, recipe -> {
|
||||
recipe.define('#', ingredient);
|
||||
recipe.define('S', ingredient(Tags.Items.STRING));
|
||||
recipe.pattern("S#S");
|
||||
recipe.pattern("#S#");
|
||||
recipe.pattern("S#S");
|
||||
});
|
||||
}
|
||||
|
||||
private static void wateringCan(MKRecipeProvider recipes, Supplier<? extends Item> result, Ingredient shell) {
|
||||
recipes.shapedCrafting(RecipeCategory.TOOLS, result.get(), recipe -> {
|
||||
recipe.define('#', shell);
|
||||
recipe.define('B', Items.BOWL);
|
||||
recipe.pattern("# ");
|
||||
recipe.pattern("#B#");
|
||||
recipe.pattern(" # ");
|
||||
});
|
||||
}
|
||||
|
||||
private static void smeltingRecipes(MKRecipeProvider recipes) {
|
||||
recipes.smelting(ingredient(EItems.UNFIRED_PORCELAIN_CRUCIBLE), EItems.PORCELAIN_CRUCIBLE.get(), 0.1f);
|
||||
recipes.smelting(ingredient(EItems.UNFIRED_PORCELAIN_BUCKET), EItems.PORCELAIN_BUCKET.get(), 0.1f);
|
||||
|
||||
recipes.foodCooking(EItems.SILK_WORM.get(), EItems.COOKED_SILK_WORM.get(), 0.1f);
|
||||
}
|
||||
private static void crucibleRecipes(Consumer<FinishedRecipe> writer) {
|
||||
lavaCrucible(writer, "cobblestone", ingredient(Tags.Items.COBBLESTONE), 250);
|
||||
lavaCrucible(writer, "stone", ingredient(Tags.Items.STONE), 250);
|
||||
lavaCrucible(writer, "gravel", ingredient(Tags.Items.GRAVEL), 250);
|
||||
lavaCrucible(writer, "netherrack", ingredient(Tags.Items.NETHERRACK), 500);
|
||||
|
||||
waterCrucible(writer, "saplings", ingredient(ItemTags.SAPLINGS), 100);
|
||||
waterCrucible(writer, "leaves", ingredient(ItemTags.LEAVES), 250);
|
||||
waterCrucible(writer, "small_flowers", ingredient(ItemTags.SMALL_FLOWERS), 100);
|
||||
waterCrucible(writer, "tall_flowers", ingredient(ItemTags.TALL_FLOWERS), 200);
|
||||
waterCrucible(writer, "mushrooms", ingredient(Tags.Items.MUSHROOMS), 100);
|
||||
waterCrucible(writer, "lily_pad", ingredient(Items.LILY_PAD), 150);
|
||||
waterCrucible(writer, "sugar_cane", ingredient(Items.SUGAR_CANE), 100);
|
||||
waterCrucible(writer, "vine", ingredient(Items.VINE), 100);
|
||||
waterCrucible(writer, "seeds_and_spores", SPORES_AND_SEEDS, 50);
|
||||
waterCrucible(writer, "seeds", ingredient(Tags.Items.SEEDS), 50);
|
||||
waterCrucible(writer, "grass", ingredient(Items.GRASS, Items.TALL_GRASS), 100);
|
||||
waterCrucible(writer, "grass_block", ingredient(Items.GRASS_BLOCK), 150);
|
||||
waterCrucible(writer, "sweet_berries", ingredient(Items.SWEET_BERRIES, Items.GLOW_BERRIES), 50);
|
||||
waterCrucible(writer, "melon_slice", ingredient(Items.MELON_SLICE), 50);
|
||||
waterCrucible(writer, "potato", ingredient(Items.POTATO), 100);
|
||||
waterCrucible(writer, "carrot", ingredient(Items.CARROT), 100);
|
||||
waterCrucible(writer, "beetroot", ingredient(Items.BEETROOT), 100);
|
||||
waterCrucible(writer, "apple", ingredient(Items.APPLE), 100);
|
||||
waterCrucible(writer, "cactus", ingredient(Items.CACTUS), 250);
|
||||
waterCrucible(writer, "pumpkin", ingredient(Items.PUMPKIN), 250);
|
||||
waterCrucible(writer, "melon", ingredient(Items.MELON), 250);
|
||||
waterCrucible(writer, "seagrass", ingredient(Items.SEAGRASS), 100);
|
||||
waterCrucible(writer, "sea_pickle", ingredient(Items.SEA_PICKLE), 200);
|
||||
waterCrucible(writer, "moss", ingredient(Items.MOSS_BLOCK), 150);
|
||||
waterCrucible(writer, "moss_carpet", ingredient(Items.MOSS_CARPET), 100);
|
||||
waterCrucible(writer, "spore_blossom", ingredient(Items.SPORE_BLOSSOM), 150);
|
||||
}
|
||||
|
||||
private static void lavaCrucible(Consumer<FinishedRecipe> writer, String id, Ingredient ingredient, int volume) {
|
||||
writer.accept(new FinishedCrucibleRecipe(new ResourceLocation(ExDeorum.ID, "lava_crucible/" + id), ERecipeSerializers.LAVA_CRUCIBLE.get(), ingredient, Fluids.LAVA, volume));
|
||||
}
|
||||
|
||||
private static void waterCrucible(Consumer<FinishedRecipe> writer, String id, Ingredient ingredient, int volume) {
|
||||
writer.accept(new FinishedCrucibleRecipe(new ResourceLocation(ExDeorum.ID, "water_crucible/" + id), ERecipeSerializers.WATER_CRUCIBLE.get(), ingredient, Fluids.WATER, volume));
|
||||
}
|
||||
|
||||
private static void hammerRecipes(Consumer<FinishedRecipe> writer) {
|
||||
// Cobblestone -> Gravel -> Sand -> Dust
|
||||
hammerRecipe(writer, "gravel", ingredient(Items.COBBLESTONE, Items.DIORITE, Items.GRANITE, Items.ANDESITE), Blocks.GRAVEL);
|
||||
hammerRecipe(writer, "sand", ingredient(Items.GRAVEL), Blocks.SAND);
|
||||
hammerRecipe(writer, "dust", ingredient(Items.SAND, Items.RED_SAND), EBlocks.DUST.get());
|
||||
|
||||
hammerRecipe(writer, "crushed_deepslate", ingredient(Blocks.DEEPSLATE, Blocks.COBBLED_DEEPSLATE), EBlocks.CRUSHED_DEEPSLATE.get());
|
||||
hammerRecipe(writer, "crushed_netherrack", ingredient(Blocks.NETHERRACK), EBlocks.CRUSHED_NETHERRACK.get());
|
||||
hammerRecipe(writer, "crushed_blackstone", ingredient(Blocks.BLACKSTONE), EBlocks.CRUSHED_BLACKSTONE.get());
|
||||
hammerRecipe(writer, "crushed_end_stone", ingredient(Blocks.END_STONE), EBlocks.CRUSHED_END_STONE.get());
|
||||
hammerRecipe(writer, "red_sand", ingredient(EBlocks.CRUSHED_NETHERRACK), Blocks.RED_SAND);
|
||||
|
||||
hammerRecipe(writer, "crushing_sandstone", ingredient(Items.SANDSTONE, Items.CUT_SANDSTONE, Items.CHISELED_SANDSTONE, Items.SMOOTH_SANDSTONE), Items.SAND);
|
||||
hammerRecipe(writer, "crushing_red_sandstone", ingredient(Items.RED_SANDSTONE, Items.CUT_RED_SANDSTONE, Items.CHISELED_RED_SANDSTONE, Items.SMOOTH_RED_SANDSTONE), Items.RED_SAND);
|
||||
hammerRecipe(writer, "crushing_stone_bricks", ingredient(Items.STONE_BRICKS), Items.CRACKED_STONE_BRICKS);
|
||||
|
||||
hammerRecipe(writer, "stone_pebbles", ingredient(Items.STONE, Items.STONE_BRICKS, Items.CHISELED_STONE_BRICKS, Items.CRACKED_STONE_BRICKS), EItems.STONE_PEBBLE.get(), new UniformGenerator(ConstantValue.exactly(1), ConstantValue.exactly(6)));
|
||||
hammerRecipe(writer, "basalt", ingredient(Items.POLISHED_BASALT, Items.SMOOTH_BASALT), Items.BASALT);
|
||||
|
||||
hammerRecipe(writer, "tube_coral", ingredient(Items.TUBE_CORAL_BLOCK), Items.TUBE_CORAL);
|
||||
hammerRecipe(writer, "brain_coral", ingredient(Items.BRAIN_CORAL_BLOCK), Items.BRAIN_CORAL);
|
||||
hammerRecipe(writer, "bubble_coral", ingredient(Items.BUBBLE_CORAL_BLOCK), Items.BUBBLE_CORAL);
|
||||
hammerRecipe(writer, "fire_coral", ingredient(Items.FIRE_CORAL_BLOCK), Items.FIRE_CORAL);
|
||||
hammerRecipe(writer, "horn_coral", ingredient(Items.HORN_CORAL_BLOCK), Items.HORN_CORAL);
|
||||
hammerRecipe(writer, "tube_coral_fan", ingredient(Items.TUBE_CORAL), Items.TUBE_CORAL_FAN);
|
||||
hammerRecipe(writer, "brain_coral_fan", ingredient(Items.BRAIN_CORAL), Items.BRAIN_CORAL_FAN);
|
||||
hammerRecipe(writer, "bubble_coral_fan", ingredient(Items.BUBBLE_CORAL), Items.BUBBLE_CORAL_FAN);
|
||||
hammerRecipe(writer, "fire_coral_fan", ingredient(Items.FIRE_CORAL), Items.FIRE_CORAL_FAN);
|
||||
hammerRecipe(writer, "horn_coral_fan", ingredient(Items.HORN_CORAL), Items.HORN_CORAL_FAN);
|
||||
|
||||
hammerRecipe(writer, "prismarine", ingredient(Items.PRISMARINE, Items.PRISMARINE_BRICKS, Items.DARK_PRISMARINE), Items.PRISMARINE_SHARD, between(1, 4));
|
||||
}
|
||||
|
||||
private static void hammerRecipe(Consumer<FinishedRecipe> writer, String name, Ingredient block, ItemLike result) {
|
||||
hammerRecipe(writer, name, block, result, ConstantValue.exactly(1f));
|
||||
}
|
||||
|
||||
private static void hammerRecipe(Consumer<FinishedRecipe> writer, String name, Ingredient block, ItemLike result, NumberProvider resultAmount) {
|
||||
writer.accept(new FinishedHammerRecipe(new ResourceLocation(ExDeorum.ID, "hammer/" + name), block, result.asItem(), resultAmount));
|
||||
}
|
||||
|
||||
private static void barrelCompostRecipes(Consumer<FinishedRecipe> writer) {
|
||||
// plants
|
||||
barrelCompost(writer, "saplings", ingredient(ItemTags.SAPLINGS), 125);
|
||||
barrelCompost(writer, "leaves", ingredient(ItemTags.LEAVES), 125);
|
||||
barrelCompost(writer, "small_flowers", ingredient(ItemTags.SMALL_FLOWERS), 100);
|
||||
barrelCompost(writer, "tall_flowers", ingredient(ItemTags.TALL_FLOWERS), 150);
|
||||
barrelCompost(writer, "mushrooms", ingredient(Tags.Items.MUSHROOMS), 100);
|
||||
barrelCompost(writer, "lily_pad", ingredient(Items.LILY_PAD), 100);
|
||||
barrelCompost(writer, "sugar_cane", ingredient(Items.SUGAR_CANE), 80);
|
||||
barrelCompost(writer, "vine", ingredient(Items.VINE), 100);
|
||||
barrelCompost(writer, "grass", ingredient(Items.GRASS, Items.FERN), 100);
|
||||
barrelCompost(writer, "tall_grass", ingredient(Items.TALL_GRASS, Items.LARGE_FERN), 150);
|
||||
barrelCompost(writer, "seagrass", ingredient(Items.SEAGRASS), 80);
|
||||
barrelCompost(writer, "nether_wart", ingredient(Items.NETHER_WART), 100);
|
||||
barrelCompost(writer, "seeds", ingredient(Tags.Items.SEEDS), 80);
|
||||
barrelCompost(writer, "wheat", ingredient(Tags.Items.CROPS_WHEAT), 80);
|
||||
barrelCompost(writer, "berries", ingredient(Items.SWEET_BERRIES, Items.GLOW_BERRIES), 80);
|
||||
barrelCompost(writer, "melon", ingredient(Items.MELON), 200);
|
||||
barrelCompost(writer, "cake", ingredient(Items.CAKE), 500);
|
||||
barrelCompost(writer, "pumpkin", ingredient(Items.PUMPKIN), 500);
|
||||
barrelCompost(writer, "carrots", ingredient(Items.CARROT), 100);
|
||||
barrelCompost(writer, "potatoes", ingredient(Items.POTATO, Items.BAKED_POTATO, Items.POISONOUS_POTATO), 80);
|
||||
barrelCompost(writer, "beetroot", ingredient(Items.BEETROOT), 80);
|
||||
barrelCompost(writer, "moss_block", ingredient(Items.MOSS_BLOCK), 150);
|
||||
barrelCompost(writer, "moss_carpet", ingredient(Items.MOSS_CARPET), 100);
|
||||
barrelCompost(writer, "spores_and_seeds", SPORES_AND_SEEDS, 80);
|
||||
barrelCompost(writer, "bamboo", ingredient(Items.BAMBOO), 100);
|
||||
barrelCompost(writer, "cactus", ingredient(Items.CACTUS), 125);
|
||||
barrelCompost(writer, "dead_bush", ingredient(Items.DEAD_BUSH), 80);
|
||||
barrelCompost(writer, "chorus_flower", ingredient(Items.CHORUS_FLOWER), 150);
|
||||
barrelCompost(writer, "chorus_fruit", ingredient(Items.CHORUS_FRUIT), 80);
|
||||
barrelCompost(writer, "chorus_plant", ingredient(Items.CHORUS_PLANT), 150);
|
||||
barrelCompost(writer, "kelp", ingredient(Items.KELP, Items.DRIED_KELP), 80);
|
||||
barrelCompost(writer, "sea_pickle", ingredient(Items.SEA_PICKLE), 80);
|
||||
barrelCompost(writer, "spore_blossom", ingredient(Items.SPORE_BLOSSOM), 125);
|
||||
barrelCompost(writer, "weeping_vines", ingredient(Items.WEEPING_VINES), 100);
|
||||
barrelCompost(writer, "twisting_vines", ingredient(Items.TWISTING_VINES), 100);
|
||||
// flesh
|
||||
barrelCompost(writer, "rotten_flesh", ingredient(Items.ROTTEN_FLESH), 100);
|
||||
barrelCompost(writer, "spider_eye", ingredient(Items.SPIDER_EYE), 80);
|
||||
barrelCompost(writer, "fermented_spider_eye", ingredient(Items.FERMENTED_SPIDER_EYE), 100);
|
||||
barrelCompost(writer, "string", ingredient(Items.STRING), 40);
|
||||
barrelCompost(writer, "rabbit_foot", ingredient(Items.RABBIT_FOOT), 100);
|
||||
// meats
|
||||
barrelCompost(writer, "pork", ingredient(Items.PORKCHOP, Items.COOKED_PORKCHOP), 150);
|
||||
barrelCompost(writer, "beef", ingredient(Items.BEEF, Items.COOKED_BEEF), 150);
|
||||
barrelCompost(writer, "chicken", ingredient(Items.CHICKEN, Items.COOKED_CHICKEN), 125);
|
||||
barrelCompost(writer, "mutton", ingredient(Items.MUTTON, Items.COOKED_MUTTON), 125);
|
||||
barrelCompost(writer, "salmon", ingredient(Items.SALMON, Items.COOKED_SALMON), 125);
|
||||
barrelCompost(writer, "rabbit", ingredient(Items.RABBIT, Items.COOKED_RABBIT), 100);
|
||||
barrelCompost(writer, "cod", ingredient(Items.COD, Items.COOKED_COD), 100);
|
||||
barrelCompost(writer, "tropical_fish", ingredient(Items.TROPICAL_FISH), 80);
|
||||
barrelCompost(writer, "pufferfish", ingredient(Items.PUFFERFISH), 80);
|
||||
barrelCompost(writer, "egg", ingredient(Items.EGG), 100);
|
||||
// foods
|
||||
barrelCompost(writer, "melon_slice", ingredient(Items.MELON_SLICE), 40);
|
||||
barrelCompost(writer, "silk_worms", ingredient(EItems.SILK_WORM.get(), EItems.COOKED_SILK_WORM.get()), 40);
|
||||
barrelCompost(writer, "apple", ingredient(Items.APPLE), 100);
|
||||
barrelCompost(writer, "cookie", ingredient(Items.COOKIE), 100);
|
||||
barrelCompost(writer, "pumpkin_pie", ingredient(Items.PUMPKIN_PIE), 150);
|
||||
barrelCompost(writer, "bread", ingredient(Items.BREAD), 125);
|
||||
barrelCompost(writer, "mushroom_stew", ingredient(Items.MUSHROOM_STEW), 200);
|
||||
barrelCompost(writer, "suspicious_stew", ingredient(Items.SUSPICIOUS_STEW), 200);
|
||||
barrelCompost(writer, "beetroot_soup", ingredient(Items.BEETROOT_SOUP), 150);
|
||||
barrelCompost(writer, "rabbit_stew", ingredient(Items.RABBIT_STEW), 200);
|
||||
|
||||
// lol
|
||||
barrelCompost(writer, "golden_apples", ingredient(Items.GOLDEN_APPLE, Items.ENCHANTED_GOLDEN_APPLE), 1000);
|
||||
}
|
||||
|
||||
private static void barrelCompost(Consumer<FinishedRecipe> writer, String id, Ingredient ingredient, int volume) {
|
||||
writer.accept(new FinishedBarrelCompostRecipe(new ResourceLocation(ExDeorum.ID, "barrel_compost/" + id), ingredient, volume));
|
||||
}
|
||||
|
||||
private static void barrelMixingRecipes(Consumer<FinishedRecipe> writer) {
|
||||
// water
|
||||
barrelMixing(writer, ingredient(EItems.DUST.get()), Fluids.WATER, Items.CLAY);
|
||||
barrelMixing(writer, ingredient(Items.MILK_BUCKET), Fluids.WATER, Items.SLIME_BLOCK);
|
||||
barrelMixing(writer, "_from_porcelain_bucket", ingredient(EItems.PORCELAIN_MILK_BUCKET.get()), Fluids.WATER, Items.SLIME_BLOCK);
|
||||
barrelMixing(writer, ingredient(Items.SNOWBALL), Fluids.WATER, Items.ICE);
|
||||
barrelMixing(writer, ingredient(Items.LAVA_BUCKET), Fluids.WATER, Items.STONE);
|
||||
barrelMixing(writer, "_from_porcelain_bucket", ingredient(EItems.PORCELAIN_LAVA_BUCKET), Fluids.WATER, Items.STONE);
|
||||
// lava
|
||||
barrelMixing(writer, ingredient(EItems.WITCH_WATER_BUCKET), Fluids.LAVA, Items.NETHERRACK);
|
||||
barrelMixing(writer, "_from_porcelain_bucket", ingredient(EItems.PORCELAIN_WITCH_WATER_BUCKET), Fluids.LAVA, Items.NETHERRACK);
|
||||
barrelMixing(writer, ingredient(Items.GLOWSTONE_DUST), Fluids.LAVA, Items.END_STONE);
|
||||
barrelMixing(writer, ingredient(Items.WATER_BUCKET), Fluids.LAVA, Items.OBSIDIAN);
|
||||
barrelMixing(writer, "_from_porcelain_bucket", ingredient(EItems.PORCELAIN_WATER_BUCKET), Fluids.LAVA, Items.OBSIDIAN);
|
||||
barrelMixing(writer, ingredient(Items.SLIME_BALL), Fluids.LAVA, Items.MAGMA_CREAM);
|
||||
barrelMixing(writer, ingredient(Items.SOUL_SAND), Fluids.LAVA, Items.SOUL_SOIL);
|
||||
// witch water
|
||||
barrelMixing(writer, ingredient(Items.SAND), EFluids.WITCH_WATER.get(), Items.SOUL_SAND);
|
||||
}
|
||||
|
||||
private static void barrelMixing(Consumer<FinishedRecipe> writer, Ingredient ingredient, Fluid fluidType, Item result) {
|
||||
writer.accept(new FinishedBarrelMixingRecipe(new ResourceLocation(ExDeorum.ID, "barrel_mixing/" + path(result)), ingredient, fluidType, 1000, result));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,61 +1,25 @@
|
|||
/*
|
||||
* Ex Deorum
|
||||
* Copyright (c) 2023 thedarkcolour
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package thedarkcolour.exdeorum.data;
|
||||
package thedarkcolour.exdeorum.data.recipe;
|
||||
|
||||
import com.mojang.datafixers.util.Either;
|
||||
import net.minecraft.data.recipes.FinishedRecipe;
|
||||
import net.minecraft.data.recipes.RecipeCategory;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.level.ItemLike;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import net.minecraft.world.level.material.Fluids;
|
||||
import net.minecraft.world.level.storage.loot.providers.number.BinomialDistributionGenerator;
|
||||
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.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 org.apache.commons.lang3.mutable.MutableObject;
|
||||
import thedarkcolour.exdeorum.ExDeorum;
|
||||
import thedarkcolour.exdeorum.compat.ModIds;
|
||||
import thedarkcolour.exdeorum.recipe.TagResultRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.barrel.FinishedBarrelCompostRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.barrel.FinishedBarrelMixingRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.crucible.FinishedCrucibleRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.hammer.FinishedHammerRecipe;
|
||||
import thedarkcolour.exdeorum.data.ModCompatData;
|
||||
import thedarkcolour.exdeorum.recipe.sieve.FinishedSieveRecipe;
|
||||
import thedarkcolour.exdeorum.registry.EBlocks;
|
||||
import thedarkcolour.exdeorum.registry.EFluids;
|
||||
import thedarkcolour.exdeorum.registry.EItems;
|
||||
import thedarkcolour.exdeorum.registry.ERecipeSerializers;
|
||||
import thedarkcolour.exdeorum.tag.EItemTags;
|
||||
import thedarkcolour.modkit.data.MKRecipeProvider;
|
||||
|
||||
|
|
@ -65,225 +29,11 @@ import java.util.function.Consumer;
|
|||
import java.util.function.Supplier;
|
||||
|
||||
import static net.minecraft.world.level.storage.loot.providers.number.BinomialDistributionGenerator.binomial;
|
||||
import static net.minecraft.world.level.storage.loot.providers.number.UniformGenerator.between;
|
||||
import static thedarkcolour.modkit.data.MKRecipeProvider.ingredient;
|
||||
import static thedarkcolour.modkit.data.MKRecipeProvider.path;
|
||||
|
||||
class Recipes {
|
||||
private static final Ingredient SPORES_AND_SEEDS = ingredient(EItems.GRASS_SEEDS, EItems.MYCELIUM_SPORES, EItems.WARPED_NYLIUM_SPORES, EItems.CRIMSON_NYLIUM_SPORES);
|
||||
public static void addRecipes(Consumer<FinishedRecipe> writer, MKRecipeProvider recipes) {
|
||||
craftingRecipes(writer, recipes);
|
||||
smeltingRecipes(recipes);
|
||||
sieveRecipes(writer);
|
||||
crucibleRecipes(writer);
|
||||
hammerRecipes(writer);
|
||||
barrelCompostRecipes(writer);
|
||||
barrelMixingRecipes(writer);
|
||||
}
|
||||
|
||||
private static void craftingRecipes(Consumer<FinishedRecipe> writer, MKRecipeProvider recipes) {
|
||||
// Crooks
|
||||
shapedCrook(recipes, EItems.CROOK, ingredient(Tags.Items.RODS_WOODEN));
|
||||
shapedCrook(recipes, EItems.BONE_CROOK, ingredient(Items.BONE));
|
||||
|
||||
// Hammers
|
||||
shapedHammer(recipes, EItems.WOODEN_HAMMER, ingredient(ItemTags.PLANKS));
|
||||
shapedHammer(recipes, EItems.STONE_HAMMER, ingredient(ItemTags.STONE_CRAFTING_MATERIALS));
|
||||
shapedHammer(recipes, EItems.GOLDEN_HAMMER, ingredient(Tags.Items.INGOTS_GOLD));
|
||||
shapedHammer(recipes, EItems.IRON_HAMMER, ingredient(Tags.Items.INGOTS_IRON));
|
||||
shapedHammer(recipes, EItems.DIAMOND_HAMMER, ingredient(Tags.Items.GEMS_DIAMOND));
|
||||
recipes.netheriteUpgrade(RecipeCategory.TOOLS, ingredient(EItems.DIAMOND_HAMMER.get()), EItems.NETHERITE_HAMMER.get());
|
||||
|
||||
// Crucibles
|
||||
uShaped(recipes, EItems.OAK_CRUCIBLE, ingredient(Items.OAK_LOG), ingredient(Items.OAK_SLAB));
|
||||
uShaped(recipes, EItems.SPRUCE_CRUCIBLE, ingredient(Items.SPRUCE_LOG), ingredient(Items.SPRUCE_SLAB));
|
||||
uShaped(recipes, EItems.BIRCH_CRUCIBLE, ingredient(Items.BIRCH_LOG), ingredient(Items.BIRCH_SLAB));
|
||||
uShaped(recipes, EItems.JUNGLE_CRUCIBLE, ingredient(Items.JUNGLE_LOG), ingredient(Items.JUNGLE_SLAB));
|
||||
uShaped(recipes, EItems.ACACIA_CRUCIBLE, ingredient(Items.ACACIA_LOG), ingredient(Items.ACACIA_SLAB));
|
||||
uShaped(recipes, EItems.DARK_OAK_CRUCIBLE, ingredient(Items.DARK_OAK_LOG), ingredient(Items.DARK_OAK_SLAB));
|
||||
uShaped(recipes, EItems.MANGROVE_CRUCIBLE, ingredient(Items.MANGROVE_LOG), ingredient(Items.MANGROVE_SLAB));
|
||||
uShaped(recipes, EItems.CHERRY_CRUCIBLE, ingredient(Items.CHERRY_LOG), ingredient(Items.CHERRY_SLAB));
|
||||
uShaped(recipes, EItems.BAMBOO_CRUCIBLE, ingredient(Items.BAMBOO_BLOCK), ingredient(Items.BAMBOO_SLAB));
|
||||
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()));
|
||||
|
||||
// Barrels
|
||||
uShaped(recipes, EItems.OAK_BARREL, ingredient(Items.OAK_PLANKS), ingredient(Items.OAK_SLAB));
|
||||
uShaped(recipes, EItems.SPRUCE_BARREL, ingredient(Items.SPRUCE_PLANKS), ingredient(Items.SPRUCE_SLAB));
|
||||
uShaped(recipes, EItems.BIRCH_BARREL, ingredient(Items.BIRCH_PLANKS), ingredient(Items.BIRCH_SLAB));
|
||||
uShaped(recipes, EItems.JUNGLE_BARREL, ingredient(Items.JUNGLE_PLANKS), ingredient(Items.JUNGLE_SLAB));
|
||||
uShaped(recipes, EItems.ACACIA_BARREL, ingredient(Items.ACACIA_PLANKS), ingredient(Items.ACACIA_SLAB));
|
||||
uShaped(recipes, EItems.DARK_OAK_BARREL, ingredient(Items.DARK_OAK_PLANKS), ingredient(Items.DARK_OAK_SLAB));
|
||||
uShaped(recipes, EItems.MANGROVE_BARREL, ingredient(Items.MANGROVE_PLANKS), ingredient(Items.MANGROVE_SLAB));
|
||||
uShaped(recipes, EItems.CHERRY_BARREL, ingredient(Items.CHERRY_PLANKS), ingredient(Items.CHERRY_SLAB));
|
||||
uShaped(recipes, EItems.BAMBOO_BARREL, ingredient(Items.BAMBOO_PLANKS), ingredient(Items.BAMBOO_SLAB));
|
||||
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));
|
||||
|
||||
// Pebbles and ore chunks
|
||||
recipes.grid2x2(Items.COBBLESTONE, ingredient(EItems.STONE_PEBBLE));
|
||||
recipes.grid2x2(Items.ANDESITE, ingredient(EItems.ANDESITE_PEBBLE));
|
||||
recipes.grid2x2(Items.DIORITE, ingredient(EItems.DIORITE_PEBBLE));
|
||||
recipes.grid2x2(Items.GRANITE, ingredient(EItems.GRANITE_PEBBLE));
|
||||
recipes.grid2x2(Items.COBBLED_DEEPSLATE, ingredient(EItems.DEEPSLATE_PEBBLE));
|
||||
recipes.grid2x2(Items.TUFF, ingredient(EItems.TUFF_PEBBLE));
|
||||
recipes.grid2x2(Items.CALCITE, ingredient(EItems.CALCITE_PEBBLE));
|
||||
recipes.grid2x2(Items.BLACKSTONE, ingredient(EItems.BLACKSTONE_PEBBLE));
|
||||
recipes.grid2x2(Items.BASALT, ingredient(EItems.BASALT_PEBBLE));
|
||||
recipes.grid2x2(Items.IRON_ORE, ingredient(EItems.IRON_ORE_CHUNK));
|
||||
recipes.grid2x2(Items.GOLD_ORE, ingredient(EItems.GOLD_ORE_CHUNK));
|
||||
recipes.grid2x2(Items.COPPER_ORE, ingredient(EItems.COPPER_ORE_CHUNK));
|
||||
recipes.grid2x2(Items.MOSS_BLOCK, ingredient(EItems.GRASS_SEEDS));
|
||||
|
||||
// Modded ores
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_ALUMINUM, ingredient(EItems.ALUMINUM_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_COBALT, ingredient(EItems.COBALT_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_SILVER, ingredient(EItems.SILVER_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_LEAD, ingredient(EItems.LEAD_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_PLATINUM, ingredient(EItems.PLATINUM_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_NICKEL, ingredient(EItems.NICKEL_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_URANIUM, ingredient(EItems.URANIUM_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_OSMIUM, ingredient(EItems.OSMIUM_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_TIN, ingredient(EItems.TIN_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_ZINC, ingredient(EItems.ZINC_ORE_CHUNK));
|
||||
grid2x2TagResult(writer, recipes, EItemTags.ORES_IRIDIUM, ingredient(EItems.IRIDIUM_ORE_CHUNK));
|
||||
|
||||
// Sieves
|
||||
sieve(recipes, EItems.OAK_SIEVE, Items.OAK_PLANKS, Items.OAK_SLAB);
|
||||
sieve(recipes, EItems.SPRUCE_SIEVE, Items.SPRUCE_PLANKS, Items.SPRUCE_SLAB);
|
||||
sieve(recipes, EItems.BIRCH_SIEVE, Items.BIRCH_PLANKS, Items.BIRCH_SLAB);
|
||||
sieve(recipes, EItems.JUNGLE_SIEVE, Items.JUNGLE_PLANKS, Items.JUNGLE_SLAB);
|
||||
sieve(recipes, EItems.ACACIA_SIEVE, Items.ACACIA_PLANKS, Items.ACACIA_SLAB);
|
||||
sieve(recipes, EItems.DARK_OAK_SIEVE, Items.DARK_OAK_PLANKS, Items.DARK_OAK_SLAB);
|
||||
sieve(recipes, EItems.MANGROVE_SIEVE, Items.MANGROVE_PLANKS, Items.MANGROVE_SLAB);
|
||||
sieve(recipes, EItems.CHERRY_SIEVE, Items.CHERRY_PLANKS, Items.CHERRY_SLAB);
|
||||
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);
|
||||
|
||||
// Meshes
|
||||
recipes.grid3x3(EItems.STRING_MESH.get(), ingredient(Tags.Items.STRING));
|
||||
mesh(recipes, EItems.FLINT_MESH.get(), ingredient(Items.FLINT));
|
||||
mesh(recipes, EItems.IRON_MESH.get(), ingredient(Tags.Items.INGOTS_IRON));
|
||||
mesh(recipes, EItems.GOLDEN_MESH.get(), ingredient(Tags.Items.INGOTS_GOLD));
|
||||
mesh(recipes, EItems.DIAMOND_MESH.get(), ingredient(Tags.Items.GEMS_DIAMOND));
|
||||
recipes.netheriteUpgrade(RecipeCategory.MISC, ingredient(EItems.DIAMOND_MESH), EItems.NETHERITE_MESH.get());
|
||||
|
||||
// Watering cans
|
||||
wateringCan(recipes, EItems.WOODEN_WATERING_CAN, ingredient(ItemTags.PLANKS));
|
||||
wateringCan(recipes, EItems.STONE_WATERING_CAN, ingredient(ItemTags.STONE_TOOL_MATERIALS));
|
||||
wateringCan(recipes, EItems.IRON_WATERING_CAN, ingredient(Tags.Items.INGOTS_IRON));
|
||||
wateringCan(recipes, EItems.GOLDEN_WATERING_CAN, ingredient(Tags.Items.INGOTS_GOLD));
|
||||
wateringCan(recipes, EItems.DIAMOND_WATERING_CAN, ingredient(Tags.Items.GEMS_DIAMOND));
|
||||
recipes.netheriteUpgrade(RecipeCategory.TOOLS, ingredient(EItems.DIAMOND_WATERING_CAN), EItems.NETHERITE_WATERING_CAN.get());
|
||||
|
||||
// misc
|
||||
recipes.shapelessCrafting(RecipeCategory.MISC, new ItemStack(EItems.PORCELAIN_CLAY_BALL.get()), ingredient(Items.CLAY_BALL), ingredient(Items.BONE_MEAL));
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, EItems.UNFIRED_PORCELAIN_BUCKET.get(), recipe -> {
|
||||
recipe.define('#', EItems.PORCELAIN_CLAY_BALL);
|
||||
recipe.pattern("# #");
|
||||
recipe.pattern(" # ");
|
||||
});
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, EItems.SCULK_CORE.get(), recipe -> {
|
||||
recipe.define('#', Items.ECHO_SHARD);
|
||||
recipe.define('O', Items.ENDER_PEARL);
|
||||
recipe.pattern(" # ");
|
||||
recipe.pattern("#O#");
|
||||
recipe.pattern(" # ");
|
||||
});
|
||||
recipes.shapedCrafting(RecipeCategory.FOOD, EItems.END_CAKE.get(), recipe -> {
|
||||
recipe.define('P', Items.ENDER_EYE);
|
||||
recipe.define('S', Items.SUGAR);
|
||||
recipe.define('E', Tags.Items.EGGS);
|
||||
recipe.define('C', EItems.CRUSHED_END_STONE);
|
||||
recipe.pattern("PPP");
|
||||
recipe.pattern("SES");
|
||||
recipe.pattern("CCC");
|
||||
});
|
||||
}
|
||||
|
||||
private static void grid2x2TagResult(Consumer<FinishedRecipe> writer, MKRecipeProvider recipes, TagKey<Item> resultTag, Ingredient ingredient) {
|
||||
var ref = new MutableObject<FinishedRecipe>();
|
||||
recipes.pushWriter(ref::setValue, newWriter -> {
|
||||
recipes.shapedCrafting(resultTag.location().getPath() + "_tag", RecipeCategory.MISC, Items.AIR, recipe -> {
|
||||
recipe.define('#', ingredient);
|
||||
recipe.pattern("##");
|
||||
recipe.pattern("##");
|
||||
});
|
||||
});
|
||||
writer.accept(new TagResultRecipe.Finished(resultTag, ref.getValue()));
|
||||
}
|
||||
|
||||
private static void shapedCrook(MKRecipeProvider recipes, RegistryObject<? extends Item> crook, Ingredient stick) {
|
||||
recipes.shapedCrafting(RecipeCategory.TOOLS, crook.get(), recipe -> {
|
||||
recipe.define('x', stick);
|
||||
recipe.pattern("xx");
|
||||
recipe.pattern(" x");
|
||||
recipe.pattern(" x");
|
||||
});
|
||||
}
|
||||
|
||||
private static void shapedHammer(MKRecipeProvider recipes, RegistryObject<? extends Item> hammer, Ingredient material) {
|
||||
recipes.shapedCrafting(RecipeCategory.TOOLS, hammer.get(), recipe -> {
|
||||
recipe.define('m', material);
|
||||
recipe.define('s', Tags.Items.RODS_WOODEN);
|
||||
recipe.pattern(" m ");
|
||||
recipe.pattern(" sm");
|
||||
recipe.pattern("s ");
|
||||
});
|
||||
}
|
||||
|
||||
private static void uShaped(MKRecipeProvider recipes, RegistryObject<? extends Item> result, Ingredient sides, Ingredient middle) {
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, result.get(), recipe -> {
|
||||
recipe.define('s', sides);
|
||||
recipe.define('m', middle);
|
||||
recipe.pattern("s s");
|
||||
recipe.pattern("s s");
|
||||
recipe.pattern("sms");
|
||||
});
|
||||
}
|
||||
|
||||
private static void sieve(MKRecipeProvider recipes, Supplier<? extends Item> result, Item planks, Item slab) {
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, result.get(), recipe -> {
|
||||
recipe.define('O', planks);
|
||||
recipe.define('_', slab);
|
||||
recipe.define('I', Tags.Items.RODS_WOODEN);
|
||||
recipe.pattern("O O");
|
||||
recipe.pattern("O_O");
|
||||
recipe.pattern("I I");
|
||||
});
|
||||
}
|
||||
|
||||
private static void mesh(MKRecipeProvider recipes, Item result, Ingredient ingredient) {
|
||||
recipes.shapedCrafting(RecipeCategory.MISC, result, recipe -> {
|
||||
recipe.define('#', ingredient);
|
||||
recipe.define('S', ingredient(Tags.Items.STRING));
|
||||
recipe.pattern("S#S");
|
||||
recipe.pattern("#S#");
|
||||
recipe.pattern("S#S");
|
||||
});
|
||||
}
|
||||
|
||||
private static void wateringCan(MKRecipeProvider recipes, Supplier<? extends Item> result, Ingredient shell) {
|
||||
recipes.shapedCrafting(RecipeCategory.TOOLS, result.get(), recipe -> {
|
||||
recipe.define('#', shell);
|
||||
recipe.define('B', Items.BOWL);
|
||||
recipe.pattern("# ");
|
||||
recipe.pattern("#B#");
|
||||
recipe.pattern(" # ");
|
||||
});
|
||||
}
|
||||
|
||||
private static void smeltingRecipes(MKRecipeProvider recipes) {
|
||||
recipes.smelting(ingredient(EItems.UNFIRED_PORCELAIN_CRUCIBLE), EItems.PORCELAIN_CRUCIBLE.get(), 0.1f);
|
||||
recipes.smelting(ingredient(EItems.UNFIRED_PORCELAIN_BUCKET), EItems.PORCELAIN_BUCKET.get(), 0.1f);
|
||||
|
||||
recipes.foodCooking(EItems.SILK_WORM.get(), EItems.COOKED_SILK_WORM.get(), 0.1f);
|
||||
}
|
||||
|
||||
private static void sieveRecipes(Consumer<FinishedRecipe> writer) {
|
||||
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);
|
||||
|
||||
// Dirt -> String mesh
|
||||
|
|
@ -610,6 +360,49 @@ class Recipes {
|
|||
addDrop.accept(Items.PRISMARINE_CRYSTALS, chance(0.12f));
|
||||
});
|
||||
|
||||
// Red Sand -> String mesh
|
||||
forMesh(writer, ingredient(Items.RED_SAND), EItems.STRING_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.CACTUS, chance(0.12f));
|
||||
addDrop.accept(Items.DEAD_BUSH, chance(0.07f));
|
||||
addDrop.accept(Items.GOLD_NUGGET, chance(0.09f));
|
||||
addDrop.accept(Items.REDSTONE, chance(0.08f));
|
||||
addDrop.accept(Items.RAW_GOLD, chance(0.03f));
|
||||
});
|
||||
forMesh(writer, ingredient(Items.RED_SAND), EItems.FLINT_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.CACTUS, chance(0.12f));
|
||||
addDrop.accept(Items.DEAD_BUSH, chance(0.07f));
|
||||
addDrop.accept(Items.GOLD_NUGGET, chance(0.12f));
|
||||
addDrop.accept(Items.REDSTONE, chance(0.09f));
|
||||
addDrop.accept(Items.RAW_GOLD, chance(0.04f));
|
||||
});
|
||||
forMesh(writer, ingredient(Items.RED_SAND), EItems.IRON_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.CACTUS, chance(0.12f));
|
||||
addDrop.accept(Items.DEAD_BUSH, chance(0.07f));
|
||||
addDrop.accept(Items.GOLD_NUGGET, chance(0.09f));
|
||||
addDrop.accept(Items.REDSTONE, chance(0.11f));
|
||||
addDrop.accept(Items.RAW_GOLD, chance(0.06f));
|
||||
});
|
||||
forMesh(writer, ingredient(Items.RED_SAND), EItems.GOLDEN_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.CACTUS, chance(0.12f));
|
||||
addDrop.accept(Items.DEAD_BUSH, chance(0.07f));
|
||||
addDrop.accept(Items.GOLD_NUGGET, chance(0.19f));
|
||||
addDrop.accept(Items.REDSTONE, chance(0.07f));
|
||||
addDrop.accept(Items.RAW_GOLD, chance(0.11f));
|
||||
});
|
||||
forMesh(writer, ingredient(Items.RED_SAND), EItems.DIAMOND_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.CACTUS, chance(0.10f));
|
||||
addDrop.accept(Items.DEAD_BUSH, chance(0.03f));
|
||||
addDrop.accept(Items.GOLD_NUGGET, chance(0.14f));
|
||||
addDrop.accept(Items.REDSTONE, chance(0.14f));
|
||||
addDrop.accept(Items.RAW_GOLD, chance(0.08f));
|
||||
});
|
||||
forMesh(writer, ingredient(Items.RED_SAND), EItems.NETHERITE_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.CACTUS, chance(0.12f));
|
||||
addDrop.accept(Items.GOLD_NUGGET, chance(0.15f));
|
||||
addDrop.accept(Items.REDSTONE, chance(0.17f));
|
||||
addDrop.accept(Items.RAW_GOLD, chance(0.10f));
|
||||
});
|
||||
|
||||
forMesh(writer, ingredient(EItems.DUST.get()), EItems.STRING_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.GUNPOWDER, chance(0.1f));
|
||||
addDrop.accept(Items.BONE_MEAL, chance(0.1f));
|
||||
|
|
@ -618,6 +411,7 @@ class Recipes {
|
|||
addDrop.accept(Items.BLAZE_POWDER, chance(0.03f));
|
||||
|
||||
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.06f), modInstalled(ModIds.ENDERIO));
|
||||
addConditionalDrop.accept(ModCompatData.YELLORITE_DUST.get(), chance(0.05f), modInstalled(ModIds.EXTREME_REACTORS));
|
||||
});
|
||||
forMesh(writer, ingredient(EItems.DUST.get()), EItems.FLINT_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.GUNPOWDER, chance(0.11f));
|
||||
|
|
@ -627,6 +421,7 @@ class Recipes {
|
|||
addDrop.accept(Items.BLAZE_POWDER, chance(0.04f));
|
||||
|
||||
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.07f), modInstalled(ModIds.ENDERIO));
|
||||
addConditionalDrop.accept(ModCompatData.YELLORITE_DUST.get(), chance(0.055f), modInstalled(ModIds.EXTREME_REACTORS));
|
||||
});
|
||||
forMesh(writer, ingredient(EItems.DUST.get()), EItems.IRON_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.GUNPOWDER, chance(0.13f));
|
||||
|
|
@ -637,6 +432,7 @@ class Recipes {
|
|||
addDrop.accept(Items.IRON_NUGGET, chance(0.06f));
|
||||
|
||||
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.09f), modInstalled(ModIds.ENDERIO));
|
||||
addConditionalDrop.accept(ModCompatData.YELLORITE_DUST.get(), chance(0.08f), modInstalled(ModIds.EXTREME_REACTORS));
|
||||
});
|
||||
forMesh(writer, ingredient(EItems.DUST.get()), EItems.GOLDEN_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.GUNPOWDER, chance(0.13f));
|
||||
|
|
@ -648,6 +444,7 @@ class Recipes {
|
|||
addDrop.accept(Items.RAW_GOLD, chance(0.02f));
|
||||
|
||||
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.11f), modInstalled(ModIds.ENDERIO));
|
||||
addConditionalDrop.accept(ModCompatData.YELLORITE_DUST.get(), chance(0.10f), modInstalled(ModIds.EXTREME_REACTORS));
|
||||
});
|
||||
forMesh(writer, ingredient(EItems.DUST.get()), EItems.DIAMOND_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.GUNPOWDER, chance(0.14f));
|
||||
|
|
@ -658,6 +455,7 @@ class Recipes {
|
|||
addDrop.accept(Items.GOLD_NUGGET, chance(0.08f));
|
||||
|
||||
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.12f), modInstalled(ModIds.ENDERIO));
|
||||
addConditionalDrop.accept(ModCompatData.YELLORITE_DUST.get(), chance(0.12f), modInstalled(ModIds.EXTREME_REACTORS));
|
||||
});
|
||||
forMesh(writer, ingredient(EItems.DUST.get()), EItems.NETHERITE_MESH, (addDrop, addTagDrop, addConditionalDrop) -> {
|
||||
addDrop.accept(Items.GUNPOWDER, chance(0.14f));
|
||||
|
|
@ -669,6 +467,7 @@ class Recipes {
|
|||
addDrop.accept(Items.IRON_NUGGET, chance(0.08f));
|
||||
|
||||
addConditionalDrop.accept(ModCompatData.GRAINS_OF_INFINITY.get(), chance(0.135f), modInstalled(ModIds.ENDERIO));
|
||||
addConditionalDrop.accept(ModCompatData.YELLORITE_DUST.get(), chance(0.14f), modInstalled(ModIds.EXTREME_REACTORS));
|
||||
});
|
||||
|
||||
// Crushed Deepslate -> String mesh
|
||||
|
|
@ -1031,10 +830,18 @@ class Recipes {
|
|||
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;
|
||||
|
||||
|
||||
addDrops.accept(
|
||||
(result, resultAmount) -> sieveRecipe(writer, basePath + path(result), block, mesh, result, resultAmount),
|
||||
(resultTag, resultAmount) -> sieveRecipeTag(writer, basePath + resultTag.location().getPath().concat("_tag"), block, mesh, resultTag, resultAmount),
|
||||
|
|
@ -1066,7 +873,7 @@ class Recipes {
|
|||
private static void sieveRecipeTag(Consumer<FinishedRecipe> writer, String name, Ingredient block, Supplier<? extends Item> mesh, TagKey<Item> result, NumberProvider resultAmount) {
|
||||
writer.accept(new FinishedSieveRecipe(new ResourceLocation(ExDeorum.ID, "sieve/" + name), mesh.get(), block, Either.right(result), resultAmount));
|
||||
}
|
||||
|
||||
|
||||
private static void sieveConditional(Consumer<FinishedRecipe> writer, String name, Ingredient block, Supplier<? extends Item> mesh, Either<Item, TagKey<Item>> result, NumberProvider resultAmount, ICondition condition) {
|
||||
var path = new ResourceLocation(ExDeorum.ID, "sieve/" + name);
|
||||
ConditionalRecipe.builder()
|
||||
|
|
@ -1074,197 +881,4 @@ class Recipes {
|
|||
.addRecipe(new FinishedSieveRecipe(path, mesh.get(), block, result, resultAmount))
|
||||
.build(writer, path);
|
||||
}
|
||||
|
||||
private static void crucibleRecipes(Consumer<FinishedRecipe> writer) {
|
||||
lavaCrucible(writer, "cobblestone", ingredient(Tags.Items.COBBLESTONE), 250);
|
||||
lavaCrucible(writer, "stone", ingredient(Tags.Items.STONE), 250);
|
||||
lavaCrucible(writer, "gravel", ingredient(Tags.Items.GRAVEL), 250);
|
||||
lavaCrucible(writer, "netherrack", ingredient(Tags.Items.NETHERRACK), 500);
|
||||
|
||||
waterCrucible(writer, "saplings", ingredient(ItemTags.SAPLINGS), 100);
|
||||
waterCrucible(writer, "leaves", ingredient(ItemTags.LEAVES), 250);
|
||||
waterCrucible(writer, "small_flowers", ingredient(ItemTags.SMALL_FLOWERS), 100);
|
||||
waterCrucible(writer, "tall_flowers", ingredient(ItemTags.TALL_FLOWERS), 200);
|
||||
waterCrucible(writer, "mushrooms", ingredient(Tags.Items.MUSHROOMS), 100);
|
||||
waterCrucible(writer, "lily_pad", ingredient(Items.LILY_PAD), 150);
|
||||
waterCrucible(writer, "sugar_cane", ingredient(Items.SUGAR_CANE), 100);
|
||||
waterCrucible(writer, "vine", ingredient(Items.VINE), 100);
|
||||
waterCrucible(writer, "seeds_and_spores", SPORES_AND_SEEDS, 50);
|
||||
waterCrucible(writer, "seeds", ingredient(Tags.Items.SEEDS), 50);
|
||||
waterCrucible(writer, "grass", ingredient(Items.GRASS, Items.TALL_GRASS), 100);
|
||||
waterCrucible(writer, "grass_block", ingredient(Items.GRASS_BLOCK), 150);
|
||||
waterCrucible(writer, "sweet_berries", ingredient(Items.SWEET_BERRIES, Items.GLOW_BERRIES), 50);
|
||||
waterCrucible(writer, "melon_slice", ingredient(Items.MELON_SLICE), 50);
|
||||
waterCrucible(writer, "potato", ingredient(Items.POTATO), 100);
|
||||
waterCrucible(writer, "carrot", ingredient(Items.CARROT), 100);
|
||||
waterCrucible(writer, "beetroot", ingredient(Items.BEETROOT), 100);
|
||||
waterCrucible(writer, "apple", ingredient(Items.APPLE), 100);
|
||||
waterCrucible(writer, "cactus", ingredient(Items.CACTUS), 250);
|
||||
waterCrucible(writer, "pumpkin", ingredient(Items.PUMPKIN), 250);
|
||||
waterCrucible(writer, "melon", ingredient(Items.MELON), 250);
|
||||
waterCrucible(writer, "seagrass", ingredient(Items.SEAGRASS), 100);
|
||||
waterCrucible(writer, "sea_pickle", ingredient(Items.SEA_PICKLE), 200);
|
||||
waterCrucible(writer, "moss", ingredient(Items.MOSS_BLOCK), 150);
|
||||
waterCrucible(writer, "moss_carpet", ingredient(Items.MOSS_CARPET), 100);
|
||||
waterCrucible(writer, "spore_blossom", ingredient(Items.SPORE_BLOSSOM), 150);
|
||||
}
|
||||
|
||||
private static void lavaCrucible(Consumer<FinishedRecipe> writer, String id, Ingredient ingredient, int volume) {
|
||||
writer.accept(new FinishedCrucibleRecipe(new ResourceLocation(ExDeorum.ID, "lava_crucible/" + id), ERecipeSerializers.LAVA_CRUCIBLE.get(), ingredient, Fluids.LAVA, volume));
|
||||
}
|
||||
|
||||
private static void waterCrucible(Consumer<FinishedRecipe> writer, String id, Ingredient ingredient, int volume) {
|
||||
writer.accept(new FinishedCrucibleRecipe(new ResourceLocation(ExDeorum.ID, "water_crucible/" + id), ERecipeSerializers.WATER_CRUCIBLE.get(), ingredient, Fluids.WATER, volume));
|
||||
}
|
||||
|
||||
private static void hammerRecipes(Consumer<FinishedRecipe> writer) {
|
||||
// Cobblestone -> Gravel -> Sand -> Dust
|
||||
hammerRecipe(writer, "gravel", ingredient(Items.COBBLESTONE, Items.DIORITE, Items.GRANITE, Items.ANDESITE), Blocks.GRAVEL);
|
||||
hammerRecipe(writer, "sand", ingredient(Items.GRAVEL), Blocks.SAND);
|
||||
hammerRecipe(writer, "dust", ingredient(Items.SAND, Items.RED_SAND), EBlocks.DUST.get());
|
||||
|
||||
hammerRecipe(writer, "crushed_deepslate", ingredient(Blocks.DEEPSLATE, Blocks.COBBLED_DEEPSLATE), EBlocks.CRUSHED_DEEPSLATE.get());
|
||||
hammerRecipe(writer, "crushed_netherrack", ingredient(Blocks.NETHERRACK), EBlocks.CRUSHED_NETHERRACK.get());
|
||||
hammerRecipe(writer, "crushed_blackstone", ingredient(Blocks.BLACKSTONE), EBlocks.CRUSHED_BLACKSTONE.get());
|
||||
hammerRecipe(writer, "crushed_end_stone", ingredient(Blocks.END_STONE), EBlocks.CRUSHED_END_STONE.get());
|
||||
|
||||
hammerRecipe(writer, "crushing_sandstone", ingredient(Items.SANDSTONE, Items.CUT_SANDSTONE, Items.CHISELED_SANDSTONE, Items.SMOOTH_SANDSTONE), Items.SAND);
|
||||
hammerRecipe(writer, "crushing_red_sandstone", ingredient(Items.RED_SANDSTONE, Items.CUT_RED_SANDSTONE, Items.CHISELED_RED_SANDSTONE, Items.SMOOTH_RED_SANDSTONE), Items.RED_SAND);
|
||||
hammerRecipe(writer, "crushing_stone_bricks", ingredient(Items.STONE_BRICKS), Items.CRACKED_STONE_BRICKS);
|
||||
|
||||
hammerRecipe(writer, "stone_pebbles", ingredient(Items.STONE, Items.STONE_BRICKS, Items.CHISELED_STONE_BRICKS, Items.CRACKED_STONE_BRICKS), EItems.STONE_PEBBLE.get(), new UniformGenerator(ConstantValue.exactly(1), ConstantValue.exactly(6)));
|
||||
hammerRecipe(writer, "basalt", ingredient(Items.POLISHED_BASALT, Items.SMOOTH_BASALT), Items.BASALT);
|
||||
|
||||
hammerRecipe(writer, "tube_coral", ingredient(Items.TUBE_CORAL_BLOCK), Items.TUBE_CORAL);
|
||||
hammerRecipe(writer, "brain_coral", ingredient(Items.BRAIN_CORAL_BLOCK), Items.BRAIN_CORAL);
|
||||
hammerRecipe(writer, "bubble_coral", ingredient(Items.BUBBLE_CORAL_BLOCK), Items.BUBBLE_CORAL);
|
||||
hammerRecipe(writer, "fire_coral", ingredient(Items.FIRE_CORAL_BLOCK), Items.FIRE_CORAL);
|
||||
hammerRecipe(writer, "horn_coral", ingredient(Items.HORN_CORAL_BLOCK), Items.HORN_CORAL);
|
||||
hammerRecipe(writer, "tube_coral_fan", ingredient(Items.TUBE_CORAL), Items.TUBE_CORAL_FAN);
|
||||
hammerRecipe(writer, "brain_coral_fan", ingredient(Items.BRAIN_CORAL), Items.BRAIN_CORAL_FAN);
|
||||
hammerRecipe(writer, "bubble_coral_fan", ingredient(Items.BUBBLE_CORAL), Items.BUBBLE_CORAL_FAN);
|
||||
hammerRecipe(writer, "fire_coral_fan", ingredient(Items.FIRE_CORAL), Items.FIRE_CORAL_FAN);
|
||||
hammerRecipe(writer, "horn_coral_fan", ingredient(Items.HORN_CORAL), Items.HORN_CORAL_FAN);
|
||||
|
||||
hammerRecipe(writer, "prismarine", ingredient(Items.PRISMARINE, Items.PRISMARINE_BRICKS, Items.DARK_PRISMARINE), Items.PRISMARINE_SHARD, between(1, 4));
|
||||
}
|
||||
|
||||
private static void hammerRecipe(Consumer<FinishedRecipe> writer, String name, Ingredient block, ItemLike result) {
|
||||
hammerRecipe(writer, name, block, result, ConstantValue.exactly(1f));
|
||||
}
|
||||
|
||||
private static void hammerRecipe(Consumer<FinishedRecipe> writer, String name, Ingredient block, ItemLike result, NumberProvider resultAmount) {
|
||||
writer.accept(new FinishedHammerRecipe(new ResourceLocation(ExDeorum.ID, "hammer/" + name), block, result.asItem(), resultAmount));
|
||||
}
|
||||
|
||||
private static void barrelCompostRecipes(Consumer<FinishedRecipe> writer) {
|
||||
// plants
|
||||
barrelCompost(writer, "saplings", ingredient(ItemTags.SAPLINGS), 125);
|
||||
barrelCompost(writer, "leaves", ingredient(ItemTags.LEAVES), 125);
|
||||
barrelCompost(writer, "small_flowers", ingredient(ItemTags.SMALL_FLOWERS), 100);
|
||||
barrelCompost(writer, "tall_flowers", ingredient(ItemTags.TALL_FLOWERS), 150);
|
||||
barrelCompost(writer, "mushrooms", ingredient(Tags.Items.MUSHROOMS), 100);
|
||||
barrelCompost(writer, "lily_pad", ingredient(Items.LILY_PAD), 100);
|
||||
barrelCompost(writer, "sugar_cane", ingredient(Items.SUGAR_CANE), 80);
|
||||
barrelCompost(writer, "vine", ingredient(Items.VINE), 100);
|
||||
barrelCompost(writer, "grass", ingredient(Items.GRASS, Items.FERN), 100);
|
||||
barrelCompost(writer, "tall_grass", ingredient(Items.TALL_GRASS, Items.LARGE_FERN), 150);
|
||||
barrelCompost(writer, "seagrass", ingredient(Items.SEAGRASS), 80);
|
||||
barrelCompost(writer, "nether_wart", ingredient(Items.NETHER_WART), 100);
|
||||
barrelCompost(writer, "seeds", ingredient(Tags.Items.SEEDS), 80);
|
||||
barrelCompost(writer, "wheat", ingredient(Tags.Items.CROPS_WHEAT), 80);
|
||||
barrelCompost(writer, "berries", ingredient(Items.SWEET_BERRIES, Items.GLOW_BERRIES), 80);
|
||||
barrelCompost(writer, "melon", ingredient(Items.MELON), 200);
|
||||
barrelCompost(writer, "cake", ingredient(Items.CAKE), 500);
|
||||
barrelCompost(writer, "pumpkin", ingredient(Items.PUMPKIN), 500);
|
||||
barrelCompost(writer, "carrots", ingredient(Items.CARROT), 100);
|
||||
barrelCompost(writer, "potatoes", ingredient(Items.POTATO, Items.BAKED_POTATO, Items.POISONOUS_POTATO), 80);
|
||||
barrelCompost(writer, "beetroot", ingredient(Items.BEETROOT), 80);
|
||||
barrelCompost(writer, "moss_block", ingredient(Items.MOSS_BLOCK), 150);
|
||||
barrelCompost(writer, "moss_carpet", ingredient(Items.MOSS_CARPET), 100);
|
||||
barrelCompost(writer, "spores_and_seeds", SPORES_AND_SEEDS, 80);
|
||||
barrelCompost(writer, "bamboo", ingredient(Items.BAMBOO), 100);
|
||||
barrelCompost(writer, "cactus", ingredient(Items.CACTUS), 125);
|
||||
barrelCompost(writer, "dead_bush", ingredient(Items.DEAD_BUSH), 80);
|
||||
barrelCompost(writer, "chorus_flower", ingredient(Items.CHORUS_FLOWER), 150);
|
||||
barrelCompost(writer, "chorus_fruit", ingredient(Items.CHORUS_FRUIT), 80);
|
||||
barrelCompost(writer, "chorus_plant", ingredient(Items.CHORUS_PLANT), 150);
|
||||
barrelCompost(writer, "kelp", ingredient(Items.KELP, Items.DRIED_KELP), 80);
|
||||
barrelCompost(writer, "sea_pickle", ingredient(Items.SEA_PICKLE), 80);
|
||||
barrelCompost(writer, "spore_blossom", ingredient(Items.SPORE_BLOSSOM), 125);
|
||||
barrelCompost(writer, "weeping_vines", ingredient(Items.WEEPING_VINES), 100);
|
||||
barrelCompost(writer, "twisting_vines", ingredient(Items.TWISTING_VINES), 100);
|
||||
// flesh
|
||||
barrelCompost(writer, "rotten_flesh", ingredient(Items.ROTTEN_FLESH), 100);
|
||||
barrelCompost(writer, "spider_eye", ingredient(Items.SPIDER_EYE), 80);
|
||||
barrelCompost(writer, "fermented_spider_eye", ingredient(Items.FERMENTED_SPIDER_EYE), 100);
|
||||
barrelCompost(writer, "string", ingredient(Items.STRING), 40);
|
||||
barrelCompost(writer, "rabbit_foot", ingredient(Items.RABBIT_FOOT), 100);
|
||||
// meats
|
||||
barrelCompost(writer, "pork", ingredient(Items.PORKCHOP, Items.COOKED_PORKCHOP), 150);
|
||||
barrelCompost(writer, "beef", ingredient(Items.BEEF, Items.COOKED_BEEF), 150);
|
||||
barrelCompost(writer, "chicken", ingredient(Items.CHICKEN, Items.COOKED_CHICKEN), 125);
|
||||
barrelCompost(writer, "mutton", ingredient(Items.MUTTON, Items.COOKED_MUTTON), 125);
|
||||
barrelCompost(writer, "salmon", ingredient(Items.SALMON, Items.COOKED_SALMON), 125);
|
||||
barrelCompost(writer, "rabbit", ingredient(Items.RABBIT, Items.COOKED_RABBIT), 100);
|
||||
barrelCompost(writer, "cod", ingredient(Items.COD, Items.COOKED_COD), 100);
|
||||
barrelCompost(writer, "tropical_fish", ingredient(Items.TROPICAL_FISH), 80);
|
||||
barrelCompost(writer, "pufferfish", ingredient(Items.PUFFERFISH), 80);
|
||||
barrelCompost(writer, "egg", ingredient(Items.EGG), 100);
|
||||
// foods
|
||||
barrelCompost(writer, "melon_slice", ingredient(Items.MELON_SLICE), 40);
|
||||
barrelCompost(writer, "silk_worms", ingredient(EItems.SILK_WORM.get(), EItems.COOKED_SILK_WORM.get()), 40);
|
||||
barrelCompost(writer, "apple", ingredient(Items.APPLE), 100);
|
||||
barrelCompost(writer, "cookie", ingredient(Items.COOKIE), 100);
|
||||
barrelCompost(writer, "pumpkin_pie", ingredient(Items.PUMPKIN_PIE), 150);
|
||||
barrelCompost(writer, "bread", ingredient(Items.BREAD), 125);
|
||||
barrelCompost(writer, "mushroom_stew", ingredient(Items.MUSHROOM_STEW), 200);
|
||||
barrelCompost(writer, "suspicious_stew", ingredient(Items.SUSPICIOUS_STEW), 200);
|
||||
barrelCompost(writer, "beetroot_soup", ingredient(Items.BEETROOT_SOUP), 150);
|
||||
barrelCompost(writer, "rabbit_stew", ingredient(Items.RABBIT_STEW), 200);
|
||||
|
||||
// lol
|
||||
barrelCompost(writer, "golden_apples", ingredient(Items.GOLDEN_APPLE, Items.ENCHANTED_GOLDEN_APPLE), 1000);
|
||||
}
|
||||
|
||||
private static void barrelCompost(Consumer<FinishedRecipe> writer, String id, Ingredient ingredient, int volume) {
|
||||
writer.accept(new FinishedBarrelCompostRecipe(new ResourceLocation(ExDeorum.ID, "barrel_compost/" + id), ingredient, volume));
|
||||
}
|
||||
|
||||
private static void barrelMixingRecipes(Consumer<FinishedRecipe> writer) {
|
||||
// water
|
||||
barrelMixing(writer, ingredient(EItems.DUST.get()), Fluids.WATER, Items.CLAY);
|
||||
barrelMixing(writer, ingredient(Items.MILK_BUCKET), Fluids.WATER, Items.SLIME_BLOCK);
|
||||
barrelMixing(writer, "_from_porcelain_bucket", ingredient(EItems.PORCELAIN_MILK_BUCKET.get()), Fluids.WATER, Items.SLIME_BLOCK);
|
||||
barrelMixing(writer, ingredient(Items.SNOWBALL), Fluids.WATER, Items.ICE);
|
||||
barrelMixing(writer, ingredient(Items.LAVA_BUCKET), Fluids.WATER, Items.STONE);
|
||||
barrelMixing(writer, "_from_porcelain_bucket", ingredient(EItems.PORCELAIN_LAVA_BUCKET), Fluids.WATER, Items.STONE);
|
||||
// lava
|
||||
barrelMixing(writer, ingredient(EItems.WITCH_WATER_BUCKET), Fluids.LAVA, Items.NETHERRACK);
|
||||
barrelMixing(writer, "_from_porcelain_bucket", ingredient(EItems.PORCELAIN_WITCH_WATER_BUCKET), Fluids.LAVA, Items.NETHERRACK);
|
||||
barrelMixing(writer, ingredient(Items.GLOWSTONE_DUST), Fluids.LAVA, Items.END_STONE);
|
||||
barrelMixing(writer, ingredient(Items.WATER_BUCKET), Fluids.LAVA, Items.OBSIDIAN);
|
||||
barrelMixing(writer, "_from_porcelain_bucket", ingredient(EItems.PORCELAIN_WATER_BUCKET), Fluids.LAVA, Items.OBSIDIAN);
|
||||
barrelMixing(writer, ingredient(Items.SLIME_BALL), Fluids.LAVA, Items.MAGMA_CREAM);
|
||||
barrelMixing(writer, ingredient(Items.SOUL_SAND), Fluids.LAVA, Items.SOUL_SOIL);
|
||||
// witch water
|
||||
barrelMixing(writer, ingredient(Items.SAND), EFluids.WITCH_WATER.get(), Items.SOUL_SAND);
|
||||
}
|
||||
|
||||
private static void barrelMixing(Consumer<FinishedRecipe> writer, Ingredient ingredient, Fluid fluidType, Item result) {
|
||||
writer.accept(new FinishedBarrelMixingRecipe(new ResourceLocation(ExDeorum.ID, "barrel_mixing/" + path(result)), ingredient, fluidType, 1000, result));
|
||||
}
|
||||
|
||||
// todo replace with fluid mixing recipe type
|
||||
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));
|
||||
}
|
||||
|
||||
private static ICondition tagNotEmpty(TagKey<Item> tag) {
|
||||
return new NotCondition(new TagEmptyCondition(tag.location()));
|
||||
}
|
||||
|
||||
private static ICondition modInstalled(String modid) {
|
||||
return new ModLoadedCondition(modid);
|
||||
}
|
||||
}
|
||||
|
|
@ -162,8 +162,12 @@ public class WateringCanItem extends Item {
|
|||
}
|
||||
|
||||
if (!fluidHandler.getFluidInTank(0).isEmpty()) {
|
||||
if (usableInMachines || !(player instanceof FakePlayer)) {
|
||||
var realPlayer = !(player instanceof FakePlayer);
|
||||
|
||||
if (realPlayer) {
|
||||
player.startUsingItem(hand);
|
||||
} else if (this.usableInMachines) {
|
||||
onUseTick(level, player, itemInHand, 72000);
|
||||
}
|
||||
|
||||
return InteractionResultHolder.consume(itemInHand);
|
||||
|
|
@ -176,7 +180,7 @@ public class WateringCanItem extends Item {
|
|||
public void onUseTick(Level level, LivingEntity living, ItemStack stack, int remainingTicks) {
|
||||
var useTicks = 72000 - remainingTicks;
|
||||
|
||||
if (useTicks >= STARTUP_TIME) {
|
||||
if (useTicks >= STARTUP_TIME || living instanceof FakePlayer) {
|
||||
stack.getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM).ifPresent(fluidHandler -> {
|
||||
if (!fluidHandler.getFluidInTank(0).isEmpty()) {
|
||||
// do watering can
|
||||
|
|
@ -191,7 +195,7 @@ public class WateringCanItem extends Item {
|
|||
if (useTicks % WATERING_INTERVAL == 0) {
|
||||
tryWatering((ServerLevel) level, pos, state);
|
||||
|
||||
if (!renewing || fluidHandler.getFluidInTank(0).getAmount() != capacity) {
|
||||
if (!this.renewing || fluidHandler.getFluidInTank(0).getAmount() != capacity) {
|
||||
if (!(living instanceof Player player && player.getAbilities().instabuild)) {
|
||||
((CapabilityProvider) fluidHandler).drain();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import net.minecraft.util.GsonHelper;
|
|||
import net.minecraft.world.Container;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.item.crafting.Recipe;
|
||||
import net.minecraft.world.item.crafting.RecipeManager;
|
||||
|
|
@ -46,6 +47,7 @@ import net.minecraftforge.common.util.Lazy;
|
|||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import thedarkcolour.exdeorum.compat.ModdedTags;
|
||||
import thedarkcolour.exdeorum.recipe.barrel.BarrelCompostRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.barrel.BarrelMixingRecipe;
|
||||
import thedarkcolour.exdeorum.recipe.crucible.CrucibleRecipe;
|
||||
|
|
@ -291,7 +293,7 @@ public final class RecipeUtil {
|
|||
}
|
||||
|
||||
public static boolean isTagEmpty(TagKey<Item> tag) {
|
||||
return BuiltInRegistries.ITEM.getTag(tag).map(set -> !set.iterator().hasNext()).orElse(true);
|
||||
return BuiltInRegistries.ITEM.getTag(tag).map(set -> !set.iterator().hasNext()).orElse(ModdedTags.getPreferredOre(tag) == Items.AIR);
|
||||
}
|
||||
|
||||
private record SieveCacheKey(Item mesh, Item ingredient) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user