From cdcae974e247e0c4f6e9ce38498c26fc7f0a510d Mon Sep 17 00:00:00 2001 From: yueh Date: Thu, 25 Sep 2014 22:30:19 +0200 Subject: [PATCH] Changed Inscriber to be upgradable with Cards Supports up to 3 cards Currently max 3 Acceleration Cards, each reducing the crafting time by 25% --- .../gui/implementations/GuiInscriber.java | 22 +++++- .../implementations/ContainerInscriber.java | 64 +++++++++++----- src/main/java/appeng/core/Registration.java | 3 + .../java/appeng/tile/misc/TileInscriber.java | 72 +++++++++++++++--- .../textures/guis/inscriber.png | Bin 3238 -> 2423 bytes 5 files changed, 132 insertions(+), 29 deletions(-) diff --git a/src/main/java/appeng/client/gui/implementations/GuiInscriber.java b/src/main/java/appeng/client/gui/implementations/GuiInscriber.java index 521439460..f2c39e6d3 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiInscriber.java +++ b/src/main/java/appeng/client/gui/implementations/GuiInscriber.java @@ -5,6 +5,7 @@ import appeng.client.gui.AEBaseGui; import appeng.client.gui.widgets.GuiProgressBar; import appeng.client.gui.widgets.GuiProgressBar.Direction; import appeng.container.implementations.ContainerInscriber; +import appeng.container.implementations.ContainerUpgradeable; import appeng.core.localization.GuiText; import appeng.tile.misc.TileInscriber; @@ -18,6 +19,7 @@ public class GuiInscriber extends AEBaseGui super( new ContainerInscriber( inventoryPlayer, te ) ); cvc = (ContainerInscriber) inventorySlots; this.ySize = 176; + this.xSize = hasToolbox() ? 246 : 211; } @Override @@ -25,7 +27,7 @@ public class GuiInscriber extends AEBaseGui { super.initGui(); - pb = new GuiProgressBar( "guis/inscriber.png", 135, 39, 179, 39, 6, 18, Direction.VERTICAL ); + pb = new GuiProgressBar( "guis/inscriber.png", 135, 39, 135, 177, 6, 18, Direction.VERTICAL ); this.buttonList.add( pb ); } @@ -35,7 +37,13 @@ public class GuiInscriber extends AEBaseGui bindTexture( "guis/inscriber.png" ); pb.xPosition = 135 + guiLeft; pb.yPosition = 39 + guiTop; - this.drawTexturedModalRect( offsetX, offsetY, 0, 0, xSize, ySize ); + + this.drawTexturedModalRect( offsetX, offsetY, 0, 0, 211 - 34, ySize ); + + if ( drawUpgrades() ) + this.drawTexturedModalRect( offsetX + 177, offsetY, 177, 0, 35, 14 + cvc.availableUpgrades() * 18 ); + if ( hasToolbox() ) + this.drawTexturedModalRect( offsetX + 178, offsetY + ySize - 90, 178, ySize - 90, 68, 68 ); } @Override @@ -49,4 +57,14 @@ public class GuiInscriber extends AEBaseGui fontRendererObj.drawString( GuiText.inventory.getLocal(), 8, ySize - 96 + 3, 4210752 ); } + protected boolean drawUpgrades() + { + return true; + } + + protected boolean hasToolbox() + { + return ((ContainerUpgradeable) inventorySlots).hasToolbox(); + } + } diff --git a/src/main/java/appeng/container/implementations/ContainerInscriber.java b/src/main/java/appeng/container/implementations/ContainerInscriber.java index 08fbec554..afd6958d5 100644 --- a/src/main/java/appeng/container/implementations/ContainerInscriber.java +++ b/src/main/java/appeng/container/implementations/ContainerInscriber.java @@ -4,7 +4,6 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import appeng.api.AEApi; -import appeng.container.AEBaseContainer; import appeng.container.guisync.GuiSync; import appeng.container.slot.SlotOutput; import appeng.container.slot.SlotRestrictedInput; @@ -13,38 +12,67 @@ import appeng.recipes.handlers.Inscribe.InscriberRecipe; import appeng.tile.misc.TileInscriber; import appeng.util.Platform; -public class ContainerInscriber extends AEBaseContainer +public class ContainerInscriber extends ContainerUpgradeable { - TileInscriber myte; + TileInscriber ti; Slot top; Slot middle; Slot bottom; - @GuiSync(0) + @GuiSync(2) public int maxProcessingTime = -1; - @GuiSync(1) + @GuiSync(3) public int processingTime = -1; - public ContainerInscriber(InventoryPlayer ip, TileInscriber te) { - super( ip, te, null ); - myte = te; + public ContainerInscriber(InventoryPlayer ip, TileInscriber te) + { + super( ip, te ); + ti = te; - addSlotToContainer( top = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.INSCRIBER_PLATE, myte, 0, 45, 16, invPlayer ) ); - addSlotToContainer( bottom = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.INSCRIBER_PLATE, myte, 1, 45, 62, invPlayer ) ); - addSlotToContainer( middle = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.INSCRIBER_INPUT, myte, 2, 63, 39, invPlayer ) ); + addSlotToContainer( top = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.INSCRIBER_PLATE, ti, 0, 45, 16, invPlayer ) ); + addSlotToContainer( bottom = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.INSCRIBER_PLATE, ti, 1, 45, 62, invPlayer ) ); + addSlotToContainer( middle = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.INSCRIBER_INPUT, ti, 2, 63, 39, invPlayer ) ); - addSlotToContainer( new SlotOutput( myte, 3, 113, 40, -1 ) ); + addSlotToContainer( new SlotOutput( ti, 3, 113, 40, -1 ) ); - bindPlayerInventory( ip, 0, 176 - /* height of playerinventory */82 ); + bindPlayerInventory( ip, 0, getHeight() - /* height of playerinventory */82 ); + + } + + @Override + protected int getHeight() + { + return 176; + } + + @Override + public int availableUpgrades() + { + return 3; + } + + @Override + protected boolean supportCapacity() + { + return false; + } + + @Override + /** + * Overridden super.setupConfig to prevent setting up the fake slots + */ + protected void setupConfig() + { + setupUpgrades(); } public boolean isValidForSlot(Slot s, ItemStack is) { - ItemStack PlateA = myte.getStackInSlot( 0 ); - ItemStack PlateB = myte.getStackInSlot( 1 ); + ItemStack PlateA = ti.getStackInSlot( 0 ); + ItemStack PlateB = ti.getStackInSlot( 1 ); if ( s == middle ) { @@ -120,12 +148,12 @@ public class ContainerInscriber extends AEBaseContainer @Override public void detectAndSendChanges() { - super.detectAndSendChanges(); + standardDetectAndSendChanges(); if ( Platform.isServer() ) { - this.maxProcessingTime = myte.maxProcessingTime; - this.processingTime = myte.processingTime; + this.maxProcessingTime = ti.maxProcessingTime; + this.processingTime = ti.processingTime; } } } diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index 2a8a449fa..9aadddc40 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -660,6 +660,9 @@ public class Registration // Molecular Assembler Upgrades.SPEED.registerItem( AEApi.instance().blocks().blockMolecularAssembler.stack( 1 ), 5 ); + // Inscriber + Upgrades.SPEED.registerItem( AEApi.instance().blocks().blockInscriber.stack( 1 ), 3 ); + AEApi.instance().registries().wireless().registerWirelessHandler( (IWirelessTermHandler) AEApi.instance().items().itemWirelessTerminal.item() ); if ( AEConfig.instance.isFeatureEnabled( AEFeature.ChestLoot ) ) diff --git a/src/main/java/appeng/tile/misc/TileInscriber.java b/src/main/java/appeng/tile/misc/TileInscriber.java index 2af259bce..041098e99 100644 --- a/src/main/java/appeng/tile/misc/TileInscriber.java +++ b/src/main/java/appeng/tile/misc/TileInscriber.java @@ -12,6 +12,8 @@ import net.minecraftforge.common.util.ForgeDirection; import appeng.api.AEApi; import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; +import appeng.api.config.Upgrades; +import appeng.api.implementations.IUpgradeableHost; import appeng.api.networking.IGridNode; import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.energy.IEnergySource; @@ -19,8 +21,10 @@ import appeng.api.networking.ticking.IGridTickable; import appeng.api.networking.ticking.TickRateModulation; import appeng.api.networking.ticking.TickingRequest; import appeng.api.util.AECableType; +import appeng.api.util.IConfigManager; import appeng.core.settings.TickRates; import appeng.me.GridAccessException; +import appeng.parts.automation.UpgradeInventory; import appeng.recipes.handlers.Inscribe; import appeng.recipes.handlers.Inscribe.InscriberRecipe; import appeng.tile.TileEvent; @@ -28,12 +32,14 @@ import appeng.tile.events.TileEventType; import appeng.tile.grid.AENetworkPowerTile; import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.InvOperation; +import appeng.util.ConfigManager; +import appeng.util.IConfigManagerHost; import appeng.util.InventoryAdaptor; import appeng.util.Platform; import appeng.util.inv.WrapperInventoryRange; import appeng.util.item.AEItemStack; -public class TileInscriber extends AENetworkPowerTile implements IGridTickable +public class TileInscriber extends AENetworkPowerTile implements IGridTickable, IUpgradeableHost, IConfigManagerHost { final int top[] = new int[] { 0 }; @@ -51,6 +57,10 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable public long clientStart; + static final ItemStack inscriberStack = AEApi.instance().blocks().blockInscriber.stack( 1 ); + private IConfigManager settings = new ConfigManager( this ); + private UpgradeInventory upgrades = new UpgradeInventory( inscriberStack, this, getUpgradeSlots() ); + @Override public AECableType getCableConnectionType(ForgeDirection dir) { @@ -61,12 +71,16 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable public void writeToNBT_TileInscriber(NBTTagCompound data) { inv.writeToNBT( data, "inscriberInv" ); + upgrades.writeToNBT( data, "upgrades" ); + settings.writeToNBT( data ); } @TileEvent(TileEventType.WORLD_NBT_READ) public void readFromNBT_TileInscriber(NBTTagCompound data) { inv.readFromNBT( data, "inscriberInv" ); + upgrades.readFromNBT( data, "upgrades" ); + settings.readFromNBT( data ); } @TileEvent(TileEventType.NETWORK_READ) @@ -122,7 +136,8 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable return true; } - public TileInscriber() { + public TileInscriber() + { gridProxy.setValidSides( EnumSet.noneOf( ForgeDirection.class ) ); internalMaxPower = 1500; gridProxy.setIdlePowerUsage( 0 ); @@ -314,6 +329,7 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable { if ( smash ) { + finalStep++; if ( finalStep == 8 ) { @@ -354,22 +370,26 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable eg = gridProxy.getEnergy(); IEnergySource src = this; - double powerReq = extractAEPower( 10, Actionable.SIMULATE, PowerMultiplier.CONFIG ); + // Base 1, increase by 1 for each card + int speedFactor = 1 + upgrades.getInstalledUpgrades( Upgrades.SPEED ); + int powerConsumption = 10 * speedFactor; + double powerThreshold = powerConsumption - 0.01; + double powerReq = extractAEPower( powerConsumption, Actionable.SIMULATE, PowerMultiplier.CONFIG ); - if ( powerReq <= 9.99 ) + if ( powerReq <= powerThreshold ) { src = eg; - powerReq = eg.extractAEPower( 10, Actionable.SIMULATE, PowerMultiplier.CONFIG ); + powerReq = eg.extractAEPower( powerConsumption, Actionable.SIMULATE, PowerMultiplier.CONFIG ); } - if ( powerReq > 9.99 ) + if ( powerReq > powerThreshold ) { - src.extractAEPower( 10, Actionable.MODULATE, PowerMultiplier.CONFIG ); + src.extractAEPower( powerConsumption, Actionable.MODULATE, PowerMultiplier.CONFIG ); if ( processingTime == 0 ) - processingTime++; + processingTime = processingTime + speedFactor; else - processingTime += TicksSinceLastCall; + processingTime += TicksSinceLastCall * speedFactor; } } catch (GridAccessException e) @@ -397,4 +417,38 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable return hasWork() ? TickRateModulation.URGENT : TickRateModulation.SLEEP; } + + @Override + public IConfigManager getConfigManager() + { + return settings; + } + + @Override + public IInventory getInventoryByName(String name) + { + if ( name.equals( "inv" ) ) + return inv; + + if ( name.equals( "upgrades" ) ) + return upgrades; + + return null; + } + + @Override + public int getInstalledUpgrades(Upgrades u) + { + return upgrades.getInstalledUpgrades( u ); + } + + protected int getUpgradeSlots() + { + return 3; + } + + @Override + public void updateSetting(IConfigManager manager, Enum settingName, Enum newValue) + { + } } diff --git a/src/main/resources/assets/appliedenergistics2/textures/guis/inscriber.png b/src/main/resources/assets/appliedenergistics2/textures/guis/inscriber.png index cbce61695312ea74aaf85ee3430bf460962df308..67c88610f73d5b6e6e287c342f8daf49e326b56d 100644 GIT binary patch literal 2423 zcmeAS@N?(olHy`uVBq!ia0y~yU}OMc4rT@hhU_&FAq)%*Ea{HEjtmSN`?>!lvNA9* zGX(gAxH2#>n46o2goK2KhUWce=;UPB%*}9_kKvgj!w(aN|JDru?HT@uF#IoNSo5FZ z|0IV0ix~cIWjOqw;r}&;m;V|5|7Ym#?ml+x*#H0k8Aicq2n@9lIL&c*9Vnxe1o;L3 zAK8E*_&d8Q0|NtRfk$L90|Vb~5N167Cv*`g03@mp&T^vIy;@-}AS$4}nz%BDK%Pgmxn(zNFx^jBCVTJRFNjir2 z{~AYhBtAQKdt!0KoxJXv9gI2O8YQpk3dvcT;?zuEM(E?Z0P9a~noX*MuvEO>WDh-(1@ z*9P&1*SXH6PkT?iVfx_P^w<5b1EYuoW9nHE2gavvLQDeQ2I?9wIe%ydFg#;<>Udyj z6zjg_Gn4w4J10!DUEmw)l)_k%EXSzfw8BkOVH3k14VEhjX$nDim`^?9J-EJAlWT{u zz`r;JPsSvLLwhgWVfwXxkAcABxPm-J=PT-tIV~!ojIE6tf0t`7FlZ28{Ge}b_u9QB ztT!%d-b{#QVpUOR*j;e=#koIyOdsw#P0YD*u%qGmH!mYWgB!`S~ADF;+zS?2-EAPt!1_=i?Gt@+^a1#~`ka*!Zxgk!2VY1Z+feLHJ zTmDUjdd)vJOz3N{Fn4;%CGjf0pJC5U$8Lr_*PrsT^5{(A|Io%1m+W&OxLP$|=RjWx zE6@BN?<(UNpI(3bR3cydz_*JL-=}0AXi2x>nDMy2<<=G7^IrgRfa3Sjh*PAu0X>3e)bx+x`ckW>inZoqJNMqS<)~dIU zxBfF04VYrj%@m<2Q5 zD0}?SXVP+p94jYAkqgQU{C}kNI(UuyJzh@Mnx?}h*r3YyaMrDkDRwK9P9`m2040(F zfAL}$ujL^2_b%1$MvzS!2W(@{2x`t{(okq=c(?ff6}Kf{JVm|5n%^+y%3RMCklxb^ zHBpX9#DP)d!92ZZ9aH>3iR+!Hw-_@k$P*3KyJjc{S%KI)!gV5f+!}8G@;W1^SsQe8 z(ouzK2kGOb(nr|xm4kjQ0omIQ@;B>_<=vJ_OM@9$0~)H2PC5!sujs}%3qIJkPpH_% zYktVa6hjHd$^!iZvRn%o?lQ^MmtWyHuqw0p@h#n?=Is-AecSZqqx{sZ3;h|^2{%1H zs&&UhIpK?YYVMBL_Wq2nS0}G1YOrCgXaW1V0Zb~yJly973g!kTCa!|$lhW+h_J-0R-epwQx`=G>5K9t)+zQ6h^Q{V5uep?&<=4}tvP1t@nFNFI> zo>}%)CbQRHw`VcFw!g1^m8ouhnD^=l=& z%jFQl&8o1fl}X^L6Jtl#LI#(u0St?xG#CPPMH*I!(Ly>XZ~Om{{mpxf6J^>#HJqob KpUXO@geCysf>L1s literal 3238 zcmeAS@N?(olHy`uVBq!ia0y~yU}OMc4mJh`hM1xiX$%YuEa{HEjtmSN`?>!lvNA9* za29w(7BevL?FC^*_umuNGB7YmmAFQf1m~xflqVLYG6W=M=9TFAxrQi|8S9zq85+8O zb~0yR;8F5)aSW-5dpp~)FUDKY)z;PHO{1;CUq)uL#QbK-ZijgrS&p3%(02I5HX(vZ z$T}fy$Hkc+INa01cfYHi`?IF6gl+#Snb3Wrh5PUR`hU1_eaCE$w0%r(n!bHa%{}PY zEttbM09h zsy!GhGN1c1K9CDyh`aSOn1KQ%``sD;e7WrJ|NH0X=S5}^EB@QDE?}-Z7F)MI!ke+8 zvsobY#%fPS1=a_ud`=;W>(y8rL>i`Ba0IsQoh8B$#1QvL!A102RuF>+7RAd}Gpsu9 z9yXu(zCYIiZ<&@AhvIz08EgLh_^9~x*Q??Ozdf;NdKOyGx`5%@RHhF??24;4gn#am zXL@BSa$pxW%Uk{(W7-uxHEX*A^)k#>OZ8?)`@tL2SM zAB5s}tT=RR>kmp|K72bK~BG6e-Hz|AVk!S zG3KK@Um(M0rXRu9H9!5i9w;iQ1h&?OpVw;G?A^dLL)^js&-BO38RQh5ghFqWe?7xw zv6)4qp_1{>`w#yg-`8w#@0j2s`YqOWH$$K5gDFfi#1GW-$Ny_(s%YWx3`x9yRh#Pp zk7h$S*8=%{f0S82a0pIXacJLakpnmW{l2w{;n%~{_5lq2P&c|VKDlnagdt9|q3*}0 za*+edE*^`xey^Js%kbCq`1cYI#yvp{e?L5R=XxLrb)`e*xT&YnUwd9hVGZ z_{{X8UH|`|VuYa@4Uhk9Uc&H<^#XtVzklg)7k+cCpO*D)CPd49QD~^=#GGEuy+Emc z+3LBX4zATwY+Gh%G|2AR#1K{*!tkN?h`8RW4fP?v4MWcFT`t1F`ao@8L161&G6pc@f#chL)?bcwKi2=+cf4*vdhp)wTA;iizR#WU#r=l!R#q?S-u(R$uG=Ud z%XPrp`hP9g0{JK3qyEPIF8=vr_urp?UVlJJ>KYCIDoTI2|9;)KUks7dFUKg+~_RoAiSVQ|Lp4`O)j1gsS99(-gMx;$kLmjarVp3S&1X7b3(dm?{F)5WFvo2R0j|^A$e>dt}Ru*Y=DytEVlf`m@$3{oP!M z_qKd~zMdg};^1@qK!jk)f2Mh@mc=uS!AW81(U||74@|)da0zu^ip3J{rm*KC-_sFl!3r4dqzA^+o`|jtJ zDs;tJ!hU^w+@G=Hr&`RBt5@&sTcdBG;p`R@`1bYbTTPSYbRNB8Vi?rG;bc4if3_EY V92u7^IuHPIs;8@;%Q~loCIGzWkJ|tM