diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/FluidTankHelper.java b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/FluidTankHelper.java index dd713588..92f29a85 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/FluidTankHelper.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/FluidTankHelper.java @@ -46,19 +46,19 @@ else if (OxygenUtils.getOxygenCapacity(inputStack) - storedOxygen > convertFromN } else if (tank.getFluidValue() < convertFromNeoMb(10) && storedOxygen + tank.getFluidValue() <= OxygenUtils.getOxygenCapacity(inputStack)) { OxygenUtils.addOxygen(resultStack, tank.getFluidValue()); - tank.drainFluid(FluidStack.create(tank.getBaseFluid(), tank.getFluidValue()), false); + tank.drain(FluidStack.create(tank.getFluidInTank(0).getFluid(), tank.getFluidValue()), false); } else if (tank.getFluidValue() > OxygenUtils.getOxygenCapacity(inputStack) - storedOxygen){ OxygenUtils.addOxygen(resultStack, OxygenUtils.getOxygenCapacity(inputStack) - storedOxygen); - tank.drainFluid(FluidStack.create(tank.getBaseFluid(), OxygenUtils.getOxygenCapacity(inputStack)), false); + tank.drain(FluidStack.create(tank.getFluidInTank(0).getFluid(), OxygenUtils.getOxygenCapacity(inputStack)), false); } } else if (!isTank && isEmptyBucket(inputStack.getItem())) { - ItemStack stack = new ItemStack(tank.getFluidStack().getFluid().getBucket()); + ItemStack stack = new ItemStack(tank.getFluidInTank(0).getFluid().getBucket()); if (!stack.isEmpty() && !isEmptyBucket(stack.getItem())) { resultStack = stack; - tank.drainFluid(FluidStack.create(tank.getBaseFluid(), BUCKET_AMOUNT), false); + tank.drain(FluidStack.create(tank.getFluidInTank(0).getFluid(), BUCKET_AMOUNT), false); } } @@ -87,7 +87,7 @@ public static void extractFluidToItem(T bloc ItemStack resultStack = ItemStack.EMPTY; if (isEmptyBucket(inputStack.getItem())) { - resultStack = new ItemStack(tank.getFluidStack().getFluid().getBucket()); + resultStack = new ItemStack(tank.getFluidInTank(0).getFluid().getBucket()); } else if (canFuel) { resultStack = inputStack.copy(); @@ -115,7 +115,7 @@ else if (ItemStack.isSameItem(outputStack, resultStack) && hasSpace) { } inputStack.shrink(1); - tank.drainFluid(FluidStack.create(tank.getBaseFluid(), amount), false); + tank.drain(FluidStack.create(tank.getFluidInTank(0).getFluid(), amount), false); blockEntity.setChanged(); } } @@ -124,8 +124,7 @@ else if (ItemStack.isSameItem(outputStack, resultStack) && hasSpace) { } public static void addToTank(FluidTank tank, FluidStack stack) { - tank.fillFluid(stack, false); - + tank.fill(stack, false); } public static boolean addFluidFromBucket(T blockEntity, FluidTank tank, int inputSlot, int outputSlot) { @@ -138,7 +137,7 @@ public static boolean addFluidFromBucket(T b if (inputStack.getItem() instanceof BucketItem item) { Fluid fluid = FluidBucketHooks.getFluid(item); - if (tank.getFluidStack().getFluid() == fluid) { + if (tank.getFluidInTank(0).getFluid() == fluid) { if (outputStack.isEmpty()) { blockEntity.setItem(outputSlot, new ItemStack(Items.BUCKET)); } diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/FuelRefineryBlockEntity.java b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/FuelRefineryBlockEntity.java index 0807af8b..e7d50949 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/FuelRefineryBlockEntity.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/FuelRefineryBlockEntity.java @@ -1,6 +1,5 @@ package com.st0x0ef.stellaris.common.blocks.entities.machines; -import com.fej1fun.potentials.fluid.UniversalFluidTank; import com.fej1fun.potentials.providers.FluidProvider; import com.st0x0ef.stellaris.common.capabilities.fluid.FluidTank; import com.st0x0ef.stellaris.common.data.recipes.FuelRefineryRecipe; @@ -50,7 +49,7 @@ else if (FuelUtils.getFuel(getItem(2)) + fuel > JetSuit.MAX_FUEL_CAPACITY) { } if (FuelUtils.addFuel(getItem(2), fuel)) { - resultTank.drainFluid(FluidStack.create(FluidRegistry.FLOWING_FUEL.get(), fuel), false); + resultTank.drain(FluidStack.create(FluidRegistry.FLOWING_FUEL.get(), fuel), false); this.setChanged(); } } else { @@ -71,7 +70,7 @@ else if (FuelUtils.getFuel(getItem(2)) + fuel > JetSuit.MAX_FUEL_CAPACITY) { if (resultTank.getFluidStack().isEmpty() || resultTank.getFluidStack().isFluidEqual(resultStack)) { if (resultTank.getFluidValue() + resultStack.getAmount() < resultTank.getMaxAmount()) { energy.extract(recipe.energy(), false); - ingredientTank.drainFluid(FluidStack.create(recipe.ingredientStack().getFluid(), recipe.ingredientStack().getAmount()), false); + ingredientTank.drain(FluidStack.create(recipe.ingredientStack().getFluid(), recipe.ingredientStack().getAmount()), false); FluidTankHelper.addToTank(resultTank, resultStack); setChanged(); } @@ -119,7 +118,7 @@ public FluidTank getResultTank() { @Override - public @Nullable UniversalFluidTank getFluidTank(@Nullable Direction direction) { + public @Nullable FluidTank getFluidTank(@Nullable Direction direction) { if(direction == null) { return resultTank; diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/OxygenDistributorBlockEntity.java b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/OxygenDistributorBlockEntity.java index 04119497..b53934dd 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/OxygenDistributorBlockEntity.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/OxygenDistributorBlockEntity.java @@ -1,6 +1,5 @@ package com.st0x0ef.stellaris.common.blocks.entities.machines; -import com.fej1fun.potentials.fluid.UniversalFluidTank; import com.fej1fun.potentials.providers.FluidProvider; import com.st0x0ef.stellaris.common.capabilities.fluid.FluidTank; import com.st0x0ef.stellaris.common.menus.OxygenGeneratorMenu; @@ -57,7 +56,7 @@ public boolean useOxygenAndEnergy() { } if (oxygenTank.getFluidValue() > 0 && this.energy.getEnergy() > 0) { - oxygenTank.drainFluid(FluidStack.create(FluidRegistry.OXYGEN_ATTRIBUTES.getSourceFluid(), 1), false); + oxygenTank.drain(FluidStack.create(FluidRegistry.OXYGEN_ATTRIBUTES.getSourceFluid(), 1), false); this.energy.extract(1, false); return true; } @@ -66,7 +65,7 @@ public boolean useOxygenAndEnergy() { } public void addOxygen(long amount) { - oxygenTank.fillFluid(FluidStack.create(FluidRegistry.OXYGEN_ATTRIBUTES.getSourceFluid(), amount), false); + oxygenTank.fill(FluidStack.create(FluidRegistry.OXYGEN_ATTRIBUTES.getSourceFluid(), amount), false); } @Override @@ -98,7 +97,7 @@ protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { @Override - public @Nullable UniversalFluidTank getFluidTank(@Nullable Direction direction) { + public @Nullable FluidTank getFluidTank(@Nullable Direction direction) { return oxygenTank; } } diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/PipeBlockEntity.java b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/PipeBlockEntity.java index 961a4934..6cd6adb9 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/PipeBlockEntity.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/PipeBlockEntity.java @@ -1,6 +1,5 @@ package com.st0x0ef.stellaris.common.blocks.entities.machines; -import com.fej1fun.potentials.fluid.UniversalFluidTank; import com.fej1fun.potentials.providers.FluidProvider; import com.st0x0ef.stellaris.common.capabilities.fluid.OnChangeFluidTank; import com.st0x0ef.stellaris.common.registry.BlockEntityRegistry; @@ -25,7 +24,7 @@ public PipeBlockEntity(BlockPos pos, BlockState blockState) { } @Override - public @Nullable UniversalFluidTank getFluidTank(@Nullable Direction direction) { + public @Nullable OnChangeFluidTank getFluidTank(@Nullable Direction direction) { return fluidTank; } diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/PumpjackBlockEntity.java b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/PumpjackBlockEntity.java index 2abec367..60609499 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/PumpjackBlockEntity.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/PumpjackBlockEntity.java @@ -1,6 +1,5 @@ package com.st0x0ef.stellaris.common.blocks.entities.machines; -import com.fej1fun.potentials.fluid.UniversalFluidTank; import com.fej1fun.potentials.providers.FluidProvider; import com.st0x0ef.stellaris.common.blocks.machines.CoalGeneratorBlock; import com.st0x0ef.stellaris.common.capabilities.fluid.FluidTank; @@ -50,9 +49,7 @@ public void tick() { if (energy.getEnergy() >= 2 * actualOilToExtract) { if (resultTank.getFluidValue() + actualOilToExtract <= resultTank.getMaxAmount()) { access.stellaris$setChunkOilLevel(access.stellaris$getChunkOilLevel() - actualOilToExtract); - FluidStack tankStack = resultTank.getFluidStack(); - - resultTank.fillFluid(FluidStack.create(FluidRegistry.OIL_ATTRIBUTES.getSourceFluid(), actualOilToExtract), false); + resultTank.fill(FluidStack.create(FluidRegistry.OIL_ATTRIBUTES.getSourceFluid(), actualOilToExtract), false); energy.extract(2 * actualOilToExtract, false); isGenerating = true; @@ -108,7 +105,7 @@ public int chunkOilLevel() { @Override - public @Nullable UniversalFluidTank getFluidTank(@Nullable Direction direction) { + public @Nullable FluidTank getFluidTank(@Nullable Direction direction) { return this.resultTank; } } \ No newline at end of file diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/SolarPanelEntity.java b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/SolarPanelEntity.java index a7befc75..779f25a9 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/SolarPanelEntity.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/SolarPanelEntity.java @@ -6,7 +6,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; public class SolarPanelEntity extends BaseGeneratorBlockEntity { diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/WaterPumpBlockEntity.java b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/WaterPumpBlockEntity.java index 4dd54c56..40f1c065 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/WaterPumpBlockEntity.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/WaterPumpBlockEntity.java @@ -1,6 +1,5 @@ package com.st0x0ef.stellaris.common.blocks.entities.machines; -import com.fej1fun.potentials.fluid.UniversalFluidTank; import com.fej1fun.potentials.providers.FluidProvider; import com.st0x0ef.stellaris.common.capabilities.fluid.FluidTank; import com.st0x0ef.stellaris.common.registry.BlockEntityRegistry; @@ -36,7 +35,7 @@ public void tick() { BlockState belowState = level.getBlockState(belowPos); if (belowState.getBlock() instanceof BucketPickup bucketPickup) { if (!bucketPickup.pickupBlock(null, level, belowPos, belowState).isEmpty()) { - waterTank.fillFluid(FluidStack.create(Fluids.WATER, 1000), false); + waterTank.fill(FluidStack.create(Fluids.WATER, 1000), false); energyContainer.extract(NEEDED_ENERGY, false); setChanged(); } @@ -69,7 +68,7 @@ public FluidTank getWaterTank() { } @Override - public @Nullable UniversalFluidTank getFluidTank(@Nullable Direction direction) { + public @Nullable FluidTank getFluidTank(@Nullable Direction direction) { return this.waterTank; } } diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/WaterSeparatorBlockEntity.java b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/WaterSeparatorBlockEntity.java index 329b56b3..337befb5 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/WaterSeparatorBlockEntity.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/blocks/entities/machines/WaterSeparatorBlockEntity.java @@ -1,6 +1,5 @@ package com.st0x0ef.stellaris.common.blocks.entities.machines; -import com.fej1fun.potentials.fluid.UniversalFluidTank; import com.fej1fun.potentials.providers.FluidProvider; import com.st0x0ef.stellaris.common.capabilities.fluid.FluidTank; import com.st0x0ef.stellaris.common.data.recipes.WaterSeparatorRecipe; @@ -29,7 +28,6 @@ public class WaterSeparatorBlockEntity extends BaseEnergyContainerBlockEntity implements RecipeInput, FluidProvider.BLOCK { - private static final int TANK_CAPACITY = 3; public final FluidTank ingredientTank = new FluidTank(10_000); public final NonNullList resultTanks = Util.make(NonNullList.createWithCapacity(2), list -> { //HYDROGEN @@ -85,7 +83,7 @@ public void tick() { if (tank1.getFluidValue() + stack1.getAmount() <= tank1.getMaxAmount() && tank2.getFluidValue() + stack2.getAmount() <= tank2.getMaxAmount()) { energy.extract(recipe.energy(), false); - ingredientTank.drainFluid(FluidStack.create(recipe.ingredientStack().getFluid(), recipe.ingredientStack().getAmount()), false); + ingredientTank.drain(FluidStack.create(recipe.ingredientStack().getFluid(), recipe.ingredientStack().getAmount()), false); FluidTankHelper.addToTank(tank1, stack1); FluidTankHelper.addToTank(tank2, stack2); setChanged(); @@ -124,7 +122,7 @@ public int size() { } @Override - public @Nullable UniversalFluidTank getFluidTank(@Nullable Direction direction) { + public @Nullable FluidTank getFluidTank(@Nullable Direction direction) { return null; } } diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/FilteredFluidTank.java b/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/FilteredFluidTank.java index ff4e87fc..4d087a27 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/FilteredFluidTank.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/FilteredFluidTank.java @@ -13,7 +13,7 @@ public FilteredFluidTank(Fluid fluid, long maxAmount) { } @Override - public boolean isValid(FluidStack stack) { - return super.isValid(stack) && stack.getFluid()==fluid; + public boolean isFluidValid(int tank, FluidStack stack) { + return super.isFluidValid(tank, stack) && stack.getFluid() == fluid; } } diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/FluidTank.java b/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/FluidTank.java index cab29278..6456e76e 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/FluidTank.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/FluidTank.java @@ -1,16 +1,21 @@ package com.st0x0ef.stellaris.common.capabilities.fluid; -import com.fej1fun.potentials.fluid.BaseFluidTank; +import com.fej1fun.potentials.fluid.UniversalFluidStorage; import dev.architectury.fluid.FluidStack; import dev.architectury.hooks.fluid.FluidStackHooks; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; +import java.util.Collections; +import java.util.Iterator; -public class FluidTank extends BaseFluidTank { +public class FluidTank implements UniversalFluidStorage { + + private FluidStack fluidStack = FluidStack.empty(); + private final long maxAmount; public FluidTank(long maxAmount) { - super(maxAmount, maxAmount, maxAmount); + this.maxAmount = maxAmount; } public void save(HolderLookup.Provider provider, CompoundTag compoundTag) { @@ -22,15 +27,20 @@ public void load(HolderLookup.Provider provider, CompoundTag compoundTag) { } public void save(CompoundTag compoundTag, HolderLookup.Provider provider) { - if(!this.getFluidStack().isEmpty()) { - Tag tag = new CompoundTag(); - tag = FluidStackHooks.write(provider, this.getFluidStack(), tag); - compoundTag.put("fluid", tag); + if (!this.getFluidStack().isEmpty()) { + CompoundTag fluidTag = new CompoundTag(); + FluidStackHooks.write(provider, this.getFluidStack(), fluidTag); + compoundTag.put("FluidTankData", fluidTag); } } - + public void load(CompoundTag compoundTag, HolderLookup.Provider provider) { - FluidStack.read(provider, compoundTag).ifPresent(this::setFluidStack); + if (compoundTag.contains("FluidTankData")) { + CompoundTag fluidTag = compoundTag.getCompound("FluidTankData"); + FluidStack.read(provider, fluidTag).ifPresent(this::setFluidStack); + } else { + this.setFluidStack(FluidStack.empty()); + } } public boolean canGrow() { @@ -38,4 +48,115 @@ public boolean canGrow() { return this.getFluidValue() < this.getMaxAmount(); } + + @Override + public int getTanks() { + // Assuming a single tank for this implementation + return 1; + } + + @Override + public FluidStack getFluidInTank(int tank) { + // Assuming a single tank, return the fluid stack for that tank + if (tank == 0) { + return this.getFluidStack(); + } + throw new IllegalArgumentException("Invalid tank index: " + tank); + } + + @Override + public long getTankCapacity(int tank) { + // Assuming a single tank, return the maximum capacity for that tank + if (tank == 0) { + return this.getMaxAmount(); + } + throw new IllegalArgumentException("Invalid tank index: " + tank); + } + + @Override + public boolean isFluidValid(int tank, FluidStack stack) { + // Assuming a single tank, define logic for valid fluid + if (tank == 0) { + // Example logic: check if the fluid is not empty + return !stack.isEmpty(); + } + throw new IllegalArgumentException("Invalid tank index: " + tank); + } + + @Override + public long fill(FluidStack resource, boolean simulate) { + // Example implementation: add fluid to the tank + if (resource.isEmpty()) { + return 0; + } + + long space = this.getMaxAmount() - this.getFluidValue(); + long toFill = Math.min(space, resource.getAmount()); + + if (!simulate) { + // Add the fluid to the tank + this.setFluidStack(FluidStack.create(resource.getFluid(), this.getFluidValue() + toFill)); + } + + return toFill; + } + + @Override + public FluidStack drain(FluidStack resource, boolean simulate) { + // Example implementation: remove fluid from the tank + if (resource.isEmpty() || !resource.isFluidEqual(this.getFluidStack())) { + return FluidStack.empty(); + } + + long drainedAmount = Math.min(this.getFluidValue(), resource.getAmount()); + + if (!simulate) { + // Remove the fluid from the tank + this.setFluidStack(FluidStack.create(resource.getFluid(), this.getFluidValue() - drainedAmount)); + } + + return FluidStack.create(resource.getFluid(), drainedAmount); + } + + @Override + public FluidStack drain(long maxDrain, boolean simulate) { + // Example implementation: remove a specified amount of fluid from the tank + if (maxDrain <= 0 || this.getFluidStack().isEmpty()) { + return FluidStack.empty(); + } + + long drainedAmount = Math.min(this.getFluidValue(), maxDrain); + + if (!simulate) { + // Remove the fluid from the tank + this.setFluidStack(FluidStack.create(this.getFluidStack().getFluid(), this.getFluidValue() - drainedAmount)); + } + + return FluidStack.create(this.getFluidStack().getFluid(), drainedAmount); + } + + @Override + public Iterator iterator() { + // Return an iterator over a single element (the fluid stack) + return Collections.singletonList(this.getFluidStack()).iterator(); + } + + public FluidStack getFluidStack() { + // Return the current fluid stack in the tank + return this.fluidStack; + } + + public void setFluidStack(FluidStack fluidStack) { + this.fluidStack = fluidStack; + } + + public long getFluidValue() { + // Return the amount of fluid in the tank + return this.fluidStack.getAmount(); + } + + public long getMaxAmount() { + // Return the maximum capacity of the tank + return this.maxAmount; + } } diff --git a/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/OnChangeFluidTank.java b/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/OnChangeFluidTank.java index f2361391..fa0f54d9 100644 --- a/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/OnChangeFluidTank.java +++ b/common/src/main/java/com/st0x0ef/stellaris/common/capabilities/fluid/OnChangeFluidTank.java @@ -15,15 +15,22 @@ public void setFluidStack(FluidStack stack) { } @Override - public long fillFluid(FluidStack stack, boolean simulate) { - long filled = super.fillFluid(stack, simulate); + public long fill(FluidStack stack, boolean simulate) { + long filled = super.fill(stack, simulate); if (!simulate) onChange(); return filled; } @Override - public long drainFluid(FluidStack stack, boolean simulate) { - long drained = super.drainFluid(stack, simulate); + public FluidStack drain(FluidStack stack, boolean simulate) { + FluidStack drained = super.drain(stack, simulate); + if (!simulate) onChange(); + return drained; + } + + @Override + public FluidStack drain(long maxDrain, boolean simulate) { + FluidStack drained = super.drain(maxDrain, simulate); if (!simulate) onChange(); return drained; }