Skip to content

Commit

Permalink
Merge pull request #29 from asdflj/dev
Browse files Browse the repository at this point in the history
fluid terminal support long fluid amount
  • Loading branch information
Dream-Master authored Oct 23, 2022
2 parents 02f3ed0 + e47c65f commit da80444
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import appeng.api.storage.data.IAEItemStack;
import appeng.client.me.SlotME;
import appeng.client.render.AppEngRenderItem;
import appeng.util.item.AEItemStack;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.client.gui.container.ContainerFluidTerminal;
import com.glodblock.github.client.gui.container.FCBaseFluidMonitorContain;
Expand Down Expand Up @@ -48,13 +47,11 @@ public void func_146977_a(final Slot s) {

public boolean drawSlot0(Slot slot) {
if (slot instanceof SlotME) {
AEItemStack stack = AEItemStack.create(slot.getStack());
IAEItemStack stack = ((SlotME) slot).getAEStack();
if (stack == null) return true;
FluidStack fluidStack = ItemFluidDrop.getFluidStack(slot.getStack());
this.drawWidget(slot.xDisplayPosition, slot.yDisplayPosition, fluidStack.getFluid());
IAEItemStack fake = stack.copy();
fake.setStackSize(fluidStack.amount);
stackSizeRenderer.setAeStack(fake);
stackSizeRenderer.setAeStack(stack);
stackSizeRenderer.renderItemOverlayIntoGUI(fontRendererObj, mc.getTextureManager(), stack.getItemStack(), slot.xDisplayPosition, slot.yDisplayPosition);
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidContainerItem;
import org.apache.commons.lang3.tuple.MutablePair;

Expand Down Expand Up @@ -382,13 +381,13 @@ public void postChange(Iterable<IAEFluidStack> change, ItemStack fluidContainer,
}
} else if (!Util.FluidUtil.isEmpty(fluidContainer)) {
// add fluid to ae network
FluidStack fluidStack = Util.getFluidFromItem(fluidContainer);
final AEFluidStack aeFluidStack = AEFluidStack.create(fluidStack);
AEFluidStack fluidStack = Util.getAEFluidFromItem(fluidContainer);
final IAEFluidStack aeFluidStack = fluidStack.copy();
// simulate result is incorrect. so I'm using other solution and ec2 both mod have same issues
final IAEFluidStack notInserted = this.host.getFluidInventory().injectItems(aeFluidStack, Actionable.MODULATE, this.getActionSource());
MutablePair<Integer, ItemStack> drainStack = Util.FluidUtil.drainStack(out.copy(), aeFluidStack.getFluidStack());
if (notInserted != null && notInserted.getStackSize() > 0) {
if (fluidStack.amount == notInserted.getStackSize()) continue;
if (fluidStack.getStackSize() == notInserted.getStackSize()) continue;
aeFluidStack.decStackSize(notInserted.getStackSize());

if (drainStack.left > aeFluidStack.getStackSize() && FluidContainerRegistry.isContainer(drainStack.right)) {
Expand All @@ -398,11 +397,11 @@ public void postChange(Iterable<IAEFluidStack> change, ItemStack fluidContainer,
}

this.dropItem(drainStack.right, (int) (aeFluidStack.getStackSize() / drainStack.left)); // drop empty item
out.stackSize = ((int) (notInserted.getStackSize()) / drainStack.left);
out.stackSize = (int) (notInserted.getStackSize() / drainStack.left);
if (drainStack.right.getItem() instanceof IFluidContainerItem) {
if (notInserted.getStackSize() % drainStack.left > 0) {
fluidStack.amount = (int) (notInserted.getStackSize() % drainStack.left);
((IFluidContainerItem) drainStack.right.getItem()).fill(drainStack.right, fluidStack, true);
fluidStack.setStackSize((notInserted.getStackSize() % drainStack.left));
((IFluidContainerItem) drainStack.right.getItem()).fill(drainStack.right, fluidStack.getFluidStack(), true);
this.dropItem(drainStack.right, 1);
}
} else if (FluidContainerRegistry.isContainer(drainStack.right)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ void setSearch(final String search) {
public void postUpdate(final IAEItemStack is) {
IAEFluidStack fluid = ItemFluidDrop.getAeFluidStack(is);
IAEItemStack i = AEItemStack.create(is.getItemStack().setStackDisplayName(fluid.getFluid().getLocalizedName()));
i.setStackSize(is.getStackSize());
final IAEItemStack st = this.list.findPrecise(i);
if (st != null) {
st.reset();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import appeng.api.storage.data.IItemList;
import appeng.util.Platform;
import appeng.util.item.AEFluidStack;
import com.glodblock.github.util.Util;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
Expand Down Expand Up @@ -346,8 +345,6 @@ public IAEFluidStack injectItems(IAEFluidStack input, Actionable mode, BaseActio
return input;
}

final FluidStack sharedFluidStack = input.getFluidStack();

final IAEFluidStack l = this.getCellItems().findPrecise( input );

if( l != null )
Expand Down Expand Up @@ -393,21 +390,20 @@ public IAEFluidStack injectItems(IAEFluidStack input, Actionable mode, BaseActio
{
if( input.getStackSize() > remainingItemCount )
{
final FluidStack toReturn = Util.cloneFluidStack(sharedFluidStack);
toReturn.amount = (int) (sharedFluidStack.amount - remainingItemCount);
final IAEFluidStack toReturn = input.copy();
toReturn.decStackSize(remainingItemCount);

if( mode == Actionable.MODULATE )
{
final FluidStack toWrite = Util.cloneFluidStack( sharedFluidStack );
toWrite.amount = (int) remainingItemCount;
if (mode == Actionable.MODULATE) {
IAEFluidStack toWrite = input.copy();
toWrite.setStackSize(remainingItemCount);

this.cellItems.add( AEFluidStack.create( toWrite ) );
this.updateFluidCount( toWrite.amount );
this.cellItems.add(toWrite);
this.updateFluidCount(toWrite.getStackSize());

this.saveChanges();
}

return AEFluidStack.create( toReturn );
return toReturn;
}

if( mode == Actionable.MODULATE )
Expand All @@ -431,7 +427,7 @@ public IAEFluidStack extractItems(IAEFluidStack request, Actionable mode, BaseAc
return null;
}

final long size = Math.min( Integer.MAX_VALUE, request.getStackSize() );
final long size = request.getStackSize();

IAEFluidStack results = null;

Expand Down
25 changes: 23 additions & 2 deletions src/main/java/com/glodblock/github/util/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,36 @@ public static boolean hasPermission(EntityPlayer player, SecurityPermissions per
return player == null || permission == null || securityGrid == null || securityGrid.hasPermission(player, permission);
}

public static ItemStack copyStackWithSize(ItemStack itemStack, int size)
{
public static ItemStack copyStackWithSize(ItemStack itemStack, int size) {
if (size == 0 || itemStack == null)
return null;
ItemStack copy = itemStack.copy();
copy.stackSize = size;
return copy;
}

public static AEFluidStack getAEFluidFromItem(ItemStack stack) {
if (stack != null && (stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isContainer(stack))) {
if (stack.getItem() instanceof IFluidContainerItem) {
FluidStack fluid = ((IFluidContainerItem) stack.getItem()).getFluid(stack);
if (fluid != null) {
AEFluidStack fluid0 = AEFluidStack.create(fluid.copy());
fluid0.setStackSize(fluid0.getStackSize() * stack.stackSize);
return fluid0;
}
}
if (FluidContainerRegistry.isContainer(stack)) {
FluidStack fluid = FluidContainerRegistry.getFluidForFilledItem(stack);
if (fluid != null) {
AEFluidStack fluid0 = AEFluidStack.create(fluid.copy());
fluid0.setStackSize(fluid0.getStackSize() * stack.stackSize);
return fluid0;
}
}
}
return null;
}

public static FluidStack getFluidFromItem(ItemStack stack) {
if (stack != null && (stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isContainer(stack))) {
if (stack.getItem() instanceof IFluidContainerItem) {
Expand Down

0 comments on commit da80444

Please sign in to comment.