diff --git a/dependencies.gradle b/dependencies.gradle index 9c2c83e54..123840310 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -38,6 +38,8 @@ dependencies { compileOnly("org.jetbrains:annotations:26.0.2") + compileOnly("com.github.GTNewHorizons:Postea:1.2.5:dev") + //Uncomment to add thermal expansion + foundation for testing //runtimeOnlyNonPublishable('curse.maven:thermal-foundation-222880:2388753') //runtimeOnlyNonPublishable('curse.maven:thermal-expansion-69163:2388759') @@ -58,6 +60,8 @@ dependencies { exclude module: "Hodgepodge" } + runtimeOnlyNonPublishable("com.github.GTNewHorizons:Postea:1.2.5:dev") + runtimeOnlyNonPublishable("com.github.GTNewHorizons:DuraDisplay:1.4.2:dev") runtimeOnlyNonPublishable('com.github.GTNewHorizons:Baubles-Expanded:2.2.11-GTNH:dev') runtimeOnlyNonPublishable('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') { diff --git a/src/main/java/appeng/core/AppEng.java b/src/main/java/appeng/core/AppEng.java index b398a35ef..e8943005a 100644 --- a/src/main/java/appeng/core/AppEng.java +++ b/src/main/java/appeng/core/AppEng.java @@ -41,6 +41,8 @@ import appeng.services.export.ExportProcess; import appeng.services.export.ForgeExportConfig; import appeng.util.InvTweakSortingModule; import appeng.util.Platform; +import appeng.util.ThEConvertor; +import appeng.util.ae2fcConvertor; import baubles.api.expanded.BaubleExpandedSlots; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; @@ -216,6 +218,14 @@ public final class AppEng { AELog.info("Post Initialization ( ended after " + start.elapsed(TimeUnit.MILLISECONDS) + "ms )"); } + @Mod.EventHandler + public void PostLoad(FMLPostInitializationEvent PostEvent) { + if (Platform.isPosteaLoaded) { + if (Platform.isAE2FCLoaded) ae2fcConvertor.postLoad(); + if (Platform.isThaumicEnergisticsLoaded) ThEConvertor.postLoad(); + } + } + @EventHandler private void handleIMCEvent(final FMLInterModComms.IMCEvent event) { final IMCHandler imcHandler = new IMCHandler(); diff --git a/src/main/java/appeng/util/Platform.java b/src/main/java/appeng/util/Platform.java index edb085fa8..8a780f21a 100644 --- a/src/main/java/appeng/util/Platform.java +++ b/src/main/java/appeng/util/Platform.java @@ -177,6 +177,8 @@ public class Platform { public static final boolean isMultiPartLoaded = Loader.isModLoaded("ForgeMultipart"); public static final boolean isBaublesLoaded = Loader.isModLoaded("Baubles|Expanded"); public static final boolean isBackhandLoaded = Loader.isModLoaded("backhand"); + public static final boolean isPosteaLoaded = Loader.isModLoaded("postea"); + public static final boolean isThaumicEnergisticsLoaded = Loader.isModLoaded("thaumicenergistics"); static { BYTE_LIMIT = new double[10]; @@ -1991,7 +1993,7 @@ public class Platform { } public static NBTTagCompound writeStackNBT(IAEStack stack, NBTTagCompound tag) { - return writeStackNBT(stack, tag, false); + return writeStackNBT(stack, tag, true); } public static NBTTagCompound writeStackNBT(IAEStack stack, NBTTagCompound tag, boolean isModern) { diff --git a/src/main/java/appeng/util/ThEConvertor.java b/src/main/java/appeng/util/ThEConvertor.java new file mode 100644 index 000000000..0857685de --- /dev/null +++ b/src/main/java/appeng/util/ThEConvertor.java @@ -0,0 +1,116 @@ +package appeng.util; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.postea.api.ItemStackReplacementManager; +import com.gtnewhorizons.postea.api.TileEntityReplacementManager; + +import appeng.api.AEApi; +import appeng.api.config.RedstoneMode; +import appeng.api.storage.data.AEStackTypeRegistry; +import appeng.api.storage.data.IAEStackType; + +public final class ThEConvertor { + + private final static String thePart = "thaumicenergistics:part.base", + wireless = "thaumicenergistics:wireless.essentia.terminal"; + + private final static int emitter = 1, terminal = 4, mon = 7, conMon = 8; + private static int thePartID; + + private static final String NBT_KEY_ASPECT_FILTER = "aspect", NBT_KEY_REDSTONE_MODE = "mode", + NBT_KEY_WANTED_AMOUNT = "wantedAmount", NBT_KEY_LOCKED = "Locked", NBT_KEY_TRACKED_ASPECT = "TrackedAspect", + NBT_KEY_OWNER = "Owner"; + + public static void postLoad() { + ItemStackReplacementManager.registerIDResolver(thePart, i -> thePartID = i); + + TileEntityReplacementManager.tileEntityTransformer("BlockCableBus", (tag, world, chunk) -> { + for (int x = 0; x < 7; x++) { + final ForgeDirection side = ForgeDirection.getOrientation(x); + final NBTTagCompound def = tag.getCompoundTag("def:" + side.ordinal()); + final NBTTagCompound extra = tag.getCompoundTag("extra:" + side.ordinal()); + if (!def.hasNoTags() && !extra.hasNoTags()) { + if (!extra.hasKey(NBT_KEY_OWNER)) continue; + + final int currentPartID = def.getInteger("id"); + final int currentPartDamage = def.getInteger("Damage"); + + if (currentPartID != thePartID) continue; + + if (currentPartDamage == emitter) { + extra.setString( + "REDSTONE_EMITTER", + extra.getInteger(NBT_KEY_REDSTONE_MODE) == 1 ? RedstoneMode.LOW_SIGNAL.name() + : RedstoneMode.HIGH_SIGNAL.name()); + + if (extra.hasKey(NBT_KEY_ASPECT_FILTER)) { + final NBTTagCompound config = extra.getCompoundTag("config"); + final NBTTagCompound aspectNbt = new NBTTagCompound(); + + aspectNbt.setString("AspectTag", extra.getString(NBT_KEY_ASPECT_FILTER)); + aspectNbt.setString("StackType", "essentia"); + config.setTag("#0", aspectNbt); + extra.setTag("config", config); + } + + if (!extra.hasKey(AEStackTypeFilter.NBT_FILTERS)) { + final AEStackTypeFilter typeFilters = new AEStackTypeFilter(); + final IAEStackType type = AEStackTypeRegistry.getType("essentia"); + typeFilters.setOnlyEnabled(type); + typeFilters.writeToNBT(extra); + } + + if (extra.hasKey(NBT_KEY_WANTED_AMOUNT)) + extra.setLong("reportingValue", extra.getLong(NBT_KEY_WANTED_AMOUNT)); + + } else if (currentPartDamage == mon || currentPartDamage == conMon) { + if (extra.hasKey(NBT_KEY_TRACKED_ASPECT)) { + final NBTTagCompound aspectNbt = new NBTTagCompound(); + + aspectNbt.setString("AspectTag", extra.getString(NBT_KEY_TRACKED_ASPECT)); + aspectNbt.setString("StackType", "essentia"); + extra.setTag("configuredItem", aspectNbt); + } + + if (extra.hasKey(NBT_KEY_LOCKED)) { + extra.setBoolean("isLocked", extra.getBoolean(NBT_KEY_LOCKED)); + } + } + } + } + + return null; + }); + + ItemStackReplacementManager.addSimpleReplacement( + thePart, + terminal, + AEApi.instance().definitions().parts().terminal().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + thePart, + emitter, + AEApi.instance().definitions().parts().levelEmitter().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + thePart, + mon, + AEApi.instance().definitions().parts().storageMonitor().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + thePart, + conMon, + AEApi.instance().definitions().parts().conversionMonitor().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + wireless, + AEApi.instance().definitions().items().wirelessTerminal().maybeStack(1).get(), + true); + } +} diff --git a/src/main/java/appeng/util/ae2fcConvertor.java b/src/main/java/appeng/util/ae2fcConvertor.java new file mode 100644 index 000000000..ea87a6b59 --- /dev/null +++ b/src/main/java/appeng/util/ae2fcConvertor.java @@ -0,0 +1,103 @@ +package appeng.util; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.postea.api.ItemStackReplacementManager; +import com.gtnewhorizons.postea.api.TileEntityReplacementManager; + +import appeng.api.AEApi; +import appeng.util.item.AEFluidStackType; + +public final class ae2fcConvertor { + + private final static String ae2fcPatternEx = "ae2fc:part_fluid_pattern_terminal_ex", + ae2fcFluidEmitter = "ae2fc:part_fluid_level_emitter", + ae2fcWirelessFluidTerminal = "ae2fc:wireless_fluid_terminal", + ae2fcPattern = "ae2fc:part_fluid_pattern_terminal", ae2fcConvMon = "ae2fc:part_fluid_conversion_monitor", + ae2fcMon = "ae2fc:part_fluid_storage_monitor", ae2fcTerm = "ae2fc:part_fluid_terminal", + ae2fcFluidPacket = "ae2fc:fluid_packet"; + + private static int ae2fcEmitterID, ae2fcMonID, ae2fcConMonID, ae2fcPacketID; + + public static void postLoad() { + ItemStackReplacementManager.registerIDResolver(ae2fcFluidEmitter, i -> ae2fcEmitterID = i); + ItemStackReplacementManager.registerIDResolver(ae2fcMon, i -> ae2fcMonID = i); + ItemStackReplacementManager.registerIDResolver(ae2fcConvMon, i -> ae2fcConMonID = i); + ItemStackReplacementManager.registerIDResolver(ae2fcFluidPacket, i -> ae2fcPacketID = i); + + TileEntityReplacementManager.tileEntityTransformer("BlockCableBus", ((tag, world, chunk) -> { + for (int x = 0; x < 7; x++) { + final ForgeDirection side = ForgeDirection.getOrientation(x); + final NBTTagCompound def = tag.getCompoundTag("def:" + side.ordinal()); + final NBTTagCompound extra = tag.getCompoundTag("extra:" + side.ordinal()); + + if (!def.hasNoTags() && !extra.hasNoTags()) { + final int currentPartID = def.getInteger("id"); + + if (currentPartID == ae2fcEmitterID) { + final NBTTagCompound config = extra.getCompoundTag("config"); + final NBTTagCompound item = config.getCompoundTag("#0"); + final int itemID = item.getInteger("id"); + + if (itemID == ae2fcPacketID) { + final NBTTagCompound packetNBT = item.getCompoundTag("tag"); + final NBTTagCompound fluidStackNBT = packetNBT.getCompoundTag("FluidStack"); + item.setString("FluidName", fluidStackNBT.getString("FluidName")); + item.setString("StackType", AEFluidStackType.FLUID_STACK_TYPE.getId()); + } + + if (!extra.hasKey(AEStackTypeFilter.NBT_FILTERS)) { + final AEStackTypeFilter typeFilters = new AEStackTypeFilter(); + typeFilters.setOnlyEnabled(AEFluidStackType.FLUID_STACK_TYPE); + typeFilters.writeToNBT(extra); + } + } else if ((currentPartID == ae2fcMonID || currentPartID == ae2fcConMonID) + && extra.hasKey("configuredItem")) { + final NBTTagCompound myItem = extra.getCompoundTag("configuredItem"); + if (myItem.hasKey("FluidName")) + myItem.setString("StackType", AEFluidStackType.FLUID_STACK_TYPE.getId()); + } + } + } + + return null; + })); + + // items + ItemStackReplacementManager.addSimpleReplacement( + ae2fcPatternEx, + AEApi.instance().definitions().parts().patternTerminalEx().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + ae2fcFluidEmitter, + AEApi.instance().definitions().parts().levelEmitter().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + ae2fcWirelessFluidTerminal, + AEApi.instance().definitions().items().wirelessTerminal().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + ae2fcPattern, + AEApi.instance().definitions().parts().patternTerminal().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + ae2fcConvMon, + AEApi.instance().definitions().parts().conversionMonitor().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + ae2fcMon, + AEApi.instance().definitions().parts().storageMonitor().maybeStack(1).get(), + true); + + ItemStackReplacementManager.addSimpleReplacement( + ae2fcTerm, + AEApi.instance().definitions().parts().terminal().maybeStack(1).get(), + true); + } +}