Damage to blocks when stomping now depends on the hardness of that block

This commit is contained in:
Sollace 2021-01-27 17:16:15 +02:00
parent 872bdb44f2
commit 1222bd6831
2 changed files with 14 additions and 3 deletions

View file

@ -41,6 +41,9 @@ public class BlockDestructionManager {
} }
public int damageBlock(BlockPos pos, int amount) { public int damageBlock(BlockPos pos, int amount) {
if (amount == 0) {
return getBlockDestruction(pos);
}
amount = Math.max(getBlockDestruction(pos), 0) + amount; amount = Math.max(getBlockDestruction(pos), 0) + amount;
setBlockDestruction(pos, amount); setBlockDestruction(pos, amount);
return amount; return amount;

View file

@ -23,6 +23,7 @@ import net.minecraft.particle.ParticleTypes;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box; import net.minecraft.util.math.Box;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -132,7 +133,14 @@ public class EarthPonyStompAbility implements Ability<Hit> {
BlockDestructionManager destr = ((BlockDestructionManager.Source)w).getDestructionManager(); BlockDestructionManager destr = ((BlockDestructionManager.Source)w).getDestructionManager();
if (!state.isAir() && w.getBlockState(pos.up()).isAir()) { if (!state.isAir() && w.getBlockState(pos.up()).isAir()) {
if (destr.damageBlock(pos, (int)((1 - dist / rad) * 9)) >= BlockDestructionManager.MAX_DAMAGE) {
double amount = (1 - dist / rad) * 9;
float hardness = state.getHardness(w, pos);
float scaledHardness = (1 - hardness / 70);
int damage = hardness < 0 ? 0 : MathHelper.clamp((int)(amount * scaledHardness), 2, 9);
if (destr.damageBlock(pos, damage) >= BlockDestructionManager.MAX_DAMAGE) {
w.breakBlock(pos, true); w.breakBlock(pos, true);
} else { } else {
WorldEvent.play(WorldEvent.DESTROY_BLOCK, w, pos, state); WorldEvent.play(WorldEvent.DESTROY_BLOCK, w, pos, state);
@ -155,7 +163,7 @@ public class EarthPonyStompAbility implements Ability<Hit> {
} }
private void spawnParticleRing(PlayerEntity player, int timeDiff, double yVel) { private void spawnParticleRing(PlayerEntity player, int timeDiff, double yVel) {
int animationTicks = timeDiff / 10; int animationTicks = timeDiff / 7;
if (animationTicks < 6) { if (animationTicks < 6) {
Shape shape = new Sphere(true, animationTicks, 1, 0, 1); Shape shape = new Sphere(true, animationTicks, 1, 0, 1);
@ -167,7 +175,7 @@ public class EarthPonyStompAbility implements Ability<Hit> {
Vec3d point = shape.computePoint(player.getEntityWorld().random).add(player.getPos()); Vec3d point = shape.computePoint(player.getEntityWorld().random).add(player.getPos());
player.world.addParticle(new BlockStateParticleEffect(ParticleTypes.BLOCK, Blocks.DIRT.getDefaultState()), player.world.addParticle(new BlockStateParticleEffect(ParticleTypes.BLOCK, Blocks.DIRT.getDefaultState()),
point.x, point.x,
point.y + y, point.y,
point.z, point.z,
0, yVel, 0 0, yVel, 0
); );