"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
This commit is contained in:
Thomas Muller 2021-11-15 02:43:01 -05:00
parent f351d614d6
commit 4472b68eca
Signed by: thomas
GPG key ID: AF006EB730564952

View file

@ -52,6 +52,21 @@ public class EntityShockwave extends Entity {
public int revProgress;
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_) {
super(p_i1582_1_);
this.setSize(0, 0);
@ -88,52 +103,82 @@ public class EntityShockwave extends Entity {
public void onUpdate() {
if(!world.isRemote) {
MutableBlockPos pos = new BlockPos.MutableBlockPos();
MutableBlockPos pos2 = new BlockPos.MutableBlockPos();
MutableBlockPos pos3 = new BlockPos.MutableBlockPos();
MutableBlockPos pos4 = new BlockPos.MutableBlockPos();
MutableBlockPos pos5 = new BlockPos.MutableBlockPos();
for(int i = 0; i < 512; i++) {
if(needsInit) {
pos = new BlockPos.MutableBlockPos();
pos2 = new BlockPos.MutableBlockPos();
pos3 = new BlockPos.MutableBlockPos();
pos4 = new BlockPos.MutableBlockPos();
pos5 = new BlockPos.MutableBlockPos();
needsInit = false;
}
if(iCounter < 512*3) {
if(blastState == 0) { // Not started
Vec3 vec = Vec3.createVectorHelper(radProgress * 0.5, 0, 0);
circum = radProgress * 2 * Math.PI * 2;
Vec3 vec = Vec3.createVectorHelper(radProgress * 0.5, 0, 0);
double circum = radProgress * 2 * Math.PI * 2;
///
if(circum == 0)
circum = 1;
///
///
if(circum == 0)
circum = 1;
///
double part = 360D / circum;
double part = 360D / circum;
vec.rotateAroundY((float) (part * revProgress));
vec.rotateAroundY((float) (part * revProgress));
int x = (int) (posX + vec.xCoord);
int z = (int) (posZ + vec.zCoord);
int x = (int) (posX + vec.xCoord);
int z = (int) (posZ + vec.zCoord);
dist = radProgress * 100 / getScale() * 0.5;
pos.setPos(x, posY, z);
pos2.setPos(x-1, posY, z);
pos3.setPos(x+1, posY, z);
pos4.setPos(x, posY, z-1);
pos5.setPos(x, posY, z-1);
blastState = 1;
} else if(blastState == 1) {
switch(blastCount) {
case 0:
blast(pos, dist);
blastCount++;
break;
case 1:
blast(pos2, dist);
blastCount++;
break;
case 2:
blast(pos3, dist);
blastCount++;
break;
case 3:
blast(pos4, dist);
blastCount++;
break;
case 4:
blast(pos5, dist);
blastCount++;
break;
case 5:
blastState = 2;
blastCount = 0;
break;
}
} else if(blastState == 2) {
revProgress++;
double dist = radProgress * 100 / getScale() * 0.5;
pos.setPos(x, posY, z);
pos2.setPos(x-1, posY, z);
pos3.setPos(x+1, posY, z);
pos4.setPos(x, posY, z-1);
pos5.setPos(x, posY, z-1);
blast(pos, dist);
blast(pos2, dist);
blast(pos3, dist);
blast(pos4, dist);
blast(pos5, dist);
if(revProgress > circum) {
revProgress = 0;
radProgress++;
}
revProgress++;
if(radProgress > getScale() * 2D) {
if(revProgress > circum) {
revProgress = 0;
radProgress++;
}
if(radProgress > getScale() * 2D) {
this.setDead();
}
this.setDead();
blastState = 4;
}
blastState = 0;
}
}
iCounter++;
}
}