From a0af78ef46e677e18dd86711bb408fd4adc55818 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Thu, 26 Mar 2015 23:53:22 -0400 Subject: [PATCH] Teleporters now follow CTM --- .../render/block/CTMRenderingHandler.java | 24 ++++++++++++++++++ .../render/block/MachineRenderingHandler.java | 24 +----------------- .../mekanism/common/block/BlockBasic.java | 3 ++- .../mekanism/common/block/BlockMachine.java | 24 +++++++++++++++--- .../mekanism/textures/blocks/Teleporter.png | Bin 2831 -> 0 bytes .../textures/blocks/ctm/Teleporter-ctm.png | Bin 0 -> 4026 bytes .../textures/blocks/ctm/Teleporter.png | Bin 0 -> 3597 bytes .../blocks/ctm/TeleporterFrame-ctm.png | Bin 0 -> 4881 bytes .../blocks/{ => ctm}/TeleporterFrame.png | Bin 3759 -> 3707 bytes 9 files changed, 48 insertions(+), 27 deletions(-) delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/Teleporter.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/Teleporter-ctm.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/Teleporter.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/TeleporterFrame-ctm.png rename src/main/resources/assets/mekanism/textures/blocks/{ => ctm}/TeleporterFrame.png (70%) diff --git a/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java b/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java index f367ea2b6..f8fe5c247 100644 --- a/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java +++ b/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java @@ -5,9 +5,11 @@ import mekanism.client.ClientProxy; import mekanism.client.render.MekanismRenderer; import mekanism.common.CTMData; import mekanism.common.base.IBlockCTM; +import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.tile.TileEntityBasicBlock; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; @@ -53,6 +55,28 @@ public class CTMRenderingHandler implements ISimpleBlockRenderingHandler return rendererCTM.renderStandardBlock(block, x, y, z); } + if(MachineType.get(block, meta) != null) + { + if(!MachineType.get(block, meta).hasModel) + { + TileEntity tile = world.getTileEntity(x, y, z); + + if(tile instanceof TileEntityBasicBlock) + { + if(((TileEntityBasicBlock)tile).facing >= 2) + { + rendererOld.uvRotateTop = MekanismRenderer.directionMap[((TileEntityBasicBlock)tile).facing-2]; + rendererOld.uvRotateBottom = MekanismRenderer.directionMap[((TileEntityBasicBlock)tile).facing-2]; + } + } + + rendererOld.renderStandardBlock(block, x, y, z); + rendererOld.setRenderBoundsFromBlock(block); + + return true; + } + } + return rendererOld.renderStandardBlock(block, x, y, z); } diff --git a/src/main/java/mekanism/client/render/block/MachineRenderingHandler.java b/src/main/java/mekanism/client/render/block/MachineRenderingHandler.java index a41b6c2c6..4c3d0ba69 100644 --- a/src/main/java/mekanism/client/render/block/MachineRenderingHandler.java +++ b/src/main/java/mekanism/client/render/block/MachineRenderingHandler.java @@ -237,29 +237,7 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - int metadata = world.getBlockMetadata(x, y, z); - - if(MachineType.get(block, metadata) != null) - { - if(!MachineType.get(block, metadata).hasModel) - { - TileEntity tile = world.getTileEntity(x, y, z); - - if(tile instanceof TileEntityBasicBlock) - { - if(((TileEntityBasicBlock)tile).facing >= 2) - { - renderer.uvRotateTop = MekanismRenderer.directionMap[((TileEntityBasicBlock)tile).facing-2]; - renderer.uvRotateBottom = MekanismRenderer.directionMap[((TileEntityBasicBlock)tile).facing-2]; - } - } - - renderer.renderStandardBlock(block, x, y, z); - renderer.setRenderBoundsFromBlock(block); - return true; - } - } - + //Handled by CTMRenderingHandler return false; } diff --git a/src/main/java/mekanism/common/block/BlockBasic.java b/src/main/java/mekanism/common/block/BlockBasic.java index f975bab40..f7fcb07f6 100644 --- a/src/main/java/mekanism/common/block/BlockBasic.java +++ b/src/main/java/mekanism/common/block/BlockBasic.java @@ -148,6 +148,7 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon switch(blockType) { case BASIC_BLOCK_1: + ctms[7][0] = new CTMData("ctm/TeleporterFrame", this, Arrays.asList(7)).addOtherBlockConnectivities(MekanismBlocks.MachineBlock, Arrays.asList(11)).registerIcons(register); ctms[9][0] = new CTMData("ctm/DynamicTank", this, Arrays.asList(9, 11)).registerIcons(register); ctms[10][0] = new CTMData("ctm/DynamicGlass", this, Arrays.asList(10)).registerIcons(register); ctms[11][0] = new CTMData("ctm/DynamicValve", this, Arrays.asList(11, 9)).registerIcons(register); @@ -166,7 +167,7 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon MekanismRenderer.loadDynamicTextures(register, "Bin", icons[6], DefIcon.getActivePair(register.registerIcon("mekanism:BinSide"), 3, 4, 5), new DefIcon(register.registerIcon("mekanism:BinTop"), 0), new DefIcon(register.registerIcon("mekanism:BinTopOn"), 6)); - icons[7][0] = register.registerIcon("mekanism:TeleporterFrame"); + icons[7][0] = ctms[7][0].mainTextureData.icon; icons[8][0] = register.registerIcon("mekanism:SteelCasing"); icons[9][0] = ctms[9][0].mainTextureData.icon; icons[10][0] = ctms[10][0].mainTextureData.icon; diff --git a/src/main/java/mekanism/common/block/BlockMachine.java b/src/main/java/mekanism/common/block/BlockMachine.java index 1853db0cd..3b072a1af 100644 --- a/src/main/java/mekanism/common/block/BlockMachine.java +++ b/src/main/java/mekanism/common/block/BlockMachine.java @@ -1,6 +1,7 @@ package mekanism.common.block; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; @@ -17,11 +18,13 @@ import mekanism.api.energy.IStrictEnergyStorage; import mekanism.client.render.MekanismRenderer; import mekanism.client.render.MekanismRenderer.DefIcon; import mekanism.client.render.MekanismRenderer.ICustomBlockIcon; +import mekanism.common.CTMData; import mekanism.common.ItemAttacher; import mekanism.common.Mekanism; import mekanism.common.MekanismBlocks; import mekanism.common.Tier.BaseTier; import mekanism.common.base.IActiveState; +import mekanism.common.base.IBlockCTM; import mekanism.common.base.IBoundingBlock; import mekanism.common.base.IElectricChest; import mekanism.common.base.IFactory; @@ -156,11 +159,13 @@ import dan200.computercraft.api.peripheral.IPeripheralProvider; * */ @Interface(iface = "dan200.computercraft.api.peripheral.IPeripheralProvider", modid = "ComputerCraft") -public class BlockMachine extends BlockContainer implements ISpecialBounds, IPeripheralProvider, ICustomBlockIcon +public class BlockMachine extends BlockContainer implements ISpecialBounds, IPeripheralProvider, IBlockCTM, ICustomBlockIcon { public IIcon[][] icons = new IIcon[16][16]; public IIcon[][][] factoryIcons = new IIcon[4][16][16]; + public CTMData[][] ctms = new CTMData[16][4]; + public IIcon BASE_ICON; public MachineBlock blockType; @@ -184,6 +189,8 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer switch(blockType) { case MACHINE_BLOCK_1: + ctms[11][0] = new CTMData("ctm/Teleporter", this, Arrays.asList(11)).addOtherBlockConnectivities(MekanismBlocks.BasicBlock, Arrays.asList(7)).registerIcons(register); + MekanismRenderer.loadDynamicTextures(register, MachineType.ENRICHMENT_CHAMBER.name, icons[0], def); MekanismRenderer.loadDynamicTextures(register, MachineType.OSMIUM_COMPRESSOR.name, icons[1], def); MekanismRenderer.loadDynamicTextures(register, MachineType.COMBINER.name, icons[2], def); @@ -210,7 +217,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer MekanismRenderer.loadDynamicTextures(register, MachineType.PURIFICATION_CHAMBER.name, icons[9], def); MekanismRenderer.loadDynamicTextures(register, MachineType.ENERGIZED_SMELTER.name, icons[10], def); - icons[11][0] = register.registerIcon("mekanism:Teleporter"); + icons[11][0] = ctms[11][0].mainTextureData.icon; break; case MACHINE_BLOCK_2: MekanismRenderer.loadDynamicTextures(register, MachineType.CHEMICAL_INJECTION_CHAMBER.name, icons[3], def); @@ -710,7 +717,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer @Override public int getRenderType() { - return Mekanism.proxy.MACHINE_RENDER_ID; + return Mekanism.proxy.CTM_RENDER_ID; } @Override @@ -1382,4 +1389,15 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer return false; } + + @Override + public CTMData getCTMData(IBlockAccess world, int x, int y, int z, int meta) + { + if(ctms[meta][1] != null && MekanismUtils.isActive(world, x, y, z)) + { + return ctms[meta][1]; + } + + return ctms[meta][0]; + } } diff --git a/src/main/resources/assets/mekanism/textures/blocks/Teleporter.png b/src/main/resources/assets/mekanism/textures/blocks/Teleporter.png deleted file mode 100644 index b48b57c58d2d49a13bce6a0d04d4a3c256076a38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2831 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/Teleporter.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/Teleporter.png new file mode 100644 index 0000000000000000000000000000000000000000..df6735bd6bdf80de329c0922d44f203bac85db79 GIT binary patch literal 3597 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 Ivrz4Tx05}naRo`#hR1`jmZ&IWdKOk5~ zhl<6oRa0BJ8yc;~21%2p?MfD<>DVeH9(p*dx19w`~g7O0}n_%Aq@s% zd)fBDv`JHkDym6Hd+5XuAtvnwRpGmKVkc9?T=n|PIo~$m6N9yl%7qB(zDb{1JtYOPA!qk%@Qub75C2T;T?(y%k7cw{!aEIzj}+@(TO5Y zz-|>CeHr)+QOwk9wo4Sh2mAPGw+7tv9PraN1Olr9mwlWPc+tlvJx(D%369Vz>lLjC zyaqhH*k&)cVSir(7|4_1Rc;%)B4&}Zt&(AK&*3kRaknx54=$T^^z2=OSo@r%xnsBw ziQX&rRKAHn*R}K<@Jp~?uenKKe+BrD`qF#?cpp*psgiwk-seYOU#%402HpjG(Qu~= zP5WwfF?$>svC;J<>zK$RIM;P&60@WifbUlLwAf?lk$1u(mFRYq89Q?S8HyrsX^MVnpsf`{W6(5UXREr zZM&7ilpo6ux^|%%%N9z;(dj0Ct!8>>5!%=VyPg-?ke}Vs>~sbgdDuU^Ixpr19NS&g zQew8Fz<)>RL_{M_7A<1csY*MfP@XcB#Jxr~JS8&7goVS)VKE|4(h_Xlc{z{c$ApZs z7riZ_QKdV_uW-M~u~8PF3UX~a6)MwxDE0Ha zPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiSBY#iOF*IB46Cei@XmvNzKBsGIKkN=X z$_Bgm&h5TyYjpf^^Nrn$ZO1mSZpOC4_}H(pE&Od#0y|)Oik6|u@OHupcq1J>TmjQ1 z4eM{2+Oeah>iL1tBPPK=$Ue-{x#7^N{-XY=Zm3_V7u4T7YJ?d(rX+nTeJlMa zeSar?Fa1o4bXmG0{UlwLzL72kIlJ$@pC#CPuU}yk-HKgk)oY(MCsR(!d*m18l>EH> zvOF8G6uDm>lc(gp@azfp%?$k=y%=-~vuaJXdoA$<7&H$h2Au}i##F_Gt8^Aw+nR IvmFFp3NN@C&j0`b