Merge pull request #29 from asdflj/dev

fluid terminal support long fluid amount
This commit is contained in:
Martin Robertz authored and GitHub committed 2022-10-23 10:09:07 +02:00
commit da804448a8
5 files changed
+41 -27

No files matched your search

@@ -5,7 +5,6 @@ import appeng.api.storage.data.IAEFluidStack;
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;
@@ -48,13 +47,11 @@ public class GuiFluidTerminal extends GuiBaseFluidTerminal {
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;
}
@@ -50,7 +50,6 @@ import net.minecraft.item.ItemStack;
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;
@@ -382,13 +381,13 @@ public class FCBaseFluidMonitorContain extends AEBaseContainer implements IConfi
}
} 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)) {
@@ -398,11 +397,11 @@ public class FCBaseFluidMonitorContain extends AEBaseContainer implements IConfi
}
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)) {
@@ -91,6 +91,7 @@ public class FluidRepo extends ItemRepo {
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();
@@ -11,7 +11,6 @@ import appeng.api.storage.data.IAEFluidStack;
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;
@@ -346,8 +345,6 @@ public class FluidCellInventory implements IFluidCellInventory {
return input;
}
final FluidStack sharedFluidStack = input.getFluidStack();
final IAEFluidStack l = this.getCellItems().findPrecise( input );
if( l != null )
@@ -393,21 +390,20 @@ public class FluidCellInventory implements IFluidCellInventory {
{
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 )
@@ -431,7 +427,7 @@ public class FluidCellInventory implements IFluidCellInventory {
return null;
}
final long size = Math.min( Integer.MAX_VALUE, request.getStackSize() );
final long size = request.getStackSize();
IAEFluidStack results = null;
@@ -76,8 +76,7 @@ public final class Util {
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();
@@ -85,6 +84,28 @@ public final class Util {
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) {