From a774c93a642714cb917c9cdfce9fdc1b6e1af4a8 Mon Sep 17 00:00:00 2001 From: thedarkcolour <30441001+thedarkcolour@users.noreply.github.com> Date: Fri, 26 Jan 2024 22:31:44 -0800 Subject: [PATCH] Barrel fluid mixing recipes can now optionally consume the additive fluid. Closes #41 --- .../93943142017732f21fbc4fa325d116c728b69767 | 4 +- .../9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e | 12 ++-- .../resources/assets/exdeorum/lang/en_us.json | 1 + .../barrel_fluid_mixing/blackstone.json | 1 + .../barrel_fluid_mixing/netherrack.json | 1 + .../recipes/barrel_fluid_mixing/obsidian.json | 1 + .../barrel_fluid_mixing/slime_block.json | 1 + .../recipes/barrel_fluid_mixing/stone.json | 1 + .../blockentity/BarrelBlockEntity.java | 66 +++++++++++-------- .../compat/jei/BarrelMixingCategory.java | 18 ++++- .../exdeorum/compat/jei/ClientJeiUtil.java | 18 +++-- .../exdeorum/compat/jei/SieveCategory.java | 2 +- .../thedarkcolour/exdeorum/data/English.java | 1 + .../exdeorum/data/TranslationKeys.java | 1 + .../exdeorum/data/recipe/Recipes.java | 15 +++-- .../barrel/BarrelFluidMixingRecipe.java | 10 ++- .../FinishedBarrelFluidMixingRecipe.java | 5 +- 17 files changed, 106 insertions(+), 52 deletions(-) diff --git a/src/generated/resources/.cache/93943142017732f21fbc4fa325d116c728b69767 b/src/generated/resources/.cache/93943142017732f21fbc4fa325d116c728b69767 index ec55f3e3..e227d341 100644 --- a/src/generated/resources/.cache/93943142017732f21fbc4fa325d116c728b69767 +++ b/src/generated/resources/.cache/93943142017732f21fbc4fa325d116c728b69767 @@ -1,2 +1,2 @@ -// 1.20.1 2024-01-12T17:15:18.0568334 ModKit Language: en_us for mod 'exdeorum' -134e71f17cef95d72141a3d6431db5eb8438f3a0 assets/exdeorum/lang/en_us.json +// 1.20.1 2024-01-26T16:29:51.8613552 ModKit Language: en_us for mod 'exdeorum' +2f38e208308fb2a7f506e2ce2b400970d1c27b57 assets/exdeorum/lang/en_us.json diff --git a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index 4aa9b18e..32b768f8 100644 --- a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,4 +1,4 @@ -// 1.20.1 2024-01-23T17:37:26.7724033 Recipes +// 1.20.1 2024-01-26T13:06:21.1726482 Recipes e37b64428f17e304e91539ac0513456d7ce40cd1 data/exdeorum/advancements/recipes/building_blocks/sponge.json 5ad481a0c376c1a1785a5d3b992064d0ec0bf3b0 data/exdeorum/advancements/recipes/food/end_cake.json 25dd027e844a72b03c95dbe5e3c3dd8c738ceb00 data/exdeorum/advancements/recipes/misc/acacia_barrel.json @@ -164,11 +164,11 @@ f17f12ac67e700f7838cb3bab740ec254bbfe13c data/exdeorum/recipes/barrel_compost/tw c4ecb4272c220282de403852031b3ca92651d91c data/exdeorum/recipes/barrel_compost/weeping_vines.json 5677e23fdc74130523d602ebf9e557f659af57c5 data/exdeorum/recipes/barrel_compost/wheat.json b9a34df74ce0ee9c4247a9a64784c851eb1de58c data/exdeorum/recipes/barrel_compost/wood_chippings.json -d08b7a270dff3f7bb45338798227a69d775e7c32 data/exdeorum/recipes/barrel_fluid_mixing/blackstone.json -1a87de0d21b9677fda38f7a520cbffbdc41d8532 data/exdeorum/recipes/barrel_fluid_mixing/netherrack.json -8b42ca284eaea721e8e7589e5fb0b16ccbe66ee5 data/exdeorum/recipes/barrel_fluid_mixing/obsidian.json -fe744cd05e5e9f62aa8d51f5c89376374288c90f data/exdeorum/recipes/barrel_fluid_mixing/slime_block.json -7cfc5db0d6fbb804a7bd1d3bbbbace986d90f3c4 data/exdeorum/recipes/barrel_fluid_mixing/stone.json +2a58c97cdeb49be251c4abc9284ec31d587cda04 data/exdeorum/recipes/barrel_fluid_mixing/blackstone.json +990221ead2f72a9c74b27edfa387c88c7d8da3f8 data/exdeorum/recipes/barrel_fluid_mixing/netherrack.json +6d2469e79cbc88817a4582fa467857d65d9b70ed data/exdeorum/recipes/barrel_fluid_mixing/obsidian.json +4657af4003335ca25d2f92c43fd82dc3b3ad7fb2 data/exdeorum/recipes/barrel_fluid_mixing/slime_block.json +5e2a7bd06a83260c18c007bcf793c336faef264d data/exdeorum/recipes/barrel_fluid_mixing/stone.json bdcdeae9d06028ce943d06c367b58677efe03fa8 data/exdeorum/recipes/barrel_mixing/clay.json 72f969f4db1f82a627df573c866a1b291e540a0a data/exdeorum/recipes/barrel_mixing/end_stone.json 37f73e219fda3c6f56bf55f8ec7f97586ecdbae1 data/exdeorum/recipes/barrel_mixing/ice.json diff --git a/src/generated/resources/assets/exdeorum/lang/en_us.json b/src/generated/resources/assets/exdeorum/lang/en_us.json index 16e4643d..61fffc83 100644 --- a/src/generated/resources/assets/exdeorum/lang/en_us.json +++ b/src/generated/resources/assets/exdeorum/lang/en_us.json @@ -124,6 +124,7 @@ "gui.exdeorum.category.barrel_compost": "Barrel Compost", "gui.exdeorum.category.barrel_compost.volume": "Compost: %s", "gui.exdeorum.category.barrel_fluid_mixing": "Barrel Fluid Mixing", + "gui.exdeorum.category.barrel_fluid_mixing.contents_are_consumed": "Contents are consumed", "gui.exdeorum.category.barrel_mixing": "Barrel Mixing", "gui.exdeorum.category.crucible_heat_source": "Crucible Heat Sources", "gui.exdeorum.category.crucible_heat_source.multiplier": "Melt Rate: %sx", diff --git a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/blackstone.json b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/blackstone.json index c9dd5057..f83dc932 100644 --- a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/blackstone.json +++ b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/blackstone.json @@ -3,5 +3,6 @@ "additive_fluid": "exdeorum:witch_water", "base_fluid": "minecraft:lava", "base_fluid_amount": 1000, + "consumes_additive": true, "result": "minecraft:blackstone" } \ No newline at end of file diff --git a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/netherrack.json b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/netherrack.json index 59a2770e..0b7e6de8 100644 --- a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/netherrack.json +++ b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/netherrack.json @@ -3,5 +3,6 @@ "additive_fluid": "minecraft:lava", "base_fluid": "exdeorum:witch_water", "base_fluid_amount": 1000, + "consumes_additive": true, "result": "minecraft:netherrack" } \ No newline at end of file diff --git a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/obsidian.json b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/obsidian.json index fdb127e2..b934e4bd 100644 --- a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/obsidian.json +++ b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/obsidian.json @@ -3,5 +3,6 @@ "additive_fluid": "minecraft:water", "base_fluid": "minecraft:lava", "base_fluid_amount": 1000, + "consumes_additive": false, "result": "minecraft:obsidian" } \ No newline at end of file diff --git a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/slime_block.json b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/slime_block.json index 2cb51306..ef2584e9 100644 --- a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/slime_block.json +++ b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/slime_block.json @@ -3,5 +3,6 @@ "additive_fluid": "minecraft:milk", "base_fluid": "minecraft:water", "base_fluid_amount": 1000, + "consumes_additive": true, "result": "minecraft:slime_block" } \ No newline at end of file diff --git a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/stone.json b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/stone.json index d5562c1e..1872ebe9 100644 --- a/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/stone.json +++ b/src/generated/resources/data/exdeorum/recipes/barrel_fluid_mixing/stone.json @@ -3,5 +3,6 @@ "additive_fluid": "minecraft:lava", "base_fluid": "minecraft:water", "base_fluid_amount": 1000, + "consumes_additive": false, "result": "minecraft:stone" } \ No newline at end of file diff --git a/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java b/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java index 749c1004..ba8e64b4 100644 --- a/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java +++ b/src/main/java/thedarkcolour/exdeorum/blockentity/BarrelBlockEntity.java @@ -37,9 +37,10 @@ import net.minecraft.world.item.alchemy.PotionUtils; import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.BucketPickup; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.Fluids; import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.capabilities.Capability; @@ -63,9 +64,6 @@ import thedarkcolour.exdeorum.recipe.barrel.BarrelFluidMixingRecipe; import thedarkcolour.exdeorum.registry.EBlockEntities; import thedarkcolour.exdeorum.registry.EFluids; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - public class BarrelBlockEntity extends EBlockEntity { private static final int MOSS_SPREAD_RANGE = 2; @@ -73,7 +71,7 @@ public class BarrelBlockEntity extends EBlockEntity { private final BarrelBlockEntity.FluidHandler tank = new BarrelBlockEntity.FluidHandler(); public float progress; public short compost; - // compost colors + // compost colors (has to be shorts because Java bytes are signed and only go to 127, when need 255) public short r, g, b; // Used to avoid triggering obsidian dupes in onContentsChanged, because Forge's FluidUtil actually modifies the tank for some reason private boolean isBeingFilledByPlayer; @@ -85,9 +83,8 @@ public class BarrelBlockEntity extends EBlockEntity { private final LazyOptional itemHandler = LazyOptional.of(() -> this.item); private final LazyOptional fluidHandler = LazyOptional.of(() -> this.tank); - @Nonnull @Override - public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + public LazyOptional getCapability(Capability cap, Direction side) { if (cap == ForgeCapabilities.FLUID_HANDLER) { return this.fluidHandler.cast(); } else if (cap == ForgeCapabilities.ITEM_HANDLER) { @@ -257,13 +254,22 @@ public class BarrelBlockEntity extends EBlockEntity { } // Otherwise, mix the item's fluid into the barrel's fluid - var itemFluidCap = playerItem.getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM).resolve(); - if (itemFluidCap.isPresent()) { - var fluidInTank = itemFluidCap.get().getFluidInTank(0); + var itemFluidCapOptional = playerItem.getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM).resolve(); + if (itemFluidCapOptional.isPresent()) { + var itemFluidCap = itemFluidCapOptional.get(); + var itemFluid = itemFluidCap.drain(1000, IFluidHandler.FluidAction.SIMULATE); + BarrelFluidMixingRecipe recipe = RecipeUtil.getFluidMixingRecipe(this.tank.getFluid(), itemFluid.getFluid()); - if (this.tank.getFluidAmount() >= 1000) { + // If draining item fluid was possible and tank has enough fluid to mix... + if (recipe != null && this.tank.getFluidAmount() >= recipe.baseFluidAmount && itemFluid.getAmount() == 1000) { if (!level.isClientSide) { - tryFluidMixing(fluidInTank.getFluid()); + this.tank.drain(recipe.baseFluidAmount, IFluidHandler.FluidAction.EXECUTE); + setItem(new ItemStack(recipe.result)); + + if (recipe.consumesAdditive) { + itemFluidCap.drain(1000, IFluidHandler.FluidAction.EXECUTE); + player.setItemInHand(hand, itemFluidCap.getContainer()); + } } // If a mix was successful, skip rest of logic return InteractionResult.sidedSuccess(level.isClientSide); @@ -415,23 +421,32 @@ public class BarrelBlockEntity extends EBlockEntity { */ public void tryInWorldFluidMixing() { if (!this.tank.isEmpty() && this.item.getStackInSlot(0).isEmpty()) { - var aboveFluid = this.level.getBlockState(this.worldPosition.above()).getFluidState().getType(); + var abovePos = this.worldPosition.above(); + var aboveBlockState = this.level.getBlockState(abovePos); + var aboveFluidState = aboveBlockState.getFluidState(); + var aboveFluid = aboveFluidState.getType(); if (aboveFluid != Fluids.EMPTY) { - tryFluidMixing(aboveFluid); + BarrelFluidMixingRecipe recipe = RecipeUtil.getFluidMixingRecipe(this.tank.getFluid(), aboveFluid instanceof FlowingFluid flowing ? flowing.getSource() : aboveFluid); + + if (recipe != null) { + // If additive is not consumed, just craft + // If additive is consumed, check that the additive can be consumed before crafting + if (!recipe.consumesAdditive) { + this.tank.drain(recipe.baseFluidAmount, IFluidHandler.FluidAction.EXECUTE); + setItem(new ItemStack(recipe.result)); + } else if (aboveBlockState.getBlock() instanceof BucketPickup pickup) { + // If something was picked up, we can craft + if (!pickup.pickupBlock(this.level, abovePos, aboveBlockState).isEmpty()) { + this.tank.drain(recipe.baseFluidAmount, IFluidHandler.FluidAction.EXECUTE); + setItem(new ItemStack(recipe.result)); + } + } + } } } } - private void tryFluidMixing(Fluid additive) { - BarrelFluidMixingRecipe recipe = RecipeUtil.getFluidMixingRecipe(this.tank.getFluid(), additive); - - if (recipe != null) { - this.tank.drain(recipe.baseFluidAmount, IFluidHandler.FluidAction.EXECUTE); - setItem(new ItemStack(recipe.result)); - } - } - public static class Ticker implements BlockEntityTicker { @Override public void tick(Level level, BlockPos pos, BlockState state, BarrelBlockEntity barrel) { @@ -540,12 +555,12 @@ public class BarrelBlockEntity extends EBlockEntity { // Inner class private class ItemHandler extends ItemStackHandler { @Override - protected int getStackLimit(int slot, @Nonnull ItemStack stack) { + protected int getStackLimit(int slot, ItemStack stack) { return 1; } @Override - public boolean isItemValid(int slot, @Nonnull ItemStack stack) { + public boolean isItemValid(int slot, ItemStack stack) { return tryCrafting(stack, true); } @@ -565,7 +580,6 @@ public class BarrelBlockEntity extends EBlockEntity { return ItemHandlerHelper.copyStackWithSize(stack, stack.getCount() - 1); } } else { - stack.getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM).ifPresent(itemFluid -> tryFluidMixing(itemFluid.getFluidInTank(0).getFluid())); return stack; } } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelMixingCategory.java b/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelMixingCategory.java index 030ff12e..64ee4b46 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelMixingCategory.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jei/BarrelMixingCategory.java @@ -19,6 +19,7 @@ package thedarkcolour.exdeorum.compat.jei; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.builder.IRecipeSlotBuilder; import mezz.jei.api.gui.drawable.IDrawable; import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.helpers.IGuiHelper; @@ -26,6 +27,7 @@ import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.ChatFormatting; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.world.item.Item; @@ -98,6 +100,8 @@ public abstract class BarrelMixingCategory implements IRecipeCategory { } public static class Fluids extends BarrelMixingCategory { + private static final Component CONTENTS_ARE_CONSUMED_TOOLTIP = Component.translatable(TranslationKeys.BARREL_FLUID_MIXING_CONTENTS_ARE_CONSUMED).withStyle(ChatFormatting.RED); + public Fluids(IGuiHelper helper, IDrawable plus, IDrawable arrow) { super(helper, plus, arrow, TranslationKeys.BARREL_FLUID_MIXING_CATEGORY_TITLE, EItems.STONE_BARREL.get()); } @@ -105,7 +109,10 @@ public abstract class BarrelMixingCategory implements IRecipeCategory { @Override public void setRecipe(IRecipeLayoutBuilder builder, BarrelFluidMixingRecipe recipe, IFocusGroup focuses) { builder.addSlot(RecipeIngredientRole.INPUT, 1, 1).addFluidStack(recipe.baseFluid, recipe.baseFluidAmount).setFluidRenderer(1000, false, 16, 16); - builder.addSlot(RecipeIngredientRole.INPUT, 33, 1).addFluidStack(recipe.additiveFluid, 1000).setFluidRenderer(1000, false, 16, 16); + IRecipeSlotBuilder additiveSlot = builder.addSlot(RecipeIngredientRole.INPUT, 33, 1).addFluidStack(recipe.additiveFluid, 1000).setFluidRenderer(1000, false, 16, 16); + if (recipe.consumesAdditive) { + additiveSlot.addTooltipCallback((view, tooltip) -> tooltip.add(CONTENTS_ARE_CONSUMED_TOOLTIP)); + } builder.addSlot(RecipeIngredientRole.OUTPUT, 79, 1).addItemStack(new ItemStack(recipe.result)); } @@ -113,5 +120,14 @@ public abstract class BarrelMixingCategory implements IRecipeCategory { public RecipeType getRecipeType() { return ExDeorumJeiPlugin.BARREL_FLUID_MIXING; } + + @Override + public void draw(BarrelFluidMixingRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics graphics, double mouseX, double mouseY) { + super.draw(recipe, recipeSlotsView, graphics, mouseX, mouseY); + + if (recipe.consumesAdditive) { + ClientJeiUtil.renderAsterisk(graphics, 18 + 3 + 3 + 8, 0); + } + } } } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jei/ClientJeiUtil.java b/src/main/java/thedarkcolour/exdeorum/compat/jei/ClientJeiUtil.java index 7523550e..1a1109ad 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jei/ClientJeiUtil.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jei/ClientJeiUtil.java @@ -30,6 +30,7 @@ import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; import net.minecraft.ReportedException; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.MultiBufferSource; @@ -119,14 +120,21 @@ class ClientJeiUtil { poseStack.popPose(); } - static void renderItemWithAsterisk(GuiGraphics graphics, ItemStack stack, int xOffset, int yOffset) { + static void renderItemWithAsterisk(GuiGraphics graphics, ItemStack stack) { Minecraft mc = Minecraft.getInstance(); BakedModel model = mc.getItemRenderer().getModel(stack, mc.level, null, 0); - renderItemAlternativeModel(graphics, model, stack, xOffset, yOffset); + renderItemAlternativeModel(graphics, model, stack, 0, 0); + renderAsterisk(graphics, 0, 0); + } + + static void renderAsterisk(GuiGraphics graphics, int xOffset, int yOffset) { graphics.pose().pushPose(); graphics.pose().translate(0f, 0f, 200f); + + var font = Minecraft.getInstance().font; // 0xff5555 is Minecraft's red text color. - graphics.drawString(mc.font, "*", xOffset + 19 - 2 - mc.font.width("*"), yOffset + 12, 0xff5555, true); + graphics.drawString(font, "*", xOffset + 19 - 2 - font.width("*"), yOffset + 12, 0xff5555, true); + graphics.pose().popPose(); } @@ -224,14 +232,14 @@ class ClientJeiUtil { } } - enum AsteriskRenderer implements IIngredientRenderer { + enum AsteriskItemRenderer implements IIngredientRenderer { INSTANCE; @Override public void render(GuiGraphics graphics, ItemStack ingredient) { // From mezz.jei.library.render.ItemStackRenderer RenderSystem.enableDepthTest(); - ClientJeiUtil.renderItemWithAsterisk(graphics, ingredient, 0, 0); + ClientJeiUtil.renderItemWithAsterisk(graphics, ingredient); // From end of DrawableIngredient RenderSystem.disableDepthTest(); } diff --git a/src/main/java/thedarkcolour/exdeorum/compat/jei/SieveCategory.java b/src/main/java/thedarkcolour/exdeorum/compat/jei/SieveCategory.java index 9059117d..09587e1a 100644 --- a/src/main/java/thedarkcolour/exdeorum/compat/jei/SieveCategory.java +++ b/src/main/java/thedarkcolour/exdeorum/compat/jei/SieveCategory.java @@ -109,7 +109,7 @@ class SieveCategory implements IRecipeCategory { if (byHandOnly) { tooltipLines.add(BY_HAND_ONLY_LABEL); - slot.setCustomRenderer(VanillaTypes.ITEM_STACK, ClientJeiUtil.AsteriskRenderer.INSTANCE); + slot.setCustomRenderer(VanillaTypes.ITEM_STACK, ClientJeiUtil.AsteriskItemRenderer.INSTANCE); } if (provider instanceof BinomialDistributionGenerator binomial) { if (binomial.n instanceof ConstantValue constant && constant.value == 1) { diff --git a/src/main/java/thedarkcolour/exdeorum/data/English.java b/src/main/java/thedarkcolour/exdeorum/data/English.java index 895cd19d..c004334d 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/English.java +++ b/src/main/java/thedarkcolour/exdeorum/data/English.java @@ -60,6 +60,7 @@ class English { english.add(TranslationKeys.BARREL_COMPOST_RECIPE_VOLUME, "Compost: %s"); english.add(TranslationKeys.BARREL_MIXING_CATEGORY_TITLE, "Barrel Mixing"); english.add(TranslationKeys.BARREL_FLUID_MIXING_CATEGORY_TITLE, "Barrel Fluid Mixing"); + english.add(TranslationKeys.BARREL_FLUID_MIXING_CONTENTS_ARE_CONSUMED, "Contents are consumed"); english.add(TranslationKeys.WATER_CRUCIBLE_CATEGORY_TITLE, "Water Crucible"); english.add(TranslationKeys.LAVA_CRUCIBLE_CATEGORY_TITLE, "Lava Crucible"); english.add(TranslationKeys.CRUCIBLE_HEAT_SOURCE_CATEGORY_TITLE, "Crucible Heat Sources"); diff --git a/src/main/java/thedarkcolour/exdeorum/data/TranslationKeys.java b/src/main/java/thedarkcolour/exdeorum/data/TranslationKeys.java index 120d5a96..0771e36b 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/TranslationKeys.java +++ b/src/main/java/thedarkcolour/exdeorum/data/TranslationKeys.java @@ -59,6 +59,7 @@ public class TranslationKeys { public static final String BARREL_COMPOST_RECIPE_VOLUME = "gui." + ExDeorum.ID + ".category.barrel_compost.volume"; public static final String BARREL_MIXING_CATEGORY_TITLE = "gui." + ExDeorum.ID + ".category.barrel_mixing"; public static final String BARREL_FLUID_MIXING_CATEGORY_TITLE = "gui." + ExDeorum.ID + ".category.barrel_fluid_mixing"; + public static final String BARREL_FLUID_MIXING_CONTENTS_ARE_CONSUMED = "gui." + ExDeorum.ID + ".category.barrel_fluid_mixing.contents_are_consumed"; public static final String WATER_CRUCIBLE_CATEGORY_TITLE = "gui." + ExDeorum.ID + ".category.water_crucible"; public static final String LAVA_CRUCIBLE_CATEGORY_TITLE = "gui." + ExDeorum.ID + ".category.lava_crucible"; public static final String CRUCIBLE_HEAT_SOURCE_CATEGORY_TITLE = "gui." + ExDeorum.ID + ".category.crucible_heat_source"; diff --git a/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java b/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java index 89cd6a07..7593fd6a 100644 --- a/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java +++ b/src/main/java/thedarkcolour/exdeorum/data/recipe/Recipes.java @@ -29,6 +29,7 @@ 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.FlowingFluid; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; @@ -550,14 +551,14 @@ public class Recipes { 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); - barrelFluidMixing(writer, Fluids.WATER, ForgeMod.MILK.get(), Items.SLIME_BLOCK); + barrelFluidMixing(writer, Fluids.WATER, ForgeMod.MILK.get(), Items.SLIME_BLOCK, true); barrelMixing(writer, ingredient(Items.SNOWBALL), Fluids.WATER, Items.ICE); - barrelFluidMixing(writer, Fluids.WATER, Fluids.LAVA, Items.STONE); + barrelFluidMixing(writer, Fluids.WATER, Fluids.LAVA, Items.STONE, false); // lava - barrelFluidMixing(writer, EFluids.WITCH_WATER.get(), Fluids.LAVA, Items.NETHERRACK); - barrelFluidMixing(writer, Fluids.LAVA, EFluids.WITCH_WATER.get(), Items.BLACKSTONE); + barrelFluidMixing(writer, EFluids.WITCH_WATER.get(), Fluids.LAVA, Items.NETHERRACK, true); + barrelFluidMixing(writer, Fluids.LAVA, EFluids.WITCH_WATER.get(), Items.BLACKSTONE, true); barrelMixing(writer, ingredient(Items.GLOWSTONE_DUST), Fluids.LAVA, Items.END_STONE); - barrelFluidMixing(writer, Fluids.LAVA, Fluids.WATER, Items.OBSIDIAN); + barrelFluidMixing(writer, Fluids.LAVA, Fluids.WATER, Items.OBSIDIAN, false); barrelMixing(writer, ingredient(Items.SLIME_BALL), Fluids.LAVA, Items.MAGMA_CREAM); barrelMixing(writer, ingredient(Items.SOUL_SAND), Fluids.LAVA, Items.SOUL_SOIL); // witch water @@ -572,8 +573,8 @@ public class Recipes { writer.accept(new FinishedBarrelMixingRecipe(new ResourceLocation(ExDeorum.ID, "barrel_mixing/" + path(result) + suffix), ingredient, fluidType, 1000, result)); } - private static void barrelFluidMixing(Consumer writer, Fluid base, Fluid additive, Item result) { - writer.accept(new FinishedBarrelFluidMixingRecipe(new ResourceLocation(ExDeorum.ID, "barrel_fluid_mixing/" + path(result)), base, 1000, additive, result)); + private static void barrelFluidMixing(Consumer writer, Fluid base, Fluid additive, Item result, boolean consumesAdditive) { + writer.accept(new FinishedBarrelFluidMixingRecipe(new ResourceLocation(ExDeorum.ID, "barrel_fluid_mixing/" + path(result)), base, 1000, additive, result, consumesAdditive)); } static ICondition tagNotEmpty(TagKey tag) { diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelFluidMixingRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelFluidMixingRecipe.java index da30e017..6c3f4aba 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelFluidMixingRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/BarrelFluidMixingRecipe.java @@ -48,13 +48,15 @@ public class BarrelFluidMixingRecipe implements Recipe { public final int baseFluidAmount; public final Fluid additiveFluid; public final Item result; + public final boolean consumesAdditive; - public BarrelFluidMixingRecipe(ResourceLocation id, Fluid baseFluid, int baseFluidAmount, Fluid additiveFluid, Item result) { + public BarrelFluidMixingRecipe(ResourceLocation id, Fluid baseFluid, int baseFluidAmount, Fluid additiveFluid, Item result, boolean consumesAdditive) { this.id = id; this.baseFluid = baseFluid; this.baseFluidAmount = baseFluidAmount; this.additiveFluid = additiveFluid; this.result = result; + this.consumesAdditive = consumesAdditive; } @Override @@ -99,8 +101,9 @@ public class BarrelFluidMixingRecipe implements Recipe { int baseFluidAmount = GsonHelper.getAsInt(json, "base_fluid_amount"); Fluid additiveFluid = RecipeUtil.readFluid(json, "additive_fluid"); Item result = RecipeUtil.readItem(json, "result"); + boolean consumesAdditive = GsonHelper.getAsBoolean(json, "consumes_additive"); - return new BarrelFluidMixingRecipe(id, baseFluid, baseFluidAmount, additiveFluid, result); + return new BarrelFluidMixingRecipe(id, baseFluid, baseFluidAmount, additiveFluid, result, consumesAdditive); } @Override @@ -117,8 +120,9 @@ public class BarrelFluidMixingRecipe implements Recipe { int baseFluidAmount = buffer.readVarInt(); Fluid additiveFluid = buffer.readRegistryId(); Item result = buffer.readRegistryId(); + boolean consumesAdditive = buffer.readBoolean(); - return new BarrelFluidMixingRecipe(id, baseFluid, baseFluidAmount, additiveFluid, result); + return new BarrelFluidMixingRecipe(id, baseFluid, baseFluidAmount, additiveFluid, result, consumesAdditive); } } } diff --git a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/FinishedBarrelFluidMixingRecipe.java b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/FinishedBarrelFluidMixingRecipe.java index 508cae2f..2b3b0d2a 100644 --- a/src/main/java/thedarkcolour/exdeorum/recipe/barrel/FinishedBarrelFluidMixingRecipe.java +++ b/src/main/java/thedarkcolour/exdeorum/recipe/barrel/FinishedBarrelFluidMixingRecipe.java @@ -33,13 +33,15 @@ public class FinishedBarrelFluidMixingRecipe implements EFinishedRecipe { private final int baseFluidAmount; private final Fluid additiveFluid; private final Item result; + private final boolean consumesAdditive; - public FinishedBarrelFluidMixingRecipe(ResourceLocation id, Fluid baseFluid, int baseFluidAmount, Fluid additiveFluid, Item result) { + public FinishedBarrelFluidMixingRecipe(ResourceLocation id, Fluid baseFluid, int baseFluidAmount, Fluid additiveFluid, Item result, boolean consumesAdditive) { this.id = id; this.baseFluid = baseFluid; this.baseFluidAmount = baseFluidAmount; this.additiveFluid = additiveFluid; this.result = result; + this.consumesAdditive = consumesAdditive; } @Override @@ -47,6 +49,7 @@ public class FinishedBarrelFluidMixingRecipe implements EFinishedRecipe { json.addProperty("base_fluid", ForgeRegistries.FLUIDS.getKey(this.baseFluid).toString()); json.addProperty("base_fluid_amount", this.baseFluidAmount); json.addProperty("additive_fluid", ForgeRegistries.FLUIDS.getKey(this.additiveFluid).toString()); + json.addProperty("consumes_additive", this.consumesAdditive); json.addProperty("result", ForgeRegistries.ITEMS.getKey(this.result).toString()); }