From fa542c7d158c547c3667a97c1fb3ce5484fbbdcd Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Fri, 4 Jul 2014 20:59:50 -0500 Subject: [PATCH] Add Upgrade Features to Interface, and add Buttons to Interface and Export Bus o alter crafting behavior. --- client/gui/implementations/GuiInterface.java | 51 ++++++++++++++++--- .../gui/implementations/GuiUpgradeable.java | 12 +++++ client/gui/widgets/GuiImgButton.java | 12 +---- .../implementations/ContainerInterface.java | 46 +++++++++++++---- .../implementations/ContainerUpgradeable.java | 28 +++++++--- core/localization/ButtonToolTips.java | 4 +- helpers/DualityInterface.java | 43 ++++++++++++++-- helpers/IInterfaceHost.java | 3 +- parts/misc/PartInterface.java | 7 +++ tile/misc/TileInterface.java | 7 +++ 10 files changed, 176 insertions(+), 37 deletions(-) diff --git a/client/gui/implementations/GuiInterface.java b/client/gui/implementations/GuiInterface.java index a2506783..27d59778 100644 --- a/client/gui/implementations/GuiInterface.java +++ b/client/gui/implementations/GuiInterface.java @@ -1,29 +1,69 @@ package appeng.client.gui.implementations; +import java.io.IOException; + +import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; -import appeng.client.gui.AEBaseGui; + +import org.lwjgl.input.Mouse; + +import appeng.api.config.Settings; +import appeng.api.config.YesNo; +import appeng.client.gui.widgets.GuiImgButton; import appeng.container.implementations.ContainerInterface; +import appeng.core.AELog; import appeng.core.localization.GuiText; +import appeng.core.sync.network.NetworkHandler; +import appeng.core.sync.packets.PacketConfigButton; import appeng.helpers.IInterfaceHost; -public class GuiInterface extends AEBaseGui +public class GuiInterface extends GuiUpgradeable { + GuiImgButton BlockMode; + public GuiInterface(InventoryPlayer inventoryPlayer, IInterfaceHost te) { super( new ContainerInterface( inventoryPlayer, te ) ); this.ySize = 211; } @Override - public void drawBG(int offsetX, int offsetY, int mouseX, int mouseY) + protected void actionPerformed(GuiButton btn) { - bindTexture( "guis/interface.png" ); - this.drawTexturedModalRect( offsetX, offsetY, 0, 0, xSize, ySize ); + super.actionPerformed( btn ); + + boolean backwards = Mouse.isButtonDown( 1 ); + + try + { + if ( btn == BlockMode ) + NetworkHandler.instance.sendToServer( new PacketConfigButton( BlockMode.getSetting(), backwards ) ); + + } + catch (IOException e) + { + AELog.error( e ); + } + } + + @Override + protected void addButtons() + { + BlockMode = new GuiImgButton( this.guiLeft - 18, guiTop + 8, Settings.BLOCK, YesNo.NO ); + buttonList.add( BlockMode ); + } + + protected String getBackground() + { + return "guis/interface.png"; } @Override public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) { + if ( BlockMode != null ) + BlockMode.set( ((ContainerInterface) cvb).bMode ); + fontRendererObj.drawString( getGuiDisplayName( GuiText.Interface.getLocal() ), 8, 6, 4210752 ); fontRendererObj.drawString( GuiText.Config.getLocal(), 18, 6 + 11 + 7, 4210752 ); @@ -32,5 +72,4 @@ public class GuiInterface extends AEBaseGui fontRendererObj.drawString( GuiText.inventory.getLocal(), 8, ySize - 96 + 3, 4210752 ); } - } diff --git a/client/gui/implementations/GuiUpgradeable.java b/client/gui/implementations/GuiUpgradeable.java index 4c8429d1..e0edfb61 100644 --- a/client/gui/implementations/GuiUpgradeable.java +++ b/client/gui/implementations/GuiUpgradeable.java @@ -11,6 +11,7 @@ import appeng.api.config.FuzzyMode; import appeng.api.config.RedstoneMode; import appeng.api.config.Settings; import appeng.api.config.Upgrades; +import appeng.api.config.YesNo; import appeng.api.implementations.IUpgradeableHost; import appeng.client.gui.AEBaseGui; import appeng.client.gui.widgets.GuiImgButton; @@ -29,6 +30,7 @@ public class GuiUpgradeable extends AEBaseGui GuiImgButton redstoneMode; GuiImgButton fuzzyMode; + GuiImgButton craftMode; public GuiUpgradeable(InventoryPlayer inventoryPlayer, IUpgradeableHost te) { this( new ContainerUpgradeable( inventoryPlayer, te ) ); @@ -54,7 +56,9 @@ public class GuiUpgradeable extends AEBaseGui { redstoneMode = new GuiImgButton( this.guiLeft - 18, guiTop + 8, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE ); fuzzyMode = new GuiImgButton( this.guiLeft - 18, guiTop + 28, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); + craftMode = new GuiImgButton( this.guiLeft - 18, guiTop + 48, Settings.CRAFT_ONLY, YesNo.NO ); + buttonList.add( craftMode ); buttonList.add( redstoneMode ); buttonList.add( fuzzyMode ); } @@ -71,6 +75,9 @@ public class GuiUpgradeable extends AEBaseGui if ( btn == redstoneMode ) NetworkHandler.instance.sendToServer( new PacketConfigButton( redstoneMode.getSetting(), backwards ) ); + if ( btn == craftMode ) + NetworkHandler.instance.sendToServer( new PacketConfigButton( craftMode.getSetting(), backwards ) ); + if ( btn == fuzzyMode ) NetworkHandler.instance.sendToServer( new PacketConfigButton( fuzzyMode.getSetting(), backwards ) ); @@ -115,6 +122,8 @@ public class GuiUpgradeable extends AEBaseGui redstoneMode.setVisibility( bc.getInstalledUpgrades( Upgrades.REDSTONE ) > 0 ); if ( fuzzyMode != null ) fuzzyMode.setVisibility( bc.getInstalledUpgrades( Upgrades.FUZZY ) > 0 ); + if ( craftMode != null ) + craftMode.setVisibility( bc.getInstalledUpgrades( Upgrades.CRAFTING ) > 0 ); } @Override @@ -128,6 +137,9 @@ public class GuiUpgradeable extends AEBaseGui if ( fuzzyMode != null ) fuzzyMode.set( cvb.fzMode ); + + if ( craftMode != null ) + craftMode.set( cvb.cMode ); } protected GuiText getName() diff --git a/client/gui/widgets/GuiImgButton.java b/client/gui/widgets/GuiImgButton.java index 93783d92..8549dedc 100644 --- a/client/gui/widgets/GuiImgButton.java +++ b/client/gui/widgets/GuiImgButton.java @@ -148,11 +148,6 @@ public class GuiImgButton extends GuiButton implements ITooltip registerApp( 64, Settings.SORT_BY, SortOrder.NAME, ButtonToolTips.SortBy, ButtonToolTips.ItemName ); registerApp( 65, Settings.SORT_BY, SortOrder.AMOUNT, ButtonToolTips.SortBy, ButtonToolTips.NumberOfItems ); registerApp( 68, Settings.SORT_BY, SortOrder.INVTWEAKS, ButtonToolTips.SortBy, ButtonToolTips.InventoryTweaks ); - // registerApp( 66, Settings.SORT_BY, SortOrder.PRIORITY, - // "AppEng.GuiITooltip.SortBy", - // "AppEng.GuiITooltip.PriorityCellOrder" ); - // registerApp( 68, Settings.SORT_BY, SortOrder.MOD, - // ButtonToolTips.SortBy, ButtonToolTips.ItemID ); registerApp( 66, Settings.ACTIONS, ActionItems.WRENCH, ButtonToolTips.PartitionStorage, ButtonToolTips.PartitionStorageHint ); registerApp( 6, Settings.ACTIONS, ActionItems.CLOSE, ButtonToolTips.Clear, ButtonToolTips.ClearSettings ); @@ -175,14 +170,11 @@ public class GuiImgButton extends GuiButton implements ITooltip registerApp( 81, Settings.FULLNESS_MODE, FullnessMode.HALF, ButtonToolTips.OperationMode, ButtonToolTips.MoveWhenWorkIsDone ); registerApp( 82, Settings.FULLNESS_MODE, FullnessMode.FULL, ButtonToolTips.OperationMode, ButtonToolTips.MoveWhenFull ); - registerApp( 16 * 8 + 0, Settings.TRASH_CATCH, YesNo.YES, ButtonToolTips.TrashController, ButtonToolTips.Disabled ); - registerApp( 16 * 8 + 1, Settings.TRASH_CATCH, YesNo.NO, ButtonToolTips.TrashController, ButtonToolTips.Enable ); - registerApp( 16 * 1 + 5, Settings.BLOCK, YesNo.YES, ButtonToolTips.InterfaceBlockingMode, ButtonToolTips.Blocking ); registerApp( 16 * 1 + 4, Settings.BLOCK, YesNo.NO, ButtonToolTips.InterfaceBlockingMode, ButtonToolTips.NonBlocking ); - registerApp( 19, Settings.CRAFT, YesNo.YES, ButtonToolTips.InterfaceCraftingMode, ButtonToolTips.Craft ); - registerApp( 17, Settings.CRAFT, YesNo.NO, ButtonToolTips.InterfaceCraftingMode, ButtonToolTips.DontCraft ); + registerApp( 16 * 1 + 3, Settings.CRAFT_ONLY, YesNo.YES, ButtonToolTips.Craft, ButtonToolTips.CraftOnly ); + registerApp( 16 * 1 + 2, Settings.CRAFT_ONLY, YesNo.NO, ButtonToolTips.Craft, ButtonToolTips.CraftEither ); } } diff --git a/container/implementations/ContainerInterface.java b/container/implementations/ContainerInterface.java index b14988ca..65e55288 100644 --- a/container/implementations/ContainerInterface.java +++ b/container/implementations/ContainerInterface.java @@ -2,7 +2,10 @@ package appeng.container.implementations; import net.minecraft.entity.player.InventoryPlayer; import appeng.api.config.SecurityPermissions; -import appeng.container.AEBaseContainer; +import appeng.api.config.Settings; +import appeng.api.config.YesNo; +import appeng.api.util.IConfigManager; +import appeng.container.guisync.GuiSync; import appeng.container.slot.SlotFake; import appeng.container.slot.SlotNormal; import appeng.container.slot.SlotRestrictedInput; @@ -10,25 +13,50 @@ import appeng.container.slot.SlotRestrictedInput.PlaceableItemType; import appeng.helpers.DualityInterface; import appeng.helpers.IInterfaceHost; -public class ContainerInterface extends AEBaseContainer +public class ContainerInterface extends ContainerUpgradeable { - DualityInterface myte; + DualityInterface myDuality; + + @GuiSync(3) + public YesNo bMode = YesNo.NO; public ContainerInterface(InventoryPlayer ip, IInterfaceHost te) { - super( ip, te.getInterfaceDuality().getTile(), te.getInterfaceDuality().getPart() ); - myte = te.getInterfaceDuality(); + super( ip, te.getInterfaceDuality().getHost() ); + + myDuality = te.getInterfaceDuality(); for (int x = 0; x < 9; x++) - addSlotToContainer( new SlotRestrictedInput( PlaceableItemType.ENCODED_PATTERN, myte.getPatterns(), x, 8 + 18 * x, 90 + 7 ) ); + addSlotToContainer( new SlotRestrictedInput( PlaceableItemType.ENCODED_PATTERN, myDuality.getPatterns(), x, 8 + 18 * x, 90 + 7 ) ); for (int x = 0; x < 8; x++) - addSlotToContainer( new SlotFake( myte.getConfig(), x, 17 + 18 * x, 35 ) ); + addSlotToContainer( new SlotFake( myDuality.getConfig(), x, 17 + 18 * x, 35 ) ); for (int x = 0; x < 8; x++) - addSlotToContainer( new SlotNormal( myte.getStorage(), x, 17 + 18 * x, 35 + 18 ) ); + addSlotToContainer( new SlotNormal( myDuality.getStorage(), x, 17 + 18 * x, 35 + 18 ) ); - bindPlayerInventory( ip, 0, 211 - /* height of playerinventory */82 ); + } + + @Override + protected int getHeight() + { + return 211; + } + + @Override + protected void setupConfig() + { + setupUpgrades(); + } + + protected void loadSettingsFromHost(IConfigManager cm) + { + this.bMode = (YesNo) cm.getSetting( Settings.BLOCK ); + } + + public int availableUpgrades() + { + return 1; } @Override diff --git a/container/implementations/ContainerUpgradeable.java b/container/implementations/ContainerUpgradeable.java index 4e25514b..6e571290 100644 --- a/container/implementations/ContainerUpgradeable.java +++ b/container/implementations/ContainerUpgradeable.java @@ -10,8 +10,10 @@ import appeng.api.config.RedstoneMode; import appeng.api.config.SecurityPermissions; import appeng.api.config.Settings; import appeng.api.config.Upgrades; +import appeng.api.config.YesNo; import appeng.api.implementations.IUpgradeableHost; import appeng.api.parts.IPart; +import appeng.api.util.IConfigManager; import appeng.container.AEBaseContainer; import appeng.container.guisync.GuiSync; import appeng.container.slot.IOptionalSlotHost; @@ -84,11 +86,8 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl bindPlayerInventory( ip, 0, getHeight() - /* height of playerinventory */82 ); } - protected void setupConfig() + protected void setupUpgrades() { - int x = 80; - int y = 40; - IInventory upgrades = myte.getInventoryByName( "upgrades" ); if ( availableUpgrades() > 0 ) addSlotToContainer( (new SlotRestrictedInput( PlaceableItemType.UPGRADES, upgrades, 0, 187, 8 + 18 * 0 )).setNotDraggable() ); @@ -98,6 +97,13 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl addSlotToContainer( (new SlotRestrictedInput( PlaceableItemType.UPGRADES, upgrades, 2, 187, 8 + 18 * 2 )).setNotDraggable() ); if ( availableUpgrades() > 3 ) addSlotToContainer( (new SlotRestrictedInput( PlaceableItemType.UPGRADES, upgrades, 3, 187, 8 + 18 * 3 )).setNotDraggable() ); + } + + protected void setupConfig() + { + int x = 80; + int y = 40; + setupUpgrades(); IInventory inv = myte.getInventoryByName( "config" ); addSlotToContainer( new SlotFakeTypeOnly( inv, 0, x, y ) ); @@ -137,6 +143,9 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl @GuiSync(1) public FuzzyMode fzMode = FuzzyMode.IGNORE_ALL; + @GuiSync(2) + public YesNo cMode = YesNo.NO; + public void checkToolbox() { if ( hasToolbox() ) @@ -165,8 +174,8 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl if ( Platform.isServer() ) { - this.fzMode = (FuzzyMode) this.myte.getConfigManager().getSetting( Settings.FUZZY_MODE ); - this.rsMode = (RedstoneMode) this.myte.getConfigManager().getSetting( Settings.REDSTONE_CONTROLLED ); + IConfigManager cm = this.myte.getConfigManager(); + loadSettingsFromHost( cm ); } checkToolbox(); @@ -184,6 +193,13 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl standardDetectAndSendChanges(); } + protected void loadSettingsFromHost(IConfigManager cm) + { + this.fzMode = (FuzzyMode) cm.getSetting( Settings.FUZZY_MODE ); + this.cMode = (YesNo) cm.getSetting( Settings.CRAFT_ONLY ); + this.rsMode = (RedstoneMode) cm.getSetting( Settings.REDSTONE_CONTROLLED ); + } + protected void standardDetectAndSendChanges() { super.detectAndSendChanges(); diff --git a/core/localization/ButtonToolTips.java b/core/localization/ButtonToolTips.java index 00ded252..83b63301 100644 --- a/core/localization/ButtonToolTips.java +++ b/core/localization/ButtonToolTips.java @@ -30,11 +30,11 @@ public enum ButtonToolTips MoveWhenEmpty, MoveWhenWorkIsDone, MoveWhenFull, Disabled, Enable, - Blocking, NonBlocking, Craft, DontCraft, + Blocking, NonBlocking, LevelType, LevelType_Energy, LevelType_Item, InventoryTweaks, TerminalStyle, TerminalStyle_Full, TerminalStyle_Tall, TerminalStyle_Small, - Stash, StashDesc, Encode, EncodeDescription, Substitutions, SubstitutionsOn, SubstitutionsOff, SubstitutionsDesc; + Stash, StashDesc, Encode, EncodeDescription, Substitutions, SubstitutionsOn, SubstitutionsOff, SubstitutionsDesc, CraftOnly, CraftEither, Craft; String root; diff --git a/helpers/DualityInterface.java b/helpers/DualityInterface.java index 973cac2a..3a9841d5 100644 --- a/helpers/DualityInterface.java +++ b/helpers/DualityInterface.java @@ -15,7 +15,11 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import appeng.api.AEApi; import appeng.api.config.Actionable; +import appeng.api.config.Settings; +import appeng.api.config.Upgrades; +import appeng.api.config.YesNo; import appeng.api.implementations.ICraftingPatternItem; +import appeng.api.implementations.IUpgradeableHost; import appeng.api.implementations.tiles.ICraftingMachine; import appeng.api.implementations.tiles.ISegmentedInventory; import appeng.api.networking.GridFlags; @@ -46,6 +50,7 @@ import appeng.me.helpers.AENetworkProxy; import appeng.me.storage.MEMonitorIInventory; import appeng.me.storage.MEMonitorPassthu; import appeng.me.storage.NullInventory; +import appeng.parts.automation.UpgradeInventory; import appeng.tile.inventory.AppEngInternalAEInventory; import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.IAEAppEngInventory; @@ -59,7 +64,7 @@ import appeng.util.inv.IInventoryDestination; import appeng.util.inv.WrapperInvSlot; public class DualityInterface implements IGridTickable, ISegmentedInventory, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory, - IConfigureableObject, IConfigManagerHost, ICraftingProvider + IConfigureableObject, IConfigManagerHost, ICraftingProvider, IUpgradeableHost { final int sides[] = new int[] { 0, 1, 2, 3, 4, 5, 6, 7 }; @@ -74,6 +79,16 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt List craftingList = null; List waitingToSend = null; + private UpgradeInventory upgrades; + + @Override + public int getInstalledUpgrades(Upgrades u) + { + if ( upgrades == null ) + return 0; + return upgrades.getInstalledUpgrades( u ); + } + public boolean hasItemsToSend() { return waitingToSend != null && !waitingToSend.isEmpty(); @@ -167,6 +182,9 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt gridProxy = prox; gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL ); + upgrades = new UpgradeInventory( gridProxy.getMachineRepresentation(), this, 1 ); + cm.registerSetting( Settings.BLOCK, YesNo.NO ); + iHost = ih; mySrc = fluids.changeSource = items.changeSource = new MachineSource( iHost ); } @@ -595,6 +613,9 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt if ( name.equals( "config" ) ) return config; + if ( name.equals( "upgrades" ) ) + return upgrades; + return null; } @@ -603,6 +624,7 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt return storage; } + @Override public TileEntity getTile() { return (TileEntity) (iHost instanceof TileEntity ? iHost : null); @@ -620,6 +642,12 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt @Override public void updateSetting(IConfigManager manager, Enum settingName, Enum newValue) + { + if ( getInstalledUpgrades( Upgrades.CRAFTING ) == 0 ) + cancelCrafting(); + } + + private void cancelCrafting() { // TODO Auto-generated method stub @@ -683,7 +711,7 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt private boolean isBlocking() { - return true; + return cm.getSetting( Settings.BLOCK ) == YesNo.YES; } @Override @@ -802,8 +830,17 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt TileEntity te = iHost.getTileEntity(); if ( te != null && te.getWorldObj() != null ) { - te.getWorldObj().notifyBlocksOfNeighborChange( te.xCoord, te.yCoord, te.zCoord, Platform.air ); + // te.getWorldObj().notifyBlocksOfNeighborChange( te.xCoord, te.yCoord, te.zCoord, Platform.air ); } } + public IUpgradeableHost getHost() + { + if ( getPart() instanceof IUpgradeableHost ) + return (IUpgradeableHost) getPart(); + if ( getTile() instanceof IUpgradeableHost ) + return (IUpgradeableHost) getTile(); + return null; + } + } diff --git a/helpers/IInterfaceHost.java b/helpers/IInterfaceHost.java index 0924296a..f262ed25 100644 --- a/helpers/IInterfaceHost.java +++ b/helpers/IInterfaceHost.java @@ -4,10 +4,11 @@ import java.util.EnumSet; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; +import appeng.api.implementations.IUpgradeableHost; import appeng.api.networking.crafting.ICraftingProvider; import appeng.api.networking.security.IActionHost; -public interface IInterfaceHost extends IActionHost, ICraftingProvider +public interface IInterfaceHost extends IActionHost, ICraftingProvider, IUpgradeableHost { DualityInterface getInterfaceDuality(); diff --git a/parts/misc/PartInterface.java b/parts/misc/PartInterface.java index ce4f91b0..a05a6c3e 100644 --- a/parts/misc/PartInterface.java +++ b/parts/misc/PartInterface.java @@ -14,6 +14,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; +import appeng.api.config.Upgrades; import appeng.api.implementations.tiles.ISegmentedInventory; import appeng.api.implementations.tiles.ITileStorageMonitorable; import appeng.api.networking.IGridNode; @@ -354,4 +355,10 @@ public class PartInterface extends PartBasicState implements IGridTickable, ISeg return duality.isBusy(); } + @Override + public int getInstalledUpgrades(Upgrades u) + { + return duality.getInstalledUpgrades( u ); + } + } diff --git a/tile/misc/TileInterface.java b/tile/misc/TileInterface.java index 96478e7f..712686ed 100644 --- a/tile/misc/TileInterface.java +++ b/tile/misc/TileInterface.java @@ -10,6 +10,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import appeng.api.config.Upgrades; import appeng.api.implementations.tiles.ISegmentedInventory; import appeng.api.implementations.tiles.ITileStorageMonitorable; import appeng.api.networking.IGridNode; @@ -255,4 +256,10 @@ public class TileInterface extends AENetworkInvTile implements IGridTickable, IS return duality.isBusy(); } + @Override + public int getInstalledUpgrades(Upgrades u) + { + return duality.getInstalledUpgrades( u ); + } + }