From 41a6a21498c794dbb9fcac17aaacb207d3c4088f Mon Sep 17 00:00:00 2001 From: GaLi <3096147684@qq.com> Date: Fri, 22 Aug 2025 19:30:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B9=B6=E8=A1=8C=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=8D=95=E5=85=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../com/extendedae_plus/ExtendedAEPlus.java | 23 +++++ .../client/ClientModelEvents.java | 20 ++++ .../extendedae_plus/client/ClientProxy.java | 37 ++++++++ .../EPlusCraftingCubeModelProvider.java | 86 ++++++++++++++++++ .../crafting/EPlusCraftingUnitType.java | 42 +++++++++ .../hooks/BuiltInModelHooks.java | 27 ++++++ .../com/extendedae_plus/init/ModBlocks.java | 41 +++++++++ .../extendedae_plus/init/ModCreativeTabs.java | 4 + .../com/extendedae_plus/init/ModItems.java | 21 +++++ .../mixin/ae2/CraftingCPUClusterMixin.java | 24 +++++ .../mixin/hooks/ModelBakeryMixin.java | 33 +++++++ .../blockstates/16x_crafting_accelerator.json | 6 ++ .../256x_crafting_accelerator.json | 6 ++ .../blockstates/4x_crafting_accelerator.json | 6 ++ .../blockstates/64x_crafting_accelerator.json | 6 ++ .../block/crafting/16x_accelerator.json | 4 + .../crafting/16x_accelerator_formed.json | 4 + .../block/crafting/256x_accelerator.json | 4 + .../crafting/256x_accelerator_formed.json | 4 + .../models/block/crafting/4x_accelerator.json | 4 + .../block/crafting/4x_accelerator_formed.json | 4 + .../block/crafting/64x_accelerator.json | 4 + .../crafting/64x_accelerator_formed.json | 4 + .../models/item/16x_crafting_accelerator.json | 1 + .../item/256x_crafting_accelerator.json | 1 + .../models/item/4x_crafting_accelerator.json | 1 + .../models/item/64x_crafting_accelerator.json | 1 + .../block/crafting/16x_accelerator.png | Bin 0 -> 6717 bytes .../block/crafting/16x_accelerator_light.png | Bin 0 -> 6064 bytes .../block/crafting/256x_accelerator.png | Bin 0 -> 6722 bytes .../block/crafting/256x_accelerator_light.png | Bin 0 -> 6052 bytes .../block/crafting/4x_accelerator.png | Bin 0 -> 6728 bytes .../block/crafting/4x_accelerator_light.png | Bin 0 -> 6055 bytes .../block/crafting/64x_accelerator.png | Bin 0 -> 6733 bytes .../block/crafting/64x_accelerator_light.png | Bin 0 -> 6048 bytes .../textures/block/crafting/light_base.png | Bin 0 -> 3265 bytes .../textures/block/crafting/ring_corner.png | Bin 0 -> 2940 bytes .../textures/block/crafting/ring_side_hor.png | Bin 0 -> 3075 bytes .../textures/block/crafting/ring_side_ver.png | Bin 0 -> 2965 bytes .../resources/extendedae_plus.mixins.json | 4 +- 41 files changed, 422 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/extendedae_plus/client/ClientModelEvents.java create mode 100644 src/main/java/com/extendedae_plus/client/ClientProxy.java create mode 100644 src/main/java/com/extendedae_plus/client/render/crafting/EPlusCraftingCubeModelProvider.java create mode 100644 src/main/java/com/extendedae_plus/content/crafting/EPlusCraftingUnitType.java create mode 100644 src/main/java/com/extendedae_plus/hooks/BuiltInModelHooks.java create mode 100644 src/main/java/com/extendedae_plus/mixin/ae2/CraftingCPUClusterMixin.java create mode 100644 src/main/java/com/extendedae_plus/mixin/hooks/ModelBakeryMixin.java create mode 100644 src/main/resources/assets/extendedae_plus/blockstates/16x_crafting_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/blockstates/256x_crafting_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/blockstates/4x_crafting_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/blockstates/64x_crafting_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/models/block/crafting/16x_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/models/block/crafting/16x_accelerator_formed.json create mode 100644 src/main/resources/assets/extendedae_plus/models/block/crafting/256x_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/models/block/crafting/256x_accelerator_formed.json create mode 100644 src/main/resources/assets/extendedae_plus/models/block/crafting/4x_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/models/block/crafting/4x_accelerator_formed.json create mode 100644 src/main/resources/assets/extendedae_plus/models/block/crafting/64x_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/models/block/crafting/64x_accelerator_formed.json create mode 100644 src/main/resources/assets/extendedae_plus/models/item/16x_crafting_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/models/item/256x_crafting_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/models/item/4x_crafting_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/models/item/64x_crafting_accelerator.json create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/16x_accelerator.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/16x_accelerator_light.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/256x_accelerator.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/256x_accelerator_light.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/4x_accelerator.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/4x_accelerator_light.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/64x_accelerator.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/64x_accelerator_light.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/light_base.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/ring_corner.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/ring_side_hor.png create mode 100644 src/main/resources/assets/extendedae_plus/textures/block/crafting/ring_side_ver.png diff --git a/gradle.properties b/gradle.properties index 36d7385..d28f3d4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G loom.platform = forge # Mod properties -mod_version = 1.3.2-fix1 +mod_version = 1.3.3 maven_group = com.extendedae_plus archives_name = extendedae_plus diff --git a/src/main/java/com/extendedae_plus/ExtendedAEPlus.java b/src/main/java/com/extendedae_plus/ExtendedAEPlus.java index 6c848ca..42d69e6 100644 --- a/src/main/java/com/extendedae_plus/ExtendedAEPlus.java +++ b/src/main/java/com/extendedae_plus/ExtendedAEPlus.java @@ -15,6 +15,11 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraft.resources.ResourceLocation; + +import com.extendedae_plus.client.ClientProxy; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; /** * ExtendedAE Plus 主mod类 @@ -24,6 +29,14 @@ public class ExtendedAEPlus { public static final String MODID = "extendedae_plus"; + // 在类加载时(尽可能早)在客户端注册内置模型,避免首次资源加载时错过。 + static { + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { + System.out.println("[ExtendedAE_Plus] Static init: register built-in models"); + ClientProxy.init(); + }); + } + public ExtendedAEPlus() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); @@ -41,6 +54,9 @@ public class ExtendedAEPlus { // 注册通用配置 ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModConfigs.COMMON_SPEC); + + // 构造期在客户端再确保一次注册(幂等) + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientProxy::init); } /** @@ -54,4 +70,11 @@ public class ExtendedAEPlus { MenuLocators.register(CuriosItemLocator.class, CuriosItemLocator::writeToPacket, CuriosItemLocator::readFromPacket); }); } + + /** + * 便捷方法:生成 ResourceLocation + */ + public static ResourceLocation id(String path) { + return new ResourceLocation(MODID, path); + } } diff --git a/src/main/java/com/extendedae_plus/client/ClientModelEvents.java b/src/main/java/com/extendedae_plus/client/ClientModelEvents.java new file mode 100644 index 0000000..ad33bef --- /dev/null +++ b/src/main/java/com/extendedae_plus/client/ClientModelEvents.java @@ -0,0 +1,20 @@ +package com.extendedae_plus.client; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.ModelEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +/** + * 确保在模型烘焙/资源重载期间也会注册内置模型,避免在刷新资源后丢失内置模型映射。 + */ +@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) +public final class ClientModelEvents { + private ClientModelEvents() {} + + @SubscribeEvent + public static void onRegisterAdditional(ModelEvent.RegisterAdditional event) { + // 在每次模型重载开始时确保内置模型已注册 + ClientProxy.init(); + } +} diff --git a/src/main/java/com/extendedae_plus/client/ClientProxy.java b/src/main/java/com/extendedae_plus/client/ClientProxy.java new file mode 100644 index 0000000..10d95d9 --- /dev/null +++ b/src/main/java/com/extendedae_plus/client/ClientProxy.java @@ -0,0 +1,37 @@ +package com.extendedae_plus.client; + +import appeng.client.render.crafting.CraftingCubeModel; +import com.extendedae_plus.ExtendedAEPlus; +import com.extendedae_plus.client.render.crafting.EPlusCraftingCubeModelProvider; +import com.extendedae_plus.content.crafting.EPlusCraftingUnitType; +import com.extendedae_plus.hooks.BuiltInModelHooks; + +/** + * 客户端模型注册,参照 MAE2 的做法将 formed 模型注册为内置模型。 + */ +public final class ClientProxy { + private ClientProxy() {} + + private static boolean REGISTERED = false; + + public static void init() { + if (REGISTERED) return; + REGISTERED = true; + // 注册四种形成态模型为内置模型(使用 *_formed_v2 避免与现有 JSON 冲突) + BuiltInModelHooks.addBuiltInModel( + ExtendedAEPlus.id("block/crafting/4x_accelerator_formed_v2"), + new CraftingCubeModel(new EPlusCraftingCubeModelProvider(EPlusCraftingUnitType.ACCELERATOR_4x))); + + BuiltInModelHooks.addBuiltInModel( + ExtendedAEPlus.id("block/crafting/16x_accelerator_formed_v2"), + new CraftingCubeModel(new EPlusCraftingCubeModelProvider(EPlusCraftingUnitType.ACCELERATOR_16x))); + + BuiltInModelHooks.addBuiltInModel( + ExtendedAEPlus.id("block/crafting/64x_accelerator_formed_v2"), + new CraftingCubeModel(new EPlusCraftingCubeModelProvider(EPlusCraftingUnitType.ACCELERATOR_64x))); + + BuiltInModelHooks.addBuiltInModel( + ExtendedAEPlus.id("block/crafting/256x_accelerator_formed_v2"), + new CraftingCubeModel(new EPlusCraftingCubeModelProvider(EPlusCraftingUnitType.ACCELERATOR_256x))); + } +} diff --git a/src/main/java/com/extendedae_plus/client/render/crafting/EPlusCraftingCubeModelProvider.java b/src/main/java/com/extendedae_plus/client/render/crafting/EPlusCraftingCubeModelProvider.java new file mode 100644 index 0000000..edd3b36 --- /dev/null +++ b/src/main/java/com/extendedae_plus/client/render/crafting/EPlusCraftingCubeModelProvider.java @@ -0,0 +1,86 @@ +package com.extendedae_plus.client.render.crafting; + +import appeng.client.render.crafting.AbstractCraftingUnitModelProvider; +import appeng.client.render.crafting.LightBakedModel; +import com.extendedae_plus.ExtendedAEPlus; +import com.extendedae_plus.content.crafting.EPlusCraftingUnitType; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.Material; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.ChunkRenderTypeSet; +import net.minecraftforge.client.model.data.ModelData; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; + +/** + * 参照 MAE2 的 DynamicCraftingCubeModelProvider,实现形成态光照模型。 + */ +public class EPlusCraftingCubeModelProvider + extends AbstractCraftingUnitModelProvider { + + public static final ChunkRenderTypeSet CUTOUT = ChunkRenderTypeSet.of(RenderType.cutout()); + private static final List MATERIALS = new ArrayList<>(); + + // 与 MAE2 一致:将环形边框与基础发光底图放在本模组命名空间 + 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"); + + // 我们自己的亮面贴图(formed 时使用) + protected static final Material ACCELERATOR_4X_LIGHT = texture(ExtendedAEPlus.MODID, + "4x_accelerator_light"); + protected static final Material ACCELERATOR_16X_LIGHT = texture(ExtendedAEPlus.MODID, + "16x_accelerator_light"); + protected static final Material ACCELERATOR_64X_LIGHT = texture(ExtendedAEPlus.MODID, + "64x_accelerator_light"); + protected static final Material ACCELERATOR_256X_LIGHT = texture(ExtendedAEPlus.MODID, + "256x_accelerator_light"); + + public EPlusCraftingCubeModelProvider(EPlusCraftingUnitType type) { + super(type); + } + + @Override + public List getMaterials() { + return Collections.unmodifiableList(MATERIALS); + } + + @Override + public BakedModel getBakedModel(Function spriteGetter) { + TextureAtlasSprite ringCorner = spriteGetter.apply(RING_CORNER); + TextureAtlasSprite ringSideHor = spriteGetter.apply(RING_SIDE_HOR); + TextureAtlasSprite ringSideVer = spriteGetter.apply(RING_SIDE_VER); + + return new LightBakedModel(ringCorner, ringSideHor, ringSideVer, + spriteGetter.apply(LIGHT_BASE), this.getLightMaterial(spriteGetter)) { + public ChunkRenderTypeSet getRenderTypes(BlockState state, RandomSource rand, ModelData data) { + return CUTOUT; + } + }; + } + + private TextureAtlasSprite getLightMaterial(Function textureGetter) { + return switch (this.type) { + case ACCELERATOR_4x -> textureGetter.apply(ACCELERATOR_4X_LIGHT); + case ACCELERATOR_16x -> textureGetter.apply(ACCELERATOR_16X_LIGHT); + case ACCELERATOR_64x -> textureGetter.apply(ACCELERATOR_64X_LIGHT); + case ACCELERATOR_256x -> textureGetter.apply(ACCELERATOR_256X_LIGHT); + }; + } + + private static Material texture(String namespace, String name) { + var mat = new Material(TextureAtlas.LOCATION_BLOCKS, + new ResourceLocation(namespace, "block/crafting/" + name)); + MATERIALS.add(mat); + return mat; + } +} diff --git a/src/main/java/com/extendedae_plus/content/crafting/EPlusCraftingUnitType.java b/src/main/java/com/extendedae_plus/content/crafting/EPlusCraftingUnitType.java new file mode 100644 index 0000000..06c7085 --- /dev/null +++ b/src/main/java/com/extendedae_plus/content/crafting/EPlusCraftingUnitType.java @@ -0,0 +1,42 @@ +package com.extendedae_plus.content.crafting; + +import appeng.block.crafting.ICraftingUnitType; +import net.minecraft.world.item.Item; + +import com.extendedae_plus.init.ModItems; + +public enum EPlusCraftingUnitType implements ICraftingUnitType { + ACCELERATOR_4x(0, 4), + ACCELERATOR_16x(0, 16), + ACCELERATOR_64x(0, 64), + ACCELERATOR_256x(0, 256); + + private final long storage; + private final int threads; + + EPlusCraftingUnitType(long storage, int threads) { + this.storage = storage; + this.threads = threads; + } + + @Override + public long getStorageBytes() { + return this.storage; + } + + @Override + public int getAcceleratorThreads() { + // 返回真实线程值,单块可能超过 16。上限校验已由 mixin 绕过。 + return this.threads; + } + + @Override + public Item getItemFromType() { + return switch (this) { + case ACCELERATOR_4x -> ModItems.ACCELERATOR_4x.get(); + case ACCELERATOR_16x -> ModItems.ACCELERATOR_16x.get(); + case ACCELERATOR_64x -> ModItems.ACCELERATOR_64x.get(); + case ACCELERATOR_256x -> ModItems.ACCELERATOR_256x.get(); + }; + } +} diff --git a/src/main/java/com/extendedae_plus/hooks/BuiltInModelHooks.java b/src/main/java/com/extendedae_plus/hooks/BuiltInModelHooks.java new file mode 100644 index 0000000..a2b32e8 --- /dev/null +++ b/src/main/java/com/extendedae_plus/hooks/BuiltInModelHooks.java @@ -0,0 +1,27 @@ +package com.extendedae_plus.hooks; + +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.resources.ResourceLocation; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 复刻 Fabric 的内置模型注册能力(与 AE2/MAE2 相同实现)。 + */ +public final class BuiltInModelHooks { + private static final Map BUILTIN_MODELS = new ConcurrentHashMap<>(); + + private BuiltInModelHooks() {} + + public static void addBuiltInModel(ResourceLocation id, UnbakedModel model) { + var prev = BUILTIN_MODELS.putIfAbsent(id, model); + if (prev != null) { + throw new IllegalStateException("Duplicate built-in model ID: " + id); + } + } + + public static UnbakedModel getBuiltInModel(ResourceLocation id) { + return BUILTIN_MODELS.get(id); + } +} diff --git a/src/main/java/com/extendedae_plus/init/ModBlocks.java b/src/main/java/com/extendedae_plus/init/ModBlocks.java index 93d6fc1..6f86659 100644 --- a/src/main/java/com/extendedae_plus/init/ModBlocks.java +++ b/src/main/java/com/extendedae_plus/init/ModBlocks.java @@ -2,6 +2,10 @@ package com.extendedae_plus.init; import com.extendedae_plus.ExtendedAEPlus; import com.extendedae_plus.content.wireless.WirelessTransceiverBlock; +import com.extendedae_plus.content.crafting.EPlusCraftingUnitType; +import appeng.block.crafting.CraftingUnitBlock; +import appeng.blockentity.crafting.CraftingBlockEntity; +import appeng.core.definitions.AEBlockEntities; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.material.MapColor; @@ -23,4 +27,41 @@ public final class ModBlocks { .requiresCorrectToolForDrops() ) ); + + // Crafting Accelerators (reuse MAE2 textures/models) + public static final RegistryObject ACCELERATOR_4x = BLOCKS.register( + "4x_crafting_accelerator", + () -> { + var b = new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_4x); + b.setBlockEntity(CraftingBlockEntity.class, AEBlockEntities.CRAFTING_UNIT, null, null); + return b; + } + ); + + public static final RegistryObject ACCELERATOR_16x = BLOCKS.register( + "16x_crafting_accelerator", + () -> { + var b = new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_16x); + b.setBlockEntity(CraftingBlockEntity.class, AEBlockEntities.CRAFTING_UNIT, null, null); + return b; + } + ); + + public static final RegistryObject ACCELERATOR_64x = BLOCKS.register( + "64x_crafting_accelerator", + () -> { + var b = new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_64x); + b.setBlockEntity(CraftingBlockEntity.class, AEBlockEntities.CRAFTING_UNIT, null, null); + return b; + } + ); + + public static final RegistryObject ACCELERATOR_256x = BLOCKS.register( + "256x_crafting_accelerator", + () -> { + var b = new CraftingUnitBlock(EPlusCraftingUnitType.ACCELERATOR_256x); + b.setBlockEntity(CraftingBlockEntity.class, AEBlockEntities.CRAFTING_UNIT, null, null); + return b; + } + ); } diff --git a/src/main/java/com/extendedae_plus/init/ModCreativeTabs.java b/src/main/java/com/extendedae_plus/init/ModCreativeTabs.java index 5919514..52d28dd 100644 --- a/src/main/java/com/extendedae_plus/init/ModCreativeTabs.java +++ b/src/main/java/com/extendedae_plus/init/ModCreativeTabs.java @@ -20,6 +20,10 @@ public final class ModCreativeTabs { .displayItems((params, output) -> { // 将本模组物品加入创造物品栏 output.accept(ModItems.WIRELESS_TRANSCEIVER.get()); + output.accept(ModItems.ACCELERATOR_4x.get()); + output.accept(ModItems.ACCELERATOR_16x.get()); + output.accept(ModItems.ACCELERATOR_64x.get()); + output.accept(ModItems.ACCELERATOR_256x.get()); }) .build()); } diff --git a/src/main/java/com/extendedae_plus/init/ModItems.java b/src/main/java/com/extendedae_plus/init/ModItems.java index c3424b2..d5c69a6 100644 --- a/src/main/java/com/extendedae_plus/init/ModItems.java +++ b/src/main/java/com/extendedae_plus/init/ModItems.java @@ -16,4 +16,25 @@ public final class ModItems { "wireless_transceiver", () -> new BlockItem(ModBlocks.WIRELESS_TRANSCEIVER.get(), new Item.Properties()) ); + + // Crafting Accelerators + public static final RegistryObject ACCELERATOR_4x = ITEMS.register( + "4x_crafting_accelerator", + () -> new BlockItem(ModBlocks.ACCELERATOR_4x.get(), new Item.Properties()) + ); + + public static final RegistryObject ACCELERATOR_16x = ITEMS.register( + "16x_crafting_accelerator", + () -> new BlockItem(ModBlocks.ACCELERATOR_16x.get(), new Item.Properties()) + ); + + public static final RegistryObject ACCELERATOR_64x = ITEMS.register( + "64x_crafting_accelerator", + () -> new BlockItem(ModBlocks.ACCELERATOR_64x.get(), new Item.Properties()) + ); + + public static final RegistryObject ACCELERATOR_256x = ITEMS.register( + "256x_crafting_accelerator", + () -> new BlockItem(ModBlocks.ACCELERATOR_256x.get(), new Item.Properties()) + ); } diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/CraftingCPUClusterMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/CraftingCPUClusterMixin.java new file mode 100644 index 0000000..3558a30 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/CraftingCPUClusterMixin.java @@ -0,0 +1,24 @@ +package com.extendedae_plus.mixin.ae2; + +import appeng.blockentity.crafting.CraftingBlockEntity; +import appeng.me.cluster.implementations.CraftingCPUCluster; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(value = CraftingCPUCluster.class, remap = false) +public abstract class CraftingCPUClusterMixin { + // Redirect the second call (ordinal=1) to getAcceleratorThreads in addBlockEntity, + // which is used for the per-block <=16 validation in AE2. We return 1 so the check always passes. + @Redirect( + method = "addBlockEntity(Lappeng/blockentity/crafting/CraftingBlockEntity;)V", + at = @At( + value = "INVOKE", + target = "Lappeng/blockentity/crafting/CraftingBlockEntity;getAcceleratorThreads()I", + ordinal = 1 + ) + ) + private int extendedae_plus$onGetThreadsForLimitCheck(CraftingBlockEntity te) { + return 1; + } +} diff --git a/src/main/java/com/extendedae_plus/mixin/hooks/ModelBakeryMixin.java b/src/main/java/com/extendedae_plus/mixin/hooks/ModelBakeryMixin.java new file mode 100644 index 0000000..efc1b57 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/hooks/ModelBakeryMixin.java @@ -0,0 +1,33 @@ +package com.extendedae_plus.mixin.hooks; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.resources.ResourceLocation; + +import com.extendedae_plus.hooks.BuiltInModelHooks; + +/** + * 复制 MAE2/AE2 的做法:在模型加载时优先查询我们的内置模型表, + * 若命中则缓存并阻止继续查找 JSON 模型。 + */ +@Mixin(ModelBakery.class) +public class ModelBakeryMixin { + @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) + private void extendedae_plus$loadModelHook(ResourceLocation id, CallbackInfo ci) { + var model = BuiltInModelHooks.getBuiltInModel(id); + if (model != null) { + cacheAndQueueDependencies(id, model); + ci.cancel(); + } + } + + @Shadow + protected void cacheAndQueueDependencies(ResourceLocation id, UnbakedModel unbakedModel) { + } +} diff --git a/src/main/resources/assets/extendedae_plus/blockstates/16x_crafting_accelerator.json b/src/main/resources/assets/extendedae_plus/blockstates/16x_crafting_accelerator.json new file mode 100644 index 0000000..fdb778b --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/blockstates/16x_crafting_accelerator.json @@ -0,0 +1,6 @@ +{ + "variants": { + "formed=false": { "model": "extendedae_plus:block/crafting/16x_accelerator" }, + "formed=true": { "model": "extendedae_plus:block/crafting/16x_accelerator_formed_v2" } + } +} diff --git a/src/main/resources/assets/extendedae_plus/blockstates/256x_crafting_accelerator.json b/src/main/resources/assets/extendedae_plus/blockstates/256x_crafting_accelerator.json new file mode 100644 index 0000000..acc1729 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/blockstates/256x_crafting_accelerator.json @@ -0,0 +1,6 @@ +{ + "variants": { + "formed=false": { "model": "extendedae_plus:block/crafting/256x_accelerator" }, + "formed=true": { "model": "extendedae_plus:block/crafting/256x_accelerator_formed_v2" } + } +} diff --git a/src/main/resources/assets/extendedae_plus/blockstates/4x_crafting_accelerator.json b/src/main/resources/assets/extendedae_plus/blockstates/4x_crafting_accelerator.json new file mode 100644 index 0000000..90408f2 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/blockstates/4x_crafting_accelerator.json @@ -0,0 +1,6 @@ +{ + "variants": { + "formed=false": { "model": "extendedae_plus:block/crafting/4x_accelerator" }, + "formed=true": { "model": "extendedae_plus:block/crafting/4x_accelerator_formed_v2" } + } +} diff --git a/src/main/resources/assets/extendedae_plus/blockstates/64x_crafting_accelerator.json b/src/main/resources/assets/extendedae_plus/blockstates/64x_crafting_accelerator.json new file mode 100644 index 0000000..05028e7 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/blockstates/64x_crafting_accelerator.json @@ -0,0 +1,6 @@ +{ + "variants": { + "formed=false": { "model": "extendedae_plus:block/crafting/64x_accelerator" }, + "formed=true": { "model": "extendedae_plus:block/crafting/64x_accelerator_formed_v2" } + } +} diff --git a/src/main/resources/assets/extendedae_plus/models/block/crafting/16x_accelerator.json b/src/main/resources/assets/extendedae_plus/models/block/crafting/16x_accelerator.json new file mode 100644 index 0000000..ef68088 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/crafting/16x_accelerator.json @@ -0,0 +1,4 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { "all": "extendedae_plus:block/crafting/16x_accelerator" } +} diff --git a/src/main/resources/assets/extendedae_plus/models/block/crafting/16x_accelerator_formed.json b/src/main/resources/assets/extendedae_plus/models/block/crafting/16x_accelerator_formed.json new file mode 100644 index 0000000..70416f4 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/crafting/16x_accelerator_formed.json @@ -0,0 +1,4 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { "all": "extendedae_plus:block/crafting/16x_accelerator_light" } +} diff --git a/src/main/resources/assets/extendedae_plus/models/block/crafting/256x_accelerator.json b/src/main/resources/assets/extendedae_plus/models/block/crafting/256x_accelerator.json new file mode 100644 index 0000000..d668b1b --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/crafting/256x_accelerator.json @@ -0,0 +1,4 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { "all": "extendedae_plus:block/crafting/256x_accelerator" } +} diff --git a/src/main/resources/assets/extendedae_plus/models/block/crafting/256x_accelerator_formed.json b/src/main/resources/assets/extendedae_plus/models/block/crafting/256x_accelerator_formed.json new file mode 100644 index 0000000..e2fc961 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/crafting/256x_accelerator_formed.json @@ -0,0 +1,4 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { "all": "extendedae_plus:block/crafting/256x_accelerator_light" } +} diff --git a/src/main/resources/assets/extendedae_plus/models/block/crafting/4x_accelerator.json b/src/main/resources/assets/extendedae_plus/models/block/crafting/4x_accelerator.json new file mode 100644 index 0000000..978f3fb --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/crafting/4x_accelerator.json @@ -0,0 +1,4 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { "all": "extendedae_plus:block/crafting/4x_accelerator" } +} diff --git a/src/main/resources/assets/extendedae_plus/models/block/crafting/4x_accelerator_formed.json b/src/main/resources/assets/extendedae_plus/models/block/crafting/4x_accelerator_formed.json new file mode 100644 index 0000000..85b70fa --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/crafting/4x_accelerator_formed.json @@ -0,0 +1,4 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { "all": "extendedae_plus:block/crafting/4x_accelerator_light" } +} diff --git a/src/main/resources/assets/extendedae_plus/models/block/crafting/64x_accelerator.json b/src/main/resources/assets/extendedae_plus/models/block/crafting/64x_accelerator.json new file mode 100644 index 0000000..530d332 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/crafting/64x_accelerator.json @@ -0,0 +1,4 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { "all": "extendedae_plus:block/crafting/64x_accelerator" } +} diff --git a/src/main/resources/assets/extendedae_plus/models/block/crafting/64x_accelerator_formed.json b/src/main/resources/assets/extendedae_plus/models/block/crafting/64x_accelerator_formed.json new file mode 100644 index 0000000..9b58fa0 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/block/crafting/64x_accelerator_formed.json @@ -0,0 +1,4 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { "all": "extendedae_plus:block/crafting/64x_accelerator_light" } +} diff --git a/src/main/resources/assets/extendedae_plus/models/item/16x_crafting_accelerator.json b/src/main/resources/assets/extendedae_plus/models/item/16x_crafting_accelerator.json new file mode 100644 index 0000000..e6c9f52 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/item/16x_crafting_accelerator.json @@ -0,0 +1 @@ +{ "parent": "extendedae_plus:block/crafting/16x_accelerator" } diff --git a/src/main/resources/assets/extendedae_plus/models/item/256x_crafting_accelerator.json b/src/main/resources/assets/extendedae_plus/models/item/256x_crafting_accelerator.json new file mode 100644 index 0000000..0c537a5 --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/item/256x_crafting_accelerator.json @@ -0,0 +1 @@ +{ "parent": "extendedae_plus:block/crafting/256x_accelerator" } diff --git a/src/main/resources/assets/extendedae_plus/models/item/4x_crafting_accelerator.json b/src/main/resources/assets/extendedae_plus/models/item/4x_crafting_accelerator.json new file mode 100644 index 0000000..a36b20e --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/item/4x_crafting_accelerator.json @@ -0,0 +1 @@ +{ "parent": "extendedae_plus:block/crafting/4x_accelerator" } diff --git a/src/main/resources/assets/extendedae_plus/models/item/64x_crafting_accelerator.json b/src/main/resources/assets/extendedae_plus/models/item/64x_crafting_accelerator.json new file mode 100644 index 0000000..5134b5a --- /dev/null +++ b/src/main/resources/assets/extendedae_plus/models/item/64x_crafting_accelerator.json @@ -0,0 +1 @@ +{ "parent": "extendedae_plus:block/crafting/64x_accelerator" } diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/16x_accelerator.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/16x_accelerator.png new file mode 100644 index 0000000000000000000000000000000000000000..306afe0e8281c020b48829a78bb2badbfb38a1a4 GIT binary patch literal 6717 zcmeHMc~BHr8t(xEgoptpn=$6-9gm>WGkwj`Ekg z-s|_i_j}**-tT=qJf5GMoe+OlJOn`rHmhY0s1ubE7X`lm+*D=&)xU&dn`pC5f#Sde zkW`I;REi8JszL22RWuY0`szR#4cdx~QtndS6093QdtA8vBxt9EWt2IXDhf&f^?Fcn z&`t(*3n|rwI(kF`6W43SXW5BJA>t#HeqV!*3nHKbtT);dEcebGa=$ zOa-KTB%oaOg$tN8jogdfT{7zI? z!`kBq(%erLr&hdlsI%3+aPQ&0Skd9h3*M?~^_=>swdh>y;@l;BtQiaDe@1Vcz4gWV ziPpqT&#a7Zc`@m^-MK54kNoQX#h1soEzmqYy)9l%{Vu;Y=J| zY{>(iFMF6HWv8?Zw*F2COpBA72fJ5*xaKK@Adg*{!6U3!K zTj|zm;Gl@F+^i`E+bC1^2r#K7wJ4GmkScLadOV!w;YE6mWkwhRJef6RKA(%$>HL1b z)=y|)sr0Bd=H+Sm}Cl@lA8q4=;=a=3!CK(vNP zy2@mq>@AaB5%D4FMTUc(8ElhJ60c*DGIEtTSohj1^m{#s4Wx2%Xp78MD0bN_{hNuG zIf@VM(Ki@T6cAMIJQ~6g~*h=Jfg)CnqR?U_&!nKg7*o6f}R05prj;L{hYMI0&p5w9_%2ipER`19o|tO5sOVab=9NQ~>lIrh}id zmLT*ZE(#Q)$59dyS&~O6ienIgWqA{YQ3RtGhbsLmT8q;pO6$?^7W*Gqi!;2ykOBkv zfMpR5CG`j^7;uDTO?pwl7>*S~bX}YWVI!xh~ z(C(T6wr-HBy*`i>(I63sqy}K>@UCCL=L*KP`25Dtd=qAEP#!Gvm!Dka6}jZy$;}TqB9gC^we*2n(k+O6cQhl`UA^Cec+V> zyrJkKuP9-Y!3O^=KjFmUw_E~-Z!R({|K4=hO?M5;1H%%&xw~$M>;*Q-Hitk0H{75jONN|lq@2AZ;Z|C_q0M?YBI)$7ljy9Yh6WJ92NOw<0e zXV0H^^Y3alw;UJ=y;Pj4f2=vG?$(qwS<4PK>_k`myLEegednFa`D*=!+&4cyzhmRQ zPc8e}x}~Fa`(!-&+1?kr7oF~@+}XS1o~W9}#zyv~fZOekzJ14pO$i%S=@U1+_w0@- z#||&qc~ZN2=DKz3_NiASe;N%~J~}of`&bfn}qs8#vbNaKtxi+o#K zfR9dI`MsvRynNeHzu0!{i=^6?E4`zZ!cErq7wRFC*?jWEiGm~T?d@Xw*sRZcFYQxX zKH=YJTw+v@+}t;9!^-X|=uFjLdoCTs4lSLw3dH$9n)+1s$k~S(b<30_)obHx$N3At ayYJm)nHQX@Et|l~kS#0M(l-6krT+y7iR(Q8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/16x_accelerator_light.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/16x_accelerator_light.png new file mode 100644 index 0000000000000000000000000000000000000000..472b39c1ba0c9841c20782035145982e437e4eda GIT binary patch literal 6064 zcmeHLe{dAl9p4L>gfr6%NpY#L~;N#g?79AXa4^+THvW1Gfq3tcxk{o^oRlpF7W@zNZPy@z!b z5T(%Xg2utP9Qu9G^hdJ1ehy>%DR%xU3kZi|ysryK8cEK_GCp2}{R}6_j9=zil4E5d z00ZFfdUir08>#i3=orYiMX#x84A<0`mILUaQyd$XEvT%de`w~=cIEFhl}pm^ryj7 z=N6sWe!O7#@tr5%tm@p+`n9f~{AOr>{DIfsew|(Oc17E<-u>o#r}nS;aR0`JO-Jji z+t!_yU%YSkOW(P(zU)WOKH=W?(k*)rH$1wv{IJRV<&HL2K0k=o`V&j&=lmFOq z_{iwV`-ff#(-qt2_O*TKj8alOTJU23A0J$Ncf*HsiHB5dhJpjn?5>pW|ESpW zZlQ1B?wv0eef?wN=<5FX8w2IL?<{}pwTlaa&9{37Z@TciLq9wC&&~^ks;~WE(a1=d zhraKV!Qodg4xahMSpBU{D~4V+(TR@t>)=r1dbHJQjjWOtBjH1;5yQSrB4wW!QMDqI zLdphgkult^CxhP6R}OngT@89${1GOSs=*z4eV>V&`x>H3-v&iey(^Zxt1>bGB(R0Z zOd_64%bB3p!IfcbPt#t~A+a_Dy{+IzHHL{v!6*0_sy3r{bKd1{vdUC7xhZr{4g%hS z-VV!3$u!;5)8p&meTLaivyvpy3`cVu1r$`eH)){^l}s$9dLrfQ zg43Epnd&esBi&)7^5j#*%P%{YnXHqgYgbXpUb&1M_+FXAxYZqOpo&D~kfC(hdWA#d z&ZHWOuF82~WK|ObLQK*qEGYuTasp3@2uT!&Rh6q$a6sXNNr2&G+CoVM+kn8rrvsR% zO01vbB`Tn5eo7EDo{~5gQ#>OmNMU(R4OC8oSZ(SM6(~MgHXBL>s2HPRKE?znJ{Hg@ zRuot&#(^{_#;Hs|(?p)nN~0>WW|#>C?xZJBJEl{~c87<3UUGF~IOyek%*0G%99i~; zpm&v??8;0mMD+x2wvcU8wvw&nm;evL3w(g{PY|ueW*Q>F#&lA*voc}B8Y6C)5ktj6 zFYheb=O%-mV0mPR5MVp=pr%}7Vr1bEG=O6`hGIleGztZPmt?3TSiJ&VZ~8XbtDC}?4o`J@0s?I=TXvzX7wNwSGR+GgWhU8`I3#} z(MLjwT-u^1Rih_eF_nE!2e!}fsz#@$p;sDp<4cEM5$C< zSDeVEyOV0J@a6LXX&K~1Qko896`T5HZZ(;0UNZ8=2yl&FEeRUO`N5Z2#M!x95GhgM zpoj_aDx(%fT)i4A+3{q~<&t^MqpE28Vm6+QtLV$~buNX6vfgzMxUQ3`(-vHcWVi_A zuLiJnX5|<1xs7q9d_Mh{&te$YdL77`qbeVM`AbhV+*9o0m7Y|*R-*Q)Nq+fEbkCYR zuIB)q0~klFqCZE1?B+=qYe31)!G#^}|8)KXASWRt#T)tL%Jz+9L6WmfW@O)4bIqD- zMi!V6@vL{vnrlWDm=W=;cU?DgxhH-?#7X$D?13K$pL+Pcv+(2Myj1a5 zGkA0BTmPPSAmaYj+KR$t|K5^$mlk+Do*(iL;`Q(_sP)&P7<=rNXKwQ>*u!xQ!;G~b y`_HA4KU>eeN}T8Ar#F2-oQ_(76W?I|N)XRKd3(pZycz?(M7XvgG_Z30L;nS{KgXc} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/256x_accelerator.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/256x_accelerator.png new file mode 100644 index 0000000000000000000000000000000000000000..15c390b07b97c9cd39a53952e9291102defb7da5 GIT binary patch literal 6722 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/256x_accelerator_light.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/256x_accelerator_light.png new file mode 100644 index 0000000000000000000000000000000000000000..cabc1073b688b1e25103c8a0b1bfbbbbdb8e6194 GIT binary patch literal 6052 zcmeHLe{d969p4KyNz=wjX+|ToWoKzMQ1|xd-R*93Fd>&FH|9c`1QP0xu($g*S-88s z>~3(O{u^Dilt*ZR>nac8?Zy{v^FAIEkyCVdzVX6 zpiPG2_(v}D^4`ApeV^}-_kG{*clR3&^)+*UZQ;x$KWg@ z@qWoC0)Nkw6B0Q{T=1bSAm2v4s;VJeRfQ)_L(^jj!_vF^b_8pWG?Z>y(G;&<@`>(} z&f^V_zw1RL$Z2!^1<-lZTJ3ZYgM~EE)53b|)L{ z9rH#%UqnU^oZj*6^Y4lWQVVhZ2XzCz^EN#5d+jsdDYf2T$&76+$@}{z{P?Tv**g~( zzj0yk+4{XN2}6Gyy*QBnn+J|<*igHB&1U^pqhu)dyZn*9Gv#-mSaME0_h7i-&h>8& zo;kN*Wao*zp>4ZPy;{-vXzS;?e)Q{O`(kU4zJ8Qh`TF9v<30P#Kc3mQ^6h7Khvzj^55r-My*lnvf+;kO5Vy8oY@7cf;{_11#n z;gT}yzV`-)UcNXu@}9BcE9;jXd(o6ncDzvohZ@tHTkY0Joun9XudEtT2k)m0OWl5kQt)7G}r^$r1$braUgpj3}deYX71nywU zQKQQa5(KQ{0b z+?iBE(N!rYjHGIUpO1z6iHAB z)|7C1i3WJdO#HP@`U zW@LdG5zl(pthr`nff*6cde_HhuA+%gh$sOsmMQo^*w-<#9X>AJn5nr7(y~WRUmEyf vN$1lqW9K>PvGs3ZXPa&R$uH4=#jq#7bw~8^pS&^%ys&U}eW-u=ng{+1xj4x? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/4x_accelerator.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/4x_accelerator.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a270960a4a17fdf4e546203fc7fbe23dc84055 GIT binary patch literal 6728 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/4x_accelerator_light.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/4x_accelerator_light.png new file mode 100644 index 0000000000000000000000000000000000000000..38f75c5c9a668b6594b6e5fef2a8057c8b64a115 GIT binary patch literal 6055 zcmeHLe{d969p4LS5+l)T$dnXXvU9XbD0};Rq4l@jnwZmA&kZFrJV~Rzj5j1t;v_%JXEMje{#m3lQBQR6HyLY)H z1=?gNPXEYdUiR&K-}m|cc;EN=zPoQknj6bXmy}`{Ru*ci-vm#$-Aan!f7P4sN$~g` z>IkW!&`PWXUO>`Sh`DSTXs&7f0@ng;0gUZ|Rt|kz#%@bow>Zy-p}#cOe-!#Fax(TB z+Esv+!Sf(A2Kp87JPb|yT2|My(6>J&&R?Jab0j98jiGP^XS_7!WqDXnF`P*GM3%-G zTIBp9C4hd{V^bE{NY5_Aj(~l;w7R-TsICrA8oH{*5Qb$AZr>YhIu)td-O?IwSox`x zyXQ>gyB8n#JaVkG;fL-Ac5k_J!*!lCL(X%Iqx3(9z*SfE`dQ!6iAn_sN%JkvK|{N=*H=GOJJqr$_M5?qLw8qv^B0$I54J9=9J=MwACCX**tGe99^4VJwgo*MkVbX7fpE^tc`2eHqoo+nno_*RP*ibK{rVgP zyaheomX#DqGM!F))2vrFx=30O1d?J%h9N+LF#8gglpzx4avLIxQIAa7(2|y>CvY26 zit4>q(Bpx5eA2#nG91psC(K+FARc5!N|LmfBI9v#`U=x(NC8OBplhx$+xn7-+=NWM z*N{;|3MH)NGa)viDW7Hm0pc?N6gh7|ve$??@la$E#ZVk{nP4_O!)E)$=2zG;?9$>% zXBF($49R4-Zs}&Xp3IBSFfTvtL}t2AmZo0EC41&7anO5h4U;CB%uL0wPLJtE zSXWTc!#Y#;zKP%`L|(Fw5MVpw;HFq-Ajv}Y&;X8ND1zd_(KaXmtRVXMdniVv^5M!# z>qeWd$ATW)6Q_FQ!NR}`ieyQ7xLiH4;hcIxP%ttD2S#dY--k)tEP&T!GpI>3E#2sI zhO*Sqih8nd+1HrnZ~~4yr(2Zdti!V7rs7x%XxT~a8rd`JEzhHvx@x5*1J!mxe1o1^ zn|$%evJ8uCLd$S$6Cu?Cdv7+l!l{!iw=0OTx$f_F1Nxw3sTRp9u%k~zh9K3wzR zno|VkBs`y8^WmCP1m+|>pIskWxJsvfLPQDpVwr{?2&+z?9)lkjKap(OYGT+Y7un5) z9XMDCgT+=T+)(^lk;~N6XO#V!9n;jMVZv-ZyY+V4Rf7HVj&A6$3;gZ~4D%)gre literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/64x_accelerator.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/64x_accelerator.png new file mode 100644 index 0000000000000000000000000000000000000000..f52b35de5ba7b424b4e136cd8142c889b59a053e GIT binary patch literal 6733 zcmeHMdvp_38lMzw*#cT=feIpX2E~F*W->E*%+SD=rnbSR6zEIvQ0AGAO)?=9noVKK&@&AZQR6TMgO>(AQ+NHb!?x@cIJij}7x|vJp>hZsN{OIH^*W>Sg{H`JQ<4J|5mhAF<*19XVW7o2*<#ib;g^!+R zYG!YJqx^x4xXrJwiLHL)?y93%&#fBv&j*)vPpB2`~{9ohF9ErR!}%mU+VU1`voOWFZHr~vFL|6 z(J6bZNaw+$2rLU$B;V-39o|&2NX{tpiF3=ca`>`ho)(bl(_)iL835oG{VZJSc6n5$ z)QSXg8PL~;F$4~Z_=~Mb0SKd1#V5j)p3>uJTB%$@Ak$*uWS<~0b8HWXA;6s#Df0Wh z42A^)0eyhfD?TS?plKSz35+06Ac3k&Jbtzm^{5jxh!BQNRC%B5^~;I})-YL4S?sqW z2zU z64B$I&>v!s*lW`bKmhT600JLTz`NMz3i?CfG0`Qu!CER%+t5#E?ZifAXg+kxZf|fF z*sXq&-Xg`Xs6~o5BHmBE$m5`A`r71|rR$iaJ-JF8tb6Shdb}RQ22u_OV^jFWnq78V zPcR7zFAGdW8HS<>j>K6WB}@c`iXz3L9A%bJffCJ2}&}FM$uwq$vzOXd@?u{tgEkX8k7K_I9w7*4mY7B zXOd8Zg)*QV!O|$p5dvEN# z?PC4f1S^s$dlr}WKFE>X;#@zg`P5)Gmc@RMv zvg%iSOM*ioYM3i73f+ZnU2>2UU^sZX8I}(j%m>XBf|>%f&_nqe(R0IF9zjtR$sb^S zVu};^*NUWQEORvOOi&3kVG0a5;%oQ93`MM&9kV;ae{?5&?IY=`YU}4ttA)=XN-6_#Qq1?609Jy zl*pnMf#Xmfr;I2knh2EREJjH*uskP)$mLe=ErI6{1fx|~<^fpCE1nY3=l|*cdRZR} z5-{KZDOBgciD($@GqmlO-8km zr%gr!;C<~Il`NDAWpPeKCDDS5V5dn75hB32$ea$7c{rkyF|9D`VdG@%YQ7Fr zxGfZ24};JRQnl&_MG*rEfk`(I3LN)ePWf8%eK%y|CB2DtBiKIl-0@xW9I17)PX%jC9LTCeA@(lr+ zaNZ&qBm-bUjzrD0R%Zch6r2@_wSXhSiuiQ^2eLc;AwqXOHYa00oe$uG{V!kOu}Nd^@^syK6um7?AMo=(=U@ zitYW8Q}lpW-vIatv+nn+%D~T`zw%~0szT7vc&+K6O_hmYFvf3pq{Vz0tSun~vi6Aj1=TXAvmhM8%$l0abes8N5|-_)^f&LpVd z$F7R0v!@_u_T$6ix6Rm`os@9sa$Q~B4^J$xt$@qFD9D{UyP>?iJS7fpZEfA6*5*uh zyIe5$X2E0g<{?|=)r?xrCZtuLK0~+P3pF%0KG}S3bVdHsrA-&!zP$YV_ZzoASA7P< zUazg4_|dLv>AePM?aXb_OP80NbX(h2bL!+{A{45n|c$txCwwts*A z`Ov-TEzkVv??a&zP+82kPU(DGTif^FzY{q3o6`r)^XJcxiHV7ik3ULo%wuW>ZLB|X zWap7%UF6GE`wPqe;oHC9_0EeI*S|lr^3bna({tzB5<294^$p(6O>*q7IpXTjpS+?343s?LHVJ!9} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/64x_accelerator_light.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/64x_accelerator_light.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f7c9a8d6cff2c5e3aa652d8ec9ed14be98b24a GIT binary patch literal 6048 zcmeHLe{d969lr}SNh5Jmh#Emq<+OmUuj#(rA685w2xUD=viJNK1cEa1!j>t<}^tL~Cj=!_-wRi9DXnp&k3e^=BK(2RAmQYFB@_ zr>twV;cKsd6My1FN$t1G9vyMQc{BsZ+eUZ6z zZ)NE#SBIa8A3e#B{bS`QXzb_VRzw$ zf9*bfX5zvFBj1UVmHQX=w|(NWyr_7h;MqNY`rPuh@z)j>S1oAi|5;mS!STaKg5m?O z7gzkg&^NU9;PXWfzTr8$aZmE+L*++SmOuW}Yab6ceX3&kuB*Q}^`jGScU|=;+Lpg8 z8y_#LAUC}=Joe*j!7PjN|Yeo3t-w#A12)w3Ukj#DmO821)xUGL<5y&#>&;9stQ1bkiADbDx38Mr7&T zri^NPP}*KG6QU7K`7{d%5T5~{$aw>dZZqk|Ly<|8L@Cf^f!Xv7o1Gn-pW(!?T}v76 zELg1>l17Ja>sE(uVlH zDJ8(t3`+$3f+vY$i0F|Ir#3rZ!!6pJK zLGv6o6l+W**(d@H;3$S7C>|Vbh62C}qMu(wF(Q>UJTI-A z&AOfpdM|_Z-?mi4k%4*r|BEbCVp z6$yl&p*TWKa0(#^vP7UnLg58kU?smg)94S-TSnw4*sZw~`yY7A2kC&IC_K2wD}=&w zG9dv;5UQg3)gYA!3IYF}@m6SN7?FkCpWINh@mAK;J;=1*yS|2GN>G4-1H!m!>M2Yz zjHD*JJDcoDE4jj#=L5{vu_;oTjba6v+6`$nU2Wbn?9Lc)n^`SzD#Q38muZP{xSQh% zo@1bha2zFbJf|qa|I<3(rniXzqL2h>OwsVeNfaXZfTDo6vKr)=K!6Em8TVF21 zm&dVHZZ*0UO>qR}Cs=xt%>6ks&t+7IbPi^dY#btQ$uaD?*PFMsH%hI5KjysT-(YrWJyljN)B;(Ipa zNi7HHF2E#Whv|uc`>C(1$?{0ls+57j( z#YY>fh{5ge+%pna{!OgS9O?YZLr-7Y^~m~g=<|PFOaAa9Wj;^c&I7`liI+2v`k#C| qK03N0{Jo-{HHS|;{_^4R?eQh&m+AfYHN$IZk0)9ij|{Efw(CERZot0) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/light_base.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/light_base.png new file mode 100644 index 0000000000000000000000000000000000000000..954b135eed8febdc98a40f76715f5ee6c14cacd8 GIT binary patch literal 3265 zcmcIn4Nw%<9Y2j))Y#}GMdAltms-%W?C0IFTTTZ#5R69*0Rzlb^LFItBp74Fp-y7Tq#-(KO@fv|jW*KQF=@xKNa9D|-W?}R!H+h% znZ13x_j|wp|NZ_S@7;za`3omam^Q)Ta7@a}^%kJ}Wc!L6hrWM!+ecVnNaaX+YLRm{t=ABDBMiF~24VqzY(ZA}mui5B}wmqd2C@ z9{ee%kMaexV7Z#R(tuB{%rBHyR!F>z&!2~7)Chy~bo>m!H|`#B~>P{=YMuymtP*ZqT0UNXpnWo2P0PpO)$SDSNe2cvN41s3$+ z48>3cl}^yx)A_K zU^M{BAQ{xk!q$8~Ax|?cph+;#>%oz$X{ssxM+f=S()HOP9j7ehy>38x2Q;x z(@i-C=X-Uj(hj~oKT-#>E+LMXYJ!`CoWi-C1S5(NQF2ZqorQpqDUKIiG;qtDGRXG0 zp`ua*{-Lb4S2AK0DFw13WWnj447GlG`&k|kt4Zof~q?^&azI0Q6Nt^8Hytmk&_9YmjD4pQBLP+o&`=6l93!| z1dbA%)LV9>8hz|KFiN|U3FIF`|vrDM12cSOl# zXsAQtKh#Rh1?*e2ch_vYw{|jYwtaUYBJF)JQvT#OJ458z8__Yxj!bxe5r*vn_n3cZ z!x2ztjP=U<>uM4E`v2Pn7*-S^YQ%YC6m`3 zZJ+P@*X7P-uL0`)x_6&=b8p+h*@@439)GuP>bX%bww-wR)Si?L^;{F(fW0&NWG7MG z-{GA20&)CjANMv3MayR%Zg2ndF7Qh1BESEw70wBQhR5@vp>zq z7=x`{Q~x11>CCET^L$75E$^5Q-+p>c{bcE{pM5sAZ^jp&e)`K$$njEsYfIyMZ4C)Y zm#d~r4}MZAZ2f+BclYkOt*x!~agHy}opbcf=+(A-ZY|o@S6q?THM@4(g^uL-vFKgZ z5#JM!Jh(pVw_UU8962L#PyLdjAKX~I{l<-F7R05-PyD?9>rm*(S68q8W=BfO^P?*W z-^p_~Yi=bL!RrGD-sri!_4vN42}zv^@xNNv(ik@@xO(-8Ew3(jzOuF z-PAYm>o}}4p@H5#_slAyYg1dQ+VtGfUtB+xx`LY)82i%VAGb6Xr)}{s?3wUJDbcj+ z?b5E(rymWqPf4FQFQ;hyEb4cQi}x+9kDE2-{k9)<=5FizpwBGb7wSZ)$ypN$U7Kn? XRQtX0JE&9kpNzcheDD4RPuKk$C=rKi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/ring_corner.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/ring_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..8670a44c6f6ce72f26ec2e93aed950bcfe4ec80d GIT binary patch literal 2940 zcmcImYitx%6kezr1$itFr6h)Nhyj7wdGGEFU7E7f+9od6vJC|y;m*vR-Lbnf)0ydR z+r)$*CKaMknG7+$g~qP6#!#IX{@?T+D1 zoGU8)AGYOei$RU=blihbe*K)?o}qM@T9{(kwyIA{7={0jqp)IGPVLkYMrhBFjH5mc0*qe+HF z)fV~aT8a@Vstiq_7E*x=t_L$zl15-g{E-)0>CdF_RYDm{rkyT{@stix4Tv#TQCR4TG4 zQyOGtDon6)SVQ!2G$AuUAb`xMR9MrZEX(28HNSB)W7-K*MVzzVAe0(XY}Fl9xc4VzMk(_6F_ zd85!Bkh^){EGi?TL4n{IiX$|cQwc#(00CuLjS95D0$!^o{?EWs7g8cmRU7g41Ful3 zq=AuwNN-8}-=`w*JgvwqLofhv1O%K+$l)kOC=|~`HH~M(5Y$ek#!TJOR20+5L3>(D zS-=M9jR9>ZhHJK&#eijHbOm_*N9GK*BE)`2W3Gu^o8KE!rb1hvR{!Z<{1CAJ(ci7R zZANlZYfSE7iAe7~SRQ}!@5)fVm&!c0c$F!=U&LA(Fw_1+FB}mmqpy{>r)p*Y=6_X3 zuV?&r600KHgyi27MW>=C8$rrfmJPQPXG4k9jE;7fR%Juv%{`Wo(+()r&FIwQE&byb zy73Qe&_JqTqvO~a$2}DY%xZ0unv$!B5-*)D&ZZYizt#8raPrTu7fih)wI954?x`hv z*6*VpKKx^G_|oM`U6UknU+Or~f#R$@!pN<-*dXB9hS1(;1SQ=asd{Wyx zSp00v+&4IQY;27x|E4HwM~cNoLG2_T*rmU@t-Ck!{rUN;@U!uUe)$Lld!`EXV4;4^ z*}HlVjIHQ8J+kX?p{Z_Y=c2d9=O4l4pZ7k~`QC?TCZ#wvI&|>@zPoVri@F_8YoS-> zp3NE~>$czDe0=|f;L$hgslrx#JH8UWwGP zhw8U?)03Ac&!5=bc|0(zeLH&KgEfZ=V-p`2cHQ&kMXmFvqYn->CLd{99^SLy0q=a= N*1So2f8);Ge*rLJ+VKDY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedae_plus/textures/block/crafting/ring_side_hor.png b/src/main/resources/assets/extendedae_plus/textures/block/crafting/ring_side_hor.png new file mode 100644 index 0000000000000000000000000000000000000000..43e9e62dc1719220fa5261b5b01dbe9243b7dcf6 GIT binary patch literal 3075 zcmcIm3v3f*9KS__41_RoU{K(^1;WGYz1psKuFSClTd~_xicW}$-`#!JUDn>6cel2K zVFGA^1_UB%APCN6E{-T62ytO%8bv^55P3faY9vI&SBz0q(C^yr7&=}mP43y>_y7O? zzyIUDXX|Qa4I46M2!>(9s;fd#bRFRwg9oAW_@Dj+=u&7@J!WCp(2>qjfUR494|;c8 zjn&)rk%t9IPkMl?i_nuv8VHSHW#t(INR80OMHpALAo2ZwN%cX{MB-ODTpUX-1&^0>|U|AA!7?vLZx7GxNUCQ;=w| zZ9|}_bUN)xa~|D{Qw-1Z6wOjBOCkhmHETA=keXG}XCVYF$y5zn)ivC)2t>Wf4iboI zE`+4vn$@hlOh_;)0}P7s&`wBMpe(sKqsdHUoy!sh6EF!i+d^2z#Uhm=5f?t7*<{j1 zTlS0;Vw8_~|nj2V-;O=6hLAQ0QLBEO!?%%Ey zhEQojVC!Z~*AsnNuIsacS61Sa9#u72Pg|26f_XR$0UHJhmS$;^4v|nqH^0sH;)8 zKzyy6qx99|j906ld}Ly>eX1M}OC? zwi_EK1GUL5OcCXL2XpOD{e3dzo2SW!jK+P%sLyH3o%w4IC`_yGuK_8r;0 ze3yiUC*L=A?CL17asB$b@Uh!yE>?_jC9_`bSU$7l9cju?_)?-!SYOJ%XYt4lZmWH1GYW*qwXbzV!_6x;O_@A_STe7%_VLheeokZCn&~~w`^Fb78~o*Wi#}h~wDR=4H;ccX zxSx-P?^t~5wnNV^-tkMDeR${a0_^uYPrm#8`}ZH$rFo6LBR|uW^l9l}ytm+R@9gxb zB0{7NEIjkhgJwECddK)jHWhC@wtU~{(JlJ?ldn)mj{NaX_t|sjp8LW$x{_%NX(wJf z8uk%J`tUct?(LDi{7(y~{&=C~)F&DGp1Q^f)Tp6YG<Xr2Z3TrFqqLTgboDeEy!3vUI|@Hf=SJY;upWzi({G+#hXKMDsEN5 z7OifT4HvIkn2=Yklm!J}Fdv(j5fOn7U4Uiul;Mb(D4yjN(b#)U;#d~qu8iUpo+lo%vLvw zBTsWn&@G?VaPnb70V6ZOBIzLIEh!6BWFKd>+NrE@MJ8bi>d5#9>T7^Wk*KiO(AUDIhXM+t)e z*$;&!R@o4^rkya&R3XcY3M^Pv74}54W+-Obne924hr<|fVH9U5h9am4K}Qk{jj}C< zB6BH5q^KM;j!H-YF1Q`cPzf4=d65g>1~wHSLIE+eP5yAvTaWo+@5sKg=K;B@~up(MVy42w*vi0jw-As8&Z>$_PF6pDslq$8E2YW6t3R^MQ1U|TS2X6D*scB@HDn63wPE=mZpC*2`xouqwc5re zC;xMbNN*p^wLke+Wyn3pa&fHjGLzk3#E~>$to4UB91$s_ua)5CLIVAf%;fQBC=`I>lLq-Rg|pTJJ>tpk?GaHmt5Mivw7&|11}xwojS7! zG+fvyF>XWiqyw+4XxNv&o=G(C?b$N)qS?B<@7Y}^ergNsUod#>oySjHUGt$<)_ZJj zS!L<=Y532nL#vw3S1Wwd-@kF$M@x3jj9o+<#?_Nszr3=2kXm6vz_iKRqBFidXZP>AlCCVi-d(q*XD5B|^WIMSzJc@3o>Mwl@?FRB;8f$&NA*+h z(lu(|G<-zplM``pD`xuH3j-bfbt{vwPdFAGQv92j}|gg|Xhs6&-&9SVQeD literal 0 HcmV?d00001 diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index 1c2ac18..78f9334 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -24,7 +24,8 @@ "extendedae.HighlightButtonMixin", "extendedae.accessor.GuiExPatternTerminalAccessor", "extendedae.accessor.GuiExPatternTerminalSlotsRowAccessor", - "jei.EncodePatternTransferHandlerMixin" + "jei.EncodePatternTransferHandlerMixin", + "hooks.ModelBakeryMixin" ], "mixins": [ "ae2.ContainerPatternEncodingTermMenuMixin", @@ -41,6 +42,7 @@ "extendedae.ContainerExPatternProviderMixin", "extendedae.ContainerExPatternTerminalMixin", "extendedae.ContainerWirelessExPatternTerminalMixin", + "ae2.CraftingCPUClusterMixin", "extendedae.PartExPatternProviderMixin", "extendedae.TileExPatternProviderMixin" ],