diff --git a/README.MD b/README.MD index 433fb322..64dd336a 100644 --- a/README.MD +++ b/README.MD @@ -25,6 +25,8 @@ This is a rework and ported version of [ae2-fluid-crafting](https://github.com/p - [1.12.2] Fix the fluid amount display error when removing fluid. - [1.12.2] Upgrade cards can be inserted in Dual Interface. - [1.12.2] Fluid pattern is searchable in interface terminal. + - [1.12.2] Fix crash when using block mode, fluid will also be considered as blockable. + - [1.12.2] Fluid export bus supports crafting card. ## Installation diff --git a/build.gradle b/build.gradle index c8cf37cd..edb10d83 100644 --- a/build.gradle +++ b/build.gradle @@ -180,11 +180,6 @@ catch (Exception ignored) { } // Pulls version first from the VERSION env and then git tag -String identifiedVersion -String versionOverride = System.getenv("VERSION") ?: null -try { - identifiedVersion = versionOverride == null ? gitVersion() : versionOverride -} catch (Exception ignored) { out.style(Style.Failure).text( 'This mod must be version controlled by Git AND the repository must provide at least one tag,\n' + @@ -192,15 +187,11 @@ catch (Exception ignored) { 'clone the repository, see ').style(Style.Info).text('https://gtnh.miraheze.org/wiki/Development').style(Style.SuccessHeader).println(' for details.)' ) versionOverride = 'NO-GIT-TAG-SET' - identifiedVersion = versionOverride } -version = minecraftVersion + '-' + identifiedVersion +String versionTag = gitVersion().split("-")[gitVersion().split("-").length - 1] +version = minecraftVersion + '-' + versionTag ext { - modVersion = identifiedVersion -} - -if(identifiedVersion == versionOverride) { - out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7') + modVersion = versionTag } group = modGroup @@ -569,7 +560,7 @@ publishing { groupId = System.getenv("ARTIFACT_GROUP_ID") ?: "com.github.GTNewHorizons" artifactId = System.getenv("ARTIFACT_ID") ?: project.name // Using the identified version, not project.version as it has the prepended 1.7.10 - version = System.getenv("RELEASE_VERSION") ?: identifiedVersion + version = System.getenv("RELEASE_VERSION") ?: versionTag // remove extra garbage from minecraft and minecraftDeps configuration pom.withXml { @@ -606,46 +597,10 @@ publishing { // Updating task updateBuildScript { doLast { - if (performBuildScriptUpdate(projectDir.toString())) return - print("Build script already up-to-date!") } } -if (isNewBuildScriptVersionAvailable(projectDir.toString())) { - if (autoUpdateBuildScript.toBoolean()) { - performBuildScriptUpdate(projectDir.toString()) - } else { - out.style(Style.SuccessHeader).println("Build script update available! Run 'gradle updateBuildScript'") - } -} - -static URL availableBuildScriptUrl() { - new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/main/build.gradle") -} - -boolean performBuildScriptUpdate(String projectDir) { - if (isNewBuildScriptVersionAvailable(projectDir)) { - def buildscriptFile = getFile("build.gradle") - availableBuildScriptUrl().withInputStream { i -> buildscriptFile.withOutputStream { it << i } } - out.style(Style.Success).print("Build script updated. Please REIMPORT the project or RESTART your IDE!") - return true - } - return false -} - -boolean isNewBuildScriptVersionAvailable(String projectDir) { - Map parameters = ["connectTimeout": 2000, "readTimeout": 2000] - - String currentBuildScript = getFile("build.gradle").getText() - String currentBuildScriptHash = getVersionHash(currentBuildScript) - String availableBuildScript = availableBuildScriptUrl().newInputStream(parameters).getText() - String availableBuildScriptHash = getVersionHash(availableBuildScript) - - boolean isUpToDate = currentBuildScriptHash.empty || availableBuildScriptHash.empty || currentBuildScriptHash == availableBuildScriptHash - return !isUpToDate -} - static String getVersionHash(String buildScriptContent) { String versionLine = buildScriptContent.find("^//version: [a-z0-9]*") if(versionLine != null) { diff --git a/src/main/java/com/glodblock/github/FluidCraft.java b/src/main/java/com/glodblock/github/FluidCraft.java index 265b0fd5..11b312fe 100644 --- a/src/main/java/com/glodblock/github/FluidCraft.java +++ b/src/main/java/com/glodblock/github/FluidCraft.java @@ -1,11 +1,13 @@ package com.glodblock.github; import appeng.api.AEApi; +import appeng.api.config.Upgrades; import com.glodblock.github.common.Config; import com.glodblock.github.common.storage.FluidCellHandler; import com.glodblock.github.inventory.InventoryHandler; -import com.glodblock.github.loader.*; -import com.glodblock.github.nei.recipes.DefaultExtractorLoader; +import com.glodblock.github.loader.ChannelLoader; +import com.glodblock.github.loader.ItemAndBlockHolder; +import com.glodblock.github.loader.RecipeLoader; import com.glodblock.github.proxy.CommonProxy; import com.glodblock.github.util.ModAndClassUtil; import cpw.mods.fml.common.Mod; @@ -15,6 +17,7 @@ import cpw.mods.fml.common.event.FMLLoadCompleteEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @Mod(modid = FluidCraft.MODID, version = FluidCraft.VERSION, name = FluidCraft.MODNAME) @@ -49,6 +52,23 @@ public class FluidCraft { public static void postInit(FMLPostInitializationEvent event) { NetworkRegistry.INSTANCE.registerGuiHandler(FluidCraft.INSTANCE, new InventoryHandler()); (new RecipeLoader()).run(); + + if (ModAndClassUtil.isBigInterface) { + Upgrades.PATTERN_CAPACITY.registerItem(new ItemStack(ItemAndBlockHolder.FLUID_INTERFACE), 3 ); + Upgrades.PATTERN_CAPACITY.registerItem(new ItemStack(ItemAndBlockHolder.INTERFACE), 3 ); + } + Upgrades.CRAFTING.registerItem(new ItemStack(ItemAndBlockHolder.FLUID_INTERFACE), 1 ); + Upgrades.CRAFTING.registerItem(new ItemStack(ItemAndBlockHolder.INTERFACE), 1 ); + + if (Config.fluidIOBus) { + Upgrades.CAPACITY.registerItem(new ItemStack(ItemAndBlockHolder.FLUID_EXPORT_BUS), 2 ); + Upgrades.CAPACITY.registerItem(new ItemStack(ItemAndBlockHolder.FLUID_IMPORT_BUS), 2 ); + Upgrades.REDSTONE.registerItem(new ItemStack(ItemAndBlockHolder.FLUID_EXPORT_BUS), 1 ); + Upgrades.REDSTONE.registerItem(new ItemStack(ItemAndBlockHolder.FLUID_IMPORT_BUS), 1 ); + Upgrades.SPEED.registerItem(new ItemStack(ItemAndBlockHolder.FLUID_EXPORT_BUS), 4 ); + Upgrades.SPEED.registerItem(new ItemStack(ItemAndBlockHolder.FLUID_IMPORT_BUS), 4 ); + } + proxy.postInit(event); } diff --git a/src/main/java/com/glodblock/github/client/gui/FCGuiTextField.java b/src/main/java/com/glodblock/github/client/gui/FCGuiTextField.java new file mode 100644 index 00000000..c8933d18 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/FCGuiTextField.java @@ -0,0 +1,93 @@ +package com.glodblock.github.client.gui; + +import appeng.client.gui.widgets.ITooltip; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiTextField; + +public class FCGuiTextField extends GuiTextField { + private static final int PADDING = 2; + private String tooltip; + + private final int _xPos; + private final int _yPos; + private final int _width; + private final int _height; + + /** + * Uses the values to instantiate a padded version of a text field. + * Pays attention to the '_' caret. + * + * @param fontRenderer renderer for the strings + * @param xPos absolute left position + * @param yPos absolute top position + * @param width absolute width + * @param height absolute height + */ + public FCGuiTextField(final FontRenderer fontRenderer, final int xPos, final int yPos, final int width, final int height) { + super(fontRenderer, xPos + PADDING, yPos + PADDING, width - 2 * PADDING - fontRenderer.getCharWidth('_'), height - 2 * PADDING); + + this._xPos = xPos; + this._yPos = yPos; + this._width = width; + this._height = height; + } + + @Override + public void mouseClicked(final int xPos, final int yPos, final int button) { + super.mouseClicked(xPos, yPos, button); + + final boolean requiresFocus = this.isMouseIn(xPos, yPos); + + this.setFocused(requiresFocus); + } + + /** + * Checks if the mouse is within the element + * + * @param xCoord current x coord of the mouse + * @param yCoord current y coord of the mouse + * @return true if mouse position is within the text field area + */ + public boolean isMouseIn(final int xCoord, final int yCoord) { + final boolean withinXRange = this._xPos <= xCoord && xCoord < this._xPos + this._width; + final boolean withinYRange = this._yPos <= yCoord && yCoord < this._yPos + this._height; + + return withinXRange && withinYRange; + } + + public void setMessage(String t) + { + tooltip = t; + } + + public class TooltipProvider implements ITooltip + { + @Override + public String getMessage() { + return tooltip; + } + + @Override + public int xPos() { + return _xPos; + } + + @Override + public int yPos() { + return _yPos; + } + + @Override + public int getHeight() { + return _height; + } + + @Override + public int getWidth() { return _width; } + + @Override + public boolean isVisible() { + return getVisible(); + } + } +} 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 e6277cf3..48083d2b 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java @@ -12,11 +12,14 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.FCBasePartContainer; import com.glodblock.github.network.CPacketFluidPatternTermBtns; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import com.glodblock.github.util.ModAndClassUtil; +import com.glodblock.github.util.NameConst; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import org.lwjgl.input.Keyboard; public class GuiBaseFluidPatternTerminal extends GuiFCBaseMonitor { @@ -41,7 +44,7 @@ public class GuiBaseFluidPatternTerminal extends GuiFCBaseMonitor { { super( inventoryPlayer, te, new FCBasePartContainer( inventoryPlayer, te ) ); this.container = (FCBasePartContainer) this.inventorySlots; - Ae2Reflect.setReservedSpace(this, 81); + Ae2ReflectClient.setReservedSpace(this, 81); } @Override @@ -134,7 +137,7 @@ public class GuiBaseFluidPatternTerminal extends GuiFCBaseMonitor { } super.drawFG( offsetX, offsetY, mouseX, mouseY ); - this.fontRendererObj.drawString( GuiText.PatternTerminal.getLocal(), 8, this.ySize - 96 + 2 - Ae2Reflect.getReservedSpace(this), 4210752 ); + this.fontRendererObj.drawString(StatCollector.translateToLocal(NameConst.GUI_FLUID_PATTERN_TERMINAL), 8, this.ySize - 96 + 2 - Ae2ReflectClient.getReservedSpace(this), 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 a79600d5..da71136d 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java @@ -11,9 +11,12 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.FCBasePartContainerEx; import com.glodblock.github.network.CPacketFluidPatternTermBtns; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import com.glodblock.github.util.ModAndClassUtil; +import com.glodblock.github.util.NameConst; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.StatCollector; import org.lwjgl.input.Keyboard; public class GuiBaseFluidPatternTerminalEx extends GuiFCBaseMonitor { @@ -36,7 +39,7 @@ public class GuiBaseFluidPatternTerminalEx extends GuiFCBaseMonitor { { super( inventoryPlayer, te, new FCBasePartContainerEx( inventoryPlayer, te ) ); this.container = (FCBasePartContainerEx) this.inventorySlots; - Ae2Reflect.setReservedSpace(this, 81); + Ae2ReflectClient.setReservedSpace(this, 81); } @Override @@ -108,7 +111,7 @@ public class GuiBaseFluidPatternTerminalEx extends GuiFCBaseMonitor { } super.drawFG( offsetX, offsetY, mouseX, mouseY ); - this.fontRendererObj.drawString( GuiText.PatternTerminal.getLocal(), 8, this.ySize - 96 + 2 - Ae2Reflect.getReservedSpace(this), 4210752 ); + this.fontRendererObj.drawString( StatCollector.translateToLocal(NameConst.GUI_FLUID_PATTERN_TERMINAL_EX), 8, this.ySize - 96 + 2 - Ae2ReflectClient.getReservedSpace(this), 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 08dbca1a..ba7f3a50 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFCBaseMonitor.java @@ -34,7 +34,7 @@ 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.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.NameConst; import net.minecraft.client.Minecraft; @@ -66,8 +66,7 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi public FCBaseMonitorContain monitorableContainer; private GuiTabButton craftingStatusBtn; private GuiImgButton craftingStatusImgBtn; - private MEGuiTextField searchField; - private String myName; + private FCGuiTextField searchField; private int perRow = 9; private int reservedSpace = 0; private boolean customSortOrder = true; @@ -110,14 +109,6 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi this.viewCell = te instanceof IViewCellStorage; - if( te instanceof PartFluidPatternTerminal) - { - this.myName = NameConst.GUI_FLUID_PATTERN_TERMINAL; - } - if (te instanceof PartFluidPatternTerminalEx) - { - this.myName = NameConst.GUI_FLUID_PATTERN_TERMINAL_EX; - } } public void postUpdate( final List list ) @@ -282,7 +273,7 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi this.buttonList.add( this.terminalStyleBox = new GuiImgButton( this.guiLeft - 18, offset, Settings.TERMINAL_STYLE, AEConfig.instance.settings.getSetting( Settings.TERMINAL_STYLE ) ) ); offset += 20; - this.searchField = new MEGuiTextField( this.fontRendererObj, this.guiLeft + Math.max( 80, this.offsetX ), this.guiTop + 4, 90, 12 ); + this.searchField = new FCGuiTextField( this.fontRendererObj, this.guiLeft + Math.max( 80, this.offsetX ), this.guiTop + 4, 90, 12 ); this.searchField.setEnableBackgroundDrawing( false ); this.searchField.setMaxStringLength( 25 ); this.searchField.setTextColor( 0xFFFFFF ); @@ -387,7 +378,7 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi { final InventoryAction action = ctrlDown == 1 ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN; - if( Ae2Reflect.getDragClick(this).size() > 1 ) + if( Ae2ReflectClient.getDragClick(this).size() > 1 ) { return; } @@ -448,7 +439,7 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi stack = ( (SlotME) slot ).getAEStack(); } - int slotNum = Ae2Reflect.getInventorySlots(this).size(); + int slotNum = Ae2ReflectClient.getInventorySlots(this).size(); if( !( slot instanceof SlotME ) && slot != null ) { @@ -464,7 +455,7 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi if( slot instanceof SlotDisconnected) { - if( Ae2Reflect.getDragClick(this).size() > 1 ) + if( Ae2ReflectClient.getDragClick(this).size() > 1 ) { return; } @@ -555,12 +546,12 @@ public class GuiFCBaseMonitor extends AEBaseMEGui implements ISortSource, IConfi if (action == InventoryAction.AUTO_CRAFT) { ((AEBaseContainer) this.inventorySlots).setTargetStack( stack ); - FluidCraft.proxy.netHandler.sendToServer(new CPacketInventoryAction(action, Ae2Reflect.getInventorySlots(this).size(), 0, stack)); + FluidCraft.proxy.netHandler.sendToServer(new CPacketInventoryAction(action, Ae2ReflectClient.getInventorySlots(this).size(), 0, stack)); } else if( action != null ) { ( (AEBaseContainer) this.inventorySlots ).setTargetStack( stack ); - final PacketInventoryAction p = new PacketInventoryAction( action, Ae2Reflect.getInventorySlots(this).size(), 0 ); + final PacketInventoryAction p = new PacketInventoryAction( action, Ae2ReflectClient.getInventorySlots(this).size(), 0 ); NetworkHandler.instance.sendToServer( p ); } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidIO.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidIO.java new file mode 100644 index 00000000..f14099e6 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidIO.java @@ -0,0 +1,32 @@ +package com.glodblock.github.client.gui; + +import appeng.api.storage.data.IAEFluidStack; +import appeng.client.gui.implementations.GuiUpgradeable; +import appeng.core.localization.GuiText; +import com.glodblock.github.client.gui.container.ContainerFluidIO; +import com.glodblock.github.common.parts.PartFluidImportBus; +import com.glodblock.github.common.parts.PartSharedFluidBus; +import net.minecraft.entity.player.InventoryPlayer; + +public class GuiFluidIO extends GuiUpgradeable +{ + private final PartSharedFluidBus bus; + + public GuiFluidIO(InventoryPlayer inventoryPlayer, PartSharedFluidBus te ) + { + super( new ContainerFluidIO( inventoryPlayer, te ) ); + this.bus = te; + } + + + @Override + protected GuiText getName() + { + return this.bus instanceof PartFluidImportBus ? GuiText.ImportBus : GuiText.ExportBus; + } + + public void update(int id, IAEFluidStack stack) { + ((ContainerFluidIO)this.cvb).getBus().setFluidInSlot(id, stack); + } + +} diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternEncoder.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternEncoder.java index 7182e992..4a6702cc 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternEncoder.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternEncoder.java @@ -13,6 +13,7 @@ import com.glodblock.github.inventory.slot.SlotFluid; import com.glodblock.github.inventory.slot.SlotSingleItem; import com.glodblock.github.network.CPacketEncodePattern; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import com.glodblock.github.util.NameConst; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.resources.I18n; @@ -33,7 +34,7 @@ public class GuiFluidPatternEncoder extends AEBaseGui { private final ContainerFluidPatternEncoder cont; private final MouseRegionManager mouseRegions = new MouseRegionManager(this); - private final AppEngRenderItem stackSizeRenderer = Ae2Reflect.getStackSizeRenderer(this); + private final AppEngRenderItem stackSizeRenderer = Ae2ReflectClient.getStackSizeRenderer(this); public GuiFluidPatternEncoder(InventoryPlayer ipl, TileFluidPatternEncoder tile) { super(new ContainerFluidPatternEncoder(ipl, tile)); 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 7a372bb4..035eca09 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminal.java @@ -12,6 +12,7 @@ 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; import net.minecraft.inventory.Slot; @@ -19,20 +20,20 @@ import net.minecraft.inventory.Slot; public class GuiFluidPatternTerminal extends GuiBaseFluidPatternTerminal { private GuiTabButton craftingStatusBtn; - private final AppEngRenderItem stackSizeRenderer = Ae2Reflect.getStackSizeRenderer(this); + private final AppEngRenderItem stackSizeRenderer = Ae2ReflectClient.getStackSizeRenderer(this); public GuiFluidPatternTerminal(InventoryPlayer inventoryPlayer, ITerminalHost te) { super(inventoryPlayer, te); ContainerFluidPatternTerminal container = new ContainerFluidPatternTerminal(inventoryPlayer, te); container.setGui(this); this.inventorySlots = container; - Ae2Reflect.setGuiContainer(this, container); + Ae2ReflectClient.setGuiContainer(this, container); } @Override public void initGui() { super.initGui(); - craftingStatusBtn = Ae2Reflect.getCraftingStatusButton(this); + craftingStatusBtn = Ae2ReflectClient.getCraftingStatusButton(this); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalCraftingStatus.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalCraftingStatus.java index fd7d362c..713f762f 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalCraftingStatus.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalCraftingStatus.java @@ -9,6 +9,7 @@ import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -26,11 +27,11 @@ public class GuiFluidPatternTerminalCraftingStatus extends GuiCraftingStatus { @Override public void initGui() { if (host instanceof PartFluidPatternTerminal) - Ae2Reflect.rewriteIcon(this, new ItemStack(ItemAndBlockHolder.FLUID_TERMINAL, 1)); + Ae2ReflectClient.rewriteIcon(this, new ItemStack(ItemAndBlockHolder.FLUID_TERMINAL, 1)); else if (host instanceof PartFluidPatternTerminalEx) - Ae2Reflect.rewriteIcon(this, new ItemStack(ItemAndBlockHolder.FLUID_TERMINAL_EX, 1)); + Ae2ReflectClient.rewriteIcon(this, new ItemStack(ItemAndBlockHolder.FLUID_TERMINAL_EX, 1)); super.initGui(); - originalGuiBtn = Ae2Reflect.getOriginalGuiButton(this); + originalGuiBtn = Ae2ReflectClient.getOriginalGuiButton(this); } @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 80856a0e..eb3c0413 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidPatternTerminalEx.java @@ -12,6 +12,7 @@ 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; import net.minecraft.inventory.Slot; @@ -19,7 +20,7 @@ import net.minecraft.inventory.Slot; public class GuiFluidPatternTerminalEx extends GuiBaseFluidPatternTerminalEx { private GuiTabButton craftingStatusBtn; - private final AppEngRenderItem stackSizeRenderer = Ae2Reflect.getStackSizeRenderer(this); + private final AppEngRenderItem stackSizeRenderer = Ae2ReflectClient.getStackSizeRenderer(this); public GuiFluidPatternTerminalEx(InventoryPlayer inventoryPlayer, ITerminalHost te) { super(inventoryPlayer, te); @@ -34,7 +35,7 @@ public class GuiFluidPatternTerminalEx extends GuiBaseFluidPatternTerminalEx { @Override public void initGui() { super.initGui(); - craftingStatusBtn = Ae2Reflect.getCraftingStatusButton(this); + craftingStatusBtn = Ae2ReflectClient.getCraftingStatusButton(this); } @Override diff --git a/src/main/java/com/glodblock/github/client/gui/GuiIngredientBuffer.java b/src/main/java/com/glodblock/github/client/gui/GuiIngredientBuffer.java index 0a2fc0ba..1732e954 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiIngredientBuffer.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiIngredientBuffer.java @@ -10,7 +10,6 @@ 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.GlStateManager; import com.glodblock.github.util.NameConst; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; @@ -62,22 +61,21 @@ public class GuiIngredientBuffer extends AEBaseGui { public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) { fontRendererObj.drawString(getGuiDisplayName(I18n.format(NameConst.GUI_INGREDIENT_BUFFER)), 8, 6, 0x404040); fontRendererObj.drawString(GuiText.inventory.getLocal(), 8, ySize - 94, 0x404040); - GlStateManager.color(1F, 1F, 1F, 1F); + GL11.glColor4f(1F, 1F, 1F, 1F); IAEFluidTank fluidInv = cont.getTile().getFluidInventory(); mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture); - Tessellator tess = Tessellator.instance; for (int i = 0; i < 4; i++) { - renderFluidIntoGui(tess, TANK_X + i * TANK_X_OFF, TANK_Y, TANK_WIDTH, TANK_HEIGHT, + renderFluidIntoGui(TANK_X + i * TANK_X_OFF, TANK_Y, TANK_WIDTH, TANK_HEIGHT, fluidInv.getFluidInSlot(i), fluidInv.getTankInfo(ForgeDirection.UNKNOWN)[i].capacity); } - GlStateManager.color(1F, 1F, 1F, 1F); + GL11.glColor4f(1F, 1F, 1F, 1F); mouseRegions.render(mouseX, mouseY); } - public void renderFluidIntoGui(Tessellator tess, int x, int y, int width, int height, - @Nullable IAEFluidStack aeFluidStack, int capacity) { + 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); diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidConfigurable.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidConfigurable.java new file mode 100644 index 00000000..bddb43f2 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidConfigurable.java @@ -0,0 +1,141 @@ +package com.glodblock.github.client.gui.container; + +import appeng.api.config.Upgrades; +import appeng.api.implementations.IUpgradeableHost; +import appeng.api.storage.data.IAEFluidStack; +import appeng.container.implementations.ContainerUpgradeable; +import appeng.container.slot.AppEngSlot; +import appeng.tile.inventory.AppEngInternalAEInventory; +import appeng.util.Platform; +import appeng.util.item.AEFluidStack; +import com.glodblock.github.FluidCraft; +import com.glodblock.github.common.item.ItemFluidPacket; +import com.glodblock.github.inventory.slot.OptionalFluidSlotFakeTypeOnly; +import com.glodblock.github.network.SPacketFluidUpdate; +import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Util; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import java.util.HashMap; +import java.util.Map; + +public abstract class ContainerFluidConfigurable extends ContainerUpgradeable { + + public ContainerFluidConfigurable(InventoryPlayer ip, IUpgradeableHost te) + { + super( ip, te ); + } + + public abstract AppEngInternalAEInventory getFakeFluidInv(); + + @Override + public ItemStack transferStackInSlot(final EntityPlayer p, final int idx ) + { + AppEngSlot clickSlot = (AppEngSlot)this.inventorySlots.get(idx); + if (clickSlot == null || !clickSlot.getHasStack()) return null; + + ItemStack tis = clickSlot.getStack(); + FluidStack fs = Util.getFluidFromItem(tis); + if( fs != null ) + { + final AppEngInternalAEInventory inv = this.getFakeFluidInv(); + final IAEFluidStack stack = AEFluidStack.create( fs ); + for( int i = 0; i < inv.getSizeInventory(); ++i ) + { + if( inv.getStackInSlot(i) == null && this.isValidForConfig( i, stack ) ) + { + ItemStack tmp = ItemFluidPacket.newStack(fs); + if (tmp != null) { + tmp.setStackDisplayName(fs.getLocalizedName()); + } + inv.setInventorySlotContents( i, tmp ); + break; + } + } + } + this.standardDetectAndSendChanges(); + return null; + } + + protected void setupConfig() + { + this.setupUpgrades(); + + final IInventory inv = Ae2Reflect.getUpgradeList(this).getInventoryByName( "config" ); + final int y = 40; + final int x = 80; + this.addSlotToContainer( new OptionalFluidSlotFakeTypeOnly( inv, this, 0, x, y, 0, 0, 0 ) ); + if( this.supportCapacity() ) + { + this.addSlotToContainer( new OptionalFluidSlotFakeTypeOnly( inv, this, 1, x, y, -1, 0, 1 ) ); + this.addSlotToContainer( new OptionalFluidSlotFakeTypeOnly( inv, this, 2, x, y, 1, 0, 1 ) ); + this.addSlotToContainer( new OptionalFluidSlotFakeTypeOnly( inv, this, 3, x, y, 0, -1, 1 ) ); + this.addSlotToContainer( new OptionalFluidSlotFakeTypeOnly( inv, this, 4, x, y, 0, 1, 1 ) ); + + this.addSlotToContainer( new OptionalFluidSlotFakeTypeOnly( inv, this, 5, x, y, -1, -1, 2 ) ); + this.addSlotToContainer( new OptionalFluidSlotFakeTypeOnly( inv, this, 6, x, y, 1, -1, 2 ) ); + this.addSlotToContainer( new OptionalFluidSlotFakeTypeOnly( inv, this, 7, x, y, -1, 1, 2 ) ); + this.addSlotToContainer( new OptionalFluidSlotFakeTypeOnly( inv, this, 8, x, y, 1, 1, 2 ) ); + } + } + + protected boolean isValidForConfig( int slot, IAEFluidStack fs ) + { + if( this.supportCapacity() ) + { + // assumes 4 slots per upgrade + final int upgrades = Ae2Reflect.getUpgradeList(this).getInstalledUpgrades( Upgrades.CAPACITY ); + + if( slot > 0 && upgrades < 1 ) + { + return false; + } + return slot <= 4 || upgrades >= 2; + } + + return true; + } + + @Override + protected void standardDetectAndSendChanges() + { + if( Platform.isServer() ) + { + // clear out config items that are no longer valid (eg capacity upgrade removed) + final AppEngInternalAEInventory inv = this.getFakeFluidInv(); + final Map tmp = new HashMap<>(); + for( int i = 0; i < inv.getSizeInventory(); ++i ) + { + if( inv.getStackInSlot( i ) != null && !this.isValidForConfig( i, AEFluidStack.create(ItemFluidPacket.getFluidStack(inv.getStackInSlot( i )))) ) + { + inv.setInventorySlotContents( i, null ); + } + tmp.put(i, AEFluidStack.create(ItemFluidPacket.getFluidStack(inv.getStackInSlot( i )))); + } + for( final Object g : this.crafters ) + { + if( g instanceof EntityPlayer) + { + FluidCraft.proxy.netHandler.sendTo(new SPacketFluidUpdate(tmp), (EntityPlayerMP) g); + } + } + } + super.standardDetectAndSendChanges(); + } + + public void setFluid(int id, IAEFluidStack fluidStack) { + final AppEngInternalAEInventory inv = this.getFakeFluidInv(); + if (inv != null && this.isValidForConfig(id, AEFluidStack.create(fluidStack))) { + ItemStack tmp = ItemFluidPacket.newStack(fluidStack.getFluidStack()); + if (tmp != null) { + tmp.setStackDisplayName(fluidStack.getFluidStack().getLocalizedName()); + } + inv.setInventorySlotContents(id, tmp); + } + } +} diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidIO.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidIO.java new file mode 100644 index 00000000..dd923e8f --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidIO.java @@ -0,0 +1,25 @@ +package com.glodblock.github.client.gui.container; + +import appeng.tile.inventory.AppEngInternalAEInventory; +import com.glodblock.github.common.parts.PartSharedFluidBus; +import net.minecraft.entity.player.InventoryPlayer; + +public class ContainerFluidIO extends ContainerFluidConfigurable +{ + private final PartSharedFluidBus bus; + + public ContainerFluidIO(InventoryPlayer ip, PartSharedFluidBus te ) + { + super( ip, te ); + this.bus = te; + } + + public PartSharedFluidBus getBus() { + return this.bus; + } + + @Override + public AppEngInternalAEInventory getFakeFluidInv() { + return (AppEngInternalAEInventory) this.bus.getInventoryByName("config"); + } +} diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidPatternTerminal.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidPatternTerminal.java index 936c8309..c725390b 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidPatternTerminal.java @@ -150,6 +150,10 @@ public class ContainerFluidPatternTerminal extends FCBasePartContainer implement } Slot slot = getSlot(slotId); ItemStack stack = player.inventory.getItemStack(); + if (Util.getFluidFromItem(stack) == null || Util.getFluidFromItem(stack).amount <= 0) { + super.doAction(player, action, slotId, id); + return; + } if ((slot instanceof SlotFakeCraftingMatrix || slot instanceof SlotPatternOutputs) && stack != null && (stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isContainer(stack))) { FluidStack fluid = null; diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidPatternTerminalEx.java index 45318e32..4ba4fb91 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidPatternTerminalEx.java @@ -143,6 +143,10 @@ public class ContainerFluidPatternTerminalEx extends FCBasePartContainerEx imple } Slot slot = getSlot(slotId); ItemStack stack = player.inventory.getItemStack(); + if (Util.getFluidFromItem(stack) == null || Util.getFluidFromItem(stack).amount <= 0) { + super.doAction(player, action, slotId, id); + return; + } if ((slot instanceof SlotFakeCraftingMatrix || slot instanceof SlotPatternOutputs) && stack != null && (stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isContainer(stack))) { FluidStack fluid = null; 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 320088fd..490961d6 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 @@ -21,6 +21,7 @@ import appeng.util.InventoryAdaptor; import appeng.util.Platform; import appeng.util.inv.AdaptorPlayerHand; import appeng.util.item.AEItemStack; +import com.glodblock.github.common.item.ItemFluidEncodedPattern; import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.common.parts.PartFluidPatternTerminal; import com.glodblock.github.util.Util; @@ -208,6 +209,12 @@ public class FCBasePartContainer extends FCBaseMonitorContain implements IAEAppE output = encodedPatternStack; this.patternSlotOUT.putStack( output ); } + } else if ( output.getItem() instanceof ItemFluidEncodedPattern ) { + for( final ItemStack encodedPatternStack : AEApi.instance().definitions().items().encodedPattern().maybeStack( 1 ).asSet() ) + { + output = encodedPatternStack; + this.patternSlotOUT.putStack( output ); + } } // encode the slot. @@ -298,7 +305,9 @@ public class FCBasePartContainer extends FCBaseMonitorContain implements IAEAppE { return false; } - + if (output.getItem() instanceof ItemFluidEncodedPattern) { + return true; + } final IDefinitions definitions = AEApi.instance().definitions(); boolean isPattern = definitions.items().encodedPattern().isSameAs( output ); 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 3e5d323f..6592b23c 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 @@ -10,6 +10,7 @@ import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.IAEAppEngInventory; import appeng.tile.inventory.InvOperation; import appeng.util.Platform; +import com.glodblock.github.common.item.ItemFluidEncodedPattern; import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.common.parts.PartFluidPatternTerminalEx; import com.glodblock.github.util.Util; @@ -151,6 +152,12 @@ public class FCBasePartContainerEx extends FCBaseMonitorContain implements IAEAp output = encodedPatternStack; this.patternSlotOUT.putStack( output ); } + } else if ( output.getItem() instanceof ItemFluidEncodedPattern ) { + for( final ItemStack encodedPatternStack : AEApi.instance().definitions().items().encodedPattern().maybeStack( 1 ).asSet() ) + { + output = encodedPatternStack; + this.patternSlotOUT.putStack( output ); + } } // encode the slot. @@ -228,7 +235,9 @@ public class FCBasePartContainerEx extends FCBaseMonitorContain implements IAEAp { return false; } - + if (output.getItem() instanceof ItemFluidEncodedPattern) { + return true; + } final IDefinitions definitions = AEApi.instance().definitions(); boolean isPattern = definitions.items().encodedPattern().isSameAs( output ); diff --git a/src/main/java/com/glodblock/github/client/textures/FCPartsTexture.java b/src/main/java/com/glodblock/github/client/textures/FCPartsTexture.java index 40bd6e41..5027a355 100644 --- a/src/main/java/com/glodblock/github/client/textures/FCPartsTexture.java +++ b/src/main/java/com/glodblock/github/client/textures/FCPartsTexture.java @@ -12,6 +12,7 @@ public enum FCPartsTexture { PartFluidPatternTerminal_Bright("pattern_terminal_bright"), PartFluidPatternTerminal_Dark("pattern_terminal_dark"), PartFluidPatternTerminal_Colored("pattern_terminal_medium"), PartTerminalBroad("terminal_broad"), + PartFluidImportBus("fluid_import_face"), PartFluidExportBus("fluid_export_face"), BlockFluidInterfaceAlternate_Arrow("fluid_interface_arrow"), BlockInterfaceAlternate("fluid_interface_a"), BlockInterface_Face("fluid_interface"); diff --git a/src/main/java/com/glodblock/github/common/Config.java b/src/main/java/com/glodblock/github/common/Config.java index fa7ae617..77951ad1 100644 --- a/src/main/java/com/glodblock/github/common/Config.java +++ b/src/main/java/com/glodblock/github/common/Config.java @@ -11,6 +11,7 @@ public class Config { public static boolean fluidCells; public static boolean noFluidPacket; + public static boolean fluidIOBus; public static void run() { loadCategory(); @@ -20,6 +21,7 @@ public class Config { 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."); + 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."); 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 7612509f..1425dd50 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java @@ -49,7 +49,6 @@ public class ItemBasicFluidStorageCell extends AEBaseItem implements IStorageFlu private final int totalBytes; private final int perType; private final double idleDrain; - @SideOnly(Side.CLIENT) private final static HashMap icon = new HashMap<>(); public ItemBasicFluidStorageCell( final CellType whichCell, final int kilobytes ) 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 8f1bb661..6934f577 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStoragePart.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStoragePart.java @@ -19,7 +19,6 @@ import java.util.List; public class ItemBasicFluidStoragePart extends Item { public static final int types = 7; - @SideOnly(Side.CLIENT) private final static HashMap icon = new HashMap<>(); public ItemBasicFluidStoragePart() { diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidExportBus.java b/src/main/java/com/glodblock/github/common/item/ItemFluidExportBus.java new file mode 100644 index 00000000..61323650 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidExportBus.java @@ -0,0 +1,64 @@ +package com.glodblock.github.common.item; + +import appeng.api.AEApi; +import appeng.api.parts.IPartItem; +import com.glodblock.github.FluidCraft; +import com.glodblock.github.common.Config; +import com.glodblock.github.common.parts.PartFluidExportBus; +import com.glodblock.github.util.NameConst; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class ItemFluidExportBus extends Item implements IPartItem { + + public ItemFluidExportBus() { + this.setMaxStackSize(64); + this.setUnlocalizedName(NameConst.ITEM_PART_FLUID_EXPORT); + AEApi.instance().partHelper().setItemBusRenderer(this); + } + + @Nullable + @Override + public PartFluidExportBus createPartFromItemStack(ItemStack is) { + return new PartFluidExportBus(is); + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float xOffset, float yOffset, float zOffset) { + return AEApi.instance().partHelper().placeBus(player.getHeldItem(), x, y, z, side, player, world); + } + + public ItemFluidExportBus register() { + if (!Config.fluidIOBus) return null; + GameRegistry.registerItem(this, NameConst.ITEM_PART_FLUID_EXPORT, FluidCraft.MODID); + return this; + } + + @Override + public void registerIcons(IIconRegister _iconRegister) { + } + + @Override + @SideOnly(Side.CLIENT) + public int getSpriteNumber() { + return 0; + } + + 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/item/ItemFluidImportBus.java b/src/main/java/com/glodblock/github/common/item/ItemFluidImportBus.java new file mode 100644 index 00000000..5f5c900b --- /dev/null +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidImportBus.java @@ -0,0 +1,63 @@ +package com.glodblock.github.common.item; + +import appeng.api.AEApi; +import appeng.api.parts.IPartItem; +import com.glodblock.github.FluidCraft; +import com.glodblock.github.common.Config; +import com.glodblock.github.common.parts.PartFluidImportBus; +import com.glodblock.github.util.NameConst; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class ItemFluidImportBus extends Item implements IPartItem { + + public ItemFluidImportBus() { + this.setMaxStackSize(64); + this.setUnlocalizedName(NameConst.ITEM_PART_FLUID_IMPORT); + AEApi.instance().partHelper().setItemBusRenderer(this); + } + + @Nullable + @Override + public PartFluidImportBus createPartFromItemStack(ItemStack is) { + return new PartFluidImportBus(is); + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float xOffset, float yOffset, float zOffset) { + return AEApi.instance().partHelper().placeBus(player.getHeldItem(), x, y, z, side, player, world); + } + + public ItemFluidImportBus register() { + if (!Config.fluidIOBus) return null; + GameRegistry.registerItem(this, NameConst.ITEM_PART_FLUID_IMPORT, FluidCraft.MODID); + return this; + } + + @Override + public void registerIcons(IIconRegister _iconRegister) { + } + + @Override + @SideOnly(Side.CLIENT) + public int getSpriteNumber() { + return 0; + } + + 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/parts/PartFluidExportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java new file mode 100644 index 00000000..953a0055 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java @@ -0,0 +1,172 @@ +package com.glodblock.github.common.parts; + +import appeng.api.config.*; +import appeng.api.networking.IGridNode; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.MachineSource; +import appeng.api.networking.ticking.TickRateModulation; +import appeng.api.networking.ticking.TickingRequest; +import appeng.api.parts.IPartCollisionHelper; +import appeng.api.parts.IPartRenderHelper; +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.data.IAEFluidStack; +import appeng.client.texture.CableBusTextures; +import appeng.me.GridAccessException; +import appeng.util.item.AEFluidStack; +import com.glodblock.github.client.textures.FCPartsTexture; +import com.glodblock.github.common.item.ItemFluidPacket; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.IFluidHandler; + +public class PartFluidExportBus extends PartSharedFluidBus { + + private final BaseActionSource source; + + public PartFluidExportBus( ItemStack is ) + { + super( is ); + this.getConfigManager().registerSetting( Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE ); + this.getConfigManager().registerSetting( Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); + this.getConfigManager().registerSetting( Settings.CRAFT_ONLY, YesNo.NO ); + this.getConfigManager().registerSetting( Settings.SCHEDULING_MODE, SchedulingMode.DEFAULT ); + this.source = new MachineSource( this ); + } + + @Override + public IIcon getFaceIcon() { + return FCPartsTexture.PartFluidExportBus.getIcon(); + } + + @Override + public TickingRequest getTickingRequest( IGridNode node ) + { + return new TickingRequest( 5, 40, this.isSleeping(), false ); + } + + @Override + public TickRateModulation tickingRequest(IGridNode node, int ticksSinceLastCall ) + { + return this.canDoBusWork() ? this.doBusWork() : TickRateModulation.IDLE; + } + + @Override + protected boolean canDoBusWork() + { + return this.getProxy().isActive(); + } + + @Override + protected TickRateModulation doBusWork() + { + if( !this.canDoBusWork() ) + { + return TickRateModulation.IDLE; + } + + final TileEntity te = this.getConnectedTE(); + + if(te instanceof IFluidHandler) + { + try + { + final IFluidHandler fh = (IFluidHandler) te; + final IMEMonitor inv = this.getProxy().getStorage().getFluidInventory(); + + for( int i = 0; i < this.getInventoryByName("config").getSizeInventory(); i++ ) + { + IAEFluidStack fluid = AEFluidStack.create(ItemFluidPacket.getFluidStack(this.getInventoryByName("config").getStackInSlot(i))); + if( fluid != null ) + { + final IAEFluidStack toExtract = fluid.copy(); + + toExtract.setStackSize( this.calculateAmountToSend() ); + + final IAEFluidStack out = inv.extractItems( toExtract, Actionable.SIMULATE, this.source ); + + if( out != null ) + { + int wasInserted = fh.fill( this.getSide().getOpposite(), out.getFluidStack(), true ); + + if( wasInserted > 0 ) + { + toExtract.setStackSize( wasInserted ); + inv.extractItems( toExtract, Actionable.MODULATE, this.source ); + + return TickRateModulation.FASTER; + } + } + } + } + + return TickRateModulation.SLOWER; + } + catch( GridAccessException e ) + { + // Ignore + } + } + + return TickRateModulation.SLEEP; + } + + @Override + public void getBoxes( final IPartCollisionHelper bch ) + { + bch.addBox( 4, 4, 12, 12, 12, 14 ); + bch.addBox( 5, 5, 14, 11, 11, 15 ); + bch.addBox( 6, 6, 15, 10, 10, 16 ); + bch.addBox( 6, 6, 11, 10, 10, 12 ); + } + + @Override + @SideOnly( Side.CLIENT ) + public void renderInventory(final IPartRenderHelper rh, final RenderBlocks renderer ) + { + rh.setTexture( CableBusTextures.PartExportSides.getIcon(), CableBusTextures.PartExportSides.getIcon(), CableBusTextures.PartMonitorBack.getIcon(), this.getFaceIcon(), CableBusTextures.PartExportSides.getIcon(), CableBusTextures.PartExportSides.getIcon() ); + + rh.setBounds( 4, 4, 12, 12, 12, 14 ); + rh.renderInventoryBox( renderer ); + + rh.setBounds( 5, 5, 14, 11, 11, 15 ); + rh.renderInventoryBox( renderer ); + + rh.setBounds( 6, 6, 15, 10, 10, 16 ); + rh.renderInventoryBox( renderer ); + } + + @Override + @SideOnly( Side.CLIENT ) + public void renderStatic( final int x, final int y, final int z, final IPartRenderHelper rh, final RenderBlocks renderer ) + { + this.setRenderCache( rh.useSimplifiedRendering( x, y, z, this, this.getRenderCache() ) ); + rh.setTexture( CableBusTextures.PartExportSides.getIcon(), CableBusTextures.PartExportSides.getIcon(), CableBusTextures.PartMonitorBack.getIcon(), this.getFaceIcon(), CableBusTextures.PartExportSides.getIcon(), CableBusTextures.PartExportSides.getIcon() ); + + rh.setBounds( 4, 4, 12, 12, 12, 14 ); + rh.renderBlock( x, y, z, renderer ); + + rh.setBounds( 5, 5, 14, 11, 11, 15 ); + rh.renderBlock( x, y, z, renderer ); + + rh.setBounds( 6, 6, 15, 10, 10, 16 ); + rh.renderBlock( x, y, z, renderer ); + + rh.setTexture( CableBusTextures.PartMonitorSidesStatus.getIcon(), CableBusTextures.PartMonitorSidesStatus.getIcon(), CableBusTextures.PartMonitorBack.getIcon(), this.getFaceIcon(), CableBusTextures.PartMonitorSidesStatus.getIcon(), CableBusTextures.PartMonitorSidesStatus.getIcon() ); + + rh.setBounds( 6, 6, 11, 10, 10, 12 ); + rh.renderBlock( x, y, z, renderer ); + + this.renderLights( x, y, z, rh, renderer ); + } + + @Override + public RedstoneMode getRSMode() + { + return (RedstoneMode) this.getConfigManager().getSetting( Settings.REDSTONE_CONTROLLED ); + } + +} diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java new file mode 100644 index 00000000..6cce7267 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java @@ -0,0 +1,194 @@ +package com.glodblock.github.common.parts; + +import appeng.api.config.*; +import appeng.api.networking.IGridNode; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.MachineSource; +import appeng.api.networking.ticking.TickRateModulation; +import appeng.api.networking.ticking.TickingRequest; +import appeng.api.parts.IPartCollisionHelper; +import appeng.api.parts.IPartRenderHelper; +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.data.IAEFluidStack; +import appeng.client.texture.CableBusTextures; +import appeng.me.GridAccessException; +import appeng.util.item.AEFluidStack; +import com.glodblock.github.client.textures.FCPartsTexture; +import com.glodblock.github.common.item.ItemFluidPacket; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +public class PartFluidImportBus extends PartSharedFluidBus { + + private final BaseActionSource source; + + public PartFluidImportBus( ItemStack is ) + { + super( is ); + this.getConfigManager().registerSetting( Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE ); + this.getConfigManager().registerSetting( Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); + this.getConfigManager().registerSetting( Settings.CRAFT_ONLY, YesNo.NO ); + this.getConfigManager().registerSetting( Settings.SCHEDULING_MODE, SchedulingMode.DEFAULT ); + this.source = new MachineSource( this ); + } + + @Override + public IIcon getFaceIcon() { + return FCPartsTexture.PartFluidImportBus.getIcon(); + } + + @Override + public TickingRequest getTickingRequest( IGridNode node ) + { + return new TickingRequest( 5, 40, this.isSleeping(), false ); + } + + @Override + public TickRateModulation tickingRequest(IGridNode node, int ticksSinceLastCall ) + { + return this.canDoBusWork() ? this.doBusWork() : TickRateModulation.IDLE; + } + + @Override + protected TickRateModulation doBusWork() + { + if( !this.canDoBusWork() ) + { + return TickRateModulation.IDLE; + } + + final TileEntity te = this.getConnectedTE(); + + if(te instanceof IFluidHandler) + { + try + { + final IFluidHandler fh = (IFluidHandler) te; + final IMEMonitor inv = this.getProxy().getStorage().getFluidInventory(); + + final FluidStack fluidStack = fh.drain( this.getSide().getOpposite(), this.calculateAmountToSend(), false ); + + if( this.filterEnabled() && !this.isInFilter( fluidStack ) ) + { + return TickRateModulation.SLOWER; + } + + final AEFluidStack aeFluidStack = AEFluidStack.create( fluidStack ); + + if( aeFluidStack != null ) + { + final IAEFluidStack notInserted = inv.injectItems( aeFluidStack, Actionable.MODULATE, this.source ); + + if( notInserted != null && notInserted.getStackSize() > 0 ) + { + aeFluidStack.decStackSize( notInserted.getStackSize() ); + } + + fh.drain( this.getSide().getOpposite(), aeFluidStack.getFluidStack(), true ); + + return TickRateModulation.FASTER; + } + + return TickRateModulation.IDLE; + } + catch(GridAccessException e ) + { + e.printStackTrace(); + } + } + + return TickRateModulation.SLEEP; + } + + @Override + protected boolean canDoBusWork() + { + return this.getProxy().isActive(); + } + + private boolean isInFilter( FluidStack fluid ) + { + for( int i = 0; i < this.getInventoryByName("config").getSizeInventory(); i++ ) + { + final IAEFluidStack stack = AEFluidStack.create(ItemFluidPacket.getFluidStack(this.getInventoryByName("config").getStackInSlot(i))); + if( stack != null && stack.getFluidStack().equals( fluid ) ) + { + return true; + } + } + return false; + } + + private boolean filterEnabled() + { + for( int i = 0; i < this.getInventoryByName("config").getSizeInventory(); i++ ) + { + final IAEFluidStack stack = AEFluidStack.create(ItemFluidPacket.getFluidStack(this.getInventoryByName("config").getStackInSlot(i))); + if( stack != null ) + { + return true; + } + } + return false; + } + + @Override + public RedstoneMode getRSMode() + { + return (RedstoneMode) this.getConfigManager().getSetting( Settings.REDSTONE_CONTROLLED ); + } + + @Override + public void getBoxes( final IPartCollisionHelper bch ) + { + bch.addBox( 6, 6, 11, 10, 10, 13 ); + bch.addBox( 5, 5, 13, 11, 11, 14 ); + bch.addBox( 4, 4, 14, 12, 12, 16 ); + } + + @Override + @SideOnly( Side.CLIENT ) + public void renderInventory(final IPartRenderHelper rh, final RenderBlocks renderer ) + { + rh.setTexture( CableBusTextures.PartImportSides.getIcon(), CableBusTextures.PartImportSides.getIcon(), CableBusTextures.PartMonitorBack.getIcon(), this.getFaceIcon(), CableBusTextures.PartImportSides.getIcon(), CableBusTextures.PartImportSides.getIcon() ); + + rh.setBounds( 3, 3, 15, 13, 13, 16 ); + rh.renderInventoryBox( renderer ); + + rh.setBounds( 4, 4, 14, 12, 12, 15 ); + rh.renderInventoryBox( renderer ); + + rh.setBounds( 5, 5, 13, 11, 11, 14 ); + rh.renderInventoryBox( renderer ); + } + + @Override + @SideOnly( Side.CLIENT ) + public void renderStatic( final int x, final int y, final int z, final IPartRenderHelper rh, final RenderBlocks renderer ) + { + this.setRenderCache( rh.useSimplifiedRendering( x, y, z, this, this.getRenderCache() ) ); + rh.setTexture( CableBusTextures.PartImportSides.getIcon(), CableBusTextures.PartImportSides.getIcon(), CableBusTextures.PartMonitorBack.getIcon(), this.getFaceIcon(), CableBusTextures.PartImportSides.getIcon(), CableBusTextures.PartImportSides.getIcon() ); + + rh.setBounds( 4, 4, 14, 12, 12, 16 ); + rh.renderBlock( x, y, z, renderer ); + + rh.setBounds( 5, 5, 13, 11, 11, 14 ); + rh.renderBlock( x, y, z, renderer ); + + rh.setBounds( 6, 6, 12, 10, 10, 13 ); + rh.renderBlock( x, y, z, renderer ); + rh.setTexture( CableBusTextures.PartMonitorSidesStatus.getIcon(), CableBusTextures.PartMonitorSidesStatus.getIcon(), CableBusTextures.PartMonitorBack.getIcon(), this.getFaceIcon(), CableBusTextures.PartMonitorSidesStatus.getIcon(), CableBusTextures.PartMonitorSidesStatus.getIcon() ); + + rh.setBounds( 6, 6, 11, 10, 10, 12 ); + rh.renderBlock( x, y, z, renderer ); + + this.renderLights( x, y, z, rh, renderer ); + } + +} diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidInterface.java b/src/main/java/com/glodblock/github/common/parts/PartFluidInterface.java index ca7d88fb..a821909e 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidInterface.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidInterface.java @@ -1,6 +1,7 @@ package com.glodblock.github.common.parts; import appeng.api.config.Actionable; +import appeng.api.config.Upgrades; import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.security.MachineSource; @@ -71,6 +72,12 @@ public class PartFluidInterface extends PartInterface implements IFluidHandler { rh.renderInventoryBox( renderer ); } + @Override + public int getInstalledUpgrades( final Upgrades u ) + { + return getInterfaceDuality().getInstalledUpgrades( u ); + } + private IMEMonitor getFluidGrid() { try { return getProxy().getGrid().getCache(IStorageGrid.class).getFluidInventory(); 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 a17b4f63..413518a4 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java @@ -131,6 +131,16 @@ public class PartFluidPatternTerminal extends FCBasePart { this.setCraftingRecipe( details.isCraftable() ); this.setSubstitution( details.canSubstitute() ); + for( int x = 0; x < this.crafting.getSizeInventory(); x++ ) + { + this.crafting.setInventorySlotContents( x, null ); + } + + for( int x = 0; x < this.output.getSizeInventory(); x++ ) + { + this.output.setInventorySlotContents( x, null ); + } + for( int x = 0; x < this.crafting.getSizeInventory() && x < details.getInputs().length; x++ ) { final IAEItemStack item = details.getInputs()[x]; @@ -166,6 +176,16 @@ public class PartFluidPatternTerminal extends FCBasePart { this.setCraftingRecipe( details.isCraftable() ); this.setSubstitution( details.canSubstitute() ); + for( int x = 0; x < this.crafting.getSizeInventory(); x++ ) + { + this.crafting.setInventorySlotContents( x, null ); + } + + for( int x = 0; x < this.output.getSizeInventory(); x++ ) + { + this.output.setInventorySlotContents( x, null ); + } + for( int x = 0; x < this.crafting.getSizeInventory() && x < details.getInputs().length; x++ ) { final IAEItemStack item = details.getInputs()[x]; 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 34849532..c6f573c1 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java @@ -127,6 +127,16 @@ public class PartFluidPatternTerminalEx extends FCBasePart { { this.setSubstitution( details.canSubstitute() ); + for( int x = 0; x < this.crafting.getSizeInventory(); x++ ) + { + this.crafting.setInventorySlotContents( x, null ); + } + + for( int x = 0; x < this.output.getSizeInventory(); x++ ) + { + this.output.setInventorySlotContents( x, null ); + } + for( int x = 0; x < this.crafting.getSizeInventory() && x < details.getInputs().length; x++ ) { final IAEItemStack item = details.getInputs()[x]; @@ -157,6 +167,16 @@ public class PartFluidPatternTerminalEx extends FCBasePart { { this.setSubstitution( details.canSubstitute() ); + for( int x = 0; x < this.crafting.getSizeInventory(); x++ ) + { + this.crafting.setInventorySlotContents( x, null ); + } + + for( int x = 0; x < this.output.getSizeInventory(); x++ ) + { + this.output.setInventorySlotContents( x, null ); + } + for( int x = 0; x < this.crafting.getSizeInventory() && x < details.getInputs().length; x++ ) { final IAEItemStack item = details.getInputs()[x]; diff --git a/src/main/java/com/glodblock/github/common/parts/PartSharedFluidBus.java b/src/main/java/com/glodblock/github/common/parts/PartSharedFluidBus.java new file mode 100644 index 00000000..5b09226f --- /dev/null +++ b/src/main/java/com/glodblock/github/common/parts/PartSharedFluidBus.java @@ -0,0 +1,188 @@ +package com.glodblock.github.common.parts; + +import appeng.api.config.RedstoneMode; +import appeng.api.config.Upgrades; +import appeng.api.networking.ticking.IGridTickable; +import appeng.api.networking.ticking.TickRateModulation; +import appeng.api.parts.IPartCollisionHelper; +import appeng.api.parts.IPartRenderHelper; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEFluidStack; +import appeng.client.texture.CableBusTextures; +import appeng.me.GridAccessException; +import appeng.parts.automation.PartUpgradeable; +import appeng.tile.inventory.AppEngInternalAEInventory; +import appeng.util.Platform; +import com.glodblock.github.common.item.ItemFluidPacket; +import com.glodblock.github.inventory.InventoryHandler; +import com.glodblock.github.inventory.gui.GuiType; +import com.glodblock.github.util.BlockPos; +import com.glodblock.github.util.Util; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +import java.util.Objects; + +public abstract class PartSharedFluidBus extends PartUpgradeable implements IGridTickable +{ + + private final AppEngInternalAEInventory config = new AppEngInternalAEInventory( this, 9 ); + private boolean lastRedstone; + + public PartSharedFluidBus( ItemStack is ) + { + super( is ); + } + + public abstract IIcon getFaceIcon(); + + @Override + public void upgradesChanged() + { + this.updateState(); + } + + @Override + public void onNeighborChanged() + { + this.updateState(); + if( this.lastRedstone != this.getHost().hasRedstone( this.getSide() ) ) + { + this.lastRedstone = !this.lastRedstone; + if( this.lastRedstone && this.getRSMode() == RedstoneMode.SIGNAL_PULSE ) + { + this.doBusWork(); + } + } + } + + private void updateState() + { + try + { + if( !this.isSleeping() ) + { + this.getProxy().getTick().wakeDevice( this.getProxy().getNode() ); + } + else + { + this.getProxy().getTick().sleepDevice( this.getProxy().getNode() ); + } + } + catch( final GridAccessException e ) + { + // :P + } + } + + @Override + public boolean onPartActivate(final EntityPlayer player, final Vec3 pos) + { + if( Platform.isServer() ) + { + InventoryHandler.openGui(player, this.getHost().getTile().getWorldObj(), new BlockPos(this.getHost().getTile()), Objects.requireNonNull(Util.from(this.getSide())), GuiType.FLUID_BUS_IO); + } + + return true; + } + + @Override + public void getBoxes( IPartCollisionHelper bch ) + { + bch.addBox( 6, 6, 11, 10, 10, 13 ); + bch.addBox( 5, 5, 13, 11, 11, 14 ); + bch.addBox( 4, 4, 14, 12, 12, 16 ); + } + + protected TileEntity getConnectedTE() + { + TileEntity self = this.getHost().getTile(); + return this.getTileEntity( self, (new BlockPos(self)).getOffSet( this.getSide() ) ); + } + + private TileEntity getTileEntity( final TileEntity self, final BlockPos pos ) + { + final World w = self.getWorldObj(); + + if( w.getChunkProvider().chunkExists( pos.getX() >> 4, pos.getZ() >> 4 ) ) + { + return w.getTileEntity( pos.getX(), pos.getY(), pos.getZ() ); + } + + return null; + } + + protected int calculateAmountToSend() + { + double amount = 1000D; + switch( this.getInstalledUpgrades( Upgrades.SPEED ) ) + { + case 4: + amount = amount * 1.5; + case 3: + amount = amount * 2; + case 2: + amount = amount * 4; + case 1: + amount = amount * 8; + case 0: + default: + return (int) Math.floor( amount ); + } + } + + @Override + public void readFromNBT( NBTTagCompound extra ) + { + super.readFromNBT( extra ); + this.config.readFromNBT( extra, "config" ); + } + + @Override + public void writeToNBT( NBTTagCompound extra ) + { + super.writeToNBT( extra ); + this.config.writeToNBT( extra, "config" ); + } + + @Override + public IInventory getInventoryByName(String name) { + if (name.equals("config")) { + return this.config; + } + return super.getInventoryByName(name); + } + + public void setFluidInSlot(int id, IAEFluidStack fluid) { + ItemStack tmp = ItemFluidPacket.newStack(fluid == null ? null : fluid.getFluidStack()); + if (tmp != null) { + tmp.setStackDisplayName(fluid.getFluidStack().getLocalizedName()); + } + this.config.setInventorySlotContents(id, tmp); + } + + protected StorageChannel getChannel() + { + return StorageChannel.FLUIDS; + } + + protected abstract TickRateModulation doBusWork(); + + protected abstract boolean canDoBusWork(); + + @Override + public int cableConnectionRenderTo() + { + return 5; + } + +} 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 200cf645..7d22731b 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidInterface.java @@ -1,22 +1,28 @@ package com.glodblock.github.common.tile; import appeng.api.config.Actionable; +import appeng.api.config.Upgrades; import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.security.MachineSource; import appeng.api.networking.storage.IStorageGrid; import appeng.api.storage.IMEMonitor; import appeng.api.storage.data.IAEFluidStack; +import appeng.core.features.IStackSrc; import appeng.me.GridAccessException; import appeng.tile.misc.TileInterface; import appeng.util.Platform; import appeng.util.item.AEFluidStack; +import com.glodblock.github.loader.ItemAndBlockHolder; +import net.minecraft.item.ItemStack; 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.Nullable; + public class TileFluidInterface extends TileInterface implements IFluidHandler { @@ -38,6 +44,21 @@ public class TileFluidInterface extends TileInterface implements IFluidHandler } } + @Nullable + protected ItemStack getItemFromTile( final Object obj ) + { + if (obj instanceof TileFluidInterface) { + return ItemAndBlockHolder.INTERFACE.stack(); + } + return null; + } + + @Override + public int getInstalledUpgrades( final Upgrades u ) + { + return getInterfaceDuality().getInstalledUpgrades( u ); + } + @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { IMEMonitor fluidGrid = getFluidGrid(); diff --git a/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java b/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java index fa59f5bc..acd3574e 100644 --- a/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java +++ b/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java @@ -5,6 +5,8 @@ import appeng.core.AELog; import appeng.util.Platform; import appeng.util.item.AEFluidStack; import com.glodblock.github.util.Util; +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; diff --git a/src/main/java/com/glodblock/github/inventory/FluidConvertingInventoryAdaptor.java b/src/main/java/com/glodblock/github/inventory/FluidConvertingInventoryAdaptor.java index 9b538395..053ae7bb 100644 --- a/src/main/java/com/glodblock/github/inventory/FluidConvertingInventoryAdaptor.java +++ b/src/main/java/com/glodblock/github/inventory/FluidConvertingInventoryAdaptor.java @@ -105,7 +105,7 @@ public class FluidConvertingInventoryAdaptor extends InventoryAdaptor { @Override public boolean containsItems() { - if (invFluids != null) { + if (invFluids != null && invFluids.getTankInfo(side) != null) { for (FluidTankInfo tank : invFluids.getTankInfo(side)) { FluidStack fluid = tank.fluid; if (fluid != null && fluid.amount > 0) { 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 fc44b4cc..19c0e124 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java +++ b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java @@ -6,6 +6,7 @@ import appeng.container.implementations.ContainerCraftingStatus; import com.glodblock.github.client.gui.*; import com.glodblock.github.client.gui.container.*; import com.glodblock.github.common.parts.FCBasePart; +import com.glodblock.github.common.parts.PartSharedFluidBus; import com.glodblock.github.common.tile.TileFluidPacketDecoder; import com.glodblock.github.common.tile.TileFluidPatternEncoder; import com.glodblock.github.common.tile.TileIngredientBuffer; @@ -17,6 +18,18 @@ import java.util.List; public enum GuiType { + FLUID_BUS_IO(new PartGuiFactory(PartSharedFluidBus.class) { + @Override + protected Object createServerGui(EntityPlayer player, PartSharedFluidBus inv) { + return new ContainerFluidIO(player.inventory, inv); + } + + @Override + protected Object createClientGui(EntityPlayer player, PartSharedFluidBus inv) { + return new GuiFluidIO(player.inventory, inv); + } + }), + INGREDIENT_BUFFER(new TileGuiFactory(TileIngredientBuffer.class) { @Override protected Object createServerGui(EntityPlayer player, TileIngredientBuffer inv) { 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 4ac873ad..06107e85 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java +++ b/src/main/java/com/glodblock/github/inventory/gui/MouseRegionManager.java @@ -1,6 +1,7 @@ package com.glodblock.github.inventory.gui; import com.glodblock.github.util.Ae2Reflect; +import com.glodblock.github.util.Ae2ReflectClient; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.util.ResourceLocation; @@ -22,8 +23,8 @@ public class MouseRegionManager { } public boolean onClick(int mX, int mY, int button) { - mX -= Ae2Reflect.getGuiLeft(gui); - mY -= Ae2Reflect.getGuiTop(gui); + mX -= Ae2ReflectClient.getGuiLeft(gui); + mY -= Ae2ReflectClient.getGuiTop(gui); 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 +35,8 @@ public class MouseRegionManager { } public void render(int mX, int mY) { - mX -= Ae2Reflect.getGuiLeft(gui); - mY -= Ae2Reflect.getGuiTop(gui); + mX -= Ae2ReflectClient.getGuiLeft(gui); + mY -= Ae2ReflectClient.getGuiTop(gui); for (Region region : regions) { if (region.containsMouse(mX, mY)) { List tooltip = region.handler.getTooltip(); diff --git a/src/main/java/com/glodblock/github/inventory/slot/OptionalFluidSlotFakeTypeOnly.java b/src/main/java/com/glodblock/github/inventory/slot/OptionalFluidSlotFakeTypeOnly.java new file mode 100644 index 00000000..6986f82a --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/slot/OptionalFluidSlotFakeTypeOnly.java @@ -0,0 +1,31 @@ +package com.glodblock.github.inventory.slot; + +import appeng.container.slot.IOptionalSlotHost; +import appeng.container.slot.OptionalSlotFakeTypeOnly; +import com.glodblock.github.common.item.ItemFluidPacket; +import com.glodblock.github.util.Util; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +public class OptionalFluidSlotFakeTypeOnly extends OptionalSlotFakeTypeOnly { + + public OptionalFluidSlotFakeTypeOnly(IInventory inv, IOptionalSlotHost containerBus, int idx, int x, int y, int offX, int offY, int groupNum) { + super(inv, containerBus, idx, x, y, offX, offY, groupNum); + } + + @Override + public void putStack( ItemStack is ) + { + FluidStack fluidStack = Util.getFluidFromItem(is); + if (fluidStack != null) { + ItemStack tmp = ItemFluidPacket.newStack(fluidStack); + tmp.setStackDisplayName(fluidStack.getLocalizedName()); + super.putStack(tmp); + } + else { + super.putStack(null); + } + } + +} diff --git a/src/main/java/com/glodblock/github/loader/ChannelLoader.java b/src/main/java/com/glodblock/github/loader/ChannelLoader.java index b03c2645..9b7cee71 100644 --- a/src/main/java/com/glodblock/github/loader/ChannelLoader.java +++ b/src/main/java/com/glodblock/github/loader/ChannelLoader.java @@ -6,6 +6,7 @@ import cpw.mods.fml.relauncher.Side; public class ChannelLoader implements Runnable { @Override + @SuppressWarnings("all") public void run() { int id = 0; FluidCraft.proxy.netHandler.registerMessage(new CPacketSwitchGuis.Handler(), CPacketSwitchGuis.class, id ++, Side.SERVER); @@ -19,5 +20,6 @@ public class ChannelLoader implements Runnable { FluidCraft.proxy.netHandler.registerMessage(new CPacketTransferRecipe.Handler(), CPacketTransferRecipe.class, id ++, Side.SERVER); FluidCraft.proxy.netHandler.registerMessage(new CPacketDumpTank.Handler(), CPacketDumpTank.class, id ++, Side.SERVER); FluidCraft.proxy.netHandler.registerMessage(new SPacketFluidUpdate.Handler(), SPacketFluidUpdate.class, id ++, Side.CLIENT); + FluidCraft.proxy.netHandler.registerMessage(new CPacketFluidUpdate.Handler(), CPacketFluidUpdate.class, id ++, Side.SERVER); } } diff --git a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java index 267655d2..43758331 100644 --- a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java +++ b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java @@ -12,6 +12,8 @@ public class ItemAndBlockHolder { public static ItemPartFluidPatternTerminal FLUID_TERMINAL = new ItemPartFluidPatternTerminal().register(); public static ItemPartFluidPatternTerminalEx FLUID_TERMINAL_EX = new ItemPartFluidPatternTerminalEx().register(); public static ItemPartFluidInterface FLUID_INTERFACE = new ItemPartFluidInterface().register(); + public static ItemFluidImportBus FLUID_IMPORT_BUS = new ItemFluidImportBus().register(); + public static ItemFluidExportBus FLUID_EXPORT_BUS = new ItemFluidExportBus().register(); public static ItemFluidPacket PACKET = new ItemFluidPacket().register(); public static ItemBasicFluidStorageCell CELL1K = new ItemBasicFluidStorageCell(CellType.Cell1kPart, 1).register(); public static ItemBasicFluidStorageCell CELL4K = new ItemBasicFluidStorageCell(CellType.Cell4kPart, 4).register(); diff --git a/src/main/java/com/glodblock/github/loader/RecipeLoader.java b/src/main/java/com/glodblock/github/loader/RecipeLoader.java index 4df4c685..504cbed5 100644 --- a/src/main/java/com/glodblock/github/loader/RecipeLoader.java +++ b/src/main/java/com/glodblock/github/loader/RecipeLoader.java @@ -31,6 +31,7 @@ public class RecipeLoader implements Runnable { public final static ItemStack AE2_CELL_1K = new ItemStack(GameRegistry.findItem("appliedenergistics2", "item.ItemMultiMaterial"), 1, 35); public final static ItemStack AE2_CORE_ANN = new ItemStack(GameRegistry.findItem("appliedenergistics2", "item.ItemMultiMaterial"), 1, 44); public final static ItemStack AE2_CORE_FOM = new ItemStack(GameRegistry.findItem("appliedenergistics2", "item.ItemMultiMaterial"), 1, 43); + public final static ItemStack PISTON = new ItemStack(Blocks.piston, 1); @Override public void run() { @@ -67,5 +68,10 @@ public class RecipeLoader implements Runnable { } } + if (Config.fluidIOBus) { + GameRegistry.addRecipe(new ShapedOreRecipe(FLUID_EXPORT_BUS, "ICI", "BPB", 'B', "dyeBlue", 'I', "ingotIron", 'P', PISTON, 'C', AE2_CORE_FOM)); + GameRegistry.addRecipe(new ShapedOreRecipe(FLUID_IMPORT_BUS, "BCB", "IPI", 'B', "dyeBlue", 'I', "ingotIron", 'P', PISTON, 'C', AE2_CORE_ANN)); + } + } } diff --git a/src/main/java/com/glodblock/github/network/CPacketFluidUpdate.java b/src/main/java/com/glodblock/github/network/CPacketFluidUpdate.java new file mode 100644 index 00000000..91766ff5 --- /dev/null +++ b/src/main/java/com/glodblock/github/network/CPacketFluidUpdate.java @@ -0,0 +1,80 @@ +package com.glodblock.github.network; + +import appeng.api.storage.data.IAEFluidStack; +import appeng.util.item.AEFluidStack; +import com.glodblock.github.client.gui.container.ContainerFluidConfigurable; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import io.netty.buffer.ByteBuf; +import net.minecraft.inventory.Container; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class CPacketFluidUpdate implements IMessage { + + private Map list; + + public CPacketFluidUpdate() { + } + + public CPacketFluidUpdate(Map data) { + this.list = data; + } + + @Override + public void fromBytes(ByteBuf buf) { + int size = buf.readInt(); + this.list = new HashMap<>(); + try { + for (int i = 0; i < size; i ++) { + int id = buf.readInt(); + boolean isNull = buf.readBoolean(); + if (!isNull) + list.put(id, null); + else { + IAEFluidStack fluid = AEFluidStack.loadFluidStackFromPacket(buf); + list.put(id, fluid); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(list.size()); + try { + for (Map.Entry fs : list.entrySet()) { + buf.writeInt(fs.getKey()); + if (fs.getValue() == null) + buf.writeBoolean(false); + else { + buf.writeBoolean(true); + fs.getValue().writeToPacket(buf); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static class Handler implements IMessageHandler { + + @Override + public IMessage onMessage(CPacketFluidUpdate message, MessageContext ctx) { + final Container c = ctx.getServerHandler().playerEntity.openContainer; + if( c instanceof ContainerFluidConfigurable) + { + for (Map.Entry e : message.list.entrySet() ) { + ( (ContainerFluidConfigurable) c ).setFluid(e.getKey(), e.getValue()); + } + } + return null; + } + + } +} diff --git a/src/main/java/com/glodblock/github/network/SPacketFluidUpdate.java b/src/main/java/com/glodblock/github/network/SPacketFluidUpdate.java index 63a4d859..3316626b 100644 --- a/src/main/java/com/glodblock/github/network/SPacketFluidUpdate.java +++ b/src/main/java/com/glodblock/github/network/SPacketFluidUpdate.java @@ -2,6 +2,7 @@ package com.glodblock.github.network; import appeng.api.storage.data.IAEFluidStack; import appeng.util.item.AEFluidStack; +import com.glodblock.github.client.gui.GuiFluidIO; import com.glodblock.github.client.gui.GuiIngredientBuffer; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; @@ -73,6 +74,11 @@ public class SPacketFluidUpdate implements IMessage { for (Map.Entry e : message.list.entrySet() ) { ( (GuiIngredientBuffer) gs ).update(e.getKey(), e.getValue()); } + } else if( gs instanceof GuiFluidIO) + { + for (Map.Entry e : message.list.entrySet() ) { + ( (GuiFluidIO) gs ).update(e.getKey(), e.getValue()); + } } return null; } diff --git a/src/main/java/com/glodblock/github/util/Ae2Reflect.java b/src/main/java/com/glodblock/github/util/Ae2Reflect.java index 8be6c2f4..b479f7d7 100644 --- a/src/main/java/com/glodblock/github/util/Ae2Reflect.java +++ b/src/main/java/com/glodblock/github/util/Ae2Reflect.java @@ -1,11 +1,13 @@ package com.glodblock.github.util; +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; @@ -29,17 +31,27 @@ 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; + private static final Field fCPU_myName; + private static final Field fCPU_processors; + private static final Field fCPU_size; private static final Method mItemSlot_setExtractable; 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"); + fCPU_myName = Ae2Reflect.reflectField(CraftingCPURecord.class, "myName"); + fCPU_processors = Ae2Reflect.reflectField(CraftingCPURecord.class, "processors"); + fCPU_size = Ae2Reflect.reflectField(CraftingCPURecord.class, "size"); mItemSlot_setExtractable = reflectMethod(ItemSlot.class, "setExtractable", boolean.class); } catch (Exception e) { throw new IllegalStateException("Failed to initialize AE2 reflection hacks!", e); @@ -108,65 +120,6 @@ public class Ae2Reflect { } } - 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 fCPU_cpu; - private static final Field fCPU_myName; - private static final Field fCPU_processors; - private static final Field fCPU_size; - 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"); - fCPU_cpu = Ae2Reflect.reflectField(CraftingCPURecord.class, "cpu"); - fCPU_myName = Ae2Reflect.reflectField(CraftingCPURecord.class, "myName"); - fCPU_processors = Ae2Reflect.reflectField(CraftingCPURecord.class, "processors"); - fCPU_size = Ae2Reflect.reflectField(CraftingCPURecord.class, "size"); - 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 (Exception e) { - throw new IllegalStateException("Failed to initialize AE2 reflection hacks!", e); - } - } - - @SuppressWarnings("unchecked") - public static List getInventorySlots(AEBaseGui gui) { - try { - return (List) mGuiPatternTerm_inventorySlots.invoke(gui); - } catch (Exception e) { - throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_inventorySlots, e); - } - } - - public static void rewriteIcon(GuiCraftingStatus gui, ItemStack icon) { - Ae2Reflect.writeField(gui, fGuiCPUStatus_icon, icon); - } - - public static Set getDragClick(AEBaseGui gui) { - return Ae2Reflect.readField(gui, fGui_drag); - } - public static ICraftingCPU getCPU(CraftingCPURecord cpu) { return Ae2Reflect.readField(cpu, fCPU_cpu); } @@ -183,46 +136,8 @@ public class Ae2Reflect { return Ae2Reflect.readField(cpu, fCPU_size); } - 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); - } - - 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); + public static IUpgradeableHost getUpgradeList(ContainerUpgradeable container) { + return Ae2Reflect.readField(container, fInventory_containerUpgrade); } } diff --git a/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java b/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java new file mode 100644 index 00000000..0f72463f --- /dev/null +++ b/src/main/java/com/glodblock/github/util/Ae2ReflectClient.java @@ -0,0 +1,118 @@ +package com.glodblock.github.util; + +import appeng.client.gui.AEBaseGui; +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; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.List; +import java.util.Set; + +@SideOnly(Side.CLIENT) +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); + } + } + + @SuppressWarnings("unchecked") + public static List getInventorySlots(AEBaseGui gui) { + try { + return (List) mGuiPatternTerm_inventorySlots.invoke(gui); + } catch (Exception e) { + throw new IllegalStateException("Failed to invoke method: " + mGuiPatternTerm_inventorySlots, e); + } + } + + public static void rewriteIcon(GuiCraftingStatus gui, ItemStack icon) { + Ae2Reflect.writeField(gui, fGuiCPUStatus_icon, icon); + } + + 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); + } + + 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/java/com/glodblock/github/util/BlockPos.java b/src/main/java/com/glodblock/github/util/BlockPos.java index 45897d2e..d0f706ea 100644 --- a/src/main/java/com/glodblock/github/util/BlockPos.java +++ b/src/main/java/com/glodblock/github/util/BlockPos.java @@ -1,6 +1,7 @@ package com.glodblock.github.util; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; import javax.annotation.Nonnull; @@ -22,6 +23,10 @@ public class BlockPos { this.z = te.zCoord; } + public BlockPos getOffSet(ForgeDirection face) { + return new BlockPos(this.x + face.offsetX, this.y + face.offsetY, this.z + face.offsetZ); + } + public int getX() { return x; } diff --git a/src/main/java/com/glodblock/github/util/FluidPatternDetails.java b/src/main/java/com/glodblock/github/util/FluidPatternDetails.java index 275f6374..fe2038fe 100644 --- a/src/main/java/com/glodblock/github/util/FluidPatternDetails.java +++ b/src/main/java/com/glodblock/github/util/FluidPatternDetails.java @@ -186,8 +186,8 @@ public class FluidPatternDetails implements ICraftingPatternDetails, Comparable< NBTTagCompound tag = Objects.requireNonNull(patternStack.getTagCompound()); // may be possible to enter a partially-correct state if setInputs succeeds but setOutputs failed // but outside code should treat it as completely incorrect and not attempt to make calls - return setInputs(readStackArray(tag.getTagList("Inputs", Constants.NBT.TAG_COMPOUND), 9)) - && setOutputs(readStackArray(tag.getTagList("Outputs", Constants.NBT.TAG_COMPOUND), 3)); + return setInputs(readStackArray(tag.getTagList("in", Constants.NBT.TAG_COMPOUND), 16)) + && setOutputs(readStackArray(tag.getTagList("out", Constants.NBT.TAG_COMPOUND), 4)); } public static IAEItemStack[] readStackArray(NBTTagList listTag, int maxCount) { diff --git a/src/main/java/com/glodblock/github/util/GlStateManager.java b/src/main/java/com/glodblock/github/util/GlStateManager.java deleted file mode 100644 index 68b24ea4..00000000 --- a/src/main/java/com/glodblock/github/util/GlStateManager.java +++ /dev/null @@ -1,1252 +0,0 @@ -package com.glodblock.github.util; - -import java.nio.ByteBuffer; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import javax.annotation.Nullable; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.renderer.GLAllocation; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.RenderHelper; -import org.lwjgl.BufferUtils; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL14; -import org.lwjgl.opengl.GLContext; -import org.lwjgl.util.vector.Quaternion; - -@SideOnly(Side.CLIENT) -public class GlStateManager { - private static final FloatBuffer colorBuffer = GLAllocation.createDirectFloatBuffer(16); - private static final FloatBuffer BUF_FLOAT_16 = BufferUtils.createFloatBuffer(16); - private static final FloatBuffer BUF_FLOAT_4 = BufferUtils.createFloatBuffer(4); - private static final GlStateManager.AlphaState alphaState = new GlStateManager.AlphaState(); - private static final GlStateManager.BooleanState lightingState = new GlStateManager.BooleanState(2896); - private static final GlStateManager.BooleanState[] lightState = new GlStateManager.BooleanState[8]; - private static final GlStateManager.ColorMaterialState colorMaterialState; - private static final GlStateManager.BlendState blendState; - private static final GlStateManager.DepthState depthState; - private static final GlStateManager.FogState fogState; - private static final GlStateManager.CullState cullState; - private static final GlStateManager.PolygonOffsetState polygonOffsetState; - private static final GlStateManager.ColorLogicState colorLogicState; - private static final GlStateManager.TexGenState texGenState; - private static final GlStateManager.ClearState clearState; - private static final GlStateManager.StencilState stencilState; - private static final GlStateManager.BooleanState normalizeState; - private static int activeTextureUnit; - private static final GlStateManager.TextureState[] textureState; - private static int activeShadeModel; - private static final GlStateManager.BooleanState rescaleNormalState; - private static final GlStateManager.ColorMask colorMaskState; - private static final GlStateManager.Color colorState; - - public GlStateManager() { - } - - public static void pushAttrib() { - GL11.glPushAttrib(8256); - } - - public static void popAttrib() { - GL11.glPopAttrib(); - } - - public static void disableAlpha() { - alphaState.alphaTest.setDisabled(); - } - - public static void enableAlpha() { - alphaState.alphaTest.setEnabled(); - } - - public static void alphaFunc(int func, float ref) { - if (func != alphaState.func || ref != alphaState.ref) { - alphaState.func = func; - alphaState.ref = ref; - GL11.glAlphaFunc(func, ref); - } - - } - - public static void enableLighting() { - lightingState.setEnabled(); - } - - public static void disableLighting() { - lightingState.setDisabled(); - } - - public static void enableLight(int light) { - lightState[light].setEnabled(); - } - - public static void disableLight(int light) { - lightState[light].setDisabled(); - } - - public static void enableColorMaterial() { - colorMaterialState.colorMaterial.setEnabled(); - } - - public static void disableColorMaterial() { - colorMaterialState.colorMaterial.setDisabled(); - } - - public static void colorMaterial(int face, int mode) { - if (face != colorMaterialState.face || mode != colorMaterialState.mode) { - colorMaterialState.face = face; - colorMaterialState.mode = mode; - GL11.glColorMaterial(face, mode); - } - - } - - public static void glLight(int light, int pname, FloatBuffer params) { - GL11.glLight(light, pname, params); - } - - public static void glLightModel(int pname, FloatBuffer params) { - GL11.glLightModel(pname, params); - } - - public static void glNormal3f(float nx, float ny, float nz) { - GL11.glNormal3f(nx, ny, nz); - } - - public static void disableDepth() { - depthState.depthTest.setDisabled(); - } - - public static void enableDepth() { - depthState.depthTest.setEnabled(); - } - - public static void depthFunc(int depthFunc) { - if (depthFunc != depthState.depthFunc) { - depthState.depthFunc = depthFunc; - GL11.glDepthFunc(depthFunc); - } - - } - - public static void depthMask(boolean flagIn) { - if (flagIn != depthState.maskEnabled) { - depthState.maskEnabled = flagIn; - GL11.glDepthMask(flagIn); - } - - } - - public static void disableBlend() { - blendState.blend.setDisabled(); - } - - public static void enableBlend() { - blendState.blend.setEnabled(); - } - - public static void blendFunc(GlStateManager.SourceFactor srcFactor, GlStateManager.DestFactor dstFactor) { - blendFunc(srcFactor.factor, dstFactor.factor); - } - - public static void blendFunc(int srcFactor, int dstFactor) { - if (srcFactor != blendState.srcFactor || dstFactor != blendState.dstFactor) { - blendState.srcFactor = srcFactor; - blendState.dstFactor = dstFactor; - GL11.glBlendFunc(srcFactor, dstFactor); - } - - } - - public static void tryBlendFuncSeparate(GlStateManager.SourceFactor srcFactor, GlStateManager.DestFactor dstFactor, GlStateManager.SourceFactor srcFactorAlpha, GlStateManager.DestFactor dstFactorAlpha) { - tryBlendFuncSeparate(srcFactor.factor, dstFactor.factor, srcFactorAlpha.factor, dstFactorAlpha.factor); - } - - public static void tryBlendFuncSeparate(int srcFactor, int dstFactor, int srcFactorAlpha, int dstFactorAlpha) { - if (srcFactor != blendState.srcFactor || dstFactor != blendState.dstFactor || srcFactorAlpha != blendState.srcFactorAlpha || dstFactorAlpha != blendState.dstFactorAlpha) { - blendState.srcFactor = srcFactor; - blendState.dstFactor = dstFactor; - blendState.srcFactorAlpha = srcFactorAlpha; - blendState.dstFactorAlpha = dstFactorAlpha; - OpenGlHelper.glBlendFunc(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); - } - - } - - public static void glBlendEquation(int blendEquation) { - GL14.glBlendEquation(blendEquation); - } - - public static void enableOutlineMode(int color) { - BUF_FLOAT_4.put(0, (float)(color >> 16 & 255) / 255.0F); - BUF_FLOAT_4.put(1, (float)(color >> 8 & 255) / 255.0F); - BUF_FLOAT_4.put(2, (float)(color >> 0 & 255) / 255.0F); - BUF_FLOAT_4.put(3, (float)(color >> 24 & 255) / 255.0F); - glTexEnv(8960, 8705, BUF_FLOAT_4); - glTexEnvi(8960, 8704, 34160); - glTexEnvi(8960, 34161, 7681); - glTexEnvi(8960, 34176, 34166); - glTexEnvi(8960, 34192, 768); - glTexEnvi(8960, 34162, 7681); - glTexEnvi(8960, 34184, 5890); - glTexEnvi(8960, 34200, 770); - } - - public static void disableOutlineMode() { - glTexEnvi(8960, 8704, 8448); - glTexEnvi(8960, 34161, 8448); - glTexEnvi(8960, 34162, 8448); - glTexEnvi(8960, 34176, 5890); - glTexEnvi(8960, 34184, 5890); - glTexEnvi(8960, 34192, 768); - glTexEnvi(8960, 34200, 770); - } - - public static void enableFog() { - fogState.fog.setEnabled(); - } - - public static void disableFog() { - fogState.fog.setDisabled(); - } - - public static void setFog(GlStateManager.FogMode fogMode) { - setFog(fogMode.capabilityId); - } - - private static void setFog(int param) { - if (param != fogState.mode) { - fogState.mode = param; - GL11.glFogi(2917, param); - } - - } - - public static void setFogDensity(float param) { - if (param != fogState.density) { - fogState.density = param; - GL11.glFogf(2914, param); - } - - } - - public static void setFogStart(float param) { - if (param != fogState.start) { - fogState.start = param; - GL11.glFogf(2915, param); - } - - } - - public static void setFogEnd(float param) { - if (param != fogState.end) { - fogState.end = param; - GL11.glFogf(2916, param); - } - - } - - public static void glFog(int pname, FloatBuffer param) { - GL11.glFog(pname, param); - } - - public static void glFogi(int pname, int param) { - GL11.glFogi(pname, param); - } - - public static void enableCull() { - cullState.cullFace.setEnabled(); - } - - public static void disableCull() { - cullState.cullFace.setDisabled(); - } - - public static void cullFace(GlStateManager.CullFace cullFace) { - cullFace(cullFace.mode); - } - - private static void cullFace(int mode) { - if (mode != cullState.mode) { - cullState.mode = mode; - GL11.glCullFace(mode); - } - - } - - public static void glPolygonMode(int face, int mode) { - GL11.glPolygonMode(face, mode); - } - - public static void enablePolygonOffset() { - polygonOffsetState.polygonOffsetFill.setEnabled(); - } - - public static void disablePolygonOffset() { - polygonOffsetState.polygonOffsetFill.setDisabled(); - } - - public static void doPolygonOffset(float factor, float units) { - if (factor != polygonOffsetState.factor || units != polygonOffsetState.units) { - polygonOffsetState.factor = factor; - polygonOffsetState.units = units; - GL11.glPolygonOffset(factor, units); - } - - } - - public static void enableColorLogic() { - colorLogicState.colorLogicOp.setEnabled(); - } - - public static void disableColorLogic() { - colorLogicState.colorLogicOp.setDisabled(); - } - - public static void colorLogicOp(GlStateManager.LogicOp logicOperation) { - colorLogicOp(logicOperation.opcode); - } - - public static void colorLogicOp(int opcode) { - if (opcode != colorLogicState.opcode) { - colorLogicState.opcode = opcode; - GL11.glLogicOp(opcode); - } - - } - - public static void enableTexGenCoord(GlStateManager.TexGen texGen) { - texGenCoord(texGen).textureGen.setEnabled(); - } - - public static void disableTexGenCoord(GlStateManager.TexGen texGen) { - texGenCoord(texGen).textureGen.setDisabled(); - } - - public static void texGen(GlStateManager.TexGen texGen, int param) { - GlStateManager.TexGenCoord glstatemanager$texgencoord = texGenCoord(texGen); - if (param != glstatemanager$texgencoord.param) { - glstatemanager$texgencoord.param = param; - GL11.glTexGeni(glstatemanager$texgencoord.coord, 9472, param); - } - - } - - public static void texGen(GlStateManager.TexGen texGen, int pname, FloatBuffer params) { - GL11.glTexGen(texGenCoord(texGen).coord, pname, params); - } - - private static GlStateManager.TexGenCoord texGenCoord(GlStateManager.TexGen texGen) { - switch(texGen) { - case S: - return texGenState.s; - case T: - return texGenState.t; - case R: - return texGenState.r; - case Q: - return texGenState.q; - default: - return texGenState.s; - } - } - - public static void setActiveTexture(int texture) { - if (activeTextureUnit != texture - OpenGlHelper.defaultTexUnit) { - activeTextureUnit = texture - OpenGlHelper.defaultTexUnit; - OpenGlHelper.setActiveTexture(texture); - } - - } - - public static void enableTexture2D() { - textureState[activeTextureUnit].texture2DState.setEnabled(); - } - - public static void disableTexture2D() { - textureState[activeTextureUnit].texture2DState.setDisabled(); - } - - public static void glTexEnv(int target, int parameterName, FloatBuffer parameters) { - GL11.glTexEnv(target, parameterName, parameters); - } - - public static void glTexEnvi(int target, int parameterName, int parameter) { - GL11.glTexEnvi(target, parameterName, parameter); - } - - public static void glTexEnvf(int target, int parameterName, float parameter) { - GL11.glTexEnvf(target, parameterName, parameter); - } - - public static void glTexParameterf(int target, int parameterName, float parameter) { - GL11.glTexParameterf(target, parameterName, parameter); - } - - public static void glTexParameteri(int target, int parameterName, int parameter) { - GL11.glTexParameteri(target, parameterName, parameter); - } - - public static int glGetTexLevelParameteri(int target, int level, int parameterName) { - return GL11.glGetTexLevelParameteri(target, level, parameterName); - } - - public static int generateTexture() { - return GL11.glGenTextures(); - } - - public static void deleteTexture(int texture) { - GL11.glDeleteTextures(texture); - GlStateManager.TextureState[] var1 = textureState; - int var2 = var1.length; - - for(int var3 = 0; var3 < var2; ++var3) { - GlStateManager.TextureState glstatemanager$texturestate = var1[var3]; - if (glstatemanager$texturestate.textureName == texture) { - glstatemanager$texturestate.textureName = -1; - } - } - - } - - public static void bindTexture(int texture) { - if (texture != textureState[activeTextureUnit].textureName) { - textureState[activeTextureUnit].textureName = texture; - GL11.glBindTexture(3553, texture); - } - - } - - public static void glTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, @Nullable IntBuffer pixels) { - GL11.glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels); - } - - public static void glTexSubImage2D(int target, int level, int xOffset, int yOffset, int width, int height, int format, int type, IntBuffer pixels) { - GL11.glTexSubImage2D(target, level, xOffset, yOffset, width, height, format, type, pixels); - } - - public static void glCopyTexSubImage2D(int target, int level, int xOffset, int yOffset, int x, int y, int width, int height) { - GL11.glCopyTexSubImage2D(target, level, xOffset, yOffset, x, y, width, height); - } - - public static void glGetTexImage(int target, int level, int format, int type, IntBuffer pixels) { - GL11.glGetTexImage(target, level, format, type, pixels); - } - - public static void enableNormalize() { - normalizeState.setEnabled(); - } - - public static void disableNormalize() { - normalizeState.setDisabled(); - } - - public static void shadeModel(int mode) { - if (mode != activeShadeModel) { - activeShadeModel = mode; - GL11.glShadeModel(mode); - } - - } - - public static void enableRescaleNormal() { - rescaleNormalState.setEnabled(); - } - - public static void disableRescaleNormal() { - rescaleNormalState.setDisabled(); - } - - public static void viewport(int x, int y, int width, int height) { - GL11.glViewport(x, y, width, height); - } - - public static void colorMask(boolean red, boolean green, boolean blue, boolean alpha) { - if (red != colorMaskState.red || green != colorMaskState.green || blue != colorMaskState.blue || alpha != colorMaskState.alpha) { - colorMaskState.red = red; - colorMaskState.green = green; - colorMaskState.blue = blue; - colorMaskState.alpha = alpha; - GL11.glColorMask(red, green, blue, alpha); - } - - } - - public static void clearDepth(double depth) { - if (depth != clearState.depth) { - clearState.depth = depth; - GL11.glClearDepth(depth); - } - - } - - public static void clearColor(float red, float green, float blue, float alpha) { - if (red != clearState.color.red || green != clearState.color.green || blue != clearState.color.blue || alpha != clearState.color.alpha) { - clearState.color.red = red; - clearState.color.green = green; - clearState.color.blue = blue; - clearState.color.alpha = alpha; - GL11.glClearColor(red, green, blue, alpha); - } - - } - - public static void clear(int mask) { - GL11.glClear(mask); - } - - public static void matrixMode(int mode) { - GL11.glMatrixMode(mode); - } - - public static void loadIdentity() { - GL11.glLoadIdentity(); - } - - public static void pushMatrix() { - GL11.glPushMatrix(); - } - - public static void popMatrix() { - GL11.glPopMatrix(); - } - - public static void getFloat(int pname, FloatBuffer params) { - GL11.glGetFloat(pname, params); - } - - public static void ortho(double left, double right, double bottom, double top, double zNear, double zFar) { - GL11.glOrtho(left, right, bottom, top, zNear, zFar); - } - - public static void rotate(float angle, float x, float y, float z) { - GL11.glRotatef(angle, x, y, z); - } - - public static void scale(float x, float y, float z) { - GL11.glScalef(x, y, z); - } - - public static void scale(double x, double y, double z) { - GL11.glScaled(x, y, z); - } - - public static void translate(float x, float y, float z) { - GL11.glTranslatef(x, y, z); - } - - public static void translate(double x, double y, double z) { - GL11.glTranslated(x, y, z); - } - - public static void multMatrix(FloatBuffer matrix) { - GL11.glMultMatrix(matrix); - } - - public static void rotate(Quaternion quaternionIn) { - multMatrix(quatToGlMatrix(BUF_FLOAT_16, quaternionIn)); - } - - public static FloatBuffer quatToGlMatrix(FloatBuffer buffer, Quaternion quaternionIn) { - buffer.clear(); - float f = quaternionIn.x * quaternionIn.x; - float f1 = quaternionIn.x * quaternionIn.y; - float f2 = quaternionIn.x * quaternionIn.z; - float f3 = quaternionIn.x * quaternionIn.w; - float f4 = quaternionIn.y * quaternionIn.y; - float f5 = quaternionIn.y * quaternionIn.z; - float f6 = quaternionIn.y * quaternionIn.w; - float f7 = quaternionIn.z * quaternionIn.z; - float f8 = quaternionIn.z * quaternionIn.w; - buffer.put(1.0F - 2.0F * (f4 + f7)); - buffer.put(2.0F * (f1 + f8)); - buffer.put(2.0F * (f2 - f6)); - buffer.put(0.0F); - buffer.put(2.0F * (f1 - f8)); - buffer.put(1.0F - 2.0F * (f + f7)); - buffer.put(2.0F * (f5 + f3)); - buffer.put(0.0F); - buffer.put(2.0F * (f2 + f6)); - buffer.put(2.0F * (f5 - f3)); - buffer.put(1.0F - 2.0F * (f + f4)); - buffer.put(0.0F); - buffer.put(0.0F); - buffer.put(0.0F); - buffer.put(0.0F); - buffer.put(1.0F); - buffer.rewind(); - return buffer; - } - - public static void color(float colorRed, float colorGreen, float colorBlue, float colorAlpha) { - if (colorRed != colorState.red || colorGreen != colorState.green || colorBlue != colorState.blue || colorAlpha != colorState.alpha) { - colorState.red = colorRed; - colorState.green = colorGreen; - colorState.blue = colorBlue; - colorState.alpha = colorAlpha; - GL11.glColor4f(colorRed, colorGreen, colorBlue, colorAlpha); - } - - } - - public static void color(float colorRed, float colorGreen, float colorBlue) { - color(colorRed, colorGreen, colorBlue, 1.0F); - } - - public static void glTexCoord2f(float sCoord, float tCoord) { - GL11.glTexCoord2f(sCoord, tCoord); - } - - public static void glVertex3f(float x, float y, float z) { - GL11.glVertex3f(x, y, z); - } - - public static void resetColor() { - colorState.red = -1.0F; - colorState.green = -1.0F; - colorState.blue = -1.0F; - colorState.alpha = -1.0F; - } - - public static void glNormalPointer(int type, int stride, ByteBuffer buffer) { - GL11.glNormalPointer(type, stride, buffer); - } - - public static void glTexCoordPointer(int size, int type, int stride, int buffer_offset) { - GL11.glTexCoordPointer(size, type, stride, (long)buffer_offset); - } - - public static void glTexCoordPointer(int size, int type, int stride, ByteBuffer buffer) { - GL11.glTexCoordPointer(size, type, stride, buffer); - } - - public static void glVertexPointer(int size, int type, int stride, int buffer_offset) { - GL11.glVertexPointer(size, type, stride, (long)buffer_offset); - } - - public static void glVertexPointer(int size, int type, int stride, ByteBuffer buffer) { - GL11.glVertexPointer(size, type, stride, buffer); - } - - public static void glColorPointer(int size, int type, int stride, int buffer_offset) { - GL11.glColorPointer(size, type, stride, (long)buffer_offset); - } - - public static void glColorPointer(int size, int type, int stride, ByteBuffer buffer) { - GL11.glColorPointer(size, type, stride, buffer); - } - - public static void glDisableClientState(int cap) { - GL11.glDisableClientState(cap); - } - - public static void glEnableClientState(int cap) { - GL11.glEnableClientState(cap); - } - - public static void glBegin(int mode) { - GL11.glBegin(mode); - } - - public static void glEnd() { - GL11.glEnd(); - } - - public static void glDrawArrays(int mode, int first, int count) { - GL11.glDrawArrays(mode, first, count); - } - - public static void glLineWidth(float width) { - GL11.glLineWidth(width); - } - - public static void callList(int list) { - GL11.glCallList(list); - } - - public static void glDeleteLists(int list, int range) { - GL11.glDeleteLists(list, range); - } - - public static void glNewList(int list, int mode) { - GL11.glNewList(list, mode); - } - - public static void glEndList() { - GL11.glEndList(); - } - - public static int glGenLists(int range) { - return GL11.glGenLists(range); - } - - public static void glPixelStorei(int parameterName, int param) { - GL11.glPixelStorei(parameterName, param); - } - - public static void glReadPixels(int x, int y, int width, int height, int format, int type, IntBuffer pixels) { - GL11.glReadPixels(x, y, width, height, format, type, pixels); - } - - public static int glGetError() { - return GL11.glGetError(); - } - - public static String glGetString(int name) { - return GL11.glGetString(name); - } - - public static void glGetInteger(int parameterName, IntBuffer parameters) { - GL11.glGetInteger(parameterName, parameters); - } - - public static int glGetInteger(int parameterName) { - return GL11.glGetInteger(parameterName); - } - - public static void enableBlendProfile(GlStateManager.Profile p_187408_0_) { - p_187408_0_.apply(); - } - - public static void disableBlendProfile(GlStateManager.Profile p_187440_0_) { - p_187440_0_.clean(); - } - - static { - int j; - for(j = 0; j < 8; ++j) { - lightState[j] = new GlStateManager.BooleanState(16384 + j); - } - - colorMaterialState = new GlStateManager.ColorMaterialState(); - blendState = new GlStateManager.BlendState(); - depthState = new GlStateManager.DepthState(); - fogState = new GlStateManager.FogState(); - cullState = new GlStateManager.CullState(); - polygonOffsetState = new GlStateManager.PolygonOffsetState(); - colorLogicState = new GlStateManager.ColorLogicState(); - texGenState = new GlStateManager.TexGenState(); - clearState = new GlStateManager.ClearState(); - stencilState = new GlStateManager.StencilState(); - normalizeState = new GlStateManager.BooleanState(2977); - textureState = new GlStateManager.TextureState[8]; - - for(j = 0; j < 8; ++j) { - textureState[j] = new GlStateManager.TextureState(); - } - - activeShadeModel = 7425; - rescaleNormalState = new GlStateManager.BooleanState(32826); - colorMaskState = new GlStateManager.ColorMask(); - colorState = new GlStateManager.Color(); - } - - @SideOnly(Side.CLIENT) - static class TextureState { - public GlStateManager.BooleanState texture2DState; - public int textureName; - - private TextureState() { - this.texture2DState = new GlStateManager.BooleanState(3553); - } - } - - @SideOnly(Side.CLIENT) - static class TexGenState { - public GlStateManager.TexGenCoord s; - public GlStateManager.TexGenCoord t; - public GlStateManager.TexGenCoord r; - public GlStateManager.TexGenCoord q; - - private TexGenState() { - this.s = new GlStateManager.TexGenCoord(8192, 3168); - this.t = new GlStateManager.TexGenCoord(8193, 3169); - this.r = new GlStateManager.TexGenCoord(8194, 3170); - this.q = new GlStateManager.TexGenCoord(8195, 3171); - } - } - - @SideOnly(Side.CLIENT) - static class TexGenCoord { - public GlStateManager.BooleanState textureGen; - public int coord; - public int param = -1; - - public TexGenCoord(int coordIn, int capabilityIn) { - this.coord = coordIn; - this.textureGen = new GlStateManager.BooleanState(capabilityIn); - } - } - - @SideOnly(Side.CLIENT) - public static enum TexGen { - S, - T, - R, - Q; - - private TexGen() { - } - } - - @SideOnly(Side.CLIENT) - static class StencilState { - public GlStateManager.StencilFunc func; - public int mask; - public int fail; - public int zfail; - public int zpass; - - private StencilState() { - this.func = new GlStateManager.StencilFunc(); - this.mask = -1; - this.fail = 7680; - this.zfail = 7680; - this.zpass = 7680; - } - } - - @SideOnly(Side.CLIENT) - static class StencilFunc { - public int func; - public int mask; - - private StencilFunc() { - this.func = 519; - this.mask = -1; - } - } - - @SideOnly(Side.CLIENT) - public static enum SourceFactor { - CONSTANT_ALPHA(32771), - CONSTANT_COLOR(32769), - DST_ALPHA(772), - DST_COLOR(774), - ONE(1), - ONE_MINUS_CONSTANT_ALPHA(32772), - ONE_MINUS_CONSTANT_COLOR(32770), - ONE_MINUS_DST_ALPHA(773), - ONE_MINUS_DST_COLOR(775), - ONE_MINUS_SRC_ALPHA(771), - ONE_MINUS_SRC_COLOR(769), - SRC_ALPHA(770), - SRC_ALPHA_SATURATE(776), - SRC_COLOR(768), - ZERO(0); - - public final int factor; - - private SourceFactor(int factorIn) { - this.factor = factorIn; - } - } - - @SideOnly(Side.CLIENT) - public static enum Profile { - DEFAULT { - public void apply() { - GlStateManager.disableAlpha(); - GlStateManager.alphaFunc(519, 0.0F); - GlStateManager.disableLighting(); - GL11.glLightModel(2899, setColorBuffer(0.2F, 0.2F, 0.2F, 1.0F)); - - for(int i = 0; i < 8; ++i) { - GlStateManager.disableLight(i); - GL11.glLight(16384 + i, 4608, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); - GL11.glLight(16384 + i, 4611, setColorBuffer(0.0F, 0.0F, 1.0F, 0.0F)); - if (i == 0) { - GL11.glLight(16384 + i, 4609, setColorBuffer(1.0F, 1.0F, 1.0F, 1.0F)); - GL11.glLight(16384 + i, 4610, setColorBuffer(1.0F, 1.0F, 1.0F, 1.0F)); - } else { - GL11.glLight(16384 + i, 4609, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); - GL11.glLight(16384 + i, 4610, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); - } - } - - GlStateManager.disableColorMaterial(); - GlStateManager.colorMaterial(1032, 5634); - GlStateManager.disableDepth(); - GlStateManager.depthFunc(513); - GlStateManager.depthMask(true); - GlStateManager.disableBlend(); - GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); - GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); - GL14.glBlendEquation(32774); - GlStateManager.disableFog(); - GL11.glFogi(2917, 2048); - GlStateManager.setFogDensity(1.0F); - GlStateManager.setFogStart(0.0F); - GlStateManager.setFogEnd(1.0F); - GL11.glFog(2918, setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); - if (GLContext.getCapabilities().GL_NV_fog_distance) { - GL11.glFogi(2917, 34140); - } - - GlStateManager.doPolygonOffset(0.0F, 0.0F); - GlStateManager.disableColorLogic(); - GlStateManager.colorLogicOp(5379); - GlStateManager.disableTexGenCoord(GlStateManager.TexGen.S); - GlStateManager.texGen(GlStateManager.TexGen.S, 9216); - GlStateManager.texGen(GlStateManager.TexGen.S, 9474, setColorBuffer(1.0F, 0.0F, 0.0F, 0.0F)); - GlStateManager.texGen(GlStateManager.TexGen.S, 9217, setColorBuffer(1.0F, 0.0F, 0.0F, 0.0F)); - GlStateManager.disableTexGenCoord(GlStateManager.TexGen.T); - GlStateManager.texGen(GlStateManager.TexGen.T, 9216); - GlStateManager.texGen(GlStateManager.TexGen.T, 9474, setColorBuffer(0.0F, 1.0F, 0.0F, 0.0F)); - GlStateManager.texGen(GlStateManager.TexGen.T, 9217, setColorBuffer(0.0F, 1.0F, 0.0F, 0.0F)); - GlStateManager.disableTexGenCoord(GlStateManager.TexGen.R); - GlStateManager.texGen(GlStateManager.TexGen.R, 9216); - GlStateManager.texGen(GlStateManager.TexGen.R, 9474, setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); - GlStateManager.texGen(GlStateManager.TexGen.R, 9217, setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); - GlStateManager.disableTexGenCoord(GlStateManager.TexGen.Q); - GlStateManager.texGen(GlStateManager.TexGen.Q, 9216); - GlStateManager.texGen(GlStateManager.TexGen.Q, 9474, setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); - GlStateManager.texGen(GlStateManager.TexGen.Q, 9217, setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); - GlStateManager.setActiveTexture(0); - GL11.glTexParameteri(3553, 10240, 9729); - GL11.glTexParameteri(3553, 10241, 9986); - GL11.glTexParameteri(3553, 10242, 10497); - GL11.glTexParameteri(3553, 10243, 10497); - GL11.glTexParameteri(3553, 33085, 1000); - GL11.glTexParameteri(3553, 33083, 1000); - GL11.glTexParameteri(3553, 33082, -1000); - GL11.glTexParameterf(3553, 34049, 0.0F); - GL11.glTexEnvi(8960, 8704, 8448); - GL11.glTexEnv(8960, 8705, setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); - GL11.glTexEnvi(8960, 34161, 8448); - GL11.glTexEnvi(8960, 34162, 8448); - GL11.glTexEnvi(8960, 34176, 5890); - GL11.glTexEnvi(8960, 34177, 34168); - GL11.glTexEnvi(8960, 34178, 34166); - GL11.glTexEnvi(8960, 34184, 5890); - GL11.glTexEnvi(8960, 34185, 34168); - GL11.glTexEnvi(8960, 34186, 34166); - GL11.glTexEnvi(8960, 34192, 768); - GL11.glTexEnvi(8960, 34193, 768); - GL11.glTexEnvi(8960, 34194, 770); - GL11.glTexEnvi(8960, 34200, 770); - GL11.glTexEnvi(8960, 34201, 770); - GL11.glTexEnvi(8960, 34202, 770); - GL11.glTexEnvf(8960, 34163, 1.0F); - GL11.glTexEnvf(8960, 3356, 1.0F); - GlStateManager.disableNormalize(); - GlStateManager.shadeModel(7425); - GlStateManager.disableRescaleNormal(); - GlStateManager.colorMask(true, true, true, true); - GlStateManager.clearDepth(1.0D); - GL11.glLineWidth(1.0F); - GL11.glNormal3f(0.0F, 0.0F, 1.0F); - GL11.glPolygonMode(1028, 6914); - GL11.glPolygonMode(1029, 6914); - } - - public void clean() { - } - }, - PLAYER_SKIN { - public void apply() { - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - } - - public void clean() { - GlStateManager.disableBlend(); - } - }, - TRANSPARENT_MODEL { - public void apply() { - GlStateManager.color(1.0F, 1.0F, 1.0F, 0.15F); - GlStateManager.depthMask(false); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - GlStateManager.alphaFunc(516, 0.003921569F); - } - - public void clean() { - GlStateManager.disableBlend(); - GlStateManager.alphaFunc(516, 0.1F); - GlStateManager.depthMask(true); - } - }; - - private Profile() { - } - - public abstract void apply(); - - public abstract void clean(); - } - - @SideOnly(Side.CLIENT) - static class PolygonOffsetState { - public GlStateManager.BooleanState polygonOffsetFill; - public GlStateManager.BooleanState polygonOffsetLine; - public float factor; - public float units; - - private PolygonOffsetState() { - this.polygonOffsetFill = new GlStateManager.BooleanState(32823); - this.polygonOffsetLine = new GlStateManager.BooleanState(10754); - } - } - - @SideOnly(Side.CLIENT) - public static enum LogicOp { - AND(5377), - AND_INVERTED(5380), - AND_REVERSE(5378), - CLEAR(5376), - COPY(5379), - COPY_INVERTED(5388), - EQUIV(5385), - INVERT(5386), - NAND(5390), - NOOP(5381), - NOR(5384), - OR(5383), - OR_INVERTED(5389), - OR_REVERSE(5387), - SET(5391), - XOR(5382); - - public final int opcode; - - private LogicOp(int opcodeIn) { - this.opcode = opcodeIn; - } - } - - @SideOnly(Side.CLIENT) - static class FogState { - public GlStateManager.BooleanState fog; - public int mode; - public float density; - public float start; - public float end; - - private FogState() { - this.fog = new GlStateManager.BooleanState(2912); - this.mode = 2048; - this.density = 1.0F; - this.end = 1.0F; - } - } - - @SideOnly(Side.CLIENT) - public static enum FogMode { - LINEAR(9729), - EXP(2048), - EXP2(2049); - - public final int capabilityId; - - private FogMode(int capabilityIn) { - this.capabilityId = capabilityIn; - } - } - - @SideOnly(Side.CLIENT) - public static enum DestFactor { - CONSTANT_ALPHA(32771), - CONSTANT_COLOR(32769), - DST_ALPHA(772), - DST_COLOR(774), - ONE(1), - ONE_MINUS_CONSTANT_ALPHA(32772), - ONE_MINUS_CONSTANT_COLOR(32770), - ONE_MINUS_DST_ALPHA(773), - ONE_MINUS_DST_COLOR(775), - ONE_MINUS_SRC_ALPHA(771), - ONE_MINUS_SRC_COLOR(769), - SRC_ALPHA(770), - SRC_COLOR(768), - ZERO(0); - - public final int factor; - - private DestFactor(int factorIn) { - this.factor = factorIn; - } - } - - @SideOnly(Side.CLIENT) - static class DepthState { - public GlStateManager.BooleanState depthTest; - public boolean maskEnabled; - public int depthFunc; - - private DepthState() { - this.depthTest = new GlStateManager.BooleanState(2929); - this.maskEnabled = true; - this.depthFunc = 513; - } - } - - @SideOnly(Side.CLIENT) - static class CullState { - public GlStateManager.BooleanState cullFace; - public int mode; - - private CullState() { - this.cullFace = new GlStateManager.BooleanState(2884); - this.mode = 1029; - } - } - - @SideOnly(Side.CLIENT) - public static enum CullFace { - FRONT(1028), - BACK(1029), - FRONT_AND_BACK(1032); - - public final int mode; - - private CullFace(int modeIn) { - this.mode = modeIn; - } - } - - @SideOnly(Side.CLIENT) - static class ColorMaterialState { - public GlStateManager.BooleanState colorMaterial; - public int face; - public int mode; - - private ColorMaterialState() { - this.colorMaterial = new GlStateManager.BooleanState(2903); - this.face = 1032; - this.mode = 5634; - } - } - - @SideOnly(Side.CLIENT) - static class ColorMask { - public boolean red; - public boolean green; - public boolean blue; - public boolean alpha; - - private ColorMask() { - this.red = true; - this.green = true; - this.blue = true; - this.alpha = true; - } - } - - @SideOnly(Side.CLIENT) - static class ColorLogicState { - public GlStateManager.BooleanState colorLogicOp; - public int opcode; - - private ColorLogicState() { - this.colorLogicOp = new GlStateManager.BooleanState(3058); - this.opcode = 5379; - } - } - - @SideOnly(Side.CLIENT) - static class Color { - public float red; - public float green; - public float blue; - public float alpha; - - public Color() { - this(1.0F, 1.0F, 1.0F, 1.0F); - } - - public Color(float redIn, float greenIn, float blueIn, float alphaIn) { - this.red = 1.0F; - this.green = 1.0F; - this.blue = 1.0F; - this.alpha = 1.0F; - this.red = redIn; - this.green = greenIn; - this.blue = blueIn; - this.alpha = alphaIn; - } - } - - @SideOnly(Side.CLIENT) - static class ClearState { - public double depth; - public GlStateManager.Color color; - - private ClearState() { - this.depth = 1.0D; - this.color = new GlStateManager.Color(0.0F, 0.0F, 0.0F, 0.0F); - } - } - - @SideOnly(Side.CLIENT) - static class BooleanState { - private final int capability; - private boolean currentState; - - public BooleanState(int capabilityIn) { - this.capability = capabilityIn; - } - - public void setDisabled() { - this.setState(false); - } - - public void setEnabled() { - this.setState(true); - } - - public void setState(boolean state) { - if (state != this.currentState) { - this.currentState = state; - if (state) { - GL11.glEnable(this.capability); - } else { - GL11.glDisable(this.capability); - } - } - - } - } - - @SideOnly(Side.CLIENT) - static class BlendState { - public GlStateManager.BooleanState blend; - public int srcFactor; - public int dstFactor; - public int srcFactorAlpha; - public int dstFactorAlpha; - - private BlendState() { - this.blend = new GlStateManager.BooleanState(3042); - this.srcFactor = 1; - this.dstFactor = 0; - this.srcFactorAlpha = 1; - this.dstFactorAlpha = 0; - } - } - - @SideOnly(Side.CLIENT) - static class AlphaState { - public GlStateManager.BooleanState alphaTest; - public int func; - public float ref; - - public AlphaState() { - this.alphaTest = new GlStateManager.BooleanState(3008); - this.func = 519; - this.ref = -1.0F; - } - } - - private static FloatBuffer setColorBuffer(float p_74521_0_, float p_74521_1_, float p_74521_2_, float p_74521_3_) - { - colorBuffer.clear(); - colorBuffer.put(p_74521_0_).put(p_74521_1_).put(p_74521_2_).put(p_74521_3_); - colorBuffer.flip(); - /** Float buffer used to set OpenGL material colors */ - return colorBuffer; - } -} diff --git a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java index 22b84e63..c2c0e306 100644 --- a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java +++ b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java @@ -2,6 +2,7 @@ package com.glodblock.github.util; import appeng.api.config.ActionItems; import appeng.api.config.Settings; +import appeng.api.config.Upgrades; import appeng.core.AEConfig; import appeng.core.localization.ButtonToolTips; import appeng.core.localization.GuiText; @@ -23,10 +24,19 @@ public final class ModAndClassUtil { public static boolean isCraftStatus; public static boolean isSearchBar; public static boolean isShiftTooltip; + public static boolean isBigInterface; @SuppressWarnings("all") public static void init() { + try { + Field d = Upgrades.class.getDeclaredField("PATTERN_CAPACITY"); + if (d == null) isBigInterface = false; + isBigInterface = true; + } catch (NoSuchFieldException e) { + isBigInterface = false; + } + try { Field d = GuiText.class.getDeclaredField("HoldShiftForTooltip"); if (d == null) isShiftTooltip = false; diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index 624fbc47..e0f01687 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -15,6 +15,8 @@ public class NameConst { public static final String ITEM_PART_FLUID_PATTERN_TERMINAL = "part_fluid_pattern_terminal"; public static final String ITEM_PART_FLUID_PATTERN_TERMINAL_EX = "part_fluid_pattern_terminal_ex"; public static final String ITEM_PART_FLUID_INTERFACE = "part_fluid_interface"; + public static final String ITEM_PART_FLUID_IMPORT = "part_fluid_import"; + public static final String ITEM_PART_FLUID_EXPORT = "part_fluid_export"; public static final String ITEM_FLUID_PACKET = "fluid_packet"; public static final String ITEM_FLUID_STORAGE = "fluid_storage"; public static final String ITEM_FLUID_PART = "fluid_part"; diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index bd92e5a1..26f2ccae 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -3,6 +3,8 @@ item.fluid_encoded_pattern.name=Encode Pattern item.part_fluid_pattern_terminal.name=ME Fluid Pattern Terminal item.part_fluid_pattern_terminal_ex.name=ME Fluid Processing Pattern Terminal item.part_fluid_interface.name=Fluid Interface +item.part_fluid_import.name=ME Fluid Import Bus +item.part_fluid_export.name=ME Fluid Export Bus item.fluid_packet.name=Fluid Packet item.fluid_storage.1.name=1k ME Fluid Storage Cell item.fluid_storage.4.name=4k ME Fluid Storage Cell diff --git a/src/main/resources/assets/ae2fc/textures/blocks/fluid_export_face.png b/src/main/resources/assets/ae2fc/textures/blocks/fluid_export_face.png new file mode 100644 index 00000000..0e44e295 Binary files /dev/null and b/src/main/resources/assets/ae2fc/textures/blocks/fluid_export_face.png differ diff --git a/src/main/resources/assets/ae2fc/textures/blocks/fluid_import_face.png b/src/main/resources/assets/ae2fc/textures/blocks/fluid_import_face.png new file mode 100644 index 00000000..834cc076 Binary files /dev/null and b/src/main/resources/assets/ae2fc/textures/blocks/fluid_import_face.png differ