Barrel fluid mixing recipes can now optionally consume the additive fluid. Closes #41

This commit is contained in:
thedarkcolour 2024-01-26 22:31:44 -08:00
parent 6f131ab770
commit a774c93a64
17 changed files with 106 additions and 52 deletions

View File

@ -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

View File

@ -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

View File

@ -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",

View File

@ -3,5 +3,6 @@
"additive_fluid": "exdeorum:witch_water",
"base_fluid": "minecraft:lava",
"base_fluid_amount": 1000,
"consumes_additive": true,
"result": "minecraft:blackstone"
}

View File

@ -3,5 +3,6 @@
"additive_fluid": "minecraft:lava",
"base_fluid": "exdeorum:witch_water",
"base_fluid_amount": 1000,
"consumes_additive": true,
"result": "minecraft:netherrack"
}

View File

@ -3,5 +3,6 @@
"additive_fluid": "minecraft:water",
"base_fluid": "minecraft:lava",
"base_fluid_amount": 1000,
"consumes_additive": false,
"result": "minecraft:obsidian"
}

View File

@ -3,5 +3,6 @@
"additive_fluid": "minecraft:milk",
"base_fluid": "minecraft:water",
"base_fluid_amount": 1000,
"consumes_additive": true,
"result": "minecraft:slime_block"
}

View File

@ -3,5 +3,6 @@
"additive_fluid": "minecraft:lava",
"base_fluid": "minecraft:water",
"base_fluid_amount": 1000,
"consumes_additive": false,
"result": "minecraft:stone"
}

View File

@ -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<IItemHandler> itemHandler = LazyOptional.of(() -> this.item);
private final LazyOptional<IFluidHandler> fluidHandler = LazyOptional.of(() -> this.tank);
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
public <T> LazyOptional<T> getCapability(Capability<T> 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<BarrelBlockEntity> {
@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;
}
}

View File

@ -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<T> implements IRecipeCategory<T> {
}
public static class Fluids extends BarrelMixingCategory<BarrelFluidMixingRecipe> {
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<T> implements IRecipeCategory<T> {
@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<T> implements IRecipeCategory<T> {
public RecipeType<BarrelFluidMixingRecipe> 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);
}
}
}
}

View File

@ -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<ItemStack> {
enum AsteriskItemRenderer implements IIngredientRenderer<ItemStack> {
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();
}

View File

@ -109,7 +109,7 @@ class SieveCategory implements IRecipeCategory<GroupedSieveRecipe> {
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) {

View File

@ -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");

View File

@ -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";

View File

@ -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<FinishedRecipe> 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<FinishedRecipe> 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<Item> tag) {

View File

@ -48,13 +48,15 @@ public class BarrelFluidMixingRecipe implements Recipe<Container> {
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<Container> {
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<Container> {
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);
}
}
}

View File

@ -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());
}