WMGameLive / LeashPlayers

Allow to use lead on players!
2 stars 5 forks source link

Error #6

Open WhyXLeak opened 5 months ago

WhyXLeak commented 5 months ago

[17:27:46 ERROR]: Could not pass event PlayerInteractAtEntityEvent to LeashPlayers v1.7 java.lang.NoSuchMethodError: 'org.bukkit.entity.Entity org.bukkit.World.spawn(org.bukkit.Location, java.lang.Class, java.util.function.Consumer)' at wm.vdr.leashplayers.Listeners.onLeash(Listeners.java:57) ~[LeashPlayers-1.7.jar:?] at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor607.execute(Unknown Source) ~[?:?] at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[paper-api-1.20.1-R0.1-SNAPSHOT.jar:?] at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:81) ~[paper-api-1.20.1-R0.1-SNAPSHOT.jar:git-Paper-196] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-api-1.20.1-R0.1-SNAPSHOT.jar:?] at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.20.1.jar:git-Paper-196] at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[paper-1.20.1.jar:git-Paper-196] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:615) ~[paper-api-1.20.1-R0.1-SNAPSHOT.jar:?] at net.minecraft.server.network.ServerGamePacketListenerImpl$4.performInteraction(ServerGamePacketListenerImpl.java:2848) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl$4.a(ServerGamePacketListenerImpl.java:2901) ~[?:?] at net.minecraft.network.protocol.game.ServerboundInteractPacket$InteractionAtLocationAction.dispatch(ServerboundInteractPacket.java:161) ~[?:?] at net.minecraft.network.protocol.game.ServerboundInteractPacket.dispatch(ServerboundInteractPacket.java:80) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.handleInteract(ServerGamePacketListenerImpl.java:2837) ~[?:?] at net.minecraft.network.protocol.game.ServerboundInteractPacket.handle(ServerboundInteractPacket.java:67) ~[?:?] at net.minecraft.network.protocol.game.ServerboundInteractPacket.handle(ServerboundInteractPacket.java:12) ~[?:?] at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:51) ~[?:?] at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.20.1.jar:git-Paper-196] at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?] at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?] at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1338) ~[paper-1.20.1.jar:git-Paper-196] at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197) ~[paper-1.20.1.jar:git-Paper-196] at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?] at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1315) ~[paper-1.20.1.jar:git-Paper-196] at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1308) ~[paper-1.20.1.jar:git-Paper-196] at net.minecraft.util.thread.BlockableEventLoop.runAllTasks(BlockableEventLoop.java:114) ~[?:?] at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1424) ~[paper-1.20.1.jar:git-Paper-196] at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1170) ~[paper-1.20.1.jar:git-Paper-196] at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[paper-1.20.1.jar:git-Paper-196] at java.lang.Thread.run(Thread.java:842) ~[?:?]

    Ver: Paper 1.20.1 latest
WhyXLeak commented 5 months ago

I fix it, new code:

package wm.vdr.leashplayers;

import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityUnleashEvent; import org.bukkit.event.entity.EntityUnleashEvent.UnleashReason; import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable;

import java.util.ArrayList; import java.util.List;

public class Listeners implements Listener {

private LeashPlayers main = LeashPlayers.instance;

List<Player> leashed = new ArrayList<>();
List<LivingEntity> entityList = new ArrayList<>();
List<Entity> distanceUnleash = new ArrayList<>();

@EventHandler
public void onUnleash(EntityUnleashEvent e) {
    if(e.getReason() == UnleashReason.PLAYER_UNLEASH) return;
    distanceUnleash.add(e.getEntity());
}

@EventHandler
public void onLeash(PlayerInteractAtEntityEvent e) {
    if(!(e.getRightClicked() instanceof Player)) return;
    if(!e.getHand().equals(EquipmentSlot.HAND)) return;

    Player player = e.getPlayer();
    Player target = (Player) e.getRightClicked();

    if(!player.hasPermission("leashplayers.use")) return;

    if(leashed.contains(target)) {
        leashed.remove(target);
        return;
    }

    if(!player.getInventory().getItemInMainHand().getType().equals(Material.LEAD)) return;

    Zombie zombie = (Zombie) target.getWorld().spawnEntity(target.getLocation(), EntityType.ZOMBIE);
    zombie.getEquipment().setItemInMainHand(null);
    zombie.getEquipment().setHelmet(null);
    zombie.getEquipment().setChestplate(null);
    zombie.getEquipment().setLeggings(null);
    zombie.getEquipment().setBoots(null);
    zombie.setCanPickupItems(false);
    zombie.setAdult();
    if(zombie.getVehicle() != null) zombie.getVehicle().remove();
    zombie.setSilent(true);
    zombie.setInvisible(true);
    zombie.setCollidable(false);
    zombie.setInvulnerable(true);
    zombie.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, Integer.MAX_VALUE, 255, false, false));
    zombie.setLeashHolder(player);

    target.setAllowFlight(true);
    leashed.add(target);
    entityList.add(zombie);

    player.getInventory().getItemInMainHand().setAmount(player.getInventory().getItemInMainHand().getAmount() - 1);

    new BukkitRunnable() {
        public void run() {
            if(!target.isOnline() || !zombie.isValid() || !zombie.isLeashed() || !leashed.contains(target)) {
                leashed.remove(target);
                entityList.remove(zombie);
                zombie.remove();
                target.setAllowFlight(false);
                if(!distanceUnleash.contains(zombie)) target.getWorld().dropItemNaturally(target.getLocation(), new ItemStack(Material.LEAD));
                else distanceUnleash.remove(zombie);
                cancel();
            }
            Location location = target.getLocation();
            location.setX(zombie.getLocation().getX());
            location.setY(zombie.getLocation().getY());
            location.setZ(zombie.getLocation().getZ());
            target.teleport(location, PlayerTeleportEvent.TeleportCause.UNKNOWN);
        }
    }.runTaskTimer(main, 0, main.getConfig().getInt("Leashed-Check-Delay"));
}

@EventHandler
public void onFlame(EntityCombustEvent e) {
    if(!(e.getEntity() instanceof LivingEntity)) return;
    if(entityList.contains((LivingEntity) e.getEntity())) e.setCancelled(true);
}

@EventHandler
public void onDamage(EntityDamageByEntityEvent e) {
    if(!(e.getDamager() instanceof LivingEntity)) return;
    if(entityList.contains((LivingEntity) e.getDamager())) e.setCancelled(true);
}

}

WMGameLive commented 4 months ago

The newer version of Paper does not have this issue, it looks like a bug in the old version of Paper.