From 9e200b092b1229b17bc1f23ff9f6d37be406af98 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Mon, 5 Jan 2026 12:20:15 +0100 Subject: [PATCH] Prevent block breaking with spears Closes #1169 --- .../viaversion/viabackwards/BukkitPlugin.java | 24 ++++++---- ...kListener.java => DurabilitySync1_11.java} | 4 +- ...hListener.java => FireExtinguish1_16.java} | 4 +- ...ropListener.java => ItemDropSync1_17.java} | 4 +- ...Listener.java => LecternInteract1_14.java} | 4 +- ...Listener.java => PlayerHurtSound1_12.java} | 4 +- .../listener/SpearAttack1_21_11.java | 48 +++++++++++++++++++ 7 files changed, 72 insertions(+), 20 deletions(-) rename bukkit/src/main/java/com/viaversion/viabackwards/listener/{BlockBreakListener.java => DurabilitySync1_11.java} (94%) rename bukkit/src/main/java/com/viaversion/viabackwards/listener/{FireExtinguishListener.java => FireExtinguish1_16.java} (94%) rename bukkit/src/main/java/com/viaversion/viabackwards/listener/{PlayerItemDropListener.java => ItemDropSync1_17.java} (93%) rename bukkit/src/main/java/com/viaversion/viabackwards/listener/{LecternInteractListener.java => LecternInteract1_14.java} (95%) rename bukkit/src/main/java/com/viaversion/viabackwards/listener/{FireDamageListener.java => PlayerHurtSound1_12.java} (94%) create mode 100644 bukkit/src/main/java/com/viaversion/viabackwards/listener/SpearAttack1_21_11.java diff --git a/bukkit/src/main/java/com/viaversion/viabackwards/BukkitPlugin.java b/bukkit/src/main/java/com/viaversion/viabackwards/BukkitPlugin.java index 10ef6334..e7fbf3fd 100644 --- a/bukkit/src/main/java/com/viaversion/viabackwards/BukkitPlugin.java +++ b/bukkit/src/main/java/com/viaversion/viabackwards/BukkitPlugin.java @@ -19,11 +19,12 @@ package com.viaversion.viabackwards; import com.viaversion.viabackwards.api.ViaBackwardsPlatform; -import com.viaversion.viabackwards.listener.BlockBreakListener; -import com.viaversion.viabackwards.listener.FireDamageListener; -import com.viaversion.viabackwards.listener.FireExtinguishListener; -import com.viaversion.viabackwards.listener.LecternInteractListener; -import com.viaversion.viabackwards.listener.PlayerItemDropListener; +import com.viaversion.viabackwards.listener.DurabilitySync1_11; +import com.viaversion.viabackwards.listener.PlayerHurtSound1_12; +import com.viaversion.viabackwards.listener.FireExtinguish1_16; +import com.viaversion.viabackwards.listener.LecternInteract1_14; +import com.viaversion.viabackwards.listener.ItemDropSync1_17; +import com.viaversion.viabackwards.listener.SpearAttack1_21_11; import com.viaversion.viabackwards.protocol.v1_20_2to1_20.provider.AdvancementCriteriaProvider; import com.viaversion.viabackwards.provider.BukkitAdvancementCriteriaProvider; import com.viaversion.viaversion.api.Via; @@ -53,20 +54,23 @@ public class BukkitPlugin extends JavaPlugin implements ViaBackwardsPlatform { ViaBackwardsPlatform.super.enable(); final ProtocolVersion protocolVersion = Via.getAPI().getServerVersion().highestSupportedProtocolVersion(); + if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_21_11)) { + new SpearAttack1_21_11(this).register(); + } if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_17)) { - new PlayerItemDropListener(this).register(); + new ItemDropSync1_17(this).register(); } if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_16)) { - new FireExtinguishListener(this).register(); + new FireExtinguish1_16(this).register(); } if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_14)) { - new LecternInteractListener(this).register(); + new LecternInteract1_14(this).register(); } if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_12)) { - new FireDamageListener(this).register(); + new PlayerHurtSound1_12(this).register(); } if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_11)) { - new BlockBreakListener(this).register(); + new DurabilitySync1_11(this).register(); } final ViaProviders providers = Via.getManager().getProviders(); diff --git a/bukkit/src/main/java/com/viaversion/viabackwards/listener/BlockBreakListener.java b/bukkit/src/main/java/com/viaversion/viabackwards/listener/DurabilitySync1_11.java similarity index 94% rename from bukkit/src/main/java/com/viaversion/viabackwards/listener/BlockBreakListener.java rename to bukkit/src/main/java/com/viaversion/viabackwards/listener/DurabilitySync1_11.java index 4d3b66e4..a70f224d 100644 --- a/bukkit/src/main/java/com/viaversion/viabackwards/listener/BlockBreakListener.java +++ b/bukkit/src/main/java/com/viaversion/viabackwards/listener/DurabilitySync1_11.java @@ -27,9 +27,9 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.inventory.ItemStack; -public class BlockBreakListener extends ViaBukkitListener { +public class DurabilitySync1_11 extends ViaBukkitListener { - public BlockBreakListener(final BukkitPlugin plugin) { + public DurabilitySync1_11(final BukkitPlugin plugin) { super(plugin, Protocol1_11To1_10.class); } diff --git a/bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguishListener.java b/bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguish1_16.java similarity index 94% rename from bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguishListener.java rename to bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguish1_16.java index 7c79e78c..2deee12a 100644 --- a/bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguishListener.java +++ b/bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguish1_16.java @@ -28,9 +28,9 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; -public class FireExtinguishListener extends ViaBukkitListener { +public class FireExtinguish1_16 extends ViaBukkitListener { - public FireExtinguishListener(BukkitPlugin plugin) { + public FireExtinguish1_16(BukkitPlugin plugin) { super(plugin, Protocol1_16To1_15_2.class); } diff --git a/bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerItemDropListener.java b/bukkit/src/main/java/com/viaversion/viabackwards/listener/ItemDropSync1_17.java similarity index 93% rename from bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerItemDropListener.java rename to bukkit/src/main/java/com/viaversion/viabackwards/listener/ItemDropSync1_17.java index d535d458..6947c0d0 100644 --- a/bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerItemDropListener.java +++ b/bukkit/src/main/java/com/viaversion/viabackwards/listener/ItemDropSync1_17.java @@ -27,9 +27,9 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.inventory.ItemStack; -public class PlayerItemDropListener extends ViaBukkitListener { +public class ItemDropSync1_17 extends ViaBukkitListener { - public PlayerItemDropListener(final BukkitPlugin plugin) { + public ItemDropSync1_17(final BukkitPlugin plugin) { super(plugin, Protocol1_13_1To1_13.class); // Starts with 1.13 clients on 1.17 servers } diff --git a/bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteractListener.java b/bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteract1_14.java similarity index 95% rename from bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteractListener.java rename to bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteract1_14.java index 87d81465..4c4cf101 100644 --- a/bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteractListener.java +++ b/bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteract1_14.java @@ -30,9 +30,9 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; -public class LecternInteractListener extends ViaBukkitListener { +public class LecternInteract1_14 extends ViaBukkitListener { - public LecternInteractListener(BukkitPlugin plugin) { + public LecternInteract1_14(BukkitPlugin plugin) { super(plugin, Protocol1_14To1_13_2.class); } diff --git a/bukkit/src/main/java/com/viaversion/viabackwards/listener/FireDamageListener.java b/bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerHurtSound1_12.java similarity index 94% rename from bukkit/src/main/java/com/viaversion/viabackwards/listener/FireDamageListener.java rename to bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerHurtSound1_12.java index 7b03b0e2..4e0a369d 100644 --- a/bukkit/src/main/java/com/viaversion/viabackwards/listener/FireDamageListener.java +++ b/bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerHurtSound1_12.java @@ -28,9 +28,9 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent; -public class FireDamageListener extends ViaBukkitListener { +public class PlayerHurtSound1_12 extends ViaBukkitListener { - public FireDamageListener(BukkitPlugin plugin) { + public PlayerHurtSound1_12(BukkitPlugin plugin) { super(plugin, Protocol1_12To1_11_1.class); } diff --git a/bukkit/src/main/java/com/viaversion/viabackwards/listener/SpearAttack1_21_11.java b/bukkit/src/main/java/com/viaversion/viabackwards/listener/SpearAttack1_21_11.java new file mode 100644 index 00000000..16043945 --- /dev/null +++ b/bukkit/src/main/java/com/viaversion/viabackwards/listener/SpearAttack1_21_11.java @@ -0,0 +1,48 @@ +/* + * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards + * Copyright (C) 2016-2026 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.viaversion.viabackwards.listener; + +import com.viaversion.viabackwards.BukkitPlugin; +import com.viaversion.viabackwards.protocol.v1_21_11to1_21_9.Protocol1_21_11To1_21_9; +import com.viaversion.viaversion.bukkit.listeners.ViaBukkitListener; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.inventory.ItemStack; + +public class SpearAttack1_21_11 extends ViaBukkitListener { + + public SpearAttack1_21_11(final BukkitPlugin plugin) { + super(plugin, Protocol1_21_11To1_21_9.class); + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onBlockBreak(final BlockBreakEvent event) { + final Player player = event.getPlayer(); + if (!isOnPipe(player)) { + return; + } + + final ItemStack item = player.getInventory().getItemInMainHand(); + if (item.getType().name().endsWith("_SPEAR")) { + // Prevent spears from breaking blocks + event.setCancelled(true); + } + } +}