diff --git a/CHANGELOG.md b/CHANGELOG.md index a5b652f..5fccfad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ All notable changes to this project will be documented in this file. ## Unreleased -- / + +- added ae2wtlib integration ([Mithi83](https://github.com/Mithi83),[Mari023](https://github.com/Mari023)@[#48](https://github.com/AlmostReliable/merequester/pull/48)) ## [1.2.0] - 2025-04-18 diff --git a/build.gradle.kts b/build.gradle.kts index 8c0d6f7..a7c1aa9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,11 +25,14 @@ neoForge { repositories { mavenCentral() + maven("https://modmaven.dev") mavenLocal() } dependencies { - implementation("org.appliedenergistics:appliedenergistics2:${almostgradle.getProperty("aeVersion")}") + api("org.appliedenergistics:appliedenergistics2:${almostgradle.getProperty("aeVersion")}") + compileOnly("de.mari_023:ae2wtlib_api:${almostgradle.getProperty("wtlibVersion")}") { isTransitive = false } + localRuntime("de.mari_023:ae2wtlib:${almostgradle.getProperty("wtlibVersion")}") { isTransitive = false } } tasks.withType { diff --git a/gradle.properties b/gradle.properties index 3029d97..c1ce519 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ modId = merequester modName = ME Requester modVersion = 1.2.0 minecraftVersion = 1.21.1 -neoforgeVersion = 21.1.113 +neoforgeVersion = 21.1.169 # replacement properties modAuthor = Almost Reliable @@ -14,7 +14,8 @@ githubUser = AlmostReliable githubRepo = merequester # mod dependencies -aeVersion = 19.2.7 +aeVersion = 19.2.13 +wtlibVersion = 19.2.5 # settings neoForge.parchment.minecraftVersion = 1.21.1 diff --git a/src/main/java/com/almostreliable/merequester/MERequesterClient.java b/src/main/java/com/almostreliable/merequester/MERequesterClient.java index 945c035..3e68ee3 100644 --- a/src/main/java/com/almostreliable/merequester/MERequesterClient.java +++ b/src/main/java/com/almostreliable/merequester/MERequesterClient.java @@ -2,6 +2,7 @@ import com.almostreliable.merequester.client.RequesterScreen; import com.almostreliable.merequester.client.RequesterTerminalScreen; +import com.almostreliable.merequester.compat.wtlib.WirelessTerminalCompat; import com.almostreliable.merequester.core.Registration; import com.almostreliable.merequester.requester.RequesterMenu; import com.almostreliable.merequester.terminal.RequesterTerminalMenu; @@ -35,6 +36,7 @@ InitScreens. e protected static final int GUI_WIDTH = 195; private static final int GUI_PADDING_X = 8; private static final int GUI_PADDING_Y = 6; - protected static final int GUI_HEADER_HEIGHT = 19; - protected static final int GUI_FOOTER_HEIGHT = 100; + protected static final int GUI_HEADER_HEIGHT = 20; + protected static final int GUI_FOOTER_HEIGHT = 99; private static final int TEXT_MARGIN_X = 2; private static final int TEXT_MAX_WIDTH = 156; @@ -62,7 +62,7 @@ public abstract class AbstractRequesterScreen e private static final Rect2i HEADER_BBOX = new Rect2i(0, 0, GUI_WIDTH, GUI_HEADER_HEIGHT); - private static final Rect2i TEXT_BBOX = new Rect2i(0, 19, GUI_WIDTH, ROW_HEIGHT); + private static final Rect2i TEXT_BBOX = new Rect2i(0, 60, GUI_WIDTH, ROW_HEIGHT); private static final Rect2i REQUEST_BBOX = new Rect2i(0, 38, GUI_WIDTH, ROW_HEIGHT); private final ResourceLocation texture; @@ -134,14 +134,14 @@ public void updateFromMenu(boolean clearData, long requesterId, CompoundTag data @Override @MustBeInvokedByOverriders protected void init() { - imageHeight = GUI_HEADER_HEIGHT + GUI_FOOTER_HEIGHT + rowAmount * ROW_HEIGHT; + imageHeight = GUI_HEADER_HEIGHT + GUI_FOOTER_HEIGHT + rowAmount * ROW_HEIGHT + 1; requestWidgets.forEach(w -> w.preInit(Utils.cast(widgets, WidgetContainerMixin.class).merequester$getWidgets())); super.init(); // clear old widgets because init() is recalled when the terminal resizes requestWidgets.clear(); for (var i = 0; i < rowAmount; i++) { - var requestWidget = new RequestWidget(this, i, GUI_PADDING_X, (i + 1) * ROW_HEIGHT, style); + var requestWidget = new RequestWidget(this, i, GUI_PADDING_X, (i + 1) * ROW_HEIGHT + 1, style); requestWidget.postInit(); requestWidgets.add(requestWidget); } @@ -306,7 +306,7 @@ private RequestSlot createSlot(int index, Request request) { (RequesterReference) request.getRequesterReference(), request.getIndex(), ROW_HEIGHT + GUI_PADDING_X, - (index + 1) * ROW_HEIGHT + 1 + (index + 1) * ROW_HEIGHT + 2 ); slot.setHideAmount(true); slot.setLocked(request.getClientStatus().locksRequest()); diff --git a/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalItem.java b/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalItem.java new file mode 100644 index 0000000..3636c2a --- /dev/null +++ b/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalItem.java @@ -0,0 +1,15 @@ +package com.almostreliable.merequester.compat.wtlib; + +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.MenuType; + +import appeng.menu.locator.ItemMenuHostLocator; +import de.mari_023.ae2wtlib.api.terminal.ItemWT; + +class ReqWirelessTerminalItem extends ItemWT { + + @Override + public MenuType getMenuType(ItemMenuHostLocator itemMenuHostLocator, Player player) { + return ReqWirelessTerminalMenu.TYPE; + } +} \ No newline at end of file diff --git a/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalMenu.java b/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalMenu.java new file mode 100644 index 0000000..f3e2715 --- /dev/null +++ b/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalMenu.java @@ -0,0 +1,65 @@ +package com.almostreliable.merequester.compat.wtlib; + +import com.almostreliable.merequester.Utils; +import com.almostreliable.merequester.terminal.RequesterTerminalMenu; + +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.MenuType; + +import appeng.api.storage.ITerminalHost; +import appeng.api.upgrades.IUpgradeInventory; +import appeng.menu.SlotSemantics; +import appeng.menu.ToolboxMenu; +import appeng.menu.implementations.MenuTypeBuilder; +import appeng.menu.slot.RestrictedInputSlot; +import de.mari_023.ae2wtlib.api.gui.AE2wtlibSlotSemantics; +import de.mari_023.ae2wtlib.api.terminal.ItemWUT; +import de.mari_023.ae2wtlib.api.terminal.WTMenuHost; + +final class ReqWirelessTerminalMenu extends RequesterTerminalMenu { + + static final MenuType TYPE = MenuTypeBuilder + .create(ReqWirelessTerminalMenu::new, ReqWirelessTerminalMenuHost.class) + .build(Utils.getRL(WirelessTerminalCompat.TERMINAL_ID)); + + private final ReqWirelessTerminalMenuHost wrMenuHost; + private final ToolboxMenu toolboxMenu; + + private ReqWirelessTerminalMenu(int id, Inventory playerInventory, ReqWirelessTerminalMenuHost host) { + super(TYPE, id, playerInventory, host); + wrMenuHost = host; + toolboxMenu = new ToolboxMenu(this); + + IUpgradeInventory upgrades = wrMenuHost.getUpgrades(); + for (int i = 0; i < upgrades.size(); i++) { + var slot = new RestrictedInputSlot(RestrictedInputSlot.PlacableItemType.UPGRADES, upgrades, i); + slot.setNotDraggable(); + addSlot(slot, SlotSemantics.UPGRADE); + } + addSlot( + new RestrictedInputSlot( + RestrictedInputSlot.PlacableItemType.QE_SINGULARITY, + wrMenuHost.getSubInventory(WTMenuHost.INV_SINGULARITY), + 0 + ), AE2wtlibSlotSemantics.SINGULARITY + ); + } + + @Override + public void broadcastChanges() { + toolboxMenu.tick(); + super.broadcastChanges(); + } + + boolean isWUT() { + return wrMenuHost.getItemStack().getItem() instanceof ItemWUT; + } + + ITerminalHost getHost() { + return wrMenuHost; + } + + ToolboxMenu getToolbox() { + return toolboxMenu; + } +} \ No newline at end of file diff --git a/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalMenuHost.java b/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalMenuHost.java new file mode 100644 index 0000000..ca24b9e --- /dev/null +++ b/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalMenuHost.java @@ -0,0 +1,18 @@ +package com.almostreliable.merequester.compat.wtlib; + +import net.minecraft.world.entity.player.Player; + +import appeng.menu.ISubMenu; +import appeng.menu.locator.ItemMenuHostLocator; +import de.mari_023.ae2wtlib.api.terminal.ItemWT; +import de.mari_023.ae2wtlib.api.terminal.WTMenuHost; + +import java.util.function.BiConsumer; + +class ReqWirelessTerminalMenuHost extends WTMenuHost { + + ReqWirelessTerminalMenuHost( + ItemWT item, Player player, ItemMenuHostLocator locator, BiConsumer returnToMainMenu) { + super(item, player, locator, returnToMainMenu); + } +} \ No newline at end of file diff --git a/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalScreen.java b/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalScreen.java new file mode 100644 index 0000000..32a23cc --- /dev/null +++ b/src/main/java/com/almostreliable/merequester/compat/wtlib/ReqWirelessTerminalScreen.java @@ -0,0 +1,48 @@ +package com.almostreliable.merequester.compat.wtlib; + +import com.almostreliable.merequester.client.RequesterTerminalScreen; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; + +import appeng.client.gui.style.ScreenStyle; +import appeng.client.gui.widgets.ToolboxPanel; +import de.mari_023.ae2wtlib.api.gui.ScrollingUpgradesPanel; +import de.mari_023.ae2wtlib.api.terminal.IUniversalTerminalCapable; +import de.mari_023.ae2wtlib.api.terminal.WTMenuHost; + +class ReqWirelessTerminalScreen extends RequesterTerminalScreen implements IUniversalTerminalCapable { + + private final ScrollingUpgradesPanel upgradesPanel; + + ReqWirelessTerminalScreen(ReqWirelessTerminalMenu menu, Inventory playerInventory, Component name, ScreenStyle style) { + super(menu, playerInventory, name, style); + if (getMenu().isWUT()) { + addToLeftToolbar(cycleTerminalButton()); + } + + upgradesPanel = addUpgradePanel(widgets, getMenu()); + if (getMenu().getToolbox().isPresent()) { + widgets.add("toolbox", new ToolboxPanel(style, getMenu().getToolbox().getName())); + } + } + + @Override + public void init() { + super.init(); + upgradesPanel.setMaxRows(Math.max(2, rowAmount)); + } + + @Override + public WTMenuHost getHost() { + return (WTMenuHost) getMenu().getHost(); + } + + @Override + public void storeState() {} + + @Override + public boolean keyPressed(int keyCode, int scanCode, int keyPressed) { + return super.keyPressed(keyCode, scanCode, keyPressed) || checkForTerminalKeys(keyCode, scanCode); + } +} \ No newline at end of file diff --git a/src/main/java/com/almostreliable/merequester/compat/wtlib/WirelessTerminalCompat.java b/src/main/java/com/almostreliable/merequester/compat/wtlib/WirelessTerminalCompat.java new file mode 100644 index 0000000..ecf18e5 --- /dev/null +++ b/src/main/java/com/almostreliable/merequester/compat/wtlib/WirelessTerminalCompat.java @@ -0,0 +1,108 @@ +package com.almostreliable.merequester.compat.wtlib; + +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.level.ItemLike; +import net.neoforged.fml.ModList; +import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredItem; +import net.neoforged.neoforge.registries.DeferredRegister; + +import appeng.api.features.GridLinkables; +import appeng.init.client.InitScreens; +import de.mari_023.ae2wtlib.api.gui.Icon; +import de.mari_023.ae2wtlib.api.registration.AddTerminalEvent; + +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +@SuppressWarnings({"NonConstantFieldWithUpperCaseName", "StaticVariableMayNotBeInitialized"}) +public final class WirelessTerminalCompat { + + public static final WirelessTerminalCompat INSTANCE = new WirelessTerminalCompat(); + static final String TERMINAL_ID = "wireless_requester_terminal"; + + public void init(DeferredRegister.Items itemRegistry, DeferredRegister> menuRegistry) { + if (isLoaded()) { + Guard.init(itemRegistry, menuRegistry); + } + } + + public void initClient(RegisterMenuScreensEvent event) { + if (isLoaded()) { + GuardClient.init(event); + } + } + + public void registerCapabilities() { + if (isLoaded()) { + Guard.registerCapabilities(); + } + } + + public Iterable collectItems() { + if (!isLoaded()) { + return List.of(); + } + + return Guard.collectItems(); + } + + private boolean isLoaded() { + return ModList.get().isLoaded("ae2wtlib"); + } + + private WirelessTerminalCompat() {} + + @SuppressWarnings("StaticVariableUsedBeforeInitialization") + static final class Guard { + + @Nullable + static DeferredItem WIRELESS_REQUESTER_TERMINAL; + @Nullable + static DeferredHolder, MenuType> WIRELESS_REQUESTER_TERMINAL_MENU; + + private static void init(DeferredRegister.Items itemRegistry, DeferredRegister> menuRegistry) { + + WIRELESS_REQUESTER_TERMINAL = itemRegistry.registerItem( + TERMINAL_ID, + properties -> new ReqWirelessTerminalItem() + ); + WIRELESS_REQUESTER_TERMINAL_MENU = menuRegistry.register( + TERMINAL_ID, + () -> ReqWirelessTerminalMenu.TYPE + ); + + AddTerminalEvent.register(event -> event.builder( + "requester", ReqWirelessTerminalMenuHost::new, ReqWirelessTerminalMenu.TYPE, WIRELESS_REQUESTER_TERMINAL.get(), + Icon.PATTERN_ACCESS + ) + .addTerminal()); + } + + private static void registerCapabilities() { + assert WIRELESS_REQUESTER_TERMINAL != null; + GridLinkables.register(WIRELESS_REQUESTER_TERMINAL, appeng.items.tools.powered.WirelessTerminalItem.LINKABLE_HANDLER); + } + + private static Iterable collectItems() { + assert WIRELESS_REQUESTER_TERMINAL != null; + return List.of(WIRELESS_REQUESTER_TERMINAL.get()); + } + + private Guard() {} + } + + private static final class GuardClient { + + private static void init(RegisterMenuScreensEvent event) { + InitScreens.register( + event, + ReqWirelessTerminalMenu.TYPE, + ReqWirelessTerminalScreen::new, + String.format("/screens/%s.json", TERMINAL_ID) + ); + } + } +} diff --git a/src/main/java/com/almostreliable/merequester/compat/wtlib/package-info.java b/src/main/java/com/almostreliable/merequester/compat/wtlib/package-info.java new file mode 100644 index 0000000..c17aa3b --- /dev/null +++ b/src/main/java/com/almostreliable/merequester/compat/wtlib/package-info.java @@ -0,0 +1,4 @@ +@NonnullDefault +package com.almostreliable.merequester.compat.wtlib; + +import org.lwjgl.system.NonnullDefault; diff --git a/src/main/java/com/almostreliable/merequester/core/Registration.java b/src/main/java/com/almostreliable/merequester/core/Registration.java index 1c46b8b..e349dde 100644 --- a/src/main/java/com/almostreliable/merequester/core/Registration.java +++ b/src/main/java/com/almostreliable/merequester/core/Registration.java @@ -2,6 +2,7 @@ import com.almostreliable.merequester.ModConstants; import com.almostreliable.merequester.Utils; +import com.almostreliable.merequester.compat.wtlib.WirelessTerminalCompat; import com.almostreliable.merequester.requester.Request; import com.almostreliable.merequester.requester.RequesterBlock; import com.almostreliable.merequester.requester.RequesterBlockEntity; @@ -17,6 +18,7 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; +import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.entity.BlockEntityType; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; @@ -116,6 +118,8 @@ public static void init(IEventBus modEventBus) { modEventBus.addListener(Registration::registerCapabilities); modEventBus.addListener(Tab::initContents); + WirelessTerminalCompat.INSTANCE.init(ITEMS, MENUS); + BLOCKS.register(modEventBus); ITEMS.register(modEventBus); BLOCK_ENTITIES.register(modEventBus); @@ -135,6 +139,8 @@ private static void registerCapabilities(RegisterCapabilitiesEvent event) { REQUESTER_ENTITY.get(), (requester, ctx) -> requester ); + + WirelessTerminalCompat.INSTANCE.registerCapabilities(); } public static final class Tab { @@ -152,6 +158,9 @@ private static void initContents(BuildCreativeModeTabContentsEvent event) { if (event.getTabKey() == TAB_KEY) { event.accept(REQUESTER_BLOCK); event.accept(REQUESTER_TERMINAL); + for (ItemLike item : WirelessTerminalCompat.INSTANCE.collectItems()) { + event.accept(item); + } } } diff --git a/src/main/java/com/almostreliable/merequester/mixin/injects/InitMenuTypesMixin.java b/src/main/java/com/almostreliable/merequester/mixin/injects/InitMenuTypesMixin.java new file mode 100644 index 0000000..b22da00 --- /dev/null +++ b/src/main/java/com/almostreliable/merequester/mixin/injects/InitMenuTypesMixin.java @@ -0,0 +1,21 @@ +package com.almostreliable.merequester.mixin.injects; + +import com.almostreliable.merequester.ModConstants; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.MenuType; + +import appeng.init.InitMenuTypes; +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; + +@Mixin(InitMenuTypes.class) +public abstract class InitMenuTypesMixin { + + @Inject(method = "queueRegistration", at = @At("HEAD"), cancellable = true) + private static void merequester$cancelImplicitReg(ResourceLocation id, MenuType menuType, CallbackInfo ci) { + if (id.getNamespace().equals(ModConstants.MOD_ID)) ci.cancel(); + } +} diff --git a/src/main/java/com/almostreliable/merequester/mixin/injects/package-info.java b/src/main/java/com/almostreliable/merequester/mixin/injects/package-info.java new file mode 100644 index 0000000..6692003 --- /dev/null +++ b/src/main/java/com/almostreliable/merequester/mixin/injects/package-info.java @@ -0,0 +1,4 @@ +@NonnullDefault +package com.almostreliable.merequester.mixin.injects; + +import org.lwjgl.system.NonnullDefault; diff --git a/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/META-INF/neoforge.mods.toml index e582c11..6cb6d07 100644 --- a/src/main/resources/META-INF/neoforge.mods.toml +++ b/src/main/resources/META-INF/neoforge.mods.toml @@ -34,3 +34,10 @@ type = "REQUIRED" versionRange = "[${aeVersion},)" ordering = "AFTER" side = "BOTH" + +[[dependencies."${modId}"]] +modId = "ae2wtlib" +type = "OPTIONAL" +versionRange = "[${wtlibVersion},)" +ordering = "AFTER" +side = "BOTH" diff --git a/src/main/resources/assets/ae2/screens/wireless_requester_terminal.json b/src/main/resources/assets/ae2/screens/wireless_requester_terminal.json new file mode 100644 index 0000000..dba1fe6 --- /dev/null +++ b/src/main/resources/assets/ae2/screens/wireless_requester_terminal.json @@ -0,0 +1,8 @@ +{ + "$schema": "schema.json", + "includes": [ + "requester_terminal.json", + "common/toolbox.json", + "wtlib/universal_terminal.json" + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/merequester/lang/de_de.json b/src/main/resources/assets/merequester/lang/de_de.json index 7bdb259..9636e9f 100644 --- a/src/main/resources/assets/merequester/lang/de_de.json +++ b/src/main/resources/assets/merequester/lang/de_de.json @@ -2,6 +2,7 @@ "itemGroup.merequester.tab": "ME Anforderer", "item.merequester.requester_terminal": "ME Anforderungskonsole", + "item.merequester.wireless_requester_terminal": "Kabellose ME Anforderungskonsole", "block.merequester.requester": "ME Anforderer", "gui.merequester.requester_terminal": "ME Anforderungsk.", diff --git a/src/main/resources/assets/merequester/lang/en_us.json b/src/main/resources/assets/merequester/lang/en_us.json index 14ba68a..6b0cf33 100644 --- a/src/main/resources/assets/merequester/lang/en_us.json +++ b/src/main/resources/assets/merequester/lang/en_us.json @@ -2,8 +2,11 @@ "itemGroup.merequester.tab": "ME Requester", "item.merequester.requester_terminal": "ME Requester Terminal", + "item.merequester.wireless_requester_terminal": "Wireless Requester Terminal", "block.merequester.requester": "ME Requester", + "key.ae2.wireless_requester_terminal": "Open Wireless Requester Terminal", + "gui.merequester.requester_terminal": "ME Requ. Terminal", "gui.merequester.no_requesters": "No ME Requesters found!", diff --git a/src/main/resources/assets/merequester/models/item/wireless_requester_terminal.json b/src/main/resources/assets/merequester/models/item/wireless_requester_terminal.json new file mode 100644 index 0000000..779db13 --- /dev/null +++ b/src/main/resources/assets/merequester/models/item/wireless_requester_terminal.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "merequester:item/wireless_requester_terminal" + } +} diff --git a/src/main/resources/assets/merequester/textures/item/wireless_requester_terminal.png b/src/main/resources/assets/merequester/textures/item/wireless_requester_terminal.png new file mode 100644 index 0000000..77b8656 Binary files /dev/null and b/src/main/resources/assets/merequester/textures/item/wireless_requester_terminal.png differ diff --git a/src/main/resources/data/merequester/advancement/recipes/wireless_requester_terminal.json b/src/main/resources/data/merequester/advancement/recipes/wireless_requester_terminal.json new file mode 100644 index 0000000..1fab45d --- /dev/null +++ b/src/main/resources/data/merequester/advancement/recipes/wireless_requester_terminal.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "merequester:wireless/wireless_requester_terminal" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "merequester:requester_terminal" + ] + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "merequester:wireless/wireless_requester_terminal" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} diff --git a/src/main/resources/data/merequester/recipe/wireless/combine_access.json b/src/main/resources/data/merequester/recipe/wireless/combine_access.json new file mode 100644 index 0000000..4a70d44 --- /dev/null +++ b/src/main/resources/data/merequester/recipe/wireless/combine_access.json @@ -0,0 +1,17 @@ +{ + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "type": "ae2wtlib:combine", + "terminalA": { + "item": "merequester:wireless_requester_terminal" + }, + "terminalB": { + "item": "ae2wtlib:wireless_pattern_access_terminal" + }, + "terminalAName": "requester", + "terminalBName": "pattern_access" +} \ No newline at end of file diff --git a/src/main/resources/data/merequester/recipe/wireless/combine_crafting.json b/src/main/resources/data/merequester/recipe/wireless/combine_crafting.json new file mode 100644 index 0000000..e004086 --- /dev/null +++ b/src/main/resources/data/merequester/recipe/wireless/combine_crafting.json @@ -0,0 +1,17 @@ +{ + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "type": "ae2wtlib:combine", + "terminalA": { + "item": "merequester:wireless_requester_terminal" + }, + "terminalB": { + "item": "ae2:wireless_crafting_terminal" + }, + "terminalAName": "requester", + "terminalBName": "crafting" +} \ No newline at end of file diff --git a/src/main/resources/data/merequester/recipe/wireless/combine_encoding.json b/src/main/resources/data/merequester/recipe/wireless/combine_encoding.json new file mode 100644 index 0000000..b4b3344 --- /dev/null +++ b/src/main/resources/data/merequester/recipe/wireless/combine_encoding.json @@ -0,0 +1,17 @@ +{ + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "type": "ae2wtlib:combine", + "terminalA": { + "item": "merequester:wireless_requester_terminal" + }, + "terminalB": { + "item": "ae2wtlib:wireless_pattern_encoding_terminal" + }, + "terminalAName": "requester", + "terminalBName": "pattern_encoding" +} \ No newline at end of file diff --git a/src/main/resources/data/merequester/recipe/wireless/upgrade_requester.json b/src/main/resources/data/merequester/recipe/wireless/upgrade_requester.json new file mode 100644 index 0000000..66906bd --- /dev/null +++ b/src/main/resources/data/merequester/recipe/wireless/upgrade_requester.json @@ -0,0 +1,13 @@ +{ + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "type": "ae2wtlib:upgrade", + "terminal": { + "item": "merequester:wireless_requester_terminal" + }, + "terminalName": "requester" +} \ No newline at end of file diff --git a/src/main/resources/data/merequester/recipe/wireless/wireless_requester_terminal.json b/src/main/resources/data/merequester/recipe/wireless/wireless_requester_terminal.json new file mode 100644 index 0000000..4b92915 --- /dev/null +++ b/src/main/resources/data/merequester/recipe/wireless/wireless_requester_terminal.json @@ -0,0 +1,28 @@ +{ + "neoforge:conditions": [ + { + "type": "neoforge:mod_loaded", + "modid": "ae2wtlib" + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "a", + "b", + "c" + ], + "key": { + "a": { + "item": "ae2:wireless_receiver" + }, + "b": { + "item": "merequester:requester_terminal" + }, + "c": { + "item": "ae2:dense_energy_cell" + } + }, + "result": { + "id": "merequester:wireless_requester_terminal" + } +} \ No newline at end of file diff --git a/src/main/resources/merequester.mixins.json b/src/main/resources/merequester.mixins.json index e3773d9..8bfff6b 100644 --- a/src/main/resources/merequester.mixins.json +++ b/src/main/resources/merequester.mixins.json @@ -10,5 +10,8 @@ ], "injectors": { "defaultRequire": 1 - } + }, + "mixins": [ + "injects.InitMenuTypesMixin" + ] }