Open WhyXLeak opened 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);
}
}
The newer version of Paper does not have this issue, it looks like a bug in the old version of Paper.
[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) ~[?:?]