Skip to content

Commit 30ec2b4

Browse files
committed
Add Tunnel Conversion API
Allows AE2FC Interfaces to convert P2P Tunnels, closes #73
1 parent 3b7dc10 commit 30ec2b4

16 files changed

+118
-50
lines changed

src/main/java/co/neeve/nae2/NAE2API.java

+6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package co.neeve.nae2;
22

33
import co.neeve.nae2.common.api.ExposerAPI;
4+
import co.neeve.nae2.common.api.TunnelConversionAPI;
45

56
public class NAE2API {
67
private final ExposerAPI exposerAPI = new ExposerAPI();
8+
private final TunnelConversionAPI tunnelConversionAPI = new TunnelConversionAPI();
79

810
NAE2API() {}
911

@@ -15,4 +17,8 @@ public class NAE2API {
1517
public ExposerAPI exposer() {
1618
return this.exposerAPI;
1719
}
20+
21+
public TunnelConversionAPI tunnelConversion() {
22+
return this.tunnelConversionAPI;
23+
}
1824
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package co.neeve.nae2.common.api;
2+
3+
import appeng.util.item.ItemStackHashStrategy;
4+
import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
5+
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap;
6+
import net.minecraft.item.ItemStack;
7+
8+
public class TunnelConversionAPI {
9+
private final Object2ObjectMap<ItemStack, ItemStack> tunnelMap =
10+
new Object2ObjectOpenCustomHashMap<>(ItemStackHashStrategy.comparingAllButCount());
11+
12+
public void register(ItemStack catalyst, ItemStack tunnelStack) {
13+
this.tunnelMap.put(catalyst, tunnelStack);
14+
}
15+
16+
public ItemStack getConversion(ItemStack catalyst) {
17+
return this.tunnelMap.getOrDefault(catalyst, ItemStack.EMPTY);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package co.neeve.nae2.common.integration.ae2fc;
2+
3+
import co.neeve.nae2.NAE2;
4+
import co.neeve.nae2.common.registration.definitions.Upgrades;
5+
import com.glodblock.github.loader.FCBlocks;
6+
import com.glodblock.github.loader.FCItems;
7+
import net.minecraft.item.ItemStack;
8+
import net.minecraftforge.fml.relauncher.Side;
9+
10+
public class AE2FC {
11+
12+
public static void initInterfaceUpgrade(Upgrades.UpgradeType upgrade) {
13+
upgrade.registerItem(new ItemStack(FCBlocks.DUAL_INTERFACE), 1);
14+
upgrade.registerItem(new ItemStack(FCItems.PART_DUAL_INTERFACE), 1);
15+
}
16+
17+
public static void postInit(Side side) {
18+
NAE2.definitions().parts().p2pTunnelInterface().maybeStack(1).ifPresent((p2pTunnel) -> {
19+
var tc = NAE2.api().tunnelConversion();
20+
tc.register(new ItemStack(FCBlocks.DUAL_INTERFACE), p2pTunnel);
21+
tc.register(new ItemStack(FCItems.PART_DUAL_INTERFACE), p2pTunnel);
22+
});
23+
}
24+
}

src/main/java/co/neeve/nae2/common/integration/ae2fc/AE2FCIntegrationHelper.java src/main/java/co/neeve/nae2/common/integration/ae2fc/AE2FCInterfaceHelper.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import net.minecraft.tileentity.TileEntity;
44
import net.minecraft.util.EnumFacing;
55

6-
public class AE2FCIntegrationHelper {
6+
public class AE2FCInterfaceHelper {
77
private static TileEntity interfaceOverride = null;
88
private static EnumFacing enumFacingOverride = null;
99

@@ -12,14 +12,14 @@ public static TileEntity getInterfaceOverride() {
1212
}
1313

1414
public static void setInterfaceOverride(TileEntity interfaceOverride) {
15-
AE2FCIntegrationHelper.interfaceOverride = interfaceOverride;
15+
AE2FCInterfaceHelper.interfaceOverride = interfaceOverride;
1616
}
1717

1818
public static EnumFacing getEnumFacingOverride() {
1919
return enumFacingOverride;
2020
}
2121

2222
public static void setEnumFacingOverride(EnumFacing enumFacingOverride) {
23-
AE2FCIntegrationHelper.enumFacingOverride = enumFacingOverride;
23+
AE2FCInterfaceHelper.enumFacingOverride = enumFacingOverride;
2424
}
2525
}

src/main/java/co/neeve/nae2/common/integration/ae2fc/UpgradeInit.java

-15
This file was deleted.

src/main/java/co/neeve/nae2/common/registration/Registration.java

+6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import appeng.bootstrap.components.*;
55
import appeng.core.AEConfig;
66
import appeng.core.features.AEFeature;
7+
import appeng.util.Platform;
8+
import co.neeve.nae2.common.integration.ae2fc.AE2FC;
79
import co.neeve.nae2.common.recipes.handlers.DisassembleRecipe;
810
import co.neeve.nae2.common.registration.definitions.*;
911
import co.neeve.nae2.common.registration.registry.Registry;
@@ -43,6 +45,10 @@ public Registration() {
4345
this.parts = new Parts(this.registry);
4446
this.upgrades = new Upgrades(this.registry);
4547
this.blocks = new Blocks(this.registry);
48+
49+
if (Platform.isModLoaded("ae2fc")) {
50+
this.registry.addBootstrapComponent((IPostInitComponent) AE2FC::postInit);
51+
}
4652
}
4753

4854
public void preInit(FMLPreInitializationEvent event) {

src/main/java/co/neeve/nae2/common/registration/definitions/Parts.java

+17
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
import appeng.api.AEApi;
44
import appeng.api.parts.IPart;
5+
import appeng.bootstrap.components.IPostInitComponent;
6+
import appeng.core.Api;
57
import appeng.core.features.DamagedItemDefinition;
68
import appeng.core.localization.GuiText;
79
import appeng.util.Platform;
10+
import co.neeve.nae2.NAE2;
811
import co.neeve.nae2.Tags;
912
import co.neeve.nae2.common.features.Features;
1013
import co.neeve.nae2.common.features.IFeature;
@@ -54,9 +57,23 @@ public Parts(Registry registry) {
5457

5558
this.beamFormer = this.createPart(this.itemPart, PartType.BEAM_FORMER);
5659
this.p2pTunnelInterface = this.createPart(this.itemPart, PartType.P2P_TUNNEL_INTERFACE);
60+
this.p2pTunnelInterface.maybeStack(1)
61+
.ifPresent((tunnelStack) -> registry.addBootstrapComponent((IPostInitComponent) (r) -> {
62+
var definitions = Api.INSTANCE.definitions();
63+
64+
definitions.blocks().iface().maybeStack(1)
65+
.ifPresent((stack) -> registerTunnelConversion(tunnelStack, stack));
66+
67+
definitions.parts().iface().maybeStack(1)
68+
.ifPresent((stack) -> registerTunnelConversion(tunnelStack, stack));
69+
}));
5770
this.exposer = this.createPart(this.itemPart, PartType.EXPOSER);
5871
}
5972

73+
private static void registerTunnelConversion(ItemStack tunnelStack, ItemStack stack) {
74+
NAE2.api().tunnelConversion().register(stack, tunnelStack);
75+
}
76+
6077
public static Optional<PartType> getById(int itemDamage) {
6178
return Optional.ofNullable(PartType.getCachedValues().getOrDefault(itemDamage, null));
6279
}

src/main/java/co/neeve/nae2/common/registration/definitions/Upgrades.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import co.neeve.nae2.common.crafting.patterntransform.transformers.GregTechCircuitPatternTransformer;
1414
import co.neeve.nae2.common.features.IFeature;
1515
import co.neeve.nae2.common.features.subfeatures.UpgradeFeatures;
16-
import co.neeve.nae2.common.integration.ae2fc.UpgradeInit;
16+
import co.neeve.nae2.common.integration.ae2fc.AE2FC;
1717
import co.neeve.nae2.common.items.NAEBaseItemUpgrade;
1818
import co.neeve.nae2.common.registration.registry.Registry;
1919
import co.neeve.nae2.common.registration.registry.interfaces.DamagedDefinitions;
@@ -68,7 +68,7 @@ public Upgrades(Registry registry) {
6868
UpgradeType.AUTO_COMPLETE.registerItem(blocks.iface(), 1);
6969
UpgradeType.AUTO_COMPLETE.registerItem(parts.iface(), 1);
7070
if (Platform.isModLoaded("ae2fc")) {
71-
UpgradeInit.init(UpgradeType.AUTO_COMPLETE);
71+
AE2FC.initInterfaceUpgrade(UpgradeType.AUTO_COMPLETE);
7272
}
7373
});
7474
}
@@ -85,7 +85,7 @@ public Upgrades(Registry registry) {
8585
UpgradeType.GREGTECH_CIRCUIT.registerItem(blocks.iface(), 1);
8686
UpgradeType.GREGTECH_CIRCUIT.registerItem(parts.iface(), 1);
8787
if (Platform.isModLoaded("ae2fc")) {
88-
UpgradeInit.init(UpgradeType.GREGTECH_CIRCUIT);
88+
AE2FC.initInterfaceUpgrade(UpgradeType.GREGTECH_CIRCUIT);
8989
}
9090
});
9191
}

src/main/java/co/neeve/nae2/mixin/ifacep2p/shared/MixinPartP2PTunnel.java src/main/java/co/neeve/nae2/mixin/core/MixinTunnelConversion.java

+20-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package co.neeve.nae2.mixin.ifacep2p.shared;
1+
package co.neeve.nae2.mixin.core;
22

3+
import appeng.api.config.TunnelType;
34
import appeng.api.implementations.items.IMemoryCard;
4-
import appeng.core.Api;
55
import appeng.parts.p2p.PartP2PTunnel;
66
import co.neeve.nae2.NAE2;
77
import com.llamalad7.mixinextras.sugar.Local;
@@ -11,19 +11,30 @@
1111
import org.spongepowered.asm.mixin.injection.ModifyVariable;
1212

1313
@Mixin(PartP2PTunnel.class)
14-
public class MixinPartP2PTunnel {
14+
public class MixinTunnelConversion {
1515
@ModifyVariable(method = "onPartActivate", at = @At(value = "LOAD"), name = "newType", remap = false)
1616
public ItemStack injectP2PTypes(ItemStack newType, @Local(ordinal = 0) ItemStack hand) {
1717
var item = hand.getItem();
1818

1919
if (!(item instanceof IMemoryCard)) {
20-
var definitions = Api.INSTANCE.definitions();
20+
var conversion = NAE2.api().tunnelConversion().getConversion(hand);
21+
if (!conversion.isEmpty()) {
22+
return conversion;
23+
}
24+
}
25+
26+
return newType;
27+
}
28+
29+
@ModifyVariable(method = "onPartActivate", at = @At(value = "LOAD"), name = "tt", remap = false)
30+
public TunnelType maskTunnelType(TunnelType newType, @Local(ordinal = 0) ItemStack hand) {
31+
var item = hand.getItem();
2132

22-
var iface = definitions.blocks().iface().maybeStack(1);
23-
var ifacePart = definitions.parts().iface().maybeStack(1);
24-
if ((iface.isPresent() && hand.isItemEqual(iface.get()))
25-
|| (ifacePart.isPresent() && hand.isItemEqual(ifacePart.get()))) {
26-
return NAE2.definitions().parts().p2pTunnelInterface().maybeStack(1).orElse(ItemStack.EMPTY);
33+
if (!(item instanceof IMemoryCard)) {
34+
var conversion = NAE2.api().tunnelConversion().getConversion(hand);
35+
if (!conversion.isEmpty()) {
36+
// Return whatever.
37+
return TunnelType.ME;
2738
}
2839
}
2940

src/main/java/co/neeve/nae2/mixin/crafting/patterntransform/MixinCraftingCPUCluster.java src/main/java/co/neeve/nae2/mixin/core/crafting/patterntransform/MixinCraftingCPUCluster.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package co.neeve.nae2.mixin.crafting.patterntransform;
1+
package co.neeve.nae2.mixin.core.crafting.patterntransform;
22

33
import appeng.api.networking.crafting.ICraftingMedium;
44
import appeng.api.networking.crafting.ICraftingPatternDetails;

src/main/java/co/neeve/nae2/mixin/crafting/patterntransform/MixinCraftingGrid.java src/main/java/co/neeve/nae2/mixin/core/crafting/patterntransform/MixinCraftingGrid.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package co.neeve.nae2.mixin.crafting.patterntransform;
1+
package co.neeve.nae2.mixin.core.crafting.patterntransform;
22

33
import appeng.api.networking.crafting.ICraftingMedium;
44
import appeng.api.networking.crafting.ICraftingPatternDetails;

src/main/java/co/neeve/nae2/mixin/ifacep2p/shared/MixinAE2FCInventoryAdaptor.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package co.neeve.nae2.mixin.ifacep2p.shared;
22

33
import appeng.helpers.IInterfaceHost;
4-
import co.neeve.nae2.common.integration.ae2fc.AE2FCIntegrationHelper;
4+
import co.neeve.nae2.common.integration.ae2fc.AE2FCInterfaceHelper;
55
import com.glodblock.github.inventory.FluidConvertingInventoryAdaptor;
66
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
77
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
@@ -21,7 +21,7 @@ public class MixinAE2FCInventoryAdaptor {
2121
remap = true
2222
))
2323
private static TileEntity wrapTileEntity(World instance, BlockPos blockPos, Operation<TileEntity> original) {
24-
var override = AE2FCIntegrationHelper.getInterfaceOverride();
24+
var override = AE2FCInterfaceHelper.getInterfaceOverride();
2525
if (override != null) {
2626
return override;
2727
}
@@ -36,9 +36,9 @@ private static TileEntity wrapTileEntity(World instance, BlockPos blockPos, Oper
3636
))
3737
private static IInterfaceHost wrapGetInterfaceTE(TileEntity te, EnumFacing facing,
3838
Operation<IInterfaceHost> operation) {
39-
var override = AE2FCIntegrationHelper.getInterfaceOverride();
39+
var override = AE2FCInterfaceHelper.getInterfaceOverride();
4040
if (override != null) {
41-
return operation.call(override, AE2FCIntegrationHelper.getEnumFacingOverride());
41+
return operation.call(override, AE2FCInterfaceHelper.getEnumFacingOverride());
4242
}
4343

4444
return operation.call(te, facing);

src/main/java/co/neeve/nae2/mixin/ifacep2p/shared/MixinBlockingTermName.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import appeng.helpers.DualityInterface;
66
import appeng.helpers.IInterfaceHost;
77
import appeng.util.Platform;
8-
import co.neeve.nae2.common.integration.ae2fc.AE2FCIntegrationHelper;
8+
import co.neeve.nae2.common.integration.ae2fc.AE2FCInterfaceHelper;
99
import co.neeve.nae2.common.parts.p2p.PartP2PInterface;
1010
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
1111
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
@@ -80,8 +80,8 @@ private TileEntity wrapEntityGetter(World instance, BlockPos bp, Operation<TileE
8080
interfaceHost = null;
8181
}
8282

83-
AE2FCIntegrationHelper.setEnumFacingOverride(this.nae2$originalFacing.getOpposite());
84-
AE2FCIntegrationHelper.setInterfaceOverride(
83+
AE2FCInterfaceHelper.setEnumFacingOverride(this.nae2$originalFacing.getOpposite());
84+
AE2FCInterfaceHelper.setInterfaceOverride(
8585
interfaceHost != null ? interfaceHost.getTileEntity() : null);
8686
}
8787
return pair.getRight();
@@ -115,8 +115,8 @@ private TileEntity wrapEntityGetter(World instance, BlockPos bp, Operation<TileE
115115
}
116116

117117
if (Platform.isModLoaded("ae2fc")) {
118-
AE2FCIntegrationHelper.setEnumFacingOverride(null);
119-
AE2FCIntegrationHelper.setInterfaceOverride(null);
118+
AE2FCInterfaceHelper.setEnumFacingOverride(null);
119+
AE2FCInterfaceHelper.setInterfaceOverride(null);
120120
}
121121
return te;
122122
}

src/main/java/co/neeve/nae2/mixin/ifacep2p/shared/MixinPushPattern.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import appeng.helpers.DualityInterface;
66
import appeng.helpers.IInterfaceHost;
77
import appeng.util.Platform;
8-
import co.neeve.nae2.common.integration.ae2fc.AE2FCIntegrationHelper;
8+
import co.neeve.nae2.common.integration.ae2fc.AE2FCInterfaceHelper;
99
import co.neeve.nae2.common.parts.p2p.PartP2PInterface;
1010
import com.google.common.collect.Lists;
1111
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
@@ -85,7 +85,7 @@ private void wrapPushOut(DualityInterface instance, EnumFacing facing,
8585
operation.call(instance, facing);
8686
}
8787
}
88-
88+
8989
@WrapOperation(
9090
method = "pushPattern",
9191
at = @At(
@@ -144,8 +144,8 @@ private TileEntity wrapPushGetTE(World instance, BlockPos bp, Operation<TileEnti
144144
interfaceHost = null;
145145
}
146146

147-
AE2FCIntegrationHelper.setEnumFacingOverride(originalFacing.getOpposite());
148-
AE2FCIntegrationHelper.setInterfaceOverride(
147+
AE2FCInterfaceHelper.setEnumFacingOverride(originalFacing.getOpposite());
148+
AE2FCInterfaceHelper.setInterfaceOverride(
149149
interfaceHost != null ? interfaceHost.getTileEntity() : null);
150150
}
151151

@@ -174,8 +174,8 @@ private TileEntity wrapPushGetTE(World instance, BlockPos bp, Operation<TileEnti
174174
}
175175

176176
if (Platform.isModLoaded("ae2fc")) {
177-
AE2FCIntegrationHelper.setEnumFacingOverride(null);
178-
AE2FCIntegrationHelper.setInterfaceOverride(null);
177+
AE2FCInterfaceHelper.setEnumFacingOverride(null);
178+
AE2FCInterfaceHelper.setInterfaceOverride(null);
179179
}
180180

181181
currentOutputTunnel.set(null);

src/main/resources/mixins.nae2.ifacep2p.json

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
"mixins": [
99
"ifacep2p.shared.DualityAccessor",
1010
"ifacep2p.shared.MixinBlockingTermName",
11-
"ifacep2p.shared.MixinPartP2PTunnel",
1211
"ifacep2p.shared.MixinPushPattern"
1312
],
1413
"client": [],

src/main/resources/mixins.nae2.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
"minVersion": "0.8",
66
"compatibilityLevel": "JAVA_8",
77
"mixins": [
8-
"crafting.patterntransform.MixinCraftingCPUCluster",
9-
"crafting.patterntransform.MixinCraftingGrid"
8+
"core.MixinTunnelConversion",
9+
"core.crafting.patterntransform.MixinCraftingCPUCluster",
10+
"core.crafting.patterntransform.MixinCraftingGrid"
1011
],
1112
"client": [],
1213
"server": []

0 commit comments

Comments
 (0)