-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathElectriNetworkManager.java
87 lines (71 loc) · 2.29 KB
/
ElectriNetworkManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*******************************************************************************
* @author Reika Kalseki
*
* Copyright 2017
*
* All rights reserved.
* Distribution of the software in any form is only allowed with
* explicit, prior permission from the owner.
******************************************************************************/
package Reika.ElectriCraft;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumSet;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import Reika.DragonAPI.Auxiliary.Trackers.TickRegistry.TickHandler;
import Reika.DragonAPI.Auxiliary.Trackers.TickRegistry.TickType;
import Reika.ElectriCraft.Auxiliary.ElectriNetworkEvent.ElectriNetworkRepathEvent;
import Reika.ElectriCraft.Auxiliary.ElectriNetworkEvent.ElectriNetworkTickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
public class ElectriNetworkManager implements TickHandler {
public static final ElectriNetworkManager instance = new ElectriNetworkManager();
private final Collection<NetworkObject> networks = new ArrayList();
private final Collection<NetworkObject> discard = new ArrayList();
private ElectriNetworkManager() {
}
@Override
public void tick(TickType type, Object... tickData) {
Phase phase = (Phase)tickData[0];
World world = DimensionManager.getWorld(0);
//ReikaJavaLibrary.pConsole(networks.size()+":"+networks);
if (phase == Phase.START) {
if (!discard.isEmpty()) {
networks.removeAll(discard);
discard.clear();
}
if (world != null) {
ElectriNetworkTickEvent evt = new ElectriNetworkTickEvent(world);
for (NetworkObject net : networks) {
net.tick(evt);
}
}
}
else if (phase == Phase.END) {
if (world != null) {
ElectriNetworkRepathEvent evt = new ElectriNetworkRepathEvent(world);
for (NetworkObject net : networks) {
net.repath(evt);
}
}
}
}
@Override
public EnumSet<TickType> getType() {
return EnumSet.of(TickType.SERVER);
}
@Override
public boolean canFire(Phase p) {
return p == Phase.START || p == Phase.END;
}
@Override
public String getLabel() {
return "Electri Network";
}
public void addNetwork(NetworkObject net) {
networks.add(net);
}
public void scheduleNetworkDiscard(NetworkObject net) {
discard.add(net);
}
}