Skip to content

Commit e7abae1

Browse files
committed
fix #9
1 parent 43d1539 commit e7abae1

4 files changed

Lines changed: 46 additions & 26 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.glodblock.github.coremod.mixin.ae2;
2+
3+
import appeng.api.config.Actionable;
4+
import appeng.api.networking.security.IActionSource;
5+
import appeng.api.storage.IMEInventory;
6+
import appeng.api.storage.data.IAEStack;
7+
import appeng.me.storage.MEPassThrough;
8+
import com.glodblock.github.util.FakeMonitor;
9+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
10+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
11+
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
14+
@Mixin(value = MEPassThrough.class, remap = false)
15+
public class MixinMEPassThrough {
16+
17+
@WrapOperation(method = "injectItems", at = @At(value = "INVOKE", target = "Lappeng/api/storage/IMEInventory;injectItems(Lappeng/api/storage/data/IAEStack;Lappeng/api/config/Actionable;Lappeng/api/networking/security/IActionSource;)Lappeng/api/storage/data/IAEStack;"))
18+
public IAEStack<?> injectItems(IMEInventory<?> instance, IAEStack<?> t, Actionable actionable, IActionSource iActionSource, Operation<IAEStack<?>> original) {
19+
if (iActionSource instanceof FakeMonitor.FakeMonitorSource m) {
20+
return original.call(instance, t, actionable, m.getSource());
21+
}
22+
return original.call(instance, t, actionable, iActionSource);
23+
}
24+
25+
}

src/main/java/com/glodblock/github/coremod/mixin/ae2/MixinNetworkInventoryHandler.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,26 +60,15 @@ public abstract class MixinNetworkInventoryHandler<T extends IAEStack<T>> implem
6060
@Shadow
6161
protected abstract Deque<?> getDepth(Actionable type);
6262

63-
@Shadow @Final private SecurityCache security;
64-
6563
@Inject(method = "<init>", at = @At("TAIL"))
6664
public void onInit(final IStorageChannel<?> chan, final SecurityCache security, final CallbackInfo ci) {
6765
monitor = security.getGrid().<IStorageGrid>getCache(IStorageGrid.class).getInventory(Util.getItemChannel());
6866
}
6967

7068
@Inject(method = "injectItems", at = @At(value = "INVOKE", target = "Ljava/util/NavigableMap;values()Ljava/util/Collection;", ordinal = 1), cancellable = true)
71-
private void notItemInject(final T input, final Actionable mode, final IActionSource src, final CallbackInfoReturnable<T> cir) {
69+
private void notItemInject(final T input, final Actionable mode, IActionSource src, final CallbackInfoReturnable<T> cir) {
7270
if (input == null || input instanceof IAEItemStack) return;
73-
if (mode == Actionable.SIMULATE) return;
74-
if (src instanceof FakeMonitor.FakeMonitorSource m) {
75-
var o = m.machine();
76-
if (o.isPresent()) {
77-
var machine = o.get();
78-
if (machine.getActionableNode().getGrid() == this.security.getGrid()) {
79-
return;
80-
}
81-
}
82-
}
71+
if (mode == Actionable.SIMULATE || src instanceof FakeMonitor.FakeMonitorSource) return;
8372
final var drop = Util.packAEStackToDrop(input);
8473
if (drop != null) {
8574
if (!this.getDepth(mode).isEmpty()) this.surface(null, mode);

src/main/java/com/glodblock/github/util/FakeMonitor.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ public IAEItemStack injectItems(final IAEItemStack stack, final Actionable actio
5454
public IAEItemStack extractItems(final IAEItemStack stack, final Actionable actionable, final IActionSource source) {
5555
final T i = FakeItemRegister.getAEStack(stack);
5656
if (i == null) return null;
57+
final T s;
5758
final FakeMonitorSource fakeSource = FakeMonitorSource.release(source);
58-
final T s = monitor.extractItems(i, actionable, fakeSource);
59+
s = monitor.extractItems(i, actionable, fakeSource);
5960
fakeSource.recycle();
6061
if (s == null) {
6162
return null;
@@ -117,51 +118,55 @@ public boolean validForPass(final int i) {
117118
return i == 2;
118119
}
119120

120-
public static final class FakeMonitorSource implements IActionSource {
121+
public GridStorageCache getStorage() {
122+
return storage;
123+
}
124+
125+
public static class FakeMonitorSource implements IActionSource {
121126

122127
private static final Deque<FakeMonitorSource> POOL = new ArrayDeque<>(100);
123128
private IActionSource source;
124129

125-
private FakeMonitorSource(final IActionSource source) {
126-
this.source = source;
127-
}
128-
129130
public static FakeMonitorSource release(final IActionSource source) {
130131
synchronized (POOL) {
131132
if (!POOL.isEmpty()) {
132-
return POOL.peek().setSource(source);
133+
var s = POOL.peek();
134+
s.source = source;
135+
return s;
133136
}
134137
}
135138
return new FakeMonitorSource(source);
136139
}
137140

138-
public FakeMonitorSource setSource(final IActionSource source) {
141+
private FakeMonitorSource(final IActionSource source) {
139142
this.source = source;
140-
return this;
143+
}
144+
145+
public IActionSource getSource() {
146+
return source;
141147
}
142148

143149
public void recycle() {
144150
synchronized (POOL) {
145151
if (POOL.size() < 100) POOL.add(this);
146152
}
147-
this.setSource(null);
148153
}
149154

150155
@Nonnull
151156
@Override
152-
public Optional<EntityPlayer> player() {
157+
public final Optional<EntityPlayer> player() {
153158
return source.player();
154159
}
155160

156161
@Nonnull
157162
@Override
158-
public Optional<IActionHost> machine() {
163+
public final Optional<IActionHost> machine() {
159164
return source.machine();
160165
}
161166

162167
@Nonnull
163168
@Override
164-
public <T> Optional<T> context(@Nonnull final Class<T> aClass) {
169+
public final <T> Optional<T> context(@Nonnull final Class<T> aClass) {
165170
return source.context(aClass);
166171
}
167172
}

src/main/resources/mixins.ae2fc.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"ae2.MixinDualityInterface",
1212
"ae2.MixinGridStorageCache",
1313
"ae2.MixinGuiBridge",
14+
"ae2.MixinMEPassThrough",
1415
"ae2.MixinNetworkInventoryHandler",
1516
"ae2.MixinNetworkMonitor",
1617
"ae2.container.MixinContainerCellWorkbench",

0 commit comments

Comments
 (0)