'nade 'mations

This commit is contained in:
Bob 2026-04-07 23:02:56 +02:00
parent 973185191b
commit bb02b70162
8 changed files with 120 additions and 17 deletions

View File

@ -56,9 +56,8 @@ public class EntityGrenadeUniversal extends EntityThrowableInterp {
EnumGrenadeShell shell = ItemGrenadeUniversal.getShell(grenade); EnumGrenadeShell shell = ItemGrenadeUniversal.getShell(grenade);
Vec3NT yeet = new Vec3NT(thrower.getLookVec()).normalizeSelf().multiply(shell.getYeetForce()); Vec3NT yeet = new Vec3NT(thrower.getLookVec()).normalizeSelf();
this.addVelocity(yeet.xCoord, yeet.yCoord, yeet.zCoord); this.setThrowableHeading(yeet.xCoord, yeet.yCoord, yeet.zCoord, (float) shell.getYeetForce(), 0);
this.setThrowableHeading(yeet.xCoord, yeet.yCoord, yeet.zCoord, 1, 0);
} }
@Override @Override

View File

@ -45,7 +45,7 @@ public class ItemGrenadeFuze extends ItemEnumMulti {
}; };
}; };
public static Consumer<EntityGrenadeUniversal> FUZE_AIRBURST = (grenade) -> { public static Consumer<EntityGrenadeUniversal> FUZE_AIRBURST = (grenade) -> {
if(grenade.getTimer() >= 40) { if(grenade.getTimer() >= 30) {
Vec3NT start = new Vec3NT(grenade); Vec3NT start = new Vec3NT(grenade);
Vec3NT end = new Vec3NT(grenade).add(0, -10, 0); Vec3NT end = new Vec3NT(grenade).add(0, -10, 0);
MovingObjectPosition mop = grenade.worldObj.func_147447_a(start, end, false, false, true); MovingObjectPosition mop = grenade.worldObj.func_147447_a(start, end, false, false, true);

View File

@ -30,9 +30,9 @@ public class ItemGrenadeShell extends ItemEnumMulti {
} }
public static enum EnumGrenadeShell { public static enum EnumGrenadeShell {
FRAG(4, 20, 0.5D, 1D), // bonus fragmentation FRAG(4, 30, 0.5D, 1D), // bonus fragmentation
STICK(4, 20, 0.25D, 1.5D), // thrown farther STICK(4, 43, 0.25D, 1.5D), // thrown farther
TECH(2, 20, 0.5D, 1D), // casing with electronics for EMP/plasma TECH(2, 30, 0.5D, 1D), // casing with electronics for EMP/plasma
NUKE(1, 20, 0.25D, 1.5D); // nuka grenade casing for high yield grenades NUKE(1, 20, 0.25D, 1.5D); // nuka grenade casing for high yield grenades
private int stackLimit; private int stackLimit;

View File

@ -5,6 +5,7 @@ import java.util.Locale;
import com.hbm.entity.grenade.EntityGrenadeUniversal; import com.hbm.entity.grenade.EntityGrenadeUniversal;
import com.hbm.extprop.HbmPlayerProps; import com.hbm.extprop.HbmPlayerProps;
import com.hbm.items.IAnimatedItem;
import com.hbm.items.IEquipReceiver; import com.hbm.items.IEquipReceiver;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.weapon.grenade.ItemGrenadeExtra.EnumGrenadeExtra; import com.hbm.items.weapon.grenade.ItemGrenadeExtra.EnumGrenadeExtra;
@ -12,6 +13,13 @@ import com.hbm.items.weapon.grenade.ItemGrenadeFilling.EnumGrenadeFilling;
import com.hbm.items.weapon.grenade.ItemGrenadeFuze.EnumGrenadeFuze; import com.hbm.items.weapon.grenade.ItemGrenadeFuze.EnumGrenadeFuze;
import com.hbm.items.weapon.grenade.ItemGrenadeShell.EnumGrenadeShell; import com.hbm.items.weapon.grenade.ItemGrenadeShell.EnumGrenadeShell;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.main.NTMSounds;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.HbmAnimationPacket;
import com.hbm.render.anim.AnimationEnums.GunAnimation;
import com.hbm.render.anim.BusAnimationKeyframe.IType;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.util.EnumUtil; import com.hbm.util.EnumUtil;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@ -20,12 +28,13 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World; import net.minecraft.world.World;
public class ItemGrenadeUniversal extends Item implements IEquipReceiver { public class ItemGrenadeUniversal extends Item implements IEquipReceiver, IAnimatedItem {
/* /*
* __________ * __________
@ -61,6 +70,10 @@ public class ItemGrenadeUniversal extends Item implements IEquipReceiver {
@Override @Override
public void onEquip(EntityPlayer player, ItemStack stack) { public void onEquip(EntityPlayer player, ItemStack stack) {
HbmPlayerProps.getData(player).grenadeDeployment = 0; HbmPlayerProps.getData(player).grenadeDeployment = 0;
if(player instanceof EntityPlayerMP) {
PacketDispatcher.wrapper.sendTo(new HbmAnimationPacket(GunAnimation.EQUIP.ordinal(), 0), (EntityPlayerMP) player);
}
} }
@Override @Override
@ -72,7 +85,7 @@ public class ItemGrenadeUniversal extends Item implements IEquipReceiver {
EntityGrenadeUniversal grenade = new EntityGrenadeUniversal(world, player, stack); EntityGrenadeUniversal grenade = new EntityGrenadeUniversal(world, player, stack);
world.spawnEntityInWorld(grenade); world.spawnEntityInWorld(grenade);
} }
stack.stackSize--; if(!player.capabilities.isCreativeMode) stack.stackSize--;
if(stack.stackSize > 0) this.onEquip(player, stack); if(stack.stackSize > 0) this.onEquip(player, stack);
} }
@ -92,6 +105,18 @@ public class ItemGrenadeUniversal extends Item implements IEquipReceiver {
this.onEquip(player, stack); this.onEquip(player, stack);
} else if(isHeld) { } else if(isHeld) {
HbmPlayerProps.getData(player).grenadeDeployment++; HbmPlayerProps.getData(player).grenadeDeployment++;
int deployment = HbmPlayerProps.getData(player).grenadeDeployment;
EnumGrenadeShell shell = this.getShell(stack);
if(shell == EnumGrenadeShell.FRAG && deployment == 18) {
world.playSoundAtEntity(player, NTMSounds.GUN_REVOLVER_COCK, 1F, 1F);
}
if(shell == EnumGrenadeShell.STICK) {
if(deployment == 16) world.playSoundAtEntity(player, NTMSounds.GUN_BOLT_OPEN, 1F, 1.25F);
if(deployment == 25) world.playSoundAtEntity(player, NTMSounds.GUN_BOLT_OPEN, 1F, 1.25F);
}
if(shell == EnumGrenadeShell.TECH && deployment == 18) {
world.playSoundAtEntity(player, NTMSounds.GRENADE_TECH, 1F, 1F);
}
} }
} }
@ -156,4 +181,42 @@ public class ItemGrenadeUniversal extends Item implements IEquipReceiver {
EnumGrenadeExtra extra = this.getExtra(stack); EnumGrenadeExtra extra = this.getExtra(stack);
if(extra != null) list.add("item.grenade_universal.extra." + extra.name().toLowerCase(Locale.US)); if(extra != null) list.add("item.grenade_universal.extra." + extra.name().toLowerCase(Locale.US));
} }
@Override
public BusAnimation getAnimation(Enum type, ItemStack stack) {
if(type != GunAnimation.EQUIP) return null;
EnumGrenadeShell shell = this.getShell(stack);
if(shell == EnumGrenadeShell.FRAG) {
return new BusAnimation()
.addBus("BODYMOVE", new BusAnimationSequence().setPos(0, -5, 0).addPos(0, -3, 0, 350).addPos(0, 0, 0, 350, IType.SIN_DOWN))
.addBus("BODYTURN", new BusAnimationSequence().addPos(0, 0, 45, 350).addPos(0, 0, -15, 350, IType.SIN_DOWN).hold(200).addPos(0, 0, -20, 100, IType.SIN_DOWN).addPos(0, 0, 0, 500, IType.SIN_FULL))
.addBus("RINGMOVE", new BusAnimationSequence().hold(900).addPos(0, 0, 1, 150).addPos(0, -3, 3, 300))
.addBus("RINGTURN", new BusAnimationSequence().hold(900).addPos(0, 0, 45, 300))
.addBus("RENDERRING", new BusAnimationSequence().setPos(1, 1, 1).hold(1350).setPos(0, 0, 0));
}
if(shell == EnumGrenadeShell.STICK) {
return new BusAnimation()
.addBus("BODYMOVE", new BusAnimationSequence().setPos(0, -7, 0).addPos(0, 3, 0, 750, IType.SIN_DOWN).holdUntil(1900).addPos(0, 0, 0, 250, IType.SIN_FULL))
.addBus("BODYTURN", new BusAnimationSequence().setPos(0, 0, 90).addPos(0, 0, -45, 750, IType.SIN_DOWN).holdUntil(1900).addPos(0, 0, 0, 250, IType.SIN_FULL))
.addBus("CAPMOVE", new BusAnimationSequence().hold(800).addPos(0, -0.25, 0, 200, IType.SIN_FULL).hold(250).addPos(0, -0.5, 0, 200, IType.SIN_FULL).addPos(2, -5, 0, 350, IType.SIN_UP))
.addBus("CAPTURN", new BusAnimationSequence().hold(800).addPos(0, 360, 0, 200, IType.SIN_FULL).hold(250).addPos(0, 360 * 2, 0, 200, IType.SIN_FULL))
.addBus("RENDERCAP", new BusAnimationSequence().setPos(1, 1, 1).hold(2100).setPos(0, 0, 0));
}
if(shell == EnumGrenadeShell.TECH) {
return new BusAnimation()
.addBus("BODYMOVE", new BusAnimationSequence().setPos(0, -5, 0).addPos(0, -3, 0, 350).addPos(0, 0, 0, 350, IType.SIN_DOWN))
.addBus("BODYTURN", new BusAnimationSequence().addPos(0, 0, 45, 350).addPos(0, 0, -15, 350, IType.SIN_DOWN).hold(200).addPos(0, 0, -20, 100, IType.SIN_DOWN).addPos(0, 0, 0, 500, IType.SIN_FULL))
.addBus("RINGMOVE", new BusAnimationSequence().hold(900).addPos(0, 0, 1, 150).addPos(0, -3, 3, 300))
.addBus("RINGTURN", new BusAnimationSequence().hold(900).addPos(0, 0, 45, 300))
.addBus("RENDERRING", new BusAnimationSequence().setPos(1, 1, 1).hold(1350).setPos(0, 0, 0));
}
return null;
}
@Override public boolean shouldPlayerModelAim(ItemStack stack) { return false; }
@Override public Class getEnum() { return GunAnimation.class; }
} }

View File

@ -34,6 +34,7 @@ public class NTMSounds {
public static final String GUN_LATCH_OPEN = "hbm:weapon.reload.openLatch"; public static final String GUN_LATCH_OPEN = "hbm:weapon.reload.openLatch";
public static final String GUN_VALVE = "hbm:weapon.reload.pressureValve"; public static final String GUN_VALVE = "hbm:weapon.reload.pressureValve";
public static final String GUN_FATMAN_RELOAD = "hbm:weapon.reload.fatmanFull"; public static final String GUN_FATMAN_RELOAD = "hbm:weapon.reload.fatmanFull";
public static final String GRENADE_TECH = "hbm:weapon.reload.grenadeTech";
/// FOLEY /// /// FOLEY ///
public static final String GUN_WHACK = "hbm:weapon.foley.gunWhack"; public static final String GUN_WHACK = "hbm:weapon.foley.gunWhack";

View File

@ -8,6 +8,7 @@ import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.grenade.ItemGrenadeUniversal; import com.hbm.items.weapon.grenade.ItemGrenadeUniversal;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations;
import com.hbm.render.tileentity.RenderArcFurnace; import com.hbm.render.tileentity.RenderArcFurnace;
import com.hbm.util.ColorUtil; import com.hbm.util.ColorUtil;
@ -79,26 +80,64 @@ public class ItemRenderGrenade implements IItemRenderer {
GL11.glRotated(180, 0, -1, 0); GL11.glRotated(180, 0, -1, 0);
if(shell == EnumGrenadeShell.FRAG) { if(shell == EnumGrenadeShell.FRAG) {
double[] bodyMove = HbmAnimations.getRelevantTransformation("BODYMOVE");
double[] bodyTurn = HbmAnimations.getRelevantTransformation("BODYTURN");
double[] ringMove = HbmAnimations.getRelevantTransformation("RINGMOVE");
double[] ringTurn = HbmAnimations.getRelevantTransformation("RINGTURN");
double[] renderRing = HbmAnimations.getRelevantTransformation("RENDERRING");
GL11.glTranslated(bodyMove[0], bodyMove[1], bodyMove[2]);
GL11.glRotated(bodyTurn[2], 1, 0, 0);
renderFragBody(stack); renderFragBody(stack);
Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_frag_tex); Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_frag_tex);
ResourceManager.grenades.renderPart("FragSpoon"); ResourceManager.grenades.renderPart("FragSpoon");
if(renderRing[0] != 0) {
GL11.glTranslated(ringMove[0], ringMove[1], ringMove[2]);
GL11.glRotated(ringTurn[2], 1, 0, 0);
ResourceManager.grenades.renderPart("FragRing"); ResourceManager.grenades.renderPart("FragRing");
} }
}
if(shell == EnumGrenadeShell.STICK) { if(shell == EnumGrenadeShell.STICK) {
double[] bodyMove = HbmAnimations.getRelevantTransformation("BODYMOVE");
double[] bodyTurn = HbmAnimations.getRelevantTransformation("BODYTURN");
double[] capMove = HbmAnimations.getRelevantTransformation("CAPMOVE");
double[] capTurn = HbmAnimations.getRelevantTransformation("CAPTURN");
double[] renderCap = HbmAnimations.getRelevantTransformation("RENDERCAP");
GL11.glTranslated(bodyMove[0], bodyMove[1], bodyMove[2]);
GL11.glRotated(bodyTurn[2], 0, 0, 1);
renderStickBody(stack); renderStickBody(stack);
if(renderCap[0] != 0) {
GL11.glTranslated(capMove[0], capMove[1], capMove[2]);
GL11.glRotated(capTurn[1], 0, 1, 0);
EnumGrenadeFilling filling = ItemGrenadeUniversal.getFilling(stack); EnumGrenadeFilling filling = ItemGrenadeUniversal.getFilling(stack);
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
bind(ResourceManager.grenade_stick_tex);
ResourceManager.grenades.renderPart("StickCap");
GL11.glColor3f(ColorUtil.fr(filling.bodyColor), ColorUtil.fg(filling.bodyColor), ColorUtil.fb(filling.bodyColor)); GL11.glColor3f(ColorUtil.fr(filling.bodyColor), ColorUtil.fg(filling.bodyColor), ColorUtil.fb(filling.bodyColor));
bind(ResourceManager.grenade_stick_body_tex); bind(ResourceManager.grenade_stick_body_tex);
ResourceManager.grenades.renderPart("StickCap"); ResourceManager.grenades.renderPart("StickCap");
GL11.glColor3f(1F, 1F, 1F); GL11.glColor3f(1F, 1F, 1F);
GL11.glDisable(GL11.GL_BLEND);
}
} }
if(shell == EnumGrenadeShell.TECH) { if(shell == EnumGrenadeShell.TECH) {
double[] bodyMove = HbmAnimations.getRelevantTransformation("BODYMOVE");
double[] bodyTurn = HbmAnimations.getRelevantTransformation("BODYTURN");
double[] ringMove = HbmAnimations.getRelevantTransformation("RINGMOVE");
double[] ringTurn = HbmAnimations.getRelevantTransformation("RINGTURN");
double[] renderRing = HbmAnimations.getRelevantTransformation("RENDERRING");
GL11.glTranslated(bodyMove[0], bodyMove[1], bodyMove[2]);
GL11.glRotated(bodyTurn[2], 1, 0, 0);
renderTechBody(stack); renderTechBody(stack);
if(renderRing[0] != 0) {
GL11.glTranslated(ringMove[0], ringMove[1], ringMove[2]);
GL11.glRotated(ringTurn[2], 1, 0, 0);
Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_tech_tex); Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_tech_tex);
ResourceManager.grenades.renderPart("TechRing"); ResourceManager.grenades.renderPart("TechRing");
} }
}
if(shell == EnumGrenadeShell.NUKE) { if(shell == EnumGrenadeShell.NUKE) {
Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_nuka_tex); Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.grenade_nuka_tex);

View File

@ -294,6 +294,7 @@
"weapon.reload.impact": {"category": "player", "sounds": ["weapon/reload/impact1", "weapon/reload/impact2", "weapon/reload/impact3"]}, "weapon.reload.impact": {"category": "player", "sounds": ["weapon/reload/impact1", "weapon/reload/impact2", "weapon/reload/impact3"]},
"weapon.reload.fatmanFull": {"category": "player", "sounds": ["weapon/reload/fatmanFull"]}, "weapon.reload.fatmanFull": {"category": "player", "sounds": ["weapon/reload/fatmanFull"]},
"weapon.reload.screw": {"category": "player", "sounds": ["weapon/reload/screw"]}, "weapon.reload.screw": {"category": "player", "sounds": ["weapon/reload/screw"]},
"weapon.reload.grenadeTech": {"category": "player", "sounds": ["weapon/reload/grenadeTech"]},
"weapon.foley.gunWhack": {"category": "player", "sounds": ["weapon/foley/gunWhack", "weapon/foley/gunWhack2"]}, "weapon.foley.gunWhack": {"category": "player", "sounds": ["weapon/foley/gunWhack", "weapon/foley/gunWhack2"]},