Skip to content

Commit 9c008f2

Browse files
committed
修正流体存储总线更新流体时无法正确的更新液滴数量的问题
1 parent 21f3a07 commit 9c008f2

File tree

2 files changed

+20
-27
lines changed

2 files changed

+20
-27
lines changed

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import appeng.api.storage.IStorageChannel;
66
import appeng.api.storage.data.IAEItemStack;
77
import appeng.api.storage.data.IAEStack;
8+
import appeng.api.storage.data.IItemList;
89
import appeng.me.cache.GridStorageCache;
910
import appeng.me.cache.NetworkMonitor;
1011
import appeng.me.storage.NetworkInventoryHandler;
@@ -46,10 +47,26 @@ public void postAlterationOfStoredItems(final IStorageChannel<?> chan, final Ite
4647
if (chan == Util.getFluidChannel() || (ModAndClassUtil.GAS && chan == Util.getGasChannel())) {
4748
final var list = new ObjectArrayList<IAEItemStack>();
4849
for (final IAEStack<?> i : input) {
49-
final var drop = Util.packAEStackToDrop(i);
50-
if (drop != null) list.add(drop);
50+
final var size = i.getStackSize();
51+
final var drop = Util.packAEStackToDrop(size > 0 ? i : i.setStackSize(-size));
52+
if (drop != null) list.add(drop.setStackSize(size));
53+
i.setStackSize(size);
5154
}
5255
((FCNetworkMonitor) this.storageMonitors.get(Util.getItemChannel())).fc$postChange(true, list, src);
5356
}
5457
}
58+
59+
@Inject(method = "postChangesToNetwork", at = @At("TAIL"))
60+
private <T extends IAEStack<T>, C extends IStorageChannel<T>> void postChangesToNetwork(final C chan, final int upOrDown, final IItemList<T> availableItems, final IActionSource src, final CallbackInfo ci) {
61+
if (chan == Util.getFluidChannel() || (ModAndClassUtil.GAS && chan == Util.getGasChannel())) {
62+
final var list = new ObjectArrayList<IAEItemStack>();
63+
for (final IAEStack<?> i : availableItems) {
64+
final var size = i.getStackSize();
65+
final var drop = Util.packAEStackToDrop(size > 0 ? i : i.setStackSize(-size));
66+
if (drop != null) list.add(drop.setStackSize(size));
67+
i.setStackSize(size);
68+
}
69+
((FCNetworkMonitor) this.storageMonitors.get(Util.getItemChannel())).fc$postChange(upOrDown > 0, list, src);
70+
}
71+
}
5572
}

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

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import appeng.me.cache.NetworkMonitor;
1515
import com.glodblock.github.common.item.fake.FakeItemRegister;
1616
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
17-
import it.unimi.dsi.fastutil.objects.ObjectLists;
1817
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
1918
import net.minecraft.entity.player.EntityPlayer;
2019

@@ -44,17 +43,6 @@ public IAEItemStack injectItems(final IAEItemStack stack, final Actionable actio
4443
final FakeMonitorSource fakeSource = FakeMonitorSource.release(source);
4544
final T s = monitor.injectItems(i, actionable, fakeSource);
4645
fakeSource.recycle();
47-
if (actionable == Actionable.MODULATE) {
48-
storage.postAlterationOfStoredItems(
49-
channel,
50-
ObjectLists.singleton(
51-
stack.copy().setStackSize(
52-
stack.getStackSize() - (s == null ? 0 : s.getStackSize())
53-
)
54-
),
55-
source
56-
);
57-
}
5846
if (s == null) {
5947
return null;
6048
} else {
@@ -72,19 +60,7 @@ public IAEItemStack extractItems(final IAEItemStack stack, final Actionable acti
7260
if (s == null) {
7361
return null;
7462
} else {
75-
final var o = FakeItemRegister.packAEStackLong(s, stack.getItem());
76-
if (actionable == Actionable.MODULATE && o != null) {
77-
storage.postAlterationOfStoredItems(
78-
channel,
79-
ObjectLists.singleton(
80-
stack.copy().setStackSize(
81-
-o.getStackSize()
82-
)
83-
),
84-
source
85-
);
86-
}
87-
return o;
63+
return FakeItemRegister.packAEStackLong(s, stack.getItem());
8864
}
8965
}
9066

0 commit comments

Comments
 (0)