From 0358d65ee103ee4743af2d84a002418f0414d003 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sun, 16 Feb 2014 21:00:58 +0800 Subject: [PATCH] Added connected textures to solar panel --- .../electrical/Electrical.java | 4 +- .../generator/solar/BlockSolarPanel.java | 34 +++++++- .../generator/solar/ModelSolarPanel.java | 76 ------------------ .../generator/solar/RenderSolarPanel.java | 41 +++++++--- .../textures/blocks/solarPanel_bottom.png | Bin 0 -> 1211 bytes .../textures/blocks/solarPanel_side.png | Bin 0 -> 3290 bytes .../textures/blocks/solarPanel_top.png | Bin 0 -> 4348 bytes 7 files changed, 64 insertions(+), 91 deletions(-) delete mode 100644 electrical/src/main/java/resonantinduction/electrical/generator/solar/ModelSolarPanel.java create mode 100644 src/main/resources/assets/resonantinduction/textures/blocks/solarPanel_bottom.png create mode 100644 src/main/resources/assets/resonantinduction/textures/blocks/solarPanel_side.png create mode 100644 src/main/resources/assets/resonantinduction/textures/blocks/solarPanel_top.png diff --git a/electrical/src/main/java/resonantinduction/electrical/Electrical.java b/electrical/src/main/java/resonantinduction/electrical/Electrical.java index 5731d296..a1f1964d 100644 --- a/electrical/src/main/java/resonantinduction/electrical/Electrical.java +++ b/electrical/src/main/java/resonantinduction/electrical/Electrical.java @@ -86,7 +86,7 @@ public class Electrical public static Block blockEncoder; // Generators - public static Block blockSolarPanel; + public static BlockSolarPanel blockSolarPanel; public static Block blockGenerator; public static Block blockThermopile; @@ -119,7 +119,7 @@ public class Electrical itemDisk = contentRegistry.createItem(ItemDisk.class); // Generator - blockSolarPanel = contentRegistry.createTile(BlockSolarPanel.class, TileSolarPanel.class); + blockSolarPanel = (BlockSolarPanel) contentRegistry.createTile(BlockSolarPanel.class, TileSolarPanel.class); blockGenerator = contentRegistry.createTile(BlockGenerator.class, TileGenerator.class); blockThermopile = contentRegistry.createTile(BlockThermopile.class, TileThermopile.class); diff --git a/electrical/src/main/java/resonantinduction/electrical/generator/solar/BlockSolarPanel.java b/electrical/src/main/java/resonantinduction/electrical/generator/solar/BlockSolarPanel.java index 5acea572..2a8775d5 100644 --- a/electrical/src/main/java/resonantinduction/electrical/generator/solar/BlockSolarPanel.java +++ b/electrical/src/main/java/resonantinduction/electrical/generator/solar/BlockSolarPanel.java @@ -1,6 +1,8 @@ package resonantinduction.electrical.generator.solar; +import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Icon; import net.minecraft.world.World; import resonantinduction.core.Reference; import resonantinduction.core.render.RIBlockRenderingHandler; @@ -11,11 +13,39 @@ import cpw.mods.fml.relauncher.SideOnly; public class BlockSolarPanel extends BlockTile { + public Icon sideIcon; + public Icon bottomIcon; + public BlockSolarPanel(int id) { super(id, UniversalElectricity.machine); - setTextureName(Reference.PREFIX + "material_metal_side"); - setBlockBounds(0, 0, 0, 1, 0.5f, 1); + setTextureName(Reference.PREFIX + "solarPanel_top"); + setBlockBounds(0, 0, 0, 1, 0.3f, 1); + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IconRegister iconReg) + { + sideIcon = iconReg.registerIcon(Reference.PREFIX + "solarPanel_side"); + bottomIcon = iconReg.registerIcon(Reference.PREFIX + "solarPanel_bottom"); + super.registerIcons(iconReg); + } + + @Override + @SideOnly(Side.CLIENT) + public Icon getIcon(int side, int meta) + { + if (side == 0) + { + return bottomIcon; + } + else if (side == 1) + { + return blockIcon; + } + + return sideIcon; } @Override diff --git a/electrical/src/main/java/resonantinduction/electrical/generator/solar/ModelSolarPanel.java b/electrical/src/main/java/resonantinduction/electrical/generator/solar/ModelSolarPanel.java deleted file mode 100644 index 9c78a6aa..00000000 --- a/electrical/src/main/java/resonantinduction/electrical/generator/solar/ModelSolarPanel.java +++ /dev/null @@ -1,76 +0,0 @@ -package resonantinduction.electrical.generator.solar; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; - -public class ModelSolarPanel extends ModelBase -{ - // fields - ModelRenderer base; - ModelRenderer neck; - ModelRenderer panel; - ModelRenderer brace; - ModelRenderer braceLeft; - ModelRenderer braceRight; - - public ModelSolarPanel() - { - textureWidth = 128; - textureHeight = 128; - - base = new ModelRenderer(this, 0, 0); - base.addBox(-3.5F, 0F, -3.5F, 7, 1, 7); - base.setRotationPoint(0F, 23F, 0F); - base.setTextureSize(128, 128); - base.mirror = true; - setRotation(base, 0F, 0F, 0F); - neck = new ModelRenderer(this, 57, 17); - neck.addBox(-3F, 0F, -2.5F, 6, 2, 5); - neck.setRotationPoint(0F, 21F, 0F); - neck.setTextureSize(128, 128); - neck.mirror = true; - setRotation(neck, 0F, 0F, 0F); - panel = new ModelRenderer(this, 0, 31); - panel.addBox(-7F, 0F, -7F, 14, 3, 14); - panel.setRotationPoint(0F, 15F, 0F); - panel.setTextureSize(128, 128); - panel.mirror = true; - setRotation(panel, 0F, 0F, 0F); - brace = new ModelRenderer(this, 9, 16); - brace.addBox(-8F, 0F, -3F, 16, 2, 6); - brace.setRotationPoint(0F, 19F, 0F); - brace.setTextureSize(128, 128); - brace.mirror = true; - setRotation(brace, 0F, 0F, 0F); - braceLeft = new ModelRenderer(this, 57, 0); - braceLeft.addBox(7F, 0F, -3F, 1, 3, 6); - braceLeft.setRotationPoint(0F, 16F, 0F); - braceLeft.setTextureSize(128, 128); - braceLeft.mirror = true; - setRotation(braceLeft, 0F, 0F, 0F); - braceRight = new ModelRenderer(this, 39, 0); - braceRight.addBox(-8F, 0F, -3F, 1, 3, 6); - braceRight.setRotationPoint(0F, 16F, 0F); - braceRight.setTextureSize(128, 128); - braceRight.mirror = true; - setRotation(braceRight, 0F, 0F, 0F); - } - - public void render(float f5) - { - base.render(f5); - neck.render(f5); - panel.render(f5); - brace.render(f5); - braceLeft.render(f5); - braceRight.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/electrical/src/main/java/resonantinduction/electrical/generator/solar/RenderSolarPanel.java b/electrical/src/main/java/resonantinduction/electrical/generator/solar/RenderSolarPanel.java index fc1a11ee..122d45b5 100644 --- a/electrical/src/main/java/resonantinduction/electrical/generator/solar/RenderSolarPanel.java +++ b/electrical/src/main/java/resonantinduction/electrical/generator/solar/RenderSolarPanel.java @@ -1,30 +1,49 @@ package resonantinduction.electrical.generator.solar; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.ForgeDirection; import org.lwjgl.opengl.GL11; -import resonantinduction.core.Reference; +import resonantinduction.electrical.Electrical; +import calclavia.lib.render.RenderUtility; +import calclavia.lib.utility.WorldUtility; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class RenderSolarPanel extends TileEntitySpecialRenderer { - public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "solarPanel.png"); - public static final ModelSolarPanel MODEL = new ModelSolarPanel(); - @Override - public void renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f) + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f) { - // Texture file - this.bindTexture(TEXTURE); + float width = 0.25f; + float thickness = 0.07f; + GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - MODEL.render(0.0625F); + GL11.glTranslated(x + 0.5, y + 0.05f, z + 0.5); + RenderUtility.bind(TextureMap.locationBlocksTexture); + + // Render the main panel + RenderUtility.renderCube(-0.5, -0.05, -0.5, 0.5, width, 0.5, Electrical.blockSolarPanel); + ForgeDirection dir = ForgeDirection.DOWN; + + // Render edges + for (int i = 2; i < 6; i++) + { + ForgeDirection check = ForgeDirection.getOrientation(i); + + if (tile.worldObj == null || !(tile.worldObj.getBlockTileEntity(tile.xCoord + check.offsetX, tile.yCoord + check.offsetY, tile.zCoord + check.offsetZ) instanceof TileSolarPanel)) + { + GL11.glPushMatrix(); + GL11.glRotatef(WorldUtility.getAngleFromForgeDirection(check), 0, 1, 0); + RenderUtility.renderCube(0.5 - thickness, -0.0501, -0.501, 0.501, width + 0.001, 0.501, Electrical.blockSolarPanel, Electrical.blockSolarPanel.sideIcon); + GL11.glPopMatrix(); + } + } + GL11.glPopMatrix(); } } \ No newline at end of file diff --git a/src/main/resources/assets/resonantinduction/textures/blocks/solarPanel_bottom.png b/src/main/resources/assets/resonantinduction/textures/blocks/solarPanel_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..2ef51ed0333fb6b041cac7a9ec55cabdb381b4b1 GIT binary patch literal 1211 zcmV;s1VsCZP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qRNAp5A000CkNkl=x==H_O5dV1PEK0Y?jfZyNW%K&e0 zZ?}hshvoacySv-IzP^_4^X27beKMr*h+*a4-``hEk9gnS-hOHh)JO^vz$$!weO;u8 z_{7XSOaeYXKbJUpF*rjJAl48}Oi#U+003k_np8+7Fd=;FodVQrs<~!-dE`tZyl|!s zhfmBAF98AwkWB$p&-KmYU<6J9p4A%&Mw|%E;$Zrzb%zdq2($sF$XYKiFPCZ5ipw)% zh)MvzW=yQjOaY#8xugd_rT_^=NIP>=G~pD0NYeyZvki!OE{?|#;kqNrX|L)Ophh1U z+;Dh&OCBVVH?f3i09!dCG309IBngnW5gVvsF}{Jq;U$8|bq6#@(!_uO#4x#lL_{R# z%oCug8V!--#RJnNv;lpXx`QNwy@1XxAGq}|X-9WYqDyJP6tVA20!JAc3$6Fo33Fa|3D#f?aO` z0l=C9CP3qSd0@>=odC}+oq9E0TsQ-XcTeyofFJ_a23$hm`I;$04v4e~<(%ylFgKu< zpjO^7_GJf?C|E+*YbXH#XyOC_BazoYY%f3!Qoh=bpjSJQa|7~X>owFcu+{Lpy$Z_{ zpcz6w^GtLCVD z`3QD?1Xz=13OfR}7oZW0PrfF6bqT;{1N%X6uU|&~9uU+>A(DAcdmzi#*Z{>e#KG_- zVBP_S6IT3Z1B$7VbWXns0Gb=n$XO=9U9f?8aB9q-cfgUs!2h*@E}bGtz^NQaOrGy~ z9)Y_5pL=pk-7}h160stiu`2_s!%uU9Z+Y6|f1~}x1@~JuN z2*iH`00{W(iwGG%0j9EI8{!kqx2XiEVZ=2lo+(nCfb~5vH_(|A0NB~dGo;9n@NI(M zF~PNdI9zfzGLN7Q=)L|ql`xeCgdncjegk4{fDn@*%Qu7?0&wB++_4d$p5gwV|2==+ Z{sZSu^|<=H!BzkO002ovPDHLkV1kR96p{b{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/resonantinduction/textures/blocks/solarPanel_side.png b/src/main/resources/assets/resonantinduction/textures/blocks/solarPanel_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e3c0909e9615615d29f012add4a3914410a03c37 GIT binary patch literal 3290 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/resonantinduction/textures/blocks/solarPanel_top.png b/src/main/resources/assets/resonantinduction/textures/blocks/solarPanel_top.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea9827c0cac17c22c5c5a4d831bce94c114fd1a GIT binary patch literal 4348 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