aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kekztech/common
diff options
context:
space:
mode:
authorNotAPenguin <michiel.vandeginste@gmail.com>2024-09-02 23:17:17 +0200
committerGitHub <noreply@github.com>2024-09-02 23:17:17 +0200
commit1b820de08a05070909a267e17f033fcf58ac8710 (patch)
tree02831a025986a06b20f87e5bcc69d1e0c639a342 /src/main/java/kekztech/common
parentafd3fd92b6a6ab9ab0d0dc3214e6bc8ff7a86c9b (diff)
downloadGT5-Unofficial-1b820de08a05070909a267e17f033fcf58ac8710.tar.gz
GT5-Unofficial-1b820de08a05070909a267e17f033fcf58ac8710.tar.bz2
GT5-Unofficial-1b820de08a05070909a267e17f033fcf58ac8710.zip
The Great Renaming (#3014)
* move kekztech to a single root dir * move detrav to a single root dir * move gtnh-lanthanides to a single root dir * move tectech and delete some gross reflection in gt++ * remove more reflection inside gt5u * delete more reflection in gt++ * fix imports * move bartworks and bwcrossmod * fix proxies * move galactigreg and ggfab * move gtneioreplugin * try to fix gt++ bee loader * apply the rename rules to BW * apply rename rules to bwcrossmod * apply rename rules to detrav scanner mod * apply rename rules to galacticgreg * apply rename rules to ggfab * apply rename rules to goodgenerator * apply rename rules to gtnh-lanthanides * apply rename rules to gt++ * apply rename rules to kekztech * apply rename rules to kubatech * apply rename rules to tectech * apply rename rules to gt apply the rename rules to gt * fix tt import * fix mui hopefully * fix coremod except intergalactic * rename assline recipe class * fix a class name i stumbled on * rename StructureUtility to GTStructureUtility to prevent conflict with structurelib * temporary rename of GTTooltipDataCache to old name * fix gt client/server proxy names
Diffstat (limited to 'src/main/java/kekztech/common')
-rw-r--r--src/main/java/kekztech/common/Blocks.java61
-rw-r--r--src/main/java/kekztech/common/CommonProxy.java46
-rw-r--r--src/main/java/kekztech/common/Recipes.java143
-rw-r--r--src/main/java/kekztech/common/Researches.java71
-rw-r--r--src/main/java/kekztech/common/TileEntities.java56
-rw-r--r--src/main/java/kekztech/common/blocks/BaseGTUpdateableBlock.java57
-rw-r--r--src/main/java/kekztech/common/blocks/BlockGDCUnit.java29
-rw-r--r--src/main/java/kekztech/common/blocks/BlockIchorJar.java229
-rw-r--r--src/main/java/kekztech/common/blocks/BlockLapotronicEnergyUnit.java172
-rw-r--r--src/main/java/kekztech/common/blocks/BlockLargeHexPlate.java65
-rw-r--r--src/main/java/kekztech/common/blocks/BlockTFFTStorageField.java91
-rw-r--r--src/main/java/kekztech/common/blocks/BlockThaumiumReinforcedJar.java251
-rw-r--r--src/main/java/kekztech/common/blocks/BlockYSZUnit.java29
-rw-r--r--src/main/java/kekztech/common/itemBlocks/ItemBlockIchorJar.java27
-rw-r--r--src/main/java/kekztech/common/itemBlocks/ItemBlockLapotronicEnergyUnit.java190
-rw-r--r--src/main/java/kekztech/common/itemBlocks/ItemBlockTFFTStorageField.java63
-rw-r--r--src/main/java/kekztech/common/itemBlocks/ItemBlockThaumiumReinforcedJar.java27
-rw-r--r--src/main/java/kekztech/common/items/ErrorItem.java48
-rw-r--r--src/main/java/kekztech/common/items/MetaItemCraftingComponent.java89
-rw-r--r--src/main/java/kekztech/common/recipeLoaders/AlloySmelter.java28
-rw-r--r--src/main/java/kekztech/common/recipeLoaders/Assembler.java294
-rw-r--r--src/main/java/kekztech/common/recipeLoaders/AssemblyLine.java226
-rw-r--r--src/main/java/kekztech/common/recipeLoaders/ChemicalReactor.java29
-rw-r--r--src/main/java/kekztech/common/recipeLoaders/Crafting.java71
-rw-r--r--src/main/java/kekztech/common/recipeLoaders/FormingPress.java28
-rw-r--r--src/main/java/kekztech/common/recipeLoaders/Mixer.java47
-rw-r--r--src/main/java/kekztech/common/recipeLoaders/ResearchableAssemblyLine.java133
-rw-r--r--src/main/java/kekztech/common/recipeLoaders/Unpackager.java199
-rw-r--r--src/main/java/kekztech/common/tileentities/MTEHatchTFFT.java271
-rw-r--r--src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java1213
-rw-r--r--src/main/java/kekztech/common/tileentities/MTESOFuelCellMK1.java221
-rw-r--r--src/main/java/kekztech/common/tileentities/MTESOFuelCellMK2.java222
-rw-r--r--src/main/java/kekztech/common/tileentities/MTETankTFFT.java787
-rw-r--r--src/main/java/kekztech/common/tileentities/TileEntityIchorJar.java10
-rw-r--r--src/main/java/kekztech/common/tileentities/TileEntityIchorVoidJar.java10
-rw-r--r--src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedJar.java10
-rw-r--r--src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedVoidJar.java10
37 files changed, 5553 insertions, 0 deletions
diff --git a/src/main/java/kekztech/common/Blocks.java b/src/main/java/kekztech/common/Blocks.java
new file mode 100644
index 0000000000..013bcf54d5
--- /dev/null
+++ b/src/main/java/kekztech/common/Blocks.java
@@ -0,0 +1,61 @@
+package kekztech.common;
+
+import net.minecraft.block.Block;
+
+import gregtech.api.enums.Mods;
+import kekztech.KekzCore;
+import kekztech.common.blocks.BlockGDCUnit;
+import kekztech.common.blocks.BlockIchorJar;
+import kekztech.common.blocks.BlockLapotronicEnergyUnit;
+import kekztech.common.blocks.BlockLargeHexPlate;
+import kekztech.common.blocks.BlockTFFTStorageField;
+import kekztech.common.blocks.BlockThaumiumReinforcedJar;
+import kekztech.common.blocks.BlockYSZUnit;
+
+public class Blocks {
+
+ public static Block yszUnit;
+ public static Block gdcUnit;
+ public static Block tfftStorageField;
+ public static Block jarThaumiumReinforced;
+ public static Block jarIchor;
+ public static Block lscLapotronicEnergyUnit;
+
+ public static Block largeHexPlate;
+
+ public static void preInit() {
+ KekzCore.LOGGER.info("Registering blocks...");
+
+ registerBlocks_SOFC();
+ registerBlocks_TFFT();
+ if (Mods.Thaumcraft.isModLoaded()) {
+ registerBlocks_Jars();
+ }
+ registerBlocks_LSC();
+ registerBlocks_Cosmetics();
+
+ KekzCore.LOGGER.info("Finished registering blocks");
+ }
+
+ private static void registerBlocks_SOFC() {
+ yszUnit = BlockYSZUnit.registerBlock();
+ gdcUnit = BlockGDCUnit.registerBlock();
+ }
+
+ private static void registerBlocks_TFFT() {
+ tfftStorageField = BlockTFFTStorageField.registerBlock();
+ }
+
+ private static void registerBlocks_Jars() {
+ jarThaumiumReinforced = BlockThaumiumReinforcedJar.registerBlock();
+ jarIchor = BlockIchorJar.registerBlock();
+ }
+
+ private static void registerBlocks_LSC() {
+ lscLapotronicEnergyUnit = BlockLapotronicEnergyUnit.registerBlock();
+ }
+
+ private static void registerBlocks_Cosmetics() {
+ largeHexPlate = BlockLargeHexPlate.registerBlock();
+ }
+}
diff --git a/src/main/java/kekztech/common/CommonProxy.java b/src/main/java/kekztech/common/CommonProxy.java
new file mode 100644
index 0000000000..1baa4e5c69
--- /dev/null
+++ b/src/main/java/kekztech/common/CommonProxy.java
@@ -0,0 +1,46 @@
+package kekztech.common;
+
+import cpw.mods.fml.common.event.FMLInitializationEvent;
+import cpw.mods.fml.common.event.FMLPostInitializationEvent;
+import cpw.mods.fml.common.event.FMLPreInitializationEvent;
+import gregtech.api.enums.Mods;
+import kekztech.Items;
+import kekztech.common.items.ErrorItem;
+import kekztech.common.items.MetaItemCraftingComponent;
+import kekztech.common.tileentities.MTEHatchTFFT;
+
+public class CommonProxy {
+
+ public void preInit(final FMLPreInitializationEvent e) {
+ // Items
+ ErrorItem.getInstance()
+ .registerItem();
+ MetaItemCraftingComponent.getInstance()
+ .registerItem();
+ Items.registerOreDictNames();
+ // Blocks
+ Blocks.preInit();
+ // TileEntities
+ TileEntities.preInit();
+ if (Mods.Thaumcraft.isModLoaded() && Mods.ThaumicTinkerer.isModLoaded()) {
+ // TC Research
+ Researches.preInit();
+ }
+ }
+
+ public void init(final FMLInitializationEvent e) {
+ // GregTech Meta TileEntities
+ TileEntities.init();
+ }
+
+ public void postInit(final FMLPostInitializationEvent e) {
+ // Recipes
+ Recipes.postInit();
+ if (Mods.Thaumcraft.isModLoaded() && Mods.ThaumicTinkerer.isModLoaded()) {
+ // Research
+ Researches.postInit();
+ }
+
+ MTEHatchTFFT.registerAEIntegration();
+ }
+}
diff --git a/src/main/java/kekztech/common/Recipes.java b/src/main/java/kekztech/common/Recipes.java
new file mode 100644
index 0000000000..e6472c23a3
--- /dev/null
+++ b/src/main/java/kekztech/common/Recipes.java
@@ -0,0 +1,143 @@
+package kekztech.common;
+
+import static gregtech.api.enums.Mods.ThaumicTinkerer;
+
+import java.util.HashMap;
+
+import net.minecraft.item.ItemStack;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.Mods;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import kekztech.KekzCore;
+import kekztech.common.recipeLoaders.AlloySmelter;
+import kekztech.common.recipeLoaders.Assembler;
+import kekztech.common.recipeLoaders.AssemblyLine;
+import kekztech.common.recipeLoaders.ChemicalReactor;
+import kekztech.common.recipeLoaders.Crafting;
+import kekztech.common.recipeLoaders.FormingPress;
+import kekztech.common.recipeLoaders.Mixer;
+import kekztech.common.recipeLoaders.ResearchableAssemblyLine;
+import kekztech.common.recipeLoaders.Unpackager;
+import thaumcraft.api.ItemApi;
+import thaumcraft.api.ThaumcraftApi;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.api.crafting.InfusionRecipe;
+
+public class Recipes {
+
+ public static final HashMap<String, InfusionRecipe> infusionRecipes = new HashMap<>();
+
+ public static void postInit() {
+ KekzCore.LOGGER.info("Registering recipes...");
+
+ new AlloySmelter().run();
+ new Assembler().run();
+ new AssemblyLine().run();
+ new ChemicalReactor().run();
+ new Crafting().run();
+ new FormingPress().run();
+ new Mixer().run();
+ new ResearchableAssemblyLine().run();
+ new Unpackager().run();
+
+ if (Mods.Thaumcraft.isModLoaded()) {
+ registerRecipes_Jars();
+ }
+
+ KekzCore.LOGGER.info("Finished registering recipes");
+ }
+
+ private static void registerRecipes_Jars() {
+
+ // Thaumium Reinforced Jar
+ final ItemStack[] recipe_jarthaumiumreinforced = {
+ GameRegistry.makeItemStack("Thaumcraft:ItemResource", 15, 1, null),
+ GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1),
+ new ItemStack(net.minecraft.init.Blocks.glass_pane),
+ GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1),
+ new ItemStack(net.minecraft.init.Blocks.glass_pane),
+ GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1),
+ GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1),
+ new ItemStack(net.minecraft.init.Blocks.glass_pane),
+ GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1),
+ new ItemStack(net.minecraft.init.Blocks.glass_pane), };
+ final AspectList aspects_jarthaumiumreinforced = new AspectList().add(Aspect.ARMOR, 64)
+ .add(Aspect.ORDER, 32)
+ .add(Aspect.WATER, 32)
+ .add(Aspect.GREED, 16)
+ .add(Aspect.VOID, 16)
+ .add(Aspect.AIR, 8);
+ infusionRecipes.put(
+ "THAUMIUMREINFORCEDJAR",
+ ThaumcraftApi.addInfusionCraftingRecipe(
+ "THAUMIUMREINFORCEDJAR",
+ new ItemStack(Blocks.jarThaumiumReinforced, 1, 0),
+ 5,
+ aspects_jarthaumiumreinforced,
+ ItemApi.getBlock("blockJar", 0),
+ recipe_jarthaumiumreinforced));
+ // Thaumium Reinforced Void Jar
+ final ItemStack[] recipe_voidjarupgrade = {
+ GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Obsidian, 1),
+ GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1),
+ GTOreDictUnificator.get(OrePrefixes.plate, Materials.EnderEye, 1), ItemApi.getItem("itemNugget", 5) };
+ final AspectList aspects_voidjarupgrade = new AspectList().add(Aspect.VOID, 14)
+ .add(Aspect.MAGIC, 14)
+ .add(Aspect.ENTROPY, 14)
+ .add(Aspect.WATER, 14);
+ infusionRecipes.put(
+ "THAUMIUMREINFORCEDVOIDJAR",
+ ThaumcraftApi.addInfusionCraftingRecipe(
+ "THAUMIUMREINFORCEDJAR",
+ new ItemStack(Blocks.jarThaumiumReinforced, 1, 3),
+ 2,
+ aspects_voidjarupgrade,
+ new ItemStack(Blocks.jarThaumiumReinforced, 1, 0),
+ recipe_voidjarupgrade));
+
+ final ItemStack[] recipe_jarichor = { GTModHandler.getModItem(ThaumicTinkerer.ID, "kamiResource", 1, 0),
+ GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1),
+ new ItemStack(net.minecraft.init.Blocks.glass_pane),
+ GTOreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 1),
+ GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1),
+ new ItemStack(net.minecraft.init.Blocks.glass_pane),
+ GTOreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Diamond, 1),
+ GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1),
+ new ItemStack(net.minecraft.init.Blocks.glass_pane),
+ GTOreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 1),
+ GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1),
+ new ItemStack(net.minecraft.init.Blocks.glass_pane), };
+ final AspectList aspects_jarichor = new AspectList().add(Aspect.ARMOR, 256)
+ .add(Aspect.ELDRITCH, 128)
+ .add(Aspect.ORDER, 128)
+ .add(Aspect.WATER, 128)
+ .add(Aspect.GREED, 64)
+ .add(Aspect.VOID, 64)
+ .add(Aspect.AIR, 32);
+ infusionRecipes.put(
+ "ICHORJAR",
+ ThaumcraftApi.addInfusionCraftingRecipe(
+ "ICHORJAR",
+ new ItemStack(Blocks.jarIchor, 1, 0),
+ 15,
+ aspects_jarichor,
+ ItemApi.getBlock("blockJar", 0),
+ recipe_jarichor));
+ // Ichor Void Jar
+ infusionRecipes.put(
+ "ICHORVOIDJAR",
+ ThaumcraftApi.addInfusionCraftingRecipe(
+ "ICHORJAR",
+ new ItemStack(Blocks.jarIchor, 1, 3),
+ 5,
+ aspects_voidjarupgrade,
+ new ItemStack(Blocks.jarIchor, 1, 0),
+ recipe_voidjarupgrade));
+ }
+
+}
diff --git a/src/main/java/kekztech/common/Researches.java b/src/main/java/kekztech/common/Researches.java
new file mode 100644
index 0000000000..8944f7a486
--- /dev/null
+++ b/src/main/java/kekztech/common/Researches.java
@@ -0,0 +1,71 @@
+package kekztech.common;
+
+import net.minecraft.item.ItemStack;
+
+import kekztech.KekzCore;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.api.research.ResearchItem;
+import thaumcraft.api.research.ResearchPage;
+import thaumic.tinkerer.common.research.KamiResearchItem;
+
+public class Researches {
+
+ public static final String THAUMIUMREINFORCEDJAR = "THAUMIUMREINFORCEDJAR";
+ public static final String ICHORJAR = "ICHORJAR";
+
+ public static void preInit() {
+ // Blacklist these researches from being a requirement to unlock TTKami
+ KekzCore.LOGGER.info("Blacklisting research " + THAUMIUMREINFORCEDJAR + " from /iskamiunlocked");
+ KamiResearchItem.Blacklist.add(ICHORJAR);
+ KekzCore.LOGGER.info("Blacklisting research" + ICHORJAR + "from /iskamiunlocked");
+ KamiResearchItem.Blacklist.add(ICHORJAR);
+ }
+
+ public static void postInit() {
+ final AspectList aspects_jarthaumiumreinforced = new AspectList().add(Aspect.ARMOR, 3)
+ .add(Aspect.WATER, 3)
+ .add(Aspect.GREED, 3)
+ .add(Aspect.VOID, 3);
+ @SuppressWarnings("unused")
+ final ResearchItem jar_thaumiumreinforced = new ResearchItem(
+ "THAUMIUMREINFORCEDJAR",
+ "ALCHEMY",
+ aspects_jarthaumiumreinforced,
+ 3,
+ -4,
+ 2,
+ new ItemStack(Blocks.jarThaumiumReinforced, 1))
+ .setPages(
+ new ResearchPage("kekztech.research_page.THAUMIUMREINFORCEDJAR.0"),
+ new ResearchPage(Recipes.infusionRecipes.get("THAUMIUMREINFORCEDJAR")),
+ new ResearchPage(Recipes.infusionRecipes.get("THAUMIUMREINFORCEDVOIDJAR")),
+ new ResearchPage("kekztech.research_page.THAUMIUMREINFORCEDJAR.1"))
+ .setConcealed()
+ .setParents("JARLABEL")
+ .registerResearchItem();
+
+ final AspectList aspects_jarichor = new AspectList().add(Aspect.ARMOR, 3)
+ .add(Aspect.ELDRITCH, 3)
+ .add(Aspect.WATER, 3)
+ .add(Aspect.GREED, 5)
+ .add(Aspect.VOID, 5);
+ @SuppressWarnings("unused")
+ final ResearchItem jar_ichor = new ResearchItem(
+ "ICHORJAR",
+ "ALCHEMY",
+ aspects_jarichor,
+ 2,
+ -5,
+ 3,
+ new ItemStack(Blocks.jarIchor, 1))
+ .setPages(
+ new ResearchPage("kekztech.research_page.ICHORJAR.0"),
+ new ResearchPage(Recipes.infusionRecipes.get("ICHORJAR")),
+ new ResearchPage(Recipes.infusionRecipes.get("ICHORVOIDJAR")))
+ .setConcealed()
+ .setParents("THAUMIUMREINFORCEDJAR")
+ .setParentsHidden("ICHOR")
+ .registerResearchItem();
+ }
+}
diff --git a/src/main/java/kekztech/common/TileEntities.java b/src/main/java/kekztech/common/TileEntities.java
new file mode 100644
index 0000000000..f510b481f9
--- /dev/null
+++ b/src/main/java/kekztech/common/TileEntities.java
@@ -0,0 +1,56 @@
+package kekztech.common;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import gregtech.api.enums.MetaTileEntityIDs;
+import gregtech.api.enums.Mods;
+import kekztech.common.tileentities.MTEHatchTFFT;
+import kekztech.common.tileentities.MTELapotronicSuperCapacitor;
+import kekztech.common.tileentities.MTESOFuelCellMK1;
+import kekztech.common.tileentities.MTESOFuelCellMK2;
+import kekztech.common.tileentities.MTETankTFFT;
+import kekztech.common.tileentities.TileEntityIchorJar;
+import kekztech.common.tileentities.TileEntityIchorVoidJar;
+import kekztech.common.tileentities.TileEntityThaumiumReinforcedJar;
+import kekztech.common.tileentities.TileEntityThaumiumReinforcedVoidJar;
+
+public class TileEntities {
+
+ // Multiblock controllers
+ public static MTESOFuelCellMK1 sofc1;
+ public static MTESOFuelCellMK2 sofc2;
+ public static MTETankTFFT tfft;
+ public static MTELapotronicSuperCapacitor lsc;
+
+ // Singleblocks
+ public static MTEHatchTFFT tfftHatch;
+
+ public static void preInit() {
+ if (Mods.Thaumcraft.isModLoaded()) {
+ GameRegistry.registerTileEntity(TileEntityThaumiumReinforcedJar.class, "kekztech_thaumiumreinforcedjar");
+ GameRegistry
+ .registerTileEntity(TileEntityThaumiumReinforcedVoidJar.class, "kekztech_thaumiumreinforcedvoidjar");
+ GameRegistry.registerTileEntity(TileEntityIchorJar.class, "kekztech_ichorjar");
+ GameRegistry.registerTileEntity(TileEntityIchorVoidJar.class, "kekztech_ichorvoidjar");
+ }
+ }
+
+ public static void init() {
+ // Multiblock controllers
+ sofc1 = new MTESOFuelCellMK1(
+ MetaTileEntityIDs.sofc1.ID,
+ "multimachine.fuelcellmk1",
+ "Solid-Oxide Fuel Cell Mk I");
+ sofc2 = new MTESOFuelCellMK2(
+ MetaTileEntityIDs.sofc2.ID,
+ "multimachine.fuelcellmk2",
+ "Solid-Oxide Fuel Cell Mk II");
+ tfft = new MTETankTFFT(MetaTileEntityIDs.tfft.ID, "multimachine.tfft", "T.F.F.T");
+ lsc = new MTELapotronicSuperCapacitor(
+ MetaTileEntityIDs.lsc.ID,
+ "multimachine.supercapacitor",
+ "Lapotronic Supercapacitor");
+
+ // Singleblocks
+ tfftHatch = new MTEHatchTFFT(MetaTileEntityIDs.tfftHatch.ID, "machine.tffthatch", "T.F.F.T Multi I/O Hatch");
+ }
+}
diff --git a/src/main/java/kekztech/common/blocks/BaseGTUpdateableBlock.java b/src/main/java/kekztech/common/blocks/BaseGTUpdateableBlock.java
new file mode 100644
index 0000000000..6c81807a82
--- /dev/null
+++ b/src/main/java/kekztech/common/blocks/BaseGTUpdateableBlock.java
@@ -0,0 +1,57 @@
+package kekztech.common.blocks;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EnumCreatureType;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+import gregtech.api.GregTechAPI;
+
+/**
+ * Any blocks that are used as structure parts for GregTech multi machines have to inherit from this class. Otherwise
+ * the checkMachine() method that verifies a machine's structure won't be called correctly.
+ */
+public abstract class BaseGTUpdateableBlock extends Block {
+
+ protected BaseGTUpdateableBlock(Material material) {
+ super(material);
+ GregTechAPI.registerMachineBlock(this, -1);
+ super.setHarvestLevel("wrench", 2);
+ }
+
+ @Override
+ public int damageDropped(int meta) {
+ return meta;
+ }
+
+ @Override
+ public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) {
+ return false;
+ }
+
+ @Override
+ public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) {
+ return false;
+ }
+
+ @Override
+ public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) {
+ return false;
+ }
+
+ @Override
+ public void onBlockAdded(World aWorld, int aX, int aY, int aZ) {
+ if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) {
+ GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ);
+ }
+ }
+
+ @Override
+ public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) {
+ if (GregTechAPI.isMachineBlock(this, aMetaData)) {
+ GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ);
+ }
+ }
+}
diff --git a/src/main/java/kekztech/common/blocks/BlockGDCUnit.java b/src/main/java/kekztech/common/blocks/BlockGDCUnit.java
new file mode 100644
index 0000000000..515c5127c6
--- /dev/null
+++ b/src/main/java/kekztech/common/blocks/BlockGDCUnit.java
@@ -0,0 +1,29 @@
+package kekztech.common.blocks;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.creativetab.CreativeTabs;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import kekztech.KekzCore;
+
+public class BlockGDCUnit extends BaseGTUpdateableBlock {
+
+ private static final BlockGDCUnit instance = new BlockGDCUnit();
+
+ private BlockGDCUnit() {
+ super(Material.iron);
+ }
+
+ public static Block registerBlock() {
+ final String blockName = "kekztech_gdcceramicelectrolyteunit_block";
+ instance.setBlockName(blockName);
+ instance.setCreativeTab(CreativeTabs.tabMisc);
+ instance.setBlockTextureName(KekzCore.MODID + ":" + "GDCCeramicElectrolyteUnit");
+ instance.setHardness(5.0f);
+ instance.setResistance(6.0f);
+ GameRegistry.registerBlock(instance, blockName);
+
+ return instance;
+ }
+}
diff --git a/src/main/java/kekztech/common/blocks/BlockIchorJar.java b/src/main/java/kekztech/common/blocks/BlockIchorJar.java
new file mode 100644
index 0000000000..68ebbc2a43
--- /dev/null
+++ b/src/main/java/kekztech/common/blocks/BlockIchorJar.java
@@ -0,0 +1,229 @@
+package kekztech.common.blocks;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.Explosion;
+import net.minecraft.world.World;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import kekztech.common.itemBlocks.ItemBlockIchorJar;
+import kekztech.common.tileentities.TileEntityIchorJar;
+import kekztech.common.tileentities.TileEntityIchorVoidJar;
+import thaumcraft.api.aspects.Aspect;
+import thaumcraft.api.aspects.AspectList;
+import thaumcraft.common.blocks.BlockJar;
+import thaumcraft.common.config.ConfigBlocks;
+import thaumcraft.common.config.ConfigItems;
+import thaumcraft.common.items.ItemEssence;
+import thaumcraft.common.tiles.TileJarFillable;
+
+public class BlockIchorJar extends BlockJar {
+
+ private static final BlockIchorJar INSTANCE = new BlockIchorJar();
+
+ private BlockIchorJar() {
+ super();
+
+ super.setHardness(12.0F);
+ super.setResistance(3.0f);
+ }
+
+ public static Block registerBlock() {
+ final String blockName = "kekztech_ichorjar_block";
+ INSTANCE.setBlockName(blockName);
+ INSTANCE.setHarvestLevel("pickaxe", 3);
+ GameRegistry.registerBlock(INSTANCE, ItemBlockIchorJar.class, blockName);
+
+ return INSTANCE;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister ir) {
+ super.iconLiquid = ir.registerIcon("thaumcraft:animatedglow");
+ super.iconJarSide = ir.registerIcon("kekztech:ichor_jar_side");
+ super.iconJarTop = ir.registerIcon("kekztech:ichor_jar_top");
+ super.iconJarTopVoid = ir.registerIcon("kekztech:ichor_jar_top_void");
+ super.iconJarSideVoid = ir.registerIcon("kekztech:ichor_jar_side_void");
+ super.iconJarBottom = ir.registerIcon("kekztech:ichor_jar_bottom");
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ @SuppressWarnings({ "unchecked" })
+ public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) {
+ par3List.add(new ItemStack(par1, 1, 0)); // Normal jar
+ par3List.add(new ItemStack(par1, 1, 3)); // Void jar
+ }
+
+ @Override
+ public TileEntity createTileEntity(World world, int meta) {
+ if (meta == 3) {
+ return new TileEntityIchorVoidJar();
+ } else {
+ return new TileEntityIchorJar();
+ }
+ }
+
+ @Override
+ public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float f1, float f2,
+ float f3) {
+ // Call parent method to handle jar emptying, labels stuff etc
+ super.onBlockActivated(world, x, y, z, player, side, f1, f2, f3);
+ // Interact with Essentia Phials if the player holds one
+ final ItemStack heldItem = player.getHeldItem();
+ if (heldItem != null && heldItem.getItem() == ConfigItems.itemEssence) {
+ final TileEntity te = world.getTileEntity(x, y, z);
+ if (te instanceof TileEntityIchorJar) {
+ return dealWithPhial(world, player, x, y, z);
+ } else if (te instanceof TileEntityIchorVoidJar) {
+ return dealWithPhial(world, player, x, y, z);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Handle compatibility with Essentia Phials
+ *
+ * @param world Pass through from onBlockActivated()
+ * @param player Pass through from onBlockActivated()
+ * @param x Pass through from onBlockActivated()
+ * @param y Pass through from onBlockActivated()
+ * @param z Pass through from onBlockActivated()
+ * @return Not sure tbh
+ */
+ private boolean dealWithPhial(World world, EntityPlayer player, int x, int y, int z) {
+ final TileJarFillable jarTE = (TileJarFillable) world.getTileEntity(x, y, z);
+ final ItemStack heldItem = player.getHeldItem();
+ // Check whether