Skip to content

Commit bc3d6b9

Browse files
committed
Resend damageable item on cancelled block break in 1.11->1.10
The client assumes durability changes, so we have to resend the item
1 parent b53c0ae commit bc3d6b9

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

bukkit/src/main/java/com/viaversion/viabackwards/BukkitPlugin.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package com.viaversion.viabackwards;
2020

2121
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
22+
import com.viaversion.viabackwards.listener.BlockBreakListener;
2223
import com.viaversion.viabackwards.listener.FireDamageListener;
2324
import com.viaversion.viabackwards.listener.FireExtinguishListener;
2425
import com.viaversion.viabackwards.listener.LecternInteractListener;
@@ -61,6 +62,9 @@ private void enable() {
6162
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_12)) {
6263
new FireDamageListener(this).register();
6364
}
65+
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_11)) {
66+
new BlockBreakListener(this).register();
67+
}
6468

6569
final ViaProviders providers = Via.getManager().getProviders();
6670
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_20_2)) {
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
3+
* Copyright (C) 2016-2024 ViaVersion and contributors
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package com.viaversion.viabackwards.listener;
19+
20+
import com.viaversion.viabackwards.BukkitPlugin;
21+
import com.viaversion.viabackwards.protocol.v1_11to1_10.Protocol1_11To1_10;
22+
import com.viaversion.viaversion.bukkit.listeners.ViaBukkitListener;
23+
import org.bukkit.GameMode;
24+
import org.bukkit.entity.Player;
25+
import org.bukkit.event.EventHandler;
26+
import org.bukkit.event.EventPriority;
27+
import org.bukkit.event.block.BlockBreakEvent;
28+
import org.bukkit.inventory.ItemStack;
29+
30+
public class BlockBreakListener extends ViaBukkitListener {
31+
32+
public BlockBreakListener(final BukkitPlugin plugin) {
33+
super(plugin, Protocol1_11To1_10.class);
34+
}
35+
36+
@EventHandler(priority = EventPriority.MONITOR)
37+
public void onBlockBreak(final BlockBreakEvent event) {
38+
if (!event.isCancelled()) {
39+
return;
40+
}
41+
42+
final Player player = event.getPlayer();
43+
if (player.getGameMode() == GameMode.CREATIVE || !isOnPipe(player)) {
44+
return;
45+
}
46+
47+
// Resend the item in the hand to sync durability
48+
final int slot = player.getInventory().getHeldItemSlot();
49+
final ItemStack item = player.getInventory().getItem(slot);
50+
if (item != null && item.getType().getMaxDurability() > 0) {
51+
player.getInventory().setItem(slot, item);
52+
}
53+
}
54+
}

bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerItemDropListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void onItemDrop(final PlayerDropItemEvent event) {
4040
return;
4141
}
4242

43-
// Resent the item in the hand
43+
// Resend the item in the hand
4444
final int slot = player.getInventory().getHeldItemSlot();
4545
final ItemStack item = player.getInventory().getItem(slot);
4646
player.getInventory().setItem(slot, item);

0 commit comments

Comments
 (0)