Compare commits

..

6 commits

Author SHA1 Message Date
4472b68eca
"Optimized" EntityShockwave
Do less shit per onUpdate(), its good for your tps

Split explosion into a bunch of phases that run every onUpdate, code is
ass but stopped the server from crashing

Will need to do the same to EntityFalloutRain too but that's tomorrows
problem

Also tomorrows problem: make this less ass

Also vim fixed a lot of whitespace things and I dont feel like dealing
with that right now
2021-11-15 02:43:01 -05:00
f351d614d6
gradlew +x 2021-11-15 02:42:04 -05:00
1131b22447
"Fixed" Thermonuclear explosions
Looks like the devs were in the middle of rewriting this class

Thermonukes would cause a crash because setScale tries to set a
dataManager thing that was never registered

Once that bug was fixed the crash stopped happening but the explosion
didnt do much so I readded a lot of commented out code

Works for now, will have to see what the devs were planning to do with
this so I can impliment it right or just steal what they did
2021-11-15 01:05:09 -05:00
43915e43f0
Merge branch 'master' of ssh://play.qtechofficial.com:9940/QTechIndustries/Trinity 2021-11-15 01:03:14 -05:00
f61b166f77
Updated for ICBM dev/1.12-4.0.2
icbm.classic.api.ExplosiveRefs -> icbm.classic.api.refs.ICBMExplosives
2021-11-15 01:01:29 -05:00
4938dbac5c
Added matching license as per https://www.curseforge.com/minecraft/mc-mods/trinity 2021-10-21 19:22:29 -06:00
6 changed files with 177 additions and 101 deletions

13
LICENSE Normal file
View file

@ -0,0 +1,13 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

0
gradlew vendored Normal file → Executable file
View file

View file

@ -52,6 +52,21 @@ public class EntityShockwave extends Entity {
public int revProgress; public int revProgress;
public int radProgress; public int radProgress;
private int iCounter = 0;
private boolean needsInit = true;
private int blastState = 0; // Not started
private int blastCount = 0;
private MutableBlockPos pos;
private MutableBlockPos pos2;
private MutableBlockPos pos3;
private MutableBlockPos pos4;
private MutableBlockPos pos5;
private double dist;
private double circum;
public EntityShockwave(World p_i1582_1_) { public EntityShockwave(World p_i1582_1_) {
super(p_i1582_1_); super(p_i1582_1_);
this.setSize(0, 0); this.setSize(0, 0);
@ -88,15 +103,18 @@ public class EntityShockwave extends Entity {
public void onUpdate() { public void onUpdate() {
if(!world.isRemote) { if(!world.isRemote) {
MutableBlockPos pos = new BlockPos.MutableBlockPos(); if(needsInit) {
MutableBlockPos pos2 = new BlockPos.MutableBlockPos(); pos = new BlockPos.MutableBlockPos();
MutableBlockPos pos3 = new BlockPos.MutableBlockPos(); pos2 = new BlockPos.MutableBlockPos();
MutableBlockPos pos4 = new BlockPos.MutableBlockPos(); pos3 = new BlockPos.MutableBlockPos();
MutableBlockPos pos5 = new BlockPos.MutableBlockPos(); pos4 = new BlockPos.MutableBlockPos();
for(int i = 0; i < 512; i++) { pos5 = new BlockPos.MutableBlockPos();
needsInit = false;
}
if(iCounter < 512*3) {
if(blastState == 0) { // Not started
Vec3 vec = Vec3.createVectorHelper(radProgress * 0.5, 0, 0); Vec3 vec = Vec3.createVectorHelper(radProgress * 0.5, 0, 0);
double circum = radProgress * 2 * Math.PI * 2; circum = radProgress * 2 * Math.PI * 2;
/// ///
if(circum == 0) if(circum == 0)
@ -110,18 +128,41 @@ public class EntityShockwave extends Entity {
int x = (int) (posX + vec.xCoord); int x = (int) (posX + vec.xCoord);
int z = (int) (posZ + vec.zCoord); int z = (int) (posZ + vec.zCoord);
double dist = radProgress * 100 / getScale() * 0.5; dist = radProgress * 100 / getScale() * 0.5;
pos.setPos(x, posY, z); pos.setPos(x, posY, z);
pos2.setPos(x-1, posY, z); pos2.setPos(x-1, posY, z);
pos3.setPos(x+1, posY, z); pos3.setPos(x+1, posY, z);
pos4.setPos(x, posY, z-1); pos4.setPos(x, posY, z-1);
pos5.setPos(x, posY, z-1); pos5.setPos(x, posY, z-1);
blastState = 1;
} else if(blastState == 1) {
switch(blastCount) {
case 0:
blast(pos, dist); blast(pos, dist);
blastCount++;
break;
case 1:
blast(pos2, dist); blast(pos2, dist);
blastCount++;
break;
case 2:
blast(pos3, dist); blast(pos3, dist);
blastCount++;
break;
case 3:
blast(pos4, dist); blast(pos4, dist);
blastCount++;
break;
case 4:
blast(pos5, dist); blast(pos5, dist);
blastCount++;
break;
case 5:
blastState = 2;
blastCount = 0;
break;
}
} else if(blastState == 2) {
revProgress++; revProgress++;
if(revProgress > circum) { if(revProgress > circum) {
@ -132,8 +173,12 @@ public class EntityShockwave extends Entity {
if(radProgress > getScale() * 2D) { if(radProgress > getScale() * 2D) {
this.setDead(); this.setDead();
blastState = 4;
}
blastState = 0;
} }
} }
iCounter++;
} }
} }

View file

@ -2,8 +2,8 @@ package trinity.entities;
import java.util.List; import java.util.List;
//import icbm.classic.api.ExplosiveRefs; import icbm.classic.api.refs.ICBMExplosives;
//import icbm.classic.content.blast.BlastEMP; import icbm.classic.content.blast.BlastEMP;
// import icbm.classic.content.blast.threaded.BlastNuclear; // import icbm.classic.content.blast.threaded.BlastNuclear;
import nc.init.NCBlocks; import nc.init.NCBlocks;
import nc.worldgen.biome.NCBiomes; import nc.worldgen.biome.NCBiomes;
@ -65,6 +65,7 @@ public class EntityThermonuclearBlast extends Entity {
public int age = 0; public int age = 0;
public int destructionRange = 0; public int destructionRange = 0;
public int falloutIntensity = 0;
//public ExplosionBalefire exp; //public ExplosionBalefire exp;
public int speed = 1; public int speed = 1;
public boolean did = false; public boolean did = false;
@ -73,6 +74,7 @@ public class EntityThermonuclearBlast extends Entity {
protected void readEntityFromNBT(NBTTagCompound nbt) { protected void readEntityFromNBT(NBTTagCompound nbt) {
age = nbt.getInteger("age"); age = nbt.getInteger("age");
destructionRange = nbt.getInteger("destructionRange"); destructionRange = nbt.getInteger("destructionRange");
falloutIntensity = nbt.getInteger("falloutIntensity");
speed = nbt.getInteger("speed"); speed = nbt.getInteger("speed");
did = nbt.getBoolean("did"); did = nbt.getBoolean("did");
@ -88,6 +90,7 @@ public class EntityThermonuclearBlast extends Entity {
protected void writeEntityToNBT(NBTTagCompound nbt) { protected void writeEntityToNBT(NBTTagCompound nbt) {
nbt.setInteger("age", age); nbt.setInteger("age", age);
nbt.setInteger("destructionRange", destructionRange); nbt.setInteger("destructionRange", destructionRange);
nbt.setInteger("falloutIntensity", falloutIntensity);
nbt.setInteger("speed", speed); nbt.setInteger("speed", speed);
nbt.setBoolean("did", did); nbt.setBoolean("did", did);
@ -109,20 +112,44 @@ public class EntityThermonuclearBlast extends Entity {
//if(GeneralConfig.enableExtendedLogging && !world.isRemote) //if(GeneralConfig.enableExtendedLogging && !world.isRemote)
// MainRegistry.logger.log(Level.INFO, "[NUKE] Initialized BF explosion at " + posX + " / " + posY + " / " + posZ + " with strength " + destructionRange + "!"); // MainRegistry.logger.log(Level.INFO, "[NUKE] Initialized BF explosion at " + posX + " / " + posY + " / " + posZ + " with strength " + destructionRange + "!");
exp = new ExplosionThermonuclear((int)this.posX, (int)this.posY, (int)this.posZ, this.world, this.destructionRange); exp = new ExplosionThermonuclear((int)this.posX, (int)this.posY, (int)this.posZ, this.world, getScale());
EntityFalloutRain fallout = new EntityFalloutRain(this.world);
fallout.posX = this.posX;
fallout.posY = this.posY;
fallout.posZ = this.posZ;
fallout.setScale((int)(this.getScale() * TrinityConfig.fallout_multiplier));
fallout.setThermonuclear(true);
fallout.setIntensity(this.getIntensity());
this.world.spawnEntity(fallout);
EntityShockwave shock = new EntityShockwave(this.world);
shock.posX = this.posX;
shock.posY = this.posY;
shock.posZ = this.posZ;
shock.setScale(this.getScale() * 2);
this.world.spawnEntity(shock);
if(Trinity.ICBMLoaded)
{
new BlastEMP().setBlastWorld(this.world).setBlastSource(this).setBlastPosition(this.posX, this.posY, this.posZ)
.setBlastSize(getScale()*2)
.setExplosiveData(ICBMExplosives.EMP)
.buildBlast().runBlast();
}
this.did = true; this.did = true;
} }
speed += 1; //increase speed to keep up with expansion speed += 1; //increase speed to keep up with expansion
boolean flag = false; boolean shouldDie = false;
for(int i = 0; i < this.speed; i++) for(int i = 0; i < this.speed; i++)
{ {
flag = exp.update(); shouldDie = exp.update();
if(flag) { if(shouldDie) {
this.setDead(); this.setDead();
} }
} }
@ -130,7 +157,7 @@ public class EntityThermonuclearBlast extends Entity {
if(rand.nextInt(5) == 0) if(rand.nextInt(5) == 0)
this.world.playSound(null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.AMBIENT, 10000.0F, 0.8F + this.rand.nextFloat() * 0.2F); this.world.playSound(null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.AMBIENT, 10000.0F, 0.8F + this.rand.nextFloat() * 0.2F);
if(!flag) if(!shouldDie)
{ {
this.world.playSound(null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_LIGHTNING_THUNDER, SoundCategory.AMBIENT, 10000.0F, 0.8F + this.rand.nextFloat() * 0.2F); this.world.playSound(null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_LIGHTNING_THUNDER, SoundCategory.AMBIENT, 10000.0F, 0.8F + this.rand.nextFloat() * 0.2F);
ExplosionNukeGeneric.dealDamage(this.world, (int)this.posX, (int)this.posY, (int)this.posZ, this.destructionRange * 2); ExplosionNukeGeneric.dealDamage(this.world, (int)this.posX, (int)this.posY, (int)this.posZ, this.destructionRange * 2);
@ -338,32 +365,23 @@ public class EntityThermonuclearBlast extends Entity {
} }
*/ */
public void setIntensity(int i) { public void setIntensity(int i) {
this.falloutIntensity = i;
this.dataManager.set(INTENSITY, Integer.valueOf(i));
} }
public int getIntensity() { public int getIntensity() {
int intensity = this.dataManager.get(INTENSITY); int intensity = this.falloutIntensity;
return intensity == 0 ? 1 : intensity; return intensity == 0 ? 1 : intensity;
} }
public void setScale(int i) { public void setScale(int i) {
this.destructionRange = i;
this.dataManager.set(SCALE, Integer.valueOf(i));
/*if(Trinity.ICBMLoaded)
{
new BlastEMP().setBlastWorld(this.world).setBlastSource(this).setBlastPosition(this.posX, this.posY, this.posZ)
.setBlastSize(i*2)
.setExplosiveData(ExplosiveRefs.EMP)
.buildBlast().runBlast();
}*/
} }
public int getScale() { public int getScale() {
int scale = this.dataManager.get(SCALE); int scale = this.destructionRange;
return scale == 0 ? 1 : scale; return scale == 0 ? 1 : scale;
} }

View file

@ -4,7 +4,7 @@ package trinity.init;
import java.util.List; import java.util.List;
import icbm.classic.api.EnumTier; import icbm.classic.api.EnumTier;
import icbm.classic.api.ExplosiveRefs; import icbm.classic.api.refs.ICBMExplosives;
import icbm.classic.content.blast.BlastEMP; import icbm.classic.content.blast.BlastEMP;
import icbm.classic.content.blast.threaded.BlastAntimatter; import icbm.classic.content.blast.threaded.BlastAntimatter;
import icbm.classic.content.blast.threaded.BlastNuclear; import icbm.classic.content.blast.threaded.BlastNuclear;
@ -41,7 +41,7 @@ public class ICBMEvents {
Item item = stack.getItem(); Item item = stack.getItem();
if(item instanceof ItemBlockExplosive || item instanceof ItemMissile) if(item instanceof ItemBlockExplosive || item instanceof ItemMissile)
{ {
if(stack.getItemDamage() == ExplosiveRefs.NUCLEAR.getRegistryID()) if(stack.getItemDamage() == ICBMExplosives.NUCLEAR.getRegistryID())
{ {
addNukeTooltip(event.getToolTip(), stack); addNukeTooltip(event.getToolTip(), stack);
} }
@ -76,7 +76,7 @@ public class ICBMEvents {
// world.setBlockToAir(pos); // world.setBlockToAir(pos);
new BlastEMP().setBlastWorld(event.getWorld()).setBlastSource(exp.getExplosivePlacedBy()).setBlastPosition(((BlastNuclear) exp).location.x(), ((BlastNuclear) exp).location.y(), ((BlastNuclear) exp).location.z()) new BlastEMP().setBlastWorld(event.getWorld()).setBlastSource(exp.getExplosivePlacedBy()).setBlastPosition(((BlastNuclear) exp).location.x(), ((BlastNuclear) exp).location.y(), ((BlastNuclear) exp).location.z())
.setBlastSize(((BlastNuclear) exp).getBlastRadius()*2) .setBlastSize(((BlastNuclear) exp).getBlastRadius()*2)
.setExplosiveData(ExplosiveRefs.EMP) .setExplosiveData(ICBMExplosives.EMP)
.buildBlast().runBlast(); .buildBlast().runBlast();
ExplosionNukeGeneric.irradiate(world, (int)position.x, (int)position.y, (int)position.z, Math.min(TrinityConfig.icbm_radius,TrinityConfig.max_radius)*2); ExplosionNukeGeneric.irradiate(world, (int)position.x, (int)position.y, (int)position.z, Math.min(TrinityConfig.icbm_radius,TrinityConfig.max_radius)*2);
world.spawnEntity(EntityNuclearExplosion.statFac(world, Math.min(TrinityConfig.icbm_radius,TrinityConfig.max_radius), position.x, position.y, position.z)); world.spawnEntity(EntityNuclearExplosion.statFac(world, Math.min(TrinityConfig.icbm_radius,TrinityConfig.max_radius), position.x, position.y, position.z));
@ -98,7 +98,7 @@ public class ICBMEvents {
world.spawnEntity(EntityNuclearExplosion.statFacAntimatter(world, Math.min(TrinityConfig.antimatter_radius,TrinityConfig.max_radius), position.x, position.y, position.z)); world.spawnEntity(EntityNuclearExplosion.statFacAntimatter(world, Math.min(TrinityConfig.antimatter_radius,TrinityConfig.max_radius), position.x, position.y, position.z));
new BlastEMP().setBlastWorld(event.getWorld()).setBlastSource(exp.getExplosivePlacedBy()).setBlastPosition(((BlastNuclear) exp).location.x(), ((BlastNuclear) exp).location.y(), ((BlastNuclear) exp).location.z()) new BlastEMP().setBlastWorld(event.getWorld()).setBlastSource(exp.getExplosivePlacedBy()).setBlastPosition(((BlastNuclear) exp).location.x(), ((BlastNuclear) exp).location.y(), ((BlastNuclear) exp).location.z())
.setBlastSize(((BlastNuclear) exp).getBlastRadius()*2) .setBlastSize(((BlastNuclear) exp).getBlastRadius()*2)
.setExplosiveData(ExplosiveRefs.EMP) .setExplosiveData(ICBMExplosives.EMP)
.buildBlast().runBlast(); .buildBlast().runBlast();
//System.out.println("If you are seeing this line, this means your blast detector is at least partially working."); //System.out.println("If you are seeing this line, this means your blast detector is at least partially working.");
} }

View file

@ -6,7 +6,7 @@ import java.util.List;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
//import icbm.classic.api.EnumTier; //import icbm.classic.api.EnumTier;
//import icbm.classic.api.ExplosiveRefs; //import icbm.classic.api.refs.ICBMExplosives;
//import icbm.classic.content.blast.BlastEMP; //import icbm.classic.content.blast.BlastEMP;
//import icbm.classic.content.blast.threaded.BlastAntimatter; //import icbm.classic.content.blast.threaded.BlastAntimatter;
//import icbm.classic.content.blast.threaded.BlastNuclear; //import icbm.classic.content.blast.threaded.BlastNuclear;
@ -189,7 +189,7 @@ public class ModEvents {
Item item = stack.getItem(); Item item = stack.getItem();
if(item instanceof ItemBlockExplosive || item instanceof ItemMissile) if(item instanceof ItemBlockExplosive || item instanceof ItemMissile)
{ {
if(stack.getItemDamage() == ExplosiveRefs.NUCLEAR.getRegistryID()) if(stack.getItemDamage() == ICBMExplosives.NUCLEAR.getRegistryID())
{ {
addNukeTooltip(event.getToolTip(), stack); addNukeTooltip(event.getToolTip(), stack);
} }
@ -223,7 +223,7 @@ public class ModEvents {
// exp.world.setBlockToAir(pos); // exp.world.setBlockToAir(pos);
new BlastEMP().setBlastWorld(event.getWorld()).setBlastSource(exp.exploder).setBlastPosition(((BlastNuclear) exp).location.x(), ((BlastNuclear) exp).location.y(), ((BlastNuclear) exp).location.z()) new BlastEMP().setBlastWorld(event.getWorld()).setBlastSource(exp.exploder).setBlastPosition(((BlastNuclear) exp).location.x(), ((BlastNuclear) exp).location.y(), ((BlastNuclear) exp).location.z())
.setBlastSize(((BlastNuclear) exp).getBlastRadius()*2) .setBlastSize(((BlastNuclear) exp).getBlastRadius()*2)
.setExplosiveData(ExplosiveRefs.EMP) .setExplosiveData(ICBMExplosives.EMP)
.buildBlast().runBlast(); .buildBlast().runBlast();
ExplosionNukeGeneric.irradiate(exp.world, (int)exp.x, (int)exp.y, (int)exp.z, Math.min(TrinityConfig.icbm_radius,TrinityConfig.max_radius)*2); ExplosionNukeGeneric.irradiate(exp.world, (int)exp.x, (int)exp.y, (int)exp.z, Math.min(TrinityConfig.icbm_radius,TrinityConfig.max_radius)*2);
exp.world.spawnEntity(EntityNuclearExplosion.statFac(exp.world, Math.min(TrinityConfig.icbm_radius,TrinityConfig.max_radius), exp.x + 0.0, exp.y + 0.0, exp.z + 0.0)); exp.world.spawnEntity(EntityNuclearExplosion.statFac(exp.world, Math.min(TrinityConfig.icbm_radius,TrinityConfig.max_radius), exp.x + 0.0, exp.y + 0.0, exp.z + 0.0));
@ -245,7 +245,7 @@ public class ModEvents {
exp.world.spawnEntity(EntityNuclearExplosion.statFacAntimatter(exp.world, Math.min(TrinityConfig.antimatter_radius,TrinityConfig.max_radius), exp.x + 0.0, exp.y + 0.0, exp.z + 0.0)); exp.world.spawnEntity(EntityNuclearExplosion.statFacAntimatter(exp.world, Math.min(TrinityConfig.antimatter_radius,TrinityConfig.max_radius), exp.x + 0.0, exp.y + 0.0, exp.z + 0.0));
new BlastEMP().setBlastWorld(event.getWorld()).setBlastSource(exp.exploder).setBlastPosition(((BlastNuclear) exp).location.x(), ((BlastNuclear) exp).location.y(), ((BlastNuclear) exp).location.z()) new BlastEMP().setBlastWorld(event.getWorld()).setBlastSource(exp.exploder).setBlastPosition(((BlastNuclear) exp).location.x(), ((BlastNuclear) exp).location.y(), ((BlastNuclear) exp).location.z())
.setBlastSize(((BlastNuclear) exp).getBlastRadius()*2) .setBlastSize(((BlastNuclear) exp).getBlastRadius()*2)
.setExplosiveData(ExplosiveRefs.EMP) .setExplosiveData(ICBMExplosives.EMP)
.buildBlast().runBlast(); .buildBlast().runBlast();
//System.out.println("If you are seeing this line, this means your blast detector is at least partially working."); //System.out.println("If you are seeing this line, this means your blast detector is at least partially working.");
//} //}