29
29
import net .minecraft .world .level .Level ;
30
30
import net .minecraft .world .level .chunk .ChunkAccess ;
31
31
import net .neoforged .bus .api .SubscribeEvent ;
32
- import net .neoforged .neoforge .common .NeoForge ;
32
+ import net .neoforged .fml .common .EventBusSubscriber ;
33
33
import net .neoforged .neoforge .event .level .ChunkTicketLevelUpdatedEvent ;
34
34
import net .neoforged .neoforge .event .tick .ServerTickEvent ;
35
35
import org .jetbrains .annotations .Nullable ;
36
36
37
+ @ EventBusSubscriber (modid = Mekanism .MODID )
37
38
public class TransmitterNetworkRegistry {
38
39
39
- private static final TransmitterNetworkRegistry INSTANCE = new TransmitterNetworkRegistry ();
40
- private static boolean loaderRegistered = false ;
41
- private final Multimap <Chunk3D , Transmitter <?, ?, ?>> transmitters = HashMultimap .create ();
42
- private Object2BooleanMap <Chunk3D > changedTicketChunks = new Object2BooleanOpenHashMap <>();
43
- private final Set <DynamicNetwork <?, ?, ?>> networks = new ObjectOpenHashSet <>();
44
- private final Map <UUID , DynamicNetwork <?, ?, ?>> clientNetworks = new Object2ObjectOpenHashMap <>();
45
- private Map <GlobalPos , Transmitter <?, ?, ?>> newOrphanTransmitters = new Object2ObjectOpenHashMap <>();
46
- private Set <Transmitter <?, ?, ?>> invalidTransmitters = new ObjectOpenHashSet <>();
47
- private Set <DynamicNetwork <?, ?, ?>> networksToChange = new ObjectOpenHashSet <>();
40
+ private static final Multimap <Chunk3D , Transmitter <?, ?, ?>> transmitters = HashMultimap .create ();
41
+ private static Object2BooleanMap <Chunk3D > changedTicketChunks = new Object2BooleanOpenHashMap <>();
42
+ private static final Set <DynamicNetwork <?, ?, ?>> networks = new ObjectOpenHashSet <>();
43
+ private static final Map <UUID , DynamicNetwork <?, ?, ?>> clientNetworks = new Object2ObjectOpenHashMap <>();
44
+ private static Map <GlobalPos , Transmitter <?, ?, ?>> newOrphanTransmitters = new Object2ObjectOpenHashMap <>();
45
+ private static Set <Transmitter <?, ?, ?>> invalidTransmitters = new ObjectOpenHashSet <>();
46
+ private static Set <DynamicNetwork <?, ?, ?>> networksToChange = new ObjectOpenHashSet <>();
48
47
49
- public void addClientNetwork (UUID networkID , DynamicNetwork <?, ?, ?> network ) {
48
+ public static void addClientNetwork (UUID networkID , DynamicNetwork <?, ?, ?> network ) {
50
49
if (!clientNetworks .containsKey (networkID )) {
51
50
clientNetworks .put (networkID , network );
52
51
}
53
52
}
54
53
55
54
@ Nullable
56
- public DynamicNetwork <?, ?, ?> getClientNetwork (UUID networkID ) {
55
+ public static DynamicNetwork <?, ?, ?> getClientNetwork (UUID networkID ) {
57
56
return clientNetworks .get (networkID );
58
57
}
59
58
60
- public void removeClientNetwork (DynamicNetwork <?, ?, ?> network ) {
59
+ public static void removeClientNetwork (DynamicNetwork <?, ?, ?> network ) {
61
60
clientNetworks .remove (network .getUUID ());
62
61
}
63
62
64
- public void clearClientNetworks () {
63
+ public static void clearClientNetworks () {
65
64
clientNetworks .clear ();
66
65
}
67
66
68
- public static void initiate () {
69
- if (!loaderRegistered ) {
70
- loaderRegistered = true ;
71
- NeoForge .EVENT_BUS .register (INSTANCE );
72
- }
73
- }
74
-
75
67
public static void reset () {
76
- getInstance (). networks .clear ();
77
- getInstance (). networksToChange .clear ();
78
- getInstance (). invalidTransmitters .clear ();
79
- getInstance (). newOrphanTransmitters .clear ();
80
- getInstance (). transmitters .clear ();
81
- getInstance (). changedTicketChunks .clear ();
68
+ networks .clear ();
69
+ networksToChange .clear ();
70
+ invalidTransmitters .clear ();
71
+ newOrphanTransmitters .clear ();
72
+ transmitters .clear ();
73
+ changedTicketChunks .clear ();
82
74
}
83
75
84
76
public static void trackTransmitter (Transmitter <?, ?, ?> transmitter ) {
85
- getInstance (). transmitters .put (transmitter .getTileChunk (), transmitter );
77
+ transmitters .put (transmitter .getTileChunk (), transmitter );
86
78
}
87
79
88
80
public static void untrackTransmitter (Transmitter <?, ?, ?> transmitter ) {
89
- getInstance (). transmitters .remove (transmitter .getTileChunk (), transmitter );
81
+ transmitters .remove (transmitter .getTileChunk (), transmitter );
90
82
}
91
83
92
84
public static void invalidateTransmitter (Transmitter <?, ?, ?> transmitter ) {
93
- TransmitterNetworkRegistry registry = getInstance ();
94
- registry .invalidTransmitters .add (transmitter );
85
+ invalidTransmitters .add (transmitter );
95
86
GlobalPos coord = transmitter .getTileGlobalPos ();
96
- Transmitter <?, ?, ?> removed = registry . newOrphanTransmitters .remove (coord );
87
+ Transmitter <?, ?, ?> removed = newOrphanTransmitters .remove (coord );
97
88
if (removed != null && removed != transmitter ) {
98
89
Mekanism .logger .error ("Different orphan transmitter was registered at location during removal! {}" , coord );
99
- registry . newOrphanTransmitters .put (coord , transmitter );//put it back?
90
+ newOrphanTransmitters .put (coord , transmitter );//put it back?
100
91
}
101
92
}
102
93
103
94
public static void registerOrphanTransmitter (Transmitter <?, ?, ?> transmitter ) {
104
- if (!getInstance (). invalidTransmitters .remove (transmitter )) {
95
+ if (!invalidTransmitters .remove (transmitter )) {
105
96
//If we weren't an invalid transmitter, then we need to add it as a new orphan, otherwise removing it is good enough
106
97
// as if it was an orphan before it still will be one, and if it wasn't then it still will be part of the network it
107
98
// was in.
108
99
GlobalPos pos = transmitter .getTileGlobalPos ();
109
- Transmitter <?, ?, ?> previous = getInstance (). newOrphanTransmitters .put (pos , transmitter );
100
+ Transmitter <?, ?, ?> previous = newOrphanTransmitters .put (pos , transmitter );
110
101
if (previous != null && previous != transmitter && previous .isValid ()) {
111
102
Mekanism .logger .error ("Different orphan transmitter was already registered at location! {}" , pos );
112
103
}
113
104
}
114
105
}
115
106
116
107
public static void registerChangedNetwork (DynamicNetwork <?, ?, ?> network ) {
117
- getInstance (). networksToChange .add (network );
108
+ networksToChange .add (network );
118
109
}
119
110
120
- public static TransmitterNetworkRegistry getInstance () {
121
- return INSTANCE ;
122
- }
123
-
124
- public void registerNetwork (DynamicNetwork <?, ?, ?> network ) {
111
+ public static void registerNetwork (DynamicNetwork <?, ?, ?> network ) {
125
112
networks .add (network );
126
113
}
127
114
128
- public void removeNetwork (DynamicNetwork <?, ?, ?> network ) {
115
+ public static void removeNetwork (DynamicNetwork <?, ?, ?> network ) {
129
116
networks .remove (network );
130
117
networksToChange .remove (network );
131
118
}
132
119
133
120
@ SubscribeEvent
134
- public void onTick (ServerTickEvent .Post event ) {
121
+ public static void onTick (ServerTickEvent .Post event ) {
135
122
handleChangedChunks ();
136
123
removeInvalidTransmitters ();
137
124
assignOrphans ();
@@ -144,7 +131,7 @@ public void onTick(ServerTickEvent.Post event) {
144
131
}
145
132
146
133
@ SubscribeEvent
147
- public void onTicketLevelChange (ChunkTicketLevelUpdatedEvent event ) {
134
+ public static void onTicketLevelChange (ChunkTicketLevelUpdatedEvent event ) {
148
135
int newTicketLevel = event .getNewTicketLevel ();
149
136
int oldTicketLevel = event .getOldTicketLevel ();
150
137
boolean loaded ;
@@ -174,7 +161,7 @@ public void onTicketLevelChange(ChunkTicketLevelUpdatedEvent event) {
174
161
}
175
162
}
176
163
177
- private void handleChangedChunks () {
164
+ private static void handleChangedChunks () {
178
165
if (!changedTicketChunks .isEmpty ()) {
179
166
Object2BooleanMap <Chunk3D > changed = changedTicketChunks ;
180
167
changedTicketChunks = new Object2BooleanOpenHashMap <>();
@@ -195,7 +182,7 @@ private void handleChangedChunks() {
195
182
}
196
183
}
197
184
198
- private void removeInvalidTransmitters () {
185
+ private static void removeInvalidTransmitters () {
199
186
if (!invalidTransmitters .isEmpty ()) {
200
187
//Ensure we copy the invalid transmitters, so that when we iterate and remove invalid ones
201
188
// and add still valid ones as orphans, we actually add them as orphans rather than try
@@ -211,7 +198,7 @@ private void removeInvalidTransmitters() {
211
198
}
212
199
}
213
200
214
- private <NETWORK extends DynamicNetwork <?, NETWORK , TRANSMITTER >, TRANSMITTER extends Transmitter <?, NETWORK , TRANSMITTER >>
201
+ private static <NETWORK extends DynamicNetwork <?, NETWORK , TRANSMITTER >, TRANSMITTER extends Transmitter <?, NETWORK , TRANSMITTER >>
215
202
void removeInvalidTransmitter (Transmitter <?, NETWORK , TRANSMITTER > invalid ) {
216
203
if (!invalid .isOrphan () || !invalid .isValid ()) {
217
204
NETWORK n = invalid .getTransmitterNetwork ();
@@ -227,7 +214,7 @@ void removeInvalidTransmitter(Transmitter<?, NETWORK, TRANSMITTER> invalid) {
227
214
}
228
215
}
229
216
230
- private void assignOrphans () {
217
+ private static void assignOrphans () {
231
218
if (!newOrphanTransmitters .isEmpty ()) {
232
219
Map <GlobalPos , Transmitter <?, ?, ?>> orphanTransmitters = newOrphanTransmitters ;
233
220
newOrphanTransmitters = new Object2ObjectOpenHashMap <>();
@@ -244,7 +231,7 @@ private void assignOrphans() {
244
231
}
245
232
}
246
233
247
- private void commitChanges () {
234
+ private static void commitChanges () {
248
235
if (!networksToChange .isEmpty ()) {
249
236
Set <DynamicNetwork <?, ?, ?>> networks = networksToChange ;
250
237
networksToChange = new ObjectOpenHashSet <>();
@@ -259,7 +246,7 @@ public String toString() {
259
246
return "Network Registry:\n " + networks ;
260
247
}
261
248
262
- public Component [] toComponents () {
249
+ public static Component [] toComponents () {
263
250
Component [] components = new Component [networks .size ()];
264
251
int i = 0 ;
265
252
for (DynamicNetwork <?, ?, ?> network : networks ) {
@@ -351,4 +338,7 @@ private void iterate(Map<GlobalPos, Transmitter<?, ?, ?>> orphanTransmitters, Bl
351
338
}
352
339
}
353
340
}
341
+
342
+ private TransmitterNetworkRegistry () {
343
+ }
354
344
}
0 commit comments