Skip to content

Commit 9b39a5d

Browse files
committed
重新处理了一下缓存指令器的mixin实现
1 parent 584b6fb commit 9b39a5d

File tree

2 files changed

+30
-67
lines changed

2 files changed

+30
-67
lines changed

src/main/java/com/circulation/random_complement/mixin/threng/MixinThrEngCraftingTracker.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
import net.minecraft.world.World;
1414
import org.spongepowered.asm.mixin.Final;
1515
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.Overwrite;
1617
import org.spongepowered.asm.mixin.Shadow;
1718
import org.spongepowered.asm.mixin.Unique;
1819
import org.spongepowered.asm.mixin.injection.At;
1920
import org.spongepowered.asm.mixin.injection.Inject;
20-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2121
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
2222

2323
import java.util.concurrent.ExecutionException;
@@ -42,16 +42,19 @@ public abstract class MixinThrEngCraftingTracker {
4242
@Shadow
4343
public abstract boolean isSlotOpen(int slot);
4444

45-
@Inject(method = "requestCrafting", at = @At("HEAD"), cancellable = true)
46-
public void requestCrafting(int slot, IAEItemStack item, World world, IGrid grid, ICraftingGrid crafting, IActionSource actionSrc, CallbackInfoReturnable<Boolean> cir) {
45+
/**
46+
* @author circulation
47+
* @reason 重写
48+
*/
49+
@Overwrite
50+
public boolean requestCrafting(int slot, IAEItemStack item, World world, IGrid grid, ICraftingGrid crafting, IActionSource actionSrc) {
4751
if (item != null) {
4852
ItemStack inputStack = item.getCachedItemStack(item.getStackSize());
4953
ItemStack remaining = ItemStack.EMPTY;
5054
item.setCachedItemStack(inputStack);
5155
Future<ICraftingJob> jobCalculation = this.jobs[slot];
5256
if (!this.isSlotOpen(slot)) {
53-
cir.setReturnValue(false);
54-
return;
57+
return false;
5558
}
5659

5760
if (jobCalculation == null && this.links[slot] == null) {
@@ -61,8 +64,7 @@ public void requestCrafting(int slot, IAEItemStack item, World world, IGrid grid
6164
}
6265

6366
if (jobCalculation == null) {
64-
cir.setReturnValue(false);
65-
return;
67+
return false;
6668
}
6769

6870
try {
@@ -74,17 +76,15 @@ public void requestCrafting(int slot, IAEItemStack item, World world, IGrid grid
7476
if (link != null) {
7577
this.randomComplement$setLink(slot, link);
7678
this.linksInv.put(link, slot);
77-
cir.setReturnValue(true);
78-
return;
79+
return true;
7980
}
8081
}
8182
}
8283
} catch (ExecutionException | InterruptedException ignored) {
8384

8485
}
8586
}
86-
cir.setReturnValue(false);
87-
cir.cancel();
87+
return false;
8888
}
8989

9090
@Unique
@@ -114,9 +114,8 @@ public void isSlotOpenMixin(int i, CallbackInfoReturnable<Boolean> cir) {
114114
* @author circulation
115115
* @reason 和见鬼毫无区别的导致崩溃
116116
*/
117-
@Inject(method = "updateLinks", at = @At("HEAD"), cancellable = true)
118-
private void updateLinks(CallbackInfo ci) {
119-
ci.cancel();
120-
//这东西究竟是怎么无限循环的???
117+
@Overwrite
118+
private void updateLinks() {
119+
121120
}
122-
}
121+
}

src/main/java/com/circulation/random_complement/mixin/threng/MixinTileLevelMaintainer.java

Lines changed: 15 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,11 @@
3737
import net.minecraftforge.fml.common.Optional;
3838
import org.spongepowered.asm.mixin.Final;
3939
import org.spongepowered.asm.mixin.Mixin;
40+
import org.spongepowered.asm.mixin.Overwrite;
4041
import org.spongepowered.asm.mixin.Shadow;
4142
import org.spongepowered.asm.mixin.Unique;
42-
import org.spongepowered.asm.mixin.injection.At;
43-
import org.spongepowered.asm.mixin.injection.Inject;
44-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
45-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
4643

47-
import java.util.Objects;
48-
49-
@Mixin(value = TileLevelMaintainer.class, remap = false)
44+
@Mixin(value = TileLevelMaintainer.class, remap = false, priority = 999)
5045
public abstract class MixinTileLevelMaintainer extends TileNetworkDevice implements IStackWatcherHost, ICraftingRequester, AEIgnoredInputMachine {
5146

5247
@Shadow
@@ -76,8 +71,8 @@ public abstract class MixinTileLevelMaintainer extends TileNetworkDevice impleme
7671
* @author circulation
7772
* @reason 删除多余的检测
7873
*/
79-
@Inject(method = "tick", at = @At("HEAD"), cancellable = true)
80-
protected void tick(CallbackInfo ci) {
74+
@Overwrite
75+
protected void tick() {
8176
if (!this.world.isRemote) {
8277
this.aeGrid().ifPresent((grid) -> {
8378
if (this.sleepTicks <= 0) {
@@ -122,53 +117,33 @@ protected void tick(CallbackInfo ci) {
122117

123118
});
124119
}
125-
ci.cancel();
126120
}
127121

128122
/**
129123
* @author circulation
130124
* @reason 修复插入物品逻辑,防止出现意外地吞物品
131125
*/
132-
@Inject(method = "injectCraftedItems", at = @At("HEAD"), cancellable = true)
133-
public void injectCraftedItems(ICraftingLink link, IAEItemStack stack, Actionable mode, CallbackInfoReturnable<IAEItemStack> cir) {
126+
@Overwrite
127+
public IAEItemStack injectCraftedItems(ICraftingLink link, IAEItemStack stack, Actionable mode) {
134128
if (stack == null) {
135-
cir.setReturnValue(null);
129+
return null;
136130
} else {
137131
int slot = this.crafter.getSlotForJob(link);
138132
if (slot == -1) {
139-
cir.setReturnValue(stack);
140-
} else if (mode == Actionable.SIMULATE) {
141-
if (this.aeGrid().isPresent()) {
142-
var grid = this.aeGrid().get();
143-
IEnergyGrid energyGrid = grid.getCache(IEnergyGrid.class);
144-
var gridCache = ((IStorageGrid) grid.getCache(IStorageGrid.class));
145-
IMEMonitor<IAEItemStack> storageGrid = gridCache.getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class));
146-
if (Loader.isModLoaded("ae2fc")) {
147-
var i = ae2fc$work(grid, mode, gridCache, stack);
148-
cir.setReturnValue(i);
149-
return;
150-
} else {
151-
cir.setReturnValue(Platform.poweredInsert(energyGrid, storageGrid, stack, this.actionSource, Actionable.MODULATE));
152-
}
153-
return;
154-
}
155-
cir.setReturnValue(null);
133+
return stack;
156134
} else {
157135
if (this.aeGrid().isPresent()) {
158136
var grid = this.aeGrid().get();
159137
IEnergyGrid energyGrid = grid.getCache(IEnergyGrid.class);
160138
var gridCache = ((IStorageGrid) grid.getCache(IStorageGrid.class));
161139
IMEMonitor<IAEItemStack> storageGrid = gridCache.getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class));
162140
if (Loader.isModLoaded("ae2fc")) {
163-
var i = ae2fc$work(grid, mode, gridCache, stack);
164-
cir.setReturnValue(i);
165-
return;
141+
return ae2fc$work(grid, mode, gridCache, stack);
166142
} else {
167-
cir.setReturnValue(Platform.poweredInsert(energyGrid, storageGrid, stack, this.actionSource, Actionable.MODULATE));
143+
return storageGrid.injectItems(stack, mode, this.actionSource);
168144
}
169-
return;
170145
}
171-
cir.setReturnValue(null);
146+
return null;
172147
}
173148
}
174149
}
@@ -181,13 +156,10 @@ public void injectCraftedItems(ICraftingLink link, IAEItemStack stack, Actionabl
181156

182157
ItemStack inputStack = stack.getCachedItemStack(stack.getStackSize());
183158
FluidStack inputFluid = FakeItemRegister.getStack(inputStack);
184-
IAEFluidStack remaining;
185-
186-
if (mode == appeng.api.config.Actionable.SIMULATE) {
187-
remaining = fluidGrid.injectItems(AEFluidStack.fromFluidStack(inputFluid), Actionable.SIMULATE, this.actionSource);
159+
final IAEFluidStack remaining = fluidGrid.injectItems(AEFluidStack.fromFluidStack(inputFluid), mode, this.actionSource);
160+
if (mode == Actionable.SIMULATE) {
188161
stack.setCachedItemStack(inputStack);
189162
} else {
190-
remaining = fluidGrid.injectItems(AEFluidStack.fromFluidStack(inputFluid), Actionable.MODULATE, this.actionSource);
191163
if (remaining == null || remaining.getStackSize() <= 0L) {
192164
ItemStack tmp = FakeFluids.packFluid2AEDrops(remaining) != null ? FakeFluids.packFluid2AEDrops(remaining).getDefinition() : null;
193165
stack.setCachedItemStack(tmp);
@@ -215,13 +187,12 @@ public void injectCraftedItems(ICraftingLink link, IAEItemStack stack, Actionabl
215187

216188
ItemStack inputStack = stack.getCachedItemStack(stack.getStackSize());
217189
GasStack inputGas = FakeItemRegister.getStack(inputStack);
218-
IAEGasStack remaining;
190+
191+
final IAEGasStack remaining = gasGrid.injectItems(AEGasStack.of(inputGas), mode, this.actionSource);
219192

220193
if (mode == Actionable.SIMULATE) {
221-
remaining = gasGrid.injectItems(AEGasStack.of(inputGas), Actionable.SIMULATE, this.actionSource);
222194
stack.setCachedItemStack(inputStack);
223195
} else {
224-
remaining = gasGrid.injectItems(AEGasStack.of(inputGas), Actionable.MODULATE, this.actionSource);
225196
if (remaining == null || remaining.getStackSize() <= 0L) {
226197
ItemStack tmp = FakeGases.packGas2AEDrops(remaining) != null ? FakeGases.packGas2AEDrops(remaining).getDefinition() : null;
227198
stack.setCachedItemStack(tmp);
@@ -235,13 +206,6 @@ public void injectCraftedItems(ICraftingLink link, IAEItemStack stack, Actionabl
235206
return FakeGases.packGas2AEDrops(remaining);
236207
}
237208

238-
@Unique
239-
private IAEItemStack r$request(int index, long count) {
240-
AEItemStack stack = Objects.requireNonNull(AEItemStack.fromItemStack(((AccessorInventoryRequest) this.requests).getRequestStacks()[index]));
241-
stack.setStackSize(count);
242-
return stack;
243-
}
244-
245209
@Unique
246210
private long r$computeDelta(int index, long existing) {
247211
AccessorInventoryRequest t = ((AccessorInventoryRequest) this.requests);

0 commit comments

Comments
 (0)