diff --git a/src/main/java/net/anvilcraft/thaummach/TMBlocks.java b/src/main/java/net/anvilcraft/thaummach/TMBlocks.java index b27a772..8774afd 100644 --- a/src/main/java/net/anvilcraft/thaummach/TMBlocks.java +++ b/src/main/java/net/anvilcraft/thaummach/TMBlocks.java @@ -3,20 +3,24 @@ package net.anvilcraft.thaummach; import cpw.mods.fml.common.registry.GameRegistry; import net.anvilcraft.thaummach.blocks.BlockApparatusFragile; import net.anvilcraft.thaummach.blocks.BlockApparatusMetal; +import net.anvilcraft.thaummach.blocks.BlockApparatusWood; import net.anvilcraft.thaummach.blocks.BlockSeal; import net.anvilcraft.thaummach.items.ItemBlockApparatusFragile; import net.anvilcraft.thaummach.items.ItemBlockApparatusMetal; +import net.anvilcraft.thaummach.items.ItemBlockApparatusWood; import net.anvilcraft.thaummach.items.ItemSeal; import net.minecraft.block.Block; public class TMBlocks { public static Block apparatusFragile; public static Block apparatusMetal; + public static Block apparatusWood; public static Block seal; public static void init() { apparatusFragile = new BlockApparatusFragile(); apparatusMetal = new BlockApparatusMetal(); + apparatusWood = new BlockApparatusWood(); seal = new BlockSeal(); GameRegistry.registerBlock( @@ -25,6 +29,9 @@ public class TMBlocks { GameRegistry.registerBlock( apparatusMetal, ItemBlockApparatusMetal.class, "apparatus_metal" ); + GameRegistry.registerBlock( + apparatusWood, ItemBlockApparatusWood.class, "apparatus_wood" + ); GameRegistry.registerBlock(seal, ItemSeal.class, "seal"); } } diff --git a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusFragile.java b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusFragile.java index 2055b62..13468be 100644 --- a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusFragile.java +++ b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusFragile.java @@ -396,6 +396,7 @@ public class BlockApparatusFragile extends BlockApparatus { return BlockApparatusRenderer.RI; } + // TODO: WTF //public int getBlockTextureFromSide(int i) { // return 15; //} diff --git a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusMetal.java b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusMetal.java index 1c7d836..f6f4b24 100644 --- a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusMetal.java +++ b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusMetal.java @@ -13,6 +13,7 @@ import net.anvilcraft.thaummach.render.apparatus.apparati.metal.BoreApparatusRen import net.anvilcraft.thaummach.render.apparatus.apparati.metal.CrucibleApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.CrystallizerApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.SoulBrazierApparatusRenderer; +import net.anvilcraft.thaummach.render.apparatus.apparati.metal.TankApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.VoidChestApparatusRenderer; import net.anvilcraft.thaummach.render.apparatus.apparati.metal.VoidInterfaceApparatusRenderer; import net.anvilcraft.thaummach.tiles.TileArcaneFurnace; @@ -70,6 +71,8 @@ public class BlockApparatusMetal extends BlockApparatus { public IIcon iconSoulCrucibleFace3; public IIcon iconSoulCrucibleTop; public IIcon iconSoulCrucibleTopInv; + public IIcon iconTankBottom; + public IIcon iconTankSide; public IIcon iconVoidChestBottom; public IIcon iconVoidChestSide; public IIcon iconVoidChestSideTransparent; @@ -114,6 +117,8 @@ public class BlockApparatusMetal extends BlockApparatus { this.iconSoulCrucibleFace3 = reg.registerIcon("thaummach:soul_crucible_face_3"); this.iconSoulCrucibleTop = reg.registerIcon("thaummach:soul_crucible_top"); this.iconSoulCrucibleTopInv = reg.registerIcon("thaummach:soul_crucible_top_inv"); + this.iconTankBottom = reg.registerIcon("thaummach:reinforced_tank_bottom"); + this.iconTankSide = reg.registerIcon("thaummach:reinforced_tank_side"); this.iconVoidChestBottom = reg.registerIcon("thaummach:void_chest_bottom"); this.iconVoidChestSide = reg.registerIcon("thaummach:void_chest_side"); this.iconVoidChestSideTransparent @@ -172,6 +177,9 @@ public class BlockApparatusMetal extends BlockApparatus { case SOUL_BRAZIER: return SoulBrazierApparatusRenderer.INSTANCE; + case TANK: + return TankApparatusRenderer.INSTANCE; + default: return null; } @@ -342,12 +350,9 @@ public class BlockApparatusMetal extends BlockApparatus { return side == 1 ? this.iconVoidInterfaceBottom : this.iconVoidInterfaceSide; } + } else if (meta == MetaVals.TANK) { + return side <= 1 ? this.iconTankBottom : this.iconTankSide; } - // else if (meta == 10) { - // return side <= 1 ? 78 : 79; - //} else { - // return super.getBlockTexture(iblockaccess, i, j, k, side); - //} return null; } @@ -796,18 +801,17 @@ public class BlockApparatusMetal extends BlockApparatus { isProvidingStrongPower(IBlockAccess iblockaccess, int i, int j, int k, int l) { MetaVals meta = MetaVals.get(iblockaccess.getBlockMetadata(i, j, k)); if (meta == MetaVals.EYES_CRUCIBLE || meta == MetaVals.THAUMIUM_CRUCIBLE) { - // TODO: crucibles - //TileCrucible data = (TileCrucible) iblockaccess.getTileEntity(i, j, k); - //if (l == 1) { - // TileEntity below = iblockaccess.getTileEntity(i, j - 1, k); - // if (below != null && below instanceof TileArcaneFurnace) { - // return 0; - // } - //} + TileCrucible data = (TileCrucible) iblockaccess.getTileEntity(i, j, k); + if (l == 1) { + TileEntity below = iblockaccess.getTileEntity(i, j - 1, k); + if (below != null && below instanceof TileArcaneFurnace) { + return 0; + } + } - //if (data.isPowering) { - // return 15; - //} + if (data.isPowering) { + return 15; + } } return 0; @@ -840,14 +844,11 @@ public class BlockApparatusMetal extends BlockApparatus { } if (meta.isCrucible()) { - // TODO: crucibles - //TileCrucible data = (TileCrucible) world.getTileEntity(i, j, k); - //data.bellows = bellows; + TileCrucible data = (TileCrucible) world.getTileEntity(i, j, k); + data.bellows = bellows; } else if (meta == MetaVals.ARCANE_FURNACE) { - // TODO: arcane furnace - //TileArcaneFurnace data - // = (TileArcaneFurnace) world.getTileEntity(i, j, k); - //data.bellows = bellows; + TileArcaneFurnace data = (TileArcaneFurnace) world.getTileEntity(i, j, k); + data.bellows = bellows; } else { if (meta == MetaVals.VOID_INTERFACE && (world.getBlock(i, j - 1, k) != this @@ -867,12 +868,11 @@ public class BlockApparatusMetal extends BlockApparatus { } else { TileEntity tsb; if (md == MetaVals.ARCANE_FURNACE) { - // TODO: arcane furnace - //tsb = iba.getTileEntity(i, j, k); - //return tsb != null && tsb instanceof TileArcaneFurnace - // && ((TileArcaneFurnace) tsb).isWorking() - // ? 13 - // : 0; + tsb = iba.getTileEntity(i, j, k); + return tsb != null && tsb instanceof TileArcaneFurnace + && ((TileArcaneFurnace) tsb).isWorking() + ? 13 + : 0; } else if (md == MetaVals.SOUL_BRAZIER) { tsb = iba.getTileEntity(i, j, k); return tsb != null && tsb instanceof TileSoulBrazier @@ -883,65 +883,8 @@ public class BlockApparatusMetal extends BlockApparatus { return super.getLightValue(iba, i, j, k); } } - return 0; } - //@Override - //public boolean renderAppMetalBlock( - // World w, RenderBlocks rb, int i, int j, int k, Block block, boolean inv, int md - //) { - // if (md == -9) { - // md = w.getBlockMetadata(i, j, k); - // } - - // switch (md) { - // case 0: - // case 1: - // case 2: - // case 3: - // ThaumCraftRenderer.renderBlockCrucible(w, rb, i, j, k, block, md, inv); - // return true; - // case 4: - // ThaumCraftRenderer.renderBlockArcaneFurnace( - // w, rb, i, j, k, block, md, inv - // ); - // return true; - // case 5: - // ThaumCraftRenderer.renderBlockGenerator(w, rb, i, j, k, block, md, inv); - // return true; - // case 6: - // ThaumCraftRenderer.renderBlockCrystalizer(w, rb, i, j, k, block, md, - // inv); return true; - // case 7: - // ThaumCraftRenderer.renderBlockBore(w, rb, i, j, k, block, md, inv); - // return true; - // case 8: - // block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - // if (block.getRenderBlockPass() == 0 && !inv) { - // rb.renderStandardBlock(block, i, j, k); - // } else if (inv) { - // ThaumCraftRenderer.DrawFaces( - // rb, block, 97, 104, 103, 103, 103, 103, false - // ); - // } - - // return true; - // case 9: - // ThaumCraftRenderer.renderBlockVoidInterface( - // w, rb, i, j, k, block, md, inv - // ); - // return true; - // case 10: - // ThaumCraftRenderer.renderBlockTank(w, rb, i, j, k, block, md, inv); - // return true; - // case 11: - // ThaumCraftRenderer.renderBlockSoulBrazier(w, rb, i, j, k, block, md, - // inv); return true; - // default: - // return false; - // } - //} - public static enum MetaVals { NORMAL_CRUCIBLE, // 0 EYES_CRUCIBLE, // 1 diff --git a/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusWood.java b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusWood.java new file mode 100644 index 0000000..f8bd90a --- /dev/null +++ b/src/main/java/net/anvilcraft/thaummach/blocks/BlockApparatusWood.java @@ -0,0 +1,326 @@ +package net.anvilcraft.thaummach.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.anvilcraft.thaummach.particles.FXWisp; +import net.anvilcraft.thaummach.render.BlockApparatusRenderer; +import net.anvilcraft.thaummach.render.apparatus.IApparatusRenderer; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockApparatusWood extends BlockApparatus { + public BlockApparatusWood() { + super(Material.wood); + this.setHardness(2.0F); + this.setResistance(10.0F); + this.setStepSound(Block.soundTypeWood); + this.setBlockName("tcbappwood"); + } + + @Override + public IApparatusRenderer getApparatusRenderer(int meta) { + switch (MetaVals.get(meta)) { + default: + return null; + } + } + + @Override + public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List itemList) { + itemList.add(new ItemStack(this, 1, 0)); + itemList.add(new ItemStack(this, 1, 1)); + itemList.add(new ItemStack(this, 1, 2)); + itemList.add(new ItemStack(this, 1, 3)); + itemList.add(new ItemStack(this, 1, 4)); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + MetaVals md = MetaVals.get(meta); + + switch (md) { + //case CONDENSER: + // return new TileCondenser(); + // + //case DUPLICATOR: + // return new TileDuplicator(); + // + //case REPAIRER: + // return new TileRepairer(); + + default: + return null; + } + } + + @Override + public void + setBlockBoundsBasedOnState(IBlockAccess iblockaccess, int i, int j, int k) { + int md = iblockaccess.getBlockMetadata(i, j, k); + if (md == 0) { + float w3 = 0.1875F; + this.setBlockBounds(w3, 0.0F, w3, 1.0F - w3, 1.0F, 1.0F - w3); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + } + + @Override + public AxisAlignedBB getSelectedBoundingBoxFromPool(World w, int i, int j, int k) { + int md = w.getBlockMetadata(i, j, k); + if (md == 0) { + float w3 = 0.1875F; + AxisAlignedBB.getBoundingBox( + (double) w3, + 0.0, + (double) w3, + (double) (1.0F - w3), + 1.0, + (double) (1.0F - w3) + ); + } else if (md == 10) { + AxisAlignedBB.getBoundingBox(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + } + + return super.getSelectedBoundingBoxFromPool(w, i, j, k); + } + + @Override + public void onBlockPlacedBy( + World world, int i, int j, int k, EntityLivingBase entityliving, ItemStack stack + ) { + MetaVals md = MetaVals.get(world.getBlockMetadata(i, j, k)); + int l = MathHelper.floor_double( + (double) (entityliving.rotationYaw * 4.0F / 360.0F) + 0.5 + ) + & 3; + if (md == MetaVals.DUPLICATOR) { + // TODO: duplicator + //TileDuplicator td = (TileDuplicator) world.getBlockTileEntity(i, j, k); + //td.orientation = l; + } + } + + @Override + public void updateTick(World world, int i, int j, int k, Random random) { + if (!world.isRemote) { + MetaVals l = MetaVals.get(world.getBlockMetadata(i, j, k)); + if (l == MetaVals.DAWN_TOTEM || l == MetaVals.DUSK_TOTEM) { + // TODO: totems + //int auraX = i >> 4; + //int auraZ = k >> 4; + //SIAuraChunk ac = (SIAuraChunk) mod_ThaumCraft.AuraHM.get( + // Arrays.asList(auraX, auraZ, ThaumCraftCore.getDimension(world)) + //); + //if (ac != null) { + // if (l == 3) { + // ac.goodVibes = (short) (ac.goodVibes + 1 + random.nextInt(2)); + // ThaumCraftCore.decreaseTaintedPlantsInArea(world, i, j, k, 2); + // } else { + // ac.badVibes = (short) (ac.badVibes + 1 + random.nextInt(3)); + // ThaumCraftCore.increaseTaintedPlants(world, i, j, k); + // } + //} + } + } + } + + @Override + public void breakBlock(World world, int i, int j, int k, Block block, int meta_) { + // TODO: not sure if param 6 is meta + MetaVals meta = MetaVals.get(meta_); + if (meta == MetaVals.CONDENSER) { + // TODO: condenser + //TileCondenser tileentityCondenser + // = (TileCondenser) world.getBlockTileEntity(i, j, k); + //if (tileentityCondenser != null && tileentityCondenser.degredation > 0.0F) { + // int at = (int + // ) (25.0F * (4550.0F - tileentityCondenser.degredation) / 4550.0F); + // int auraX = i >> 4; + // int auraZ = k >> 4; + // SIAuraChunk ac = (SIAuraChunk) mod_ThaumCraft.AuraHM.get( + // Arrays.asList(auraX, auraZ, ThaumCraftCore.getDimension(world)) + // ); + // if (ac != null) { + // ac.taint = (short) (ac.taint + at); + // world.playSoundEffect( + // (double) i, + // (double) j, + // (double) k, + // "random.fizz", + // 0.2F, + // 2.0F + world.rand.nextFloat() * 0.4F + // ); + + // for (int a = 0; a < at; ++a) { + // world.spawnParticle( + // "largesmoke", + // (double) ((float) i + world.rand.nextFloat()), + // (double) ((float) j + world.rand.nextFloat()), + // (double) ((float) k + world.rand.nextFloat()), + // 0.0, + // 0.0, + // 0.0 + // ); + // } + // } + //} + } + + super.breakBlock(world, i, j, k, block, meta_); + } + + @Override + public void onNeighborBlockChange(World world, int i, int j, int k, Block l) { + super.onNeighborBlockChange(world, i, j, k, l); + MetaVals meta = MetaVals.get(world.getBlockMetadata(i, j, k)); + if (meta == MetaVals.CONDENSER) { + if (!world.isAirBlock(i, j + 1, k)) { + this.dropBlockAsItem(world, i, j, k, meta.ordinal(), 0); + world.setBlockToAir(i, j, k); + } + } + } + + @Override + public int getRenderType() { + return BlockApparatusRenderer.RI; + } + + // TODO: WTF + //@Override + //public int getBlockTextureFromSide(int i) { + // return 15; + //} + + // TODO: textures + //@Override + //public int getBlockTextureFromSideAndMetadata(int i, int j) { + // switch (j) { + // case 3: + // return 127; + // case 4: + // return 143; + // default: + // return super.getBlockTextureFromSideAndMetadata(i, j); + // } + //} + + //@Override + //public int getBlockTexture(IBlockAccess iblockaccess, int i, int j, int k, int l) { + // int md = iblockaccess.getBlockMetadata(i, j, k); + // if (md == 0) { + // return l <= 1 ? 113 : 112; + // } else if (md == 1) { + // if (l <= 1) { + // return 70; + // } else { + // TileEntity te = iblockaccess.getBlockTileEntity(i, j, k); + // if (te != null && te instanceof TileDuplicator) { + // if (((TileDuplicator) te).orientation == 0 && l == 2) { + // return 71; + // } + + // if (((TileDuplicator) te).orientation == 1 && l == 5) { + // return 71; + // } + + // if (((TileDuplicator) te).orientation == 2 && l == 3) { + // return 71; + // } + + // if (((TileDuplicator) te).orientation == 3 && l == 4) { + // return 71; + // } + // } + + // return 72; + // } + // } else if (md == 2) { + // return l <= 1 ? 86 : 87; + // } else if (md == 3) { + // return l <= 1 ? 127 : 121 + Math.abs((i + j + k) % 6); + // } else if (md == 4) { + // return l <= 1 ? 143 : 137 + Math.abs((i + j + k) % 6); + // } else { + // return 15; + // } + //} + + @Override + public int damageDropped(int i) { + return i; + } + + @Override + public int getLightValue(IBlockAccess iba, int i, int j, int k) { + MetaVals md = MetaVals.get(iba.getBlockMetadata(i, j, k)); + return md == MetaVals.DUPLICATOR ? 5 : super.getLightValue(iba, i, j, k); + } + + @SideOnly(Side.CLIENT) + @Override + public void randomDisplayTick(World w, int i, int j, int k, Random random) { + MetaVals md = MetaVals.get(w.getBlockMetadata(i, j, k)); + if (random.nextInt(10) == 0) { + switch (md) { + case DAWN_TOTEM: + Minecraft.getMinecraft().effectRenderer.addEffect(new FXWisp( + w, + i + random.nextFloat(), + j + random.nextFloat(), + k + random.nextFloat(), + 0.5f, + 0 + )); + break; + + case DUSK_TOTEM: + Minecraft.getMinecraft().effectRenderer.addEffect(new FXWisp( + w, + i + random.nextFloat(), + j + random.nextFloat(), + k + random.nextFloat(), + 0.5f, + 5 + )); + break; + + default: + break; + } + } + } + + public static enum MetaVals { + CONDENSER, // 0 + DUPLICATOR, // 1 + REPAIRER, // 2 + DAWN_TOTEM, // 3 + DUSK_TOTEM; // 4 + + public static MetaVals get(int meta) { + if (meta >= 0 && meta < MetaVals.values().length) { + return MetaVals.values()[meta]; + } + + return null; + } + } +} diff --git a/src/main/java/net/anvilcraft/thaummach/items/ItemBlockApparatusWood.java b/src/main/java/net/anvilcraft/thaummach/items/ItemBlockApparatusWood.java new file mode 100644 index 0000000..4052e12 --- /dev/null +++ b/src/main/java/net/anvilcraft/thaummach/items/ItemBlockApparatusWood.java @@ -0,0 +1,23 @@ +package net.anvilcraft.thaummach.items; + +import net.anvilcraft.thaummach.blocks.BlockApparatusWood.MetaVals; +import net.minecraft.block.Block; + +public class ItemBlockApparatusWood extends ItemBlockApparatus { + public ItemBlockApparatusWood(Block block) { + super(block); + } + + @Override + public String getTypeString() { + return "wood"; + } + + @Override + public String getNameExtension(int meta_) { + MetaVals meta = MetaVals.get(meta_); + if (meta == null) + return null; + return meta.toString().toLowerCase(); + } +} diff --git a/src/main/java/net/anvilcraft/thaummach/particles/FXWisp.java b/src/main/java/net/anvilcraft/thaummach/particles/FXWisp.java index 8146e00..689e3cc 100644 --- a/src/main/java/net/anvilcraft/thaummach/particles/FXWisp.java +++ b/src/main/java/net/anvilcraft/thaummach/particles/FXWisp.java @@ -183,7 +183,7 @@ public class FXWisp extends EntityFX { GL11.glDepthMask(true); GL11.glPopMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture( - new ResourceLocation("textures/particles/particles.png") + new ResourceLocation("textures/particle/particles.png") ); tessellator.startDrawingQuads(); } diff --git a/src/main/java/net/anvilcraft/thaummach/render/apparatus/AbstractTankApparatusRenderer.java b/src/main/java/net/anvilcraft/thaummach/render/apparatus/AbstractTankApparatusRenderer.java new file mode 100644 index 0000000..450db8f --- /dev/null +++ b/src/main/java/net/anvilcraft/thaummach/render/apparatus/AbstractTankApparatusRenderer.java @@ -0,0 +1,135 @@ +package net.anvilcraft.thaummach.render.apparatus; + +import dev.tilera.auracore.api.HelperLocation; +import net.anvilcraft.thaummach.blocks.BlockApparatus; +import net.anvilcraft.thaummach.tiles.TileConduitTank; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +public abstract class AbstractTankApparatusRenderer implements IApparatusRenderer { + public abstract IIcon getBottomIcon(Apparatus block); + public abstract IIcon getSideIcon(Apparatus block); + + @Override + public void renderApparatus( + IBlockAccess w, + RenderBlocks rb, + int i, + int j, + int k, + Block block_, + int md, + boolean inv + ) { + BlockApparatus block = (BlockApparatus) block_; + float w1; + float w2; + if (block.getRenderBlockPass() == 0 || inv) { + w1 = 0.0625F; + w2 = 0.125F; + IIcon t1 = this.getBottomIcon((Apparatus)block); + IIcon t2 = this.getSideIcon((Apparatus)block); + + rb.setRenderBounds(w1, 0.0F, w1, 1.0F - w1, 1.0F, 1.0F - w1); + if (inv) { + ApparatusRenderingHelper.drawFaces( + rb, block, t1, t1, t2, t2, t2, t2, false + ); + } else { + rb.renderStandardBlock(block, i, j, k); + } + + if (!inv) { + rb.overrideBlockTexture = this.getBottomIcon((Apparatus)block); + TileConduitTank tc = (TileConduitTank) w.getTileEntity(i, j, k); + HelperLocation loc = new HelperLocation(tc); + loc.facing = ForgeDirection.WEST; + TileEntity te = loc.getConnectableTile(w); + if (te != null && tc.getConnectable(loc.facing) + && !(te instanceof TileConduitTank)) { + rb.setRenderBounds( + 0.0F, 0.5F - w2, 0.5F - w2, w1, 0.5F + w2, 0.5F + w2 + ); + rb.renderStandardBlock(block, i, j, k); + } + + loc = new HelperLocation(tc); + loc.facing = ForgeDirection.EAST; + te = loc.getConnectableTile(w); + if (te != null && tc.getConnectable(loc.facing) + && !(te instanceof TileConduitTank)) { + rb.setRenderBounds( + 1.0F - w1, 0.5F - w2, 0.5F - w2, 1.0F, 0.5F + w2, 0.5F + w2 + ); + rb.renderStandardBlock(block, i, j, k); + } + + loc = new HelperLocation(tc); + loc.facing = ForgeDirection.NORTH; + te = loc.getConnectableTile(w); + if (te != null && tc.getConnectable(loc.facing) + && !(te instanceof TileConduitTank)) { + rb.setRenderBounds( + 0.5F - w2, 0.5F - w2, 0.0F, 0.5F + w2, 0.5F + w2, w1 + ); + rb.renderStandardBlock(block, i, j, k); + } + + loc = new HelperLocation(tc); + loc.facing = ForgeDirection.SOUTH; + te = loc.getConnectableTile(w); + if (te != null && tc.getConnectable(loc.facing) + && !(te instanceof TileConduitTank)) { + rb.setRenderBounds( + 0.5F - w2, 0.5F - w2, 1.0F - w1, 0.5F + w2, 0.5F + w2, 1.0F + ); + rb.renderStandardBlock(block, i, j, k); + } + } + } + + rb.overrideBlockTexture = null; + + if (block.getRenderBlockPass() == 0 && !inv) { + w1 = 0.003F; + w2 = 0.0625F; + TileConduitTank tc = (TileConduitTank) w.getTileEntity(i, j, k); + if (tc != null && tc.pureVis + tc.taintedVis > 0.1F) { + Tessellator tessellator = Tessellator.instance; + float hfill = (1.0F - w1 * 2.0F) + * ((tc.pureVis + tc.taintedVis) / tc.getMaxVis()); + float b = Math.min(1.0F, tc.pureVis / (tc.taintedVis + tc.pureVis)); + rb.setRenderBounds( + w1 + w2, w1, w1 + w2, 1.0F - w1 - w2, w1 + hfill, 1.0F - w1 - w2 + ); + tessellator.setBrightness(20 + (int) (b * 210.0F)); + tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F); + rb.renderFaceZPos( + block, (double) i, (double) j, (double) k, block.iconTcubeanim + ); + rb.renderFaceZNeg( + block, (double) i, (double) j, (double) k, block.iconTcubeanim + ); + rb.renderFaceXNeg( + block, (double) i, (double) j, (double) k, block.iconTcubeanim + ); + rb.renderFaceXPos( + block, (double) i, (double) j, (double) k, block.iconTcubeanim + ); + rb.renderFaceYPos( + block, (double) i, (double) j, (double) k, block.iconTcubeanim + ); + rb.renderFaceYNeg( + block, (double) i, (double) j, (double) k, block.iconTcubeanim + ); + } + } + + rb.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } +} diff --git a/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/fragile/ConduitTankApparatusRenderer.java b/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/fragile/ConduitTankApparatusRenderer.java index b801951..5df7c94 100644 --- a/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/fragile/ConduitTankApparatusRenderer.java +++ b/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/fragile/ConduitTankApparatusRenderer.java @@ -1,142 +1,21 @@ package net.anvilcraft.thaummach.render.apparatus.apparati.fragile; -import dev.tilera.auracore.api.HelperLocation; import net.anvilcraft.thaummach.blocks.BlockApparatusFragile; -import net.anvilcraft.thaummach.render.apparatus.ApparatusRenderingHelper; -import net.anvilcraft.thaummach.render.apparatus.IApparatusRenderer; -import net.anvilcraft.thaummach.tiles.TileConduitTank; -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.tileentity.TileEntity; +import net.anvilcraft.thaummach.render.apparatus.AbstractTankApparatusRenderer; import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; -public class ConduitTankApparatusRenderer implements IApparatusRenderer { +public class ConduitTankApparatusRenderer + extends AbstractTankApparatusRenderer { public static final ConduitTankApparatusRenderer INSTANCE = new ConduitTankApparatusRenderer(); @Override - public void renderApparatus( - IBlockAccess w, - RenderBlocks rb, - int i, - int j, - int k, - Block block_, - int md, - boolean inv - ) { - BlockApparatusFragile block = (BlockApparatusFragile) block_; - float w1; - float w2; - if (block.getRenderBlockPass() == 0 || inv) { - w1 = 0.0625F; - w2 = 0.125F; - IIcon t1 = block.iconTankBottom; - IIcon t2 = block.iconTankSide; - // TODO: WTF - //if (md != 3) { - // t1 = 78; - // t2 = 79; - //} + public IIcon getBottomIcon(BlockApparatusFragile block) { + return block.iconTankBottom; + } - rb.setRenderBounds(w1, 0.0F, w1, 1.0F - w1, 1.0F, 1.0F - w1); - if (inv) { - ApparatusRenderingHelper.drawFaces( - rb, block, t1, t1, t2, t2, t2, t2, false - ); - } else { - rb.renderStandardBlock(block, i, j, k); - } - - if (!inv) { - rb.overrideBlockTexture = block.iconTankBottom; - TileConduitTank tc = (TileConduitTank) w.getTileEntity(i, j, k); - HelperLocation loc = new HelperLocation(tc); - loc.facing = ForgeDirection.WEST; - TileEntity te = loc.getConnectableTile(w); - if (te != null && tc.getConnectable(loc.facing) - && !(te instanceof TileConduitTank)) { - rb.setRenderBounds( - 0.0F, 0.5F - w2, 0.5F - w2, w1, 0.5F + w2, 0.5F + w2 - ); - rb.renderStandardBlock(block, i, j, k); - } - - loc = new HelperLocation(tc); - loc.facing = ForgeDirection.EAST; - te = loc.getConnectableTile(w); - if (te != null && tc.getConnectable(loc.facing) - && !(te instanceof TileConduitTank)) { - rb.setRenderBounds( - 1.0F - w1, 0.5F - w2, 0.5F - w2, 1.0F, 0.5F + w2, 0.5F + w2 - ); - rb.renderStandardBlock(block, i, j, k); - } - - loc = new HelperLocation(tc); - loc.facing = ForgeDirection.NORTH; - te = loc.getConnectableTile(w); - if (te != null && tc.getConnectable(loc.facing) - && !(te instanceof TileConduitTank)) { - rb.setRenderBounds( - 0.5F - w2, 0.5F - w2, 0.0F, 0.5F + w2, 0.5F + w2, w1 - ); - rb.renderStandardBlock(block, i, j, k); - } - - loc = new HelperLocation(tc); - loc.facing = ForgeDirection.SOUTH; - te = loc.getConnectableTile(w); - if (te != null && tc.getConnectable(loc.facing) - && !(te instanceof TileConduitTank)) { - rb.setRenderBounds( - 0.5F - w2, 0.5F - w2, 1.0F - w1, 0.5F + w2, 0.5F + w2, 1.0F - ); - rb.renderStandardBlock(block, i, j, k); - } - } - } - - rb.overrideBlockTexture = null; - - if (block.getRenderBlockPass() == 0 && !inv) { - w1 = 0.003F; - w2 = 0.0625F; - TileConduitTank tc = (TileConduitTank) w.getTileEntity(i, j, k); - if (tc != null && tc.pureVis + tc.taintedVis > 0.1F) { - Tessellator tessellator = Tessellator.instance; - float hfill = (1.0F - w1 * 2.0F) - * ((tc.pureVis + tc.taintedVis) / tc.getMaxVis()); - float b = Math.min(1.0F, tc.pureVis / (tc.taintedVis + tc.pureVis)); - rb.setRenderBounds( - w1 + w2, w1, w1 + w2, 1.0F - w1 - w2, w1 + hfill, 1.0F - w1 - w2 - ); - tessellator.setBrightness(20 + (int) (b * 210.0F)); - tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F); - rb.renderFaceZPos( - block, (double) i, (double) j, (double) k, block.iconTcubeanim - ); - rb.renderFaceZNeg( - block, (double) i, (double) j, (double) k, block.iconTcubeanim - ); - rb.renderFaceXNeg( - block, (double) i, (double) j, (double) k, block.iconTcubeanim - ); - rb.renderFaceXPos( - block, (double) i, (double) j, (double) k, block.iconTcubeanim - ); - rb.renderFaceYPos( - block, (double) i, (double) j, (double) k, block.iconTcubeanim - ); - rb.renderFaceYNeg( - block, (double) i, (double) j, (double) k, block.iconTcubeanim - ); - } - } - - rb.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + @Override + public IIcon getSideIcon(BlockApparatusFragile block) { + return block.iconTankSide; } } diff --git a/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/metal/TankApparatusRenderer.java b/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/metal/TankApparatusRenderer.java new file mode 100644 index 0000000..d8ff169 --- /dev/null +++ b/src/main/java/net/anvilcraft/thaummach/render/apparatus/apparati/metal/TankApparatusRenderer.java @@ -0,0 +1,20 @@ +package net.anvilcraft.thaummach.render.apparatus.apparati.metal; + +import net.anvilcraft.thaummach.blocks.BlockApparatusMetal; +import net.anvilcraft.thaummach.render.apparatus.AbstractTankApparatusRenderer; +import net.minecraft.util.IIcon; + +public class TankApparatusRenderer + extends AbstractTankApparatusRenderer { + public static TankApparatusRenderer INSTANCE = new TankApparatusRenderer(); + + @Override + public IIcon getBottomIcon(BlockApparatusMetal block) { + return block.iconTankBottom; + } + + @Override + public IIcon getSideIcon(BlockApparatusMetal block) { + return block.iconTankSide; + } +} diff --git a/src/main/java/net/anvilcraft/thaummach/tiles/TileConduitTank.java b/src/main/java/net/anvilcraft/thaummach/tiles/TileConduitTank.java index efdad28..19e7489 100644 --- a/src/main/java/net/anvilcraft/thaummach/tiles/TileConduitTank.java +++ b/src/main/java/net/anvilcraft/thaummach/tiles/TileConduitTank.java @@ -3,6 +3,7 @@ package net.anvilcraft.thaummach.tiles; import dev.tilera.auracore.api.HelperLocation; import dev.tilera.auracore.api.machine.IConnection; import net.anvilcraft.thaummach.AuraUtils; +import net.anvilcraft.thaummach.blocks.BlockApparatusFragile; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; @@ -41,12 +42,14 @@ public class TileConduitTank extends TileEntity implements IConnection { this.wait = 10; this.calculateSuction(); int breakchance = 999; - if (this.getBlockMetadata() != 3) { + if (this.getBlockMetadata() + != BlockApparatusFragile.MetaVals.CONDUIT_TANK.ordinal()) { breakchance = 3333; } if (this.taintedVis > this.getMaxVis() * 0.9F) { - if (this.getBlockMetadata() == 3 + if (this.getBlockMetadata() + == BlockApparatusFragile.MetaVals.CONDUIT_TANK.ordinal() && super.worldObj.rand.nextInt(breakchance) == 123) { AuraUtils.taintExplosion( super.worldObj, super.xCoord, super.yCoord, super.zCoord @@ -269,7 +272,10 @@ public class TileConduitTank extends TileEntity implements IConnection { } public float getMaxVis() { - return this.getBlockMetadata() != 3 ? 1000.0F : 500.0F; + return this.getBlockMetadata() + != BlockApparatusFragile.MetaVals.CONDUIT_TANK.ordinal() + ? 1000.0F + : 500.0F; } public float[] subtractVis(float amount) { diff --git a/src/main/java/net/anvilcraft/thaummach/tiles/TileSoulBrazier.java b/src/main/java/net/anvilcraft/thaummach/tiles/TileSoulBrazier.java index 83c9be4..36ffe45 100644 --- a/src/main/java/net/anvilcraft/thaummach/tiles/TileSoulBrazier.java +++ b/src/main/java/net/anvilcraft/thaummach/tiles/TileSoulBrazier.java @@ -10,6 +10,9 @@ import net.minecraft.init.Blocks; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; 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.world.EnumSkyBlock; @@ -37,6 +40,9 @@ public class TileSoulBrazier extends TileEntity implements ISidedInventory { @Override public void updateEntity() { + if (this.worldObj.isRemote) + return; + if (this.lightingDelay <= 0 && this.isWorking() != this.previousLight) { super.worldObj.markBlockForUpdate(super.xCoord, super.yCoord, super.zCoord); super.worldObj.updateLightByType( @@ -283,4 +289,30 @@ public class TileSoulBrazier extends TileEntity implements ISidedInventory { public boolean isUseableByPlayer(EntityPlayer p_70300_1_) { return true; } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + + nbt.setInteger("delay", this.delay); + nbt.setInteger("burnTime", this.burnTime); + nbt.setBoolean("previousLight", this.previousLight); + nbt.setInteger("lightingDelay", this.lightingDelay); + + return new S35PacketUpdateTileEntity( + this.xCoord, this.yCoord, this.zCoord, this.getBlockMetadata(), nbt + ); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + NBTTagCompound nbt = pkt.func_148857_g(); + this.delay = nbt.getInteger("delay"); + this.burnTime = nbt.getInteger("burnTime"); + this.previousLight = nbt.getBoolean("previousLight"); + this.lightingDelay = nbt.getInteger("lightingDelay"); + + // schedule light update + this.worldObj.func_147451_t(this.xCoord, this.yCoord, this.zCoord); + } } diff --git a/src/main/resources/assets/thaummach/lang/en_US.lang b/src/main/resources/assets/thaummach/lang/en_US.lang index 1aeeeaf..9eafe51 100644 --- a/src/main/resources/assets/thaummach/lang/en_US.lang +++ b/src/main/resources/assets/thaummach/lang/en_US.lang @@ -25,6 +25,12 @@ tile.thaummach:apparatus_metal_void_interface.name=Void Interface tile.thaummach:apparatus_metal_tank.name=Thaumium Reinforced Tank tile.thaummach:apparatus_metal_soul_brazier.name=Soul Brazier +tile.thaummach:apparatus_wood_condenser.name=Vis Condenser +tile.thaummach:apparatus_wood_duplicator.name=Thaumic Duplicator +tile.thaummach:apparatus_wood_repairer.name=Thaumic Restorer +tile.thaummach:apparatus_wood_dawn_totem.name=Dawn Totem +tile.thaummach:apparatus_wood_dusk_totem.name=Dusk Totem + # ---- ITEMS ---- item.thaummach:focus_0.name=Arcane Focus diff --git a/src/main/resources/assets/thaummach/textures/blocks/condenser_part_1.png b/src/main/resources/assets/thaummach/textures/blocks/condenser_part_1.png new file mode 100644 index 0000000..e05003f Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/condenser_part_1.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/condenser_part_2.png b/src/main/resources/assets/thaummach/textures/blocks/condenser_part_2.png new file mode 100644 index 0000000..540e622 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/condenser_part_2.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/condenser_side.png b/src/main/resources/assets/thaummach/textures/blocks/condenser_side.png new file mode 100644 index 0000000..3a6cf59 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/condenser_side.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/condenser_top.png b/src/main/resources/assets/thaummach/textures/blocks/condenser_top.png new file mode 100644 index 0000000..6a87e5b Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/condenser_top.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_bottom.png b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_bottom.png new file mode 100644 index 0000000..4b351b4 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_bottom.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_1.png b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_1.png new file mode 100644 index 0000000..1e334ee Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_1.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_2.png b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_2.png new file mode 100644 index 0000000..42e88fa Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_2.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_3.png b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_3.png new file mode 100644 index 0000000..0f381fc Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_3.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_4.png b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_4.png new file mode 100644 index 0000000..498fe32 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_4.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_5.png b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_5.png new file mode 100644 index 0000000..4b100ff Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_5.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_6.png b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_6.png new file mode 100644 index 0000000..4a5135f Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dawn_totem_side_6.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/duplicator_bottom.png b/src/main/resources/assets/thaummach/textures/blocks/duplicator_bottom.png new file mode 100644 index 0000000..2bd2a83 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/duplicator_bottom.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/duplicator_inside.png b/src/main/resources/assets/thaummach/textures/blocks/duplicator_inside.png new file mode 100644 index 0000000..b980edc Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/duplicator_inside.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/duplicator_side.png b/src/main/resources/assets/thaummach/textures/blocks/duplicator_side.png new file mode 100644 index 0000000..64b0837 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/duplicator_side.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/duplicator_top.png b/src/main/resources/assets/thaummach/textures/blocks/duplicator_top.png new file mode 100644 index 0000000..e173b73 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/duplicator_top.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_bottom.png b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_bottom.png new file mode 100644 index 0000000..2159a0e Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_bottom.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_1.png b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_1.png new file mode 100644 index 0000000..d37988d Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_1.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_2.png b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_2.png new file mode 100644 index 0000000..a6f3580 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_2.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_3.png b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_3.png new file mode 100644 index 0000000..d2aea6f Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_3.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_4.png b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_4.png new file mode 100644 index 0000000..1bef5b6 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_4.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_5.png b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_5.png new file mode 100644 index 0000000..18a674b Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_5.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_6.png b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_6.png new file mode 100644 index 0000000..4401089 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/dusk_totem_side_6.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/reinforced_tank_bottom.png b/src/main/resources/assets/thaummach/textures/blocks/reinforced_tank_bottom.png new file mode 100644 index 0000000..4ef7227 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/reinforced_tank_bottom.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/reinforced_tank_side.png b/src/main/resources/assets/thaummach/textures/blocks/reinforced_tank_side.png new file mode 100644 index 0000000..65073fd Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/reinforced_tank_side.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/restorer_bottom.png b/src/main/resources/assets/thaummach/textures/blocks/restorer_bottom.png new file mode 100644 index 0000000..545f973 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/restorer_bottom.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/restorer_side.png b/src/main/resources/assets/thaummach/textures/blocks/restorer_side.png new file mode 100644 index 0000000..300d798 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/restorer_side.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/restorer_side_pipes.png b/src/main/resources/assets/thaummach/textures/blocks/restorer_side_pipes.png new file mode 100644 index 0000000..08b81b6 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/restorer_side_pipes.png differ diff --git a/src/main/resources/assets/thaummach/textures/blocks/restorer_top.png b/src/main/resources/assets/thaummach/textures/blocks/restorer_top.png new file mode 100644 index 0000000..56ebc37 Binary files /dev/null and b/src/main/resources/assets/thaummach/textures/blocks/restorer_top.png differ