Skip to content

Commit 7c1beb8

Browse files
fix widget not syncing on cover GUI
handle null cases
1 parent 44438bd commit 7c1beb8

File tree

6 files changed

+45
-38
lines changed

6 files changed

+45
-38
lines changed

src/main/java/gregtech/api/cover/CoverBehavior.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public abstract class CoverBehavior implements IUIHolder {
4444
public final ICoverable coverHolder;
4545
public final EnumFacing attachedSide;
4646
private int redstoneSignalOutput;
47-
private Situation situation = IDLE;
47+
private Situation situation;
4848

4949
public CoverBehavior(ICoverable coverHolder, EnumFacing attachedSide) {
5050
this.coverHolder = coverHolder;

src/main/java/gregtech/api/gui/widgets/SituationWidget.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ public class SituationWidget extends Widget {
2222
protected int currentId;
2323

2424
protected TextureArea area;
25-
private boolean isVisible = true;
2625

2726
public <T extends Situation> SituationWidget(int xPosition, int yPosition, int width, int height, Supplier<Situation> getSituation) {
2827
super(new Position(xPosition, yPosition), new Size(width, height));
@@ -33,10 +32,18 @@ public <T extends Situation> SituationWidget(int xPosition, int yPosition, int w
3332
}
3433

3534
public void setTooltipHoverString() {
36-
this.tooltipHoverString = I18n.format(this.currentSituation.situationLocaleName);
35+
if (this.currentSituation != null) {
36+
this.tooltipHoverString = I18n.format(this.currentSituation.situationLocaleName);
37+
} else {
38+
this.tooltipHoverString = null;
39+
}
3740
}
3841

3942
public SituationWidget setImage() {
43+
if (this.currentSituation == null) {
44+
this.area = null;
45+
return this;
46+
}
4047
SituationTypes iconTextures = this.currentSituation.situationTypes;
4148
switch (iconTextures) {
4249
case IDLE:
@@ -71,7 +78,7 @@ public void readUpdateInfo(int id, PacketBuffer buffer) {
7178
super.readUpdateInfo(id, buffer);
7279
if (id == 1) {
7380
this.currentId = buffer.readVarInt();
74-
this.currentSituation = Situation.getSituationFromId(this.currentId);
81+
this.currentSituation = Situation.getSituationFromId(currentId);
7582
setTooltipHoverString();
7683
setImage();
7784
}
@@ -86,7 +93,7 @@ public void drawInForeground(int mouseX, int mouseY) {
8693
@Override
8794
@SideOnly(Side.CLIENT)
8895
public void drawInBackground(int mouseX, int mouseY, IRenderContext context) {
89-
if (!this.isVisible || area == null) return;
96+
if (area == null) return;
9097
Position position = getPosition();
9198
Size size = getSize();
9299
area.draw(position.x, position.y, size.width, size.height);

src/main/java/gregtech/api/metatileentity/MetaTileEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public abstract class MetaTileEntity implements ICoverable {
8989

9090
private CoverBehavior[] coverBehaviors = new CoverBehavior[6];
9191

92-
private Situation situation = IDLE;
92+
private Situation situation;
9393
private boolean failedToMoveFluids;
9494
private boolean failedToMoveItems;
9595

src/main/java/gregtech/api/situation/Situations.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@
33
import gregtech.api.util.GTLog;
44

55
public class Situations {
6-
public static Situation WORKING = new Situation(0, "working", SituationTypes.WORKING);
7-
8-
public static Situation IDLE = new Situation(1, "idle", SituationTypes.IDLE);
9-
public static Situation DISABLED_BY_CONTROLLER = new Situation(2, "disabled_by_controller", SituationTypes.IDLE);
10-
11-
public static Situation EMPTY_SOURCE = new Situation(3, "empty_source", SituationTypes.WARNING);
12-
public static Situation INSUFFICIENT_POWER = new Situation(4, "insufficient_power", SituationTypes.WARNING);
13-
public static Situation NO_MATCHING_RECIPE = new Situation(5, "no_matching_recipe", SituationTypes.WARNING);
14-
public static Situation OUTPUT_INVENTORY_FULL = new Situation(6, "output_inventory_full", SituationTypes.WARNING);
15-
public static Situation TARGET_INVENTORY_FULL = new Situation(7, "target_inventory_full", SituationTypes.WARNING);
16-
17-
public static Situation NO_IMPORT_INVENTORY = new Situation(8, "no_import_inventory", SituationTypes.ERROR);
18-
public static Situation NO_EXPORT_INVENTORY = new Situation(9, "no_export_inventory", SituationTypes.ERROR);
19-
public static Situation NO_IMPORT_TANK = new Situation(10, "no_import_tank", SituationTypes.ERROR);
20-
public static Situation NO_EXPORT_TANK = new Situation(11, "no_export_tank", SituationTypes.ERROR);
21-
public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(12, "null_capability", SituationTypes.ERROR);
6+
public static Situation WORKING = new Situation(1, "working", SituationTypes.WORKING);
7+
8+
public static Situation IDLE = new Situation(2, "idle", SituationTypes.IDLE);
9+
public static Situation DISABLED_BY_CONTROLLER = new Situation(3, "disabled_by_controller", SituationTypes.IDLE);
10+
11+
public static Situation EMPTY_SOURCE = new Situation(4, "empty_source", SituationTypes.WARNING);
12+
public static Situation INSUFFICIENT_POWER = new Situation(5, "insufficient_power", SituationTypes.WARNING);
13+
public static Situation NO_MATCHING_RECIPE = new Situation(6, "no_matching_recipe", SituationTypes.WARNING);
14+
public static Situation OUTPUT_INVENTORY_FULL = new Situation(7, "output_inventory_full", SituationTypes.WARNING);
15+
public static Situation TARGET_INVENTORY_FULL = new Situation(8, "target_inventory_full", SituationTypes.WARNING);
16+
17+
public static Situation NO_IMPORT_INVENTORY = new Situation(9, "no_import_inventory", SituationTypes.ERROR);
18+
public static Situation NO_EXPORT_INVENTORY = new Situation(10, "no_export_inventory", SituationTypes.ERROR);
19+
public static Situation NO_IMPORT_TANK = new Situation(11, "no_import_tank", SituationTypes.ERROR);
20+
public static Situation NO_EXPORT_TANK = new Situation(12, "no_export_tank", SituationTypes.ERROR);
21+
public static Situation EXPECTED_CAPABILITY_UNAVAILABLE = new Situation(13, "null_capability", SituationTypes.ERROR);
2222

2323
public static void init() {
2424
GTLog.logger.info("Registering situations...");

src/main/java/gregtech/common/covers/CoverConveyor.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ public CoverConveyor(ICoverable coverable, EnumFacing attachedSide, int tier, in
6060
this.transferRate = maxItemTransferRate;
6161
this.itemsLeftToTransferLastSecond = transferRate;
6262
this.conveyorMode = ConveyorMode.EXPORT;
63-
this.situation = IDLE;
6463
this.itemFilterContainer = new ItemFilterContainer(this);
6564
}
6665

@@ -101,24 +100,25 @@ public void update() {
101100
if (itemHandler == null || myItemHandler == null) {
102101
if (conveyorMode == ConveyorMode.IMPORT) setSituation(NO_IMPORT_INVENTORY);
103102
if (conveyorMode == ConveyorMode.EXPORT) setSituation(NO_EXPORT_INVENTORY);
104-
return;
103+
} else {
104+
int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond);
105+
this.itemsLeftToTransferLastSecond -= totalTransferred;
106+
if (this.itemsLeftToTransferLastSecond < transferRate) {
107+
setSituation(WORKING);
108+
} else {
109+
setSituation(IDLE);
110+
}
105111
}
106-
int totalTransferred = doTransferItems(itemHandler, myItemHandler, itemsLeftToTransferLastSecond);
107-
this.itemsLeftToTransferLastSecond -= totalTransferred;
108112
}
109113
if (timer % 20 == 0) {
110-
if (itemsLeftToTransferLastSecond < transferRate) {
111-
setSituation(WORKING);
112-
} else {
113-
setSituation(IDLE);
114-
}
115114
this.itemsLeftToTransferLastSecond = transferRate;
116115
}
117116
if (!isWorkingAllowed) {
118117
setSituation(DISABLED_BY_CONTROLLER);
119118
}
120119
}
121120

121+
122122
protected int doTransferItems(IItemHandler itemHandler, IItemHandler myItemHandler, int maxTransferAmount) {
123123
return doTransferItemsAny(itemHandler, myItemHandler, maxTransferAmount);
124124
}

src/main/java/gregtech/common/covers/CoverPump.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ public CoverPump(ICoverable coverHolder, EnumFacing attachedSide, int tier, int
6060
this.fluidLeftToTransferLastSecond = transferRate;
6161
this.pumpMode = PumpMode.EXPORT;
6262
this.bucketMode = BucketMode.MILLI_BUCKET;
63-
this.situation = IDLE;
6463
this.fluidFilter = new FluidFilterContainer(this);
6564
}
6665

@@ -110,11 +109,6 @@ public void update() {
110109
this.fluidLeftToTransferLastSecond -= doTransferFluids(fluidLeftToTransferLastSecond);
111110
}
112111
if (timer % 20 == 0) {
113-
if (fluidLeftToTransferLastSecond < transferRate) {
114-
setSituation(WORKING);
115-
} else {
116-
setSituation(IDLE);
117-
}
118112
this.fluidLeftToTransferLastSecond = transferRate;
119113
}
120114
if (!isWorkingAllowed) {
@@ -134,7 +128,13 @@ protected int doTransferFluids(int transferLimit) {
134128
if (pumpMode == PumpMode.EXPORT) setSituation(NO_EXPORT_TANK);
135129
return 0;
136130
}
137-
return doTransferFluidsInternal(myFluidHandler, fluidHandler, transferLimit);
131+
int transferredFluid = doTransferFluidsInternal(myFluidHandler, fluidHandler, transferLimit);
132+
if (transferredFluid != 0) {
133+
setSituation(WORKING);
134+
} else {
135+
setSituation(IDLE);
136+
}
137+
return transferredFluid;
138138
}
139139

140140
protected int doTransferFluidsInternal(IFluidHandler myFluidHandler, IFluidHandler fluidHandler, int transferLimit) {

0 commit comments

Comments
 (0)