From dcb7f23091f26fc9eae58ced0b239bd8be7944c9 Mon Sep 17 00:00:00 2001 From: Prometheus0000 Date: Sun, 31 Jul 2022 02:50:27 -0400 Subject: [PATCH] Adds Draconic Evolution Fusion Crafter (#17) * Implements about 2/3 of the DE core crafter * Fix block textures. Controller is disabled+not showing up anyway * Block textures work, controller ingame, main structure check works * Forgot * Structure check finally fully works * Structure * Fix structure * Casings * Recipe map * NEI * No scala * Assline recipe * Nerf overclock * Change the name to Draconic Evolution Fusion Crafter * Fix * tx Co-authored-by: kuba6000 --- src/main/java/emt/EMT.java | 3 + .../gthandler/common/blocks/EMT_GT_Block.java | 39 +--- .../common/items/EMT_CasingBlock.java | 61 +++-- .../common/loader/EMT_GT_Loader.java | 40 +++- .../common/loader/EMT_RecipeAdder.java | 87 +++++++ .../machines/multi/DE_Fusion_Crafter.java | 219 ++++++++++++++++++ src/main/java/emt/item/ItemMaterials.java | 20 +- .../java/emt/nei/FusionCraftingHandler.java | 32 +++ src/main/java/emt/nei/NEI_Config.java | 60 +++++ src/main/resources/assets/emt/lang/en_US.lang | 18 +- .../blocks/machines/GT/AWAKENED_DRACONIUM.png | Bin 0 -> 694 bytes .../blocks/machines/GT/BLOODY_ICHORIUM.png | Bin 0 -> 372 bytes .../textures/blocks/machines/GT/CHAOTIC.png | Bin 0 -> 473 bytes .../textures/blocks/machines/GT/DRACONIUM.png | Bin 0 -> 647 bytes .../machines/GT/ROBUST_NAQUADAH_ALLOY.png | Bin 0 -> 512 bytes .../textures/blocks/machines/GT/WYVERN.png | Bin 0 -> 469 bytes .../items/materials/awakenedSchematic.png | Bin 0 -> 2316 bytes .../items/materials/chaoticSchematic.png | Bin 0 -> 1961 bytes .../items/materials/draconicSchematic.png | Bin 0 -> 2414 bytes .../items/materials/wyvernSchematic.png | Bin 0 -> 2657 bytes 20 files changed, 525 insertions(+), 54 deletions(-) create mode 100644 src/main/java/emt/gthandler/common/loader/EMT_RecipeAdder.java create mode 100644 src/main/java/emt/gthandler/common/tileentities/machines/multi/DE_Fusion_Crafter.java create mode 100644 src/main/java/emt/nei/FusionCraftingHandler.java create mode 100644 src/main/java/emt/nei/NEI_Config.java create mode 100644 src/main/resources/assets/emt/textures/blocks/machines/GT/AWAKENED_DRACONIUM.png create mode 100644 src/main/resources/assets/emt/textures/blocks/machines/GT/BLOODY_ICHORIUM.png create mode 100644 src/main/resources/assets/emt/textures/blocks/machines/GT/CHAOTIC.png create mode 100644 src/main/resources/assets/emt/textures/blocks/machines/GT/DRACONIUM.png create mode 100644 src/main/resources/assets/emt/textures/blocks/machines/GT/ROBUST_NAQUADAH_ALLOY.png create mode 100644 src/main/resources/assets/emt/textures/blocks/machines/GT/WYVERN.png create mode 100644 src/main/resources/assets/emt/textures/items/materials/awakenedSchematic.png create mode 100644 src/main/resources/assets/emt/textures/items/materials/chaoticSchematic.png create mode 100644 src/main/resources/assets/emt/textures/items/materials/draconicSchematic.png create mode 100644 src/main/resources/assets/emt/textures/items/materials/wyvernSchematic.png diff --git a/src/main/java/emt/EMT.java b/src/main/java/emt/EMT.java index db79e85..ccfc2eb 100644 --- a/src/main/java/emt/EMT.java +++ b/src/main/java/emt/EMT.java @@ -13,6 +13,7 @@ import cpw.mods.fml.relauncher.Side; import emt.command.CommandOutputs; import emt.init.EMTEntities; import emt.init.Registry; +import emt.nei.NEI_Config; import emt.network.PacketEMTKeys; import emt.network.PacketNodeInfo; import emt.proxy.CommonProxy; @@ -83,6 +84,8 @@ public class EMT { EMTDungeonChestGenerator.generateLoot(); EMTEntities.registerEMTEntities(); NetworkRegistry.INSTANCE.registerGuiHandler(this, proxy); + + NEI_Config.Init(); } @Mod.EventHandler diff --git a/src/main/java/emt/gthandler/common/blocks/EMT_GT_Block.java b/src/main/java/emt/gthandler/common/blocks/EMT_GT_Block.java index c2c708b..dfe8b05 100644 --- a/src/main/java/emt/gthandler/common/blocks/EMT_GT_Block.java +++ b/src/main/java/emt/gthandler/common/blocks/EMT_GT_Block.java @@ -3,32 +3,34 @@ package emt.gthandler.common.blocks; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import emt.EMT; -import net.minecraft.block.Block; +import emt.gthandler.common.items.EMT_CasingBlock; +import gregtech.api.enums.Textures; +import gregtech.api.render.TextureFactory; +import gregtech.common.blocks.GT_Block_Casings_Abstract; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EnumCreatureType; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; import java.util.List; -public class EMT_GT_Block extends Block { +public class EMT_GT_Block extends GT_Block_Casings_Abstract { @SideOnly(Side.CLIENT) private IIcon[] texture; - private String[] textureNames; - private String name; + private final String[] textureNames; - public EMT_GT_Block(String name, String[] texture) { - super(Material.anvil); + public EMT_GT_Block(String[] texture) { + super(EMT_CasingBlock.class, "EMT_GTBLOCK_CASEING", Material.anvil); this.setHardness(15.0F); this.setResistance(30.0F); - this.name = name; this.textureNames = texture; this.setCreativeTab(EMT.TAB); + + // Taking one texture slot :P + Textures.BlockIcons.setCasingTexture((byte) 1, (byte) (15 + 48), TextureFactory.of(this, 7)); } @Override @@ -58,23 +60,4 @@ public class EMT_GT_Block extends Block { } } - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public String getUnlocalizedName() { - return name; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } } diff --git a/src/main/java/emt/gthandler/common/items/EMT_CasingBlock.java b/src/main/java/emt/gthandler/common/items/EMT_CasingBlock.java index 8536682..919692e 100644 --- a/src/main/java/emt/gthandler/common/items/EMT_CasingBlock.java +++ b/src/main/java/emt/gthandler/common/items/EMT_CasingBlock.java @@ -5,28 +5,39 @@ import cpw.mods.fml.relauncher.SideOnly; import emt.EMT; import emt.gthandler.common.blocks.EMT_GT_Block; import gregtech.api.util.GT_LanguageManager; +import gregtech.common.blocks.GT_Item_Casings_Abstract; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import java.util.List; -public class EMT_CasingBlock extends ItemBlock { +public class EMT_CasingBlock extends GT_Item_Casings_Abstract { - public static final Block[] EMT_GT_BLOCKS = {new EMT_GT_Block("EMT_GTBLOCK_CASEING", new String[] - { - EMT.TEXTURE_PATH + ":machines/side", - EMT.TEXTURE_PATH + ":machines/GT/inner", - EMT.TEXTURE_PATH + ":machines/GT/siderawI", - EMT.TEXTURE_PATH + ":machines/GT/rawcoreI", - EMT.TEXTURE_PATH + ":machines/GT/siderawII", - EMT.TEXTURE_PATH + ":machines/GT/rawcoreII", - } + public static final Block[] EMT_GT_BLOCKS = {new EMT_GT_Block(new String[] + { + EMT.TEXTURE_PATH + ":machines/side", + EMT.TEXTURE_PATH + ":machines/GT/inner", + EMT.TEXTURE_PATH + ":machines/GT/siderawI", + EMT.TEXTURE_PATH + ":machines/GT/rawcoreI", + EMT.TEXTURE_PATH + ":machines/GT/siderawII", + EMT.TEXTURE_PATH + ":machines/GT/rawcoreII", + EMT.TEXTURE_PATH + ":machines/GT/rawcoreII", //unused? + EMT.TEXTURE_PATH + ":machines/GT/ROBUST_NAQUADAH_ALLOY", + EMT.TEXTURE_PATH + ":machines/GT/BLOODY_ICHORIUM", + EMT.TEXTURE_PATH + ":machines/GT/DRACONIUM", + EMT.TEXTURE_PATH + ":machines/GT/WYVERN", + EMT.TEXTURE_PATH + ":machines/GT/AWAKENED_DRACONIUM", + EMT.TEXTURE_PATH + ":machines/GT/CHAOTIC", + } )}; - protected final String mNoMobsToolTip = GT_LanguageManager.addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); - protected final String mNoTileEntityToolTip = GT_LanguageManager.addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); + + protected final String deccCasing01Tooltip = GT_LanguageManager.addStringLocalization("gt.casing01tooltip", "Draconic Evolution Fusion Crafter Casing, Tier 1"); + protected final String deccCasing02Tooltip = GT_LanguageManager.addStringLocalization("gt.casing02tooltip", "Draconic Evolution Fusion Crafter Casing, Tier 2"); + protected final String deccCasing03Tooltip = GT_LanguageManager.addStringLocalization("gt.casing03tooltip", "Draconic Evolution Fusion Crafter Casing, Tier 3"); + protected final String deccCasing04Tooltip = GT_LanguageManager.addStringLocalization("gt.casing04tooltip", "Draconic Evolution Fusion Crafter Casing, Tier 4"); + protected final String deccCasing05Tooltip = GT_LanguageManager.addStringLocalization("gt.casing05tooltip", "Draconic Evolution Fusion Crafter Casing, Tier 5"); public EMT_CasingBlock(final Block par1) { super(par1); @@ -46,9 +57,29 @@ public class EMT_CasingBlock extends ItemBlock { } @Override + @SideOnly(Side.CLIENT) //so it only gets sent clientside? public void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, final List aList, final boolean aF3_H) { - aList.add(this.mNoMobsToolTip); - aList.add(this.mNoTileEntityToolTip); + super.addInformation(aStack, aPlayer, aList, aF3_H); + + switch (getDamage(aStack)) { + case 8: + aList.add(this.deccCasing01Tooltip); + break; + case 9: + aList.add(this.deccCasing02Tooltip); + break; + case 10: + aList.add(this.deccCasing03Tooltip); + break; + case 11: + aList.add(this.deccCasing04Tooltip); + break; + case 12: + aList.add(this.deccCasing05Tooltip); + break; + default: + break; + } } @Override diff --git a/src/main/java/emt/gthandler/common/loader/EMT_GT_Loader.java b/src/main/java/emt/gthandler/common/loader/EMT_GT_Loader.java index 252c6e4..5dd2395 100644 --- a/src/main/java/emt/gthandler/common/loader/EMT_GT_Loader.java +++ b/src/main/java/emt/gthandler/common/loader/EMT_GT_Loader.java @@ -1,9 +1,9 @@ package emt.gthandler.common.loader; import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.registry.GameRegistry; import emt.gthandler.common.implementations.EssentiaHatch; import emt.gthandler.common.items.EMT_CasingBlock; +import emt.gthandler.common.tileentities.machines.multi.DE_Fusion_Crafter; import emt.gthandler.common.tileentities.machines.multi.generator.EMT_Large_Essentia_Gen; import emt.tile.GT_MetaTileEntity_ResearchCompleter; import gregtech.api.enums.GT_Values; @@ -14,6 +14,7 @@ import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_OreDictUnificator; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; import thaumcraft.common.config.ConfigBlocks; import thaumcraft.common.config.ConfigItems; @@ -27,6 +28,7 @@ public class EMT_GT_Loader implements Runnable { public static int aIDoffset = 13000 - TIERS - 1; public static ItemStack[] EHatch = new ItemStack[TIERS]; public static ItemStack LEG; + public static ItemStack DECC; public static ItemStack ResearchMultiblock; @Override @@ -35,18 +37,46 @@ public class EMT_GT_Loader implements Runnable { for (int i = 0; i < TIERS; i++) { EHatch[i] = new EssentiaHatch(aIDoffset + i, "Essentia Hatch " + GT_Values.VN[i], "Essentia Hatch " + GT_Values.VN[i], i).getStackForm(1L); } - GameRegistry.registerBlock(EMT_CasingBlock.EMT_GT_BLOCKS[0], EMT_CasingBlock.class, "EMT_GTBLOCK_CASEING"); + LEG = new EMT_Large_Essentia_Gen(aIDoffset + TIERS + 1, "Large Essentia Generator", "Large Essentia Generator").getStackForm(1L); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Indium, 1L), GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Tungsten, 4L)}, Materials.SolderingAlloy.getMolten(576L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 3), 100, (int) (GT_Values.V[5] - (GT_Values.V[5] / 10))); - GT_Values.RA.addAssemblerRecipe(new ItemStack[]{new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 3), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 8L)}, Materials.Osmiridium.getMolten(576L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 5), 100, (int) (GT_Values.V[5] - (GT_Values.V[5] / 10))); + + + //Casing blocks GT_Values.RA.addAssemblerRecipe(new ItemStack[]{GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1L), GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Osmiridium, 4L)}, Materials.SolderingAlloy.getMolten(576L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 2), 100, (int) (GT_Values.V[5] - (GT_Values.V[5] / 10))); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Indium, 1L), GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Tungsten, 4L)}, Materials.SolderingAlloy.getMolten(576L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 3), 100, (int) (GT_Values.V[5] - (GT_Values.V[5] / 10))); if (Loader.isModLoaded("ThaumicTinkerer")) GT_Values.RA.addAssemblerRecipe(new ItemStack[]{new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 2), GT_ModHandler.getModItem("ThaumicTinkerer", "kamiResource", 2L, 2)}, Materials.Concrete.getMolten(2304L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 4), 100, (int) (GT_Values.V[5] - (GT_Values.V[5] / 10))); else GT_Values.RA.addAssemblerRecipe(new ItemStack[]{new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 2), Materials.ElectrumFlux.getPlates(8)}, Materials.Concrete.getMolten(2304L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 4), 100, (int) (GT_Values.V[5] - (GT_Values.V[5] / 10))); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 3), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 8L)}, Materials.Osmiridium.getMolten(576L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 5), 100, (int) (GT_Values.V[5] - (GT_Values.V[5] / 10))); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 6L), GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.NaquadahAlloy, 6L)}, Materials.Void.getMolten(1152L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 7), 24000, 491520); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{GT_ModHandler.getModItem("dreamcraft", "tile.BloodyIchorium", 1, 0), GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmiridium, 6L)}, Materials.Void.getMolten(1152L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 8), 24000, 491520); + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 8), GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Draconium, 6L), GT_ModHandler.getModItem("DraconicEvolution", "draconicCore", 1, 0)}, Materials.Void.getMolten(2304L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 9), 24000, 491520);//uv + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 9), GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.CosmicNeutronium, 6L), GT_ModHandler.getModItem("DraconicEvolution", "wyvernCore", 2, 0)}, Materials.Void.getMolten(4608L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 10), 12000, 1996080);//uhv, you need uhv to get the thing anyway? + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 10), GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 6L), GT_ModHandler.getModItem("DraconicEvolution", "awakenedCore", 3, 0)}, Materials.Void.getMolten(9216L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 11), 12000, 7864320);//uev + GT_Values.RA.addAssemblerRecipe(new ItemStack[]{new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 11), GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 6L), GT_ModHandler.getModItem("DraconicEvolution", "chaoticCore", 4, 0)}, Materials.Void.getMolten(18432L), new ItemStack(EMT_CasingBlock.EMT_GT_BLOCKS[0], 1, 12), 12000, 31457280);//uiv, use the multi - for (int i = 0; i < ItemList.HATCHES_INPUT.length; i++) + EMT_RecipeAdder.Run(); + + DECC = new DE_Fusion_Crafter(5001, "de_fusion_crafter", "Draconic Evolution Fusion Crafter").getStackForm(1L); + + GT_Values.RA.addAssemblylineRecipe(GT_ModHandler.getModItem("gregtech", "gt.blockmachines", 1, 10780), 144000, new Object[]{ + GT_ModHandler.getModItem("gregtech", "gt.blockmachines", 1, 10780), + ItemList.Robot_Arm_LuV.get(2L), + ItemList.Electric_Motor_LuV.get(2L), + ItemList.Field_Generator_LuV.get(1L), + new Object[]{OrePrefixes.circuit.get(Materials.Master), 2}, + ItemList.Casing_Coil_Naquadah.get(8L), + }, new FluidStack[]{ + Materials.SolderingAlloy.getMolten(2304L), + Materials.Thaumium.getMolten(1440L), + }, DECC, 1500, 16384); + + + for (int i = 0; i < ItemList.HATCHES_INPUT.length; i++) { GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.HATCHES_INPUT[i].get(1L), new ItemStack(ConfigBlocks.blockTube, 1, 4)}, Materials.Thaumium.getMolten(288L), EHatch[i], 100, (int) (GT_Values.V[i] - (GT_Values.V[i] / 10))); + } + ResearchMultiblock = new GT_MetaTileEntity_ResearchCompleter(aIDoffset + TIERS + 2, "Research Completer", "Research Completer").getStackForm(1L); } diff --git a/src/main/java/emt/gthandler/common/loader/EMT_RecipeAdder.java b/src/main/java/emt/gthandler/common/loader/EMT_RecipeAdder.java new file mode 100644 index 0000000..e4786c2 --- /dev/null +++ b/src/main/java/emt/gthandler/common/loader/EMT_RecipeAdder.java @@ -0,0 +1,87 @@ +package emt.gthandler.common.loader; + +import emt.init.EMTItems; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Recipe; +import net.minecraft.item.ItemStack; + +import java.util.HashSet; + +import static gregtech.api.enums.GT_Values.E; +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; + + +public class EMT_RecipeAdder { + public static final GT_Recipe.GT_Recipe_Map sFusionCraftingRecipes = new GT_Recipe.GT_Recipe_Map(new HashSet<>(4), "emt.recipe.fusioncrafting", "Draconic Evolution Fusion Crafter", null, RES_PATH_GUI + "basicmachines/Default", 6, 1, 1, 0, 1, "Tier Casing: ", 1, E, false, false); + + public static void addFusionCraftingRecipe(ItemStack[] inputs, ItemStack output, int aDuration, int aEUt, int aTier) { + sFusionCraftingRecipes.addRecipe(true, inputs, new ItemStack[]{output}, null, null, null, aDuration, aEUt, aTier); + } + + public static void Run() { + + // CORES + + addFusionCraftingRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Ichorium, 1), + GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderEye, 1), + new ItemStack(EMTItems.itemEMTItems, 0, 16)}, + GT_ModHandler.getModItem("DraconicEvolution", "draconicCore", 1, 0), + 400, 30720, 1); + + addFusionCraftingRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 6), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), + GT_ModHandler.getModItem("DraconicEvolution", "draconicCore", 4, 0), + GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 1), + new ItemStack(EMTItems.itemEMTItems, 0, 17)}, + GT_ModHandler.getModItem("DraconicEvolution", "wyvernCore", 1, 0), + 800, 65536, 2); + + addFusionCraftingRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 8), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 4), + GT_ModHandler.getModItem("DraconicEvolution", "wyvernCore", 4, 0), + GT_ModHandler.getModItem("dreamcraft", "ManyullynCrystal", 1, 0), + new ItemStack(EMTItems.itemEMTItems, 0, 18)}, + GT_ModHandler.getModItem("DraconicEvolution", "awakenedCore", 1, 0), + 1600, 122880, 3); + + addFusionCraftingRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 12), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 6), + GT_ModHandler.getModItem("DraconicEvolution", "awakenedCore", 4, 0), + GT_ModHandler.getModItem("DraconicEvolution", "chaosShard", 1, 0), + new ItemStack(EMTItems.itemEMTItems, 0, 19)}, + GT_ModHandler.getModItem("DraconicEvolution", "chaoticCore", 1, 0), + 3200, 500000, 4); + + + // ENERGY CORES + + addFusionCraftingRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 8), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedstoneAlloy, 4), + GT_ModHandler.getModItem("AdvancedSolarPanel", "asp_crafting_items", 4, 1), + GT_ModHandler.getModItem("DraconicEvolution", "draconicCore", 1, 0), + new ItemStack(EMTItems.itemEMTItems, 0, 17)}, + GT_ModHandler.getModItem("DraconicEvolution", "draconiumEnergyCore", 1, 0), + 1000, 65536, 2); + + addFusionCraftingRecipe(new ItemStack[]{ + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 8), + GT_ModHandler.getModItem("DraconicEvolution", "draconiumEnergyCore", 4, 0), + GT_ModHandler.getModItem("AdvancedSolarPanel", "asp_crafting_items", 4, 4), + GT_ModHandler.getModItem("DraconicEvolution", "wyvernCore", 1, 0), + new ItemStack(EMTItems.itemEMTItems, 0, 18)}, + GT_ModHandler.getModItem("DraconicEvolution", "draconiumEnergyCore", 1, 1), + 2000, 122880, 3); + + + } + +} diff --git a/src/main/java/emt/gthandler/common/tileentities/machines/multi/DE_Fusion_Crafter.java b/src/main/java/emt/gthandler/common/tileentities/machines/multi/DE_Fusion_Crafter.java new file mode 100644 index 0000000..b048054 --- /dev/null +++ b/src/main/java/emt/gthandler/common/tileentities/machines/multi/DE_Fusion_Crafter.java @@ -0,0 +1,219 @@ +package emt.gthandler.common.tileentities.machines.multi; + +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import emt.EMT; +import emt.gthandler.common.items.EMT_CasingBlock; +import emt.gthandler.common.loader.EMT_RecipeAdder; +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.fluids.FluidStack; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.Arrays; +import java.util.List; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; + + +public class DE_Fusion_Crafter extends GT_MetaTileEntity_EnhancedMultiBlockBase { + private static final int CASING_INDEX = (1 << 7) + (15 + 48); + private int mTierCasing = 0; + private int mFusionTierCasing = 0; + private int mCasing = 0; + + public DE_Fusion_Crafter(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public DE_Fusion_Crafter(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new DE_Fusion_Crafter(mName); + } + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final List> fusionCasingTiers = Arrays.asList( + Pair.of(GregTech_API.sBlockCasings4, 6), + Pair.of(GregTech_API.sBlockCasings4, 8) + ); + private static final List> coreTiers = Arrays.asList( + Pair.of(EMT_CasingBlock.EMT_GT_BLOCKS[0], 8), + Pair.of(EMT_CasingBlock.EMT_GT_BLOCKS[0], 9), + Pair.of(EMT_CasingBlock.EMT_GT_BLOCKS[0], 10), + Pair.of(EMT_CasingBlock.EMT_GT_BLOCKS[0], 11), + Pair.of(EMT_CasingBlock.EMT_GT_BLOCKS[0], 12) + ); + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape(STRUCTURE_PIECE_MAIN, transpose(new String[][]{ + {"nnnnn", "nnnnn", "nnnnn", "nnnnn", "nnnnn"}, + {" ", " F ", " FfF ", " F ", " "}, + {" ", " F ", " FfF ", " F ", " "}, + {"RRRRR", "R F R", "RFfFR", "R F R", "RRRRR"}, + {" ", " F ", " FfF ", " F ", " "}, + {" ", " F ", " FfF ", " F ", " "}, + {"RRRRR", "R F R", "RFfFR", "R F R", "RRRRR"}, + {" ", " F ", " FfF ", " F ", " "}, + {" ", " F ", " FfF ", " F ", " "}, + {"NN~NN", "NNNNN", "NNNNN", "NNNNN", "NNNNN"} + })) + .addElement('N', ofChain( + onElementPass(e -> e.mCasing++, ofBlock(EMT_CasingBlock.EMT_GT_BLOCKS[0], 7)), + ofHatchAdder(DE_Fusion_Crafter::addEnergyInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(DE_Fusion_Crafter::addInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(DE_Fusion_Crafter::addOutputToMachineList, CASING_INDEX, 1), + ofHatchAdder(DE_Fusion_Crafter::addMaintenanceToMachineList, CASING_INDEX, 1) + )) + .addElement('n', onElementPass(e -> e.mCasing++, ofBlock(EMT_CasingBlock.EMT_GT_BLOCKS[0], 7))) + .addElement('f', ofBlock(GregTech_API.sBlockCasings4, 7)) + .addElement('F', ofBlocksTiered((Block b, int m) -> { + if (b != GregTech_API.sBlockCasings4 || (m != 6 && m != 8)) return -2; + return m == 6 ? 1 : 2; + }, fusionCasingTiers, -1, (e, i) -> e.mFusionTierCasing = i, e -> e.mFusionTierCasing)) + .addElement('R', ofBlocksTiered((Block b, int m) -> { + if (b != EMT_CasingBlock.EMT_GT_BLOCKS[0] || m < 8 || m > 12) return -2; + return m - 7; + }, coreTiers, -1, (e, i) -> e.mTierCasing = i, e -> e.mTierCasing)) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mTierCasing = -1; + mFusionTierCasing = -1; + if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 9, 0)) + return false; + if (mCasing < 19) return false; + if (mTierCasing == -2 || mFusionTierCasing == -2) return false; + if (mTierCasing > 3 && mFusionTierCasing < 2) return false; + return mMaintenanceHatches.size() == 1; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt. + addMachineType("Fusion Crafter"). + addInfo("Controller Block for the Draconic Evolution Fusion Crafter"). + addInfo("Machine can be overclocked by using casings above the recipe tier:"). + addInfo("Recipe time is divided by number of tiers above the recipe"). + addInfo("Normal EU OC still applies !"). + addInfo("To see the structure, use a " + EnumChatFormatting.BLUE + "Tec" + EnumChatFormatting.DARK_BLUE + "Tech" + EnumChatFormatting.GRAY + " structure hologram on the Controller!"). + addSeparator(). + beginStructureBlock(5, 10, 5, false). + addController("Front bottom center"). + addCasingInfo("Naquadah Alloy Fusion Casing", 19). + addOtherStructurePart("Fusion Coil Block", "Center pillar"). + addOtherStructurePart("Fusion Machine Casing", "Touching Fusion Coil Block at every side"). + addOtherStructurePart("Tiered Fusion Casing", "Rings (5x5 hollow) at layer 4 and 7"). + addStructureInfo("Bloody Ichorium for tier 1, Draconium for tier 2, etc"). + addStructureInfo("To use tier 3 + you have to use fusion casing MK II"). + addMaintenanceHatch("Any bottom casing", 1). + addInputBus("Any bottom casing", 1). + addOutputBus("Any bottom casing", 1). + addInputHatch("Any bottom casing", 1). + addEnergyHatch("Any bottom casing", 1). + toolTipFinisher(EMT.NAME); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { + if (aSide == aFacing) { + if (aActive) + return new ITexture[]{ + TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder().addIcon(OVERLAY_TELEPORTER_ACTIVE).extFacing().build(), + TextureFactory.builder().addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW).extFacing().glow().build()}; + return new ITexture[]{ + TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder().addIcon(OVERLAY_TELEPORTER).extFacing().build(), + TextureFactory.builder().addIcon(OVERLAY_TELEPORTER_GLOW).extFacing().glow().build()}; + } + if (aActive) + return new ITexture[]{ + TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder().addIcon(MACHINE_CASING_MAGIC_ACTIVE).extFacing().build(), + TextureFactory.builder().addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW).extFacing().glow().build()}; + return new ITexture[]{ + TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder().addIcon(MACHINE_CASING_MAGIC).extFacing().build(), + TextureFactory.builder().addIcon(MACHINE_CASING_MAGIC_GLOW).extFacing().glow().build()}; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public GT_Recipe.GT_Recipe_Map getRecipeMap() { + return EMT_RecipeAdder.sFusionCraftingRecipes; + } + + @Override + public boolean checkRecipe(ItemStack aStack) { + ItemStack[] tInputs = getCompactedInputs(); + //FluidStack[] tFluids = getCompactedFluids(); unused for now + + if (tInputs.length > 0) { + long tVoltage = getMaxInputVoltage(); + byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage)); + GT_Recipe tRecipe = EMT_RecipeAdder.sFusionCraftingRecipes.findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], null, tInputs); + if ((tRecipe != null) && (this.mTierCasing >= tRecipe.mSpecialValue) && (tRecipe.isRecipeInputEqual(true, null, tInputs))) { + calculateOverclockedNessMulti(tRecipe.mEUt, tRecipe.mDuration, 2, tVoltage); + if (this.mEUt > 0) + this.mEUt = (-this.mEUt); + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + this.mMaxProgresstime /= ((mTierCasing - tRecipe.mSpecialValue) + 1); + this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime); + this.mOutputItems = new ItemStack[]{tRecipe.getOutput(0), tRecipe.getOutput(1)}; + this.mOutputFluids = new FluidStack[]{tRecipe.getFluidOutput(0)}; + updateSlots(); + return true; + } + } + return false; + } + + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 9, 0); + } +} diff --git a/src/main/java/emt/item/ItemMaterials.java b/src/main/java/emt/item/ItemMaterials.java index 83a529c..9f0684c 100644 --- a/src/main/java/emt/item/ItemMaterials.java +++ b/src/main/java/emt/item/ItemMaterials.java @@ -28,7 +28,7 @@ import java.util.List; public class ItemMaterials extends Item { - public IIcon[] icon = new IIcon[16]; + public IIcon[] icon = new IIcon[20]; public ItemMaterials() { this.setCreativeTab(EMT.TAB); @@ -89,6 +89,18 @@ public class ItemMaterials extends Item { case 15: name = "uumatterDrop"; break; + case 16: + name = "draconicSchematic"; + break; + case 17: + name = "wyvernSchematic"; + break; + case 18: + name = "awakenedSchematic"; + break; + case 19: + name = "chaoticSchematic"; + break; default: name = "nothing"; break; @@ -114,6 +126,10 @@ public class ItemMaterials extends Item { this.icon[13] = ri.registerIcon(EMT.TEXTURE_PATH + ":materials/taintedfeather"); this.icon[14] = ri.registerIcon(EMT.TEXTURE_PATH + ":materials/thaumiumWing"); this.icon[15] = ri.registerIcon(EMT.TEXTURE_PATH + ":materials/uumatterdrop"); + this.icon[16] = ri.registerIcon(EMT.TEXTURE_PATH + ":materials/draconicSchematic"); + this.icon[17] = ri.registerIcon(EMT.TEXTURE_PATH + ":materials/wyvernSchematic"); + this.icon[18] = ri.registerIcon(EMT.TEXTURE_PATH + ":materials/awakenedSchematic"); + this.icon[19] = ri.registerIcon(EMT.TEXTURE_PATH + ":materials/chaoticSchematic"); } @SideOnly(Side.CLIENT) @@ -123,7 +139,7 @@ public class ItemMaterials extends Item { @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List list) { - for (int i = 1; i <= 15; i++) { + for (int i = 1; i <= 19; i++) { list.add(new ItemStack(this, 1, i)); } } diff --git a/src/main/java/emt/nei/FusionCraftingHandler.java b/src/main/java/emt/nei/FusionCraftingHandler.java new file mode 100644 index 0000000..0305bf2 --- /dev/null +++ b/src/main/java/emt/nei/FusionCraftingHandler.java @@ -0,0 +1,32 @@ +package emt.nei; + +import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.GuiUsageRecipe; +import codechicken.nei.recipe.TemplateRecipeHandler; +import cpw.mods.fml.common.event.FMLInterModComms; +import gregtech.api.enums.GT_Values; +import gregtech.api.util.GT_Recipe; +import gregtech.nei.GT_NEI_DefaultHandler; + +import static emt.nei.NEI_Config.isAdded; + +public class FusionCraftingHandler extends GT_NEI_DefaultHandler { + // TODO: BETTER GUI <3 + public FusionCraftingHandler(GT_Recipe.GT_Recipe_Map aRecipeMap) { + super(aRecipeMap); + if (!isAdded) { + FMLInterModComms.sendRuntimeMessage( + GT_Values.GT, + "NEIPlugins", + "register-crafting-handler", + "emt@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); + GuiCraftingRecipe.craftinghandlers.add(this); + GuiUsageRecipe.usagehandlers.add(this); + } + } + + @Override + public TemplateRecipeHandler newInstance() { + return new FusionCraftingHandler(this.mRecipeMap); + } +} diff --git a/src/main/java/emt/nei/NEI_Config.java b/src/main/java/emt/nei/NEI_Config.java new file mode 100644 index 0000000..25fda18 --- /dev/null +++ b/src/main/java/emt/nei/NEI_Config.java @@ -0,0 +1,60 @@ +package emt.nei; + +import codechicken.nei.api.IConfigureNEI; +import cpw.mods.fml.common.event.FMLInterModComms; +import emt.EMT; +import emt.gthandler.common.loader.EMT_RecipeAdder; +import net.minecraft.nbt.NBTTagCompound; + +public class NEI_Config implements IConfigureNEI { + + public static boolean isAdded = true; + + @Override + public void loadConfig() { + NEI_Config.isAdded = false; + new FusionCraftingHandler(EMT_RecipeAdder.sFusionCraftingRecipes); + NEI_Config.isAdded = true; + } + + @Override + public String getName() { + return "EMT"; + } + + @Override + public String getVersion() { + return EMT.VERSION; + } + + public static void Init() { + sendHandler("emt.nei.FusionCraftingHandler", "gregtech:gt.blockmachines:5001"); + sendCatalyst("emt.recipe.fusioncrafting", "gregtech:gt.blockmachines:5001"); + } + + private static void sendHandler(String name, String block) { + NBTTagCompound aNBT = new NBTTagCompound(); + aNBT.setString("handler", name); + aNBT.setString("modName", EMT.NAME); + aNBT.setString("modId", EMT.MOD_ID); + aNBT.setBoolean("modRequired", true); + aNBT.setString("itemName", block); + aNBT.setInteger("handlerHeight", 135); + aNBT.setInteger("handlerWidth", 166); + aNBT.setInteger("maxRecipesPerPage", 2); + aNBT.setInteger("yShift", 6); + FMLInterModComms.sendMessage("NotEnoughItems", "registerHandlerInfo", aNBT); + } + + private static void sendCatalyst(String name, String stack, int priority) { + NBTTagCompound aNBT = new NBTTagCompound(); + aNBT.setString("handlerID", name); + aNBT.setString("itemName", stack); + aNBT.setInteger("priority", priority); + FMLInterModComms.sendMessage("NotEnoughItems", "registerCatalystInfo", aNBT); + } + + private static void sendCatalyst(String name, String stack) { + sendCatalyst(name, stack, 0); + } +} diff --git a/src/main/resources/assets/emt/lang/en_US.lang b/src/main/resources/assets/emt/lang/en_US.lang index dcb4ff2..3a5948c 100644 --- a/src/main/resources/assets/emt/lang/en_US.lang +++ b/src/main/resources/assets/emt/lang/en_US.lang @@ -12,10 +12,10 @@ gui.EMT.inventory=Inventory gui.EMT.book.aspect.output.eu.title=Essentia Outputs Book gui.EMT.book.aspect.output.essentia.eu=EU Output per Essentia gui.EMT.key.unequip=Unequip -emt.Output=Output: -emt.Storage=Storage: +emt.Output=Output: +emt.Storage=Storage: emt.PressShift= -emt.Generating=Generating: +emt.Generating=Generating: emt.Fuel=Fuel emt.OutputMax=Output at Max: @@ -67,6 +67,10 @@ item.EMT.denseIronSheet.name=Dense Iron Sheet item.EMT.taintedFeather.name=Tainted Feather item.EMT.thaumiumWing.name=Thaumium Reinforced Wing item.EMT.uumatterDrop.name=Crystallized UU-Matter Drop +item.EMT.draconicSchematic.name=Draconic Core Schematic +item.EMT.wyvernSchematic.name=Wyvern Core Schematic +item.EMT.awakenedSchematic.name=Awakened Core Schematic +item.EMT.chaoticSchematic.name=Chaotic Core Schematic item.EMT.bauble.euMaker.armor.name=Armor Charging Ring item.EMT.bauble.euMaker.inventory.name=Inventory Charging Ring item.EMT.bauble.oneRing.name=The One Ring @@ -180,6 +184,12 @@ EMT_GTBLOCK_CASEING.2.name=Iridium Ruridit Framebox EMT_GTBLOCK_CASEING.3.name=Indium Tungsten Framebox EMT_GTBLOCK_CASEING.4.name=Raw Magic Containing Casing EMT_GTBLOCK_CASEING.5.name=Raw Essentia Diffusion Cell +EMT_GTBLOCK_CASEING.7.name=Naquadah Alloy Fusion Casing +EMT_GTBLOCK_CASEING.8.name=Bloody Ichorium Fusion Casing +EMT_GTBLOCK_CASEING.9.name=Draconium Fusion Casing +EMT_GTBLOCK_CASEING.10.name=Wyvern Fusion Casing +EMT_GTBLOCK_CASEING.11.name=Awakened Draconium Fusion Casing +EMT_GTBLOCK_CASEING.12.name=Chaotic Fusion Casing #=============Thaumonomicon Texts============= emt.rsname.Electric Magic Tools=Electric Magic Tools @@ -417,4 +427,4 @@ emt.text.Infused Quantum Armor=You had been nothing to do and you decided to do emt.rsname.ResearchCompleter=Automated Research emt.tag.ResearchCompleter=No more ordo spam -emt.text.ResearchCompleter=It was fun at first, but you've decided it's time to find a better way to handle all this research. By mixing technology and magic you have come up with a multiblock that can complete a research note by itself.

To function, it needs nodes to be placed in the center of the structure and will slowly destroy them while running. Node stabilizers are optional but recommended for keeping so many nodes close together without them destroying each other. \ No newline at end of file +emt.text.ResearchCompleter=It was fun at first, but you've decided it's time to find a better way to handle all this research. By mixing technology and magic you have come up with a multiblock that can complete a research note by itself.

To function, it needs nodes to be placed in the center of the structure and will slowly destroy them while running. Node stabilizers are optional but recommended for keeping so many nodes close together without them destroying each other. diff --git a/src/main/resources/assets/emt/textures/blocks/machines/GT/AWAKENED_DRACONIUM.png b/src/main/resources/assets/emt/textures/blocks/machines/GT/AWAKENED_DRACONIUM.png new file mode 100644 index 0000000000000000000000000000000000000000..c6701066538677a1525748176fa5fd6bda2ef318 GIT binary patch literal 694 zcmV;n0!jUeP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0!v9mK~y+TWm8LU z5>XWX?j4>|V4$HG8#kJ$aZ$T*Q|v;czu9PHp@}PvyQQ3?eZaEDkTlHnx5~~1? znMEnhI&9v+d^AIGdkghO89U7is*MT;y$N32t1^{U-ymnNFo=QOLY9y+0fQxhg7p*} zZE<7}$uyQ$S>E5R(PB~tI_HG3WRcM59g%5HNYOih|*1L-lirElhzJ@ScN7mNymRYsoQJ}sqPEr6> zl9t|VSgTsWL0D#uvaShhPo))xc(&7E87uXT=dl8q_CEZSTX;^8>#KY-m)AaYqyJa= zVH5apM(gWG@GMc6)^JIscfAexrKQKkrGOpd5=Z%lZ chDqdse~B++U^x)tb^rhX07*qoM6N<$g6xJfmjD0& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/emt/textures/blocks/machines/GT/BLOODY_ICHORIUM.png b/src/main/resources/assets/emt/textures/blocks/machines/GT/BLOODY_ICHORIUM.png new file mode 100644 index 0000000000000000000000000000000000000000..8c40f46c9c53fda0b73be417b87317fe678f2e8f GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4V<1Xjv*HQ$x|LBDR4HJWN-RWJ{MzoVsI^e4VL|S-{lWVC7$sA)y?>_c z5Yzq3>N0;`4R^?|{H#;|ivIF+7^TI9u?6zA&0hZh@1HNX!&p_0fBp66;pYESRq8sq zjQ3QYe)04mUx<0N?BnC{`{VyN++48oo4f~8D6?lwSmTw0xij`GF8TkAdwJi#9Th+I z^;Xvv7%1d4SO{kD%dKwUQE0eT@X|;-z%N)prTw&)i2Z_AHoesi41#MS<~GXgNC-7h z@9Zpi{N2!?!2jOA?gAl!2j2}Z$W2h%F}c8!`DS=R>k@T4p~>dV%nYh4udkO;T{<5a OQVgE1elF{r5}E+H+l<5j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/emt/textures/blocks/machines/GT/CHAOTIC.png b/src/main/resources/assets/emt/textures/blocks/machines/GT/CHAOTIC.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c8eb0ccb2e3b20c6f657c4e7f3feecbb769c6a GIT binary patch literal 473 zcmV;~0Ve*5P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0d7e|K~y+Tm64&2 z!cY)Jx1~TpAV?bUAV83SuByXQiH08mg>6s-fhDPH2zSh!WOrC zlfKN%yLaB5sa31htbd_iuRk7-j~vhE^E=1+e70?SG#V*=)dz!tg9fVWy3z|#6d~wz zI#6G@Uawpk0q1_dhg3uy$K`UlTCJ8!CC~HHG&KU$oG?zO(^rn^bP8#`UMpR#RuHh1 z(S9S_=5DcAFxBC3I3AC^UM~zoiijboZ}vh_uv{*E-^Yot+wCYiPJzb9PBbM>#2XHW z{eEBZX0xeODoosHG>ibMz|$hp3!6i+4-&ThARzu%4E z)epP#`TVnh@pw#;$02A2GYvWW=598damqKnx7#f#z1{>Q088u}9u@iKx6m6l@tc5O zNY1|`7TAe==dCixMRwO}wJw(n2{Niev)QCKQ>vGW1emni?RMVuZ?LQ%)b<%ZiZvNh P00000NkvXXu0mjfEbz(q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/emt/textures/blocks/machines/GT/DRACONIUM.png b/src/main/resources/assets/emt/textures/blocks/machines/GT/DRACONIUM.png new file mode 100644 index 0000000000000000000000000000000000000000..18948e711d12ed9a36f0f224062947d981ce6f76 GIT binary patch literal 647 zcmV;20(kw2P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0vt(1K~y+TrITH2 zQ$Y}h-`!2*fUROR5JK;Y>0jFl>a6Fqqb}WN+7RK;Genf~*R3D;jkz&Hv zF99(Hy#7#30kdbYH+iT2&Q>(oS%+q8L2bjq2q6Z75?8ObrCtZS%N{vt*O9K4b}3zv3XBd@lDYw ztVD8=ucm0R(!Gh`4Mt4+Nq+;6sl{N(^bJ;*Zz0CAKWxD?l9H0un%N(9n7k}7-)N%O zzJ@EERWzE57!3yskr45fW{Z>n2G!2yT7u9&`hBKa)-S*iN?Qz;z6Onj%e?v3AMI{r zaO9)0;Vx$h&-yKJtMWYsrF-4q2l=_(--{OHA9t-F4%gYNuw zT)J=r^?Fxr4|nfqSz5BB`U4Pc)Cm)(UXxEnx@h2AF*j8?ue8@-oLArAj})Mjm{m{W z@a>@*ejnx2wTt4y{`@`4d83ZK_peGo)n#;}MwvJns-%A$nLvTXpnoIP#H@TcLN)XF h{OwZ-5aPcH@EtA77l;aN(zXBq002ovPDHLkV1hlwB&7fV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/emt/textures/blocks/machines/GT/ROBUST_NAQUADAH_ALLOY.png b/src/main/resources/assets/emt/textures/blocks/machines/GT/ROBUST_NAQUADAH_ALLOY.png new file mode 100644 index 0000000000000000000000000000000000000000..06e2f526c494092a1e4c085e6f55d1f5a7f46560 GIT binary patch literal 512 zcmV+b0{{JqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn z4jTXf02y>eSaefwW^{L9a%BK_cXuvnZfkR6VQ^(GZ*pgw?mQX*00Cf0L_t(IPn}ai zj>0eubXwRCu(zI;mmvPYq3UmW0B=BQe?U)7((HKLq^%Y%8)WR*G+93G>$J~NWgb6=_CbM^Sb+DiwYaCsDzbwpoOMs3Q*&$fH_#MD}lwfg1cU? z>3+Z4+x&Aj?=~N%@P&7M{yB@gTrMB~&hKnrpXC?-EM-XyFH4dD0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0cuG^K~y+Tby7=C z12GJ>Gt-Vl56~`Kq)LcOz!ea;K%9mJ7vU&uMyf=+V2@a|L#FxgUOX+WfG5l2abD~f zCpx=-mJ}rIX*n{6A1viWUo2aov%4qvQLAI7uIW`Ji8zs%rBXSC_pgqHRYKpUxa#+B z`?vv5U_y2uHc0k<<-3-toXdtv)Kzt}9FHzX)f^q1vOM~X>p7C+W(flMDMCtgsOKsL zBT)~^g9?#Q^@FlOg&l&!in@%#j)l8^-R;_L+iv~Z$OH;dQDO&>(Aso=_3KHqm|R@Z zn#FMs34m?D;W(D!C3-F#asE4;0Ud0JXQKZ^>5zEPGQ{#}%IAQSUycJEN*B)CvZi~x zYiXY6u{;R8o+63L2VZb{=ph9R1dP=pyqW(&u^^Be;5bh7!u|6V9JCqiX?VW^!Oo!5 z+s9^fJ*@wR3SIzou!+j&`-@I*9@r$~5>bO6)In^X0q-}II7m+4NbLgZN=^C(00000 LNkvXXu0mjfB3sD! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/emt/textures/items/materials/awakenedSchematic.png b/src/main/resources/assets/emt/textures/items/materials/awakenedSchematic.png new file mode 100644 index 0000000000000000000000000000000000000000..3a03b2d3f8d3dab1e33baae5c6161c99dffd1e77 GIT binary patch literal 2316 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/emt/textures/items/materials/draconicSchematic.png b/src/main/resources/assets/emt/textures/items/materials/draconicSchematic.png new file mode 100644 index 0000000000000000000000000000000000000000..8012beec8906c30b4b153846437112f7520842bb GIT binary patch literal 2414 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