From 983208bc0317c27646b31847e0d79ae3549a9d6f Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 1 Apr 2025 11:22:50 +0200 Subject: [PATCH] yeah whatever man --- changelog | 3 + src/main/java/com/hbm/items/ModItems.java | 2 + .../sedna/factory/GunFactoryClient.java | 3 + .../weapon/sedna/factory/LegoClient.java | 11 ++ .../weapon/sedna/factory/XFactory9mm.java | 22 +++ .../java/com/hbm/main/ResourceManager.java | 1 + .../weapon/sedna/ItemRenderGreaseZOMG.java | 153 ++++++++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../hbm/textures/models/weapons/zomg.png | Bin 0 -> 5981 bytes 9 files changed, 196 insertions(+) create mode 100644 src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderGreaseZOMG.java create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/zomg.png diff --git a/changelog b/changelog index 05f81516f..c8f76cf55 100644 --- a/changelog +++ b/changelog @@ -4,6 +4,9 @@ * Totally different from the PWR, not similar in the slightest * Mark 3 nuclear bomb * New bobm +* ZOMG + * Cool gun + * Yes ## Changed * all secret weapons are now obtainable in creative, overstimulate yourselves all you want you little gremlins \ No newline at end of file diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 1e00860b7..c6852310c 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1498,6 +1498,7 @@ public class ModItems { public static Item gun_aberrator_eott; public static Item gun_double_barrel; public static Item gun_double_barrel_sacred_dragon; + public static Item gun_zomg; public static Item ammo_standard; public static Item ammo_secret; @@ -6493,6 +6494,7 @@ public class ModItems { 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()); + GameRegistry.registerItem(gun_zomg, gun_zomg.getUnlocalizedName()); GameRegistry.registerItem(ammo_standard, ammo_standard.getUnlocalizedName()); GameRegistry.registerItem(ammo_secret, ammo_secret.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 ffae70729..3df58c9d3 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 @@ -46,6 +46,7 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_henry, new ItemRenderHenry(ResourceManager.henry_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_henry_lincoln, new ItemRenderHenry(ResourceManager.henry_lincoln_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_greasegun, new ItemRenderGreasegun()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_zomg, new ItemRenderGreaseZOMG()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_maresleg, new ItemRenderMaresleg(ResourceManager.maresleg_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_maresleg_akimbo, new ItemRenderMareslegAkimbo()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_maresleg_broken, new ItemRenderMaresleg(ResourceManager.maresleg_broken_tex)); @@ -206,6 +207,7 @@ public class GunFactoryClient { folly_nuke.setRenderer(LegoClient.RENDER_BIG_NUKE); p35800.setRendererBeam(LegoClient.RENDER_CRACKLE); + zomg.setRenderer(LegoClient.RENDER_RAINBOW); setRendererBulk(LegoClient.RENDER_GRENADE, shell_normal, shell_explosive, shell_ap, shell_du, shell_w9); //TODO: change the sabots @@ -258,6 +260,7 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_aberrator) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_double_barrel) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_double_barrel_sacred_dragon) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_zomg) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_light_revolver_dani) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY_MIRROR, LegoClient.HUD_COMPONENT_AMMO_MIRROR); ((ItemGunBaseNT) ModItems.gun_light_revolver_dani) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index 01a06960c..27a902052 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -1,5 +1,7 @@ package com.hbm.items.weapon.sedna.factory; +import java.awt.Color; +import java.util.Random; import java.util.function.BiConsumer; import org.lwjgl.opengl.GL11; @@ -80,6 +82,15 @@ public class LegoClient { renderBulletStandard(Tessellator.instance, 0x7F006E, 0xFF7FED, length, true); }; + public static BiConsumer RENDER_RAINBOW = (bullet, interp) -> { + double length = bullet.prevVelocity + (bullet.velocity - bullet.prevVelocity) * interp; + if(length <= 0) return; + Random rand = new Random(bullet.getEntityId()); + Color light = new Color(rand.nextInt(2) * 255, rand.nextInt(2) * 255, rand.nextInt(2) * 255); + Color dark = new Color(light.getRed() / 2, light.getGreen() / 2, light.getBlue() / 2); + renderBulletStandard(Tessellator.instance, dark.getRGB(), light.getRGB(), length, true); + }; + public static void renderBulletStandard(Tessellator tess, int dark, int light, double length, boolean fullbright) { renderBulletStandard(tess, dark, light, length, 0.03125D, 0.03125D * 0.25D, fullbright); } public static void renderBulletStandard(Tessellator tess, int dark, int light, double length, double widthF, double widthB, boolean fullbright) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java index e8749552f..0ec92a772 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java @@ -31,6 +31,7 @@ import com.hbm.util.DamageResistanceHandler.DamageClass; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; public class XFactory9mm { @@ -38,6 +39,7 @@ public class XFactory9mm { public static BulletConfig p9_fmj; public static BulletConfig p9_jhp; public static BulletConfig p9_ap; + public static BulletConfig zomg; public static void init() { SpentCasing casing9 = new SpentCasing(CasingType.STRAIGHT).setColor(SpentCasing.COLOR_CASE_BRASS).setScale(1F, 1F, 0.75F); @@ -49,6 +51,15 @@ public class XFactory9mm { .setCasing(casing9.clone().register("p9jhp")); p9_ap = new BulletConfig().setItem(EnumAmmo.P9_AP).setCasing(EnumCasingType.SMALL_STEEL, 12).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F).setThresholdNegation(5F).setArmorPiercing(0.15F) .setCasing(casing9.clone().setColor(SpentCasing.COLOR_CASE_44).register("p9ap")); + + zomg = new BulletConfig().setItem(ModItems.nugget_euphemium).setVel(3F).setReloadCount(300).setThresholdNegation(100F) + .setCasing(casing9.clone().setColor(SpentCasing.COLOR_CASE_BRASS).register("zomg")).setOnImpact((bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.BLOCK) { + for(ForgeDirection dir : ForgeDirection.values()) + bullet.worldObj.func_147480_a(mop.blockX + dir.offsetX, mop.blockY + dir.offsetY, mop.blockZ + dir.offsetZ, false); + } + if(mop.entityHit != bullet.getThrower()) Lego.standardExplode(bullet, mop, 5F); + }); ModItems.gun_greasegun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(20).inspect(31).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) @@ -61,6 +72,17 @@ public class XFactory9mm { .anim(LAMBDA_GREASEGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_GREASEGUN) ).setNameMutator(LAMBDA_NAME_GREASEGUN) .setUnlocalizedName("gun_greasegun"); + ModItems.gun_zomg = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() + .dura(3_000).draw(20).inspect(31).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) + .rec(new Receiver(0) + .dmg(9_999F).delay(4).rounds(5).dry(40).auto(true).spread(0.05F).reload(60).jam(55).sound("hbm:weapon.fire.greaseGun", 1.0F, 1.0F) + .mag(new MagazineFullReload(0, 300).addConfigs(zomg)) + .offset(1, -0.0625 * 2.5, -0.25D) + .setupStandardFire().recoil(LAMBDA_RECOIL_GREASEGUN)) + .setupStandardConfiguration() + .anim(LAMBDA_GREASEGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_GREASEGUN) + ).setNameMutator(LAMBDA_NAME_GREASEGUN) + .setUnlocalizedName("gun_zomg"); ModItems.gun_lag = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(1_700).draw(7).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 9bb287259..3c9e996ac 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -956,6 +956,7 @@ public class ResourceManager { public static final ResourceLocation henry_lincoln_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/henry_lincoln.png"); public static final ResourceLocation greasegun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/greasegun.png"); public static final ResourceLocation greasegun_clean_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/greasegun_clean.png"); + public static final ResourceLocation zomg_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/zomg.png"); public static final ResourceLocation maresleg_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/maresleg.png"); public static final ResourceLocation maresleg_broken_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/maresleg_broken.png"); public static final ResourceLocation flaregun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flaregun.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderGreaseZOMG.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderGreaseZOMG.java new file mode 100644 index 000000000..f20c761d3 --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderGreaseZOMG.java @@ -0,0 +1,153 @@ +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.item.ItemStack; + +public class ItemRenderGreaseZOMG extends ItemRenderWeaponBase { + + @Override + protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.5F; } + + @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, 0.875); + + float offset = 0.8F; + standardAimingTransform(stack, + -1.5F * offset, -1F * offset, 1.75F * offset, + 0, -2.625 / 8D, 1.125); + } + + @Override + public void renderFirstPerson(ItemStack stack) { + + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.zomg_tex); + double scale = 0.375D; + GL11.glScaled(scale, scale, scale); + + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); + double[] stock = HbmAnimations.getRelevantTransformation("STOCK"); + double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); + double[] flap = HbmAnimations.getRelevantTransformation("FLAP"); + double[] lift = HbmAnimations.getRelevantTransformation("LIFT"); + double[] handle = HbmAnimations.getRelevantTransformation("HANDLE"); + double[] mag = HbmAnimations.getRelevantTransformation("MAG"); + double[] turn = HbmAnimations.getRelevantTransformation("TURN"); + double[] bullet = HbmAnimations.getRelevantTransformation("BULLET"); + + GL11.glTranslated(0, -3, -3); + GL11.glRotated(equip[0], 1, 0, 0); + GL11.glTranslated(0, 3, 3); + + GL11.glTranslated(0, -3, -3); + GL11.glRotated(lift[0], 1, 0, 0); + GL11.glTranslated(0, 3, 3); + + if(gun.aimingProgress < 1F) GL11.glRotated(turn[2], 0, 0, 1); + + GL11.glTranslated(0, 0, recoil[2]); + + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.greasegun.renderPart("Gun"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, -4 - stock[2]); + ResourceManager.greasegun.renderPart("Stock"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(mag[0], mag[1], mag[2]); + ResourceManager.greasegun.renderPart("Magazine"); + if(bullet[0] != 1) ResourceManager.greasegun.renderPart("Bullet"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, -1.4375, -0.125); + GL11.glRotated(handle[0], 1, 0, 0); + GL11.glTranslated(0, 1.4375, 0.125); + ResourceManager.greasegun.renderPart("Handle"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0.53125, 0); + GL11.glRotated(flap[2], 0, 0, 1); + GL11.glTranslated(0, -0.5125, 0); + ResourceManager.greasegun.renderPart("Flap"); + GL11.glPopMatrix(); + + double smokeScale = 0.25; + + GL11.glPushMatrix(); + GL11.glTranslated(-0.25, 0, 1.5); + GL11.glRotated(turn[2], 0, 0, -1); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(smokeScale, smokeScale, smokeScale); + this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 1D); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, 8); + GL11.glRotated(turn[2], 0, 0, -1); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(smokeScale, smokeScale, smokeScale); + this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 1D); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, 8); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(90 * gun.shotRand, 1, 0, 0); + GL11.glScaled(0.5, 0.5, 0.5); + this.renderMuzzleFlash(gun.lastShot[0], 75, 7.5); + GL11.glPopMatrix(); + } + + @Override + public void setupThirdPerson(ItemStack stack) { + super.setupThirdPerson(stack); + GL11.glTranslated(0, 1, 3); + } + + @Override + public void setupInv(ItemStack stack) { + super.setupInv(stack); + double scale = 1.5D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(-0.5, 2, 0); + } + + @Override + public void setupModTable(ItemStack stack) { + double scale = -7.5D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(90, 0, 1, 0); + GL11.glTranslated(0, 2, 0); + } + + @Override + public void renderOther(ItemStack stack, ItemRenderType type) { + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.zomg_tex); + ResourceManager.greasegun.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } +} diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index ba2c1b94a..e2a70f6fa 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3089,6 +3089,7 @@ item.gun_tesla_cannon.name=Tesla Cannon item.gun_uzi.name=Uzi item.gun_uzi_richter.name=Richter item.gun_uzi_akimbo.name=Uzis +item.gun_zomg.name=ZOMG item.hand_drill.name=Hand Drill item.hand_drill_desh.name=Desh Hand Drill item.hazmat_boots.name=Hazmat Boots diff --git a/src/main/resources/assets/hbm/textures/models/weapons/zomg.png b/src/main/resources/assets/hbm/textures/models/weapons/zomg.png new file mode 100644 index 0000000000000000000000000000000000000000..071e310999e15a9a543fbb9f00d31118d2f44e0e GIT binary patch literal 5981 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 LNkvXXu0mjfKz3J9 literal 0 HcmV?d00001