diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d16a48c..fddb73b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -44,3 +44,6 @@ jobs: dependencies: | ae2(required){curseforge:223794}{modrinth:XxWD5pD3} projecte(required){curseforge:226410} + ae2wtlib(optional){curseforge:459929}{modrinth:pNabrMMw} + teamprojecte(optional){curseforge:689273} + aecapfix(optional){curseforge:914685}{modrinth:LkfFGNnA} diff --git a/build.gradle.kts b/build.gradle.kts index 8f1f74d..8411321 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -34,6 +34,23 @@ repositories { includeGroup("curse.maven") } } + + maven { + name = "Shedaniel" + url = uri("https://maven.shedaniel.me/") + content { + includeGroup("me.shedaniel.cloth") + includeGroup("dev.architectury") + } + } + + maven { + name = "TheIllusiveC4" + url = uri("https://maven.theillusivec4.top/") + content { + includeGroup("top.theillusivec4.curios") + } + } } minecraft { @@ -70,8 +87,13 @@ dependencies { implementation(fg.deobf(libs.ae2.get())) implementation(fg.deobf(libs.projecte.get())) - implementation(fg.deobf(libs.aecapfix.get())) implementation(fg.deobf(libs.teampe.get())) + implementation(fg.deobf(libs.ae2wtlib.get())) + implementation(fg.deobf(libs.aecapfix.get())) + + runtimeOnly(fg.deobf(libs.curios.get())) + runtimeOnly(fg.deobf(libs.architectury.get())) + runtimeOnly(fg.deobf(libs.cloth.get())) runtimeOnly(fg.deobf(libs.projectex.get())) runtimeOnly(fg.deobf(libs.jei.get())) diff --git a/settings.gradle.kts b/settings.gradle.kts index 21aea58..4f635c1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,14 +12,21 @@ dependencyResolutionManagement { plugin("mixin", "org.spongepowered.mixin").version("0.7.+") plugin("spotless", "com.diffplug.spotless").version("6.23.3") - library("forge", "net.neoforged", "forge").version("1.20.1-47.1.54") + val minecraftVersion = "1.20.1" + + library("forge", "net.neoforged", "forge").version("$minecraftVersion-47.1.54") library("mixin", "org.spongepowered", "mixin").version("0.8.5") library("ae2", "appeng", "appliedenergistics2-forge").version("15.1.0") library("projecte", "curse.maven", "projecte-226410").version("4901949-api-4901951") - library("aecapfix", "curse.maven", "aecapfix-914685").version("5017517") library("teampe", "curse.maven", "team-projecte-689273").version("5313878") + library("ae2wtlib", "curse.maven", "applied-energistics-2-wireless-terminals-459929").version("5217955") + library("aecapfix", "curse.maven", "aecapfix-914685").version("5017517") + + library("curios", "top.theillusivec4.curios", "curios-forge").version("5.9.0+$minecraftVersion") + library("cloth", "me.shedaniel.cloth", "cloth-config-forge").version("11.1.106") + library("architectury", "dev.architectury", "architectury-forge").version("9.1.12") library("projectex", "curse.maven", "project-expansion-579177").version("5232445") library("jade", "curse.maven", "jade-324717").version("5072729") diff --git a/src/main/java/gripe/_90/appliede/AppliedE.java b/src/main/java/gripe/_90/appliede/AppliedE.java index 4021f08..d558994 100644 --- a/src/main/java/gripe/_90/appliede/AppliedE.java +++ b/src/main/java/gripe/_90/appliede/AppliedE.java @@ -54,6 +54,9 @@ import gripe._90.appliede.client.screen.EMCInterfaceScreen; import gripe._90.appliede.client.screen.EMCSetStockAmountScreen; import gripe._90.appliede.client.screen.TransmutationTerminalScreen; +import gripe._90.appliede.integration.Addons; +import gripe._90.appliede.integration.DummyIntegrationItem; +import gripe._90.appliede.integration.ae2wtlib.AE2WTIntegration; import gripe._90.appliede.me.key.EMCKey; import gripe._90.appliede.me.key.EMCKeyType; import gripe._90.appliede.me.misc.LearnAllItemsPacket; @@ -121,6 +124,10 @@ public final class AppliedE { public static final RegistryObject TRANSMUTATION_TERMINAL = ITEMS.register("transmutation_terminal", () -> part(TransmutationTerminalPart.class, TransmutationTerminalPart::new)); public static final RegistryObject LEARNING_CARD = ITEMS.register("learning_card", () -> Upgrades.createUpgradeCardItem(new Item.Properties())); + public static final RegistryObject WIRELESS_TRANSMUTATION_TERMINAL = ITEMS.register("wireless_transmutation_terminal", () -> Addons.AE2WTLIB.isLoaded() + ? AE2WTIntegration.createWirelessTerminalItem() + : new DummyIntegrationItem(new Item.Properties().stacksTo(1), Addons.AE2WTLIB)); + static { ITEMS.register("dummy_emc_item", () -> new Item(new Item.Properties())); @@ -130,6 +137,10 @@ public final class AppliedE { MENU_TYPES.register("emc_import_bus", () -> EMCImportBusPart.MENU); MENU_TYPES.register("transmutation_terminal", () -> TransmutationTerminalMenu.TYPE); + if (Addons.AE2WTLIB.isLoaded()) { + MENU_TYPES.register("wireless_transmutation_terminal", AE2WTIntegration::getWirelessTerminalMenu); + } + TABS.register(MODID, () -> CreativeModeTab.builder() .title(Component.translatable("mod." + MODID)) .icon(() -> EMC_MODULE.get().getDefaultInstance()) @@ -141,6 +152,11 @@ public final class AppliedE { output.accept(EMC_IMPORT_BUS.get()); output.accept(TRANSMUTATION_TERMINAL.get()); output.accept(LEARNING_CARD.get()); + output.accept(WIRELESS_TRANSMUTATION_TERMINAL.get()); + + if (Addons.AE2WTLIB.isLoaded()) { + output.accept(AE2WTIntegration.getChargedTerminal()); + } }) .build()); } @@ -188,6 +204,10 @@ public AppliedE() { registerEMC(AEParts.CABLE_ANCHOR, 32); }); + if (Addons.AE2WTLIB.isLoaded()) { + bus.addListener(AE2WTIntegration::addTerminalToAE2WTLibTab); + } + if (FMLEnvironment.dist.isClient()) { Client.setup(bus); } @@ -227,6 +247,10 @@ private static void setup(IEventBus bus) { TransmutationTerminalMenu.TYPE, TransmutationTerminalScreen::new, "/screens/appliede/transmutation_terminal.json"); + + if (Addons.AE2WTLIB.isLoaded()) { + AE2WTIntegration.Client.initScreen(); + } }); }); diff --git a/src/main/java/gripe/_90/appliede/integration/Addons.java b/src/main/java/gripe/_90/appliede/integration/Addons.java new file mode 100644 index 0000000..cb2a86a --- /dev/null +++ b/src/main/java/gripe/_90/appliede/integration/Addons.java @@ -0,0 +1,27 @@ +package gripe._90.appliede.integration; + +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.loading.LoadingModList; +import net.minecraftforge.fml.loading.moddiscovery.ModInfo; + +public enum Addons { + TEAMPE("teamprojecte"), + AE2WTLIB("ae2wtlib"), + AECAPFIX("aecapfix"); + + private final String modId; + + Addons(String modId) { + this.modId = modId; + } + + public String getModId() { + return modId; + } + + public boolean isLoaded() { + return ModList.get() != null + ? ModList.get().isLoaded(modId) + : LoadingModList.get().getMods().stream().map(ModInfo::getModId).anyMatch(modId::equals); + } +} diff --git a/src/main/java/gripe/_90/appliede/integration/DummyIntegrationItem.java b/src/main/java/gripe/_90/appliede/integration/DummyIntegrationItem.java new file mode 100644 index 0000000..650f1de --- /dev/null +++ b/src/main/java/gripe/_90/appliede/integration/DummyIntegrationItem.java @@ -0,0 +1,31 @@ +package gripe._90.appliede.integration; + +import java.util.List; +import javax.annotation.ParametersAreNonnullByDefault; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import gripe._90.appliede.AppliedE; + +public class DummyIntegrationItem extends Item { + private final Addons addon; + + public DummyIntegrationItem(Properties props, Addons addon) { + super(props); + this.addon = addon; + } + + @ParametersAreNonnullByDefault + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List lines, TooltipFlag flag) { + lines.add(Component.translatable("tooltip." + AppliedE.MODID + ".not_installed." + addon.getModId()) + .withStyle(ChatFormatting.GRAY)); + } +} diff --git a/src/main/java/gripe/_90/appliede/integration/ae2wtlib/AE2WTIntegration.java b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/AE2WTIntegration.java new file mode 100644 index 0000000..fca9214 --- /dev/null +++ b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/AE2WTIntegration.java @@ -0,0 +1,51 @@ +package gripe._90.appliede.integration.ae2wtlib; + +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; + +import appeng.api.config.Actionable; +import appeng.api.features.GridLinkables; +import appeng.init.client.InitScreens; +import appeng.items.tools.powered.WirelessTerminalItem; + +import gripe._90.appliede.AppliedE; +import gripe._90.appliede.integration.Addons; + +public class AE2WTIntegration { + public static Item createWirelessTerminalItem() { + var terminal = new WTTItem(); + GridLinkables.register(terminal, WirelessTerminalItem.LINKABLE_HANDLER); + return terminal; + } + + public static MenuType getWirelessTerminalMenu() { + return WTTMenu.TYPE; + } + + public static ItemStack getChargedTerminal() { + var stack = AppliedE.WIRELESS_TRANSMUTATION_TERMINAL.get().getDefaultInstance(); + + if (stack.getItem() instanceof WirelessTerminalItem terminal) { + terminal.injectAEPower(stack, terminal.getAEMaxPower(stack), Actionable.MODULATE); + return stack; + } + + return stack; + } + + public static void addTerminalToAE2WTLibTab(BuildCreativeModeTabContentsEvent event) { + if (event.getTabKey().location().getNamespace().equals(Addons.AE2WTLIB.getModId())) { + event.accept(AppliedE.WIRELESS_TRANSMUTATION_TERMINAL::get); + event.accept(AE2WTIntegration.getChargedTerminal()); + } + } + + public static class Client { + public static void initScreen() { + InitScreens.register( + WTTMenu.TYPE, WTTScreen::new, "/screens/appliede/wireless_transmutation_terminal.json"); + } + } +} diff --git a/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTItem.java b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTItem.java new file mode 100644 index 0000000..6945eb4 --- /dev/null +++ b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTItem.java @@ -0,0 +1,16 @@ +package gripe._90.appliede.integration.ae2wtlib; + +import org.jetbrains.annotations.NotNull; + +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; + +import de.mari_023.ae2wtlib.terminal.ItemWT; + +public class WTTItem extends ItemWT { + @NotNull + @Override + public MenuType getMenuType(@NotNull ItemStack itemStack) { + return WTTMenu.TYPE; + } +} diff --git a/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTMenu.java b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTMenu.java new file mode 100644 index 0000000..6e730b1 --- /dev/null +++ b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTMenu.java @@ -0,0 +1,40 @@ +package gripe._90.appliede.integration.ae2wtlib; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.MenuType; + +import appeng.api.networking.IGridNode; +import appeng.menu.implementations.MenuTypeBuilder; +import appeng.menu.slot.RestrictedInputSlot; + +import de.mari_023.ae2wtlib.AE2wtlibSlotSemantics; +import de.mari_023.ae2wtlib.wut.ItemWUT; + +import gripe._90.appliede.menu.TransmutationTerminalMenu; + +public class WTTMenu extends TransmutationTerminalMenu { + public static final MenuType TYPE = + MenuTypeBuilder.create(WTTMenu::new, WTTMenuHost.class).build("wireless_transmutation_terminal"); + + public WTTMenu(int id, Inventory ip, WTTMenuHost host) { + super(TYPE, id, ip, host, true); + + var singularitySlot = new RestrictedInputSlot( + RestrictedInputSlot.PlacableItemType.QE_SINGULARITY, + host.getSubInventory(WTTMenuHost.INV_SINGULARITY), + 0); + addSlot(singularitySlot, AE2wtlibSlotSemantics.SINGULARITY); + } + + @Nullable + @Override + public IGridNode getNetworkNode() { + return getHost().getActionableNode(); + } + + boolean isWUT() { + return ((WTTMenuHost) getHost()).getItemStack().getItem() instanceof ItemWUT; + } +} diff --git a/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTMenuHost.java b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTMenuHost.java new file mode 100644 index 0000000..0243c42 --- /dev/null +++ b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTMenuHost.java @@ -0,0 +1,66 @@ +package gripe._90.appliede.integration.ae2wtlib; + +import java.util.function.BiConsumer; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; + +import appeng.api.implementations.blockentities.IViewCellStorage; +import appeng.api.networking.IGrid; +import appeng.items.tools.powered.WirelessTerminalItem; +import appeng.menu.ISubMenu; + +import de.mari_023.ae2wtlib.terminal.WTMenuHost; + +import gripe._90.appliede.AppliedE; +import gripe._90.appliede.me.misc.ITransmutationTerminalHost; + +public class WTTMenuHost extends WTMenuHost implements IViewCellStorage, ITransmutationTerminalHost { + private final IGrid targetGrid; + private boolean shiftToTransmute; + + public WTTMenuHost( + Player player, + @Nullable Integer inventorySlot, + ItemStack is, + BiConsumer returnToMainMenu) { + super(player, inventorySlot, is, returnToMainMenu); + this.targetGrid = ((WirelessTerminalItem) is.getItem()).getLinkedGrid(is, player.level(), null); + readFromNbt(); + } + + @Override + public ItemStack getMainMenuIcon() { + return AppliedE.WIRELESS_TRANSMUTATION_TERMINAL.get().getDefaultInstance(); + } + + @Override + protected void readFromNbt() { + super.readFromNbt(); + shiftToTransmute = getItemStack().getOrCreateTag().getBoolean("shiftToTransmute"); + } + + @Override + public void saveChanges() { + super.saveChanges(); + getItemStack().getOrCreateTag().putBoolean("shiftToTransmute", shiftToTransmute); + } + + @Override + public boolean getShiftToTransmute() { + return shiftToTransmute; + } + + @Override + public void setShiftToTransmute(boolean toggle) { + shiftToTransmute = toggle; + } + + @Nullable + @Override + public IGrid getGrid() { + return targetGrid; + } +} diff --git a/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTScreen.java b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTScreen.java new file mode 100644 index 0000000..9ef4067 --- /dev/null +++ b/src/main/java/gripe/_90/appliede/integration/ae2wtlib/WTTScreen.java @@ -0,0 +1,24 @@ +package gripe._90.appliede.integration.ae2wtlib; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; + +import appeng.client.gui.style.ScreenStyle; +import appeng.client.gui.widgets.BackgroundPanel; + +import de.mari_023.ae2wtlib.wut.CycleTerminalButton; +import de.mari_023.ae2wtlib.wut.IUniversalTerminalCapable; + +import gripe._90.appliede.client.screen.TransmutationTerminalScreen; + +public class WTTScreen extends TransmutationTerminalScreen implements IUniversalTerminalCapable { + public WTTScreen(WTTMenu menu, Inventory playerInventory, Component title, ScreenStyle style) { + super(menu, playerInventory, title, style); + + if (menu.isWUT()) { + addToLeftToolbar(new CycleTerminalButton(btn -> cycleTerminal())); + } + + widgets.add("singularityBackground", new BackgroundPanel(style.getImage("singularityBackground"))); + } +} diff --git a/src/main/java/gripe/_90/appliede/me/misc/EMCInterfaceLogic.java b/src/main/java/gripe/_90/appliede/me/misc/EMCInterfaceLogic.java index 1742b78..7eab64e 100644 --- a/src/main/java/gripe/_90/appliede/me/misc/EMCInterfaceLogic.java +++ b/src/main/java/gripe/_90/appliede/me/misc/EMCInterfaceLogic.java @@ -329,18 +329,13 @@ public boolean matches(AEKey what) { } var grid = mainNode.getGrid(); + var node = mainNode.getNode(); - if (grid == null) { + if (grid == null || node == null) { // client-side, allow everything in order for items to actually display return true; } - var node = mainNode.getNode(); - - if (node == null) { - return false; - } - var uuid = node.getOwningPlayerProfileId(); if (uuid == null) { diff --git a/src/main/java/gripe/_90/appliede/me/service/TeamProjectEHandler.java b/src/main/java/gripe/_90/appliede/me/service/TeamProjectEHandler.java index 279e5b9..bd3b7cb 100644 --- a/src/main/java/gripe/_90/appliede/me/service/TeamProjectEHandler.java +++ b/src/main/java/gripe/_90/appliede/me/service/TeamProjectEHandler.java @@ -7,7 +7,8 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.server.ServerStoppedEvent; -import net.minecraftforge.fml.ModList; + +import gripe._90.appliede.integration.Addons; import cn.leomc.teamprojecte.TPTeam; import cn.leomc.teamprojecte.TeamChangeEvent; @@ -42,7 +43,7 @@ static class Proxy { private Object handler; Proxy() { - if (ModList.get().isLoaded("teamprojecte")) { + if (Addons.TEAMPE.isLoaded()) { handler = new TeamProjectEHandler(); } } diff --git a/src/main/java/gripe/_90/appliede/mixin/Plugin.java b/src/main/java/gripe/_90/appliede/mixin/Plugin.java index 727e864..f8706d4 100644 --- a/src/main/java/gripe/_90/appliede/mixin/Plugin.java +++ b/src/main/java/gripe/_90/appliede/mixin/Plugin.java @@ -7,16 +7,20 @@ import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; -import net.minecraftforge.fml.loading.LoadingModList; -import net.minecraftforge.fml.loading.moddiscovery.ModInfo; +import gripe._90.appliede.integration.Addons; public class Plugin implements IMixinConfigPlugin { @Override public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - return !mixinClassName.contains("aecapfix") - || LoadingModList.get().getMods().stream() - .map(ModInfo::getModId) - .anyMatch("aecapfix"::equals); + if (mixinClassName.contains(Addons.AE2WTLIB.getModId())) { + return Addons.AE2WTLIB.isLoaded(); + } + + if (mixinClassName.contains(Addons.AECAPFIX.getModId())) { + return Addons.AECAPFIX.isLoaded(); + } + + return true; } @Override diff --git a/src/main/java/gripe/_90/appliede/mixin/ae2wtlib/AE2wtlibMixin.java b/src/main/java/gripe/_90/appliede/mixin/ae2wtlib/AE2wtlibMixin.java new file mode 100644 index 0000000..24887a0 --- /dev/null +++ b/src/main/java/gripe/_90/appliede/mixin/ae2wtlib/AE2wtlibMixin.java @@ -0,0 +1,29 @@ +package gripe._90.appliede.mixin.ae2wtlib; + +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.CallbackInfo; + +import de.mari_023.ae2wtlib.AE2wtlib; +import de.mari_023.ae2wtlib.wut.WUTHandler; + +import gripe._90.appliede.AppliedE; +import gripe._90.appliede.integration.ae2wtlib.WTTItem; +import gripe._90.appliede.integration.ae2wtlib.WTTMenu; +import gripe._90.appliede.integration.ae2wtlib.WTTMenuHost; + +@Mixin(AE2wtlib.class) +public abstract class AE2wtlibMixin { + @Inject(method = "onAe2Initialized", at = @At("HEAD"), remap = false) + private static void addWirelessTransmutationTerminal(CallbackInfo ci) { + var terminal = (WTTItem) AppliedE.WIRELESS_TRANSMUTATION_TERMINAL.get(); + WUTHandler.addTerminal( + "transmutation", + terminal::tryOpen, + WTTMenuHost::new, + WTTMenu.TYPE, + terminal, + terminal.getDescriptionId()); + } +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 2f72e47..0d6e522 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -28,7 +28,23 @@ versionRange = "[1.0.1,)" ordering = "AFTER" side = "BOTH" +[[dependencies]] +modId = "ae2wtlib" +type = "optional" +versionRange = "[15,)" +ordering = "AFTER" +side = "BOTH" + [[dependencies]] modId = "teamprojecte" type = "optional" versionRange = "[1.1.3,)" +ordering = "AFTER" +side = "SERVER" + +[[dependencies]] +modId = "aecapfix" +type = "optional" +versionRange = "[0.8,)" +ordering = "AFTER" +side = "SERVER" diff --git a/src/main/resources/appliede.mixins.json b/src/main/resources/appliede.mixins.json index 8e9d9a8..7762c59 100644 --- a/src/main/resources/appliede.mixins.json +++ b/src/main/resources/appliede.mixins.json @@ -6,6 +6,7 @@ "refmap": "appliede.refmap.json", "plugin": "gripe._90.appliede.mixin.Plugin", "mixins": [ + "ae2wtlib.AE2wtlibMixin", "aecapfix.EMCInterfacePartMixin", "main.P2PTunnelAttunementAccessor", "main.TransmutationOfflineAccessor", diff --git a/src/main/resources/assets/ae2/screens/appliede/wireless_transmutation_terminal.json b/src/main/resources/assets/ae2/screens/appliede/wireless_transmutation_terminal.json new file mode 100644 index 0000000..f7764fe --- /dev/null +++ b/src/main/resources/assets/ae2/screens/appliede/wireless_transmutation_terminal.json @@ -0,0 +1,6 @@ +{ + "includes": [ + "transmutation_terminal.json", + "../wtlib/universal_terminal_with_viewcells.json" + ] +} diff --git a/src/main/resources/assets/appliede/lang/en_us.json b/src/main/resources/assets/appliede/lang/en_us.json index 2012be8..77c360c 100644 --- a/src/main/resources/assets/appliede/lang/en_us.json +++ b/src/main/resources/assets/appliede/lang/en_us.json @@ -7,6 +7,8 @@ "item.appliede.emc_import_bus": "ME Transmutation Import Bus", "item.appliede.learning_card": "Alchemical Mastery Card", "item.appliede.transmutation_terminal": "ME Transmutation Terminal", + "item.appliede.wireless_transmutation_terminal": "Wireless Transmutation Terminal", + "item.appliede.dummy_emc_item": "Dummy EMC Item", "item.appliede.transmutation_pattern": "Transmutation Pattern", "gui.appliede.terminal": "Transmutation Terminal", "gui.appliede.are_you_sure": "Are you sure?", @@ -19,5 +21,6 @@ "key.appliede.emc": "EMC", "key.appliede.emc_tiered": "EMC^%s", "tooltip.appliede.transmutable": "Transmutable from EMC (Shift+Click/Scroll)", - "tooltip.appliede.owner": "Owner: %s" + "tooltip.appliede.owner": "Owner: %s", + "tooltip.appliede.not_installed.ae2wtlib": "AE2WTLib not installed." } diff --git a/src/main/resources/assets/appliede/models/item/wireless_transmutation_terminal.json b/src/main/resources/assets/appliede/models/item/wireless_transmutation_terminal.json new file mode 100644 index 0000000..1d62eb0 --- /dev/null +++ b/src/main/resources/assets/appliede/models/item/wireless_transmutation_terminal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "appliede:item/wireless_transmutation_terminal" + } +} diff --git a/src/main/resources/assets/appliede/textures/item/wireless_transmutation_terminal.png b/src/main/resources/assets/appliede/textures/item/wireless_transmutation_terminal.png new file mode 100644 index 0000000..3fdd5b3 Binary files /dev/null and b/src/main/resources/assets/appliede/textures/item/wireless_transmutation_terminal.png differ diff --git a/src/main/resources/data/appliede/recipes/ae2wtlib/combine_at.json b/src/main/resources/data/appliede/recipes/ae2wtlib/combine_at.json new file mode 100644 index 0000000..a070cd0 --- /dev/null +++ b/src/main/resources/data/appliede/recipes/ae2wtlib/combine_at.json @@ -0,0 +1,24 @@ +{ + "type": "forge:conditional", + "recipes": [ + { + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "recipe": { + "type": "ae2wtlib:combine", + "terminalA": { + "item": "ae2wtlib:wireless_pattern_access_terminal" + }, + "terminalB": { + "item": "appliede:wireless_transmutation_terminal" + }, + "terminalAName": "pattern_access", + "terminalBName": "transmutation" + } + } + ] +} diff --git a/src/main/resources/data/appliede/recipes/ae2wtlib/combine_ct.json b/src/main/resources/data/appliede/recipes/ae2wtlib/combine_ct.json new file mode 100644 index 0000000..51e4a81 --- /dev/null +++ b/src/main/resources/data/appliede/recipes/ae2wtlib/combine_ct.json @@ -0,0 +1,24 @@ +{ + "type": "forge:conditional", + "recipes": [ + { + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "recipe": { + "type": "ae2wtlib:combine", + "terminalA": { + "item": "ae2:wireless_crafting_terminal" + }, + "terminalB": { + "item": "appliede:wireless_transmutation_terminal" + }, + "terminalAName": "crafting", + "terminalBName": "transmutation" + } + } + ] +} diff --git a/src/main/resources/data/appliede/recipes/ae2wtlib/combine_et.json b/src/main/resources/data/appliede/recipes/ae2wtlib/combine_et.json new file mode 100644 index 0000000..aa487c8 --- /dev/null +++ b/src/main/resources/data/appliede/recipes/ae2wtlib/combine_et.json @@ -0,0 +1,24 @@ +{ + "type": "forge:conditional", + "recipes": [ + { + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "recipe": { + "type": "ae2wtlib:combine", + "terminalA": { + "item": "ae2wtlib:wireless_pattern_encoding_terminal" + }, + "terminalB": { + "item": "appliede:wireless_transmutation_terminal" + }, + "terminalAName": "pattern_encoding", + "terminalBName": "transmutation" + } + } + ] +} diff --git a/src/main/resources/data/appliede/recipes/ae2wtlib/upgrade_transmutation.json b/src/main/resources/data/appliede/recipes/ae2wtlib/upgrade_transmutation.json new file mode 100644 index 0000000..2276ee5 --- /dev/null +++ b/src/main/resources/data/appliede/recipes/ae2wtlib/upgrade_transmutation.json @@ -0,0 +1,20 @@ +{ + "type": "forge:conditional", + "recipes": [ + { + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "recipe": { + "type": "ae2wtlib:upgrade", + "terminal": { + "item": "appliede:wireless_transmutation_terminal" + }, + "terminalName": "transmutation" + } + } + ] +} diff --git a/src/main/resources/data/appliede/recipes/ae2wtlib/wireless_transmutation_terminal.json b/src/main/resources/data/appliede/recipes/ae2wtlib/wireless_transmutation_terminal.json new file mode 100644 index 0000000..7f651ba --- /dev/null +++ b/src/main/resources/data/appliede/recipes/ae2wtlib/wireless_transmutation_terminal.json @@ -0,0 +1,31 @@ +{ + "type": "forge:conditional", + "recipes": [ + { + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "recipe": { + "type": "minecraft:crafting_shaped", + "pattern": ["R", "T", "C"], + "key": { + "R": { + "item": "ae2:wireless_receiver" + }, + "T": { + "item": "appliede:transmutation_terminal" + }, + "C": { + "item": "ae2:dense_energy_cell" + } + }, + "result": { + "item": "appliede:wireless_transmutation_terminal" + } + } + } + ] +}