From 61cdd8c487ca8b9e5b6c1d4e01107bfeb3fdd85c Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Wed, 13 Jul 2022 20:05:14 +0800 Subject: [PATCH 01/21] black essentia gas from ThE --- dependencies.gradle | 4 ++++ .../java/com/glodblock/github/common/Config.java | 4 +++- .../common/item/ItemBasicFluidStorageCell.java | 4 ++++ .../github/common/storage/FluidCellInventory.java | 2 ++ .../com/glodblock/github/util/ModAndClassUtil.java | 13 +++++++++++-- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 6640e94ad..8cba428b0 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -12,8 +12,12 @@ dependencies { compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.40.41:dev') compileOnly('com.github.GTNewHorizons:StructureLib:1.0.15:dev') compileOnly('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev') + compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') compileOnly('com.github.GTNewHorizons:AppleCore:3.1.9:dev') {transitive = false} compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.27:dev') {transitive = false} compileOnly("com.gregoriust.gregtech:gregtech_1.7.10:6.14.23:dev") {transitive = false} compileOnly('com.github.GTNewHorizons:OpenComputers:1.7.5.23-GTNH:dev') {transitive = false} + compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.3.19-GTNH:dev') {transitive = false} + + runtime("com.github.GTNewHorizons:Baubles:1.0.1.14:dev") } diff --git a/src/main/java/com/glodblock/github/common/Config.java b/src/main/java/com/glodblock/github/common/Config.java index 0256893e8..12267b847 100644 --- a/src/main/java/com/glodblock/github/common/Config.java +++ b/src/main/java/com/glodblock/github/common/Config.java @@ -13,6 +13,7 @@ public class Config { public static boolean noFluidPacket; public static boolean fluidIOBus; public static boolean removeRecipe; + public static boolean blacklistEssentiaGas; public static void run() { loadCategory(); @@ -21,9 +22,10 @@ public static void run() { private static void loadProperty() { fluidCells = Config.getBoolean("Enable Fluid Storage Cell", "Fluid Craft for AE2", true, "Enable this to generate the fluid storage cells. If you are playing with EC2, you can turn it off."); - noFluidPacket = Config.getBoolean("No Fluid Packet", "Fluid Craft for AE2", false, "Enable this to make normal ME Interface can emit fluid with fluid pattern, like the Fluid Interface."); + noFluidPacket = Config.getBoolean("No Fluid Packet", "Fluid Craft for AE2", false, "Enable this to make normal ME Interface can emit fluid with fluid pattern, like the ME Dual Interface."); fluidIOBus = Config.getBoolean("Enable AE2FC's Fluid I/O Bus", "Fluid Craft for AE2", true, "Enable this to add Fluid Import/Export Bus like EC2's one."); removeRecipe = Config.getBoolean("Disable all recipes", "Fluid Craft for AE2", false, "Disable all recipes, for quick tweaker."); + blacklistEssentiaGas = Config.getBoolean("Blacklist Essentia Gas", "Fluid Craft for AE2", true, "Blacklist Essentia Gas from Thaumic Energistics, so they won't be stored in Fluid Storage Cells."); if (Config.hasChanged()) Config.save(); diff --git a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java index ea3460527..02dec4b8a 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java @@ -23,6 +23,7 @@ import com.glodblock.github.common.storage.IFluidCellInventory; import com.glodblock.github.common.storage.IFluidCellInventoryHandler; import com.glodblock.github.common.storage.IStorageFluidCell; +import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.NameConst; import com.google.common.base.Optional; import cpw.mods.fml.common.registry.GameRegistry; @@ -157,6 +158,9 @@ public int getBytesPerType( final ItemStack cellItem ) @Override public boolean isBlackListed(ItemStack cellItem, IAEFluidStack requestedAddition) { + if (Config.blacklistEssentiaGas && ModAndClassUtil.ThE && requestedAddition != null) { + return ModAndClassUtil.essentiaGas.isInstance(requestedAddition.getFluid()); + } return false; } diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java index 357a40cc1..4764f298e 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java @@ -11,6 +11,8 @@ import appeng.api.storage.data.IItemList; import appeng.util.Platform; import appeng.util.item.AEFluidStack; +import com.glodblock.github.common.Config; +import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.Util; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; diff --git a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java index 67dbb377a..cdff91621 100644 --- a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java +++ b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java @@ -18,6 +18,7 @@ public final class ModAndClassUtil { public static boolean EIO = false; public static boolean FTR = false; public static boolean OC = false; + public static boolean ThE = false; public static boolean isDoubleButton; public static boolean isSaveText; @@ -27,6 +28,8 @@ public final class ModAndClassUtil { public static boolean isShiftTooltip; public static boolean isBigInterface; + public static Class essentiaGas; + @SuppressWarnings("all") public static void init() { @@ -86,6 +89,12 @@ public static void init() { isCraftStatus = false; } + try { + essentiaGas = Class.forName("thaumicenergistics.common.fluids.GaseousEssentia"); + } catch (ClassNotFoundException e) { + essentiaGas = null; + } + if (Loader.isModLoaded("gregtech") && !Loader.isModLoaded("gregapi")) GT5 = true; if (Loader.isModLoaded("gregapi") && Loader.isModLoaded("gregapi_post")) @@ -98,8 +107,8 @@ public static void init() { FTR = true; if (Loader.isModLoaded("OpenComputers")) OC = true; + if (Loader.isModLoaded("thaumicenergistics")) + ThE = true; } - - } From 35f2dd4073ed7e953620e45df40c37c3363bb93d Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Wed, 13 Jul 2022 21:16:19 +0800 Subject: [PATCH 02/21] add larger buffer --- .../client/gui/GuiLargeIngredientBuffer.java | 99 +++++++++++ .../ContainerLargeIngredientBuffer.java | 67 ++++++++ .../block/BlockLargeIngredientBuffer.java | 55 +++++++ .../tile/TileLargeIngredientBuffer.java | 154 ++++++++++++++++++ .../github/inventory/gui/GuiType.java | 12 ++ .../github/loader/ItemAndBlockHolder.java | 1 + .../glodblock/github/loader/RecipeLoader.java | 1 + .../github/network/SPacketFluidUpdate.java | 5 + .../com/glodblock/github/util/NameConst.java | 2 + .../resources/assets/ae2fc/lang/en_US.lang | 2 + .../blocks/large_ingredient_buffer.png | Bin 0 -> 383 bytes .../textures/gui/large_ingredient_buffer.png | Bin 0 -> 1382 bytes 12 files changed, 398 insertions(+) create mode 100644 src/main/java/com/glodblock/github/client/gui/GuiLargeIngredientBuffer.java create mode 100644 src/main/java/com/glodblock/github/client/gui/container/ContainerLargeIngredientBuffer.java create mode 100644 src/main/java/com/glodblock/github/common/block/BlockLargeIngredientBuffer.java create mode 100644 src/main/java/com/glodblock/github/common/tile/TileLargeIngredientBuffer.java create mode 100644 src/main/resources/assets/ae2fc/textures/blocks/large_ingredient_buffer.png create mode 100644 src/main/resources/assets/ae2fc/textures/gui/large_ingredient_buffer.png diff --git a/src/main/java/com/glodblock/github/client/gui/GuiLargeIngredientBuffer.java b/src/main/java/com/glodblock/github/client/gui/GuiLargeIngredientBuffer.java new file mode 100644 index 000000000..ad3322918 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/GuiLargeIngredientBuffer.java @@ -0,0 +1,99 @@ +package com.glodblock.github.client.gui; + +import appeng.api.storage.data.IAEFluidStack; +import appeng.client.gui.AEBaseGui; +import appeng.core.localization.GuiText; +import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.gui.container.ContainerLargeIngredientBuffer; +import com.glodblock.github.common.tile.TileLargeIngredientBuffer; +import com.glodblock.github.inventory.IAEFluidTank; +import com.glodblock.github.inventory.gui.ButtonMouseHandler; +import com.glodblock.github.inventory.gui.MouseRegionManager; +import com.glodblock.github.inventory.gui.TankMouseHandler; +import com.glodblock.github.util.NameConst; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.opengl.GL11; + +import javax.annotation.Nullable; + +public class GuiLargeIngredientBuffer extends AEBaseGui { + + private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/large_ingredient_buffer.png"); + private static final int TANK_X = 13, TANK_X_OFF = 22, TANK_Y = 18; + private static final int TANK_WIDTH = 16, TANK_HEIGHT = 37; + + private final ContainerLargeIngredientBuffer cont; + private final MouseRegionManager mouseRegions = new MouseRegionManager(this); + + public GuiLargeIngredientBuffer(InventoryPlayer ipl, TileLargeIngredientBuffer tile) { + super(new ContainerLargeIngredientBuffer(ipl, tile)); + this.cont = (ContainerLargeIngredientBuffer) inventorySlots; + this.ySize = 222; + for (int i = 0; i < 7; i++) { + mouseRegions.addRegion(TANK_X + TANK_X_OFF * i, TANK_Y, TANK_WIDTH, TANK_HEIGHT, + new TankMouseHandler(cont.getTile().getFluidInventory(), i)); + mouseRegions.addRegion(TANK_X + 10 + 22 * i, TANK_Y + TANK_HEIGHT + 2, 7, 7, + ButtonMouseHandler.dumpTank(cont, i)); + } + } + + @Override + protected void mouseClicked(int xCoord, int yCoord, int btn) { + if (mouseRegions.onClick(xCoord, yCoord, btn)) { + super.mouseClicked(xCoord, yCoord, btn); + } + } + + @Override + public void drawBG(int offsetX, int offsetY, int mouseX, int mouseY) { + mc.getTextureManager().bindTexture(TEX_BG); + drawTexturedModalRect(offsetX, offsetY, 0, 0, 176, ySize); + } + + @Override + public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) { + fontRendererObj.drawString(getGuiDisplayName(I18n.format(NameConst.GUI_LARGE_INGREDIENT_BUFFER)), 8, 6, 0x404040); + fontRendererObj.drawString(GuiText.inventory.getLocal(), 8, ySize - 94, 0x404040); + GL11.glColor4f(1F, 1F, 1F, 1F); + + IAEFluidTank fluidInv = cont.getTile().getFluidInventory(); + mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture); + for (int i = 0; i < 7; i++) { + renderFluidIntoGui(TANK_X + i * TANK_X_OFF, TANK_Y, TANK_WIDTH, TANK_HEIGHT, + fluidInv.getFluidInSlot(i), fluidInv.getTankInfo(ForgeDirection.UNKNOWN)[i].capacity); + } + GL11.glColor4f(1F, 1F, 1F, 1F); + + mouseRegions.render(mouseX, mouseY); + } + + public void renderFluidIntoGui(int x, int y, int width, int height, + @Nullable IAEFluidStack aeFluidStack, int capacity) { + if (aeFluidStack != null) { + GL11.glDisable(2896); + GL11.glColor3f(1.0F, 1.0F, 1.0F); + int hi = (int) (height * ((double) aeFluidStack.getStackSize() / capacity)); + if (aeFluidStack.getStackSize() > 0 && hi > 0) { + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); + IIcon fluidIcon = aeFluidStack.getFluid().getStillIcon(); + GL11.glColor3f((float)(aeFluidStack.getFluid().getColor() >> 16 & 255) / 255.0F, (float)(aeFluidStack.getFluid().getColor() >> 8 & 255) / 255.0F, (float)(aeFluidStack.getFluid().getColor() & 255) / 255.0F); + for (int th = 0; th <= hi; th += 16) { + if (hi - th <= 0) break; + this.drawTexturedModelRectFromIcon(x, y + height - Math.min(16, hi - th) - th, fluidIcon, width, Math.min(16, hi - th)); + } + GL11.glColor3f(1.0F, 1.0F, 1.0F); + } + } + } + + public void update(int slot, IAEFluidStack aeFluidStack) { + cont.getTile().getFluidInventory().setFluidInSlot(slot, aeFluidStack); + } + +} diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerLargeIngredientBuffer.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerLargeIngredientBuffer.java new file mode 100644 index 000000000..3461a033e --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerLargeIngredientBuffer.java @@ -0,0 +1,67 @@ +package com.glodblock.github.client.gui.container; + +import appeng.api.storage.data.IAEFluidStack; +import appeng.container.AEBaseContainer; +import appeng.container.slot.SlotNormal; +import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.gui.TankDumpable; +import com.glodblock.github.common.tile.TileLargeIngredientBuffer; +import com.glodblock.github.network.SPacketFluidUpdate; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; + +import java.util.HashMap; +import java.util.Map; + +public class ContainerLargeIngredientBuffer extends AEBaseContainer implements TankDumpable { + + private final TileLargeIngredientBuffer tile; + + public ContainerLargeIngredientBuffer(InventoryPlayer ipl, TileLargeIngredientBuffer tile) { + super(ipl, tile); + this.tile = tile; + IInventory inv = tile.getInternalInventory(); + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 9; j++) { + addSlotToContainer(new SlotNormal(inv, i * 9 + j, 8 + 18 * j, 72 + 18 * i)); + } + } + bindPlayerInventory(ipl, 0, 140); + } + + public TileLargeIngredientBuffer getTile() { + return tile; + } + + @Override + public boolean canDumpTank(int index) { + return tile.getFluidInventory().getFluidInSlot(index) != null; + } + + @Override + public void dumpTank(int index) { + if (index >= 0 && index < tile.getFluidInventory().getSlots()) { + tile.getFluidInventory().setFluidInSlot(index, null); + } + } + + @Override + public void detectAndSendChanges() + { + super.detectAndSendChanges(); + Map tmp = new HashMap<>(); + for (int i = 0; i < tile.getFluidInventory().getSlots(); i ++) { + tmp.put(i, tile.getFluidInventory().getFluidInSlot(i)); + } + for( final Object g : this.crafters ) + { + if( g instanceof EntityPlayer) + { + FluidCraft.proxy.netHandler.sendTo(new SPacketFluidUpdate(tmp), (EntityPlayerMP) g); + } + } + } + +} diff --git a/src/main/java/com/glodblock/github/common/block/BlockLargeIngredientBuffer.java b/src/main/java/com/glodblock/github/common/block/BlockLargeIngredientBuffer.java new file mode 100644 index 000000000..ff5f56710 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/block/BlockLargeIngredientBuffer.java @@ -0,0 +1,55 @@ +package com.glodblock.github.common.block; + +import appeng.block.AEBaseItemBlock; +import com.glodblock.github.common.tile.TileLargeIngredientBuffer; +import com.glodblock.github.inventory.InventoryHandler; +import com.glodblock.github.inventory.gui.GuiType; +import com.glodblock.github.util.BlockPos; +import com.glodblock.github.util.NameConst; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; + +public class BlockLargeIngredientBuffer extends FCBaseBlock { + + public BlockLargeIngredientBuffer() { + super(Material.iron, NameConst.BLOCK_LARGE_INGREDIENT_BUFFER); + setTileEntity(TileLargeIngredientBuffer.class); + setOpaque(false); + setFullBlock(false); + this.lightOpacity = 4; + } + + @Override + public boolean onActivated(World world, int x, int y, int z, EntityPlayer player, int facing, float hitX, float hitY, float hitZ) { + if (player.isSneaking()) { + return false; + } + TileLargeIngredientBuffer tile = getTileEntity(world, x, y, z); + if (tile != null) { + if (!world.isRemote) { + InventoryHandler.openGui(player, world, new BlockPos(x, y, z), EnumFacing.getFront(facing), GuiType.LARGE_INGREDIENT_BUFFER); + } + return true; + } + return false; + } + + public BlockLargeIngredientBuffer register() { + GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_LARGE_INGREDIENT_BUFFER); + GameRegistry.registerTileEntity(TileLargeIngredientBuffer.class, NameConst.BLOCK_LARGE_INGREDIENT_BUFFER); + return this; + } + + public ItemStack stack(int size) { + return new ItemStack(this, size); + } + + public ItemStack stack() { + return new ItemStack(this, 1); + } + +} diff --git a/src/main/java/com/glodblock/github/common/tile/TileLargeIngredientBuffer.java b/src/main/java/com/glodblock/github/common/tile/TileLargeIngredientBuffer.java new file mode 100644 index 000000000..90fd20569 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/tile/TileLargeIngredientBuffer.java @@ -0,0 +1,154 @@ +package com.glodblock.github.common.tile; + +import appeng.api.storage.data.IAEFluidStack; +import appeng.tile.AEBaseInvTile; +import appeng.tile.TileEvent; +import appeng.tile.events.TileEventType; +import appeng.tile.inventory.AppEngInternalInventory; +import appeng.tile.inventory.InvOperation; +import appeng.util.item.AEFluidStack; +import com.glodblock.github.inventory.AEFluidInventory; +import com.glodblock.github.inventory.IAEFluidInventory; +import com.glodblock.github.inventory.IAEFluidTank; +import cpw.mods.fml.common.network.ByteBufUtils; +import io.netty.buffer.ByteBuf; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import javax.annotation.Nonnull; +import java.io.IOException; + +public class TileLargeIngredientBuffer extends AEBaseInvTile implements IAEFluidInventory, IFluidHandler { + + private final AppEngInternalInventory invItems = new AppEngInternalInventory(this, 27); + private final AEFluidInventory invFluids = new AEFluidInventory(this, 7, 64000); + + @Nonnull + @Override + public IInventory getInternalInventory() { + return invItems; + } + + public IAEFluidTank getFluidInventory() { + return invFluids; + } + + @Override + public boolean canBeRotated() { + return false; + } + + @Override + public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added) { + markForUpdate(); + } + + @Override + public int[] getAccessibleSlotsBySide(ForgeDirection whichSide) { + return new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; + } + + @Override + public void onFluidInventoryChanged(IAEFluidTank inv, int slot) { + saveChanges(); + markForUpdate(); + } + + @TileEvent(TileEventType.NETWORK_WRITE) + protected void writeToStream(ByteBuf data) throws IOException { + for (int i = 0; i < invItems.getSizeInventory(); i++) { + ByteBufUtils.writeItemStack(data, invItems.getStackInSlot(i)); + } + int fluidMask = 0; + for (int i = 0; i < invFluids.getSlots(); i++) { + if (invFluids.getFluidInSlot(i) != null) { + fluidMask |= 1 << i; + } + } + data.writeByte(fluidMask); + for (int i = 0; i < invFluids.getSlots(); i++) { + IAEFluidStack fluid = invFluids.getFluidInSlot(i); + if (fluid != null) { + fluid.writeToPacket(data); + } + } + } + + @TileEvent(TileEventType.NETWORK_READ) + protected boolean readFromStream(ByteBuf data) throws IOException { + boolean changed = false; + for (int i = 0; i < invItems.getSizeInventory(); i++) { + ItemStack stack = ByteBufUtils.readItemStack(data); + if (!ItemStack.areItemStacksEqual(stack, invItems.getStackInSlot(i))) { + invItems.setInventorySlotContents(i, stack); + changed = true; + } + } + int fluidMask = data.readByte(); + for (int i = 0; i < invFluids.getSlots(); i++) { + if ((fluidMask & (1 << i)) != 0) { + IAEFluidStack fluid = AEFluidStack.loadFluidStackFromPacket(data); + if (fluid != null) { // this shouldn't happen, but better safe than sorry + IAEFluidStack origFluid = invFluids.getFluidInSlot(i); + if (!fluid.equals(origFluid) || fluid.getStackSize() != origFluid.getStackSize()) { + invFluids.setFluidInSlot(i, fluid); + changed = true; + } + } + } else if (invFluids.getFluidInSlot(i) != null) { + invFluids.setFluidInSlot(i, null); + changed = true; + } + } + return changed; + } + + @TileEvent(TileEventType.WORLD_NBT_READ) + public void readFromNBTEvent(NBTTagCompound data) { + invItems.readFromNBT(data, "ItemInv"); + invFluids.readFromNBT(data, "FluidInv"); + } + + @TileEvent(TileEventType.WORLD_NBT_WRITE) + public NBTTagCompound writeToNBTEvent(NBTTagCompound data) { + invItems.writeToNBT(data, "ItemInv"); + invFluids.writeToNBT(data, "FluidInv"); + return data; + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + return invFluids.fill(from, resource, doFill); + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + return invFluids.drain(from, resource, doDrain); + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + return invFluids.drain(from, maxDrain, doDrain); + } + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid) { + return invFluids.canFill(from, fluid); + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) { + return invFluids.canDrain(from, fluid); + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + return invFluids.getTankInfo(from); + } +} diff --git a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java index 37175c289..5ade92a80 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java +++ b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java @@ -128,6 +128,18 @@ protected Object createClientGui(EntityPlayer player, TileIngredientBuffer inv) } }), + LARGE_INGREDIENT_BUFFER(new TileGuiFactory(TileLargeIngredientBuffer.class) { + @Override + protected Object createServerGui(EntityPlayer player, TileLargeIngredientBuffer inv) { + return new ContainerLargeIngredientBuffer(player.inventory, inv); + } + + @Override + protected Object createClientGui(EntityPlayer player, TileLargeIngredientBuffer inv) { + return new GuiLargeIngredientBuffer(player.inventory, inv); + } + }), + FLUID_PAT_TERM_CRAFTING_STATUS(new PartGuiFactory(FCBasePart.class) { @Override protected Object createServerGui(EntityPlayer player, FCBasePart inv) { diff --git a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java index 5fcef8d74..2a46dd670 100644 --- a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java +++ b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java @@ -29,6 +29,7 @@ public class ItemAndBlockHolder { public static BlockFluidPacketDecoder DECODER = new BlockFluidPacketDecoder().register(); public static BlockFluidInterface INTERFACE = new BlockFluidInterface().register(); public static BlockIngredientBuffer BUFFER = new BlockIngredientBuffer().register(); + public static BlockLargeIngredientBuffer LARGE_BUFFER = new BlockLargeIngredientBuffer().register(); public static BlockOCPatternEditor OC_EDITOR = new BlockOCPatternEditor().register(); public static void loadSetting() { diff --git a/src/main/java/com/glodblock/github/loader/RecipeLoader.java b/src/main/java/com/glodblock/github/loader/RecipeLoader.java index 29d0e9ccc..05b1bfd12 100644 --- a/src/main/java/com/glodblock/github/loader/RecipeLoader.java +++ b/src/main/java/com/glodblock/github/loader/RecipeLoader.java @@ -48,6 +48,7 @@ public void run() { GameRegistry.addShapelessRecipe(FLUID_TERMINAL.stack(), AE2_PATTERN_TERM, ENCODER); GameRegistry.addShapelessRecipe(FLUID_TERMINAL_EX.stack(), FLUID_TERMINAL.stack(), AE2_PROCESS_CAL, AE2_PROCESS_ENG, AE2_PROCESS_LOG); GameRegistry.addRecipe(new ShapedOreRecipe(BUFFER.stack(), "ILI", "AGF", "IBI", 'I', "ingotIron", 'G', AE2_QUARTZ_GLASS, 'L', AE2_CELL_1K, 'A', AE2_CORE_ANN, 'F', AE2_CORE_FOM, 'B', BUCKET)); + GameRegistry.addRecipe(new ShapedOreRecipe(LARGE_BUFFER.stack(), "BGB", "GEG", "BGB", 'B', BUFFER.stack(), 'G', AE2_QUARTZ_GLASS, 'E', AE2_PROCESS_ENG)); if (Config.fluidCells) { OreDictionary.registerOre("anyCertusCrystal", AE2_PURE_CERTUS); diff --git a/src/main/java/com/glodblock/github/network/SPacketFluidUpdate.java b/src/main/java/com/glodblock/github/network/SPacketFluidUpdate.java index bf371e7e5..1ff35a64a 100644 --- a/src/main/java/com/glodblock/github/network/SPacketFluidUpdate.java +++ b/src/main/java/com/glodblock/github/network/SPacketFluidUpdate.java @@ -5,6 +5,7 @@ import com.glodblock.github.client.gui.GuiFluidIO; import com.glodblock.github.client.gui.GuiFluidInterface; import com.glodblock.github.client.gui.GuiIngredientBuffer; +import com.glodblock.github.client.gui.GuiLargeIngredientBuffer; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; @@ -75,6 +76,10 @@ public IMessage onMessage(SPacketFluidUpdate message, MessageContext ctx) { for (Map.Entry e : message.list.entrySet() ) { ( (GuiIngredientBuffer) gs ).update(e.getKey(), e.getValue()); } + } else if (gs instanceof GuiLargeIngredientBuffer) { + for (Map.Entry e : message.list.entrySet() ) { + ( (GuiLargeIngredientBuffer) gs ).update(e.getKey(), e.getValue()); + } } else if( gs instanceof GuiFluidIO) { for (Map.Entry e : message.list.entrySet() ) { diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index 141e42d97..58eabc03f 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -9,6 +9,7 @@ public class NameConst { public static final String BLOCK_FLUID_PACKET_DECODER = "fluid_packet_decoder"; public static final String BLOCK_FLUID_INTERFACE = "fluid_interface"; public static final String BLOCK_INGREDIENT_BUFFER = "ingredient_buffer"; + public static final String BLOCK_LARGE_INGREDIENT_BUFFER = "large_ingredient_buffer"; public static final String BLOCK_OC_PATTERN_EDITOR = "oc_pattern_editor"; public static final String ITEM_FLUID_DROP = "fluid_drop"; @@ -37,6 +38,7 @@ public class NameConst { public static final String GUI_FLUID_PATTERN_ENCODER = GUI_KEY + BLOCK_FLUID_PATTERN_ENCODER; public static final String GUI_FLUID_PACKET_DECODER = GUI_KEY + BLOCK_FLUID_PACKET_DECODER; public static final String GUI_INGREDIENT_BUFFER = GUI_KEY + BLOCK_INGREDIENT_BUFFER; + public static final String GUI_LARGE_INGREDIENT_BUFFER = GUI_KEY + BLOCK_LARGE_INGREDIENT_BUFFER; public static final String GUI_FLUID_INTERFACE = GUI_KEY + BLOCK_FLUID_INTERFACE; public static final String GUI_OC_PATTERN_EDITOR = GUI_KEY + BLOCK_OC_PATTERN_EDITOR; diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index fb6a1a20d..3c262bc08 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -26,6 +26,7 @@ tile.fluid_pattern_encoder.name=Fluid Pattern Encoder tile.fluid_packet_decoder.name=ME Fluid Packet Decoder tile.fluid_interface.name=ME Dual Interface tile.ingredient_buffer.name=Ingredient Buffer +tile.large_ingredient_buffer.name=Large Ingredient Buffer tile.oc_pattern_editor.name=OC Pattern Editor ae2fc.tooltip.invalid_fluid=Invalid fluid! @@ -40,6 +41,7 @@ ae2fc.gui.part_fluid_pattern_terminal_ex=Fluid Processing Pattern Terminal ae2fc.gui.fluid_pattern_encoder=Fluid Pattern Encoder ae2fc.gui.fluid_packet_decoder=ME Fluid Packet Decoder ae2fc.gui.ingredient_buffer=Ingredient Buffer +ae2fc.gui.large_ingredient_buffer=Large Ingredient Buffer ae2fc.gui.fluid_interface=ME Dual Interface ae2fc.gui.fluid_interface.0=D ae2fc.gui.fluid_interface.1=U diff --git a/src/main/resources/assets/ae2fc/textures/blocks/large_ingredient_buffer.png b/src/main/resources/assets/ae2fc/textures/blocks/large_ingredient_buffer.png new file mode 100644 index 0000000000000000000000000000000000000000..31d8cd0b8184ac3ac16824522890ad5be55f0532 GIT binary patch literal 383 zcmV-_0f7FAP)(Qqjm+#I%IkKc1|?VHKxGG2fcgu72;0~DUk$lAyKS%n@ba7$E@ZdM_Bf7M$K9sJIkgV3Xj(8>730NS zHOOwMW^q?4S|l@q-7orw*yNTO|g?mv*kqTFuHz11m|s*0upo_E`W d?*I7!_yUA{ro$&W+HwE@002ovPDHLkV1m!Avj6}9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/gui/large_ingredient_buffer.png b/src/main/resources/assets/ae2fc/textures/gui/large_ingredient_buffer.png new file mode 100644 index 0000000000000000000000000000000000000000..f7763ab054b53752972e487e5ed367322418af33 GIT binary patch literal 1382 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJD%T~8Oskcv5P@A~H5;*e-a z41OA<`$}@x$+W)4Daj#^BsME-UomA)ikNMyyPxy&E~_4)+Y@JguQdA`_**rhf|al4 z&9OomwcU5$9nVjAe5~-!-2I2|<~=VsTVQN+|L1wdhPBoE_U?MF|Df60{`#|r4-YC| zYkgB^v*_3JT{Sf|dp>m^`G5CgMa{03<(D%n_VIppldt=m|L)I)PX|A?=`l7K;6)o| zUyu88_@Tk?Tf6q|mHqa6@6KocUdP-!zM8qfE}{6&-MfFk&24`+>-6tWA`FLE=!Np) zsxRi}=eO_Pz5D2T!{W0~|GsTYlsH~k^XpK5e?K4N>~b5q`TLGueraNJzpZj{xII%v zZ@;|#zi;vNe}9$Uc>n#`tlcMK?&V!&@cH-aQ|gb;pP$dK|M&Rz_J{v|f4|9oC#HC2 z{@2M3mk-Y4`}Cn^L%r<}poS|k_nyVpaTVCT@RrXhKASqPob$lXg!!lQ*X_(c^Ym*N z|AF;O<3BB!ovrtIZIw`g)o$y#4>vrx@U(fvDRfX(oblt1t#?%m73H;QK_^W84_*zB0YVwBEZ9GA!P>7c^tje;lUoISr$FvIp7qr(ga zqEWBIvz$7<*9h%qOfxtCv@~N{d)$(NLzrl^8Ek)|t++YUL9v@0TV(th6?_;7qc@Lk zH}bb1ev^Id`N!GD<>%`5&$n&Azgwc=GvkcIV4=S4E7upc~G*u^vJWHKa&r9R&LbZD|2MWXJ%lDh#zQ6 awmr=M Date: Fri, 15 Jul 2022 12:07:11 +0800 Subject: [PATCH 03/21] Add files via upload --- .../resources/assets/ae2fc/lang/zh_CN.lang | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/main/resources/assets/ae2fc/lang/zh_CN.lang diff --git a/src/main/resources/assets/ae2fc/lang/zh_CN.lang b/src/main/resources/assets/ae2fc/lang/zh_CN.lang new file mode 100644 index 000000000..c66957882 --- /dev/null +++ b/src/main/resources/assets/ae2fc/lang/zh_CN.lang @@ -0,0 +1,52 @@ +item.fluid_drop.name=%s液滴 +item.fluid_encoded_pattern.name=编写样板 +item.part_fluid_pattern_terminal.name=ME流体样板终端 +item.part_fluid_pattern_terminal_ex.name=ME增广流体样板终端 +item.part_fluid_interface.name=ME二合一接口 +item.part_fluid_import.name=ME流体输入总线 +item.part_fluid_export.name=ME流体输出总线 +item.fluid_packet.name=流体封包 +item.fluid_storage.1.name=1k-ME流体存储元件 +item.fluid_storage.4.name=4k-ME流体存储元件 +item.fluid_storage.16.name=16k-ME流体存储元件 +item.fluid_storage.64.name=64k-ME流体存储元件 +item.fluid_storage.256.name=256k-ME流体存储元件 +item.fluid_storage.1024.name=1024k-ME流体存储元件 +item.fluid_storage.4096.name=4096k-ME流体存储元件 +item.fluid_part.0.name=1k-ME流体存储元件 +item.fluid_part.1.name=4k-ME流体存储元件 +item.fluid_part.2.name=16k-ME流体存储元件 +item.fluid_part.3.name=64k-ME流体存储元件 +item.fluid_part.4.name=256k-ME流体存储元件 +item.fluid_part.5.name=1024k-ME流体存储元件 +item.fluid_part.6.name=4096k-ME流体存储元件 + +tile.fluid_discretizer.name=ME流体离散器 +tile.fluid_pattern_encoder.name=流体适配型样板编码台 +tile.fluid_packet_decoder.name=ME流体封包解码器 +tile.fluid_interface.name=ME二合一接口 +tile.ingredient_buffer.name=原材料缓存仓 +tile.large_ingredient_buffer.name=大型原材料缓存仓 +tile.oc_pattern_editor.name=OC样板编辑器 + +ae2fc.tooltip.invalid_fluid=流体无效! +ae2fc.tooltip.encode_pattern=编写样板 +ae2fc.tooltip.fluid_packet=使用ME流体封包解码器\n来将其转换回流体形式。 +ae2fc.tooltip.empty=空 +ae2fc.tooltip.dump_tank=排空该流体槽 +ae2fc.tooltip.switch_fluid_interface=切换ME二合一接口GUI + +ae2fc.gui.part_fluid_pattern_terminal=ME流体样板终端 +ae2fc.gui.part_fluid_pattern_terminal_ex=ME增广流体样板终端 +ae2fc.gui.fluid_pattern_encoder=流体适配型样板编码台 +ae2fc.gui.fluid_packet_decoder=ME流体封包解码器 +ae2fc.gui.ingredient_buffer=原材料缓存仓 +ae2fc.gui.large_ingredient_buffer=大型原材料缓存仓 +ae2fc.gui.fluid_interface=ME二合一接口 +ae2fc.gui.fluid_interface.0=D +ae2fc.gui.fluid_interface.1=U +ae2fc.gui.fluid_interface.2=N +ae2fc.gui.fluid_interface.3=S +ae2fc.gui.fluid_interface.4=W +ae2fc.gui.fluid_interface.5=E +ae2fc.gui.oc_pattern_editor=OC样板编辑器 \ No newline at end of file From 70f9ffefc3ff77c30668fe0ba942b9b59751452a Mon Sep 17 00:00:00 2001 From: mczph Date: Fri, 15 Jul 2022 12:11:42 +0800 Subject: [PATCH 04/21] Update zh_CN.lang --- src/main/resources/assets/ae2fc/lang/zh_CN.lang | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/resources/assets/ae2fc/lang/zh_CN.lang b/src/main/resources/assets/ae2fc/lang/zh_CN.lang index c66957882..2b59381f0 100644 --- a/src/main/resources/assets/ae2fc/lang/zh_CN.lang +++ b/src/main/resources/assets/ae2fc/lang/zh_CN.lang @@ -13,13 +13,13 @@ item.fluid_storage.64.name=64k-ME流体存储元件 item.fluid_storage.256.name=256k-ME流体存储元件 item.fluid_storage.1024.name=1024k-ME流体存储元件 item.fluid_storage.4096.name=4096k-ME流体存储元件 -item.fluid_part.0.name=1k-ME流体存储元件 -item.fluid_part.1.name=4k-ME流体存储元件 -item.fluid_part.2.name=16k-ME流体存储元件 -item.fluid_part.3.name=64k-ME流体存储元件 -item.fluid_part.4.name=256k-ME流体存储元件 -item.fluid_part.5.name=1024k-ME流体存储元件 -item.fluid_part.6.name=4096k-ME流体存储元件 +item.fluid_part.0.name=1k-ME流体存储组件 +item.fluid_part.1.name=4k-ME流体存储组件 +item.fluid_part.2.name=16k-ME流体存储组件 +item.fluid_part.3.name=64k-ME流体存储组件 +item.fluid_part.4.name=256k-ME流体存储组件 +item.fluid_part.5.name=1024k-ME流体存储组件 +item.fluid_part.6.name=4096k-ME流体存储组件 tile.fluid_discretizer.name=ME流体离散器 tile.fluid_pattern_encoder.name=流体适配型样板编码台 @@ -49,4 +49,4 @@ ae2fc.gui.fluid_interface.2=N ae2fc.gui.fluid_interface.3=S ae2fc.gui.fluid_interface.4=W ae2fc.gui.fluid_interface.5=E -ae2fc.gui.oc_pattern_editor=OC样板编辑器 \ No newline at end of file +ae2fc.gui.oc_pattern_editor=OC样板编辑器 From bc32f7743e6b0ba1c9bf22fe0b3ed38dc9223459 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Fri, 15 Jul 2022 13:15:36 +0800 Subject: [PATCH 05/21] update readme --- CODEOWNERS | 3 --- README.MD | 42 ++---------------------------------------- 2 files changed, 2 insertions(+), 43 deletions(-) delete mode 100644 CODEOWNERS diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index a6b5f68cd..000000000 --- a/CODEOWNERS +++ /dev/null @@ -1,3 +0,0 @@ -# Any Github changes require admin approval -/.github/** @GTNewHorizons/admin - diff --git a/README.MD b/README.MD index 64dd336aa..45022f1ad 100644 --- a/README.MD +++ b/README.MD @@ -40,46 +40,8 @@ Unofficial AE2([PAE2](https://www.curseforge.com/minecraft/mc-mods/ae2-extended- Official AE2 isn't supported, you can use origin [AE2FC](https://github.com/phantamanta44/ae2-fluid-crafting) if you are playing with Official AE2. -## Basic Devices - -### Fluid Discretizer -The **Fluid Discretizer** is a device that, when attached to ME network, exposes the contents of its fluid storage grid as items, which take the form of "fluid drops". -It does this by functioning as a sort of storage bus: when fluid drops are removed from its storage via the item grid, it extracts the corresponding fluid from the fluid grid. -Conversely, when fluid drops inserted into its storage via the item grid, it injects the corresponding fluid into the fluid grid. -Each fluid drop is equivalent to one mB of its respective fluid, which means a full stack of them is equivalent to 64 mB. -Fluid drops have an important property: when an ME interface attempts to export fluid drops to a machine, it will attempt to convert them to fluid. -This means an interface exporting drops of gelid cryotheum into a fluid transposer will successfully fill the transposer's internal tank rather than inserting the drops as items. -This is the central mechanic that makes fluid autocrafting possible. -Note that the only way to convert between fluids and fluid drops is a discretizer attached to an ME network. -While you could theoretically use this as a very convoluted method of transporting fluids, it is not recomomended to do so. - -### Fluid Pattern Encoder -Most crafting recipes involving fluids require far more than 64 mB of a particular fluid, and so the standard pattern terminal will not do for encoding such recipes into patterns. -This problem is solved by the **Fluid Pattern Encoder**, a utility that functions similarly to a pattern terminal. -When a fluid-handling item (e.g. a bucket or tank) is inserted into the crafting ingredient slots, they will be converted into an equivalent stack of the corresponding fluid drops. -Using this, patterns for recipes that require more than a stack of fluid drops can easily be encoded. -AE2 Fluid Crafting also comes with a handy JEI integration module that allows the fluid pattern encoder to encode any JEI recipe involving fluids. -This is the recommended way to play with the mod, since encoding patterns by hand is a little cumbersome. - -### Fluid Pattern Terminal - -Encoding recipes in a big and bulky workbench separate from the rest of your AE2 equipment can be a little inconvenient. -Luckily, we have the **Fluid Pattern Terminal**, which combines the functionality of the standard pattern terminal and the fluid pattern encoder. -Now, you can encode your fluid recipes using the same familiar interface you know and love! - -### Fluid Pattern Interface - -The standard ME interface lets you emit items and fluid packets with AE2FC, but it will only accept items, as in vanilla AE2. -This is a little inconvenient when you want to build compact setups for autocrafting with fluid outputs, where you would need to use both an item interface for inputs, and a separate fluid interface for outputs. -To make things easier, we have the **Fluid Pattern Interface**, which functions as a combination of an item interface and a fluid interface! -Its GUI is the same as normal ME interface, but it can emit fluids directly instead of fluid packets! It also accepts fluid and item inputs. -Automating fluid crafting machines has never been this quick and painless! - -### Fluid Packets - -When putting fluid pattern in a normal ME interface, it will emit fluid packets as fluid. -So if you prefer to deal with item instead of fluids, you can transport these packets and turn them back to fluid with **ME Fluid Packet Decoder**. -Simply connect the decoder to your ME network and insert the fluid packet; the decoder will, if possible, inject the fluid into your fluid storage grid. +## How to Use It +https://github.com/GlodBlock/AE2FluidCraft-Rework/wiki ## Credited Works From f40c6477deaf1e94db55355c77588f720f668fb4 Mon Sep 17 00:00:00 2001 From: mczph Date: Fri, 15 Jul 2022 15:45:04 +0800 Subject: [PATCH 06/21] Update zh_CN.lang --- src/main/resources/assets/ae2fc/lang/zh_CN.lang | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/ae2fc/lang/zh_CN.lang b/src/main/resources/assets/ae2fc/lang/zh_CN.lang index 2b59381f0..486dcba18 100644 --- a/src/main/resources/assets/ae2fc/lang/zh_CN.lang +++ b/src/main/resources/assets/ae2fc/lang/zh_CN.lang @@ -43,10 +43,10 @@ ae2fc.gui.fluid_packet_decoder=ME流体封包解码器 ae2fc.gui.ingredient_buffer=原材料缓存仓 ae2fc.gui.large_ingredient_buffer=大型原材料缓存仓 ae2fc.gui.fluid_interface=ME二合一接口 -ae2fc.gui.fluid_interface.0=D -ae2fc.gui.fluid_interface.1=U -ae2fc.gui.fluid_interface.2=N -ae2fc.gui.fluid_interface.3=S -ae2fc.gui.fluid_interface.4=W -ae2fc.gui.fluid_interface.5=E +ae2fc.gui.fluid_interface.0=下 +ae2fc.gui.fluid_interface.1=上 +ae2fc.gui.fluid_interface.2=北 +ae2fc.gui.fluid_interface.3=南 +ae2fc.gui.fluid_interface.4=西 +ae2fc.gui.fluid_interface.5=东 ae2fc.gui.oc_pattern_editor=OC样板编辑器 From 3c128450b50046bc1fde5b669fc0aaadaf2a6abc Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Fri, 22 Jul 2022 12:10:04 +0800 Subject: [PATCH 07/21] creative tabs --- .../github/client/gui/GuiFCBaseMonitor.java | 32 +++++++------------ .../client/render/ItemPacketRender.java | 23 ++++++------- .../common/block/BlockFluidDiscretizer.java | 2 ++ .../common/block/BlockFluidInterface.java | 2 ++ .../common/block/BlockFluidPacketDecoder.java | 2 ++ .../block/BlockFluidPatternEncoder.java | 2 ++ .../common/block/BlockIngredientBuffer.java | 2 ++ .../block/BlockLargeIngredientBuffer.java | 2 ++ .../common/block/BlockOCPatternEditor.java | 2 ++ .../item/ItemBasicFluidStorageCell.java | 2 ++ .../item/ItemBasicFluidStoragePart.java | 2 ++ .../common/item/ItemFluidExportBus.java | 2 ++ .../common/item/ItemFluidImportBus.java | 2 ++ .../common/item/ItemPartFluidInterface.java | 2 ++ .../item/ItemPartFluidPatternTerminal.java | 2 ++ .../item/ItemPartFluidPatternTerminalEx.java | 2 ++ .../github/common/tabs/FluidCraftingTabs.java | 20 ++++++++++++ .../github/loader/ItemAndBlockHolder.java | 16 +++++----- .../resources/assets/ae2fc/lang/en_US.lang | 2 ++ 19 files changed, 79 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/glodblock/github/common/tabs/FluidCraftingTabs.java diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java b/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java index 4eb35203b..ff0f675bd 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java @@ -30,13 +30,9 @@ import appeng.util.Platform; import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.FCBaseMonitorContain; -import com.glodblock.github.client.gui.container.FCBasePartContainer; -import com.glodblock.github.common.parts.PartFluidPatternTerminal; -import com.glodblock.github.common.parts.PartFluidPatternTerminalEx; import com.glodblock.github.network.CPacketInventoryAction; import com.glodblock.github.util.Ae2ReflectClient; import com.glodblock.github.util.ModAndClassUtil; -import com.glodblock.github.util.NameConst; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; @@ -80,11 +76,6 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi private GuiImgButton terminalStyleBox; private GuiImgButton searchStringSave; - public GuiFCBaseMonitor(final InventoryPlayer inventoryPlayer, final ITerminalHost te ) - { - this( inventoryPlayer, te, new FCBasePartContainer( inventoryPlayer, te ) ); - } - public GuiFCBaseMonitor( final InventoryPlayer inventoryPlayer, final ITerminalHost te, final FCBaseMonitorContain c ) { @@ -144,8 +135,8 @@ protected void actionPerformed( final GuiButton btn ) final GuiImgButton iBtn = (GuiImgButton) btn; if( iBtn.getSetting() != Settings.ACTIONS ) { - final Enum cv = iBtn.getCurrentValue(); - final Enum next = Platform.rotateEnum( cv, backwards, iBtn.getSetting().getPossibleValues() ); + final Enum cv = iBtn.getCurrentValue(); + final Enum next = Platform.rotateEnum( cv, backwards, iBtn.getSetting().getPossibleValues() ); if( btn == this.terminalStyleBox ) { @@ -188,6 +179,7 @@ private void reinitalize() } @Override + @SuppressWarnings("unchecked") public void initGui() { Keyboard.enableRepeatEvents( true ); @@ -203,7 +195,7 @@ public void initGui() final int magicNumber = 114 + 1; final int extraSpace = this.height - magicNumber - NEI - top - this.reservedSpace; - this.rows = (int) Math.floor( extraSpace / 18 ); + this.rows = (int) Math.floor( extraSpace / 18.0 ); if( this.rows > this.maxRows ) { top += ( this.rows - this.maxRows ) * 18 / 2; @@ -292,7 +284,7 @@ public void initGui() } // Enum setting = AEConfig.INSTANCE.getSetting( "Terminal", SearchBoxMode.class, SearchBoxMode.AUTOSEARCH ); - final Enum setting = AEConfig.instance.settings.getSetting( Settings.SEARCH_MODE ); + final Enum setting = AEConfig.instance.settings.getSetting( Settings.SEARCH_MODE ); this.searchField.setFocused( SearchBoxMode.AUTOSEARCH == setting || SearchBoxMode.NEI_AUTOSEARCH == setting ); if (ModAndClassUtil.isSearchBar && (AEConfig.instance.preserveSearchBar || this.isSubGui())) @@ -354,7 +346,7 @@ public void drawFG( final int offsetX, final int offsetY, final int mouseX, fina @Override protected void mouseClicked( final int xCoord, final int yCoord, final int btn ) { - final Enum searchMode = AEConfig.instance.settings.getSetting( Settings.SEARCH_MODE ); + final Enum searchMode = AEConfig.instance.settings.getSetting( Settings.SEARCH_MODE ); if( searchMode != SearchBoxMode.AUTOSEARCH && searchMode != SearchBoxMode.NEI_AUTOSEARCH ) { @@ -421,7 +413,7 @@ else if( slot instanceof SlotCraftingTerm ) return; // prevent weird double clicks.. } - InventoryAction action = null; + InventoryAction action; if( isShiftKeyDown() ) { action = InventoryAction.CRAFT_SHIFT; @@ -681,19 +673,19 @@ public void updateScreen() } @Override - public Enum getSortBy() + public Enum getSortBy() { return this.configSrc.getSetting( Settings.SORT_BY ); } @Override - public Enum getSortDir() + public Enum getSortDir() { return this.configSrc.getSetting( Settings.SORT_DIRECTION ); } @Override - public Enum getSortDisplay() + public Enum getSortDisplay() { return this.configSrc.getSetting( Settings.VIEW_MODE ); } @@ -734,7 +726,7 @@ public boolean isCustomSortOrder() return this.customSortOrder; } - void setCustomSortOrder( final boolean customSortOrder ) + public void setCustomSortOrder( final boolean customSortOrder ) { this.customSortOrder = customSortOrder; } @@ -744,7 +736,7 @@ public int getStandardSize() return this.standardSize; } - void setStandardSize( final int standardSize ) + public void setStandardSize( final int standardSize ) { this.standardSize = standardSize; } diff --git a/src/main/java/com/glodblock/github/client/render/ItemPacketRender.java b/src/main/java/com/glodblock/github/client/render/ItemPacketRender.java index 3611feece..978f7c25f 100644 --- a/src/main/java/com/glodblock/github/client/render/ItemPacketRender.java +++ b/src/main/java/com/glodblock/github/client/render/ItemPacketRender.java @@ -2,8 +2,10 @@ import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.loader.ItemAndBlockHolder; +import com.glodblock.github.util.RenderUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.Tessellator; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; @@ -22,12 +24,12 @@ public ItemPacketRender() { @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { - return type == ItemRenderType.INVENTORY; + return type != ItemRenderType.FIRST_PERSON_MAP; } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return false; + return type == ItemRenderType.ENTITY; } @Override @@ -50,18 +52,11 @@ public void renderItem(ItemRenderType type, ItemStack item, Object... data) { GL11.glColor3f((RGB >> 16 & 0xFF) / 255.0F, (RGB >> 8 & 0xFF) / 255.0F, (RGB & 0xFF) / 255.0F); } - Tessellator tess = Tessellator.instance; - tess.startDrawingQuads(); - // draw a simple rectangle for the inventory icon - final float x_min = icon.getMinU(); - final float x_max = icon.getMaxU(); - final float y_min = icon.getMinV(); - final float y_max = icon.getMaxV(); - tess.addVertexWithUV( 0, 16, 0, x_min, y_max); - tess.addVertexWithUV(16, 16, 0, x_max, y_max); - tess.addVertexWithUV(16, 0, 0, x_max, y_min); - tess.addVertexWithUV( 0, 0, 0, x_min, y_min); - tess.draw(); + if (type.equals(ItemRenderType.INVENTORY)) { + RenderUtil.renderItemIcon(icon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); + } else { + ItemRenderer.renderItemIn2D(Tessellator.instance, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 0.0625F); + } GL11.glDisable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_ALPHA_TEST); diff --git a/src/main/java/com/glodblock/github/common/block/BlockFluidDiscretizer.java b/src/main/java/com/glodblock/github/common/block/BlockFluidDiscretizer.java index e379c2e29..333979be0 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockFluidDiscretizer.java +++ b/src/main/java/com/glodblock/github/common/block/BlockFluidDiscretizer.java @@ -1,6 +1,7 @@ package com.glodblock.github.common.block; import appeng.block.AEBaseItemBlock; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.common.tile.TileFluidDiscretizer; import com.glodblock.github.util.NameConst; import cpw.mods.fml.common.registry.GameRegistry; @@ -19,6 +20,7 @@ public BlockFluidDiscretizer() { public BlockFluidDiscretizer register() { GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_FLUID_DISCRETIZER); GameRegistry.registerTileEntity(TileFluidDiscretizer.class, NameConst.BLOCK_FLUID_DISCRETIZER); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/block/BlockFluidInterface.java b/src/main/java/com/glodblock/github/common/block/BlockFluidInterface.java index 608caa7c7..ebaa363f5 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockFluidInterface.java +++ b/src/main/java/com/glodblock/github/common/block/BlockFluidInterface.java @@ -7,6 +7,7 @@ import appeng.tile.misc.TileInterface; import appeng.util.Platform; import com.glodblock.github.client.render.RenderBlockFluidInterface; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.common.tile.TileFluidInterface; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; @@ -78,6 +79,7 @@ protected void customRotateBlock(final IOrientable rotatable, final ForgeDirecti public BlockFluidInterface register() { GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_FLUID_INTERFACE); GameRegistry.registerTileEntity(TileFluidInterface.class, NameConst.BLOCK_FLUID_INTERFACE); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/block/BlockFluidPacketDecoder.java b/src/main/java/com/glodblock/github/common/block/BlockFluidPacketDecoder.java index 1da67ea1a..e0be3d6a6 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockFluidPacketDecoder.java +++ b/src/main/java/com/glodblock/github/common/block/BlockFluidPacketDecoder.java @@ -1,6 +1,7 @@ package com.glodblock.github.common.block; import appeng.block.AEBaseItemBlock; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.common.tile.TileFluidPacketDecoder; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; @@ -40,6 +41,7 @@ public boolean onActivated(World world, int x, int y, int z, EntityPlayer player public BlockFluidPacketDecoder register() { GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_FLUID_PACKET_DECODER); GameRegistry.registerTileEntity(TileFluidPacketDecoder.class, NameConst.BLOCK_FLUID_PACKET_DECODER); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/block/BlockFluidPatternEncoder.java b/src/main/java/com/glodblock/github/common/block/BlockFluidPatternEncoder.java index fc1449b61..524e3a0b4 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockFluidPatternEncoder.java +++ b/src/main/java/com/glodblock/github/common/block/BlockFluidPatternEncoder.java @@ -1,6 +1,7 @@ package com.glodblock.github.common.block; import appeng.block.AEBaseItemBlock; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.common.tile.TileFluidPatternEncoder; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; @@ -40,6 +41,7 @@ public boolean onActivated(World world, int x, int y, int z, EntityPlayer player public BlockFluidPatternEncoder register() { GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_FLUID_PATTERN_ENCODER); GameRegistry.registerTileEntity(TileFluidPatternEncoder.class, NameConst.BLOCK_FLUID_PATTERN_ENCODER); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/block/BlockIngredientBuffer.java b/src/main/java/com/glodblock/github/common/block/BlockIngredientBuffer.java index d1308fd45..ebe2b6d2b 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockIngredientBuffer.java +++ b/src/main/java/com/glodblock/github/common/block/BlockIngredientBuffer.java @@ -1,6 +1,7 @@ package com.glodblock.github.common.block; import appeng.block.AEBaseItemBlock; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.common.tile.TileIngredientBuffer; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; @@ -41,6 +42,7 @@ public boolean onActivated(World world, int x, int y, int z, EntityPlayer player public BlockIngredientBuffer register() { GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_INGREDIENT_BUFFER); GameRegistry.registerTileEntity(TileIngredientBuffer.class, NameConst.BLOCK_INGREDIENT_BUFFER); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/block/BlockLargeIngredientBuffer.java b/src/main/java/com/glodblock/github/common/block/BlockLargeIngredientBuffer.java index ff5f56710..ffe9210a8 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockLargeIngredientBuffer.java +++ b/src/main/java/com/glodblock/github/common/block/BlockLargeIngredientBuffer.java @@ -1,6 +1,7 @@ package com.glodblock.github.common.block; import appeng.block.AEBaseItemBlock; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.common.tile.TileLargeIngredientBuffer; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; @@ -41,6 +42,7 @@ public boolean onActivated(World world, int x, int y, int z, EntityPlayer player public BlockLargeIngredientBuffer register() { GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_LARGE_INGREDIENT_BUFFER); GameRegistry.registerTileEntity(TileLargeIngredientBuffer.class, NameConst.BLOCK_LARGE_INGREDIENT_BUFFER); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/block/BlockOCPatternEditor.java b/src/main/java/com/glodblock/github/common/block/BlockOCPatternEditor.java index 0a6c26ce6..c0bcdc8db 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockOCPatternEditor.java +++ b/src/main/java/com/glodblock/github/common/block/BlockOCPatternEditor.java @@ -1,6 +1,7 @@ package com.glodblock.github.common.block; import appeng.block.AEBaseItemBlock; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.common.tile.TileOCPatternEditor; import com.glodblock.github.crossmod.opencomputers.OCDriverInit; import com.glodblock.github.inventory.InventoryHandler; @@ -44,6 +45,7 @@ public BlockOCPatternEditor register() { GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_OC_PATTERN_EDITOR); GameRegistry.registerTileEntity(TileOCPatternEditor.class, NameConst.BLOCK_OC_PATTERN_EDITOR); OCDriverInit.run(); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } return null; diff --git a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java index 02dec4b8a..2ba2bc2b1 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java @@ -23,6 +23,7 @@ import com.glodblock.github.common.storage.IFluidCellInventory; import com.glodblock.github.common.storage.IFluidCellInventoryHandler; import com.glodblock.github.common.storage.IStorageFluidCell; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.NameConst; import com.google.common.base.Optional; @@ -329,6 +330,7 @@ public boolean hasContainerItem( final ItemStack stack ) public ItemBasicFluidStorageCell register() { if (!Config.fluidCells) return null; GameRegistry.registerItem(this, NameConst.ITEM_FLUID_STORAGE + this.totalBytes / 1024 , FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStoragePart.java b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStoragePart.java index dd5b43bfd..6b713d979 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStoragePart.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStoragePart.java @@ -2,6 +2,7 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.common.Config; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @@ -59,6 +60,7 @@ public IIcon getIconFromDamage(int meta) { public ItemBasicFluidStoragePart register() { if (!Config.fluidCells) return null; GameRegistry.registerItem(this, NameConst.ITEM_FLUID_PART, FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidExportBus.java b/src/main/java/com/glodblock/github/common/item/ItemFluidExportBus.java index 613236507..0b96820c0 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidExportBus.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidExportBus.java @@ -5,6 +5,7 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.common.Config; import com.glodblock.github.common.parts.PartFluidExportBus; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @@ -39,6 +40,7 @@ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int public ItemFluidExportBus register() { if (!Config.fluidIOBus) return null; GameRegistry.registerItem(this, NameConst.ITEM_PART_FLUID_EXPORT, FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidImportBus.java b/src/main/java/com/glodblock/github/common/item/ItemFluidImportBus.java index 5f5c900b8..77a69b751 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidImportBus.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidImportBus.java @@ -5,6 +5,7 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.common.Config; import com.glodblock.github.common.parts.PartFluidImportBus; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @@ -39,6 +40,7 @@ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int public ItemFluidImportBus register() { if (!Config.fluidIOBus) return null; GameRegistry.registerItem(this, NameConst.ITEM_PART_FLUID_IMPORT, FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/item/ItemPartFluidInterface.java b/src/main/java/com/glodblock/github/common/item/ItemPartFluidInterface.java index aecbb33f3..cb8370306 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemPartFluidInterface.java +++ b/src/main/java/com/glodblock/github/common/item/ItemPartFluidInterface.java @@ -4,6 +4,7 @@ import appeng.api.parts.IPartItem; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.parts.PartFluidInterface; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @@ -37,6 +38,7 @@ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int public ItemPartFluidInterface register() { GameRegistry.registerItem(this, NameConst.ITEM_PART_FLUID_INTERFACE, FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/item/ItemPartFluidPatternTerminal.java b/src/main/java/com/glodblock/github/common/item/ItemPartFluidPatternTerminal.java index caf378629..3b2e3a5f3 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemPartFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemPartFluidPatternTerminal.java @@ -4,6 +4,7 @@ import appeng.api.parts.IPartItem; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.parts.PartFluidPatternTerminal; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @@ -37,6 +38,7 @@ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int public ItemPartFluidPatternTerminal register() { GameRegistry.registerItem(this, NameConst.ITEM_PART_FLUID_PATTERN_TERMINAL, FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/item/ItemPartFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/common/item/ItemPartFluidPatternTerminalEx.java index f19dcb968..7260744d4 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemPartFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/common/item/ItemPartFluidPatternTerminalEx.java @@ -4,6 +4,7 @@ import appeng.api.parts.IPartItem; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.parts.PartFluidPatternTerminalEx; +import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @@ -37,6 +38,7 @@ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int public ItemPartFluidPatternTerminalEx register() { GameRegistry.registerItem(this, NameConst.ITEM_PART_FLUID_PATTERN_TERMINAL_EX, FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/tabs/FluidCraftingTabs.java b/src/main/java/com/glodblock/github/common/tabs/FluidCraftingTabs.java new file mode 100644 index 000000000..9cdf03b28 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/tabs/FluidCraftingTabs.java @@ -0,0 +1,20 @@ +package com.glodblock.github.common.tabs; + +import com.glodblock.github.FluidCraft; +import com.glodblock.github.loader.ItemAndBlockHolder; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +public class FluidCraftingTabs extends CreativeTabs { + + public static final FluidCraftingTabs INSTANCE = new FluidCraftingTabs(FluidCraft.MODID); + + public FluidCraftingTabs(String name){ + super(name); + } + + @Override + public Item getTabIconItem() { + return ItemAndBlockHolder.DISCRETIZER.stack().getItem(); + } +} diff --git a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java index 2a46dd670..dbf9b94d3 100644 --- a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java +++ b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java @@ -7,6 +7,14 @@ public class ItemAndBlockHolder { + public static BlockFluidDiscretizer DISCRETIZER = new BlockFluidDiscretizer().register(); + public static BlockFluidPatternEncoder ENCODER = new BlockFluidPatternEncoder().register(); + public static BlockFluidPacketDecoder DECODER = new BlockFluidPacketDecoder().register(); + public static BlockFluidInterface INTERFACE = new BlockFluidInterface().register(); + public static BlockIngredientBuffer BUFFER = new BlockIngredientBuffer().register(); + public static BlockLargeIngredientBuffer LARGE_BUFFER = new BlockLargeIngredientBuffer().register(); + public static BlockOCPatternEditor OC_EDITOR = new BlockOCPatternEditor().register(); + public static ItemFluidDrop DROP = new ItemFluidDrop().register(); public static ItemFluidEncodedPattern PATTERN = new ItemFluidEncodedPattern().register(); public static ItemPartFluidPatternTerminal FLUID_TERMINAL = new ItemPartFluidPatternTerminal().register(); @@ -24,14 +32,6 @@ public class ItemAndBlockHolder { public static ItemBasicFluidStorageCell CELL4096K = new ItemBasicFluidStorageCell(CellType.Cell4096kPart, 4096).register(); public static ItemBasicFluidStoragePart CELL_PART = new ItemBasicFluidStoragePart().register(); - public static BlockFluidDiscretizer DISCRETIZER = new BlockFluidDiscretizer().register(); - public static BlockFluidPatternEncoder ENCODER = new BlockFluidPatternEncoder().register(); - public static BlockFluidPacketDecoder DECODER = new BlockFluidPacketDecoder().register(); - public static BlockFluidInterface INTERFACE = new BlockFluidInterface().register(); - public static BlockIngredientBuffer BUFFER = new BlockIngredientBuffer().register(); - public static BlockLargeIngredientBuffer LARGE_BUFFER = new BlockLargeIngredientBuffer().register(); - public static BlockOCPatternEditor OC_EDITOR = new BlockOCPatternEditor().register(); - public static void loadSetting() { if (!Config.fluidCells) return; CellType.Cell1kPart.setItemInstance(CELL_PART); diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index 3c262bc08..edae99ab7 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -50,3 +50,5 @@ ae2fc.gui.fluid_interface.3=S ae2fc.gui.fluid_interface.4=W ae2fc.gui.fluid_interface.5=E ae2fc.gui.oc_pattern_editor=OC Pattern Editor + +itemGroup.ae2fc=Fluid Craft For AE2 From 5747b4535b798fd4b7fed25da0ffc5682786f0f9 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Fri, 22 Jul 2022 19:18:13 +0800 Subject: [PATCH 08/21] clean up reflection --- gradle.properties | 2 +- .../gui/GuiBaseFluidPatternTerminal.java | 6 +-- .../gui/GuiBaseFluidPatternTerminalEx.java | 4 +- .../github/client/gui/GuiFCBaseMonitor.java | 6 +-- .../client/gui/GuiFluidPatternTerminal.java | 6 ++- .../client/gui/GuiFluidPatternTerminalEx.java | 2 +- .../github/coremod/hooker/CoreModHooks.java | 3 +- .../inventory/gui/MouseRegionManager.java | 8 +-- .../com/glodblock/github/util/Ae2Reflect.java | 26 --------- .../github/util/Ae2ReflectClient.java | 54 ------------------- src/main/resources/META-INF/ae2fc_at.cfg | 5 ++ 11 files changed, 24 insertions(+), 98 deletions(-) create mode 100644 src/main/resources/META-INF/ae2fc_at.cfg diff --git a/gradle.properties b/gradle.properties index 6518ed3b4..82e78de01 100644 --- a/gradle.properties +++ b/gradle.properties @@ -39,7 +39,7 @@ apiPackage = # Specify the configuration file for Forge's access transformers here. I must be placed into /src/main/resources/META-INF/ # Example value: mymodid_at.cfg -accessTransformersFile = +accessTransformersFile = ae2fc_at.cfg # Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled! usesMixins = false diff --git a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java index 48083d2b5..74c8576c9 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java @@ -30,7 +30,7 @@ public class GuiBaseFluidPatternTerminal extends GuiFCBaseMonitor { private static final String CRAFTMODE_CRFTING = "1"; private static final String CRAFTMODE_PROCESSING = "0"; - public final FCBasePartContainer container; + public FCBasePartContainer container; private GuiTabButton tabCraftButton; private GuiTabButton tabProcessButton; @@ -44,7 +44,7 @@ public GuiBaseFluidPatternTerminal(final InventoryPlayer inventoryPlayer, final { super( inventoryPlayer, te, new FCBasePartContainer( inventoryPlayer, te ) ); this.container = (FCBasePartContainer) this.inventorySlots; - Ae2ReflectClient.setReservedSpace(this, 81); + setReservedSpace(81); } @Override @@ -137,7 +137,7 @@ public void drawFG( final int offsetX, final int offsetY, final int mouseX, fina } super.drawFG( offsetX, offsetY, mouseX, mouseY ); - this.fontRendererObj.drawString(StatCollector.translateToLocal(NameConst.GUI_FLUID_PATTERN_TERMINAL), 8, this.ySize - 96 + 2 - Ae2ReflectClient.getReservedSpace(this), 4210752 ); + this.fontRendererObj.drawString(StatCollector.translateToLocal(NameConst.GUI_FLUID_PATTERN_TERMINAL), 8, this.ySize - 96 + 2 - getReservedSpace(), 4210752 ); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java index 701b86daf..e57b06e64 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java @@ -34,7 +34,7 @@ public GuiBaseFluidPatternTerminalEx(final InventoryPlayer inventoryPlayer, fina { super( inventoryPlayer, te, new FCBasePartContainerEx( inventoryPlayer, te ) ); this.container = (FCBasePartContainerEx) this.inventorySlots; - Ae2ReflectClient.setReservedSpace(this, 81); + setReservedSpace(81); } @Override @@ -106,7 +106,7 @@ public void drawFG( final int offsetX, final int offsetY, final int mouseX, fina } super.drawFG( offsetX, offsetY, mouseX, mouseY ); - this.fontRendererObj.drawString( StatCollector.translateToLocal(NameConst.GUI_FLUID_PATTERN_TERMINAL_EX), 8, this.ySize - 96 + 2 - Ae2ReflectClient.getReservedSpace(this), 4210752 ); + this.fontRendererObj.drawString( StatCollector.translateToLocal(NameConst.GUI_FLUID_PATTERN_TERMINAL_EX), 8, this.ySize - 96 + 2 - getReservedSpace(), 4210752 ); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java b/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java index ff0f675bd..3a54e5b7e 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java @@ -60,7 +60,7 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi private final boolean viewCell; private final ItemStack[] myCurrentViewCells = new ItemStack[5]; public FCBaseMonitorContain monitorableContainer; - private GuiTabButton craftingStatusBtn; + public GuiTabButton craftingStatusBtn; private GuiImgButton craftingStatusImgBtn; private FCGuiTextField searchField; private int perRow = 9; @@ -711,12 +711,12 @@ public void updateSetting( final IConfigManager manager, final Enum settingName, this.repo.updateView(); } - int getReservedSpace() + public int getReservedSpace() { return this.reservedSpace; } - void setReservedSpace( final int reservedSpace ) + public void setReservedSpace( final int reservedSpace ) { this.reservedSpace = reservedSpace; } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java index 035eca09d..89a382717 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java @@ -27,13 +27,15 @@ public GuiFluidPatternTerminal(InventoryPlayer inventoryPlayer, ITerminalHost te ContainerFluidPatternTerminal container = new ContainerFluidPatternTerminal(inventoryPlayer, te); container.setGui(this); this.inventorySlots = container; - Ae2ReflectClient.setGuiContainer(this, container); + this.container = container; + this.monitorableContainer = container; + this.configSrc = container.getConfigManager(); } @Override public void initGui() { super.initGui(); - craftingStatusBtn = Ae2ReflectClient.getCraftingStatusButton(this); + craftingStatusBtn = super.craftingStatusBtn; } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java index eb3c04132..db0304ce6 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java @@ -35,7 +35,7 @@ public GuiFluidPatternTerminalEx(InventoryPlayer inventoryPlayer, ITerminalHost @Override public void initGui() { super.initGui(); - craftingStatusBtn = Ae2ReflectClient.getCraftingStatusButton(this); + craftingStatusBtn = super.craftingStatusBtn; } @Override diff --git a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java index 14d5ef56c..1ec8742a4 100644 --- a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java +++ b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java @@ -16,7 +16,6 @@ import com.glodblock.github.inventory.FluidConvertingInventoryAdaptor; import com.glodblock.github.inventory.FluidConvertingInventoryCrafting; import com.glodblock.github.loader.ItemAndBlockHolder; -import com.glodblock.github.util.Ae2Reflect; import com.glodblock.github.util.SetBackedMachineSet; import com.glodblock.github.util.Util; import com.google.common.collect.Sets; @@ -33,7 +32,7 @@ public class CoreModHooks { public static InventoryCrafting wrapCraftingBuffer(InventoryCrafting inv) { - return new FluidConvertingInventoryCrafting(Ae2Reflect.getCraftContainer(inv), Ae2Reflect.getCraftWidth(inv), inv.getSizeInventory()/Ae2Reflect.getCraftWidth(inv)); + return new FluidConvertingInventoryCrafting(inv.eventHandler, inv.inventoryWidth, inv.getSizeInventory()/inv.inventoryWidth); } public static IAEItemStack wrapFluidPacketStack(IAEItemStack stack) { diff --git a/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java b/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java index 313e23680..8e4b99128 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java +++ b/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java @@ -22,8 +22,8 @@ public void addRegion(int x, int y, int width, int height, Handler handler) { } public boolean onClick(int mX, int mY, int button) { - mX -= Ae2ReflectClient.getGuiLeft(gui); - mY -= Ae2ReflectClient.getGuiTop(gui); + mX -= gui.guiLeft; + mY -= gui.guiTop; for (Region region : regions) { if (region.containsMouse(mX, mY) && region.handler.onClick(button)) { gui.mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1F)); @@ -34,8 +34,8 @@ public boolean onClick(int mX, int mY, int button) { } public void render(int mX, int mY) { - mX -= Ae2ReflectClient.getGuiLeft(gui); - mY -= Ae2ReflectClient.getGuiTop(gui); + mX -= gui.guiLeft; + mY -= gui.guiTop; for (Region region : regions) { if (region.containsMouse(mX, mY)) { List tooltip = region.handler.getTooltip(); diff --git a/src/main/java/com/glodblock/github/util/Ae2Reflect.java b/src/main/java/com/glodblock/github/util/Ae2Reflect.java index b479f7d74..82dcdb37e 100644 --- a/src/main/java/com/glodblock/github/util/Ae2Reflect.java +++ b/src/main/java/com/glodblock/github/util/Ae2Reflect.java @@ -3,36 +3,20 @@ import appeng.api.implementations.IUpgradeableHost; import appeng.api.networking.crafting.ICraftingCPU; import appeng.api.storage.IMEInventory; -import appeng.client.gui.AEBaseGui; -import appeng.client.gui.implementations.GuiCraftingStatus; -import appeng.client.gui.widgets.GuiTabButton; -import appeng.client.render.AppEngRenderItem; import appeng.container.implementations.ContainerUpgradeable; import appeng.container.implementations.CraftingCPURecord; import appeng.me.storage.MEInventoryHandler; import appeng.me.storage.MEPassThrough; import appeng.util.inv.ItemSlot; import appeng.util.prioitylist.IPartitionList; -import com.glodblock.github.client.gui.GuiBaseFluidPatternTerminal; -import com.glodblock.github.client.gui.GuiFCBaseMonitor; -import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; -import java.util.List; -import java.util.Set; public class Ae2Reflect { - private static final Field fInventory_container; private static final Field fInventory_containerUpgrade; - private static final Field fInventory_width; private static final Field fAEPass_internal; private static final Field fAEInv_partitionList; private static final Field fCPU_cpu; @@ -43,9 +27,7 @@ public class Ae2Reflect { static { try { - fInventory_container = reflectField(InventoryCrafting.class, "eventHandler", "field_70465_c", "c"); fInventory_containerUpgrade = reflectField(ContainerUpgradeable.class, "upgradeable"); - fInventory_width = reflectField(InventoryCrafting.class, "inventoryWidth", "field_70464_b", "b"); fAEPass_internal = reflectField(MEPassThrough.class, "internal"); fAEInv_partitionList = reflectField(MEInventoryHandler.class, "myPartitionList"); fCPU_cpu = Ae2Reflect.reflectField(CraftingCPURecord.class, "cpu"); @@ -104,14 +86,6 @@ public static IMEInventory getInternal(MEPassThrough me) { return Ae2Reflect.readField(me, fAEPass_internal); } - public static Container getCraftContainer(InventoryCrafting inv) { - return Ae2Reflect.readField(inv, fInventory_container); - } - - public static int getCraftWidth(InventoryCrafting inv) { - return Ae2Reflect.readField(inv, fInventory_width); - } - public static void setItemSlotExtractable(ItemSlot slot, boolean extractable) { try { mItemSlot_setExtractable.invoke(slot, extractable); diff --git a/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java b/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java index 0f72463f1..f40278ff9 100644 --- a/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java +++ b/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java @@ -4,12 +4,8 @@ import appeng.client.gui.implementations.GuiCraftingStatus; import appeng.client.gui.widgets.GuiTabButton; import appeng.client.render.AppEngRenderItem; -import com.glodblock.github.client.gui.GuiBaseFluidPatternTerminal; -import com.glodblock.github.client.gui.GuiFCBaseMonitor; -import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; @@ -23,34 +19,18 @@ public class Ae2ReflectClient { private static final Field fAEBaseGui_stackSizeRenderer; private static final Field fGuiCraftingStatus_originalGuiBtn; - private static final Field fGuiPatternTerm_container; private static final Field fGuiCPUStatus_icon; - private static final Field fGuiMEMonitorable_monitorableContainer; - private static final Field fGuiMEMonitorable_configSrc; - private static final Field fGuiMEMonitorable_craftingStatusBtn; - private static final Field fGuiContainer_guiLeft; - private static final Field fGuiContainer_guiTop; private static final Field fGui_drag; private static final Method mGuiPatternTerm_inventorySlots; - private static final Method mGuiPatternTerm_reservedSpace; - private static final Method mGuiPatternTerm_reservedSpaceSetter; static { try { fAEBaseGui_stackSizeRenderer = Ae2Reflect.reflectField(AEBaseGui.class, "aeRenderItem"); fGuiCraftingStatus_originalGuiBtn = Ae2Reflect.reflectField(GuiCraftingStatus.class, "originalGuiBtn"); - fGuiPatternTerm_container = Ae2Reflect.reflectField(GuiBaseFluidPatternTerminal.class, "container"); - fGuiMEMonitorable_monitorableContainer = Ae2Reflect.reflectField(GuiFCBaseMonitor.class, "monitorableContainer"); - fGuiMEMonitorable_configSrc = Ae2Reflect.reflectField(GuiFCBaseMonitor.class, "configSrc"); - fGuiMEMonitorable_craftingStatusBtn = Ae2Reflect.reflectField(GuiFCBaseMonitor.class, "craftingStatusBtn"); fGuiCPUStatus_icon = Ae2Reflect.reflectField(GuiCraftingStatus.class, "myIcon"); - fGuiContainer_guiLeft = Ae2Reflect.reflectField(GuiContainer.class, "guiLeft", "field_147003_i", "i"); - fGuiContainer_guiTop = Ae2Reflect.reflectField(GuiContainer.class, "guiTop", "field_147009_r", "r"); fGui_drag = Ae2Reflect.reflectField(AEBaseGui.class, "drag_click"); mGuiPatternTerm_inventorySlots = Ae2Reflect.reflectMethod(AEBaseGui.class, "getInventorySlots"); - mGuiPatternTerm_reservedSpace = Ae2Reflect.reflectMethod(GuiFCBaseMonitor.class, "getReservedSpace"); - mGuiPatternTerm_reservedSpaceSetter = Ae2Reflect.reflectMethod(GuiFCBaseMonitor.class, "setReservedSpace", int.class); } catch (NoSuchFieldException | NoSuchMethodException e) { throw new IllegalStateException("Failed to initialize AE2 reflection hacks!", e); } @@ -73,30 +53,6 @@ public static Set getDragClick(AEBaseGui gui) { return Ae2Reflect.readField(gui, fGui_drag); } - public static int getGuiLeft(GuiContainer gui) { - return Ae2Reflect.readField(gui, fGuiContainer_guiLeft); - } - - public static int getGuiTop(GuiContainer gui) { - return Ae2Reflect.readField(gui, fGuiContainer_guiTop); - } - - public static void setReservedSpace(GuiFCBaseMonitor gui, int size) { - try { - mGuiPatternTerm_reservedSpaceSetter.invoke(gui, size); - } catch (Exception e) { - throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_reservedSpaceSetter, e); - } - } - - public static int getReservedSpace(GuiFCBaseMonitor gui) { - try { - return (int) mGuiPatternTerm_reservedSpace.invoke(gui); - } catch (Exception e) { - throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_reservedSpace, e); - } - } - public static AppEngRenderItem getStackSizeRenderer(AEBaseGui gui) { return Ae2Reflect.readField(gui, fAEBaseGui_stackSizeRenderer); } @@ -105,14 +61,4 @@ public static GuiTabButton getOriginalGuiButton(GuiCraftingStatus gui) { return Ae2Reflect.readField(gui, fGuiCraftingStatus_originalGuiBtn); } - public static void setGuiContainer(GuiBaseFluidPatternTerminal instance, ContainerFluidPatternTerminal container) { - Ae2Reflect.writeField(instance, fGuiPatternTerm_container, container); - Ae2Reflect.writeField(instance, fGuiMEMonitorable_monitorableContainer, container); - Ae2Reflect.writeField(instance, fGuiMEMonitorable_configSrc, container.getConfigManager()); - } - - public static GuiTabButton getCraftingStatusButton(GuiFCBaseMonitor gui) { - return Ae2Reflect.readField(gui, fGuiMEMonitorable_craftingStatusBtn); - } - } diff --git a/src/main/resources/META-INF/ae2fc_at.cfg b/src/main/resources/META-INF/ae2fc_at.cfg new file mode 100644 index 000000000..d92743a30 --- /dev/null +++ b/src/main/resources/META-INF/ae2fc_at.cfg @@ -0,0 +1,5 @@ +public net.minecraft.inventory.InventoryCrafting field_70465_c # eventHandler +public net.minecraft.inventory.InventoryCrafting field_70464_b # inventoryWidth + +public net.minecraft.client.gui.inventory.GuiContainer field_147003_i # guiLeft +public net.minecraft.client.gui.inventory.GuiContainer field_147009_r # guiTop From 736a4b205194d438f0e2ae8621e1dc6d06b499ac Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Sun, 24 Jul 2022 18:00:10 +0800 Subject: [PATCH 09/21] combine button --- .../gui/GuiBaseFluidPatternTerminal.java | 37 +++ .../gui/GuiBaseFluidPatternTerminalEx.java | 26 ++ .../github/client/gui/GuiFCImgButton.java | 298 ++++++++++++++++++ .../client/gui/GuiFluidPatternTerminal.java | 1 - .../container/ContainerFluidCraftConfirm.java | 5 +- .../gui/container/FCBasePartContainer.java | 3 + .../gui/container/FCBasePartContainerEx.java | 5 +- .../parts/PartFluidPatternTerminal.java | 13 + .../parts/PartFluidPatternTerminalEx.java | 13 + .../common/tile/TileFluidInterface.java | 2 + .../com/glodblock/github/nei/NEIUtils.java | 62 ++++ .../extractor/ForestryRecipeExtractor.java | 39 +-- .../extractor/GregTech5RecipeExtractor.java | 43 +-- .../extractor/GregTech6RecipeExtractor.java | 43 +-- .../network/CPacketFluidPatternTermBtns.java | 6 + .../github/network/CPacketSwitchGuis.java | 1 - .../github/network/CPacketTransferRecipe.java | 21 ++ .../resources/assets/ae2fc/lang/en_US.lang | 4 + .../assets/ae2fc/textures/gui/states.png | Bin 0 -> 734 bytes 19 files changed, 514 insertions(+), 108 deletions(-) create mode 100644 src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java create mode 100644 src/main/java/com/glodblock/github/nei/NEIUtils.java create mode 100644 src/main/resources/assets/ae2fc/textures/gui/states.png diff --git a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java index 74c8576c9..eb531e40d 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java @@ -40,6 +40,9 @@ public class GuiBaseFluidPatternTerminal extends GuiFCBaseMonitor { private GuiImgButton clearBtn; private GuiImgButton doubleBtn; + private GuiFCImgButton combineEnableBtn; + private GuiFCImgButton combineDisableBtn; + public GuiBaseFluidPatternTerminal(final InventoryPlayer inventoryPlayer, final ITerminalHost te ) { super( inventoryPlayer, te, new FCBasePartContainer( inventoryPlayer, te ) ); @@ -68,6 +71,10 @@ else if( this.substitutionsEnabledBtn == btn || this.substitutionsDisabledBtn == { FluidCraft.proxy.netHandler.sendToServer( new CPacketFluidPatternTermBtns( "PatternTerminal.Substitute", this.substitutionsEnabledBtn == btn ? SUBSITUTION_DISABLE : SUBSITUTION_ENABLE ) ); } + else if( this.combineDisableBtn == btn || this.combineEnableBtn == btn ) + { + FluidCraft.proxy.netHandler.sendToServer( new CPacketFluidPatternTermBtns( "PatternTerminal.Combine", this.combineDisableBtn == btn ? "1" : "0" ) ); + } else if (ModAndClassUtil.isDoubleButton && doubleBtn == btn) { FluidCraft.proxy.netHandler.sendToServer( new CPacketFluidPatternTermBtns( "PatternTerminal.Double", Keyboard.isKeyDown( Keyboard.KEY_LSHIFT ) ? "1": "0") ); @@ -100,11 +107,22 @@ public void initGui() this.encodeBtn = new GuiImgButton( this.guiLeft + 147, this.guiTop + this.ySize - 142, Settings.ACTIONS, ActionItems.ENCODE ); this.buttonList.add( this.encodeBtn ); + int combineLeft = 74; + if (ModAndClassUtil.isDoubleButton) { this.doubleBtn = new GuiImgButton( this.guiLeft + 74, this.guiTop + this.ySize - 153, Settings.ACTIONS, ActionItems.DOUBLE ); this.doubleBtn.setHalfSize( true ); this.buttonList.add( this.doubleBtn ); + combineLeft = 84; } + + this.combineEnableBtn = new GuiFCImgButton( this.guiLeft + combineLeft, this.guiTop + this.ySize - 153, "FORCE_COMBINE", "DO_COMBINE" ); + this.combineEnableBtn.setHalfSize( true ); + this.buttonList.add( this.combineEnableBtn ); + + this.combineDisableBtn = new GuiFCImgButton( this.guiLeft + combineLeft, this.guiTop + this.ySize - 153, "NOT_COMBINE", "DONT_COMBINE" ); + this.combineDisableBtn.setHalfSize( true ); + this.buttonList.add( this.combineDisableBtn ); } @Override @@ -136,6 +154,25 @@ public void drawFG( final int offsetX, final int offsetY, final int mouseX, fina this.substitutionsDisabledBtn.visible = true; } + if (!this.container.isCraftingMode()) + { + if ( this.container.combine ) + { + this.combineEnableBtn.visible = true; + this.combineDisableBtn.visible = false; + } + else + { + this.combineEnableBtn.visible = false; + this.combineDisableBtn.visible = true; + } + } + else + { + this.combineEnableBtn.visible = false; + this.combineDisableBtn.visible = false; + } + super.drawFG( offsetX, offsetY, mouseX, mouseY ); this.fontRendererObj.drawString(StatCollector.translateToLocal(NameConst.GUI_FLUID_PATTERN_TERMINAL), 8, this.ySize - 96 + 2 - getReservedSpace(), 4210752 ); } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java index e57b06e64..d0068f3f1 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java @@ -30,6 +30,9 @@ public class GuiBaseFluidPatternTerminalEx extends GuiFCBaseMonitor { private GuiImgButton clearBtn; private GuiImgButton doubleBtn; + private GuiFCImgButton combineEnableBtn; + private GuiFCImgButton combineDisableBtn; + public GuiBaseFluidPatternTerminalEx(final InventoryPlayer inventoryPlayer, final ITerminalHost te ) { super( inventoryPlayer, te, new FCBasePartContainerEx( inventoryPlayer, te ) ); @@ -54,6 +57,10 @@ else if( this.substitutionsEnabledBtn == btn || this.substitutionsDisabledBtn == { FluidCraft.proxy.netHandler.sendToServer( new CPacketFluidPatternTermBtns( "PatternTerminal.Substitute", this.substitutionsEnabledBtn == btn ? SUBSITUTION_DISABLE : SUBSITUTION_ENABLE ) ); } + else if( this.combineDisableBtn == btn || this.combineEnableBtn == btn ) + { + FluidCraft.proxy.netHandler.sendToServer( new CPacketFluidPatternTermBtns( "PatternTerminal.Combine", this.combineDisableBtn == btn ? "1" : "0" ) ); + } else if (ModAndClassUtil.isDoubleButton && doubleBtn == btn) { FluidCraft.proxy.netHandler.sendToServer( new CPacketFluidPatternTermBtns( "PatternTerminal.Double", Keyboard.isKeyDown( Keyboard.KEY_LSHIFT ) ? "1": "0") ); @@ -86,6 +93,14 @@ public void initGui() this.doubleBtn.setHalfSize( true ); this.buttonList.add( this.doubleBtn ); } + + this.combineEnableBtn = new GuiFCImgButton( this.guiLeft + 87, this.guiTop + this.ySize - 153, "FORCE_COMBINE", "DO_COMBINE" ); + this.combineEnableBtn.setHalfSize( true ); + this.buttonList.add( this.combineEnableBtn ); + + this.combineDisableBtn = new GuiFCImgButton( this.guiLeft + 87, this.guiTop + this.ySize - 153, "NOT_COMBINE", "DONT_COMBINE" ); + this.combineDisableBtn.setHalfSize( true ); + this.buttonList.add( this.combineDisableBtn ); } @Override @@ -105,6 +120,17 @@ public void drawFG( final int offsetX, final int offsetY, final int mouseX, fina this.substitutionsDisabledBtn.visible = true; } + if ( this.container.combine ) + { + this.combineEnableBtn.visible = true; + this.combineDisableBtn.visible = false; + } + else + { + this.combineEnableBtn.visible = false; + this.combineDisableBtn.visible = true; + } + super.drawFG( offsetX, offsetY, mouseX, mouseY ); this.fontRendererObj.drawString( StatCollector.translateToLocal(NameConst.GUI_FLUID_PATTERN_TERMINAL_EX), 8, this.ySize - 96 + 2 - getReservedSpace(), 4210752 ); } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java b/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java new file mode 100644 index 000000000..3b5b0c2e7 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/GuiFCImgButton.java @@ -0,0 +1,298 @@ +package com.glodblock.github.client.gui; + +import appeng.client.gui.widgets.ITooltip; +import com.glodblock.github.FluidCraft; +import com.glodblock.github.util.NameConst; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.StatCollector; +import org.lwjgl.opengl.GL11; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +public class GuiFCImgButton extends GuiButton implements ITooltip { + + private static final Pattern COMPILE = Pattern.compile( "%s" ); + private static final Pattern PATTERN_NEW_LINE = Pattern.compile( "\\n", Pattern.LITERAL ); + private static Map appearances; + private final String buttonSetting; + private boolean halfSize = false; + private String fillVar; + private String currentValue; + private static final String prefix = NameConst.TT_KEY; + + public GuiFCImgButton( final int x, final int y, final String idx, final String val ) { + super(0, 0, 16, ""); + + this.buttonSetting = idx; + this.currentValue = val; + this.xPosition = x; + this.yPosition = y; + this.width = 16; + this.height = 16; + + if( appearances == null ) { + appearances = new HashMap<>(); + this.registerApp( 0, "NOT_COMBINE", "DONT_COMBINE", "not_combine" ); + this.registerApp( 1, "FORCE_COMBINE", "DO_COMBINE", "combine" ); + } + } + + private void registerApp(final int iconIndex, final String setting, final String val, final String title ) + { + final ButtonAppearance a = new ButtonAppearance(); + a.displayName = StatCollector.translateToLocal(prefix + title); + a.displayValue = StatCollector.translateToLocal(prefix + title + ".hint"); + a.index = iconIndex; + appearances.put( new EnumPair( setting, val ), a ); + } + + public void setVisibility( final boolean vis ) + { + this.visible = vis; + this.enabled = vis; + } + + private int getIconIndex() + { + if( this.buttonSetting != null && this.currentValue != null ) + { + final ButtonAppearance app = appearances.get(new EnumPair( this.buttonSetting, this.currentValue )); + if( app == null ) + { + return 8; + } + return app.index; + } + return 8; + } + + public String getSetting() + { + return this.buttonSetting; + } + + public String getCurrentValue() + { + return this.currentValue; + } + + public void set( final String e ) + { + if(!this.currentValue.equals(e)) + { + this.currentValue = e; + } + } + + public boolean isHalfSize() + { + return this.halfSize; + } + + public void setHalfSize( final boolean halfSize ) + { + this.halfSize = halfSize; + } + + public String getFillVar() + { + return this.fillVar; + } + + public void setFillVar( final String fillVar ) + { + this.fillVar = fillVar; + } + + @Override + public int xPos() + { + return this.xPosition; + } + + @Override + public int yPos() + { + return this.yPosition; + } + + @Override + public int getWidth() + { + return this.halfSize ? 8 : 16; + } + + @Override + public int getHeight() + { + return this.halfSize ? 8 : 16; + } + + @Override + public boolean isVisible() + { + return this.visible; + } + + @Override + public String getMessage() + { + String displayName = null; + String displayValue = null; + + if( this.buttonSetting != null && this.currentValue != null ) + { + final ButtonAppearance buttonAppearance = appearances.get( new EnumPair( this.buttonSetting, this.currentValue ) ); + if( buttonAppearance == null ) + { + return "No Such Message"; + } + displayName = buttonAppearance.displayName; + displayValue = buttonAppearance.displayValue; + } + + if( displayName != null ) + { + String name = StatCollector.translateToLocal( displayName ); + String value = StatCollector.translateToLocal( displayValue ); + + if( name == null || name.isEmpty() ) + { + name = displayName; + } + if( value == null || value.isEmpty() ) + { + value = displayValue; + } + + if( this.fillVar != null ) + { + value = COMPILE.matcher( value ).replaceFirst( this.fillVar ); + } + + value = PATTERN_NEW_LINE.matcher( value ).replaceAll( "\n" ); + final StringBuilder sb = new StringBuilder( value ); + + int i = sb.lastIndexOf( "\n" ); + if( i <= 0 ) + { + i = 0; + } + while( i + 30 < sb.length() && ( i = sb.lastIndexOf( " ", i + 30 ) ) != -1 ) + { + sb.replace( i, i + 1, "\n" ); + } + + return name + '\n' + sb; + } + return null; + } + + @Override + public void drawButton(final Minecraft par1Minecraft, final int par2, final int par3 ) + { + if( this.visible ) + { + final int iconIndex = this.getIconIndex(); + + if( this.halfSize ) + { + this.width = 8; + this.height = 8; + + GL11.glPushMatrix(); + GL11.glTranslatef( this.xPosition, this.yPosition, 0.0F ); + GL11.glScalef( 0.5f / 16 * 3, 0.5f / 16 * 3, 0.5f / 16 * 3 ); + + if( this.enabled ) + { + GL11.glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); + } + else + { + GL11.glColor4f( 0.5f, 0.5f, 0.5f, 1.0f ); + } + + par1Minecraft.renderEngine.bindTexture( FluidCraft.resource("textures/gui/states.png") ); + this.field_146123_n = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height; + + final int uv_y = (int) Math.floor( iconIndex / 3.0 ); + final int uv_x = iconIndex - uv_y * 3; + + this.drawTexturedModalRect( 0, 0, Math.round(32F * 16F / 3F), Math.round(32F * 16F / 3F), Math.round(16F * 16F / 3F), Math.round(16F * 16F / 3F) ); + this.drawTexturedModalRect( 0, 0, Math.round(uv_x * 16F * 16F / 3F), Math.round(uv_y * 16F * 16F / 3F), Math.round(16F * 16F / 3F), Math.round(16F * 16F / 3F) ); + this.mouseDragged( par1Minecraft, par2, par3 ); + + GL11.glPopMatrix(); + } + else + { + if( this.enabled ) + { + GL11.glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); + } + else + { + GL11.glColor4f( 0.5f, 0.5f, 0.5f, 1.0f ); + } + + par1Minecraft.renderEngine.bindTexture( FluidCraft.resource("textures/gui/states.png") ); + this.field_146123_n = par2 >= this.xPosition && par3 >= this.yPosition && par2 < this.xPosition + this.width && par3 < this.yPosition + this.height; + + final int uv_y = (int) Math.floor( iconIndex / 3.0 ); + final int uv_x = iconIndex - uv_y * 3; + + this.drawTexturedModalRect( this.xPosition, this.yPosition, 32, 32, 16, 16 ); + this.drawTexturedModalRect( this.xPosition, this.yPosition, uv_x * 16, uv_y * 16, 16, 16 ); + this.mouseDragged( par1Minecraft, par2, par3 ); + } + } + GL11.glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); + } + + private static final class EnumPair + { + + final String setting; + final String value; + + EnumPair( final String a, final String b ) + { + this.setting = a; + this.value = b; + } + + @Override + public int hashCode() + { + return this.setting.hashCode() ^ this.value.hashCode(); + } + + @Override + public boolean equals( final Object obj ) + { + if( obj == null ) + { + return false; + } + if( this.getClass() != obj.getClass() ) + { + return false; + } + final EnumPair other = (EnumPair) obj; + return other.setting.equals(this.setting) && other.value.equals(this.value); + } + } + + + private static class ButtonAppearance + { + public int index; + public String displayName; + public String displayValue; + } + +} diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java index 89a382717..9ece7e85a 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java @@ -11,7 +11,6 @@ import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.slot.SlotSingleItem; -import com.glodblock.github.util.Ae2Reflect; import com.glodblock.github.util.Ae2ReflectClient; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidCraftConfirm.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidCraftConfirm.java index 4dd40490b..42fd7edb5 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidCraftConfirm.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidCraftConfirm.java @@ -28,6 +28,8 @@ import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.network.SPacketMEInventoryUpdate; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.BlockPos; +import com.glodblock.github.util.Util; import com.google.common.collect.ImmutableSet; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -39,6 +41,7 @@ import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Collections; +import java.util.Objects; import java.util.concurrent.Future; public class ContainerFluidCraftConfirm extends AEBaseContainer { @@ -312,7 +315,7 @@ public void startJob() this.setAutoStart( false ); if( g != null && originalGui != null && this.getOpenContext() != null ) { - InventoryHandler.switchGui(originalGui); + InventoryHandler.openGui(this.getInventoryPlayer().player, getWorld(), new BlockPos(this.getOpenContext().getTile()), Objects.requireNonNull(Util.from(this.getOpenContext().getSide())), originalGui); } } } diff --git a/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainer.java b/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainer.java index 490961d67..366882722 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainer.java +++ b/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainer.java @@ -58,6 +58,8 @@ public class FCBasePartContainer extends FCBaseMonitorContain implements IAEAppE public boolean craftingMode = true; @GuiSync( 96 ) public boolean substitute = false; + @GuiSync( 95 ) + public boolean combine = false; public FCBasePartContainer(final InventoryPlayer ip, final ITerminalHost monitorable ) { @@ -457,6 +459,7 @@ public void detectAndSendChanges() } this.substitute = this.patternTerminal.isSubstitution(); + this.combine = this.patternTerminal.shouldCombine(); } } diff --git a/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainerEx.java b/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainerEx.java index 77f6b15a4..4378c5ad5 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainerEx.java +++ b/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainerEx.java @@ -39,6 +39,8 @@ public class FCBasePartContainerEx extends FCBaseMonitorContain implements IAEAp protected final SlotRestrictedInput patternSlotOUT; @GuiSync( 96 ) public boolean substitute = false; + @GuiSync( 95 ) + public boolean combine = false; public FCBasePartContainerEx(final InventoryPlayer ip, final ITerminalHost monitorable ) { @@ -222,7 +224,7 @@ private ItemStack[] getOutputs() if( hasValue ) { - return list.toArray( new ItemStack[list.size()] ); + return list.toArray(new ItemStack[0]); } return null; @@ -280,6 +282,7 @@ public void detectAndSendChanges() if( Platform.isServer() ) { this.substitute = this.patternTerminal.isSubstitution(); + this.combine = this.patternTerminal.shouldCombine(); } } diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java index 413518a4c..d9034af91 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java @@ -40,6 +40,7 @@ public class PartFluidPatternTerminal extends FCBasePart { private boolean craftingMode = true; private boolean substitute = false; + private boolean combine = false; public PartFluidPatternTerminal(ItemStack is) { super(is, true); @@ -81,6 +82,7 @@ public void readFromNBT( final NBTTagCompound data ) super.readFromNBT( data ); this.setCraftingRecipe( data.getBoolean( "craftingMode" ) ); this.setSubstitution( data.getBoolean( "substitute" ) ); + this.setCombineMode( data.getBoolean("combine") ); this.pattern.readFromNBT( data, "pattern" ); this.output.readFromNBT( data, "outputList" ); this.crafting.readFromNBT( data, "craftingGrid" ); @@ -92,6 +94,7 @@ public void writeToNBT( final NBTTagCompound data ) super.writeToNBT( data ); data.setBoolean( "craftingMode", this.craftingMode ); data.setBoolean( "substitute", this.substitute ); + data.setBoolean( "combine", this.combine ); this.pattern.writeToNBT( data, "pattern" ); this.output.writeToNBT( data, "outputList" ); this.crafting.writeToNBT( data, "craftingGrid" ); @@ -244,11 +247,21 @@ public boolean isSubstitution() return this.substitute; } + public boolean shouldCombine() + { + return this.combine; + } + public void setSubstitution( boolean canSubstitute ) { this.substitute = canSubstitute; } + public void setCombineMode(boolean shouldCombine) + { + this.combine = shouldCombine; + } + public void onChangeCrafting(IAEItemStack[] newCrafting, IAEItemStack[] newOutput) { IInventory crafting = this.getInventoryByName("crafting"); IInventory output = this.getInventoryByName("output"); diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java index c6f573c14..fd449f987 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java @@ -39,6 +39,7 @@ public class PartFluidPatternTerminalEx extends FCBasePart { private final AppEngInternalInventory pattern = new AppEngInternalInventory( this, 2 ); private boolean substitute = false; + private boolean combine = false; public PartFluidPatternTerminalEx(ItemStack is) { super(is, true); @@ -79,6 +80,7 @@ public void readFromNBT( final NBTTagCompound data ) { super.readFromNBT( data ); this.setSubstitution( data.getBoolean( "substitute" ) ); + this.setCombineMode( data.getBoolean("combine") ); this.pattern.readFromNBT( data, "pattern" ); this.output.readFromNBT( data, "outputList" ); this.crafting.readFromNBT( data, "craftingGrid" ); @@ -89,6 +91,7 @@ public void writeToNBT( final NBTTagCompound data ) { super.writeToNBT( data ); data.setBoolean( "substitute", this.substitute ); + data.setBoolean( "combine", this.combine ); this.pattern.writeToNBT( data, "pattern" ); this.output.writeToNBT( data, "outputList" ); this.crafting.writeToNBT( data, "craftingGrid" ); @@ -204,6 +207,16 @@ public void onChangeInventory(final IInventory inv, final int slot, final InvOpe onChangeInventory0(inv, slot, mc, removedStack, newStack); } + public boolean shouldCombine() + { + return this.combine; + } + + public void setCombineMode(boolean shouldCombine) + { + this.combine = shouldCombine; + } + public boolean isSubstitution() { return this.substitute; diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java b/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java index 8cb5268f7..ad0a3bb1a 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java @@ -52,11 +52,13 @@ public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { @MENetworkEventSubscribe public void stateChange(final MENetworkChannelsChanged c) { fluidDuality.onChannelStateChange(c); + super.stateChange(c); } @MENetworkEventSubscribe public void stateChange(final MENetworkPowerStatusChange c) { fluidDuality.onPowerStateChange(c); + super.stateChange(c); } @Override diff --git a/src/main/java/com/glodblock/github/nei/NEIUtils.java b/src/main/java/com/glodblock/github/nei/NEIUtils.java new file mode 100644 index 000000000..8ce8931ca --- /dev/null +++ b/src/main/java/com/glodblock/github/nei/NEIUtils.java @@ -0,0 +1,62 @@ +package com.glodblock.github.nei; + +import com.glodblock.github.nei.object.OrderStack; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +public class NEIUtils { + + public static List> compress(List> list) { + List> comp = new LinkedList<>(); + for (OrderStack orderStack : list) { + if (orderStack == null) continue; + if (orderStack.getStack() instanceof FluidStack) { + comp.add(orderStack); + continue; + } + ItemStack currentStack = (ItemStack) orderStack.getStack(); + if (currentStack.stackSize == 0) continue; + boolean find = false; + for (OrderStack storedStack : comp) { + if (storedStack == null || !(orderStack.getStack() instanceof ItemStack)) continue; + ItemStack firstStack = (ItemStack) storedStack.getStack(); + boolean areItemStackEqual = firstStack.isItemEqual(currentStack) && ItemStack.areItemStackTagsEqual(firstStack, currentStack); + if (areItemStackEqual && (firstStack.stackSize + currentStack.stackSize) <= firstStack.getMaxStackSize()) { + find = true; + ((ItemStack) storedStack.getStack()).stackSize = firstStack.stackSize + currentStack.stackSize; + } + } + if (!find) { + comp.add(orderStack); + } + } + return comp.stream().filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static List> clearNull(List> list) { + List> cleared = new LinkedList<>(); + HashMap map = new HashMap<>(); + int upper = 0; + for (OrderStack orderStack : list) { + if (orderStack != null && orderStack.getStack() != null) { + map.put(orderStack.getIndex(), orderStack.getStack()); + upper = Math.max(upper, orderStack.getIndex()); + } + } + int id = 0; + for (int i = 0; i <= upper; i ++) { + if (map.containsKey(i)) { + cleared.add(new OrderStack<>(map.get(i), id)); + id ++; + } + } + return cleared; + } + +} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/ForestryRecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/ForestryRecipeExtractor.java index d8f7d3c19..ac8ce26c9 100644 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/ForestryRecipeExtractor.java +++ b/src/main/java/com/glodblock/github/nei/recipes/extractor/ForestryRecipeExtractor.java @@ -5,19 +5,15 @@ import codechicken.nei.recipe.TemplateRecipeHandler; import com.glodblock.github.nei.object.IRecipeExtractorLegacy; import com.glodblock.github.nei.object.OrderStack; -import crazypants.enderio.nei.VatRecipeHandler; import forestry.core.recipes.nei.PositionedFluidTank; import forestry.core.recipes.nei.RecipeHandlerBase; import forestry.factory.recipes.nei.NEIHandlerFabricator; import forestry.factory.recipes.nei.NEIHandlerSqueezer; -import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; public class ForestryRecipeExtractor implements IRecipeExtractorLegacy { @@ -58,14 +54,13 @@ public List> getOutputIngredients(List rawOutputs public List> getInputIngredients(List rawInputs, IRecipeHandler recipe, int index) { TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe; List> tmp = new ArrayList<>(); - List compressed = compress(rawInputs); if (tRecipe.arecipes.get(index) instanceof RecipeHandlerBase.CachedBaseRecipe) { - tmp = getInputIngredients(compressed); + tmp = getInputIngredients(rawInputs); List tanks = ((RecipeHandlerBase.CachedBaseRecipe) tRecipe.arecipes.get(index)).getFluidTanks(); if (tanks.size() > 0 && !(handler instanceof NEIHandlerSqueezer)) { FluidStack fluid = tanks.get(0).tank.getFluid(); if (fluid != null) { - tmp.add(new OrderStack<>(fluid, compressed.size())); + tmp.add(new OrderStack<>(fluid, rawInputs.size())); } } } @@ -77,49 +72,25 @@ public List> getOutputIngredients(List rawOutputs TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe; removeGlass(rawOutputs); List> tmp = new ArrayList<>(); - List compressed = compress(rawOutputs); if (tRecipe.arecipes.get(index) instanceof RecipeHandlerBase.CachedBaseRecipe) { - tmp = getOutputIngredients(compressed); + tmp = getOutputIngredients(rawOutputs); List tanks = ((RecipeHandlerBase.CachedBaseRecipe) tRecipe.arecipes.get(index)).getFluidTanks(); if (tanks.size() > 0 && handler instanceof NEIHandlerSqueezer) { FluidStack fluid = tanks.get(0).tank.getFluid(); if (fluid != null) { - tmp.add(new OrderStack<>(fluid, compressed.size())); + tmp.add(new OrderStack<>(fluid, rawOutputs.size())); } } else if (tanks.size() > 1) { FluidStack fluid = tanks.get(1).tank.getFluid(); if (fluid != null) { - tmp.add(new OrderStack<>(fluid, compressed.size())); + tmp.add(new OrderStack<>(fluid, rawOutputs.size())); } } } return tmp; } - private List compress(List list) { - List comp = new LinkedList<>(); - for (PositionedStack positionedStack : list) { - if (positionedStack == null) continue; - ItemStack currentStack = positionedStack.items[0].copy(); - if (currentStack.stackSize == 0) continue; - boolean find = false; - for (PositionedStack storedStack : comp) { - if (storedStack == null) continue; - ItemStack firstStack = storedStack.items[0].copy(); - boolean areItemStackEqual = firstStack.isItemEqual(currentStack) && ItemStack.areItemStackTagsEqual(firstStack, currentStack); - if (areItemStackEqual && (firstStack.stackSize + currentStack.stackSize) <= firstStack.getMaxStackSize()) { - find = true; - storedStack.items[0].stackSize = firstStack.stackSize + currentStack.stackSize; - } - } - if (!find) { - comp.add(positionedStack.copy()); - } - } - return comp.stream().filter(Objects::nonNull).collect(Collectors.toList()); - } - private void removeGlass(List list) { if (handler instanceof NEIHandlerFabricator) { list.remove(list.size() - 1); diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java index 5cfe7e168..06fb98997 100644 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java +++ b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java @@ -12,8 +12,6 @@ import java.util.LinkedList; import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; public class GregTech5RecipeExtractor implements IRecipeExtractor { @@ -26,11 +24,10 @@ public GregTech5RecipeExtractor(boolean removeSpecial) { @Override public List> getInputIngredients(List rawInputs) { if (r) removeSpecial(rawInputs); - List compressed = compress(rawInputs); List> tmp = new LinkedList<>(); - for (int i = 0; i < compressed.size(); i ++) { - if (compressed.get(i) == null) continue; - ItemStack item = compressed.get(i).items[0]; + for (int i = 0; i < rawInputs.size(); i ++) { + if (rawInputs.get(i) == null) continue; + ItemStack item = rawInputs.get(i).items[0].copy(); OrderStack stack; if (item.getItem() instanceof GT_FluidDisplayItem) { NBTTagCompound aNBT = item.getTagCompound(); @@ -39,7 +36,7 @@ public List> getInputIngredients(List rawInputs) stack = new OrderStack<>(new FluidStack(FluidRegistry.getFluid(item.getItemDamage()), amt), i); tmp.add(stack); } else { - stack = OrderStack.pack(compressed.get(i), i); + stack = OrderStack.pack(rawInputs.get(i), i); if (stack != null) tmp.add(stack); } } @@ -48,11 +45,10 @@ public List> getInputIngredients(List rawInputs) @Override public List> getOutputIngredients(List rawOutputs) { - List compressed = compress(rawOutputs); List> tmp = new LinkedList<>(); - for (int i = 0; i < compressed.size(); i ++) { - if (compressed.get(i) == null) continue; - ItemStack item = compressed.get(i).items[0]; + for (int i = 0; i < rawOutputs.size(); i ++) { + if (rawOutputs.get(i) == null) continue; + ItemStack item = rawOutputs.get(i).items[0].copy(); OrderStack stack; if (item.getItem() instanceof GT_FluidDisplayItem) { NBTTagCompound aNBT = item.getTagCompound(); @@ -61,7 +57,7 @@ public List> getOutputIngredients(List rawOutputs stack = new OrderStack<>(new FluidStack(FluidRegistry.getFluid(item.getItemDamage()), amt), i); tmp.add(stack); } else { - stack = OrderStack.pack(compressed.get(i), i); + stack = OrderStack.pack(rawOutputs.get(i), i); if (stack != null) tmp.add(stack); } } @@ -79,27 +75,4 @@ private void removeSpecial(List list) { } } - private List compress(List list) { - List comp = new LinkedList<>(); - for (PositionedStack positionedStack : list) { - if (positionedStack == null) continue; - ItemStack currentStack = positionedStack.items[0].copy(); - if (currentStack.stackSize == 0) continue; - boolean find = false; - for (PositionedStack storedStack : comp) { - if (storedStack == null) continue; - ItemStack firstStack = storedStack.items[0].copy(); - boolean areItemStackEqual = firstStack.isItemEqual(currentStack) && ItemStack.areItemStackTagsEqual(firstStack, currentStack); - if (areItemStackEqual && (firstStack.stackSize + currentStack.stackSize) <= firstStack.getMaxStackSize()) { - find = true; - storedStack.items[0].stackSize = firstStack.stackSize + currentStack.stackSize; - } - } - if (!find) { - comp.add(positionedStack.copy()); - } - } - return comp.stream().filter(Objects::nonNull).collect(Collectors.toList()); - } - } diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java index 90afa1655..5ffa5956e 100644 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java +++ b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java @@ -10,8 +10,6 @@ import java.util.LinkedList; import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; public class GregTech6RecipeExtractor implements IRecipeExtractor { @@ -24,11 +22,10 @@ public GregTech6RecipeExtractor(Recipe.RecipeMap aMap) { @Override public List> getInputIngredients(List rawInputs) { this.removeMachine(rawInputs); - List compressed = compress(rawInputs); List> tmp = new LinkedList<>(); - for (int i = 0; i < compressed.size(); i ++) { - if (compressed.get(i) == null) continue; - ItemStack item = compressed.get(i).items[0]; + for (int i = 0; i < rawInputs.size(); i ++) { + if (rawInputs.get(i) == null) continue; + ItemStack item = rawInputs.get(i).items[0].copy(); OrderStack stack; if (item.getItem() instanceof ItemFluidDisplay) { FluidStack fluid = ((ItemFluidDisplay) item.getItem()).getFluid(item); @@ -36,7 +33,7 @@ public List> getInputIngredients(List rawInputs) stack = new OrderStack<>(fluid, i); tmp.add(stack); } else { - stack = OrderStack.pack(compressed.get(i), i); + stack = OrderStack.pack(rawInputs.get(i), i); if (stack != null) tmp.add(stack); } } @@ -45,11 +42,10 @@ public List> getInputIngredients(List rawInputs) @Override public List> getOutputIngredients(List rawOutputs) { - List compressed = compress(rawOutputs); List> tmp = new LinkedList<>(); - for (int i = 0; i < compressed.size(); i ++) { - if (compressed.get(i) == null) continue; - ItemStack item = compressed.get(i).items[0]; + for (int i = 0; i < rawOutputs.size(); i ++) { + if (rawOutputs.get(i) == null) continue; + ItemStack item = rawOutputs.get(i).items[0].copy(); OrderStack stack; if (item.getItem() instanceof ItemFluidDisplay) { FluidStack fluid = ((ItemFluidDisplay) item.getItem()).getFluid(item); @@ -57,7 +53,7 @@ public List> getOutputIngredients(List rawOutputs stack = new OrderStack<>(fluid, i); tmp.add(stack); } else { - stack = OrderStack.pack(compressed.get(i), i); + stack = OrderStack.pack(rawOutputs.get(i), i); if (stack != null) tmp.add(stack); } } @@ -78,27 +74,4 @@ private void removeMachine(List list) { } } - private List compress(List list) { - List comp = new LinkedList<>(); - for (PositionedStack positionedStack : list) { - if (positionedStack == null) continue; - ItemStack currentStack = positionedStack.items[0].copy(); - if (currentStack.stackSize == 0) continue; - boolean find = false; - for (PositionedStack storedStack : comp) { - if (storedStack == null) continue; - ItemStack firstStack = storedStack.items[0].copy(); - boolean areItemStackEqual = firstStack.isItemEqual(currentStack) && ItemStack.areItemStackTagsEqual(firstStack, currentStack); - if (areItemStackEqual && (firstStack.stackSize + currentStack.stackSize) <= firstStack.getMaxStackSize()) { - find = true; - storedStack.items[0].stackSize = firstStack.stackSize + currentStack.stackSize; - } - } - if (!find) { - comp.add(positionedStack.copy()); - } - } - return comp.stream().filter(Objects::nonNull).collect(Collectors.toList()); - } - } diff --git a/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java b/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java index 76a7622a1..c88b681c9 100644 --- a/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java +++ b/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java @@ -80,6 +80,9 @@ public IMessage onMessage(CPacketFluidPatternTermBtns message, MessageContext ct case "PatternTerminal.Double": cpt.doubleStacks(Value.equals("1")); break; + case "PatternTerminal.Combine": + cpt.getPatternTerminal().setCombineMode(Value.equals("1")); + break; } } else if( Name.startsWith( "PatternTerminal." ) && (c instanceof ContainerFluidPatternTerminalEx)) { @@ -100,6 +103,9 @@ public IMessage onMessage(CPacketFluidPatternTermBtns message, MessageContext ct case "PatternTerminal.Double": cpt.doubleStacks(Value.equals("1")); break; + case "PatternTerminal.Combine": + cpt.getPatternTerminal().setCombineMode(Value.equals("1")); + break; } } else if(Name.equals( "Terminal.Cpu" ) && c instanceof ContainerFluidCraftConfirm) { final ContainerFluidCraftConfirm qk = (ContainerFluidCraftConfirm) c; diff --git a/src/main/java/com/glodblock/github/network/CPacketSwitchGuis.java b/src/main/java/com/glodblock/github/network/CPacketSwitchGuis.java index 7c7ce1c25..c2b37e125 100644 --- a/src/main/java/com/glodblock/github/network/CPacketSwitchGuis.java +++ b/src/main/java/com/glodblock/github/network/CPacketSwitchGuis.java @@ -62,7 +62,6 @@ public IMessage onMessage(CPacketSwitchGuis message, MessageContext ctx) { InventoryHandler.openGui(player, player.worldObj, new BlockPos(te), Objects.requireNonNull(Util.from(context.getSide())), message.guiType); return null; } - } } diff --git a/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java b/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java index 1f522434d..0c2f35bcc 100644 --- a/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java +++ b/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java @@ -3,6 +3,7 @@ import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal; import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminalEx; import com.glodblock.github.common.item.ItemFluidPacket; +import com.glodblock.github.nei.NEIUtils; import com.glodblock.github.nei.object.OrderStack; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.common.network.simpleimpl.IMessage; @@ -18,6 +19,8 @@ import javax.annotation.Nullable; import java.util.LinkedList; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; public class CPacketTransferRecipe implements IMessage { @@ -80,6 +83,7 @@ public IMessage onMessage(CPacketTransferRecipe message, MessageContext ctx) { Container c = ctx.getServerHandler().playerEntity.openContainer; if (c instanceof ContainerFluidPatternTerminal) { ContainerFluidPatternTerminal cf = (ContainerFluidPatternTerminal) c; + boolean combine = cf.combine; cf.getPatternTerminal().setCraftingRecipe(message.isCraft); IInventory inputSlot = cf.getInventoryByName("crafting"); IInventory outputSlot = cf.getInventoryByName("output"); @@ -89,6 +93,14 @@ public IMessage onMessage(CPacketTransferRecipe message, MessageContext ctx) { for (int i = 0; i < outputSlot.getSizeInventory(); i ++) { outputSlot.setInventorySlotContents(i, null); } + + if (combine) { + message.inputs = NEIUtils.compress(message.inputs); + message.outputs = NEIUtils.compress(message.outputs); + } + message.inputs = NEIUtils.clearNull(message.inputs); + message.outputs = NEIUtils.clearNull(message.outputs); + for (OrderStack stack : message.inputs) { if (stack != null) { int index = stack.getIndex(); @@ -123,6 +135,7 @@ else if (stack.getStack() instanceof FluidStack) { c.onCraftMatrixChanged(outputSlot); } else if (c instanceof ContainerFluidPatternTerminalEx) { ContainerFluidPatternTerminalEx cf = (ContainerFluidPatternTerminalEx) c; + boolean combine = cf.combine; IInventory inputSlot = cf.getInventoryByName("crafting"); IInventory outputSlot = cf.getInventoryByName("output"); for (int i = 0; i < inputSlot.getSizeInventory(); i ++) { @@ -131,6 +144,14 @@ else if (stack.getStack() instanceof FluidStack) { for (int i = 0; i < outputSlot.getSizeInventory(); i ++) { outputSlot.setInventorySlotContents(i, null); } + + if (combine) { + message.inputs = NEIUtils.compress(message.inputs); + message.outputs = NEIUtils.compress(message.outputs); + } + message.inputs = NEIUtils.clearNull(message.inputs); + message.outputs = NEIUtils.clearNull(message.outputs); + for (OrderStack stack : message.inputs) { if (stack != null) { int index = stack.getIndex(); diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index edae99ab7..c750f6b43 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -35,6 +35,10 @@ ae2fc.tooltip.fluid_packet=Use a Fluid Packet Decoder to\nconvert this back into ae2fc.tooltip.empty=Empty ae2fc.tooltip.dump_tank=Dump Tank Contents ae2fc.tooltip.switch_fluid_interface=Switch ME Dual Interface GUI +ae2fc.tooltip.not_combine=Merge the same items +ae2fc.tooltip.not_combine.hint=Disabled +ae2fc.tooltip.combine=Merge the same items +ae2fc.tooltip.combine.hint=Enabled ae2fc.gui.part_fluid_pattern_terminal=Fluid Pattern Terminal ae2fc.gui.part_fluid_pattern_terminal_ex=Fluid Processing Pattern Terminal diff --git a/src/main/resources/assets/ae2fc/textures/gui/states.png b/src/main/resources/assets/ae2fc/textures/gui/states.png new file mode 100644 index 0000000000000000000000000000000000000000..ce994c2e4ca9f9e28577d4f399f7f46cc3aa087b GIT binary patch literal 734 zcmV<40wMj0P)ck$WhdB1i?%lCbdLAhKeUvyp9k|G2U%D0~641^#h zBZ{ck>+G6r64LxxO!p;00zuJgwF;Zf2KZ}HNvQI#1sNfcD1sN}v0ANQI2^KZP~zhV zDRjWHZQHL@D$r~;+4V5tZnyg?UM`oAPNzYIzwkb*j}VIY`+X>tN|B=ZeE!0~E%+*6 zJAmS|*^GQfi6XY!?PW0(`EfxKpe@g2GBBA;t`=40D<|MM4heF(T%_>fa1gd#m9GM_ z#K)M_IBG94 z`X-jyfnWzflFwJ1H;;dAk^r2K189O85bnU)H0sjW_kBx(PdGvIH%)+=pfkK!ESQL8 zor}c@)A$Ph#XSgD@i_f5gLjOVql7{Wb@SidbM+BP0=khTpc_d7x{)NH8%YAXktCoS z|H*M$BYyvSj4eJMkInc!fJUNlJRTvHx~%ndIyG|#(6H!#5sXVfRBalIlF_~c6x3Xl zdC?dd)d7(~5LBLzjY)tvj|PLL!^X(S9e|M05sjIVPob!}$C&SeF-uIr8w^`$9!7K^ zYUV}XHFAV_Q?gGZFeL#Q!=YpKkG;jh-R*z~GUgH5e-C{9@{^n@V*vpE0yO0fQ4NZ1 Q1^@s607*qoM6N<$f{-9jX#fBK literal 0 HcmV?d00001 From 3ebf64f38b5a44fbf4870c781a72b0bc366a1fd9 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Sun, 24 Jul 2022 18:29:46 +0800 Subject: [PATCH 10/21] fix wct display drops --- dependencies.gradle | 1 + .../java/com/glodblock/github/coremod/FCClassTransformer.java | 1 + src/main/java/com/glodblock/github/util/ModAndClassUtil.java | 3 +++ 3 files changed, 5 insertions(+) diff --git a/dependencies.gradle b/dependencies.gradle index 8cba428b0..7d2991e0b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -5,6 +5,7 @@ dependencies { compile('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-75-GTNH:dev') compile('curse.maven:cofh-core-69162:2388751') compile('com.github.GTNewHorizons:ExtraCells2:2.5.9:dev') {transitive = false} + compile("com.github.GTNewHorizons:WirelessCraftingTerminal:1.8.8.5:dev") {transitive = false} compileOnly("com.github.GTNewHorizons:ForestryMC:4.4.4:dev") compileOnly("com.github.GTNewHorizons:EnderIO:2.3.1.27:dev") diff --git a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java b/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java index e13c9dc69..413d86254 100644 --- a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java +++ b/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java @@ -26,6 +26,7 @@ public byte[] transform(String name, String transformedName, byte[] code) { break; case "appeng.client.gui.implementations.GuiCraftingCPU": case "appeng.client.gui.implementations.GuiCraftConfirm": + case "net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftConfirm": tform = GuiCraftingTransformer.INSTANCE; break; default: diff --git a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java index cdff91621..abb571181 100644 --- a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java +++ b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java @@ -19,6 +19,7 @@ public final class ModAndClassUtil { public static boolean FTR = false; public static boolean OC = false; public static boolean ThE = false; + public static boolean WCT = false; public static boolean isDoubleButton; public static boolean isSaveText; @@ -109,6 +110,8 @@ public static void init() { OC = true; if (Loader.isModLoaded("thaumicenergistics")) ThE = true; + if (Loader.isModLoaded("ae2wct")) + WCT = true; } } From 9fee31d784f8e93a222a9c1910203aba74462839 Mon Sep 17 00:00:00 2001 From: Yang Xizhi <60341015+GlodBlock@users.noreply.github.com> Date: Sun, 24 Jul 2022 19:46:26 +0800 Subject: [PATCH 11/21] Update GregTech5RecipeExtractor.java --- .../github/nei/recipes/extractor/GregTech5RecipeExtractor.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java index 5da0933dc..2694faafd 100644 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java +++ b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java @@ -24,7 +24,6 @@ public GregTech5RecipeExtractor(boolean removeSpecial) { @Override public List> getInputIngredients(List rawInputs) { - if (r) removeSpecial(rawInputs); if (removeSpecial) removeSpecial(rawInputs); List> tmp = new LinkedList<>(); for (int i = 0; i < rawInputs.size(); i ++) { From 56d81eef562fe59b73345a4ce08b6acda37e8b8d Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Mon, 25 Jul 2022 22:08:34 +0800 Subject: [PATCH 12/21] move block loader to postinit --- dependencies.gradle | 2 +- src/main/java/com/glodblock/github/FluidCraft.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 7d2991e0b..1fca148b8 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -5,7 +5,7 @@ dependencies { compile('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-75-GTNH:dev') compile('curse.maven:cofh-core-69162:2388751') compile('com.github.GTNewHorizons:ExtraCells2:2.5.9:dev') {transitive = false} - compile("com.github.GTNewHorizons:WirelessCraftingTerminal:1.8.8.5:dev") {transitive = false} + compile("com.github.GTNewHorizons:WirelessCraftingTerminal:1.8.8.5:dev") compileOnly("com.github.GTNewHorizons:ForestryMC:4.4.4:dev") compileOnly("com.github.GTNewHorizons:EnderIO:2.3.1.27:dev") diff --git a/src/main/java/com/glodblock/github/FluidCraft.java b/src/main/java/com/glodblock/github/FluidCraft.java index 6c6c0d590..f731c1cb2 100644 --- a/src/main/java/com/glodblock/github/FluidCraft.java +++ b/src/main/java/com/glodblock/github/FluidCraft.java @@ -20,7 +20,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -@Mod(modid = FluidCraft.MODID, version = FluidCraft.VERSION, name = FluidCraft.MODNAME) +@Mod(modid = FluidCraft.MODID, version = FluidCraft.VERSION, name = FluidCraft.MODNAME, dependencies = "required-after:appliedenergistics2") public class FluidCraft { public static final String MODID = "GRADLETOKEN_MODID"; @@ -43,8 +43,6 @@ public static void preInit(FMLPreInitializationEvent event) { @Mod.EventHandler public static void init(FMLInitializationEvent event) { ModAndClassUtil.init(); - AEApi.instance().registries().cell().addCellHandler(new FluidCellHandler()); - ItemAndBlockHolder.loadSetting(); proxy.init(event); } @@ -52,6 +50,9 @@ public static void init(FMLInitializationEvent event) { public static void postInit(FMLPostInitializationEvent event) { NetworkRegistry.INSTANCE.registerGuiHandler(FluidCraft.INSTANCE, new InventoryHandler()); + AEApi.instance().registries().cell().addCellHandler(new FluidCellHandler()); + ItemAndBlockHolder.loadSetting(); + if (!Config.removeRecipe) { (new RecipeLoader()).run(); } From ea9ba2c4ccedfb92fa1376987f26b86512a3ee80 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Tue, 26 Jul 2022 22:05:48 +0800 Subject: [PATCH 13/21] fix cell byte calulation --- .../glodblock/github/common/storage/FluidCellInventory.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java index 4764f298e..bbf3918eb 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java @@ -180,8 +180,7 @@ public long getRemainingFluidTypes() { @Override public long getRemainingFluidCount() { - final long remaining = this.getFreeBytes() * 8 + this.getUnusedFluidCount(); - + final long remaining = this.getFreeBytes() * 8 * 256 + this.getUnusedFluidCount(); return remaining > 0 ? remaining : 0; } From 3d2df578a672e10a372e2b2b4a7395491a384cf7 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Wed, 27 Jul 2022 22:23:39 +0800 Subject: [PATCH 14/21] make dual interface use the same adpator like normal one --- dependencies.gradle | 1 + .../github/inventory/FluidConvertingInventoryAdaptor.java | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 1fca148b8..344f1b3a0 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -19,6 +19,7 @@ dependencies { compileOnly("com.gregoriust.gregtech:gregtech_1.7.10:6.14.23:dev") {transitive = false} compileOnly('com.github.GTNewHorizons:OpenComputers:1.7.5.23-GTNH:dev') {transitive = false} compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.3.19-GTNH:dev') {transitive = false} + compileOnly("com.github.GTNewHorizons:EnderIO:2.3.1.29:dev") {transitive = false} runtime("com.github.GTNewHorizons:Baubles:1.0.1.14:dev") } diff --git a/src/main/java/com/glodblock/github/inventory/FluidConvertingInventoryAdaptor.java b/src/main/java/com/glodblock/github/inventory/FluidConvertingInventoryAdaptor.java index 053ae7bb0..0eba2edcd 100644 --- a/src/main/java/com/glodblock/github/inventory/FluidConvertingInventoryAdaptor.java +++ b/src/main/java/com/glodblock/github/inventory/FluidConvertingInventoryAdaptor.java @@ -32,7 +32,7 @@ public static InventoryAdaptor wrap(TileEntity capProvider, EnumFacing face) { TileEntity inter = capProvider.getWorldObj().getTileEntity(capProvider.xCoord + f.offsetX, capProvider.yCoord + f.offsetY, capProvider.zCoord + f.offsetZ); if (!Config.noFluidPacket && !(inter instanceof TileFluidInterface || (inter instanceof TileCableBus && ((TileCableBus) inter).getPart(f.getOpposite()) instanceof PartFluidInterface))) return InventoryAdaptor.getAdaptor(capProvider, f); - IInventory item = capProvider instanceof IInventory ? (IInventory) capProvider : null; + InventoryAdaptor item = InventoryAdaptor.getAdaptor(capProvider, f); IFluidHandler fluid = capProvider instanceof IFluidHandler ? (IFluidHandler) capProvider : null; return new FluidConvertingInventoryAdaptor(item, fluid, face); } @@ -41,8 +41,8 @@ public static InventoryAdaptor wrap(TileEntity capProvider, EnumFacing face) { private final IFluidHandler invFluids; private final ForgeDirection side; - public FluidConvertingInventoryAdaptor(@Nullable IInventory invItems, @Nullable IFluidHandler invFluids, EnumFacing facing) { - this.invItems = invItems != null ? InventoryAdaptor.getAdaptor(invItems, Util.from(facing)) : null; + public FluidConvertingInventoryAdaptor(@Nullable InventoryAdaptor invItems, @Nullable IFluidHandler invFluids, EnumFacing facing) { + this.invItems = invItems; this.invFluids = invFluids; this.side = Util.from(facing); } From 26bc19c207d343dfb75b1303c541351a19840c5a Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Fri, 29 Jul 2022 17:24:59 +0800 Subject: [PATCH 15/21] fix craft mode --- .../github/network/CPacketTransferRecipe.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java b/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java index 0c2f35bcc..b74311bbe 100644 --- a/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java +++ b/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java @@ -94,13 +94,15 @@ public IMessage onMessage(CPacketTransferRecipe message, MessageContext ctx) { outputSlot.setInventorySlotContents(i, null); } - if (combine) { - message.inputs = NEIUtils.compress(message.inputs); - message.outputs = NEIUtils.compress(message.outputs); + if (!cf.isCraftingMode()) { + if (combine) { + message.inputs = NEIUtils.compress(message.inputs); + message.outputs = NEIUtils.compress(message.outputs); + } + message.inputs = NEIUtils.clearNull(message.inputs); + message.outputs = NEIUtils.clearNull(message.outputs); } - message.inputs = NEIUtils.clearNull(message.inputs); - message.outputs = NEIUtils.clearNull(message.outputs); - + for (OrderStack stack : message.inputs) { if (stack != null) { int index = stack.getIndex(); From 411ec6762421fa001c66499e04ce62131249a721 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Fri, 29 Jul 2022 17:36:07 +0800 Subject: [PATCH 16/21] wwwaaaaahhh --- .../com/glodblock/github/network/CPacketTransferRecipe.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java b/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java index b74311bbe..64a4bbf91 100644 --- a/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java +++ b/src/main/java/com/glodblock/github/network/CPacketTransferRecipe.java @@ -94,7 +94,7 @@ public IMessage onMessage(CPacketTransferRecipe message, MessageContext ctx) { outputSlot.setInventorySlotContents(i, null); } - if (!cf.isCraftingMode()) { + if (!message.isCraft) { if (combine) { message.inputs = NEIUtils.compress(message.inputs); message.outputs = NEIUtils.compress(message.outputs); @@ -102,7 +102,7 @@ public IMessage onMessage(CPacketTransferRecipe message, MessageContext ctx) { message.inputs = NEIUtils.clearNull(message.inputs); message.outputs = NEIUtils.clearNull(message.outputs); } - + for (OrderStack stack : message.inputs) { if (stack != null) { int index = stack.getIndex(); From e8133a85222fc1a457b5905475eac2f7104273ee Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Fri, 29 Jul 2022 20:39:34 +0800 Subject: [PATCH 17/21] ignore stack size 0 --- src/main/java/com/glodblock/github/nei/NEIUtils.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/glodblock/github/nei/NEIUtils.java b/src/main/java/com/glodblock/github/nei/NEIUtils.java index 8ce8931ca..dbcd61444 100644 --- a/src/main/java/com/glodblock/github/nei/NEIUtils.java +++ b/src/main/java/com/glodblock/github/nei/NEIUtils.java @@ -45,6 +45,8 @@ public static List> clearNull(List> list) { int upper = 0; for (OrderStack orderStack : list) { if (orderStack != null && orderStack.getStack() != null) { + if (orderStack.getStack() instanceof ItemStack && ((ItemStack) orderStack.getStack()).stackSize == 0) + continue; map.put(orderStack.getIndex(), orderStack.getStack()); upper = Math.max(upper, orderStack.getIndex()); } From 510bd94c5c30d4ffd71bab7384a03593ec587622 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Fri, 29 Jul 2022 22:07:05 +0800 Subject: [PATCH 18/21] add ic2 nei support --- dependencies.gradle | 1 + .../nei/recipes/DefaultExtractorLoader.java | 13 ++ .../IndustrialCraftRecipeExtractor.java | 114 ++++++++++++++++++ .../github/util/ModAndClassUtil.java | 3 + 4 files changed, 131 insertions(+) create mode 100644 src/main/java/com/glodblock/github/nei/recipes/extractor/IndustrialCraftRecipeExtractor.java diff --git a/dependencies.gradle b/dependencies.gradle index 344f1b3a0..8dc68525b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -21,5 +21,6 @@ dependencies { compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.3.19-GTNH:dev') {transitive = false} compileOnly("com.github.GTNewHorizons:EnderIO:2.3.1.29:dev") {transitive = false} + runtime("com.github.GTNewHorizons:Baubles:1.0.1.14:dev") } diff --git a/src/main/java/com/glodblock/github/nei/recipes/DefaultExtractorLoader.java b/src/main/java/com/glodblock/github/nei/recipes/DefaultExtractorLoader.java index 9b0a1540c..858b0349b 100644 --- a/src/main/java/com/glodblock/github/nei/recipes/DefaultExtractorLoader.java +++ b/src/main/java/com/glodblock/github/nei/recipes/DefaultExtractorLoader.java @@ -47,6 +47,19 @@ public void run() { FluidRecipe.addRecipeMap(null, new ForestryRecipeExtractor(new NEIHandlerStill())); } + if (ModAndClassUtil.IC2) { + FluidRecipe.addRecipeMap("blastfurnace", new IndustrialCraftRecipeExtractor()); + FluidRecipe.addRecipeMap("BlockCutter", new IndustrialCraftRecipeExtractor()); + FluidRecipe.addRecipeMap("centrifuge", new IndustrialCraftRecipeExtractor()); + FluidRecipe.addRecipeMap("compressor", new IndustrialCraftRecipeExtractor()); + FluidRecipe.addRecipeMap("extractor", new IndustrialCraftRecipeExtractor()); + FluidRecipe.addRecipeMap("fluidcanner", new IndustrialCraftRecipeExtractor()); + FluidRecipe.addRecipeMap("macerator", new IndustrialCraftRecipeExtractor()); + FluidRecipe.addRecipeMap("metalformer", new IndustrialCraftRecipeExtractor()); + FluidRecipe.addRecipeMap("oreWashing", new IndustrialCraftRecipeExtractor()); + FluidRecipe.addRecipeMap("solidcanner", new IndustrialCraftRecipeExtractor()); + } + } } diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/IndustrialCraftRecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/IndustrialCraftRecipeExtractor.java new file mode 100644 index 000000000..88343e44d --- /dev/null +++ b/src/main/java/com/glodblock/github/nei/recipes/extractor/IndustrialCraftRecipeExtractor.java @@ -0,0 +1,114 @@ +package com.glodblock.github.nei.recipes.extractor; + +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.IRecipeHandler; +import com.glodblock.github.nei.object.IRecipeExtractor; +import com.glodblock.github.nei.object.OrderStack; +import com.glodblock.github.util.Ae2Reflect; +import ic2.neiIntegration.core.recipehandler.FluidCannerRecipeHandler; +import ic2.neiIntegration.core.recipehandler.OreWashingRecipeHandler; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.LinkedList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +public class IndustrialCraftRecipeExtractor implements IRecipeExtractor { + + @Override + public List> getInputIngredients(List rawInputs) { + List> tmp = new LinkedList<>(); + for (int i = 0; i < rawInputs.size(); i ++) { + if (rawInputs.get(i) == null) continue; + tmp.add(OrderStack.pack(rawInputs.get(i), i)); + } + return tmp; + } + + @Override + public List> getOutputIngredients(List rawOutputs) { + List> tmp = new LinkedList<>(); + for (int i = 0; i < rawOutputs.size(); i ++) { + if (rawOutputs.get(i) == null) continue; + tmp.add(OrderStack.pack(rawOutputs.get(i), i)); + } + return tmp; + } + + @Override + public List> getInputIngredients(List rawInputs, IRecipeHandler recipe, int index) { + List> stacks = new LinkedList<>(); + + if (recipe instanceof FluidCannerRecipeHandler) { + FluidCannerRecipeHandler.CachedFluidCannerRecipe cachedRecipe = (FluidCannerRecipeHandler.CachedFluidCannerRecipe) ((FluidCannerRecipeHandler) recipe).arecipes.get(index); + FluidStack input = ReflectIC2.getInputFluid(cachedRecipe); + PositionedStack add = rawInputs.size() > 1 ? rawInputs.get(1) : null; + stacks.add(OrderStack.pack(add, 0)); + stacks.add(new OrderStack<>(input, 1)); + } + else if (recipe instanceof OreWashingRecipeHandler) { + stacks = getInputIngredients(rawInputs); + int water = ReflectIC2.getOreWasherWater((OreWashingRecipeHandler) recipe, index); + stacks.add(new OrderStack<>(new FluidStack(FluidRegistry.WATER, water), stacks.size())); + } else { + stacks = getInputIngredients(rawInputs); + } + + return stacks.stream().filter(Objects::nonNull).collect(Collectors.toList()); + } + + @Override + public List> getOutputIngredients(List rawOutputs, IRecipeHandler recipe, int index) { + List> stacks = new LinkedList<>(); + + if (recipe instanceof FluidCannerRecipeHandler) { + FluidCannerRecipeHandler.CachedFluidCannerRecipe cachedRecipe = (FluidCannerRecipeHandler.CachedFluidCannerRecipe) ((FluidCannerRecipeHandler) recipe).arecipes.get(index); + FluidStack output = ReflectIC2.getOutputFluid(cachedRecipe); + stacks.add(new OrderStack<>(output, 0)); + } else { + stacks = getOutputIngredients(rawOutputs); + } + + return stacks.stream().filter(Objects::nonNull).collect(Collectors.toList()); + } + + private static class ReflectIC2 { + + private final static Field inputsF; + private final static Field resultF; + + private final static Method oreWasherWater; + + static { + try { + inputsF = Ae2Reflect.reflectField(FluidCannerRecipeHandler.CachedFluidCannerRecipe.class, "fluidInput"); + resultF = Ae2Reflect.reflectField(FluidCannerRecipeHandler.CachedFluidCannerRecipe.class, "fluidOutput"); + oreWasherWater = Ae2Reflect.reflectMethod(OreWashingRecipeHandler.class, "getreqWater", int.class); + } catch (NoSuchFieldException | NoSuchMethodException e) { + throw new IllegalStateException("Failed to initialize IC2 reflection hacks!", e); + } + } + + private static FluidStack getInputFluid(FluidCannerRecipeHandler.CachedFluidCannerRecipe recipe) { + return Ae2Reflect.readField(recipe, inputsF); + } + + private static FluidStack getOutputFluid(FluidCannerRecipeHandler.CachedFluidCannerRecipe recipe) { + return Ae2Reflect.readField(recipe, resultF); + } + + private static int getOreWasherWater(OreWashingRecipeHandler recipeHandler, int index) { + try { + return (int) oreWasherWater.invoke(recipeHandler, index); + } catch (Exception e) { + throw new IllegalStateException("Failed to invoke method: " + oreWasherWater, e); + } + } + + } + +} diff --git a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java index abb571181..ef52c355c 100644 --- a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java +++ b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java @@ -20,6 +20,7 @@ public final class ModAndClassUtil { public static boolean OC = false; public static boolean ThE = false; public static boolean WCT = false; + public static boolean IC2 = false; public static boolean isDoubleButton; public static boolean isSaveText; @@ -112,6 +113,8 @@ public static void init() { ThE = true; if (Loader.isModLoaded("ae2wct")) WCT = true; + if (Loader.isModLoaded("IC2")) + IC2 = true; } } From dc6445bb6ef733f8e0ba31c1d2812e44a78e90ef Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Fri, 29 Jul 2022 22:10:58 +0800 Subject: [PATCH 19/21] check nei --- src/main/java/com/glodblock/github/proxy/ClientProxy.java | 5 ++++- src/main/java/com/glodblock/github/util/ModAndClassUtil.java | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/glodblock/github/proxy/ClientProxy.java b/src/main/java/com/glodblock/github/proxy/ClientProxy.java index fed7cd0ec..e8e3e4276 100644 --- a/src/main/java/com/glodblock/github/proxy/ClientProxy.java +++ b/src/main/java/com/glodblock/github/proxy/ClientProxy.java @@ -3,6 +3,7 @@ import com.glodblock.github.loader.ListenerLoader; import com.glodblock.github.loader.RenderLoader; import com.glodblock.github.nei.recipes.DefaultExtractorLoader; +import com.glodblock.github.util.ModAndClassUtil; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @@ -24,6 +25,8 @@ public void init(FMLInitializationEvent event){ @Override public void postInit(FMLPostInitializationEvent event){ super.postInit(event); - (new DefaultExtractorLoader()).run(); + if (ModAndClassUtil.NEI) { + (new DefaultExtractorLoader()).run(); + } } } diff --git a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java index ef52c355c..38c6de8f1 100644 --- a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java +++ b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java @@ -21,6 +21,7 @@ public final class ModAndClassUtil { public static boolean ThE = false; public static boolean WCT = false; public static boolean IC2 = false; + public static boolean NEI = false; public static boolean isDoubleButton; public static boolean isSaveText; @@ -115,6 +116,8 @@ public static void init() { WCT = true; if (Loader.isModLoaded("IC2")) IC2 = true; + if (Loader.isModLoaded("NotEnoughItems")) + NEI = true; } } From 3e8c5075569c5496712f3a3198f9fd74d6630055 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Sat, 30 Jul 2022 19:03:37 +0800 Subject: [PATCH 20/21] clean up --- dependencies.gradle | 2 +- .../gui/GuiBaseFluidPatternTerminalEx.java | 2 +- .../gui/container/FCBasePartContainerEx.java | 4 +-- .../extractor/GregTech5RecipeExtractor.java | 1 - .../extractor/GregTech6RecipeExtractor.java | 1 - .../network/CPacketFluidPatternTermBtns.java | 3 +- .../com/glodblock/github/util/NEIUtil.java | 36 ------------------- 7 files changed, 6 insertions(+), 43 deletions(-) delete mode 100644 src/main/java/com/glodblock/github/util/NEIUtil.java diff --git a/dependencies.gradle b/dependencies.gradle index 9732a608e..1dadc7a9b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -21,6 +21,6 @@ dependencies { compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.3.19-GTNH:dev') {transitive = false} compileOnly("com.github.GTNewHorizons:EnderIO:2.3.1.29:dev") {transitive = false} compileOnly("com.github.GTNewHorizons:GTplusplus:1.7.49:dev") {transitive = false} - + runtime("com.github.GTNewHorizons:Baubles:1.0.1.14:dev") } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java index 55f6ba77d..c20cbf859 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java @@ -71,7 +71,7 @@ else if( this.invertBtn == btn ) } else if( this.combineDisableBtn == btn || this.combineEnableBtn == btn ) { - FluidCraft.proxy.netHandler.sendToServer( new CPacketFluidPatternTermBtns( "PatternTerminal.Combine", this.combineDisableBtn == btn ? "1" : "0" ) ); + FluidCraft.proxy.netHandler.sendToServer( new CPacketFluidPatternTermBtns( "PatternTerminalEx.Combine", this.combineDisableBtn == btn ? "1" : "0" ) ); } else if (ModAndClassUtil.isDoubleButton && doubleBtn == btn) { diff --git a/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainerEx.java b/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainerEx.java index dcf5bd7b2..c521d3e8b 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainerEx.java +++ b/src/main/java/com/glodblock/github/client/gui/container/FCBasePartContainerEx.java @@ -60,14 +60,14 @@ public void setHidden(boolean hide) { protected final ProcessingSlotFake[] outputSlots = new ProcessingSlotFake[CRAFTING_GRID_SLOTS * CRAFTING_GRID_PAGES]; protected final SlotRestrictedInput patternSlotIN; protected final SlotRestrictedInput patternSlotOUT; + @GuiSync( 96 + (17-9) + 11 ) + public boolean combine = false; @GuiSync( 96 + (17-9) + 12 ) public boolean substitute = false; @GuiSync( 96 + (17-9) + 16 ) public boolean inverted; @GuiSync( 96 + (17-9) + 17 ) public int activePage = 0; - @GuiSync( 95 + (17-9) + 18 ) - public boolean combine = false; public FCBasePartContainerEx(final InventoryPlayer ip, final ITerminalHost monitorable ) { diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java index 2694faafd..21251c854 100644 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java +++ b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java @@ -3,7 +3,6 @@ import codechicken.nei.PositionedStack; import com.glodblock.github.nei.object.IRecipeExtractor; import com.glodblock.github.nei.object.OrderStack; -import com.glodblock.github.util.NEIUtil; import gregtech.api.enums.ItemList; import gregtech.common.items.GT_FluidDisplayItem; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java index bdca2db19..5ffa5956e 100644 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java +++ b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java @@ -3,7 +3,6 @@ import codechicken.nei.PositionedStack; import com.glodblock.github.nei.object.IRecipeExtractor; import com.glodblock.github.nei.object.OrderStack; -import com.glodblock.github.util.NEIUtil; import gregapi.item.ItemFluidDisplay; import gregapi.recipes.Recipe; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java b/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java index c41c0b07e..0605204ff 100644 --- a/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java +++ b/src/main/java/com/glodblock/github/network/CPacketFluidPatternTermBtns.java @@ -106,8 +106,9 @@ public IMessage onMessage(CPacketFluidPatternTermBtns message, MessageContext ct case "PatternTerminalEx.Double": cpt.doubleStacks(Value.equals("1")); break; - case "PatternTerminal.Combine": + case "PatternTerminalEx.Combine": cpt.getPatternTerminal().setCombineMode(Value.equals("1")); + break; case "PatternTerminalEx.ActivePage": cpt.getPatternTerminal().setActivePage(Integer.parseInt(Value)); break; diff --git a/src/main/java/com/glodblock/github/util/NEIUtil.java b/src/main/java/com/glodblock/github/util/NEIUtil.java deleted file mode 100644 index 6312c24bb..000000000 --- a/src/main/java/com/glodblock/github/util/NEIUtil.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.glodblock.github.util; - -import codechicken.nei.PositionedStack; -import net.minecraft.item.ItemStack; - -import java.util.LinkedList; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -public class NEIUtil { - - public static List compress(List list) { - List comp = new LinkedList<>(); - for (PositionedStack positionedStack : list) { - if (positionedStack == null) continue; - ItemStack currentStack = positionedStack.items[0].copy(); - if (currentStack.stackSize == 0) continue; - boolean find = false; - for (PositionedStack storedStack : comp) { - if (storedStack == null) continue; - ItemStack firstStack = storedStack.items[0].copy(); - boolean areItemStackEqual = firstStack.isItemEqual(currentStack) && ItemStack.areItemStackTagsEqual(firstStack, currentStack); - if (areItemStackEqual && (firstStack.stackSize + currentStack.stackSize) <= firstStack.getMaxStackSize()) { - find = true; - storedStack.items[0].stackSize = firstStack.stackSize + currentStack.stackSize; - } - } - if (!find) { - comp.add(positionedStack.copy()); - } - } - return comp.stream().filter(Objects::nonNull).collect(Collectors.toList()); - } - -} From ec9f55d17ac4c1e9e58ccc60b9d53f2d86fb3e16 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Sat, 30 Jul 2022 22:32:42 +0800 Subject: [PATCH 21/21] fix 4096k int overflow and drops --- .../common/storage/FluidCellInventory.java | 6 ++--- .../common/tile/TileFluidDiscretizer.java | 27 ++++++++++++++----- .../common/tile/TileFluidInterface.java | 6 ----- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java index bbf3918eb..33208e59f 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java @@ -389,19 +389,19 @@ public IAEFluidStack injectItems(IAEFluidStack input, Actionable mode, BaseActio if( this.canHoldNewFluid() ) // room for new type, and for at least one item! { - final int remainingItemCount = (int) this.getRemainingFluidCount() - this.getBytesPerType() * 8; + final long remainingItemCount = this.getRemainingFluidCount() - this.getBytesPerType() * 8; if( remainingItemCount > 0 ) { if( input.getStackSize() > remainingItemCount ) { final FluidStack toReturn = Util.cloneFluidStack(sharedFluidStack); - toReturn.amount = sharedFluidStack.amount - remainingItemCount; + toReturn.amount = (int) (sharedFluidStack.amount - remainingItemCount); if( mode == Actionable.MODULATE ) { final FluidStack toWrite = Util.cloneFluidStack( sharedFluidStack ); - toWrite.amount = remainingItemCount; + toWrite.amount = (int) remainingItemCount; this.cellItems.add( AEFluidStack.create( toWrite ) ); this.updateFluidCount( toWrite.amount ); diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidDiscretizer.java b/src/main/java/com/glodblock/github/common/tile/TileFluidDiscretizer.java index 20b402253..813ff32e2 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidDiscretizer.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidDiscretizer.java @@ -1,5 +1,6 @@ package com.glodblock.github.common.tile; +import appeng.api.AEApi; import appeng.api.config.Actionable; import appeng.api.networking.GridFlags; import appeng.api.networking.crafting.ICraftingGrid; @@ -19,7 +20,6 @@ import appeng.me.cache.CraftingGridCache; import appeng.me.storage.MEInventoryHandler; import appeng.tile.grid.AENetworkTile; -import appeng.util.Platform; import com.glodblock.github.common.item.ItemFluidDrop; import java.util.ArrayList; @@ -48,8 +48,6 @@ public boolean canBeRotated() { @Override @SuppressWarnings("rawtypes") public List getCellArray(StorageChannel channel) { - /*conflict = !checkDiscreatizer(); - if (conflict) return Collections.emptyList();*/ if (getProxy().isActive()) { if (channel == StorageChannel.ITEMS) { return Collections.singletonList(fluidDropInv.invHandler); @@ -131,6 +129,25 @@ public void onStorageUpdate(MENetworkStorageEvent event) { updateState(); } + @MENetworkEventSubscribe + public void onBootUp(MENetworkBootingStatusChange event) { + try { + IMEInventory inventory = this.getProxy().getStorage().getItemInventory(); + IItemList items = inventory.getAvailableItems(AEApi.instance().storage().createItemList()); + IItemList drops = AEApi.instance().storage().createItemList(); + for (IAEItemStack item : items) { + if (item != null && item.getItem() instanceof ItemFluidDrop) { + drops.add(item); + } + } + for (IAEItemStack drop : drops) { + inventory.extractItems(drop, Actionable.MODULATE, ownActionSource); + inventory.injectItems(drop, Actionable.MODULATE, ownActionSource); + } + } catch (GridAccessException ignored) { + } + } + private class FluidDiscretizingInventory implements IMEInventory, IMEMonitorHandlerReceiver { private final MEInventoryHandler invHandler = new MEInventoryHandler<>(this, getChannel()); @@ -142,7 +159,6 @@ private class FluidDiscretizingInventory implements IMEInventory, @Override public IAEItemStack injectItems(IAEItemStack request, Actionable type, BaseActionSource src) { - /*if (conflict) return request;*/ IAEFluidStack fluidStack = ItemFluidDrop.getAeFluidStack(request); if (fluidStack == null) { return request; @@ -165,7 +181,6 @@ public IAEItemStack injectItems(IAEItemStack request, Actionable type, BaseActio @Override public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActionSource src) { - /*if (conflict) return null;*/ IAEFluidStack fluidStack = ItemFluidDrop.getAeFluidStack(request); if (fluidStack == null) { return null; @@ -188,7 +203,6 @@ public IAEItemStack extractItems(IAEItemStack request, Actionable mode, BaseActi @Override public IItemList getAvailableItems(IItemList out) { - /*if (conflict) return out;*/ if (itemCache == null) { itemCache = new ArrayList<>(); IMEMonitor fluidGrid = getFluidGrid(); @@ -253,7 +267,6 @@ private class FluidCraftingInventory implements IMEInventory { @Override @SuppressWarnings("rawtypes") public IAEFluidStack injectItems(IAEFluidStack input, Actionable type, BaseActionSource src) { - /*if (conflict) return null;*/ ICraftingGrid craftingGrid; try { craftingGrid = getProxy().getGrid().getCache(ICraftingGrid.class); diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java b/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java index ad0a3bb1a..143ce7696 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java @@ -2,18 +2,12 @@ import appeng.api.config.Upgrades; import appeng.api.networking.IGridNode; -import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.events.MENetworkChannelsChanged; import appeng.api.networking.events.MENetworkEventSubscribe; import appeng.api.networking.events.MENetworkPowerStatusChange; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.security.MachineSource; -import appeng.api.networking.storage.IStorageGrid; import appeng.api.networking.ticking.TickRateModulation; import appeng.api.networking.ticking.TickingRequest; -import appeng.api.storage.IMEMonitor; import appeng.api.storage.data.IAEFluidStack; -import appeng.me.GridAccessException; import appeng.tile.TileEvent; import appeng.tile.events.TileEventType; import appeng.tile.inventory.AppEngInternalAEInventory;