Fixed player mining vanilla block

This commit is contained in:
Felix Cravic 2020-05-28 19:29:29 +02:00
parent 5e91b75d78
commit dfd7ca84a4
3 changed files with 16 additions and 16 deletions

View File

@ -1609,11 +1609,18 @@ public class Player extends LivingEntity {
} }
public void resetTargetBlock() { public void resetTargetBlock() {
if (targetBlockPosition != null) if (targetBlockPosition != null) {
sendBlockBreakAnimation(targetBlockPosition, (byte) -1); // Clear the break animation sendBlockBreakAnimation(targetBlockPosition, (byte) -1); // Clear the break animation
this.targetCustomBlock = null; this.targetCustomBlock = null;
this.targetBlockPosition = null; this.targetBlockPosition = null;
this.targetBlockTime = 0; this.targetBlockTime = 0;
// Remove effect
RemoveEntityEffectPacket removeEntityEffectPacket = new RemoveEntityEffectPacket();
removeEntityEffectPacket.entityId = getEntityId();
removeEntityEffectPacket.effectId = 4;
getPlayerConnection().sendPacket(removeEntityEffectPacket);
}
} }
public void refreshAddBossbar(BossBar bossBar) { public void refreshAddBossbar(BossBar bossBar) {

View File

@ -206,6 +206,8 @@ public class InstanceContainer extends Instance {
@Override @Override
public boolean breakBlock(Player player, BlockPosition blockPosition) { public boolean breakBlock(Player player, BlockPosition blockPosition) {
player.resetTargetBlock();
Chunk chunk = getChunkAt(blockPosition); Chunk chunk = getChunkAt(blockPosition);
int x = blockPosition.getX(); int x = blockPosition.getX();
@ -226,7 +228,6 @@ public class InstanceContainer extends Instance {
player.callEvent(PlayerBlockBreakEvent.class, blockBreakEvent); player.callEvent(PlayerBlockBreakEvent.class, blockBreakEvent);
boolean result = !blockBreakEvent.isCancelled(); boolean result = !blockBreakEvent.isCancelled();
if (result) { if (result) {
// Break or change the broken block based on event result // Break or change the broken block based on event result
setSeparateBlocks(x, y, z, blockBreakEvent.getResultBlockId(), blockBreakEvent.getResultCustomBlockId()); setSeparateBlocks(x, y, z, blockBreakEvent.getResultBlockId(), blockBreakEvent.getResultCustomBlockId());
@ -239,7 +240,7 @@ public class InstanceContainer extends Instance {
chunk.getViewers().forEach(p -> { chunk.getViewers().forEach(p -> {
// The player who breaks the block already get particles client-side // The player who breaks the block already get particles client-side
if (!(p.equals(player) && player.isCreative())) { if (customBlock == null || !(p.equals(player) && player.isCreative())) {
p.getPlayerConnection().sendPacket(particlePacket); p.getPlayerConnection().sendPacket(particlePacket);
} }
}); });

View File

@ -13,7 +13,6 @@ import net.minestom.server.item.StackingRule;
import net.minestom.server.network.packet.client.play.ClientPlayerDiggingPacket; import net.minestom.server.network.packet.client.play.ClientPlayerDiggingPacket;
import net.minestom.server.network.packet.server.play.AcknowledgePlayerDiggingPacket; import net.minestom.server.network.packet.server.play.AcknowledgePlayerDiggingPacket;
import net.minestom.server.network.packet.server.play.EntityEffectPacket; import net.minestom.server.network.packet.server.play.EntityEffectPacket;
import net.minestom.server.network.packet.server.play.RemoveEntityEffectPacket;
import net.minestom.server.utils.BlockPosition; import net.minestom.server.utils.BlockPosition;
public class PlayerDiggingListener { public class PlayerDiggingListener {
@ -95,7 +94,7 @@ public class PlayerDiggingListener {
// Unverified block break, client is fully responsive // Unverified block break, client is fully responsive
instance.breakBlock(player, blockPosition); instance.breakBlock(player, blockPosition);
sendAcknowledgePacket(player, blockPosition, blockId, sendAcknowledgePacket(player, blockPosition, 0,
ClientPlayerDiggingPacket.Status.FINISHED_DIGGING, true); ClientPlayerDiggingPacket.Status.FINISHED_DIGGING, true);
break; break;
case DROP_ITEM_STACK: case DROP_ITEM_STACK:
@ -157,14 +156,7 @@ public class PlayerDiggingListener {
} }
private static void removeEffect(Player player) { private static void removeEffect(Player player) {
if (player.getCustomBlockTarget() != null) {
player.resetTargetBlock(); player.resetTargetBlock();
RemoveEntityEffectPacket removeEntityEffectPacket = new RemoveEntityEffectPacket();
removeEntityEffectPacket.entityId = player.getEntityId();
removeEntityEffectPacket.effectId = 4;
player.getPlayerConnection().sendPacket(removeEntityEffectPacket);
}
} }
private static void sendAcknowledgePacket(Player player, BlockPosition blockPosition, int blockId, private static void sendAcknowledgePacket(Player player, BlockPosition blockPosition, int blockId,