44 lines
1.1 KiB
Java
44 lines
1.1 KiB
Java
package net.minecraft.world.level;
|
|
|
|
import com.google.common.collect.Lists;
|
|
import java.util.List;
|
|
import net.minecraft.core.BlockPos;
|
|
|
|
public class PotentialCalculator {
|
|
private final List<PotentialCalculator.PointCharge> charges = Lists.<PotentialCalculator.PointCharge>newArrayList();
|
|
|
|
public void addCharge(BlockPos pos, double charge) {
|
|
if (charge != 0.0) {
|
|
this.charges.add(new PotentialCalculator.PointCharge(pos, charge));
|
|
}
|
|
}
|
|
|
|
public double getPotentialEnergyChange(BlockPos pos, double charge) {
|
|
if (charge == 0.0) {
|
|
return 0.0;
|
|
} else {
|
|
double d = 0.0;
|
|
|
|
for (PotentialCalculator.PointCharge pointCharge : this.charges) {
|
|
d += pointCharge.getPotentialChange(pos);
|
|
}
|
|
|
|
return d * charge;
|
|
}
|
|
}
|
|
|
|
static class PointCharge {
|
|
private final BlockPos pos;
|
|
private final double charge;
|
|
|
|
public PointCharge(BlockPos pos, double charge) {
|
|
this.pos = pos;
|
|
this.charge = charge;
|
|
}
|
|
|
|
public double getPotentialChange(BlockPos pos) {
|
|
double d = this.pos.distSqr(pos);
|
|
return d == 0.0 ? Double.POSITIVE_INFINITY : this.charge / Math.sqrt(d);
|
|
}
|
|
}
|
|
}
|