diff --git a/resources/assets/resonantinduction/textures/blocks/multimeter.png b/resources/assets/resonantinduction/textures/blocks/multimeter.png deleted file mode 100644 index 36cd83f3d..000000000 Binary files a/resources/assets/resonantinduction/textures/blocks/multimeter.png and /dev/null differ diff --git a/resources/assets/resonantinduction/textures/models/multimeter.png b/resources/assets/resonantinduction/textures/models/multimeter.png new file mode 100644 index 000000000..869357fc2 Binary files /dev/null and b/resources/assets/resonantinduction/textures/models/multimeter.png differ diff --git a/src/resonantinduction/ResonantInduction.java b/src/resonantinduction/ResonantInduction.java index 414371fde..50a6e902a 100644 --- a/src/resonantinduction/ResonantInduction.java +++ b/src/resonantinduction/ResonantInduction.java @@ -183,11 +183,11 @@ public class ResonantInduction metadata.modId = ID; metadata.name = NAME; metadata.description = "Resonant Induction is a Minecraft mod focusing on the manipulation of electricity and wireless technology. Ever wanted blazing electrical shocks flying off your evil lairs? You've came to the right place!"; - metadata.url = "http://universalelectricity.com"; + metadata.url = "http://universalelectricity.com/resonant-induction"; metadata.version = VERSION + BUILD_VERSION; metadata.authorList = Arrays.asList(new String[] { "Calclavia", "Aidancbrady" }); metadata.logoFile = "/"; - metadata.credits = "Thanks to Archadia for the assets."; + metadata.credits = "Thanks to Archadia for the awesome assets!"; metadata.autogenerated = true; } diff --git a/src/resonantinduction/model/ModelMultimeter.java b/src/resonantinduction/model/ModelMultimeter.java new file mode 100644 index 000000000..f79320169 --- /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 06074c5a0..a09270877 100644 --- a/src/resonantinduction/multimeter/BlockMultimeter.java +++ b/src/resonantinduction/multimeter/BlockMultimeter.java @@ -3,25 +3,17 @@ */ package resonantinduction.multimeter; -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 net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IconRegister; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Icon; -import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import resonantinduction.ResonantInduction; import resonantinduction.base.BlockBase; +import resonantinduction.render.BlockRenderingHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; /** * A block that detects power. @@ -31,11 +23,10 @@ import resonantinduction.base.BlockBase; */ public class BlockMultimeter extends BlockBase implements ITileEntityProvider { - private Icon machineIcon; - public BlockMultimeter(int id) { super("multimeter", id); + this.func_111022_d(ResonantInduction.PREFIX + "machine"); } /** @@ -44,25 +35,7 @@ public class BlockMultimeter extends BlockBase implements ITileEntityProvider */ public int onBlockPlaced(World par1World, int par2, int par3, int par4, int side, float hitX, float hitY, float hitZ, int metadata) { - return ForgeDirection.getOrientation(side).ordinal(); - } - - @Override - public Icon getIcon(int side, int metadata) - { - if (side == metadata) - { - return this.blockIcon; - } - - return this.machineIcon; - } - - @Override - public void registerIcons(IconRegister iconRegister) - { - super.registerIcons(iconRegister); - this.machineIcon = iconRegister.registerIcon(ResonantInduction.PREFIX + "machine"); + return ForgeDirection.getOrientation(side).getOpposite().ordinal(); } @Override @@ -104,12 +77,25 @@ public class BlockMultimeter extends BlockBase implements ITileEntityProvider return true; } + @SideOnly(Side.CLIENT) + @Override + public int getRenderType() + { + return BlockRenderingHandler.INSTANCE.getRenderId(); + } + @Override public boolean renderAsNormalBlock() { 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 66ff8f86d..c64b4593b 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 0a72bf33e..5abb5e04e 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,15 @@ public class BlockRenderingHandler implements ISimpleBlockRenderingHandler RenderBattery.MODEL.render(0.0625f); GL11.glPopMatrix(); } + else if (block instanceof BlockMultimeter) + { + GL11.glPushMatrix(); + GL11.glRotatef(180, 0, 1, 0); + GL11.glTranslated(0, -1, -0.7); + 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 03361a226..ebb1ec8dd 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,103 +24,134 @@ 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)); - /** - * Render from side 2 to 6. This means render all sides excluding top and bottom. - */ - for (int side = 0; side < 6; side++) + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + GL11.glRotatef(90, 0, 0, 1); + GL11.glTranslated(0, -1, 0); + + switch (direction) { - if (direction.ordinal() != side) - { - GL11.glPushMatrix(); - GL11.glPolygonOffset(-10, -10); - GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); - - float dx = 1F / 16; - float dz = 1F / 16; - float displayWidth = 1 - 2F / 16; - float displayHeight = 1 - 2F / 16; - GL11.glTranslatef((float) x, (float) y, (float) z); - - switch (side) - { - case 1: - break; - case 0: - GL11.glTranslatef(1, 1, 0); - GL11.glRotatef(180, 1, 0, 0); - GL11.glRotatef(180, 0, 1, 0); - - break; - case 3: - GL11.glTranslatef(0, 1, 0); - GL11.glRotatef(0, 0, 1, 0); - GL11.glRotatef(90, 1, 0, 0); - - break; - case 2: - GL11.glTranslatef(1, 1, 1); - GL11.glRotatef(180, 0, 1, 0); - GL11.glRotatef(90, 1, 0, 0); - - break; - case 5: - GL11.glTranslatef(0, 1, 1); - GL11.glRotatef(90, 0, 1, 0); - GL11.glRotatef(90, 1, 0, 0); - - break; - case 4: - GL11.glTranslatef(1, 1, 0); - GL11.glRotatef(-90, 0, 1, 0); - GL11.glRotatef(90, 1, 0, 0); - - break; - } - - GL11.glTranslatef(dx + displayWidth / 2, 1F, dz + displayHeight / 2); + case UP: + GL11.glRotatef(90, 0, 1, 0); + break; + case DOWN: + GL11.glRotatef(-90, 0, 1, 0); + break; + case NORTH: + GL11.glRotatef(180, 0, 1, 0); + GL11.glRotatef(180, 0, 0, 1); + GL11.glTranslatef(0, -2, 0); + break; + case SOUTH: + break; + case WEST: + GL11.glTranslatef(0, 1, 1); GL11.glRotatef(-90, 1, 0, 0); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - - FontRenderer fontRenderer = this.getFontRenderer(); - - String joules = Math.round(tileEntity.getDetectedEnergy()) + " J"; - - int stringWidth = Math.max(fontRenderer.getStringWidth(joules), 0); - // maxWidth += 8; - int lineHeight = fontRenderer.FONT_HEIGHT + 2; - int requiredHeight = lineHeight * 1; - - /** - * Create an average scale. - */ - float scaleX = displayWidth / stringWidth; - float scaleY = displayHeight / requiredHeight; - float scale = (float) (Math.min(scaleX, scaleY) * 0.8); - GL11.glScalef(scale, -scale, scale); - GL11.glDepthMask(false); - - int realHeight = (int) Math.floor(displayHeight / scale); - int realWidth = (int) Math.floor(displayWidth / scale); - - int offsetY = (realHeight - requiredHeight) / 2; - int offsetX = (realWidth - stringWidth) / 2; - - GL11.glDisable(GL11.GL_LIGHTING); - fontRenderer.drawString(joules, offsetX - realWidth / 2, 1 + offsetY - realHeight / 2 + 0 * lineHeight, 1); - - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glDepthMask(true); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); - GL11.glPopMatrix(); - } + 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(); + + GL11.glPushMatrix(); + GL11.glPolygonOffset(-10, -10); + GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + + float dx = 1F / 16; + float dz = 1F / 16; + float displayWidth = 1 - 2F / 16; + float displayHeight = 1 - 2F / 16; + GL11.glTranslatef((float) x, (float) y, (float) z); + + switch (direction) + { + case UP: + GL11.glTranslatef(1, 1, 0); + GL11.glRotatef(180, 1, 0, 0); + GL11.glRotatef(180, 0, 1, 0); + GL11.glTranslatef(0, -0.9f, -0.1f); + break; + case DOWN: + GL11.glRotatef(180, 0, 1, 0); + GL11.glTranslatef(-1, -0.9f, -1.1f); + break; + case SOUTH: + GL11.glTranslatef(1, 1, 1); + GL11.glRotatef(180, 0, 1, 0); + GL11.glRotatef(90, 1, 0, 0); + GL11.glTranslatef(0, -0.9f, -0.1f); + break; + case NORTH: + GL11.glTranslatef(0, 1, 0); + GL11.glRotatef(0, 0, 1, 0); + GL11.glRotatef(90, 1, 0, 0); + GL11.glTranslatef(0, -0.9f, -0.1f); + break; + case EAST: + GL11.glTranslatef(1, 1, 0); + GL11.glRotatef(-90, 0, 1, 0); + GL11.glRotatef(90, 1, 0, 0); + GL11.glTranslatef(0, -0.9f, -0.1f); + break; + case WEST: + GL11.glTranslatef(0, 1, 1); + GL11.glRotatef(90, 0, 1, 0); + GL11.glRotatef(90, 1, 0, 0); + GL11.glTranslatef(0, -0.9f, -0.1f); + break; + } + + GL11.glTranslatef(dx + displayWidth / 2, 1F, dz + displayHeight / 2); + GL11.glRotatef(-90, 1, 0, 0); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + FontRenderer fontRenderer = this.getFontRenderer(); + + String joules = Math.round(tileEntity.getDetectedEnergy()) + " J"; + + int stringWidth = Math.max(fontRenderer.getStringWidth(joules), 0); + // maxWidth += 8; + int lineHeight = fontRenderer.FONT_HEIGHT + 2; + int requiredHeight = lineHeight * 1; + + /** + * Create an average scale. + */ + float scaleX = displayWidth / stringWidth; + float scaleY = displayHeight / requiredHeight; + float scale = (float) (Math.min(scaleX, scaleY) * 0.8); + GL11.glScalef(scale, -scale, scale); + GL11.glDepthMask(false); + + int realHeight = (int) Math.floor(displayHeight / scale); + int realWidth = (int) Math.floor(displayWidth / scale); + + int offsetY = (realHeight - requiredHeight) / 2; + int offsetX = (realWidth - stringWidth) / 2; + + GL11.glDisable(GL11.GL_LIGHTING); + fontRenderer.drawString(joules, offsetX - realWidth / 2, 1 + offsetY - realHeight / 2 + 0 * lineHeight, 1); + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDepthMask(true); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + GL11.glPopMatrix(); } } \ No newline at end of file