From 17be9d1f9c549f082eda9b4bb6a66bf360ad1732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 11 Nov 2020 23:09:52 -0300 Subject: [PATCH 01/37] Add Widget to show cover functional status Three separate indicators. Need better names for everything --- .../java/gregtech/api/gui/GuiTextures.java | 3 + .../api/gui/widgets/DiagnoseWidget.java | 106 ++++++++++++++++++ .../gregtech/common/covers/DiagnoseIssue.java | 21 ++++ .../resources/assets/gregtech/lang/en_us.lang | 3 + .../gregtech/textures/gui/widget/idling.png | Bin 0 -> 1462 bytes .../gregtech/textures/gui/widget/issue.png | Bin 0 -> 1885 bytes .../gregtech/textures/gui/widget/working.png | Bin 0 -> 1821 bytes 7 files changed, 133 insertions(+) create mode 100644 src/main/java/gregtech/api/gui/widgets/DiagnoseWidget.java create mode 100644 src/main/java/gregtech/common/covers/DiagnoseIssue.java create mode 100644 src/main/resources/assets/gregtech/textures/gui/widget/idling.png create mode 100644 src/main/resources/assets/gregtech/textures/gui/widget/issue.png create mode 100644 src/main/resources/assets/gregtech/textures/gui/widget/working.png diff --git a/src/main/java/gregtech/api/gui/GuiTextures.java b/src/main/java/gregtech/api/gui/GuiTextures.java index c1f1d68b1b..327b4566ad 100644 --- a/src/main/java/gregtech/api/gui/GuiTextures.java +++ b/src/main/java/gregtech/api/gui/GuiTextures.java @@ -45,6 +45,9 @@ public class GuiTextures { //WIDGET UI RELATED public static final TextureArea SLIDER_BACKGROUND = TextureArea.fullImage("textures/gui/widget/slider_background.png"); public static final TextureArea SLIDER_ICON = TextureArea.fullImage("textures/gui/widget/slider.png"); + public static final TextureArea DIAGNOSE_IDLING = TextureArea.fullImage("textures/gui/widget/idling.png"); + public static final TextureArea DIAGNOSE_WORKING = TextureArea.fullImage("textures/gui/widget/working.png"); + public static final TextureArea DIAGNOSE_ISSUE =TextureArea.fullImage("textures/gui/widget/issue.png"); //BRONZE public static final TextureArea BRONZE_BACKGROUND = TextureArea.fullImage("textures/gui/steam/bronze/bronze_gui.png"); diff --git a/src/main/java/gregtech/api/gui/widgets/DiagnoseWidget.java b/src/main/java/gregtech/api/gui/widgets/DiagnoseWidget.java new file mode 100644 index 0000000000..5afe6ed443 --- /dev/null +++ b/src/main/java/gregtech/api/gui/widgets/DiagnoseWidget.java @@ -0,0 +1,106 @@ +package gregtech.api.gui.widgets; + +import com.sun.jna.platform.win32.Guid; +import gregtech.api.gui.GuiTextures; +import gregtech.api.gui.IRenderContext; +import gregtech.api.gui.Widget; +import gregtech.api.gui.resources.TextureArea; +import gregtech.api.util.GTUtility; +import gregtech.api.util.Position; +import gregtech.api.util.Size; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.IStringSerializable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.Collections; +import java.util.function.IntSupplier; +import java.util.function.Supplier; + + +public class DiagnoseWidget extends Widget { + + private final String[] issueNames; + private IntSupplier currentIssue; + protected String tooltipHoverString; + protected long hoverStartTime = -1L; + protected boolean isMouseHovered; + protected int currentError; + + protected TextureArea area; + private boolean isVisible = true; + + public & IStringSerializable> DiagnoseWidget(int xPosition, int yPosition, int width, int height, Class enumClass, Supplier supplier) { + super(new Position(xPosition, yPosition), new Size(width, height)); + T[] enumConstantPool = enumClass.getEnumConstants(); + this.issueNames = GTUtility.mapToString(enumConstantPool, it -> ((IStringSerializable) it).getName()); + this.currentIssue = () -> supplier.get().ordinal(); + setImage(); + } + + public void setTooltipHoverString() { + this.tooltipHoverString = I18n.format(issueNames[currentError]); + } + + public DiagnoseWidget setImage() { + if (currentError == 0) { + this.area = GuiTextures.DIAGNOSE_IDLING; + } + if (currentError == 1) { + this.area = GuiTextures.DIAGNOSE_WORKING; + } + else if (currentError > 1) { + this.area = GuiTextures.DIAGNOSE_ISSUE; + } + return this; + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + if (currentIssue.getAsInt() != currentError) { + this.currentError = currentIssue.getAsInt(); + writeUpdateInfo(1, buf -> buf.writeVarInt(currentError)); + } + } + + @Override + public void readUpdateInfo(int id, PacketBuffer buffer) { + super.readUpdateInfo(id, buffer); + if (id == 1) { + this.currentError = buffer.readVarInt(); + setImage(); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void drawInForeground(int mouseX, int mouseY) { + boolean isHovered = isMouseOverElement(mouseX, mouseY); + boolean wasHovered = isMouseHovered; + if (isHovered && !wasHovered) { + this.isMouseHovered = true; + this.hoverStartTime = System.currentTimeMillis(); + } else if (!isHovered && wasHovered) { + this.isMouseHovered = false; + this.hoverStartTime = 0L; + } else if (isHovered) { + long timeSinceHover = System.currentTimeMillis() - hoverStartTime; + setTooltipHoverString(); + if (timeSinceHover > 1000L && tooltipHoverString != null) { + drawHoveringText(ItemStack.EMPTY, Collections.singletonList(tooltipHoverString), 300, mouseX, mouseY); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void drawInBackground(int mouseX, int mouseY, IRenderContext context) { + if (!this.isVisible || area == null) return; + Position position = getPosition(); + Size size = getSize(); + area.draw(position.x, position.y, size.width, size.height); + } +} diff --git a/src/main/java/gregtech/common/covers/DiagnoseIssue.java b/src/main/java/gregtech/common/covers/DiagnoseIssue.java new file mode 100644 index 0000000000..df96f7e689 --- /dev/null +++ b/src/main/java/gregtech/common/covers/DiagnoseIssue.java @@ -0,0 +1,21 @@ +package gregtech.common.covers; + +import net.minecraft.util.IStringSerializable; + +public enum DiagnoseIssue implements IStringSerializable { + + IDLING("cover.universal.diagnose.issue.idling"), + WORKING("cover.universal.diagnose.issue.working"), + EXPECTED_CAPABILITY_UNAVAILABLE("cover.universal.diagnose.issue.expected_capability_unavailable"); + + public final String localeName; + + DiagnoseIssue(String localeName) { + this.localeName = localeName; + } + + @Override + public String getName() { + return localeName; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 894d6676cc..65d5adb42e 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -723,6 +723,9 @@ cover.conveyor.title=Conveyor Cover Settings (%s) cover.conveyor.transfer_rate=%s items/sec cover.conveyor.mode.export=Mode: Export cover.conveyor.mode.import=Mode: Import +cover.universal.diagnose.issue.idling=This cover is idling +cover.universal.diagnose.issue.working=This cover is working without issue +cover.universal.diagnose.issue.expected_capability_unavailable=This cover currently cant access this inventory from this side. No work will be done. cover.universal.manual_import_export.mode.disabled=Manual I/O: Disabled cover.universal.manual_import_export.mode.filtered=Manual I/O: Filtered cover.universal.manual_import_export.mode.unfiltered=Manual I/O: Unfiltered diff --git a/src/main/resources/assets/gregtech/textures/gui/widget/idling.png b/src/main/resources/assets/gregtech/textures/gui/widget/idling.png new file mode 100644 index 0000000000000000000000000000000000000000..a8bda28744cf3bec6f9c11b52d036e6adcda106f GIT binary patch literal 1462 zcmV;n1xfmeP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O<|~lH)22{I65&5s-us90!A`+8ey%Z(}=|WImH| zo~altWU1XPAhiDXchDbP5+qSH yoaK#dfR19+1ud>}a#O;1Ogv;R0PS**6Nzv>6 z==Jcgu-n@UmmIv@+bJJ2l8-=_$VWh(nFWJ>3letO?HrFlW!(pDs)^M0Rx+gMa->n=z@$ld2%2@JOc-I075 z(R=oJ?#39%XDyr!KV{!pOe2)e3MwOh~$1^iI-3xNgku;G1mR-YD{1>9TgSm z!p?jLjteN)?X`sF_!-8&wStyI4Gog_(87Y&xUfK#K^(br<-zOLH*SC!Wfey+(jd#U zWpydipc-qOjfc1v?V2H0la*9qmMa$C@|G=M!O{YrvSw%{#mx2#-TI+X%k2L;i46KPc5O%YV|G@qslgdx*vOt+sU2S>b2s_a(&S z{RjYxklO$T#UD8&R^!CMMVuKtW(ZV)91B4fD8OdY0aBuB5^~8hbK@Q7%~wp4Of&W- z2w|Gkp-s^Wv0^mTkH?G}s-_mrESXy-D^`=Hm@K8_X>M}W)uWpych6qDX3a5MPT6zL zCD$TFu?Jd7#Y--w)GAbws3KN{e}!d{MVGkPk``a`QkL3KJ}owDsd>w-wA!U>$2QSZ z_nv#{b!A$yQ><~dHLbqpwXAiZ)`pHaY^32Mk2302wL{ep?FrTRP)#lHZ_A{5*dp7Q~(7nQ?rmcMw!Y@%|gL$rX~PsQyc0$6@!FvWwF6m?cS7oNH?nSxKI-;~YJHw_ZBuMtg_F~uSbdmZb0x`j9%}V$|KdO+_PQBE_-#+` z4BA?K5XOCWdh+crqtb_u`X=i5#+hD0^d4wDg6YlaE5P&`@%KRAru!MoD+?0Y=scFa zr}J3$Y;+#W**bccjm~5FeI0$8jm~5FO&xucjm~3vu8w|OMsyy_qjmJ)lBQ5!gNdHp zQNMJiUmYM%oNG@XOLXc~{2$J>(;M5Dfd>A-6#55@JqG-gz6e1Q|sFeXx5le}p2nv!!NYujJjfp~b4Z8_8 zmV&Kd;ivIe*jQ_8VJirN9}p``D@7X#>zgEyAjW}V4tM5W-g^W7ql{^}_5EPkIVUn1 z*5ZkIt?`u>0zi;v-E^}v(TNx}*VjEhb>4+kR_%9xuGZwTYl2S`9yPO0PIyUpcs-X@ zyr-%#SM;Rtxp1E&1qweZ-6-*!;&hSyDl_QBB4ffqVJ%(7MirYYjwL)K+?}*+$@j-g zoK(D_*vjP1a-FKfz_L9TRl4jhCYfS}Su_mttdb!|NKRW6mx$blYxp~h{#kJu;#$QN z$2eHa(|uC&y3;-7zgysNo0000%Nkl zaB^>EX>4U6ba`-PAZ2)IW&i+q+SONEvg;@e{MRaG2}rz`!?S93Fw36?V>`!jl9Q?X zGofOz45I0lKke|P!|A7K;7SRY(;PT^ysiIOk~YWu`_Wo71d-Kc%=!%oKofk~s+ z+pSM)euCYe3-&!Y|FlzBPb4fyyXWOlkDUdB`Unzs+3akVqu92Ai@`ra&9e1nO`K5H z*PDq&iCyS%Pmc!U!BVx@NQ*ShTHz{sA<)}5!Oq(i^H_U~tqwFz`&mKAkK-K#sz-u; zki3uR%KkCBkS}T3^@U5fIKtre0o!}>C&dpN>jRPed>~c%r{k<|?=|$^w$ml!z^Gdh zrD$hotii+#%Jp34&^*2tV?SF&3o5As$*U?VqZN)UP^A+auAI1Yn|GVbHD+U%A1R9`HU?+b=H_?(Qhfl z#VndY_!Q~XPkA;c{hq&^4c43z4P7&AAJfs zm|%koK7)sXblzs%82mc%V%La&)zj+3dn|B zjk+S6Js``|;yq_w@`ZO&uOj4iqh53<|bBNr0ya8 zNf?cRev*baPe(F^lOk;wMR-{ur}k(jU-XFobKXt(e@dJ26OWem7cs9|KE{AMqg3r& znDNRUmU4|-gq_>NE+Fjic#)Okb65|ue}?H!vfZiKGx%M(o~lr?vSiVxEWC~s%n?t= z;2{CZ!{O;Ba&I%@5}{A!i#`^>jaQuRJtn%%rng!8b*X(>f^Q>)KBoIG`~R~e{6ne{ zzo-8N7%%Mlz+4FQ0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKp2MKrb z$j~}j5EXHhDi*;)X)CnqU~=gnG%+M8E{=k0!NH%!s)LKOt`4q(Aov5~o5k){|mXXXXWZ^r$?h)Yo zU5sb>*Zn#A)q=%NmL3aJ%fAG7vR&jE|OA5zmpj1FlOdb3D+Or@#Uk*2 zM&FbN25*7hRj+TYbDTZ^S?bl&4RCM>jFu>S&F9@coqhYarq#b6Qgm{f1=REt00006 zVoOIv00000008+zyMF)x010qNS#tmY4!r;X4!r?K`;e^w000McNliruTFIuB3j zjbH!(0Ln>3K~y-)wUb>Af-n$-zb(iy1P!m8glpib;2J#%uO`N87;$|l@>_nQag$Bc zW@mP1HibWjwz(Lx2DW7kKz_L|)|%-l;bQeKg*H1TF1QPb?$dg^VZ5gYr z(vN<%)md#Bd;Ku${%wbucTYeL6U%hb3$uR!-CU#E>IAAFK?@l2KR^YW z@N)Yvt^nBb*b+BD zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxmg6W4{nsjH2}nXbmVs{u&&7~bD&_7< zWjY)iEFQYPR|tptzrP0kgP(8+w1i3k1w#>$Ap^?K0ezi?H);cq1(!PL7kojjrIrnouAPA4Go1FyT%9h_f#1BH%&G4TzC%j;B$6Der{)jC-bykcs)N2bd z#kLm!MeuC^gW&h<0;_Rg7eyj7cuWwe0J*4_0}8O2G=LPZ8ib-GnZ7Y6@;O#af=n}V z6NE4g*iQ)x6^P}%A%3Dyh@oO?-pqnUOJvzf(BOlG5Mr1~u0)MKS`0D96mu*|lTVgH ziYcX>N|vn1ftEv#Ipv&75h`$0uvWqN0?Q$X9{#W+9Pvm;K1xOSR9~%z8f&V#mL^Rb z(nJd_w$ySfov9;Jbl@wOy#C#E(}{S<_I6D_n!wf* zJOkWu8f+ertESaZPWJym(KiEzvl;z_p^oVCkS$!$9q zenMG;uK7J^s_mFfp`)52+n2MaR_w2Hko##(!e{I7lB!?Lh5)S_Vv`ttLl^ijE9y8wL)e!8q;TZsFqMPK%F79<|zcNeTP+R&3wSSCBdN3e$zR2tavGf+R7sS$A z%w7;nZ!vp8EWO3-1+nxNvlqnDi_F#sX8m{abGT9K`#02nWtQHd_9|)7OIhoMq(yIT zEuaj0E%x0@pw*-J*YM^+v?ZeE@Mmzpb4dMoN$u5vuOz);MDo{n51`LALG^_JUsxLg zzLWfmC-&=S|BpW+K3rSekfr`)E&2;!&aWmqB^>y)%Q)oz0}^QaY%==cegFUgglR)V zP)S2WAaHVTW@&6?004NLeUUv#!$25@-=<1MD-LE5amdg*Sr8R*lqwd%LTM|s>R@u| zA2cx}DK3tJYr(;v#j1mgv#t)Vf*|+<;^gS0=prS4mlRsWc*k)M?|tvf-FJY{s4~s! z8V5ApHq(i?l*_M3p;z?L6cI&0W|oo6EM(z3zU~p=`(2D@`Pcn9`qhHPfPh3i%M8;d zUMHU3v<=St#3C!pD)Bk-m`N8Te&o91@f+uo%L307&1`y(SR|H89jtUPE1Mee6mdk= zbjlZU9;=+UIBV4!Yu%H-FkH}=GhC-Nf&>$axs0hc?#(32sXvMU8?3B@Aten#Jv2L^9}-c_$}t#h0{09oqQ z(hYEM2#l5}d(G$FJ)M2~x2Dyjk2yThHZF#P6S%g1&DFH1ZDe}}UCo4h=$gp%oa%j%u3&S5n7Qlo@(Go> zonoOk3;0DV1&Bf~`wOAZzjmrE0)i8C&G$yi0_ Date: Wed, 11 Nov 2020 23:14:42 -0300 Subject: [PATCH 02/37] handle null capabilty issue and show that on the GUI --- .../gregtech/common/covers/CoverConveyor.java | 22 +++++++++++++++++ .../gregtech/common/covers/CoverPump.java | 24 ++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 128a73ea01..14c49e74bc 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -48,6 +48,7 @@ public class CoverConveyor extends CoverBehavior implements CoverWithUI, ITickab protected int itemsLeftToTransferLastSecond; private CoverableItemHandlerWrapper itemHandlerWrapper; protected boolean isWorkingAllowed = true; + protected DiagnoseIssue diagnoseIssue; public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, int itemsPerSecond) { super(coverable, attachedSide); @@ -56,6 +57,7 @@ public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, in this.transferRate = maxItemTransferRate; this.itemsLeftToTransferLastSecond = transferRate; this.conveyorMode = ConveyorMode.EXPORT; + this.diagnoseIssue = DiagnoseIssue.IDLING; this.itemFilterContainer = new ItemFilterContainer(this); } @@ -86,6 +88,14 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo coverHolder.markDirty(); } + public DiagnoseIssue getDiagnoseIssue() { + return this.diagnoseIssue; + } + + public void setDiagnoseIssue(DiagnoseIssue diagnoseIssue) { + this.diagnoseIssue = diagnoseIssue; + } + @Override public void update() { long timer = coverHolder.getTimer(); @@ -99,6 +109,12 @@ public void update() { } } if (timer % 20 == 0) { + if (itemsLeftToTransferLastSecond < transferRate) { + setDiagnoseIssue(DiagnoseIssue.WORKING); + } + if (itemsLeftToTransferLastSecond == transferRate) { + setDiagnoseIssue(DiagnoseIssue.IDLING); + } this.itemsLeftToTransferLastSecond = transferRate; } } @@ -392,6 +408,10 @@ public EnumActionResult onScrewdriverClick(EntityPlayer playerIn, EnumHand hand, @Override public T getCapability(Capability capability, T defaultValue) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + if (defaultValue == null ) { + setDiagnoseIssue(DiagnoseIssue.EXPECTED_CAPABILITY_UNAVAILABLE); + return null; + } IItemHandler delegate = (IItemHandler) defaultValue; if (itemHandlerWrapper == null || itemHandlerWrapper.delegate != delegate) { this.itemHandlerWrapper = new CoverableItemHandlerWrapper(delegate); @@ -429,6 +449,8 @@ public ModularUI createUI(EntityPlayer player) { ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); + primaryGroup.addWidget(new DiagnoseWidget(80,90,16,16,DiagnoseIssue.class,this::getDiagnoseIssue)); + this.itemFilterContainer.initUI(70, primaryGroup::addWidget); ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 190 + 82) diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index dfb4ec4ecb..eab896454c 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -47,6 +47,7 @@ public class CoverPump extends CoverBehavior implements CoverWithUI, ITickable, protected boolean isWorkingAllowed = true; protected final FluidFilterContainer fluidFilter; protected BucketMode bucketMode; + protected DiagnoseIssue diagnoseIssue; public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int mbPerTick) { super(coverHolder, attachedSide); @@ -56,6 +57,7 @@ public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int this.fluidLeftToTransferLastSecond = transferRate; this.pumpMode = PumpMode.EXPORT; this.bucketMode = BucketMode.MILLI_BUCKET; + this.diagnoseIssue = DiagnoseIssue.IDLING; this.fluidFilter = new FluidFilterContainer(this); } @@ -98,6 +100,14 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo coverHolder.markDirty(); } + public DiagnoseIssue getDiagnoseIssue() { + return this.diagnoseIssue; + } + + public void setDiagnoseIssue(DiagnoseIssue diagnoseIssue) { + this.diagnoseIssue = diagnoseIssue; + } + @Override public void update() { long timer = coverHolder.getTimer(); @@ -105,6 +115,12 @@ public void update() { this.fluidLeftToTransferLastSecond -= doTransferFluids(fluidLeftToTransferLastSecond); } if (timer % 20 == 0) { + if (fluidLeftToTransferLastSecond < transferRate) { + setDiagnoseIssue(DiagnoseIssue.WORKING); + } + if (fluidLeftToTransferLastSecond == transferRate) { + setDiagnoseIssue(DiagnoseIssue.IDLING); + } this.fluidLeftToTransferLastSecond = transferRate; } } @@ -157,7 +173,9 @@ public ModularUI createUI(EntityPlayer player) { primaryGroup.addWidget(new CycleButtonWidget(10, 160, 113, 20, ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - + + primaryGroup.addWidget(new DiagnoseWidget(80,84,16,16,DiagnoseIssue.class,this::getDiagnoseIssue)); + this.fluidFilter.initUI(88, primaryGroup::addWidget); return ModularUI.builder(GuiTextures.BACKGROUND, 176, 184 + 82) @@ -201,6 +219,10 @@ public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexO @Override public T getCapability(Capability capability, T defaultValue) { if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + if (defaultValue == null ) { + setDiagnoseIssue(DiagnoseIssue.EXPECTED_CAPABILITY_UNAVAILABLE); + return null; + } IFluidHandler delegate = (IFluidHandler) defaultValue; if (fluidHandlerWrapper == null || fluidHandlerWrapper.delegate != delegate) { this.fluidHandlerWrapper = new CoverableFluidHandlerWrapper(delegate); From 193bf92265c3e61a87c33b533413578d9b430296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Mon, 16 Nov 2020 01:09:46 -0300 Subject: [PATCH 03/37] Trigger issue diagnose on cover self capability update --- .../gregtech/common/covers/CoverConveyor.java | 15 ++++++++++----- .../java/gregtech/common/covers/CoverPump.java | 10 +++++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 14c49e74bc..6f295c6013 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -103,16 +103,21 @@ public void update() { TileEntity tileEntity = coverHolder.getWorld().getTileEntity(coverHolder.getPos().offset(attachedSide)); IItemHandler itemHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide.getOpposite()); IItemHandler myItemHandler = coverHolder.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide); - if (itemHandler != null && myItemHandler != null) { - int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond); - this.itemsLeftToTransferLastSecond -= totalTransferred; + if (myItemHandler == null) { + setDiagnoseIssue(DiagnoseIssue.EXPECTED_CAPABILITY_UNAVAILABLE); + return; + } + if (itemHandler == null) { + setDiagnoseIssue(DiagnoseIssue.IDLING); + return; } + int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond); + this.itemsLeftToTransferLastSecond -= totalTransferred; } if (timer % 20 == 0) { if (itemsLeftToTransferLastSecond < transferRate) { setDiagnoseIssue(DiagnoseIssue.WORKING); - } - if (itemsLeftToTransferLastSecond == transferRate) { + } else { setDiagnoseIssue(DiagnoseIssue.IDLING); } this.itemsLeftToTransferLastSecond = transferRate; diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index eab896454c..282e573826 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -117,8 +117,7 @@ public void update() { if (timer % 20 == 0) { if (fluidLeftToTransferLastSecond < transferRate) { setDiagnoseIssue(DiagnoseIssue.WORKING); - } - if (fluidLeftToTransferLastSecond == transferRate) { + } else { setDiagnoseIssue(DiagnoseIssue.IDLING); } this.fluidLeftToTransferLastSecond = transferRate; @@ -132,7 +131,12 @@ protected int doTransferFluids(int transferLimit) { blockPos.release(); IFluidHandler fluidHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide.getOpposite()); IFluidHandler myFluidHandler = coverHolder.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide); - if (fluidHandler == null || myFluidHandler == null) { + if (myFluidHandler == null) { + setDiagnoseIssue(DiagnoseIssue.EXPECTED_CAPABILITY_UNAVAILABLE); + return 0; + } + else if (fluidHandler == null) { + setDiagnoseIssue(DiagnoseIssue.IDLING); return 0; } return doTransferFluidsInternal(myFluidHandler, fluidHandler, transferLimit); From 8f0f56194f3348e2bf7a4e602b2879c33592811c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Tue, 24 Nov 2020 21:43:51 -0300 Subject: [PATCH 04/37] Functioning Registry add/get some renaming, not final yet --- src/main/java/gregtech/GregTechMod.java | 2 + .../java/gregtech/api/SituationalStatus.java | 54 +++++++++++++++++++ ...noseWidget.java => SituationalWidget.java} | 34 ++++++------ .../gregtech/common/covers/CoverConveyor.java | 25 ++++----- .../gregtech/common/covers/CoverPump.java | 25 ++++----- .../gregtech/common/covers/DiagnoseIssue.java | 21 -------- .../resources/assets/gregtech/lang/en_us.lang | 8 +-- 7 files changed, 102 insertions(+), 67 deletions(-) create mode 100644 src/main/java/gregtech/api/SituationalStatus.java rename src/main/java/gregtech/api/gui/widgets/{DiagnoseWidget.java => SituationalWidget.java} (73%) delete mode 100644 src/main/java/gregtech/common/covers/DiagnoseIssue.java diff --git a/src/main/java/gregtech/GregTechMod.java b/src/main/java/gregtech/GregTechMod.java index 0b77ce4b46..75b25e7faa 100644 --- a/src/main/java/gregtech/GregTechMod.java +++ b/src/main/java/gregtech/GregTechMod.java @@ -3,6 +3,7 @@ import codechicken.lib.CodeChickenLib; import crafttweaker.CraftTweakerAPI; import gregtech.api.GTValues; +import gregtech.api.SituationalStatus; import gregtech.api.capability.SimpleCapabilityManager; import gregtech.api.cover.CoverBehaviorUIFactory; import gregtech.api.items.gui.PlayerInventoryUIFactory; @@ -108,6 +109,7 @@ public void onPreInit(FMLPreInitializationEvent event) { MetaFluids.init(); MetaTileEntities.init(); MetaEntities.init(); + SituationalStatus.init(); proxy.onPreLoad(); } diff --git a/src/main/java/gregtech/api/SituationalStatus.java b/src/main/java/gregtech/api/SituationalStatus.java new file mode 100644 index 0000000000..b3191215f2 --- /dev/null +++ b/src/main/java/gregtech/api/SituationalStatus.java @@ -0,0 +1,54 @@ +package gregtech.api; + +import gregtech.api.util.GTControlledRegistry; +import gregtech.api.util.GTLog; + +public class SituationalStatus { + + public static GTControlledRegistry SITUATIONAL_STATUS_REGISTRY = new GTControlledRegistry<>(Short.MAX_VALUE); + + public static int GREEN = 0; + public static int BLUE = 1; + public static int YELLOW = 2; + public static int RED = 3; + + private static int registryIdIndex = 0; + public int errorGroup; + public int code; + public String localeName; + + public static SituationalStatus WORKING; + public static SituationalStatus IDLE; + public static SituationalStatus EXPECTED_CAPABILITY_UNAVAILABLE; + public static SituationalStatus EMPTY_SOURCE; + + public SituationalStatus(String localeName, int errorGroup,int code) { + this.localeName = localeName; + this.errorGroup = errorGroup; + this.code = code; + } + + public static void init() { + GTLog.logger.info("Registering SituationalStatus"); + + WORKING = registerSituationalStatus(GREEN, "gregtech.situational_status.working"); + IDLE = registerSituationalStatus(BLUE, "gregtech.situational_status.idle"); + EXPECTED_CAPABILITY_UNAVAILABLE = registerSituationalStatus(RED, "gregtech.situational_status.null_capability"); + EMPTY_SOURCE = registerSituationalStatus(YELLOW, "gregtech.situational_status.empty_source"); + } + + public static SituationalStatus registerSituationalStatus(int errorGroup, String localeName){ + SituationalStatus situationalStatus = new SituationalStatus(localeName, errorGroup, registryIdIndex); + SITUATIONAL_STATUS_REGISTRY.register(registryIdIndex, situationalStatus, registryIdIndex); + registryIdIndex += 1; + return situationalStatus; + } + + public static SituationalStatus getSituationalStatusFromId(int id) { + return SITUATIONAL_STATUS_REGISTRY.getNameForObject(id); + } + + public static int getIdFromSituationalStatus(SituationalStatus situationalStatus) { + return SITUATIONAL_STATUS_REGISTRY.getIdByObjectName(situationalStatus); + } +} diff --git a/src/main/java/gregtech/api/gui/widgets/DiagnoseWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java similarity index 73% rename from src/main/java/gregtech/api/gui/widgets/DiagnoseWidget.java rename to src/main/java/gregtech/api/gui/widgets/SituationalWidget.java index 5afe6ed443..f5ed7d963e 100644 --- a/src/main/java/gregtech/api/gui/widgets/DiagnoseWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java @@ -1,29 +1,24 @@ package gregtech.api.gui.widgets; -import com.sun.jna.platform.win32.Guid; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.IRenderContext; import gregtech.api.gui.Widget; import gregtech.api.gui.resources.TextureArea; -import gregtech.api.util.GTUtility; import gregtech.api.util.Position; import gregtech.api.util.Size; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; -import net.minecraft.util.IStringSerializable; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; - import java.util.Collections; import java.util.function.IntSupplier; -import java.util.function.Supplier; +import static gregtech.api.SituationalStatus.*; -public class DiagnoseWidget extends Widget { +public class SituationalWidget extends Widget { - private final String[] issueNames; - private IntSupplier currentIssue; + private final IntSupplier currentSituationId; protected String tooltipHoverString; protected long hoverStartTime = -1L; protected boolean isMouseHovered; @@ -32,26 +27,27 @@ public class DiagnoseWidget extends Widget { protected TextureArea area; private boolean isVisible = true; - public & IStringSerializable> DiagnoseWidget(int xPosition, int yPosition, int width, int height, Class enumClass, Supplier supplier) { + public SituationalWidget(int xPosition, int yPosition, int width, int height, IntSupplier getSituationalStatus) { super(new Position(xPosition, yPosition), new Size(width, height)); - T[] enumConstantPool = enumClass.getEnumConstants(); - this.issueNames = GTUtility.mapToString(enumConstantPool, it -> ((IStringSerializable) it).getName()); - this.currentIssue = () -> supplier.get().ordinal(); + this.currentSituationId = () -> getSituationalStatus.getAsInt(); setImage(); } public void setTooltipHoverString() { - this.tooltipHoverString = I18n.format(issueNames[currentError]); + this.tooltipHoverString = I18n.format(getSituationalStatusFromId(currentError).localeName); } - public DiagnoseWidget setImage() { - if (currentError == 0) { + public SituationalWidget setImage() { + if (getSituationalStatusFromId(currentError).errorGroup == BLUE) { this.area = GuiTextures.DIAGNOSE_IDLING; } - if (currentError == 1) { + else if (getSituationalStatusFromId(currentError).errorGroup == GREEN) { this.area = GuiTextures.DIAGNOSE_WORKING; } - else if (currentError > 1) { + else if (getSituationalStatusFromId(currentError).errorGroup == YELLOW) { + this.area = null; + } + else if (getSituationalStatusFromId(currentError).errorGroup == RED) { this.area = GuiTextures.DIAGNOSE_ISSUE; } return this; @@ -60,8 +56,8 @@ else if (currentError > 1) { @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - if (currentIssue.getAsInt() != currentError) { - this.currentError = currentIssue.getAsInt(); + if (currentSituationId.getAsInt() != currentError) { + this.currentError = currentSituationId.getAsInt(); writeUpdateInfo(1, buf -> buf.writeVarInt(currentError)); } } diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 6f295c6013..70c3aa1679 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -8,6 +8,7 @@ import gnu.trove.list.TIntList; import gnu.trove.list.array.TIntArrayList; import gregtech.api.GTValues; +import gregtech.api.SituationalStatus; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; import gregtech.api.capability.impl.ItemHandlerDelegate; @@ -48,7 +49,7 @@ public class CoverConveyor extends CoverBehavior implements CoverWithUI, ITickab protected int itemsLeftToTransferLastSecond; private CoverableItemHandlerWrapper itemHandlerWrapper; protected boolean isWorkingAllowed = true; - protected DiagnoseIssue diagnoseIssue; + protected SituationalStatus situationalStatus; public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, int itemsPerSecond) { super(coverable, attachedSide); @@ -57,7 +58,7 @@ public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, in this.transferRate = maxItemTransferRate; this.itemsLeftToTransferLastSecond = transferRate; this.conveyorMode = ConveyorMode.EXPORT; - this.diagnoseIssue = DiagnoseIssue.IDLING; + this.situationalStatus = SituationalStatus.IDLE; this.itemFilterContainer = new ItemFilterContainer(this); } @@ -88,12 +89,12 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo coverHolder.markDirty(); } - public DiagnoseIssue getDiagnoseIssue() { - return this.diagnoseIssue; + public int getSituationalStatus() { + return this.situationalStatus.code; } - public void setDiagnoseIssue(DiagnoseIssue diagnoseIssue) { - this.diagnoseIssue = diagnoseIssue; + public void setSituationalStatus(SituationalStatus situationalStatus) { + this.situationalStatus = situationalStatus; } @Override @@ -104,11 +105,11 @@ public void update() { IItemHandler itemHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide.getOpposite()); IItemHandler myItemHandler = coverHolder.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide); if (myItemHandler == null) { - setDiagnoseIssue(DiagnoseIssue.EXPECTED_CAPABILITY_UNAVAILABLE); + setSituationalStatus(SituationalStatus.EXPECTED_CAPABILITY_UNAVAILABLE); return; } if (itemHandler == null) { - setDiagnoseIssue(DiagnoseIssue.IDLING); + setSituationalStatus(SituationalStatus.IDLE); return; } int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond); @@ -116,9 +117,9 @@ public void update() { } if (timer % 20 == 0) { if (itemsLeftToTransferLastSecond < transferRate) { - setDiagnoseIssue(DiagnoseIssue.WORKING); + setSituationalStatus(SituationalStatus.WORKING); } else { - setDiagnoseIssue(DiagnoseIssue.IDLING); + setSituationalStatus(SituationalStatus.IDLE); } this.itemsLeftToTransferLastSecond = transferRate; } @@ -414,7 +415,7 @@ public EnumActionResult onScrewdriverClick(EntityPlayer playerIn, EnumHand hand, public T getCapability(Capability capability, T defaultValue) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { if (defaultValue == null ) { - setDiagnoseIssue(DiagnoseIssue.EXPECTED_CAPABILITY_UNAVAILABLE); + setSituationalStatus(SituationalStatus.EXPECTED_CAPABILITY_UNAVAILABLE); return null; } IItemHandler delegate = (IItemHandler) defaultValue; @@ -454,7 +455,7 @@ public ModularUI createUI(EntityPlayer player) { ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - primaryGroup.addWidget(new DiagnoseWidget(80,90,16,16,DiagnoseIssue.class,this::getDiagnoseIssue)); + primaryGroup.addWidget(new SituationalWidget(80,90,16,16,this::getSituationalStatus)); this.itemFilterContainer.initUI(70, primaryGroup::addWidget); diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 282e573826..86d081c6ac 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -6,6 +6,7 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import gregtech.api.GTValues; +import gregtech.api.SituationalStatus; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; import gregtech.api.capability.impl.FluidHandlerDelegate; @@ -47,7 +48,7 @@ public class CoverPump extends CoverBehavior implements CoverWithUI, ITickable, protected boolean isWorkingAllowed = true; protected final FluidFilterContainer fluidFilter; protected BucketMode bucketMode; - protected DiagnoseIssue diagnoseIssue; + protected SituationalStatus situationalStatus; public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int mbPerTick) { super(coverHolder, attachedSide); @@ -57,7 +58,7 @@ public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int this.fluidLeftToTransferLastSecond = transferRate; this.pumpMode = PumpMode.EXPORT; this.bucketMode = BucketMode.MILLI_BUCKET; - this.diagnoseIssue = DiagnoseIssue.IDLING; + this.situationalStatus = SituationalStatus.IDLE; this.fluidFilter = new FluidFilterContainer(this); } @@ -100,12 +101,12 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo coverHolder.markDirty(); } - public DiagnoseIssue getDiagnoseIssue() { - return this.diagnoseIssue; + public int getSituationalStatus() { + return this.situationalStatus.code; } - public void setDiagnoseIssue(DiagnoseIssue diagnoseIssue) { - this.diagnoseIssue = diagnoseIssue; + public void setSituationalStatus(SituationalStatus situationalStatus) { + this.situationalStatus = situationalStatus; } @Override @@ -116,9 +117,9 @@ public void update() { } if (timer % 20 == 0) { if (fluidLeftToTransferLastSecond < transferRate) { - setDiagnoseIssue(DiagnoseIssue.WORKING); + setSituationalStatus(SituationalStatus.WORKING); } else { - setDiagnoseIssue(DiagnoseIssue.IDLING); + setSituationalStatus(SituationalStatus.IDLE); } this.fluidLeftToTransferLastSecond = transferRate; } @@ -132,11 +133,11 @@ protected int doTransferFluids(int transferLimit) { IFluidHandler fluidHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide.getOpposite()); IFluidHandler myFluidHandler = coverHolder.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide); if (myFluidHandler == null) { - setDiagnoseIssue(DiagnoseIssue.EXPECTED_CAPABILITY_UNAVAILABLE); + setSituationalStatus(SituationalStatus.EXPECTED_CAPABILITY_UNAVAILABLE); return 0; } else if (fluidHandler == null) { - setDiagnoseIssue(DiagnoseIssue.IDLING); + setSituationalStatus(SituationalStatus.IDLE); return 0; } return doTransferFluidsInternal(myFluidHandler, fluidHandler, transferLimit); @@ -178,7 +179,7 @@ public ModularUI createUI(EntityPlayer player) { ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - primaryGroup.addWidget(new DiagnoseWidget(80,84,16,16,DiagnoseIssue.class,this::getDiagnoseIssue)); + primaryGroup.addWidget(new SituationalWidget(80,84,16,16,this::getSituationalStatus)); this.fluidFilter.initUI(88, primaryGroup::addWidget); @@ -224,7 +225,7 @@ public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexO public T getCapability(Capability capability, T defaultValue) { if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { if (defaultValue == null ) { - setDiagnoseIssue(DiagnoseIssue.EXPECTED_CAPABILITY_UNAVAILABLE); + setSituationalStatus(SituationalStatus.EXPECTED_CAPABILITY_UNAVAILABLE); return null; } IFluidHandler delegate = (IFluidHandler) defaultValue; diff --git a/src/main/java/gregtech/common/covers/DiagnoseIssue.java b/src/main/java/gregtech/common/covers/DiagnoseIssue.java deleted file mode 100644 index df96f7e689..0000000000 --- a/src/main/java/gregtech/common/covers/DiagnoseIssue.java +++ /dev/null @@ -1,21 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.util.IStringSerializable; - -public enum DiagnoseIssue implements IStringSerializable { - - IDLING("cover.universal.diagnose.issue.idling"), - WORKING("cover.universal.diagnose.issue.working"), - EXPECTED_CAPABILITY_UNAVAILABLE("cover.universal.diagnose.issue.expected_capability_unavailable"); - - public final String localeName; - - DiagnoseIssue(String localeName) { - this.localeName = localeName; - } - - @Override - public String getName() { - return localeName; - } -} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 65d5adb42e..f00c41fb73 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -723,9 +723,6 @@ cover.conveyor.title=Conveyor Cover Settings (%s) cover.conveyor.transfer_rate=%s items/sec cover.conveyor.mode.export=Mode: Export cover.conveyor.mode.import=Mode: Import -cover.universal.diagnose.issue.idling=This cover is idling -cover.universal.diagnose.issue.working=This cover is working without issue -cover.universal.diagnose.issue.expected_capability_unavailable=This cover currently cant access this inventory from this side. No work will be done. cover.universal.manual_import_export.mode.disabled=Manual I/O: Disabled cover.universal.manual_import_export.mode.filtered=Manual I/O: Filtered cover.universal.manual_import_export.mode.unfiltered=Manual I/O: Unfiltered @@ -760,6 +757,11 @@ cover.machine_controller.mode.cover_north=Control Cover (North) cover.machine_controller.mode.cover_east=Control Cover (East) cover.machine_controller.mode.cover_west=Control Cover (West) +gregtech.situational_status.idle=This cover is idling +gregtech.situational_status.working=This cover is working without issue +gregtech.situational_status.null_capability=This cover currently cant access this inventory from this side. No work will be done. +gregtech.situational_status.empty_source=This inventory is empty. + # %s is a localized material name item.material.oreprefix.oreBlackgranite=Granite %s Ore item.material.oreprefix.oreRedgranite=Granite %s Ore From f886fc47e99b2539280ac9324dab5e7ec64f1438 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Tue, 24 Nov 2020 23:30:20 -0300 Subject: [PATCH 05/37] new icons and update references --- .../java/gregtech/api/gui/GuiTextures.java | 8 +++++--- .../api/gui/widgets/SituationalWidget.java | 17 ++++++++--------- .../gregtech/textures/gui/widget/idling.png | Bin 1462 -> 1655 bytes .../gregtech/textures/gui/widget/issue.png | Bin 1885 -> 1627 bytes .../gregtech/textures/gui/widget/warning.png | Bin 0 -> 1653 bytes .../gregtech/textures/gui/widget/working.png | Bin 1821 -> 1626 bytes 6 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/gui/widget/warning.png diff --git a/src/main/java/gregtech/api/gui/GuiTextures.java b/src/main/java/gregtech/api/gui/GuiTextures.java index 327b4566ad..60ba3733ad 100644 --- a/src/main/java/gregtech/api/gui/GuiTextures.java +++ b/src/main/java/gregtech/api/gui/GuiTextures.java @@ -45,9 +45,11 @@ public class GuiTextures { //WIDGET UI RELATED public static final TextureArea SLIDER_BACKGROUND = TextureArea.fullImage("textures/gui/widget/slider_background.png"); public static final TextureArea SLIDER_ICON = TextureArea.fullImage("textures/gui/widget/slider.png"); - public static final TextureArea DIAGNOSE_IDLING = TextureArea.fullImage("textures/gui/widget/idling.png"); - public static final TextureArea DIAGNOSE_WORKING = TextureArea.fullImage("textures/gui/widget/working.png"); - public static final TextureArea DIAGNOSE_ISSUE =TextureArea.fullImage("textures/gui/widget/issue.png"); + public static final TextureArea STATUS_IDLING = TextureArea.fullImage("textures/gui/widget/idling.png"); + public static final TextureArea STATUS_WORKING = TextureArea.fullImage("textures/gui/widget/working.png"); + public static final TextureArea STATUS_ISSUE =TextureArea.fullImage("textures/gui/widget/issue.png"); + public static final TextureArea STATUS_WARNING =TextureArea.fullImage("textures/gui/widget/issue.png"); + //BRONZE public static final TextureArea BRONZE_BACKGROUND = TextureArea.fullImage("textures/gui/steam/bronze/bronze_gui.png"); diff --git a/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java index f5ed7d963e..a192fe0c2f 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java @@ -39,17 +39,16 @@ public void setTooltipHoverString() { public SituationalWidget setImage() { if (getSituationalStatusFromId(currentError).errorGroup == BLUE) { - this.area = GuiTextures.DIAGNOSE_IDLING; - } - else if (getSituationalStatusFromId(currentError).errorGroup == GREEN) { - this.area = GuiTextures.DIAGNOSE_WORKING; - } - else if (getSituationalStatusFromId(currentError).errorGroup == YELLOW) { + this.area = GuiTextures.STATUS_IDLING; + } else if (getSituationalStatusFromId(currentError).errorGroup == GREEN) { + this.area = GuiTextures.STATUS_WORKING; + } else if (getSituationalStatusFromId(currentError).errorGroup == YELLOW) { + this.area = GuiTextures.STATUS_WARNING; + } else if (getSituationalStatusFromId(currentError).errorGroup == RED) { + this.area = GuiTextures.STATUS_ISSUE; + } else { this.area = null; } - else if (getSituationalStatusFromId(currentError).errorGroup == RED) { - this.area = GuiTextures.DIAGNOSE_ISSUE; - } return this; } diff --git a/src/main/resources/assets/gregtech/textures/gui/widget/idling.png b/src/main/resources/assets/gregtech/textures/gui/widget/idling.png index a8bda28744cf3bec6f9c11b52d036e6adcda106f..f1e799440a766dba4be3b8aee8cb4c2e111d36e0 100644 GIT binary patch delta 1593 zcmV-92FCfe3-=6=B!B99R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}tyXQetSAip zpH<8fNcadW2NBMh9nA8lP}**9t8L%+nxoJmBxO}Vss8tGqkr%dVMESq3@HSIpGz)D z#vq#YmzFylx7^1c^BC;xv`q+17QJ2nY99U>cK=-P$idUzPJeOCNF0G4kw-w=GYbau zD@fR7wX++6Qe6ijMSX=j$=a9UxIh_~x&@07KhWbpy&9Z?rP(8q6{(i3!CmY?VAm_d z&bW(p-4Cr>gw}2#0U^7`+XytT1no$EjOZu(+vo@Rl84>?;4%!3FgToGe@y;D@k?U6 zA(H(>C`R8NXMbF+&9Sw*K3#SJjD}HBh92znHE^6jxm}h8G{xmH)}6HZ-U4OZLhZh9lHgxj~!H+iNH!t;r zQZ>E&JIxUfn9a0?m^?pg%Pu-w_<8i}7GlzQ1OP?I?EwZ`z_AHzJqI=_qRikiLZA%f zeQ!)qfW4O)AjMf5gjAyR+*qT$_==Yx-HfvdLUeTDzJ{tb)>Lyt ztu@wsVwJU&vmadtJ z?3{Gvx@IN`HiZ{}^j#a8xhn<NVAB zYJb=~s1_M^E;ZSz1(9V}{koOSxs$D`lV`oJ`Pj;@{ zK6}y8^PJ*8D<)Jeg=O3(?8*3Ee`bx+qGA`p{m6UuqEBuoLEq|_4k7;{D4j1m#c=3N zr+mC^y=%mDk^2LN{VMw1vUkLEhvYkm>3?_24#@sfk{_w*BKPeB_}-)4#7JN9bJ5e^ zkiL7+pX{$!Oms!y7YEEl_13ZVIVgQ3_9iwuJE*>WBhda7|F(a=8|aHu{}LjZdvC9E zC<6)Ie34#nHbA7)&yM>vExGB7501;8{^aB8))v86W1{~7{qae8pFyr)0004nX@5gQ zP)S2WAaHVTW@&6?004NLeUUv#!%!53PgA9$l@4}LamY}eEQpFYN)?M>p|llRbufA9 zA2ex5Qd}Gb*MfsTi&X~~XI&j!1wrr!#L3Y~(M3wUFDbN$@xtSMoOjRRz54*6QDLgt zH36uaWu)RUF`HWz1Fz`A5PT32l7E<~C(?@M<{bJi6qd;I6Xx44}``EUdCxHJMxYFAG zY6F=4B)#6&B1b@I8@RY`Yw{j&xdRM7>5?HilAo4PC;;zg^i4Tn;1=jzbLZAN$LRx* zp;;~800)P_Sdp^VJ>K2ZIS;pgds_4R0TG09fcIqV0FxsHGJhEX3=F>kvmgKf0DVbB zK~y-)ty4h`z#s^N#s~2gU+P!<(RNst5dzi3^`@Z ztQF_0K@?P3{k;!{_;`gF1d({io_wK8rUeu3aF9bZMzU&ts{mD(*#y!6RhL&&(#%LZ reR delta 1398 zcmV-+1&R9i47Ll9B!6dmR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}wN`DC<0=gN zuT$(1kc1E%2ZO2F8@%IhV>_8-K9g~tsTeF|sogCgwEp*Z&>vh9BvCZasiYKe#S)8D z40717vfVkv?S4Fj%izvV*9n11(d+)`_3*E-+uIA59K77yDSsa`l8-=_$VWh(nFWJ> z3letO?HrFlW!(pDs) z^M0Rx+gMa->n=z@$ld2%2@JOc-I075(R=oJ?#39%XDyr!KV{!pOe2)e3MwO zh~$1^iI-3xNq-)r=P}m(>uOA3G#wQc=)%r?2aXFU*X^~0=J*-LzO{muLk$g*_t3(E z*0``hl|dZ2bLGM7);Df|7-bblFVY~(v}JWE(x4h^oQ;RL7VVlLR+E)fVU{Zv-tv|$ zU*n9-o#85sV2oG3Z1mmaGmXY*lOhiJ$`x?QtZTrS%74u}ydVgVLpR$9zO+OBa8o}h z)iBF{(wy;uH7t9G#rUnZbkkYkXXy7O#N_=50E&>?00zY$IV4u&#KA?J89ZhPRDm1| zK^7>$X3_ytqG}Ry$ue`}9p}wgOp;79_9h5nn$)39(F(C*G}MpBj2fz@7R@Y~TP7=3 zlcty~rGMmUZgSPtqnjsp&tAM{%`sa}*>lb%*CIu+2UUQtZ}t9t-j{9taYH)hK@LF zq~RlvGU`>eL)8!M3Dx*eO*W;bpI=pjmE12OcznSxKI-;~YJHw_ZBuMt zg_F~uSbdmZb0x`j9%}V$|KdO+_PQBE_-#+`4BA?K5XOCWdh+crqtb_u`X=i5#+hD0 z^nV^`Jc8-X=_|nW8u9l)-=_N+%PR{K+2}l$y{Ge7_H1+>%h@`5myOP2`F$OInvKq5 z`Ar>tla0<}d9IFrTt;*r%cFJl;F6|LUxSIB+)=-Dre7T(Pn>H{A4_!VRQw;#wbL8h zmw^WUz!drij6KjuxGMKD0004lX+uL$Nq<8_AaHVTW@&6?004NLeUUpz13?r;Pokn| z#KIIJ7F(#50Z|c4iJ}M!l0-<Zbl^rY~)aGxUu3O_2{DDj)( zbdmikGw8%3W5PjUEnUS%6`L!LB|IeDowRJp_s2_|RJ@_s%H+**ovOpYvOO17y6i3{ znPP@nGz{{rk|9S(PFob0h}?&3_ZoK z(a;T(s0A`%3;-7zgysNo0000%NklaB^>EX>4U6ba`-PAZ2)IW&i+q+O<|~lIti8 z{I65&5s(B3jsqB~-VOHn+t^MfnS9upHyg@^2qD_tLN@h({|x#EKM`@{gQb{bbolw~ zvlI-H+kSbyv-9hH|Kl!$J3Cz`1SUnV+g~fYe}O%GEx7E#^?%+@X`hj_2f9Sw1M1va zFj#Iu!Y-Sg{T?XyZ4h&^Tc}mGzU_`Hl>IWlVsR37^!QJ=25(?#3D`(Qy0SXlMRx?c zT?KZ=UDQuMv}tjKPStiKAmr}xt^~SUg6>GZjOaW2*U>lfrR;Y7#%0_&!rW{cJqMH0z=Xx;5zp&AiGL z3$Od;b-%_5J1-1ZVFcq<>=%vRO@7j7j5aA^m#$m^mw(K>28^lPyu%BE@Yr<=E5Vnx z%kOUT2dV02`cIk@9>U6GN5Hd-tbrpt6ESA+ zm>^IA@_9BY6yOkK0Z8$xQOG38+#73*S6>MdWtvf&AVkop25qtyh~<4i{+Lh5p%OIs z5JC(V5`TppO4R6Mh%s86MXs2dw_wrCl4UDNlTRVVWGSVbN|vmsfg#6iIpv&75h~cI zAXb5Yfu%~->T9U6T1_?A(vUvQx6op@wOy#C#E(;Dt5P%F*8(MfO1_^y<34^cNeJOWJHwx*LZgQj?P3e9^If8VLx;;^C zneVx_Dz=@%$*EJEKFs%2NK%Ab*-qo>x9!@ zsDG^Ex~O(;e*ud=py4enT5;XMdb$2BTsngDnw5J}=%nAF8{Iw48}vtD=_~xt(M&gb z<@YM=EAVtG;SQtbKxe2vvkg5X<&pAZ&~%iJC-VrI{j>ag08Qu4_AzMs;kt)q^gC2* zr*kL&xU$d>xqU$S1CE~ebg}>*qNMaIhks4BNBgimKaEQ#$UGJGlj8pt9i6UR2WaU% z31|D4nSJ7wJIVz@^7z0Zt#ymkdmGX|lEX>4Tx0C=2zkv&MmP!xqvQ-7tR zl@4}LamY}eEQpFYN)?M>p|llRbufA9A2ex5Qd}Gb*MfsTi&X~~XI&j!1wrr!#L3Y~ z(M3wUFDbN$@xtSMoOjRRz54*6QDLgtH36uaWu)RUF`HWz1Fz`A5PT32l9;I{(u)~* z*4I6CQr$&)mUrKu)vx4D2KYqcIe(@b7V!r0%%-Jt-X{*TlB5uy6OS8oLE=ZQ%Pzlh zE;=mm%&?J3%@c=-#bO7`9n4CGN<2**QB;lcg{;d8=Pk}^rN&zKM< z{bJi6qd;I6Xx44}``EUdCxHJMxYFAGY6F=4B)#6&B1b@I8@RY`Yw{j&xdRM7>5?Hi zlAo4PC;;zg^i4Tn;1=jzbLZAN$LRx*p;;~800)P_Sdp^VJ>K2ZIk$g%TJ!q>5rlGp z_hjq<00006VoOIv000000FzDzC4U(K3MH%QjLHB20DehCK~y-)ty9Sjz%U3iCb^rhX07*qoM6N<$f*WP}4*&oF delta 1814 zcmV+x2kH3R4BZZpBYy;hdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+SONEvg;@e z{MRaG2}rz`!?S93Fw36?V>`!jl9Q?XGofOz45I0lKke|P!|A7K;7SRY(;PT^ys ziIOk~YWu`_Wo71d-Kc%=!%oKofk~s++pSM)euCYe3-&!Y|9`YoSWhG@N4w|cP>-Dj zgZc;(cG>J~mZR9Vfs4UELd~-EWlfw=*4LYfMTuSLaZis1vx{xnv+4Y4>w>ZM!_5s^_@+ZX) z8|wp+{Cpr)`G2S5tZ(l%^xn49CF8)TTM?ybXJ@Rz#0<*yT;|X`z7}IYTSN;gsRGHX zDk`HDjx1266C19axO1C*;R1+8nt1dgMf9`(HIzyXuWn~QAuj4eHN)|h9}Zz;s&>v8~!u(t&m1ixYB5b*3+c@fVH9s>kQ zKrY%yh5~G@RDcwtwG;9ZWbBPKp66V#;$)ann;?YM4*3+IP=Z*-Sj3Mv0Wp-Uw#HiP ztha$|w13HIXPkA;c{hq&^4c43z4P7&AAJfsm|%koK7}k8)y%W>8EFLvcS8KtRjT zOa(SZhH^tQ6$MFQ1t9IvhAI!mAfah2w)3Igsobx0BO89Dn|xA^hID^IIf8W0y4|Q& z$9t|!#kMRQoGOj%!}AsrNl4?RmcHs+c2^6T^re#*J^g0~C#p8U(4Rmv`uC1{vfH*j z7=LJ_(tMzFb7>B9Yo(*EV@Q7p(B|lJ+;?EE{Q-^^x;tNA0i)MC?7-3j=3WAeC@`c= zWnj}Qf=GEif*if404c7u2UcS$CDTM-M1(BDex07`^t7> z*2YuAxN8_5G~6Yi7rAuR{zHW8M&~}}CRSdg?jik27>$8`l7=@=M>2(zB5fB%cz;NE+Fjic#)Ok zb65|ue}?H!vfZiKGx%M(o~lr?vSiVxEWC~s%n?t=;2{CZ!{O;Ba&I%@5}{A!i#`^> zjaQuRJtn%%rng!8b*X(>f^Q>)J{zX{FZ=(qBm6_E5x=MZ1sE^v`oLTW^Z)<>gp>XQ z7=J(*hTo=2MJoKX?$-8R#SxRlGUNTFBs(G(Fy zKxUSa%q(Q#JHGA_;QL*SXZhFtIr`Ot#eaZ+L_Et3(5){->K@~P)wCki;NYi=T$3N`)Q{+;}RRJT%JT{;~cKzUg@PE6v zR&jE|OA5z zmpj1FlOdb3D+Or@#Uk*2M&FbN25*7hRj+TYbDTZ^S?bl&4RCM>jFu>S&F9@coqhYa zrq#b6Qgm{f1=REt00006VoOIv0F#sjDSrzTIuB3jjbH!(0Ln>3K~y-)wUb>Af-n$- zzb(iy1P!m8glpib;2J#%uO`N87;$|l@>_nQag$BcW@mP1HibWjwz(Lx2DW7kKz_L| z)|%-l;bQeKg*H1TF1QPb?$dg^VZ5gYr(vN<%)md#Bd;Ku${%wbucWX~T z4in3C(F?PG0Nq@p+Uf+VAVCWl@;^WY#E=)a4jaxX4e)aNFRlRC^4JnLK;-qnbsr6- zp7GsjtF*g>epSJ+a3Z!DReK1U9m{KGy!z#5lb^rq8@v-kq}ck4g8%>k07*qoM6N<$ Ef(w^=t^fc4 diff --git a/src/main/resources/assets/gregtech/textures/gui/widget/warning.png b/src/main/resources/assets/gregtech/textures/gui/widget/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..bdaa2faa902364def4b7012b076551ad510e9445 GIT binary patch literal 1653 zcmV-*28#KKP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YulH@83{MRYw2uL87<6xGEcY}BQNxW3q)pnPw zdra71A*6IBi>dwpU#CB~gp((yA^POK!R3-mlF^7}xzhY(N%z{SUgM?icJG(VdYD>eX81_&nS?aPn&QR7n zxEYHPUD4y6_68TgQdK0fBF(Zjc#2&S*yYZ!GoE7I@Ix6EN2rY5z7>QVKJP)G*%Ndi zd27)t`;XQO`I1+=ec{rt9HDXA!Fo>qOz|$UeISx!hc*+we9n6JUSscV`MT^p81?In zGPJQX#=vm`<#rzCQ37s7JIp1aM3YT{@K#p&&2Ii+s+uwV2h9;5n9a0=n3SJ$%g#Dm_$lgT z2{DDb1^`9KtpI~1;MjP!%AQRS3C!RzLZA%fV{J@OfK{aeq&RE6P>?7iH^u~>eMQB~ zFk^3m5Nf>*&?eaov7A%PpWq_qP*$r>RlNp{q)D^4-g))j2R}Bs9BgnwgAXCZkV1|& zx~S2|5MxX+CrK82peCO}iYcX>g)$Ol#LDo`uuL-9$xS->DNJ!nQ!bc3#T6~Sgc3_C zxk|Ma+eGy>)L2u^jj3U$Xs&7VEwtED%N=vA+wQt{-$Rc*_54t6RrO2xKs8=flUb?Z z7app?N+E0^cx)#+G=pN|7>b9X04B5y%}iwHWGFW@GfA*0Q~*+kHdJ{i1_@nb(asO; zp32?QjWpiUP2MR-L%M&V96`FTx}B(2$2nJK#gl9EeLh$7+&1Q=wk_JNnPzX9I;frEHn!oUotwQX^tUaPt5~Jv&k^kqn5)1q z$Y_IhKz2F$iTD-aZA4exYyfEC=8e}4CwlpqZ@{0=qvn?ub$GY-g$%5gCA%sX+2(z8 zJ~+{p*G0(7`AY}9KZ>~wqHpoW`zdHY>SVpWg}WuDm(2G@oeZMequ#)!PcvU7rXP(u zflEK9_n4SI-VZOL(?^VcgODz{`4A!fO7k5;y1k^{)b!axy+%my1-XZmei!A5kbbrG z@9KMJ|M_8c*x%{${JeEsK9SND)Emdp|llRbufA9A2ex5Qd}Gb*MfsTi&X~~XI&j!1wrr!#L3Y~(M3wUFDbN$ z@xtSMoOjRRz54*6QDLgtH36uaWu)RUF`HWz1Fz`A5PT32l9;I{(u)~**4I6CQr$&) zmUrKu)vx4D2KYqcIi?#H@dokCrloV9iC zZTtJ!wwot_{~5T_+Wu+-nEfQZ-qs>VKxiAdxNd9m9&ot>3_j_SAvuztmQW}F?`QN) zIbh%x=v{N?);h=O1CXIvE#CkKhrn2ove!M{-P1X@e|uW<`vDPza)9?_>;M1&00v@9 zM??Ss00000`9r&Z00009a7bBm000iX000iX0Z03gtpET32XskIMF->y837IsV>z&n z0001hNklaB^>EX>4U6ba`-PAZ2)IW&i+q+O=0%w(BSi z{MRaa2}lfrCU3j{g>^Qlv!?7VkNJSMxLhau_o&Lc`#5!_bV@M$wd|Yx# zG8)k=pESSOxcR+)F}O()p3ThKI&#HM*NB%-|5!i6f9MbL{_9(wgzvpD+0Sb z8Ft1S1P?!yVKIct*=|xx+U*0EVdV&ommTb1lRr~@ zli2Qv!N|*MER9lpAk&K@je%Zhj_sE35qG zX8mBPnz8%`%@GsKW?Di_o`2SsoprYG^Qf0C#H4i%0E&>?0}Qr+V-whV4s29JnZaX( zKpDu#-k6{OdoL9r1v?`MsYDsMF-Cdz6)!=C8D|rO@HSY5Hpym)<($X*Q5Ug>vbWxO z?}Jw#$$uxGgAFeD5Q2tr$Yr(a)N4@Hs7Z6Q(M2Ca)EHxmIZ3iO1APifQ%ou4ER>Nb zBUXlghGmk;PHys3m~@I$nsUMNDX#buik4VX$yKVYI3{YST4PN$H>QS@qPgZR@u#)N)g2!>5p&UWFXWd?? zR>wV8X2q6WI5;&HyAS;>W|El4rIs(%eR4-#wEM)VT@3fKrq6IR4s)xQYI=#gOKX&u zj(;kpS1sS;qMxAClB|?sdX7sxoV4XA!aX{=g?EqcaHdIRPubiusM1Nw7aCpW=-Ba{ zADvI@g!~7*bO!i3o-I(jHo-Gl=wJdD7U6wZdgkRS;rIS@eFEpW>C^m2xar%0kK^bX z@b|dsyZq0%>9c{yxaqt6&o!N$S)bsf-+vH%i<3S->t83JPgn2}PWpz}SNQ1f?6kM* z=sMnC2KvECzqvauFUae7jL^~8tM~3()vnUK-Me&u@t)kfZ|-CIXw1oP75dGOtN$ZV z#~(lZBK;33!fvLP^~aAE$6^me@v=v%)FnQ@8G-*guTpR`0f`dPcRRqpci*4YujEYz_(bA4rhgk2@dokCrloV@*Z%x0}MXtk|8;g zpO#Q40Pkn?O*vrT7U*4b=hiyM=>w3VSuNiH2Zz8|k+Ro4-rdtVw|{$D^ZNl2gmQrQ zWb6O{000JJOGiWi0000000j9%yML2F1|WYK0SYTjQK8KM004eTL_t(I%dJyE4!|G? zD~OB8m8`n?tpjFLt~M|g$fms7lFW>>GndDWlG-&0y*eLs hR+gQgxcZStxB+I4L^JnOFe?B6002ovPDHLkV1n~C{doWY delta 1760 zcmV<61|Rv_44n>;BYy;OdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxmg6W4 z{nsjH2}nXbmVs{u&&7~bD&_7w1i3k1w#>$Ap^?K7T&jDeWFfd!gIPdqJI^ z1&#Iy5_Va3_Ish+S0m&UAE6$y>beJ>Q1%u5iN%R+^mwL6gO6aT862rdS5}9+=tiLH zDzNjqV;pNl+td-NHIx@2pI+}ypnD|f6Unz0J+psrJ&`YE+x3adusK5GvV-lK{FCAb z$9hL3PaVU>FMqGIuQ6I0qp!CsK7i4%Bg)Z@ojC^s4^Xb>w15(E8QSqI86~;mDkN{N zx&x(hW`Qb$*mL8;gZo)mu7K#JOGGVFMNeDOC|Rmbo%}33Bx=^C31U_0qzbd#vGD0P zpZ+Q*cy5fL!dQ$k<+p|Y)cKP_W7J6zyL9IYxMapPV1G>I<{hIT2#>9sodn;?mftOwif_J@NEEt;P>nTt8ri#MItkJOc1C5 zxu}-|3b2_pfE2G9grX#wzA-2AIaW-9Ofzy5gfI=*PYDVYh~>Q@exgr^p<-&@%z{Nr zWZ6p4;D3XK5Mr1~u0)MKS`0D96mu*|lTVgHiYcX>N|vn1ftEv#Ipv&75h`$0uvWqN z0?Q$X9{#W+9Pvm;K1xOSR9~%z8f&V#mL^Rb(nJd_w$ySfov9;Jbl5Q#UP>YEH?PA-G_27=|+}b(oMcoj;3^fLpg$UUv;}st<7_; zo{FtqI60kZ&_U%QiE!bpXzXpCQ1*6BKbpYS6FdXlaT;tMkgKNEP)_#$K+!h?l7Dvn z*?+TTt~f+fAzT$d*^u9^X*c3Yw-ubV%Tvj1I~RUJS%a?mJ!q=!m`$Ohnj+hmv!_<< zuXB+5X-&ds>+q7QU(JR9ts7#K7=A++XsT;MPF?X4u~(|BDfLa(0EHs0Z9d&KLUJy%fF?&HQy~XSWvGf+R7k|Xk zi_F#sX8m{abGT9K`#02nWtQHd_9|)7OIhoMq(yITEuaj0E%x0@pw*-J*YM^+v?ZeE z@Mmzpb4dMoN$u5vuOz);MDo{n51`LALG^_JUsxLgzLWfmC-&=S|BpW+K3rSekfr`) zE&2;!&aWmqB^>y)%Q)oz0}^QaYzQ*?;eG%B0fdwN0~mim7>3`bN<}LUW)N}6&^lQV z6>*d*7QsSkE41oha_Jv5F(fH2j)H5!!JoydgNw7S4z7YA_ygkP=%nZ(C4QF_TEuwA zaS!i(@5|kHfY7Ki&FUHlG~G7SiMW)@uSlU+^wAU%ML=ejk<2V);XA(W5#ak>jA!}R z{W<#8g2jJ;fJ8jY4AUlFC!XH44bJ<-A}h-(@j3CBNf#u3NmL3aJ%fAD|1w^ng-!b=Lrf$kT_`G^9cU7%Ta zobO}DX`TSVXW&Y2`!^cE%qQvfwiY=82DX8V>$axs0hc?#(32sXvMU8?3B@Aten#Jv z2L^9}-c_$}t#h0{09oqQ(hYEM2#l5}d(G$FJ)M2~x2DyJNR5;7ck}VIyFcd{kn>K0HEEx_w z3XkDu&)`w>;6|`hZPH|&Dp{Z#MX{^e`+85m9{gJ(4R*(UbkY}v>|nTGZvsFi(@Bpx zJkT~ShJzEhwtmgkw5V-ldj?(2gnQ_k$n>1*eUYwUbAp(;>+|vnK9#whVxcz+_(dxP zh(a&>3!%@ycB(A`f)jMj_eRPB>|k(hjW2BF^=JfMDJ(3#5O3W80000NrE From 616f97fe0da58f97ff5c2d48a59474ee248239ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Tue, 24 Nov 2020 23:41:22 -0300 Subject: [PATCH 06/37] Add some hooks in power and recipe logic --- src/main/java/gregtech/api/SituationalStatus.java | 4 ++++ .../api/capability/impl/AbstractRecipeLogic.java | 7 +++++++ .../gregtech/api/metatileentity/MetaTileEntity.java | 12 ++++++++++++ .../metatileentity/SimpleMachineMetaTileEntity.java | 8 ++------ src/main/resources/assets/gregtech/lang/en_us.lang | 7 +++++-- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/api/SituationalStatus.java b/src/main/java/gregtech/api/SituationalStatus.java index b3191215f2..747113a4de 100644 --- a/src/main/java/gregtech/api/SituationalStatus.java +++ b/src/main/java/gregtech/api/SituationalStatus.java @@ -21,6 +21,8 @@ public class SituationalStatus { public static SituationalStatus IDLE; public static SituationalStatus EXPECTED_CAPABILITY_UNAVAILABLE; public static SituationalStatus EMPTY_SOURCE; + public static SituationalStatus INSUFFICIENT_POWER; + public static SituationalStatus NO_MATCHING_RECIPE; public SituationalStatus(String localeName, int errorGroup,int code) { this.localeName = localeName; @@ -35,6 +37,8 @@ public static void init() { IDLE = registerSituationalStatus(BLUE, "gregtech.situational_status.idle"); EXPECTED_CAPABILITY_UNAVAILABLE = registerSituationalStatus(RED, "gregtech.situational_status.null_capability"); EMPTY_SOURCE = registerSituationalStatus(YELLOW, "gregtech.situational_status.empty_source"); + INSUFFICIENT_POWER = registerSituationalStatus(YELLOW, "gregtech.situational_status.insufficient_power"); + NO_MATCHING_RECIPE = registerSituationalStatus(YELLOW, "gregtech.situational_status.no_matching_recipe"); } public static SituationalStatus registerSituationalStatus(int errorGroup, String localeName){ diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index ffcdc23b58..39133f9551 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Random; +import static gregtech.api.SituationalStatus.*; + public abstract class AbstractRecipeLogic extends MTETrait implements IWorkable { public final RecipeMap recipeMap; @@ -123,10 +125,12 @@ protected void updateRecipeProgress() { if (++progressTime > maxProgressTime) { completeRecipe(); } + metaTileEntity.setSituationalStatus(WORKING); } else if (recipeEUt > 0) { //only set hasNotEnoughEnergy if this recipe is consuming recipe //generators always have enough energy this.hasNotEnoughEnergy = true; + metaTileEntity.setSituationalStatus(INSUFFICIENT_POWER); //if current progress value is greater than 2, decrement it by 2 if (progressTime >= 2) { if (ConfigHolder.insufficientEnergySupplyWipesRecipeProgress) { @@ -160,6 +164,9 @@ protected void trySearchNewRecipe() { if (currentRecipe != null && setupAndConsumeRecipeInputs(currentRecipe)) { setupRecipe(currentRecipe); } + if (currentRecipe == null){ + metaTileEntity.setSituationalStatus(NO_MATCHING_RECIPE); + } } public void forceRecipeRecheck() { diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 7391ea42dc..f6be9bab19 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -10,6 +10,7 @@ import codechicken.lib.vec.Matrix4; import com.google.common.base.Preconditions; import gregtech.api.GregTechAPI; +import gregtech.api.SituationalStatus; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.impl.FluidHandlerProxy; @@ -88,6 +89,8 @@ public abstract class MetaTileEntity implements ICoverable { private CoverBehavior[] coverBehaviors = new CoverBehavior[6]; + private SituationalStatus situationalStatus; + public MetaTileEntity(ResourceLocation metaTileEntityId) { this.metaTileEntityId = metaTileEntityId; initializeInventory(); @@ -1041,6 +1044,15 @@ public void setFragile(boolean fragile) { } } + public int getSituationalStatus() { + if (this.situationalStatus == null) return -1; + return this.situationalStatus.code; + } + + public void setSituationalStatus(SituationalStatus situationalStatus) { + this.situationalStatus = situationalStatus; + } + public boolean isValidFrontFacing(EnumFacing facing) { return facing != EnumFacing.UP && facing != EnumFacing.DOWN; } diff --git a/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java index 21e82d013b..8bf9ae10a9 100644 --- a/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java @@ -11,10 +11,7 @@ import gregtech.api.cover.CoverDefinition; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; -import gregtech.api.gui.widgets.DischargerSlotWidget; -import gregtech.api.gui.widgets.ImageWidget; -import gregtech.api.gui.widgets.LabelWidget; -import gregtech.api.gui.widgets.ToggleButtonWidget; +import gregtech.api.gui.widgets.*; import gregtech.api.recipes.RecipeMap; import gregtech.api.render.OrientedOverlayRenderer; import gregtech.api.render.Textures; @@ -300,8 +297,7 @@ protected ModularUI.Builder createGuiTemplate(EntityPlayer player) { .widget(new LabelWidget(5, 5, getMetaFullName())) .widget(new DischargerSlotWidget(chargerInventory, 0, 79, 62) .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.CHARGER_OVERLAY)) - .widget(new ImageWidget(79, 42, 18, 18, GuiTextures.INDICATOR_NO_ENERGY) - .setPredicate(workable::isHasNotEnoughEnergy)) + .widget(new SituationalWidget(80,43,16,16,this::getSituationalStatus)) .bindPlayerInventory(player.inventory); int leftButtonStartX = 7; diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index f00c41fb73..d1b1a208db 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -759,8 +759,11 @@ cover.machine_controller.mode.cover_west=Control Cover (West) gregtech.situational_status.idle=This cover is idling gregtech.situational_status.working=This cover is working without issue -gregtech.situational_status.null_capability=This cover currently cant access this inventory from this side. No work will be done. -gregtech.situational_status.empty_source=This inventory is empty. +gregtech.situational_status.null_capability=This cover currently cant access this inventory from this side. No work will be done +gregtech.situational_status.empty_source=This inventory is empty +gregtech.situational_status.insufficient_power=Not enough power to run this current recipe +gregtech.situational_status.no_matching_recipe=input does not match any recipes for this machine tier + # %s is a localized material name item.material.oreprefix.oreBlackgranite=Granite %s Ore From 43a1fd62809770cf2f8ae43857755c7f5538c9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 25 Nov 2020 16:47:40 -0300 Subject: [PATCH 07/37] renaming renaming again --- .../java/gregtech/api/SituationalStatus.java | 17 +++++++++-------- src/main/java/gregtech/api/gui/GuiTextures.java | 2 +- .../api/metatileentity/MetaTileEntity.java | 9 ++++----- .../gregtech/common/covers/CoverConveyor.java | 16 +++++++++------- .../java/gregtech/common/covers/CoverPump.java | 10 +++++----- .../resources/assets/gregtech/lang/en_us.lang | 6 +++--- 6 files changed, 31 insertions(+), 29 deletions(-) diff --git a/src/main/java/gregtech/api/SituationalStatus.java b/src/main/java/gregtech/api/SituationalStatus.java index 747113a4de..fbf182f144 100644 --- a/src/main/java/gregtech/api/SituationalStatus.java +++ b/src/main/java/gregtech/api/SituationalStatus.java @@ -17,12 +17,12 @@ public class SituationalStatus { public int code; public String localeName; - public static SituationalStatus WORKING; - public static SituationalStatus IDLE; - public static SituationalStatus EXPECTED_CAPABILITY_UNAVAILABLE; - public static SituationalStatus EMPTY_SOURCE; - public static SituationalStatus INSUFFICIENT_POWER; - public static SituationalStatus NO_MATCHING_RECIPE; + public static int WORKING; + public static int IDLE; + public static int EXPECTED_CAPABILITY_UNAVAILABLE; + public static int EMPTY_SOURCE; + public static int INSUFFICIENT_POWER; + public static int NO_MATCHING_RECIPE; public SituationalStatus(String localeName, int errorGroup,int code) { this.localeName = localeName; @@ -41,11 +41,12 @@ public static void init() { NO_MATCHING_RECIPE = registerSituationalStatus(YELLOW, "gregtech.situational_status.no_matching_recipe"); } - public static SituationalStatus registerSituationalStatus(int errorGroup, String localeName){ + public static int registerSituationalStatus(int errorGroup, String localeName){ SituationalStatus situationalStatus = new SituationalStatus(localeName, errorGroup, registryIdIndex); SITUATIONAL_STATUS_REGISTRY.register(registryIdIndex, situationalStatus, registryIdIndex); + int currentRegistryIdIndex = registryIdIndex; registryIdIndex += 1; - return situationalStatus; + return currentRegistryIdIndex; } public static SituationalStatus getSituationalStatusFromId(int id) { diff --git a/src/main/java/gregtech/api/gui/GuiTextures.java b/src/main/java/gregtech/api/gui/GuiTextures.java index 60ba3733ad..bb8da96c8d 100644 --- a/src/main/java/gregtech/api/gui/GuiTextures.java +++ b/src/main/java/gregtech/api/gui/GuiTextures.java @@ -48,7 +48,7 @@ public class GuiTextures { public static final TextureArea STATUS_IDLING = TextureArea.fullImage("textures/gui/widget/idling.png"); public static final TextureArea STATUS_WORKING = TextureArea.fullImage("textures/gui/widget/working.png"); public static final TextureArea STATUS_ISSUE =TextureArea.fullImage("textures/gui/widget/issue.png"); - public static final TextureArea STATUS_WARNING =TextureArea.fullImage("textures/gui/widget/issue.png"); + public static final TextureArea STATUS_WARNING =TextureArea.fullImage("textures/gui/widget/warning.png"); //BRONZE diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index f6be9bab19..24f767f70e 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -89,7 +89,7 @@ public abstract class MetaTileEntity implements ICoverable { private CoverBehavior[] coverBehaviors = new CoverBehavior[6]; - private SituationalStatus situationalStatus; + private int situationCode; public MetaTileEntity(ResourceLocation metaTileEntityId) { this.metaTileEntityId = metaTileEntityId; @@ -1045,12 +1045,11 @@ public void setFragile(boolean fragile) { } public int getSituationalStatus() { - if (this.situationalStatus == null) return -1; - return this.situationalStatus.code; + return this.situationCode; } - public void setSituationalStatus(SituationalStatus situationalStatus) { - this.situationalStatus = situationalStatus; + public void setSituationalStatus(int situationCode) { + this.situationCode = situationCode; } public boolean isValidFrontFacing(EnumFacing facing) { diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 70c3aa1679..e3b80f0803 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -38,6 +38,8 @@ import javax.annotation.Nonnull; import java.util.*; +import static gregtech.api.SituationalStatus.IDLE; + public class CoverConveyor extends CoverBehavior implements CoverWithUI, ITickable, IControllable { public final int tier; @@ -49,7 +51,7 @@ public class CoverConveyor extends CoverBehavior implements CoverWithUI, ITickab protected int itemsLeftToTransferLastSecond; private CoverableItemHandlerWrapper itemHandlerWrapper; protected boolean isWorkingAllowed = true; - protected SituationalStatus situationalStatus; + protected int situationCode; public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, int itemsPerSecond) { super(coverable, attachedSide); @@ -58,7 +60,7 @@ public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, in this.transferRate = maxItemTransferRate; this.itemsLeftToTransferLastSecond = transferRate; this.conveyorMode = ConveyorMode.EXPORT; - this.situationalStatus = SituationalStatus.IDLE; + this.situationCode = SituationalStatus.IDLE; this.itemFilterContainer = new ItemFilterContainer(this); } @@ -90,11 +92,11 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo } public int getSituationalStatus() { - return this.situationalStatus.code; + return this.situationCode; } - public void setSituationalStatus(SituationalStatus situationalStatus) { - this.situationalStatus = situationalStatus; + public void setSituationalStatus(int situationCode) { + this.situationCode = situationCode; } @Override @@ -109,7 +111,7 @@ public void update() { return; } if (itemHandler == null) { - setSituationalStatus(SituationalStatus.IDLE); + setSituationalStatus(IDLE); return; } int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond); @@ -119,7 +121,7 @@ public void update() { if (itemsLeftToTransferLastSecond < transferRate) { setSituationalStatus(SituationalStatus.WORKING); } else { - setSituationalStatus(SituationalStatus.IDLE); + setSituationalStatus(IDLE); } this.itemsLeftToTransferLastSecond = transferRate; } diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 86d081c6ac..fbed84d74f 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -48,7 +48,7 @@ public class CoverPump extends CoverBehavior implements CoverWithUI, ITickable, protected boolean isWorkingAllowed = true; protected final FluidFilterContainer fluidFilter; protected BucketMode bucketMode; - protected SituationalStatus situationalStatus; + protected int situationCode; public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int mbPerTick) { super(coverHolder, attachedSide); @@ -58,7 +58,7 @@ public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int this.fluidLeftToTransferLastSecond = transferRate; this.pumpMode = PumpMode.EXPORT; this.bucketMode = BucketMode.MILLI_BUCKET; - this.situationalStatus = SituationalStatus.IDLE; + this.situationCode = SituationalStatus.IDLE; this.fluidFilter = new FluidFilterContainer(this); } @@ -102,11 +102,11 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo } public int getSituationalStatus() { - return this.situationalStatus.code; + return this.situationCode; } - public void setSituationalStatus(SituationalStatus situationalStatus) { - this.situationalStatus = situationalStatus; + public void setSituationalStatus(int situationCode) { + this.situationCode = situationCode; } @Override diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index d1b1a208db..b91245f840 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -757,12 +757,12 @@ cover.machine_controller.mode.cover_north=Control Cover (North) cover.machine_controller.mode.cover_east=Control Cover (East) cover.machine_controller.mode.cover_west=Control Cover (West) -gregtech.situational_status.idle=This cover is idling -gregtech.situational_status.working=This cover is working without issue +gregtech.situational_status.idle=This %s is idling +gregtech.situational_status.working=This %s is working without issue gregtech.situational_status.null_capability=This cover currently cant access this inventory from this side. No work will be done gregtech.situational_status.empty_source=This inventory is empty gregtech.situational_status.insufficient_power=Not enough power to run this current recipe -gregtech.situational_status.no_matching_recipe=input does not match any recipes for this machine tier +gregtech.situational_status.no_matching_recipe=input does not match any recipes for this %s tier # %s is a localized material name From 44f4d70c02c957bf428dd81feaa5271e2e04a86b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 25 Nov 2020 17:27:20 -0300 Subject: [PATCH 08/37] add idle logic --- .../api/capability/impl/AbstractRecipeLogic.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 39133f9551..7dc9b10c25 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -8,6 +8,7 @@ import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; +import gregtech.api.util.GTFluidUtils; import gregtech.api.util.GTUtility; import gregtech.common.ConfigHolder; import net.minecraft.item.ItemStack; @@ -147,6 +148,16 @@ protected void trySearchNewRecipe() { Recipe currentRecipe = null; IItemHandlerModifiable importInventory = getInputInventory(); IMultipleTankHandler importFluids = getInputTank(); + boolean hasImportInventory = importInventory.getSlots() > 0; + boolean hasImportFluids = importFluids.getTanks() > 0; + boolean isImportInventoryEmpty = (GTUtility.amountOfNonEmptyStacks(GTUtility.itemHandlerToList(importInventory)) == 0); + boolean isImportFluidsEmpty = (GTUtility.amountOfNonNullElements(GTUtility.fluidHandlerToList(importFluids)) == 0); + if ((isImportInventoryEmpty && isImportFluidsEmpty) || + (isImportInventoryEmpty && !hasImportFluids) || + (isImportFluidsEmpty && !hasImportInventory)) { + metaTileEntity.setSituationalStatus(IDLE); + return; + } if (previousRecipe != null && previousRecipe.matches(false, importInventory, importFluids)) { //if previous recipe still matches inputs, try to use it currentRecipe = previousRecipe; @@ -164,7 +175,7 @@ protected void trySearchNewRecipe() { if (currentRecipe != null && setupAndConsumeRecipeInputs(currentRecipe)) { setupRecipe(currentRecipe); } - if (currentRecipe == null){ + if (currentRecipe == null) { metaTileEntity.setSituationalStatus(NO_MATCHING_RECIPE); } } From 1e98deecf9b1552066843094e3c032060c3f341a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 25 Nov 2020 18:39:15 -0300 Subject: [PATCH 09/37] tweakidle logic and add full destination inventory status --- .../java/gregtech/api/SituationalStatus.java | 3 ++ .../capability/impl/AbstractRecipeLogic.java | 33 ++++++++++++------- .../api/metatileentity/MetaTileEntity.java | 7 +++- .../resources/assets/gregtech/lang/en_us.lang | 1 + 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/main/java/gregtech/api/SituationalStatus.java b/src/main/java/gregtech/api/SituationalStatus.java index fbf182f144..5dfdd7157d 100644 --- a/src/main/java/gregtech/api/SituationalStatus.java +++ b/src/main/java/gregtech/api/SituationalStatus.java @@ -23,6 +23,8 @@ public class SituationalStatus { public static int EMPTY_SOURCE; public static int INSUFFICIENT_POWER; public static int NO_MATCHING_RECIPE; + public static int TARGET_INVENTORY_FULL; + public SituationalStatus(String localeName, int errorGroup,int code) { this.localeName = localeName; @@ -39,6 +41,7 @@ public static void init() { EMPTY_SOURCE = registerSituationalStatus(YELLOW, "gregtech.situational_status.empty_source"); INSUFFICIENT_POWER = registerSituationalStatus(YELLOW, "gregtech.situational_status.insufficient_power"); NO_MATCHING_RECIPE = registerSituationalStatus(YELLOW, "gregtech.situational_status.no_matching_recipe"); + TARGET_INVENTORY_FULL = registerSituationalStatus(RED, "gregtech.situational_status.target_inventory_full"); } public static int registerSituationalStatus(int errorGroup, String localeName){ diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 7dc9b10c25..e3e725b9e3 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -1,5 +1,6 @@ package gregtech.api.capability.impl; +import crafttweaker.api.item.IItemStack; import gregtech.api.GTValues; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IMultipleTankHandler; @@ -148,16 +149,6 @@ protected void trySearchNewRecipe() { Recipe currentRecipe = null; IItemHandlerModifiable importInventory = getInputInventory(); IMultipleTankHandler importFluids = getInputTank(); - boolean hasImportInventory = importInventory.getSlots() > 0; - boolean hasImportFluids = importFluids.getTanks() > 0; - boolean isImportInventoryEmpty = (GTUtility.amountOfNonEmptyStacks(GTUtility.itemHandlerToList(importInventory)) == 0); - boolean isImportFluidsEmpty = (GTUtility.amountOfNonNullElements(GTUtility.fluidHandlerToList(importFluids)) == 0); - if ((isImportInventoryEmpty && isImportFluidsEmpty) || - (isImportInventoryEmpty && !hasImportFluids) || - (isImportFluidsEmpty && !hasImportInventory)) { - metaTileEntity.setSituationalStatus(IDLE); - return; - } if (previousRecipe != null && previousRecipe.matches(false, importInventory, importFluids)) { //if previous recipe still matches inputs, try to use it currentRecipe = previousRecipe; @@ -175,8 +166,28 @@ protected void trySearchNewRecipe() { if (currentRecipe != null && setupAndConsumeRecipeInputs(currentRecipe)) { setupRecipe(currentRecipe); } + boolean emptyInputSlots = true; + boolean emptyInputTanks = true; if (currentRecipe == null) { - metaTileEntity.setSituationalStatus(NO_MATCHING_RECIPE); + if (importInventory.getSlots() > 0) { + for (int i = 0; i < importInventory.getSlots(); i++) { + if (!importInventory.getStackInSlot(i).isEmpty()) { + emptyInputSlots = false; + } + } + } + if (importFluids.getTanks() > 0) { + for (int i = 0; i < importFluids.getTanks(); i++) { + if (importFluids.getTankAt(i).getFluid() != null) { + emptyInputTanks = false; + } + } + } + if (emptyInputSlots && emptyInputTanks) { + metaTileEntity.setSituationalStatus(IDLE); + } else { + metaTileEntity.setSituationalStatus(NO_MATCHING_RECIPE); + } } } diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 24f767f70e..6abd272568 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -917,19 +917,24 @@ public void pullItemsFromNearbyHandlers(EnumFacing... allowedFaces) { blockPos.release(); } - protected static void moveInventoryItems(IItemHandler sourceInventory, IItemHandler targetInventory) { + protected void moveInventoryItems(IItemHandler sourceInventory, IItemHandler targetInventory) { + boolean hasItemsToMove = false; + boolean movedItems = false; for (int srcIndex = 0; srcIndex < sourceInventory.getSlots(); srcIndex++) { ItemStack sourceStack = sourceInventory.extractItem(srcIndex, Integer.MAX_VALUE, true); if (sourceStack.isEmpty()) { continue; } + hasItemsToMove = true; ItemStack remainder = ItemHandlerHelper.insertItemStacked(targetInventory, sourceStack, true); int amountToInsert = sourceStack.getCount() - remainder.getCount(); if (amountToInsert > 0) { + movedItems = true; sourceStack = sourceInventory.extractItem(srcIndex, amountToInsert, false); ItemHandlerHelper.insertItemStacked(targetInventory, sourceStack, false); } } + if (hasItemsToMove && !movedItems) setSituationalStatus(SituationalStatus.TARGET_INVENTORY_FULL); } /** diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index b91245f840..525b536f93 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -763,6 +763,7 @@ gregtech.situational_status.null_capability=This cover currently cant access thi gregtech.situational_status.empty_source=This inventory is empty gregtech.situational_status.insufficient_power=Not enough power to run this current recipe gregtech.situational_status.no_matching_recipe=input does not match any recipes for this %s tier +gregtech.situational_status.target_inventory_full=The target inventory is full # %s is a localized material name From a4b5852e1254e5667ee5d90f181eb97eb5ed7472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Thu, 26 Nov 2020 17:57:26 -0300 Subject: [PATCH 10/37] error texture goes in the registry --- .../java/gregtech/api/SituationalStatus.java | 31 +++++++++---------- .../api/gui/widgets/SituationalWidget.java | 11 ++----- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/main/java/gregtech/api/SituationalStatus.java b/src/main/java/gregtech/api/SituationalStatus.java index 5dfdd7157d..11083d39cb 100644 --- a/src/main/java/gregtech/api/SituationalStatus.java +++ b/src/main/java/gregtech/api/SituationalStatus.java @@ -1,5 +1,7 @@ package gregtech.api; +import gregtech.api.gui.GuiTextures; +import gregtech.api.gui.resources.TextureArea; import gregtech.api.util.GTControlledRegistry; import gregtech.api.util.GTLog; @@ -7,13 +9,8 @@ public class SituationalStatus { public static GTControlledRegistry SITUATIONAL_STATUS_REGISTRY = new GTControlledRegistry<>(Short.MAX_VALUE); - public static int GREEN = 0; - public static int BLUE = 1; - public static int YELLOW = 2; - public static int RED = 3; - private static int registryIdIndex = 0; - public int errorGroup; + public TextureArea iconTexture; public int code; public String localeName; @@ -26,26 +23,26 @@ public class SituationalStatus { public static int TARGET_INVENTORY_FULL; - public SituationalStatus(String localeName, int errorGroup,int code) { + public SituationalStatus(String localeName, TextureArea errorGroup,int code) { this.localeName = localeName; - this.errorGroup = errorGroup; + this.iconTexture = errorGroup; this.code = code; } public static void init() { GTLog.logger.info("Registering SituationalStatus"); - WORKING = registerSituationalStatus(GREEN, "gregtech.situational_status.working"); - IDLE = registerSituationalStatus(BLUE, "gregtech.situational_status.idle"); - EXPECTED_CAPABILITY_UNAVAILABLE = registerSituationalStatus(RED, "gregtech.situational_status.null_capability"); - EMPTY_SOURCE = registerSituationalStatus(YELLOW, "gregtech.situational_status.empty_source"); - INSUFFICIENT_POWER = registerSituationalStatus(YELLOW, "gregtech.situational_status.insufficient_power"); - NO_MATCHING_RECIPE = registerSituationalStatus(YELLOW, "gregtech.situational_status.no_matching_recipe"); - TARGET_INVENTORY_FULL = registerSituationalStatus(RED, "gregtech.situational_status.target_inventory_full"); + WORKING = registerSituationalStatus(GuiTextures.STATUS_WORKING, "gregtech.situational_status.working"); + IDLE = registerSituationalStatus(GuiTextures.STATUS_IDLING, "gregtech.situational_status.idle"); + EXPECTED_CAPABILITY_UNAVAILABLE = registerSituationalStatus(GuiTextures.STATUS_ISSUE, "gregtech.situational_status.null_capability"); + EMPTY_SOURCE = registerSituationalStatus(GuiTextures.STATUS_WARNING, "gregtech.situational_status.empty_source"); + INSUFFICIENT_POWER = registerSituationalStatus(GuiTextures.STATUS_WARNING, "gregtech.situational_status.insufficient_power"); + NO_MATCHING_RECIPE = registerSituationalStatus(GuiTextures.STATUS_WARNING, "gregtech.situational_status.no_matching_recipe"); + TARGET_INVENTORY_FULL = registerSituationalStatus(GuiTextures.STATUS_ISSUE, "gregtech.situational_status.target_inventory_full"); } - public static int registerSituationalStatus(int errorGroup, String localeName){ - SituationalStatus situationalStatus = new SituationalStatus(localeName, errorGroup, registryIdIndex); + public static int registerSituationalStatus(TextureArea iconTexture, String localeName){ + SituationalStatus situationalStatus = new SituationalStatus(localeName, iconTexture, registryIdIndex); SITUATIONAL_STATUS_REGISTRY.register(registryIdIndex, situationalStatus, registryIdIndex); int currentRegistryIdIndex = registryIdIndex; registryIdIndex += 1; diff --git a/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java index a192fe0c2f..08fe347245 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java @@ -38,14 +38,9 @@ public void setTooltipHoverString() { } public SituationalWidget setImage() { - if (getSituationalStatusFromId(currentError).errorGroup == BLUE) { - this.area = GuiTextures.STATUS_IDLING; - } else if (getSituationalStatusFromId(currentError).errorGroup == GREEN) { - this.area = GuiTextures.STATUS_WORKING; - } else if (getSituationalStatusFromId(currentError).errorGroup == YELLOW) { - this.area = GuiTextures.STATUS_WARNING; - } else if (getSituationalStatusFromId(currentError).errorGroup == RED) { - this.area = GuiTextures.STATUS_ISSUE; + TextureArea iconTexture = getSituationalStatusFromId(currentError).iconTexture; + if (iconTexture != null) { + this.area = iconTexture; } else { this.area = null; } From 1217f2ae4ea3049094be337c7289a1214adcf434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Fri, 27 Nov 2020 00:29:10 -0300 Subject: [PATCH 11/37] Set up basic machine logic we try to push from from the output side every 5 ticks, so some caching of the state is needed to avoid flickering, due to the rest of the logic running every tick --- .../java/gregtech/api/SituationalStatus.java | 4 +- .../capability/impl/AbstractRecipeLogic.java | 71 +++++++++---------- .../api/metatileentity/MetaTileEntity.java | 58 ++++++++++++++- .../SimpleMachineMetaTileEntity.java | 2 + 4 files changed, 92 insertions(+), 43 deletions(-) diff --git a/src/main/java/gregtech/api/SituationalStatus.java b/src/main/java/gregtech/api/SituationalStatus.java index 11083d39cb..dbaf2ff4ff 100644 --- a/src/main/java/gregtech/api/SituationalStatus.java +++ b/src/main/java/gregtech/api/SituationalStatus.java @@ -21,7 +21,7 @@ public class SituationalStatus { public static int INSUFFICIENT_POWER; public static int NO_MATCHING_RECIPE; public static int TARGET_INVENTORY_FULL; - + public static int OUTPUT_INVENTORY_FULL; public SituationalStatus(String localeName, TextureArea errorGroup,int code) { this.localeName = localeName; @@ -31,13 +31,13 @@ public SituationalStatus(String localeName, TextureArea errorGroup,int code) { public static void init() { GTLog.logger.info("Registering SituationalStatus"); - WORKING = registerSituationalStatus(GuiTextures.STATUS_WORKING, "gregtech.situational_status.working"); IDLE = registerSituationalStatus(GuiTextures.STATUS_IDLING, "gregtech.situational_status.idle"); EXPECTED_CAPABILITY_UNAVAILABLE = registerSituationalStatus(GuiTextures.STATUS_ISSUE, "gregtech.situational_status.null_capability"); EMPTY_SOURCE = registerSituationalStatus(GuiTextures.STATUS_WARNING, "gregtech.situational_status.empty_source"); INSUFFICIENT_POWER = registerSituationalStatus(GuiTextures.STATUS_WARNING, "gregtech.situational_status.insufficient_power"); NO_MATCHING_RECIPE = registerSituationalStatus(GuiTextures.STATUS_WARNING, "gregtech.situational_status.no_matching_recipe"); + OUTPUT_INVENTORY_FULL = registerSituationalStatus(GuiTextures.STATUS_ISSUE, "gregtech.situational_status.output_inventory_full"); TARGET_INVENTORY_FULL = registerSituationalStatus(GuiTextures.STATUS_ISSUE, "gregtech.situational_status.target_inventory_full"); } diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index e3e725b9e3..c40aef3f9e 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -2,6 +2,7 @@ import crafttweaker.api.item.IItemStack; import gregtech.api.GTValues; +import gregtech.api.SituationalStatus; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.capability.IWorkable; @@ -38,6 +39,7 @@ public abstract class AbstractRecipeLogic extends MTETrait implements IWorkable protected boolean forceRecipeRecheck; protected ItemStack[] lastItemInputs; protected FluidStack[] lastFluidInputs; + protected Recipe currentRecipe; protected Recipe previousRecipe; protected boolean allowOverclocking = true; @@ -107,17 +109,36 @@ public void update() { if (!getMetaTileEntity().getWorld().isRemote) { if (workingEnabled) { if (progressTime > 0) { + int currentProgress = progressTime; updateRecipeProgress(); + if (progressTime > currentProgress) metaTileEntity.setSituationalStatus(WORKING); + else if (progressTime != 0) { + metaTileEntity.setSituationalStatus(INSUFFICIENT_POWER); + } } if (progressTime == 0) { trySearchNewRecipe(); } - } - if (wasActiveAndNeedsUpdate) { - this.wasActiveAndNeedsUpdate = false; - setActive(false); + if (currentRecipe == null) { + if (metaTileEntity.isInputEmpty()) { + metaTileEntity.setSituationalStatus(IDLE); + } else { + metaTileEntity.setSituationalStatus(NO_MATCHING_RECIPE); + } + } else if (!canOutputsFit()) { + metaTileEntity.setSituationalStatus(OUTPUT_INVENTORY_FULL); + } } } + if (wasActiveAndNeedsUpdate) { + this.wasActiveAndNeedsUpdate = false; + setActive(false); + } + } + + boolean canOutputsFit(){ + return (MetaTileEntity.addItemsToItemHandler(metaTileEntity.getExportItems(), true, currentRecipe.getAllItemOutputs(metaTileEntity.getExportItems().getSlots())) && + MetaTileEntity.addFluidsToFluidHandler(metaTileEntity.getExportFluids(), true, currentRecipe.getFluidOutputs())); } protected void updateRecipeProgress() { @@ -127,12 +148,10 @@ protected void updateRecipeProgress() { if (++progressTime > maxProgressTime) { completeRecipe(); } - metaTileEntity.setSituationalStatus(WORKING); } else if (recipeEUt > 0) { //only set hasNotEnoughEnergy if this recipe is consuming recipe //generators always have enough energy this.hasNotEnoughEnergy = true; - metaTileEntity.setSituationalStatus(INSUFFICIENT_POWER); //if current progress value is greater than 2, decrement it by 2 if (progressTime >= 2) { if (ConfigHolder.insufficientEnergySupplyWipesRecipeProgress) { @@ -146,48 +165,24 @@ protected void updateRecipeProgress() { protected void trySearchNewRecipe() { long maxVoltage = getMaxVoltage(); - Recipe currentRecipe = null; IItemHandlerModifiable importInventory = getInputInventory(); IMultipleTankHandler importFluids = getInputTank(); - if (previousRecipe != null && previousRecipe.matches(false, importInventory, importFluids)) { + if (this.previousRecipe != null && this.previousRecipe.matches(false, importInventory, importFluids)) { //if previous recipe still matches inputs, try to use it - currentRecipe = previousRecipe; + this.currentRecipe = this.previousRecipe; } else { boolean dirty = checkRecipeInputsDirty(importInventory, importFluids); - if (dirty || forceRecipeRecheck) { + if (dirty || this.forceRecipeRecheck) { this.forceRecipeRecheck = false; //else, try searching new recipe for given inputs - currentRecipe = findRecipe(maxVoltage, importInventory, importFluids); - if (currentRecipe != null) { - this.previousRecipe = currentRecipe; + this.currentRecipe = findRecipe(maxVoltage, importInventory, importFluids); + if (this.currentRecipe != null) { + this.previousRecipe = this.currentRecipe; } } } - if (currentRecipe != null && setupAndConsumeRecipeInputs(currentRecipe)) { - setupRecipe(currentRecipe); - } - boolean emptyInputSlots = true; - boolean emptyInputTanks = true; - if (currentRecipe == null) { - if (importInventory.getSlots() > 0) { - for (int i = 0; i < importInventory.getSlots(); i++) { - if (!importInventory.getStackInSlot(i).isEmpty()) { - emptyInputSlots = false; - } - } - } - if (importFluids.getTanks() > 0) { - for (int i = 0; i < importFluids.getTanks(); i++) { - if (importFluids.getTankAt(i).getFluid() != null) { - emptyInputTanks = false; - } - } - } - if (emptyInputSlots && emptyInputTanks) { - metaTileEntity.setSituationalStatus(IDLE); - } else { - metaTileEntity.setSituationalStatus(NO_MATCHING_RECIPE); - } + if (this.currentRecipe != null && setupAndConsumeRecipeInputs(this.currentRecipe)) { + setupRecipe(this.currentRecipe); } } diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 6abd272568..3c4cdd8ac3 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -90,6 +90,8 @@ public abstract class MetaTileEntity implements ICoverable { private CoverBehavior[] coverBehaviors = new CoverBehavior[6]; private int situationCode; + private boolean failedToMoveFluids; + private boolean failedToMoveItems; public MetaTileEntity(ResourceLocation metaTileEntityId) { this.metaTileEntityId = metaTileEntityId; @@ -842,6 +844,7 @@ public boolean fillContainerFromInternalTank(IItemHandlerModifiable importItems, } public void pushFluidsIntoNearbyHandlers(EnumFacing... allowedFaces) { + this.failedToMoveFluids = false; PooledMutableBlockPos blockPos = PooledMutableBlockPos.retain(); for (EnumFacing nearbyFacing : allowedFaces) { blockPos.setPos(getPos()).move(nearbyFacing); @@ -855,7 +858,9 @@ public void pushFluidsIntoNearbyHandlers(EnumFacing... allowedFaces) { if (fluidHandler == null || myFluidHandler == null) { continue; } - GTFluidUtils.transferFluids(myFluidHandler, fluidHandler, Integer.MAX_VALUE); + if (GTFluidUtils.transferFluids(myFluidHandler, fluidHandler, Integer.MAX_VALUE) == 0) { + this.failedToMoveFluids = true; + } } blockPos.release(); } @@ -874,7 +879,8 @@ public void pullFluidsFromNearbyHandlers(EnumFacing... allowedFaces) { if (fluidHandler == null || myFluidHandler == null) { continue; } - GTFluidUtils.transferFluids(fluidHandler, myFluidHandler, Integer.MAX_VALUE); + if (GTFluidUtils.transferFluids(fluidHandler, myFluidHandler, Integer.MAX_VALUE) == 0) { + } } blockPos.release(); } @@ -917,9 +923,14 @@ public void pullItemsFromNearbyHandlers(EnumFacing... allowedFaces) { blockPos.release(); } + public boolean failedToMoveItemsOrFluids(){ + return (this.failedToMoveItems || this.failedToMoveFluids); + } + protected void moveInventoryItems(IItemHandler sourceInventory, IItemHandler targetInventory) { boolean hasItemsToMove = false; boolean movedItems = false; + this.failedToMoveItems = false; for (int srcIndex = 0; srcIndex < sourceInventory.getSlots(); srcIndex++) { ItemStack sourceStack = sourceInventory.extractItem(srcIndex, Integer.MAX_VALUE, true); if (sourceStack.isEmpty()) { @@ -934,7 +945,7 @@ protected void moveInventoryItems(IItemHandler sourceInventory, IItemHandler tar ItemHandlerHelper.insertItemStacked(targetInventory, sourceStack, false); } } - if (hasItemsToMove && !movedItems) setSituationalStatus(SituationalStatus.TARGET_INVENTORY_FULL); + if (hasItemsToMove && !movedItems) this.failedToMoveItems = true; } /** @@ -981,6 +992,47 @@ public static boolean addFluidsToFluidHandler(IFluidHandler handler, boolean sim return filledAll; } + public boolean isInputEmpty() { + boolean emptyInputSlots = true; + boolean emptyInputTanks = true; + if (importItems.getSlots() > 0) { + for (int i = 0; i < importItems.getSlots(); i++) { + if (!importItems.getStackInSlot(i).isEmpty()) { + emptyInputSlots = false; + } + } + } + if (importFluids.getTanks() > 0) { + for (int i = 0; i < importFluids.getTanks(); i++) { + if (importFluids.getTankAt(i).getFluid() != null) { + emptyInputTanks = false; + } + } + } + return (emptyInputSlots && emptyInputTanks); + } + + public boolean isOutputFull() { + boolean fullOutputSlots = true; + boolean fullOutputTanks = true; + if (exportItems.getSlots() > 0) { + for (int i = 0; i < exportItems.getSlots(); i++) { + if (exportItems.getStackInSlot(i).getCount() < exportItems.getStackInSlot(i).getMaxStackSize()) { + fullOutputSlots = false; + } + } + } + if (exportFluids.getTanks() > 0) { + for (int i = 0; i < exportFluids.getTanks(); i++) { + if (exportFluids.getTankAt(i).getFluidAmount() < exportFluids.getTankAt(i).getCapacity()) { + fullOutputTanks = false; + } + } + } + return (fullOutputSlots && fullOutputTanks); + } + + public final int getOutputRedstoneSignal(@Nullable EnumFacing side) { if (side == null) { return getHighestOutputRedstoneSignal(); diff --git a/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java index 8bf9ae10a9..a6e798e360 100644 --- a/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java @@ -4,6 +4,7 @@ import codechicken.lib.render.CCRenderState; import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Matrix4; +import gregtech.api.SituationalStatus; import gregtech.api.capability.impl.EnergyContainerHandler; import gregtech.api.capability.impl.FluidHandlerProxy; import gregtech.api.capability.impl.FluidTankList; @@ -132,6 +133,7 @@ public void update() { pushItemsIntoNearbyHandlers(outputFacing); } } + if (failedToMoveItemsOrFluids()) this.setSituationalStatus(SituationalStatus.TARGET_INVENTORY_FULL); } } From 54129f149ab32864db6ac5b352ab6f4417c8f7cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 29 Nov 2020 01:34:21 -0300 Subject: [PATCH 12/37] Split Status Registry and Entries --- src/main/java/gregtech/api/Situation.java | 41 +++++++++++++ .../java/gregtech/api/SituationalStatus.java | 59 ------------------- src/main/java/gregtech/api/Situations.java | 23 ++++++++ 3 files changed, 64 insertions(+), 59 deletions(-) create mode 100644 src/main/java/gregtech/api/Situation.java delete mode 100644 src/main/java/gregtech/api/SituationalStatus.java create mode 100644 src/main/java/gregtech/api/Situations.java diff --git a/src/main/java/gregtech/api/Situation.java b/src/main/java/gregtech/api/Situation.java new file mode 100644 index 0000000000..c321a31063 --- /dev/null +++ b/src/main/java/gregtech/api/Situation.java @@ -0,0 +1,41 @@ +package gregtech.api; + +import gregtech.api.util.GTControlledRegistry; + +public class Situation { + + public static GTControlledRegistry SITUATION_REGISTRY = new GTControlledRegistry<>(Short.MAX_VALUE); + private final String situationName; + public Enum situationType; + public String situationLocaleName; + public int id; + + public Situation(int id, String situationName, Enum situationType, String situationLocaleName) { + this.id = id; + this.situationName = situationName; + this.situationType = situationType; + this.situationLocaleName = situationLocaleName; + registerSituation(id,situationName,this); + } + + public static void registerSituation(int id, String situationName, Situation situation){ + SITUATION_REGISTRY.register(id, situationName, situation); + } + + public static void init() { + //noinspection ResultOfMethodCallIgnored + Situations.WORKING.situationName.getBytes(); + } + + public static Situation getSituationFromId(int id) { + return SITUATION_REGISTRY.getObjectById(id); + } + + public static int getIdFromSituation(String situationName) { + return SITUATION_REGISTRY.getIdByObjectName(situationName); + } + + public static String getLocaleName(Situation situation){ + return situation.situationLocaleName; + } +} diff --git a/src/main/java/gregtech/api/SituationalStatus.java b/src/main/java/gregtech/api/SituationalStatus.java deleted file mode 100644 index dbaf2ff4ff..0000000000 --- a/src/main/java/gregtech/api/SituationalStatus.java +++ /dev/null @@ -1,59 +0,0 @@ -package gregtech.api; - -import gregtech.api.gui.GuiTextures; -import gregtech.api.gui.resources.TextureArea; -import gregtech.api.util.GTControlledRegistry; -import gregtech.api.util.GTLog; - -public class SituationalStatus { - - public static GTControlledRegistry SITUATIONAL_STATUS_REGISTRY = new GTControlledRegistry<>(Short.MAX_VALUE); - - private static int registryIdIndex = 0; - public TextureArea iconTexture; - public int code; - public String localeName; - - public static int WORKING; - public static int IDLE; - public static int EXPECTED_CAPABILITY_UNAVAILABLE; - public static int EMPTY_SOURCE; - public static int INSUFFICIENT_POWER; - public static int NO_MATCHING_RECIPE; - public static int TARGET_INVENTORY_FULL; - public static int OUTPUT_INVENTORY_FULL; - - public SituationalStatus(String localeName, TextureArea errorGroup,int code) { - this.localeName = localeName; - this.iconTexture = errorGroup; - this.code = code; - } - - public static void init() { - GTLog.logger.info("Registering SituationalStatus"); - WORKING = registerSituationalStatus(GuiTextures.STATUS_WORKING, "gregtech.situational_status.working"); - IDLE = registerSituationalStatus(GuiTextures.STATUS_IDLING, "gregtech.situational_status.idle"); - EXPECTED_CAPABILITY_UNAVAILABLE = registerSituationalStatus(GuiTextures.STATUS_ISSUE, "gregtech.situational_status.null_capability"); - EMPTY_SOURCE = registerSituationalStatus(GuiTextures.STATUS_WARNING, "gregtech.situational_status.empty_source"); - INSUFFICIENT_POWER = registerSituationalStatus(GuiTextures.STATUS_WARNING, "gregtech.situational_status.insufficient_power"); - NO_MATCHING_RECIPE = registerSituationalStatus(GuiTextures.STATUS_WARNING, "gregtech.situational_status.no_matching_recipe"); - OUTPUT_INVENTORY_FULL = registerSituationalStatus(GuiTextures.STATUS_ISSUE, "gregtech.situational_status.output_inventory_full"); - TARGET_INVENTORY_FULL = registerSituationalStatus(GuiTextures.STATUS_ISSUE, "gregtech.situational_status.target_inventory_full"); - } - - public static int registerSituationalStatus(TextureArea iconTexture, String localeName){ - SituationalStatus situationalStatus = new SituationalStatus(localeName, iconTexture, registryIdIndex); - SITUATIONAL_STATUS_REGISTRY.register(registryIdIndex, situationalStatus, registryIdIndex); - int currentRegistryIdIndex = registryIdIndex; - registryIdIndex += 1; - return currentRegistryIdIndex; - } - - public static SituationalStatus getSituationalStatusFromId(int id) { - return SITUATIONAL_STATUS_REGISTRY.getNameForObject(id); - } - - public static int getIdFromSituationalStatus(SituationalStatus situationalStatus) { - return SITUATIONAL_STATUS_REGISTRY.getIdByObjectName(situationalStatus); - } -} diff --git a/src/main/java/gregtech/api/Situations.java b/src/main/java/gregtech/api/Situations.java new file mode 100644 index 0000000000..862bedb682 --- /dev/null +++ b/src/main/java/gregtech/api/Situations.java @@ -0,0 +1,23 @@ +package gregtech.api; + +public class Situations { + public static Situation WORKING = new Situation(0, "working", SituationsTypes.WORKING, "gregtech.situation.working"); + + public static Situation IDLE = new Situation(1, "idle", SituationsTypes.IDLE, "gregtech.situation.idle"); + + public static Situation EMPTY_SOURCE = new Situation(2, "emptysource", SituationsTypes.WARNING, "gregtech.situation.empty_source"); + public static Situation INSUFFICIENT_POWER = new Situation(3, "nopower", SituationsTypes.WARNING, "gregtech.situation.insufficient_power"); + public static Situation NO_MATCHING_RECIPE = new Situation(4, "norecipe", SituationsTypes.WARNING, "gregtech.situation.no_matching_recipe"); + public static Situation OUTPUT_INVENTORY_FULL = new Situation(5, "outputfull", SituationsTypes.WARNING, "gregtech.situation.output_inventory_full"); + public static Situation TARGET_INVENTORY_FULL = new Situation(6, "targetfull", SituationsTypes.WARNING, "gregtech.situation.target_inventory_full"); + + public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(7, "nullcapability", SituationsTypes.ERROR, "gregtech.situation.null_capability"); + + public enum SituationsTypes { + WORKING, + IDLE, + ERROR, + WARNING; + } +} + From 5861f40832b78511aa918b947ec32b9b63dc3384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 29 Nov 2020 01:35:44 -0300 Subject: [PATCH 13/37] rename resource to match statustype entry --- src/main/java/gregtech/api/gui/GuiTextures.java | 2 +- .../textures/gui/widget/{issue.png => error.png} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename src/main/resources/assets/gregtech/textures/gui/widget/{issue.png => error.png} (100%) diff --git a/src/main/java/gregtech/api/gui/GuiTextures.java b/src/main/java/gregtech/api/gui/GuiTextures.java index bb8da96c8d..388a9da2bb 100644 --- a/src/main/java/gregtech/api/gui/GuiTextures.java +++ b/src/main/java/gregtech/api/gui/GuiTextures.java @@ -47,7 +47,7 @@ public class GuiTextures { public static final TextureArea SLIDER_ICON = TextureArea.fullImage("textures/gui/widget/slider.png"); public static final TextureArea STATUS_IDLING = TextureArea.fullImage("textures/gui/widget/idling.png"); public static final TextureArea STATUS_WORKING = TextureArea.fullImage("textures/gui/widget/working.png"); - public static final TextureArea STATUS_ISSUE =TextureArea.fullImage("textures/gui/widget/issue.png"); + public static final TextureArea STATUS_ERROR =TextureArea.fullImage("textures/gui/widget/error.png"); public static final TextureArea STATUS_WARNING =TextureArea.fullImage("textures/gui/widget/warning.png"); diff --git a/src/main/resources/assets/gregtech/textures/gui/widget/issue.png b/src/main/resources/assets/gregtech/textures/gui/widget/error.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/gui/widget/issue.png rename to src/main/resources/assets/gregtech/textures/gui/widget/error.png From 61c9ab4d069ddc635cd84faae3f41d4bcd082699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 29 Nov 2020 01:45:43 -0300 Subject: [PATCH 14/37] rename to match Situation and Situations values --- src/main/java/gregtech/GregTechMod.java | 5 ++-- .../capability/impl/AbstractRecipeLogic.java | 18 ++++++------ ...tionalWidget.java => SituationWidget.java} | 24 +++++++++------- .../api/metatileentity/MetaTileEntity.java | 14 ++++++---- .../SimpleMachineMetaTileEntity.java | 7 +++-- .../gregtech/common/covers/CoverConveyor.java | 28 +++++++++---------- .../gregtech/common/covers/CoverPump.java | 28 ++++++++++--------- .../resources/assets/gregtech/lang/en_us.lang | 15 +++++----- 8 files changed, 74 insertions(+), 65 deletions(-) rename src/main/java/gregtech/api/gui/widgets/{SituationalWidget.java => SituationWidget.java} (74%) diff --git a/src/main/java/gregtech/GregTechMod.java b/src/main/java/gregtech/GregTechMod.java index 75b25e7faa..1319f6da75 100644 --- a/src/main/java/gregtech/GregTechMod.java +++ b/src/main/java/gregtech/GregTechMod.java @@ -3,7 +3,8 @@ import codechicken.lib.CodeChickenLib; import crafttweaker.CraftTweakerAPI; import gregtech.api.GTValues; -import gregtech.api.SituationalStatus; +import gregtech.api.Situation; +import gregtech.api.Situations; import gregtech.api.capability.SimpleCapabilityManager; import gregtech.api.cover.CoverBehaviorUIFactory; import gregtech.api.items.gui.PlayerInventoryUIFactory; @@ -83,6 +84,7 @@ public void onConstruction(FMLConstructionEvent event) { public void onPreInit(FMLPreInitializationEvent event) { GTLog.init(event.getModLog()); NetworkHandler.init(); + Situation.init(); MetaTileEntityUIFactory.INSTANCE.init(); PlayerInventoryUIFactory.INSTANCE.init(); CoverBehaviorUIFactory.INSTANCE.init(); @@ -109,7 +111,6 @@ public void onPreInit(FMLPreInitializationEvent event) { MetaFluids.init(); MetaTileEntities.init(); MetaEntities.init(); - SituationalStatus.init(); proxy.onPreLoad(); } diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index c40aef3f9e..03b07fb3bc 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -1,8 +1,6 @@ package gregtech.api.capability.impl; -import crafttweaker.api.item.IItemStack; import gregtech.api.GTValues; -import gregtech.api.SituationalStatus; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.capability.IWorkable; @@ -10,7 +8,6 @@ import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; -import gregtech.api.util.GTFluidUtils; import gregtech.api.util.GTUtility; import gregtech.common.ConfigHolder; import net.minecraft.item.ItemStack; @@ -30,7 +27,7 @@ import java.util.List; import java.util.Random; -import static gregtech.api.SituationalStatus.*; +import static gregtech.api.Situations.*; public abstract class AbstractRecipeLogic extends MTETrait implements IWorkable { @@ -111,9 +108,10 @@ public void update() { if (progressTime > 0) { int currentProgress = progressTime; updateRecipeProgress(); - if (progressTime > currentProgress) metaTileEntity.setSituationalStatus(WORKING); - else if (progressTime != 0) { - metaTileEntity.setSituationalStatus(INSUFFICIENT_POWER); + if (progressTime > currentProgress) { + metaTileEntity.setSituation(WORKING); + } else if (progressTime != 0) { + metaTileEntity.setSituation(INSUFFICIENT_POWER); } } if (progressTime == 0) { @@ -121,12 +119,12 @@ else if (progressTime != 0) { } if (currentRecipe == null) { if (metaTileEntity.isInputEmpty()) { - metaTileEntity.setSituationalStatus(IDLE); + metaTileEntity.setSituation(IDLE); } else { - metaTileEntity.setSituationalStatus(NO_MATCHING_RECIPE); + metaTileEntity.setSituation(NO_MATCHING_RECIPE); } } else if (!canOutputsFit()) { - metaTileEntity.setSituationalStatus(OUTPUT_INVENTORY_FULL); + metaTileEntity.setSituation(OUTPUT_INVENTORY_FULL); } } } diff --git a/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java similarity index 74% rename from src/main/java/gregtech/api/gui/widgets/SituationalWidget.java rename to src/main/java/gregtech/api/gui/widgets/SituationWidget.java index 08fe347245..95f8999fc6 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationalWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -1,5 +1,6 @@ package gregtech.api.gui.widgets; +import gregtech.api.Situation; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.IRenderContext; import gregtech.api.gui.Widget; @@ -14,9 +15,10 @@ import java.util.Collections; import java.util.function.IntSupplier; -import static gregtech.api.SituationalStatus.*; +import static gregtech.api.Situation.*; +import static gregtech.api.Situations.SituationsTypes.*; -public class SituationalWidget extends Widget { +public class SituationWidget extends Widget { private final IntSupplier currentSituationId; protected String tooltipHoverString; @@ -27,21 +29,23 @@ public class SituationalWidget extends Widget { protected TextureArea area; private boolean isVisible = true; - public SituationalWidget(int xPosition, int yPosition, int width, int height, IntSupplier getSituationalStatus) { + public SituationWidget(int xPosition, int yPosition, int width, int height, IntSupplier getSituationId) { super(new Position(xPosition, yPosition), new Size(width, height)); - this.currentSituationId = () -> getSituationalStatus.getAsInt(); + this.currentSituationId = () -> getSituationId.getAsInt(); setImage(); } public void setTooltipHoverString() { - this.tooltipHoverString = I18n.format(getSituationalStatusFromId(currentError).localeName); + this.tooltipHoverString = I18n.format(getSituationFromId(currentError).situationLocaleName); } - public SituationalWidget setImage() { - TextureArea iconTexture = getSituationalStatusFromId(currentError).iconTexture; - if (iconTexture != null) { - this.area = iconTexture; - } else { + public SituationWidget setImage() { + Enum iconTextureEnum = getSituationFromId(currentError).situationType; + if (iconTextureEnum.equals(ERROR)) this.area = GuiTextures.STATUS_ERROR; + else if (iconTextureEnum.equals(WARNING)) this.area = GuiTextures.STATUS_WARNING; + else if (iconTextureEnum.equals(WORKING)) this.area = GuiTextures.STATUS_WORKING; + else if (iconTextureEnum.equals(IDLE)) this.area = GuiTextures.STATUS_IDLING; + else { this.area = null; } return this; diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 3c4cdd8ac3..83de7e83a4 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -10,7 +10,7 @@ import codechicken.lib.vec.Matrix4; import com.google.common.base.Preconditions; import gregtech.api.GregTechAPI; -import gregtech.api.SituationalStatus; +import gregtech.api.Situation; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.impl.FluidHandlerProxy; @@ -59,6 +59,8 @@ import static gregtech.api.util.InventoryUtils.simulateItemStackMerge; +import static gregtech.api.Situations.*; + public abstract class MetaTileEntity implements ICoverable { public static final int DEFAULT_PAINTING_COLOR = 0xFFFFFF; @@ -89,7 +91,7 @@ public abstract class MetaTileEntity implements ICoverable { private CoverBehavior[] coverBehaviors = new CoverBehavior[6]; - private int situationCode; + private Situation situation = IDLE; private boolean failedToMoveFluids; private boolean failedToMoveItems; @@ -1101,12 +1103,12 @@ public void setFragile(boolean fragile) { } } - public int getSituationalStatus() { - return this.situationCode; + public int getSituation() { + return this.situation.id; } - public void setSituationalStatus(int situationCode) { - this.situationCode = situationCode; + public void setSituation(Situation situation) { + this.situation = situation; } public boolean isValidFrontFacing(EnumFacing facing) { diff --git a/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java index a6e798e360..fa6f48729f 100644 --- a/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java @@ -4,7 +4,6 @@ import codechicken.lib.render.CCRenderState; import codechicken.lib.render.pipeline.IVertexOperation; import codechicken.lib.vec.Matrix4; -import gregtech.api.SituationalStatus; import gregtech.api.capability.impl.EnergyContainerHandler; import gregtech.api.capability.impl.FluidHandlerProxy; import gregtech.api.capability.impl.FluidTankList; @@ -34,6 +33,8 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; +import static gregtech.api.Situations.*; + public class SimpleMachineMetaTileEntity extends WorkableTieredMetaTileEntity { private boolean hasFrontFacing; @@ -133,7 +134,7 @@ public void update() { pushItemsIntoNearbyHandlers(outputFacing); } } - if (failedToMoveItemsOrFluids()) this.setSituationalStatus(SituationalStatus.TARGET_INVENTORY_FULL); + if (failedToMoveItemsOrFluids()) this.setSituation(TARGET_INVENTORY_FULL); } } @@ -299,7 +300,7 @@ protected ModularUI.Builder createGuiTemplate(EntityPlayer player) { .widget(new LabelWidget(5, 5, getMetaFullName())) .widget(new DischargerSlotWidget(chargerInventory, 0, 79, 62) .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.CHARGER_OVERLAY)) - .widget(new SituationalWidget(80,43,16,16,this::getSituationalStatus)) + .widget(new SituationWidget(80,43,16,16,this::getSituation)) .bindPlayerInventory(player.inventory); int leftButtonStartX = 7; diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index e3b80f0803..60e5dd7770 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -8,7 +8,7 @@ import gnu.trove.list.TIntList; import gnu.trove.list.array.TIntArrayList; import gregtech.api.GTValues; -import gregtech.api.SituationalStatus; +import gregtech.api.Situation; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; import gregtech.api.capability.impl.ItemHandlerDelegate; @@ -38,7 +38,7 @@ import javax.annotation.Nonnull; import java.util.*; -import static gregtech.api.SituationalStatus.IDLE; +import static gregtech.api.Situations.*; public class CoverConveyor extends CoverBehavior implements CoverWithUI, ITickable, IControllable { @@ -51,7 +51,7 @@ public class CoverConveyor extends CoverBehavior implements CoverWithUI, ITickab protected int itemsLeftToTransferLastSecond; private CoverableItemHandlerWrapper itemHandlerWrapper; protected boolean isWorkingAllowed = true; - protected int situationCode; + protected Situation situation; public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, int itemsPerSecond) { super(coverable, attachedSide); @@ -60,7 +60,7 @@ public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, in this.transferRate = maxItemTransferRate; this.itemsLeftToTransferLastSecond = transferRate; this.conveyorMode = ConveyorMode.EXPORT; - this.situationCode = SituationalStatus.IDLE; + this.situation = IDLE; this.itemFilterContainer = new ItemFilterContainer(this); } @@ -91,12 +91,12 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo coverHolder.markDirty(); } - public int getSituationalStatus() { - return this.situationCode; + public int getSituation() { + return this.situation.id; } - public void setSituationalStatus(int situationCode) { - this.situationCode = situationCode; + public void setSituation(Situation situation) { + this.situation = situation; } @Override @@ -107,11 +107,11 @@ public void update() { IItemHandler itemHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide.getOpposite()); IItemHandler myItemHandler = coverHolder.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide); if (myItemHandler == null) { - setSituationalStatus(SituationalStatus.EXPECTED_CAPABILITY_UNAVAILABLE); + setSituation(EXPECTED_CAPABILITY_UNAVAILABLE); return; } if (itemHandler == null) { - setSituationalStatus(IDLE); + setSituation(IDLE); return; } int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond); @@ -119,9 +119,9 @@ public void update() { } if (timer % 20 == 0) { if (itemsLeftToTransferLastSecond < transferRate) { - setSituationalStatus(SituationalStatus.WORKING); + setSituation(WORKING); } else { - setSituationalStatus(IDLE); + setSituation(IDLE); } this.itemsLeftToTransferLastSecond = transferRate; } @@ -417,7 +417,7 @@ public EnumActionResult onScrewdriverClick(EntityPlayer playerIn, EnumHand hand, public T getCapability(Capability capability, T defaultValue) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { if (defaultValue == null ) { - setSituationalStatus(SituationalStatus.EXPECTED_CAPABILITY_UNAVAILABLE); + setSituation(EXPECTED_CAPABILITY_UNAVAILABLE); return null; } IItemHandler delegate = (IItemHandler) defaultValue; @@ -457,7 +457,7 @@ public ModularUI createUI(EntityPlayer player) { ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - primaryGroup.addWidget(new SituationalWidget(80,90,16,16,this::getSituationalStatus)); + primaryGroup.addWidget(new SituationWidget(80,90,16,16,this::getSituation)); this.itemFilterContainer.initUI(70, primaryGroup::addWidget); diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index fbed84d74f..ef17d09a71 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -6,7 +6,7 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import gregtech.api.GTValues; -import gregtech.api.SituationalStatus; +import gregtech.api.Situation; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; import gregtech.api.capability.impl.FluidHandlerDelegate; @@ -36,6 +36,8 @@ import javax.annotation.Nullable; +import static gregtech.api.Situations.*; + public class CoverPump extends CoverBehavior implements CoverWithUI, ITickable, IControllable { public final int tier; @@ -48,7 +50,7 @@ public class CoverPump extends CoverBehavior implements CoverWithUI, ITickable, protected boolean isWorkingAllowed = true; protected final FluidFilterContainer fluidFilter; protected BucketMode bucketMode; - protected int situationCode; + protected Situation situation; public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int mbPerTick) { super(coverHolder, attachedSide); @@ -58,7 +60,7 @@ public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int this.fluidLeftToTransferLastSecond = transferRate; this.pumpMode = PumpMode.EXPORT; this.bucketMode = BucketMode.MILLI_BUCKET; - this.situationCode = SituationalStatus.IDLE; + this.situation = IDLE; this.fluidFilter = new FluidFilterContainer(this); } @@ -101,12 +103,12 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo coverHolder.markDirty(); } - public int getSituationalStatus() { - return this.situationCode; + public int getSituation() { + return this.situation.id; } - public void setSituationalStatus(int situationCode) { - this.situationCode = situationCode; + public void setSituation(Situation situation) { + this.situation = situation; } @Override @@ -117,9 +119,9 @@ public void update() { } if (timer % 20 == 0) { if (fluidLeftToTransferLastSecond < transferRate) { - setSituationalStatus(SituationalStatus.WORKING); + setSituation(WORKING); } else { - setSituationalStatus(SituationalStatus.IDLE); + setSituation(IDLE); } this.fluidLeftToTransferLastSecond = transferRate; } @@ -133,11 +135,11 @@ protected int doTransferFluids(int transferLimit) { IFluidHandler fluidHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide.getOpposite()); IFluidHandler myFluidHandler = coverHolder.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide); if (myFluidHandler == null) { - setSituationalStatus(SituationalStatus.EXPECTED_CAPABILITY_UNAVAILABLE); + setSituation(EXPECTED_CAPABILITY_UNAVAILABLE); return 0; } else if (fluidHandler == null) { - setSituationalStatus(SituationalStatus.IDLE); + setSituation(IDLE); return 0; } return doTransferFluidsInternal(myFluidHandler, fluidHandler, transferLimit); @@ -179,7 +181,7 @@ public ModularUI createUI(EntityPlayer player) { ManualImportExportMode.class, this::getManualImportExportMode, this::setManualImportExportMode) .setTooltipHoverString("cover.universal.manual_import_export.mode.description")); - primaryGroup.addWidget(new SituationalWidget(80,84,16,16,this::getSituationalStatus)); + primaryGroup.addWidget(new SituationWidget(80,84,16,16,this::getSituation)); this.fluidFilter.initUI(88, primaryGroup::addWidget); @@ -225,7 +227,7 @@ public void renderCover(CCRenderState renderState, Matrix4 translation, IVertexO public T getCapability(Capability capability, T defaultValue) { if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { if (defaultValue == null ) { - setSituationalStatus(SituationalStatus.EXPECTED_CAPABILITY_UNAVAILABLE); + setSituation(EXPECTED_CAPABILITY_UNAVAILABLE); return null; } IFluidHandler delegate = (IFluidHandler) defaultValue; diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 525b536f93..b8551617fb 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -757,13 +757,14 @@ cover.machine_controller.mode.cover_north=Control Cover (North) cover.machine_controller.mode.cover_east=Control Cover (East) cover.machine_controller.mode.cover_west=Control Cover (West) -gregtech.situational_status.idle=This %s is idling -gregtech.situational_status.working=This %s is working without issue -gregtech.situational_status.null_capability=This cover currently cant access this inventory from this side. No work will be done -gregtech.situational_status.empty_source=This inventory is empty -gregtech.situational_status.insufficient_power=Not enough power to run this current recipe -gregtech.situational_status.no_matching_recipe=input does not match any recipes for this %s tier -gregtech.situational_status.target_inventory_full=The target inventory is full +gregtech.situation.idle=Idling +gregtech.situation.working=Working +gregtech.situation.null_capability=Error accessing inventory from this side +gregtech.situation.empty_source=This inventory is empty +gregtech.situation.insufficient_power=Not enough power to run this recipe +gregtech.situation.no_matching_recipe=No recipe found +gregtech.situation.target_inventory_full=The target inventory is full +gregtech.situation.output_inventory_full=Output is full # %s is a localized material name From 3f59f989bc62f9a5beb2f08f41e7b23f9cd19f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 29 Nov 2020 14:51:08 -0300 Subject: [PATCH 15/37] add machine controller situation logic to covers and machines add capability related situation logic to covers --- src/main/java/gregtech/api/Situations.java | 17 +++++++++++------ .../capability/impl/AbstractRecipeLogic.java | 3 +++ .../gregtech/common/covers/CoverConveyor.java | 6 +++++- .../java/gregtech/common/covers/CoverPump.java | 6 +++++- .../resources/assets/gregtech/lang/en_us.lang | 5 +++++ 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/api/Situations.java b/src/main/java/gregtech/api/Situations.java index 862bedb682..9c46fac4fe 100644 --- a/src/main/java/gregtech/api/Situations.java +++ b/src/main/java/gregtech/api/Situations.java @@ -4,14 +4,19 @@ public class Situations { public static Situation WORKING = new Situation(0, "working", SituationsTypes.WORKING, "gregtech.situation.working"); public static Situation IDLE = new Situation(1, "idle", SituationsTypes.IDLE, "gregtech.situation.idle"); + public static Situation DISABLED_BY_CONTROLLER = new Situation(2, "workingdisabled", SituationsTypes.IDLE, "gregtech.situation.disabled_by_controller"); - public static Situation EMPTY_SOURCE = new Situation(2, "emptysource", SituationsTypes.WARNING, "gregtech.situation.empty_source"); - public static Situation INSUFFICIENT_POWER = new Situation(3, "nopower", SituationsTypes.WARNING, "gregtech.situation.insufficient_power"); - public static Situation NO_MATCHING_RECIPE = new Situation(4, "norecipe", SituationsTypes.WARNING, "gregtech.situation.no_matching_recipe"); - public static Situation OUTPUT_INVENTORY_FULL = new Situation(5, "outputfull", SituationsTypes.WARNING, "gregtech.situation.output_inventory_full"); - public static Situation TARGET_INVENTORY_FULL = new Situation(6, "targetfull", SituationsTypes.WARNING, "gregtech.situation.target_inventory_full"); + public static Situation EMPTY_SOURCE = new Situation(3, "emptysource", SituationsTypes.WARNING, "gregtech.situation.empty_source"); + public static Situation INSUFFICIENT_POWER = new Situation(4, "nopower", SituationsTypes.WARNING, "gregtech.situation.insufficient_power"); + public static Situation NO_MATCHING_RECIPE = new Situation(5, "norecipe", SituationsTypes.WARNING, "gregtech.situation.no_matching_recipe"); + public static Situation OUTPUT_INVENTORY_FULL = new Situation(6, "outputfull", SituationsTypes.WARNING, "gregtech.situation.output_inventory_full"); + public static Situation TARGET_INVENTORY_FULL = new Situation(7, "targetfull", SituationsTypes.WARNING, "gregtech.situation.target_inventory_full"); - public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(7, "nullcapability", SituationsTypes.ERROR, "gregtech.situation.null_capability"); + public static Situation NO_IMPORT_INVENTORY = new Situation(8, "noimportinv", SituationsTypes.ERROR, "gregtech.situation.no_import_inventory"); + public static Situation NO_EXPORT_INVENTORY = new Situation(9, "noexportinv", SituationsTypes.ERROR, "gregtech.situation.no_export_inventory"); + public static Situation NO_IMPORT_TANK = new Situation(10, "noimporttank", SituationsTypes.ERROR, "gregtech.situation.no_import_tank"); + public static Situation NO_EXPORT_TANK = new Situation(11, "noexporttank", SituationsTypes.ERROR, "gregtech.situation.no_export_tank"); + public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(12, "nullcapability", SituationsTypes.ERROR, "gregtech.situation.null_capability"); public enum SituationsTypes { WORKING, diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 03b07fb3bc..13cb5fb8c7 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -127,6 +127,9 @@ public void update() { metaTileEntity.setSituation(OUTPUT_INVENTORY_FULL); } } + else { + metaTileEntity.setSituation(DISABLED_BY_CONTROLLER); + } } if (wasActiveAndNeedsUpdate) { this.wasActiveAndNeedsUpdate = false; diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 60e5dd7770..05e0558c04 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -111,7 +111,8 @@ public void update() { return; } if (itemHandler == null) { - setSituation(IDLE); + if (conveyorMode == ConveyorMode.IMPORT) setSituation(NO_IMPORT_INVENTORY); + if (conveyorMode == ConveyorMode.EXPORT) setSituation(NO_EXPORT_INVENTORY); return; } int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond); @@ -125,6 +126,9 @@ public void update() { } this.itemsLeftToTransferLastSecond = transferRate; } + if (!isWorkingAllowed) { + setSituation(DISABLED_BY_CONTROLLER); + } } protected int doTransferItems(IItemHandler itemHandler, IItemHandler myItemHandler, int maxTransferAmount) { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index ef17d09a71..3aacec588c 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -125,6 +125,9 @@ public void update() { } this.fluidLeftToTransferLastSecond = transferRate; } + if (!isWorkingAllowed) { + setSituation(DISABLED_BY_CONTROLLER); + } } protected int doTransferFluids(int transferLimit) { @@ -139,7 +142,8 @@ protected int doTransferFluids(int transferLimit) { return 0; } else if (fluidHandler == null) { - setSituation(IDLE); + if (pumpMode == PumpMode.IMPORT) setSituation(NO_IMPORT_TANK); + if (pumpMode == PumpMode.EXPORT) setSituation(NO_EXPORT_TANK); return 0; } return doTransferFluidsInternal(myFluidHandler, fluidHandler, transferLimit); diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index b8551617fb..a003f8b9b2 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -758,6 +758,7 @@ cover.machine_controller.mode.cover_east=Control Cover (East) cover.machine_controller.mode.cover_west=Control Cover (West) gregtech.situation.idle=Idling +gregtech.situation.disabled_by_controller=Disabled by controller cover gregtech.situation.working=Working gregtech.situation.null_capability=Error accessing inventory from this side gregtech.situation.empty_source=This inventory is empty @@ -765,6 +766,10 @@ gregtech.situation.insufficient_power=Not enough power to run this recipe gregtech.situation.no_matching_recipe=No recipe found gregtech.situation.target_inventory_full=The target inventory is full gregtech.situation.output_inventory_full=Output is full +gregtech.situation.no_import_inventory=Cant access inventory to import from +gregtech.situation.no_export_inventory=Cant access inventory to export to +gregtech.situation.no_import_tank=Cant access tank to import from +gregtech.situation.no_export_tank=Cant access tank to export to # %s is a localized material name From 110da149fe276e89a0b78b816c73d51f29100606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 29 Nov 2020 21:31:37 -0300 Subject: [PATCH 16/37] fix recipe logic not updating on world reload fix pump "tank exported to is full" logic --- .../capability/impl/AbstractRecipeLogic.java | 22 +++++++------------ .../api/metatileentity/MetaTileEntity.java | 2 +- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 13cb5fb8c7..fc3f0092d1 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -106,28 +106,18 @@ public void update() { if (!getMetaTileEntity().getWorld().isRemote) { if (workingEnabled) { if (progressTime > 0) { - int currentProgress = progressTime; updateRecipeProgress(); - if (progressTime > currentProgress) { - metaTileEntity.setSituation(WORKING); - } else if (progressTime != 0) { - metaTileEntity.setSituation(INSUFFICIENT_POWER); - } } if (progressTime == 0) { trySearchNewRecipe(); - } - if (currentRecipe == null) { + if (currentRecipe == null) { + metaTileEntity.setSituation(NO_MATCHING_RECIPE); + } if (metaTileEntity.isInputEmpty()) { metaTileEntity.setSituation(IDLE); - } else { - metaTileEntity.setSituation(NO_MATCHING_RECIPE); } - } else if (!canOutputsFit()) { - metaTileEntity.setSituation(OUTPUT_INVENTORY_FULL); } - } - else { + } else { metaTileEntity.setSituation(DISABLED_BY_CONTROLLER); } } @@ -146,6 +136,7 @@ protected void updateRecipeProgress() { boolean drawEnergy = drawEnergy(recipeEUt); if (drawEnergy || (recipeEUt < 0)) { //as recipe starts with progress on 1 this has to be > only not => to compensate for it + metaTileEntity.setSituation(WORKING); if (++progressTime > maxProgressTime) { completeRecipe(); } @@ -153,6 +144,7 @@ protected void updateRecipeProgress() { //only set hasNotEnoughEnergy if this recipe is consuming recipe //generators always have enough energy this.hasNotEnoughEnergy = true; + metaTileEntity.setSituation(INSUFFICIENT_POWER); //if current progress value is greater than 2, decrement it by 2 if (progressTime >= 2) { if (ConfigHolder.insufficientEnergySupplyWipesRecipeProgress) { @@ -184,6 +176,8 @@ protected void trySearchNewRecipe() { } if (this.currentRecipe != null && setupAndConsumeRecipeInputs(this.currentRecipe)) { setupRecipe(this.currentRecipe); + } else { + metaTileEntity.setSituation(OUTPUT_INVENTORY_FULL); } } diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 83de7e83a4..ca4543bb7c 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -860,7 +860,7 @@ public void pushFluidsIntoNearbyHandlers(EnumFacing... allowedFaces) { if (fluidHandler == null || myFluidHandler == null) { continue; } - if (GTFluidUtils.transferFluids(myFluidHandler, fluidHandler, Integer.MAX_VALUE) == 0) { + if (GTFluidUtils.transferFluids(myFluidHandler, fluidHandler, Integer.MAX_VALUE) == Integer.MAX_VALUE ) { this.failedToMoveFluids = true; } } From 7d794b389886bcf3fbbc7feede6430d4926dee3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sat, 5 Dec 2020 21:27:01 -0300 Subject: [PATCH 17/37] Move Situation to its own folder and update its references --- src/main/java/gregtech/GregTechMod.java | 5 ++-- src/main/java/gregtech/api/Situations.java | 28 ------------------- .../api/gui/widgets/SituationWidget.java | 5 ++-- .../api/metatileentity/MetaTileEntity.java | 3 +- .../SimpleMachineMetaTileEntity.java | 2 +- .../api/{ => situation}/Situation.java | 17 ++++------- .../api/situation/SituationTypes.java | 8 ++++++ .../gregtech/api/situation/Situations.java | 28 +++++++++++++++++++ .../gregtech/common/covers/CoverConveyor.java | 4 +-- .../gregtech/common/covers/CoverPump.java | 4 +-- 10 files changed, 52 insertions(+), 52 deletions(-) delete mode 100644 src/main/java/gregtech/api/Situations.java rename src/main/java/gregtech/api/{ => situation}/Situation.java (69%) create mode 100644 src/main/java/gregtech/api/situation/SituationTypes.java create mode 100644 src/main/java/gregtech/api/situation/Situations.java diff --git a/src/main/java/gregtech/GregTechMod.java b/src/main/java/gregtech/GregTechMod.java index 1319f6da75..83a99ecfa0 100644 --- a/src/main/java/gregtech/GregTechMod.java +++ b/src/main/java/gregtech/GregTechMod.java @@ -3,8 +3,7 @@ import codechicken.lib.CodeChickenLib; import crafttweaker.CraftTweakerAPI; import gregtech.api.GTValues; -import gregtech.api.Situation; -import gregtech.api.Situations; +import gregtech.api.situation.Situations; import gregtech.api.capability.SimpleCapabilityManager; import gregtech.api.cover.CoverBehaviorUIFactory; import gregtech.api.items.gui.PlayerInventoryUIFactory; @@ -84,7 +83,7 @@ public void onConstruction(FMLConstructionEvent event) { public void onPreInit(FMLPreInitializationEvent event) { GTLog.init(event.getModLog()); NetworkHandler.init(); - Situation.init(); + Situations.init(); MetaTileEntityUIFactory.INSTANCE.init(); PlayerInventoryUIFactory.INSTANCE.init(); CoverBehaviorUIFactory.INSTANCE.init(); diff --git a/src/main/java/gregtech/api/Situations.java b/src/main/java/gregtech/api/Situations.java deleted file mode 100644 index 9c46fac4fe..0000000000 --- a/src/main/java/gregtech/api/Situations.java +++ /dev/null @@ -1,28 +0,0 @@ -package gregtech.api; - -public class Situations { - public static Situation WORKING = new Situation(0, "working", SituationsTypes.WORKING, "gregtech.situation.working"); - - public static Situation IDLE = new Situation(1, "idle", SituationsTypes.IDLE, "gregtech.situation.idle"); - public static Situation DISABLED_BY_CONTROLLER = new Situation(2, "workingdisabled", SituationsTypes.IDLE, "gregtech.situation.disabled_by_controller"); - - public static Situation EMPTY_SOURCE = new Situation(3, "emptysource", SituationsTypes.WARNING, "gregtech.situation.empty_source"); - public static Situation INSUFFICIENT_POWER = new Situation(4, "nopower", SituationsTypes.WARNING, "gregtech.situation.insufficient_power"); - public static Situation NO_MATCHING_RECIPE = new Situation(5, "norecipe", SituationsTypes.WARNING, "gregtech.situation.no_matching_recipe"); - public static Situation OUTPUT_INVENTORY_FULL = new Situation(6, "outputfull", SituationsTypes.WARNING, "gregtech.situation.output_inventory_full"); - public static Situation TARGET_INVENTORY_FULL = new Situation(7, "targetfull", SituationsTypes.WARNING, "gregtech.situation.target_inventory_full"); - - public static Situation NO_IMPORT_INVENTORY = new Situation(8, "noimportinv", SituationsTypes.ERROR, "gregtech.situation.no_import_inventory"); - public static Situation NO_EXPORT_INVENTORY = new Situation(9, "noexportinv", SituationsTypes.ERROR, "gregtech.situation.no_export_inventory"); - public static Situation NO_IMPORT_TANK = new Situation(10, "noimporttank", SituationsTypes.ERROR, "gregtech.situation.no_import_tank"); - public static Situation NO_EXPORT_TANK = new Situation(11, "noexporttank", SituationsTypes.ERROR, "gregtech.situation.no_export_tank"); - public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(12, "nullcapability", SituationsTypes.ERROR, "gregtech.situation.null_capability"); - - public enum SituationsTypes { - WORKING, - IDLE, - ERROR, - WARNING; - } -} - diff --git a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java index 95f8999fc6..c0a42d63fa 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -1,6 +1,5 @@ package gregtech.api.gui.widgets; -import gregtech.api.Situation; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.IRenderContext; import gregtech.api.gui.Widget; @@ -15,8 +14,8 @@ import java.util.Collections; import java.util.function.IntSupplier; -import static gregtech.api.Situation.*; -import static gregtech.api.Situations.SituationsTypes.*; +import static gregtech.api.situation.Situation.getSituationFromId; +import static gregtech.api.situation.SituationTypes.*; public class SituationWidget extends Widget { diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index ca4543bb7c..10e6ccbd4c 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -10,7 +10,7 @@ import codechicken.lib.vec.Matrix4; import com.google.common.base.Preconditions; import gregtech.api.GregTechAPI; -import gregtech.api.Situation; +import gregtech.api.situation.Situation; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.impl.FluidHandlerProxy; @@ -58,7 +58,6 @@ import java.util.function.Consumer; import static gregtech.api.util.InventoryUtils.simulateItemStackMerge; - import static gregtech.api.Situations.*; public abstract class MetaTileEntity implements ICoverable { diff --git a/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java index fa6f48729f..6aeb51365d 100644 --- a/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/SimpleMachineMetaTileEntity.java @@ -33,7 +33,7 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; -import static gregtech.api.Situations.*; +import static gregtech.api.situation.Situations.*; public class SimpleMachineMetaTileEntity extends WorkableTieredMetaTileEntity { diff --git a/src/main/java/gregtech/api/Situation.java b/src/main/java/gregtech/api/situation/Situation.java similarity index 69% rename from src/main/java/gregtech/api/Situation.java rename to src/main/java/gregtech/api/situation/Situation.java index c321a31063..96982f5d06 100644 --- a/src/main/java/gregtech/api/Situation.java +++ b/src/main/java/gregtech/api/situation/Situation.java @@ -1,19 +1,19 @@ -package gregtech.api; +package gregtech.api.situation; import gregtech.api.util.GTControlledRegistry; public class Situation { public static GTControlledRegistry SITUATION_REGISTRY = new GTControlledRegistry<>(Short.MAX_VALUE); - private final String situationName; - public Enum situationType; - public String situationLocaleName; + public final String situationName; + public final SituationTypes situationTypes; + public final String situationLocaleName; public int id; - public Situation(int id, String situationName, Enum situationType, String situationLocaleName) { + public Situation(int id, String situationName, SituationTypes situationTypes, String situationLocaleName) { this.id = id; this.situationName = situationName; - this.situationType = situationType; + this.situationTypes = situationTypes; this.situationLocaleName = situationLocaleName; registerSituation(id,situationName,this); } @@ -22,11 +22,6 @@ public static void registerSituation(int id, String situationName, Situation sit SITUATION_REGISTRY.register(id, situationName, situation); } - public static void init() { - //noinspection ResultOfMethodCallIgnored - Situations.WORKING.situationName.getBytes(); - } - public static Situation getSituationFromId(int id) { return SITUATION_REGISTRY.getObjectById(id); } diff --git a/src/main/java/gregtech/api/situation/SituationTypes.java b/src/main/java/gregtech/api/situation/SituationTypes.java new file mode 100644 index 0000000000..35ed1fe017 --- /dev/null +++ b/src/main/java/gregtech/api/situation/SituationTypes.java @@ -0,0 +1,8 @@ +package gregtech.api.situation; + +public enum SituationTypes { + WORKING, + IDLE, + ERROR, + WARNING +} diff --git a/src/main/java/gregtech/api/situation/Situations.java b/src/main/java/gregtech/api/situation/Situations.java new file mode 100644 index 0000000000..cde98380b9 --- /dev/null +++ b/src/main/java/gregtech/api/situation/Situations.java @@ -0,0 +1,28 @@ +package gregtech.api.situation; + +import gregtech.api.util.GTLog; + +public class Situations { + public static Situation WORKING = new Situation(0, "working", SituationTypes.WORKING, "gregtech.situation.working"); + + public static Situation IDLE = new Situation(1, "idle", SituationTypes.IDLE, "gregtech.situation.idle"); + public static Situation DISABLED_BY_CONTROLLER = new Situation(2, "workingdisabled", SituationTypes.IDLE, "gregtech.situation.disabled_by_controller"); + + public static Situation EMPTY_SOURCE = new Situation(3, "emptysource", SituationTypes.WARNING, "gregtech.situation.empty_source"); + public static Situation INSUFFICIENT_POWER = new Situation(4, "nopower", SituationTypes.WARNING, "gregtech.situation.insufficient_power"); + public static Situation NO_MATCHING_RECIPE = new Situation(5, "norecipe", SituationTypes.WARNING, "gregtech.situation.no_matching_recipe"); + public static Situation OUTPUT_INVENTORY_FULL = new Situation(6, "outputfull", SituationTypes.WARNING, "gregtech.situation.output_inventory_full"); + public static Situation TARGET_INVENTORY_FULL = new Situation(7, "targetfull", SituationTypes.WARNING, "gregtech.situation.target_inventory_full"); + + public static Situation NO_IMPORT_INVENTORY = new Situation(8, "noimportinv", SituationTypes.ERROR, "gregtech.situation.no_import_inventory"); + public static Situation NO_EXPORT_INVENTORY = new Situation(9, "noexportinv", SituationTypes.ERROR, "gregtech.situation.no_export_inventory"); + public static Situation NO_IMPORT_TANK = new Situation(10, "noimporttank", SituationTypes.ERROR, "gregtech.situation.no_import_tank"); + public static Situation NO_EXPORT_TANK = new Situation(11, "noexporttank", SituationTypes.ERROR, "gregtech.situation.no_export_tank"); + public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(12, "nullcapability", SituationTypes.ERROR, "gregtech.situation.null_capability"); + + public static void init() { + GTLog.logger.info("Registering situations..."); + } + +} + diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 05e0558c04..7c4aeb758b 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -8,7 +8,7 @@ import gnu.trove.list.TIntList; import gnu.trove.list.array.TIntArrayList; import gregtech.api.GTValues; -import gregtech.api.Situation; +import gregtech.api.situation.Situation; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; import gregtech.api.capability.impl.ItemHandlerDelegate; @@ -38,7 +38,7 @@ import javax.annotation.Nonnull; import java.util.*; -import static gregtech.api.Situations.*; +import static gregtech.api.situation.Situations.*; public class CoverConveyor extends CoverBehavior implements CoverWithUI, ITickable, IControllable { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 3aacec588c..15437cd697 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -6,7 +6,7 @@ import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Matrix4; import gregtech.api.GTValues; -import gregtech.api.Situation; +import gregtech.api.situation.Situation; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; import gregtech.api.capability.impl.FluidHandlerDelegate; @@ -36,7 +36,7 @@ import javax.annotation.Nullable; -import static gregtech.api.Situations.*; +import static gregtech.api.situation.Situations.*; public class CoverPump extends CoverBehavior implements CoverWithUI, ITickable, IControllable { From c9018f21cedf34471533eef21ebeb3e74efa924a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 6 Dec 2020 17:18:13 -0300 Subject: [PATCH 18/37] moved covers situation to coverbehaviors --- .../gregtech/api/cover/CoverBehavior.java | 21 ++++++++++++++++++- .../api/metatileentity/MetaTileEntity.java | 3 +-- .../gregtech/common/covers/CoverConveyor.java | 16 +------------- .../gregtech/common/covers/CoverPump.java | 18 ++-------------- 4 files changed, 24 insertions(+), 34 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverBehavior.java b/src/main/java/gregtech/api/cover/CoverBehavior.java index 38fe8da294..ae7c97119e 100644 --- a/src/main/java/gregtech/api/cover/CoverBehavior.java +++ b/src/main/java/gregtech/api/cover/CoverBehavior.java @@ -9,9 +9,9 @@ import com.google.common.collect.Lists; import gregtech.api.GTValues; import gregtech.api.gui.IUIHolder; -import gregtech.api.metatileentity.SimpleMachineMetaTileEntity; import gregtech.api.render.SimpleSidedCubeRenderer.RenderSide; import gregtech.api.render.Textures; +import gregtech.api.situation.Situation; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -28,6 +28,9 @@ import java.util.List; import java.util.function.Consumer; +import static gregtech.api.situation.Situations.DISABLED_BY_CONTROLLER; +import static gregtech.api.situation.Situations.IDLE; + /** * Represents cover instance attached on the specific side of meta tile entity * Cover filters out interaction and logic of meta tile entity @@ -41,6 +44,8 @@ public abstract class CoverBehavior implements IUIHolder { public final ICoverable coverHolder; public final EnumFacing attachedSide; private int redstoneSignalOutput; + private Situation situation = IDLE; + private boolean isWorkingAllowed = true; public CoverBehavior(ICoverable coverHolder, EnumFacing attachedSide) { this.coverHolder = coverHolder; @@ -209,6 +214,20 @@ public boolean isRemote() { return coverHolder.getWorld().isRemote; } + public int getSituation() { + return this.situation.id; + } + + public void setSituation(Situation situation) { + this.situation = situation; + } + + public void update(){ + if (!isWorkingAllowed) { + setSituation(DISABLED_BY_CONTROLLER); + } + } + @Override public final void markAsDirty() { coverHolder.markDirty(); diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 10e6ccbd4c..6d8c9ccd7e 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -880,8 +880,7 @@ public void pullFluidsFromNearbyHandlers(EnumFacing... allowedFaces) { if (fluidHandler == null || myFluidHandler == null) { continue; } - if (GTFluidUtils.transferFluids(fluidHandler, myFluidHandler, Integer.MAX_VALUE) == 0) { - } + GTFluidUtils.transferFluids(fluidHandler, myFluidHandler, Integer.MAX_VALUE); } blockPos.release(); } diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 7c4aeb758b..d606cf9f37 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -91,14 +91,6 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo coverHolder.markDirty(); } - public int getSituation() { - return this.situation.id; - } - - public void setSituation(Situation situation) { - this.situation = situation; - } - @Override public void update() { long timer = coverHolder.getTimer(); @@ -106,10 +98,6 @@ public void update() { TileEntity tileEntity = coverHolder.getWorld().getTileEntity(coverHolder.getPos().offset(attachedSide)); IItemHandler itemHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide.getOpposite()); IItemHandler myItemHandler = coverHolder.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide); - if (myItemHandler == null) { - setSituation(EXPECTED_CAPABILITY_UNAVAILABLE); - return; - } if (itemHandler == null) { if (conveyorMode == ConveyorMode.IMPORT) setSituation(NO_IMPORT_INVENTORY); if (conveyorMode == ConveyorMode.EXPORT) setSituation(NO_EXPORT_INVENTORY); @@ -126,9 +114,7 @@ public void update() { } this.itemsLeftToTransferLastSecond = transferRate; } - if (!isWorkingAllowed) { - setSituation(DISABLED_BY_CONTROLLER); - } + super.update(); } protected int doTransferItems(IItemHandler itemHandler, IItemHandler myItemHandler, int maxTransferAmount) { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 15437cd697..5cbaa3e7ee 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -103,14 +103,6 @@ protected void setManualImportExportMode(ManualImportExportMode manualImportExpo coverHolder.markDirty(); } - public int getSituation() { - return this.situation.id; - } - - public void setSituation(Situation situation) { - this.situation = situation; - } - @Override public void update() { long timer = coverHolder.getTimer(); @@ -125,9 +117,7 @@ public void update() { } this.fluidLeftToTransferLastSecond = transferRate; } - if (!isWorkingAllowed) { - setSituation(DISABLED_BY_CONTROLLER); - } + super.update(); } protected int doTransferFluids(int transferLimit) { @@ -137,11 +127,7 @@ protected int doTransferFluids(int transferLimit) { blockPos.release(); IFluidHandler fluidHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide.getOpposite()); IFluidHandler myFluidHandler = coverHolder.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide); - if (myFluidHandler == null) { - setSituation(EXPECTED_CAPABILITY_UNAVAILABLE); - return 0; - } - else if (fluidHandler == null) { + if (fluidHandler == null) { if (pumpMode == PumpMode.IMPORT) setSituation(NO_IMPORT_TANK); if (pumpMode == PumpMode.EXPORT) setSituation(NO_EXPORT_TANK); return 0; From 1830fd7e57473cbf851bca5537955d9286c09e48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 6 Dec 2020 17:20:16 -0300 Subject: [PATCH 19/37] move hooveringtooltip to widget class --- src/main/java/gregtech/api/gui/Widget.java | 23 ++++++++++++++++++ .../api/gui/widgets/CycleButtonWidget.java | 16 +------------ .../api/gui/widgets/SituationWidget.java | 24 ++++--------------- 3 files changed, 28 insertions(+), 35 deletions(-) diff --git a/src/main/java/gregtech/api/gui/Widget.java b/src/main/java/gregtech/api/gui/Widget.java index d53148ddf6..bff03418da 100644 --- a/src/main/java/gregtech/api/gui/Widget.java +++ b/src/main/java/gregtech/api/gui/Widget.java @@ -12,6 +12,7 @@ import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; @@ -25,6 +26,7 @@ import javax.annotation.Nullable; import java.awt.*; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.function.Consumer; @@ -44,6 +46,8 @@ public abstract class Widget { private Position selfPosition; private Position position; private Size size; + protected long hoverStartTime = -1L; + protected boolean isMouseHovered; public Widget(Position selfPosition, Size size) { Preconditions.checkNotNull(selfPosition, "selfPosition"); @@ -229,6 +233,25 @@ protected final void writeClientAction(int id, Consumer packetBuff } } + @SideOnly(Side.CLIENT) + public void drawHoveringTooltip(int mouseX, int mouseY, String tooltipHoverString) { + boolean isHovered = isMouseOverElement(mouseX, mouseY); + boolean wasHovered = isMouseHovered; + if (isHovered && !wasHovered) { + this.isMouseHovered = true; + this.hoverStartTime = System.currentTimeMillis(); + } else if (!isHovered && wasHovered) { + this.isMouseHovered = false; + this.hoverStartTime = 0L; + } else if (isHovered) { + long timeSinceHover = System.currentTimeMillis() - hoverStartTime; + if (timeSinceHover > 1000L && tooltipHoverString != null) { + List hoverList = Arrays.asList(I18n.format(tooltipHoverString).split("/n")); + drawHoveringText(ItemStack.EMPTY, hoverList, 300, mouseX, mouseY); + } + } + } + @SideOnly(Side.CLIENT) protected void drawHoveringText(ItemStack itemStack, List tooltip, int maxTextWidth, int mouseX, int mouseY) { Minecraft mc = Minecraft.getMinecraft(); diff --git a/src/main/java/gregtech/api/gui/widgets/CycleButtonWidget.java b/src/main/java/gregtech/api/gui/widgets/CycleButtonWidget.java index 245460763d..4c77820f60 100644 --- a/src/main/java/gregtech/api/gui/widgets/CycleButtonWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/CycleButtonWidget.java @@ -93,21 +93,7 @@ public void drawInBackground(int mouseX, int mouseY, IRenderContext context) { @Override public void drawInForeground(int mouseX, int mouseY) { - boolean isHovered = isMouseOverElement(mouseX, mouseY); - boolean wasHovered = isMouseHovered; - if (isHovered && !wasHovered) { - this.isMouseHovered = true; - this.hoverStartTime = System.currentTimeMillis(); - } else if (!isHovered && wasHovered) { - this.isMouseHovered = false; - this.hoverStartTime = 0L; - } else if (isHovered) { - long timeSinceHover = System.currentTimeMillis() - hoverStartTime; - if (timeSinceHover > 1000L && tooltipHoverString != null) { - List hoverList = Arrays.asList(I18n.format(tooltipHoverString).split("/n")); - drawHoveringText(ItemStack.EMPTY, hoverList, 300, mouseX, mouseY); - } - } + drawHoveringTooltip(mouseX,mouseY,tooltipHoverString); } @Override diff --git a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java index c0a42d63fa..1803b2a7a0 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -7,11 +7,9 @@ import gregtech.api.util.Position; import gregtech.api.util.Size; import net.minecraft.client.resources.I18n; -import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import java.util.Collections; import java.util.function.IntSupplier; import static gregtech.api.situation.Situation.getSituationFromId; @@ -21,8 +19,6 @@ public class SituationWidget extends Widget { private final IntSupplier currentSituationId; protected String tooltipHoverString; - protected long hoverStartTime = -1L; - protected boolean isMouseHovered; protected int currentError; protected TextureArea area; @@ -31,6 +27,7 @@ public class SituationWidget extends Widget { public SituationWidget(int xPosition, int yPosition, int width, int height, IntSupplier getSituationId) { super(new Position(xPosition, yPosition), new Size(width, height)); this.currentSituationId = () -> getSituationId.getAsInt(); + setTooltipHoverString(); setImage(); } @@ -39,7 +36,7 @@ public void setTooltipHoverString() { } public SituationWidget setImage() { - Enum iconTextureEnum = getSituationFromId(currentError).situationType; + Enum iconTextureEnum = getSituationFromId(currentError).situationTypes; if (iconTextureEnum.equals(ERROR)) this.area = GuiTextures.STATUS_ERROR; else if (iconTextureEnum.equals(WARNING)) this.area = GuiTextures.STATUS_WARNING; else if (iconTextureEnum.equals(WORKING)) this.area = GuiTextures.STATUS_WORKING; @@ -64,6 +61,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { super.readUpdateInfo(id, buffer); if (id == 1) { this.currentError = buffer.readVarInt(); + setTooltipHoverString(); setImage(); } } @@ -71,21 +69,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { @Override @SideOnly(Side.CLIENT) public void drawInForeground(int mouseX, int mouseY) { - boolean isHovered = isMouseOverElement(mouseX, mouseY); - boolean wasHovered = isMouseHovered; - if (isHovered && !wasHovered) { - this.isMouseHovered = true; - this.hoverStartTime = System.currentTimeMillis(); - } else if (!isHovered && wasHovered) { - this.isMouseHovered = false; - this.hoverStartTime = 0L; - } else if (isHovered) { - long timeSinceHover = System.currentTimeMillis() - hoverStartTime; - setTooltipHoverString(); - if (timeSinceHover > 1000L && tooltipHoverString != null) { - drawHoveringText(ItemStack.EMPTY, Collections.singletonList(tooltipHoverString), 300, mouseX, mouseY); - } - } + drawHoveringTooltip(mouseX, mouseY, tooltipHoverString); } @Override From 8af62d78d0454eed7fb6c3a0f225be867e8a64c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 6 Dec 2020 18:45:00 -0300 Subject: [PATCH 20/37] generate localename from situation name --- .../gregtech/api/situation/Situation.java | 6 ++-- .../gregtech/api/situation/Situations.java | 32 +++++++++---------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/main/java/gregtech/api/situation/Situation.java b/src/main/java/gregtech/api/situation/Situation.java index 96982f5d06..932ac2e92d 100644 --- a/src/main/java/gregtech/api/situation/Situation.java +++ b/src/main/java/gregtech/api/situation/Situation.java @@ -2,6 +2,8 @@ import gregtech.api.util.GTControlledRegistry; +import static gregtech.api.GTValues.MODID; + public class Situation { public static GTControlledRegistry SITUATION_REGISTRY = new GTControlledRegistry<>(Short.MAX_VALUE); @@ -10,11 +12,11 @@ public class Situation { public final String situationLocaleName; public int id; - public Situation(int id, String situationName, SituationTypes situationTypes, String situationLocaleName) { + public Situation(int id, String situationName, SituationTypes situationTypes) { this.id = id; this.situationName = situationName; this.situationTypes = situationTypes; - this.situationLocaleName = situationLocaleName; + this.situationLocaleName = MODID + ".situation." + this.situationName; registerSituation(id,situationName,this); } diff --git a/src/main/java/gregtech/api/situation/Situations.java b/src/main/java/gregtech/api/situation/Situations.java index cde98380b9..d0b3451516 100644 --- a/src/main/java/gregtech/api/situation/Situations.java +++ b/src/main/java/gregtech/api/situation/Situations.java @@ -3,22 +3,22 @@ import gregtech.api.util.GTLog; public class Situations { - public static Situation WORKING = new Situation(0, "working", SituationTypes.WORKING, "gregtech.situation.working"); - - public static Situation IDLE = new Situation(1, "idle", SituationTypes.IDLE, "gregtech.situation.idle"); - public static Situation DISABLED_BY_CONTROLLER = new Situation(2, "workingdisabled", SituationTypes.IDLE, "gregtech.situation.disabled_by_controller"); - - public static Situation EMPTY_SOURCE = new Situation(3, "emptysource", SituationTypes.WARNING, "gregtech.situation.empty_source"); - public static Situation INSUFFICIENT_POWER = new Situation(4, "nopower", SituationTypes.WARNING, "gregtech.situation.insufficient_power"); - public static Situation NO_MATCHING_RECIPE = new Situation(5, "norecipe", SituationTypes.WARNING, "gregtech.situation.no_matching_recipe"); - public static Situation OUTPUT_INVENTORY_FULL = new Situation(6, "outputfull", SituationTypes.WARNING, "gregtech.situation.output_inventory_full"); - public static Situation TARGET_INVENTORY_FULL = new Situation(7, "targetfull", SituationTypes.WARNING, "gregtech.situation.target_inventory_full"); - - public static Situation NO_IMPORT_INVENTORY = new Situation(8, "noimportinv", SituationTypes.ERROR, "gregtech.situation.no_import_inventory"); - public static Situation NO_EXPORT_INVENTORY = new Situation(9, "noexportinv", SituationTypes.ERROR, "gregtech.situation.no_export_inventory"); - public static Situation NO_IMPORT_TANK = new Situation(10, "noimporttank", SituationTypes.ERROR, "gregtech.situation.no_import_tank"); - public static Situation NO_EXPORT_TANK = new Situation(11, "noexporttank", SituationTypes.ERROR, "gregtech.situation.no_export_tank"); - public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(12, "nullcapability", SituationTypes.ERROR, "gregtech.situation.null_capability"); + public static Situation WORKING = new Situation(0, "working", SituationTypes.WORKING); + + public static Situation IDLE = new Situation(1, "idle", SituationTypes.IDLE); + public static Situation DISABLED_BY_CONTROLLER = new Situation(2, "disabled_by_controller", SituationTypes.IDLE); + + public static Situation EMPTY_SOURCE = new Situation(3, "empty_source", SituationTypes.WARNING); + public static Situation INSUFFICIENT_POWER = new Situation(4, "insufficient_power", SituationTypes.WARNING); + public static Situation NO_MATCHING_RECIPE = new Situation(5, "no_matching_recipe", SituationTypes.WARNING); + public static Situation OUTPUT_INVENTORY_FULL = new Situation(6, "output_inventory_full", SituationTypes.WARNING); + public static Situation TARGET_INVENTORY_FULL = new Situation(7, "target_inventory_full", SituationTypes.WARNING); + + public static Situation NO_IMPORT_INVENTORY = new Situation(8, "no_import_inventory", SituationTypes.ERROR); + public static Situation NO_EXPORT_INVENTORY = new Situation(9, "no_export_inventory", SituationTypes.ERROR); + public static Situation NO_IMPORT_TANK = new Situation(10, "no_import_tank", SituationTypes.ERROR); + public static Situation NO_EXPORT_TANK = new Situation(11, "no_export_tank", SituationTypes.ERROR); + public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(12, "null_capability", SituationTypes.ERROR); public static void init() { GTLog.logger.info("Registering situations..."); From a9a4262b926d2abb3d46161b2f4c3d58bfd8015e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 6 Dec 2020 18:45:37 -0300 Subject: [PATCH 21/37] missing import --- .../java/gregtech/api/capability/impl/AbstractRecipeLogic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index fc3f0092d1..cf110deaf3 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -27,7 +27,7 @@ import java.util.List; import java.util.Random; -import static gregtech.api.Situations.*; +import static gregtech.api.situation.Situations.*; public abstract class AbstractRecipeLogic extends MTETrait implements IWorkable { From 3a03b77fc4f048db2487ac4f4e2bdadf6c3ab12c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Sun, 6 Dec 2020 19:12:51 -0300 Subject: [PATCH 22/37] if to switch --- .../api/gui/widgets/SituationWidget.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java index 1803b2a7a0..6008493a67 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -4,6 +4,7 @@ import gregtech.api.gui.IRenderContext; import gregtech.api.gui.Widget; import gregtech.api.gui.resources.TextureArea; +import gregtech.api.situation.SituationTypes; import gregtech.api.util.Position; import gregtech.api.util.Size; import net.minecraft.client.resources.I18n; @@ -36,13 +37,22 @@ public void setTooltipHoverString() { } public SituationWidget setImage() { - Enum iconTextureEnum = getSituationFromId(currentError).situationTypes; - if (iconTextureEnum.equals(ERROR)) this.area = GuiTextures.STATUS_ERROR; - else if (iconTextureEnum.equals(WARNING)) this.area = GuiTextures.STATUS_WARNING; - else if (iconTextureEnum.equals(WORKING)) this.area = GuiTextures.STATUS_WORKING; - else if (iconTextureEnum.equals(IDLE)) this.area = GuiTextures.STATUS_IDLING; - else { - this.area = null; + SituationTypes iconTextures = getSituationFromId(currentError).situationTypes; + switch (iconTextures) { + case IDLE: + this.area = GuiTextures.STATUS_IDLING; + return this; + case WORKING: + this.area = GuiTextures.STATUS_WORKING; + return this; + case WARNING: + this.area = GuiTextures.STATUS_WARNING; + return this; + case ERROR: + this.area = GuiTextures.STATUS_ERROR; + return this; + default: + this.area = null; } return this; } From 9a00da71e4e1b15f4289ac0a300a49f689f6c7fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Mon, 7 Dec 2020 22:10:38 -0300 Subject: [PATCH 23/37] make loop cheaper --- .../java/gregtech/api/metatileentity/MetaTileEntity.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 6d8c9ccd7e..ada2a9c551 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -993,23 +993,21 @@ public static boolean addFluidsToFluidHandler(IFluidHandler handler, boolean sim } public boolean isInputEmpty() { - boolean emptyInputSlots = true; - boolean emptyInputTanks = true; if (importItems.getSlots() > 0) { for (int i = 0; i < importItems.getSlots(); i++) { if (!importItems.getStackInSlot(i).isEmpty()) { - emptyInputSlots = false; + return false; } } } if (importFluids.getTanks() > 0) { for (int i = 0; i < importFluids.getTanks(); i++) { if (importFluids.getTankAt(i).getFluid() != null) { - emptyInputTanks = false; + return false; } } } - return (emptyInputSlots && emptyInputTanks); + return true; } public boolean isOutputFull() { From b73ed951c64ced1ba5b9a2d073ddd7396f55faaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Mon, 7 Dec 2020 23:26:15 -0300 Subject: [PATCH 24/37] move away from int supplier syncing still is done by rebuild the situation from the registry by its id --- .../gregtech/api/cover/CoverBehavior.java | 4 +-- .../api/gui/widgets/SituationWidget.java | 29 ++++++++++--------- .../api/metatileentity/MetaTileEntity.java | 4 +-- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverBehavior.java b/src/main/java/gregtech/api/cover/CoverBehavior.java index ae7c97119e..7da8396580 100644 --- a/src/main/java/gregtech/api/cover/CoverBehavior.java +++ b/src/main/java/gregtech/api/cover/CoverBehavior.java @@ -214,8 +214,8 @@ public boolean isRemote() { return coverHolder.getWorld().isRemote; } - public int getSituation() { - return this.situation.id; + public Situation getSituation() { + return this.situation; } public void setSituation(Situation situation) { diff --git a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java index 6008493a67..8b7134c135 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -4,6 +4,7 @@ import gregtech.api.gui.IRenderContext; import gregtech.api.gui.Widget; import gregtech.api.gui.resources.TextureArea; +import gregtech.api.situation.Situation; import gregtech.api.situation.SituationTypes; import gregtech.api.util.Position; import gregtech.api.util.Size; @@ -11,33 +12,32 @@ import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import java.util.function.IntSupplier; - -import static gregtech.api.situation.Situation.getSituationFromId; -import static gregtech.api.situation.SituationTypes.*; +import java.util.function.Supplier; public class SituationWidget extends Widget { - private final IntSupplier currentSituationId; + private final Supplier currentSituationSupplier; + private Situation currentSituation; protected String tooltipHoverString; - protected int currentError; + protected int currentId; protected TextureArea area; private boolean isVisible = true; - public SituationWidget(int xPosition, int yPosition, int width, int height, IntSupplier getSituationId) { + public SituationWidget(int xPosition, int yPosition, int width, int height, Supplier getSituation) { super(new Position(xPosition, yPosition), new Size(width, height)); - this.currentSituationId = () -> getSituationId.getAsInt(); + this.currentSituationSupplier = getSituation; + this.currentSituation = getSituation.get(); setTooltipHoverString(); setImage(); } public void setTooltipHoverString() { - this.tooltipHoverString = I18n.format(getSituationFromId(currentError).situationLocaleName); + this.tooltipHoverString = I18n.format(this.currentSituation.situationLocaleName); } public SituationWidget setImage() { - SituationTypes iconTextures = getSituationFromId(currentError).situationTypes; + SituationTypes iconTextures = this.currentSituation.situationTypes; switch (iconTextures) { case IDLE: this.area = GuiTextures.STATUS_IDLING; @@ -60,9 +60,9 @@ public SituationWidget setImage() { @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - if (currentSituationId.getAsInt() != currentError) { - this.currentError = currentSituationId.getAsInt(); - writeUpdateInfo(1, buf -> buf.writeVarInt(currentError)); + if (currentSituationSupplier.get().id != currentId) { + this.currentId = currentSituationSupplier.get().id; + writeUpdateInfo(1, buf -> buf.writeVarInt(currentId)); } } @@ -70,7 +70,8 @@ public void detectAndSendChanges() { public void readUpdateInfo(int id, PacketBuffer buffer) { super.readUpdateInfo(id, buffer); if (id == 1) { - this.currentError = buffer.readVarInt(); + this.currentId = buffer.readVarInt(); + this.currentSituation = Situation.getSituationFromId(this.currentId); setTooltipHoverString(); setImage(); } diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index ada2a9c551..a5433074be 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -1099,8 +1099,8 @@ public void setFragile(boolean fragile) { } } - public int getSituation() { - return this.situation.id; + public Situation getSituation() { + return this.situation; } public void setSituation(Situation situation) { From f705c6d9ff9b5b4d2b6937dbe6d67569fcec8cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 16 Dec 2020 16:51:53 -0300 Subject: [PATCH 25/37] simplify switch, move !isWorkingAllowed back --- src/main/java/gregtech/api/cover/CoverBehavior.java | 7 ------- .../java/gregtech/api/gui/widgets/SituationWidget.java | 4 ---- src/main/java/gregtech/common/covers/CoverConveyor.java | 4 +++- src/main/java/gregtech/common/covers/CoverPump.java | 4 +++- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverBehavior.java b/src/main/java/gregtech/api/cover/CoverBehavior.java index 7da8396580..6739ea921d 100644 --- a/src/main/java/gregtech/api/cover/CoverBehavior.java +++ b/src/main/java/gregtech/api/cover/CoverBehavior.java @@ -45,7 +45,6 @@ public abstract class CoverBehavior implements IUIHolder { public final EnumFacing attachedSide; private int redstoneSignalOutput; private Situation situation = IDLE; - private boolean isWorkingAllowed = true; public CoverBehavior(ICoverable coverHolder, EnumFacing attachedSide) { this.coverHolder = coverHolder; @@ -222,12 +221,6 @@ public void setSituation(Situation situation) { this.situation = situation; } - public void update(){ - if (!isWorkingAllowed) { - setSituation(DISABLED_BY_CONTROLLER); - } - } - @Override public final void markAsDirty() { coverHolder.markDirty(); diff --git a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java index 8b7134c135..655fde56a6 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -41,16 +41,12 @@ public SituationWidget setImage() { switch (iconTextures) { case IDLE: this.area = GuiTextures.STATUS_IDLING; - return this; case WORKING: this.area = GuiTextures.STATUS_WORKING; - return this; case WARNING: this.area = GuiTextures.STATUS_WARNING; - return this; case ERROR: this.area = GuiTextures.STATUS_ERROR; - return this; default: this.area = null; } diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index d606cf9f37..ac5590797a 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -114,7 +114,9 @@ public void update() { } this.itemsLeftToTransferLastSecond = transferRate; } - super.update(); + if (!isWorkingAllowed) { + setSituation(DISABLED_BY_CONTROLLER); + } } protected int doTransferItems(IItemHandler itemHandler, IItemHandler myItemHandler, int maxTransferAmount) { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 5cbaa3e7ee..4609b7569a 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -117,7 +117,9 @@ public void update() { } this.fluidLeftToTransferLastSecond = transferRate; } - super.update(); + if (!isWorkingAllowed) { + setSituation(DISABLED_BY_CONTROLLER); + } } protected int doTransferFluids(int transferLimit) { From a7e3ca98a2132e3d3fdca5cbcb512a383b109f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 16 Dec 2020 16:56:38 -0300 Subject: [PATCH 26/37] fix declarations and string for cover localized names --- src/main/java/gregtech/api/situation/Situation.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/situation/Situation.java b/src/main/java/gregtech/api/situation/Situation.java index 932ac2e92d..5b53f4d40a 100644 --- a/src/main/java/gregtech/api/situation/Situation.java +++ b/src/main/java/gregtech/api/situation/Situation.java @@ -6,17 +6,17 @@ public class Situation { - public static GTControlledRegistry SITUATION_REGISTRY = new GTControlledRegistry<>(Short.MAX_VALUE); + public final static GTControlledRegistry SITUATION_REGISTRY = new GTControlledRegistry<>(Short.MAX_VALUE); public final String situationName; public final SituationTypes situationTypes; public final String situationLocaleName; - public int id; + public final int id; public Situation(int id, String situationName, SituationTypes situationTypes) { this.id = id; this.situationName = situationName; this.situationTypes = situationTypes; - this.situationLocaleName = MODID + ".situation." + this.situationName; + this.situationLocaleName = "gregtech.situation." + this.situationName; registerSituation(id,situationName,this); } From 667cb11714bcd563213547ddd951aa5d9d692cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 16 Dec 2020 17:05:22 -0300 Subject: [PATCH 27/37] cleanup unused functions --- src/main/java/gregtech/api/situation/Situation.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/main/java/gregtech/api/situation/Situation.java b/src/main/java/gregtech/api/situation/Situation.java index 5b53f4d40a..069e1537ef 100644 --- a/src/main/java/gregtech/api/situation/Situation.java +++ b/src/main/java/gregtech/api/situation/Situation.java @@ -2,8 +2,6 @@ import gregtech.api.util.GTControlledRegistry; -import static gregtech.api.GTValues.MODID; - public class Situation { public final static GTControlledRegistry SITUATION_REGISTRY = new GTControlledRegistry<>(Short.MAX_VALUE); @@ -20,19 +18,11 @@ public Situation(int id, String situationName, SituationTypes situationTypes) { registerSituation(id,situationName,this); } - public static void registerSituation(int id, String situationName, Situation situation){ + void registerSituation(int id, String situationName, Situation situation){ SITUATION_REGISTRY.register(id, situationName, situation); } public static Situation getSituationFromId(int id) { return SITUATION_REGISTRY.getObjectById(id); } - - public static int getIdFromSituation(String situationName) { - return SITUATION_REGISTRY.getIdByObjectName(situationName); - } - - public static String getLocaleName(Situation situation){ - return situation.situationLocaleName; - } } From 3dab8f85aedba9def3d340d55ca4ef12eeb26e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 16 Dec 2020 17:16:00 -0300 Subject: [PATCH 28/37] fix switch cleanup unused variables in the cyclebuttonwidget (hoovering tooltip moved to widget class) --- .../java/gregtech/api/gui/widgets/CycleButtonWidget.java | 3 --- src/main/java/gregtech/api/gui/widgets/SituationWidget.java | 6 +++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/api/gui/widgets/CycleButtonWidget.java b/src/main/java/gregtech/api/gui/widgets/CycleButtonWidget.java index 4c77820f60..d61d1625a4 100644 --- a/src/main/java/gregtech/api/gui/widgets/CycleButtonWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/CycleButtonWidget.java @@ -33,8 +33,6 @@ public class CycleButtonWidget extends Widget { private IntConsumer setOptionExecutor; protected int currentOption; protected String tooltipHoverString; - protected long hoverStartTime = -1L; - protected boolean isMouseHovered; public CycleButtonWidget(int xPosition, int yPosition, int width, int height, String[] optionNames, IntSupplier currentOptionSupplier, IntConsumer setOptionExecutor) { super(new Position(xPosition, yPosition), new Size(width, height)); @@ -126,7 +124,6 @@ public boolean mouseClicked(int mouseX, int mouseY, int button) { return false; } - @Override public void handleClientAction(int id, PacketBuffer buffer) { super.handleClientAction(id, buffer); diff --git a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java index 655fde56a6..9f956730e5 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -24,7 +24,7 @@ public class SituationWidget extends Widget { protected TextureArea area; private boolean isVisible = true; - public SituationWidget(int xPosition, int yPosition, int width, int height, Supplier getSituation) { + public SituationWidget(int xPosition, int yPosition, int width, int height, Supplier getSituation) { super(new Position(xPosition, yPosition), new Size(width, height)); this.currentSituationSupplier = getSituation; this.currentSituation = getSituation.get(); @@ -41,12 +41,16 @@ public SituationWidget setImage() { switch (iconTextures) { case IDLE: this.area = GuiTextures.STATUS_IDLING; + break; case WORKING: this.area = GuiTextures.STATUS_WORKING; + break; case WARNING: this.area = GuiTextures.STATUS_WARNING; + break; case ERROR: this.area = GuiTextures.STATUS_ERROR; + break; default: this.area = null; } From e14679410676b7bd7a74aef73500291565499a4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 16 Dec 2020 17:50:33 -0300 Subject: [PATCH 29/37] reverted unintended logic changes and remove unused functions --- .../capability/impl/AbstractRecipeLogic.java | 13 ++++-------- .../api/metatileentity/MetaTileEntity.java | 21 ------------------- .../gregtech/common/covers/CoverConveyor.java | 2 +- .../gregtech/common/covers/CoverPump.java | 2 +- 4 files changed, 6 insertions(+), 32 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index cf110deaf3..0164a853c6 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -120,16 +120,11 @@ public void update() { } else { metaTileEntity.setSituation(DISABLED_BY_CONTROLLER); } + if (wasActiveAndNeedsUpdate) { + this.wasActiveAndNeedsUpdate = false; + setActive(false); + } } - if (wasActiveAndNeedsUpdate) { - this.wasActiveAndNeedsUpdate = false; - setActive(false); - } - } - - boolean canOutputsFit(){ - return (MetaTileEntity.addItemsToItemHandler(metaTileEntity.getExportItems(), true, currentRecipe.getAllItemOutputs(metaTileEntity.getExportItems().getSlots())) && - MetaTileEntity.addFluidsToFluidHandler(metaTileEntity.getExportFluids(), true, currentRecipe.getFluidOutputs())); } protected void updateRecipeProgress() { diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index a5433074be..1bbfcbc446 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -1010,27 +1010,6 @@ public boolean isInputEmpty() { return true; } - public boolean isOutputFull() { - boolean fullOutputSlots = true; - boolean fullOutputTanks = true; - if (exportItems.getSlots() > 0) { - for (int i = 0; i < exportItems.getSlots(); i++) { - if (exportItems.getStackInSlot(i).getCount() < exportItems.getStackInSlot(i).getMaxStackSize()) { - fullOutputSlots = false; - } - } - } - if (exportFluids.getTanks() > 0) { - for (int i = 0; i < exportFluids.getTanks(); i++) { - if (exportFluids.getTankAt(i).getFluidAmount() < exportFluids.getTankAt(i).getCapacity()) { - fullOutputTanks = false; - } - } - } - return (fullOutputSlots && fullOutputTanks); - } - - public final int getOutputRedstoneSignal(@Nullable EnumFacing side) { if (side == null) { return getHighestOutputRedstoneSignal(); diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index ac5590797a..e8fe8fdabf 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -98,7 +98,7 @@ public void update() { TileEntity tileEntity = coverHolder.getWorld().getTileEntity(coverHolder.getPos().offset(attachedSide)); IItemHandler itemHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide.getOpposite()); IItemHandler myItemHandler = coverHolder.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide); - if (itemHandler == null) { + if (itemHandler == null || myItemHandler == null) { if (conveyorMode == ConveyorMode.IMPORT) setSituation(NO_IMPORT_INVENTORY); if (conveyorMode == ConveyorMode.EXPORT) setSituation(NO_EXPORT_INVENTORY); return; diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 4609b7569a..8d9e7fde04 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -129,7 +129,7 @@ protected int doTransferFluids(int transferLimit) { blockPos.release(); IFluidHandler fluidHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide.getOpposite()); IFluidHandler myFluidHandler = coverHolder.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide); - if (fluidHandler == null) { + if (fluidHandler == null || myFluidHandler == null) { if (pumpMode == PumpMode.IMPORT) setSituation(NO_IMPORT_TANK); if (pumpMode == PumpMode.EXPORT) setSituation(NO_EXPORT_TANK); return 0; From 57ebefa468b652881c0f0f07e1cf33c92120f27e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Fri, 18 Dec 2020 00:17:36 -0300 Subject: [PATCH 30/37] fix widget not syncing on cover GUI handle null cases --- .../gregtech/api/cover/CoverBehavior.java | 2 +- .../api/gui/widgets/SituationWidget.java | 15 ++++++--- .../api/metatileentity/MetaTileEntity.java | 2 +- .../gregtech/api/situation/Situations.java | 32 +++++++++---------- .../gregtech/common/covers/CoverConveyor.java | 18 +++++------ .../gregtech/common/covers/CoverPump.java | 14 ++++---- 6 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/main/java/gregtech/api/cover/CoverBehavior.java b/src/main/java/gregtech/api/cover/CoverBehavior.java index 6739ea921d..1f7d966087 100644 --- a/src/main/java/gregtech/api/cover/CoverBehavior.java +++ b/src/main/java/gregtech/api/cover/CoverBehavior.java @@ -44,7 +44,7 @@ public abstract class CoverBehavior implements IUIHolder { public final ICoverable coverHolder; public final EnumFacing attachedSide; private int redstoneSignalOutput; - private Situation situation = IDLE; + private Situation situation; public CoverBehavior(ICoverable coverHolder, EnumFacing attachedSide) { this.coverHolder = coverHolder; diff --git a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java index 9f956730e5..7bdffbc7e8 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -22,7 +22,6 @@ public class SituationWidget extends Widget { protected int currentId; protected TextureArea area; - private boolean isVisible = true; public SituationWidget(int xPosition, int yPosition, int width, int height, Supplier getSituation) { super(new Position(xPosition, yPosition), new Size(width, height)); @@ -33,10 +32,18 @@ public SituationWidget(int xPosition, int yPosition, int w } public void setTooltipHoverString() { - this.tooltipHoverString = I18n.format(this.currentSituation.situationLocaleName); + if (this.currentSituation != null) { + this.tooltipHoverString = I18n.format(this.currentSituation.situationLocaleName); + } else { + this.tooltipHoverString = null; + } } public SituationWidget setImage() { + if (this.currentSituation == null) { + this.area = null; + return this; + } SituationTypes iconTextures = this.currentSituation.situationTypes; switch (iconTextures) { case IDLE: @@ -71,7 +78,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) { super.readUpdateInfo(id, buffer); if (id == 1) { this.currentId = buffer.readVarInt(); - this.currentSituation = Situation.getSituationFromId(this.currentId); + this.currentSituation = Situation.getSituationFromId(currentId); setTooltipHoverString(); setImage(); } @@ -86,7 +93,7 @@ public void drawInForeground(int mouseX, int mouseY) { @Override @SideOnly(Side.CLIENT) public void drawInBackground(int mouseX, int mouseY, IRenderContext context) { - if (!this.isVisible || area == null) return; + if (area == null) return; Position position = getPosition(); Size size = getSize(); area.draw(position.x, position.y, size.width, size.height); diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 1bbfcbc446..372e5437ab 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -90,7 +90,7 @@ public abstract class MetaTileEntity implements ICoverable { private CoverBehavior[] coverBehaviors = new CoverBehavior[6]; - private Situation situation = IDLE; + private Situation situation; private boolean failedToMoveFluids; private boolean failedToMoveItems; diff --git a/src/main/java/gregtech/api/situation/Situations.java b/src/main/java/gregtech/api/situation/Situations.java index d0b3451516..c2123887b3 100644 --- a/src/main/java/gregtech/api/situation/Situations.java +++ b/src/main/java/gregtech/api/situation/Situations.java @@ -3,22 +3,22 @@ import gregtech.api.util.GTLog; public class Situations { - public static Situation WORKING = new Situation(0, "working", SituationTypes.WORKING); - - public static Situation IDLE = new Situation(1, "idle", SituationTypes.IDLE); - public static Situation DISABLED_BY_CONTROLLER = new Situation(2, "disabled_by_controller", SituationTypes.IDLE); - - public static Situation EMPTY_SOURCE = new Situation(3, "empty_source", SituationTypes.WARNING); - public static Situation INSUFFICIENT_POWER = new Situation(4, "insufficient_power", SituationTypes.WARNING); - public static Situation NO_MATCHING_RECIPE = new Situation(5, "no_matching_recipe", SituationTypes.WARNING); - public static Situation OUTPUT_INVENTORY_FULL = new Situation(6, "output_inventory_full", SituationTypes.WARNING); - public static Situation TARGET_INVENTORY_FULL = new Situation(7, "target_inventory_full", SituationTypes.WARNING); - - public static Situation NO_IMPORT_INVENTORY = new Situation(8, "no_import_inventory", SituationTypes.ERROR); - public static Situation NO_EXPORT_INVENTORY = new Situation(9, "no_export_inventory", SituationTypes.ERROR); - public static Situation NO_IMPORT_TANK = new Situation(10, "no_import_tank", SituationTypes.ERROR); - public static Situation NO_EXPORT_TANK = new Situation(11, "no_export_tank", SituationTypes.ERROR); - public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(12, "null_capability", SituationTypes.ERROR); + public static Situation WORKING = new Situation(1, "working", SituationTypes.WORKING); + + public static Situation IDLE = new Situation(2, "idle", SituationTypes.IDLE); + public static Situation DISABLED_BY_CONTROLLER = new Situation(3, "disabled_by_controller", SituationTypes.IDLE); + + public static Situation EMPTY_SOURCE = new Situation(4, "empty_source", SituationTypes.WARNING); + public static Situation INSUFFICIENT_POWER = new Situation(5, "insufficient_power", SituationTypes.WARNING); + public static Situation NO_MATCHING_RECIPE = new Situation(6, "no_matching_recipe", SituationTypes.WARNING); + public static Situation OUTPUT_INVENTORY_FULL = new Situation(7, "output_inventory_full", SituationTypes.WARNING); + public static Situation TARGET_INVENTORY_FULL = new Situation(8, "target_inventory_full", SituationTypes.WARNING); + + public static Situation NO_IMPORT_INVENTORY = new Situation(9, "no_import_inventory", SituationTypes.ERROR); + public static Situation NO_EXPORT_INVENTORY = new Situation(10, "no_export_inventory", SituationTypes.ERROR); + public static Situation NO_IMPORT_TANK = new Situation(11, "no_import_tank", SituationTypes.ERROR); + public static Situation NO_EXPORT_TANK = new Situation(12, "no_export_tank", SituationTypes.ERROR); + public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(13, "null_capability", SituationTypes.ERROR); public static void init() { GTLog.logger.info("Registering situations..."); diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index e8fe8fdabf..69c394452b 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -60,7 +60,6 @@ public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, in this.transferRate = maxItemTransferRate; this.itemsLeftToTransferLastSecond = transferRate; this.conveyorMode = ConveyorMode.EXPORT; - this.situation = IDLE; this.itemFilterContainer = new ItemFilterContainer(this); } @@ -101,17 +100,17 @@ public void update() { if (itemHandler == null || myItemHandler == null) { if (conveyorMode == ConveyorMode.IMPORT) setSituation(NO_IMPORT_INVENTORY); if (conveyorMode == ConveyorMode.EXPORT) setSituation(NO_EXPORT_INVENTORY); - return; + } else { + int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond); + this.itemsLeftToTransferLastSecond -= totalTransferred; + if (this.itemsLeftToTransferLastSecond < transferRate) { + setSituation(WORKING); + } else { + setSituation(IDLE); + } } - int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond); - this.itemsLeftToTransferLastSecond -= totalTransferred; } if (timer % 20 == 0) { - if (itemsLeftToTransferLastSecond < transferRate) { - setSituation(WORKING); - } else { - setSituation(IDLE); - } this.itemsLeftToTransferLastSecond = transferRate; } if (!isWorkingAllowed) { @@ -119,6 +118,7 @@ public void update() { } } + protected int doTransferItems(IItemHandler itemHandler, IItemHandler myItemHandler, int maxTransferAmount) { return doTransferItemsAny(itemHandler, myItemHandler, maxTransferAmount); } diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 8d9e7fde04..7e5a0bd857 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -60,7 +60,6 @@ public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int this.fluidLeftToTransferLastSecond = transferRate; this.pumpMode = PumpMode.EXPORT; this.bucketMode = BucketMode.MILLI_BUCKET; - this.situation = IDLE; this.fluidFilter = new FluidFilterContainer(this); } @@ -110,11 +109,6 @@ public void update() { this.fluidLeftToTransferLastSecond -= doTransferFluids(fluidLeftToTransferLastSecond); } if (timer % 20 == 0) { - if (fluidLeftToTransferLastSecond < transferRate) { - setSituation(WORKING); - } else { - setSituation(IDLE); - } this.fluidLeftToTransferLastSecond = transferRate; } if (!isWorkingAllowed) { @@ -134,7 +128,13 @@ protected int doTransferFluids(int transferLimit) { if (pumpMode == PumpMode.EXPORT) setSituation(NO_EXPORT_TANK); return 0; } - return doTransferFluidsInternal(myFluidHandler, fluidHandler, transferLimit); + int transferredFluid = doTransferFluidsInternal(myFluidHandler, fluidHandler, transferLimit); + if (transferredFluid != 0) { + setSituation(WORKING); + } else { + setSituation(IDLE); + } + return transferredFluid; } protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandler fluidHandler, int transferLimit) { From d83c93b35dbfee4d9e64a1e66c2849fe1b675b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Fri, 18 Dec 2020 16:54:12 -0300 Subject: [PATCH 31/37] dont check if our capaibily is null --- src/main/java/gregtech/common/covers/CoverConveyor.java | 2 +- src/main/java/gregtech/common/covers/CoverPump.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java index 69c394452b..978deeda78 100644 --- a/src/main/java/gregtech/common/covers/CoverConveyor.java +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -97,7 +97,7 @@ public void update() { TileEntity tileEntity = coverHolder.getWorld().getTileEntity(coverHolder.getPos().offset(attachedSide)); IItemHandler itemHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide.getOpposite()); IItemHandler myItemHandler = coverHolder.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, attachedSide); - if (itemHandler == null || myItemHandler == null) { + if (itemHandler == null) { if (conveyorMode == ConveyorMode.IMPORT) setSituation(NO_IMPORT_INVENTORY); if (conveyorMode == ConveyorMode.EXPORT) setSituation(NO_EXPORT_INVENTORY); } else { diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java index 7e5a0bd857..37dd637f0e 100644 --- a/src/main/java/gregtech/common/covers/CoverPump.java +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -123,7 +123,7 @@ protected int doTransferFluids(int transferLimit) { blockPos.release(); IFluidHandler fluidHandler = tileEntity == null ? null : tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide.getOpposite()); IFluidHandler myFluidHandler = coverHolder.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, attachedSide); - if (fluidHandler == null || myFluidHandler == null) { + if (fluidHandler == null) { if (pumpMode == PumpMode.IMPORT) setSituation(NO_IMPORT_TANK); if (pumpMode == PumpMode.EXPORT) setSituation(NO_EXPORT_TANK); return 0; From 1ae038f6890c6734237f172c7cfbdb737e32b081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Fri, 18 Dec 2020 19:23:17 -0300 Subject: [PATCH 32/37] add more situations to the recipe logic --- .../capability/impl/AbstractRecipeLogic.java | 21 ++++++++++------ .../gregtech/api/situation/Situations.java | 25 +++++++++++-------- .../resources/assets/gregtech/lang/en_us.lang | 5 +++- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 0164a853c6..7d4fff1deb 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -171,8 +171,6 @@ protected void trySearchNewRecipe() { } if (this.currentRecipe != null && setupAndConsumeRecipeInputs(this.currentRecipe)) { setupRecipe(this.currentRecipe); - } else { - metaTileEntity.setSituation(OUTPUT_INVENTORY_FULL); } } @@ -244,11 +242,20 @@ protected boolean setupAndConsumeRecipeInputs(Recipe recipe) { IItemHandlerModifiable exportInventory = getOutputInventory(); IMultipleTankHandler importFluids = getInputTank(); IMultipleTankHandler exportFluids = getOutputTank(); - return (totalEUt >= 0 ? getEnergyStored() >= (totalEUt > getEnergyCapacity() / 2 ? resultOverclock[0] : totalEUt) : - (getEnergyStored() - resultOverclock[0] <= getEnergyCapacity())) && - MetaTileEntity.addItemsToItemHandler(exportInventory, true, recipe.getAllItemOutputs(exportInventory.getSlots())) && - MetaTileEntity.addFluidsToFluidHandler(exportFluids, true, recipe.getFluidOutputs()) && - recipe.matches(true, importInventory, importFluids); + if (!(totalEUt >= 0 ? getEnergyStored() >= (totalEUt > getEnergyCapacity() / 2 ? resultOverclock[0] : totalEUt) : + (getEnergyStored() - resultOverclock[0] <= getEnergyCapacity()))) { + metaTileEntity.setSituation(INSUFFICIENT_POWER_TO_START); + return false; + } + if (!MetaTileEntity.addItemsToItemHandler(exportInventory, true, recipe.getAllItemOutputs(exportInventory.getSlots()))) { + metaTileEntity.setSituation(OUTPUT_SLOTS_FULL); + return false; + } + if (!MetaTileEntity.addFluidsToFluidHandler(exportFluids, true, recipe.getFluidOutputs())) { + metaTileEntity.setSituation(OUTPUT_TANKS_FULL); + return false; + } + return recipe.matches(true, importInventory, importFluids); } protected int[] calculateOverclock(int EUt, long voltage, int duration) { diff --git a/src/main/java/gregtech/api/situation/Situations.java b/src/main/java/gregtech/api/situation/Situations.java index c2123887b3..2fc9a58429 100644 --- a/src/main/java/gregtech/api/situation/Situations.java +++ b/src/main/java/gregtech/api/situation/Situations.java @@ -8,17 +8,20 @@ public class Situations { public static Situation IDLE = new Situation(2, "idle", SituationTypes.IDLE); public static Situation DISABLED_BY_CONTROLLER = new Situation(3, "disabled_by_controller", SituationTypes.IDLE); - public static Situation EMPTY_SOURCE = new Situation(4, "empty_source", SituationTypes.WARNING); - public static Situation INSUFFICIENT_POWER = new Situation(5, "insufficient_power", SituationTypes.WARNING); - public static Situation NO_MATCHING_RECIPE = new Situation(6, "no_matching_recipe", SituationTypes.WARNING); - public static Situation OUTPUT_INVENTORY_FULL = new Situation(7, "output_inventory_full", SituationTypes.WARNING); - public static Situation TARGET_INVENTORY_FULL = new Situation(8, "target_inventory_full", SituationTypes.WARNING); - - public static Situation NO_IMPORT_INVENTORY = new Situation(9, "no_import_inventory", SituationTypes.ERROR); - public static Situation NO_EXPORT_INVENTORY = new Situation(10, "no_export_inventory", SituationTypes.ERROR); - public static Situation NO_IMPORT_TANK = new Situation(11, "no_import_tank", SituationTypes.ERROR); - public static Situation NO_EXPORT_TANK = new Situation(12, "no_export_tank", SituationTypes.ERROR); - public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(13, "null_capability", SituationTypes.ERROR); + public static Situation EMPTY_SOURCE = new Situation(100, "empty_source", SituationTypes.WARNING); + public static Situation INSUFFICIENT_POWER = new Situation(101, "insufficient_power", SituationTypes.WARNING); + public static Situation INSUFFICIENT_POWER_TO_START = new Situation(102, "insufficient_power_to_start", SituationTypes.WARNING); + public static Situation NO_MATCHING_RECIPE = new Situation(103, "no_matching_recipe", SituationTypes.WARNING); + public static Situation OUTPUT_SLOTS_FULL = new Situation(104, "output_slots_full", SituationTypes.WARNING); + public static Situation OUTPUT_TANKS_FULL = new Situation(105, "output_tanks_full", SituationTypes.WARNING); + public static Situation OUTPUT_INVENTORY_FULL = new Situation(106, "output_inventory_full", SituationTypes.WARNING); + public static Situation TARGET_INVENTORY_FULL = new Situation(107, "target_inventory_full", SituationTypes.WARNING); + + public static Situation NO_IMPORT_INVENTORY = new Situation(201, "no_import_inventory", SituationTypes.ERROR); + public static Situation NO_EXPORT_INVENTORY = new Situation(202, "no_export_inventory", SituationTypes.ERROR); + public static Situation NO_IMPORT_TANK = new Situation(203, "no_import_tank", SituationTypes.ERROR); + public static Situation NO_EXPORT_TANK = new Situation(204, "no_export_tank", SituationTypes.ERROR); + public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(205, "null_capability", SituationTypes.ERROR); public static void init() { GTLog.logger.info("Registering situations..."); diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index a003f8b9b2..b3c73c3daf 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -763,9 +763,12 @@ gregtech.situation.working=Working gregtech.situation.null_capability=Error accessing inventory from this side gregtech.situation.empty_source=This inventory is empty gregtech.situation.insufficient_power=Not enough power to run this recipe +gregtech.situation.insufficient_power_to_start=Not enough power to start this recipe gregtech.situation.no_matching_recipe=No recipe found gregtech.situation.target_inventory_full=The target inventory is full -gregtech.situation.output_inventory_full=Output is full +gregtech.situation.output_slots_full=Output slots are full +gregtech.situation.output_tanks_full=Output tanks are full +gregtech.situation.output_inventory_full=Output slots and tanks are full gregtech.situation.no_import_inventory=Cant access inventory to import from gregtech.situation.no_export_inventory=Cant access inventory to export to gregtech.situation.no_import_tank=Cant access tank to import from From ac5f09441a45d528fb2c54aa8e6b5fb44adbb1f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Mon, 11 Jan 2021 00:56:50 -0300 Subject: [PATCH 33/37] implement fisher situation widget widget updates really slowly due to the ticking logic --- .../api/gui/widgets/SituationWidget.java | 8 ++- .../gregtech/api/situation/Situations.java | 1 + .../electric/MetaTileEntityFisher.java | 59 +++++++++++-------- 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java index 7bdffbc7e8..674a5d0761 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -67,9 +67,11 @@ public SituationWidget setImage() { @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - if (currentSituationSupplier.get().id != currentId) { - this.currentId = currentSituationSupplier.get().id; - writeUpdateInfo(1, buf -> buf.writeVarInt(currentId)); + if (currentSituationSupplier.get() != null) { + if (currentSituationSupplier.get().id != currentId) { + this.currentId = currentSituationSupplier.get().id; + writeUpdateInfo(1, buf -> buf.writeVarInt(currentId)); + } } } diff --git a/src/main/java/gregtech/api/situation/Situations.java b/src/main/java/gregtech/api/situation/Situations.java index 2fc9a58429..a27f697483 100644 --- a/src/main/java/gregtech/api/situation/Situations.java +++ b/src/main/java/gregtech/api/situation/Situations.java @@ -22,6 +22,7 @@ public class Situations { public static Situation NO_IMPORT_TANK = new Situation(203, "no_import_tank", SituationTypes.ERROR); public static Situation NO_EXPORT_TANK = new Situation(204, "no_export_tank", SituationTypes.ERROR); public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(205, "null_capability", SituationTypes.ERROR); + public static Situation WATER_CHECK_FAILED = new Situation(206, "water_check_failed", SituationTypes.ERROR); public static void init() { GTLog.logger.info("Registering situations..."); diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityFisher.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityFisher.java index 8fd28cddcb..7af39aab4f 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityFisher.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityFisher.java @@ -6,6 +6,7 @@ import gregtech.api.GTValues; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; +import gregtech.api.gui.widgets.SituationWidget; import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.MetaTileEntityHolder; @@ -33,6 +34,8 @@ import javax.annotation.Nullable; import java.util.List; +import static gregtech.api.situation.Situations.*; + public class MetaTileEntityFisher extends TieredMetaTileEntity { private static final int WATER_CHECK_SIZE = 25; @@ -62,7 +65,8 @@ protected ModularUI createUI(EntityPlayer entityPlayer) { 18 + 18 * rowSize + 94) .label(10, 5, getMetaFullName()) .widget(new SlotWidget(importItems, 0, 18, 18, true, true) - .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.STRING_SLOT_OVERLAY)); + .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.STRING_SLOT_OVERLAY)) + .widget(new SituationWidget(19,38,16,16,this::getSituation)); for (int y = 0; y < rowSize; y++) { for (int x = 0; x < rowSize; x++) { @@ -80,32 +84,41 @@ protected ModularUI createUI(EntityPlayer entityPlayer) { public void update() { super.update(); ItemStack baitStack = importItems.getStackInSlot(0); - if (!getWorld().isRemote && energyContainer.getEnergyStored() >= energyAmountPerFish && getTimer() % fishingTicks == 0L && !baitStack.isEmpty()) { - WorldServer world = (WorldServer) this.getWorld(); - int waterCount = 0; - int edgeSize = (int) Math.sqrt(WATER_CHECK_SIZE); - for (int x = 0; x < edgeSize; x++){ - for (int z = 0; z < edgeSize; z++){ - BlockPos waterCheckPos = getPos().down().add(x - edgeSize / 2, 0, z - edgeSize / 2); - if (world.getBlockState(waterCheckPos).getBlock() instanceof BlockLiquid && - world.getBlockState(waterCheckPos).getMaterial() == Material.WATER) { - waterCount++; + if (!getWorld().isRemote) { + if (baitStack.isEmpty()) { + setSituation(IDLE); + } else if (energyContainer.getEnergyStored() < energyAmountPerFish) { + setSituation(INSUFFICIENT_POWER_TO_START); + } else if (getTimer() % fishingTicks == 0L) { + setSituation(WORKING); + WorldServer world = (WorldServer) this.getWorld(); + int waterCount = 0; + int edgeSize = (int) Math.sqrt(WATER_CHECK_SIZE); + for (int x = 0; x < edgeSize; x++) { + for (int z = 0; z < edgeSize; z++) { + BlockPos waterCheckPos = getPos().down().add(x - edgeSize / 2, 0, z - edgeSize / 2); + if (world.getBlockState(waterCheckPos).getBlock() instanceof BlockLiquid && + world.getBlockState(waterCheckPos).getMaterial() == Material.WATER) { + waterCount++; + } } } - } - if (waterCount == WATER_CHECK_SIZE) { - LootTable table = world.getLootTableManager().getLootTableFromLocation(LootTableList.GAMEPLAY_FISHING); - NonNullList itemStacks = NonNullList.create(); - itemStacks.addAll(table.generateLootForPools(world.rand, new LootContext.Builder(world).build())); - if(addItemsToItemHandler(exportItems, true, itemStacks)) { - addItemsToItemHandler(exportItems, false, itemStacks); - energyContainer.removeEnergy(energyAmountPerFish); - baitStack.shrink(1); + if (waterCount == WATER_CHECK_SIZE) { + LootTable table = world.getLootTableManager().getLootTableFromLocation(LootTableList.GAMEPLAY_FISHING); + NonNullList itemStacks = NonNullList.create(); + itemStacks.addAll(table.generateLootForPools(world.rand, new LootContext.Builder(world).build())); + if (addItemsToItemHandler(exportItems, true, itemStacks)) { + addItemsToItemHandler(exportItems, false, itemStacks); + energyContainer.removeEnergy(energyAmountPerFish); + baitStack.shrink(1); + } + } else { + setSituation(WATER_CHECK_FAILED); } } - } - if(!getWorld().isRemote && getTimer() % 5 == 0) { - pushItemsIntoNearbyHandlers(getFrontFacing()); + if (getTimer() % 5 == 0) { + pushItemsIntoNearbyHandlers(getFrontFacing()); + } } } From 0ae37a6727e90f38433a1d2f660de7304eb0b1d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Tue, 2 Feb 2021 23:27:23 -0300 Subject: [PATCH 34/37] reworked idle logic avoid iterating the input slots again. --- .../capability/impl/AbstractRecipeLogic.java | 15 +++++++++++---- .../api/metatileentity/MetaTileEntity.java | 18 ------------------ 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 7d4fff1deb..95078f4f97 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -51,6 +51,7 @@ public abstract class AbstractRecipeLogic extends MTETrait implements IWorkable protected boolean workingEnabled = true; protected boolean hasNotEnoughEnergy; protected boolean wasActiveAndNeedsUpdate; + protected boolean isInputsEmpty; public AbstractRecipeLogic(MetaTileEntity tileEntity, RecipeMap recipeMap) { super(tileEntity); @@ -111,10 +112,11 @@ public void update() { if (progressTime == 0) { trySearchNewRecipe(); if (currentRecipe == null) { - metaTileEntity.setSituation(NO_MATCHING_RECIPE); - } - if (metaTileEntity.isInputEmpty()) { - metaTileEntity.setSituation(IDLE); + if (isInputsEmpty) { + metaTileEntity.setSituation(IDLE); + } else { + metaTileEntity.setSituation(NO_MATCHING_RECIPE); + } } } } else { @@ -195,6 +197,7 @@ protected Recipe findRecipe(long maxVoltage, IItemHandlerModifiable inputs, IMul protected boolean checkRecipeInputsDirty(IItemHandler inputs, IMultipleTankHandler fluidInputs) { boolean shouldRecheckRecipe = false; + this.isInputsEmpty = true; if (lastItemInputs == null || lastItemInputs.length != inputs.getSlots()) { this.lastItemInputs = new ItemStack[inputs.getSlots()]; Arrays.fill(lastItemInputs, ItemStack.EMPTY); @@ -211,6 +214,8 @@ protected boolean checkRecipeInputsDirty(IItemHandler inputs, IMultipleTankHandl } else if (currentStack.getCount() != lastStack.getCount()) { lastStack.setCount(currentStack.getCount()); shouldRecheckRecipe = true; + } else if (!currentStack.isEmpty()) { + this.isInputsEmpty = false; } } for (int i = 0; i < lastFluidInputs.length; i++) { @@ -224,6 +229,8 @@ protected boolean checkRecipeInputsDirty(IItemHandler inputs, IMultipleTankHandl currentStack.amount != lastStack.amount) { lastStack.amount = currentStack.amount; shouldRecheckRecipe = true; + } else if (currentStack != null) { + this.isInputsEmpty = false; } } return shouldRecheckRecipe; diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 372e5437ab..533929594c 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -992,24 +992,6 @@ public static boolean addFluidsToFluidHandler(IFluidHandler handler, boolean sim return filledAll; } - public boolean isInputEmpty() { - if (importItems.getSlots() > 0) { - for (int i = 0; i < importItems.getSlots(); i++) { - if (!importItems.getStackInSlot(i).isEmpty()) { - return false; - } - } - } - if (importFluids.getTanks() > 0) { - for (int i = 0; i < importFluids.getTanks(); i++) { - if (importFluids.getTankAt(i).getFluid() != null) { - return false; - } - } - } - return true; - } - public final int getOutputRedstoneSignal(@Nullable EnumFacing side) { if (side == null) { return getHighestOutputRedstoneSignal(); From 6d2af0914ab87c61e51f841309c37622a97049c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Wed, 17 Feb 2021 20:56:16 -0300 Subject: [PATCH 35/37] get error type as string --- .../api/metatileentity/MetaTileEntity.java | 1 - .../gregtech/api/situation/Situation.java | 4 ++++ .../api/situation/SituationTypes.java | 23 +++++++++++++++---- .../resources/assets/gregtech/lang/en_us.lang | 4 ++++ 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 533929594c..82d47018ad 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -58,7 +58,6 @@ import java.util.function.Consumer; import static gregtech.api.util.InventoryUtils.simulateItemStackMerge; -import static gregtech.api.Situations.*; public abstract class MetaTileEntity implements ICoverable { diff --git a/src/main/java/gregtech/api/situation/Situation.java b/src/main/java/gregtech/api/situation/Situation.java index 069e1537ef..9fadc79a81 100644 --- a/src/main/java/gregtech/api/situation/Situation.java +++ b/src/main/java/gregtech/api/situation/Situation.java @@ -18,6 +18,10 @@ public Situation(int id, String situationName, SituationTypes situationTypes) { registerSituation(id,situationName,this); } + public String getSituationErrorLevel(Situation situation) { + return situation.situationTypes.toString(); + } + void registerSituation(int id, String situationName, Situation situation){ SITUATION_REGISTRY.register(id, situationName, situation); } diff --git a/src/main/java/gregtech/api/situation/SituationTypes.java b/src/main/java/gregtech/api/situation/SituationTypes.java index 35ed1fe017..8ac3160cf3 100644 --- a/src/main/java/gregtech/api/situation/SituationTypes.java +++ b/src/main/java/gregtech/api/situation/SituationTypes.java @@ -1,8 +1,21 @@ package gregtech.api.situation; -public enum SituationTypes { - WORKING, - IDLE, - ERROR, - WARNING +import net.minecraft.util.IStringSerializable; + +public enum SituationTypes implements IStringSerializable { + WORKING("gregtech.situation.level.warning"), + IDLE("gregtech.situation.level.idle"), + ERROR("gregtech.situation.level.error"), + WARNING("gregtech.situation.level.warning"); + + public final String errorLevelName; + + SituationTypes(String errorLevelName) {this.errorLevelName = errorLevelName;} + + @Override + public String getName() { + return errorLevelName; + } } + + diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index b3c73c3daf..1713ed9cc3 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -757,6 +757,10 @@ cover.machine_controller.mode.cover_north=Control Cover (North) cover.machine_controller.mode.cover_east=Control Cover (East) cover.machine_controller.mode.cover_west=Control Cover (West) +gregtech.situation.level.working=WORKING +gregtech.situation.level.idle=IDLING +gregtech.situation.level.warning=WARNING +gregtech.situation.level.error=ERROR gregtech.situation.idle=Idling gregtech.situation.disabled_by_controller=Disabled by controller cover gregtech.situation.working=Working From 8be3ae5179686d2288a0f46ff703a7ff395dbdb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Tue, 23 Feb 2021 21:52:42 -0300 Subject: [PATCH 36/37] Add to Air collector logic --- .../gregtech/api/situation/Situations.java | 2 ++ .../electric/MetaTileEntityAirCollector.java | 26 ++++++++++++++----- .../resources/assets/gregtech/lang/en_us.lang | 3 ++- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/api/situation/Situations.java b/src/main/java/gregtech/api/situation/Situations.java index a27f697483..08ea4273ea 100644 --- a/src/main/java/gregtech/api/situation/Situations.java +++ b/src/main/java/gregtech/api/situation/Situations.java @@ -23,6 +23,8 @@ public class Situations { public static Situation NO_EXPORT_TANK = new Situation(204, "no_export_tank", SituationTypes.ERROR); public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(205, "null_capability", SituationTypes.ERROR); public static Situation WATER_CHECK_FAILED = new Situation(206, "water_check_failed", SituationTypes.ERROR); + public static Situation BLOCKED_INTAKES = new Situation(207, "blocked_intakes", SituationTypes.ERROR); + public static Situation DIMENSION_LACKS_ATMOSPHERE = new Situation(208, "dimension_lacks_atmosphere", SituationTypes.ERROR); public static void init() { GTLog.logger.info("Registering situations..."); diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityAirCollector.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityAirCollector.java index 2f4d396960..baca7408e2 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityAirCollector.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityAirCollector.java @@ -25,6 +25,8 @@ import java.util.List; import java.util.stream.IntStream; +import static gregtech.api.situation.Situations.*; + public class MetaTileEntityAirCollector extends TieredMetaTileEntity { private static final int PRODUCTION_CYCLE_LENGTH = 20; @@ -48,12 +50,19 @@ public void update() { if (!getWorld().isRemote) { long energyToConsume = GTValues.V[getTier()]; - if (checkDimension() && checkOpenSides() && getTimer() % PRODUCTION_CYCLE_LENGTH == 0L && energyContainer.getEnergyStored() >= energyToConsume) { - int fluidAmount = getCollectedFluidAmount(); - FluidStack fluidStack = Materials.Air.getFluid(fluidAmount); - if (exportFluids.fill(fluidStack, false) == fluidAmount) { - exportFluids.fill(fluidStack, true); - energyContainer.removeEnergy(energyToConsume); + if (getTimer() % PRODUCTION_CYCLE_LENGTH == 0L ) { + if (energyContainer.getEnergyStored() >= energyToConsume) { + if (checkDimension() && checkOpenSides()) { + this.setSituation(WORKING); + int fluidAmount = getCollectedFluidAmount(); + FluidStack fluidStack = Materials.Air.getFluid(fluidAmount); + if (exportFluids.fill(fluidStack, false) == fluidAmount) { + exportFluids.fill(fluidStack, true); + energyContainer.removeEnergy(energyToConsume); + } + } + } else { + setSituation(INSUFFICIENT_POWER_TO_START); } } if (getTimer() % 5 == 0) { @@ -69,12 +78,15 @@ private boolean checkOpenSides() { if (getWorld().isAirBlock(getPos().offset(side))) return true; } + setSituation(BLOCKED_INTAKES); return false; } private boolean checkDimension() { int dimensionId = getWorld().provider.getDimension(); - return IntStream.of(ConfigHolder.machineSpecific.airCollectorDimensionBlacklist).noneMatch(x -> x == dimensionId); + boolean air = IntStream.of(ConfigHolder.machineSpecific.airCollectorDimensionBlacklist).noneMatch(x -> x == dimensionId); + if (!air) setSituation(DIMENSION_LACKS_ATMOSPHERE); + return air; } private int getCollectedFluidAmount() { diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 1713ed9cc3..fa4220ac49 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -777,7 +777,8 @@ gregtech.situation.no_import_inventory=Cant access inventory to import from gregtech.situation.no_export_inventory=Cant access inventory to export to gregtech.situation.no_import_tank=Cant access tank to import from gregtech.situation.no_export_tank=Cant access tank to export to - +gregtech.situation.blocked_intakes=Blocked intakes +gregtech.situation.dimension_lacks_atmosphere=Dimension lacks atmosphere # %s is a localized material name item.material.oreprefix.oreBlackgranite=Granite %s Ore From 8e7c42112cb89610e08d8a714a7b166847d44345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Mon, 15 Mar 2021 18:29:19 -0300 Subject: [PATCH 37/37] initial steam support --- .../api/capability/impl/RecipeLogicSteam.java | 54 +++++++++++++ .../api/gui/widgets/SituationWidget.java | 77 ++++++++++++++++++- .../metatileentity/SteamMetaTileEntity.java | 5 +- .../api/situation/SituationTypes.java | 2 +- .../gregtech/api/situation/Situations.java | 22 +++--- .../resources/assets/gregtech/lang/en_us.lang | 3 + 6 files changed, 147 insertions(+), 16 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/RecipeLogicSteam.java b/src/main/java/gregtech/api/capability/impl/RecipeLogicSteam.java index fb2ba79e20..bd520b0326 100644 --- a/src/main/java/gregtech/api/capability/impl/RecipeLogicSteam.java +++ b/src/main/java/gregtech/api/capability/impl/RecipeLogicSteam.java @@ -1,6 +1,7 @@ package gregtech.api.capability.impl; import gregtech.api.GTValues; +import gregtech.api.capability.IMultipleTankHandler; import gregtech.api.damagesources.DamageSources; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.recipes.Recipe; @@ -9,6 +10,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.util.EntitySelectors; @@ -18,7 +20,13 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldServer; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.items.IItemHandler; + +import java.util.Arrays; + +import static gregtech.api.situation.Situations.*; public class RecipeLogicSteam extends AbstractRecipeLogic { @@ -143,10 +151,56 @@ public void update() { return; if (this.needsVenting && metaTileEntity.getTimer() % 10 == 0) { tryDoVenting(); + if (isVentingStuck()){ + metaTileEntity.setSituation(BLOCKED_VENT); + } } super.update(); } + protected boolean checkRecipeInputsDirty(IItemHandler inputs, IMultipleTankHandler fluidInputs) { + boolean shouldRecheckRecipe = false; + this.isInputsEmpty = true; + if (lastItemInputs == null || lastItemInputs.length != inputs.getSlots()) { + this.lastItemInputs = new ItemStack[inputs.getSlots()]; + Arrays.fill(lastItemInputs, ItemStack.EMPTY); + } + if (lastFluidInputs == null || lastFluidInputs.length != fluidInputs.getTanks()) { + this.lastFluidInputs = new FluidStack[fluidInputs.getTanks()]; + } + for (int i = 0; i < lastItemInputs.length; i++) { + ItemStack currentStack = inputs.getStackInSlot(i); + ItemStack lastStack = lastItemInputs[i]; + if (!areItemStacksEqual(currentStack, lastStack)) { + this.lastItemInputs[i] = currentStack.isEmpty() ? ItemStack.EMPTY : currentStack.copy(); + shouldRecheckRecipe = true; + } else if (currentStack.getCount() != lastStack.getCount()) { + lastStack.setCount(currentStack.getCount()); + shouldRecheckRecipe = true; + } else if (!currentStack.isEmpty()) { + this.isInputsEmpty = false; + } + } + for (int i = 0; i < lastFluidInputs.length; i++) { + if (fluidInputs.getTankAt(i) == steamFluidTank) + continue; + FluidStack currentStack = fluidInputs.getTankAt(i).getFluid(); + FluidStack lastStack = lastFluidInputs[i]; + if ((currentStack == null && lastStack != null) || + (currentStack != null && !currentStack.isFluidEqual(lastStack))) { + this.lastFluidInputs[i] = currentStack == null ? null : currentStack.copy(); + shouldRecheckRecipe = true; + } else if (currentStack != null && lastStack != null && + currentStack.amount != lastStack.amount) { + lastStack.amount = currentStack.amount; + shouldRecheckRecipe = true; + } else if (currentStack != null) { + this.isInputsEmpty = false; + } + } + return shouldRecheckRecipe; + } + @Override protected boolean setupAndConsumeRecipeInputs(Recipe recipe) { return !this.needsVenting && super.setupAndConsumeRecipeInputs(recipe); diff --git a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java index 674a5d0761..d2af413756 100644 --- a/src/main/java/gregtech/api/gui/widgets/SituationWidget.java +++ b/src/main/java/gregtech/api/gui/widgets/SituationWidget.java @@ -17,6 +17,8 @@ public class SituationWidget extends Widget { private final Supplier currentSituationSupplier; + private boolean isHighPressure = false; + private boolean steam = false; private Situation currentSituation; protected String tooltipHoverString; protected int currentId; @@ -31,22 +33,93 @@ public SituationWidget(int xPosition, int yPosition, int w setImage(); } + public SituationWidget(int xPosition, int yPosition, int width, int height, Supplier getSituation, boolean isHighPressure) { + super(new Position(xPosition, yPosition), new Size(width, height)); + this.steam = true; + this.isHighPressure = isHighPressure; + this.currentSituationSupplier = getSituation; + this.currentSituation = getSituation.get(); + setTooltipHoverString(); + setImage(); + } + public void setTooltipHoverString() { if (this.currentSituation != null) { - this.tooltipHoverString = I18n.format(this.currentSituation.situationLocaleName); + String situationLocaleName = this.currentSituation.situationLocaleName; + if (steam && situationLocaleName.contains("_power_")) { + situationLocaleName = situationLocaleName.replace("_power_","_steam_"); + } + this.tooltipHoverString = I18n.format(situationLocaleName); } else { this.tooltipHoverString = null; } } public SituationWidget setImage() { + if (this.currentSituation == null) { + this.area = null; + return this; + } + if (isHighPressure) + setImageSteamHighPressure(); + else if (steam) + setImageSteam(); + else { + setImageElectric(); + } + return this; + } + + public SituationWidget setImageSteamHighPressure() { + SituationTypes iconTextures = this.currentSituation.situationTypes; + switch (iconTextures) { + case INFO: + this.area = GuiTextures.STATUS_IDLING; + break; + case WORKING: + this.area = GuiTextures.STATUS_WORKING; + break; + case WARNING: + this.area = GuiTextures.STATUS_WARNING; + break; + case ERROR: + this.area = GuiTextures.STATUS_ERROR; + break; + default: + this.area = null; + } + return this; + } + + public SituationWidget setImageSteam() { + SituationTypes iconTextures = this.currentSituation.situationTypes; + switch (iconTextures) { + case INFO: + this.area = GuiTextures.STATUS_IDLING; + break; + case WORKING: + this.area = GuiTextures.STATUS_WORKING; + break; + case WARNING: + this.area = GuiTextures.STATUS_WARNING; + break; + case ERROR: + this.area = GuiTextures.STATUS_ERROR; + break; + default: + this.area = null; + } + return this; + } + + public SituationWidget setImageElectric() { if (this.currentSituation == null) { this.area = null; return this; } SituationTypes iconTextures = this.currentSituation.situationTypes; switch (iconTextures) { - case IDLE: + case INFO: this.area = GuiTextures.STATUS_IDLING; break; case WORKING: diff --git a/src/main/java/gregtech/api/metatileentity/SteamMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/SteamMetaTileEntity.java index 4edf3a6696..2832af0006 100644 --- a/src/main/java/gregtech/api/metatileentity/SteamMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/SteamMetaTileEntity.java @@ -10,8 +10,8 @@ import gregtech.api.capability.impl.RecipeLogicSteam; import gregtech.api.gui.ModularUI; import gregtech.api.gui.resources.TextureArea; -import gregtech.api.gui.widgets.ImageWidget; import gregtech.api.gui.widgets.LabelWidget; +import gregtech.api.gui.widgets.SituationWidget; import gregtech.api.recipes.ModHandler; import gregtech.api.recipes.RecipeMap; import gregtech.api.render.OrientedOverlayRenderer; @@ -116,8 +116,7 @@ protected TextureArea getFullGuiTexture(String pathTemplate) { public ModularUI.Builder createUITemplate(EntityPlayer player) { return ModularUI.builder(BRONZE_BACKGROUND_TEXTURE, 176, 166) .widget(new LabelWidget(6, 6, getMetaFullName())) - .widget(new ImageWidget(79, 42, 18, 18, getFullGuiTexture("not_enough_steam_%s")) - .setPredicate(() -> workableHandler.isHasNotEnoughEnergy())) + .widget(new SituationWidget(79,42,18,18,this::getSituation, isHighPressure)) .bindPlayerInventory(player.inventory, BRONZE_SLOT_BACKGROUND_TEXTURE); } } diff --git a/src/main/java/gregtech/api/situation/SituationTypes.java b/src/main/java/gregtech/api/situation/SituationTypes.java index 8ac3160cf3..226acc1709 100644 --- a/src/main/java/gregtech/api/situation/SituationTypes.java +++ b/src/main/java/gregtech/api/situation/SituationTypes.java @@ -4,7 +4,7 @@ public enum SituationTypes implements IStringSerializable { WORKING("gregtech.situation.level.warning"), - IDLE("gregtech.situation.level.idle"), + INFO("gregtech.situation.level.idle"), ERROR("gregtech.situation.level.error"), WARNING("gregtech.situation.level.warning"); diff --git a/src/main/java/gregtech/api/situation/Situations.java b/src/main/java/gregtech/api/situation/Situations.java index 08ea4273ea..8eb9c0300b 100644 --- a/src/main/java/gregtech/api/situation/Situations.java +++ b/src/main/java/gregtech/api/situation/Situations.java @@ -5,8 +5,8 @@ public class Situations { public static Situation WORKING = new Situation(1, "working", SituationTypes.WORKING); - public static Situation IDLE = new Situation(2, "idle", SituationTypes.IDLE); - public static Situation DISABLED_BY_CONTROLLER = new Situation(3, "disabled_by_controller", SituationTypes.IDLE); + public static Situation IDLE = new Situation(2, "idle", SituationTypes.INFO); + public static Situation DISABLED_BY_CONTROLLER = new Situation(3, "disabled_by_controller", SituationTypes.INFO); public static Situation EMPTY_SOURCE = new Situation(100, "empty_source", SituationTypes.WARNING); public static Situation INSUFFICIENT_POWER = new Situation(101, "insufficient_power", SituationTypes.WARNING); @@ -17,14 +17,16 @@ public class Situations { public static Situation OUTPUT_INVENTORY_FULL = new Situation(106, "output_inventory_full", SituationTypes.WARNING); public static Situation TARGET_INVENTORY_FULL = new Situation(107, "target_inventory_full", SituationTypes.WARNING); - public static Situation NO_IMPORT_INVENTORY = new Situation(201, "no_import_inventory", SituationTypes.ERROR); - public static Situation NO_EXPORT_INVENTORY = new Situation(202, "no_export_inventory", SituationTypes.ERROR); - public static Situation NO_IMPORT_TANK = new Situation(203, "no_import_tank", SituationTypes.ERROR); - public static Situation NO_EXPORT_TANK = new Situation(204, "no_export_tank", SituationTypes.ERROR); - public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(205, "null_capability", SituationTypes.ERROR); - public static Situation WATER_CHECK_FAILED = new Situation(206, "water_check_failed", SituationTypes.ERROR); - public static Situation BLOCKED_INTAKES = new Situation(207, "blocked_intakes", SituationTypes.ERROR); - public static Situation DIMENSION_LACKS_ATMOSPHERE = new Situation(208, "dimension_lacks_atmosphere", SituationTypes.ERROR); + public static Situation NO_IMPORT_INVENTORY = new Situation(1001, "no_import_inventory", SituationTypes.ERROR); + public static Situation NO_EXPORT_INVENTORY = new Situation(1002, "no_export_inventory", SituationTypes.ERROR); + public static Situation NO_IMPORT_TANK = new Situation(1003, "no_import_tank", SituationTypes.ERROR); + public static Situation NO_EXPORT_TANK = new Situation(1004, "no_export_tank", SituationTypes.ERROR); + public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(1005, "null_capability", SituationTypes.ERROR); + public static Situation WATER_CHECK_FAILED = new Situation(1006, "water_check_failed", SituationTypes.ERROR); + public static Situation BLOCKED_INTAKES = new Situation(1007, "blocked_intakes", SituationTypes.ERROR); + public static Situation BLOCKED_VENT = new Situation(1008, "blocked_vent", SituationTypes.ERROR); + public static Situation DIMENSION_LACKS_ATMOSPHERE = new Situation(1009, "dimension_lacks_atmosphere", SituationTypes.ERROR); + public static void init() { GTLog.logger.info("Registering situations..."); diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index fa4220ac49..9133c109c3 100755 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -768,6 +768,8 @@ gregtech.situation.null_capability=Error accessing inventory from this side gregtech.situation.empty_source=This inventory is empty gregtech.situation.insufficient_power=Not enough power to run this recipe gregtech.situation.insufficient_power_to_start=Not enough power to start this recipe +gregtech.situation.insufficient_steam=Not enough steam to run this recipe +gregtech.situation.insufficient_steam_to_start=Not enough steam to start this recipe gregtech.situation.no_matching_recipe=No recipe found gregtech.situation.target_inventory_full=The target inventory is full gregtech.situation.output_slots_full=Output slots are full @@ -778,6 +780,7 @@ gregtech.situation.no_export_inventory=Cant access inventory to export to gregtech.situation.no_import_tank=Cant access tank to import from gregtech.situation.no_export_tank=Cant access tank to export to gregtech.situation.blocked_intakes=Blocked intakes +gregtech.situation.blocked_vent=Blocked vent gregtech.situation.dimension_lacks_atmosphere=Dimension lacks atmosphere # %s is a localized material name