
Kicking with a function on connect fails
2002Spiele opened this issue ยท 3 comments
Skript/Server Version
[20:14:30 INFO]: [Skript] Skript's aliases can be found here: https://github.com/SkriptLang/skript-aliases
[20:14:30 INFO]: [Skript] Skript's documentation can be found here: https://docs.skriptlang.org/
[20:14:30 INFO]: [Skript] Skript's tutorials can be found here: https://docs.skriptlang.org/tutorials
[20:14:30 INFO]: [Skript] Server Version: 1.21.7-32-e792779 (MC: 1.21.7)
[20:14:30 INFO]: [Skript] Skript Version: 2.12.1 (skriptlang-github)
[20:14:30 INFO]: [Skript] Installed Skript Addons: None
[20:14:30 INFO]: [Skript] Installed dependencies: None
Bug Description
When using the on connect
event, running a function that's supposed to prevent the player from joining by kicking them, won't actually prevent them. Instead, an unexpected error is sent to the console.
Expected Behavior
The function is supposed to prevent the player from connecting.
Steps to Reproduce
function kick_player(plr: player):
kick {_plr}
on connect:
kick_player(player)
This code is supposed to stop anyone from joining the server. However, an error shows up in the console.
Not using the function, but instead writing down the effect, works fine:
on connect:
kick player
Errors or Screenshots
No response
Other
#!#!
#!#! [Skript] Severe Error:
#!#!
#!#! An unexpected error occurred with Skript. This issue is likely not your fault.
#!#! Report the issue: https://github.com/SkriptLang/Skript/issues
#!#!
#!#! Stack trace:
#!#! Caused by: java.lang.NullPointerException: Cannot invoke "net.minecraft.server.network.ServerGamePacketListenerImpl.disconnect(net.minecraft.network.chat.Component, org.bukkit.event.player.PlayerKickEvent$Cause)" because "org.bukkit.craftbukkit.entity.CraftPlayer.getHandle().connection" is null
#!#! at org.bukkit.craftbukkit.entity.CraftPlayer.kickPlayer(CraftPlayer.java:756)
#!#! at Skript-2.12.1.jar//ch.njol.skript.effects.EffKick.execute(EffKick.java:63)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.Effect.run(Effect.java:42)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.TriggerItem.walk(TriggerItem.java:40)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.TriggerItem.walk(TriggerItem.java:67)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.Trigger.execute(Trigger.java:33)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.function.ScriptFunction.execute(ScriptFunction.java:72)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.function.Function.execute(Function.java:116)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.function.FunctionReference.execute(FunctionReference.java:376)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.function.EffFunctionCall.execute(EffFunctionCall.java:34)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.Effect.run(Effect.java:42)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.TriggerItem.walk(TriggerItem.java:40)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.TriggerItem.walk(TriggerItem.java:67)
#!#! at Skript-2.12.1.jar//ch.njol.skript.lang.Trigger.execute(Trigger.java:33)
#!#! at Skript-2.12.1.jar//ch.njol.skript.SkriptEventHandler.lambda$execute$2(SkriptEventHandler.java:165)
#!#! at Skript-2.12.1.jar//ch.njol.skript.SkriptEventHandler.lambda$execute$3(SkriptEventHandler.java:176)
#!#! at Skript-2.12.1.jar//ch.njol.skript.util.Task.callSync(Task.java:147)
#!#! at Skript-2.12.1.jar//ch.njol.skript.util.Task.callSync(Task.java:131)
#!#! at Skript-2.12.1.jar//ch.njol.skript.SkriptEventHandler.execute(SkriptEventHandler.java:174)
#!#! at Skript-2.12.1.jar//ch.njol.skript.SkriptEventHandler.check(SkriptEventHandler.java:120)
#!#! at Skript-2.12.1.jar//ch.njol.skript.SkriptEventHandler$PriorityListener.lambda$new$0(SkriptEventHandler.java:46)
#!#! at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80)
#!#! at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:71)
#!#! at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54)
#!#! at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131)
#!#! at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628)
#!#! at org.bukkit.event.Event.callEvent(Event.java:46)
#!#! at io.papermc.paper.connection.HorriblePlayerLoginEventHack.execute(HorriblePlayerLoginEventHack.java:85)
#!#! at org.bukkit.craftbukkit.event.CraftEventFactory.handleLoginResult(CraftEventFactory.java:2111)
#!#! at net.minecraft.server.network.ServerLoginPacketListenerImpl.verifyLoginAndFinishConnectionSetup(ServerLoginPacketListenerImpl.java:207)
#!#! at net.minecraft.server.network.ServerLoginPacketListenerImpl.tick(ServerLoginPacketListenerImpl.java:95)
#!#! at net.minecraft.network.Connection.tick(Connection.java:598)
#!#! at net.minecraft.server.network.ServerConnectionListener.tick(ServerConnectionListener.java:256)
#!#! at net.minecraft.server.MinecraftServer.tickConnection(MinecraftServer.java:1762)
#!#! at net.minecraft.server.dedicated.DedicatedServer.tickConnection(DedicatedServer.java:385)
#!#! at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1738)
#!#! at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1530)
#!#! at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1252)
#!#! at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:310)
#!#! at java.base/java.lang.Thread.run(Thread.java:1570)
#!#!
#!#! Skript: 2.12.1 (latest)
#!#! Flavor: skriptlang-github
#!#! Date: 15:49:27.046333
#!#! Bukkit: 1.21.7-R0.1-SNAPSHOT
#!#! Minecraft: 1.21.7
#!#! Java: 22.0.1 (Java HotSpot(TM) 64-Bit Server VM 22.0.1+8-16)
#!#! OS: Windows 10 amd64 10.0
#!#!
#!#! Server platform: Paper
#!#!
#!#! Current node: null
#!#! Current item: kick {_plr} (as org.bukkit.entity.Player)
#!#! Current trigger: function kick_player (simple event) (connect function kick test.sk, line 1)
#!#! Thread: Server thread
#!#! Language: english
#!#! Link parse mode: DISABLED
#!#! End of Error.
#!#!
Agreement
- I have read the guidelines above and affirm I am following them with this report.
PlayerLoginEvent
, which is what on connect
uses, has special handling when kicking a player, since the Player
object that is retrieved from the event, is not fully complete.
So by passing the incomplete player object from this event to a function, and kicking within the function, does not get the appropriate handling it needs. Which is why you're getting the stacktrace.
Deprecation info from Paper:
this event causes the full player entity to be created much earlier than it would be in Vanilla,
leaving it with mostly disfunctional methods and state.