From 460938c7f2e8f3859386cac2c986c02cf2c994d6 Mon Sep 17 00:00:00 2001 From: njoyshadow Date: Mon, 27 Apr 2026 00:35:49 +0900 Subject: [PATCH] feat: update changelog for version 15.0.3 and enhance wireless terminal support --- CHANGELOG.md | 9 ++- TODO.md | 3 + gradle.properties | 8 +-- .../extendedterminal/ExtendedTerminal.java | 3 +- .../extendedterminal/init/wt/WTInits.java | 33 +++++----- .../extendedterminal/init/wt/WTItems.java | 2 - .../handler/ETCraftingRecipeTransfer.java | 2 +- .../ETCraftingRecipeTransferHelper.java | 62 +++++++++++++++++-- .../menu/extendedterminal/ETTerminalMenu.java | 22 +++++++ .../assets/extendedterminal/lang/en_us.json | 2 +- 10 files changed, 115 insertions(+), 31 deletions(-) create mode 100644 TODO.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d19c96..eb43092 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ # CHANGELOG +## Version Update +- Require `Myotus` version to 15.0.7 + +## Features +- Extended Wireless Terminal support `Quantum Bridge Card` + ## Bug Fixes -- fix crash when open extended crafting guideme page \ No newline at end of file +- fix JEI missingSlot miss match in shapeless crafting recipe +- Fixed AE2WTLib Wireless Universal Terminal recipes to preserve Myotus upgrade storage data diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..49127ee --- /dev/null +++ b/TODO.md @@ -0,0 +1,3 @@ +1. et wireless terminal quantum link 구현하기 +2. Myotus업그레이드인 ITerminalUpgradeCard를 터미널에 SideUpgradePanel에 장착한 상태로 다른 wireless terminal이랑 합쳐서 universal terminal로 만들면 SideUpgradePanel에 아무것도 안남앙있음 +3. jei의 missingSlot 잘 못 표기 되고 있음. ae2wtlib에 wct를 잘 찾아보고 또는 CraftingTermMenu를 잘 찾아보고 뭐가 다른지 고쳐줘 \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index cb5e3ae..84916e3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ mod_id=extendedterminal mod_name=Extended Terminal mod_license=GNU LGPL 3.0 mod_loader=forge -mod_version=15.0.2 +mod_version=15.0.3 mod_group_id=me.myogoo java_version=17 mod_version_type=beta @@ -19,8 +19,8 @@ mod_version_type=beta mod_authors=NJoyShadow mod_description=Add some terminal like extended crafting -Myotus_version=15.0.3 -myotus_version_range=[15.0.3,) +Myotus_version=15.0.7 +myotus_version_range=[15.0.7,) AE2_version=15.4.10 AE2WTLib_version=15.3.3-forge @@ -37,7 +37,7 @@ Cucumber_version=7.0.14 ExtendedCrafting_version=6.0.9 guideME_version=20.1.11 -itemListMod=emi +itemListMod=jei enable_avaritia=re enable_excrafting=ex diff --git a/src/main/java/me/myogoo/extendedterminal/ExtendedTerminal.java b/src/main/java/me/myogoo/extendedterminal/ExtendedTerminal.java index edc0ee2..09792a4 100644 --- a/src/main/java/me/myogoo/extendedterminal/ExtendedTerminal.java +++ b/src/main/java/me/myogoo/extendedterminal/ExtendedTerminal.java @@ -10,7 +10,6 @@ import me.myogoo.myotus.api.annotation.wt.AE2WTLib; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @@ -36,7 +35,7 @@ public ExtendedTerminal() { if (MyotusAPI.get().modIntegrationManager().isLoaded(AE2WTLib.class)) { WTItems.register(); WTMenus.register(); - modEventBus.addListener(EventPriority.LOWEST,WTInits::init); + WTInits.registerTerminal(); } MinecraftForge.EVENT_BUS.register(this); diff --git a/src/main/java/me/myogoo/extendedterminal/init/wt/WTInits.java b/src/main/java/me/myogoo/extendedterminal/init/wt/WTInits.java index 60daa3a..5743e62 100644 --- a/src/main/java/me/myogoo/extendedterminal/init/wt/WTInits.java +++ b/src/main/java/me/myogoo/extendedterminal/init/wt/WTInits.java @@ -1,23 +1,24 @@ package me.myogoo.extendedterminal.init.wt; -import appeng.api.features.GridLinkables; -import appeng.items.tools.powered.WirelessTerminalItem; -import de.mari_023.ae2wtlib.wut.WUTHandler; import me.myogoo.extendedterminal.me.host.ETWTHost; +import me.myogoo.extendedterminal.menu.ETMenuType; import me.myogoo.extendedterminal.menu.extendedterminal.wt.ETWTMenu; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegisterEvent; +import me.myogoo.myotus.api.wt.AddTerminalEvent; -public class WTInits { - public static void init(RegisterEvent event) { - if (event.getRegistryKey().equals(ForgeRegistries.Keys.ITEMS)) { - WUTHandler - .addTerminal("wireless_et_terminal", - WTItems.WIRELESS_ET_TERMINAL.asItem()::tryOpen, - ETWTHost::new, - ETWTMenu.TYPE, - WTItems.WIRELESS_ET_TERMINAL.asItem()); - } +public final class WTInits { + private WTInits() { + } + + public static synchronized void registerTerminal() { + AddTerminalEvent.register(event -> { + var terminalName = ETMenuType.ET_TERMINAL.getWTIdAsString(); + event.addTerminal( + terminalName, + ETWTHost::new, + ETWTMenu.TYPE, + WTItems.WIRELESS_ET_TERMINAL.asItem(), + terminalName, + "item.extendedterminal.wireless_et_terminal"); + }); } } diff --git a/src/main/java/me/myogoo/extendedterminal/init/wt/WTItems.java b/src/main/java/me/myogoo/extendedterminal/init/wt/WTItems.java index f2a879b..3be4c09 100644 --- a/src/main/java/me/myogoo/extendedterminal/init/wt/WTItems.java +++ b/src/main/java/me/myogoo/extendedterminal/init/wt/WTItems.java @@ -7,8 +7,6 @@ import me.myogoo.extendedterminal.ExtendedTerminal; import me.myogoo.extendedterminal.init.ETItems; import me.myogoo.extendedterminal.item.wtitem.ETWTItem; -import me.myogoo.myotus.api.annotation.wt.AE2WTLib; -import me.myogoo.myotus.util.mod.ModIntegrationManager; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; diff --git a/src/main/java/me/myogoo/extendedterminal/integration/jei/extendedterminal/handler/ETCraftingRecipeTransfer.java b/src/main/java/me/myogoo/extendedterminal/integration/jei/extendedterminal/handler/ETCraftingRecipeTransfer.java index bf3afcb..a39d2ed 100644 --- a/src/main/java/me/myogoo/extendedterminal/integration/jei/extendedterminal/handler/ETCraftingRecipeTransfer.java +++ b/src/main/java/me/myogoo/extendedterminal/integration/jei/extendedterminal/handler/ETCraftingRecipeTransfer.java @@ -63,7 +63,7 @@ public RecipeType getRecipeType() { boolean craftMissing = AbstractContainerScreen.hasControlDown(); List inputSlots = recipeSlots.getSlotViews(RecipeIngredientRole.INPUT); - var slotToIngredientMap = ETCraftingRecipeTransferHelper.getGuiSlotToIngredientMap(menu, recipe); + var slotToIngredientMap = ETCraftingRecipeTransferHelper.getJeiDisplaySlotToIngredientMap(recipe); var missingSlots = menu.findMissingIngredients(slotToIngredientMap); if (!slotToIngredientMap.isEmpty() && missingSlots.missingSlots().size() == slotToIngredientMap.size()) { var missingSlotViews = missingSlots.missingSlots().stream() diff --git a/src/main/java/me/myogoo/extendedterminal/integration/module/extendedterminal/ETCraftingRecipeTransferHelper.java b/src/main/java/me/myogoo/extendedterminal/integration/module/extendedterminal/ETCraftingRecipeTransferHelper.java index 7f0a120..4801c97 100644 --- a/src/main/java/me/myogoo/extendedterminal/integration/module/extendedterminal/ETCraftingRecipeTransferHelper.java +++ b/src/main/java/me/myogoo/extendedterminal/integration/module/extendedterminal/ETCraftingRecipeTransferHelper.java @@ -7,15 +7,13 @@ import appeng.menu.me.common.GridInventoryEntry; import me.myogoo.extendedterminal.menu.extendedterminal.ETTerminalMenu; import net.minecraft.core.NonNullList; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.ShapedRecipe; -import org.jetbrains.annotations.Nullable; import java.util.Comparator; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; public final class ETCraftingRecipeTransferHelper { @@ -30,7 +28,7 @@ public static Map getGuiSlotToIngredientMap(ETTerminalMenu int gridWidth = menu.getCraftingGridWidth(); int recipeWidth = recipe instanceof ShapedRecipe shapedRecipe ? shapedRecipe.getWidth() : gridWidth; - var result = new HashMap(ingredients.size()); + var result = new LinkedHashMap(ingredients.size()); for (int i = 0; i < ingredients.size(); i++) { int guiSlot = (i / recipeWidth) * gridWidth + (i % recipeWidth); var ingredient = ingredients.get(i); @@ -41,6 +39,62 @@ public static Map getGuiSlotToIngredientMap(ETTerminalMenu return result; } + public static Map getJeiDisplaySlotToIngredientMap(CraftingRecipe recipe) { + var ingredients = recipe.getIngredients(); + + int width, height; + if (recipe instanceof ShapedRecipe shapedRecipe) { + width = shapedRecipe.getWidth(); + height = shapedRecipe.getHeight(); + } else { + if (ingredients.size() > 4) { + width = height = 3; + } else if (ingredients.size() > 1) { + width = height = 2; + } else { + width = height = 1; + } + } + + var result = new LinkedHashMap(ingredients.size()); + for (int i = 0; i < ingredients.size(); i++) { + int guiSlot = getCraftingIndex(i, width, height); + var ingredient = ingredients.get(i); + if (!ingredient.isEmpty()) { + result.put(guiSlot, ingredient); + } + } + return result; + } + + private static int getCraftingIndex(int i, int width, int height) { + int index; + if (width == 1) { + if (height == 3) { + index = (i * 3) + 1; + } else if (height == 2) { + index = (i * 3) + 1; + } else { + index = 4; + } + } else if (height == 1) { + index = i + 3; + } else if (width == 2) { + index = i; + if (i > 1) { + index++; + if (i > 3) { + index++; + } + } + } else if (height == 2) { + index = i + 3; + } else { + index = i; + } + return index; + } + public static void performTransfer(ETTerminalMenu menu, CraftingRecipe recipe, boolean craftMissing) { var ingredientPriorities = EncodingHelper.getIngredientPriorities(menu, ENTRY_COMPARATOR); diff --git a/src/main/java/me/myogoo/extendedterminal/menu/extendedterminal/ETTerminalMenu.java b/src/main/java/me/myogoo/extendedterminal/menu/extendedterminal/ETTerminalMenu.java index e8a2d54..12b8d3a 100644 --- a/src/main/java/me/myogoo/extendedterminal/menu/extendedterminal/ETTerminalMenu.java +++ b/src/main/java/me/myogoo/extendedterminal/menu/extendedterminal/ETTerminalMenu.java @@ -24,6 +24,7 @@ import me.myogoo.extendedterminal.menu.slot.ETCraftingBaseSlot; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.inventory.DataSlot; @@ -253,6 +254,27 @@ public void doAction(ServerPlayer player, InventoryAction action, int slot, long super.doAction(player, action, slot, id); } + @Override + public ItemStack quickMoveStack(Player player, int idx) { + if (isServerSide() && idx >= 0 && idx < this.slots.size() && this.getSlot(idx) == this.anvilOutputSlot) { + ItemStack before = this.anvilOutputSlot.getItem().copy(); + if (!before.isEmpty() && this.anvilOutputSlot.mayPickup(player)) { + int beforeCount = before.getCount(); + super.quickMoveStack(player, idx); + + ItemStack after = this.anvilOutputSlot.getItem(); + int afterCount = after.isEmpty() ? 0 : after.getCount(); + if (afterCount < beforeCount) { + ItemStack taken = before.copy(); + taken.setCount(beforeCount - afterCount); + this.anvilOutputSlot.onTake(player, taken); + } + return ItemStack.EMPTY; + } + } + return super.quickMoveStack(player, idx); + } + private void updateCraftingOutput(boolean forceUpdate) { if (checkCraftingOnlyActive()) { return; diff --git a/src/main/resources/assets/extendedterminal/lang/en_us.json b/src/main/resources/assets/extendedterminal/lang/en_us.json index 8a5c90d..08f66eb 100644 --- a/src/main/resources/assets/extendedterminal/lang/en_us.json +++ b/src/main/resources/assets/extendedterminal/lang/en_us.json @@ -3,7 +3,7 @@ "item.extendedterminal.et_terminal": "Extended Terminal", "item.extendedterminal.wireless_et_terminal": "Wireless Extended Terminal", - "key.ae2.wireless_wireless_et_terminal_terminal": "Wireless Extended Terminal", + "key.ae2.wireless_et_terminal": "Open Wireless Extended Terminal", "item.extendedterminal.basic_terminal": "Basic Extended Crafting Terminal", "item.extendedterminal.advanced_terminal": "Advanced Extended Crafting Terminal",