Skocz do zawartości
  • 0

błąd w pobieraniu daty


Virosel

Pytanie

Cześć, 

 

w pluginie na bany(i ogólnie kary) w komendzie tempmute podczas jej używania na konsoli wyświetla się taki błąd:

[22:02:05 INFO]: VIROZ_PL issued server command: /tempmute VIROZ_PL 1d e
[22:02:05 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'tempmute' in plugin bans v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_261]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_261]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_261]
Caused by: java.lang.NullPointerException
        at java.util.Objects.requireNonNull(Unknown Source) ~[?:1.8.0_261]
        at pl.jaqubiaq.bans.Commands.tempmutecommand.onCommand(tempmutecommand.java:116) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        ... 15 more
>

 

tutaj kod klasy tempmutecommand: 

co dziwne, tabelka sie tworzy :/ 

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Odnośnik do komentarza
Udostępnij na innych stronach

4 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Błąd jest raczej w DBUtil pewnie null a użyłeś Objects.requireNonNull, dlatego wyrzuca ci błąd, najlepiej pokaż tego utila. Co do kodu jest on stasznie nie czytelny pozwolę sobie, się trochę rozpisać.

1. Nazwy paczek (package) powinny być małą literą.

2. Jeżeli tworzysz klase to nazwe zrób zgodną z PascalCase np (TempBanCommand)

3. Nie powinno się mieszać polskiego i angielskiego.

4. Cały czas pobierasz wszystko z configu, zamiast załadować go przy starcie serwera Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!.

5. Tutaj ewidentnie kłaniają się podstawy Javy.

if(args.length == 0 | args.length == 1) {
}
if (args.leght < 2){
}

6. Ten kod możesz uprościć używając metody join() z StringUtils.

StringBuilder powod = new StringBuilder();
for(int i = 2; i < args.length; i++){
   powod.append(args[i]).append(" ");
}
if(powod.length()==0) powod = new StringBuilder("Nie podano");
powod = new StringBuilder(powod.toString().trim());
String reason = "Brak";

if (args.length > 2){
  reason = StringUtils.join(args, " ", 2, args.length);
}

7. Tak samo ten od gracza, 2 razy używasz Bukkit.getPlayerExact()

            if(Bukkit.getPlayerExact(args[0])==null){
                sender.sendMessage("nie znaleziono gracza");
                return true;
            }
            UUID id = Bukkit.getPlayerExact(args[0]).getUniqueId();
final Optional<Player> player = Optional.ofNullable(Bukkit.getPlayer(args[0]));

if (!player.isPresent()){
    sender.sendMessage("Gracz jest offline!");
    return false;
}

uuid pobierasz wtedy player.get().getUniqueId();

8. kod który wyznacza ci czas blokady jest taki sam w 4 klasach (tak zgaduje), lepiej zrobić utila w którym dasz sobie ten kod i nie będzie on powtarzany 4 razy.

Edytowane przez Sneyrox
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

 wyzej jest kod managera, a nizej kod z utila:

 

a co do pierwszych trzech punktów, to ten plugin jest przeze mnie teraz przerabiany pod baze danych z YML'a i jest to generalnie stosunkowo stary plugin,

a w aktualnie pisanych przeze mnie pluginach uzywam juz loadera do configu (twoj 4 pkt.)

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

czyli to powinno dzialac, tak? (dalej jest to samo, co w kodach, ktore podeslalem wyzej)

 

EDIT: Działa, wkleiłem to do banow, mute'ow i wszystkiego, ale co zrobic, aby dalo sie nadac bana/mute'a itd.. graczom offline, ktorzy grali na serwerze?

Edytowane przez Virosel
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
9 godzin temu, Virosel napisał:

czyli to powinno dzialac, tak? (dalej jest to samo, co w kodach, ktore podeslalem wyzej)

 

EDIT: Działa, wkleiłem to do banow, mute'ow i wszystkiego, ale co zrobic, aby dalo sie nadac bana/mute'a itd.. graczom offline, ktorzy grali na serwerze?

 Tego nie zrobisz w taki sposób najlepiej to zbanować nick gracza i później sprawdzać, czy taka osoba jest na serwerze i wtedy kick.

Co do twojego DBUtila to nie jest za dobry, jest to tak samo, jak z ładowaniem itemStackow przy starcie serwera. Do tego musisz wiedzieć na czym polega Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!  I użyć tego w twoim kodzie, bo jest optymalne pobierać np. powód z pamięci pluginu, a nie obciążać bazę danym kolejnym zapytaniem. 

Tworzysz objekt Ban:

public class Ban {
	
  private final String name;
  private final String reason;

  public Ban(String name, String reason){
    this.name = name;
    this.reason = reason;
  }

  //tworzysz sobie tutaj gettery do wszystkich pól 
 
  public String getName(){ 
    return this.name;
  }
}

Później tworzysz klasę BanManager, w której głównym polem jest Lista lub Mapa, w której przetrzymujesz pamięć. Tworzysz sobie metody takie jak createBan, removeBan i getBan. Do tego w jakiejś klasie przy każdym włączaniu pluginu ładujesz bazę danych za pomocą ResultSet dodając objekt do managera. Co do błędu z tematu usuń po prostu Objects.requireNonNull i w metodzie od czasu, zamiast nulla powinieneś wpisać 0L. Nie chce ci już więcej dawać wszystkiego na tacy, jak nie będziesz dawał rady to poszukaj na githubie coś z bazą danych, a w ostateczności napisz tutaj / lub nowy temat.

Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...