util包
This commit is contained in:
parent
6d4f806fcd
commit
f0a22ece19
11
build.gradle
11
build.gradle
|
|
@ -145,6 +145,8 @@ sourceSets.main.java {
|
||||||
include 'com/extendedae_plus/util/RequestedAmountHolder.java'
|
include 'com/extendedae_plus/util/RequestedAmountHolder.java'
|
||||||
// util needed by network payloads (providers listing / upload helpers)
|
// util needed by network payloads (providers listing / upload helpers)
|
||||||
include 'com/extendedae_plus/util/ExtendedAEPatternUploadUtil.java'
|
include 'com/extendedae_plus/util/ExtendedAEPatternUploadUtil.java'
|
||||||
|
// util for wireless terminal discovery used by new payloads
|
||||||
|
include 'com/extendedae_plus/util/WirelessTerminalLocator.java'
|
||||||
|
|
||||||
// content(最小集)
|
// content(最小集)
|
||||||
include 'com/extendedae_plus/content/ClientPatternHighlightStore.java'
|
include 'com/extendedae_plus/content/ClientPatternHighlightStore.java'
|
||||||
|
|
@ -169,6 +171,10 @@ sourceSets.main.java {
|
||||||
include 'com/extendedae_plus/network/OpenProviderUiC2SPacket.java'
|
include 'com/extendedae_plus/network/OpenProviderUiC2SPacket.java'
|
||||||
include 'com/extendedae_plus/network/GlobalToggleProviderModesC2SPacket.java'
|
include 'com/extendedae_plus/network/GlobalToggleProviderModesC2SPacket.java'
|
||||||
include 'com/extendedae_plus/network/UploadEncodedPatternToProviderC2SPacket.java'
|
include 'com/extendedae_plus/network/UploadEncodedPatternToProviderC2SPacket.java'
|
||||||
|
// newly added custom payloads (NeoForge 1.21)
|
||||||
|
include 'com/extendedae_plus/network/OpenCraftFromJeiC2SPacket.java'
|
||||||
|
include 'com/extendedae_plus/network/PickFromWirelessC2SPacket.java'
|
||||||
|
include 'com/extendedae_plus/network/PullFromJeiOrCraftC2SPacket.java'
|
||||||
|
|
||||||
// AE2 mixin:accessor/helpers/autopattern/gui/menu
|
// AE2 mixin:accessor/helpers/autopattern/gui/menu
|
||||||
include 'com/extendedae_plus/mixin/ae2/accessor/**'
|
include 'com/extendedae_plus/mixin/ae2/accessor/**'
|
||||||
|
|
@ -182,6 +188,11 @@ sourceSets.main.java {
|
||||||
// ExtendedAE GUI 混入(右侧外列按钮与翻页),以及其依赖的 NewIcon 类
|
// ExtendedAE GUI 混入(右侧外列按钮与翻页),以及其依赖的 NewIcon 类
|
||||||
include 'com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternProviderMixin.java'
|
include 'com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternProviderMixin.java'
|
||||||
include 'com/extendedae_plus/NewIcon.java'
|
include 'com/extendedae_plus/NewIcon.java'
|
||||||
|
|
||||||
|
// Note: 暂时不编译 Curios 专用宿主/定位器(依赖 ae2wtlib API 的签名差异未完成适配)
|
||||||
|
// include 'com/extendedae_plus/menu/locator/CuriosItemLocator.java'
|
||||||
|
// include 'com/extendedae_plus/menu/host/CuriosWirelessTerminalMenuHost.java'
|
||||||
|
// include 'com/extendedae_plus/menu/host/CuriosWTMenuHost.java'
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,14 @@ public class ModNetwork {
|
||||||
registrar.playToServer(OpenProviderUiC2SPacket.TYPE, OpenProviderUiC2SPacket.STREAM_CODEC, OpenProviderUiC2SPacket::handle);
|
registrar.playToServer(OpenProviderUiC2SPacket.TYPE, OpenProviderUiC2SPacket.STREAM_CODEC, OpenProviderUiC2SPacket::handle);
|
||||||
registrar.playToServer(UploadEncodedPatternToProviderC2SPacket.TYPE, UploadEncodedPatternToProviderC2SPacket.STREAM_CODEC, UploadEncodedPatternToProviderC2SPacket::handle);
|
registrar.playToServer(UploadEncodedPatternToProviderC2SPacket.TYPE, UploadEncodedPatternToProviderC2SPacket.STREAM_CODEC, UploadEncodedPatternToProviderC2SPacket::handle);
|
||||||
// 新增:JEI 中键打开合成界面 & 无线终端拾取方块物品
|
// 新增:JEI 中键打开合成界面 & 无线终端拾取方块物品
|
||||||
registrar.playToServer(OpenCraftFromJeiC2SPacket.TYPE, OpenCraftFromJeiC2SPacket.STREAM_CODEC, OpenCraftFromJeiC2SPacket::handle);
|
registrar.playToServer(com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.TYPE,
|
||||||
registrar.playToServer(PickFromWirelessC2SPacket.TYPE, PickFromWirelessC2SPacket.STREAM_CODEC, PickFromWirelessC2SPacket::handle);
|
com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.STREAM_CODEC,
|
||||||
registrar.playToServer(PullFromJeiOrCraftC2SPacket.TYPE, PullFromJeiOrCraftC2SPacket.STREAM_CODEC, PullFromJeiOrCraftC2SPacket::handle);
|
com.extendedae_plus.network.OpenCraftFromJeiC2SPacket::handle);
|
||||||
|
registrar.playToServer(com.extendedae_plus.network.PickFromWirelessC2SPacket.TYPE,
|
||||||
|
com.extendedae_plus.network.PickFromWirelessC2SPacket.STREAM_CODEC,
|
||||||
|
com.extendedae_plus.network.PickFromWirelessC2SPacket::handle);
|
||||||
|
registrar.playToServer(com.extendedae_plus.network.PullFromJeiOrCraftC2SPacket.TYPE,
|
||||||
|
com.extendedae_plus.network.PullFromJeiOrCraftC2SPacket.STREAM_CODEC,
|
||||||
|
com.extendedae_plus.network.PullFromJeiOrCraftC2SPacket::handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import appeng.api.stacks.GenericStack;
|
||||||
import appeng.items.tools.powered.WirelessTerminalItem;
|
import appeng.items.tools.powered.WirelessTerminalItem;
|
||||||
import appeng.menu.locator.MenuLocators;
|
import appeng.menu.locator.MenuLocators;
|
||||||
import appeng.menu.me.crafting.CraftAmountMenu;
|
import appeng.menu.me.crafting.CraftAmountMenu;
|
||||||
import com.extendedae_plus.menu.locator.CuriosItemLocator;
|
|
||||||
import com.extendedae_plus.util.WirelessTerminalLocator;
|
import com.extendedae_plus.util.WirelessTerminalLocator;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||||
import net.minecraft.network.codec.StreamCodec;
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
|
|
@ -50,15 +49,7 @@ public class OpenCraftFromJeiC2SPacket implements CustomPacketPayload {
|
||||||
var located = WirelessTerminalLocator.find(player);
|
var located = WirelessTerminalLocator.find(player);
|
||||||
if (located.isEmpty()) return;
|
if (located.isEmpty()) return;
|
||||||
|
|
||||||
// 若为 Curios 槽位:跳过 AE2 基类的距离/电量前置校验,直接打开数量界面,
|
// Curios 槽位暂不直接作为菜单宿主处理;仅处理原版手持/背包场景。
|
||||||
// 让菜单与宿主(WirelessTerminalMenuHost)以及 ae2wtlib 自身处理量子卡跨维/跨距逻辑。
|
|
||||||
String curiosSlotId = located.getCuriosSlotId();
|
|
||||||
int curiosIndex = located.getCuriosIndex();
|
|
||||||
if (curiosSlotId != null && curiosIndex >= 0) {
|
|
||||||
int initial = 1;
|
|
||||||
CraftAmountMenu.open(player, new CuriosItemLocator(curiosSlotId, curiosIndex), what, initial);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 非 Curios(主手/副手/背包)仍按原先流程做前置校验,保持行为一致。
|
// 非 Curios(主手/副手/背包)仍按原先流程做前置校验,保持行为一致。
|
||||||
if (!(located.stack.getItem() instanceof WirelessTerminalItem wt)) return;
|
if (!(located.stack.getItem() instanceof WirelessTerminalItem wt)) return;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import appeng.items.tools.powered.WirelessTerminalItem;
|
||||||
import appeng.me.helpers.PlayerSource;
|
import appeng.me.helpers.PlayerSource;
|
||||||
import appeng.menu.locator.MenuLocators;
|
import appeng.menu.locator.MenuLocators;
|
||||||
import appeng.menu.me.crafting.CraftAmountMenu;
|
import appeng.menu.me.crafting.CraftAmountMenu;
|
||||||
import com.extendedae_plus.menu.locator.CuriosItemLocator;
|
|
||||||
import com.extendedae_plus.util.WirelessTerminalLocator;
|
import com.extendedae_plus.util.WirelessTerminalLocator;
|
||||||
import com.extendedae_plus.util.WirelessTerminalLocator.LocatedTerminal;
|
import com.extendedae_plus.util.WirelessTerminalLocator.LocatedTerminal;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||||
|
|
@ -90,18 +89,12 @@ public class PullFromJeiOrCraftC2SPacket implements CustomPacketPayload {
|
||||||
var craftingService = grid.getCraftingService();
|
var craftingService = grid.getCraftingService();
|
||||||
if (!craftingService.isCraftable(what)) return;
|
if (!craftingService.isCraftable(what)) return;
|
||||||
|
|
||||||
String curiosSlotId = located.getCuriosSlotId();
|
var hand = located.getHand();
|
||||||
int curiosIndex = located.getCuriosIndex();
|
int slot = located.getSlotIndex();
|
||||||
if (curiosSlotId != null && curiosIndex >= 0) {
|
if (hand != null) {
|
||||||
CraftAmountMenu.open(player, new CuriosItemLocator(curiosSlotId, curiosIndex), what, 1);
|
CraftAmountMenu.open(player, MenuLocators.forHand(player, hand), what, 1);
|
||||||
} else {
|
} else if (slot >= 0) {
|
||||||
var hand = located.getHand();
|
CraftAmountMenu.open(player, MenuLocators.forInventorySlot(slot), what, 1);
|
||||||
int slot = located.getSlotIndex();
|
|
||||||
if (hand != null) {
|
|
||||||
CraftAmountMenu.open(player, MenuLocators.forHand(player, hand), what, 1);
|
|
||||||
} else if (slot >= 0) {
|
|
||||||
CraftAmountMenu.open(player, MenuLocators.forInventorySlot(slot), what, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,12 +31,15 @@ public class GuiUtil {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
var details = PatternDetailsHelper.decodePattern(pattern, Minecraft.getInstance().level, false);
|
var details = PatternDetailsHelper.decodePattern(pattern, Minecraft.getInstance().level);
|
||||||
if (details == null || details.getOutputs().length == 0) {
|
if (details == null) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
java.util.List<GenericStack> outputs = details.getOutputs();
|
||||||
GenericStack out = details.getOutputs()[0];
|
if (outputs == null || outputs.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
GenericStack out = outputs.get(0);
|
||||||
long amount = out.amount();
|
long amount = out.amount();
|
||||||
long perUnit = out.what().getAmountPerUnit();
|
long perUnit = out.what().getAmountPerUnit();
|
||||||
if (amount <= 0 || perUnit <= 0) {
|
if (amount <= 0 || perUnit <= 0) {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import appeng.items.tools.powered.WirelessCraftingTerminalItem;
|
||||||
import appeng.items.tools.powered.WirelessTerminalItem;
|
import appeng.items.tools.powered.WirelessTerminalItem;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraftforge.fml.ModList;
|
import net.neoforged.fml.ModList;
|
||||||
import top.theillusivec4.curios.api.CuriosApi;
|
import top.theillusivec4.curios.api.CuriosApi;
|
||||||
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
|
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
|
||||||
import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler;
|
import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler;
|
||||||
|
|
@ -93,9 +93,9 @@ public final class WirelessTerminalLocator {
|
||||||
// 3) Curios 饰品槽(若已加载)
|
// 3) Curios 饰品槽(若已加载)
|
||||||
if (ModList.get().isLoaded("curios")) {
|
if (ModList.get().isLoaded("curios")) {
|
||||||
try {
|
try {
|
||||||
var resolved = CuriosApi.getCuriosInventory(player).resolve();
|
var opt = CuriosApi.getCuriosInventory(player);
|
||||||
if (resolved.isPresent()) {
|
if (opt.isPresent()) {
|
||||||
ICuriosItemHandler handler = resolved.get();
|
ICuriosItemHandler handler = opt.get();
|
||||||
for (var entry : handler.getCurios().entrySet()) {
|
for (var entry : handler.getCurios().entrySet()) {
|
||||||
String slotId = entry.getKey();
|
String slotId = entry.getKey();
|
||||||
ICurioStacksHandler stacksHandler = entry.getValue();
|
ICurioStacksHandler stacksHandler = entry.getValue();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user