Skip to content

Commit 4323cbd

Browse files
Simplified handler logic by only allowing one metatile to be notified
1 parent 21598d8 commit 4323cbd

8 files changed

Lines changed: 29 additions & 49 deletions

File tree

src/main/java/gregtech/api/capability/INotifiableHandler.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
import gregtech.api.metatileentity.MetaTileEntity;
44

5-
import java.util.Iterator;
6-
import java.util.LinkedList;
7-
85
/**
96
* For Item and Fluid handlers capable of notifying entities when
107
* their contents change
@@ -18,28 +15,17 @@ public interface INotifiableHandler {
1815
* @param isExport boolean specifying if a handler is an output handler
1916
*/
2017

21-
default void notifyMetaTileEntitiesOfChange(boolean isExport) {
22-
Iterator<MetaTileEntity> iterator = getNotifiableMetaTileEntities().iterator();
23-
while (iterator.hasNext()) {
24-
MetaTileEntity metaTileEntity = iterator.next();
25-
if (metaTileEntity != null && metaTileEntity.isValid()) {
26-
if (isExport) metaTileEntity.setOutputsDirty(true);
27-
else metaTileEntity.setInputsDirty(true);
28-
} else {
29-
iterator.remove();
30-
}
18+
default void notifyMetaTileEntityOfChange(MetaTileEntity metaTileEntity, boolean isExport) {
19+
if (metaTileEntity != null && metaTileEntity.isValid()) {
20+
if (isExport) metaTileEntity.setOutputsDirty(true);
21+
else metaTileEntity.setInputsDirty(true);
3122
}
3223
}
3324

34-
/**
35-
* @return a List containing the notifiable MetaTileEntities
36-
*/
37-
LinkedList<MetaTileEntity> getNotifiableMetaTileEntities();
38-
3925
/**
4026
* @param metaTileEntity MetaTileEntity to be notified
4127
*/
42-
default void addNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
43-
getNotifiableMetaTileEntities().add(metaTileEntity);
28+
default void setNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
29+
4430
}
4531
}

src/main/java/gregtech/api/capability/impl/NotifiableFilteredFluidHandler.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,25 @@
33
import gregtech.api.capability.INotifiableHandler;
44
import gregtech.api.metatileentity.MetaTileEntity;
55

6-
import java.util.LinkedList;
7-
86
public class NotifiableFilteredFluidHandler extends FilteredFluidHandler implements INotifiableHandler {
97

10-
LinkedList<MetaTileEntity> entitiesToNotify = new LinkedList<>();
8+
MetaTileEntity notifiableEntity;
119
private final boolean isExport;
1210

1311
public NotifiableFilteredFluidHandler(int capacity, MetaTileEntity entityToNotify, boolean isExport) {
1412
super(capacity);
15-
this.entitiesToNotify.add(entityToNotify);
13+
this.notifiableEntity = entityToNotify;
1614
this.isExport = isExport;
1715
}
1816

1917
@Override
2018
protected void onContentsChanged() {
2119
super.onContentsChanged();
22-
notifyMetaTileEntitiesOfChange(isExport);
20+
notifyMetaTileEntityOfChange(notifiableEntity, isExport);
2321
}
2422

2523
@Override
26-
public LinkedList<MetaTileEntity> getNotifiableMetaTileEntities() {
27-
return this.entitiesToNotify;
24+
public void setNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
25+
this.notifiableEntity = metaTileEntity;
2826
}
2927
}

src/main/java/gregtech/api/capability/impl/NotifiableFluidTank.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,25 @@
44
import gregtech.api.metatileentity.MetaTileEntity;
55
import net.minecraftforge.fluids.FluidTank;
66

7-
import java.util.LinkedList;
8-
97
public class NotifiableFluidTank extends FluidTank implements INotifiableHandler {
108

11-
LinkedList<MetaTileEntity> entitiesToNotify = new LinkedList<>();
9+
MetaTileEntity notifiableEntity;
1210
private final boolean isExport;
1311

1412
public NotifiableFluidTank(int capacity, MetaTileEntity entityToNotify, boolean isExport) {
1513
super(capacity);
16-
this.entitiesToNotify.add(entityToNotify);
14+
this.notifiableEntity = entityToNotify;
1715
this.isExport = isExport;
1816
}
1917

2018
@Override
2119
protected void onContentsChanged() {
2220
super.onContentsChanged();
23-
notifyMetaTileEntitiesOfChange(isExport);
21+
notifyMetaTileEntityOfChange(notifiableEntity, isExport);
2422
}
2523

2624
@Override
27-
public LinkedList<MetaTileEntity> getNotifiableMetaTileEntities() {
28-
return this.entitiesToNotify;
25+
public void setNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
26+
this.notifiableEntity = metaTileEntity;
2927
}
3028
}

src/main/java/gregtech/api/capability/impl/NotifiableItemStackHandler.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,25 @@
55
import net.minecraftforge.items.IItemHandlerModifiable;
66
import net.minecraftforge.items.ItemStackHandler;
77

8-
import java.util.LinkedList;
9-
108
public class NotifiableItemStackHandler extends ItemStackHandler implements IItemHandlerModifiable, INotifiableHandler {
119

12-
LinkedList<MetaTileEntity> entitiesToNotify = new LinkedList<>();
10+
MetaTileEntity notifiableEntity;
1311
private final boolean isExport;
1412

1513
public NotifiableItemStackHandler(int slots, MetaTileEntity entityToNotify, boolean isExport) {
1614
super(slots);
17-
this.entitiesToNotify.add(entityToNotify);
15+
this.notifiableEntity = entityToNotify;
1816
this.isExport = isExport;
1917
}
2018

2119
@Override
2220
public void onContentsChanged(int slot) {
2321
super.onContentsChanged(slot);
24-
notifyMetaTileEntitiesOfChange(isExport);
22+
notifyMetaTileEntityOfChange(notifiableEntity, isExport);
2523
}
2624

2725
@Override
28-
public LinkedList<MetaTileEntity> getNotifiableMetaTileEntities() {
29-
return this.entitiesToNotify;
26+
public void setNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
27+
this.notifiableEntity = metaTileEntity;
3028
}
3129
}

src/main/java/gregtech/api/metatileentity/multiblock/IMultiblockPart.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public interface IMultiblockPart {
1010

1111
void removeFromMultiBlock(MultiblockControllerBase controllerBase);
1212

13-
default void addEntityToDirtyableHandlers(MetaTileEntity metaTileEntity) {
13+
default void setupNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
1414

1515
}
1616
}

src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ protected void checkStructurePattern() {
172172
}
173173
if (checkStructureComponents(parts, abilities)) {
174174
parts.forEach(part -> part.addToMultiBlock(this));
175-
parts.forEach(part -> part.addEntityToDirtyableHandlers(this));
175+
parts.forEach(part -> part.setupNotifiableMetaTileEntity(this));
176176
this.multiblockParts.addAll(parts);
177177
this.multiblockAbilities.putAll(abilities);
178178
this.structureFormed = true;

src/main/java/gregtech/common/metatileentities/electric/multiblockpart/MetaTileEntityFluidHatch.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,15 @@ protected void initializeInventory() {
109109
}
110110

111111
@Override
112-
public void addEntityToDirtyableHandlers(MetaTileEntity metaTileEntity) {
112+
public void setupNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
113113
NotifiableFluidTank handler = null;
114114
if (isExportHatch && getExportFluids().getFluidTanks().get(0) instanceof NotifiableFluidTank)
115115
handler = (NotifiableFluidTank) getExportFluids().getFluidTanks().get(0);
116116
else if (!isExportHatch && getImportFluids().getFluidTanks().get(0) instanceof NotifiableFluidTank)
117117
handler = (NotifiableFluidTank) getImportFluids().getFluidTanks().get(0);
118118
if (handler != null) {
119-
handler.addNotifiableMetaTileEntity(metaTileEntity);
120-
handler.notifyMetaTileEntitiesOfChange(isExportHatch);
119+
handler.setNotifiableMetaTileEntity(metaTileEntity);
120+
handler.notifyMetaTileEntityOfChange(this, isExportHatch);
121121
}
122122
}
123123

src/main/java/gregtech/common/metatileentities/electric/multiblockpart/MetaTileEntityItemBus.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,15 @@ public void registerAbilities(List<IItemHandlerModifiable> abilityList) {
8888
}
8989

9090
@Override
91-
public void addEntityToDirtyableHandlers(MetaTileEntity metaTileEntity) {
91+
public void setupNotifiableMetaTileEntity(MetaTileEntity metaTileEntity) {
9292
NotifiableItemStackHandler handler = null;
9393
if (isExportHatch && getExportItems() instanceof NotifiableItemStackHandler)
9494
handler = (NotifiableItemStackHandler) getExportItems();
9595
else if (!isExportHatch && getImportItems() instanceof NotifiableItemStackHandler)
9696
handler = (NotifiableItemStackHandler) getImportItems();
9797
if (handler != null) {
98-
handler.addNotifiableMetaTileEntity(metaTileEntity);
99-
handler.notifyMetaTileEntitiesOfChange(isExportHatch);
98+
handler.setNotifiableMetaTileEntity(metaTileEntity);
99+
handler.notifyMetaTileEntityOfChange(this, isExportHatch);
100100
}
101101
}
102102

0 commit comments

Comments
 (0)