diff --git a/build.gradle b/build.gradle index 8d13863..5f0b1dd 100644 --- a/build.gradle +++ b/build.gradle @@ -99,6 +99,8 @@ dependencies { modCompileOnly "curse.maven:advancedae-1084104:6939473" modRuntimeOnly "curse.maven:advancedae-1084104:6939473" + modCompileOnly "mezz.jei:jei-${minecraft_version}-forge:${jei_version}" + modRuntimeOnly "mezz.jei:jei-${minecraft_version}-forge:15.20.0.112" modImplementation "mezz.jei:jei-${minecraft_version}-forge:${jei_version}" modImplementation "curse.maven:jade-324717:${jade_version}" diff --git a/src/main/java/com/extendedae_plus/ae/items/InfinityBigIntegerCellItem.java b/src/main/java/com/extendedae_plus/ae/items/InfinityBigIntegerCellItem.java index 627024d..655cc0c 100644 --- a/src/main/java/com/extendedae_plus/ae/items/InfinityBigIntegerCellItem.java +++ b/src/main/java/com/extendedae_plus/ae/items/InfinityBigIntegerCellItem.java @@ -33,8 +33,7 @@ public class InfinityBigIntegerCellItem extends Item implements ICellWorkbenchIt @Nullable Level world, @NotNull List tooltip, @NotNull TooltipFlag context) { - tooltip.add(Component.translatable("tooltip.extendedae_plus.infinity_biginteger_cell.summon1")); - tooltip.add(Component.translatable("tooltip.extendedae_plus.infinity_biginteger_cell.summon2")); + tooltip.add(Component.translatable("tooltip.extendedae_plus.infinity_biginteger_cell")); Preconditions.checkArgument(stack.getItem() == this); // 仅在 ItemStack 自身存在 UUID 时显示 UUID,避免触发持久化或加载逻辑 diff --git a/src/main/java/com/extendedae_plus/datagen/CraftingRecipes.java b/src/main/java/com/extendedae_plus/datagen/CraftingRecipes.java new file mode 100644 index 0000000..4a76d47 --- /dev/null +++ b/src/main/java/com/extendedae_plus/datagen/CraftingRecipes.java @@ -0,0 +1,377 @@ +package com.extendedae_plus.datagen; + +import appeng.core.definitions.AEBlocks; +import appeng.core.definitions.AEItems; +import appeng.datagen.providers.tags.ConventionTags; +import appeng.recipes.transform.TransformCircumstance; +import appeng.recipes.transform.TransformRecipeBuilder; +import com.extendedae_plus.ExtendedAEPlus; +import com.extendedae_plus.init.ModItems; +import com.extendedae_plus.item.BasicCoreItem; +import com.extendedae_plus.util.ModCheckUtils; +import com.glodblock.github.appflux.common.AFItemAndBlock; +import com.glodblock.github.appflux.util.AFTags; +import gripe._90.megacells.definition.MEGAItems; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.pedroksl.advanced_ae.common.definitions.AAEBlocks; +import net.pedroksl.advanced_ae.common.definitions.AAEFluids; +import net.pedroksl.advanced_ae.common.definitions.AAEItems; +import net.pedroksl.advanced_ae.recipes.ReactionChamberRecipeBuilder; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Consumer; + +public class CraftingRecipes extends RecipeProvider { + public CraftingRecipes(PackOutput output) { + super(output); + } + + @Override + public void buildRecipes(@NotNull Consumer consumer) { + addCoreRecipes(consumer); + addTransformRecipes(consumer); + addReactionChamberRecipes(consumer); + } + + private void addCoreRecipes(Consumer consumer) { + // 基础核心配方 + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.BASIC_CORE.get()) + .pattern("ABA") + .pattern("CDE") + .pattern("AFA") + .define('A', Items.NETHERITE_BLOCK) + .define('B', Items.NETHER_STAR) + .define('C', AEItems.LOGIC_PROCESSOR) + .define('D', AEItems.FLUIX_PEARL) + .define('E', AEItems.ENGINEERING_PROCESSOR) + .define('F', AEItems.CALCULATION_PROCESSOR) + .unlockedBy("has_nether_star", has(Items.NETHER_STAR)) + .save(consumer, ExtendedAEPlus.id("core/basic_core")); + + ItemStack base = BasicCoreItem.of(null, 0); // 未定型核心 + // ====================== STORAGE LINE ====================== + // storage_1 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.storageStage(1)) + .pattern("MCM") + .pattern("LBP") + .pattern("MEM") + .define('M', ConventionTags.CERTUS_QUARTZ_DUST) + .define('C', AEItems.CELL_COMPONENT_16K) + .define('L', AEItems.LOGIC_PROCESSOR) + .defineNbt('B', base) + .define('P', AEItems.CALCULATION_PROCESSOR) + .define('E', AEItems.ENGINEERING_PROCESSOR) + .unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get())) + .save(consumer, ExtendedAEPlus.id("core/storage_core_1")); + + // storage_2 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.storageStage(2)) + .pattern("MOM") + .pattern("CBC") + .pattern("MOM") + .define('M', ConventionTags.ALL_CERTUS_QUARTZ) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('C', AEItems.CELL_COMPONENT_64K) + .defineNbt('B', BasicCoreItem.storageStage(1)) + .unlockedBy("has_storage_stage_1", has(BasicCoreItem.storageStage(1).getItem())) + .save(consumer, ExtendedAEPlus.id("core/storage_core_2")); + + // storage_3 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.storageStage(3)) + .pattern("MOM") + .pattern("CBC") + .pattern("MCM") + .define('M', AEBlocks.QUARTZ_BLOCK) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('C', AEItems.CELL_COMPONENT_256K) + .defineNbt('B', BasicCoreItem.storageStage(2)) + .unlockedBy("has_storage_stage_2", has(BasicCoreItem.storageStage(2).getItem())) + .save(consumer, ExtendedAEPlus.id("core/storage_core_3")); + + // ====================== SPATIAL LINE ====================== + // spatial_1 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.spatialStage(1)) + .pattern("MCM") + .pattern("LBP") + .pattern("MEM") + .define('M', ConventionTags.FLUIX_DUST) + .define('C', AEItems.SPATIAL_2_CELL_COMPONENT) + .define('L', AEItems.LOGIC_PROCESSOR) + .defineNbt('B', base) + .define('P', AEItems.CALCULATION_PROCESSOR) + .define('E', AEItems.ENGINEERING_PROCESSOR) + .unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get())) + .save(consumer, ExtendedAEPlus.id("core/spatial_core_1")); + + // spatial_2 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.spatialStage(2)) + .pattern("MOM") + .pattern("CBC") + .pattern("MOM") + .define('M', ConventionTags.FLUIX_CRYSTAL) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('C', AEItems.SPATIAL_16_CELL_COMPONENT) + .defineNbt('B', BasicCoreItem.spatialStage(1)) + .unlockedBy("has_spatial_stage_1", has(BasicCoreItem.spatialStage(1).getItem())) + .save(consumer, ExtendedAEPlus.id("core/spatial_core_2")); + + // spatial_3 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.spatialStage(3)) + .pattern("MOM") + .pattern("CBC") + .pattern("MCM") + .define('M', AEBlocks.FLUIX_BLOCK) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('C', AEItems.SPATIAL_128_CELL_COMPONENT) + .defineNbt('B', BasicCoreItem.spatialStage(2)) + .unlockedBy("has_spatial_stage_2", has(BasicCoreItem.spatialStage(2).getItem())) + .save(consumer, ExtendedAEPlus.id("core/spatial_core_3")); + + // ====================== ENERGY LINE (依赖 AppFlux) ====================== + // energy_storage_1 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.energyStage(1)) + .pattern("MCM") + .pattern("EBE") + .pattern("MEM") + .define('M', AFTags.REDSTONE_GEM) + .define('C', AFItemAndBlock.CORE_16k) + .define('E', AFItemAndBlock.ENERGY_PROCESSOR) + .defineNbt('B', base) + .unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get())) + .requiresMod(ModCheckUtils.MODID_APPFLUX) + .save(consumer, ExtendedAEPlus.id("core/energy_storage_core_1")); + + // energy_storage_2 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.energyStage(2)) + .pattern("MOM") + .pattern("CBC") + .pattern("MOM") + .define('M', AFItemAndBlock.CHARGED_REDSTONE) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('C', AFItemAndBlock.CORE_64k) + .defineNbt('B', BasicCoreItem.energyStage(1)) + .unlockedBy("has_energy_stage_1", has(BasicCoreItem.energyStage(1).getItem())) + .requiresMod(ModCheckUtils.MODID_APPFLUX) + .save(consumer, ExtendedAEPlus.id("core/energy_storage_core_2")); + + // energy_storage_3 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.energyStage(3)) + .pattern("MOM") + .pattern("CBC") + .pattern("MCM") + .define('M', AFTags.SKY_RESIN_INGOT) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('C', AFItemAndBlock.CORE_256k) + .defineNbt('B', BasicCoreItem.energyStage(2)) + .unlockedBy("has_energy_stage_2", has(BasicCoreItem.energyStage(2).getItem())) + .requiresMod(ModCheckUtils.MODID_APPFLUX) + .save(consumer, ExtendedAEPlus.id("core/energy_storage_core_3")); + + // ====================== QUANTUM LINE (依赖 Advanced AE) ====================== + // quantum_storage_1 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.quantumStage(1)) + .pattern("MCM") + .pattern("EBE") + .pattern("MEM") + .define('M', AAEItems.QUANTUM_ALLOY) + .define('C', AAEItems.QUANTUM_STORAGE_COMPONENT) + .define('E', AAEItems.QUANTUM_PROCESSOR) + .defineNbt('B', base) + .unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get())) + .requiresMod(ModCheckUtils.MODID_AAE) + .save(consumer, ExtendedAEPlus.id("core/quantum_storage_core_1")); + + // quantum_storage_2 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.quantumStage(2)) + .pattern("MOM") + .pattern("CBC") + .pattern("MOM") + .define('M', AAEBlocks.QUANTUM_ALLOY_BLOCK) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('C', AAEItems.QUANTUM_STORAGE_COMPONENT) + .defineNbt('B', BasicCoreItem.quantumStage(1)) + .unlockedBy("has_quantum_stage_1", has(BasicCoreItem.quantumStage(1).getItem())) + .requiresMod(ModCheckUtils.MODID_AAE) + .save(consumer, ExtendedAEPlus.id("core/quantum_storage_core_2")); + + // quantum_storage_3 + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, BasicCoreItem.quantumStage(3)) + .pattern("MOM") + .pattern("CBC") + .pattern("MCM") + .define('M', AAEItems.QUANTUM_ALLOY_PLATE) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('C', AAEBlocks.QUANTUM_STORAGE_128M) + .defineNbt('B', BasicCoreItem.quantumStage(2)) + .unlockedBy("has_quantum_stage_2", has(BasicCoreItem.quantumStage(2).getItem())) + .requiresMod(ModCheckUtils.MODID_AAE) + .save(consumer, ExtendedAEPlus.id("core/quantum_storage_core_3")); + + // storage_core + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.STORAGE_CORE.get()) + .pattern("MOM") + .pattern("NBN") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('N', Items.NETHER_STAR) + .define('C', AEItems.CELL_COMPONENT_256K) + .defineNbt('B', BasicCoreItem.storageStage(3)) + .unlockedBy("has_storage_stage_3", has(BasicCoreItem.storageStage(3).getItem())) + .notRequiresMod(ModCheckUtils.MODID_MEGA) + .save(consumer, ExtendedAEPlus.id("core/" + ModItems.STORAGE_CORE.get().toString().toLowerCase())); + + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.STORAGE_CORE.get()) + .pattern("MOM") + .pattern("NBN") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('N', Items.NETHER_STAR) + .define('C', MEGAItems.CELL_COMPONENT_256M) + .defineNbt('B', BasicCoreItem.storageStage(3)) + .unlockedBy("has_storage_stage_3", has(BasicCoreItem.storageStage(3).getItem())) + .requiresMod(ModCheckUtils.MODID_MEGA) + .save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.STORAGE_CORE.get().toString().toLowerCase())); + + // spatial_core + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.SPATIAL_CORE.get()) + .pattern("MOM") + .pattern("NBN") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('N', Items.NETHER_STAR) + .define('C', AEItems.SPATIAL_128_CELL_COMPONENT) + .defineNbt('B', BasicCoreItem.spatialStage(3)) + .unlockedBy("has_spatial_stage_3", has(BasicCoreItem.spatialStage(3).getItem())) + .save(consumer, ExtendedAEPlus.id("core/" + ModItems.SPATIAL_CORE.get().toString().toLowerCase())); + + // energy_storage_core + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.ENERGY_STORAGE_CORE.get()) + .pattern("MOM") + .pattern("NBN") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('N', Items.NETHER_STAR) + .define('C', AFItemAndBlock.CORE_256k) + .defineNbt('B', BasicCoreItem.energyStage(3)) + .unlockedBy("has_energy_stage_3", has(BasicCoreItem.energyStage(3).getItem())) + .requiresMod(ModCheckUtils.MODID_APPFLUX) + .notRequiresMod(ModCheckUtils.MODID_MEGA) + .save(consumer, ExtendedAEPlus.id("core/" + ModItems.ENERGY_STORAGE_CORE.get().toString().toLowerCase())); + + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.ENERGY_STORAGE_CORE.get()) + .pattern("MOM") + .pattern("NBN") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('N', Items.NETHER_STAR) + .define('C', AFItemAndBlock.CORE_256M) + .defineNbt('B', BasicCoreItem.energyStage(3)) + .unlockedBy("has_energy_stage_3", has(BasicCoreItem.energyStage(3).getItem())) + .requiresMod(ModCheckUtils.MODID_APPFLUX) + .requiresMod(ModCheckUtils.MODID_MEGA) + .save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.ENERGY_STORAGE_CORE.get().toString().toLowerCase())); + + // quantum_storage_core + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.QUANTUM_STORAGE_CORE.get()) + .pattern("MOM") + .pattern("NBN") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('N', Items.NETHER_STAR) + .define('C', AAEBlocks.QUANTUM_STORAGE_256M) + .defineNbt('B', BasicCoreItem.quantumStage(3)) + .unlockedBy("has_quantum_stage_3", has(BasicCoreItem.quantumStage(3).getItem())) + .requiresMod(ModCheckUtils.MODID_AAE) + .save(consumer, ExtendedAEPlus.id("core/" + ModItems.QUANTUM_STORAGE_CORE.get().toString().toLowerCase())); + + // infinity_core + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.INFINITY_CORE.get()) + .pattern("MNM") + .pattern("SOS") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('N', Items.NETHER_STAR) + .define('S', ModItems.STORAGE_CORE.get()) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('C', ModItems.SPATIAL_CORE.get()) + .unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get())) + .notRequiresMod(ModCheckUtils.MODID_APPFLUX) + .notRequiresMod(ModCheckUtils.MODID_AAE) + .save(consumer, ExtendedAEPlus.id("core/" + ModItems.INFINITY_CORE.get().toString().toLowerCase())); + + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.INFINITY_CORE.get()) + .pattern("MNM") + .pattern("SOE") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('N', Items.NETHER_STAR) + .define('S', ModItems.STORAGE_CORE.get()) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('E', ModItems.ENERGY_STORAGE_CORE.get()) + .define('C', ModItems.SPATIAL_CORE.get()) + .unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get())) + .requiresMod(ModCheckUtils.MODID_APPFLUX) + .notRequiresMod(ModCheckUtils.MODID_AAE) + .save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.INFINITY_CORE.get().toString().toLowerCase() + "_1")); + + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.INFINITY_CORE.get()) + .pattern("MNM") + .pattern("SOQ") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('N', Items.NETHER_STAR) + .define('S', ModItems.STORAGE_CORE.get()) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('Q', ModItems.QUANTUM_STORAGE_CORE.get()) + .define('C', ModItems.SPATIAL_CORE.get()) + .unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get())) + .requiresMod(ModCheckUtils.MODID_AAE) + .notRequiresMod(ModCheckUtils.MODID_APPFLUX) + .save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.INFINITY_CORE.get().toString().toLowerCase() + "_2")); + + NBTShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.INFINITY_CORE.get()) + .pattern("MQM") + .pattern("SOE") + .pattern("MCM") + .define('M', Items.NETHERITE_BLOCK) + .define('Q', ModItems.QUANTUM_STORAGE_CORE.get()) + .define('S', ModItems.STORAGE_CORE.get()) + .define('O', ModItems.OBLIVION_SINGULARITY.get()) + .define('E', ModItems.ENERGY_STORAGE_CORE.get()) + .define('C', ModItems.SPATIAL_CORE.get()) + .unlockedBy("has_basic_core", has(ModItems.BASIC_CORE.get())) + .requiresMod(ModCheckUtils.MODID_AAE) + .requiresMod(ModCheckUtils.MODID_APPFLUX) + .save(consumer, ExtendedAEPlus.id("core/compat/" + ModItems.INFINITY_CORE.get().toString().toLowerCase() + "_3")); + } + + private void addTransformRecipes(Consumer consumer) { + TransformRecipeBuilder.transform(consumer, + ExtendedAEPlus.id("transform/" + ModItems.OBLIVION_SINGULARITY.get().toString().toLowerCase()), + ModItems.OBLIVION_SINGULARITY.get(), 1, + TransformCircumstance.EXPLOSION, + AEItems.SINGULARITY, Items.NETHER_STAR, Items.NETHERITE_BLOCK + ); + } + + private void addReactionChamberRecipes(Consumer consumer) { + ReactionChamberRecipeBuilder.react(ModItems.OBLIVION_SINGULARITY.get(), 1, 100000) + .input(AEItems.SINGULARITY, 2) + .input(Items.NETHER_STAR, 1) + .input(AAEItems.QUANTUM_ALLOY_PLATE, 4) + .fluid(AAEFluids.QUANTUM_INFUSION.source(), 2000) + .save(consumer, ModItems.OBLIVION_SINGULARITY.get().toString().toLowerCase()); + } +} diff --git a/src/main/java/com/extendedae_plus/integration/jei/ExtendedAEJeiPlugin.java b/src/main/java/com/extendedae_plus/integration/jei/ExtendedAEJeiPlugin.java index e00e5c3..c27c19a 100644 --- a/src/main/java/com/extendedae_plus/integration/jei/ExtendedAEJeiPlugin.java +++ b/src/main/java/com/extendedae_plus/integration/jei/ExtendedAEJeiPlugin.java @@ -60,9 +60,9 @@ public class ExtendedAEJeiPlugin implements IModPlugin { private boolean isCoreTypeAvailable(int typeId) { return switch (typeId) { - case 0, 1 -> true; // storage, spatial - case 2 -> ModCheckUtils.isAppfluxLoading(); - case 3 -> ModCheckUtils.isAAELoading(); + case 1, 2 -> true; // storage, spatial + case 3 -> ModCheckUtils.isAppfluxLoading(); + case 4 -> ModCheckUtils.isAAELoading(); default -> false; }; } diff --git a/src/main/java/com/extendedae_plus/item/BasicCoreItem.java b/src/main/java/com/extendedae_plus/item/BasicCoreItem.java index 040cab6..ca68044 100644 --- a/src/main/java/com/extendedae_plus/item/BasicCoreItem.java +++ b/src/main/java/com/extendedae_plus/item/BasicCoreItem.java @@ -20,14 +20,14 @@ import java.util.Optional; public class BasicCoreItem extends Item { private static final String NBT_MODEL = "CustomModelData"; // 1~4 = 类型, 无或0 = 未定型 - private static final String NBT_STAGE = "core_stage"; // 0~4 = 阶段 - private static final int MAX_STAGE = 4; + private static final String NBT_STAGE = "core_stage"; // 0~3 = 阶段 + private static final int MAX_STAGE = 3; public BasicCoreItem(Properties props) { super(props.stacksTo(1).setNoRepair()); } - // ==================== 工厂方法:CustomModelData = CoreType.id (1~4) ==================== + // ==================== 工厂方法 ==================== public static ItemStack of(CoreType type, int stage) { ItemStack stack = new ItemStack(ModItems.BASIC_CORE.get()); if (type != null && stage >= 0 && stage <= MAX_STAGE) { @@ -70,7 +70,8 @@ public class BasicCoreItem extends Item { @Override public int getBarWidth(@NotNull ItemStack stack) { - return isTyped(stack) ? Math.round(13.0f * getStage(stack) / MAX_STAGE) : 0; + if (!isTyped(stack)) return 0; + return Math.round(13.0f * getStage(stack) / MAX_STAGE); } @Override @@ -101,7 +102,7 @@ public class BasicCoreItem extends Item { .withStyle(ChatFormatting.YELLOW)); int stage = getStage(stack); - for (int i = 1; i <= 4; i++) { + for (int i = 1; i <= 3; i++) { String key = "item." + ExtendedAEPlus.MODID + ".basic_core." + type.key + "." + i; ChatFormatting color = i <= stage ? ChatFormatting.GREEN : ChatFormatting.DARK_GRAY; String prefix = i <= stage ? "✔ " : "✘ "; @@ -135,7 +136,7 @@ public class BasicCoreItem extends Item { : Rarity.COMMON; } - // ==================== 核心类型枚举:id = CustomModelData (1~4) ==================== + // ==================== 核心类型枚举 ==================== public enum CoreType { STORAGE (1, "storage", ChatFormatting.AQUA), SPATIAL (2, "spatial", ChatFormatting.YELLOW), @@ -165,9 +166,11 @@ public class BasicCoreItem extends Item { public ChatFormatting getTextColor() { return textColor; } public Rarity getRarity(int stage) { - return stage == 0 ? Rarity.COMMON : - stage <= 2 ? Rarity.UNCOMMON : - stage == 3 ? Rarity.RARE : Rarity.EPIC; + return switch (stage) { + case 1, 2 -> Rarity.UNCOMMON; + case 3 -> Rarity.EPIC; + default -> Rarity.COMMON; + }; } } } \ No newline at end of file diff --git a/src/main/java/com/extendedae_plus/mixin/MixinConditions.java b/src/main/java/com/extendedae_plus/mixin/MixinConditions.java index 5f87ffa..b0ea41c 100644 --- a/src/main/java/com/extendedae_plus/mixin/MixinConditions.java +++ b/src/main/java/com/extendedae_plus/mixin/MixinConditions.java @@ -28,23 +28,17 @@ public class MixinConditions implements IMixinConfigPlugin { try { // === MAE2 兼容 === if (mixinClassName.contains("CraftingCPUClusterMixin")) { - boolean shouldApply = !ModCheckUtils.isLoaded(ModCheckUtils.MODID_MAE2); - log(mixinClassName, ModCheckUtils.MODID_MAE2, shouldApply); - return shouldApply; + return !ModCheckUtils.isLoaded(ModCheckUtils.MODID_MAE2); } // === AAE 兼容 === if (mixinClassName.startsWith("com.extendedae_plus.mixin.advancedae")) { - boolean shouldApply = ModCheckUtils.isLoaded(ModCheckUtils.MODID_AAE); - log(mixinClassName, ModCheckUtils.MODID_AAE, shouldApply); - return shouldApply; + return ModCheckUtils.isLoaded(ModCheckUtils.MODID_AAE); } // === GuideME 版本兼容 === if (mixinClassName.startsWith("com.extendedae_plus.mixin.guideme.")) { - boolean shouldApply = ModCheckUtils.isLoadedAndLowerThan(ModCheckUtils.MODID_GUIDEME, "20.1.14"); - logVersion(mixinClassName, ModCheckUtils.MODID_GUIDEME, ModCheckUtils.getVersion(ModCheckUtils.MODID_GUIDEME), "20.1.14", shouldApply); - return shouldApply; + return ModCheckUtils.isLoadedAndLowerThan(ModCheckUtils.MODID_GUIDEME, "20.1.14"); } return true; @@ -73,15 +67,4 @@ public class MixinConditions implements IMixinConfigPlugin { public void postApply(String targetClassName, org.objectweb.asm.tree.ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { // 应用后调用 } - - // === 日志方法 === - private void log(String mixin, String mod, boolean apply) { - System.out.printf("[ExtendedAE_Plus] 模组 %s 存在: %s, 应用 Mixin: %s, Mixin类:%s%n", - mod, ModCheckUtils.isLoaded(mod), apply, mixin); - } - - private void logVersion(String mixin, String mod, String detected, String target, boolean apply) { - System.out.printf("[ExtendedAE_Plus] 模组 %s 版本检测: 当前 %s, 目标 < %s, 应用 Mixin: %s%n", - mod, detected, target, apply); - } } diff --git a/src/main/java/com/extendedae_plus/util/ModCheckUtils.java b/src/main/java/com/extendedae_plus/util/ModCheckUtils.java index 9eb70c0..77acc3f 100644 --- a/src/main/java/com/extendedae_plus/util/ModCheckUtils.java +++ b/src/main/java/com/extendedae_plus/util/ModCheckUtils.java @@ -21,7 +21,8 @@ public class ModCheckUtils { MODID_FTB_TEAMS = "ftbteams", MODID_APPFLUX = "appflux", MODID_GUIDEME = "guideme", - MODID_MAE2 = "mae2"; + MODID_MAE2 = "mae2", + MODID_MEGA = "megacells"; /** * 检查指定模组是否存在 diff --git a/src/main/resources/assets/extendedae_plus/lang/en_us.json b/src/main/resources/assets/extendedae_plus/lang/en_us.json index 9da6bb3..4ffe9fe 100644 --- a/src/main/resources/assets/extendedae_plus/lang/en_us.json +++ b/src/main/resources/assets/extendedae_plus/lang/en_us.json @@ -32,17 +32,33 @@ "item.extendedae_plus.spatial_core": "Spatial Core", "item.extendedae_plus.oblivion_singularity": "Oblivion Singularity", "item.extendedae_plus.infinity_biginteger_cell": "§4De§cvou§6rer §eof §aCo§bsmic §dSilence", - "tooltip.extendedae_plus.infinity_biginteger_cell.summon1": "§6Through ninefold sacrifice, the Void echoes§r—§8Iava, Lord of the Void§r, bestows upon thee this artifact", - "tooltip.extendedae_plus.infinity_biginteger_cell.summon2": "§b—§4A §dUni§cverse §eWith§ain §6A §bSin§5gle §9Point", + "item.extendedae_plus.basic_core.storage.1": "Basic Core·Digitized", + "item.extendedae_plus.basic_core.storage.2": "Basic Core·Arrayed", + "item.extendedae_plus.basic_core.storage.3": "Basic Core·Matricized", + "item.extendedae_plus.basic_core.spatial.1": "Basic Core·Coordinated", + "item.extendedae_plus.basic_core.spatial.2": "Basic Core·Domainized", + "item.extendedae_plus.basic_core.spatial.3": "Basic Core·Dimensionalized", + "item.extendedae_plus.basic_core.energy_storage.1": "Basic Core·Quantified", + "item.extendedae_plus.basic_core.energy_storage.2": "Basic Core·Fluidized", + "item.extendedae_plus.basic_core.energy_storage.3": "Basic Core·Fielded", + "item.extendedae_plus.basic_core.quantum_storage.1": "Basic Core·Superposed", + "item.extendedae_plus.basic_core.quantum_storage.2": "Basic Core·Entangled", + "item.extendedae_plus.basic_core.quantum_storage.3": "Basic Core·Coherent", + + "tooltip.extendedae_plus.basic_core.untyped": "Core State: Awaiting Initialization", + "tooltip.extendedae_plus.basic_core.evolving_to": "Directed Evolution: %s", + "tooltip.extendedae_plus.basic_core.progress": "Construction Progress: ", + "tooltip.extendedae_plus.basic_core.ready_to_craft": "Core construction complete. Awaiting final synthesis", + "tooltip.extendedae_plus.infinity_biginteger_cell": "§7—§bThe tangible projection of absolute storage§r, §ewhere '§6The Finite§e' §chas been deemed illegal§r\n§bIts very existence§r §bis the ultimate negation of §dentropy§r", "tooltip.extendedae_plus.entity_speed_card.multiplier": "Multiplier: %s", "tooltip.extendedae_plus.entity_speed_card.max": "Max effective: %s x", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip": "Assembler Matrix Upload Core", "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload": "Upload to Assembler Matrix", "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_success": "Pattern uploaded to Assembler Matrix", "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_not_crafting": "Only crafting patterns supported, processing patterns ignored", "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_no_matrix": "No formed Assembler Matrix found in network", "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_full": "Assembler Matrix pattern storage full or cannot insert", - "block.extendedae_plus.wireless_transceiver": "Wireless Transceiver", "block.extendedae_plus.4x_crafting_accelerator": "4x Crafting Accelerator", "block.extendedae_plus.16x_crafting_accelerator": "16x Crafting Accelerator", diff --git a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json index 2ff4fb5..229c609 100644 --- a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json +++ b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json @@ -32,10 +32,26 @@ "item.extendedae_plus.oblivion_singularity": "湮灭奇点", "item.extendedae_plus.infinity_core": "吞噬核心", "item.extendedae_plus.infinity_biginteger_cell": "§4吞§c噬§6万§e籁§a的§b寂§d静", - "tooltip.extendedae_plus.infinity_biginteger_cell.summon1": "§6九重献祭, 终得虚空回响§r——觐见§8虚空之主Iava§r, 赐汝此物", - "tooltip.extendedae_plus.infinity_biginteger_cell.summon2": "§b——§4方§d寸§c之§e间§a, §6自§b有§5千§9寰", + "item.extendedae_plus.basic_core.storage.1": "基础核心·数据化", + "item.extendedae_plus.basic_core.storage.2": "基础核心·阵列化", + "item.extendedae_plus.basic_core.storage.3": "基础核心·矩阵化", + "item.extendedae_plus.basic_core.spatial.1": "基础核心·坐标化", + "item.extendedae_plus.basic_core.spatial.2": "基础核心·领域化", + "item.extendedae_plus.basic_core.spatial.3": "基础核心·维度化", + "item.extendedae_plus.basic_core.energy_storage.1": "基础核心·通量化", + "item.extendedae_plus.basic_core.energy_storage.2": "基础核心·流态化", + "item.extendedae_plus.basic_core.energy_storage.3": "基础核心·场域化", + "item.extendedae_plus.basic_core.quantum_storage.1": "基础核心·叠加化", + "item.extendedae_plus.basic_core.quantum_storage.2": "基础核心·纠缠化", + "item.extendedae_plus.basic_core.quantum_storage.3": "基础核心·相干化", + "tooltip.extendedae_plus.basic_core.untyped": "核心状态:待初始化", + "tooltip.extendedae_plus.basic_core.evolving_to": "定向演化:%s", + "tooltip.extendedae_plus.basic_core.progress": "构建进度:", + "tooltip.extendedae_plus.basic_core.ready_to_craft": "核心构建完成,等待最终合成", + "tooltip.extendedae_plus.infinity_biginteger_cell": "§7——§b绝对存储的现实投影,§e\"有限\"§6已被定义为§c非法\n§b其存在本身,即是对§d熵增§b的终极否定", "tooltip.extendedae_plus.entity_speed_card.multiplier": "乘数: %s", "tooltip.extendedae_plus.entity_speed_card.max": "最大生效: %s 倍", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip": "装配矩阵上传核心", "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload": "上传到装配矩阵", "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_success": "样板已上传到装配矩阵",