diff --git a/resources/assets/resonantinduction/textures/models/multimeter.png b/resources/assets/resonantinduction/textures/models/multimeter.png new file mode 100644 index 00000000..869357fc Binary files /dev/null and b/resources/assets/resonantinduction/textures/models/multimeter.png differ diff --git a/src/resonantinduction/model/ModelMultimeter.java b/src/resonantinduction/model/ModelMultimeter.java new file mode 100644 index 00000000..f7932016 --- /dev/null +++ b/src/resonantinduction/model/ModelMultimeter.java @@ -0,0 +1,75 @@ +package resonantinduction.model; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelMultimeter extends ModelBase +{ + // fields + ModelRenderer Base; + ModelRenderer secPanel; + ModelRenderer arm; + ModelRenderer button; + ModelRenderer arm2; + ModelRenderer infopanel; + + public ModelMultimeter() + { + textureWidth = 128; + textureHeight = 128; + + Base = new ModelRenderer(this, 0, 0); + Base.addBox(0F, 0F, 0F, 14, 14, 1); + Base.setRotationPoint(-7F, 9F, 7F); + Base.setTextureSize(128, 128); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + secPanel = new ModelRenderer(this, 0, 18); + secPanel.addBox(0F, 0F, 0F, 4, 8, 1); + secPanel.setRotationPoint(-6F, 10F, 6F); + secPanel.setTextureSize(128, 128); + secPanel.mirror = true; + setRotation(secPanel, 0F, 0F, 0F); + arm = new ModelRenderer(this, 0, 29); + arm.addBox(0F, 0F, 0F, 1, 9, 2); + arm.setRotationPoint(-3.5F, 13F, 5.5F); + arm.setTextureSize(128, 128); + arm.mirror = true; + setRotation(arm, 0F, 0F, 0F); + button = new ModelRenderer(this, 0, 43); + button.addBox(0F, 0F, 0F, 2, 1, 1); + button.setRotationPoint(-5F, 11F, 5.5F); + button.setTextureSize(128, 128); + button.mirror = true; + setRotation(button, 0F, 0F, 0F); + arm2 = new ModelRenderer(this, 10, 29); + arm2.addBox(0F, 0F, 0F, 1, 9, 2); + arm2.setRotationPoint(-5.5F, 13F, 5.5F); + arm2.setTextureSize(128, 128); + arm2.mirror = true; + setRotation(arm2, 0F, 0F, 0F); + infopanel = new ModelRenderer(this, 33, 0); + infopanel.addBox(0F, 0F, 0F, 7, 12, 1); + infopanel.setRotationPoint(-1F, 10F, 6.5F); + infopanel.setTextureSize(128, 128); + infopanel.mirror = true; + setRotation(infopanel, 0F, 0F, 0F); + } + + public void render(float f5) + { + Base.render(f5); + secPanel.render(f5); + arm.render(f5); + button.render(f5); + arm2.render(f5); + infopanel.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/src/resonantinduction/multimeter/BlockMultimeter.java b/src/resonantinduction/multimeter/BlockMultimeter.java index 06074c5a..4a58e56f 100644 --- a/src/resonantinduction/multimeter/BlockMultimeter.java +++ b/src/resonantinduction/multimeter/BlockMultimeter.java @@ -7,6 +7,8 @@ import static net.minecraftforge.common.ForgeDirection.EAST; import static net.minecraftforge.common.ForgeDirection.NORTH; import static net.minecraftforge.common.ForgeDirection.SOUTH; import static net.minecraftforge.common.ForgeDirection.WEST; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; @@ -22,6 +24,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import resonantinduction.ResonantInduction; import resonantinduction.base.BlockBase; +import resonantinduction.render.BlockRenderingHandler; /** * A block that detects power. @@ -103,6 +106,12 @@ public class BlockMultimeter extends BlockBase implements ITileEntityProvider { return true; } + @SideOnly(Side.CLIENT) + @Override + public int getRenderType() + { + return BlockRenderingHandler.INSTANCE.getRenderId(); + } @Override public boolean renderAsNormalBlock() @@ -110,6 +119,12 @@ public class BlockMultimeter extends BlockBase implements ITileEntityProvider return false; } + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override public TileEntity createNewTileEntity(World world) { diff --git a/src/resonantinduction/multimeter/ItemBlockMultimeter.java b/src/resonantinduction/multimeter/ItemBlockMultimeter.java index 66ff8f86..c64b4593 100644 --- a/src/resonantinduction/multimeter/ItemBlockMultimeter.java +++ b/src/resonantinduction/multimeter/ItemBlockMultimeter.java @@ -44,11 +44,11 @@ public class ItemBlockMultimeter extends ItemBlock } @Override - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World world, int x, int y, int z, int par7, float par8, float par9, float par10) + public boolean onItemUseFirst(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World world, int x, int y, int z, int par7, float par8, float par9, float par10) { if (!par2EntityPlayer.isSneaking()) { - if (!world.isRemote) + //if (!world.isRemote) { par2EntityPlayer.addChatMessage("Energy: " + TileEntityMultimeter.getDetectedEnergy(world.getBlockTileEntity(x, y, z)) + " J"); } @@ -56,7 +56,7 @@ public class ItemBlockMultimeter extends ItemBlock return true; } - return super.onItemUse(par1ItemStack, par2EntityPlayer, world, x, y, z, par7, par8, par9, par10); + return super.onItemUseFirst(par1ItemStack, par2EntityPlayer, world, x, y, z, par7, par8, par9, par10); } public float getDetection(ItemStack itemStack) diff --git a/src/resonantinduction/render/BlockRenderingHandler.java b/src/resonantinduction/render/BlockRenderingHandler.java index 0a72bf33..507891cb 100644 --- a/src/resonantinduction/render/BlockRenderingHandler.java +++ b/src/resonantinduction/render/BlockRenderingHandler.java @@ -11,6 +11,7 @@ import org.lwjgl.opengl.GL11; import resonantinduction.battery.BlockBattery; import resonantinduction.contractor.BlockEMContractor; +import resonantinduction.multimeter.BlockMultimeter; import resonantinduction.tesla.BlockTesla; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; @@ -58,6 +59,17 @@ public class BlockRenderingHandler implements ISimpleBlockRenderingHandler RenderBattery.MODEL.render(0.0625f); GL11.glPopMatrix(); } + else if (block instanceof BlockMultimeter) + { + GL11.glPushMatrix(); + GL11.glTranslated(-0.5, 1, -1); + // GL11.glTranslated(1.5, 1.5, -0.5); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-180, 0.0F, 1, 1.0F); + FMLClientHandler.instance().getClient().renderEngine.func_110577_a(RenderMultimeter.TEXTURE); + RenderMultimeter.MODEL.render(0.0625f); + GL11.glPopMatrix(); + } } @Override diff --git a/src/resonantinduction/render/RenderMultimeter.java b/src/resonantinduction/render/RenderMultimeter.java index 03361a22..11bccf9f 100644 --- a/src/resonantinduction/render/RenderMultimeter.java +++ b/src/resonantinduction/render/RenderMultimeter.java @@ -3,10 +3,14 @@ package resonantinduction.render; import net.minecraft.client.gui.FontRenderer; 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.ResonantInduction; +import resonantinduction.contractor.TileEntityEMContractor; +import resonantinduction.model.ModelMultimeter; import resonantinduction.multimeter.TileEntityMultimeter; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -20,12 +24,51 @@ import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class RenderMultimeter extends TileEntitySpecialRenderer { + public static final ModelMultimeter MODEL = new ModelMultimeter(); + public static final ResourceLocation TEXTURE = new ResourceLocation(ResonantInduction.DOMAIN, ResonantInduction.MODEL_TEXTURE_DIRECTORY + "multimeter.png"); + @Override public void renderTileEntityAt(TileEntity t, double x, double y, double z, float var8) { TileEntityMultimeter tileEntity = (TileEntityMultimeter) t; ForgeDirection direction = ForgeDirection.getOrientation(tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord)); + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 1.5, z + 0.5); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(90F, 0.0F, 1.0F, 0.0F); +/* + switch (direction) + { + case DOWN: + GL11.glRotatef(180, 0, 0, 1); + GL11.glTranslatef(0, -2, 0); + break; + case UP: + break; + case NORTH: + GL11.glTranslatef(1, 1, 0); + GL11.glRotatef(90, 0, 0, 1); + break; + case SOUTH: + GL11.glTranslatef(-1, 1, 0); + GL11.glRotatef(-90, 0, 0, 1); + break; + case WEST: + GL11.glTranslatef(0, 1, 1); + GL11.glRotatef(-90, 1, 0, 0); + break; + case EAST: + GL11.glTranslatef(0, 1, -1); + GL11.glRotatef(90, 1, 0, 0); + break; + } +*/ + this.func_110628_a(TEXTURE); + MODEL.render(0.0625f); + + GL11.glPopMatrix(); + /** * Render from side 2 to 6. This means render all sides excluding top and bottom. */