diff --git a/changelog b/changelog index cd7bbd560..9c2a128f4 100644 --- a/changelog +++ b/changelog @@ -1,7 +1,12 @@ ## Changed * Particle detectors now print an error for when the recipe could not be completed +* Removed "no ore dict data" line from tooltips with extended view enabled +* Added a client config called `GUN_ANIMATION_SPEED` which allows the speed of gun animations to be changed + * Mostly for debugging, since it only applies to the bus animation system, things like smoke trails and muzzle flashes are unaffected ## Fixed * Fixed items being annihilated when shift clicking them into the particle source * Fixed packet optimization not allowing packets to be sent when the day night cycle is halted -* Fixed particle detectors not always using power when they should \ No newline at end of file +* Fixed particle detectors not always using power when they should +* Fixed rotary furnace voiding low pressure steam when dealing with input numbers not divisible by 100 +* Fixed state leak causing smoke from the right akimbo weapon to glow when the first one is fired \ No newline at end of file diff --git a/src/main/java/com/hbm/config/ClientConfig.java b/src/main/java/com/hbm/config/ClientConfig.java index 9165031d4..4d171cad7 100644 --- a/src/main/java/com/hbm/config/ClientConfig.java +++ b/src/main/java/com/hbm/config/ClientConfig.java @@ -32,6 +32,7 @@ public class ClientConfig { public static ConfigWrapper GUN_ANIMS_LEGACY = new ConfigWrapper(false); public static ConfigWrapper GUN_MODEL_FOV = new ConfigWrapper(false); public static ConfigWrapper GUN_VISUAL_RECOIL = new ConfigWrapper(true); + public static ConfigWrapper GUN_ANIMATION_SPEED = new ConfigWrapper(1D); public static ConfigWrapper ITEM_TOOLTIP_SHOW_OREDICT = new ConfigWrapper(true); public static ConfigWrapper ITEM_TOOLTIP_SHOW_CUSTOM_NUKE = new ConfigWrapper(true); public static ConfigWrapper MAIN_MENU_WACKY_SPLASHES = new ConfigWrapper(true); @@ -50,6 +51,7 @@ public class ClientConfig { configMap.put("GUN_ANIMS_LEGACY", GUN_ANIMS_LEGACY); configMap.put("GUN_MODEL_FOV", GUN_MODEL_FOV); configMap.put("GUN_VISUAL_RECOIL", GUN_VISUAL_RECOIL); + configMap.put("GUN_ANIMATION_SPEED", GUN_ANIMATION_SPEED); configMap.put("ITEM_TOOLTIP_SHOW_OREDICT", ITEM_TOOLTIP_SHOW_OREDICT); configMap.put("ITEM_TOOLTIP_SHOW_CUSTOM_NUKE", ITEM_TOOLTIP_SHOW_CUSTOM_NUKE); configMap.put("MAIN_MENU_WACKY_SPLASHES", MAIN_MENU_WACKY_SPLASHES); diff --git a/src/main/java/com/hbm/items/ItemCustomLore.java b/src/main/java/com/hbm/items/ItemCustomLore.java index 10cf5461b..f5ea42970 100644 --- a/src/main/java/com/hbm/items/ItemCustomLore.java +++ b/src/main/java/com/hbm/items/ItemCustomLore.java @@ -109,7 +109,7 @@ public class ItemCustomLore extends Item { @Override public String getItemStackDisplayName(ItemStack stack) { - if(stack.getItem() == ModItems.undefined && stack.getItemDamage() != 99) return ("" + StatCollector.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name")).trim(); + if(stack.getItem() != ModItems.undefined || stack.getItemDamage() != 99) return ("" + StatCollector.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name")).trim(); return name.getResult(); } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 2d5e828bc..a1e46e603 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1501,6 +1501,7 @@ public class ModItems { public static Item gun_bolter; public static Item gun_folly; public static Item gun_aberrator; + public static Item gun_aberrator_eott; public static Item gun_double_barrel; public static Item gun_double_barrel_sacred_dragon; @@ -6495,6 +6496,7 @@ public class ModItems { GameRegistry.registerItem(gun_bolter, gun_bolter.getUnlocalizedName()); GameRegistry.registerItem(gun_folly, gun_folly.getUnlocalizedName()); GameRegistry.registerItem(gun_aberrator, gun_aberrator.getUnlocalizedName()); + GameRegistry.registerItem(gun_aberrator_eott, gun_aberrator_eott.getUnlocalizedName()); GameRegistry.registerItem(gun_double_barrel, gun_double_barrel.getUnlocalizedName()); GameRegistry.registerItem(gun_double_barrel_sacred_dragon, gun_double_barrel_sacred_dragon.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 5dd8785c6..81daf1584 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -84,6 +84,7 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_bolter, new ItemRenderBolter()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_folly, new ItemRenderFolly()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_aberrator, new ItemRenderAberrator()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_aberrator_eott, new ItemRenderEOTT()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_double_barrel, new ItemRenderDoubleBarrel(ResourceManager.double_barrel_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_double_barrel_sacred_dragon, new ItemRenderDoubleBarrel(ResourceManager.double_barrel_sacred_dragon_tex)); //PROJECTILES @@ -250,6 +251,8 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_maresleg_akimbo) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_uzi_akimbo) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY_MIRROR, LegoClient.HUD_COMPONENT_AMMO_MIRROR); ((ItemGunBaseNT) ModItems.gun_uzi_akimbo) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_aberrator_eott) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO_MIRROR); + ((ItemGunBaseNT) ModItems.gun_aberrator_eott) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_AMMO); } public static void setRendererBulk(BiConsumer renderer, BulletConfig... configs) { for(BulletConfig config : configs) config.setRenderer(renderer); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 04b141e9c..505818c44 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -3,6 +3,7 @@ package com.hbm.items.weapon.sedna.factory; import java.util.function.BiConsumer; import com.hbm.config.ClientConfig; +import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.impl.ItemGunStinger; @@ -1294,8 +1295,9 @@ public class Orchestras { if(type == AnimType.CYCLE) { if(timer == 1) { + int cba = (stack.getItem() == ModItems.gun_aberrator_eott && ctx.configIndex == 0) ? -1 : 1; SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); - if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? 0 : -0.125, aiming ? -0.0625 : -0.25D, -0.075, 0.25, 0, 0.01, casing.getName()); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.375, aiming ? 0 : -0.125, aiming ? -0.0625 : -0.25D * cba, -0.075, 0.25, 0, 0.01, casing.getName()); } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java index 0954416eb..588f54b0d 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory35800.java @@ -1,5 +1,6 @@ package com.hbm.items.weapon.sedna.factory; +import java.util.function.BiConsumer; import java.util.function.BiFunction; import com.hbm.items.ModItems; @@ -8,6 +9,7 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; @@ -30,16 +32,41 @@ public class XFactory35800 { .setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0xCEB78E).register("35-800")).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); ModItems.gun_aberrator = new ItemGunBaseNT(WeaponQuality.SECRET, new GunConfig() - .dura(2_000).draw(10).inspect(26).reloadSequential(true).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) - .dmg(50F).delay(13).dry(21).reload(51).sound("hbm:weapon.fire.aberrator", 1.0F, 1.0F) + .dmg(100F).delay(13).dry(21).reload(51).sound("hbm:weapon.fire.aberrator", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 5).addConfigs(p35800)) .offset(0.75, -0.0625 * 1.5, -0.1875) - .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE)) + .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(LAMBDA_RECOIL_ABERRATOR)) .setupStandardConfiguration() .anim(LAMBDA_ABERRATOR).orchestra(Orchestras.ORCHESTRA_ABERRATOR) ).setUnlocalizedName("gun_aberrator"); + + ModItems.gun_aberrator_eott = new ItemGunBaseNT(WeaponQuality.SECRET, + new GunConfig().dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .rec(new Receiver(0) + .dmg(100F).spreadHipfire(0F).delay(13).dry(21).reload(51).sound("hbm:weapon.fire.aberrator", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 5).addConfigs(p35800)) + .offset(0.75, -0.0625 * 1.5, 0.1875) + .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(LAMBDA_RECOIL_ABERRATOR)) + .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) + .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) + .anim(LAMBDA_ABERRATOR).orchestra(Orchestras.ORCHESTRA_ABERRATOR), + new GunConfig().dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .rec(new Receiver(0) + .dmg(100F).spreadHipfire(0F).delay(13).dry(21).reload(51).sound("hbm:weapon.fire.aberrator", 1.0F, 1.0F) + .mag(new MagazineFullReload(1, 5).addConfigs(p35800)) + .offset(0.75, -0.0625 * 1.5, -0.1875) + .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(LAMBDA_RECOIL_ABERRATOR)) + .ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) + .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) + .anim(LAMBDA_ABERRATOR).orchestra(Orchestras.ORCHESTRA_ABERRATOR) + ).setUnlocalizedName("gun_aberrator_eott"); } + + public static BiConsumer LAMBDA_RECOIL_ABERRATOR = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_ABERRATOR = (stack, type) -> { boolean aim = ItemGunBaseNT.getIsAiming(stack); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index ce72c3279..3de42e1ca 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -160,6 +160,29 @@ public class ModEventHandlerClient { GL11.glDepthMask(true); return; } + + /*if(event.type == ElementType.CROSSHAIRS && player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.gun_aberrator) { + int width = event.resolution.getScaledWidth(); + int height = event.resolution.getScaledHeight(); + Tessellator tess = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(GL11.GL_ONE_MINUS_DST_COLOR, GL11.GL_ONE_MINUS_SRC_COLOR, 1, 0); + GL11.glAlphaFunc(GL11.GL_GEQUAL, 0.0F); + GL11.glDepthMask(false); + tess.startDrawingQuads(); + float intensity = 0.2F; + tess.setColorRGBA_F(intensity, intensity, intensity, 1F); + tess.addVertex(width, 0, 0); + tess.addVertex(0, 0, 0); + tess.addVertex(0, height, 0); + tess.addVertex(width, height, 0); + tess.draw(); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glDepthMask(true); + }*/ /// HANDLE GUN OVERLAYS /// if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IItemHUD) { @@ -751,8 +774,6 @@ public class ModEventHandlerClient { for(String s : names) { list.add(EnumChatFormatting.AQUA + " -" + s); } - } else { - list.add(EnumChatFormatting.RED + "No Ore Dict data!"); } } diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 2decbf76b..14974adb9 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1036,6 +1036,7 @@ public class ResourceManager { public static final ResourceLocation double_barrel_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/double_barrel.png"); public static final ResourceLocation double_barrel_sacred_dragon_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/double_barrel_sacred_dragon.png"); public static final ResourceLocation aberrator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/aberrator.png"); + public static final ResourceLocation eott_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/eott.png"); public static final ResourceLocation lance_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lance.png"); diff --git a/src/main/java/com/hbm/render/anim/BusAnimationKeyframe.java b/src/main/java/com/hbm/render/anim/BusAnimationKeyframe.java index 988a3f552..ce55f00e5 100644 --- a/src/main/java/com/hbm/render/anim/BusAnimationKeyframe.java +++ b/src/main/java/com/hbm/render/anim/BusAnimationKeyframe.java @@ -1,5 +1,7 @@ package com.hbm.render.anim; +import com.hbm.config.ClientConfig; + //"pieces" that make up a bus public class BusAnimationKeyframe { @@ -84,7 +86,7 @@ public class BusAnimationKeyframe { public BusAnimationKeyframe(double value, int duration) { this(); this.value = value; - this.duration = duration; + this.duration = (int) (duration / Math.max(0.001D, ClientConfig.GUN_ANIMATION_SPEED.get())); } public BusAnimationKeyframe(double value, int duration, IType interpolation) { diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderEOTT.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderEOTT.java new file mode 100644 index 000000000..66580d25c --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderEOTT.java @@ -0,0 +1,281 @@ +package com.hbm.render.item.weapon.sedna; + +import org.lwjgl.opengl.GL11; + +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.main.ResourceManager; +import com.hbm.render.anim.HbmAnimations; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.ItemStack; + +public class ItemRenderEOTT extends ItemRenderWeaponBase { + + @Override public boolean isAkimbo() { return true; } + + @Override + protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.25F; } + + @Override + public float getViewFOV(ItemStack stack, float fov) { + float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; + return fov * (1 - aimingProgress * 0.33F); + } + + @Override + public void setupFirstPerson(ItemStack stack) { + GL11.glTranslated(0, 0, 1); + } + + @Override + public void renderFirstPerson(ItemStack stack) { + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + float offset = 0.8F; + + for(int i = -1; i <= 1; i += 2) { + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.eott_tex); + int index = i == -1 ? 0 : 1; + + GL11.glPushMatrix(); + standardAimingTransform(stack, + -1.0F * offset * i, -1.25F * offset, 1.25F * offset, + 0, -5.25 / 8D, 0.125); + + double scale = 0.25D; + GL11.glScaled(scale, scale, scale); + + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP", index); + double[] rise = HbmAnimations.getRelevantTransformation("RISE", index); + double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL", index); + double[] slide = HbmAnimations.getRelevantTransformation("SLIDE", index); + double[] bullet = HbmAnimations.getRelevantTransformation("BULLET", index); + double[] hammer = HbmAnimations.getRelevantTransformation("HAMMER", index); + double[] roll = HbmAnimations.getRelevantTransformation("ROLL", index); + double[] mag = HbmAnimations.getRelevantTransformation("MAG", index); + double[] magroll = HbmAnimations.getRelevantTransformation("MAGROLL", index); + double[] sight = HbmAnimations.getRelevantTransformation("SIGHT", index); + + GL11.glTranslated(0, rise[1], 0); + + GL11.glTranslated(0, 1, -2.25); + GL11.glRotated(equip[0], 1, 0, 0); + GL11.glTranslated(0, -1, 2.25); + + GL11.glTranslated(0, -1, -4); + GL11.glRotated(recoil[0], 1, 0, 0); + GL11.glTranslated(0, 1, 4); + + GL11.glTranslated(0, 1, 0); + GL11.glRotated(roll[2] * i, 0, 0, 1); + GL11.glTranslated(0, -1, 0); + + GL11.glShadeModel(GL11.GL_SMOOTH); + + ResourceManager.aberrator.renderPart("Gun"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2.4375, -1.9375); + GL11.glRotated(sight[0], 1, 0, 0); + GL11.glTranslated(0, -2.4375, 1.9375); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(mag[0] * i, mag[1], mag[2]); + + GL11.glTranslated(0, 1, 0); + GL11.glRotated(magroll[2] * i, 0, 0, 1); + GL11.glTranslated(0, -1, 0); + + ResourceManager.aberrator.renderPart("Magazine"); + GL11.glTranslated(bullet[0], bullet[1], bullet[2]); + ResourceManager.aberrator.renderPart("Bullet"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, slide[2]); + ResourceManager.aberrator.renderPart("Slide"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1.25, -3.625); + GL11.glRotated(-45 + hammer[0], 1, 0, 0); + GL11.glTranslated(0, -1.25, 3.625); + ResourceManager.aberrator.renderPart("Hammer"); + GL11.glPopMatrix(); + + double smokeScale = 0.5; + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2, 4); + GL11.glRotated(recoil[0], -1, 0, 0); + GL11.glRotated(roll[2] * i, 0, 0, -1); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(smokeScale, smokeScale, smokeScale); + this.renderSmokeNodes(gun.getConfig(stack, index).smokeNodes, 0.5D); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2, 4); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(90 * gun.shotRand, 1, 0, 0); + GL11.glScaled(0.75, 0.75, 0.75); + this.renderMuzzleFlash(gun.lastShot[index], 75, 7.5); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2, -1.5); + GL11.glScaled(0.5, 0.5, 0.5); + this.renderFireball(gun.lastShot[index]); + GL11.glPopMatrix(); + + GL11.glPopMatrix(); + } + } + + @Override + public void setupThirdPerson(ItemStack stack) { + super.setupThirdPerson(stack); + GL11.glTranslated(0, -1, 4); + double scale = 1.5D; + GL11.glScaled(scale, scale, scale); + } + + public void setupThirdPersonAkimbo(ItemStack stack) { + super.setupThirdPersonAkimbo(stack); + GL11.glTranslated(0, -1, 4); + double scale = 1.5D; + GL11.glScaled(scale, scale, scale); + + } + + @Override + public void setupInv(ItemStack stack) { + GL11.glScaled(1, 1, -1); + GL11.glTranslated(8, 8, 0); + double scale = 2.5D; + GL11.glScaled(scale, scale, scale); + } + + @Override + public void renderInv(ItemStack stack) { + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glTranslated(0, 1, 0); + + GL11.glPushMatrix(); + GL11.glRotated(225, 0, 0, 1); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(-1, 0, 0); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.eott_tex); + ResourceManager.aberrator.renderPart("Gun"); + ResourceManager.aberrator.renderPart("Hammer"); + ResourceManager.aberrator.renderPart("Magazine"); + ResourceManager.aberrator.renderPart("Slide"); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glPopMatrix(); + + GL11.glTranslated(0, 0, 5); + GL11.glPushMatrix(); + GL11.glRotated(225, 0, 0, 1); + GL11.glRotated(-90, 0, 1, 0); + GL11.glRotated(-90, 1, 0, 0); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(-45, 0, 1, 0); + GL11.glTranslated(1, 0, 0); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.eott_tex); + ResourceManager.aberrator.renderPart("Gun"); + ResourceManager.aberrator.renderPart("Hammer"); + ResourceManager.aberrator.renderPart("Magazine"); + ResourceManager.aberrator.renderPart("Slide"); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + } + + @Override + public void renderEquipped(ItemStack stack) { + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.eott_tex); + ResourceManager.aberrator.renderPart("Gun"); + ResourceManager.aberrator.renderPart("Hammer"); + ResourceManager.aberrator.renderPart("Magazine"); + ResourceManager.aberrator.renderPart("Slide"); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glShadeModel(GL11.GL_FLAT); + } + + @Override + public void renderEquippedAkimbo(ItemStack stack) { + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.eott_tex); + ResourceManager.aberrator.renderPart("Gun"); + ResourceManager.aberrator.renderPart("Hammer"); + ResourceManager.aberrator.renderPart("Magazine"); + ResourceManager.aberrator.renderPart("Slide"); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glShadeModel(GL11.GL_FLAT); + } + + @Override + public void renderOther(ItemStack stack, ItemRenderType type) { + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glAlphaFunc(GL11.GL_GREATER, 0F); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.eott_tex); + ResourceManager.aberrator.renderPart("Gun"); + ResourceManager.aberrator.renderPart("Hammer"); + ResourceManager.aberrator.renderPart("Magazine"); + ResourceManager.aberrator.renderPart("Slide"); + ResourceManager.aberrator.renderPart("Sight"); + GL11.glShadeModel(GL11.GL_FLAT); + } + + public static void renderFireball(long lastShot) { + Tessellator tess = Tessellator.instance; + + int flash = 150; + + if(System.currentTimeMillis() - lastShot < flash) { + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glPushMatrix(); + + double fire = (System.currentTimeMillis() - lastShot) / (double) flash; + double height = 5 * fire; + double length = 10 * fire; + double offset = 1 * fire; + double lengthOffset = -1.125; + Minecraft.getMinecraft().renderEngine.bindTexture(flash_plume); + tess.startDrawingQuads(); + tess.setNormal(0F, 1F, 0F); + tess.setColorRGBA_F(1F, 1F, 1F, 1F); + + tess.addVertexWithUV(height, -offset, 0, 0, 1); + tess.addVertexWithUV(-height, -offset, 0, 1, 1); + tess.addVertexWithUV(-height, -offset + length, -lengthOffset, 1, 0); + tess.addVertexWithUV(height, -offset + length, -lengthOffset, 0 ,0); + + tess.addVertexWithUV(height, -offset, 0, 0, 1); + tess.addVertexWithUV(-height, -offset, 0, 1, 1); + tess.addVertexWithUV(-height, -offset + length, lengthOffset, 1, 0); + tess.addVertexWithUV(height, -offset + length, lengthOffset, 0 ,0); + + tess.draw(); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_BLEND); + } + } +} diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java index d432c31d8..61b78ba4e 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java @@ -272,6 +272,7 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer { GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_CULL_FACE); GL11.glAlphaFunc(GL11.GL_GREATER, 0F); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); GL11.glDepthMask(false); tess.startDrawingQuads(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRotaryFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRotaryFurnace.java index 3b14b0dbb..f9fef2930 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRotaryFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRotaryFurnace.java @@ -48,6 +48,7 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i public float progress; public int burnTime; public int maxBurnTime; + public int steamUsed = 0; public boolean isVenting; public MaterialStack output; public static final int maxOutput = MaterialShapes.BLOCK.q(16); @@ -124,7 +125,7 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i if(this.canProcess(recipe)) { this.progress += 1F / recipe.duration; tanks[1].setFill(tanks[1].getFill() - recipe.steam); - tanks[2].setFill(tanks[2].getFill() + recipe.steam / 100); + steamUsed += recipe.steam; this.isProgressing = true; if(this.progress >= 1F) { @@ -142,6 +143,15 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i } else { this.progress = 0; } + + if(this.steamUsed >= 100) { + int steamReturn = this.steamUsed / 100; + int canReturn = tanks[2].getMaxFill() - tanks[2].getFill(); + int doesReturn = Math.min(steamReturn, canReturn); + this.steamUsed -= doesReturn * 100; + tanks[2].setFill(tanks[2].getFill() + doesReturn); + } + } else { this.progress = 0; } @@ -273,6 +283,7 @@ public class TileEntityMachineRotaryFurnace extends TileEntityMachinePolluting i if(tanks[1].getFill() < recipe.steam) return false; if(tanks[2].getMaxFill() - tanks[2].getFill() < recipe.steam / 100) return false; + if(this.steamUsed > 100) return false; if(this.output != null) { if(this.output.material != recipe.output.material) return false; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7e274fdf0..5e257b2f0 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2200,6 +2200,7 @@ item.grenade_strong.name=Verbesserte Handgranate item.grenade_tau.name=Taugranate item.grenade_zomg.name=Negativenergie-Paarvernichtungsgranate item.gun_aberrator.name=Aberrator +item.gun_aberrator_eott.name=Eyes Of The Tempest item.gun_am180.name=Schallgedämpfte Maschinenpistole item.gun_ar15.name=Josh item.gun_autoshotgun.name=Auto-Flinte diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 9c4e78f98..845db5b7c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3007,6 +3007,7 @@ item.grenade_zomg.name=Negative Energy Pair Annihilation Grenade item.glyphid_gland.name= Gland item.glyphid_gland_empty.name= Glyphid's Fluid Gland item.gun_aberrator.name=Aberrator +item.gun_aberrator_eott.name=Eyes Of The Tempest item.gun_am180.name=Silenced Submachine Gun item.gun_ar15.name=Josh item.gun_autoshotgun.name=Auto Shotgun diff --git a/src/main/resources/assets/hbm/textures/models/weapons/aberrator.png b/src/main/resources/assets/hbm/textures/models/weapons/aberrator.png index 32796f8ef..b868a5d84 100644 Binary files a/src/main/resources/assets/hbm/textures/models/weapons/aberrator.png and b/src/main/resources/assets/hbm/textures/models/weapons/aberrator.png differ diff --git a/src/main/resources/assets/hbm/textures/models/weapons/eott.png b/src/main/resources/assets/hbm/textures/models/weapons/eott.png new file mode 100644 index 000000000..3fdd1cc31 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/weapons/eott.png differ