From 5618be2d638ba83ceccc0a646c0c5998c61c945f Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 15 Jan 2024 15:51:26 +0100 Subject: [PATCH] missile rendering, fixes --- changelog | 7 + .../hbm/items/machine/ItemMachineUpgrade.java | 78 ------- src/main/java/com/hbm/main/ClientProxy.java | 36 +++- .../render/item/ItemRenderMissileGeneric.java | 192 ++++++++++++++++++ .../render/item/ItemRendererMeteorSword.java | 182 ++++++++++++----- .../tileentity/RenderLaunchPadTier1.java | 190 +---------------- .../hbm/tileentity/IUpgradeInfoProvider.java | 2 + .../machine/TileEntityMachineCyclotron.java | 45 +++- .../machine/TileEntityMachineExcavator.java | 2 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 + 10 files changed, 417 insertions(+), 319 deletions(-) create mode 100644 src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java diff --git a/changelog b/changelog index bec2826a5..7293090d2 100644 --- a/changelog +++ b/changelog @@ -8,9 +8,16 @@ ## Changed * There is now a config option to disable the biome change caused by fallout. The config will also determine whether the biomes are registered at all, which prevents them from conflicting with other mods' biomes when disabled. * Chemical plants now have a timer that starts after loading/unloading fluids using item fluid containers from the input buffers, this creates a delay between switching from loading and unloading, making it possible to retrieve fluids using pipettes. +* In addition to delaying overheats, efficiency upgrades now reduce the cyclotron's coolant demand +* Removed the tooltips from common upgrades, as the info was incomplete and outdated anyway +* Meteorite swords now render their variant glint in first person view +* Meteorite swords are now a lot larger, similar to most other NTM swords +* Non-custom missile items now render in 3D ## Fixed * Fixed trenchmaster armor not doing most of the armor calculation, making it the worst armor * Fixed glowing mushrooms not being able to be bonemealed * Fixed strand caster having one port that does not work with certain rotations * Fixed fallout being able to replace bedrock +* Fixed the upgrade info of the large mining drill being incorrect +* Fixed cyclotron not having the new upgrade info tooltip diff --git a/src/main/java/com/hbm/items/machine/ItemMachineUpgrade.java b/src/main/java/com/hbm/items/machine/ItemMachineUpgrade.java index 3e165b474..99619f968 100644 --- a/src/main/java/com/hbm/items/machine/ItemMachineUpgrade.java +++ b/src/main/java/com/hbm/items/machine/ItemMachineUpgrade.java @@ -57,84 +57,6 @@ public class ItemMachineUpgrade extends Item { } } - if(this.type == UpgradeType.SPEED) { - list.add(EnumChatFormatting.RED + "Mining Drill:"); - list.add("Delay -" + (15 * this.tier) + "% / Consumption +" + (300 * this.tier) + "HE/t"); - list.add(EnumChatFormatting.RED + "Laser Miner:"); - list.add("Delay ÷" + (1 + this.tier) + " / Consumption +" + (625 * this.tier) + "HE/t"); - list.add(EnumChatFormatting.RED + "Electric Furnace:"); - list.add("Delay -" + (25 * this.tier) + "% / Consumption +" + (50 * this.tier) + "HE/t"); - list.add(EnumChatFormatting.RED + "Assembly Machine:"); - list.add("Delay -" + (25 * this.tier) + "% / Consumption +" + (300 * this.tier) + "HE/t"); - list.add(EnumChatFormatting.RED + "Chemical Plant:"); - list.add("Delay -" + (25 * this.tier) + "% / Consumption +" + (300 * this.tier) + "HE/t"); - list.add(EnumChatFormatting.RED + "Oil Wells:"); - list.add("Delay -" + (25 * this.tier) + "% / Consumption +" + (25 * this.tier) + "%"); - list.add(EnumChatFormatting.RED + "Crystallizer:"); - list.add("Delay -" + (20 * this.tier) + "% / Consumption +" + (1000 * this.tier) + "HE/t"); - list.add(EnumChatFormatting.RED + "Cyclotron:"); - list.add("Speed x" + (1 + this.tier)); - list.add(EnumChatFormatting.RED + "Flare Stack:"); - list.add("Speed x" + (1 + this.tier)); - list.add(EnumChatFormatting.RED + "Maxwell:"); - list.add("Damage +" + (0.25 * (double)this.tier) + "dmg/t"); - } - - if(this.type == UpgradeType.EFFECT) { - list.add(EnumChatFormatting.RED + "Mining Drill:"); - list.add("Radius +" + this.tier + "m / Consumption +" + (80 * this.tier) + "HE/t"); - list.add(EnumChatFormatting.RED + "Crystallizer:"); - list.add("+" + (5 * this.tier) + "% chance of not consuming an item / Acid consumption +" + (1000 * this.tier) + "mB"); - list.add(EnumChatFormatting.RED + "Cyclotron:"); - list.add("-" + (100 - 100 / (this.tier + 1)) + "% chance of incrementing overheat counter"); - list.add(EnumChatFormatting.RED + "Flare Stack:"); - list.add("+" + (100 * this.tier / 3) + "% power production"); - list.add(EnumChatFormatting.RED + "Maxwell:"); - list.add("Range +" + (3 * this.tier) + "m"); - } - - if(this.type == UpgradeType.POWER) { - list.add(EnumChatFormatting.RED + "Mining Drill:"); - list.add("Consumption -" + (30 * this.tier) + "HE/t / Delay +" + (5 * this.tier) + "%"); - list.add(EnumChatFormatting.RED + "Electric Furnace:"); - list.add("Consumption -" + (15 * this.tier) + "HE/t / Delay +" + (10 * this.tier) + "%"); - list.add(EnumChatFormatting.RED + "Assembly Machine:"); - list.add("Consumption -" + (30 * this.tier) + "HE/t / Delay +" + (5 * this.tier) + "%"); - list.add(EnumChatFormatting.RED + "Chemical Plant:"); - list.add("Consumption -" + (30 * this.tier) + "HE/t / Delay +" + (5 * this.tier) + "%"); - list.add(EnumChatFormatting.RED + "Oil Wells:"); - list.add("Consumption -" + (25 * this.tier) + "% / Delay +" + (10 * this.tier) + "%"); - list.add(EnumChatFormatting.RED + "Cyclotron:"); - list.add("Consumption -" + (100 * this.tier) + "kHE/t"); - list.add(EnumChatFormatting.RED + "Maxwell:"); - list.add("Consumption -" + (150 * this.tier) + "HE/t"); - list.add("Consumption when firing -" + (1500 * this.tier) + "HE/t"); - } - - if(this == ModItems.upgrade_fortune_1) { - list.add(EnumChatFormatting.RED + "Mining Drill:"); - list.add("Fortune +1 / Delay +15"); - } - - if(this == ModItems.upgrade_fortune_2) { - list.add(EnumChatFormatting.RED + "Mining Drill:"); - list.add("Fortune +2 / Delay +30"); - } - - if(this == ModItems.upgrade_fortune_3) { - list.add(EnumChatFormatting.RED + "Mining Drill:"); - list.add("Fortune +3 / Delay +45"); - } - - if(this.type == UpgradeType.AFTERBURN) { - list.add(EnumChatFormatting.RED + "Turbofan:"); - list.add("Production x" + (this.tier + 1) + " / Consumption x" + (this.tier + 2)); - list.add(EnumChatFormatting.RED + "Maxwell:"); - list.add("Afterburn +" + (this.tier * 3) + "s"); - list.add(EnumChatFormatting.RED + "Oil Wells:"); - list.add("Burn " + (this.tier * 10) + "mB of gas for " + (this.tier * 50) + "HE/t"); - } - if(this == ModItems.upgrade_radius) { list.add(EnumChatFormatting.RED + "Forcefield Range Upgrade"); list.add("Radius +16 / Consumption +500"); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index e323183b7..8116119b3 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -41,6 +41,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; + import java.util.Random; import com.hbm.blocks.ModBlocks; @@ -90,6 +91,7 @@ import com.hbm.render.entity.mob.*; import com.hbm.render.entity.projectile.*; import com.hbm.render.entity.rocket.*; import com.hbm.render.item.*; +import com.hbm.render.item.ItemRenderMissileGeneric.RenderMissileType; import com.hbm.render.item.block.*; import com.hbm.render.item.weapon.*; import com.hbm.render.loader.HmfModelLoader; @@ -415,10 +417,36 @@ public class ClientProxy extends ServerProxy { MinecraftForgeClient.registerItemRenderer(ModItems.cmb_sword, new ItemRenderTransformer(rtp, ttp_high, stp, rfp, tfp, sfp, rir, tir, sir)); MinecraftForgeClient.registerItemRenderer(ModItems.dnt_sword, new ItemRenderTransformer(rtp, ttp_high, stp, rfp, tfp, sfp, rir, tir, sir)); - /*for(ItemSwordMeteorite sword : ItemSwordMeteorite.swords) { - MinecraftForgeClient.registerItemRenderer(sword, new ItemRenderTransformer(rtp, ttp_high, stp, rfp, tfp, sfp, rir, tir, sir)); - }*/ - + ItemRenderMissileGeneric.init(); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_taint, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_micro, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_bhole, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_schrabidium, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_emp, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_stealth, new ItemRenderMissileGeneric(RenderMissileType.TYPE_STEALTH)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_generic, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_incendiary, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_cluster, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_buster, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_decoy, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_anti_ballistic, new ItemRenderMissileGeneric(RenderMissileType.TYPE_ABM)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_incendiary_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_cluster_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_buster_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_emp_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_burst, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER3)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_inferno, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER3)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_rain, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER3)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_drill, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER3)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_nuclear, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_nuclear_cluster, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_volcano, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_endo, new ItemRenderMissileGeneric(RenderMissileType.TYPE_THERMAL)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_exo, new ItemRenderMissileGeneric(RenderMissileType.TYPE_THERMAL)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_doomsday, new ItemRenderMissileGeneric(RenderMissileType.TYPE_DOOMSDAY)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_carrier, new ItemRenderMissileGeneric(RenderMissileType.TYPE_CARRIER)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_shuttle, new ItemRenderMissileGeneric(RenderMissileType.TYPE_ROBIN)); //test crap MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.test_bomb_advanced), new ItemRenderTestBombAdvanced()); diff --git a/src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java b/src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java new file mode 100644 index 000000000..64763d78b --- /dev/null +++ b/src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java @@ -0,0 +1,192 @@ +package com.hbm.render.item; + +import java.util.HashMap; +import java.util.function.Consumer; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ModItems; +import com.hbm.main.ResourceManager; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.model.IModelCustom; + +public class ItemRenderMissileGeneric implements IItemRenderer { + + public static HashMap> renderers = new HashMap(); + + protected RenderMissileType type; + + public static enum RenderMissileType { + TYPE_TIER0, + TYPE_TIER1, + TYPE_TIER2, + TYPE_TIER3, + TYPE_STEALTH, + TYPE_ABM, + TYPE_NUCLEAR, + TYPE_THERMAL, + TYPE_DOOMSDAY, + TYPE_CARRIER, + TYPE_ROBIN + } + + public ItemRenderMissileGeneric(RenderMissileType type) { + this.type = type; + } + + @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 helper == ItemRendererHelper.ENTITY_BOBBING || helper == ItemRendererHelper.ENTITY_ROTATION; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + + Consumer renderer = renderers.get(new ComparableStack(item).makeSingular()); + if(renderer == null) return; + + GL11.glPushMatrix(); + + double guiScale = 1; + double guiOffset = 0; + + switch(this.type) { + case TYPE_TIER0: guiScale = 2.25D; guiOffset = 7.5D; break; + case TYPE_TIER1: guiScale = 2.5D; guiOffset = 8.5D; break; + case TYPE_TIER2: guiScale = 2D; guiOffset = 6.5D; break; + case TYPE_TIER3: guiScale = 1.25D; guiOffset = 1D; break; + case TYPE_STEALTH: guiScale = 1.75D; guiOffset = 4.75D; break; + case TYPE_ABM: guiScale = 2.25D; guiOffset = 7D; break; + case TYPE_NUCLEAR: guiScale = 1.75D; guiOffset = 4D; break; + case TYPE_THERMAL: guiScale = 1.75D; guiOffset = 4.5D; break; + case TYPE_DOOMSDAY: guiScale = 1.5D; guiOffset = 3D; break; + case TYPE_CARRIER: guiScale = 0.625D; guiOffset = -17D; break; + case TYPE_ROBIN: guiScale = 1.25D; guiOffset = 2D; break; + } + + switch(type) { + case EQUIPPED: + double s = 0.15; + GL11.glTranslated(0.5, -0.25, 0); + GL11.glScaled(s, s, s); + break; + case EQUIPPED_FIRST_PERSON: + double heldScale = 0.1; + GL11.glTranslated(0.5, 0.25, 0); + GL11.glScaled(heldScale, heldScale, heldScale); + break; + case ENTITY: + double s2 = 0.15; + GL11.glScaled(s2, s2, s2); + break; + case INVENTORY: + RenderHelper.enableGUIStandardItemLighting(); + GL11.glScaled(guiScale, guiScale, guiScale); + GL11.glRotated(135, 0, 0, 1); + GL11.glRotatef(System.currentTimeMillis() / 15 % 360, 0, 1, 0); + GL11.glTranslated(0, -16 + guiOffset, 0); + break; + default: break; + } + + GL11.glDisable(GL11.GL_CULL_FACE); + renderer.accept(Minecraft.getMinecraft().renderEngine); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glPopMatrix(); + } + + public static Consumer generateStandard(ResourceLocation texture, IModelCustom model) { return generateWithScale(texture, model, 1F); } + public static Consumer generateLarge(ResourceLocation texture, IModelCustom model) { return generateWithScale(texture, model, 1.5F); } + public static Consumer generateDouble(ResourceLocation texture, IModelCustom model) { return generateWithScale(texture, model, 2F); } + + public static Consumer generateWithScale(ResourceLocation texture, IModelCustom model, float scale) { + return x -> { + GL11.glScalef(scale, scale, scale); + GL11.glShadeModel(GL11.GL_SMOOTH); + x.bindTexture(texture); model.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }; + } + + public static void init() { + + renderers.put(new ComparableStack(ModItems.missile_taint), generateDouble(ResourceManager.missileTaint_tex, ResourceManager.missileTaint)); + renderers.put(new ComparableStack(ModItems.missile_micro), generateDouble(ResourceManager.missileMicro_tex, ResourceManager.missileTaint)); + renderers.put(new ComparableStack(ModItems.missile_bhole), generateDouble(ResourceManager.missileMicroBHole_tex, ResourceManager.missileTaint)); + renderers.put(new ComparableStack(ModItems.missile_schrabidium), generateDouble(ResourceManager.missileMicroSchrab_tex, ResourceManager.missileTaint)); + renderers.put(new ComparableStack(ModItems.missile_emp), generateDouble(ResourceManager.missileMicroEMP_tex, ResourceManager.missileTaint)); + + renderers.put(new ComparableStack(ModItems.missile_stealth), x -> { + GL11.glShadeModel(GL11.GL_SMOOTH); + x.bindTexture(ResourceManager.missileStealth_tex); ResourceManager.missileStealth.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }); + + renderers.put(new ComparableStack(ModItems.missile_generic), generateStandard(ResourceManager.missileV2_HE_tex, ResourceManager.missileV2)); + renderers.put(new ComparableStack(ModItems.missile_incendiary), generateStandard(ResourceManager.missileV2_IN_tex, ResourceManager.missileV2)); + renderers.put(new ComparableStack(ModItems.missile_cluster), generateStandard(ResourceManager.missileV2_CL_tex, ResourceManager.missileV2)); + renderers.put(new ComparableStack(ModItems.missile_buster), generateStandard(ResourceManager.missileV2_BU_tex, ResourceManager.missileV2)); + renderers.put(new ComparableStack(ModItems.missile_decoy), generateStandard(ResourceManager.missileV2_decoy_tex, ResourceManager.missileV2)); + renderers.put(new ComparableStack(ModItems.missile_anti_ballistic), generateStandard(ResourceManager.missileAA_tex, ResourceManager.missileABM)); + + renderers.put(new ComparableStack(ModItems.missile_strong), generateLarge(ResourceManager.missileStrong_HE_tex, ResourceManager.missileStrong)); + renderers.put(new ComparableStack(ModItems.missile_incendiary_strong), generateLarge(ResourceManager.missileStrong_IN_tex, ResourceManager.missileStrong)); + renderers.put(new ComparableStack(ModItems.missile_cluster_strong), generateLarge(ResourceManager.missileStrong_CL_tex, ResourceManager.missileStrong)); + renderers.put(new ComparableStack(ModItems.missile_buster_strong), generateLarge(ResourceManager.missileStrong_BU_tex, ResourceManager.missileStrong)); + renderers.put(new ComparableStack(ModItems.missile_emp_strong), generateLarge(ResourceManager.missileStrong_EMP_tex, ResourceManager.missileStrong)); + + renderers.put(new ComparableStack(ModItems.missile_burst), generateStandard(ResourceManager.missileHuge_HE_tex, ResourceManager.missileHuge)); + renderers.put(new ComparableStack(ModItems.missile_inferno), generateStandard(ResourceManager.missileHuge_IN_tex, ResourceManager.missileHuge)); + renderers.put(new ComparableStack(ModItems.missile_rain), generateStandard(ResourceManager.missileHuge_CL_tex, ResourceManager.missileHuge)); + renderers.put(new ComparableStack(ModItems.missile_drill), generateStandard(ResourceManager.missileHuge_BU_tex, ResourceManager.missileHuge)); + + renderers.put(new ComparableStack(ModItems.missile_nuclear), generateLarge(ResourceManager.missileNuclear_tex, ResourceManager.missileNuclear)); + renderers.put(new ComparableStack(ModItems.missile_nuclear_cluster), generateLarge(ResourceManager.missileMIRV_tex, ResourceManager.missileNuclear)); + renderers.put(new ComparableStack(ModItems.missile_volcano), generateLarge(ResourceManager.missileVolcano_tex, ResourceManager.missileNuclear)); + + renderers.put(new ComparableStack(ModItems.missile_endo), generateLarge(ResourceManager.missileEndo_tex, ResourceManager.missileThermo)); + renderers.put(new ComparableStack(ModItems.missile_exo), generateLarge(ResourceManager.missileExo_tex, ResourceManager.missileThermo)); + + renderers.put(new ComparableStack(ModItems.missile_doomsday), generateDouble(ResourceManager.missileDoomsday_tex, ResourceManager.missileDoomsday)); + + renderers.put(new ComparableStack(ModItems.missile_carrier), x -> { + GL11.glScalef(2F, 2F, 2F); + x.bindTexture(ResourceManager.missileCarrier_tex); + ResourceManager.missileCarrier.renderAll(); + GL11.glTranslated(0.0D, 0.5D, 0.0D); + GL11.glTranslated(1.25D, 0.0D, 0.0D); + x.bindTexture(ResourceManager.missileBooster_tex); + ResourceManager.missileBooster.renderAll(); + GL11.glTranslated(-2.5D, 0.0D, 0.0D); + ResourceManager.missileBooster.renderAll(); + GL11.glTranslated(1.25D, 0.0D, 0.0D); + GL11.glTranslated(0.0D, 0.0D, 1.25D); + ResourceManager.missileBooster.renderAll(); + GL11.glTranslated(0.0D, 0.0D, -2.5D); + ResourceManager.missileBooster.renderAll(); + GL11.glTranslated(0.0D, 0.0D, 1.25D); + }); + + renderers.put(new ComparableStack(ModItems.missile_shuttle), generateStandard(ResourceManager.missileShuttle_tex, ResourceManager.missileShuttle)); + } +} diff --git a/src/main/java/com/hbm/render/item/ItemRendererMeteorSword.java b/src/main/java/com/hbm/render/item/ItemRendererMeteorSword.java index fa0dc5387..27834f8e0 100644 --- a/src/main/java/com/hbm/render/item/ItemRendererMeteorSword.java +++ b/src/main/java/com/hbm/render/item/ItemRendererMeteorSword.java @@ -6,10 +6,14 @@ import com.hbm.render.util.RenderItemStack; import com.hbm.render.util.RenderMiscEffects; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; import net.minecraftforge.client.IItemRenderer; public class ItemRendererMeteorSword implements IItemRenderer { @@ -17,16 +21,16 @@ public class ItemRendererMeteorSword implements IItemRenderer { float r; float g; float b; - + public ItemRendererMeteorSword(float r, float g, float b) { this.r = r; this.g = g; this.b = b; } - + @Override public boolean handleRenderType(ItemStack stack, ItemRenderType type) { - return type == ItemRenderType.INVENTORY; + return type != ItemRenderType.ENTITY; } @Override @@ -39,56 +43,138 @@ public class ItemRendererMeteorSword implements IItemRenderer { GL11.glPushMatrix(); RenderHelper.enableGUIStandardItemLighting(); - Minecraft mc = Minecraft.getMinecraft(); - RenderItemStack.renderItem.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, item, 0, 0); + switch(type) { - mc.renderEngine.bindTexture(RenderMiscEffects.glint); + case EQUIPPED_FIRST_PERSON: + GL11.glRotated(180, 0, 1, 0); + GL11.glRotated(-90, 0, 0, 1); + GL11.glTranslated(0.5, 0.5, 0); + GL11.glTranslated(-0.5, -0.5, 0); + GL11.glRotated(180, 0, 1, 0); + GL11.glRotated(-90, 0, 0, 1); + GL11.glTranslated(0.5, 0.5, 0); + GL11.glScaled(1.36 * 2, 1.36 * 2, 0.68 * 2); + GL11.glTranslated(-0.5, -0.5, 0.25); + break; + case EQUIPPED: + GL11.glRotated(180, 0, 1, 0); + GL11.glRotated(-90, 0, 0, 1); + GL11.glTranslated(0.2, 0.55, 0); + GL11.glRotated(45, 0, 0, 1); + GL11.glRotated(180, 0, 1, 0); + GL11.glRotated(-45, 0, 0, 1); + GL11.glScaled(1.7, 1.7, 0.85); + break; + case INVENTORY: + break; + + default: break; + } - GL11.glDepthFunc(GL11.GL_EQUAL); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDepthMask(false); - GL11.glEnable(GL11.GL_ALPHA_TEST); - GL11.glEnable(GL11.GL_BLEND); - - for (int j1 = 0; j1 < 2; ++j1) { - OpenGlHelper.glBlendFunc(772, 1, 0, 0); - float f = 0.00390625F; - float f1 = 0.00390625F; - float f2 = (float)(Minecraft.getSystemTime() % (long)(3000 + j1 * 1873)) / (3000.0F + (float)(j1 * 1873)) * 256.0F; - float f3 = 0.0F; - Tessellator tessellator = Tessellator.instance; - float f4 = 4.0F; + if(data.length > 1 && data[1] instanceof EntityLivingBase) { + EntityLivingBase entity = (EntityLivingBase) data[1]; + IIcon iicon = entity.getItemIcon(item, 0); - if (j1 == 1) - { - f4 = -1.0F; - } - - float in = 0.36F; - - GL11.glColor4f(r * in, g * in, b * in, 1.0F); - - int p_77018_2_ = 0; - int p_77018_4_ = 16; - int p_77018_3_ = 0; - int p_77018_5_ = 16; - int zLevel = 0; + if(iicon == null) { + return; + } - tessellator.startDrawingQuads(); - tessellator.addVertexWithUV((double)(p_77018_2_ + 0), (double)(p_77018_3_ + p_77018_5_), (double)zLevel, (double)((f2 + (float)p_77018_5_ * f4) * f), (double)((f3 + (float)p_77018_5_) * f1)); - tessellator.addVertexWithUV((double)(p_77018_2_ + p_77018_4_), (double)(p_77018_3_ + p_77018_5_), (double)zLevel, (double)((f2 + (float)p_77018_4_ + (float)p_77018_5_ * f4) * f), (double)((f3 + (float)p_77018_5_) * f1)); - tessellator.addVertexWithUV((double)(p_77018_2_ + p_77018_4_), (double)(p_77018_3_ + 0), (double)zLevel, (double)((f2 + (float)p_77018_4_) * f), (double)((f3 + 0.0F) * f1)); - tessellator.addVertexWithUV((double)(p_77018_2_ + 0), (double)(p_77018_3_ + 0), (double)zLevel, (double)((f2 + 0.0F) * f), (double)((f3 + 0.0F) * f1)); - tessellator.draw(); - } + Minecraft.getMinecraft().getTextureManager().bindTexture(Minecraft.getMinecraft().getTextureManager().getResourceLocation(item.getItemSpriteNumber())); + TextureUtil.func_152777_a(false, false, 1.0F); + Tessellator tessellator = Tessellator.instance; + ItemRenderer.renderItemIn2D(tessellator, iicon.getMaxU(), iicon.getMinV(), iicon.getMinU(), iicon.getMaxV(), iicon.getIconWidth(), iicon.getIconHeight(), 0.0625F); + renderGlint3D(tessellator, 0.0625F); + } else { + RenderItemStack.renderItemStackNoEffect(0, 0, 0, item); + renderGlintFlat(); + } - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glDepthMask(true); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_ALPHA_TEST); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDepthFunc(GL11.GL_LEQUAL); - GL11.glPopMatrix(); } + + public void renderGlintFlat() { + + Minecraft mc = Minecraft.getMinecraft(); + mc.renderEngine.bindTexture(RenderMiscEffects.glint); + + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + + for(int j1 = 0; j1 < 2; ++j1) { + OpenGlHelper.glBlendFunc(772, 1, 0, 0); + float scaleU = 0.00390625F; + float scaleV = 0.00390625F; + float anim = (float) (Minecraft.getSystemTime() % (long) (3000 + j1 * 1873)) / (3000.0F + (float) (j1 * 1873)) * 256.0F; + float offsetV = 0.0F; + Tessellator tessellator = Tessellator.instance; + float sizeMultU = 4.0F; + + if(j1 == 1) { + sizeMultU = -1.0F; + } + + float in = 0.36F; + GL11.glColor4f(r * in, g * in, b * in, 1.0F); + + int x = 0; + int sizeX = 16; + int y = 0; + int sizeY = 16; + int zLevel = 0; + + tessellator.startDrawingQuads(); + tessellator.addVertexWithUV(x + 0, y + sizeY, zLevel, (anim + sizeY * sizeMultU) * scaleU, (offsetV + sizeY) * scaleV); + tessellator.addVertexWithUV(x + sizeX, y + sizeY, zLevel, (anim + sizeX + sizeY * sizeMultU) * scaleU, (offsetV + sizeY) * scaleV); + tessellator.addVertexWithUV(x + sizeX, y + 0, zLevel, (anim + sizeX) * scaleU, (offsetV + 0.0F) * scaleV); + tessellator.addVertexWithUV(x + 0, y + 0, zLevel, (anim + 0.0F) * scaleU, (offsetV + 0.0F) * scaleV); + tessellator.draw(); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + public void renderGlint3D(Tessellator tessellator, float depth) { + + Minecraft mc = Minecraft.getMinecraft(); + mc.renderEngine.bindTexture(RenderMiscEffects.glint); + + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + + float in = 0.36F; + GL11.glColor4f(r * in, g * in, b * in, 1.0F); + + GL11.glMatrixMode(GL11.GL_TEXTURE); + + GL11.glPushMatrix(); + float scale = 0.125F; + GL11.glScalef(scale, scale, scale); + float offset = (float) (Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; + GL11.glTranslatef(offset, 0.0F, 0.0F); + GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); + ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, depth); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(scale, scale, scale); + offset = (float) (Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; + GL11.glTranslatef(-offset, 0.0F, 0.0F); + GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); + ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, depth); + GL11.glPopMatrix(); + + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } } diff --git a/src/main/java/com/hbm/render/tileentity/RenderLaunchPadTier1.java b/src/main/java/com/hbm/render/tileentity/RenderLaunchPadTier1.java index f2b5f3cb8..fe97935ec 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderLaunchPadTier1.java +++ b/src/main/java/com/hbm/render/tileentity/RenderLaunchPadTier1.java @@ -1,11 +1,15 @@ package com.hbm.render.tileentity; +import java.util.function.Consumer; + import org.lwjgl.opengl.GL11; -import com.hbm.items.ModItems; +import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderMissileGeneric; import com.hbm.tileentity.bomb.TileEntityLaunchPad; +import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -29,188 +33,8 @@ public class RenderLaunchPadTier1 extends TileEntitySpecialRenderer { if(toRender != null) { GL11.glTranslated(0, 1, 0); - - //TODO: add a registry for missile rendering to be reused here and for the entity renderer - if(toRender.getItem() == ModItems.missile_generic) { - bindTexture(ResourceManager.missileV2_HE_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileV2.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_decoy) { - bindTexture(ResourceManager.missileV2_decoy_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileV2.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_stealth) { - bindTexture(ResourceManager.missileStealth_tex); - ResourceManager.missileStealth.renderAll(); - } - if(toRender.getItem() == ModItems.missile_strong) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileStrong_HE_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileStrong.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_cluster) { - GL11.glScalef(1.0F, 1.0F, 1.0F); - bindTexture(ResourceManager.missileV2_CL_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileV2.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_nuclear) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileNuclear_tex); - ResourceManager.missileNuclear.renderAll(); - } - if(toRender.getItem() == ModItems.missile_incendiary) { - GL11.glScalef(1.0F, 1.0F, 1.0F); - bindTexture(ResourceManager.missileV2_IN_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileV2.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_buster) { - GL11.glScalef(1.0F, 1.0F, 1.0F); - bindTexture(ResourceManager.missileV2_BU_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileV2.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_incendiary_strong) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileStrong_IN_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileStrong.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_cluster_strong) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileStrong_CL_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileStrong.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_buster_strong) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileStrong_BU_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileStrong.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_burst) { - bindTexture(ResourceManager.missileHuge_HE_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileHuge.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_inferno) { - bindTexture(ResourceManager.missileHuge_IN_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileHuge.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_rain) { - bindTexture(ResourceManager.missileHuge_CL_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileHuge.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_drill) { - bindTexture(ResourceManager.missileHuge_BU_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileHuge.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_endo) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileEndo_tex); - ResourceManager.missileThermo.renderAll(); - } - if(toRender.getItem() == ModItems.missile_exo) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileExo_tex); - ResourceManager.missileThermo.renderAll(); - } - if(toRender.getItem() == ModItems.missile_nuclear_cluster) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileMIRV_tex); - ResourceManager.missileNuclear.renderAll(); - } - if(toRender.getItem() == ModItems.missile_doomsday) { - GL11.glScalef(2F, 2F, 2F); - bindTexture(ResourceManager.missileDoomsday_tex); - ResourceManager.missileDoomsday.renderAll(); - } - if(toRender.getItem() == ModItems.missile_taint) { - GL11.glScalef(2F, 2F, 2F); - bindTexture(ResourceManager.missileTaint_tex); - ResourceManager.missileTaint.renderAll(); - } - if(toRender.getItem() == ModItems.missile_micro) { - GL11.glScalef(2F, 2F, 2F); - bindTexture(ResourceManager.missileMicro_tex); - ResourceManager.missileTaint.renderAll(); - } - if(toRender.getItem() == ModItems.missile_carrier) { - GL11.glScalef(2F, 2F, 2F); - bindTexture(ResourceManager.missileCarrier_tex); - ResourceManager.missileCarrier.renderAll(); - GL11.glTranslated(0.0D, 0.5D, 0.0D); - GL11.glTranslated(1.25D, 0.0D, 0.0D); - bindTexture(ResourceManager.missileBooster_tex); - ResourceManager.missileBooster.renderAll(); - GL11.glTranslated(-2.5D, 0.0D, 0.0D); - ResourceManager.missileBooster.renderAll(); - GL11.glTranslated(1.25D, 0.0D, 0.0D); - GL11.glTranslated(0.0D, 0.0D, 1.25D); - ResourceManager.missileBooster.renderAll(); - GL11.glTranslated(0.0D, 0.0D, -2.5D); - ResourceManager.missileBooster.renderAll(); - GL11.glTranslated(0.0D, 0.0D, 1.25D); - } - if(toRender.getItem() == ModItems.missile_anti_ballistic) { - GL11.glScalef(1.0F, 1.0F, 1.0F); - bindTexture(ResourceManager.missileAA_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileABM.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_bhole) { - GL11.glScalef(2F, 2F, 2F); - bindTexture(ResourceManager.missileMicroBHole_tex); - ResourceManager.missileTaint.renderAll(); - } - if(toRender.getItem() == ModItems.missile_schrabidium) { - GL11.glScalef(2F, 2F, 2F); - bindTexture(ResourceManager.missileMicroSchrab_tex); - ResourceManager.missileTaint.renderAll(); - } - if(toRender.getItem() == ModItems.missile_emp) { - GL11.glScalef(2F, 2F, 2F); - bindTexture(ResourceManager.missileMicroEMP_tex); - ResourceManager.missileTaint.renderAll(); - } - if(toRender.getItem() == ModItems.missile_emp_strong) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileStrong_EMP_tex); - GL11.glShadeModel(GL11.GL_SMOOTH); - ResourceManager.missileStrong.renderAll(); - GL11.glShadeModel(GL11.GL_FLAT); - } - if(toRender.getItem() == ModItems.missile_volcano) { - GL11.glScalef(1.5F, 1.5F, 1.5F); - bindTexture(ResourceManager.missileVolcano_tex); - ResourceManager.missileNuclear.renderAll(); - } - if(toRender.getItem() == ModItems.missile_shuttle) { - GL11.glScalef(1.0F, 1.0F, 1.0F); - bindTexture(ResourceManager.missileShuttle_tex); - ResourceManager.missileShuttle.renderAll(); - } + Consumer renderer = ItemRenderMissileGeneric.renderers.get(new ComparableStack(toRender).makeSingular()); + renderer.accept(this.field_147501_a.field_147553_e); } } diff --git a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java index f1a420b5f..90a348e1c 100644 --- a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java +++ b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java @@ -22,8 +22,10 @@ public interface IUpgradeInfoProvider { public static final String KEY_ACID = "upgrade.acid"; public static final String KEY_BURN = "upgrade.burn"; public static final String KEY_CONSUMPTION = "upgrade.consumption"; + public static final String KEY_COOLANT_CONSUMPTION = "upgrade.coolantConsumption"; public static final String KEY_DELAY = "upgrade.delay"; public static final String KEY_EFFICIENCY = "upgrade.efficiency"; public static final String KEY_FORTUNE = "upgrade.fortune"; + public static final String KEY_OVERHEAT_CHANCE = "upgrade.overheatChance"; public static final String KEY_RANGE = "upgrade.range"; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index 9d30a9f22..f5a489a8c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import java.util.List; import java.util.Map.Entry; +import com.hbm.blocks.ModBlocks; import com.hbm.config.BombConfig; import com.hbm.entity.effect.EntityBlackHole; import com.hbm.entity.logic.EntityBalefire; @@ -21,12 +22,15 @@ import com.hbm.inventory.gui.GUIMachineCyclotron; import com.hbm.inventory.recipes.CyclotronRecipes; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IConditionalInvAccess; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; @@ -42,14 +46,15 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IFluidSource, IFluidAcceptor, IEnergyUser, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess { +public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IFluidSource, IFluidAcceptor, IEnergyUser, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider { public long power; public static final long maxPower = 100000000; - public int consumption = 1000000; + public int consumption = 1_000_000; public boolean isOn; @@ -98,7 +103,7 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements if(isOn) { - int defConsumption = consumption - 100000 * getConsumption(); + int defConsumption = consumption - 100_000 * getConsumption(); if(canProcess() && power >= defConsumption) { @@ -111,14 +116,16 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements this.markDirty(); } + int safety = this.getSafety(); + if(coolant.getFill() > 0) { countdown = 0; - if(worldObj.rand.nextInt(3) == 0) + if(worldObj.rand.nextInt(3 * safety) == 0) coolant.setFill(coolant.getFill() - 1); - } else if(worldObj.rand.nextInt(this.getSafety()) == 0) { + } else if(worldObj.rand.nextInt(safety) == 0) { countdown++; @@ -576,4 +583,32 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements return new int[] {6, 7, 8}; } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.EFFECT; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_cyclotron)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 100 / (level + 1)) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 10) + "%")); + } + if(type == UpgradeType.EFFECT) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_COOLANT_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_OVERHEAT_CHANCE, "-" + (100 - 100 / (level + 1)) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.EFFECT) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index 87ba3eb7f..04064d367 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -852,7 +852,7 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_excavator)); if(type == UpgradeType.SPEED) { - info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 100 / (level / 2 + 1)) + "%")); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 200 / (level + 2)) + "%")); info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); } if(type == UpgradeType.POWER) { diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 1cb4290c0..1ab2a42b8 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5668,9 +5668,11 @@ turret.players=Target Players: %s upgrade.acid=Acid required %s upgrade.burn=Burn %smb/t for %sHE upgrade.consumption=Consumption %s +upgrade.coolantConsumption=Coolant Consumption %s upgrade.delay=Process time %s upgrade.efficiency=Efficiency %s upgrade.fortune=Fortune %s +upgrade.overheatChance=Overheat chance %s upgrade.range=Range %s upgrade.gui.title=§lAcceptable Upgrades:§r