From 274e2e187623ef17c12e41750054dfa66a1d7373 Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Sat, 21 Oct 2023 22:43:16 +0200 Subject: [PATCH] feat: implement the allmighty alec --- .../net/anvilcraft/ntx4core/AlecManager.java | 31 +++++++ .../net/anvilcraft/ntx4core/Ntx4Core.java | 12 +-- .../anvilcraft/ntx4core/Ntx4CoreBlocks.java | 15 ++++ .../ntx4core/Ntx4CoreItemGroup.java | 17 ++++ .../anvilcraft/ntx4core/Ntx4CoreItems.java | 60 ++++++++++++++ .../anvilcraft/ntx4core/Ntx4CoreShaders.java | 9 +- .../anvilcraft/ntx4core/blocks/BlockAlec.java | 31 +++++++ .../mixin/client/SplashOverlayMixin.java | 77 +++++++++++++++++- .../ntx4core/recipes/InputReplacements.java | 2 +- .../assets/ntx4core/blockstates/alec.json | 7 ++ .../resources/assets/ntx4core/lang/en_us.json | 17 ++++ .../assets/ntx4core/models/block/alec.json | 6 ++ .../assets/ntx4core/models/item/alec.json | 3 + .../models/item/awakened_construct.json | 6 ++ .../models/item/chaotic_construct.json | 6 ++ .../models/item/computational_core.json | 6 ++ .../models/item/corrupted_essence.json | 6 ++ .../models/item/energy_infused_core.json | 6 ++ .../models/item/irradiated_essence.json | 6 ++ .../ntx4core/models/item/magical_core.json | 6 ++ .../item/magically_stabilized_sentience.json | 6 ++ .../models/item/sentient_singularity.json | 6 ++ .../models/item/stabilized_sentience.json | 6 ++ .../models/item/strange_construct.json | 6 ++ .../assets/ntx4core/shaders/core/alecubus.fsh | 11 +++ .../ntx4core/shaders/core/alecubus.json | 43 ++++++++++ .../assets/ntx4core/shaders/core/alecubus.vsh | 14 ++++ .../assets/ntx4core/textures/alec.png | Bin 0 -> 35232 bytes .../textures/item/awakened_construct.png | Bin 0 -> 275 bytes .../textures/item/chaotic_construct.png | Bin 0 -> 289 bytes .../textures/item/computational_core.png | Bin 0 -> 284 bytes .../textures/item/corrupted_essence.png | Bin 0 -> 342 bytes .../textures/item/energy_infused_core.png | Bin 0 -> 357 bytes .../textures/item/irradiated_essence.png | Bin 0 -> 295 bytes .../ntx4core/textures/item/magical_core.png | Bin 0 -> 316 bytes .../item/magically_stabilized_sentience.png | Bin 0 -> 241 bytes .../textures/item/sentient_singularity.png | Bin 0 -> 380 bytes .../textures/item/stabilized_sentience.png | Bin 0 -> 364 bytes .../textures/item/strange_construct.png | Bin 0 -> 359 bytes .../tags/blocks/mineable/pickaxe.json | 5 ++ .../ntx4core/loot_tables/blocks/alec.json | 16 ++++ .../resources/data/ntx4core/recipes/alec.json | 16 ++++ .../ntx4core/recipes/awakened_construct.json | 13 +++ .../ntx4core/recipes/chaotic_construct.json | 25 ++++++ .../ntx4core/recipes/computational_core.json | 16 ++++ .../ntx4core/recipes/corrupted_essence.json | 17 ++++ .../ntx4core/recipes/energy_infused_core.json | 18 ++++ .../ntx4core/recipes/irradiated_essence.json | 21 +++++ .../data/ntx4core/recipes/magical_core.json | 7 ++ .../magically_stabilized_sentience.json | 13 +++ .../recipes/sentient_singularity.json | 18 ++++ .../recipes/stabilized_sentience.json | 19 +++++ .../ntx4core/recipes/strange_construct.json | 14 ++++ 53 files changed, 624 insertions(+), 15 deletions(-) create mode 100644 src/main/java/net/anvilcraft/ntx4core/AlecManager.java create mode 100644 src/main/java/net/anvilcraft/ntx4core/Ntx4CoreBlocks.java create mode 100644 src/main/java/net/anvilcraft/ntx4core/Ntx4CoreItemGroup.java create mode 100644 src/main/java/net/anvilcraft/ntx4core/Ntx4CoreItems.java create mode 100644 src/main/java/net/anvilcraft/ntx4core/blocks/BlockAlec.java create mode 100644 src/main/resources/assets/ntx4core/blockstates/alec.json create mode 100644 src/main/resources/assets/ntx4core/lang/en_us.json create mode 100644 src/main/resources/assets/ntx4core/models/block/alec.json create mode 100644 src/main/resources/assets/ntx4core/models/item/alec.json create mode 100644 src/main/resources/assets/ntx4core/models/item/awakened_construct.json create mode 100644 src/main/resources/assets/ntx4core/models/item/chaotic_construct.json create mode 100644 src/main/resources/assets/ntx4core/models/item/computational_core.json create mode 100644 src/main/resources/assets/ntx4core/models/item/corrupted_essence.json create mode 100644 src/main/resources/assets/ntx4core/models/item/energy_infused_core.json create mode 100644 src/main/resources/assets/ntx4core/models/item/irradiated_essence.json create mode 100644 src/main/resources/assets/ntx4core/models/item/magical_core.json create mode 100644 src/main/resources/assets/ntx4core/models/item/magically_stabilized_sentience.json create mode 100644 src/main/resources/assets/ntx4core/models/item/sentient_singularity.json create mode 100644 src/main/resources/assets/ntx4core/models/item/stabilized_sentience.json create mode 100644 src/main/resources/assets/ntx4core/models/item/strange_construct.json create mode 100644 src/main/resources/assets/ntx4core/shaders/core/alecubus.fsh create mode 100644 src/main/resources/assets/ntx4core/shaders/core/alecubus.json create mode 100644 src/main/resources/assets/ntx4core/shaders/core/alecubus.vsh create mode 100644 src/main/resources/assets/ntx4core/textures/alec.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/awakened_construct.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/chaotic_construct.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/computational_core.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/corrupted_essence.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/energy_infused_core.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/irradiated_essence.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/magical_core.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/magically_stabilized_sentience.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/sentient_singularity.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/stabilized_sentience.png create mode 100644 src/main/resources/assets/ntx4core/textures/item/strange_construct.png create mode 100644 src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json create mode 100644 src/main/resources/data/ntx4core/loot_tables/blocks/alec.json create mode 100644 src/main/resources/data/ntx4core/recipes/alec.json create mode 100644 src/main/resources/data/ntx4core/recipes/awakened_construct.json create mode 100644 src/main/resources/data/ntx4core/recipes/chaotic_construct.json create mode 100644 src/main/resources/data/ntx4core/recipes/computational_core.json create mode 100644 src/main/resources/data/ntx4core/recipes/corrupted_essence.json create mode 100644 src/main/resources/data/ntx4core/recipes/energy_infused_core.json create mode 100644 src/main/resources/data/ntx4core/recipes/irradiated_essence.json create mode 100644 src/main/resources/data/ntx4core/recipes/magical_core.json create mode 100644 src/main/resources/data/ntx4core/recipes/magically_stabilized_sentience.json create mode 100644 src/main/resources/data/ntx4core/recipes/sentient_singularity.json create mode 100644 src/main/resources/data/ntx4core/recipes/stabilized_sentience.json create mode 100644 src/main/resources/data/ntx4core/recipes/strange_construct.json diff --git a/src/main/java/net/anvilcraft/ntx4core/AlecManager.java b/src/main/java/net/anvilcraft/ntx4core/AlecManager.java new file mode 100644 index 0000000..facb732 --- /dev/null +++ b/src/main/java/net/anvilcraft/ntx4core/AlecManager.java @@ -0,0 +1,31 @@ +package net.anvilcraft.ntx4core; + +import java.util.Arrays; +import java.util.Random; + +import net.minecraft.client.MinecraftClient; + +public class AlecManager { + private static final String[] ALEC_UUIDS = new String[] { + "81f895e133ca46ecb1b6124ba832a352", // The great ALEC himself + "49d8001bcdd846b2b7860537f02f0f2f", // jonasled + "67e46577adb84f23ae1517a355a9aa8c", // LordMZTE + "ff1df9500c2c48489c90f0aa0b084c04", // Kalykto + "70ab32ed30344c60b66890618a71c5a4", // Realtox + "833d996af09b47a7b5dd5ddfd20e3f18", // ACGaming + "d65372eff2f64c44aa204db9e480e0fe", // Merlinmo + "be693d87cb634783a264075a7c6ab0f8", // tilera + }; + + public static final boolean HAS_ALEC + = Arrays.stream(ALEC_UUIDS) + .anyMatch( + u + -> u.equals( + MinecraftClient.getInstance().getSession().getUuid().replace( + "-", "" + ) + ) + ) + || new Random().nextInt(16) == 0; +} diff --git a/src/main/java/net/anvilcraft/ntx4core/Ntx4Core.java b/src/main/java/net/anvilcraft/ntx4core/Ntx4Core.java index 71b6743..068b4d6 100644 --- a/src/main/java/net/anvilcraft/ntx4core/Ntx4Core.java +++ b/src/main/java/net/anvilcraft/ntx4core/Ntx4Core.java @@ -7,8 +7,6 @@ import net.minecraft.util.Identifier; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @Mod("ntx4core") @@ -17,18 +15,14 @@ public class Ntx4Core { public static final Logger LOGGER = LogManager.getLogger(); public Ntx4Core() { - IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); - modBus.addListener(this::commonSetup); - modBus.addListener(this::clientSetup); + Ntx4CoreBlocks.BLOCKS.register(bus); + Ntx4CoreItems.ITEMS.register(bus); MinecraftForge.EVENT_BUS.register(Ntx4CoreShaders.class); } - private void commonSetup(final FMLCommonSetupEvent event) {} - - private void clientSetup(final FMLClientSetupEvent event) {} - public static Identifier id(String s) { return new Identifier(MODID, s); } diff --git a/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreBlocks.java b/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreBlocks.java new file mode 100644 index 0000000..f89cf7b --- /dev/null +++ b/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreBlocks.java @@ -0,0 +1,15 @@ +package net.anvilcraft.ntx4core; + +import net.anvilcraft.ntx4core.blocks.BlockAlec; +import net.minecraft.block.Block; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class Ntx4CoreBlocks { + public static final DeferredRegister BLOCKS + = DeferredRegister.create(ForgeRegistries.BLOCKS, Ntx4Core.MODID); + + public static final RegistryObject ALEC + = BLOCKS.register("alec", BlockAlec::new); +} diff --git a/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreItemGroup.java b/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreItemGroup.java new file mode 100644 index 0000000..a846710 --- /dev/null +++ b/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreItemGroup.java @@ -0,0 +1,17 @@ +package net.anvilcraft.ntx4core; + +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; + +public class Ntx4CoreItemGroup extends ItemGroup { + public static final Ntx4CoreItemGroup INSTANCE = new Ntx4CoreItemGroup(); + + private Ntx4CoreItemGroup() { + super("ntx4core"); + } + + @Override + public ItemStack createIcon() { + return new ItemStack(Ntx4CoreBlocks.ALEC.get()); + } +} diff --git a/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreItems.java b/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreItems.java new file mode 100644 index 0000000..dc25cdd --- /dev/null +++ b/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreItems.java @@ -0,0 +1,60 @@ +package net.anvilcraft.ntx4core; + +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class Ntx4CoreItems { + public static final DeferredRegister ITEMS + = DeferredRegister.create(ForgeRegistries.ITEMS, Ntx4Core.MODID); + + public static final RegistryObject ALEC = ITEMS.register( + "alec", + () + -> new BlockItem( + Ntx4CoreBlocks.ALEC.get(), + new Item.Settings().group(Ntx4CoreItemGroup.INSTANCE) + ) + ); + + public static final RegistryObject COMPUTATIONAL_CORE + = registerCraftingIngredient("computational_core"); + + public static final RegistryObject ENERGY_INFUSED_CORE + = registerCraftingIngredient("energy_infused_core"); + + public static final RegistryObject MAGICAL_CORE + = registerCraftingIngredient("magical_core"); + + public static final RegistryObject SENTIENT_SINGULARITY + = registerCraftingIngredient("sentient_singularity"); + + public static final RegistryObject STABILIZED_SENTIENCE + = registerCraftingIngredient("stabilized_sentience"); + + public static final RegistryObject MAGICALLY_STABILIZED_SENTIENCE + = registerCraftingIngredient("magically_stabilized_sentience"); + + public static final RegistryObject IRRADIATED_ESSENCE + = registerCraftingIngredient("irradiated_essence"); + + public static final RegistryObject CORRUPTED_ESSENCE + = registerCraftingIngredient("corrupted_essence"); + + public static final RegistryObject STRANGE_CONSTRUCT + = registerCraftingIngredient("strange_construct"); + + public static final RegistryObject AWAKENED_CONSTRUCT + = registerCraftingIngredient("awakened_construct"); + + public static final RegistryObject CHAOTIC_CONSTRUCT + = registerCraftingIngredient("chaotic_construct"); + + private static RegistryObject registerCraftingIngredient(String id) { + return ITEMS.register( + id, () -> new Item(new Item.Settings().group(Ntx4CoreItemGroup.INSTANCE)) + ); + } +} diff --git a/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreShaders.java b/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreShaders.java index 0c64d8c..0727b57 100644 --- a/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreShaders.java +++ b/src/main/java/net/anvilcraft/ntx4core/Ntx4CoreShaders.java @@ -7,10 +7,10 @@ import com.mojang.blaze3d.platform.GlDebugInfo; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Shader; import net.minecraft.client.render.VertexFormats; -import net.minecraft.util.Identifier; public class Ntx4CoreShaders { public static Shader SPLASH; + public static Shader ALECUBUS; // This method is called from SplashOverlayMixin as Forge has no fitting event that // fires early enough (and not too early). @@ -23,9 +23,14 @@ public class Ntx4CoreShaders { try { SPLASH = new Shader( MinecraftClient.getInstance().getResourceManager(), - new Identifier(Ntx4Core.MODID, "splash"), + Ntx4Core.id("splash"), VertexFormats.POSITION ); + ALECUBUS = new Shader( + MinecraftClient.getInstance().getResourceManager(), + Ntx4Core.id("alecubus"), + VertexFormats.POSITION_TEXTURE + ); } catch (IOException e) { Ntx4Core.LOGGER.error("Error registering shaders", e); throw new RuntimeException(e); diff --git a/src/main/java/net/anvilcraft/ntx4core/blocks/BlockAlec.java b/src/main/java/net/anvilcraft/ntx4core/blocks/BlockAlec.java new file mode 100644 index 0000000..07ad056 --- /dev/null +++ b/src/main/java/net/anvilcraft/ntx4core/blocks/BlockAlec.java @@ -0,0 +1,31 @@ +package net.anvilcraft.ntx4core.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.MapColor; +import net.minecraft.block.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import net.minecraft.world.explosion.Explosion; + +public class BlockAlec extends Block { + public BlockAlec() { + super(Settings.of(Material.STONE, MapColor.BRIGHT_RED) + .requiresTool() + .strength(2.f, 6.f) + .resistance(99999999.f)); + } + + @Override + public boolean + canEntityDestroy(BlockState state, BlockView level, BlockPos pos, Entity entity) { + return entity instanceof PlayerEntity; + } + + @Override + public void + onBlockExploded(BlockState state, World level, BlockPos pos, Explosion explosion) {} +} diff --git a/src/main/java/net/anvilcraft/ntx4core/mixin/client/SplashOverlayMixin.java b/src/main/java/net/anvilcraft/ntx4core/mixin/client/SplashOverlayMixin.java index c7db3e3..e73f24b 100644 --- a/src/main/java/net/anvilcraft/ntx4core/mixin/client/SplashOverlayMixin.java +++ b/src/main/java/net/anvilcraft/ntx4core/mixin/client/SplashOverlayMixin.java @@ -14,6 +14,7 @@ import com.mojang.blaze3d.platform.GlDebugInfo; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; +import net.anvilcraft.ntx4core.AlecManager; import net.anvilcraft.ntx4core.Ntx4Core; import net.anvilcraft.ntx4core.Ntx4CoreShaders; import net.minecraft.client.MinecraftClient; @@ -31,13 +32,17 @@ import net.minecraft.util.Identifier; import net.minecraft.util.Util; import net.minecraft.util.math.ColorHelper.Argb; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Matrix4f; +import net.minecraft.util.math.Vec3f; import net.minecraftforge.client.loading.ClientModLoader; @Mixin(SplashOverlay.class) public class SplashOverlayMixin extends Overlay { @Unique - private static final Identifier LOGO - = new Identifier(Ntx4Core.MODID, "textures/gui/title/splash.png"); + private static final Identifier LOGO = Ntx4Core.id("textures/gui/title/splash.png"); + + @Unique + private static final Identifier ALEC = Ntx4Core.id("textures/alec.png"); @Shadow @Final @@ -93,7 +98,7 @@ public class SplashOverlayMixin extends Overlay { float f2; int l1; GlStateManager._clearColor(0.0f, 0.0f, 0.0f, 1.0f); - GlStateManager._clear(GL31.GL_COLOR_BUFFER_BIT, false); + GlStateManager._clear(GL31.GL_COLOR_BUFFER_BIT | GL31.GL_DEPTH_BUFFER_BIT, false); if (f >= 1.0F) { if (this.client.currentScreen != null) { this.client.currentScreen.render(matrices, 0, 0, delta); @@ -128,6 +133,67 @@ public class SplashOverlayMixin extends Overlay { buf.vertex(-1.0, 1.0, 0.0).next(); buf.end(); BufferRenderer.draw(buf); + + if (AlecManager.HAS_ALEC) { + float offset_x = (float) Math.sin(this.time / 25.); + float offset_y = (float) Math.cos(this.time / 25.); + + var mtx = Matrix4f.viewboxMatrix(45., 1.f, 0.1f, 100.f); + mtx.multiply(Matrix4f.translate(offset_x, offset_y, -5.f)); + mtx.multiply(Vec3f.NEGATIVE_Y.getDegreesQuaternion(this.time * 4.f)); + // clang-format off + mtx.multiply(new Matrix4f(new float[]{ + 1.f, 0.f, 0.f, 0.f, + 0.f, -1.f, 0.f, 0.f, + 0.f, 0.f, 1.f, 0.f, + 0.f, 0.f, 0.f, 1.f, + })); + // clang-format on + + RenderSystem.setShader(() -> Ntx4CoreShaders.ALECUBUS); + RenderSystem.setShaderTexture(0, ALEC); + Ntx4CoreShaders.ALECUBUS.getUniform("Mtx").set(mtx); + + buf.begin(DrawMode.QUADS, VertexFormats.POSITION_TEXTURE); + + alecVert(buf, -0.5, -0.5, -0.5, 1.0, 0.0); + alecVert(buf, 0.5, -0.5, -0.5, 0.0, 0.0); + alecVert(buf, 0.5, 0.5, -0.5, 0.0, 1.0); + alecVert(buf, -0.5, 0.5, -0.5, 1.0, 1.0); + + alecVert(buf, -0.5, -0.5, 0.5, 0.0, 0.0); + alecVert(buf, 0.5, -0.5, 0.5, 1.0, 0.0); + alecVert(buf, 0.5, 0.5, 0.5, 1.0, 1.0); + alecVert(buf, -0.5, 0.5, 0.5, 0.0, 1.0); + + alecVert(buf, -0.5, 0.5, 0.5, 1.0, 1.0); + alecVert(buf, -0.5, 0.5, -0.5, 0.0, 1.0); + alecVert(buf, -0.5, -0.5, -0.5, 0.0, 0.0); + alecVert(buf, -0.5, -0.5, 0.5, 1.0, 0.0); + + alecVert(buf, 0.5, 0.5, 0.5, 0.0, 1.0); + alecVert(buf, 0.5, 0.5, -0.5, 1.0, 1.0); + alecVert(buf, 0.5, -0.5, -0.5, 1.0, 0.0); + alecVert(buf, 0.5, -0.5, 0.5, 0.0, 0.0); + + alecVert(buf, -0.5, -0.5, -0.5, 0.0, 1.0); + alecVert(buf, 0.5, -0.5, -0.5, 1.0, 1.0); + alecVert(buf, 0.5, -0.5, 0.5, 1.0, 0.0); + alecVert(buf, -0.5, -0.5, 0.5, 0.0, 0.0); + + alecVert(buf, -0.5, 0.5, -0.5, 0.0, 1.0); + alecVert(buf, 0.5, 0.5, -0.5, 1.0, 1.0); + alecVert(buf, 0.5, 0.5, 0.5, 1.0, 0.0); + alecVert(buf, -0.5, 0.5, 0.5, 0.0, 0.0); + + buf.end(); + + GlStateManager._enableDepthTest(); + GlStateManager._disableCull(); + BufferRenderer.draw(buf); + GlStateManager._disableDepthTest(); + GlStateManager._enableCull(); + } } l1 = (int) ((double) this.client.getWindow().getScaledWidth() * 0.5D); @@ -201,6 +267,11 @@ public class SplashOverlayMixin extends Overlay { } } + private void + alecVert(BufferBuilder buf, double x, double y, double z, double u, double v) { + buf.vertex((float) x, (float) y, (float) z).texture((float) u, (float) v).next(); + } + private void renderProgressBar( MatrixStack matrices, int minX, int minY, int maxX, int maxY, float opacity ) { diff --git a/src/main/java/net/anvilcraft/ntx4core/recipes/InputReplacements.java b/src/main/java/net/anvilcraft/ntx4core/recipes/InputReplacements.java index b98c6b3..37d9a08 100644 --- a/src/main/java/net/anvilcraft/ntx4core/recipes/InputReplacements.java +++ b/src/main/java/net/anvilcraft/ntx4core/recipes/InputReplacements.java @@ -35,7 +35,7 @@ public class InputReplacements { var philosopherStoneMapper = new InputReplaceRecipeMapper().replace( "#forge:gems/diamond", - "#forge:darkmatter" + "#ntx4core:darkmatter" ); ev.mapRecipeID( new Identifier("projecte", "philosophers_stone"), philosopherStoneMapper diff --git a/src/main/resources/assets/ntx4core/blockstates/alec.json b/src/main/resources/assets/ntx4core/blockstates/alec.json new file mode 100644 index 0000000..36a8a0d --- /dev/null +++ b/src/main/resources/assets/ntx4core/blockstates/alec.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ntx4core:block/alec" + } + } +} diff --git a/src/main/resources/assets/ntx4core/lang/en_us.json b/src/main/resources/assets/ntx4core/lang/en_us.json new file mode 100644 index 0000000..9fd1d7e --- /dev/null +++ b/src/main/resources/assets/ntx4core/lang/en_us.json @@ -0,0 +1,17 @@ +{ + "itemGroup.ntx4core": "Notex 4", + + "block.ntx4core.alec": "Alec", + + "item.ntx4core.computational_core": "Computational Core", + "item.ntx4core.energy_infused_core": "Energy-Infused Core", + "item.ntx4core.magical_core": "Magical Core", + "item.ntx4core.sentient_singularity": "Sentient Singularity", + "item.ntx4core.stabilized_sentience": "Stabilized Sentience", + "item.ntx4core.magically_stabilized_sentience": "Magically Stabilized Sentience", + "item.ntx4core.irradiated_essence": "Irradiated Essence", + "item.ntx4core.corrupted_essence": "Corrupted Essence", + "item.ntx4core.strange_construct": "Strange Construct", + "item.ntx4core.awakened_construct": "Awakened Construct", + "item.ntx4core.chaotic_construct": "Chaotic Construct" +} diff --git a/src/main/resources/assets/ntx4core/models/block/alec.json b/src/main/resources/assets/ntx4core/models/block/alec.json new file mode 100644 index 0000000..49fd342 --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/block/alec.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "ntx4core:alec" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/alec.json b/src/main/resources/assets/ntx4core/models/item/alec.json new file mode 100644 index 0000000..f3f71d2 --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/alec.json @@ -0,0 +1,3 @@ +{ + "parent": "ntx4core:block/alec" +} diff --git a/src/main/resources/assets/ntx4core/models/item/awakened_construct.json b/src/main/resources/assets/ntx4core/models/item/awakened_construct.json new file mode 100644 index 0000000..efcf178 --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/awakened_construct.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/awakened_construct" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/chaotic_construct.json b/src/main/resources/assets/ntx4core/models/item/chaotic_construct.json new file mode 100644 index 0000000..3a2a733 --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/chaotic_construct.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/chaotic_construct" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/computational_core.json b/src/main/resources/assets/ntx4core/models/item/computational_core.json new file mode 100644 index 0000000..f55b25b --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/computational_core.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/computational_core" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/corrupted_essence.json b/src/main/resources/assets/ntx4core/models/item/corrupted_essence.json new file mode 100644 index 0000000..78cec31 --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/corrupted_essence.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/corrupted_essence" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/energy_infused_core.json b/src/main/resources/assets/ntx4core/models/item/energy_infused_core.json new file mode 100644 index 0000000..b03173c --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/energy_infused_core.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/energy_infused_core" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/irradiated_essence.json b/src/main/resources/assets/ntx4core/models/item/irradiated_essence.json new file mode 100644 index 0000000..930d357 --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/irradiated_essence.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/irradiated_essence" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/magical_core.json b/src/main/resources/assets/ntx4core/models/item/magical_core.json new file mode 100644 index 0000000..8090822 --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/magical_core.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/magical_core" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/magically_stabilized_sentience.json b/src/main/resources/assets/ntx4core/models/item/magically_stabilized_sentience.json new file mode 100644 index 0000000..a8ff7b5 --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/magically_stabilized_sentience.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/magically_stabilized_sentience" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/sentient_singularity.json b/src/main/resources/assets/ntx4core/models/item/sentient_singularity.json new file mode 100644 index 0000000..9f1f842 --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/sentient_singularity.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/sentient_singularity" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/stabilized_sentience.json b/src/main/resources/assets/ntx4core/models/item/stabilized_sentience.json new file mode 100644 index 0000000..d621a9e --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/stabilized_sentience.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/stabilized_sentience" + } +} diff --git a/src/main/resources/assets/ntx4core/models/item/strange_construct.json b/src/main/resources/assets/ntx4core/models/item/strange_construct.json new file mode 100644 index 0000000..12e10ef --- /dev/null +++ b/src/main/resources/assets/ntx4core/models/item/strange_construct.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "ntx4core:item/strange_construct" + } +} diff --git a/src/main/resources/assets/ntx4core/shaders/core/alecubus.fsh b/src/main/resources/assets/ntx4core/shaders/core/alecubus.fsh new file mode 100644 index 0000000..e8a5419 --- /dev/null +++ b/src/main/resources/assets/ntx4core/shaders/core/alecubus.fsh @@ -0,0 +1,11 @@ +#version 150 +// vim: ft=glsl + +in vec2 texCoord; +out vec4 fragColor; + +uniform sampler2D Sampler0; + +void main() { + fragColor = texture(Sampler0, texCoord); +} diff --git a/src/main/resources/assets/ntx4core/shaders/core/alecubus.json b/src/main/resources/assets/ntx4core/shaders/core/alecubus.json new file mode 100644 index 0000000..f8467aa --- /dev/null +++ b/src/main/resources/assets/ntx4core/shaders/core/alecubus.json @@ -0,0 +1,43 @@ +{ + "blend": { + "func": "add", + "srcrgb": "srcalpha", + "dstrgb": "1-srcalpha" + }, + "vertex": "ntx4core:alecubus", + "fragment": "ntx4core:alecubus", + "attributes": [ + "Position", + "UV0" + ], + "samplers": [ + { + "name": "Sampler0" + } + ], + "uniforms": [ + { + "name": "Mtx", + "type": "matrix4x4", + "count": 16, + "values": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + } + ] +} diff --git a/src/main/resources/assets/ntx4core/shaders/core/alecubus.vsh b/src/main/resources/assets/ntx4core/shaders/core/alecubus.vsh new file mode 100644 index 0000000..b3dc857 --- /dev/null +++ b/src/main/resources/assets/ntx4core/shaders/core/alecubus.vsh @@ -0,0 +1,14 @@ +#version 150 +// vim: ft=glsl + +in vec3 Position; +in vec2 UV0; + +uniform mat4 Mtx; + +out vec2 texCoord; + +void main() { + gl_Position = Mtx * vec4(Position, 1.0); + texCoord = UV0; +} diff --git a/src/main/resources/assets/ntx4core/textures/alec.png b/src/main/resources/assets/ntx4core/textures/alec.png new file mode 100644 index 0000000000000000000000000000000000000000..38d4676160277da83a042799c7f25edac5411ed3 GIT binary patch literal 35232 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 P1}7+*E8XS1Q)uG9*uK8# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ntx4core/textures/item/awakened_construct.png b/src/main/resources/assets/ntx4core/textures/item/awakened_construct.png new file mode 100644 index 0000000000000000000000000000000000000000..983286388c5976d0e38b62e179f907eebc47d4fc GIT binary patch literal 275 zcmV+u0qp*XP)XQcw{_prXtuRE(0621X!M6d52b3%~$K;k{TdN^D;Q;w#Q~XTRsa z%*{})$_|68+R9vKPEcI6H)PB=rb)6Xao6loVNrfUFKrSvLhFHS5m84?ki=>91&nG`}Mb32QuA!I@Us_I;Qf2+3a>T4FlObBS?!u=nx zRUhk#*5IGcxuYZ%I6eZ$N2p{R7U3sEJU1g3X#?V)XoqE63@M}(&>e=fFock9z_~CC n*@a=$s~j2iF-3U7FxdA2IEhUUX;ak%00000NkvXXu0mjfaL;#i literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ntx4core/textures/item/computational_core.png b/src/main/resources/assets/ntx4core/textures/item/computational_core.png new file mode 100644 index 0000000000000000000000000000000000000000..37025999c968733ba82b63b7534b985496cf1e4b GIT binary patch literal 284 zcmV+%0ptFOP)~uOkZ>pJnt8HtXg^jKLKB&94zOU z5^@RX#%8adO~60FoO%!qTudsCxz-Eh3D~WfCLnmpF9BaB(!d}|sk;?QEX!p=*f21GfRfC{0WUxhQ^=_qLRB9Cu>?c~0x=!{F+qY@Kq0`8 zfJ4kJS-Sr}%WZadyKKv{FUxlBUH|Xg(>B7IY(`MLT^IZbi0Wx@eXybM=r%?C-NgG& z20Q@qQ4{yC8FpI`9ss*EZiau*`amcQmTf|c}IzacXfwPy#h^rX^N9gBV5EE!_u1i6Oe{iJk z$sED5BiwBLgo6K8Qq(@#jvrxNb>rAkH&KuAfcr>zg5Qc02uZ%$xm{=ijX)%DBTUaP z%EBQ@jS>?mM6ABbg0S!wj;G^B<*Pg!7Qx1Yqj00000NkvXXu0mjf DL{yk8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ntx4core/textures/item/irradiated_essence.png b/src/main/resources/assets/ntx4core/textures/item/irradiated_essence.png new file mode 100644 index 0000000000000000000000000000000000000000..b34873ff7053d23ad4997c40d75a56ac19fb3bda GIT binary patch literal 295 zcmV+?0oeYDP)*xj zJaaNd1fTHz9QHnEY$^JZ-wGBNGvG#3*W((pGiF*wTO`q7(Y$dbI!@ADb%`1zabX#h zbD|&`w(K+6R$lEd1#w|#dnKcq*A> tS0y(<=Ocx-07xLVL2Z1_e>a z_snoF_s$hR5T7t}-eJyjKIlc>BPeY4HoqK}BN=I&@EQLbA5dP0G8C+(`O@j_{Dwq3 zQ2w3FIT1~ZEkknJo~i#C&?GXT>|ItRC+{WPtT0~HLI`!gOS6>2bl`o_CJ2Vls~-c?wlu*43~JASa>ZW?W8@D zm?pnUQSdy#FyYxzbAIETEyigd>`TNnni)2}+Lqv4Aobyt67L#GmV4J{8FQG;XW10M zcw$0zn&k{O3%%dp;+GlDHDYesd2Ygc))|aIt5~ENGT9iL*cupgPHh0v4=(dCS@1Fh n6) zAxJ|}6o!AnF_4#phalD=!W0Y+!K6j7h)J~B3>K5ZG|9vwf-DFIqnN}ZSTxP>3yaR??%|t5JfmhPi zWJoT>!bTY8|EeHh%r&XzdtLnX+j@`Wt)S_3s+}$9K8)+^rhzS^ed#)e| ziqh>cQ(DJtX~HjHn4ir>hUbqf(seX0Zgut1#&5TP8NQ);T2?|%p?qFLs|Z98kET84HNHR aQ2qd0#GVnfwmta(0000 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ntx4core/textures/item/stabilized_sentience.png b/src/main/resources/assets/ntx4core/textures/item/stabilized_sentience.png new file mode 100644 index 0000000000000000000000000000000000000000..f8dba0fe35735a370cfb6017005e927a54582165 GIT binary patch literal 364 zcmV-y0h9iTP)^GA36B?{={Q8Z5Bv* z$jfsRW&izv3A11^Ij727Hx4(Norw`lom_AN%DHhRF$%U58+B#jZFv;Et7n`vBH8S} zgLUevt_qT^R-dd0+`@{3Xy-_ez zo#v#8E0;=>ux-N?M8E^-t_P;3$9iUlq&jbz{Lbx{Q9+|LE%*gtkf9M$VLxgB0000< KMNUMnLSTaHq@YLu literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ntx4core/textures/item/strange_construct.png b/src/main/resources/assets/ntx4core/textures/item/strange_construct.png new file mode 100644 index 0000000000000000000000000000000000000000..cb0d32559a69cf4712126416e9f1879139859fde GIT binary patch literal 359 zcmV-t0hs=YP)QB9^<{lw}v&e_uF%MAn)YK_mUe7=bbN^aekVVM2i~Uy1Br( z=%f7TNi8l}DQLKUz9%bSr*(iq_dhAAENqy;;^|eYKv zc6KB?z~$#JvfHa@CvMO%Pb#M~f3g)2cD9l2V)*NmH+-0k?oVU{nh)PH zF5!FHAthd5?Mh4#UZrw{P!e8&;Ym4h`wY7)NZny2+2OHk(F*u|Vt>L7ij~+-xF%tk z_=#dA?1ZPPEDV#%La`DOJ6TyNC@LYTFo_lwO5~9YlLef6&e0i_yng@y002ovPDHLk FV1i++nfL$z literal 0 HcmV?d00001 diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 0000000..8fd4811 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ntx4core:alec" + ] +} diff --git a/src/main/resources/data/ntx4core/loot_tables/blocks/alec.json b/src/main/resources/data/ntx4core/loot_tables/blocks/alec.json new file mode 100644 index 0000000..31a9f04 --- /dev/null +++ b/src/main/resources/data/ntx4core/loot_tables/blocks/alec.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [], + "entries": [ + { + "type": "minecraft:item", + "name": "ntx4core:alec" + } + ], + "rolls": 1.0 + } + ] +} diff --git a/src/main/resources/data/ntx4core/recipes/alec.json b/src/main/resources/data/ntx4core/recipes/alec.json new file mode 100644 index 0000000..2cedd62 --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/alec.json @@ -0,0 +1,16 @@ +{ + "type": "mekanism:nucleosynthesizing", + "itemInput": { + "ingredient": { + "item": "ntx4core:chaotic_construct" + } + }, + "gasInput": { + "amount": 10000, + "gas": "mekanism:antimatter" + }, + "output": { + "item": "ntx4core:alec" + }, + "duration": 1250 +} diff --git a/src/main/resources/data/ntx4core/recipes/awakened_construct.json b/src/main/resources/data/ntx4core/recipes/awakened_construct.json new file mode 100644 index 0000000..6e6a62c --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/awakened_construct.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:altar", + "input": { + "item": "ntx4core:strange_construct" + }, + "output": { + "item": "ntx4core:awakened_construct" + }, + "upgradeLevel": 4, + "altarSyphon": 80000, + "consumptionRate": 1000, + "drainRate": 2000 +} diff --git a/src/main/resources/data/ntx4core/recipes/chaotic_construct.json b/src/main/resources/data/ntx4core/recipes/chaotic_construct.json new file mode 100644 index 0000000..79827d3 --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/chaotic_construct.json @@ -0,0 +1,25 @@ +{ + "type": "draconicevolution:fusion_crafting", + "result": { + "item": "ntx4core:chaotic_construct" + }, + "catalyst": { + "item": "ntx4core:awakened_construct" + }, + "total_energy": 10000000000, + "tier": "CHAOTIC", + "ingredients": [ + { + "item": "draconicevolution:chaotic_energy_core" + }, + { + "item": "draconicevolution:chaotic_core" + }, + { + "item": "draconicevolution:chaotic_core" + }, + { + "item": "draconicevolution:chaos_shard" + } + ] +} diff --git a/src/main/resources/data/ntx4core/recipes/computational_core.json b/src/main/resources/data/ntx4core/recipes/computational_core.json new file mode 100644 index 0000000..996cfa3 --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/computational_core.json @@ -0,0 +1,16 @@ +{ + "type": "ftbic:compressing", + "inputItems": [ + { + "ingredient": { + "item": "computercraft:computer_advanced" + }, + "count": 1 + } + ], + "outputItems": [ + { + "item": "ntx4core:computational_core" + } + ] +} diff --git a/src/main/resources/data/ntx4core/recipes/corrupted_essence.json b/src/main/resources/data/ntx4core/recipes/corrupted_essence.json new file mode 100644 index 0000000..eef15be --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/corrupted_essence.json @@ -0,0 +1,17 @@ +{ + "type": "assemblylinemachines:bath", + "input_a": { + "item": "ntx4core:irradiated_essence" + }, + "input_b": { + "item": "assemblylinemachines:strange_matter" + }, + "output": { + "item": "ntx4core:corrupted_essence" + }, + "stirs": 32, + "fluid": "condensed_void", + "mix_color": 0, + "mixer_type": "MIXER_ONLY", + "drain_percent": "QUARTER" +} diff --git a/src/main/resources/data/ntx4core/recipes/energy_infused_core.json b/src/main/resources/data/ntx4core/recipes/energy_infused_core.json new file mode 100644 index 0000000..f2e19c8 --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/energy_infused_core.json @@ -0,0 +1,18 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "item": "ntx4core:computational_core" + }, + { + "fluid": "legacy_revived:classic_lava", + "amount": 1000 + } + ], + "results": [ + { + "item": "ntx4core:energy_infused_core" + } + ], + "heatRequirement": "superheated" +} diff --git a/src/main/resources/data/ntx4core/recipes/irradiated_essence.json b/src/main/resources/data/ntx4core/recipes/irradiated_essence.json new file mode 100644 index 0000000..ce82e1c --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/irradiated_essence.json @@ -0,0 +1,21 @@ +{ + "type": "nuclearscience:radioactive_processor_recipe", + "iteminputs": { + "count": 1, + "0": { + "item": "ntx4core:magically_stabilized_sentience", + "count": 1 + } + }, + "fluidinputs": { + "count": 1, + "0": { + "fluid": "bigreactors:redfrigium", + "amount": 5000 + } + }, + "output": { + "item": "ntx4core:irradiated_essence", + "count": 1 + } +} diff --git a/src/main/resources/data/ntx4core/recipes/magical_core.json b/src/main/resources/data/ntx4core/recipes/magical_core.json new file mode 100644 index 0000000..32ca6b2 --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/magical_core.json @@ -0,0 +1,7 @@ +{ + "type": "mna:arcane-furnace", + "tier": 5, + "input": "ntx4core:energy_infused_core", + "output": "ntx4core:magical_core", + "burnTime": 200 +} diff --git a/src/main/resources/data/ntx4core/recipes/magically_stabilized_sentience.json b/src/main/resources/data/ntx4core/recipes/magically_stabilized_sentience.json new file mode 100644 index 0000000..10c137b --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/magically_stabilized_sentience.json @@ -0,0 +1,13 @@ +{ + "type": "botania:elven_trade", + "ingredients": [ + { + "item": "ntx4core:stabilized_sentience" + } + ], + "output": [ + { + "item": "ntx4core:magically_stabilized_sentience" + } + ] +} diff --git a/src/main/resources/data/ntx4core/recipes/sentient_singularity.json b/src/main/resources/data/ntx4core/recipes/sentient_singularity.json new file mode 100644 index 0000000..0e6959a --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/sentient_singularity.json @@ -0,0 +1,18 @@ +{ + "type": "powah:energizing", + "ingredients": [ + { + "item": "ntx4core:magical_core" + }, + { + "item": "ae2:singularity" + }, + { + "item": "powah:ender_core" + } + ], + "energy": 100000000, + "result": { + "item": "ntx4core:sentient_singularity" + } +} diff --git a/src/main/resources/data/ntx4core/recipes/stabilized_sentience.json b/src/main/resources/data/ntx4core/recipes/stabilized_sentience.json new file mode 100644 index 0000000..86fa24d --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/stabilized_sentience.json @@ -0,0 +1,19 @@ +{ + "type": "pneumaticcraft:pressure_chamber", + "inputs": [ + { + "item": "ntx4core:sentient_singularity" + }, + { + "type": "pneumaticcraft:stacked_item", + "tag": "forge:plates/novasteel", + "count": 4 + } + ], + "pressure": 4.5, + "results": [ + { + "item": "ntx4core:stabilized_sentience" + } + ] +} diff --git a/src/main/resources/data/ntx4core/recipes/strange_construct.json b/src/main/resources/data/ntx4core/recipes/strange_construct.json new file mode 100644 index 0000000..4321896 --- /dev/null +++ b/src/main/resources/data/ntx4core/recipes/strange_construct.json @@ -0,0 +1,14 @@ +{ + "type": "psi:dimension_trick_crafting", + "input": { + "item": "ntx4core:corrupted_essence" + }, + "output": { + "item": "ntx4core:strange_construct" + }, + "cad": { + "item": "psi:cad_assembly_ebony_psimetal" + }, + "trick": "psi:trick_ebony_ivory", + "dimension": "ntx4core:mirror" +}