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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
package goodgenerator.blocks.tileEntity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.config.Actionable;
import appeng.api.networking.GridFlags;
import appeng.api.networking.IGrid;
import appeng.api.networking.IGridNode;
import appeng.api.networking.security.IActionHost;
import appeng.api.networking.security.MachineSource;
import appeng.api.util.AECableType;
import appeng.api.util.DimensionalCoord;
import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.IGridProxyable;
import appeng.tile.TileEvent;
import appeng.tile.events.TileEventType;
import goodgenerator.util.ItemRefer;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;
import thaumicenergistics.api.grid.IEssentiaGrid;
import thaumicenergistics.api.grid.IMEEssentiaMonitor;
public class MTEEssentiaOutputHatchME extends MTEEssentiaOutputHatch implements IActionHost, IGridProxyable {
private AENetworkProxy gridProxy = null;
private IMEEssentiaMonitor monitor = null;
private final MachineSource asMachineSource = new MachineSource(this);
@Override
public void updateEntity() {
getProxy();
super.updateEntity();
}
@Override
public void invalidate() {
super.invalidate();
this.invalidateAE();
}
@Override
public void onChunkUnload() {
super.onChunkUnload();
this.onChunkUnloadAE();
}
@TileEvent(TileEventType.WORLD_NBT_READ)
public void readFromNBT_AENetwork(final NBTTagCompound data) {
AENetworkProxy gp = getProxy();
if (gp != null) getProxy().readFromNBT(data);
}
@TileEvent(TileEventType.WORLD_NBT_WRITE)
public void writeToNBT_AENetwork(final NBTTagCompound data) {
AENetworkProxy gp = getProxy();
if (gp != null) gp.writeToNBT(data);
}
void onChunkUnloadAE() {
AENetworkProxy gp = getProxy();
if (gp != null) gp.onChunkUnload();
}
void invalidateAE() {
AENetworkProxy gp = getProxy();
if (gp != null) gp.invalidate();
}
@Override
public IGridNode getGridNode(ForgeDirection forgeDirection) {
AENetworkProxy gp = getProxy();
return gp != null ? gp.getNode() : null;
}
@Override
public void gridChanged() {}
@Override
public AECableType getCableConnectionType(ForgeDirection forgeDirection) {
return AECableType.SMART;
}
@Override
public void securityBreak() {}
@Override
public AENetworkProxy getProxy() {
if (gridProxy == null) {
gridProxy = new AENetworkProxy(this, "proxy", ItemRefer.Essentia_Output_Hatch_ME.get(1), true);
gridProxy.onReady();
gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL);
}
return this.gridProxy;
}
@Override
public DimensionalCoord getLocation() {
return new DimensionalCoord(this.worldObj, this.xCoord, this.yCoord, this.zCoord);
}
@Override
public IGridNode getActionableNode() {
AENetworkProxy gp = getProxy();
return gp != null ? gp.getNode() : null;
}
@Override
public boolean takeFromContainer(AspectList aspects) {
return false;
}
@Override
public boolean takeFromContainer(Aspect aspect, int amount) {
return false;
}
@Override
public int addEssentia(Aspect aspect, int amount, ForgeDirection side) {
return this.addEssentia(aspect, amount, side, Actionable.MODULATE);
}
public int addEssentia(Aspect aspect, int amount, ForgeDirection side, Actionable mode) {
long rejectedAmount = amount;
if (this.getEssentiaMonitor()) {
rejectedAmount = this.monitor.injectEssentia(aspect, amount, mode, this.getMachineSource(), true);
}
long acceptedAmount = (long) amount - rejectedAmount;
return (int) acceptedAmount;
}
protected boolean getEssentiaMonitor() {
IMEEssentiaMonitor essentiaMonitor = null;
IGrid grid = null;
IGridNode node = this.getProxy()
.getNode();
if (node != null) {
grid = node.getGrid();
if (grid != null) essentiaMonitor = grid.getCache(IEssentiaGrid.class);
}
this.monitor = essentiaMonitor;
return (this.monitor != null);
}
public MachineSource getMachineSource() {
return this.asMachineSource;
}
}
|