Skip to content

Commit 9e200b0

Browse files
committed
Prevent block breaking with spears
Closes #1169
1 parent 16b057e commit 9e200b0

File tree

7 files changed

+72
-20
lines changed

7 files changed

+72
-20
lines changed

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@
1919
package com.viaversion.viabackwards;
2020

2121
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
22-
import com.viaversion.viabackwards.listener.BlockBreakListener;
23-
import com.viaversion.viabackwards.listener.FireDamageListener;
24-
import com.viaversion.viabackwards.listener.FireExtinguishListener;
25-
import com.viaversion.viabackwards.listener.LecternInteractListener;
26-
import com.viaversion.viabackwards.listener.PlayerItemDropListener;
22+
import com.viaversion.viabackwards.listener.DurabilitySync1_11;
23+
import com.viaversion.viabackwards.listener.PlayerHurtSound1_12;
24+
import com.viaversion.viabackwards.listener.FireExtinguish1_16;
25+
import com.viaversion.viabackwards.listener.LecternInteract1_14;
26+
import com.viaversion.viabackwards.listener.ItemDropSync1_17;
27+
import com.viaversion.viabackwards.listener.SpearAttack1_21_11;
2728
import com.viaversion.viabackwards.protocol.v1_20_2to1_20.provider.AdvancementCriteriaProvider;
2829
import com.viaversion.viabackwards.provider.BukkitAdvancementCriteriaProvider;
2930
import com.viaversion.viaversion.api.Via;
@@ -53,20 +54,23 @@ public void enable() {
5354
ViaBackwardsPlatform.super.enable();
5455

5556
final ProtocolVersion protocolVersion = Via.getAPI().getServerVersion().highestSupportedProtocolVersion();
57+
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_21_11)) {
58+
new SpearAttack1_21_11(this).register();
59+
}
5660
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_17)) {
57-
new PlayerItemDropListener(this).register();
61+
new ItemDropSync1_17(this).register();
5862
}
5963
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_16)) {
60-
new FireExtinguishListener(this).register();
64+
new FireExtinguish1_16(this).register();
6165
}
6266
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_14)) {
63-
new LecternInteractListener(this).register();
67+
new LecternInteract1_14(this).register();
6468
}
6569
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_12)) {
66-
new FireDamageListener(this).register();
70+
new PlayerHurtSound1_12(this).register();
6771
}
6872
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_11)) {
69-
new BlockBreakListener(this).register();
73+
new DurabilitySync1_11(this).register();
7074
}
7175

7276
final ViaProviders providers = Via.getManager().getProviders();

bukkit/src/main/java/com/viaversion/viabackwards/listener/BlockBreakListener.java renamed to bukkit/src/main/java/com/viaversion/viabackwards/listener/DurabilitySync1_11.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
import org.bukkit.event.block.BlockBreakEvent;
2828
import org.bukkit.inventory.ItemStack;
2929

30-
public class BlockBreakListener extends ViaBukkitListener {
30+
public class DurabilitySync1_11 extends ViaBukkitListener {
3131

32-
public BlockBreakListener(final BukkitPlugin plugin) {
32+
public DurabilitySync1_11(final BukkitPlugin plugin) {
3333
super(plugin, Protocol1_11To1_10.class);
3434
}
3535

bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguishListener.java renamed to bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguish1_16.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
import org.bukkit.event.block.Action;
2929
import org.bukkit.event.player.PlayerInteractEvent;
3030

31-
public class FireExtinguishListener extends ViaBukkitListener {
31+
public class FireExtinguish1_16 extends ViaBukkitListener {
3232

33-
public FireExtinguishListener(BukkitPlugin plugin) {
33+
public FireExtinguish1_16(BukkitPlugin plugin) {
3434
super(plugin, Protocol1_16To1_15_2.class);
3535
}
3636

bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerItemDropListener.java renamed to bukkit/src/main/java/com/viaversion/viabackwards/listener/ItemDropSync1_17.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
import org.bukkit.event.player.PlayerDropItemEvent;
2828
import org.bukkit.inventory.ItemStack;
2929

30-
public class PlayerItemDropListener extends ViaBukkitListener {
30+
public class ItemDropSync1_17 extends ViaBukkitListener {
3131

32-
public PlayerItemDropListener(final BukkitPlugin plugin) {
32+
public ItemDropSync1_17(final BukkitPlugin plugin) {
3333
super(plugin, Protocol1_13_1To1_13.class); // Starts with 1.13 clients on 1.17 servers
3434
}
3535

bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteractListener.java renamed to bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteract1_14.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
import org.bukkit.inventory.ItemStack;
3131
import org.bukkit.inventory.meta.BookMeta;
3232

33-
public class LecternInteractListener extends ViaBukkitListener {
33+
public class LecternInteract1_14 extends ViaBukkitListener {
3434

35-
public LecternInteractListener(BukkitPlugin plugin) {
35+
public LecternInteract1_14(BukkitPlugin plugin) {
3636
super(plugin, Protocol1_14To1_13_2.class);
3737
}
3838

bukkit/src/main/java/com/viaversion/viabackwards/listener/FireDamageListener.java renamed to bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerHurtSound1_12.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
import org.bukkit.event.EventPriority;
2929
import org.bukkit.event.entity.EntityDamageEvent;
3030

31-
public class FireDamageListener extends ViaBukkitListener {
31+
public class PlayerHurtSound1_12 extends ViaBukkitListener {
3232

33-
public FireDamageListener(BukkitPlugin plugin) {
33+
public PlayerHurtSound1_12(BukkitPlugin plugin) {
3434
super(plugin, Protocol1_12To1_11_1.class);
3535
}
3636

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
3+
* Copyright (C) 2016-2026 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_21_11to1_21_9.Protocol1_21_11To1_21_9;
22+
import com.viaversion.viaversion.bukkit.listeners.ViaBukkitListener;
23+
import org.bukkit.entity.Player;
24+
import org.bukkit.event.EventHandler;
25+
import org.bukkit.event.EventPriority;
26+
import org.bukkit.event.block.BlockBreakEvent;
27+
import org.bukkit.inventory.ItemStack;
28+
29+
public class SpearAttack1_21_11 extends ViaBukkitListener {
30+
31+
public SpearAttack1_21_11(final BukkitPlugin plugin) {
32+
super(plugin, Protocol1_21_11To1_21_9.class);
33+
}
34+
35+
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
36+
public void onBlockBreak(final BlockBreakEvent event) {
37+
final Player player = event.getPlayer();
38+
if (!isOnPipe(player)) {
39+
return;
40+
}
41+
42+
final ItemStack item = player.getInventory().getItemInMainHand();
43+
if (item.getType().name().endsWith("_SPEAR")) {
44+
// Prevent spears from breaking blocks
45+
event.setCancelled(true);
46+
}
47+
}
48+
}

0 commit comments

Comments
 (0)