From d03abeecdd42cd2535e84259d60213282751b46d Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 5 Apr 2026 17:59:46 +0200 Subject: [PATCH] GRENADE IN MY US HOLL --- .../weapon/grenade/ItemGrenadeFilling.java | 21 +++++---- .../items/weapon/grenade/ItemGrenadeFuze.java | 18 +++---- .../weapon/grenade/ItemGrenadeUniversal.java | 15 ++---- .../java/com/hbm/main/ResourceManager.java | 3 ++ .../projectile/RenderGrenadeUniversal.java | 2 + .../hbm/render/item/ItemRenderGrenade.java | 44 ++++++++++++++++-- .../hbm/textures/models/grenades/frag.png | Bin 819 -> 1262 bytes .../textures/models/grenades/frag_body.png | Bin 0 -> 434 bytes .../textures/models/grenades/frag_fuze.png | Bin 0 -> 161 bytes .../textures/models/grenades/frag_label.png | Bin 0 -> 328 bytes 10 files changed, 72 insertions(+), 31 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/models/grenades/frag_body.png create mode 100644 src/main/resources/assets/hbm/textures/models/grenades/frag_fuze.png create mode 100644 src/main/resources/assets/hbm/textures/models/grenades/frag_label.png diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java index 0b489f62f..1fe50493a 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java @@ -16,6 +16,7 @@ import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon; import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.items.ItemEnumMulti; import com.hbm.items.weapon.grenade.ItemGrenadeShell.EnumGrenadeShell; +import static com.hbm.items.weapon.grenade.ItemGrenadeShell.EnumGrenadeShell.*; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.factory.Lego; @@ -33,22 +34,26 @@ public class ItemGrenadeFilling extends ItemEnumMulti { } public static enum EnumGrenadeFilling { - POWDER(EXPLODE_POWDER), // gunpowder - HE(EXPLODE_HE), // high explosive - FRAG(EXPLODE_FRAG), // high explosive with fragmentation - DEMO(EXPLODE_DEMO), // demolition - INC(null), // incendiary - CLUSTER(EXPLODE_CLUSTER), // explosive pellets - NUCLEAR(null); // nuka grenade + POWDER(EXPLODE_POWDER, 0x424242, 0x939176, FRAG, STICK), // gunpowder + HE(EXPLODE_HE, 0x595533, 0xA49D62, FRAG, STICK), // high explosive + HE_FRAG(EXPLODE_FRAG, 0x595533, 0xE0BA29, FRAG, STICK), // high explosive with fragmentation + DEMO(EXPLODE_DEMO, 0x595533, 0xDD4029, FRAG, STICK), // demolition + INC(null, 0x5A5A5A, 0xFF5F21, FRAG, STICK), // incendiary + CLUSTER(EXPLODE_CLUSTER, 0x5A5A5A, 0xFFC711, FRAG, STICK), // explosive pellets + NUCLEAR(null, 0, 0, NUKE); // nuka grenade // and more which i haven't decided. probably plasma, EMP, perhaps laser(?) public Consumer explode; public Set compatibleShells = new HashSet(); + public int bodyColor; + public int labelColor; - private EnumGrenadeFilling(Consumer explode, EnumGrenadeShell... compatibleShells) { + private EnumGrenadeFilling(Consumer explode, int bodyColor, int labelColor, EnumGrenadeShell... compatibleShells) { this.explode = explode; for(EnumGrenadeShell shell : compatibleShells) this.compatibleShells.add(shell); + this.bodyColor = bodyColor; + this.labelColor = labelColor; } } diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFuze.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFuze.java index 4203440d6..8a93c3469 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFuze.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFuze.java @@ -15,20 +15,22 @@ public class ItemGrenadeFuze extends ItemEnumMulti { } public static enum EnumGrenadeFuze { - S3(FUZE_3S), // 3s timed - S7(FUZE_7S), // 7s times - S15(FUZE_15S), // 15s timed - IMPACT(FUZE_IMPACT), // on block/entity impact, 0.5s safety - AIRBURST(null, null); // still have to figure out the mechanics, whether it should be an arc angle or fixed height over the floor, 2s safety + S3(FUZE_3S, 0x000000), // 3s timed + S7(FUZE_7S, 0x404040), // 7s times + S15(FUZE_15S, 0x808080), // 15s timed + IMPACT(FUZE_IMPACT, 0xE36C17), // on block/entity impact, 0.5s safety + AIRBURST(null, null, 0xD11EB8); // still have to figure out the mechanics, whether it should be an arc angle or fixed height over the floor, 2s safety public Consumer updateTick; public BiConsumer onImpact; + public int bandColor; - private EnumGrenadeFuze(Consumer updateTick) { this(updateTick, null); } - private EnumGrenadeFuze(BiConsumer onImpact) { this(null, onImpact); } - private EnumGrenadeFuze(Consumer updateTick, BiConsumer onImpact) { + private EnumGrenadeFuze(Consumer updateTick, int color) { this(updateTick, null, color); } + private EnumGrenadeFuze(BiConsumer onImpact, int color) { this(null, onImpact, color); } + private EnumGrenadeFuze(Consumer updateTick, BiConsumer onImpact, int color) { this.updateTick = updateTick; this.onImpact = onImpact; + this.bandColor = color; } } diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java index 1f23527c9..be3b5c9f1 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java @@ -130,17 +130,10 @@ public class ItemGrenadeUniversal extends Item implements IEquipReceiver { @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list) { - // some demo crap - list.add(make(EnumGrenadeShell.STICK, EnumGrenadeFilling.HE, EnumGrenadeFuze.S3)); - list.add(make(EnumGrenadeShell.STICK, EnumGrenadeFilling.HE, EnumGrenadeFuze.IMPACT)); - list.add(make(EnumGrenadeShell.STICK, EnumGrenadeFilling.DEMO, EnumGrenadeFuze.S7)); - list.add(make(EnumGrenadeShell.FRAG, EnumGrenadeFilling.POWDER, EnumGrenadeFuze.S3)); - list.add(make(EnumGrenadeShell.FRAG, EnumGrenadeFilling.FRAG, EnumGrenadeFuze.S3)); - list.add(make(EnumGrenadeShell.FRAG, EnumGrenadeFilling.FRAG, EnumGrenadeFuze.IMPACT)); - list.add(make(EnumGrenadeShell.FRAG, EnumGrenadeFilling.INC, EnumGrenadeFuze.S7)); - list.add(make(EnumGrenadeShell.FRAG, EnumGrenadeFilling.CLUSTER, EnumGrenadeFuze.S3)); - list.add(make(EnumGrenadeShell.TECH, EnumGrenadeFilling.NUCLEAR, EnumGrenadeFuze.S15)); - list.add(make(EnumGrenadeShell.NUKE, EnumGrenadeFilling.NUCLEAR, EnumGrenadeFuze.S15)); + + for(EnumGrenadeShell shell : EnumGrenadeShell.values()) for(EnumGrenadeFilling filling : EnumGrenadeFilling.values()) { + if(filling.compatibleShells.contains(shell)) for(EnumGrenadeFuze fuze : EnumGrenadeFuze.values()) list.add(make(shell, filling, fuze)); + } } @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 49552b4ea..54b8e95f8 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1105,6 +1105,9 @@ public class ResourceManager { public static final ResourceLocation grenade_mk2 = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/grenade_mk2.png"); public static final ResourceLocation grenade_aschrab_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/grenade_aschrab.png"); public static final ResourceLocation grenade_frag_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/frag.png"); + public static final ResourceLocation grenade_frag_body_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/frag_body.png"); + public static final ResourceLocation grenade_frag_label_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/frag_label.png"); + public static final ResourceLocation grenade_frag_fuze_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/frag_fuze.png"); public static final ResourceLocation grenade_stick_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/stick.png"); public static final ResourceLocation grenade_tech_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/tech.png"); public static final ResourceLocation grenade_nuka_tex = new ResourceLocation(RefStrings.MODID, "textures/models/grenades/nuka.png"); diff --git a/src/main/java/com/hbm/render/entity/projectile/RenderGrenadeUniversal.java b/src/main/java/com/hbm/render/entity/projectile/RenderGrenadeUniversal.java index acff7cd44..867b53b14 100644 --- a/src/main/java/com/hbm/render/entity/projectile/RenderGrenadeUniversal.java +++ b/src/main/java/com/hbm/render/entity/projectile/RenderGrenadeUniversal.java @@ -21,6 +21,7 @@ public class RenderGrenadeUniversal extends Render { GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glShadeModel(GL11.GL_SMOOTH); EntityGrenadeUniversal grenade = (EntityGrenadeUniversal) entity; @@ -39,6 +40,7 @@ public class RenderGrenadeUniversal extends Render { ItemStack stack = grenade.getGrenadeItem(); ItemRenderGrenade.renderGrenade(stack, null); + GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/render/item/ItemRenderGrenade.java b/src/main/java/com/hbm/render/item/ItemRenderGrenade.java index 205f02a91..445587ad7 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderGrenade.java +++ b/src/main/java/com/hbm/render/item/ItemRenderGrenade.java @@ -1,15 +1,20 @@ package com.hbm.render.item; +import com.hbm.items.weapon.grenade.ItemGrenadeFilling.EnumGrenadeFilling; +import com.hbm.items.weapon.grenade.ItemGrenadeFuze.EnumGrenadeFuze; import com.hbm.items.weapon.grenade.ItemGrenadeShell.EnumGrenadeShell; import org.lwjgl.opengl.GL11; import com.hbm.items.weapon.grenade.ItemGrenadeUniversal; import com.hbm.main.ResourceManager; +import com.hbm.util.ColorUtil; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; public class ItemRenderGrenade implements IItemRenderer { @@ -70,11 +75,11 @@ public class ItemRenderGrenade implements IItemRenderer { GL11.glScaled(0.125, 0.125, 0.125); GL11.glTranslated(3, 1, -3); - GL11.glRotated(135, 0, -1, 0); + GL11.glRotated(180, 0, -1, 0); if(shell == EnumGrenadeShell.FRAG) { + renderFragBody(stack); Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_frag_tex); - ResourceManager.grenades.renderPart("Frag"); ResourceManager.grenades.renderPart("FragSpoon"); ResourceManager.grenades.renderPart("FragRing"); } @@ -110,9 +115,9 @@ public class ItemRenderGrenade implements IItemRenderer { if(renderType == null) { GL11.glTranslated(0, -2, 0); } - Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_frag_tex); - ResourceManager.grenades.renderPart("Frag"); + renderFragBody(stack); if(renderType != null) { + Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_frag_tex); ResourceManager.grenades.renderPart("FragSpoon"); ResourceManager.grenades.renderPart("FragRing"); } @@ -177,4 +182,35 @@ public class ItemRenderGrenade implements IItemRenderer { } } } + + public static void renderFragBody(ItemStack stack) { + + EnumGrenadeFilling filling = ItemGrenadeUniversal.getFilling(stack); + EnumGrenadeFuze fuze = ItemGrenadeUniversal.getFuze(stack); + + bind(ResourceManager.grenade_frag_tex); + ResourceManager.grenades.renderPart("Frag"); + + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + + GL11.glColor3f(ColorUtil.fr(filling.bodyColor), ColorUtil.fg(filling.bodyColor), ColorUtil.fb(filling.bodyColor)); + bind(ResourceManager.grenade_frag_body_tex); + ResourceManager.grenades.renderPart("Frag"); + + GL11.glColor3f(ColorUtil.fr(filling.labelColor), ColorUtil.fg(filling.labelColor), ColorUtil.fb(filling.labelColor)); + bind(ResourceManager.grenade_frag_label_tex); + ResourceManager.grenades.renderPart("Frag"); + + GL11.glColor3f(ColorUtil.fr(fuze.bandColor), ColorUtil.fg(fuze.bandColor), ColorUtil.fb(fuze.bandColor)); + bind(ResourceManager.grenade_frag_fuze_tex); + ResourceManager.grenades.renderPart("Frag"); + + GL11.glColor3f(1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } + + public static void bind(ResourceLocation res) { + Minecraft.getMinecraft().getTextureManager().bindTexture(res); + } } diff --git a/src/main/resources/assets/hbm/textures/models/grenades/frag.png b/src/main/resources/assets/hbm/textures/models/grenades/frag.png index 5ba373bdc614dd473b5d96f291fc4d4326f12cc1..b086e766869dce41c1e945da0d35df7640dc881a 100644 GIT binary patch delta 1227 zcmV;+1T_1z2JQ)vGk*l7NklNoy2A6oB7^$}~ZfOmgush%p8UB6BeZ1<&d+ zmz+X!%Fptoc*@0Jp%=Y~2r3AofhZx%#6V^t;~{j?T~pPy^sB0_p7+6^-P22@zj?L1 z-Wq_+TBkk2-lm8TpY|F)_EUA3i;Xs?ryxo4o9^|7&>vikeSgo-2LSEm2mm?~kwXF_ zhXh8BlQytFxPbnkZ~T4Q#+fcR$q0LLu6vTygT!O(KxXC1dV8|opsJUcjU1AQL+(hY z^0ESwgylXws`>o)>9&217wgWIsjNJa5G;~}kwioofIoRDm;1OJn6Gu(qdHWlsvo1P zzj4a9yp%ddVt;dbO89XJOLv?k3{L-DcG+idHl6M?zn@{QbFh5wE`Olc8+y;x+QR+LV>(LLLAo5F|cVE3wK&TCj z9Cmba61ogT2^hv@6ht`Kx1WDQm!Z-u-?D#>Nwr?dFKfc}_~g_7qNk0>{5 zgp(@t=jL)hW04U|dCva_{(^&yFNI1`vk+1Xki`z|XhjX=?Igc_&4P?@~! ze2TzwcppZPEL?&<>@F*ks!%(e2;^m?)3SdFd(Z{aILwgN} z2O7A3Qwt9X)Ij%E>JV?7A%O~X?`hY4d)dmW*;@iskU%6tz2|}iBJu9yuOLsjr(S5} zPy{O2-dxYMS+;l5x`HAwa!8;d+nehnJ}N^(0wae6Mouj|F_Uz8V=V;&OwQ$vwXQ<5 zmn`xZQf0sAr(>eF5eNWd7fBi6uJNk{sR@P#fG&}YYYGY002ovPDHLkV1gIHOQQe) literal 819 zcmeAS@N?(olHy`uVBq!ia0vp^1wb6d!3HD~u3wS{QY^(zo*^7SP{WbZ!N9=u%G1R$ zq+-t7xwd7C4MbYyEp=Lo(zJt9nDh2b?$ABMl@YV#>zv22OZ-pznYcRjDgI)7=~*!M zx2fI1C!Wt9yE&QpDWAHt=EjB3;*amuMdkFr{l0u+n)iOWsmu3TJA7K;P@o|o!^P6h zbg=N;lf1As`C=9u=a~Af`DuGj;p>lS2X3S`u$kWap?QYon$3nOD-KUTV9TeW`s{Mo zn`(vpus6y*o#7h~CjZd!op}96NsEZgLjDz7HbyQs+xYFx@0hgD-1c)-AC@XuyuBwo zW5%TPf4jCDcjnD-D7fYQ-fpwMeyW<-zHfSek1HQPkZaKRz$EOH-$UP%kCZM|Un|bu ze7iKEbI}sH_L;3&g5HNxpWbhoJi~WoWOO-i_{OqaTQviRHz^iQv-zhVxH0p$)?VY# zeaz*e+1|bJ3+?8Jtv`I7UG2l<2}`6rdA16^l4iZPar%*vN+ppWy|;vlpLFI(F#A4v z9^-ZW{-Mn#zP*Nq;qyG&9CCqtugp%VPcA|%vkurGrul>8iG&`d{xmd8d zU6d0xecG9#a>3%e*Yc9TGFv9C(DiTOjPcDA@;)K#8PRFDQdf3K9p5??KW+Ps8?SGV zf0xq1d8gyqrde*fTs{tu4`k2f5Sii8$8c7}{?2Z}TN(QEGxu*k$kOE8_#i;RLWF~l zwdu0ddEuzrwHnvvpB1`qXRr3^_Wz@wEhFy#`~T;ynjufK?D4=|>n8tpPv*JqRIdcq z0@WQMd7Wp=>s?Q(kOhH8h8;6ymOXB`Q;rqc9_PlX52G|@IwEYw6ggb|L^)^2a@z|1 zzh8V0?sre#Ddx2=fobZ8TJiEsU|h~Pz;Ri2tCIX`jpv_#3jEhhYvSxF(0|_%@PO;x yb?simGKsb)`T379t$FTrk_Vjh7J^dYoc{sbYV9)h^80|ffWgz%&t;ucLK6Up#$_7- diff --git a/src/main/resources/assets/hbm/textures/models/grenades/frag_body.png b/src/main/resources/assets/hbm/textures/models/grenades/frag_body.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ec9f2b158b905eba19dd144e04d1aaa0e1b9c3 GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^1wb6d!3HD~u3wS{QY^(zo*^7SP{WbZ!N9FMGa zQZeW4owIA393{jn3=jy2 z+x%7fORat0&tI|EbN@;1yBYtMH$j&1@Yb#751v)n_~pgxP4|kPw6yBL?}G2&xqn7& zZ76>DOiuktap*qg>Bpjf&xubE6wdqJkgax7#LlSkVHs~kQj^caDV#j&2^Nfp-%4#b za&Cw0FHKN&SNO?z$|ioe_X>N)dsC$8;2UmMJuYL6+Y z&1nF+Z-a+%-{WQB7nWtudbWB!L*Du4#cy*HSlKrp=9KU|P{7ot{cCd9<(DBTN6mPe zr+#!&GnmuxkOg8jRE4lX%td9xz6Ed2v$P3glLqVfZuGT`rS5lhJa8@r23API*5(O{MeXqAG*V~*W-aKL1#D$rcf{OV(danxn=n((Z4%C7j7|ilM zeePQ6-fb_^Bd0BUY_<9RHQ95Y|6KZddz-1$Nr}3u5-Z=!ORwn3-rp|wSi*5SgR=#n zu4wX}ce4dvmv9&Gs~-FDA;#zMt@MPKHvg{c9uWBFbf*7l;>^bNFQpPXH{8nlC-$qy z#AEvft5~Kphi}|=-+v`rZozvCuxlQi(-aSL*UJC%qAAaR@f7oYdzU<#duh_qJrlJ4 z+UM7&Z7KD$W_I2Y|55*~d?;Vd{*JX_AY(jT{an^LB{Ts5 DTvvpl literal 0 HcmV?d00001