mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
substantial amounts of trolling
This commit is contained in:
parent
fcf0f0d2d9
commit
51839e8abb
@ -1,8 +1,13 @@
|
||||
package com.hbm.entity.projectile;
|
||||
|
||||
import com.hbm.items.weapon.sedna.BulletConfig;
|
||||
import com.hbm.lib.ModDamageSource;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.AuxParticlePacketNT;
|
||||
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.util.Vec3;
|
||||
@ -88,7 +93,21 @@ public class EntityBulletBaseMK4 extends EntityThrowableInterp {
|
||||
@Override
|
||||
protected void onImpact(MovingObjectPosition mop) {
|
||||
if(!worldObj.isRemote) {
|
||||
if(mop.typeOfHit == mop.typeOfHit.ENTITY && !mop.entityHit.isEntityAlive()) return;
|
||||
|
||||
this.setDead();
|
||||
|
||||
if(mop.typeOfHit == mop.typeOfHit.ENTITY && mop.entityHit.isEntityAlive()) {
|
||||
mop.entityHit.attackEntityFrom(ModDamageSource.turbofan, 1_000F);
|
||||
|
||||
NBTTagCompound vdat = new NBTTagCompound();
|
||||
vdat.setString("type", "giblets");
|
||||
vdat.setInteger("ent", mop.entityHit.getEntityId());
|
||||
vdat.setInteger("cDiv", 2);
|
||||
PacketDispatcher.wrapper.sendToAllAround(
|
||||
new AuxParticlePacketNT(vdat, mop.entityHit.posX, mop.entityHit.posY + mop.entityHit.height * 0.5, mop.entityHit.posZ),
|
||||
new TargetPoint(this.dimension, mop.entityHit.posX, mop.entityHit.posY + mop.entityHit.height * 0.5, mop.entityHit.posZ, 150));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ public class BulletConfig {
|
||||
|
||||
public ComparableStack ammo;
|
||||
public int ammoReloadCount = 1;
|
||||
public float velocity = 5F;
|
||||
public float velocity = 10F;
|
||||
public float spread = 0F;
|
||||
public float wear = 1F;
|
||||
public int projectilesMin = 1;
|
||||
|
||||
@ -4,6 +4,7 @@ import java.util.function.BiConsumer;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
|
||||
import com.hbm.items.weapon.sedna.hud.IHUDComponent;
|
||||
import com.hbm.render.anim.BusAnimation;
|
||||
import com.hbm.render.anim.HbmAnimations.AnimType;
|
||||
|
||||
@ -20,8 +21,11 @@ public class GunConfig {
|
||||
public static final String O_RECEIVERS = "O_RECEIVERS";
|
||||
public static final String F_DURABILITY = "F_DURABILITY";
|
||||
public static final String I_DRAWDURATION = "I_DRAWDURATION";
|
||||
public static final String I_INSPECTDURATION = "I_INSPECTDURATION";
|
||||
public static final String O_CROSSHAIR = "O_CROSSHAIR";
|
||||
public static final String B_DOESSMOKE = "B_DOESSMOKE";
|
||||
public static final String B_RELOADANIMATIONSEQUENTIAL = "B_RELOADANIMATIONSEQUENTIAL";
|
||||
public static final String CON_ORCHESTRA = "CON_ORCHESTRA";
|
||||
public static final String CON_ONPRESSPRIMARY = "CON_ONPRESSPRIMARY";
|
||||
public static final String CON_ONPRESSSECONDARY = "CON_ONPRESSSECONDARY";
|
||||
public static final String CON_ONPRESSTERTIARY = "CON_ONPRESSTERTIARY";
|
||||
@ -32,6 +36,7 @@ public class GunConfig {
|
||||
public static final String CON_ONRELEASERELOAD = "CON_ONRELEASERELOAD";
|
||||
public static final String CON_DECIDER = "CON_DECIDER";
|
||||
public static final String FUN_ANIMNATIONS = "FUN_ANIMNATIONS";
|
||||
public static final String O_HUDCOMPONENTS = "O_HUDCOMPONENTS";
|
||||
|
||||
/* FIELDS */
|
||||
|
||||
@ -39,8 +44,12 @@ public class GunConfig {
|
||||
protected Receiver[] receivers_DNA;
|
||||
protected float durability_DNA;
|
||||
protected int drawDuration_DNA = 0;
|
||||
protected int inspectDuration_DNA = 0;
|
||||
protected Crosshair crosshair_DNA;
|
||||
protected boolean doesSmoke_DNA;
|
||||
protected boolean reloadAnimationsSequential_DNA;
|
||||
/** This piece only triggers during reloads, playing sounds depending on the reload's progress making reload sounds easier and synced to animations */
|
||||
protected BiConsumer<ItemStack, LambdaContext> orchestra_DNA;
|
||||
/** Lambda functions for clicking shit */
|
||||
protected BiConsumer<ItemStack, LambdaContext> onPressPrimary_DNA;
|
||||
protected BiConsumer<ItemStack, LambdaContext> onPressSecondary_DNA;
|
||||
@ -55,14 +64,18 @@ public class GunConfig {
|
||||
protected BiConsumer<ItemStack, LambdaContext> decider_DNA;
|
||||
/** Lambda that returns the relevant animation for the given params */
|
||||
protected BiFunction<ItemStack, AnimType, BusAnimation> animations_DNA;
|
||||
protected IHUDComponent[] hudComponents_DNA;
|
||||
|
||||
/* GETTERS */
|
||||
|
||||
public Receiver[] getReceivers(ItemStack stack) { return WeaponUpgradeManager.eval(receivers_DNA, stack, O_RECEIVERS, this); }
|
||||
public float getDurability(ItemStack stack) { return WeaponUpgradeManager.eval(durability_DNA, stack, F_DURABILITY, this); }
|
||||
public int getDrawDuration(ItemStack stack) { return WeaponUpgradeManager.eval(drawDuration_DNA, stack, I_DRAWDURATION, this); }
|
||||
public int getInspectDuration(ItemStack stack) { return WeaponUpgradeManager.eval(inspectDuration_DNA, stack, I_INSPECTDURATION, this); }
|
||||
public Crosshair getCrosshair(ItemStack stack) { return WeaponUpgradeManager.eval(crosshair_DNA, stack, O_CROSSHAIR, this); }
|
||||
public boolean getDoesSmoke(ItemStack stack) { return WeaponUpgradeManager.eval(doesSmoke_DNA, stack, B_DOESSMOKE, this); }
|
||||
public boolean getReloadAnimSequential(ItemStack stack) { return WeaponUpgradeManager.eval(reloadAnimationsSequential_DNA, stack, B_RELOADANIMATIONSEQUENTIAL, this); }
|
||||
public BiConsumer<ItemStack, LambdaContext> getOrchestra(ItemStack stack) { return WeaponUpgradeManager.eval(this.orchestra_DNA, stack, CON_ORCHESTRA, this); }
|
||||
|
||||
public BiConsumer<ItemStack, LambdaContext> getPressPrimary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressPrimary_DNA, stack, CON_ONPRESSPRIMARY, this); }
|
||||
public BiConsumer<ItemStack, LambdaContext> getPressSecondary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressSecondary_DNA, stack, CON_ONPRESSSECONDARY, this); }
|
||||
@ -77,13 +90,18 @@ public class GunConfig {
|
||||
public BiConsumer<ItemStack, LambdaContext> getDecider(ItemStack stack) { return WeaponUpgradeManager.eval(this.decider_DNA, stack, CON_DECIDER, this); }
|
||||
|
||||
public BiFunction<ItemStack, AnimType, BusAnimation> getAnims(ItemStack stack) { return WeaponUpgradeManager.eval(this.animations_DNA, stack, FUN_ANIMNATIONS, this); }
|
||||
public IHUDComponent[] getHUDComponents(ItemStack stack) { return WeaponUpgradeManager.eval(this.hudComponents_DNA, stack, O_HUDCOMPONENTS, this); }
|
||||
|
||||
/* SETTERS */
|
||||
|
||||
public GunConfig rec(Receiver... receivers) { this.receivers_DNA = receivers; return this; }
|
||||
public GunConfig dura(float dura) { this.durability_DNA = dura; return this; }
|
||||
public GunConfig draw(int draw) { this.drawDuration_DNA = draw; return this; }
|
||||
public GunConfig inspect(int inspect) { this.inspectDuration_DNA = inspect; return this; }
|
||||
public GunConfig crosshair(Crosshair crosshair) { this.crosshair_DNA = crosshair; return this; }
|
||||
public GunConfig smoke(boolean doesSmoke) { this.doesSmoke_DNA = doesSmoke; return this; }
|
||||
|
||||
public GunConfig orchestra(BiConsumer<ItemStack, LambdaContext> orchestra) { this.orchestra_DNA = orchestra; return this; }
|
||||
|
||||
//press
|
||||
public GunConfig pp(BiConsumer<ItemStack, LambdaContext> lambda) { this.onPressPrimary_DNA = lambda; return this; }
|
||||
@ -100,6 +118,7 @@ public class GunConfig {
|
||||
//decider
|
||||
public GunConfig decider(BiConsumer<ItemStack, LambdaContext> lambda) { this.decider_DNA = lambda; return this; }
|
||||
|
||||
//anims
|
||||
public GunConfig anim(BiFunction<ItemStack, AnimType, BusAnimation> lambda) { this.animations_DNA = lambda; return this; }
|
||||
//client
|
||||
public GunConfig anim(BiFunction<ItemStack, AnimType, BusAnimation> lambda) { this.animations_DNA = lambda; return this; }
|
||||
public GunConfig hud(IHUDComponent... components) { this.hudComponents_DNA = components; return this; }
|
||||
}
|
||||
|
||||
@ -1,9 +1,14 @@
|
||||
package com.hbm.items.weapon.sedna;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import com.hbm.handler.HbmKeybinds.EnumKeybind;
|
||||
import com.hbm.interfaces.IItemHUD;
|
||||
import com.hbm.items.IEquipReceiver;
|
||||
import com.hbm.items.IKeybindReceiver;
|
||||
import com.hbm.items.weapon.sedna.hud.IHUDComponent;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.GunAnimationPacket;
|
||||
@ -21,22 +26,32 @@ import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
|
||||
|
||||
public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipReceiver, IItemHUD {
|
||||
|
||||
/** Timestamp for rendering smoke nodes and muzzle flashes */
|
||||
public long lastShot;
|
||||
/** [0;1] randomized every shot for various rendering applications */
|
||||
public double shotRand = 0D;
|
||||
public List<SmokeNode> smokeNodes = new ArrayList();
|
||||
|
||||
public static final String O_GUNCONFIG = "O_GUNCONFIG";
|
||||
|
||||
public static final String KEY_DRAWN = "drawn";
|
||||
public static final String KEY_AIMING = "aiming";
|
||||
public static final String KEY_WEAR = "wear";
|
||||
public static final String KEY_TIMER = "timer";
|
||||
public static final String KEY_STATE = "state";
|
||||
public static final String KEY_PRIMARY = "mouse1";
|
||||
public static final String KEY_SECONDARY = "mouse2";
|
||||
public static final String KEY_TERTIARY = "mouse3";
|
||||
public static final String KEY_RELOAD = "reload";
|
||||
public static final String KEY_LASTANIM = "lastanim";
|
||||
public static final String KEY_ANIMTIMER = "animtimer";
|
||||
|
||||
public static float prevAimingProgress;
|
||||
public static float aimingProgress;
|
||||
@ -59,7 +74,8 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
|
||||
IDLE, //gun can be fired or reloaded
|
||||
WINDUP, //fire button is down, added delay before fire
|
||||
COOLDOWN, //gun has been fired, cooldown
|
||||
RELOADING //gun is currently reloading
|
||||
RELOADING, //gun is currently reloading
|
||||
JAMMED, //gun is jammed, either after reloading or while firing
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -85,7 +101,15 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
|
||||
|
||||
@Override
|
||||
public void onEquip(EntityPlayer player, ItemStack stack) {
|
||||
if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.EQUIP.ordinal()), (EntityPlayerMP) player);
|
||||
playAnimation(player, stack, AnimType.EQUIP);
|
||||
}
|
||||
|
||||
public static void playAnimation(EntityPlayer player, ItemStack stack, AnimType type) {
|
||||
if(player instanceof EntityPlayerMP) {
|
||||
PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(type.ordinal()), (EntityPlayerMP) player);
|
||||
setLastAnim(stack, type);
|
||||
setAnimTimer(stack, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -93,6 +117,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
|
||||
|
||||
if(!(entity instanceof EntityPlayer)) return;
|
||||
EntityPlayer player = (EntityPlayer) entity;
|
||||
GunConfig config = this.getConfig(stack);
|
||||
|
||||
if(world.isRemote) {
|
||||
|
||||
@ -104,50 +129,90 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
|
||||
offset.rotateAroundY(-entity.rotationYaw / 180F * (float) Math.PI);
|
||||
world.spawnParticle("flame", entity.posX + offset.xCoord, entity.posY + entity.getEyeHeight() + offset.yCoord, entity.posZ + offset.zCoord, 0, 0, 0);*/
|
||||
|
||||
/// AIMING ///
|
||||
prevAimingProgress = aimingProgress;
|
||||
boolean aiming = this.getIsAiming(stack);
|
||||
float aimSpeed = 0.25F;
|
||||
if(aiming && aimingProgress < 1F) aimingProgress += aimSpeed;
|
||||
if(!aiming && aimingProgress > 0F) aimingProgress -= aimSpeed;
|
||||
aimingProgress = MathHelper.clamp_float(aimingProgress, 0F, 1F);
|
||||
|
||||
/// SMOKE NODES ///
|
||||
if(config.getDoesSmoke(stack)) {
|
||||
|
||||
boolean smoking = lastShot + 2000 > System.currentTimeMillis();
|
||||
if(!smoking && !smokeNodes.isEmpty()) smokeNodes.clear();
|
||||
|
||||
if(smoking) {
|
||||
Vec3 prev = Vec3.createVectorHelper(-entity.motionX, -entity.motionY, -entity.motionZ);
|
||||
prev.rotateAroundY((float) (entity.rotationYaw * Math.PI / 180D));
|
||||
double accel = 15D;
|
||||
double side = (entity.rotationYaw - player.prevRotationYawHead) * 0.1D;
|
||||
double waggle = 0.025D;
|
||||
|
||||
for(SmokeNode node : smokeNodes) {
|
||||
node.forward += -prev.zCoord * accel + world.rand.nextGaussian() * waggle;
|
||||
node.lift += prev.yCoord + 1.5D;
|
||||
node.side += prev.xCoord * accel + world.rand.nextGaussian() * waggle + side;
|
||||
if(node.alpha > 0) node.alpha -= 0.025D;
|
||||
node.width *= 1.15;
|
||||
}
|
||||
|
||||
double alpha = (System.currentTimeMillis() - lastShot) / 2000D;
|
||||
alpha = (1 - alpha) * 0.5D;
|
||||
|
||||
if(this.getState(stack) == GunState.RELOADING || smokeNodes.size() == 0) alpha = 0;
|
||||
smokeNodes.add(new SmokeNode(alpha));
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
GunConfig config = this.getConfig(stack);
|
||||
|
||||
/// RESET WHEN NOT EQUIPPED ///
|
||||
if(!isHeld) {
|
||||
this.setState(stack, GunState.DRAWING);
|
||||
this.setTimer(stack, config.getDrawDuration(stack));
|
||||
GunState current = this.getState(stack);
|
||||
if(current != GunState.JAMMED) {
|
||||
this.setState(stack, GunState.DRAWING);
|
||||
this.setTimer(stack, config.getDrawDuration(stack));
|
||||
}
|
||||
this.setIsAiming(stack, false);
|
||||
return;
|
||||
}
|
||||
|
||||
LambdaContext ctx = new LambdaContext(config, player);
|
||||
|
||||
BiConsumer<ItemStack, LambdaContext> orchestra = config.getOrchestra(stack);
|
||||
if(orchestra != null) orchestra.accept(stack, ctx);
|
||||
|
||||
setAnimTimer(stack, getAnimTimer(stack) + 1);
|
||||
|
||||
/// STTATE MACHINE ///
|
||||
int timer = this.getTimer(stack);
|
||||
if(timer > 0) this.setTimer(stack, timer - 1);
|
||||
if(timer <= 1) nextState(player, stack);
|
||||
}
|
||||
|
||||
public void nextState(EntityPlayer player, ItemStack stack) {
|
||||
GunConfig cfg = this.getConfig(stack);
|
||||
cfg.getDecider(stack).accept(stack, new LambdaContext(cfg, player));
|
||||
if(timer <= 1) config.getDecider(stack).accept(stack, ctx);
|
||||
}
|
||||
|
||||
// GUN DRAWN //
|
||||
public static boolean getIsDrawn(ItemStack stack) { return getValueBool(stack, KEY_DRAWN); }
|
||||
public static void setIsDrawn(ItemStack stack, boolean value) { setValueBool(stack, KEY_DRAWN, value); }
|
||||
|
||||
// GUN STATE TIMER //
|
||||
public static int getTimer(ItemStack stack) { return getValueInt(stack, KEY_TIMER); }
|
||||
public static void setTimer(ItemStack stack, int value) { setValueInt(stack, KEY_TIMER, value); }
|
||||
|
||||
// GUN STATE //
|
||||
public static GunState getState(ItemStack stack) { return EnumUtil.grabEnumSafely(GunState.class, getValueByte(stack, KEY_STATE)); }
|
||||
public static void setState(ItemStack stack, GunState value) { setValueByte(stack, KEY_STATE, (byte) value.ordinal()); }
|
||||
|
||||
// GUN AIMING //
|
||||
public static boolean getIsAiming(ItemStack stack) { return getValueBool(stack, KEY_AIMING); }
|
||||
public static void setIsAiming(ItemStack stack, boolean value) { setValueBool(stack, KEY_AIMING, value); }
|
||||
// GUN AIMING //
|
||||
public static float getWear(ItemStack stack) { return getValueFloat(stack, KEY_WEAR); }
|
||||
public static void setWear(ItemStack stack, float value) { setValueFloat(stack, KEY_WEAR, value); }
|
||||
// ANIM TRACKING //
|
||||
public static AnimType getLastAnim(ItemStack stack) { return EnumUtil.grabEnumSafely(AnimType.class, getValueInt(stack, KEY_LASTANIM)); }
|
||||
public static void setLastAnim(ItemStack stack, AnimType value) { setValueInt(stack, KEY_LASTANIM, value.ordinal()); }
|
||||
public static int getAnimTimer(ItemStack stack) { return getValueInt(stack, KEY_ANIMTIMER); }
|
||||
public static void setAnimTimer(ItemStack stack, int value) { setValueInt(stack, KEY_ANIMTIMER, value); }
|
||||
|
||||
// BUTTON STATES //
|
||||
public static boolean getPrimary(ItemStack stack) { return getValueBool(stack, KEY_PRIMARY); }
|
||||
@ -164,6 +229,9 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
|
||||
public static int getValueInt(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getInteger(name); return 0; }
|
||||
public static void setValueInt(ItemStack stack, String name, int value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setInteger(name, value); }
|
||||
|
||||
public static float getValueFloat(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getFloat(name); return 0; }
|
||||
public static void setValueFloat(ItemStack stack, String name, float value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setFloat(name, value); }
|
||||
|
||||
public static byte getValueByte(ItemStack stack, String name) { if(stack.hasTagCompound()) return stack.getTagCompound().getByte(name); return 0; }
|
||||
public static void setValueByte(ItemStack stack, String name, byte value) { if(!stack.hasTagCompound()) stack.stackTagCompound = new NBTTagCompound(); stack.getTagCompound().setByte(name, value); }
|
||||
|
||||
@ -184,11 +252,32 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) {
|
||||
|
||||
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
|
||||
|
||||
if(type == ElementType.CROSSHAIRS) {
|
||||
event.setCanceled(true);
|
||||
if(aimingProgress >= 1F) return;
|
||||
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
|
||||
RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, gun.getConfig(stack).getCrosshair(stack));
|
||||
}
|
||||
|
||||
IHUDComponent[] components = gun.getConfig(stack).getHUDComponents(stack);
|
||||
|
||||
for(IHUDComponent component : components) {
|
||||
int bottomOffset = 0;
|
||||
component.renderHUDComponent(event, type, player, stack, bottomOffset);
|
||||
bottomOffset += component.getComponentHeight(player, stack);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SmokeNode {
|
||||
|
||||
public double forward = 0D;
|
||||
public double side = 0D;
|
||||
public double lift = 0D;
|
||||
public double alpha;
|
||||
public double width = 1D;
|
||||
|
||||
public SmokeNode(double alpha) { this.alpha = alpha; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,7 +39,7 @@ public class Receiver {
|
||||
protected float baseDamage_DNA;
|
||||
protected int delayAfterFire_DNA;
|
||||
protected int roundsPerCycle_DNA = 1;
|
||||
protected float spreadMod_DNA = 1F;
|
||||
protected float spreadModExtra_DNA = 0F;
|
||||
protected boolean refireOnHold_DNA = false;
|
||||
protected CasingEjector ejector_DNA = null;
|
||||
protected int reloadDuration_DNA;
|
||||
@ -54,7 +54,7 @@ public class Receiver {
|
||||
public float getBaseDamage(ItemStack stack) { return WeaponUpgradeManager.eval(this.baseDamage_DNA, stack, F_BASEDAMAGE, this); }
|
||||
public int getDelayAfterFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.delayAfterFire_DNA, stack, I_DELAYAFTERFIRE, this); }
|
||||
public int getRoundsPerCycle(ItemStack stack) { return WeaponUpgradeManager.eval(this.roundsPerCycle_DNA, stack, I_ROUNDSPERCYCLE, this); }
|
||||
public float getSpreadMod(ItemStack stack) { return WeaponUpgradeManager.eval(this.spreadMod_DNA, stack, F_SPREADMOD, this); }
|
||||
public float getSpreadMod(ItemStack stack) { return WeaponUpgradeManager.eval(this.spreadModExtra_DNA, stack, F_SPREADMOD, this); }
|
||||
public boolean getRefireOnHold(ItemStack stack) { return WeaponUpgradeManager.eval(this.refireOnHold_DNA, stack, B_REFIREONHOLD, this); }
|
||||
public CasingEjector getEjector(ItemStack stack) { return WeaponUpgradeManager.eval(this.ejector_DNA, stack, O_EJECTOR, this); }
|
||||
public int getReloadDuration(ItemStack stack) { return WeaponUpgradeManager.eval(this.reloadDuration_DNA, stack, I_RELOADDURATION, this); }
|
||||
@ -70,7 +70,7 @@ public class Receiver {
|
||||
public Receiver dmg(float dmg) { this.baseDamage_DNA = dmg; return this; }
|
||||
public Receiver delay(int delay) { this.delayAfterFire_DNA = delay; return this; }
|
||||
public Receiver rounds(int rounds) { this.roundsPerCycle_DNA = rounds; return this; }
|
||||
public Receiver spread(int spread) { this.spreadMod_DNA = spread; return this; }
|
||||
public Receiver spread(int spread) { this.spreadModExtra_DNA = spread; return this; }
|
||||
public Receiver auto(boolean auto) { this.refireOnHold_DNA = auto; return this; }
|
||||
public Receiver burst(CasingEjector ejector) { this.ejector_DNA = ejector; return this; }
|
||||
public Receiver reload(int delay) { this.reloadDuration_DNA = delay; return this; }
|
||||
|
||||
@ -1,20 +1,27 @@
|
||||
package com.hbm.items.weapon.sedna.factory;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.weapon.sedna.BulletConfig;
|
||||
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.mags.MagazineRevolverDrum;
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
|
||||
import com.hbm.items.weapon.sedna.mags.MagazineFullReload;
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.render.anim.HbmAnimations.AnimType;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class GunFactory {
|
||||
|
||||
|
||||
public static BulletConfig ammo_debug;
|
||||
public static BulletConfig ammo_debug_buckshot;
|
||||
|
||||
public static void init() {
|
||||
|
||||
@ -23,13 +30,14 @@ public class GunFactory {
|
||||
|
||||
/// BULLLET CFGS ///
|
||||
ammo_debug = new BulletConfig().setItem(ModItems.ammo_debug).setSpread(0.01F);
|
||||
ammo_debug_buckshot = new BulletConfig().setItem(ModItems.ammo_12gauge).setSpread(0.1F).setProjectiles(6, 6);
|
||||
|
||||
/// GUNS ///
|
||||
ModItems.gun_debug = new ItemGunBaseNT(new GunConfig()
|
||||
.dura(600).draw(15).crosshair(Crosshair.L_CLASSIC)
|
||||
.dura(600F).draw(15).inspect(23).crosshair(Crosshair.L_CLASSIC).hud(Lego.HUD_COMPONENT_DURABILITY, Lego.HUD_COMPONENT_AMMO).smoke(true).orchestra(DEBUG_ORCHESTRA)
|
||||
.rec(new Receiver(0)
|
||||
.dmg(10F).delay(12).reload(20).sound("hbm:weapon.44Shoot", 1.0F, 1.0F)
|
||||
.mag(new MagazineRevolverDrum(0, 6).addConfigs(ammo_debug))
|
||||
.dmg(10F).delay(12).reload(46).sound("hbm:weapon.44Shoot", 1.0F, 1.0F)
|
||||
.mag(new MagazineFullReload(0, 12).addConfigs(ammo_debug, ammo_debug_buckshot))
|
||||
.canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_STANDARD_FIRE))
|
||||
.pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY) .pr(Lego.LAMBDA_STANDARD_RELOAD) .pt(Lego.LAMBDA_TOGGLE_AIM)
|
||||
.decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
|
||||
@ -39,4 +47,24 @@ public class GunFactory {
|
||||
/// PROXY BULLSHIT ///
|
||||
MainRegistry.proxy.registerGunCfg();
|
||||
}
|
||||
|
||||
public static BiConsumer<ItemStack, LambdaContext> DEBUG_ORCHESTRA = (stack, ctx) -> {
|
||||
EntityPlayer player = ctx.player;
|
||||
AnimType type = ItemGunBaseNT.getLastAnim(stack);
|
||||
int timer = ItemGunBaseNT.getAnimTimer(stack);
|
||||
|
||||
if(type == AnimType.RELOAD) {
|
||||
if(timer == 3) player.worldObj.playSoundAtEntity(player, "hbm:weapon.reload.dryFireClick", 1F, 1F);
|
||||
if(timer == 10) player.worldObj.playSoundAtEntity(player, "hbm:weapon.reload.magSmallRemove", 1F, 1F);
|
||||
if(timer == 34) player.worldObj.playSoundAtEntity(player, "hbm:weapon.reload.magSmallInsert", 1F, 1F);
|
||||
if(timer == 40) player.worldObj.playSoundAtEntity(player, "hbm:weapon.reload.revolverClose", 1F, 1F);
|
||||
}
|
||||
if(type == AnimType.CYCLE) {
|
||||
if(timer == 11) player.worldObj.playSoundAtEntity(player, "hbm:weapon.reload.revolverCock", 1F, 1F);
|
||||
}
|
||||
if(type == AnimType.INSPECT) {
|
||||
if(timer == 3) player.worldObj.playSoundAtEntity(player, "hbm:weapon.reload.dryFireClick", 1F, 1F);
|
||||
if(timer == 16) player.worldObj.playSoundAtEntity(player, "hbm:weapon.reload.revolverClose", 1F, 1F);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@ -14,6 +14,7 @@ public class GunFactoryClient {
|
||||
|
||||
public static void init() {
|
||||
ammo_debug.setRenderer(RENDER_STANDARD_BULLET);
|
||||
ammo_debug_buckshot.setRenderer(RENDER_STANDARD_BULLET);
|
||||
}
|
||||
|
||||
public static BiConsumer<EntityBulletBaseMK4, Float> RENDER_STANDARD_BULLET = (bullet, interp) -> {
|
||||
|
||||
@ -64,6 +64,7 @@ public class GunStateDecider {
|
||||
|
||||
if(lastState == GunState.COOLDOWN) {
|
||||
|
||||
EntityPlayer player = ctx.player;
|
||||
GunConfig cfg = ctx.config;
|
||||
Receiver rec = cfg.getReceivers(stack)[recIndex];
|
||||
|
||||
@ -74,6 +75,11 @@ public class GunStateDecider {
|
||||
rec.getOnFire(stack).accept(stack, ctx);
|
||||
ItemGunBaseNT.setState(stack, GunState.COOLDOWN);
|
||||
ItemGunBaseNT.setTimer(stack, rec.getDelayAfterFire(stack));
|
||||
|
||||
player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, rec.getFireSound(stack), rec.getFireVolume(stack), rec.getFirePitch(stack));
|
||||
|
||||
int remaining = rec.getRoundsPerCycle(stack) - 1;
|
||||
for(int i = 0; i < remaining; i++) if(rec.getCanFire(stack).apply(stack, ctx)) rec.getOnFire(stack).accept(stack, ctx);
|
||||
//if not, revert to idle
|
||||
} else {
|
||||
ItemGunBaseNT.setState(stack, GunState.IDLE);
|
||||
|
||||
@ -10,15 +10,14 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT;
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState;
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
|
||||
import com.hbm.items.weapon.sedna.Receiver;
|
||||
import com.hbm.items.weapon.sedna.hud.HUDComponentAmmoCounter;
|
||||
import com.hbm.items.weapon.sedna.hud.HUDComponentDurabilityBar;
|
||||
import com.hbm.items.weapon.sedna.mags.IMagazine;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.GunAnimationPacket;
|
||||
import com.hbm.render.anim.BusAnimation;
|
||||
import com.hbm.render.anim.BusAnimationSequence;
|
||||
import com.hbm.render.anim.HbmAnimations.AnimType;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
@ -29,6 +28,9 @@ import net.minecraft.item.ItemStack;
|
||||
public class Lego {
|
||||
|
||||
public static final Random ANIM_RAND = new Random();
|
||||
|
||||
public static HUDComponentDurabilityBar HUD_COMPONENT_DURABILITY = new HUDComponentDurabilityBar();
|
||||
public static HUDComponentAmmoCounter HUD_COMPONENT_AMMO = new HUDComponentAmmoCounter(0);
|
||||
|
||||
/**
|
||||
* If IDLE and the mag of receiver 0 can be loaded, set state to RELOADING. Used by keybinds. */
|
||||
@ -36,17 +38,18 @@ public class Lego {
|
||||
|
||||
EntityPlayer player = ctx.player;
|
||||
Receiver rec = ctx.config.getReceivers(stack)[0];
|
||||
GunState state = ItemGunBaseNT.getState(stack);
|
||||
|
||||
if(ItemGunBaseNT.getState(stack) == GunState.IDLE) {
|
||||
if(state == GunState.IDLE) {
|
||||
|
||||
ItemGunBaseNT.setIsAiming(stack, false);
|
||||
|
||||
if(rec.getMagazine(stack).canReload(stack, ctx.player)) {
|
||||
ItemGunBaseNT.setState(stack, GunState.RELOADING);
|
||||
ItemGunBaseNT.setTimer(stack, rec.getReloadDuration(stack));
|
||||
if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.RELOAD.ordinal()), (EntityPlayerMP) player);
|
||||
ItemGunBaseNT.playAnimation(player, stack, AnimType.RELOAD);
|
||||
} else {
|
||||
if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.INSPECT.ordinal()), (EntityPlayerMP) player);
|
||||
ItemGunBaseNT.playAnimation(player, stack, AnimType.INSPECT);
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -54,14 +57,18 @@ public class Lego {
|
||||
/**
|
||||
* If IDLE and ammo is loaded, fire and set to JUST_FIRED. */
|
||||
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_STANDARD_CLICK_PRIMARY = (stack, ctx) -> {
|
||||
|
||||
|
||||
EntityPlayer player = ctx.player;
|
||||
Receiver rec = ctx.config.getReceivers(stack)[0];
|
||||
GunState state = ItemGunBaseNT.getState(stack);
|
||||
|
||||
if(ItemGunBaseNT.getState(stack) == GunState.IDLE && rec.getCanFire(stack).apply(stack, ctx)) {
|
||||
if(state == GunState.IDLE && rec.getCanFire(stack).apply(stack, ctx)) {
|
||||
ItemGunBaseNT.setState(stack, GunState.COOLDOWN);
|
||||
ItemGunBaseNT.setTimer(stack, rec.getDelayAfterFire(stack));
|
||||
rec.getOnFire(stack).accept(stack, ctx);
|
||||
|
||||
player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, rec.getFireSound(stack), rec.getFireVolume(stack), rec.getFirePitch(stack));
|
||||
|
||||
int remaining = rec.getRoundsPerCycle(stack) - 1;
|
||||
for(int i = 0; i < remaining; i++) if(rec.getCanFire(stack).apply(stack, ctx)) rec.getOnFire(stack).accept(stack, ctx);
|
||||
}
|
||||
@ -82,24 +89,24 @@ public class Lego {
|
||||
/** Spawns an EntityBulletBaseMK4 with the loaded bulletcfg */
|
||||
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_STANDARD_FIRE = (stack, ctx) -> {
|
||||
EntityPlayer player = ctx.player;
|
||||
if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.CYCLE.ordinal()), (EntityPlayerMP) player);
|
||||
ItemGunBaseNT.playAnimation(player, stack, AnimType.CYCLE);
|
||||
|
||||
double sideOffset = ItemGunBaseNT.getIsAiming(stack) ? 0 : -0.3125D;
|
||||
float aim = ItemGunBaseNT.getIsAiming(stack) ? 0.25F : 1F;
|
||||
Receiver primary = ctx.config.getReceivers(stack)[0];
|
||||
IMagazine mag = primary.getMagazine(stack);
|
||||
BulletConfig config = (BulletConfig) mag.getType(stack);
|
||||
|
||||
EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4(player, (BulletConfig) mag.getType(stack), primary.getBaseDamage(stack), primary.getSpreadMod(stack) * aim, sideOffset, -0.0625, 0.75);
|
||||
player.worldObj.spawnEntityInWorld(mk4);
|
||||
player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, primary.getFireSound(stack), primary.getFireVolume(stack), primary.getFirePitch(stack));
|
||||
int projectiles = config.projectilesMin;
|
||||
if(config.projectilesMax > config.projectilesMin) projectiles += player.getRNG().nextInt(config.projectilesMax - config.projectilesMin + 1);
|
||||
|
||||
mag.setAmount(stack, mag.getAmount(stack) - 1);;
|
||||
};
|
||||
|
||||
/** No reload, simply play inspect animation */
|
||||
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_DEBUG_RELOAD = (stack, ctx) -> {
|
||||
EntityPlayer player = ctx.player;
|
||||
if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.INSPECT.ordinal()), (EntityPlayerMP) player);
|
||||
for(int i = 0; i < projectiles; i++) {
|
||||
EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4(player, config, primary.getBaseDamage(stack), primary.getSpreadMod(stack) * aim + 1F, sideOffset, -0.0625, 0.75);
|
||||
player.worldObj.spawnEntityInWorld(mk4);
|
||||
}
|
||||
|
||||
mag.setAmount(stack, mag.getAmount(stack) - 1);
|
||||
ItemGunBaseNT.setWear(stack, ItemGunBaseNT.getWear(stack) + config.wear);
|
||||
};
|
||||
|
||||
/** anims for the DEBUG revolver, mostly a copy of the li'lpip but with some fixes regarding the cylinder movement */
|
||||
@ -117,10 +124,10 @@ public class Lego {
|
||||
.addBus("RELOAD_JOLT", new BusAnimationSequence().addPos(0, 0, 0, 600).addPos(2, 0, 0, 50).addPos(0, 0, 0, 100))
|
||||
.addBus("RELOAD_BULLETS", new BusAnimationSequence().addPos(0, 0, 0, 650).addPos(10, 0, 0, 300).addPos(10, 0, 0, 200).addPos(0, 0, 0, 700))
|
||||
.addBus("RELOAD_BULLETS_CON", new BusAnimationSequence().addPos(1, 0, 0, 0).addPos(1, 0, 0, 950).addPos(0, 0, 0, 1 ) );
|
||||
case INSPECT: if(ANIM_RAND.nextBoolean()) return new BusAnimation()
|
||||
.addBus("RELAOD_TILT", new BusAnimationSequence().addPos(-15, 0, 0, 100).addPos(65, 0, 0, 100).addPos(45, 0, 0, 50).addPos(0, 0, 0, 200).addPos(0, 0, 0, 1450 - 1250).addPos(-80, 0, 0, 100).addPos(-80, 0, 0, 100).addPos(0, 0, 0, 200))
|
||||
.addBus("RELOAD_CYLINDER", new BusAnimationSequence().addPos(0, 0, 0, 200).addPos(90, 0, 0, 100).addPos(90, 0, 0, 1700 - 1250).addPos(0, 0, 0, 70));
|
||||
else return new BusAnimation().addBus("ROTATE", new BusAnimationSequence().addPos(-360 * 5, 0, 0, 350 * 5));
|
||||
case INSPECT: //if(ANIM_RAND.nextBoolean()) return new BusAnimation().addBus("ROTATE", new BusAnimationSequence().addPos(-360 * 5, 0, 0, 350 * 5));
|
||||
case JAMMED: return new BusAnimation()
|
||||
.addBus("RELAOD_TILT", new BusAnimationSequence().addPos(-15, 0, 0, 100).addPos(65, 0, 0, 100).addPos(45, 0, 0, 50).addPos(0, 0, 0, 200).addPos(0, 0, 0, 200).addPos(-80, 0, 0, 100).addPos(-80, 0, 0, 100).addPos(0, 0, 0, 200))
|
||||
.addBus("RELOAD_CYLINDER", new BusAnimationSequence().addPos(0, 0, 0, 200).addPos(90, 0, 0, 100).addPos(90, 0, 0, 450).addPos(0, 0, 0, 70));
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
@ -0,0 +1,52 @@
|
||||
package com.hbm.items.weapon.sedna.hud;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
|
||||
import com.hbm.items.weapon.sedna.mags.IMagazine;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.entity.RenderItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
|
||||
|
||||
public class HUDComponentAmmoCounter implements IHUDComponent {
|
||||
|
||||
protected static final RenderItem itemRenderer = RenderItem.getInstance();
|
||||
protected int receiver;
|
||||
|
||||
public HUDComponentAmmoCounter(int receiver) {
|
||||
this.receiver = receiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getComponentHeight(EntityPlayer player, ItemStack stack){
|
||||
return 22;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderHUDComponent(Pre event, ElementType type, EntityPlayer player, ItemStack stack, int bottomOffset) {
|
||||
|
||||
ScaledResolution resolution = event.resolution;
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
int pX = resolution.getScaledWidth() / 2 + 62 + 36;
|
||||
int pZ = resolution.getScaledHeight() - bottomOffset - 21;
|
||||
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
|
||||
IMagazine mag = gun.getConfig(stack).getReceivers(stack)[this.receiver].getMagazine(stack);
|
||||
|
||||
mc.fontRenderer.drawString(mag.reportAmmoStateForHUD(stack), pX + 17, pZ + 6, 0xFFFFFF);
|
||||
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||
RenderHelper.enableGUIStandardItemLighting();
|
||||
itemRenderer.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), mag.getIconForHUD(stack), pX, pZ);
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
package com.hbm.items.weapon.sedna.hud;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
|
||||
import com.hbm.lib.RefStrings;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
|
||||
|
||||
public class HUDComponentDurabilityBar implements IHUDComponent {
|
||||
|
||||
private static final ResourceLocation misc = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_misc.png");
|
||||
|
||||
@Override
|
||||
public int getComponentHeight(EntityPlayer player, ItemStack stack) {
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderHUDComponent(Pre event, ElementType type, EntityPlayer player, ItemStack stack, int bottomOffset) {
|
||||
|
||||
ScaledResolution resolution = event.resolution;
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
int pX = resolution.getScaledWidth() / 2 + 62 + 36;
|
||||
int pZ = resolution.getScaledHeight() - 21;
|
||||
|
||||
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
|
||||
int dura = (int) (50 * gun.getWear(stack) / gun.getConfig(stack).getDurability(stack));
|
||||
|
||||
GL11.glColor4f(1F, 1F, 1F, 1F);
|
||||
|
||||
mc.renderEngine.bindTexture(misc);
|
||||
mc.ingameGUI.drawTexturedModalRect(pX, pZ + 16, 94, 0, 52, 3);
|
||||
mc.ingameGUI.drawTexturedModalRect(pX + 1, pZ + 16, 95, 3, 50 - dura, 3);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package com.hbm.items.weapon.sedna.hud;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
|
||||
|
||||
public interface IHUDComponent {
|
||||
|
||||
public int getComponentHeight(EntityPlayer player, ItemStack stack);
|
||||
public void renderHUDComponent(Pre event, ElementType type, EntityPlayer player, ItemStack stack, int bottomOffset);
|
||||
}
|
||||
@ -9,12 +9,12 @@ import net.minecraft.item.ItemStack;
|
||||
*
|
||||
* @author hbm
|
||||
*/
|
||||
public interface IMagazine {
|
||||
public interface IMagazine<T> {
|
||||
|
||||
/** What ammo is loaded currently */
|
||||
public Object getType(ItemStack stack);
|
||||
public T getType(ItemStack stack);
|
||||
/** Sets the mag's ammo type */
|
||||
public void setType(ItemStack stack, Object type);
|
||||
public void setType(ItemStack stack, T type);
|
||||
/** How much ammo this mag can carry */
|
||||
public int getCapacity(ItemStack stack);
|
||||
/** How much ammo is currently loaded */
|
||||
@ -26,5 +26,7 @@ public interface IMagazine {
|
||||
/** The action done at the end of one reload cycle, either loading one shell or replacing the whole mag */
|
||||
public void reloadAction(ItemStack stack, EntityPlayer player);
|
||||
/** The stack that should be displayed for the ammo HUD */
|
||||
public ItemStack getIcon(ItemStack stack);
|
||||
public ItemStack getIconForHUD(ItemStack stack);
|
||||
/** It explains itself */
|
||||
public String reportAmmoStateForHUD(ItemStack stack);
|
||||
}
|
||||
|
||||
@ -6,9 +6,9 @@ import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/** Uses individual bullets which are loaded all at once */
|
||||
public class MagazineRevolverDrum extends MagazineStandardBase {
|
||||
public class MagazineFullReload extends MagazineSingleTypeBase {
|
||||
|
||||
public MagazineRevolverDrum(int index, int capacity) {
|
||||
public MagazineFullReload(int index, int capacity) {
|
||||
super(index, capacity);
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ public class MagazineRevolverDrum extends MagazineStandardBase {
|
||||
if(config.ammo.matchesRecipe(slot, true)) return true;
|
||||
}
|
||||
} else {
|
||||
BulletConfig config = (BulletConfig) this.getType(stack);
|
||||
BulletConfig config = this.getType(stack);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); }
|
||||
if(config.ammo.matchesRecipe(slot, true)) return true;
|
||||
}
|
||||
@ -59,7 +59,7 @@ public class MagazineRevolverDrum extends MagazineStandardBase {
|
||||
}
|
||||
//mag has a type set, only load that
|
||||
} else {
|
||||
BulletConfig config = (BulletConfig) this.getType(stack);
|
||||
BulletConfig config = this.getType(stack);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } //fixing broken NBT
|
||||
|
||||
if(config.ammo.matchesRecipe(slot, true)) {
|
||||
@ -72,13 +72,4 @@ public class MagazineRevolverDrum extends MagazineStandardBase {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getIcon(ItemStack stack) {
|
||||
Object o = this.getType(stack);
|
||||
if(o instanceof BulletConfig) {
|
||||
return ((BulletConfig) o).ammo.toStack();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -8,8 +8,8 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/** Base class for typical magazines, i.e. ones that hold bullets, shells, grenades, etc, any ammo item. Type methods deal with BulletConfigs */
|
||||
public abstract class MagazineStandardBase implements IMagazine {
|
||||
/** Base class for typical magazines, i.e. ones that hold bullets, shells, grenades, etc, any ammo item. Stores a single type of BulletConfigs */
|
||||
public abstract class MagazineSingleTypeBase implements IMagazine<BulletConfig> {
|
||||
|
||||
public static final String KEY_MAG_COUNT = "magcount";
|
||||
public static final String KEY_MAG_TYPE = "magtype";
|
||||
@ -21,15 +21,15 @@ public abstract class MagazineStandardBase implements IMagazine {
|
||||
/** How much ammo this mag can hold */
|
||||
public int capacity;
|
||||
|
||||
public MagazineStandardBase(int index, int capacity) {
|
||||
public MagazineSingleTypeBase(int index, int capacity) {
|
||||
this.index = index;
|
||||
this.capacity = capacity;
|
||||
}
|
||||
|
||||
public MagazineStandardBase addConfigs(BulletConfig... cfgs) { for(BulletConfig cfg : cfgs) acceptedBullets.add(cfg); return this; }
|
||||
public MagazineSingleTypeBase addConfigs(BulletConfig... cfgs) { for(BulletConfig cfg : cfgs) acceptedBullets.add(cfg); return this; }
|
||||
|
||||
@Override
|
||||
public Object getType(ItemStack stack) {
|
||||
public BulletConfig getType(ItemStack stack) {
|
||||
int type = getMagType(stack, index);
|
||||
if(type >= 0 && type < BulletConfig.configs.size()) {
|
||||
return BulletConfig.configs.get(type);
|
||||
@ -38,12 +38,23 @@ public abstract class MagazineStandardBase implements IMagazine {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setType(ItemStack stack, Object type) {
|
||||
if(!(type instanceof BulletConfig)) return;
|
||||
public void setType(ItemStack stack, BulletConfig type) {
|
||||
int i = BulletConfig.configs.indexOf(type);
|
||||
if(i >= 0) setMagType(stack, index, i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getIconForHUD(ItemStack stack) {
|
||||
BulletConfig config = this.getType(stack);
|
||||
if(config != null) return config.ammo.toStack();
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String reportAmmoStateForHUD(ItemStack stack) {
|
||||
return getAmount(stack) + " / " + getCapacity(stack);
|
||||
}
|
||||
|
||||
@Override public int getCapacity(ItemStack stack) { return capacity; }
|
||||
@Override public int getAmount(ItemStack stack) { return getMagCount(stack, index); }
|
||||
@Override public void setAmount(ItemStack stack, int amount) { setMagCount(stack, index, amount); }
|
||||
@ -55,7 +55,7 @@ public class GunAnimationPacket implements IMessage {
|
||||
if(stack == null)
|
||||
return null;
|
||||
|
||||
if(stack.getItem() instanceof com.hbm.items.weapon.sedna.ItemGunBaseNT) {
|
||||
if(stack.getItem() instanceof ItemGunBaseNT) {
|
||||
handleSedna(player, stack, slot, AnimType.values()[m.type]);
|
||||
}
|
||||
|
||||
@ -94,6 +94,11 @@ public class GunAnimationPacket implements IMessage {
|
||||
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
|
||||
GunConfig config = gun.getConfig(stack);
|
||||
|
||||
if(type == AnimType.CYCLE) {
|
||||
gun.lastShot = System.currentTimeMillis();
|
||||
gun.shotRand = player.worldObj.rand.nextDouble();
|
||||
}
|
||||
|
||||
BiFunction<ItemStack, AnimType, BusAnimation> anims = config.getAnims(stack);
|
||||
BusAnimation animation = anims.apply(stack, type);
|
||||
|
||||
|
||||
@ -28,7 +28,8 @@ public class HbmAnimations {
|
||||
SPINUP, //animation for actionstart
|
||||
SPINDOWN, //animation for actionend
|
||||
EQUIP, //animation for drawing the weapon
|
||||
INSPECT //animation for inspecting the weapon
|
||||
INSPECT, //animation for inspecting the weapon
|
||||
JAMMED //animation for jammed weapons
|
||||
}
|
||||
|
||||
// A NOTE ON SHOTGUN STYLE RELOADS
|
||||
|
||||
@ -27,6 +27,8 @@ public class ItemRenderDebug extends ItemRenderWeaponBase {
|
||||
@Override
|
||||
public void renderFirstPerson(ItemStack stack) {
|
||||
|
||||
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
|
||||
|
||||
double scale = 0.125D;
|
||||
GL11.glScaled(scale, scale, scale);
|
||||
GL11.glRotated(90, 0, 1, 0);
|
||||
@ -44,11 +46,18 @@ public class ItemRenderDebug extends ItemRenderWeaponBase {
|
||||
standardAimingTransform(stack, 0, 0, recoil[2], -recoil[2], 0, 0);
|
||||
GL11.glRotated(recoil[2] * 10, 0, 0, 1);
|
||||
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(-9, 2.5, 0);
|
||||
GL11.glRotated(recoil[2] * -10, 0, 0, 1);
|
||||
this.renderSmokeNodes(gun.smokeNodes, 0.5D);
|
||||
GL11.glPopMatrix();
|
||||
|
||||
GL11.glRotated(reloadLift[0], 0, 0, 1);
|
||||
GL11.glTranslated(reloadJolt[0], 0, 0);
|
||||
GL11.glRotated(reloadTilt[0], 1, 0, 0);
|
||||
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.debug_gun_tex);
|
||||
ResourceManager.lilmac.renderPart("Gun");
|
||||
|
||||
@ -73,6 +82,17 @@ public class ItemRenderDebug extends ItemRenderWeaponBase {
|
||||
GL11.glPopMatrix();
|
||||
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(0.125, 2.5, 0);
|
||||
this.renderGapFlash(gun.lastShot);
|
||||
GL11.glPopMatrix();
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(-9.5, 2.5, 0);
|
||||
GL11.glRotated(90 * gun.shotRand, 1, 0, 0);
|
||||
//this.renderMuzzleFlash(gun.lastShot);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,10 +1,14 @@
|
||||
package com.hbm.render.item.weapon.sedna;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
import org.lwjgl.util.glu.Project;
|
||||
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT.SmokeNode;
|
||||
import com.hbm.lib.RefStrings;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
@ -14,14 +18,18 @@ import net.minecraft.client.renderer.ActiveRenderInfo;
|
||||
import net.minecraft.client.renderer.EntityRenderer;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.IItemRenderer;
|
||||
|
||||
public abstract class ItemRenderWeaponBase implements IItemRenderer {
|
||||
|
||||
public static final ResourceLocation flash_plume = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lilmac_plume.png");
|
||||
|
||||
public static float interp;
|
||||
|
||||
@Override
|
||||
@ -226,4 +234,144 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer {
|
||||
double z = sZ + (aZ - sZ) * aimingProgress;
|
||||
GL11.glTranslated(x, y, z);
|
||||
}
|
||||
|
||||
public static void renderSmokeNodes(List<SmokeNode> nodes, double scale) {
|
||||
Tessellator tess = Tessellator.instance;
|
||||
|
||||
if(nodes.size() > 1) {
|
||||
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
||||
GL11.glDisable(GL11.GL_CULL_FACE);
|
||||
GL11.glAlphaFunc(GL11.GL_GREATER, 0F);
|
||||
GL11.glDepthMask(false);
|
||||
|
||||
tess.startDrawingQuads();
|
||||
tess.setNormal(0F, 1F, 0F);
|
||||
|
||||
for(int i = 0; i < nodes.size() - 1; i++) {
|
||||
SmokeNode node = nodes.get(i);
|
||||
SmokeNode past = nodes.get(i + 1);
|
||||
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, (float) node.alpha);
|
||||
tess.addVertex(node.forward, node.lift, node.side);
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, 0F);
|
||||
tess.addVertex(node.forward, node.lift, node.side + node.width * scale);
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, 0F);
|
||||
tess.addVertex(past.forward, past.lift, past.side + past.width * scale);
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, (float) past.alpha);
|
||||
tess.addVertex(past.forward, past.lift, past.side);
|
||||
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, (float) node.alpha);
|
||||
tess.addVertex(node.forward, node.lift, node.side);
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, 0F);
|
||||
tess.addVertex(node.forward, node.lift, node.side - node.width * scale);
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, 0F);
|
||||
tess.addVertex(past.forward, past.lift, past.side - past.width * scale);
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, (float) past.alpha);
|
||||
tess.addVertex(past.forward, past.lift, past.side);
|
||||
}
|
||||
tess.draw();
|
||||
|
||||
GL11.glDepthMask(true);
|
||||
GL11.glAlphaFunc(GL11.GL_GEQUAL, 0.1F);
|
||||
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
}
|
||||
}
|
||||
|
||||
public static void renderMuzzleFlash(long lastShot) {
|
||||
Tessellator tess = Tessellator.instance;
|
||||
|
||||
int flash = 75;
|
||||
|
||||
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 width = 6 * fire;
|
||||
double length = 15 * fire;
|
||||
double inset = 2;
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(flash_plume);
|
||||
tess.startDrawingQuads();
|
||||
tess.setNormal(0F, 1F, 0F);
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, 1F);
|
||||
|
||||
tess.addVertexWithUV(0, -width, - inset, 1, 1);
|
||||
tess.addVertexWithUV(0, width, - inset, 0, 1);
|
||||
tess.addVertexWithUV(0.1, width, length - inset, 0 ,0);
|
||||
tess.addVertexWithUV(0.1, -width, length - inset, 1, 0);
|
||||
|
||||
tess.addVertexWithUV(0, width, inset, 0, 1);
|
||||
tess.addVertexWithUV(0, -width, inset, 1, 1);
|
||||
tess.addVertexWithUV(0.1, -width, -length + inset, 1, 0);
|
||||
tess.addVertexWithUV(0.1, width, -length + inset, 0 ,0);
|
||||
|
||||
tess.addVertexWithUV(0, - inset, width, 0, 1);
|
||||
tess.addVertexWithUV(0, - inset, -width, 1, 1);
|
||||
tess.addVertexWithUV(0.1, length - inset, -width, 1, 0);
|
||||
tess.addVertexWithUV(0.1, length - inset, width, 0 ,0);
|
||||
|
||||
tess.addVertexWithUV(0, inset, -width, 1, 1);
|
||||
tess.addVertexWithUV(0, inset, width, 0, 1);
|
||||
tess.addVertexWithUV(0.1, -length + inset, width, 0 ,0);
|
||||
tess.addVertexWithUV(0.1, -length + inset, -width, 1, 0);
|
||||
|
||||
tess.draw();
|
||||
GL11.glPopMatrix();
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
}
|
||||
}
|
||||
|
||||
public static void renderGapFlash(long lastShot) {
|
||||
Tessellator tess = Tessellator.instance;
|
||||
|
||||
int flash = 75;
|
||||
|
||||
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 = 4 * fire;
|
||||
double length = 15 * fire;
|
||||
double lift = 3 * fire;
|
||||
double offset = 1 * fire;
|
||||
double lengthOffset = 0.125;
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(flash_plume);
|
||||
tess.startDrawingQuads();
|
||||
tess.setNormal(0F, 1F, 0F);
|
||||
tess.setColorRGBA_F(1F, 1F, 1F, 1F);
|
||||
|
||||
tess.addVertexWithUV(0, -height, -offset, 1, 1);
|
||||
tess.addVertexWithUV(0, height, -offset, 0, 1);
|
||||
tess.addVertexWithUV(0, height + lift, length - offset, 0 ,0);
|
||||
tess.addVertexWithUV(0, -height + lift, length - offset, 1, 0);
|
||||
|
||||
tess.addVertexWithUV(0, height, offset, 0, 1);
|
||||
tess.addVertexWithUV(0, -height, offset, 1, 1);
|
||||
tess.addVertexWithUV(0, -height + lift, -length + offset, 1, 0);
|
||||
tess.addVertexWithUV(0, height + lift, -length + offset, 0 ,0);
|
||||
|
||||
tess.addVertexWithUV(0, -height, -offset, 1, 1);
|
||||
tess.addVertexWithUV(0, height, -offset, 0, 1);
|
||||
tess.addVertexWithUV(lengthOffset, height, length - offset, 0 ,0);
|
||||
tess.addVertexWithUV(lengthOffset, -height, length - offset, 1, 0);
|
||||
|
||||
tess.addVertexWithUV(0, height, offset, 0, 1);
|
||||
tess.addVertexWithUV(0, -height, offset, 1, 1);
|
||||
tess.addVertexWithUV(lengthOffset, -height, -length + offset, 1, 0);
|
||||
tess.addVertexWithUV(lengthOffset, height, -length + offset, 0 ,0);
|
||||
|
||||
tess.draw();
|
||||
GL11.glPopMatrix();
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -220,6 +220,30 @@
|
||||
"weapon.switchmode1": {"category": "player", "sounds": [{"name": "weapon/switchmode1", "stream": false}]},
|
||||
"weapon.switchmode2": {"category": "player", "sounds": [{"name": "weapon/switchmode2", "stream": false}]},
|
||||
|
||||
"weapon.reload.boltClose": {"category": "player", "sounds": ["weapon/reload/boltClose"]},
|
||||
"weapon.reload.boltOpen": {"category": "player", "sounds": ["weapon/reload/boltOpen"]},
|
||||
"weapon.reload.closeClick": {"category": "player", "sounds": ["weapon/reload/closeClick"]},
|
||||
"weapon.reload.dryFireClick": {"category": "player", "sounds": ["weapon/reload/dryFireClick"]},
|
||||
"weapon.reload.insertCanister": {"category": "player", "sounds": ["weapon/reload/insertCanister"]},
|
||||
"weapon.reload.insertGrenade": {"category": "player", "sounds": ["weapon/reload/insertGrenade"]},
|
||||
"weapon.reload.insertLarge": {"category": "player", "sounds": ["weapon/reload/insertLarge"]},
|
||||
"weapon.reload.insertRocket": {"category": "player", "sounds": ["weapon/reload/insertRocket"]},
|
||||
"weapon.reload.leverCock": {"category": "player", "sounds": ["weapon/reload/leverCock"]},
|
||||
"weapon.reload.magInsert": {"category": "player", "sounds": ["weapon/reload/magInsert"]},
|
||||
"weapon.reload.magRemove": {"category": "player", "sounds": ["weapon/reload/magRemove"]},
|
||||
"weapon.reload.magSmallInsert": {"category": "player", "sounds": ["weapon/reload/magSmallInsert"]},
|
||||
"weapon.reload.magSmallRemove": {"category": "player", "sounds": ["weapon/reload/magSmallRemove"]},
|
||||
"weapon.reload.openLatch": {"category": "player", "sounds": ["weapon/reload/openLatch"]},
|
||||
"weapon.reload.pistolCock": {"category": "player", "sounds": ["weapon/reload/pistolCock"]},
|
||||
"weapon.reload.pressureValve": {"category": "player", "sounds": ["weapon/reload/pressureValve"]},
|
||||
"weapon.reload.revolverClose": {"category": "player", "sounds": ["weapon/reload/revolverClose"]},
|
||||
"weapon.reload.revolverCock": {"category": "player", "sounds": ["weapon/reload/revolverCock"]},
|
||||
"weapon.reload.revolverSpin": {"category": "player", "sounds": ["weapon/reload/revolverSpin"]},
|
||||
"weapon.reload.rifleCock": {"category": "player", "sounds": ["weapon/reload/rifleCock"]},
|
||||
"weapon.reload.shotgunCock": {"category": "player", "sounds": ["weapon/reload/shotgunCock"]},
|
||||
"weapon.reload.shotgunReload": {"category": "player", "sounds": ["weapon/reload/shotgunReload1", "weapon/reload/shotgunReload2", "weapon/reload/shotgunReload3"]},
|
||||
"weapon.reload.tubeFwoomp": {"category": "player", "sounds": ["weapon/reload/tubeFwoomp"]},
|
||||
|
||||
"turret.chekhov_fire": {"category": "block", "sounds": [{"name": "turret/chekhov_fire", "stream": false}]},
|
||||
"turret.jeremy_fire": {"category": "block", "sounds": ["turret/jeremy_fire1", "turret/jeremy_fire2", "turret/jeremy_fire3", "turret/jeremy_fire4", "turret/jeremy_fire5"]},
|
||||
"turret.jeremy_reload": {"category": "block", "sounds": [{"name": "turret/jeremy_reload", "stream": false}]},
|
||||
|
||||
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/boltClose.ogg
Normal file
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/boltClose.ogg
Normal file
Binary file not shown.
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/boltOpen.ogg
Normal file
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/boltOpen.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/leverCock.ogg
Normal file
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/leverCock.ogg
Normal file
Binary file not shown.
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/magInsert.ogg
Normal file
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/magInsert.ogg
Normal file
Binary file not shown.
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/magRemove.ogg
Normal file
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/magRemove.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/openLatch.ogg
Normal file
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/openLatch.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/rifleCock.ogg
Normal file
BIN
src/main/resources/assets/hbm/sounds/weapon/reload/rifleCock.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user