分离ADV的适配mixin到单独mixin&mixinPlugin中增加判断是否加载该mixin
This commit is contained in:
parent
b5498588ba
commit
80b2194a85
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.extendedae_plus.compat;
|
||||||
|
|
||||||
|
import appeng.api.networking.IGrid;
|
||||||
|
import appeng.api.networking.IManagedGridNode;
|
||||||
|
|
||||||
|
public interface PatternProviderLogicVirtualCompatBridge {
|
||||||
|
boolean eap$compatIsVirtualCraftingEnabled();
|
||||||
|
|
||||||
|
IGrid eap$compatGetGrid();
|
||||||
|
|
||||||
|
IManagedGridNode eap$compatGetMainNode();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
package com.extendedae_plus.mixin.advancedae.compat;
|
||||||
|
|
||||||
|
import appeng.api.networking.crafting.ICraftingCPU;
|
||||||
|
import appeng.api.networking.crafting.ICraftingService;
|
||||||
|
import appeng.api.crafting.IPatternDetails;
|
||||||
|
import appeng.api.stacks.KeyCounter;
|
||||||
|
import appeng.helpers.patternprovider.PatternProviderLogic;
|
||||||
|
import com.extendedae_plus.compat.PatternProviderLogicVirtualCompatBridge;
|
||||||
|
import com.extendedae_plus.mixin.advancedae.accessor.AdvCraftingCPULogicAccessor;
|
||||||
|
import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobAccessor;
|
||||||
|
import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobTaskProgressAccessor;
|
||||||
|
import net.pedroksl.advanced_ae.common.cluster.AdvCraftingCPU;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
@Mixin(value = PatternProviderLogic.class, priority = 450, remap = false)
|
||||||
|
public abstract class PatternProviderLogicVirtualCompletionMixin {
|
||||||
|
|
||||||
|
@Inject(method = "pushPattern", at = @At("RETURN"))
|
||||||
|
private void eap$advancedaeVirtualCompletion(IPatternDetails patternDetails, KeyCounter[] inputHolder,
|
||||||
|
CallbackInfoReturnable<Boolean> cir) {
|
||||||
|
if (!cir.getReturnValueZ()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!(this instanceof PatternProviderLogicVirtualCompatBridge bridge)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!bridge.eap$compatIsVirtualCraftingEnabled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var grid = bridge.eap$compatGetGrid();
|
||||||
|
if (grid == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ICraftingService craftingService = grid.getCraftingService();
|
||||||
|
if (craftingService == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ICraftingCPU cpu : craftingService.getCpus()) {
|
||||||
|
if (!cpu.isBusy()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cpu instanceof AdvCraftingCPU advCpu) {
|
||||||
|
var logic = advCpu.craftingLogic;
|
||||||
|
if (logic instanceof AdvCraftingCPULogicAccessor advLogicAccessor) {
|
||||||
|
var job = advLogicAccessor.eap$getAdvJob();
|
||||||
|
if (job != null && job instanceof AdvExecutingCraftingJobAccessor advJobAccessor) {
|
||||||
|
var tasks = advJobAccessor.eap$getAdvTasks();
|
||||||
|
var progress = tasks.get(patternDetails);
|
||||||
|
if (progress instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) {
|
||||||
|
if (advProgressAccessor.eap$getAdvValue() <= 1) {
|
||||||
|
advCpu.cancelJob();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -12,19 +12,16 @@ import appeng.api.upgrades.UpgradeInventories;
|
||||||
import appeng.helpers.patternprovider.PatternProviderLogic;
|
import appeng.helpers.patternprovider.PatternProviderLogic;
|
||||||
import appeng.helpers.patternprovider.PatternProviderLogicHost;
|
import appeng.helpers.patternprovider.PatternProviderLogicHost;
|
||||||
import appeng.me.cluster.implementations.CraftingCPUCluster;
|
import appeng.me.cluster.implementations.CraftingCPUCluster;
|
||||||
import com.extendedae_plus.mixin.advancedae.accessor.AdvCraftingCPULogicAccessor;
|
|
||||||
import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobAccessor;
|
|
||||||
import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobTaskProgressAccessor;
|
|
||||||
import com.extendedae_plus.ae.wireless.WirelessSlaveLink;
|
import com.extendedae_plus.ae.wireless.WirelessSlaveLink;
|
||||||
import com.extendedae_plus.ae.wireless.endpoint.GenericNodeEndpointImpl;
|
import com.extendedae_plus.ae.wireless.endpoint.GenericNodeEndpointImpl;
|
||||||
import com.extendedae_plus.api.bridge.IInterfaceWirelessLinkBridge;
|
import com.extendedae_plus.api.bridge.IInterfaceWirelessLinkBridge;
|
||||||
|
import com.extendedae_plus.compat.PatternProviderLogicVirtualCompatBridge;
|
||||||
import com.extendedae_plus.compat.UpgradeSlotCompat;
|
import com.extendedae_plus.compat.UpgradeSlotCompat;
|
||||||
import com.extendedae_plus.init.ModItems;
|
import com.extendedae_plus.init.ModItems;
|
||||||
import com.extendedae_plus.items.materials.ChannelCardItem;
|
import com.extendedae_plus.items.materials.ChannelCardItem;
|
||||||
import com.extendedae_plus.mixin.ae2.accessor.CraftingCpuLogicAccessor;
|
import com.extendedae_plus.mixin.ae2.accessor.CraftingCpuLogicAccessor;
|
||||||
import com.extendedae_plus.mixin.ae2.accessor.ExecutingCraftingJobAccessor;
|
import com.extendedae_plus.mixin.ae2.accessor.ExecutingCraftingJobAccessor;
|
||||||
import com.extendedae_plus.util.Logger;
|
import com.extendedae_plus.util.Logger;
|
||||||
import net.pedroksl.advanced_ae.common.cluster.AdvCraftingCPU;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
|
@ -45,7 +42,7 @@ import java.util.List;
|
||||||
* 根据appflux是否存在来决定是否实现IUpgradeableObject接口
|
* 根据appflux是否存在来决定是否实现IUpgradeableObject接口
|
||||||
*/
|
*/
|
||||||
@Mixin(value = PatternProviderLogic.class, priority = 500, remap = false)
|
@Mixin(value = PatternProviderLogic.class, priority = 500, remap = false)
|
||||||
public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObject, IInterfaceWirelessLinkBridge {
|
public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObject, IInterfaceWirelessLinkBridge, PatternProviderLogicVirtualCompatBridge {
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
private IUpgradeInventory eap$compatUpgrades = UpgradeInventories.empty();
|
private IUpgradeInventory eap$compatUpgrades = UpgradeInventories.empty();
|
||||||
|
|
@ -148,23 +145,6 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (cpu instanceof AdvCraftingCPU advCpu) {
|
|
||||||
var logic = advCpu.craftingLogic;
|
|
||||||
if (logic instanceof AdvCraftingCPULogicAccessor advLogicAccessor) {
|
|
||||||
var job = advLogicAccessor.eap$getAdvJob();
|
|
||||||
if (job != null && job instanceof AdvExecutingCraftingJobAccessor advJobAccessor) {
|
|
||||||
var tasks = advJobAccessor.eap$getAdvTasks();
|
|
||||||
var progress = tasks.get(patternDetails);
|
|
||||||
if (progress instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) {
|
|
||||||
if (advProgressAccessor.eap$getAdvValue() <= 1) {
|
|
||||||
advCpu.cancelJob();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -274,6 +254,21 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean eap$compatIsVirtualCraftingEnabled() {
|
||||||
|
return this.eap$compatVirtualCraftingEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IGrid eap$compatGetGrid() {
|
||||||
|
return this.getGrid();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IManagedGridNode eap$compatGetMainNode() {
|
||||||
|
return this.mainNode;
|
||||||
|
}
|
||||||
|
|
||||||
@Inject(method = "pushPattern", at = @At("HEAD"))
|
@Inject(method = "pushPattern", at = @At("HEAD"))
|
||||||
private void eap$compatOnPushPattern(IPatternDetails patternDetails, KeyCounter[] inputHolder, CallbackInfoReturnable<Boolean> cir) {
|
private void eap$compatOnPushPattern(IPatternDetails patternDetails, KeyCounter[] inputHolder, CallbackInfoReturnable<Boolean> cir) {
|
||||||
eap$compatTryVirtualCompletion(patternDetails);
|
eap$compatTryVirtualCompletion(patternDetails);
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@
|
||||||
"advancedae.helpers.AdvPatternProviderLogicDoublingMixin",
|
"advancedae.helpers.AdvPatternProviderLogicDoublingMixin",
|
||||||
"advancedae.menu.AdvPatternProviderMenuAdvancedMixin",
|
"advancedae.menu.AdvPatternProviderMenuAdvancedMixin",
|
||||||
"advancedae.menu.AdvPatternProviderMenuDoublingMixin",
|
"advancedae.menu.AdvPatternProviderMenuDoublingMixin",
|
||||||
|
"advancedae.compat.PatternProviderLogicVirtualCompletionMixin",
|
||||||
"ae2.AEProcessingPatternMixin",
|
"ae2.AEProcessingPatternMixin",
|
||||||
"ae2.CraftingCalculationMixin",
|
"ae2.CraftingCalculationMixin",
|
||||||
"ae2.CraftingCPUClusterMixin",
|
"ae2.CraftingCPUClusterMixin",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user