Fixed NoSuchMethodError when shooting or dropping arrows (fixes #535)

This commit is contained in:
Intelli 2024-05-02 12:52:35 -06:00
parent a4c37da8ee
commit 053f7d5c7d
6 changed files with 50 additions and 16 deletions

View File

@ -13,6 +13,7 @@ import org.bukkit.block.BlockState;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Directional; import org.bukkit.block.data.Directional;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.ItemFrame; import org.bukkit.entity.ItemFrame;
@ -22,6 +23,10 @@ import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.MerchantRecipe; import org.bukkit.inventory.MerchantRecipe;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionType;
import net.coreprotect.config.ConfigHandler; import net.coreprotect.config.ConfigHandler;
import net.coreprotect.utility.Util; import net.coreprotect.utility.Util;
@ -263,4 +268,20 @@ public class BukkitAdapter implements BukkitInterface {
return true; return true;
} }
@Override
public ItemStack getArrowMeta(Arrow arrow, ItemStack itemStack) {
PotionData data = arrow.getBasePotionData();
if (data.getType() != PotionType.UNCRAFTABLE) {
itemStack = new ItemStack(Material.TIPPED_ARROW);
PotionMeta meta = (PotionMeta) itemStack.getItemMeta();
meta.setBasePotionData(data);
for (PotionEffect effect : arrow.getCustomEffects()) {
meta.addCustomEffect(effect, false);
}
itemStack.setItemMeta(meta);
}
return itemStack;
}
} }

View File

@ -9,6 +9,7 @@ import org.bukkit.block.Block;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
@ -84,4 +85,6 @@ public interface BukkitInterface {
public boolean isSignFront(SignChangeEvent event); public boolean isSignFront(SignChangeEvent event);
public ItemStack getArrowMeta(Arrow arrow, ItemStack itemStack);
} }

View File

@ -11,9 +11,13 @@ import org.bukkit.block.BlockState;
import org.bukkit.block.ChiseledBookshelf; import org.bukkit.block.ChiseledBookshelf;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.block.sign.Side; import org.bukkit.block.sign.Side;
import org.bukkit.entity.Arrow;
import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionType;
import net.coreprotect.model.BlockGroup; import net.coreprotect.model.BlockGroup;
@ -254,4 +258,22 @@ public class Bukkit_v1_20 extends Bukkit_v1_19 implements BukkitInterface {
return event.getSide().equals(Side.FRONT); return event.getSide().equals(Side.FRONT);
} }
@Override
public ItemStack getArrowMeta(Arrow arrow, ItemStack itemStack) {
PotionType potionType = arrow.getBasePotionType();
Color color = arrow.getColor();
if (potionType != null || color != null) {
itemStack = new ItemStack(Material.TIPPED_ARROW);
PotionMeta meta = (PotionMeta) itemStack.getItemMeta();
meta.setBasePotionType(potionType);
meta.setColor(color);
for (PotionEffect effect : arrow.getCustomEffects()) {
meta.addCustomEffect(effect, false);
}
itemStack.setItemMeta(meta);
}
return itemStack;
}
} }

View File

@ -45,6 +45,7 @@ import net.coreprotect.listener.player.PlayerInteractEntityListener;
import net.coreprotect.listener.player.PlayerInteractListener; import net.coreprotect.listener.player.PlayerInteractListener;
import net.coreprotect.listener.player.PlayerItemBreakListener; import net.coreprotect.listener.player.PlayerItemBreakListener;
import net.coreprotect.listener.player.PlayerJoinListener; import net.coreprotect.listener.player.PlayerJoinListener;
import net.coreprotect.listener.player.PlayerPickupArrowListener;
import net.coreprotect.listener.player.PlayerQuitListener; import net.coreprotect.listener.player.PlayerQuitListener;
import net.coreprotect.listener.player.PlayerTakeLecternBookListener; import net.coreprotect.listener.player.PlayerTakeLecternBookListener;
import net.coreprotect.listener.player.ProjectileLaunchListener; import net.coreprotect.listener.player.ProjectileLaunchListener;

View File

@ -1,4 +1,4 @@
package net.coreprotect.listener; package net.coreprotect.listener.player;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.AbstractArrow; import org.bukkit.entity.AbstractArrow;
@ -8,11 +8,8 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerPickupArrowEvent; import org.bukkit.event.player.PlayerPickupArrowEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionType;
import net.coreprotect.bukkit.BukkitAdapter;
import net.coreprotect.consumer.Queue; import net.coreprotect.consumer.Queue;
import net.coreprotect.listener.entity.EntityPickupItemListener; import net.coreprotect.listener.entity.EntityPickupItemListener;
@ -31,16 +28,7 @@ public final class PlayerPickupArrowListener extends Queue implements Listener {
if (arrow instanceof Arrow) { if (arrow instanceof Arrow) {
Arrow arrowEntity = (Arrow) arrow; Arrow arrowEntity = (Arrow) arrow;
PotionData data = arrowEntity.getBasePotionData(); itemStack = BukkitAdapter.ADAPTER.getArrowMeta(arrowEntity, itemStack);
if (data.getType() != PotionType.UNCRAFTABLE) {
itemStack = new ItemStack(Material.TIPPED_ARROW);
PotionMeta meta = (PotionMeta) itemStack.getItemMeta();
meta.setBasePotionData(data);
for (PotionEffect effect : arrowEntity.getCustomEffects()) {
meta.addCustomEffect(effect, false);
}
itemStack.setItemMeta(meta);
}
} }
return itemStack; return itemStack;

View File

@ -24,7 +24,6 @@ import net.coreprotect.config.Config;
import net.coreprotect.config.ConfigHandler; import net.coreprotect.config.ConfigHandler;
import net.coreprotect.consumer.Queue; import net.coreprotect.consumer.Queue;
import net.coreprotect.database.logger.ItemLogger; import net.coreprotect.database.logger.ItemLogger;
import net.coreprotect.listener.PlayerPickupArrowListener;
import net.coreprotect.utility.Util; import net.coreprotect.utility.Util;
public final class ProjectileLaunchListener extends Queue implements Listener { public final class ProjectileLaunchListener extends Queue implements Listener {