Tinkering + config

More tinkering, also tried to implement bounce sound effects, but they don't seem to work.
Added a config to disable casings.
Commented out smoke effect because it wasn't working out.
This commit is contained in:
UFFR 2022-12-21 21:47:02 -05:00
parent 754f88a42f
commit 57f9bbf404
No known key found for this signature in database
GPG Key ID: 1CDEFC5119049FC5
36 changed files with 852 additions and 519 deletions

View File

@ -16,6 +16,8 @@ public class WeaponConfig {
public static boolean dropCrys = true;
public static boolean dropDead = true;
public static boolean spawnCasings = true;
public static void loadFromConfig(Configuration config) {
final String CATEGORY_MISSILE = CommonConfig.CATEGORY_MISSILE;
@ -38,5 +40,7 @@ public class WeaponConfig {
dropStar = CommonConfig.createConfigBool(config, CATEGORY_DROPS, "10.02_dropStar", "Whether rigged star blaster cells should explode when dropped", true);
dropCrys = CommonConfig.createConfigBool(config, CATEGORY_DROPS, "10.04_dropCrys", "Whether xen crystals should move blocks when dropped", true);
dropDead = CommonConfig.createConfigBool(config, CATEGORY_DROPS, "10.05_dropDead", "Whether dead man's explosives should explode when dropped", true);
spawnCasings = CommonConfig.createConfigBool(config, CATEGORY_DROPS, "10.06_spawnCasings", "Should applicable guns spawn spent shell casings? (Disable if performance heavy)", true);
}
}

View File

@ -67,6 +67,8 @@ public class BulletConfigFactory {
}
public static final float defaultSpread = 0.005f;
/// STANDARD CONFIGS ///
//do not include damage or ammo
public static BulletConfiguration standardBulletConfig() {

View File

@ -22,7 +22,8 @@ import net.minecraft.potion.PotionEffect;
public class Gun357MagnumFactory {
private static final SpentCasingConfigBuilder CASING_357_BUILDER = new SpentCasingConfigBuilder("357", CasingType.BRASS_STRAIGHT_WALL, false)
.setCasingAmount(6).setYawFactor(0.05f).setPosOffset(new EasyLocation(0, -0.15, 0)).setSmokeChance(6).setAfterReload(true);
.setCasingAmount(6).setYawFactor(0.05f).setPosOffset(new EasyLocation(0, -0.15, 0)).setSmokeChance(6).setAfterReload(true)
.setBounceSound("weapon.smallCasingBouncePB3");
static final SpentCasingConfig
CASING_357 = CASING_357_BUILDER.build(),

View File

@ -31,7 +31,7 @@ public class Gun44MagnumFactory {
static final SpentCasingConfig CASING_44 = new SpentCasingConfigBuilder("44Magnum", CasingType.BRASS_STRAIGHT_WALL, false)
.setCasingAmount(6).setYawFactor(0.05f).setPosOffset(new EasyLocation(0, -0.15, 0)).setSmokeChance(6)
.setAfterReload(true).setScaleX(1.25f).build();
.setAfterReload(true).setScaleX(1.25f).setBounceSound("weapon.smallCasingBouncePB3").build();
public static GunConfiguration getBaseConfig() {

View File

@ -26,7 +26,7 @@ public class Gun45ACPFactory
private static final SpentCasingConfigBuilder CASING_45_BUILDER = new SpentCasingConfigBuilder("45acp", CasingType.BRASS_STRAIGHT_WALL, false)
.setSmokeChance(8).setInitialMotion(Vec3.createVectorHelper(0.3, 0.75, 0)).setPitchFactor(0.03f).setYawFactor(0.01f)
.setPosOffset(new EasyLocation(-0.3, -0.25, 0.6)).setScaleZ(0.75f);
.setPosOffset(new EasyLocation(-0.3, -0.25, 0.6)).setScaleZ(0.75f).setBounceSound("weapon.smallCasingBouncePB3");
static final SpentCasingConfig
CASING_45 = CASING_45_BUILDER.build(),

View File

@ -20,7 +20,7 @@ public class Gun50AEFactory {
static final SpentCasingConfig CASING_50AE = new SpentCasingConfigBuilder("50ae", CasingType.BRASS_STRAIGHT_WALL, false)
.setSmokeChance(4).setInitialMotion(Vec3.createVectorHelper(-0.3, 0.7, 0)).setPitchFactor(0.03f).setYawFactor(0.01f)
.setPosOffset(new EasyLocation(-0.5, 0, 0.5)).setScaleZ(1.5f).build();
.setPosOffset(new EasyLocation(-0.5, 0, 0.5)).setScaleZ(1.5f).setBounceSound("weapon.smallCasingBouncePB3").build();
public static GunConfiguration getBaseConfig() {

View File

@ -241,8 +241,8 @@ public class Gun50BMGFactory {
config.manufacturer = EnumGunManufacturer.ARMALITE;
config.config = new ArrayList<Integer>();
config.config.addAll(HbmCollection.fiftyBMG);
config.config.addAll(HbmCollection.fiftyBMGFlechette);
config.config.addAll(HbmCollection.fiftyBMG);
config.casingConfig = Optional.of(CONFIG_50BMG);
@ -251,7 +251,7 @@ public class Gun50BMGFactory {
public static GunConfiguration getM2Config()
{
GunConfiguration config = getAR15Config().clone();
GunConfiguration config = getAR15Config();
config.rateOfFire = 2;
config.durability *= 10;
@ -286,17 +286,20 @@ public class Gun50BMGFactory {
config.casingConfig = Optional.of(CONFIG_50BMG);
config.config.clear();
config.config.addAll(HbmCollection.fiftyBMG);
config.config.addAll(HbmCollection.fiftyBMGFlechette);
return config;
}
static final float inaccuracy = 0.0005F;
static byte i = 0;
static final float inaccuracy = 0.0005F, standardSpread = BulletConfigFactory.defaultSpread * inaccuracy;
public static BulletConfiguration get50BMGConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, 0);
bullet.spread = standardSpread;
bullet.dmgMin = 50;
bullet.dmgMax = 56;
bullet.penetration = 120;
@ -306,10 +309,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGFireConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo.meta = 1;
bullet.dmgMin = 50;
bullet.dmgMax = 56;
bullet.penetration = 120;
@ -321,10 +323,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGPhosphorusConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo.meta = 2;
bullet.dmgMin = 50;
bullet.dmgMax = 56;
bullet.penetration = 75;
@ -354,10 +355,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGExplosiveConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo.meta = 3;
bullet.dmgMin = 90;
bullet.dmgMax = 94;
bullet.penetration = 100;
@ -369,10 +369,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGAPConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo.meta = 4;
bullet.dmgMin = 82;
bullet.dmgMax = 88;
bullet.penetration = 150;
@ -384,10 +383,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGDUConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo.meta = 5;
bullet.dmgMin = 90;
bullet.dmgMax = 96;
bullet.penetration = 200;
@ -399,10 +397,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGStarConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo.meta = 6;
bullet.dmgMin = 108;
bullet.dmgMax = 112;
bullet.penetration = 250;
@ -414,10 +411,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGSleekConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo.meta = 8;
bullet.dmgMin = 60;
bullet.dmgMax = 80;
bullet.penetration = 120;
@ -457,10 +453,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGFlechetteConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo.meta = 9;
bullet.dmgMin = 60;
bullet.dmgMax = 64;
bullet.penetration = 130;
@ -471,10 +466,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGFlechetteAMConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.spread *= inaccuracy;
bullet.ammo.meta = 10;
bullet.dmgMin = 70;
bullet.dmgMax = 74;
bullet.penetration = 140;
@ -495,9 +489,9 @@ public class Gun50BMGFactory {
public static BulletConfiguration get50BMGFlechettePOConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get50BMGConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_50bmg, 1, i++);
bullet.ammo.meta = 11;
bullet.spread *= inaccuracy;
bullet.dmgMin = 70;
bullet.dmgMax = 74;

View File

@ -12,6 +12,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.items.ModItems;
import com.hbm.lib.HbmCollection;
import com.hbm.lib.HbmCollection.EnumGunManufacturer;
import com.hbm.lib.Library;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.particle.SpentCasingConfig;
@ -62,16 +63,17 @@ public class Gun556mmFactory {
config.comment.add("Why is this gun so sticky?");
config.config = new ArrayList<Integer>();
config.config.add(BulletConfigSyncingUtil.R556_NORMAL);
config.config.add(BulletConfigSyncingUtil.R556_GOLD);
config.config.add(BulletConfigSyncingUtil.R556_TRACER);
config.config.add(BulletConfigSyncingUtil.R556_PHOSPHORUS);
config.config.add(BulletConfigSyncingUtil.R556_AP);
config.config.add(BulletConfigSyncingUtil.R556_DU);
config.config.add(BulletConfigSyncingUtil.R556_STAR);
config.config.add(BulletConfigSyncingUtil.CHL_R556);
config.config.add(BulletConfigSyncingUtil.R556_SLEEK);
config.config.add(BulletConfigSyncingUtil.R556_K);
config.config.addAll(HbmCollection.NATO);
// config.config.add(BulletConfigSyncingUtil.R556_NORMAL);
// config.config.add(BulletConfigSyncingUtil.R556_GOLD);
// config.config.add(BulletConfigSyncingUtil.R556_TRACER);
// config.config.add(BulletConfigSyncingUtil.R556_PHOSPHORUS);
// config.config.add(BulletConfigSyncingUtil.R556_AP);
// config.config.add(BulletConfigSyncingUtil.R556_DU);
// config.config.add(BulletConfigSyncingUtil.R556_STAR);
// config.config.add(BulletConfigSyncingUtil.CHL_R556);
// config.config.add(BulletConfigSyncingUtil.R556_SLEEK);
// config.config.add(BulletConfigSyncingUtil.R556_K);
config.casingConfig = Optional.of(CONFIG_556);
@ -169,8 +171,7 @@ public class Gun556mmFactory {
config.manufacturer = EnumGunManufacturer.LUNA;
config.comment.add("\"May you never reincarnate again\"");
config.config.addAll(HbmCollection.NATO);
config.config.addAll(HbmCollection.NATOFlechette);
config.config.addAll(Library.mergeWithoutDuplicates(HbmCollection.NATO, HbmCollection.NATOFlechette));
config.animations.put(AnimType.CYCLE, new BusAnimation()
.addBus("RECOIL", new BusAnimationSequence()
@ -234,7 +235,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556Config();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 1);
bullet.ammo.meta = 1;
bullet.dmgMin = 250;
bullet.dmgMax = 320;
bullet.spread = 0.0F;
@ -246,7 +247,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556Config();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 2);
bullet.ammo.meta = 2;
bullet.wear = 15;
bullet.incendiary = 5;
bullet.doesPenetrate = false;
@ -274,7 +275,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556Config();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 3);
bullet.ammo.meta = 3;
bullet.dmgMin = 20;
bullet.dmgMax = 26;
bullet.penetration *= 1.5;
@ -288,7 +289,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556Config();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 4);
bullet.ammo.meta = 4;
bullet.dmgMin = 24;
bullet.dmgMax = 32;
bullet.penetration *= 2;
@ -302,7 +303,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556Config();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 5);
bullet.ammo.meta = 5;
bullet.dmgMin = 30;
bullet.dmgMax = 36;
bullet.penetration *= 2.5;
@ -316,7 +317,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556Config();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 6);
bullet.ammo.meta = 7;
bullet.dmgMin = 45;
bullet.dmgMax = 50;
bullet.wear = 10;
@ -357,7 +358,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556Config();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 7);
bullet.ammo.meta = 8;
bullet.vPFX = "reddust";
return bullet;
@ -367,7 +368,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556Config();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 8);
bullet.ammo.meta = 9;
bullet.dmgMin = 26;
bullet.dmgMax = 32;
bullet.penetration = 22;
@ -384,7 +385,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556FlechetteConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 9);
bullet.ammo.meta = 10;
bullet.incendiary = 5;
return bullet;
@ -394,7 +395,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556FlechetteConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 10);
bullet.ammo.meta = 11;
bullet.incendiary = 5;
PotionEffect eff = new PotionEffect(HbmPotion.phosphorus.id, 20 * 20, 0, true);
@ -420,7 +421,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556FlechetteConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 11);
bullet.ammo.meta = 12;
bullet.dmgMin = 46;
bullet.dmgMax = 52;
bullet.penetration *= 2.5;
@ -435,7 +436,7 @@ public class Gun556mmFactory {
BulletConfiguration bullet = get556FlechetteConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 12);
bullet.ammo.meta = 13;
bullet.dmgMin = 45;
bullet.dmgMax = 50;
bullet.wear = 10;
@ -474,13 +475,14 @@ public class Gun556mmFactory {
public static BulletConfiguration get556KConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig();
BulletConfiguration bullet = get556Config();
bullet.ammo = new ComparableStack(ModItems.ammo_556, 1, 13);
bullet.ammo.meta = 14;
bullet.dmgMin = 0;
bullet.dmgMax = 0;
bullet.penetration = 0;
bullet.maxAge = 0;
bullet.wear /= 2;
return bullet;
}

View File

@ -24,7 +24,7 @@ public class Gun9mmFactory {
static final SpentCasingConfig CASING_9 = Gun45ACPFactory.CASING_45_UAC.toBuilder("9")
.setInitialMotion(Vec3.createVectorHelper(-0.3, 0.6, 0)).setPosOffset(new EasyLocation(-0.35, -0.2, 0.55))
.setScaleX(1).setScaleY(1).setScaleZ(0.6f).build();
.setScaleX(1).setScaleY(1).setScaleZ(0.6f).setBounceSound("weapon.smallCasingBouncePB3").build();
public static GunConfiguration getMP40Config() {

View File

@ -20,7 +20,7 @@ import com.hbm.render.util.RenderScreenOverlay.Crosshair;
public class GunGrenadeFactory {
static final SpentCasingConfig CASING_40 = new SpentCasingConfigBuilder("40", CasingType.BRASS_STRAIGHT_WALL, false)
.setSmokeChance(0).setScaleX(4).setAfterReload(true).setPitchFactor(0.02f).setYawFactor(0.03f)
.setSmokeChance(0).setScaleX(4).setScaleY(4).setScaleZ(3).setAfterReload(true).setPitchFactor(0.02f).setYawFactor(0.03f)
.build();
public static GunConfiguration getHK69Config() {

View File

@ -560,9 +560,9 @@ public class ItemAmmoEnums
STAR(Gun50BMGFactory.get50BMGStarConfig(), HbmCollection.StarmetalType),
CHLOROPHYTE(Gun50BMGFactory.get50BMGConfig().getChlorophyte(), HbmCollection.ChlorophyteType),
SLEEK(Gun50BMGFactory.get50BMGSleekConfig(), AmmoItemTrait.NEU_MASKMAN_METEORITE),
FLECHETTE(Gun50BMGFactory.get50BMGFlechetteConfig()),
FLECHETTE_AM(Gun50BMGFactory.get50BMGFlechetteAMConfig()),
FLECHETTE_PO(Gun50BMGFactory.get50BMGFlechettePOConfig());
FLECHETTE(Gun50BMGFactory.get50BMGFlechetteConfig(), AmmoItemTrait.PRO_DAMAGE),
FLECHETTE_AM(Gun50BMGFactory.get50BMGFlechetteAMConfig(), AmmoItemTrait.PRO_DAMAGE, AmmoItemTrait.NEU_UHH),
FLECHETTE_PO(Gun50BMGFactory.get50BMGFlechettePOConfig(), AmmoItemTrait.PRO_DAMAGE, AmmoItemTrait.NEU_UHH);
private final Set<AmmoItemTrait> traits;
private final BulletConfiguration config;
private Ammo50BMG(BulletConfiguration config, AmmoItemTrait...traits)

View File

@ -251,7 +251,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD, IEqu
world.playSoundAtEntity(player, altConfig.firingSound, 1.0F, altConfig.firingPitch);
if (altConfig.casingConfig.isPresent() && !altConfig.casingConfig.get().isAfterReload())
if (altConfig.casingConfig.isPresent())
spawnCasing(player, altConfig.casingConfig.get(), stack);
}

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.stream.Collectors;
import com.google.common.collect.Sets;
import com.hbm.blocks.ModBlocks;
@ -106,6 +107,26 @@ public class Library {
public static final ForgeDirection POS_Z = ForgeDirection.SOUTH;
public static final ForgeDirection NEG_Z = ForgeDirection.NORTH;
public static <T> List<T> mergeWithoutDuplicates(List<T>...lists)
{
final List<T> totalList = new ArrayList<T>();
for (List<T> list : lists)
totalList.addAll(list);
return listWithoutDuplicates(totalList);
}
public static <T> List<T> listWithoutDuplicates(List<T> list)
{
return list.stream().distinct().collect(Collectors.toList());
}
public static <T> void removeListDuplicates(List<T> list)
{
final List<T> newList = listWithoutDuplicates(list);
list.clear();
list.addAll(newList);
}
/*
* Is putting this into this trash can a good idea? No. Do I have a better idea? Not currently.
*/

View File

@ -1,5 +1,637 @@
package com.hbm.main;
import java.awt.Color;
import java.awt.Desktop;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockBobble.TileEntityBobble;
import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter;
import com.hbm.blocks.generic.BlockLoot.TileEntityLoot;
import com.hbm.config.WeaponConfig;
import com.hbm.entity.cart.EntityMinecartCrate;
import com.hbm.entity.cart.EntityMinecartNTM;
import com.hbm.entity.effect.EntityBlackHole;
import com.hbm.entity.effect.EntityCloudFleija;
import com.hbm.entity.effect.EntityCloudFleijaRainbow;
import com.hbm.entity.effect.EntityCloudSolinium;
import com.hbm.entity.effect.EntityCloudTom;
import com.hbm.entity.effect.EntityEMPBlast;
import com.hbm.entity.effect.EntityFalloutRain;
import com.hbm.entity.effect.EntityNukeCloudBig;
import com.hbm.entity.effect.EntityNukeCloudNoShroom;
import com.hbm.entity.effect.EntityNukeCloudSmall;
import com.hbm.entity.effect.EntityNukeTorex;
import com.hbm.entity.effect.EntityQuasar;
import com.hbm.entity.effect.EntityRagingVortex;
import com.hbm.entity.effect.EntitySpear;
import com.hbm.entity.effect.EntityVortex;
import com.hbm.entity.grenade.EntityGrenadeASchrab;
import com.hbm.entity.grenade.EntityGrenadeBlackHole;
import com.hbm.entity.grenade.EntityGrenadeBouncyBaseNT;
import com.hbm.entity.grenade.EntityGrenadeBouncyGeneric;
import com.hbm.entity.grenade.EntityGrenadeBreach;
import com.hbm.entity.grenade.EntityGrenadeBurst;
import com.hbm.entity.grenade.EntityGrenadeCloud;
import com.hbm.entity.grenade.EntityGrenadeCluster;
import com.hbm.entity.grenade.EntityGrenadeDynamite;
import com.hbm.entity.grenade.EntityGrenadeElectric;
import com.hbm.entity.grenade.EntityGrenadeFire;
import com.hbm.entity.grenade.EntityGrenadeFlare;
import com.hbm.entity.grenade.EntityGrenadeFrag;
import com.hbm.entity.grenade.EntityGrenadeGas;
import com.hbm.entity.grenade.EntityGrenadeGascan;
import com.hbm.entity.grenade.EntityGrenadeGeneric;
import com.hbm.entity.grenade.EntityGrenadeIFBouncy;
import com.hbm.entity.grenade.EntityGrenadeIFBrimstone;
import com.hbm.entity.grenade.EntityGrenadeIFConcussion;
import com.hbm.entity.grenade.EntityGrenadeIFGeneric;
import com.hbm.entity.grenade.EntityGrenadeIFHE;
import com.hbm.entity.grenade.EntityGrenadeIFHopwire;
import com.hbm.entity.grenade.EntityGrenadeIFImpact;
import com.hbm.entity.grenade.EntityGrenadeIFIncendiary;
import com.hbm.entity.grenade.EntityGrenadeIFMystery;
import com.hbm.entity.grenade.EntityGrenadeIFNull;
import com.hbm.entity.grenade.EntityGrenadeIFSpark;
import com.hbm.entity.grenade.EntityGrenadeIFSticky;
import com.hbm.entity.grenade.EntityGrenadeIFToxic;
import com.hbm.entity.grenade.EntityGrenadeImpactGeneric;
import com.hbm.entity.grenade.EntityGrenadeLemon;
import com.hbm.entity.grenade.EntityGrenadeMIRV;
import com.hbm.entity.grenade.EntityGrenadeMk2;
import com.hbm.entity.grenade.EntityGrenadeNuclear;
import com.hbm.entity.grenade.EntityGrenadeNuke;
import com.hbm.entity.grenade.EntityGrenadePC;
import com.hbm.entity.grenade.EntityGrenadePlasma;
import com.hbm.entity.grenade.EntityGrenadePoison;
import com.hbm.entity.grenade.EntityGrenadePulse;
import com.hbm.entity.grenade.EntityGrenadeSchrabidium;
import com.hbm.entity.grenade.EntityGrenadeShrapnel;
import com.hbm.entity.grenade.EntityGrenadeSmart;
import com.hbm.entity.grenade.EntityGrenadeStrong;
import com.hbm.entity.grenade.EntityGrenadeTau;
import com.hbm.entity.grenade.EntityGrenadeZOMG;
import com.hbm.entity.grenade.EntityWastePearl;
import com.hbm.entity.item.EntityFireworks;
import com.hbm.entity.item.EntityMagnusCartus;
import com.hbm.entity.item.EntityMinecartTest;
import com.hbm.entity.item.EntityMovingItem;
import com.hbm.entity.item.EntityMovingPackage;
import com.hbm.entity.item.EntityTNTPrimedBase;
import com.hbm.entity.logic.EntityBomber;
import com.hbm.entity.logic.EntityDeathBlast;
import com.hbm.entity.logic.EntityEMP;
import com.hbm.entity.logic.EntityNukeExplosionAdvanced;
import com.hbm.entity.missile.EntityBobmazon;
import com.hbm.entity.missile.EntityBombletSelena;
import com.hbm.entity.missile.EntityBombletTheta;
import com.hbm.entity.missile.EntityBooster;
import com.hbm.entity.missile.EntityCarrier;
import com.hbm.entity.missile.EntityMIRV;
import com.hbm.entity.missile.EntityMinerRocket;
import com.hbm.entity.missile.EntityMissileAntiBallistic;
import com.hbm.entity.missile.EntityMissileBHole;
import com.hbm.entity.missile.EntityMissileBunkerBuster;
import com.hbm.entity.missile.EntityMissileBurst;
import com.hbm.entity.missile.EntityMissileBusterStrong;
import com.hbm.entity.missile.EntityMissileCluster;
import com.hbm.entity.missile.EntityMissileClusterStrong;
import com.hbm.entity.missile.EntityMissileCustom;
import com.hbm.entity.missile.EntityMissileDoomsday;
import com.hbm.entity.missile.EntityMissileDrill;
import com.hbm.entity.missile.EntityMissileEMP;
import com.hbm.entity.missile.EntityMissileEMPStrong;
import com.hbm.entity.missile.EntityMissileEndo;
import com.hbm.entity.missile.EntityMissileExo;
import com.hbm.entity.missile.EntityMissileGeneric;
import com.hbm.entity.missile.EntityMissileIncendiary;
import com.hbm.entity.missile.EntityMissileIncendiaryStrong;
import com.hbm.entity.missile.EntityMissileInferno;
import com.hbm.entity.missile.EntityMissileMicro;
import com.hbm.entity.missile.EntityMissileMirv;
import com.hbm.entity.missile.EntityMissileNuclear;
import com.hbm.entity.missile.EntityMissileRain;
import com.hbm.entity.missile.EntityMissileSchrabidium;
import com.hbm.entity.missile.EntityMissileShuttle;
import com.hbm.entity.missile.EntityMissileStrong;
import com.hbm.entity.missile.EntityMissileTaint;
import com.hbm.entity.missile.EntityMissileVolcano;
import com.hbm.entity.missile.EntitySiegeDropship;
import com.hbm.entity.missile.EntitySoyuz;
import com.hbm.entity.missile.EntitySoyuzCapsule;
import com.hbm.entity.missile.EntityTestMissile;
import com.hbm.entity.mob.EntityBlockSpider;
import com.hbm.entity.mob.EntityCyberCrab;
import com.hbm.entity.mob.EntityDuck;
import com.hbm.entity.mob.EntityFBI;
import com.hbm.entity.mob.EntityGhost;
import com.hbm.entity.mob.EntityHunterChopper;
import com.hbm.entity.mob.EntityMaskMan;
import com.hbm.entity.mob.EntityNuclearCreeper;
import com.hbm.entity.mob.EntityQuackos;
import com.hbm.entity.mob.EntityRADBeast;
import com.hbm.entity.mob.EntityTaintCrab;
import com.hbm.entity.mob.EntityTaintedCreeper;
import com.hbm.entity.mob.EntityTeslaCrab;
import com.hbm.entity.mob.EntityUFO;
import com.hbm.entity.mob.botprime.EntityBOTPrimeBody;
import com.hbm.entity.mob.botprime.EntityBOTPrimeHead;
import com.hbm.entity.mob.siege.EntitySiegeCraft;
import com.hbm.entity.mob.siege.EntitySiegeSkeleton;
import com.hbm.entity.mob.siege.EntitySiegeTunneler;
import com.hbm.entity.mob.siege.EntitySiegeUFO;
import com.hbm.entity.mob.siege.EntitySiegeZombie;
import com.hbm.entity.particle.EntityBSmokeFX;
import com.hbm.entity.particle.EntityChlorineFX;
import com.hbm.entity.particle.EntityDSmokeFX;
import com.hbm.entity.particle.EntityFogFX;
import com.hbm.entity.particle.EntityGasFX;
import com.hbm.entity.particle.EntityOilSpillFX;
import com.hbm.entity.particle.EntityOrangeFX;
import com.hbm.entity.particle.EntityPinkCloudFX;
import com.hbm.entity.particle.EntitySSmokeFX;
import com.hbm.entity.particle.EntitySmokeFX;
import com.hbm.entity.particle.EntityTSmokeFX;
import com.hbm.entity.projectile.EntityAAShell;
import com.hbm.entity.projectile.EntityArtilleryShell;
import com.hbm.entity.projectile.EntityBeamVortex;
import com.hbm.entity.projectile.EntityBombletZeta;
import com.hbm.entity.projectile.EntityBoxcar;
import com.hbm.entity.projectile.EntityBuilding;
import com.hbm.entity.projectile.EntityBullet;
import com.hbm.entity.projectile.EntityBulletBase;
import com.hbm.entity.projectile.EntityBurningFOEQ;
import com.hbm.entity.projectile.EntityChemical;
import com.hbm.entity.projectile.EntityChopperMine;
import com.hbm.entity.projectile.EntityCog;
import com.hbm.entity.projectile.EntityCombineBall;
import com.hbm.entity.projectile.EntityDischarge;
import com.hbm.entity.projectile.EntityDuchessGambit;
import com.hbm.entity.projectile.EntityExplosiveBeam;
import com.hbm.entity.projectile.EntityFallingNuke;
import com.hbm.entity.projectile.EntityFire;
import com.hbm.entity.projectile.EntityLN2;
import com.hbm.entity.projectile.EntityLaser;
import com.hbm.entity.projectile.EntityLaserBeam;
import com.hbm.entity.projectile.EntityMeteor;
import com.hbm.entity.projectile.EntityMinerBeam;
import com.hbm.entity.projectile.EntityModBeam;
import com.hbm.entity.projectile.EntityNightmareBlast;
import com.hbm.entity.projectile.EntityOilSpill;
import com.hbm.entity.projectile.EntityPlasmaBeam;
import com.hbm.entity.projectile.EntityRBMKDebris;
import com.hbm.entity.projectile.EntityRainbow;
import com.hbm.entity.projectile.EntityRocket;
import com.hbm.entity.projectile.EntityRocketHoming;
import com.hbm.entity.projectile.EntityRubble;
import com.hbm.entity.projectile.EntitySawblade;
import com.hbm.entity.projectile.EntitySchrab;
import com.hbm.entity.projectile.EntityShrapnel;
import com.hbm.entity.projectile.EntitySiegeLaser;
import com.hbm.entity.projectile.EntitySparkBeam;
import com.hbm.entity.projectile.EntityTom;
import com.hbm.entity.projectile.EntityWaterSplash;
import com.hbm.entity.projectile.EntityZirnoxDebris;
import com.hbm.handler.HbmKeybinds;
import com.hbm.handler.HbmKeybinds.EnumKeybind;
import com.hbm.items.ItemAmmoEnums.AmmoHandGrenade;
import com.hbm.items.ModItems;
import com.hbm.particle.ParticleAmatFlash;
import com.hbm.particle.ParticleContrail;
import com.hbm.particle.ParticleCoolingTower;
import com.hbm.particle.ParticleDeadLeaf;
import com.hbm.particle.ParticleDebug;
import com.hbm.particle.ParticleDigammaSmoke;
import com.hbm.particle.ParticleExSmoke;
import com.hbm.particle.ParticleGasFlame;
import com.hbm.particle.ParticleGiblet;
import com.hbm.particle.ParticleHadron;
import com.hbm.particle.ParticleHaze;
import com.hbm.particle.ParticleLetter;
import com.hbm.particle.ParticleMukeCloud;
import com.hbm.particle.ParticleMukeFlash;
import com.hbm.particle.ParticleMukeWave;
import com.hbm.particle.ParticlePlasmaBlast;
import com.hbm.particle.ParticleRBMKFlame;
import com.hbm.particle.ParticleRBMKMush;
import com.hbm.particle.ParticleRadiationFog;
import com.hbm.particle.ParticleRift;
import com.hbm.particle.ParticleRocketFlame;
import com.hbm.particle.ParticleSmokePlume;
import com.hbm.particle.ParticleSpark;
import com.hbm.particle.ParticleText;
import com.hbm.particle.SpentCasingConfig;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationKeyframe;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.render.anim.HbmAnimations;
import com.hbm.render.anim.HbmAnimations.Animation;
import com.hbm.render.block.RenderAntennaTop;
import com.hbm.render.block.RenderAnvil;
import com.hbm.render.block.RenderBarbedWire;
import com.hbm.render.block.RenderBarrel;
import com.hbm.render.block.RenderBattery;
import com.hbm.render.block.RenderBlockCT;
import com.hbm.render.block.RenderBlockDecoModel;
import com.hbm.render.block.RenderBlockMultipass;
import com.hbm.render.block.RenderBlockRotated;
import com.hbm.render.block.RenderBlockSideRotation;
import com.hbm.render.block.RenderBoxDuct;
import com.hbm.render.block.RenderCable;
import com.hbm.render.block.RenderCableClassic;
import com.hbm.render.block.RenderChain;
import com.hbm.render.block.RenderConserve;
import com.hbm.render.block.RenderConveyor;
import com.hbm.render.block.RenderConveyorChute;
import com.hbm.render.block.RenderConveyorLift;
import com.hbm.render.block.RenderCrystal;
import com.hbm.render.block.RenderDetCord;
import com.hbm.render.block.RenderDiode;
import com.hbm.render.block.RenderFence;
import com.hbm.render.block.RenderFoundryBasin;
import com.hbm.render.block.RenderFoundryChannel;
import com.hbm.render.block.RenderFoundryMold;
import com.hbm.render.block.RenderFoundryOutlet;
import com.hbm.render.block.RenderFoundryTank;
import com.hbm.render.block.RenderGrate;
import com.hbm.render.block.RenderMirror;
import com.hbm.render.block.RenderPipe;
import com.hbm.render.block.RenderPribris;
import com.hbm.render.block.RenderRBMKControl;
import com.hbm.render.block.RenderRBMKReflector;
import com.hbm.render.block.RenderRBMKRod;
import com.hbm.render.block.RenderRTGBlock;
import com.hbm.render.block.RenderScaffoldBlock;
import com.hbm.render.block.RenderSpikeBlock;
import com.hbm.render.block.RenderSteelBeam;
import com.hbm.render.block.RenderTaintBlock;
import com.hbm.render.block.RenderTapeBlock;
import com.hbm.render.block.RenderTestPipe;
import com.hbm.render.entity.RenderEmpty;
import com.hbm.render.entity.effect.ElectricityRenderer;
import com.hbm.render.entity.effect.FogRenderer;
import com.hbm.render.entity.effect.GasRenderer;
import com.hbm.render.entity.effect.MultiCloudRenderer;
import com.hbm.render.entity.effect.RenderBigNuke;
import com.hbm.render.entity.effect.RenderBlackHole;
import com.hbm.render.entity.effect.RenderCasingTest;
import com.hbm.render.entity.effect.RenderCloudFleija;
import com.hbm.render.entity.effect.RenderCloudRainbow;
import com.hbm.render.entity.effect.RenderCloudSolinium;
import com.hbm.render.entity.effect.RenderCloudTom;
import com.hbm.render.entity.effect.RenderDeathBlast;
import com.hbm.render.entity.effect.RenderEMPBlast;
import com.hbm.render.entity.effect.RenderFallout;
import com.hbm.render.entity.effect.RenderFireball;
import com.hbm.render.entity.effect.RenderFlare;
import com.hbm.render.entity.effect.RenderNoCloud;
import com.hbm.render.entity.effect.RenderQuasar;
import com.hbm.render.entity.effect.RenderSmallNukeMK4;
import com.hbm.render.entity.effect.RenderSpear;
import com.hbm.render.entity.effect.RenderTorex;
import com.hbm.render.entity.effect.SSmokeRenderer;
import com.hbm.render.entity.effect.SpillRenderer;
import com.hbm.render.entity.effect.TSmokeRenderer;
import com.hbm.render.entity.item.RenderBomber;
import com.hbm.render.entity.item.RenderMagnusCartus;
import com.hbm.render.entity.item.RenderMinecartTest;
import com.hbm.render.entity.item.RenderMovingItem;
import com.hbm.render.entity.item.RenderMovingPackage;
import com.hbm.render.entity.item.RenderNeoCart;
import com.hbm.render.entity.item.RenderTNTPrimedBase;
import com.hbm.render.entity.mob.RenderBlockSpider;
import com.hbm.render.entity.mob.RenderCyberCrab;
import com.hbm.render.entity.mob.RenderDuck;
import com.hbm.render.entity.mob.RenderFBI;
import com.hbm.render.entity.mob.RenderGhost;
import com.hbm.render.entity.mob.RenderHunterChopper;
import com.hbm.render.entity.mob.RenderMaskMan;
import com.hbm.render.entity.mob.RenderNuclearCreeper;
import com.hbm.render.entity.mob.RenderQuacc;
import com.hbm.render.entity.mob.RenderRADBeast;
import com.hbm.render.entity.mob.RenderSiegeCraft;
import com.hbm.render.entity.mob.RenderSiegeSkeleton;
import com.hbm.render.entity.mob.RenderSiegeTunneler;
import com.hbm.render.entity.mob.RenderSiegeUFO;
import com.hbm.render.entity.mob.RenderSiegeZombie;
import com.hbm.render.entity.mob.RenderTaintCrab;
import com.hbm.render.entity.mob.RenderTaintedCreeper;
import com.hbm.render.entity.mob.RenderTeslaCrab;
import com.hbm.render.entity.mob.RenderUFO;
import com.hbm.render.entity.mob.RenderWormBody;
import com.hbm.render.entity.mob.RenderWormHead;
import com.hbm.render.entity.projectile.RenderArtilleryShell;
import com.hbm.render.entity.projectile.RenderBeam;
import com.hbm.render.entity.projectile.RenderBeam2;
import com.hbm.render.entity.projectile.RenderBeam3;
import com.hbm.render.entity.projectile.RenderBeam4;
import com.hbm.render.entity.projectile.RenderBeam5;
import com.hbm.render.entity.projectile.RenderBeam6;
import com.hbm.render.entity.projectile.RenderBombletSelena;
import com.hbm.render.entity.projectile.RenderBombletTheta;
import com.hbm.render.entity.projectile.RenderBoxcar;
import com.hbm.render.entity.projectile.RenderBullet;
import com.hbm.render.entity.projectile.RenderChemical;
import com.hbm.render.entity.projectile.RenderChopperMine;
import com.hbm.render.entity.projectile.RenderCog;
import com.hbm.render.entity.projectile.RenderFOEQ;
import com.hbm.render.entity.projectile.RenderFallingNuke;
import com.hbm.render.entity.projectile.RenderGenericGrenade;
import com.hbm.render.entity.projectile.RenderGrenade;
import com.hbm.render.entity.projectile.RenderLN2;
import com.hbm.render.entity.projectile.RenderLaser;
import com.hbm.render.entity.projectile.RenderMeteor;
import com.hbm.render.entity.projectile.RenderMirv;
import com.hbm.render.entity.projectile.RenderOminousBullet;
import com.hbm.render.entity.projectile.RenderRBMKDebris;
import com.hbm.render.entity.projectile.RenderRainbow;
import com.hbm.render.entity.projectile.RenderRocket;
import com.hbm.render.entity.projectile.RenderRubble;
import com.hbm.render.entity.projectile.RenderSRocket;
import com.hbm.render.entity.projectile.RenderSawblade;
import com.hbm.render.entity.projectile.RenderShrapnel;
import com.hbm.render.entity.projectile.RenderSiegeLaser;
import com.hbm.render.entity.projectile.RenderTom;
import com.hbm.render.entity.projectile.RenderVortexBeam;
import com.hbm.render.entity.projectile.RenderZirnoxDebris;
import com.hbm.render.entity.rocket.RenderBoosterMissile;
import com.hbm.render.entity.rocket.RenderCarrierMissile;
import com.hbm.render.entity.rocket.RenderMinerRocket;
import com.hbm.render.entity.rocket.RenderMissileCustom;
import com.hbm.render.entity.rocket.RenderMissileDoomsday;
import com.hbm.render.entity.rocket.RenderMissileGeneric;
import com.hbm.render.entity.rocket.RenderMissileHuge;
import com.hbm.render.entity.rocket.RenderMissileMirv;
import com.hbm.render.entity.rocket.RenderMissileNuclear;
import com.hbm.render.entity.rocket.RenderMissileShuttle;
import com.hbm.render.entity.rocket.RenderMissileStrong;
import com.hbm.render.entity.rocket.RenderMissileTaint;
import com.hbm.render.entity.rocket.RenderMissileThermo;
import com.hbm.render.entity.rocket.RenderSoyuz;
import com.hbm.render.entity.rocket.RenderSoyuzCapsule;
import com.hbm.render.item.ItemRenderBase;
import com.hbm.render.item.ItemRenderDetonatorLaser;
import com.hbm.render.item.ItemRenderLibrary;
import com.hbm.render.item.ItemRenderMissile;
import com.hbm.render.item.ItemRenderMissilePart;
import com.hbm.render.item.ItemRenderMultitool;
import com.hbm.render.item.ItemRenderTemplate;
import com.hbm.render.item.ItemRenderTransformer;
import com.hbm.render.item.ItemRendererHot;
import com.hbm.render.item.ItemRendererMeteorSword;
import com.hbm.render.item.block.ItemRenderDecoBlock;
import com.hbm.render.item.block.ItemRenderTestContainer;
import com.hbm.render.item.weapon.ItemRenderBFLauncher;
import com.hbm.render.item.weapon.ItemRenderBenelli;
import com.hbm.render.item.weapon.ItemRenderBigSword;
import com.hbm.render.item.weapon.ItemRenderBioRevolver;
import com.hbm.render.item.weapon.ItemRenderBullshit;
import com.hbm.render.item.weapon.ItemRenderChainsaw;
import com.hbm.render.item.weapon.ItemRenderCrucible;
import com.hbm.render.item.weapon.ItemRenderCryolator;
import com.hbm.render.item.weapon.ItemRenderEMPRay;
import com.hbm.render.item.weapon.ItemRenderFatMan;
import com.hbm.render.item.weapon.ItemRenderFireExt;
import com.hbm.render.item.weapon.ItemRenderG36;
import com.hbm.render.item.weapon.ItemRenderGavel;
import com.hbm.render.item.weapon.ItemRenderGunAnim;
import com.hbm.render.item.weapon.ItemRenderHLR;
import com.hbm.render.item.weapon.ItemRenderImmolator;
import com.hbm.render.item.weapon.ItemRenderLLR;
import com.hbm.render.item.weapon.ItemRenderLunaticSniper;
import com.hbm.render.item.weapon.ItemRenderM2;
import com.hbm.render.item.weapon.ItemRenderMIRVLauncher;
import com.hbm.render.item.weapon.ItemRenderMLR;
import com.hbm.render.item.weapon.ItemRenderMP;
import com.hbm.render.item.weapon.ItemRenderMP40;
import com.hbm.render.item.weapon.ItemRenderOSIPR;
import com.hbm.render.item.weapon.ItemRenderObj;
import com.hbm.render.item.weapon.ItemRenderOverkill;
import com.hbm.render.item.weapon.ItemRenderRedstoneSword;
import com.hbm.render.item.weapon.ItemRenderRevolverInverted;
import com.hbm.render.item.weapon.ItemRenderRpg;
import com.hbm.render.item.weapon.ItemRenderShim;
import com.hbm.render.item.weapon.ItemRenderStinger;
import com.hbm.render.item.weapon.ItemRenderTWR;
import com.hbm.render.item.weapon.ItemRenderTestBombAdvanced;
import com.hbm.render.item.weapon.ItemRenderUACPistol;
import com.hbm.render.item.weapon.ItemRenderUZI;
import com.hbm.render.item.weapon.ItemRenderUboinik;
import com.hbm.render.item.weapon.ItemRenderWeaponAR15;
import com.hbm.render.item.weapon.ItemRenderWeaponBolter;
import com.hbm.render.item.weapon.ItemRenderWeaponChemthrower;
import com.hbm.render.item.weapon.ItemRenderWeaponFFBolt;
import com.hbm.render.item.weapon.ItemRenderWeaponFFColt;
import com.hbm.render.item.weapon.ItemRenderWeaponFFCursed;
import com.hbm.render.item.weapon.ItemRenderWeaponFFMG42;
import com.hbm.render.item.weapon.ItemRenderWeaponFFMaresLeg;
import com.hbm.render.item.weapon.ItemRenderWeaponFFNightmare;
import com.hbm.render.item.weapon.ItemRenderWeaponFFNightmareDark;
import com.hbm.render.item.weapon.ItemRenderWeaponGlass;
import com.hbm.render.item.weapon.ItemRenderWeaponObj;
import com.hbm.render.item.weapon.ItemRenderWeaponQuadro;
import com.hbm.render.item.weapon.ItemRenderWeaponSauer;
import com.hbm.render.item.weapon.ItemRenderWeaponShotty;
import com.hbm.render.item.weapon.ItemRenderWeaponSpas12;
import com.hbm.render.item.weapon.ItemRenderWeaponThompson;
import com.hbm.render.item.weapon.ItemRenderWeaponVortex;
import com.hbm.render.item.weapon.ItemRenderXVL1456;
import com.hbm.render.item.weapon.ItemRenderZOMG;
import com.hbm.render.loader.HmfModelLoader;
import com.hbm.render.tileentity.*;
import com.hbm.render.util.MissilePart;
import com.hbm.render.util.RenderInfoSystem;
import com.hbm.render.util.RenderInfoSystem.InfoEntry;
import com.hbm.sound.AudioWrapper;
import com.hbm.sound.AudioWrapperClient;
import com.hbm.sound.AudioWrapperClientStartStop;
import com.hbm.tileentity.TileEntityDoorGeneric;
import com.hbm.tileentity.bomb.TileEntityBombMulti;
import com.hbm.tileentity.bomb.TileEntityCelPrime;
import com.hbm.tileentity.bomb.TileEntityCelPrimeBattery;
import com.hbm.tileentity.bomb.TileEntityCelPrimePort;
import com.hbm.tileentity.bomb.TileEntityCelPrimeTanks;
import com.hbm.tileentity.bomb.TileEntityCelPrimeTerminal;
import com.hbm.tileentity.bomb.TileEntityCharge;
import com.hbm.tileentity.bomb.TileEntityCompactLauncher;
import com.hbm.tileentity.bomb.TileEntityCrashedBomb;
import com.hbm.tileentity.bomb.TileEntityLandmine;
import com.hbm.tileentity.bomb.TileEntityLaunchPad;
import com.hbm.tileentity.bomb.TileEntityLaunchTable;
import com.hbm.tileentity.bomb.TileEntityNukeBalefire;
import com.hbm.tileentity.bomb.TileEntityNukeBoy;
import com.hbm.tileentity.bomb.TileEntityNukeCustom;
import com.hbm.tileentity.bomb.TileEntityNukeFleija;
import com.hbm.tileentity.bomb.TileEntityNukeGadget;
import com.hbm.tileentity.bomb.TileEntityNukeMan;
import com.hbm.tileentity.bomb.TileEntityNukeMike;
import com.hbm.tileentity.bomb.TileEntityNukeN2;
import com.hbm.tileentity.bomb.TileEntityNukeN45;
import com.hbm.tileentity.bomb.TileEntityNukePrototype;
import com.hbm.tileentity.bomb.TileEntityNukeSolinium;
import com.hbm.tileentity.bomb.TileEntityNukeTsar;
import com.hbm.tileentity.bomb.TileEntityTestBombAdvanced;
import com.hbm.tileentity.conductor.TileEntityFluidDuct;
import com.hbm.tileentity.conductor.TileEntityGasDuct;
import com.hbm.tileentity.conductor.TileEntityOilDuct;
import com.hbm.tileentity.conductor.TileEntityRFDuct;
import com.hbm.tileentity.deco.TileEntityBomber;
import com.hbm.tileentity.deco.TileEntityDecoBlock;
import com.hbm.tileentity.deco.TileEntityDecoBlockAlt;
import com.hbm.tileentity.deco.TileEntityDecoBlockAltF;
import com.hbm.tileentity.deco.TileEntityDecoBlockAltG;
import com.hbm.tileentity.deco.TileEntityDecoBlockAltW;
import com.hbm.tileentity.deco.TileEntityDecoPoleSatelliteReceiver;
import com.hbm.tileentity.deco.TileEntityObjTester;
import com.hbm.tileentity.deco.TileEntityRotationTester;
import com.hbm.tileentity.deco.TileEntityTestRender;
import com.hbm.tileentity.machine.TileEntityAMSBase;
import com.hbm.tileentity.machine.TileEntityAMSEmitter;
import com.hbm.tileentity.machine.TileEntityAMSLimiter;
import com.hbm.tileentity.machine.TileEntityBlastDoor;
import com.hbm.tileentity.machine.TileEntityBroadcaster;
import com.hbm.tileentity.machine.TileEntityCharger;
import com.hbm.tileentity.machine.TileEntityChungus;
import com.hbm.tileentity.machine.TileEntityCore;
import com.hbm.tileentity.machine.TileEntityCoreEmitter;
import com.hbm.tileentity.machine.TileEntityCoreInjector;
import com.hbm.tileentity.machine.TileEntityCoreReceiver;
import com.hbm.tileentity.machine.TileEntityCoreStabilizer;
import com.hbm.tileentity.machine.TileEntityCrucible;
import com.hbm.tileentity.machine.TileEntityDemonLamp;
import com.hbm.tileentity.machine.TileEntityDeuteriumTower;
import com.hbm.tileentity.machine.TileEntityElectrolyser;
import com.hbm.tileentity.machine.TileEntityFEL;
import com.hbm.tileentity.machine.TileEntityFF;
import com.hbm.tileentity.machine.TileEntityForceField;
import com.hbm.tileentity.machine.TileEntityFoundryBasin;
import com.hbm.tileentity.machine.TileEntityFoundryMold;
import com.hbm.tileentity.machine.TileEntityFurnaceIron;
import com.hbm.tileentity.machine.TileEntityFurnaceSteel;
import com.hbm.tileentity.machine.TileEntityGeiger;
import com.hbm.tileentity.machine.TileEntityHeatBoiler;
import com.hbm.tileentity.machine.TileEntityHeaterElectric;
import com.hbm.tileentity.machine.TileEntityHeaterFirebox;
import com.hbm.tileentity.machine.TileEntityHeaterOilburner;
import com.hbm.tileentity.machine.TileEntityITER;
import com.hbm.tileentity.machine.TileEntityITERStruct;
import com.hbm.tileentity.machine.TileEntityMachineAssembler;
import com.hbm.tileentity.machine.TileEntityMachineAssemfac;
import com.hbm.tileentity.machine.TileEntityMachineCentrifuge;
import com.hbm.tileentity.machine.TileEntityMachineChemfac;
import com.hbm.tileentity.machine.TileEntityMachineChemplant;
import com.hbm.tileentity.machine.TileEntityMachineCrystallizer;
import com.hbm.tileentity.machine.TileEntityMachineCyclotron;
import com.hbm.tileentity.machine.TileEntityMachineEPress;
import com.hbm.tileentity.machine.TileEntityMachineGasCent;
import com.hbm.tileentity.machine.TileEntityMachineIGenerator;
import com.hbm.tileentity.machine.TileEntityMachineLargeTurbine;
import com.hbm.tileentity.machine.TileEntityMachineMiniRTG;
import com.hbm.tileentity.machine.TileEntityMachineMiningDrill;
import com.hbm.tileentity.machine.TileEntityMachineMiningLaser;
import com.hbm.tileentity.machine.TileEntityMachineMissileAssembly;
import com.hbm.tileentity.machine.TileEntityMachinePlasmaHeater;
import com.hbm.tileentity.machine.TileEntityMachinePress;
import com.hbm.tileentity.machine.TileEntityMachineRTG;
import com.hbm.tileentity.machine.TileEntityMachineRadGen;
import com.hbm.tileentity.machine.TileEntityMachineRadar;
import com.hbm.tileentity.machine.TileEntityMachineRadiolysis;
import com.hbm.tileentity.machine.TileEntityMachineReactorBreeding;
import com.hbm.tileentity.machine.TileEntityMachineSatDock;
import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine;
import com.hbm.tileentity.machine.TileEntityMachineShredderLarge;
import com.hbm.tileentity.machine.TileEntityMachineTurbofan;
import com.hbm.tileentity.machine.TileEntityMicrowave;
import com.hbm.tileentity.machine.TileEntityMultiblock;
import com.hbm.tileentity.machine.TileEntityPlasmaStruct;
import com.hbm.tileentity.machine.TileEntityRadioRec;
import com.hbm.tileentity.machine.TileEntityRadiobox;
import com.hbm.tileentity.machine.TileEntityReactorResearch;
import com.hbm.tileentity.machine.TileEntityReactorZirnox;
import com.hbm.tileentity.machine.TileEntitySILEX;
import com.hbm.tileentity.machine.TileEntitySawmill;
import com.hbm.tileentity.machine.TileEntitySolarBoiler;
import com.hbm.tileentity.machine.TileEntitySoyuzLauncher;
import com.hbm.tileentity.machine.TileEntitySoyuzStruct;
import com.hbm.tileentity.machine.TileEntityStirling;
import com.hbm.tileentity.machine.TileEntityStorageDrum;
import com.hbm.tileentity.machine.TileEntityStructureMarker;
import com.hbm.tileentity.machine.TileEntityTesla;
import com.hbm.tileentity.machine.TileEntityTowerLarge;
import com.hbm.tileentity.machine.TileEntityTowerSmall;
import com.hbm.tileentity.machine.TileEntityVaultDoor;
import com.hbm.tileentity.machine.TileEntityWatz;
import com.hbm.tileentity.machine.TileEntityZirnoxDestroyed;
import com.hbm.tileentity.machine.oil.TileEntityMachineCatalyticCracker;
import com.hbm.tileentity.machine.oil.TileEntityMachineFrackingTower;
import com.hbm.tileentity.machine.oil.TileEntityMachineFractionTower;
import com.hbm.tileentity.machine.oil.TileEntityMachineGasFlare;
import com.hbm.tileentity.machine.oil.TileEntityMachineLiquefactor;
import com.hbm.tileentity.machine.oil.TileEntityMachineOilWell;
import com.hbm.tileentity.machine.oil.TileEntityMachinePumpjack;
import com.hbm.tileentity.machine.oil.TileEntityMachineRefinery;
import com.hbm.tileentity.machine.oil.TileEntityMachineSolidifier;
import com.hbm.tileentity.machine.oil.TileEntitySpacer;
import com.hbm.tileentity.machine.rbmk.TileEntityCraneConsole;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKAbsorber;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKBlank;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKBoiler;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlAuto;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKCooler;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKHeater;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKModerator;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKOutgasser;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKReflector;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKRod;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKRodReaSim;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKStorage;
import com.hbm.tileentity.machine.storage.TileEntityBarrel;
import com.hbm.tileentity.machine.storage.TileEntityMachineBAT9000;
import com.hbm.tileentity.machine.storage.TileEntityMachineFENSU;
import com.hbm.tileentity.machine.storage.TileEntityMachineFluidTank;
import com.hbm.tileentity.machine.storage.TileEntityMachineOrbus;
import com.hbm.tileentity.machine.storage.TileEntityMachinePuF6Tank;
import com.hbm.tileentity.machine.storage.TileEntityMachineUF6Tank;
import com.hbm.tileentity.machine.storage.TileEntitySoyuzCapsule;
import com.hbm.tileentity.network.TileEntityConnector;
import com.hbm.tileentity.network.TileEntityPylon;
import com.hbm.tileentity.network.TileEntityPylonLarge;
import com.hbm.tileentity.network.TileEntitySubstation;
import com.hbm.tileentity.turret.TileEntityTurretArty;
import com.hbm.tileentity.turret.TileEntityTurretBrandon;
import com.hbm.tileentity.turret.TileEntityTurretCIWS;
import com.hbm.tileentity.turret.TileEntityTurretCheapo;
import com.hbm.tileentity.turret.TileEntityTurretChekhov;
import com.hbm.tileentity.turret.TileEntityTurretFlamer;
import com.hbm.tileentity.turret.TileEntityTurretFriendly;
import com.hbm.tileentity.turret.TileEntityTurretFritz;
import com.hbm.tileentity.turret.TileEntityTurretHIMARS;
import com.hbm.tileentity.turret.TileEntityTurretHeavy;
import com.hbm.tileentity.turret.TileEntityTurretHoward;
import com.hbm.tileentity.turret.TileEntityTurretHowardDamaged;
import com.hbm.tileentity.turret.TileEntityTurretJeremy;
import com.hbm.tileentity.turret.TileEntityTurretLight;
import com.hbm.tileentity.turret.TileEntityTurretMaxwell;
import com.hbm.tileentity.turret.TileEntityTurretRichard;
import com.hbm.tileentity.turret.TileEntityTurretRocket;
import com.hbm.tileentity.turret.TileEntityTurretSpitfire;
import com.hbm.tileentity.turret.TileEntityTurretTau;
import com.hbm.tileentity.turret.TileEntityTurretTauon;
import com.hbm.util.BobMathUtil;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.ReflectionHelper;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
@ -23,85 +655,14 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Vec3;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.world.World;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.common.MinecraftForge;
import java.awt.Color;
import java.awt.Desktop;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockBobble.TileEntityBobble;
import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter;
import com.hbm.blocks.generic.BlockLoot.TileEntityLoot;
import com.hbm.entity.cart.*;
import com.hbm.entity.effect.*;
import com.hbm.entity.grenade.*;
import com.hbm.entity.item.*;
import com.hbm.entity.logic.*;
import com.hbm.entity.missile.*;
import com.hbm.entity.mob.*;
import com.hbm.entity.mob.botprime.*;
import com.hbm.entity.mob.siege.*;
import com.hbm.entity.particle.*;
import com.hbm.entity.projectile.*;
import com.hbm.handler.HbmKeybinds;
import com.hbm.handler.HbmKeybinds.EnumKeybind;
import com.hbm.items.ModItems;
import com.hbm.items.ItemAmmoEnums.AmmoHandGrenade;
import com.hbm.particle.*;
import com.hbm.render.anim.*;
import com.hbm.render.anim.HbmAnimations.Animation;
import com.hbm.render.block.*;
import com.hbm.render.entity.*;
import com.hbm.render.entity.effect.*;
import com.hbm.render.entity.item.*;
import com.hbm.render.entity.mob.*;
import com.hbm.render.entity.projectile.*;
import com.hbm.render.entity.rocket.*;
import com.hbm.render.item.*;
import com.hbm.render.item.block.*;
import com.hbm.render.item.weapon.*;
import com.hbm.render.loader.HmfModelLoader;
import com.hbm.render.tileentity.*;
import com.hbm.render.util.MissilePart;
import com.hbm.render.util.RenderInfoSystem;
import com.hbm.render.util.RenderInfoSystem.InfoEntry;
import com.hbm.sound.AudioWrapper;
import com.hbm.sound.AudioWrapperClient;
import com.hbm.sound.AudioWrapperClientStartStop;
import com.hbm.sound.nt.ISoundSourceTE;
import com.hbm.sound.nt.SoundWrapper;
import com.hbm.sound.nt.SoundWrapperClient;
import com.hbm.tileentity.TileEntityDoorGeneric;
import com.hbm.tileentity.bomb.*;
import com.hbm.tileentity.conductor.*;
import com.hbm.tileentity.deco.*;
import com.hbm.tileentity.machine.*;
import com.hbm.tileentity.machine.oil.*;
import com.hbm.tileentity.machine.rbmk.*;
import com.hbm.tileentity.machine.storage.*;
import com.hbm.tileentity.network.*;
import com.hbm.tileentity.turret.*;
import com.hbm.util.BobMathUtil;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.ReflectionHelper;
public class ClientProxy extends ServerProxy {
public RenderInfoSystem theInfoSystem = new RenderInfoSystem();
@ -1817,9 +2378,12 @@ public class ClientProxy extends ServerProxy {
break;
}
case "casing":
final SpentCasingConfig casingConfig = SpentCasingConfig.get(data.getString("name"));
for (int i = 0; i < casingConfig.getCasingAmount(); i++)
casingConfig.spawnCasing(man, world, x, y, z, data.getFloat("pitch"), data.getFloat("yaw"), data.getBoolean("crouched"));
if (WeaponConfig.spawnCasings)
{
final SpentCasingConfig casingConfig = SpentCasingConfig.get(data.getString("name"));
for (int i = 0; i < casingConfig.getCasingAmount(); i++)
casingConfig.spawnCasing(man, world, x, y, z, data.getFloat("pitch"), data.getFloat("yaw"), data.getBoolean("crouched"));
}
break;
default:
break;
@ -1859,12 +2423,6 @@ public class ClientProxy extends ServerProxy {
return audio;
}
@Override
public SoundWrapper getTileSound(String sound, ISoundSourceTE tile) {
SoundWrapperClient wrapper = new SoundWrapperClient(sound, tile);
return wrapper;
}
@Override
public void playSound(String sound, Object data) { }

View File

@ -4,9 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import com.hbm.handler.HbmKeybinds.EnumKeybind;
import com.hbm.saveddata.TomSaveData;
import com.hbm.sound.AudioWrapper;
import com.hbm.sound.nt.ISoundSourceTE;
import com.hbm.sound.nt.SoundWrapper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
@ -14,7 +13,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public abstract class ServerProxy {
public class ServerProxy {
//sort by estimated time of display. longer lasting ones should be sorted at the top.
public static final int ID_DUCK = 0;
@ -28,47 +27,59 @@ public abstract class ServerProxy {
public static final int ID_GUN_MODE = 8;
public static final int ID_GAS_HAZARD = 9;
public abstract void registerRenderInfo();
public abstract void registerTileEntitySpecialRenderer();
public abstract void registerItemRenderer();
public abstract void registerEntityRenderer();
public abstract void registerBlockRenderer();
public void registerRenderInfo() { }
public void registerTileEntitySpecialRenderer() { }
public void registerItemRenderer() { }
public void registerEntityRenderer() { }
public void registerBlockRenderer() { }
public abstract void particleControl(double x, double y, double z, int type);
public void particleControl(double x, double y, double z, int type) { }
public abstract void spawnParticle(double x, double y, double z, String type, float... args);
public void spawnParticle(double x, double y, double z, String type, float[] args) { }
public abstract void effectNT(NBTTagCompound data);
public void effectNT(NBTTagCompound data) { }
public abstract void registerMissileItems();
public void registerMissileItems() { }
public abstract AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float pitch);
public abstract AudioWrapper getLoopedSoundStartStop(World world, String sound, String start, String stop, float x, float y, float z, float volume, float pitch);
public AudioWrapper getLoopedSound(String sound, float x, float y, float z, float volume, float pitch) { return null; }
public AudioWrapper getLoopedSoundStartStop(World world, String sound, String start, String stop, float x, float y, float z, float volume, float pitch) { return null; }
public abstract void playSound(String sound, Object data);
public void playSound(String sound, Object data) { }
public void displayTooltip(String msg, int id) {
displayTooltip(msg, 1000, id);
}
public abstract void displayTooltip(String msg, int time, int id);
public void displayTooltip(String msg, int time, int id) { }
public abstract boolean getIsKeyPressed(EnumKeybind key);
public abstract EntityPlayer me();
public abstract boolean isVanished(Entity e);
public abstract void openLink(String url);
@SuppressWarnings({ "unused", "static-method" })
public SoundWrapper getTileSound(String sound, ISoundSourceTE source) {
return new SoundWrapper();
public boolean getIsKeyPressed(EnumKeybind key) {
return false;
}
public EntityPlayer me() {
return null;
}
public boolean isVanished(Entity e) {
return false;
}
public void openLink(String url) { }
@SuppressWarnings("static-method")
public List<ItemStack> getSubItems(ItemStack stack) {
List<ItemStack> list = new ArrayList<ItemStack>();
List<ItemStack> list = new ArrayList<>();
list.add(stack);
return list;
}
public float getImpactDust(World world) {
return TomSaveData.forWorld(world).dust;
}
public float getImpactFire(World world) {
return TomSaveData.forWorld(world).fire;
}
public boolean getImpact(World world) {
return TomSaveData.forWorld(world).impact;
}
}

View File

@ -14,24 +14,24 @@ import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
@SideOnly(Side.CLIENT)
public class ParticleSpentCasing extends EntityFX
{
private static final float dScale = 0.05f, smokeJitter = 0.025f;
private static final byte smokeAccel = 1;
private static final float dScale = 0.05f;//, smokeJitter = 0.025f, smokeAccel = 0.5f;
// private static final byte maxSmokeGen = 60, maxSmokeLife = 120;
private final List<Pair<EasyLocation, Double>> smokeNodes = new ArrayList<Pair<EasyLocation, Double>>();
private final TextureManager textureManager;
private final float momentumPitch, momentumYaw;
private final SpentCasingConfig config;
private final boolean smoke;
// private final boolean smoke;
private float momentumPitch, momentumYaw;
private boolean onGroundPreviously = false;
private double maxHeight;
public ParticleSpentCasing(TextureManager textureManager, World world, double x, double y, double z, double mx, double my, double mz, float momentumPitch, float momentumYaw, SpentCasingConfig config)
{
super(world, x, y, z, 0, 0, 0);
@ -41,15 +41,17 @@ public class ParticleSpentCasing extends EntityFX
this.config = config;
particleMaxAge = 240;
smoke = config.getSmokeChance() == 0 ? true
: config.getSmokeChance() < 0 ? false
: rand.nextInt(config.getSmokeChance()) == 0;
// smoke = config.getSmokeChance() == 0 ? true
// : config.getSmokeChance() < 0 ? false
// : rand.nextInt(config.getSmokeChance()) == 0;
motionX = mx;
motionY = my;
motionZ = mz;
particleGravity = 8f;
maxHeight = y;
}
@Override
@ -63,38 +65,48 @@ public class ParticleSpentCasing extends EntityFX
{
super.onUpdate();
if (!onGroundPreviously && onGround)
onGroundPreviously = true;
else if (onGroundPreviously && !onGround)
onGroundPreviously = false;
if (motionY > 0 && posY > maxHeight)
maxHeight = posY;
if (!onGroundPreviously && onGround)
tryPlayBounceSound();
if (particleAge > 120 && !smokeNodes.isEmpty())
smokeNodes.clear();
if (smoke && particleAge <= 120)
// TODO Bounce factor in config
if (!onGroundPreviously && onGround)
{
final double side = (rotationYaw - prevRotationYaw) * 0.1D;
final Vec3 prev = Vec3.createVectorHelper(motionX, -motionY, motionZ);
prev.rotateAroundY((float) Math.toRadians(rotationYaw));
onGroundPreviously = true;
motionY = Math.log10(maxHeight - posY + 2);
momentumPitch = (float) rand.nextGaussian() * config.getPitchFactor();
momentumYaw = (float) rand.nextGaussian() * config.getYawFactor();
for (Pair<EasyLocation, Double> pair : smokeNodes)
{
final EasyLocation node = pair.getKey();
node.posX += prev.xCoord * smokeAccel + rand.nextGaussian() * smokeJitter + side;
node.posY += prev.yCoord + 1.5;
node.posZ += prev.zCoord * smokeAccel + rand.nextGaussian() * smokeJitter;
}
if (particleAge < 60)
{
final double alpha = (particleAge / 20d);
smokeNodes.add(new Pair<EasyLocation, Double>(EasyLocation.getZeroLocation(), alpha));
}
}
maxHeight = posY;
} else if (onGroundPreviously && !onGround)
onGroundPreviously = false;
// if (particleAge > maxSmokeLife && !smokeNodes.isEmpty())
// smokeNodes.clear();
// if (smoke && particleAge <= maxSmokeLife)
// {
// final double side = (rotationYaw - prevRotationYaw) * 0.1D;
// final Vec3 prev = Vec3.createVectorHelper(motionX, motionY, motionZ);
// prev.rotateAroundY((float) Math.toRadians(rotationYaw));
//
// for (Pair<EasyLocation, Double> pair : smokeNodes)
// {
// final EasyLocation node = pair.getKey();
//
// node.posX += prev.xCoord * smokeAccel + rand.nextGaussian() * smokeJitter + side;
// node.posY += prev.yCoord + smokeAccel;
// node.posZ += prev.zCoord * smokeAccel + rand.nextGaussian() * smokeJitter;
// }
//
// if (particleAge < maxSmokeGen || inWater)
// {
// final double alpha = (particleAge / 20d);
// smokeNodes.add(new Pair<EasyLocation, Double>(EasyLocation.getZeroLocation(), alpha));
// }
// }
prevRotationPitch = rotationPitch;
prevRotationYaw = rotationYaw;
@ -188,7 +200,8 @@ public class ParticleSpentCasing extends EntityFX
private void tryPlayBounceSound()
{
if (!config.getBounceSound().isEmpty())
worldObj.playSoundEffect(posX, posY, posZ, config.getBounceSound(), 1, 1);
worldObj.playSoundAtEntity(this, config.getBounceSound(), 2, 1);
// playSound(config.getBounceSound(), 2, 1);
}
// private static float[] getOffset(float time)

View File

@ -66,7 +66,7 @@ public class SpentCasingConfig
private final byte delay;
/**Chance for the casing to emit smoke. 0 for 100% chance and -1 for it to never make smoke.**/
private final byte smokeChance;
// TODO Setting to disregard crouch effect and/or another offset specifically for crouching which can be set to null to use the default one
public SpentCasingConfig(
String registryName, ILocationProvider posOffset, Vec3 initialMotion, float pitchFactor, float yawFactor,
float scaleX, float scaleY, float scaleZ, int redOverride, int greenOverride, int blueOverride,

View File

@ -1,8 +1,10 @@
package com.hbm.util;
import com.hbm.interfaces.ILocationProvider;
import com.hbm.main.MainRegistry;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.particle.SpentCasingConfig;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.nbt.NBTTagCompound;
@ -27,4 +29,27 @@ public class ParticleUtil {
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(world.provider.dimensionId, x, y, z, 150));
}
}
/**
* Spawn a spent shell casing.
* @param location Location to spawn from.
* @param config The shell casing configuration to use.
* @param pitch Pitch rotation in radians.
* @param yaw Yaw rotation in radians.
* @param heightAdjustment Height adjustment.
* @param sneaking Assume from a sneaking/crouched entity.
*/
public static void spawnCasing(ILocationProvider location, SpentCasingConfig config, float pitch, float yaw, float heightAdjustment, boolean sneaking)
{
final NBTTagCompound data = new NBTTagCompound();
data.setString("type", "casing");
data.setDouble("posX", location.posX());
data.setDouble("posY", location.posY() + heightAdjustment);
data.setDouble("posZ", location.posZ());
data.setFloat("pitch", pitch);
data.setFloat("yaw", yaw);
data.setBoolean("crouched", sneaking);
data.setString("name", config.getRegistryName());
MainRegistry.proxy.effectNT(data);
}
}

View File

@ -1,302 +0,0 @@
package com.hbm.util;
import java.io.Serializable;
import java.util.Objects;
import com.hbm.interfaces.IByteSerializable;
import com.hbm.interfaces.INBTSerializable;
import com.hbm.main.DeserializationException;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Vec3;
/**
* Credits to Apache for the basic structure.
* @author UFFR
*
*/
public class Quaternion implements Serializable, Cloneable, IByteSerializable, INBTSerializable
{
/**
*
*/
private static final long serialVersionUID = -403051011515625947L;
private double w, x, y, z;
public Quaternion(double pitch, double yaw)
{
final double rPitch = Math.toRadians(pitch),
rYaw = Math.toRadians(yaw),
cp = Math.cos(rPitch * 0.5),
sp = Math.sin(rPitch * 0.5),
cy = Math.cos(rYaw * 0.5),
sy = Math.sin(rYaw * 0.5);
w = cy * sp;
x = sy * cp;
y = sy * cp;
z = cy * cp;
}
public Quaternion(double roll, double pitch, double yaw)
{
final double rRoll = Math.toRadians(roll),
rPitch = Math.toRadians(pitch),
rYaw = Math.toRadians(yaw),
cr = Math.cos(rRoll * 0.5),
sr = Math.sin(rRoll * 0.5),
cp = Math.cos(rPitch * 0.5),
sp = Math.sin(rPitch * 0.5),
cy = Math.cos(rYaw * 0.5),
sy = Math.sin(rYaw * 0.5);
w = cr * cp * cy + sr * sp * sy;
x = sr * cp * cy - cr * sp * sy;
y = cr * sp * cy + sr * cp * sy;
z = cr * cp * sy - sr * sp * cy;
}
public Quaternion(double w, double x, double y, double z)
{
this.w = w;
this.x = x;
this.y = y;
this.z = z;
}
public Quaternion(double w, Vec3 vec3)
{
this.w = w;
x = vec3.xCoord;
y = vec3.yCoord;
z = vec3.zCoord;
}
public Quaternion(Vec3 vec3)
{
this(0, vec3);
}
public Quaternion(double w, double[] vector)
{
if (vector.length != 3)
throw new IllegalArgumentException("Vector argument must only have 3 values!");
this.w = w;
x = vector[0];
y = vector[1];
z = vector[2];
}
public Quaternion(double[] vector)
{
this(0, vector);
}
public Quaternion getConjugate()
{
return new Quaternion(w, -x, -y, -z);
}
public Quaternion add(Quaternion q)
{
return add(this, q);
}
public Quaternion subtract(Quaternion q)
{
return subtract(this, q);
}
public Quaternion multiply(Quaternion q)
{
return multiply(this, q);
}
public Quaternion dotProduct(Quaternion q)
{
return dotProduct(this, q);
}
public double getNorm()
{
return Math.sqrt(w * w + x * x + y * y + z * z);
}
public Quaternion normalize()
{
final double norm = getNorm();
if (norm < Double.MIN_NORMAL)
throw new ArithmeticException("Quaternion norm zero!");
return new Quaternion(
w / norm,
x / norm,
y / norm,
z / norm);
}
public double getPitch()
{
return Math.atan2(2 * (y * z + w * x), w * w - x * x - y * y + z * z);
}
public double getYaw()
{
return Math.asin(-2 * (x * z - w * y));
}
public double getRoll()
{
return Math.atan2(2 * (x * y + w * z), w * w + x * x - y * y - z * z);
}
public static Quaternion add(Quaternion q1, Quaternion q2)
{
return new Quaternion(q1.w + q2.w, q1.x + q2.x, q1.y + q2.y, q1.z + q2.z);
}
public static Quaternion subtract(Quaternion q1, Quaternion q2)
{
return new Quaternion(q1.w - q2.w, q1.x - q2.x, q1.y - q2.y, q1.z - q2.z);
}
public static Quaternion multiply(Quaternion q1, Quaternion q2)
{
return new Quaternion(
q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z,
q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,
q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x,
q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w
);
}
public static Quaternion dotProduct(Quaternion q1, Quaternion q2)
{
return new Quaternion(q1.w * q2.w, q1.x * q2.x, q1.y * q2.y, q1.z * q2.z);
}
public static Vec3 rotate(Quaternion q, Vec3 vec3)
{
return q.multiply(new Quaternion(vec3)).multiply(q.getConjugate()).getVector();
}
public static Vec3 rotate(Quaternion q, Vec3 vec3, Vec3 origin)
{
return q.multiply(new Quaternion(vec3.subtract(origin))).multiply(q.getConjugate()).getVector().addVector(origin.xCoord, origin.yCoord, origin.zCoord);
}
public double getW()
{
return w;
}
public double getX()
{
return x;
}
public double getY()
{
return y;
}
public double getZ()
{
return z;
}
public Vec3 getVector()
{
return Vec3.createVectorHelper(x, y, z);
}
@Override
public void writeToNBT(NBTTagCompound nbt)
{
nbt.setDouble("w", w);
nbt.setDouble("x", x);
nbt.setDouble("y", y);
nbt.setDouble("z", z);
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
w = nbt.getDouble("w");
x = nbt.getDouble("x");
y = nbt.getDouble("y");
z = nbt.getDouble("z");
}
@Override
public void writeToBytes(ByteBuf buf)
{
buf.writeDouble(w).writeDouble(x).writeDouble(y).writeDouble(z);
}
@Override
public void readFromBytes(byte[] bytes) throws DeserializationException
{
try
{
final ByteBuf buf = Unpooled.copiedBuffer(bytes);
w = buf.readDouble();
x = buf.readDouble();
y = buf.readDouble();
z = buf.readDouble();
} catch (Exception e)
{
throw new DeserializationException(e);
}
}
@Override
public int hashCode()
{
return Objects.hash(w, x, y, z);
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (!(obj instanceof Quaternion))
return false;
final Quaternion other = (Quaternion) obj;
return Double.doubleToLongBits(w) == Double.doubleToLongBits(other.w)
&& Double.doubleToLongBits(x) == Double.doubleToLongBits(other.x)
&& Double.doubleToLongBits(y) == Double.doubleToLongBits(other.y)
&& Double.doubleToLongBits(z) == Double.doubleToLongBits(other.z);
}
@Override
public String toString()
{
final StringBuilder builder = new StringBuilder();
builder.append("Quaternion [w=").append(w).append(", x=").append(x).append(", y=").append(y).append(", z=")
.append(z).append(']');
return builder.toString();
}
@Override
public Quaternion clone()
{
try
{
return (Quaternion) super.clone();
} catch (CloneNotSupportedException e)
{
return new Quaternion(w, x, y, z);
}
}
}

View File

@ -188,6 +188,10 @@
"weapon.LMGMagInPB3": {"category": "player", "sounds": [{"name": "weapon/LMGIN", "stream": false}]},
"weapon.LMGCockPB3": {"category": "player", "sounds": [{"name": "weapon/LMGCLK", "stream": false}]},
"weapon.shotgunDrumPB3": {"category": "player", "sounds": ["weapon/ASGDRM1", "weapon/ASGDRM2"]},
"weapon.shotgunShellBouncePB3": {"category": "player", "sounds": ["weapon/DSSHELL1", "weapon/DSSHELL2", "weapon/DSSHELL3"]},
"weapon.smallCasingBouncePB3": {"category": "player", "sounds": ["weapon/BRASS_C1", "weapon/BRASS_C2", "weapon/BRASS_C3", "weapon/BRASS_C4", "weapon/BRASS_C5"]},
"weapon.smallMagBouncePB3": {"category": "player", "sounds": ["weapon/DSAOUNC1", "weapon/DSAOUNC2", "weapon/DSAOUNC3", "weapon/DSAOUNC4"]},
"weapon.largeMagBouncePB3": {"category": "player", "sounds": ["weapon/DSBOUNC1", "weapon/DSBOUNC2", "weapon/DSBOUNC3", "weapon/DSBOUNC4"]},
"weapon.dFlash": {"category": "player", "sounds": [{"name": "weapon/dFlash", "stream": false}]},