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

This commit is contained in:
Intelli committed 2024-05-02 12:52:51 -06:00
1 parent a4c37da8ee
commit 053f7d5c7d
6 files changed
+50 -16

No files matched your search

@@ -13,6 +13,7 @@ import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Directional;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.ItemFrame;
@@ -22,6 +23,10 @@ import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.MerchantRecipe;
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.utility.Util;
@@ -263,4 +268,20 @@ public class BukkitAdapter implements BukkitInterface {
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;
}
}
@@ -9,6 +9,7 @@ import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
@@ -84,4 +85,6 @@ public interface BukkitInterface {
public boolean isSignFront(SignChangeEvent event);
public ItemStack getArrowMeta(Arrow arrow, ItemStack itemStack);
}
@@ -11,9 +11,13 @@ import org.bukkit.block.BlockState;
import org.bukkit.block.ChiseledBookshelf;
import org.bukkit.block.Sign;
import org.bukkit.block.sign.Side;
import org.bukkit.entity.Arrow;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.player.PlayerInteractEvent;
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;
@@ -254,4 +258,22 @@ public class Bukkit_v1_20 extends Bukkit_v1_19 implements BukkitInterface {
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;
}
}
@@ -45,6 +45,7 @@ import net.coreprotect.listener.player.PlayerInteractEntityListener;
import net.coreprotect.listener.player.PlayerInteractListener;
import net.coreprotect.listener.player.PlayerItemBreakListener;
import net.coreprotect.listener.player.PlayerJoinListener;
import net.coreprotect.listener.player.PlayerPickupArrowListener;
import net.coreprotect.listener.player.PlayerQuitListener;
import net.coreprotect.listener.player.PlayerTakeLecternBookListener;
import net.coreprotect.listener.player.ProjectileLaunchListener;
@@ -1,4 +1,4 @@
package net.coreprotect.listener;
package net.coreprotect.listener.player;
import org.bukkit.Material;
import org.bukkit.entity.AbstractArrow;
@@ -8,11 +8,8 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerPickupArrowEvent;
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.listener.entity.EntityPickupItemListener;
@@ -31,16 +28,7 @@ public final class PlayerPickupArrowListener extends Queue implements Listener {
if (arrow instanceof Arrow) {
Arrow arrowEntity = (Arrow) arrow;
PotionData data = arrowEntity.getBasePotionData();
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);
}
itemStack = BukkitAdapter.ADAPTER.getArrowMeta(arrowEntity, itemStack);
}
return itemStack;
@@ -24,7 +24,6 @@ import net.coreprotect.config.Config;
import net.coreprotect.config.ConfigHandler;
import net.coreprotect.consumer.Queue;
import net.coreprotect.database.logger.ItemLogger;
import net.coreprotect.listener.PlayerPickupArrowListener;
import net.coreprotect.utility.Util;
public final class ProjectileLaunchListener extends Queue implements Listener {