From 0a9b63d1ca9bd37b550ba9feec947820b0c338f0 Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 9 Oct 2020 23:35:13 +0200 Subject: [PATCH] more inventory 3D models, some igen work, tool abilities --- src/main/java/assets/hbm/lang/de_DE.lang | 2 + src/main/java/assets/hbm/lang/en_US.lang | 2 + .../hbm/textures/gui/gauges/small_bow.png | Bin 1257 -> 1240 bytes .../hbm/textures/gui/generators/gui_igen.png | Bin 4099 -> 4271 bytes .../java/com/hbm/handler/ToolAbility.java | 77 ++++++ .../com/hbm/inventory/gui/GUIIGenerator.java | 42 +++- src/main/java/com/hbm/items/ModItems.java | 12 + src/main/java/com/hbm/main/ClientProxy.java | 9 +- .../com/hbm/render/item/ItemRenderBase.java | 57 +++++ .../hbm/render/item/ItemRenderLibrary.java | 141 +++++++++++ .../item/block/ItemRendererMachine.java | 124 --------- .../hbm/tileentity/TileEntityMachineBase.java | 16 +- .../machine/TileEntityMachineIGenerator.java | 236 ++++++++++++++++++ 13 files changed, 574 insertions(+), 144 deletions(-) create mode 100644 src/main/java/com/hbm/render/item/ItemRenderBase.java create mode 100644 src/main/java/com/hbm/render/item/ItemRenderLibrary.java delete mode 100644 src/main/java/com/hbm/render/item/block/ItemRendererMachine.java diff --git a/src/main/java/assets/hbm/lang/de_DE.lang b/src/main/java/assets/hbm/lang/de_DE.lang index 22ca5dd53..f446db7fc 100644 --- a/src/main/java/assets/hbm/lang/de_DE.lang +++ b/src/main/java/assets/hbm/lang/de_DE.lang @@ -2427,8 +2427,10 @@ tile.yellow_barrel.name=Radioaktives Fass tool.ability.cnetrifuge=Auto-Zentrifuge tool.ability.crystallizer=Auto-Kristallisierer +tool.ability.explosion=Explosion tool.ability.hammer=AoE tool.ability.luck=Glück +tool.ability.mercury=Quecksilber-Berührung tool.ability.recursion=Erzadern-Miner tool.ability.shredder=Auto-Brecher tool.ability.silktouch=Behutsamkeit diff --git a/src/main/java/assets/hbm/lang/en_US.lang b/src/main/java/assets/hbm/lang/en_US.lang index a78c3d14e..9282d5825 100644 --- a/src/main/java/assets/hbm/lang/en_US.lang +++ b/src/main/java/assets/hbm/lang/en_US.lang @@ -2427,8 +2427,10 @@ tile.yellow_barrel.name=Radioactive Barrel tool.ability.centrifuge=Auto-Centrifuge tool.ability.crystallizer=Auto-Crystallizer +tool.ability.explosion=Explosion tool.ability.hammer=AoE tool.ability.luck=Fortune +tool.ability.mercury=Mercury Touch tool.ability.recursion=Vein Miner tool.ability.shredder=Auto-Shredder tool.ability.silktouch=Silk Touch diff --git a/src/main/java/assets/hbm/textures/gui/gauges/small_bow.png b/src/main/java/assets/hbm/textures/gui/gauges/small_bow.png index 93ad0fcf9beb2fbfe1fb0fb4943c4a36e5dde07b..4dc8de24be5ba3e814af26aaa319b61b0274cfdb 100644 GIT binary patch delta 1204 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 diff --git a/src/main/java/assets/hbm/textures/gui/generators/gui_igen.png b/src/main/java/assets/hbm/textures/gui/generators/gui_igen.png index fcc7c3aec435924a27f6e022f1693d9997d9bc0f..9d3d05e22e7005d09c9ae75c1f73f53b3865e81a 100644 GIT binary patch literal 4271 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 Q{r5-%JyYHC8>py%0V1C5Bme*a literal 4099 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 diff --git a/src/main/java/com/hbm/handler/ToolAbility.java b/src/main/java/com/hbm/handler/ToolAbility.java index f8a857c04..cf21376fd 100644 --- a/src/main/java/com/hbm/handler/ToolAbility.java +++ b/src/main/java/com/hbm/handler/ToolAbility.java @@ -7,6 +7,8 @@ import java.util.List; import java.util.Set; import com.hbm.config.ToolConfig; +import com.hbm.explosion.ExplosionNT; +import com.hbm.explosion.ExplosionNT.ExAttrib; import com.hbm.inventory.CentrifugeRecipes; import com.hbm.inventory.CrystallizerRecipes; import com.hbm.inventory.ShredderRecipes; @@ -392,4 +394,79 @@ public abstract class ToolAbility { return I18n.format(getName()); } } + + public static class MercuryAbility extends ToolAbility { + + @Override + public void onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + + //a band-aid on a gaping wound + if(block == Blocks.lit_redstone_ore) + block = Blocks.redstone_ore; + + int mercury = 0; + + if(block == Blocks.redstone_ore) + mercury = player.getRNG().nextInt(5) + 4; + if(block == Blocks.redstone_block) + mercury = player.getRNG().nextInt(7) + 8; + + if(mercury > 0) { + world.setBlockToAir(x, y, z); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.nugget_mercury, mercury))); + } + } + + @Override + public String getExtension() { + return ""; + } + + @Override + public String getName() { + return "tool.ability.mercury"; + } + + @Override + public String getFullName() { + return I18n.format(getName()); + } + } + + public static class ExplosionAbility extends ToolAbility { + + float strength; + + public ExplosionAbility(float strength) { + this.strength = strength; + } + + @Override + public void onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { + + ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength); + ex.addAttrib(ExAttrib.ALLDROP); + ex.addAttrib(ExAttrib.NOHURT); + ex.addAttrib(ExAttrib.NOPARTICLE); + ex.doExplosionA(); + ex.doExplosionB(false); + + player.worldObj.createExplosion(player, x + 0.5, y + 0.5, z + 0.5, 0.1F, false); + } + + @Override + public String getExtension() { + return " (" + strength + ")"; + } + + @Override + public String getName() { + return "tool.ability.explosion"; + } + + @Override + public String getFullName() { + return I18n.format(getName()) + getExtension(); + } + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/gui/GUIIGenerator.java b/src/main/java/com/hbm/inventory/gui/GUIIGenerator.java index 783cc93ad..2eee6598f 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIIGenerator.java +++ b/src/main/java/com/hbm/inventory/gui/GUIIGenerator.java @@ -4,11 +4,14 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerIGenerator; import com.hbm.lib.RefStrings; +import com.hbm.packet.AuxButtonPacket; +import com.hbm.packet.PacketDispatcher; import com.hbm.render.util.GaugeUtil; import com.hbm.render.util.GaugeUtil.Gauge; import com.hbm.tileentity.machine.TileEntityMachineIGenerator; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; @@ -16,11 +19,11 @@ import net.minecraft.util.ResourceLocation; public class GUIIGenerator extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/generators/gui_igen.png"); - private TileEntityMachineIGenerator diFurnace; + private TileEntityMachineIGenerator igen; public GUIIGenerator(InventoryPlayer invPlayer, TileEntityMachineIGenerator tedf) { super(new ContainerIGenerator(invPlayer, tedf)); - diFurnace = tedf; + igen = tedf; this.xSize = 188; this.ySize = 222; @@ -30,10 +33,28 @@ public class GUIIGenerator extends GuiInfoContainer { public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); } + + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 24 <= x && guiLeft + 24 + 14 > x && guiTop + 64 < y && guiTop + 64 + 14 >= y) { + + //push pellet + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(igen.xCoord, igen.yCoord, igen.zCoord, 0, 0)); + } + + if(guiLeft + 24 <= x && guiLeft + 24 + 14 > x && guiTop + 100 < y && guiTop + 100 + 14 >= y) { + + //pop pellet + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(igen.xCoord, igen.yCoord, igen.zCoord, 0, 1)); + } + } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); + String name = this.igen.hasCustomInventoryName() ? this.igen.getInventoryName() : I18n.format(this.igen.getInventoryName()); this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 14, this.ySize - 96 + 2, 4210752); @@ -45,16 +66,17 @@ public class GUIIGenerator extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - int[] pellets = new int[] {0,1,0,1,0,0,0,1,2,0,0,2}; - - for(int i = 0; i < pellets.length; i++) { + for(int i = 0; i < igen.pellets.length; i++) { - drawTexturedModalRect(guiLeft + 6, guiTop + 106 - 4 * i, 188, 9 * pellets[i], 14, 9); + if(igen.pellets[i] != null) + drawTexturedModalRect(guiLeft + 6, guiTop + 106 - 4 * i, 188, igen.pellets[i].offset, 14, 9); } + + GaugeUtil.renderGauge(Gauge.BOW_SMALL, guiLeft + 40, guiTop + 26, this.zLevel, igen.getSolidGauge()); - GaugeUtil.renderGauge(Gauge.BAR_SMALL, guiLeft + 76, guiTop + 20, this.zLevel, Math.sin(System.currentTimeMillis() * 0.0025D) * 0.5 + 0.5); - GaugeUtil.renderGauge(Gauge.BAR_SMALL, guiLeft + 76, guiTop + 56, this.zLevel, Math.sin(System.currentTimeMillis() * 0.0025D) * 0.5 + 0.5); - GaugeUtil.renderGauge(Gauge.BAR_SMALL, guiLeft + 76, guiTop + 92, this.zLevel, Math.sin(System.currentTimeMillis() * 0.0025D) * 0.5 + 0.5); + GaugeUtil.renderGauge(Gauge.BAR_SMALL, guiLeft + 76, guiTop + 20, this.zLevel, igen.getTempGauge()); + GaugeUtil.renderGauge(Gauge.BAR_SMALL, guiLeft + 76, guiTop + 56, this.zLevel, igen.getTorqueGauge()); + GaugeUtil.renderGauge(Gauge.BAR_SMALL, guiLeft + 76, guiTop + 92, this.zLevel, igen.getPowerGauge()); GaugeUtil.renderGauge(Gauge.WIDE_SMALL, guiLeft + 148, guiTop + 26, this.zLevel, Math.sin(System.currentTimeMillis() * 0.0025D) * 0.5 + 0.5); GaugeUtil.renderGauge(Gauge.WIDE_SMALL, guiLeft + 148, guiTop + 62, this.zLevel, Math.sin(System.currentTimeMillis() * 0.0025D) * 0.5 + 0.5); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 13fa576a5..23048f250 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1638,6 +1638,8 @@ public class ModItems { public static Item drax; public static Item drax_mk2; public static Item drax_mk3; + public static Item chlorophyte_pickaxe; + public static Item mese_pickaxe; public static Item matchstick; public static Item balefire_and_steel; @@ -3790,6 +3792,14 @@ public class ModItems { .addBreakAbility(new ToolAbility.HammerAbility(3)) .addBreakAbility(new ToolAbility.HammerAbility(4)) .addBreakAbility(new ToolAbility.RecursionAbility(9)).setUnlocalizedName("drax_mk3").setTextureName(RefStrings.MODID + ":drax_mk3"); + chlorophyte_pickaxe = new ItemToolAbility(20F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER) + .addBreakAbility(new ToolAbility.MercuryAbility()).setUnlocalizedName("chlorophyte_pickaxe").setTextureName(RefStrings.MODID + ":chlorophyte_pickaxe"); + mese_pickaxe = new ItemToolAbilityPower(20F, -0.05, MainRegistry.tMatElec, EnumToolType.MINER, 2500000000L, 500000, 10000) + .addBreakAbility(new ToolAbility.ExplosionAbility(2.5F)) + .addBreakAbility(new ToolAbility.ExplosionAbility(5F)) + .addBreakAbility(new ToolAbility.ExplosionAbility(7.5F)) + .addBreakAbility(new ToolAbility.ExplosionAbility(10F)) + .setUnlocalizedName("mese_pickaxe").setTextureName(RefStrings.MODID + ":mese_pickaxe"); mask_of_infamy = new MaskOfInfamy(ArmorMaterial.IRON, 8, 0).setUnlocalizedName("mask_of_infamy").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_of_infamy"); @@ -5518,6 +5528,8 @@ public class ModItems { GameRegistry.registerItem(drax, drax.getUnlocalizedName()); GameRegistry.registerItem(drax_mk2, drax_mk2.getUnlocalizedName()); GameRegistry.registerItem(drax_mk3, drax_mk3.getUnlocalizedName()); + GameRegistry.registerItem(chlorophyte_pickaxe, chlorophyte_pickaxe.getUnlocalizedName()); + GameRegistry.registerItem(mese_pickaxe, mese_pickaxe.getUnlocalizedName()); GameRegistry.registerItem(matchstick, matchstick.getUnlocalizedName()); GameRegistry.registerItem(balefire_and_steel, balefire_and_steel.getUnlocalizedName()); GameRegistry.registerItem(crowbar, crowbar.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 97283ab33..c9df62caa 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -19,6 +19,7 @@ import net.minecraftforge.common.MinecraftForge; import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; import java.util.Random; import com.hbm.blocks.ModBlocks; @@ -188,6 +189,12 @@ public class ClientProxy extends ServerProxy { @Override public void registerItemRenderer() { + + ItemRenderLibrary.init(); + + for(Entry entry : ItemRenderLibrary.renderers.entrySet()) + MinecraftForgeClient.registerItemRenderer(entry.getKey(), entry.getValue()); + //test crap MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.test_container), new ItemRenderTestContainer()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.test_bomb_advanced), new ItemRenderTestBombAdvanced()); @@ -296,8 +303,6 @@ public class ClientProxy extends ServerProxy { MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_wall), new ItemRenderDecoBlock()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_corner), new ItemRenderDecoBlock()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_roof), new ItemRenderDecoBlock()); - MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.machine_selenium), new ItemRendererMachine(2D)); - MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.radiorec), new ItemRendererMachine(1D)); } @Override diff --git a/src/main/java/com/hbm/render/item/ItemRenderBase.java b/src/main/java/com/hbm/render/item/ItemRenderBase.java new file mode 100644 index 000000000..f6632d08e --- /dev/null +++ b/src/main/java/com/hbm/render/item/ItemRenderBase.java @@ -0,0 +1,57 @@ +package com.hbm.render.item; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; + +public abstract class ItemRenderBase implements IItemRenderer { + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + switch(type) { + case EQUIPPED: + case EQUIPPED_FIRST_PERSON: + case ENTITY: + case INVENTORY: + return true; + default: return false; + } + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return type == ItemRenderType.ENTITY && (helper == ItemRendererHelper.ENTITY_BOBBING || helper == ItemRendererHelper.ENTITY_ROTATION); + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + + GL11.glPushMatrix(); + if(type == ItemRenderType.INVENTORY) { + RenderHelper.enableGUIStandardItemLighting(); + GL11.glTranslated(8, 10, 0); + GL11.glRotated(-30, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glScaled(-1, -1, -1); + renderInventory(); + } else { + + if(type != ItemRenderType.ENTITY) + GL11.glTranslated(0.5, 0.25, 0); + else + GL11.glScaled(1.5, 1.5, 1.5); + + GL11.glScaled(0.25, 0.25, 0.25); + GL11.glRotated(90, 0, 1, 0); + renderNonInv(); + } + renderCommon(); + GL11.glPopMatrix(); + } + + public void renderNonInv() { } + public void renderInventory() { } + public void renderCommon() { } +} diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java new file mode 100644 index 000000000..1c2e2ff36 --- /dev/null +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -0,0 +1,141 @@ +package com.hbm.render.item; + +import java.util.HashMap; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class ItemRenderLibrary { + + public static HashMap renderers = new HashMap(); + + public static void init() { + + renderers.put(Item.getItemFromBlock(ModBlocks.machine_cyclotron), new ItemRenderBase() { + public void renderInventory() { + GL11.glScaled(2.25, 2.25, 2.25); + } + public void renderCommon() { + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.cyclotron_tex); ResourceManager.cyclotron.renderPart("Body"); + bindTexture(ResourceManager.cyclotron_ashes); ResourceManager.cyclotron.renderPart("B1"); + bindTexture(ResourceManager.cyclotron_book); ResourceManager.cyclotron.renderPart("B2"); + bindTexture(ResourceManager.cyclotron_gavel); ResourceManager.cyclotron.renderPart("B3"); + bindTexture(ResourceManager.cyclotron_coin); ResourceManager.cyclotron.renderPart("B4"); + GL11.glShadeModel(GL11.GL_FLAT); + }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.machine_centrifuge), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(4.5, 4.5, 4.5); + } + public void renderCommon() { + bindTexture(ResourceManager.centrifuge_new_tex); ResourceManager.centrifuge_new.renderAll(); + }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.machine_gascent), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(4.5, 4.5, 4.5); + } + public void renderCommon() { + bindTexture(ResourceManager.centrifuge_gas_tex); ResourceManager.centrifuge_new.renderAll(); + }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.iter), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -1, 0); + GL11.glScaled(4.5, 4.5, 4.5); + } + public void renderCommon() { + GL11.glScaled(0.25, 0.25, 0.25); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.iter_glass); ResourceManager.iter.renderPart("Windows"); + bindTexture(ResourceManager.iter_motor); ResourceManager.iter.renderPart("Motors"); + bindTexture(ResourceManager.iter_rails); ResourceManager.iter.renderPart("Rails"); + bindTexture(ResourceManager.iter_toroidal); ResourceManager.iter.renderPart("Toroidal"); + bindTexture(ResourceManager.iter_torus); ResourceManager.iter.renderPart("Torus"); + bindTexture(ResourceManager.iter_solenoid); ResourceManager.iter.renderPart("Solenoid"); + GL11.glShadeModel(GL11.GL_FLAT); + }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.machine_press), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(4.5, 4.5, 4.5); + } + public void renderCommon() { + bindTexture(ResourceManager.press_body_tex); ResourceManager.press_body.renderAll(); + GL11.glTranslated(0, 0.5, 0); + bindTexture(ResourceManager.press_head_tex); ResourceManager.press_head.renderAll(); + }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.machine_epress), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(4.5, 4.5, 4.5); + } + public void renderCommon() { + bindTexture(ResourceManager.epress_body_tex); ResourceManager.epress_body.renderAll(); + GL11.glTranslated(0, 1.5, 0); + bindTexture(ResourceManager.epress_head_tex); ResourceManager.epress_head.renderAll(); + }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.machine_crystallizer), new ItemRenderBase() { + public void renderNonInv() { + GL11.glScaled(0.5, 0.5, 0.5); + } + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(1.75, 1.75, 1.75); + } + public void renderCommon() { + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.crystallizer_tex); ResourceManager.crystallizer.renderPart("Body"); + bindTexture(ResourceManager.crystallizer_window_tex); ResourceManager.crystallizer.renderPart("Windows"); + bindTexture(ResourceManager.crystallizer_spinner_tex); ResourceManager.crystallizer.renderPart("Spinner"); + GL11.glShadeModel(GL11.GL_FLAT); + }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.machine_reactor), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -4, 0); + GL11.glScaled(4.5, 4.5, 4.5); + } + public void renderCommon() { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDisable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.breeder_tex); ResourceManager.breeder.renderAll(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_FLAT); + }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.machine_large_turbine), new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -1, 0); + GL11.glScaled(2.5, 2.5, 2.5); + } + public void renderCommon() { + GL11.glRotated(90, 0, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDisable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.turbine_tex); ResourceManager.turbine.renderPart("Body"); + bindTexture(ResourceManager.turbofan_blades_tex); ResourceManager.turbine.renderPart("Blades"); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_FLAT); + }}); + } + + private static void bindTexture(ResourceLocation res) { + Minecraft.getMinecraft().renderEngine.bindTexture(res); + } +} diff --git a/src/main/java/com/hbm/render/item/block/ItemRendererMachine.java b/src/main/java/com/hbm/render/item/block/ItemRendererMachine.java deleted file mode 100644 index eac009d27..000000000 --- a/src/main/java/com/hbm/render/item/block/ItemRendererMachine.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.hbm.render.item.block; - -import org.lwjgl.opengl.GL11; - -import com.hbm.blocks.ModBlocks; -import com.hbm.lib.RefStrings; -import com.hbm.main.ResourceManager; -import com.hbm.render.model.ModelBroadcaster; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; - -public class ItemRendererMachine implements IItemRenderer { - - ///// THIS IS A TEST CLASS. CARVE THIS INTO A BASE CLASS FOR LESS CRAPPY BLOCK ITEM RENDERERS IN THE FUTURE //// - double scale = 1.0D; - private ModelBroadcaster broadcaster; - private static final ResourceLocation broadcasterTex = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelRadioReceiver.png"); - - public ItemRendererMachine(double scale) { - this.scale = scale; - this.broadcaster = new ModelBroadcaster(); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - switch(type) { - case EQUIPPED: - case EQUIPPED_FIRST_PERSON: - case ENTITY: - case INVENTORY: - return true; - default: return false; - } - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - - return type == ItemRenderType.ENTITY && (helper == ItemRendererHelper.ENTITY_ROTATION || helper == ItemRendererHelper.ENTITY_BOBBING); - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - - GL11.glPushMatrix(); - - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - switch(type) { - - case EQUIPPED_FIRST_PERSON: - - GL11.glScaled(0.5, 0.5, 0.5); - GL11.glTranslated(1, 0.5, 0); - GL11.glRotated(180, 0, 1, 0); - - break; - - case EQUIPPED: - - GL11.glTranslated(0.5, 0, 0); - GL11.glRotated(90, 0, 1, 0); - double scaleEq = 0.5; - GL11.glScaled(scaleEq, scaleEq, scaleEq); - - break; - - case ENTITY: - - GL11.glScaled(0.5, 0.5, 0.5); - - break; - - case INVENTORY: - - GL11.glRotated(180, 1, 0, 0); - int scale = 8; - GL11.glTranslated(8, -16, 0); - GL11.glScaled(scale, scale, scale); - - //GL11.glRotated(25, 1, 0, 0); - //GL11.glRotated(45, 0, 1, 0); - - break; - - default: break; - - } - - if(item.getItem() == Item.getItemFromBlock(ModBlocks.machine_selenium)) { - - GL11.glDisable(GL11.GL_CULL_FACE); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.selenium_body_tex); - ResourceManager.selenium_body.renderAll(); - - GL11.glTranslated(0.0D, 1.0D, 0.0D); - - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.selenium_piston_tex); - for(int i = 0; i < 7; i++) { - ResourceManager.selenium_piston.renderAll(); - GL11.glRotatef(360F/7F, 0, 0, 1); - } - - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.selenium_rotor_tex); - ResourceManager.selenium_rotor.renderAll(); - GL11.glEnable(GL11.GL_CULL_FACE); - } - - if(item.getItem() == Item.getItemFromBlock(ModBlocks.radiorec)) { - GL11.glTranslated(0, 1.5, 0); - GL11.glRotated(180, 1, 0, 0); - Minecraft.getMinecraft().renderEngine.bindTexture(broadcasterTex); - broadcaster.renderModel(0.0625F); - } - - GL11.glPopMatrix(); - } - -} diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index 45598ef1e..1d7748b6b 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -100,19 +100,19 @@ public abstract class TileEntityMachineBase extends TileEntity implements ISided } @Override - public ItemStack decrStackSize(int i, int j) { - if(slots[i] != null) + public ItemStack decrStackSize(int slot, int amount) { + if(slots[slot] != null) { - if(slots[i].stackSize <= j) + if(slots[slot].stackSize <= amount) { - ItemStack itemStack = slots[i]; - slots[i] = null; + ItemStack itemStack = slots[slot]; + slots[slot] = null; return itemStack; } - ItemStack itemStack1 = slots[i].splitStack(j); - if (slots[i].stackSize == 0) + ItemStack itemStack1 = slots[slot].splitStack(amount); + if (slots[slot].stackSize == 0) { - slots[i] = null; + slots[slot] = null; } return itemStack1; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java index 44db6506c..7e00e33be 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java @@ -2,11 +2,29 @@ package com.hbm.tileentity.machine; import java.util.List; +import com.google.common.collect.HashBiMap; import com.hbm.interfaces.IConsumer; import com.hbm.interfaces.ISource; +import com.hbm.items.ModItems; import com.hbm.tileentity.TileEntityMachineBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntityFurnace; + public class TileEntityMachineIGenerator extends TileEntityMachineBase implements ISource { + + public long power; + public static final long maxPower = 1000000; + public int lastBurnTime; + public int burnTime; + public int temperature; + public static final int maxTemperature = 1000; + public int torque; + public static final int maxTorque = 10000; + + public IGenRTG[] pellets = new IGenRTG[12]; public TileEntityMachineIGenerator() { super(15); @@ -22,9 +40,170 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement if(!worldObj.isRemote) { + loadFuel(); + rtgAction(); + + if(burnTime > 0) + burnTime --; + + NBTTagCompound data = new NBTTagCompound(); + int[] rtgs = new int[pellets.length]; + + for(int i = 0; i < pellets.length; i++) { + if(pellets[i] != null) + rtgs[i] = pellets[i].ordinal(); + else + rtgs[i] = -1; + } + + data.setIntArray("rtgs", rtgs); + data.setShort("burn", (short) burnTime); + data.setShort("lastBurn", (short) lastBurnTime); + this.networkPack(data, 250); } } + @Override + public void networkUnpack(NBTTagCompound nbt) { + + int[] rtgs = nbt.getIntArray("rtgs"); + + if(rtgs != null) { + for(int i = 0; i < pellets.length; i++) { + + int pellet = rtgs[i]; + if(pellet >= 0 && pellet < IGenRTG.values().length) { + pellets[i] = IGenRTG.values()[pellet]; + } else { + pellets[i] = null; + } + } + } + + this.burnTime = nbt.getShort("burn"); + this.lastBurnTime = nbt.getShort("lastBurn"); + } + + @Override + public void handleButtonPacket(int value, int meta) { + + if(meta == 0) + pushPellet(); + if(meta == 1) + popPellet(); + } + + /** + * Checks for solid fuel and burns it + */ + private void loadFuel() { + + if(this.burnTime <= 0 && slots[0] != null) { + + int time = TileEntityFurnace.getItemBurnTime(slots[0]) / 2; + + if(time > 0) { + + if(slots[0].getItem().hasContainerItem(slots[0]) && slots[0].stackSize == 1) { + slots[0] = slots[0].getItem().getContainerItem(slots[0]); + } else { + this.decrStackSize(0, 1); + } + + this.burnTime = time; + this.lastBurnTime = time; + + this.markDirty(); + } + } + } + + /** + * does the thing with the thermo elements + */ + private void rtgAction() { + + int rtg = 0; + + for(int i = 3; i <= 5; i++) { + + if(slots[i] != null && slots[i].getItem() == ModItems.thermo_element) + rtg += 15; + } + + int pow = Math.min(this.temperature, rtg); + + this.temperature -= pow; + this.power += pow; + } + + /** + * Adds a pellet onto the pile + */ + private void pushPellet() { + + if(pellets[11] != null) + return; + + if(slots[1] != null) { + + IGenRTG pellet = IGenRTG.getPellet(slots[1].getItem()); + + if(pellet != null) { + + for(int i = 0; i < pellets.length; i++) { + + if(pellets[i] == null) { + pellets[i] = pellet; + this.decrStackSize(1, 1); + + this.markDirty(); + return; + } + } + } + } + } + + /** + * Removes a pellet from the bottom of the pile + */ + private void popPellet() { + + if(slots[2] != null) + return; + + if(pellets[0] == null) + return; + + //i don't feel like adding null checks because they won't trigger anyway + slots[2] = new ItemStack(this.rtgPellets.inverse().get(pellets[0])); + + for(int i = 0; i < pellets.length - 1; i++) { + pellets[i] = pellets[i + 1]; + } + + pellets[pellets.length - 1] = null; + + this.markDirty(); + } + + public double getSolidGauge() { + return (double) burnTime / (double) lastBurnTime; + } + + public double getPowerGauge() { + return (double) power / (double) maxPower; + } + + public double getTempGauge() { + return (double) temperature / (double) maxTemperature; + } + + public double getTorqueGauge() { + return (double) torque / (double) maxTorque; + } + @Override public void ffgeuaInit() { // TODO Auto-generated method stub @@ -66,4 +245,61 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement // TODO Auto-generated method stub } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + for(int i = 0; i < pellets.length; i++) { + + short s = nbt.getShort("pellet" + i); + + if(s >= 0 && s < IGenRTG.values().length) { + pellets[i] = IGenRTG.values()[s]; + } else { + pellets[i] = null; + } + } + + this.burnTime = nbt.getInteger("burn"); + this.lastBurnTime = nbt.getInteger("lastBurn"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + for(int i = 0; i < pellets.length; i++) { + + if(pellets[i] != null) { + nbt.setShort("pellet" + i, (short) pellets[i].ordinal()); + } else { + nbt.setShort("pellet" + i, (short)-1); + } + } + + nbt.setInteger("burn", burnTime); + nbt.setInteger("lastBurn", lastBurnTime); + } + + private static HashBiMap rtgPellets = HashBiMap.create(); + + public static enum IGenRTG { + PLUTONIUM(ModItems.pellet_rtg, 0, 5), + URANIUM(ModItems.pellet_rtg_weak, 9, 3), + POLONIUM(ModItems.pellet_rtg_polonium, 18, 25); + + public int offset; + public int heat; + + private IGenRTG(Item item, int offset, int heat) { + rtgPellets.put(item, this); + this.offset = offset; + this.heat = heat; + } + + public static IGenRTG getPellet(Item item) { + return rtgPellets.get(item); + } + } }