Skip to content

Commit

Permalink
feat: add infinite source/sink capability to creative tanks
Browse files Browse the repository at this point in the history
  • Loading branch information
mikerooni committed Mar 24, 2024
1 parent a92b55a commit aaf69ad
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.gregtechceu.gtceu.api.transfer.fluid;

import com.lowdragmc.lowdraglib.side.fluid.FluidStack;
import com.lowdragmc.lowdraglib.side.fluid.IFluidTransfer;
import net.minecraft.MethodsReturnNonnullByDefault;
import org.jetbrains.annotations.NotNull;

import javax.annotation.ParametersAreNonnullByDefault;

@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
public class InfiniteFluidTransferProxy extends FluidTransferDelegate {
private final boolean infiniteSource;
private final boolean infiniteSink;

public InfiniteFluidTransferProxy(IFluidTransfer delegate, boolean infiniteSource, boolean infiniteSink) {
super(delegate);

this.infiniteSource = infiniteSource;
this.infiniteSink = infiniteSink;
}

@Override
public long fill(int tank, FluidStack resource, boolean simulate, boolean notifyChanges) {
if (infiniteSink)
return resource.getAmount();

return super.fill(tank, resource, simulate, notifyChanges);
}

@NotNull
@Override
public FluidStack drain(int tank, FluidStack resource, boolean simulate, boolean notifyChanges) {
if (infiniteSource)
return resource.copy();

return super.drain(tank, resource, simulate, notifyChanges);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import com.gregtechceu.gtceu.api.gui.GuiTextures;
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
import com.gregtechceu.gtceu.api.machine.MetaMachine;
import com.gregtechceu.gtceu.api.machine.trait.ICapabilityTrait;
import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank;
import com.gregtechceu.gtceu.api.transfer.fluid.InfiniteFluidTransferProxy;
import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup;
import com.lowdragmc.lowdraglib.gui.texture.ResourceBorderTexture;
import com.lowdragmc.lowdraglib.gui.texture.TextTexture;
Expand All @@ -16,6 +18,10 @@
import com.lowdragmc.lowdraglib.syncdata.annotation.DropSaved;
import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted;
import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder;
import net.minecraft.core.Direction;
import net.minecraftforge.fluids.capability.IFluidHandler;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class CreativeTankMachine extends QuantumTankMachine {
public static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder(CreativeTankMachine.class, QuantumTankMachine.MANAGED_FIELD_HOLDER);
Expand All @@ -25,11 +31,22 @@ public class CreativeTankMachine extends QuantumTankMachine {
@Persisted @DropSaved
private int ticksPerCycle = 1;

private final InfiniteFluidTransferProxy capabilityTransferProxy;

public CreativeTankMachine(IMachineBlockEntity holder) {
super(holder, GTValues.MAX, -1);

capabilityTransferProxy = new InfiniteFluidTransferProxy(cache, true, true);
}

@Nullable
@Override
public IFluidTransfer getFluidTransferCap(@Nullable Direction side, boolean useCoverCapability) {
if (side == null || (useCoverCapability && coverContainer.hasCover(side)))
return super.getFluidTransferCap(side, useCoverCapability);

return capabilityTransferProxy;
}

protected NotifiableFluidTank createCacheFluidHandler(Object... args) {
return new NotifiableFluidTank(this, 1, 1000, IO.BOTH, IO.NONE);
Expand Down

0 comments on commit aaf69ad

Please sign in to comment.