aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/tectech/thing/block
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/tectech/thing/block')
-rw-r--r--src/main/java/tectech/thing/block/BlockEOHRender.java78
-rw-r--r--src/main/java/tectech/thing/block/BlockForgeOfGods.java71
-rw-r--r--src/main/java/tectech/thing/block/BlockGodforgeGlass.java106
-rw-r--r--src/main/java/tectech/thing/block/BlockQuantumGlass.java110
-rw-r--r--src/main/java/tectech/thing/block/BlockQuantumStuff.java103
-rw-r--r--src/main/java/tectech/thing/block/BlockReactorSim.java94
-rw-r--r--src/main/java/tectech/thing/block/ItemGodForgeGlass.java31
-rw-r--r--src/main/java/tectech/thing/block/ItemQuantumGlass.java34
-rw-r--r--src/main/java/tectech/thing/block/ItemReactorSim.java37
-rw-r--r--src/main/java/tectech/thing/block/RenderForgeOfGods.java65
-rw-r--r--src/main/java/tectech/thing/block/RenderGodforgeGlass.java122
-rw-r--r--src/main/java/tectech/thing/block/RenderQuantumGlass.java129
-rw-r--r--src/main/java/tectech/thing/block/RenderQuantumStuff.java103
-rw-r--r--src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java200
-rw-r--r--src/main/java/tectech/thing/block/TileEntityForgeOfGods.java82
15 files changed, 1365 insertions, 0 deletions
diff --git a/src/main/java/tectech/thing/block/BlockEOHRender.java b/src/main/java/tectech/thing/block/BlockEOHRender.java
new file mode 100644
index 0000000000..db70a4a956
--- /dev/null
+++ b/src/main/java/tectech/thing/block/BlockEOHRender.java
@@ -0,0 +1,78 @@
+package tectech.thing.block;
+
+import java.util.ArrayList;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+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 tectech.TecTech;
+
+public class BlockEOHRender extends Block {
+
+ public BlockEOHRender() {
+ super(Material.iron);
+ this.setResistance(20f);
+ this.setHardness(-1.0f);
+ this.setCreativeTab(TecTech.creativeTabTecTech);
+ this.setBlockName("Eye of Harmony Renderer");
+ this.setLightLevel(100.0f);
+ registerOther(this);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister iconRegister) {
+ blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT");
+ }
+
+ @Override
+ public boolean isOpaqueCube() {
+ return false;
+ }
+
+ @Override
+ public boolean canRenderInPass(int a) {
+ return true;
+ }
+
+ @Override
+ public boolean renderAsNormalBlock() {
+ return false;
+ }
+
+ @Override
+ public boolean hasTileEntity(int metadata) {
+ return true;
+ }
+
+ @Override
+ public TileEntity createTileEntity(World world, int metadata) {
+ return new TileEntityEyeOfHarmony();
+ }
+
+ public static void registerOther(Block block) {
+ String name = block.getUnlocalizedName()
+ .substring(
+ block.getUnlocalizedName()
+ .indexOf(".") + 1);
+ GameRegistry.registerBlock(block, name.substring(name.indexOf(":") + 1));
+ }
+
+ @Override
+ public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int meta, int fortune) {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public boolean isCollidable() {
+ return false;
+ }
+
+}
diff --git a/src/main/java/tectech/thing/block/BlockForgeOfGods.java b/src/main/java/tectech/thing/block/BlockForgeOfGods.java
new file mode 100644
index 0000000000..a53299f229
--- /dev/null
+++ b/src/main/java/tectech/thing/block/BlockForgeOfGods.java
@@ -0,0 +1,71 @@
+package tectech.thing.block;
+
+import java.util.ArrayList;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+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 tectech.TecTech;
+
+public class BlockForgeOfGods extends Block {
+
+ public BlockForgeOfGods() {
+ super(Material.iron);
+ this.setResistance(20f);
+ this.setHardness(-1.0f);
+ this.setCreativeTab(TecTech.creativeTabTecTech);
+ this.setBlockName("Forge of the Gods Renderer");
+ this.setLightLevel(100.0f);
+ if (TecTech.configTecTech.ENABLE_GOD_FORGE) {
+ registerOther(this);
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister iconRegister) {
+ blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT");
+ }
+
+ @Override
+ public boolean isOpaqueCube() {
+ return false;
+ }
+
+ @Override
+ public boolean canRenderInPass(int a) {
+ return true;
+ }
+
+ @Override
+ public boolean renderAsNormalBlock() {
+ return false;
+ }
+
+ @Override
+ public boolean hasTileEntity(int metadata) {
+ return true;
+ }
+
+ @Override
+ public TileEntity createTileEntity(World world, int metadata) {
+ return new TileEntityForgeOfGods();
+ }
+
+ public static void registerOther(Block block) {
+ GameRegistry.registerBlock(block, "ForgeOfGodsRenderBlock");
+ }
+
+ @Override
+ public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int meta, int fortune) {
+ return new ArrayList<>();
+ }
+
+}
diff --git a/src/main/java/tectech/thing/block/BlockGodforgeGlass.java b/src/main/java/tectech/thing/block/BlockGodforgeGlass.java
new file mode 100644
index 0000000000..e29e815212
--- /dev/null
+++ b/src/main/java/tectech/thing/block/BlockGodforgeGlass.java
@@ -0,0 +1,106 @@
+package tectech.thing.block;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+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 eu.usrv.yamcore.blocks.BlockBase;
+import gregtech.api.GregTechAPI;
+import tectech.Reference;
+import tectech.TecTech;
+
+public class BlockGodforgeGlass extends BlockBase {
+
+ public static IIcon Icon;
+ public static int renderID;
+ public static BlockGodforgeGlass INSTANCE;
+
+ public BlockGodforgeGlass() {
+ super(Material.iron);
+ setBlockBounds(0, 0, 0, 1, 1, 1);
+ setBlockName("spatiallyTranscendentGravitationalLens");
+ setHarvestLevel("wrench", 3);
+ setHardness(50);
+ setResistance(30);
+ setLightOpacity(0);
+ setStepSound(Block.soundTypeGlass);
+ setBlockTextureName(Reference.MODID + ":blockSpatiallyTranscendentGravitationalLens");
+ setCreativeTab(TecTech.creativeTabTecTech);
+ }
+
+ @Override
+ public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) {
+ return true;
+ }
+
+ @Override
+ public boolean isOpaqueCube() {
+ return false;
+ }
+
+ @Override
+ public boolean getCanBlockGrass() {
+ return false;
+ }
+
+ @Override
+ public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public int getRenderBlockPass() {
+ return 1;
+ }
+
+ @Override
+ public boolean renderAsNormalBlock() {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) {
+ Block block = worldIn.getBlock(x, y, z);
+ return block != this;
+ }
+
+ @Override
+ public int getRenderType() {
+ return renderID;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister reg) {
+ super.registerBlockIcons(reg);
+ Icon = blockIcon;
+ }
+
+ public static void run() {
+ INSTANCE = new BlockGodforgeGlass();
+ GameRegistry.registerBlock(INSTANCE, ItemGodForgeGlass.class, INSTANCE.getUnlocalizedName());
+ GregTechAPI.registerMachineBlock(INSTANCE, -1);
+ }
+
+ @Override
+ public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMeta) {
+ if (GregTechAPI.isMachineBlock(this, aMeta)) {
+ GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ);
+ }
+ }
+
+ @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);
+ }
+ }
+}
diff --git a/src/main/java/tectech/thing/block/BlockQuantumGlass.java b/src/main/java/tectech/thing/block/BlockQuantumGlass.java
new file mode 100644
index 0000000000..fa0b6c4681
--- /dev/null
+++ b/src/main/java/tectech/thing/block/BlockQuantumGlass.java
@@ -0,0 +1,110 @@
+package tectech.thing.block;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+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 eu.usrv.yamcore.blocks.BlockBase;
+import gregtech.api.GregTechAPI;
+import tectech.Reference;
+import tectech.TecTech;
+
+/**
+ * Created by danie_000 on 17.12.2016.
+ */
+public final class BlockQuantumGlass extends BlockBase {
+
+ public static IIcon stuff;
+ public static int renderID;
+ public static BlockQuantumGlass INSTANCE;
+
+ public BlockQuantumGlass() {
+ super(Material.iron);
+ setBlockBounds(0, 0, 0, 1, 1, 1);
+ setBlockName("quantumGlass");
+ setHarvestLevel("wrench", 3);
+ setHardness(50);
+ setResistance(30);
+ setLightOpacity(0);
+ setStepSound(Block.soundTypeMetal);
+ setBlockTextureName(Reference.MODID + ":blockQuantumGlass");
+ setCreativeTab(TecTech.creativeTabTecTech);
+ }
+
+ @Override
+ public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) {
+ return true;
+ }
+
+ @Override
+ public boolean isOpaqueCube() {
+ return false;
+ }
+
+ @Override
+ public boolean getCanBlockGrass() {
+ return false;
+ }
+
+ @Override
+ public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public int getRenderBlockPass() {
+ return 1;
+ }
+
+ @Override
+ public boolean renderAsNormalBlock() {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) {
+ Block block = worldIn.getBlock(x, y, z);
+ return block != this; // && super.shouldSideBeRendered(worldIn, x, y, z,
+ // side);
+ }
+
+ @Override
+ public int getRenderType() {
+ return renderID;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister reg) {
+ super.registerBlockIcons(reg);
+ stuff = blockIcon;
+ }
+
+ public static void run() {
+ INSTANCE = new BlockQuantumGlass();
+ GameRegistry.registerBlock(INSTANCE, ItemQuantumGlass.class, INSTANCE.getUnlocalizedName());
+ GregTechAPI.registerMachineBlock(INSTANCE, -1);
+ }
+
+ @Override
+ public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMeta) {
+ if (GregTechAPI.isMachineBlock(this, aMeta)) {
+ GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ);
+ }
+ }
+
+ @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);
+ }
+ }
+}
diff --git a/src/main/java/tectech/thing/block/BlockQuantumStuff.java b/src/main/java/tectech/thing/block/BlockQuantumStuff.java
new file mode 100644
index 0000000000..bdbdb35510
--- /dev/null
+++ b/src/main/java/tectech/thing/block/BlockQuantumStuff.java
@@ -0,0 +1,103 @@
+package tectech.thing.block;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+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 eu.usrv.yamcore.blocks.BlockBase;
+import tectech.Reference;
+
+/**
+ * Created by danie_000 on 17.12.2016.
+ */
+public final class BlockQuantumStuff extends BlockBase {
+
+ public static IIcon stuff;
+ public static int renderID;
+ public static BlockQuantumStuff INSTANCE;
+
+ public BlockQuantumStuff() {
+ super(Material.iron);
+ setBlockBounds(0, 0, 0, 1, 1, 1);
+ setBlockName("quantumStuff");
+ setHarvestLevel("wrench", 0);
+ setHardness(500);
+ setResistance(1);
+ setLightOpacity(0);
+ setBlockTextureName(Reference.MODID + ":blockQuantumStuff");
+ }
+
+ @Override
+ public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister reg) {
+ super.registerBlockIcons(reg);
+ stuff = blockIcon;
+ }
+
+ @Override
+ public boolean isOpaqueCube() {
+ return false;
+ }
+
+ @Override
+ public boolean getCanBlockGrass() {
+ return false;
+ }
+
+ @Override
+ public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public int getRenderBlockPass() {
+ return 1;
+ }
+
+ @Override
+ public boolean renderAsNormalBlock() {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) {
+ return false;
+ }
+
+ @Override
+ public int getRenderType() {
+ return renderID;
+ }
+
+ public static void run() {
+ INSTANCE = new BlockQuantumStuff();
+ GameRegistry.registerBlock(INSTANCE, INSTANCE.getUnlocalizedName());
+ }
+
+ @Override
+ public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public Item getItemDropped(int meta, Random random, int fortune) {
+ return null;
+ }
+}
diff --git a/src/main/java/tectech/thing/block/BlockReactorSim.java b/src/main/java/tectech/thing/block/BlockReactorSim.java
new file mode 100644
index 0000000000..745db9084f
--- /dev/null
+++ b/src/main/java/tectech/thing/block/BlockReactorSim.java
@@ -0,0 +1,94 @@
+package tectech.thing.block;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.ITileEntityProvider;
+import net.minecraft.block.material.Material;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+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 ic2.core.IC2;
+import ic2.core.IHasGui;
+import ic2.core.block.TileEntityBlock;
+import tectech.Reference;
+import tectech.thing.tileEntity.TileEntityReactorSim;
+
+/**
+ * Created by danie_000 on 30.09.2017.
+ */
+public class BlockReactorSim extends Block implements ITileEntityProvider {
+
+ public static BlockReactorSim INSTANCE;
+ public static IIcon stuff;
+
+ public BlockReactorSim() {
+ super(Material.iron);
+ setBlockBounds(0, 0, 0, 1, 1, 1);
+ setBlockName("reactorSim");
+ setHarvestLevel("wrench", 3);
+ setHardness(50);
+ setResistance(30);
+ setLightOpacity(0);
+ setStepSound(Block.soundTypeMetal);
+ setBlockTextureName(Reference.MODID + ":blockReactorSimulator");
+ }
+
+ @Override
+ public boolean isOpaqueCube() {
+ return true;
+ }
+
+ @Override
+ public boolean getCanBlockGrass() {
+ return true;
+ }
+
+ @Override
+ public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) {
+ return false;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerBlockIcons(IIconRegister reg) {
+ super.registerBlockIcons(reg);
+ stuff = blockIcon;
+ }
+
+ public static void run() {
+ INSTANCE = new BlockReactorSim();
+ GameRegistry.registerBlock(INSTANCE, ItemReactorSim.class, INSTANCE.getUnlocalizedName());
+ GameRegistry.registerTileEntity(TileEntityReactorSim.class, Reference.MODID + "_reactorSim");
+ }
+
+ @Override
+ public TileEntity createNewTileEntity(World worldIn, int meta) {
+ return new TileEntityReactorSim();
+ }
+
+ @Override
+ public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float a,
+ float b, float c) {
+ if (entityPlayer.isSneaking()) {
+ return false;
+ } else {
+ TileEntity te = world.getTileEntity(x, y, z);
+ return te instanceof IHasGui
+ && (!IC2.platform.isSimulating() || IC2.platform.launchGui(entityPlayer, (IHasGui) te));
+ }
+ }
+
+ @Override
+ public void onNeighborBlockChange(World world, int x, int y, int z, Block srcBlock) {
+ TileEntity te = world.getTileEntity(x, y, z);
+ if (te instanceof TileEntityBlock) {
+ ((TileEntityBlock) te).onNeighborUpdate(srcBlock);
+ }
+ }
+}
diff --git a/src/main/java/tectech/thing/block/ItemGodForgeGlass.java b/src/main/java/tectech/thing/block/ItemGodForgeGlass.java
new file mode 100644
index 0000000000..c4c355cc19
--- /dev/null
+++ b/src/main/java/tectech/thing/block/ItemGodForgeGlass.java
@@ -0,0 +1,31 @@
+package tectech.thing.block;
+
+import static net.minecraft.util.StatCollector.translateToLocal;
+
+import java.util.List;
+
+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.EnumChatFormatting;
+
+import tectech.util.CommonValues;
+
+public class ItemGodForgeGlass extends ItemBlock {
+
+ public static ItemGodForgeGlass INSTANCE;
+
+ public ItemGodForgeGlass(Block block) {
+ super(block);
+ }
+
+ @Override
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List<String> aList, boolean aF3_H) {
+ aList.add(CommonValues.GODFORGE_MARK);
+ aList.add(translateToLocal("tile.godforgeGlass.desc.0"));
+ aList.add(
+ EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD
+ + translateToLocal("tile.godforgeGlass.desc.1"));
+ }
+}
diff --git a/src/main/java/tectech/thing/block/ItemQuantumGlass.java b/src/main/java/tectech/thing/block/ItemQuantumGlass.java
new file mode 100644
index 0000000000..441c7363e4
--- /dev/null
+++ b/src/main/java/tectech/thing/block/ItemQuantumGlass.java
@@ -0,0 +1,34 @@
+package tectech.thing.block;
+
+import static net.minecraft.util.StatCollector.translateToLocal;
+
+import java.util.List;
+
+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.EnumChatFormatting;
+
+import tectech.util.CommonValues;
+
+/**
+ * Created by Tec on 11.04.2017.
+ */
+public class ItemQuantumGlass extends ItemBlock {
+
+ public static ItemQuantumGlass INSTANCE;
+
+ public ItemQuantumGlass(Block block) {
+ super(block);
+ }
+
+ @Override
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List<String> aList, boolean aF3_H) {
+ aList.add(CommonValues.TEC_MARK_EM);
+ aList.add(translateToLocal("tile.quantumGlass.desc.0")); // Dense yet transparent
+ aList.add(
+ EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD
+ + translateToLocal("tile.quantumGlass.desc.1")); // Glassy & Classy
+ }
+}
diff --git a/src/main/java/tectech/thing/block/ItemReactorSim.java b/src/main/java/tectech/thing/block/ItemReactorSim.java
new file mode 100644
index 0000000000..bd4bcffde2
--- /dev/null
+++ b/src/main/java/tectech/thing/block/ItemReactorSim.java
@@ -0,0 +1,37 @@
+package tectech.thing.block;
+
+import static net.minecraft.util.StatCollector.translateToLocal;
+
+import java.util.List;
+
+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.EnumChatFormatting;
+
+import tectech.util.CommonValues;
+
+/**
+ * Created by danie_000 on 30.09.2017.
+ */
+public class ItemReactorSim extends ItemBlock {
+
+ public static ItemQuantumGlass INSTANCE;
+
+ public ItemReactorSim(Block block) {
+ super(block);
+ }
+
+ @Override
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List<String> aList, boolean aF3_H) {
+ aList.add(CommonValues.TEC_MARK_GENERAL);
+ aList.add(translateToLocal("tile.reactorSim.desc.0")); // Fission Reaction Uncertainty Resolver 9001
+ aList.add(
+ EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("tile.reactorSim.desc.1")); // Explodes,
+ // but
+ // not
+ // as
+ // much...
+ }
+}
diff --git a/src/main/java/tectech/thing/block/RenderForgeOfGods.java b/src/main/java/tectech/thing/block/RenderForgeOfGods.java
new file mode 100644
index 0000000000..976dd6da8e
--- /dev/null
+++ b/src/main/java/tectech/thing/block/RenderForgeOfGods.java
@@ -0,0 +1,65 @@
+package tectech.thing.block;
+
+import static tectech.Reference.MODID;
+import static tectech.rendering.EOH.EOHRenderingUtils.renderStarLayer;
+import static tectech.rendering.EOH.EOHTileEntitySR.STAR_LAYER_0;
+import static tectech.rendering.EOH.EOHTileEntitySR.STAR_LAYER_1;
+import static tectech.rendering.EOH.EOHTileEntitySR.STAR_LAYER_2;
+
+import java.awt.Color;
+
+import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.client.model.AdvancedModelLoader;
+import net.minecraftforge.client.model.IModelCustom;
+
+import org.lwjgl.opengl.GL11;
+
+public class RenderForgeOfGods extends TileEntitySpecialRenderer {
+
+ public static IModelCustom starModel;
+
+ public RenderForgeOfGods() {
+ starModel = AdvancedModelLoader.loadModel(new ResourceLocation(MODID, "models/Star.obj"));
+ }
+
+ @Override
+ public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) {
+ if (!(tile instanceof TileEntityForgeOfGods)) return;
+
+ {
+ GL11.glPushMatrix();
+ GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
+ GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
+ GL11.glDisable(GL11.GL_LIGHTING);
+ GL11.glDisable(GL11.GL_BLEND);
+
+ // Innermost layer should be opaque
+ enableOpaqueColorInversion();
+ renderStarLayer(0, STAR_LAYER_0, new Color(1.0f, 0.4f, 0.05f, 1.0f), 1.0f, 25);
+ disableOpaqueColorInversion();
+
+ enablePseudoTransparentColorInversion();
+ renderStarLayer(1, STAR_LAYER_1, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.4f, 25);
+ renderStarLayer(2, STAR_LAYER_2, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.2f, 25);
+
+ GL11.glPopAttrib();
+ GL11.glPopMatrix();
+ }
+ }
+
+ public static void enablePseudoTransparentColorInversion() {
+ GL11.glEnable(GL11.GL_COLOR_LOGIC_OP);
+ GL11.glLogicOp(GL11.GL_OR_INVERTED);
+ }
+
+ public static void enableOpaqueColorInversion() {
+ GL11.glEnable(GL11.GL_COLOR_LOGIC_OP);
+ GL11.glLogicOp(GL11.GL_COPY_INVERTED);
+ }
+
+ public static void disableOpaqueColorInversion() {
+ GL11.glDisable(GL11.GL_COLOR_LOGIC_OP);
+ }
+}
diff --git a/src/main/java/tectech/thing/block/RenderGodforgeGlass.java b/src/main/java/tectech/thing/block/RenderGodforgeGlass.java
new file mode 100644
index 0000000000..12c0327f65
--- /dev/null
+++ b/src/main/java/tectech/thing/block/RenderGodforgeGlass.java
@@ -0,0 +1,122 @@
+package tectech.thing.block;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
+
+public class RenderGodforgeGlass implements ISimpleBlockRenderingHandler {
+
+ @Override
+ public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
+ GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+ Tessellator tessellator = Tessellator.instance;
+ GL11.glPushMatrix();
+ // Get icons from custom register (useful for renderers and fluids)
+ IIcon side = BlockGodforgeGlass.Icon;
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, -1.0F, 0.0F);
+ renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, 0.0F, -1.0F);
+ renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, 0.0F, 1.0F);
+ renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(-1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, 1.0F, 0.0F);
+ renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ GL11.glTranslatef(0.5F, 0.5F, 0.5F);
+ GL11.glPopMatrix();
+ }
+
+ @Override
+ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
+ RenderBlocks renderer) {
+
+ renderer.renderStandardBlock(block, x, y, z);
+ Tessellator tes = Tessellator.instance;
+ tes.setNormal(0F, 1F, 0F);
+ tes.setBrightness(15728880);
+ tes.setColorOpaque_F(0F, 1F, 1F);
+ IIcon side = BlockGodforgeGlass.Icon;
+
+ // South
+ if (world.getBlock(x, y, z + 1)
+ .getClass() != BlockGodforgeGlass.class) {
+ tes.addVertexWithUV(x, y, z + 0.999, side.getMinU(), side.getMaxV()); // 0.999 instead of 1 for fighting
+ // (textures overlapping)
+ tes.addVertexWithUV(x, y + 1, z + 0.999, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 1, z + 0.999, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y, z + 0.999, side.getMaxU(), side.getMaxV());
+ }
+ // East
+ if (world.getBlock(x + 1, y, z)
+ .getClass() != BlockGodforgeGlass.class) {
+ tes.addVertexWithUV(x + 0.999, y, z + 1, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x + 0.999, y + 1, z + 1, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 0.999, y + 1, z, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 0.999, y, z, side.getMaxU(), side.getMaxV());
+ }
+ // North
+ if (world.getBlock(x, y, z - 1)
+ .getClass() != BlockGodforgeGlass.class) {
+ tes.addVertexWithUV(x + 1, y, z + 0.001, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x + 1, y + 1, z + 0.001, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x, y + 1, z + 0.001, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x, y, z + 0.001, side.getMaxU(), side.getMaxV());
+ }
+ // West
+ if (world.getBlock(x - 1, y, z)
+ .getClass() != BlockGodforgeGlass.class) {
+ tes.addVertexWithUV(x + 0.001, y, z, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x + 0.001, y + 1, z, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 0.001, y + 1, z + 1, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 0.001, y, z + 1, side.getMaxU(), side.getMaxV());
+ }
+ // Top
+ if (world.getBlock(x, y + 1, z)
+ .getClass() != BlockGodforgeGlass.class) {
+ tes.addVertexWithUV(x, y + 0.999, z + 1, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x, y + 0.999, z, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 0.999, z, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 0.999, z + 1, side.getMaxU(), side.getMaxV());
+ }
+ // Bottom
+ if (world.getBlock(x, y - 1, z)
+ .getClass() != BlockGodforgeGlass.class) {
+ tes.addVertexWithUV(x, y + 0.001, z, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x, y + 0.001, z + 1, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 0.001, z + 1, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 0.001, z, side.getMaxU(), side.getMaxV());
+ }
+ return true;
+ }
+
+ @Override
+ public boolean shouldRender3DInInventory(int modelId) {
+ return true;
+ }
+
+ @Override
+ public int getRenderId() {
+ return BlockGodforgeGlass.renderID;
+ }
+}
diff --git a/src/main/java/tectech/thing/block/RenderQuantumGlass.java b/src/main/java/tectech/thing/block/RenderQuantumGlass.java
new file mode 100644
index 0000000000..43b212d44a
--- /dev/null
+++ b/src/main/java/tectech/thing/block/RenderQuantumGlass.java
@@ -0,0 +1,129 @@
+package tectech.thing.block;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
+
+/**
+ * Created by danie_000 on 19.12.2016.
+ */
+public final class RenderQuantumGlass implements ISimpleBlockRenderingHandler {
+
+ @Override
+ public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
+ GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+ Tessellator tessellator = Tessellator.instance;
+ GL11.glPushMatrix();
+ // Get icons from custom register (useful for renderers and fluids)
+ IIcon side = BlockQuantumGlass.stuff;
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, -1.0F, 0.0F);
+ renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, 0.0F, -1.0F);
+ renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, 0.0F, 1.0F);
+ renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(-1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(0.0F, 1.0F, 0.0F);
+ renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side);
+ tessellator.draw();
+ GL11.glTranslatef(0.5F, 0.5F, 0.5F);
+ GL11.glPopMatrix();
+ }
+
+ @Override
+ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
+ RenderBlocks renderer) {
+
+ renderer.renderStandardBlock(block, x, y, z);
+ Tessellator tes = Tessellator.instance;
+ GL11.glPushMatrix();
+ tes.setNormal(0F, 1F, 0F);
+ tes.setBrightness(15728880);
+ tes.setColorOpaque_F(0F, 1F, 1F);
+ IIcon side = BlockQuantumGlass.stuff;
+ GL11.glDisable(GL11.GL_CULL_FACE);
+
+ // South
+ if (world.getBlock(x, y, z + 1)
+ .getClass() != BlockQuantumGlass.class) {
+ tes.addVertexWithUV(x, y, z + 0.999, side.getMinU(), side.getMaxV()); // 0.999 instead of 1 for fighting
+ // (textures overlapping)
+ tes.addVertexWithUV(x, y + 1, z + 0.999, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 1, z + 0.999, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y, z + 0.999, side.getMaxU(), side.getMaxV());
+ }
+ // East
+ if (world.getBlock(x + 1, y, z)
+ .getClass() != BlockQuantumGlass.class) {
+ tes.addVertexWithUV(x + 0.999, y, z + 1, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x + 0.999, y + 1, z + 1, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 0.999, y + 1, z, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 0.999, y, z, side.getMaxU(), side.getMaxV());
+ }
+ // North
+ if (world.getBlock(x, y, z - 1)
+ .getClass() != BlockQuantumGlass.class) {
+ tes.addVertexWithUV(x + 1, y, z + 0.001, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x + 1, y + 1, z + 0.001, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x, y + 1, z + 0.001, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x, y, z + 0.001, side.getMaxU(), side.getMaxV());
+ }
+ // West
+ if (world.getBlock(x - 1, y, z)
+ .getClass() != BlockQuantumGlass.class) {
+ tes.addVertexWithUV(x + 0.001, y, z, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x + 0.001, y + 1, z, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 0.001, y + 1, z + 1, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 0.001, y, z + 1, side.getMaxU(), side.getMaxV());
+ }
+ // Top
+ if (world.getBlock(x, y + 1, z)
+ .getClass() != BlockQuantumGlass.class) {
+ tes.addVertexWithUV(x, y + 0.999, z + 1, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x, y + 0.999, z, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 0.999, z, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 0.999, z + 1, side.getMaxU(), side.getMaxV());
+ }
+ // Bottom
+ if (world.getBlock(x, y - 1, z)
+ .getClass() != BlockQuantumGlass.class) {
+ tes.addVertexWithUV(x, y + 0.001, z, side.getMinU(), side.getMaxV());
+ tes.addVertexWithUV(x, y + 0.001, z + 1, side.getMinU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 0.001, z + 1, side.getMaxU(), side.getMinV());
+ tes.addVertexWithUV(x + 1, y + 0.001, z, side.getMaxU(), side.getMaxV());
+ }
+ GL11.glPopMatrix();
+ GL11.glEnable(GL11.GL_CULL_FACE);
+ return true;
+ }
+
+ @Override
+ public boolean shouldRender3DInInventory(int modelId) {
+ return true;
+ }
+
+ @Override
+ public int getRenderId() {
+ return BlockQuantumGlass.renderID;
+ }
+}
diff --git a/src/main/java/tectech/thing/block/RenderQuantumStuff.java b/src/main/java/tectech/thing/block/RenderQuantumStuff.java
new file mode 100644
index 0000000000..98a0562b3e
--- /dev/null
+++ b/src/main/java/tectech/thing/block/RenderQuantumStuff.java
@@ -0,0 +1,103 @@
+package tectech.thing.block;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.Vec3;
+import net.minecraft.world.IBlockAccess;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
+import tectech.TecTech;
+
+/**
+ * Created by danie_000 on 19.12.2016.
+ */
+public final class RenderQuantumStuff implements ISimpleBlockRenderingHandler {
+
+ private static final Tessellator tes = Tessellator.instance;
+
+ @Override
+ public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
+ GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+ GL11.glPushMatrix();
+ // Get icons from custom register (useful for renderers and fluids)
+ IIcon side = BlockQuantumStuff.stuff;
+ tes.startDrawingQuads();
+ tes.setNormal(0.0F, -1.0F, 0.0F);
+ renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side);
+ tes.draw();
+ tes.startDrawingQuads();
+ tes.setNormal(0.0F, 0.0F, -1.0F);
+ renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side);
+ tes.draw();
+ tes.startDrawingQuads();
+ tes.setNormal(0.0F, 0.0F, 1.0F);
+ renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side);
+ tes.draw();
+ tes.startDrawingQuads();
+ tes.setNormal(-1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side);
+ tes.draw();
+ tes.startDrawingQuads();
+ tes.setNormal(1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side);
+ tes.draw();
+ tes.startDrawingQuads();
+ tes.setNormal(0.0F, 1.0F, 0.0F);
+ renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side);
+ tes.draw();
+ GL11.glTranslatef(0.5F, 0.5F, 0.5F);
+ GL11.glPopMatrix();
+ }
+
+ @Override
+ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
+ RenderBlocks renderer) {
+ // renderer.renderStandardBlock(block, x, y, z);
+ GL11.glPushMatrix();
+ tes.setNormal(0F, 1F, 0F);
+ tes.setBrightness(15728880);
+ IIcon side = BlockQuantumStuff.stuff;
+ for (int i = 0; i < 6; i++) {
+ float f = 1 - TecTech.RANDOM.nextFloat() / 4f, g = f - TecTech.RANDOM.nextFloat() / 4f,
+ r = g - TecTech.RANDOM.nextFloat() / 4f - 0.25f;
+ tes.setColorOpaque_F(r, g, f);
+ float rotX = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI,
+ rotY = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI,
+ rotZ = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI;
+ tesAbuse(x, y, z, -1.425f, -1.425f, .1f, rotX, rotY, rotZ, side.getMinU(), side.getMaxV());
+ tesAbuse(x, y, z, -1.425f, 1.425f, .1f, rotX, rotY, rotZ, side.getMinU(), side.getMinV());
+ tesAbuse(x, y, z, 1.425f, 1.425f, .1f, rotX, rotY, rotZ, side.getMaxU(), side.getMinV());
+ tesAbuse(x, y, z, 1.425f, -1.425f, .1f, rotX, rotY, rotZ, side.getMaxU(), side.getMaxV());
+
+ tesAbuse(x, y, z, 1.425f, -1.425f, -.1f, rotX, rotY, rotZ, side.getMaxU(), side.getMaxV());
+ tesAbuse(x, y, z, 1.425f, 1.425f, -.1f, rotX, rotY, rotZ, side.getMaxU(), side.getMinV());
+ tesAbuse(x, y, z, -1.425f, 1.425f, -.1f, rotX, rotY, rotZ, side.getMinU(), side.getMinV());
+ tesAbuse(x, y, z, -1.425f, -1.425f, -.1f, rotX, rotY, rotZ, side.getMinU(), side.getMaxV());
+ }
+ GL11.glPopMatrix();
+ return true;
+ }
+
+ private void tesAbuse(int x, int y, int z, float sx, float sy, float sz, float rotX, float rotY, float rotZ,
+ float sideU, float sideV) {
+ Vec3 pos = Vec3.createVectorHelper(sx, sy, sz);
+ pos.rotateAroundX(rotX);
+ pos.rotateAroundY(rotY);
+ pos.rotateAroundZ(rotZ);
+ tes.addVertexWithUV(pos.xCoord + x + .5f, pos.yCoord + y + .5f, pos.zCoord + z + .5f, sideU, sideV);
+ }
+
+ @Override
+ public boolean shouldRender3DInInventory(int modelId) {
+ return true;
+ }
+
+ @Override
+ public int getRenderId() {
+ return BlockQuantumStuff.renderID;
+ }
+}
diff --git a/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java b/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java
new file mode 100644
index 0000000000..4a46660d0d
--- /dev/null
+++ b/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java
@@ -0,0 +1,200 @@
+package tectech.thing.block;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.stream.IntStream;
+
+import net.minecraft.block.Block;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.NetworkManager;
+import net.minecraft.network.Packet;
+import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+
+import gtneioreplugin.plugin.block.ModBlocks;
+
+public class TileEntityEyeOfHarmony extends TileEntity {
+
+ private static final double EOH_STAR_FIELD_RADIUS = 13;
+
+ // Prevent culling when block is out of frame so model can remain active.
+ @Override
+ public AxisAlignedBB getRenderBoundingBox() {
+
+ // Assuming your block is at (x, y, z)
+ double x = this.xCoord;
+ double y = this.yCoord;
+ double z = this.zCoord;
+
+ // Create a bounding box that extends 'size' blocks in all directions from the block.
+ return AxisAlignedBB.getBoundingBox(
+ x - EOH_STAR_FIELD_RADIUS,
+ y - EOH_STAR_FIELD_RADIUS,
+ z - EOH_STAR_FIELD_RADIUS,
+ x + EOH_STAR_FIELD_RADIUS + 1,
+ y + EOH_STAR_FIELD_RADIUS + 1,
+ z + EOH_STAR_FIELD_RADIUS + 1);
+ }
+
+ public void setSize(float size) {
+ this.size = size;
+ }
+
+ public void setRotationSpeed(float rotationSpeed) {
+ this.rotationSpeed = rotationSpeed;
+ }
+
+ private float size = 10;
+ private float rotationSpeed = 10;
+
+ // Fun fact, these methods were entirely written by ChatGPT3... Take that as you will.
+ public static <T> ArrayList<T> selectNRandomElements(Collection<T> inputList, long n) {
+ ArrayList<T> randomElements = new ArrayList<>((int) n);
+ ArrayList<T> inputArray = new ArrayList<>(inputList);
+ Random rand = new Random();
+ IntStream.range(0, (int) n)
+ .forEach(i -> {
+ int randomIndex = rand.nextInt(inputArray.size());
+ randomElements.add(inputArray.get(randomIndex));
+ inputArray.remove(randomIndex);
+ });
+ return randomElements;
+ }
+
+ public static float generateRandomFloat(float a, float b) {
+ Random rand = new Random();
+ return rand.nextFloat() * (b - a) + a;
+ }
+
+ public long getTier() {
+ return tier;
+ }
+
+ public void setTier(long tier) {
+ this.tier = tier;
+ }
+
+ private long tier = 9;
+
+ public float getSize() {
+ return size;
+ }
+
+ public float getRotationSpeed() {
+ return rotationSpeed;
+ }
+
+ @Override
+ public void updateEntity() {
+ angle += 10.0f;
+ }
+
+ public static class OrbitingObject {
+
+ public OrbitingObject(Block block, float distance, float rotationSpeed, float orbitSpeed, float xAngle,
+ float zAngle, float scale) {
+ this.block = block;
+ this.distance = distance;
+ this.rotationSpeed = rotationSpeed;
+ this.orbitSpeed = orbitSpeed;
+ this.xAngle = xAngle;
+ this.zAngle = zAngle;
+ this.scale = scale;
+ }
+
+ public final Block block;
+ public final float distance;
+ public final float rotationSpeed;
+ public final float orbitSpeed;
+ public final float xAngle;
+ public final float zAngle;
+ public final float scale;
+ }
+
+ public ArrayList<OrbitingObject> getOrbitingObjects() {
+ return orbitingObjects;
+ }
+
+ private final ArrayList<OrbitingObject> orbitingObjects = new ArrayList<>();
+ private static final Set<String> BLACKLISTED_BLOCKS = Collections
+ .unmodifiableSet(new HashSet<>(Arrays.asList("Tf", "Ow", "ED", "EA", "VA")));
+ // Map of strings to blocks
+ private static final Map<String, Block> BLOCKS = new HashMap<>();
+
+ static {
+ // Initialize the map of blocks
+ ModBlocks.blocks.forEach((dimString, dimBlock) -> {
+ if (!BLACKLISTED_BLOCKS.contains(dimString)) {
+ BLOCKS.put(dimString, dimBlock);
+ }
+ });
+ }
+
+ private static final float MAX_ANGLE = 30;
+
+ // This must be set last.
+ public void generateImportantInfo() {
+
+ int index = 0;
+ for (Block block : selectNRandomElements(BLOCKS.values(), tier + 1)) {
+
+ float xAngle = generateRandomFloat(-MAX_ANGLE, MAX_ANGLE);
+ float zAngle = generateRandomFloat(-MAX_ANGLE, MAX_ANGLE);
+ index += 1.0;
+ float distance = index + generateRandomFloat(-0.2f, 0.2f);
+ float scale = generateRandomFloat(0.2f, 0.9f);
+ float rotationSpeed = generateRandomFloat(0.5f, 1.5f);
+ float orbitSpeed = generateRandomFloat(0.5f, 1.5f);
+ orbitingObjects.add(new OrbitingObject(block, distance, rotationSpeed, orbitSpeed, xAngle, zAngle, scale));
+ }
+ }
+
+ // Used to track the rotation of the star/planets.
+ public float angle;
+
+ private static final String EOH_NBT_TAG = "EOH:";
+ private static final String ROTATION_SPEED_NBT_TAG = EOH_NBT_TAG + "rotationSpeed";
+ private static final String SIZE_NBT_TAG = EOH_NBT_TAG + "size";
+ private static final String TIER_NBT_TAG = EOH_NBT_TAG + "tier";
+
+ @Override
+ public void writeToNBT(NBTTagCompound compound) {
+ super.writeToNBT(compound);
+
+ // Save other stats.
+ compound.setFloat(ROTATION_SPEED_NBT_TAG, rotationSpeed);
+ compound.setFloat(SIZE_NBT_TAG, size);
+ compound.setLong(TIER_NBT_TAG, tier);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound compound) {
+ super.readFromNBT(compound);
+
+ // Load other stats.
+ rotationSpeed = compound.getFloat(ROTATION_SPEED_NBT_TAG);
+ size = compound.getFloat(SIZE_NBT_TAG);
+ tier = compound.getLong(TIER_NBT_TAG);
+ }
+
+ @Override
+ public Packet getDescriptionPacket() {
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+ writeToNBT(nbttagcompound);
+ return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound);
+ }
+
+ @Override
+ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
+ readFromNBT(pkt.func_148857_g());
+ }
+
+}
diff --git a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java
new file mode 100644
index 0000000000..7c671b8a31
--- /dev/null
+++ b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java
@@ -0,0 +1,82 @@
+package tectech.thing.block;
+
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.NetworkManager;
+import net.minecraft.network.Packet;
+import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.AxisAlignedBB;
+
+public class TileEntityForgeOfGods extends TileEntity {
+
+ private float size = 10;
+ private float rotationSpeed = 10;
+
+ @Override
+ public AxisAlignedBB getRenderBoundingBox() {
+ return INFINITE_EXTENT_AABB;
+ }
+
+ @Override
+ public double getMaxRenderDistanceSquared() {
+ return 25600;
+ }
+
+ public void setRenderSize(float size) {
+ this.size = size;
+ }
+
+ public void setRenderRotationSpeed(float rotationSpeed) {
+ this.rotationSpeed = rotationSpeed;
+ }
+
+ public float getRenderSize() {
+ return size;
+ }
+
+ public float getRenderRotationSpeed() {
+ return rotationSpeed;
+ }
+
+ @Override
+ public void updateEntity() {
+ angle += 10.0f;
+ }
+
+ // Used to track the rotation of the star
+ public float angle;
+
+ private static final String FOG_NBT_TAG = "FOG:";
+ private static final String ROTATION_SPEED_NBT_TAG = FOG_NBT_TAG + "renderRotationSpeed";
+ private static final String SIZE_NBT_TAG = FOG_NBT_TAG + "renderSize";
+
+ @Override
+ public void writeToNBT(NBTTagCompound compound) {
+ super.writeToNBT(compound);
+
+ // Save stats
+ compound.setFloat(ROTATION_SPEED_NBT_TAG, rotationSpeed);
+ compound.setFloat(SIZE_NBT_TAG, size);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound compound) {
+ super.readFromNBT(compound);
+
+ // Load stats
+ rotationSpeed = compound.getFloat(ROTATION_SPEED_NBT_TAG);
+ size = compound.getFloat(SIZE_NBT_TAG);
+ }
+
+ @Override
+ public Packet getDescriptionPacket() {
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+ writeToNBT(nbttagcompound);
+ return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound);
+ }
+
+ @Override
+ public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
+ readFromNBT(pkt.func_148857_g());
+ }
+}