Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

task - kickplayer nie dziala


Entify

Rekomendowane odpowiedzi

Opublikowano

czesc, mam problem, error:

[11:12:11 WARN]: Exception in thread "Craft Scheduler Thread - 141"
[11:12:11 WARN]: org.apache.commons.lang.UnhandledException: Plugin ent_LvLTimer
 v0.0.1 generated an exception while executing task 2
        at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftAsyncTask.run(CraftAsyn
cTask.java:56)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Asynchronous player kick!
        at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14)
        at org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer.kickPlayer(CraftPla
yer.java:248)
        at me.entify.lvltimer.listeners.PlayerJoinListener$1.run(PlayerJoinListe
ner.java:26)
        at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftTask.run(CraftTask.java
:71)
        at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftAsyncTask.run(CraftAsyn
cTask.java:53)
        ... 3 more

>

kod:

public class PlayerJoinListener 
  implements Listener{
	
	private int i;
	private int taskID;
	
	@SuppressWarnings("deprecation")
	@EventHandler
	public void onJoin(PlayerJoinEvent e){
		i = 20;
		Player p = e.getPlayer();
		taskID = Bukkit.getScheduler().scheduleAsyncRepeatingTask(TimerPlugin.getInst(), new Runnable(){
			public void run(){
				if(!(i <= -1)){
					if(i == 0){
						p.kickPlayer("§cNIE WYBRALES SERWERA W CIAGU 20 SEKUND!"); //to mi nie dziala :c
						i--;
						Bukkit.getScheduler().cancelTask(taskID);
					} 
					else if (i == 20){
//tu cos robie..
						i--;
					}
					else if (i != 20 && i != 0){
//tu cos robie..
						i--;
					}
				}
			}
		}, 0, 20);
	}
}

nie zwracajcie uwagi na dosc slaby kod, dopiero pozniej go przerabiam na razie chce tylko ogarnac to kickplayer.

 

 

JAVA <3

 

Opublikowano
Caused by: java.lang.IllegalStateException: Asynchronous player kick!

Asynchronicznie nie możesz wywalać graczy z serwera.

WYgodniej będzie jak zrobisz to z obiektem?

Opublikowano
22 minuty temu, TheMajster napisał:

Caused by: java.lang.IllegalStateException: Asynchronous player kick!

Asynchronicznie nie możesz wywalać graczy z serwera.

WYgodniej będzie jak zrobisz to z obiektem?

no ale jak?

 

 

JAVA <3

 

Opublikowano
1 godzinę temu, Entify napisał:

czesc, mam problem, error:


[11:12:11 WARN]: Exception in thread "Craft Scheduler Thread - 141"
[11:12:11 WARN]: org.apache.commons.lang.UnhandledException: Plugin ent_LvLTimer
 v0.0.1 generated an exception while executing task 2
        at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftAsyncTask.run(CraftAsyn
cTask.java:56)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Asynchronous player kick!
        at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:14)
        at org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer.kickPlayer(CraftPla
yer.java:248)
        at me.entify.lvltimer.listeners.PlayerJoinListener$1.run(PlayerJoinListe
ner.java:26)
        at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftTask.run(CraftTask.java
:71)
        at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftAsyncTask.run(CraftAsyn
cTask.java:53)
        ... 3 more

>

kod:


public class PlayerJoinListener 
  implements Listener{
	
	private int i;
	private int taskID;
	
	@SuppressWarnings("deprecation")
	@EventHandler
	public void onJoin(PlayerJoinEvent e){
		i = 20;
		Player p = e.getPlayer();
		taskID = Bukkit.getScheduler().scheduleAsyncRepeatingTask(TimerPlugin.getInst(), new Runnable(){
			public void run(){
				if(!(i <= -1)){
					if(i == 0){
						p.kickPlayer("§cNIE WYBRALES SERWERA W CIAGU 20 SEKUND!"); //to mi nie dziala :c
						i--;
						Bukkit.getScheduler().cancelTask(taskID);
					} 
					else if (i == 20){
//tu cos robie..
						i--;
					}
					else if (i != 20 && i != 0){
//tu cos robie..
						i--;
					}
				}
			}
		}, 0, 20);
	}
}

nie zwracajcie uwagi na dosc slaby kod, dopiero pozniej go przerabiam na razie chce tylko ogarnac to kickplayer.

zamiast robić task per gracz(dużo graczy = dużo zasobów będzie to zabierało)

zrób jeden w onEnable synchroniczny w którym będziesz sprawdzał czas wejścia i jak jest jakiś tam to kick

i po prostu dodawaj gracza to hashmapy

HashMap<Uuid,Long> joinTime = new HashMap<>();

pamietaj tylko że gracz może wyjść  i musisz to sprawdzać bo inaczej leaka sobie zrobisz

+ jak zrobiles p.kickPlayer(); a tutaj będziesz miał na 100% null pointerach w pewnych sytuacjach. Np w takiej jak gracz przed koncem czasu wyjdzie :) bo nie sprawdzasz nigdzie czy p != null

a po 20 sekundach to ch*j wie czy on dalej siedzi czy sobie gdzieś polazł :D 

Opublikowano
						((CraftPlayer)p).getHandle().playerConnection.disconnect("nie  wybrales serwera..!");

do zamkniecia

 

 

JAVA <3

 

Opublikowano
Bukkit.getScheduler().runTask(plugin, () -> {
    p.kickPlayer("asd");
});

gdy chcesz kogoś wywalić w tasku async

 

 

 

 

fKJeAI4.jpg

 

 

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...