"music neva stops, no" - hatsune miku

This commit is contained in:
Boblet 2025-05-02 11:40:07 +02:00
parent 4b5d9664bf
commit 01df6f20c2
23 changed files with 144 additions and 60 deletions

View File

@ -17,6 +17,13 @@
* Halved recoil on the zebra rifle
* The laser pistols now make a click when dry firing
* Solid fuel in the rotary furnace no longer ticks down if no recipe is actually being done
* Pneumatic tube round robin will now progress even if a destination is not accessible, preventing cases where the tubes are stuck if one of the containers has run full
* Tesla cannons now accept low-wavelength capacitors
* The resulting beam is non-penetrating and 20% less powerful than standard capacitor beams
* In addition to the splash damage, the beam will split and fire smaller beams at any living entity in a 20 block radius, with half damage
* Sub-beams do not cause splash damage
* Sub-beams will strike the initially hit entity again, meaning that the more sub-beams there are, the more powerful the initial strike ends up being
* Renamed the default capacitor ammo to "capacitor (standard)" to avoid confusion
## Fixed
* Fixed a potential crash caused by cargo dropships landing on cargo docks with no satellite chip installed

View File

@ -38,6 +38,15 @@ public class EntityBulletBeamBase extends Entity implements IEntityAdditionalSpa
public EntityLivingBase getThrower() { return this.thrower; }
public EntityBulletBeamBase(EntityLivingBase entity, BulletConfig config, float baseDamage) {
this(entity.worldObj);
this.thrower = entity;
this.setBulletConfig(config);
this.damage = baseDamage * this.config.damageMult;
}
public EntityBulletBeamBase(EntityLivingBase entity, BulletConfig config, float baseDamage, float angularInaccuracy, double sideOffset, double heightOffset, double frontOffset) {
this(entity.worldObj);
@ -69,6 +78,22 @@ public class EntityBulletBeamBase extends Entity implements IEntityAdditionalSpa
performHitscan();
}
public void setRotationsFromVector(Vec3 delta) {
this.rotationPitch = (float) (-Math.asin(delta.yCoord / delta.lengthVector()) * 180D / Math.PI);
this.rotationYaw = (float) (-Math.atan2(delta.xCoord, delta.zCoord) * 180D / Math.PI);
this.headingX = (double) (-MathHelper.sin(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI));
this.headingZ = (double) (MathHelper.cos(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI));
this.headingY = (double) (-MathHelper.sin((this.rotationPitch) / 180.0F * (float) Math.PI));
}
public void performHitscanExternal(double range) {
this.headingX *= range;
this.headingY *= range;
this.headingZ *= range;
performHitscan();
}
@Override
protected void entityInit() {

View File

@ -123,7 +123,7 @@ public class BulletConfig implements Cloneable {
public BulletConfig setupDamageClass(DamageClass clazz) { this.dmgClass = clazz; return this; }
public BulletConfig setRicochetAngle(float angle) { this.ricochetAngle = angle; return this; }
public BulletConfig setRicochetCount(int count) { this.maxRicochetCount = count; return this; }
public BulletConfig setDamageFalloutByPen(boolean falloff) { this.damageFalloffByPen = falloff; return this; }
public BulletConfig setDamageFalloffByPen(boolean falloff) { this.damageFalloffByPen = falloff; return this; }
public BulletConfig setGrav(double gravity) { this.gravity = gravity; return this; }
public BulletConfig setLife(int expires) { this.expires = expires; return this; }
public BulletConfig setImpactsEntities(boolean impact) { this.impactsEntities = impact; return this; }

View File

@ -200,7 +200,8 @@ public class GunFactoryClient {
nuke_tots.setRenderer(LegoClient.RENDER_GRENADE);
nuke_hive.setRenderer(LegoClient.RENDER_HIVE);
setRendererBulkBeam(LegoClient.RENDER_LIGHTNING, energy_tesla, energy_tesla_overcharge);
setRendererBulkBeam(LegoClient.RENDER_LIGHTNING, energy_tesla, energy_tesla_overcharge, energy_tesla_ir);
setRendererBulkBeam(LegoClient.RENDER_LIGHTNING_SUB, energy_tesla_ir_sub);
setRendererBulkBeam(LegoClient.RENDER_TAU, tau_uranium);
setRendererBulkBeam(LegoClient.RENDER_TAU_CHARGE, tau_uranium_charge);
setRendererBulkBeam(LegoClient.RENDER_LASER_RED, energy_las, energy_las_overcharge, energy_las_ir);

View File

@ -273,6 +273,25 @@ public class LegoClient {
RenderArcFurnace.fullbright(false);
};
public static BiConsumer<EntityBulletBeamBase, Float> RENDER_LIGHTNING_SUB = (bullet, interp) -> {
RenderArcFurnace.fullbright(true);
GL11.glPushMatrix();
GL11.glRotatef(180 - bullet.rotationYaw, 0, 1F, 0);
GL11.glRotatef(-bullet.rotationPitch - 90, 1F, 0, 0);
Vec3 delta = Vec3.createVectorHelper(0, bullet.beamLength, 0);
double age = MathHelper.clamp_double(1D - ((double) bullet.ticksExisted - 2 + interp) / (double) bullet.getBulletConfig().expires, 0, 1);
GL11.glScaled(age / 2 + 0.15, 1, age / 2 + 0.15);
double scale = 0.075D;
int colorInner = ((int)(0x20 * age) << 16) | ((int)(0x20 * age) << 8) | (int) (0x40 * age);
int colorOuter = ((int)(0x40 * age) << 16) | ((int)(0x40 * age) << 8) | (int) (0x80 * age);
BeamPronter.prontBeam(delta, EnumWaveType.RANDOM, EnumBeamType.SOLID, colorInner, colorInner, bullet.ticksExisted / 3, (int)(bullet.beamLength / 2 + 1), (float)scale * 1F, 4, 0.25F);
BeamPronter.prontBeam(delta, EnumWaveType.RANDOM, EnumBeamType.SOLID, colorOuter, colorOuter, bullet.ticksExisted, (int)(bullet.beamLength / 2 + 1), (float)scale * 7F, 2, 0.0625F);
BeamPronter.prontBeam(delta, EnumWaveType.RANDOM, EnumBeamType.SOLID, colorOuter, colorOuter, bullet.ticksExisted / 2, (int)(bullet.beamLength / 2 + 1), (float)scale * 7F, 2, 0.0625F);
GL11.glPopMatrix();
RenderArcFurnace.fullbright(false);
};
public static BiConsumer<EntityBulletBeamBase, Float> RENDER_TAU = (bullet, interp) -> {
RenderArcFurnace.fullbright(true);

View File

@ -43,7 +43,7 @@ public class XFactory10ga {
float buckshotSpread = 0.035F;
g10 = new BulletConfig().setItem(EnumAmmo.G10).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 4).setProjectiles(10).setDamage(1F/10F).setSpread(buckshotSpread).setRicochetAngle(15).setThresholdNegation(5F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xB52B2B, SpentCasing.COLOR_CASE_12GA).setScale(1F).register("10GA"));
g10_shrapnel = new BulletConfig().setItem(EnumAmmo.G10_SHRAPNEL).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 4).setProjectiles(10).setDamage(1F/10F).setSpread(buckshotSpread).setRicochetAngle(90).setRicochetCount(15).setThresholdNegation(5F).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xE5DD00, SpentCasing.COLOR_CASE_12GA).setScale(1F).register("10GAShrapnel"));
g10_du = new BulletConfig().setItem(EnumAmmo.G10_DU).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 4).setProjectiles(10).setDamage(1F/4F).setSpread(buckshotSpread).setRicochetAngle(15).setThresholdNegation(10F).setArmorPiercing(0.2F).setDoesPenetrate(true).setDamageFalloutByPen(false).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x538D53, SpentCasing.COLOR_CASE_12GA).setScale(1F).register("10GADU"));
g10_du = new BulletConfig().setItem(EnumAmmo.G10_DU).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 4).setProjectiles(10).setDamage(1F/4F).setSpread(buckshotSpread).setRicochetAngle(15).setThresholdNegation(10F).setArmorPiercing(0.2F).setDoesPenetrate(true).setDamageFalloffByPen(false).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x538D53, SpentCasing.COLOR_CASE_12GA).setScale(1F).register("10GADU"));
g10_slug = new BulletConfig().setItem(EnumAmmo.G10_SLUG).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 4).setRicochetAngle(15).setThresholdNegation(10F).setArmorPiercing(0.1F).setDoesPenetrate(true).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x808080, SpentCasing.COLOR_CASE_12GA).setScale(1F).register("10GASlug"));
g10_explosive = new BulletConfig().setItem(EnumAmmo.G10_EXPLOSIVE).setCasing(EnumCasingType.BUCKSHOT_ADVANCED, 4).setWear(3F).setProjectiles(10).setDamage(1F/4F).setSpread(buckshotSpread).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xFAC943, SpentCasing.COLOR_CASE_12GA).setScale(1F).register("10GAEXP")).setOnImpact(LAMBDA_TINY_EXPLODE);

View File

@ -42,7 +42,7 @@ public class XFactory22lr {
.setCasing(casing22.clone().register("p22fmj"));
p22_jhp = new BulletConfig().setItem(EnumAmmo.P22_JHP).setCasing(EnumCasingType.SMALL, 24).setKnockback(0F).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F)
.setCasing(casing22.clone().register("p22jhp"));
p22_ap = new BulletConfig().setItem(EnumAmmo.P22_AP).setCasing(EnumCasingType.SMALL_STEEL, 24).setKnockback(0F).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.25F).setThresholdNegation(2.5F).setArmorPiercing(0.15F)
p22_ap = new BulletConfig().setItem(EnumAmmo.P22_AP).setCasing(EnumCasingType.SMALL_STEEL, 24).setKnockback(0F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(2.5F).setArmorPiercing(0.15F)
.setCasing(casing22.clone().setColor(SpentCasing.COLOR_CASE_44).register("p22ap"));
ModItems.gun_am180 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()

View File

@ -35,7 +35,7 @@ public class XFactory357 {
m357_sp = new BulletConfig().setItem(EnumAmmo.M357_SP).setCasing(EnumCasingType.SMALL, 8);
m357_fmj = new BulletConfig().setItem(EnumAmmo.M357_FMJ).setCasing(EnumCasingType.SMALL, 8).setDamage(0.8F).setThresholdNegation(2F).setArmorPiercing(0.1F);
m357_jhp = new BulletConfig().setItem(EnumAmmo.M357_JHP).setCasing(EnumCasingType.SMALL, 8).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F);
m357_ap = new BulletConfig().setItem(EnumAmmo.M357_AP).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.25F).setThresholdNegation(5F).setArmorPiercing(0.15F);
m357_ap = new BulletConfig().setItem(EnumAmmo.M357_AP).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(5F).setArmorPiercing(0.15F);
m357_express = new BulletConfig().setItem(EnumAmmo.M357_EXPRESS).setCasing(EnumCasingType.SMALL, 8).setDoesPenetrate(true).setDamage(1.5F).setThresholdNegation(2F).setArmorPiercing(0.1F).setWear(1.5F);
ModItems.gun_light_revolver = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()

View File

@ -77,7 +77,7 @@ public class XFactory44 {
.setCasing(casing44.clone().register("m44fmj"));
m44_jhp = new BulletConfig().setItem(EnumAmmo.M44_JHP).setCasing(EnumCasingType.SMALL, 6).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F)
.setCasing(casing44.clone().register("m44jhp"));
m44_ap = new BulletConfig().setItem(EnumAmmo.M44_AP).setCasing(EnumCasingType.SMALL_STEEL, 6).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.25F).setThresholdNegation(7.5F).setArmorPiercing(0.15F)
m44_ap = new BulletConfig().setItem(EnumAmmo.M44_AP).setCasing(EnumCasingType.SMALL_STEEL, 6).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(7.5F).setArmorPiercing(0.15F)
.setCasing(casing44.clone().setColor(SpentCasing.COLOR_CASE_44).register("m44ap"));
m44_express = new BulletConfig().setItem(EnumAmmo.M44_EXPRESS).setCasing(EnumCasingType.SMALL, 6).setDoesPenetrate(true).setDamage(1.5F).setThresholdNegation(3F).setArmorPiercing(0.1F).setWear(1.5F)
.setCasing(casing44.clone().register("m44express"));

View File

@ -22,9 +22,9 @@ public class XFactory45 {
.setCasing(casing9.clone().register("p45fmj"));
p45_jhp = new BulletConfig().setItem(EnumAmmo.P45_JHP).setCasing(EnumCasingType.SMALL, 8).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F)
.setCasing(casing9.clone().register("p45jhp"));
p45_ap = new BulletConfig().setItem(EnumAmmo.P45_AP).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.25F).setThresholdNegation(5F).setArmorPiercing(0.15F)
p45_ap = new BulletConfig().setItem(EnumAmmo.P45_AP).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(5F).setArmorPiercing(0.15F)
.setCasing(casing9.clone().setColor(SpentCasing.COLOR_CASE_44).register("p45ap"));
p45_du = new BulletConfig().setItem(EnumAmmo.P45_DU).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(2.5F).setThresholdNegation(15F).setArmorPiercing(0.25F)
p45_du = new BulletConfig().setItem(EnumAmmo.P45_DU).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(2.5F).setThresholdNegation(15F).setArmorPiercing(0.25F)
.setCasing(casing9.clone().setColor(SpentCasing.COLOR_CASE_44).register("p45du"));
}
}

View File

@ -47,11 +47,11 @@ public class XFactory50 {
.setCasing(casing762.clone().register("bmg50fmj"));
bmg50_jhp = new BulletConfig().setItem(EnumAmmo.BMG50_JHP).setCasing(EnumCasingType.LARGE, 12).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F)
.setCasing(casing762.clone().register("bmg50jhp"));
bmg50_ap = new BulletConfig().setItem(EnumAmmo.BMG50_AP).setCasing(EnumCasingType.LARGE_STEEL, 12).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.25F).setThresholdNegation(17.5F).setArmorPiercing(0.15F)
bmg50_ap = new BulletConfig().setItem(EnumAmmo.BMG50_AP).setCasing(EnumCasingType.LARGE_STEEL, 12).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(17.5F).setArmorPiercing(0.15F)
.setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50ap"));
bmg50_du = new BulletConfig().setItem(EnumAmmo.BMG50_DU).setCasing(EnumCasingType.LARGE_STEEL, 12).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F).setThresholdNegation(21F).setArmorPiercing(0.25F)
bmg50_du = new BulletConfig().setItem(EnumAmmo.BMG50_DU).setCasing(EnumCasingType.LARGE_STEEL, 12).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.5F).setThresholdNegation(21F).setArmorPiercing(0.25F)
.setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50du"));
bmg50_he = new BulletConfig().setItem(EnumAmmo.BMG50_HE).setCasing(EnumCasingType.LARGE_STEEL, 12).setWear(3F).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.75F).setOnImpact(LAMBDA_STANDARD_EXPLODE)
bmg50_he = new BulletConfig().setItem(EnumAmmo.BMG50_HE).setCasing(EnumCasingType.LARGE_STEEL, 12).setWear(3F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.75F).setOnImpact(LAMBDA_STANDARD_EXPLODE)
.setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50he"));
ModItems.gun_m2 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()

View File

@ -64,7 +64,7 @@ public class XFactory556mm {
.setCasing(casing556.clone().register("r556fmj"));
r556_jhp = new BulletConfig().setItem(EnumAmmo.R556_JHP).setCasing(EnumCasingType.SMALL, 8).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F)
.setCasing(casing556.clone().register("r556jhp"));
r556_ap = new BulletConfig().setItem(EnumAmmo.R556_AP).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.25F).setThresholdNegation(10F).setArmorPiercing(0.15F)
r556_ap = new BulletConfig().setItem(EnumAmmo.R556_AP).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(10F).setArmorPiercing(0.15F)
.setCasing(casing556.clone().setColor(SpentCasing.COLOR_CASE_44).register("r556ap"));
r556_inc_sp = r556_sp.clone().setOnImpact(INCENDIARY);

View File

@ -54,9 +54,9 @@ public class XFactory762mm {
.setCasing(casing762.clone().register("r762fmj"));
r762_jhp = new BulletConfig().setItem(EnumAmmo.R762_JHP).setCasing(EnumCasingType.SMALL, 6).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F)
.setCasing(casing762.clone().register("r762jhp"));
r762_ap = new BulletConfig().setItem(EnumAmmo.R762_AP).setCasing(EnumCasingType.SMALL_STEEL, 6).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.25F).setThresholdNegation(12.5F).setArmorPiercing(0.15F)
r762_ap = new BulletConfig().setItem(EnumAmmo.R762_AP).setCasing(EnumCasingType.SMALL_STEEL, 6).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(12.5F).setArmorPiercing(0.15F)
.setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("r762ap"));
r762_du = new BulletConfig().setItem(EnumAmmo.R762_DU).setCasing(EnumCasingType.SMALL_STEEL, 6).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F).setThresholdNegation(15F).setArmorPiercing(0.25F)
r762_du = new BulletConfig().setItem(EnumAmmo.R762_DU).setCasing(EnumCasingType.SMALL_STEEL, 6).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.5F).setThresholdNegation(15F).setArmorPiercing(0.25F)
.setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("r762du"));
r762_he = new BulletConfig().setItem(EnumAmmo.R762_HE).setCasing(EnumCasingType.SMALL_STEEL, 6).setWear(3F).setDamage(1.75F).setOnImpact(LAMBDA_TINY_EXPLODE)
.setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("r762he"));

View File

@ -47,7 +47,7 @@ public class XFactory9mm {
.setCasing(casing9.clone().register("p9fmj"));
p9_jhp = new BulletConfig().setItem(EnumAmmo.P9_JHP).setCasing(EnumCasingType.SMALL, 12).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F)
.setCasing(casing9.clone().register("p9jhp"));
p9_ap = new BulletConfig().setItem(EnumAmmo.P9_AP).setCasing(EnumCasingType.SMALL_STEEL, 12).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.25F).setThresholdNegation(5F).setArmorPiercing(0.15F)
p9_ap = new BulletConfig().setItem(EnumAmmo.P9_AP).setCasing(EnumCasingType.SMALL_STEEL, 12).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.25F).setThresholdNegation(5F).setArmorPiercing(0.15F)
.setCasing(casing9.clone().setColor(SpentCasing.COLOR_CASE_44).register("p9ap"));
ModItems.gun_greasegun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()

View File

@ -80,14 +80,14 @@ public class XFactoryAccelerator {
public static void init() {
tau_uranium = new BulletConfig().setItem(EnumAmmo.TAU_URANIUM).setCasing(new ItemStack(ModItems.plate_lead, 2), 16).setupDamageClass(DamageClass.SUBATOMIC).setBeam().setLife(5).setRenderRotations(false).setDoesPenetrate(true).setDamageFalloutByPen(false)
tau_uranium = new BulletConfig().setItem(EnumAmmo.TAU_URANIUM).setCasing(new ItemStack(ModItems.plate_lead, 2), 16).setupDamageClass(DamageClass.SUBATOMIC).setBeam().setLife(5).setRenderRotations(false).setDoesPenetrate(true).setDamageFalloffByPen(false)
.setOnBeamImpact(BulletConfig.LAMBDA_BEAM_HIT);
tau_uranium_charge = new BulletConfig().setItem(EnumAmmo.TAU_URANIUM).setCasing(new ItemStack(ModItems.plate_lead, 2), 16).setupDamageClass(DamageClass.SUBATOMIC).setBeam().setLife(5).setRenderRotations(false).setDoesPenetrate(true).setDamageFalloutByPen(false).setSpectral(true)
tau_uranium_charge = new BulletConfig().setItem(EnumAmmo.TAU_URANIUM).setCasing(new ItemStack(ModItems.plate_lead, 2), 16).setupDamageClass(DamageClass.SUBATOMIC).setBeam().setLife(5).setRenderRotations(false).setDoesPenetrate(true).setDamageFalloffByPen(false).setSpectral(true)
.setOnBeamImpact(BulletConfig.LAMBDA_BEAM_HIT);
coil_tungsten = new BulletConfig().setItem(EnumAmmo.COIL_TUNGSTEN).setVel(7.5F).setLife(50).setDoesPenetrate(true).setDamageFalloutByPen(false).setSpectral(true)
coil_tungsten = new BulletConfig().setItem(EnumAmmo.COIL_TUNGSTEN).setVel(7.5F).setLife(50).setDoesPenetrate(true).setDamageFalloffByPen(false).setSpectral(true)
.setOnUpdate(LAMBDA_UPDATE_TUNGSTEN);
coil_ferrouranium = new BulletConfig().setItem(EnumAmmo.COIL_FERROURANIUM).setVel(7.5F).setLife(50).setDoesPenetrate(true).setDamageFalloutByPen(false).setSpectral(true)
coil_ferrouranium = new BulletConfig().setItem(EnumAmmo.COIL_FERROURANIUM).setVel(7.5F).setLife(50).setDoesPenetrate(true).setDamageFalloffByPen(false).setSpectral(true)
.setOnUpdate(LAMBDA_UPDATE_FERRO);
tauChargeMag.addConfigs(tau_uranium_charge);

View File

@ -24,7 +24,7 @@ public class XFactoryBlackPowder {
public static BulletConfig stone = new BulletConfig().setItem(EnumAmmo.STONE).setBlackPowder(true).setHeadshot(1F).setSpread(0.025F).setRicochetAngle(15);
public static BulletConfig flint = new BulletConfig().setItem(EnumAmmo.STONE_AP).setBlackPowder(true).setHeadshot(1F).setSpread(0.01F).setRicochetAngle(5).setDoesPenetrate(true).setDamage(1.5F);
public static BulletConfig iron = new BulletConfig().setItem(EnumAmmo.STONE_IRON).setBlackPowder(true).setHeadshot(1F).setSpread(0F).setRicochetAngle(90).setRicochetCount(5).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F);
public static BulletConfig iron = new BulletConfig().setItem(EnumAmmo.STONE_IRON).setBlackPowder(true).setHeadshot(1F).setSpread(0F).setRicochetAngle(90).setRicochetCount(5).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.5F);
public static BulletConfig shot = new BulletConfig().setItem(EnumAmmo.STONE_SHOT).setBlackPowder(true).setHeadshot(1F).setSpread(0.1F).setRicochetAngle(45).setProjectiles(6, 6).setDamage(1F/6F);
public static void init() {

View File

@ -1,5 +1,7 @@
package com.hbm.items.weapon.sedna.factory;
import java.util.Collections;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
@ -38,8 +40,10 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@ -49,6 +53,8 @@ public class XFactoryEnergy {
public static BulletConfig energy_tesla;
public static BulletConfig energy_tesla_overcharge;
public static BulletConfig energy_tesla_ir;
public static BulletConfig energy_tesla_ir_sub;
public static BulletConfig energy_las;
public static BulletConfig energy_las_overcharge;
@ -95,6 +101,28 @@ public class XFactoryEnergy {
}
};
public static BiConsumer<EntityBulletBeamBase, MovingObjectPosition> LAMBDA_LIGHTNING_SPLIT = (beam, mop) -> {
LAMBDA_LIGHTNING_HIT.accept(beam, mop);
if(mop.typeOfHit != mop.typeOfHit.ENTITY) return;
double range = 20;
List<EntityLivingBase> potentialTargets = beam.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord).expand(range, range, range));
Collections.shuffle(potentialTargets);
for(EntityLivingBase target : potentialTargets) {
if(target == beam.thrower) continue;
if(target == mop.entityHit) continue;
Vec3 delta = Vec3.createVectorHelper(target.posX - mop.hitVec.xCoord, target.posY + target.height / 2 - mop.hitVec.yCoord, target.posZ - mop.hitVec.zCoord);
if(delta.lengthVector() > 20) continue;
EntityBulletBeamBase sub = new EntityBulletBeamBase(beam.thrower, energy_tesla_ir_sub, beam.damage);
sub.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord);
sub.setRotationsFromVector(delta);
sub.performHitscanExternal(delta.lengthVector());
beam.worldObj.spawnEntityInWorld(sub);
}
};
public static BiConsumer<EntityBulletBeamBase, MovingObjectPosition> LAMBDA_IR_HIT = (beam, mop) -> {
BulletConfig.LAMBDA_STANDARD_BEAM_HIT.accept(beam, mop);
@ -129,6 +157,10 @@ public class XFactoryEnergy {
.setOnBeamImpact(LAMBDA_LIGHTNING_HIT);
energy_tesla_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4).setupDamageClass(DamageClass.ELECTRIC).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true)
.setDamage(1.5F).setOnBeamImpact(LAMBDA_LIGHTNING_HIT);
energy_tesla_ir = new BulletConfig().setItem(EnumAmmo.CAPACITOR_IR).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4).setupDamageClass(DamageClass.ELECTRIC).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false)
.setDamage(0.8F).setOnBeamImpact(LAMBDA_LIGHTNING_SPLIT);
energy_tesla_ir_sub = new BulletConfig().setItem(EnumAmmo.CAPACITOR_IR).setupDamageClass(DamageClass.ELECTRIC).setBeam().setSpread(0.0F).setLife(3).setWear(3F).setRenderRotations(false).setDoesPenetrate(true)
.setDamage(0.5F).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT);
energy_las = new BulletConfig().setItem(EnumAmmo.CAPACITOR).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4).setupDamageClass(DamageClass.LASER).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT);
energy_las_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4).setupDamageClass(DamageClass.LASER).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT);
@ -142,7 +174,7 @@ public class XFactoryEnergy {
.dura(1_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE)
.rec(new Receiver(0)
.dmg(35F).delay(20).spreadHipfire(1.5F).reload(44).jam(19).sound("hbm:weapon.fire.tesla", 1.0F, 1.0F)
.mag(new MagazineBelt().addConfigs(energy_tesla, energy_tesla_overcharge))
.mag(new MagazineBelt().addConfigs(energy_tesla, energy_tesla_overcharge, energy_tesla_ir))
.offset(0.75, 0, -0.375).offsetScoped(0.75, 0, -0.25)
.setupStandardFire().recoil(LAMBDA_RECOIL_ENERGY))
.setupStandardConfiguration()

View File

@ -42,7 +42,7 @@ public class XFactoryTurret {
bullet.setDead();
});
shell_ap = new BulletConfig().setItem(ModItems.ammo_shell.stackFromEnum(Ammo240Shell.APFSDS_T)).setDamage(2F).setDoesPenetrate(true).setCasing(CASINNG240MM.clone().register("240w"));
shell_du = new BulletConfig().setItem(ModItems.ammo_shell.stackFromEnum(Ammo240Shell.APFSDS_DU)).setDamage(2.5F).setDoesPenetrate(true).setDamageFalloutByPen(false).setCasing(CASINNG240MM.clone().register("240u"));
shell_du = new BulletConfig().setItem(ModItems.ammo_shell.stackFromEnum(Ammo240Shell.APFSDS_DU)).setDamage(2.5F).setDoesPenetrate(true).setDamageFalloffByPen(false).setCasing(CASINNG240MM.clone().register("240u"));
shell_w9 = new BulletConfig().setItem(ModItems.ammo_shell.stackFromEnum(Ammo240Shell.W9)).setDamage(2.5F).setCasing(CASINNG240MM.clone().register("240n")).setOnImpact(XFactoryCatapult.LAMBDA_NUKE_STANDARD);
}
}

View File

@ -8,6 +8,7 @@ import com.hbm.handler.radiation.ChunkRadiationManager;
import com.hbm.util.CompatEnergyControl;
import com.hbm.util.ContaminationUtil;
import api.hbm.redstoneoverradio.IRORValueProvider;
import api.hbm.tile.IInfoProviderEC;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
@ -21,10 +22,10 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
public class TileEntityGeiger extends TileEntity implements SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent {
public class TileEntityGeiger extends TileEntity implements SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IRORValueProvider {
int timer = 0;
int ticker = 0;
float ticker = 0;
@Override
public void updateEntity() {
@ -37,30 +38,23 @@ public class TileEntityGeiger extends TileEntity implements SimpleComponent, IIn
}
if(timer % 5 == 0) {
if(ticker > 0) {
List<Integer> list = new ArrayList<Integer>();
if(ticker < 1)
list.add(0);
if(ticker < 5)
list.add(0);
if(ticker < 10)
list.add(1);
if(ticker > 5 && ticker < 15)
list.add(2);
if(ticker > 10 && ticker < 20)
list.add(3);
if(ticker > 15 && ticker < 25)
list.add(4);
if(ticker > 20 && ticker < 30)
list.add(5);
if(ticker > 25)
list.add(6);
if(ticker < 1) list.add(0);
if(ticker < 5) list.add(0);
if(ticker < 10) list.add(1);
if(ticker > 5 && ticker < 15) list.add(2);
if(ticker > 10 && ticker < 20) list.add(3);
if(ticker > 15 && ticker < 25) list.add(4);
if(ticker > 20 && ticker < 30) list.add(5);
if(ticker > 25) list.add(6);
int r = list.get(worldObj.rand.nextInt(list.size()));
if(r > 0)
worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:item.geiger" + r, 1.0F, 1.0F);
if(r > 0) worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:item.geiger" + r, 1.0F, 1.0F);
} else if(worldObj.rand.nextInt(50) == 0) {
worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:item.geiger"+ (1 + worldObj.rand.nextInt(1)), 1.0F, 1.0F);
}
@ -68,9 +62,8 @@ public class TileEntityGeiger extends TileEntity implements SimpleComponent, IIn
}
public int check() {
int rads = (int)Math.ceil(ChunkRadiationManager.proxy.getRadiation(worldObj, xCoord, yCoord, zCoord));
return rads;
public float check() {
return ChunkRadiationManager.proxy.getRadiation(worldObj, xCoord, yCoord, zCoord);
}
@Override
@Optional.Method(modid = "OpenComputers")
@ -86,7 +79,7 @@ public class TileEntityGeiger extends TileEntity implements SimpleComponent, IIn
@Override
public void provideExtraInfo(NBTTagCompound data) {
int rads = check();
int rads = (int) Math.ceil(ticker);
String chunkPrefix = ContaminationUtil.getPreffixFromRad(rads);
data.setString(CompatEnergyControl.S_CHUNKRAD, chunkPrefix + rads + " RAD/s");
@ -99,8 +92,20 @@ public class TileEntityGeiger extends TileEntity implements SimpleComponent, IIn
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared()
{
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
@Override
public String[] getFunctionInfo() {
return new String[] {
PREFIX_VALUE + "rad",
};
}
@Override
public String provideRORValue(String name) {
if((PREFIX_VALUE + "rad").equals(name)) return "" + (int) Math.ceil(ticker);
return null;
}
}

View File

@ -394,14 +394,10 @@ public class TileEntityBarrel extends TileEntityMachineBase implements SimpleCom
@Optional.Method(modid = "OpenComputers")
public Object[] invoke(String method, Context context, Arguments args) throws Exception {
switch (method) {
case "getFluidStored":
return getFluidStored(context, args);
case "getMaxStored":
return getMaxStored(context, args);
case "getTypeStored":
return getTypeStored(context, args);
case "getInfo":
return getInfo(context, args);
case "getFluidStored": return getFluidStored(context, args);
case "getMaxStored": return getMaxStored(context, args);
case "getTypeStored": return getTypeStored(context, args);
case "getInfo": return getInfo(context, args);
}
throw new NoSuchMethodException();
}

View File

@ -76,6 +76,7 @@ public class PneumaticNetwork extends NodeNet {
int index = nextReceiver % receivers.size();
Entry<IInventory, Pair<ForgeDirection, Long>> chosenReceiverEntry = null;
nextReceiver++;
if(receiveOrder == RECEIVE_ROBIN) chosenReceiverEntry = receiverList.get(index);
if(receiveOrder == RECEIVE_RANDOM) chosenReceiverEntry = receiverList.get(rand.nextInt(receiverList.size()));
@ -93,7 +94,6 @@ public class PneumaticNetwork extends NodeNet {
if(tile1 != null && tile2 != null) {
int sq = (tile1.xCoord - tile2.xCoord) * (tile1.xCoord - tile2.xCoord) + (tile1.yCoord - tile2.yCoord) * (tile1.yCoord - tile2.yCoord) + (tile1.zCoord - tile2.zCoord) * (tile1.zCoord - tile2.zCoord);
if(sq > maxRange * maxRange) {
nextReceiver++;
return false;
}
}
@ -160,7 +160,6 @@ public class PneumaticNetwork extends NodeNet {
// make sure both parties are saved to disk and increment the counter for round robin
if(didSomething) {
nextReceiver++;
source.markDirty();
dest.markDirty();
}

View File

@ -1064,7 +1064,7 @@ item.ammo_standard.bmg50_he.name=.50 BMG Patrone (Explosiv)
item.ammo_standard.bmg50_fmj.name=.50 BMG Patrone (Vollmantelgeschoss)
item.ammo_standard.bmg50_jhp.name=.50 BMG Patrone (Hohlspitz)
item.ammo_standard.bmg50_sp.name=.50 BMG Patrone (Teilmantelgeschoss)
item.ammo_standard.capacitor.name=Kondensator
item.ammo_standard.capacitor.name=Kondensator (Standard)
item.ammo_standard.capacitor_ir.name=Capacitor (niedrige Wellenlänge)
item.ammo_standard.capacitor_overcharge.name=Kondensator (Überladung)
item.ammo_standard.coil_ferrouranium.name=Ferrourankugel

View File

@ -1790,7 +1790,7 @@ item.ammo_standard.bmg50_he.name=.50 BMG Round (High-Explosive)
item.ammo_standard.bmg50_fmj.name=.50 BMG Round (Full Metal Jacket)
item.ammo_standard.bmg50_jhp.name=.50 BMG Round (Jacketed Hollow Point)
item.ammo_standard.bmg50_sp.name=.50 BMG Round (Soft Point)
item.ammo_standard.capacitor.name=Capacitor
item.ammo_standard.capacitor.name=Capacitor (Standard)
item.ammo_standard.capacitor_ir.name=Capacitor (Low Wavelength)
item.ammo_standard.capacitor_overcharge.name=Capacitor (Overcharge)
item.ammo_standard.coil_ferrouranium.name=Coilgun Ferrouranium Ball