与主分支1.21.1-1.4.3合并

This commit is contained in:
XianYuFish001 2025-09-29 17:34:07 +08:00
parent 0e29be2eff
commit fb9bf5315a
65 changed files with 238 additions and 413 deletions

View File

@ -12,7 +12,7 @@ loaderVersion="[1,)" #mandatory
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
license="All Rights Reserved"
license="LGPL-3.0-or-later"
# A URL to refer people to when problems occur with this mod
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
@ -42,11 +42,10 @@ displayName="ExtendedAE-Plus" #mandatory
#credits="" #optional
# A text field displayed in the mod UI
authors="YourNameHere, OtherNameHere" #optional
authors="GaLicn, XianYuFish001" #optional
# The description text for the mod (multi line!) (#mandatory)
description='''Example mod description.
Newline characters can be used and will be replaced properly.'''
description=''''''
# The [[mixins]] block allows you to declare your mixin config to FML so that it gets loaded.
[[mixins]]
@ -96,6 +95,13 @@ config="extendedae_plus.mixins.json"
ordering="AFTER"
side="BOTH"
[[dependencies.extendedae_plus]]
modId="expandedae"
type="discouraged"
versionRange="*"
ordering="AFTER"
side="BOTH"
# Features are specific properties of the game environment, that you may want to declare you require. This example declares
# that your mod requires GL version 3.2 or higher. Other features will be added. They are side aware so declaring this won't
# stop your mod loading on the server for example.

View File

@ -7,8 +7,7 @@ import appeng.block.AEBaseEntityBlock;
import appeng.blockentity.crafting.CraftingBlockEntity;
import appeng.items.parts.PartModelsHelper;
import com.extendedae_plus.ae.api.storage.InfinityBigIntegerCellHandler;
import com.extendedae_plus.ae.api.storage.InfinityBigIntegerCellInventory;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.init.*;
import com.extendedae_plus.util.storage.InfinityStorageManager;
import com.mojang.logging.LogUtils;
@ -20,6 +19,7 @@ import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.server.ServerStartedEvent;
@ -47,10 +47,10 @@ public class ExtendedAEPlus {
NeoForge.EVENT_BUS.register(this);
NeoForge.EVENT_BUS.addListener(ExtendedAEPlus::onServerStarted);
NeoForge.EVENT_BUS.addListener(ExtendedAEPlus::onServerStopped);
// 注册配置接入自定义的 ModConfigs
modContainer.registerConfig(ModConfig.Type.COMMON, ModConfigs.COMMON_SPEC, "extendedae_plus-common.toml");
modContainer.registerConfig(ModConfig.Type.CLIENT, ModConfigs.CLIENT_SPEC, "extendedae_plus-client.toml");
modContainer.registerConfig(ModConfig.Type.SERVER, ModConfigs.SERVER_SPEC, "extendedae_plus-server.toml");
// 注册配置接入自定义的 EAEPConfig
modContainer.registerConfig(ModConfig.Type.COMMON, EAEPConfig.COMMON_SPEC, "extendedae_plus-common.toml");
modContainer.registerConfig(ModConfig.Type.CLIENT, EAEPConfig.CLIENT_SPEC, "extendedae_plus-client.toml");
modContainer.registerConfig(ModConfig.Type.SERVER, EAEPConfig.SERVER_SPEC, "extendedae_plus-server.toml");
}
public static ResourceLocation id(String path) {

View File

@ -4,15 +4,14 @@ import appeng.items.materials.UpgradeCardItem;
import net.minecraft.core.component.DataComponents;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.component.CustomData;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.item.component.CustomData;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.Nullable;
import java.util.List;

View File

@ -6,7 +6,7 @@ import appeng.menu.implementations.UpgradeableMenu;
import appeng.menu.slot.OptionalFakeSlot;
import com.extendedae_plus.ae.parts.EntitySpeedTickerPart;
import com.extendedae_plus.ae.screen.EntitySpeedTickerScreen;
import com.extendedae_plus.config.ModConfigs;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.init.ModItems;
import com.extendedae_plus.init.ModMenuTypes;
import com.extendedae_plus.util.entitySpeed.ConfigParsingUtils;
@ -133,8 +133,8 @@ public class EntitySpeedTickerMenu extends UpgradeableMenu<EntitySpeedTickerPart
return;
}
String blockId = net.minecraft.core.registries.BuiltInRegistries.BLOCK.getKey(target.getBlockState().getBlock()).toString();
this.multiplier = ConfigParsingUtils.getMultiplierForBlock(blockId, ModConfigs.ENTITY_TICKER_MULTIPLIERS.get());
this.targetBlacklisted = ConfigParsingUtils.isBlockBlacklisted(blockId, ModConfigs.ENTITY_TICKER_BLACK_LIST.get());
this.multiplier = ConfigParsingUtils.getMultiplierForBlock(blockId, EAEPConfig.ENTITY_TICKER_MULTIPLIERS.get());
this.targetBlacklisted = ConfigParsingUtils.isBlockBlacklisted(blockId, EAEPConfig.ENTITY_TICKER_BLACK_LIST.get());
}
/**
@ -157,7 +157,7 @@ public class EntitySpeedTickerMenu extends UpgradeableMenu<EntitySpeedTickerPart
* 客户端刷新界面
*/
private void refreshClientGui() {
if (Minecraft.getInstance().screen instanceof EntitySpeedTickerScreen screen) {
if (Minecraft.getInstance().screen instanceof EntitySpeedTickerScreen<?> screen) {
screen.refreshGui();
}
}

View File

@ -22,7 +22,7 @@ import appeng.parts.PartModel;
import appeng.parts.automation.UpgradeablePart;
import com.extendedae_plus.ExtendedAEPlus;
import com.extendedae_plus.ae.menu.EntitySpeedTickerMenu;
import com.extendedae_plus.config.ModConfigs;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.init.ModItems;
import com.extendedae_plus.init.ModMenuTypes;
import com.extendedae_plus.util.entitySpeed.ConfigParsingUtils;
@ -210,7 +210,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTicka
}
String blockId = BuiltInRegistries.BLOCK.getKey(blockEntity.getBlockState().getBlock()).toString();
if (ConfigParsingUtils.isBlockBlacklisted(blockId, ModConfigs.ENTITY_TICKER_BLACK_LIST.get())) {
if (ConfigParsingUtils.isBlockBlacklisted(blockId, EAEPConfig.ENTITY_TICKER_BLACK_LIST.get())) {
return;
}
@ -268,7 +268,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTicka
*/
private double calculateRequiredPower(int speed, String blockId) {
int energyCardCount = getUpgrades().getInstalledUpgrades(AEItems.ENERGY_CARD);
double multiplier = ConfigParsingUtils.getMultiplierForBlock(blockId, ModConfigs.ENTITY_TICKER_MULTIPLIERS.get());
double multiplier = ConfigParsingUtils.getMultiplierForBlock(blockId, EAEPConfig.ENTITY_TICKER_MULTIPLIERS.get());
return PowerUtils.computeFinalPowerForProduct(speed, energyCardCount) * multiplier;
}
@ -282,7 +282,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTicka
MEStorage storage = getMainNode().getGrid().getStorageService().getInventory();
IActionSource source = IActionSource.ofMachine(this);
boolean appFluxLoaded = ModList.get().isLoaded("appflux");
boolean preferDiskEnergy = appFluxLoaded && ModConfigs.PRIORITIZE_DISK_ENERGY.get();
boolean preferDiskEnergy = appFluxLoaded && EAEPConfig.PRIORITIZE_DISK_ENERGY.get();
// 如果 appflux 存在且优先磁盘能量尝试提取 FE 能量
if (appFluxLoaded && preferDiskEnergy) {

View File

@ -7,6 +7,7 @@ import com.extendedae_plus.ae.definitions.upgrades.EntitySpeedCardItem;
import com.extendedae_plus.ae.menu.EntitySpeedTickerMenu;
import com.extendedae_plus.ae.screen.EntitySpeedTickerScreen;
import com.extendedae_plus.client.render.crafting.EPlusCraftingCubeModelProvider;
import com.extendedae_plus.client.screen.GlobalProviderModesScreen;
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
import com.extendedae_plus.hooks.BuiltInModelHooks;
import com.extendedae_plus.init.ModItems;
@ -61,17 +62,7 @@ public final class ClientProxy {
// 菜单 -> 屏幕 绑定显式 ScreenConstructor避免泛型推断问题
event.register(
ModMenuTypes.NETWORK_PATTERN_CONTROLLER.get(),
new net.minecraft.client.gui.screens.MenuScreens.ScreenConstructor<
com.extendedae_plus.menu.NetworkPatternControllerMenu,
com.extendedae_plus.client.screen.GlobalProviderModesScreen>() {
@Override
public com.extendedae_plus.client.screen.GlobalProviderModesScreen create(
com.extendedae_plus.menu.NetworkPatternControllerMenu menu,
net.minecraft.world.entity.player.Inventory inv,
net.minecraft.network.chat.Component title) {
return new com.extendedae_plus.client.screen.GlobalProviderModesScreen(menu, inv, title);
}
}
GlobalProviderModesScreen::new
);
/**

View File

@ -23,6 +23,7 @@ import org.lwjgl.glfw.GLFW;
import java.util.List;
@EventBusSubscriber(modid = ExtendedAEPlus.MODID, value = Dist.CLIENT)
public final class InputEvents {
private InputEvents() {}
@ -56,7 +57,9 @@ public final class InputEvents {
if (event.getKeyCode() == GLFW.GLFW_KEY_F) {
// 仅当鼠标确实悬停在 JEI 配料上时触发
// 大概会在一格有多个(?)stack的时候出bug, 但是真的会有那种时候吗?
String name = RecipeViewerHelper.getHoveredStacks().getFirst().what().getDisplayName().getString();
GenericStack stack = RecipeViewerHelper.getHoveredStacks().getFirst();
if (stack == null) return;
String name = stack.what().getDisplayName().getString();
// 写入 AE2 终端的搜索框
var screen = Minecraft.getInstance().screen;

View File

@ -30,21 +30,21 @@ public class EPlusCraftingCubeModelProvider
private static final List<Material> MATERIALS = new ArrayList<>();
//将环形边框与基础发光底图放在本模组命名空间
protected static final Material RING_CORNER = texture(ExtendedAEPlus.MODID, "ring_corner");
protected static final Material RING_SIDE_HOR = texture(ExtendedAEPlus.MODID, "ring_side_hor");
protected static final Material RING_SIDE_VER = texture(ExtendedAEPlus.MODID, "ring_side_ver");
protected static final Material LIGHT_BASE = texture(ExtendedAEPlus.MODID, "light_base");
protected static final Material RING_CORNER = texture("ring_corner");
protected static final Material RING_SIDE_HOR = texture("ring_side_hor");
protected static final Material RING_SIDE_VER = texture("ring_side_ver");
protected static final Material LIGHT_BASE = texture("light_base");
// 亮面贴图formed 时使用
protected static final Material ACCELERATOR_4X_LIGHT = texture(ExtendedAEPlus.MODID,
protected static final Material ACCELERATOR_4X_LIGHT = texture(
"4x_accelerator_light");
protected static final Material ACCELERATOR_16X_LIGHT = texture(ExtendedAEPlus.MODID,
protected static final Material ACCELERATOR_16X_LIGHT = texture(
"16x_accelerator_light");
protected static final Material ACCELERATOR_64X_LIGHT = texture(ExtendedAEPlus.MODID,
protected static final Material ACCELERATOR_64X_LIGHT = texture(
"64x_accelerator_light");
protected static final Material ACCELERATOR_256X_LIGHT = texture(ExtendedAEPlus.MODID,
protected static final Material ACCELERATOR_256X_LIGHT = texture(
"256x_accelerator_light");
protected static final Material ACCELERATOR_1024X_LIGHT = texture(ExtendedAEPlus.MODID,
protected static final Material ACCELERATOR_1024X_LIGHT = texture(
"1024x_accelerator_light");
public EPlusCraftingCubeModelProvider(EPlusCraftingUnitType type) {
@ -80,9 +80,9 @@ public class EPlusCraftingCubeModelProvider
};
}
private static Material texture(String namespace, String name) {
private static Material texture(String name) {
var mat = new Material(TextureAtlas.LOCATION_BLOCKS,
ResourceLocation.fromNamespaceAndPath(namespace, "block/crafting/" + name));
ResourceLocation.fromNamespaceAndPath(ExtendedAEPlus.MODID, "block/crafting/" + name));
MATERIALS.add(mat);
return mat;
}

View File

@ -249,8 +249,6 @@ public class ProviderSelectScreen extends Screen {
long id = ids.get(i);
int slots = emptySlots.get(i);
Group g = nameMap.computeIfAbsent(name, k -> new Group());
// if (!i18nKey.isBlank() && !keyMap.containsKey(i18nKey))
// keyMap.put(i18nKey, name);
g.count++;
g.totalSlots += Math.max(0, slots);
// 挑选空位最多的作为代表 id若并列保留先到者

View File

@ -1,8 +1,6 @@
package com.extendedae_plus.compat;
import appeng.client.gui.implementations.PatternProviderScreen;
import appeng.client.gui.widgets.UpgradesPanel;
import com.extendedae_plus.util.ExtendedAELogger;
/**
* AppliedFlux 兼容性处理工具类
@ -18,13 +16,10 @@ public final class AppliedFluxCompat {
*/
public static boolean hasAppliedFluxUpgradePanel(PatternProviderScreen<?> screen) {
// 如果AppliedFlux未加载肯定没有其升级面板
if (!UpgradeSlotCompat.shouldUseLowPriorityMode()) {
return false;
}
return UpgradeSlotCompat.shouldUseLowPriorityMode();
// 如果 AppliedFlux 加载了假设它会添加升级面板
// 这是一个保守的假设避免冲突
return true;
}
/**

View File

@ -1,6 +1,5 @@
package com.extendedae_plus.compat;
import net.neoforged.fml.loading.FMLLoader;
import net.neoforged.fml.ModList;
public final class UpgradeSlotCompat {
@ -35,8 +34,6 @@ public final class UpgradeSlotCompat {
Class.forName("com.glodblock.github.appflux.mixins.MixinPatternProviderScreen");
APPFLUX_PATTERN_PROVIDER_MIXIN_ACTIVE = true;
}
} catch (ClassNotFoundException e) {
APPFLUX_PATTERN_PROVIDER_MIXIN_ACTIVE = false;
} catch (Throwable t) {
APPFLUX_PATTERN_PROVIDER_MIXIN_ACTIVE = false;
}

View File

@ -1,23 +1,25 @@
package com.extendedae_plus.config;
import com.extendedae_plus.util.GetKey;
import net.neoforged.neoforge.common.ModConfigSpec;
public final class ModConfig {
import java.util.List;
public final class EAEPConfig {
// Common 配置
public static final ModConfigSpec COMMON_SPEC;
public static final ModConfigSpec.IntValue PAGE_MULTIPLIER;
public static final ModConfigSpec.BooleanValue OVERRIDE_AE2WT_PICKING;
public static final ModConfigSpec.BooleanValue INDEPENDENT_UPLOADING_BUTTON;
// Client 配置
public static final ModConfigSpec CLIENT_SPEC;
public static final ModConfigSpec.BooleanValue SHOW_ENCODER_PATTERN_PLAYER;
public static final ModConfigSpec.BooleanValue PATTERN_TERMINAL_SHOW_SLOTS_DEFAULT;
public static final ModConfigSpec.BooleanValue PRIORITIZE_DISK_ENERGY;
public static final ModConfigSpec.BooleanValue INDEPENDENT_UPLOADING_BUTTON;
// Server 配置
public static final ModConfigSpec SERVER_SPEC;
public static final ModConfigSpec.BooleanValue NEEDS_UPLOADING_CORE;
public static final ModConfigSpec.BooleanValue PROVIDER_ROUND_ROBIN_ENABLE;
public static final ModConfigSpec.IntValue SMART_SCALING_MAX_MULTIPLIER;
public static final ModConfigSpec.IntValue CRAFTING_PAUSE_THRESHOLD;
@ -30,7 +32,6 @@ public final class ModConfig {
static {
// Common 配置
ModConfigSpec.Builder commonBuilder = new ModConfigSpec.Builder();
commonBuilder.push("common");
PAGE_MULTIPLIER = commonBuilder
.comment(
"扩展样板供应器总槽位容量的倍率",
@ -39,18 +40,16 @@ public final class ModConfig {
)
.defineInRange("pageMultiplier", 1, 1, 64);
OVERRIDE_AE2WT_PICKING = commonBuilder
.translation(new GetKey(GetKey.CONFIG)
.addStr("override_ae2wt_picking").buildRaw())
.comment("是否覆盖AE2WT使用中键从终端选取方块的逻辑",
"开启后选取方块的数量将不被限制在32个",
"(不建议使用,在EMI环境下可能出现奇怪bug)")
"开启后选取方块的数量将不被限制在32个")
.define("overrideAE2WTPicking", false);
commonBuilder.pop();
INDEPENDENT_UPLOADING_BUTTON = commonBuilder
.comment("启用后,在样板编码终端会出现一个独立的按钮用于上传样板")
.define("independentUploadingButton", false);
COMMON_SPEC = commonBuilder.build();
// Client 配置
ModConfigSpec.Builder clientBuilder = new ModConfigSpec.Builder();
clientBuilder.push("client");
SHOW_ENCODER_PATTERN_PLAYER = clientBuilder
.comment(
"是否显示样板编码玩家",
@ -61,12 +60,6 @@ public final class ModConfig {
"样板终端默认是否显示槽位",
"影响进入界面时SlotsRow的默认可见性仅影响客户端显示")
.define("patternTerminalShowSlotsDefault", true);
INDEPENDENT_UPLOADING_BUTTON = builder
.translation(new GetKey(GetKey.CONFIG)
.addStr("independence_uploading_button").buildRaw())
.comment("启用后,在样板编码终端会出现一个独立的按钮用于上传样板")
.define("independentUploadingButton", false);
clientBuilder.pop();
CLIENT_SPEC = clientBuilder.build();
// Server 配置
@ -142,8 +135,11 @@ public final class ModConfig {
)
.define("prioritizeDiskEnergy", true);
serverBuilder.pop();
NEEDS_UPLOADING_CORE = serverBuilder
.comment("启用后, 样板只能被上传到装有上传核心的装配矩阵")
.define("needsUploadingCore", true);
SERVER_SPEC = serverBuilder.build();
}
private ModConfig() {}
private EAEPConfig() {}
}

View File

@ -9,8 +9,6 @@ import appeng.crafting.pattern.AEProcessingPattern;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@ -37,10 +35,10 @@ public final class ScaledProcessingPattern implements IPatternDetails {
) {
this.original = Objects.requireNonNull(original);
this.definition = Objects.requireNonNull(definition);
this.sparseInputs = Collections.unmodifiableList(new ArrayList<>(Objects.requireNonNull(sparseInputs)));
this.sparseOutputs = Collections.unmodifiableList(new ArrayList<>(Objects.requireNonNull(sparseOutputs)));
this.sparseInputs = List.copyOf(Objects.requireNonNull(sparseInputs));
this.sparseOutputs = List.copyOf(Objects.requireNonNull(sparseOutputs));
this.inputs = Objects.requireNonNull(inputs);
this.condensedOutputs = Collections.unmodifiableList(new ArrayList<>(Objects.requireNonNull(condensedOutputs)));
this.condensedOutputs = List.copyOf(Objects.requireNonNull(condensedOutputs));
}
/* -------------------- API 实现 -------------------- */
@ -74,7 +72,7 @@ public final class ScaledProcessingPattern implements IPatternDetails {
@Override
public GenericStack getPrimaryOutput() {
if (!condensedOutputs.isEmpty()) return condensedOutputs.get(0);
if (!condensedOutputs.isEmpty()) return condensedOutputs.getFirst();
return original.getPrimaryOutput();
}

View File

@ -3,7 +3,6 @@ package com.extendedae_plus.content.matrix;
import com.glodblock.github.extendedae.common.me.matrix.ClusterAssemblerMatrix;
import com.glodblock.github.extendedae.common.tileentities.matrix.TileAssemblerMatrixFunction;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
/**
@ -13,7 +12,7 @@ import net.minecraft.world.level.block.state.BlockState;
public class UploadCoreBlockEntity extends TileAssemblerMatrixFunction {
public UploadCoreBlockEntity(BlockPos pos, BlockState state) {
super((BlockEntityType<?>) com.extendedae_plus.init.ModBlockEntities.UPLOAD_CORE_BE.get(), pos, state);
super(com.extendedae_plus.init.ModBlockEntities.UPLOAD_CORE_BE.get(), pos, state);
}
@Override

View File

@ -83,7 +83,6 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
}
}
return ItemInteractionResult.sidedSuccess(level.isClientSide);
} else {
if (te.isLocked()) {
if (!level.isClientSide) {
@ -95,8 +94,8 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
if (!level.isClientSide) {
player.displayClientMessage(Component.literal(te.isMasterMode() ? "模式:主端" : "模式:从端"), true);
}
return ItemInteractionResult.sidedSuccess(level.isClientSide);
}
return ItemInteractionResult.sidedSuccess(level.isClientSide);
}
@Override
@ -120,7 +119,6 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
}
}
return InteractionResult.sidedSuccess(level.isClientSide);
} else {
if (te.isLocked()) {
if (!level.isClientSide) {
@ -132,8 +130,8 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
if (!level.isClientSide) {
player.displayClientMessage(Component.literal(te.isMasterMode() ? "模式:主端" : "模式:从端"), true);
}
return InteractionResult.sidedSuccess(level.isClientSide);
}
return InteractionResult.sidedSuccess(level.isClientSide);
}
@Override

View File

@ -29,14 +29,14 @@ import java.util.Objects;
*/
public class WirelessTransceiverBlockEntity extends AEBaseBlockEntity implements IWirelessEndpoint, IInWorldGridNodeHost {
private IManagedGridNode managedNode;
private final IManagedGridNode managedNode;
private long frequency = 1L;
private boolean masterMode = false;
private boolean locked = false;
private WirelessMasterLink masterLink;
private WirelessSlaveLink slaveLink;
private final WirelessMasterLink masterLink;
private final WirelessSlaveLink slaveLink;
public WirelessTransceiverBlockEntity(BlockPos pos, BlockState state) {
super(ModBlockEntities.WIRELESS_TRANSCEIVER_BE.get(), pos, state);

View File

@ -4,7 +4,8 @@ import appeng.blockentity.crafting.CraftingBlockEntity;
import com.extendedae_plus.ExtendedAEPlus;
import com.extendedae_plus.content.controller.NetworkPatternControllerBlockEntity;
import com.extendedae_plus.content.matrix.UploadCoreBlockEntity;
import appeng.blockentity.crafting.CraftingBlockEntity;
import com.extendedae_plus.content.wireless.WirelessTransceiverBlockEntity;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;

View File

@ -4,9 +4,7 @@ import appeng.block.crafting.CraftingUnitBlock;
import com.extendedae_plus.ExtendedAEPlus;
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
import com.extendedae_plus.content.matrix.UploadCoreBlock;
import appeng.block.crafting.CraftingUnitBlock;
import appeng.blockentity.crafting.CraftingBlockEntity;
import appeng.core.definitions.AEBlockEntities;
import com.extendedae_plus.content.wireless.WirelessTransceiverBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.MapColor;
@ -42,37 +40,27 @@ public final class ModBlocks {
// Crafting Accelerators (reuse MAE2 textures/models)
public static final DeferredBlock<CraftingUnitBlock> ACCELERATOR_4x = BLOCKS.register(
"4x_crafting_accelerator",
() -> {
return new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_4x);
}
() -> new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_4x)
);
public static final DeferredBlock<CraftingUnitBlock> ACCELERATOR_16x = BLOCKS.register(
"16x_crafting_accelerator",
() -> {
return new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_16x);
}
() -> new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_16x)
);
public static final DeferredBlock<CraftingUnitBlock> ACCELERATOR_64x = BLOCKS.register(
"64x_crafting_accelerator",
() -> {
return new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_64x);
}
() -> new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_64x)
);
public static final DeferredBlock<CraftingUnitBlock> ACCELERATOR_256x = BLOCKS.register(
"256x_crafting_accelerator",
() -> {
return new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_256x);
}
() -> new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_256x)
);
public static final DeferredBlock<CraftingUnitBlock> ACCELERATOR_1024x = BLOCKS.register(
"1024x_crafting_accelerator",
() -> {
return new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_1024x);
}
() -> new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_1024x)
);
// 装配矩阵上传核心方块

View File

@ -184,13 +184,11 @@ public final class JeiRuntimeProxy {
if (createMethod != null) {
Object bookmark = createMethod.invoke(null, typed, ingredientManager);
if (bookmark != null) {
list.add((IngredientBookmark) bookmark);
list.add((IngredientBookmark<?>) bookmark);
}
}
}
} catch (Throwable e) {
e.printStackTrace();
}
} catch (Throwable ignored) {}
}
}
}

View File

@ -35,7 +35,7 @@ public class ModJeiPlugin implements IModPlugin {
registration.registerSubtypeInterpreter(
VanillaTypes.ITEM_STACK,
com.extendedae_plus.init.ModItems.ENTITY_SPEED_CARD.get(),
new ISubtypeInterpreter<ItemStack>() {
new ISubtypeInterpreter<>() {
@Override
public @NotNull Object getSubtypeData(@NotNull ItemStack ingredient, @NotNull UidContext context) {
// 返回你想让 JEI 区分子类型的数据这里用 multiplier

View File

@ -3,7 +3,6 @@ package com.extendedae_plus.menu.host;
import appeng.helpers.WirelessTerminalMenuHost;
import appeng.items.tools.powered.WirelessTerminalItem;
import appeng.menu.ISubMenu;
import appeng.menu.locator.ItemMenuHostLocator;
import com.extendedae_plus.menu.locator.CuriosItemLocator;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
@ -25,7 +24,7 @@ public class CuriosWirelessTerminalMenuHost extends WirelessTerminalMenuHost<Wir
int curiosIndex,
java.util.function.BiConsumer<Player, ISubMenu> returnToMainMenu) {
super((WirelessTerminalItem) itemStack.getItem(), player,
(ItemMenuHostLocator) new CuriosItemLocator(curiosSlotId, curiosIndex),
new CuriosItemLocator(curiosSlotId, curiosIndex),
returnToMainMenu);
this.curiosHandler = curiosHandler;
this.curiosIndex = curiosIndex;

View File

@ -32,13 +32,13 @@ public record CuriosItemLocator(String slotId, int index) implements ItemMenuHos
// 0) AE2 原生若是 WirelessTerminalItem先尝试其原生 Host与背包一致
if (it0.getItem() instanceof appeng.items.tools.powered.WirelessTerminalItem wtAe2) {
var aeHost = wtAe2.getMenuHost(player, this, null);
if (aeHost != null && hostInterface.isInstance(aeHost)) {
try { return hostInterface.cast(aeHost); } catch (Throwable t) { }
if (hostInterface.isInstance(aeHost)) {
try { return hostInterface.cast(aeHost); } catch (Throwable ignored) { }
}
if ("appeng.api.storage.ISubMenuHost".equals(hostInterface.getName())) {
var subHost2 = new com.extendedae_plus.menu.host.CuriosWTSubMenuHost2(wtAe2, player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
try { return hostInterface.cast(subHost2); } catch (Throwable t) { }
try { return hostInterface.cast(subHost2); } catch (Throwable ignored) { }
}
}
@ -46,19 +46,19 @@ public record CuriosItemLocator(String slotId, int index) implements ItemMenuHos
if (def0 != null) {
WTMenuHost wtHost = def0.wTMenuHostFactory().create(def0.item(), player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
if (wtHost != null && hostInterface.isInstance(wtHost)) {
try { return hostInterface.cast(wtHost); } catch (Throwable t) { }
if (hostInterface.isInstance(wtHost)) {
try { return hostInterface.cast(wtHost); } catch (Throwable ignored) { }
}
if ("appeng.api.storage.ISubMenuHost".equals(hostInterface.getName())) {
var subHost = new com.extendedae_plus.menu.host.CuriosWTSubMenuHost(def0.item(), player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
try { return hostInterface.cast(subHost); } catch (Throwable t) { }
try { return hostInterface.cast(subHost); } catch (Throwable ignored) { }
}
} else if (it0.getItem() instanceof de.mari_023.ae2wtlib.api.terminal.ItemWT wtItem0) {
if ("appeng.api.storage.ISubMenuHost".equals(hostInterface.getName())) {
var subHost = new com.extendedae_plus.menu.host.CuriosWTSubMenuHost(wtItem0, player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
try { return hostInterface.cast(subHost); } catch (Throwable t) { }
try { return hostInterface.cast(subHost); } catch (Throwable ignored) { }
}
} else {
// 额外兜底尝试使用 WTDefinition.of(it0)可能在 ofOrNull null 时仍可获取
@ -67,9 +67,9 @@ public record CuriosItemLocator(String slotId, int index) implements ItemMenuHos
if (defStrict != null && "appeng.api.storage.ISubMenuHost".equals(hostInterface.getName())) {
var subHost = new com.extendedae_plus.menu.host.CuriosWTSubMenuHost(defStrict.item(), player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
try { return hostInterface.cast(subHost); } catch (Throwable t) { }
try { return hostInterface.cast(subHost); } catch (Throwable ignored) { }
}
} catch (Throwable t) {
} catch (Throwable ignored) {
}
}
@ -86,13 +86,13 @@ public record CuriosItemLocator(String slotId, int index) implements ItemMenuHos
// 0) AE2 原生若是 WirelessTerminalItem先尝试其原生 Host与背包一致
if (it.getItem() instanceof appeng.items.tools.powered.WirelessTerminalItem wtAe2) {
var aeHost = wtAe2.getMenuHost(player, this, null);
if (aeHost != null && hostInterface.isInstance(aeHost)) {
try { return hostInterface.cast(aeHost); } catch (Throwable t) { }
if (hostInterface.isInstance(aeHost)) {
try { return hostInterface.cast(aeHost); } catch (Throwable ignored) { }
}
if ("appeng.api.storage.ISubMenuHost".equals(hostInterface.getName())) {
var subHost2 = new com.extendedae_plus.menu.host.CuriosWTSubMenuHost2(wtAe2, player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
try { return hostInterface.cast(subHost2); } catch (Throwable t) { }
try { return hostInterface.cast(subHost2); } catch (Throwable ignored) { }
}
}
@ -101,14 +101,14 @@ public record CuriosItemLocator(String slotId, int index) implements ItemMenuHos
WTMenuHost wtHost = def.wTMenuHostFactory().create(
def.item(), player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
if (wtHost != null && hostInterface.isInstance(wtHost)) {
try { return hostInterface.cast(wtHost); } catch (Throwable t) { }
if (hostInterface.isInstance(wtHost)) {
try { return hostInterface.cast(wtHost); } catch (Throwable ignored) { }
}
// 桥接 ISubMenuHost
if ("appeng.api.storage.ISubMenuHost".equals(hostInterface.getName())) {
var subHost = new com.extendedae_plus.menu.host.CuriosWTSubMenuHost(def.item(), player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
try { return hostInterface.cast(subHost); } catch (Throwable t) { }
try { return hostInterface.cast(subHost); } catch (Throwable ignored) { }
}
} else {
// 2) def==null但物品是 wtlib ItemWT直接桥接 ISubMenuHost
@ -116,7 +116,7 @@ public record CuriosItemLocator(String slotId, int index) implements ItemMenuHos
if ("appeng.api.storage.ISubMenuHost".equals(hostInterface.getName())) {
var subHost = new com.extendedae_plus.menu.host.CuriosWTSubMenuHost(wtItem, player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
try { return hostInterface.cast(subHost); } catch (Throwable t) { }
try { return hostInterface.cast(subHost); } catch (Throwable ignored) { }
}
} else {
// 再次兜底尝试 WTDefinition.of(it) 强制获取
@ -125,9 +125,9 @@ public record CuriosItemLocator(String slotId, int index) implements ItemMenuHos
if (defStrict2 != null && "appeng.api.storage.ISubMenuHost".equals(hostInterface.getName())) {
var subHost = new com.extendedae_plus.menu.host.CuriosWTSubMenuHost(defStrict2.item(), player, this,
(p, sub) -> MenuOpener.open(MEStorageMenu.WIRELESS_TYPE, p, this));
try { return hostInterface.cast(subHost); } catch (Throwable t) { }
try { return hostInterface.cast(subHost); } catch (Throwable ignored) { }
}
} catch (Throwable t) {
} catch (Throwable ignored) {
}
}
@ -136,15 +136,15 @@ public record CuriosItemLocator(String slotId, int index) implements ItemMenuHos
// 3) 回退AE2 原生无线终端IMenuItem
if (it.getItem() instanceof WirelessTerminalItem) {
if (it.getItem() instanceof IMenuItem guiItem) {
ItemMenuHost menuHost = guiItem.getMenuHost(player, this, null);
if (menuHost != null && hostInterface.isInstance(menuHost)) {
try { return hostInterface.cast(menuHost); } catch (Throwable t) { }
ItemMenuHost<?> menuHost = guiItem.getMenuHost(player, this, null);
if (hostInterface.isInstance(menuHost)) {
try { return hostInterface.cast(menuHost); } catch (Throwable ignored) { }
}
}
} else if (it.getItem() instanceof IMenuItem guiItem) {
ItemMenuHost menuHost = guiItem.getMenuHost(player, this, null);
if (menuHost != null && hostInterface.isInstance(menuHost)) {
try { return hostInterface.cast(menuHost); } catch (Throwable t) { }
ItemMenuHost<?> menuHost = guiItem.getMenuHost(player, this, null);
if (hostInterface.isInstance(menuHost)) {
try { return hostInterface.cast(menuHost); } catch (Throwable ignored) { }
}
}
@ -164,8 +164,7 @@ public record CuriosItemLocator(String slotId, int index) implements ItemMenuHos
ICuriosItemHandler handler = opt.get();
ICurioStacksHandler stacksHandler = handler.getCurios().get(slotId);
if (stacksHandler != null) {
ItemStack s = stacksHandler.getStacks().getStackInSlot(index);
return s;
return stacksHandler.getStacks().getStackInSlot(index);
}
}
} catch (Throwable ignored) {

View File

@ -29,7 +29,7 @@ public class ExtendedAEPlusMixinPlugin implements IMixinConfigPlugin {
if (!isJeiPresent()) {
// Disable all JEI package mixins and any mixins that reference JEI-only helpers
if (mixinClassName.startsWith("com.extendedae_plus.mixin.jei")) return false;
if (mixinClassName.equals("com.extendedae_plus.mixin.ae2.menu.CraftConfirmMenuGoBackMixin")) return false;
return !mixinClassName.equals("com.extendedae_plus.mixin.ae2.menu.CraftConfirmMenuGoBackMixin");
}
return true;
}

View File

@ -1,6 +1,6 @@
package com.extendedae_plus.mixin;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.network.PickFromWirelessC2SPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
@ -27,7 +27,7 @@ public class PickFromWirelessMixin {
@Inject(method = "pickBlock", at = @At("HEAD"), cancellable = true)
private void onPickBlock(CallbackInfo ci) {
if (ModConfig.OVERRIDE_AE2WT_PICKING.getAsBoolean() && eaep$overridePicking())
if (EAEPConfig.OVERRIDE_AE2WT_PICKING.getAsBoolean() && eaep$overridePicking())
ci.cancel();
}

View File

@ -1,7 +1,7 @@
package com.extendedae_plus.mixin.ae2;
import appeng.crafting.CraftingCalculation;
import com.extendedae_plus.config.ModConfigs;
import com.extendedae_plus.config.EAEPConfig;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
@ -16,6 +16,6 @@ public abstract class CraftingCalculationMixin {
// 增大此值可以减少 wait/notify 的频率提升吞吐量但降低响应速度
@ModifyConstant(method = "handlePausing", constant = @Constant(intValue = 100))
private int modifyIncTimeThreshold(int original) {
return ModConfigs.CRAFTING_PAUSE_THRESHOLD.get();
return EAEPConfig.CRAFTING_PAUSE_THRESHOLD.get();
}
}

View File

@ -1,7 +1,7 @@
package com.extendedae_plus.mixin.ae2;
import appeng.crafting.pattern.EncodedPatternItem;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import net.minecraft.ChatFormatting;
import net.minecraft.core.component.DataComponents;
import net.minecraft.network.chat.Component;
@ -21,7 +21,7 @@ public class EncodedPatternItemMixin {
// 客户端 HoverText 显示样板的编码玩家
@Inject(method = "appendHoverText", at = @At("TAIL"))
public void epp$appendHoverText(ItemStack stack, Item.TooltipContext context, List<Component> lines, TooltipFlag advancedTooltips, CallbackInfo ci){
if (ModConfigs.SHOW_ENCODER_PATTERN_PLAYER.get()) {
if (EAEPConfig.SHOW_ENCODER_PATTERN_PLAYER.get()) {
var customData = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY);
var tag = customData.copyTag();
if (tag.contains("encodePlayer")) {

View File

@ -10,7 +10,7 @@ import appeng.crafting.CraftingTreeProcess;
import appeng.crafting.pattern.AEProcessingPattern;
import appeng.me.service.CraftingService;
import com.extendedae_plus.api.SmartDoublingAwarePattern;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.content.ScaledProcessingPattern;
import com.extendedae_plus.util.PatternScaler;
import com.extendedae_plus.util.RequestedAmountHolder;
@ -59,7 +59,7 @@ public abstract class CraftingTreeProcessMixin {
// 根据配置决定是否在 provider 间轮询分配请求量默认开启
long perProvider = 1L;
if (!ModConfig.PROVIDER_ROUND_ROBIN_ENABLE.get()) {
if (!EAEPConfig.PROVIDER_ROUND_ROBIN_ENABLE.get()) {
// 关闭轮询直接使用完整请求量不需要查询 provider 列表
perProvider = requested;
if (perProvider <= 0) perProvider = 1L;

View File

@ -19,7 +19,6 @@ import com.extendedae_plus.network.CraftingMonitorJumpC2SPacket;
import com.extendedae_plus.network.CraftingMonitorOpenProviderC2SPacket;
import com.extendedae_plus.util.GuiUtil;
import com.glodblock.github.extendedae.client.gui.GuiExPatternProvider;
import com.mojang.logging.LogUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;

View File

@ -9,7 +9,6 @@ import com.extendedae_plus.mixin.accessor.AbstractContainerScreenAccessor;
import com.extendedae_plus.mixin.accessor.ScreenAccessor;
import com.extendedae_plus.network.InterfaceAdjustConfigAmountC2SPacket;
import com.glodblock.github.extendedae.client.button.ActionEPPButton;
import com.mojang.logging.LogUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.world.inventory.Slot;
import org.spongepowered.asm.mixin.Mixin;
@ -76,7 +75,7 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
}
// 注册到渲染与交互列表
var accessor = (ScreenAccessor) (Object) this;
var accessor = (ScreenAccessor) this;
if (!accessor.eap$getRenderables().contains(eap$divideBy2Button)) accessor.eap$getRenderables().add(eap$divideBy2Button);
if (!accessor.eap$getChildren().contains(eap$divideBy2Button)) accessor.eap$getChildren().add(eap$divideBy2Button);
if (!accessor.eap$getRenderables().contains(eap$x2Button)) accessor.eap$getRenderables().add(eap$x2Button);
@ -98,7 +97,7 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
if (!eap$isSupportedInterfaceScreen()) {
return;
}
var accessor = (ScreenAccessor) (Object) this;
var accessor = (ScreenAccessor) this;
if (eap$divideBy2Button != null && !accessor.eap$getRenderables().contains(eap$divideBy2Button)) {
accessor.eap$getRenderables().add(eap$divideBy2Button);
accessor.eap$getChildren().add(eap$divideBy2Button);
@ -124,10 +123,10 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
accessor.eap$getChildren().add(eap$x10Button);
}
int curLeft = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getLeftPos();
int curTop = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getTopPos();
int curImgW = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getImageWidth();
int curImgH = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getImageHeight();
int curLeft = ((AbstractContainerScreenAccessor<?>) this).eap$getLeftPos();
int curTop = ((AbstractContainerScreenAccessor<?>) this).eap$getTopPos();
int curImgW = ((AbstractContainerScreenAccessor<?>) this).eap$getImageWidth();
int curImgH = ((AbstractContainerScreenAccessor<?>) this).eap$getImageHeight();
if (curLeft != eap$lastLeftPos || curTop != eap$lastTopPos || curImgW != eap$lastImageWidth || curImgH != eap$lastImageHeight) {
eap$lastLeftPos = curLeft;
eap$lastTopPos = curTop;
@ -144,7 +143,7 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
if (!eap$isSupportedInterfaceScreen()) {
return;
}
Slot hovered = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getHoveredSlot();
Slot hovered = ((AbstractContainerScreenAccessor<?>) this).eap$getHoveredSlot();
var screen = (AEBaseScreen<?>) (Object) this;
var menu = screen.getMenu();
if (!(menu instanceof appeng.menu.implementations.InterfaceMenu interfaceMenu)) {
@ -217,9 +216,9 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
@Unique
private void eap$relayoutButtons() {
try {
int leftPos = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getLeftPos();
int topPos = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getTopPos();
int imageWidth = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getImageWidth();
int leftPos = ((AbstractContainerScreenAccessor<?>) this).eap$getLeftPos();
int topPos = ((AbstractContainerScreenAccessor<?>) this).eap$getTopPos();
int imageWidth = ((AbstractContainerScreenAccessor<?>) this).eap$getImageWidth();
int bx = leftPos + imageWidth + 1;
int by = topPos + 70;
int spacing = 22;
@ -238,7 +237,7 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
if (!(((Object) this) instanceof InterfaceScreen)) {
return;
}
Slot hovered = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getHoveredSlot();
Slot hovered = ((AbstractContainerScreenAccessor<?>) this).eap$getHoveredSlot();
if (hovered == null) {
return;
}

View File

@ -2,8 +2,7 @@ package com.extendedae_plus.mixin.ae2.client.gui;
import appeng.client.gui.widgets.ActionButton;
import appeng.core.localization.ButtonToolTips;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.util.GetKey;
import com.extendedae_plus.config.EAEPConfig;
import net.minecraft.network.chat.Component;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@ -12,16 +11,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ActionButton.class)
public class MixinActionButton {
// @ModifyVariable(method = "buildMessage", at = @At("STORE"))
// private static String eaep$modifyEncodeButtonTooltips(String value) {
// if ()
// }
@Inject(method = "buildMessage", at = @At("TAIL"), cancellable = true)
private void eaep$modifyButtonTooltips(ButtonToolTips displayName,
ButtonToolTips displayValue,
CallbackInfoReturnable<Component> cir) {
if (displayValue == ButtonToolTips.EncodeDescription && !ModConfig.INDEPENDENT_UPLOADING_BUTTON.getAsBoolean())
if (displayValue == ButtonToolTips.EncodeDescription && !EAEPConfig.INDEPENDENT_UPLOADING_BUTTON.getAsBoolean())
cir.setReturnValue(cir.getReturnValue().copy().append(
new GetKey(GetKey.TOOLTIP).addStr("encode_button_description").build()));
Component.translatable("tooltip.extendedae_plus.encode_button.upload_pattern")));
}
}

View File

@ -6,7 +6,7 @@ import appeng.client.gui.me.items.PatternEncodingTermScreen;
import appeng.client.gui.style.ScreenStyle;
import appeng.client.gui.style.WidgetStyle;
import appeng.client.gui.widgets.IconButton;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.mixin.accessor.AbstractContainerScreenAccessor;
import com.extendedae_plus.mixin.accessor.ScreenAccessor;
import com.extendedae_plus.mixin.ae2.accessor.AEBaseScreenAccessor;
@ -37,7 +37,7 @@ public abstract class PatternEncodingTermScreenMixin {
private void eap$addUploadButton(CallbackInfo ci) {
// 仅在图样编码终端界面中添加按钮
if (!(((Object) this) instanceof PatternEncodingTermScreen)) return;
if (!ModConfig.INDEPENDENT_UPLOADING_BUTTON.getAsBoolean()) return;
if (!EAEPConfig.INDEPENDENT_UPLOADING_BUTTON.getAsBoolean()) return;
// 复用已存在的按钮实例避免重复创建
if (eap$uploadBtn == null) {
eap$uploadBtn = new IconButton(btn -> PacketDistributor
@ -141,7 +141,7 @@ public abstract class PatternEncodingTermScreenMixin {
@Inject(method = "containerTick", at = @At("TAIL"), remap = false)
private void eap$ensureUploadButton(CallbackInfo ci) {
if (!(((Object) this) instanceof PatternEncodingTermScreen &&
ModConfig.INDEPENDENT_UPLOADING_BUTTON.getAsBoolean()))
EAEPConfig.INDEPENDENT_UPLOADING_BUTTON.getAsBoolean()))
return;
if (eap$uploadBtn == null) {
return;

View File

@ -1,7 +1,7 @@
package com.extendedae_plus.mixin.ae2.compat;
import appeng.api.networking.IManagedGridNode;
import appeng.api.networking.IGridConnection;
import appeng.api.networking.IManagedGridNode;
import appeng.api.networking.security.IActionSource;
import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject;
@ -9,13 +9,13 @@ import appeng.api.upgrades.UpgradeInventories;
import appeng.helpers.patternprovider.PatternProviderLogic;
import appeng.helpers.patternprovider.PatternProviderLogicHost;
import com.extendedae_plus.ae.items.ChannelCardItem;
import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge;
import com.extendedae_plus.bridge.CompatUpgradeProvider;
import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge;
import com.extendedae_plus.compat.UpgradeSlotCompat;
import com.extendedae_plus.init.ModItems;
import com.extendedae_plus.util.ExtendedAELogger;
import com.extendedae_plus.wireless.WirelessSlaveLink;
import com.extendedae_plus.wireless.endpoint.GenericNodeEndpointImpl;
import com.extendedae_plus.util.ExtendedAELogger;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Final;
@ -110,7 +110,7 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
// 这里我们先记录一下实际的检查会在tick中进行
}
}
} catch (Throwable t) {
} catch (Throwable ignored) {
}
}
@ -230,20 +230,20 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
}
// 双重保险如果主要方式失败尝试备用方式
if (upgrades == null || !eap$hasChannelCard(upgrades)) {
if (!eap$hasChannelCard(upgrades)) {
if (UpgradeSlotCompat.shouldEnableUpgradeSlots()) {
// 如果我们的槽无频道卡尝试检查是否有AppliedFlux的槽
try {
IUpgradeInventory backupUpgrades = eap$getAppliedFluxUpgrades();
if (backupUpgrades != null && eap$hasChannelCard(backupUpgrades)) {
if (eap$hasChannelCard(backupUpgrades)) {
upgrades = backupUpgrades;
}
} catch (Throwable t) {
} catch (Throwable ignored) {
}
} else {
// 如果AppliedFlux的槽无频道卡尝试我们的兼容槽
if (this.eap$compatUpgrades != null && eap$hasChannelCard(this.eap$compatUpgrades)) {
if (eap$hasChannelCard(this.eap$compatUpgrades)) {
upgrades = this.eap$compatUpgrades;
}
}
@ -347,7 +347,7 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
// 安装了AppliedFlux时定期检查升级槽变化
try {
IUpgradeInventory afUpgrades = eap$getAppliedFluxUpgrades();
if (afUpgrades != null && eap$hasChannelCard(afUpgrades)) {
if (eap$hasChannelCard(afUpgrades)) {
// 检查频道是否发生变化
for (ItemStack stack : afUpgrades) {
if (!stack.isEmpty() && stack.getItem() == ModItems.CHANNEL_CARD.get()) {
@ -366,7 +366,7 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
eap$compatHasInitialized = false;
eap$compatInitializeChannelLink();
}
} catch (Throwable t) {
} catch (Throwable ignored) {
}
}
}
@ -395,7 +395,7 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
}
try {
IUpgradeInventory afUpgrades = eap$getAppliedFluxUpgrades();
if (afUpgrades != null && eap$hasChannelCard(afUpgrades)) {
if (eap$hasChannelCard(afUpgrades)) {
// 槽中有频道卡保持tick以尽快完成连接
return true;
}
@ -404,7 +404,7 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
return false;
}
// 未安装 AppliedFlux当存在频道卡但连接尚未建立时保持tick
if (this.eap$compatUpgrades != null && eap$hasChannelCard(this.eap$compatUpgrades)) {
if (eap$hasChannelCard(this.eap$compatUpgrades)) {
if (eap$compatLink == null || !eap$compatLink.isConnected()) {
return true;
}

View File

@ -8,8 +8,6 @@ import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge;
import com.extendedae_plus.init.ModItems;
import com.extendedae_plus.wireless.WirelessSlaveLink;
import com.extendedae_plus.wireless.endpoint.InterfaceNodeEndpointImpl;
import com.extendedae_plus.util.ExtendedAELogger;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

View File

@ -2,7 +2,6 @@ package com.extendedae_plus.mixin.ae2.helpers;
import appeng.api.networking.IManagedGridNode;
import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject;
import appeng.api.upgrades.UpgradeInventories;
import appeng.helpers.patternprovider.PatternProviderLogic;
import appeng.helpers.patternprovider.PatternProviderLogicHost;
@ -19,8 +18,8 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.lang.reflect.Method;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
/**
@ -75,7 +74,7 @@ public abstract class PatternProviderLogicUpgradesMixin {
Field f = this.getClass().getDeclaredField("af_upgrades");
f.setAccessible(true);
existingUpgrades = (IUpgradeInventory) f.get(this);
} catch (Throwable t) {
} catch (Throwable ignored) {
}
if (existingUpgrades != null && existingUpgrades != UpgradeInventories.empty()) {
@ -108,15 +107,14 @@ public abstract class PatternProviderLogicUpgradesMixin {
Field f = this.getClass().getDeclaredField("af_upgrades");
f.setAccessible(true);
f.set(this, this.eap$upgrades);
} catch (Throwable t) {
} catch (Throwable ignored) {
}
this.eap$upgradesInitialized = true;
} else {
// AppliedFlux 或其他模组已经提供了足够的槽位
this.eap$upgrades = existingUpgrades;
this.eap$upgradesInitialized = true;
}
this.eap$upgradesInitialized = true;
} else {
// AppliedFlux 还没初始化升级槽或者出了问题我们创建默认的
this.eap$upgrades = UpgradeInventories.forMachine(
@ -129,7 +127,7 @@ public abstract class PatternProviderLogicUpgradesMixin {
Field f = this.getClass().getDeclaredField("af_upgrades");
f.setAccessible(true);
f.set(this, this.eap$upgrades);
} catch (Throwable t) {
} catch (Throwable ignored) {
}
this.eap$upgradesInitialized = true;
}
@ -164,7 +162,7 @@ public abstract class PatternProviderLogicUpgradesMixin {
afMethod.invoke(this);
} catch (NoSuchMethodException e) {
// AppliedFlux 的方法不存在这是正常的
} catch (Throwable t) {
} catch (Throwable ignored) {
}
}

View File

@ -1,10 +1,9 @@
package com.extendedae_plus.mixin.ae2.menu;
import appeng.api.upgrades.IUpgradeInventory;
import appeng.menu.AEBaseMenu;
import appeng.menu.SlotSemantics;
import appeng.menu.implementations.PatternProviderMenu;
import appeng.api.upgrades.IUpgradeInventory;
import com.extendedae_plus.util.ExtendedAELogger;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;

View File

@ -53,9 +53,7 @@ public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHo
private void eap$writeEncodePlayerToPattern(CallbackInfoReturnable<ItemStack> cir) {
ItemStack itemStack = cir.getReturnValue();
if (itemStack != null && !itemStack.isEmpty()) {
CustomData.update(DataComponents.CUSTOM_DATA, itemStack, tag -> {
tag.putString("encodePlayer", this.epp$player.getGameProfile().getName());
});
CustomData.update(DataComponents.CUSTOM_DATA, itemStack, tag -> tag.putString("encodePlayer", this.epp$player.getGameProfile().getName()));
cir.setReturnValue(itemStack);
}
}

View File

@ -6,7 +6,6 @@ import appeng.menu.me.crafting.CraftingPlanSummary;
import appeng.menu.me.crafting.CraftingPlanSummaryEntry;
import com.extendedae_plus.integration.RecipeViewer.RecipeViewerHelper;
import net.minecraft.client.gui.screens.Screen;
import net.neoforged.fml.ModList;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;

View File

@ -5,9 +5,6 @@ import appeng.menu.AEBaseMenu;
import appeng.menu.ToolboxMenu;
import appeng.menu.implementations.InterfaceMenu;
import com.extendedae_plus.bridge.IUpgradableMenu;
import com.extendedae_plus.compat.UpgradeSlotCompat;
import com.extendedae_plus.bridge.CompatUpgradeProvider;
import com.extendedae_plus.util.ExtendedAELogger;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.MenuType;
import org.spongepowered.asm.mixin.Mixin;

View File

@ -31,7 +31,7 @@ public abstract class MEStorageMenuMixin {
return;
}
try {
var acc = (MEStorageMenuAccessor) (Object) self;
var acc = (MEStorageMenuAccessor) self;
IConfigManager server = acc.getServerCM();
IConfigManager client = acc.getClientCM();
if (server == null || client == null) {
@ -75,7 +75,7 @@ public abstract class MEStorageMenuMixin {
}
Class<? extends Enum<?>> enumClass = sv.getDeclaringClass();
Object[] constants = enumClass.getEnumConstants();
if (constants == null || constants.length == 0) {
if (constants == null) {
return null;
}
for (Object c : constants) {

View File

@ -13,7 +13,7 @@ import appeng.menu.me.items.PatternEncodingTermMenu;
import appeng.menu.slot.RestrictedInputSlot;
import appeng.parts.encoding.EncodingMode;
import com.extendedae_plus.client.PatternEncodingTermMenuMixinHelper;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.mixin.ae2.accessor.MEStorageMenuAccessor;
import com.extendedae_plus.network.C2SPacketEncodeFinished;
import com.extendedae_plus.util.ExtendedAEPatternUploadUtil;
@ -171,7 +171,7 @@ public abstract class PatternEncodingTermMenuMixin implements PatternEncodingTer
@Inject(method = "encode", at = @At("TAIL"))
private void eaep$onEncode(CallbackInfo ci) {
if (ModConfig.INDEPENDENT_UPLOADING_BUTTON.getAsBoolean()) return;
if (EAEPConfig.INDEPENDENT_UPLOADING_BUTTON.getAsBoolean()) return;
var self = (PatternEncodingTermMenu) (Object) this;
if (self.isClientSide()) return;
if (!eaep$isCtrlPressed) return;

View File

@ -5,11 +5,9 @@ import appeng.helpers.patternprovider.PatternProviderLogicHost;
import appeng.menu.AEBaseMenu;
import appeng.menu.ToolboxMenu;
import appeng.menu.implementations.PatternProviderMenu;
import com.extendedae_plus.bridge.CompatUpgradeProvider;
import com.extendedae_plus.bridge.IUpgradableMenu;
import com.extendedae_plus.compat.UpgradeSlotCompat;
import com.extendedae_plus.bridge.CompatUpgradeProvider;
import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.MenuType;
import org.spongepowered.asm.mixin.Final;
@ -19,7 +17,6 @@ import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.extendedae_plus.util.ExtendedAELogger;
@Mixin(value = PatternProviderMenu.class, priority = 2000, remap = false)
public abstract class PatternProviderMenuUpgradesMixin extends AEBaseMenu implements IUpgradableMenu {

View File

@ -3,16 +3,14 @@ package com.extendedae_plus.mixin.ae2.parts.automation;
import appeng.api.networking.security.IActionHost;
import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject;
import appeng.helpers.InterfaceLogicHost;
import appeng.parts.automation.IOBusPart;
import net.minecraft.nbt.CompoundTag;
import com.extendedae_plus.util.ExtendedAELogger;
import com.extendedae_plus.ae.items.ChannelCardItem;
import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge;
import com.extendedae_plus.init.ModItems;
import com.extendedae_plus.util.ExtendedAELogger;
import com.extendedae_plus.wireless.WirelessSlaveLink;
import com.extendedae_plus.wireless.endpoint.GenericNodeEndpointImpl;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.nbt.CompoundTag;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
@ -103,7 +101,7 @@ public abstract class IOBusPartChannelCardMixin implements InterfaceWirelessLink
if (eap$link == null) {
var endpoint = new GenericNodeEndpointImpl(
() -> ((appeng.parts.AEBasePart)(Object)this).getHost().getBlockEntity(),
() -> ((IActionHost)(Object)this).getActionableNode()
() -> ((IActionHost) this).getActionableNode()
);
eap$link = new WirelessSlaveLink(endpoint);
}

View File

@ -5,14 +5,13 @@ import appeng.api.networking.security.IActionHost;
import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject;
import appeng.parts.storagebus.StorageBusPart;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
import com.extendedae_plus.util.ExtendedAELogger;
import com.extendedae_plus.ae.items.ChannelCardItem;
import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge;
import com.extendedae_plus.init.ModItems;
import com.extendedae_plus.util.ExtendedAELogger;
import com.extendedae_plus.wireless.WirelessSlaveLink;
import com.extendedae_plus.wireless.endpoint.GenericNodeEndpointImpl;
import net.minecraft.nbt.CompoundTag;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
@ -99,7 +98,7 @@ public abstract class StorageBusPartChannelCardMixin implements InterfaceWireles
if (eap$link == null) {
var endpoint = new GenericNodeEndpointImpl(
() -> ((appeng.parts.AEBasePart)(Object)this).getHost().getBlockEntity(),
() -> ((IActionHost)(Object)this).getActionableNode()
() -> ((IActionHost) this).getActionableNode()
);
eap$link = new WirelessSlaveLink(endpoint);
}

View File

@ -58,7 +58,7 @@ public abstract class HighlightButtonMixin {
if (posEqual && faceEqual) {
// 选中当前供应器使用 mixin 新增的 setter通过反射调用以兼容编译期
try {
long serverId = (long) entry.getKey();
long serverId = entry.getKey();
var setter = terminal.getClass().getMethod("setCurrentlyChoicePatternProvider", long.class);
setter.setAccessible(true);
setter.invoke(terminal, serverId);

View File

@ -7,7 +7,7 @@ import appeng.menu.SlotSemantics;
import appeng.menu.slot.AppEngSlot;
import com.extendedae_plus.NewIcon;
import com.extendedae_plus.api.ExPatternButtonsAccessor;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.network.ScalePatternsC2SPacket;
import com.glodblock.github.extendedae.client.button.ActionEPPButton;
import com.glodblock.github.extendedae.client.gui.GuiExPatternProvider;
@ -65,7 +65,7 @@ public abstract class GuiExPatternProviderMixin extends PatternProviderScreen<Co
private int getMaxPage() {
// 优先使用配置倍数
try {
int cfg = ModConfig.PAGE_MULTIPLIER.get();
int cfg = EAEPConfig.PAGE_MULTIPLIER.get();
if (cfg > 1) return cfg;
} catch (Throwable ignored) {}
try {
@ -124,7 +124,7 @@ public abstract class GuiExPatternProviderMixin extends PatternProviderScreen<Co
// 计算并下发 maxPage配置优先其次按槽位总数计算
int totalSlots = this.getMenu().getSlots(SlotSemantics.ENCODED_PATTERN).size();
int cfgPages = 1;
try { cfgPages = Math.max(1, ModConfig.PAGE_MULTIPLIER.get()); } catch (Throwable ignored) {}
try { cfgPages = Math.max(1, EAEPConfig.PAGE_MULTIPLIER.get()); } catch (Throwable ignored) {}
int calcPages = Math.max(1, (int) Math.ceil(totalSlots / (double) SLOTS_PER_PAGE));
int desiredMaxPage = Math.max(cfgPages, calcPages);
LOGGER.info("[EAP] GuiExPatternProvider init: totalSlots={}, cfgPages={}, calcPages={}, desiredMaxPage={}", totalSlots, cfgPages, calcPages, desiredMaxPage);

View File

@ -7,7 +7,7 @@ import appeng.client.gui.me.patternaccess.PatternContainerRecord;
import appeng.client.gui.style.ScreenStyle;
import appeng.client.gui.widgets.IconButton;
import appeng.menu.AEBaseMenu;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.mixin.extendedae.accessor.GuiExPatternTerminalAccessor;
import com.extendedae_plus.network.OpenProviderUiC2SPacket;
import com.extendedae_plus.util.GuiUtil;
@ -246,7 +246,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
CallbackInfo ci) {
// 根据配置初始化默认显示/隐藏状态
try {
this.eap$showSlots = ModConfig.PATTERN_TERMINAL_SHOW_SLOTS_DEFAULT.get();
this.eap$showSlots = EAEPConfig.PATTERN_TERMINAL_SHOW_SLOTS_DEFAULT.get();
} catch (Throwable ignored) {
}
// 创建切换槽位显示的按钮
@ -261,11 +261,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
refreshMethod = this.getClass().getDeclaredMethod("refreshList");
} catch (NoSuchMethodException e1) {
// 如果当前类没有尝试在父类中查找
try {
refreshMethod = this.getClass().getSuperclass().getDeclaredMethod("refreshList");
} catch (NoSuchMethodException e2) {
throw e2;
}
refreshMethod = this.getClass().getSuperclass().getDeclaredMethod("refreshList");
}
refreshMethod.setAccessible(true);
@ -376,11 +372,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
rowsField = this.getClass().getDeclaredField("rows");
} catch (NoSuchFieldException e1) {
// 如果当前类没有尝试在父类中查找
try {
rowsField = this.getClass().getSuperclass().getDeclaredField("rows");
} catch (NoSuchFieldException e2) {
throw e2;
}
rowsField = this.getClass().getSuperclass().getDeclaredField("rows");
}
rowsField.setAccessible(true);
java.util.ArrayList<?> rows = (java.util.ArrayList<?>) rowsField.get(this);
@ -392,11 +384,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
highlightBtnsField = this.getClass().getDeclaredField("highlightBtns");
} catch (NoSuchFieldException e1) {
// 如果当前类没有尝试在父类中查找
try {
highlightBtnsField = this.getClass().getSuperclass().getDeclaredField("highlightBtns");
} catch (NoSuchFieldException e2) {
throw e2;
}
highlightBtnsField = this.getClass().getSuperclass().getDeclaredField("highlightBtns");
}
highlightBtnsField.setAccessible(true);
@SuppressWarnings("unchecked")
@ -434,7 +422,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
// 移除多余的行
while (rows.size() > newIndex) {
rows.remove(rows.size() - 1);
rows.removeLast();
}
// 更新highlightBtns
@ -449,11 +437,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
resetScrollbarMethod = this.getClass().getDeclaredMethod("resetScrollbar");
} catch (NoSuchMethodException e1) {
// 如果当前类没有尝试在父类中查找
try {
resetScrollbarMethod = this.getClass().getSuperclass().getDeclaredMethod("resetScrollbar");
} catch (NoSuchMethodException e2) {
throw e2;
}
resetScrollbarMethod = this.getClass().getSuperclass().getDeclaredMethod("resetScrollbar");
}
resetScrollbarMethod.setAccessible(true);
@ -516,9 +500,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
Button btn = eap$openUIButtons.get(rowIndex);
if (btn == null) {
btn = Button.builder(Component.literal("UI"), (b) -> {
eap$tryOpenProviderUI(rowIndex);
}).size(14, 12).build();
btn = Button.builder(Component.literal("UI"), (b) -> eap$tryOpenProviderUI(rowIndex)).size(14, 12).build();
btn.setTooltip(Tooltip.create(Component.literal("打开该供应器目标容器的界面")));
eap$openUIButtons.put(rowIndex, btn);
this.addRenderableWidget(btn);
@ -578,7 +560,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
if (ms instanceof Set<?> s) {
// 原始是 Set<ItemStack>
@SuppressWarnings("unchecked")
Set<ItemStack> cast = (Set<ItemStack>) (Set<?>) s;
Set<ItemStack> cast = (Set<ItemStack>) s;
matchedStack = cast;
}
} catch (NoSuchFieldException ignored) {
@ -589,7 +571,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
Object mp = fMp.get(this);
if (mp instanceof Set<?> s) {
@SuppressWarnings("unchecked")
Set<PatternContainerRecord> cast = (Set<PatternContainerRecord>) (Set<?>) s;
Set<PatternContainerRecord> cast = (Set<PatternContainerRecord>) s;
matchedProvider = cast;
}
} catch (NoSuchFieldException ignored) {

View File

@ -1,6 +1,6 @@
package com.extendedae_plus.mixin.extendedae.common;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.glodblock.github.extendedae.common.parts.PartExPatternProvider;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
@ -20,7 +20,7 @@ public abstract class PartExPatternProviderMixin {
index = 2
)
private int eap$multiplyCapacity(int original) {
int mult = ModConfig.PAGE_MULTIPLIER.get();
int mult = EAEPConfig.PAGE_MULTIPLIER.get();
if (mult < 1) mult = 1;
if (mult > 64) mult = 64;
return Math.max(1, original) * mult;

View File

@ -1,6 +1,6 @@
package com.extendedae_plus.mixin.extendedae.common;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.glodblock.github.extendedae.common.tileentities.TileExPatternProvider;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@ -18,7 +18,7 @@ public abstract class TileExPatternProviderMixin {
index = 2
)
private int eap$multiplyCapacity(int original) {
int mult = ModConfig.PAGE_MULTIPLIER.get();
int mult = EAEPConfig.PAGE_MULTIPLIER.get();
if (mult < 1) mult = 1;
if (mult > 64) mult = 64;
return Math.max(1, original) * mult;

View File

@ -89,7 +89,7 @@ public abstract class ContainerExPatternProviderMixin extends PatternProviderMen
if (scale <= 0) return;
for (var slot : this.getSlots(SlotSemantics.ENCODED_PATTERN)) {
var stack = slot.getItem();
if (stack.getItem() instanceof EncodedPatternItem pattern) {
if (stack.getItem() instanceof EncodedPatternItem<?>) {
var detail = PatternDetailsHelper.decodePattern(stack, this.getPlayer().level());
if (detail instanceof AEProcessingPattern process) {
var input = process.getSparseInputs(); // List<GenericStack>
@ -116,7 +116,6 @@ public abstract class ContainerExPatternProviderMixin extends PatternProviderMen
}
}
}
return true;
} else {
for (var stack : stacks) {
if (stack != null) {
@ -126,8 +125,8 @@ public abstract class ContainerExPatternProviderMixin extends PatternProviderMen
}
}
}
return true;
}
return true;
}
@Unique

View File

@ -27,7 +27,7 @@ import java.util.List;
@Mixin(BoMScreen.class)
public abstract class MixinBoMScreen {
@Inject(method = "mouseClicked", at = @At("HEAD"))
@Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
private void onMouseClick(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> cir) {
if (!(button == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && Screen.hasControlDown())) return;
try {
@ -94,5 +94,6 @@ public abstract class MixinBoMScreen {
}
}
} catch (Exception ignored) {}
cir.cancel();
}
}

View File

@ -7,7 +7,6 @@ import appeng.api.stacks.AEKey;
import appeng.helpers.patternprovider.PatternProviderLogic;
import appeng.helpers.patternprovider.PatternProviderLogicHost;
import appeng.me.service.CraftingService;
import appeng.menu.AEBaseMenu;
import appeng.menu.locator.MenuLocators;
import appeng.menu.me.crafting.CraftingCPUMenu;
import appeng.parts.AEBasePart;
@ -69,7 +68,7 @@ public class CraftingMonitorOpenProviderC2SPacket implements CustomPacketPayload
// 通过菜单的 target可能是 BlockEntity/Part/ItemHost IActionHost 获取 Grid
IGrid grid = null;
Object target = ((AEBaseMenu) menu).getTarget();
Object target = menu.getTarget();
if (target instanceof IActionHost host && host.getActionableNode() != null) {
grid = host.getActionableNode().getGrid();
}
@ -128,8 +127,8 @@ public class CraftingMonitorOpenProviderC2SPacket implements CustomPacketPayload
// 最后发送高亮包保证界面已打开
var outs = pattern.getOutputs();
if (outs != null && !outs.isEmpty() && outs.get(0) != null) {
AEKey key = outs.get(0).what();
if (outs != null && !outs.isEmpty() && outs.getFirst() != null) {
AEKey key = outs.getFirst().what();
player.connection.send(new SetPatternHighlightS2CPacket(key, true));
}

View File

@ -141,8 +141,8 @@ public class GlobalToggleProviderModesC2SPacket implements CustomPacketPayload {
try {
Class<?> cls = Class.forName(className);
// 收集全部与在线两类机器
Set<?> all = grid.getMachines((Class) cls);
Set<?> active = grid.getActiveMachines((Class) cls);
Set<?> all = grid.getMachines((Class<?>) cls);
Set<?> active = grid.getActiveMachines((Class<?>) cls);
for (Object o : all) addLogicIfPresent(out, o);
for (Object o : active) addLogicIfPresent(out, o);
} catch (Throwable ignored) {}

View File

@ -70,15 +70,14 @@ public class InterfaceAdjustConfigAmountC2SPacket implements CustomPacketPayload
int factor = Math.max(1, msg.factor);
long next;
if (msg.divide) {
if (factor <= 1) continue;
if (factor == 1) continue;
if (current % factor != 0) continue;
next = current / factor;
if (next < 1) next = 1;
} else {
if (factor <= 1) continue;
if (factor == 1) continue;
next = current * factor;
if (next < 1) next = 1;
}
if (next < 1) next = 1;
GenericStack newStack = new GenericStack(st.what(), next);
config.setStack(idx, newStack);
@ -92,16 +91,15 @@ public class InterfaceAdjustConfigAmountC2SPacket implements CustomPacketPayload
long next;
if (msg.divide) {
// 只能整除且至少为 1
if (factor <= 1) return;
if (factor == 1) return;
if (current % factor != 0) return; // 不能整除则跳过
next = current / factor;
if (next < 1) next = 1;
} else {
// 倍增至少为 1
if (factor <= 1) return;
if (factor == 1) return;
next = current * factor;
if (next < 1) next = 1;
}
if (next < 1) next = 1;
// 应用
GenericStack newStack = new GenericStack(stack.what(), next);

View File

@ -15,6 +15,7 @@ import appeng.menu.implementations.PatternAccessTermMenu;
import appeng.menu.me.items.PatternEncodingTermMenu;
import appeng.util.inv.FilteredInternalInventory;
import appeng.util.inv.filter.IAEItemFilter;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.mixin.ae2.accessor.PatternEncodingTermMenuAccessor;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@ -280,13 +281,6 @@ public class ExtendedAEPatternUploadUtil {
if (key == null) return null;
// 先查别名 path 匹配
// 别名替换放在init做, 提前别名的次序
// String alias = CUSTOM_ALIASES.get(key.getPath().toLowerCase());
// if (alias != null && !alias.isBlank()) return alias;
// 再查完整ID映射
// String custom = CUSTOM_NAMES.get(key);
// if (custom != null && !custom.isBlank()) {
// return custom;
// }
return key.getPath();
}
@ -423,7 +417,7 @@ public class ExtendedAEPatternUploadUtil {
}
// 读取已编码槽位的物品
var encodedSlot = ((PatternEncodingTermMenuAccessor) (Object) menu)
var encodedSlot = ((PatternEncodingTermMenuAccessor) menu)
.eap$getEncodedPatternSlot();
ItemStack stack = encodedSlot.getItem();
if (stack.isEmpty() || !PatternDetailsHelper.isEncodedPattern(stack)) {
@ -462,7 +456,7 @@ public class ExtendedAEPatternUploadUtil {
player.sendSystemMessage(Component.literal("ExtendedAE Plus: 装配矩阵已存在相同样板,已跳过上传并返还空白样板"));
}
try {
var accessor = (PatternEncodingTermMenuAccessor) (Object) menu;
var accessor = (PatternEncodingTermMenuAccessor) menu;
var blankSlot = accessor.eap$getBlankPatternSlot();
ItemStack blanks = AEItems.BLANK_PATTERN.stack(stack.getCount());
if (blankSlot != null && blankSlot.mayPlace(blanks)) {
@ -548,7 +542,7 @@ public class ExtendedAEPatternUploadUtil {
}
idx++;
}
} catch (Throwable t) {
} catch (Throwable ignored) {
}
return result;
}
@ -575,7 +569,7 @@ public class ExtendedAEPatternUploadUtil {
}
}
}
} catch (Throwable t) {
} catch (Throwable ignored) {
}
// 1.21 暂不检查聚合能力视图能力系统适配后再补充
return false;
@ -1032,7 +1026,7 @@ public class ExtendedAEPatternUploadUtil {
if (player == null || menu == null) {
return false;
}
var encodedSlot = ((PatternEncodingTermMenuAccessor) (Object) menu)
var encodedSlot = ((PatternEncodingTermMenuAccessor) menu)
.eap$getEncodedPatternSlot();
ItemStack stack = encodedSlot.getItem();
if (stack.isEmpty() || !PatternDetailsHelper.isEncodedPattern(stack)) {
@ -1166,7 +1160,7 @@ public class ExtendedAEPatternUploadUtil {
var container = list.get(index);
if (container == null) return false;
var encodedSlot = ((PatternEncodingTermMenuAccessor) (Object) menu)
var encodedSlot = ((PatternEncodingTermMenuAccessor) menu)
.eap$getEncodedPatternSlot();
ItemStack stack = encodedSlot.getItem();
if (stack.isEmpty() || !PatternDetailsHelper.isEncodedPattern(stack)) {
@ -1213,6 +1207,7 @@ public class ExtendedAEPatternUploadUtil {
* 传入任意属于该集群的 Tile Pattern/Crafter/Frame
*/
private static boolean clusterHasSingleUploadCore(com.glodblock.github.extendedae.common.tileentities.matrix.TileAssemblerMatrixBase any) {
if (!EAEPConfig.NEEDS_UPLOADING_CORE.getAsBoolean()) return true;
try {
if (any == null || any.getCluster() == null) return false;
int cores = 0;

View File

@ -1,82 +0,0 @@
package com.extendedae_plus.util;
import com.extendedae_plus.ExtendedAEPlus;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.neoforged.neoforge.fluids.FluidType;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredItem;
public class GetKey {
private final String keyType;
private String mainDescription = ExtendedAEPlus.MODID;
private String additionalKey = ".";
private Object[] args;
public static final String CTAB = "ctab";
public static final String GUI = "gui";
public static final String MESSAGE = "message";
public static final String CONFIG = "config";
public static final String TOOLTIP = "tooltip";
public GetKey() {
this.keyType = "";
}
public GetKey(String keyType) {
this.keyType = keyType.toLowerCase() + '.';
}
public GetKey(DeferredItem<?> item) {
this.keyType = "";
this.mainDescription = item.asItem().getDescriptionId().toLowerCase();
}
public GetKey(DeferredHolder<FluidType, ?> fluid) {
this.keyType = "";
this.mainDescription = fluid.get().getDescriptionId().toLowerCase();
this.additionalKey = "";
}
public GetKey item(ItemStack item) {
this.mainDescription = item.getDescriptionId().toLowerCase();
return this;
}
public GetKey item(Item item) {
this.mainDescription = item.getDescriptionId().toLowerCase();
return this;
}
public GetKey item(DeferredItem<?> item) {
this.mainDescription = item.asItem().getDescriptionId().toLowerCase();
return this;
}
public GetKey addStr(String additionalKey) {
if (!this.additionalKey.endsWith("."))
this.additionalKey += ".";
this.additionalKey += additionalKey;
return this;
}
public GetKey obj(Object... args) {
this.args = args;
return this;
}
public String buildRaw() {
return keyType + mainDescription + additionalKey;
}
public Component build() {
if (args == null) return Component.translatable(keyType + mainDescription + additionalKey);
return Component.translatable(keyType + mainDescription + additionalKey, args);
}
public String getDescriptionID(ItemStack itemStack) {
return "item.fish_things." + BuiltInRegistries.ITEM.getKey(itemStack.getItem()).getPath();
}
}

View File

@ -39,7 +39,7 @@ public class GuiUtil {
if (outputs == null || outputs.isEmpty()) {
return "";
}
GenericStack out = outputs.get(0);
GenericStack out = outputs.getFirst();
long amount = out.amount();
long perUnit = out.what().getAmountPerUnit();
if (amount <= 0 || perUnit <= 0) {

View File

@ -67,7 +67,7 @@ public class NumberFormatUtil {
private static String formatDecimal(double value, String suffix) {
// 对于接近整数的值使用整数显示
if (Math.abs(value - Math.round(value)) < 0.001) {
return String.valueOf(Math.round(value)) + suffix;
return Math.round(value) + suffix;
} else {
// 使用一位小数显示去掉末尾 .0
String formatted = String.format("%.1f", value).replaceAll("\\.0$", "");

View File

@ -8,7 +8,6 @@ import appeng.api.stacks.AEKey;
import appeng.api.stacks.GenericStack;
import appeng.helpers.patternprovider.PatternProviderLogic;
import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicAccessor;
import com.mojang.logging.LogUtils;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
@ -143,7 +142,7 @@ public class PatternProviderDataUtil {
if (outputs.isEmpty()) {
return 0;
}
return outputs.get(0).getAmount();
return outputs.getFirst().getAmount();
}
/**
@ -250,7 +249,7 @@ public class PatternProviderDataUtil {
if (patternDetails != null) {
patternDataList.add(new PatternData(patternDetails, patternStack, i));
}
} catch (Exception e) {
} catch (Exception ignored) {
}
}
@ -570,7 +569,7 @@ public class PatternProviderDataUtil {
if (d != null && d.getDefinition().equals(targetDefinition)) {
return i;
}
} catch (Exception e) {
} catch (Exception ignored) {
}
}
return -1;
@ -667,7 +666,6 @@ public class PatternProviderDataUtil {
if (!canScalePatternExtendedAEStyle(originalPattern, scaleFactor)) {
errors.add("槽位 " + i + ": 样板数量无法按指定比例缩放");
failedPatterns++;
continue;
}
}
@ -687,7 +685,7 @@ public class PatternProviderDataUtil {
try {
// 解码原始样板
IPatternDetails originalPattern = PatternDetailsHelper.decodePattern(patternStack, level);
if (originalPattern == null || !isPatternScalable(originalPattern)) {
if (!isPatternScalable(originalPattern)) {
continue;
}

View File

@ -21,8 +21,8 @@ public class PatternProviderUIHelper {
Minecraft mc = Minecraft.getInstance();
Screen currentScreen = mc.screen;
if (currentScreen instanceof PatternProviderScreen patternScreen) {
PatternProviderMenu menu = (PatternProviderMenu) patternScreen.getMenu();
if (currentScreen instanceof PatternProviderScreen<?> patternScreen) {
PatternProviderMenu menu = patternScreen.getMenu();
// 通过反射安全地访问protected字段
try {
@ -53,11 +53,11 @@ public class PatternProviderUIHelper {
*
* @return PatternProviderScreen对象如果当前没有打开样板供应器界面则返回null
*/
public static PatternProviderScreen getCurrentPatternProviderScreen() {
public static PatternProviderScreen<?> getCurrentPatternProviderScreen() {
Minecraft mc = Minecraft.getInstance();
Screen currentScreen = mc.screen;
if (currentScreen instanceof PatternProviderScreen patternScreen) {
if (currentScreen instanceof PatternProviderScreen<?> patternScreen) {
return patternScreen;
}

View File

@ -5,7 +5,7 @@ import appeng.api.stacks.AEKey;
import appeng.api.stacks.GenericStack;
import appeng.crafting.pattern.AEProcessingPattern;
import com.extendedae_plus.api.SmartDoublingAwarePattern;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import com.extendedae_plus.content.ScaledProcessingPattern;
import java.util.ArrayList;
@ -34,7 +34,7 @@ public final class PatternScaler {
int targetOutIndex = -1;
for (int i = 0; i < baseOutputs.size(); i++) {
var out = baseOutputs.get(i);
if (out != null && target != null && out.what() != null && out.what().equals(target)) {
if (out != null && out.what() != null && out.what().equals(target)) {
targetOutIndex = i;
break;
}
@ -59,11 +59,11 @@ public final class PatternScaler {
long multiplier = 1L;
if (requestedAmount > 0) {
long needed = requestedAmount / perOperationTarget + ((requestedAmount % perOperationTarget) == 0 ? 0 : 1);
multiplier = needed <= 1L ? 1L : needed;
multiplier = Math.max(needed, 1L);
}
// 应用配置的最大倍数上限0 表示不限制
try {
int maxMul = ModConfig.SMART_SCALING_MAX_MULTIPLIER.get();
int maxMul = EAEPConfig.SMART_SCALING_MAX_MULTIPLIER.get();
if (maxMul > 0 && multiplier > maxMul) {
multiplier = maxMul;
}
@ -85,8 +85,7 @@ public final class PatternScaler {
// 构建压缩输出List
List<GenericStack> scaledCondensedOutputs = new ArrayList<>(baseOutputs.size());
for (int i = 0; i < baseOutputs.size(); i++) {
GenericStack out = baseOutputs.get(i);
for (GenericStack out : baseOutputs) {
if (out != null) {
scaledCondensedOutputs.add(new GenericStack(out.what(), out.amount() * multiplier));
} else {
@ -96,8 +95,7 @@ public final class PatternScaler {
// 构建稀疏表示List直接按 multiplier 放大
List<GenericStack> scaledSparseInputs = new ArrayList<>(baseSparseInputs.size());
for (int i = 0; i < baseSparseInputs.size(); i++) {
var in = baseSparseInputs.get(i);
for (GenericStack in : baseSparseInputs) {
if (in != null) {
scaledSparseInputs.add(new GenericStack(in.what(), in.amount() * multiplier));
} else {
@ -105,8 +103,7 @@ public final class PatternScaler {
}
}
List<GenericStack> scaledSparseOutputs = new ArrayList<>(baseSparseOutputs.size());
for (int i = 0; i < baseSparseOutputs.size(); i++) {
var out = baseSparseOutputs.get(i);
for (GenericStack out : baseSparseOutputs) {
if (out != null) {
scaledSparseOutputs.add(new GenericStack(out.what(), out.amount() * multiplier));
} else {

View File

@ -2,7 +2,7 @@ package com.extendedae_plus.util.entitySpeed;
import appeng.api.upgrades.IUpgradeInventory;
import com.extendedae_plus.ae.definitions.upgrades.EntitySpeedCardItem;
import com.extendedae_plus.config.ModConfigs;
import com.extendedae_plus.config.EAEPConfig;
import net.minecraft.world.item.ItemStack;
import java.util.ArrayList;
@ -63,7 +63,7 @@ public final class PowerUtils {
*/
public static double computeFinalPowerForProduct(long product, int energyCardCount) {
if (product <= 1L) return 0.0;
double base = ModConfigs.ENTITY_TICKER_COST.get();
double base = EAEPConfig.ENTITY_TICKER_COST.get();
double log2 = Math.log(product) / Math.log(2.0);
double raw;
if (product == 2L) {

View File

@ -1,6 +1,6 @@
package com.extendedae_plus.wireless;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.config.EAEPConfig;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.Level;
@ -63,7 +63,7 @@ public final class WirelessMasterRegistry {
}
private static boolean useGlobal() {
return ModConfig.WIRELESS_CROSS_DIM_ENABLE.get();
return EAEPConfig.WIRELESS_CROSS_DIM_ENABLE.get();
}
private record Key(ResourceKey<Level> dim, long freq) {

View File

@ -4,8 +4,7 @@ import appeng.api.networking.GridHelper;
import appeng.api.networking.IGridConnection;
import appeng.api.networking.IGridNode;
import appeng.me.service.helpers.ConnectionWrapper;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.util.ExtendedAELogger;
import com.extendedae_plus.config.EAEPConfig;
import net.minecraft.server.level.ServerLevel;
import java.util.Objects;
@ -13,7 +12,7 @@ import java.util.Objects;
/**
* 从收发器连接器
* - 通过频率查找同维度主收发器
* - 校验距离<= ModConfigs.WIRELESS_MAX_RANGE
* - 校验距离<= EAEPConfig.WIRELESS_MAX_RANGE
* - 动态创建/销毁 AE2 连接GridConnection实现一主多从
*/
public class WirelessSlaveLink {
@ -66,12 +65,12 @@ public class WirelessSlaveLink {
shutdown = false;
distance = 0.0D;
boolean crossDim = ModConfig.WIRELESS_CROSS_DIM_ENABLE.get();
boolean crossDim = EAEPConfig.WIRELESS_CROSS_DIM_ENABLE.get();
if (master != null && !master.isEndpointRemoved() && (crossDim || master.getServerLevel() == level)) {
if (!crossDim) {
distance = Math.sqrt(master.getBlockPos().distSqr(host.getBlockPos()));
}
double maxRange = ModConfig.WIRELESS_MAX_RANGE.get();
double maxRange = EAEPConfig.WIRELESS_MAX_RANGE.get();
if (crossDim || distance <= maxRange) {
// 保持/建立连接
try {

View File

@ -32,6 +32,7 @@
"tooltip.extendedae_plus.infinity_biginteger_cell.summon2": "§b—§4A §dUni§cverse §eWith§ain §6A §bSin§5gle §9Point",
"tooltip.extendedae_plus.entity_speed_card.multiplier": "Multiplier: %s",
"tooltip.extendedae_plus.entity_speed_card.max": "Maximum Effect: %s Times",
"tooltip.extendedae_plus.encode_button.upload_pattern": "\n§a[Ctrl] §7Upload patterns",
"block.extendedae_plus.wireless_transceiver": "Wireless Transceiver",
"block.extendedae_plus.4x_crafting_accelerator": "4x Crafting Accelerator",
@ -74,20 +75,17 @@
"extendedae_plus.tooltip.frequency": "Frequency: %d",
"extendedae_plus.tooltip.master_mode": "Mode: %s",
"extendedae_plus.tooltip.locked": "Lock Status: %s",
"tooltip.extendedae_plus.encode_button_description": "\n§a[Ctrl] §7Upload patterns",
"screen.extendedae_plus.title": "ExtendedAE Plus Configuration",
"config.extendedae_plus": "ExtendedAE Plus",
"extendedae_plus.configuration.common": "Common Configuration",
"extendedae_plus.configuration.pageMultiplier": "Pattern Provider Slot Multiplier",
"extendedae_plus.configuration.pageMultiplier_with_range": "Pattern Provider Slot Multiplier (1-64)",
"extendedae_plus.configuration.override_ae2wt_picking": "Override AE2WT Picking",
"extendedae_plus.configuration.overrideAE2WTPicking": "Override AE2WT Picking",
"extendedae_plus.configuration.client": "Display Configuration",
"extendedae_plus.configuration.showEncoderPatternPlayer": "Show Pattern Encoder Player",
"extendedae_plus.configuration.patternTerminalShowSlotsDefault": "Pattern Terminal Show Slots by Default",
"extendedae_plus.configuration.independence_uploading_button": "Independence Upload Button",
"extendedae_plus.configuration.independentUploadingButton": "Independent Upload Button",
"extendedae_plus.configuration.ae": "AE2 Configuration",
@ -105,6 +103,7 @@
"extendedae_plus.configuration.entityTickerBlackList": "Entity Ticker Blacklist",
"extendedae_plus.configuration.entityTickerMultipliers": "Entity Ticker Extra Cost Multipliers",
"extendedae_plus.configuration.prioritizeDiskEnergy": "Prioritize FE energy from disk (requires Applied Flux)",
"extendedae_plus.configuration.needsUploadingCore": "Needs Upload Core",
"extendedae_plus.configuration.state_on": "On",
"extendedae_plus.configuration.state_off": "Off"

View File

@ -32,7 +32,7 @@
"tooltip.extendedae_plus.infinity_biginteger_cell.summon2": "§b——§4方§d寸§c之§e间§a, §6自§b有§5千§9寰",
"tooltip.extendedae_plus.entity_speed_card.multiplier": "乘数: %s",
"tooltip.extendedae_plus.entity_speed_card.max": "最大生效: %s 倍",
"tooltip.extendedae_plus.encode_button_description": "\n§a[Ctrl] §7上传样板",
"tooltip.extendedae_plus.encode_button.upload_pattern": "\n§a[Ctrl] §7上传样板",
"block.extendedae_plus.wireless_transceiver": "无线收发器",
"block.extendedae_plus.4x_crafting_accelerator": "4x并行处理单元",
@ -79,15 +79,13 @@
"screen.extendedae_plus.title": "ExtendedAE Plus 配置",
"config.extendedae_plus": "ExtendedAE Plus",
"extendedae_plus.configuration.common": "通用配置",
"extendedae_plus.configuration.pageMultiplier": "扩展样板供应器槽位倍率",
"extendedae_plus.configuration.pageMultiplier_with_range": "扩展样板供应器槽位倍率 (1-64)",
"extendedae_plus.configuration.override_ae2wt_picking": "覆盖AE2WT选取",
"extendedae_plus.configuration.overrideAE2WTPicking": "覆盖AE2WT选取",
"extendedae_plus.configuration.client": "显示配置",
"extendedae_plus.configuration.showEncoderPatternPlayer": "显示样板编码玩家",
"extendedae_plus.configuration.patternTerminalShowSlotsDefault": "样板终端默认显示槽位",
"extendedae_plus.configuration.independence_uploading_button": "独立上传按钮",
"extendedae_plus.configuration.independentUploadingButton": "独立上传按钮",
"extendedae_plus.configuration.ae": "AE2配置",
"extendedae_plus.configuration.craftingPauseThreshold": "AE合成计算暂停检查阈值",
@ -104,6 +102,7 @@
"extendedae_plus.configuration.entityTickerBlackList": "实体加速器黑名单",
"extendedae_plus.configuration.entityTickerMultipliers": "实体加速器额外消耗倍率",
"extendedae_plus.configuration.prioritizeDiskEnergy": "优先从磁盘提取FE能量仅当Applied Flux模组存在时生效",
"extendedae_plus.configuration.needsUploadingCore": "需要装配矩阵上传核心",
"extendedae_plus.configuration.state_on": "开",
"extendedae_plus.configuration.state_off": "关"