This reverts commit 5005268df4.
This commit is contained in:
1 parent
49dff77ebe
commit
2f7433ecb1
1 file changed
+27
-34
@@ -5,7 +5,6 @@ import java.math.RoundingMode;
|
|||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import carpet.logging.logHelpers.ExplosionLogHelper;
|
import carpet.logging.logHelpers.ExplosionLogHelper;
|
||||||
@@ -13,6 +12,7 @@ import carpet.mixins.ExplosionAccessor;
|
|||||||
import carpet.CarpetSettings;
|
import carpet.CarpetSettings;
|
||||||
import carpet.utils.Messenger;
|
import carpet.utils.Messenger;
|
||||||
import it.unimi.dsi.fastutil.objects.Object2DoubleOpenHashMap;
|
import it.unimi.dsi.fastutil.objects.Object2DoubleOpenHashMap;
|
||||||
|
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
|
||||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||||
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
|
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
@@ -58,8 +58,8 @@ public class OptimizedExplosion
|
|||||||
// masa's optimizations
|
// masa's optimizations
|
||||||
private static Object2DoubleOpenHashMap<Pair<Vec3d, Box>> densityCache = new Object2DoubleOpenHashMap<>();
|
private static Object2DoubleOpenHashMap<Pair<Vec3d, Box>> densityCache = new Object2DoubleOpenHashMap<>();
|
||||||
private static MutablePair<Vec3d, Box> pairMutable = new MutablePair<>();
|
private static MutablePair<Vec3d, Box> pairMutable = new MutablePair<>();
|
||||||
private static HashMap<BlockPos.Mutable, Float> blastResCache = new HashMap<>();
|
private static Object2ObjectOpenHashMap<BlockPos, BlockState> stateCache = new Object2ObjectOpenHashMap<>();
|
||||||
private static HashMap<BlockPos.Mutable, BlockState> blockStateCache = new HashMap<>();
|
private static Object2ObjectOpenHashMap<BlockPos, FluidState> fluidCache = new Object2ObjectOpenHashMap<>();
|
||||||
private static BlockPos.Mutable posMutable = new BlockPos.Mutable(0, 0, 0);
|
private static BlockPos.Mutable posMutable = new BlockPos.Mutable(0, 0, 0);
|
||||||
private static ObjectOpenHashSet<BlockPos> affectedBlockPositionsSet = new ObjectOpenHashSet<>();
|
private static ObjectOpenHashSet<BlockPos> affectedBlockPositionsSet = new ObjectOpenHashSet<>();
|
||||||
private static boolean firstRay;
|
private static boolean firstRay;
|
||||||
@@ -86,8 +86,8 @@ public class OptimizedExplosion
|
|||||||
getAffectedPositionsOnPlaneX(e, 15, 1, 14, 0, 15); // east
|
getAffectedPositionsOnPlaneX(e, 15, 1, 14, 0, 15); // east
|
||||||
getAffectedPositionsOnPlaneZ(e, 0, 1, 14, 1, 14); // north
|
getAffectedPositionsOnPlaneZ(e, 0, 1, 14, 1, 14); // north
|
||||||
getAffectedPositionsOnPlaneZ(e, 15, 1, 14, 1, 14); // south
|
getAffectedPositionsOnPlaneZ(e, 15, 1, 14, 1, 14); // south
|
||||||
blastResCache.clear();
|
stateCache.clear();
|
||||||
blockStateCache.clear();
|
fluidCache.clear();
|
||||||
|
|
||||||
e.getAffectedBlocks().addAll(affectedBlockPositionsSet);
|
e.getAffectedBlocks().addAll(affectedBlockPositionsSet);
|
||||||
affectedBlockPositionsSet.clear();
|
affectedBlockPositionsSet.clear();
|
||||||
@@ -446,7 +446,6 @@ public class OptimizedExplosion
|
|||||||
double xInc = (xRel / len) * 0.3;
|
double xInc = (xRel / len) * 0.3;
|
||||||
double yInc = (yRel / len) * 0.3;
|
double yInc = (yRel / len) * 0.3;
|
||||||
double zInc = (zRel / len) * 0.3;
|
double zInc = (zRel / len) * 0.3;
|
||||||
World world = eAccess.getWorld();
|
|
||||||
float rand = eAccess.getWorld().random.nextFloat();
|
float rand = eAccess.getWorld().random.nextFloat();
|
||||||
float sizeRand = (CarpetSettings.tntRandomRange >= 0 ? (float) CarpetSettings.tntRandomRange : rand);
|
float sizeRand = (CarpetSettings.tntRandomRange >= 0 ? (float) CarpetSettings.tntRandomRange : rand);
|
||||||
float size = eAccess.getPower() * (0.7F + sizeRand * 0.6F);
|
float size = eAccess.getPower() * (0.7F + sizeRand * 0.6F);
|
||||||
@@ -458,44 +457,38 @@ public class OptimizedExplosion
|
|||||||
{
|
{
|
||||||
posMutable.set(posX, posY, posZ);
|
posMutable.set(posX, posY, posZ);
|
||||||
|
|
||||||
|
// Don't query already cached positions again from the world
|
||||||
|
BlockState state = stateCache.get(posMutable);
|
||||||
|
FluidState fluid = fluidCache.get(posMutable);
|
||||||
BlockPos posImmutable = null;
|
BlockPos posImmutable = null;
|
||||||
|
|
||||||
// Don't query already cached positions again from the world
|
if (state == null)
|
||||||
if (!blastResCache.containsKey(posMutable))
|
|
||||||
{
|
{
|
||||||
posImmutable = posMutable.toImmutable();
|
posImmutable = posMutable.toImmutable();
|
||||||
BlockState state = world.getBlockState(posImmutable);
|
state = eAccess.getWorld().getBlockState(posImmutable);
|
||||||
Float resistance = null;
|
stateCache.put(posImmutable, state);
|
||||||
if (!state.isAir())
|
fluid = eAccess.getWorld().getFluidState(posImmutable);
|
||||||
{
|
fluidCache.put(posImmutable, fluid);
|
||||||
FluidState fluid = world.getFluidState(posImmutable);
|
|
||||||
resistance = Math.max(state.getBlock().getBlastResistance(), fluid.getBlastResistance());
|
|
||||||
if (eAccess.getEntity() != null)
|
|
||||||
{
|
|
||||||
resistance = eAccess.getEntity().getEffectiveExplosionResistance(e, world, posMutable, state, fluid, resistance);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
blockStateCache.put(posMutable, state);
|
|
||||||
blastResCache.put(posMutable, resistance);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Float blastRes = blastResCache.get(posMutable);
|
if (state.getMaterial() != Material.AIR)
|
||||||
BlockState state = blockStateCache.get(posMutable);
|
|
||||||
|
|
||||||
if(blastRes != null)
|
|
||||||
{
|
{
|
||||||
size -= (blastRes + 0.3F) * 0.3F;
|
float resistance = Math.max(state.getBlock().getBlastResistance(), fluid.getBlastResistance());
|
||||||
if (size > 0.0F)
|
|
||||||
|
if (eAccess.getEntity() != null)
|
||||||
{
|
{
|
||||||
if ((eAccess.getEntity() == null || eAccess.getEntity().canExplosionDestroyBlock(e, eAccess.getWorld(), posMutable, state, size)))
|
resistance = eAccess.getEntity().getEffectiveExplosionResistance(e, eAccess.getWorld(), posMutable, state, fluid, resistance);
|
||||||
{
|
|
||||||
affectedBlockPositionsSet.add(posImmutable != null ? posImmutable : posMutable.toImmutable());
|
|
||||||
blastResCache.put(posMutable, null);
|
|
||||||
blockStateCache.remove(posMutable);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size -= (resistance + 0.3F) * 0.3F;
|
||||||
}
|
}
|
||||||
if (firstRay)
|
|
||||||
|
if (size > 0.0F)
|
||||||
|
{
|
||||||
|
if ((eAccess.getEntity() == null || eAccess.getEntity().canExplosionDestroyBlock(e, eAccess.getWorld(), posMutable, state, size)))
|
||||||
|
affectedBlockPositionsSet.add(posImmutable != null ? posImmutable : posMutable.toImmutable());
|
||||||
|
}
|
||||||
|
else if (firstRay)
|
||||||
{
|
{
|
||||||
rayCalcDone = true;
|
rayCalcDone = true;
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in new issue
Block a user