Java Problem

szymhal | 2021-02-17 10:26:00 UTC | #1

Siema,
dopiero uczę się pisać pluginy i zacząłem od czegoś prostego - plugin na moderowanie chatu (on, off, clear).
Cały kod napisałem, wszystko działa, oprócz jednego. Tutaj macie kod: https://hastebin.com/raqoverona.java

Podczas wywoływania komendy chat, wszystko działa, lecz jak wpiszę komendę z jednym argumentem (on, off, clear) np: /chat on, to w konsoli pokazuje się bład:

[20:54:50 WARN]: Unexpected exception while parsing console command “chat asd”
org.bukkit.command.CommandException: Unhandled exception executing command ‘chat’ in plugin SDevChat
v1.0
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-1
.7.9-R0.2-208-ge0f2e95]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:181) ~[spigot.jar:git-
Spigot-1.7.9-R0.2-208-ge0f2e95]
at org.bukkit.craftbukkit.v17R4.CraftServer.dispatchCommand(CraftServer.java:767) ~[spigot
.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
at org.bukkit.craftbukkit.v17R4.CraftServer.dispatchServerCommand(CraftServer.java:753) [s
pigot.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
at net.minecraft.server.v17R4.DedicatedServer.aB(DedicatedServer.java:326) [spigot.jar:git
-Spigot-1.7.9-R0.2-208-ge0f2e95]
at net.minecraft.server.v17R4.DedicatedServer.v(DedicatedServer.java:290) [spigot.jar:git-
Spigot-1.7.9-R0.2-208-ge0f2e95]
at net.minecraft.server.v17R4.MinecraftServer.u(MinecraftServer.java:584) [spigot.jar:git-
Spigot-1.7.9-R0.2-208-ge0f2e95]
at net.minecraft.server.v17R4.MinecraftServer.run(MinecraftServer.java:490) [spigot.jar:gi
t-Spigot-1.7.9-R0.2-208-ge0f2e95]
at net.minecraft.server.v17R4.ThreadServerApplication.run(SourceFile:628) [spigot.jar:git-
Spigot-1.7.9-R0.2-208-ge0f2e95]
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at pl.szymoondev.SDevChat.onCommand(SDevChat.java:43) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-1
.7.9-R0.2-208-ge0f2e95]
… 8 more

Caused by: java.lang.ArrayIndexOutOfBoundsException: 1

Nie mam pojęcia o co z tym błędem chodzi.
Proszę o pomoc.
P.S: Wie ktoś może jak włączyć pokazywanie numerów linijek w eclipse?


Timo | 2017-04-13 19:12:28 UTC | #2

Linijki są domyślnie włączone, policz ręcznie. Podaj mi treść linijki numer 43 w klasie SDevChat.java . To w niej jest błąd.


szymhal | 2017-04-13 20:27:11 UTC | #3

f(args[1].equalsIgnoreCase(“on”)){


Timo | 2017-04-13 20:45:52 UTC | #4

Czyli w tym jest błąd.
W javie argument pierwszy to argument 0. Potem drugi to 1. Zaczyna się od zerowego. A w komendzie była wskazana ilość argumentów do 1, a według tego musiałyby być dwa.
Zmień na
if(args[0].equalsIgnoreCase("on")){

prostybłąd


Nieznajomy11 | 2017-04-13 20:50:28 UTC | #5

Dodatkowo wcześniej trzeba sprawdzić czy jest tyle argumentów ;P

[code]if (args.length == 1 && args[0].equalsIgnoreCase(“on”)) {}[/code]


szymhal | 2017-04-13 20:52:15 UTC | #6

Okej, a tak poza tym, chat clear nie działa. Wysyła wiadomości, ale po nich nic na chacie nie można napisać, ani nie pokazuje wiadomosci ze chat zostal wyczyszczony.

@EDIT: Serwer przez to Chat clear został zlagowany i się wyłączył xd


Nieznajomy11 | 2017-04-13 20:55:42 UTC | #7

Mógłbyś dać cały kod? ;P


szymhal | 2017-04-13 20:58:08 UTC | #8

Kod: https://hastebin.com/oniqutumuf.java
Listenera jeszcze nie robiłem, najpierw chce zrobić to.

Do tego komendy on i off nie działają :smile:
Ale to chyba jest wina variablesu, więc zaraz ogarne


Nieznajomy11 | 2017-04-13 21:00:33 UTC | #9

[code]while(int i = 0; i < 101; i++) {
for(Player p : Bukkit.getOnlinePlayers()) {
p.sendMessage(” “);
}
}[/code]

Brakowało zwiększania i


szymhal | 2017-04-13 21:02:52 UTC | #10

[quote=”Nieznajomy11, post:9, topic:2446”]
for(Player p : Bukkit.getOnlinePlayers()) {
p.sendMessage(” “);
[/quote]

Pokazuje się bład w eclipse.


Nieznajomy11 | 2017-04-13 21:07:37 UTC | #11

No tak, ale pytanie jaki ;)

Dodatkowo zamiast rozdzielać i robić 2x kodu:
[code]if (sender instanceof Player) {
String senderName = ((Player) sender).getName();
} else {
String senderName = “KONSOLE”;
}[/code], czy coś podobnego :P


szymhal | 2017-04-13 21:12:54 UTC | #12

Błąd:
https://scr.hu/61GGvO
https://scr.hu/ZN66ee

PS: Kod będe przerabiać, narazie go piszę aby działał.


Nieznajomy11 | 2017-04-13 21:12:46 UTC | #13

Mógłbyś zrobić screenshot razem z polem roboczym IDE? Bo tak średnio tutaj czytać :P


szymhal | 2017-04-13 21:13:32 UTC | #14

https://scr.hu/p7ppqn


Nieznajomy11 | 2017-04-13 21:14:02 UTC | #15

[code]for(int i = 0; i < 101; i++) {
for(Player p : Bukkit.getOnlinePlayers()) {
p.sendMessage(” “);
}
}[/code]
mały błąd, bo kopiowałem twój kod i o tym zapomniałem :P


szymhal | 2017-04-13 21:18:54 UTC | #16

Odpowiedzi nie było, naprawiłem. Zdublikowałem int.

@Nieznajomy11, a wiesz co jest może błędem tego chat on i off? Jak wpisuje chat on, to pokazuje się że chat jest już on, a jak wpisuję off, to cały czas moge to wpisywać i variable się nie zmienia.


Nieznajomy11 | 2017-04-13 21:34:24 UTC | #17

= to ustawianie zmiennej, a == to porównywanie.

[code]if (chatStan) {
sender.sendMessage(” §8» §7Czat jest juz §awlaczony§7.”);
} else {
chatStan = true;
sender.sendMessage(” §8» §7Czat zostal §awlaczony§7.”);
Bukkit.getServer().broadcastMessage(” §8» §7Czat zostal §awlaczony§7 przez §cKONSOLE§7.”);
}

if (chatStan) {
chatStan = false;
sender.sendMessage(” §8» §7Czat zostal §cwylaczony§7.”);
Bukkit.getServer().broadcastMessage(” §8» §7Czat zostal §cwylaczony§7 przez §aKONSOLE§7.”);
} else {
sender.sendMessage(” §8» §7Czat jest juz §cwylaczony§7.”);
}[/code]

dodatkowo, if (zmienna) {} to to samo co if (zmienna == true) {}

Notka

if (chatStan = true) {}

przechodzi zawsze, bo ustawienie zmiennej zostało zakończone pomyślnie ;P


luxDev | 2017-04-14 00:21:20 UTC | #18

Poradzili sobie patrz :O :D


system | 2021-02-17 10:26:16 UTC | #19

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.