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

Plugin na RTP wywala dziwne błędy


KaPeGie

Rekomendowane odpowiedzi

Opublikowano

Witam,

ostatnio zacząłem pisać pluginy i podjąłem się zadania zrobienia pluginu na RandomTP.

Niestety po napisaniu wywala mi błędy w konsoli i wyłącza mi się wtedy serwer.

Nie ma żadnych błędów w eclipse.

 

PLUGIN:

 

MAIN:

Spoiler

package com.gmail.kapegie26.KPGrtp;

import org.bukkit.plugin.java.JavaPlugin;

import com.gmail.kapegie26.KPGrtp.Commands.Commands;

public class Main extends JavaPlugin{

	@Override
	public void onEnable() {
		
		//Config
		getConfig().options().copyDefaults(true);
		saveConfig();
		
		//Commands
		getCommand("randomtp").setExecutor(new Commands());
		
	}
	
	@Override
	public void onDisable() {
		
	}
	
}

 

 

COMMANDS:

Spoiler

package com.gmail.kapegie26.KPGrtp.Commands;

import java.util.Random;

import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Commands extends JavaPlugin implements CommandExecutor{

	//RandomTeleport
		public double getRandom(double lower, double upper) {
			
	        double random = new Random().nextDouble();
	        double result = lower + (random * (upper - lower));
	        
	        return result;
	        
	    }
	
	//Permission: rtp.cmd
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if (cmd.getName().equalsIgnoreCase("randomtp")) {
			if (sender.hasPermission("rtp.cmd")) {
				
				double x = Double.parseDouble(getConfig().getString("RandomTP.region"));
				double ymin = Double.parseDouble(getConfig().getString("RandomTP.heightMIN"));
				double ymax = Double.parseDouble(getConfig().getString("RandomTP.heightMAX"));
				double z = Double.parseDouble(getConfig().getString("RandomTP.region"));
				
				double TeleportX = getRandom(0, x);
				double TeleportY = getRandom(ymin, ymax);
				double TeleportZ = getRandom(0, z);
				
				Player player = (Player) sender;
				World world = player.getWorld();
				Location location = new Location(world, TeleportX, TeleportY, TeleportZ);
				
				player.teleport(location);
				player.sendMessage(getConfig().getString("RandomTP.tag") + " " + getConfig().getString("RandomTP.message") + " " + getConfig().getString("RandomTP.X") + " " + TeleportX + getConfig().getString("RandomTP.Y") + " " + TeleportY + getConfig().getString("RandomTP.Z") + " " + TeleportZ);
				
				return true;
			}
			return false;
		}
		return false;
	}
	
}

 

 

PLUGIN.YML:

Spoiler

name: KPGrtp
main: com.gmail.kapegie26.KPGrtp.Main
version: 1.0
author: KaPeGie

permissions:
  rtp.cmd:
    description: Pozwala uzyc RTP komenda

commands:
  randomtp:
    description: Tepa na losowe kordy
    permission: rtp.cmd
    permission-message: Nie masz permisji!    
  

 

 

CONFIG.YML:

Spoiler

 


RandomTP:
  region: 3000
  heightMIN: 64
  heightMAX: 100
  tag: §7[§aRandom§bTP§7]
  message: §2Zostales przeteleportowany na§7:
  X: §bX§7:
  Y: §bY§7:
  Z: §bZ§7:

 

CRASH REPORT + BŁĘDY:

Spoiler

---- Minecraft Crash Report ----
// Don't be sad. I'll do better next time, I promise!

Time: 30.03.2019, 09:49
Description: Exception in server tick loop

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1
	at com.google.gson.Gson.fromJson(Gson.java:815)
	at com.google.gson.Gson.fromJson(Gson.java:768)
	at net.minecraft.server.v1_8_R3.JsonList.load(JsonList.java:172)
	at net.minecraft.server.v1_8_R3.DedicatedPlayerList.z(SourceFile:99)
	at net.minecraft.server.v1_8_R3.DedicatedPlayerList.<init>(SourceFile:25)
	at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:179)
	at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:504)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1
	at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338)
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:79)
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)
	at com.google.gson.Gson.fromJson(Gson.java:803)
	... 7 more


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- System Details --
Details:
	Minecraft Version: 1.8.8
	Operating System: Windows 10 (amd64) version 10.0
	Java Version: 10.0.2, Oracle Corporation
	Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), "Oracle Corporation"
	Memory: 1033484368 bytes (985 MB) / 1073741824 bytes (1024 MB) up to 1073741824 bytes (1024 MB)
	JVM Flags: 2 total; -Xms1024M -Xmx1024M
	IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
	CraftBukkit Information: 
   Running: CraftBukkit version git-Bukkit-18fbb24 (MC: 1.8.8) (Implementing API version 1.8.8-R0.1-SNAPSHOT) true
   Plugins: { KPGrtp v1.0 com.gmail.kapegie26.KPGrtp.Main [KaPeGie],}
   Warnings: DEFAULT
   Reload Count: 0
   Threads: { WAITING NonBlockingInputStreamThread: [[email protected]/java.lang.Object.wait(Native Method), app//org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.run(NonBlockingInputStream.java:278), [email protected]/java.lang.Thread.run(Unknown Source)], RUNNABLE Reference Handler: [[email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method), [email protected]/java.lang.ref.Reference.processPendingReferences(Unknown Source), [email protected]/java.lang.ref.Reference.access$000(Unknown Source), [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)], RUNNABLE Netty Server IO #0: [[email protected]/sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method), [email protected]/sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(Unknown Source), [email protected]/sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(Unknown Source), [email protected]/sun.nio.ch.WindowsSelectorImpl.doSelect(Unknown Source), [email protected]/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source), [email protected]/sun.nio.ch.SelectorImpl.select(Unknown Source), app//io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:622), app//io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:310), app//io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116), [email protected]/java.lang.Thread.run(Unknown Source)], RUNNABLE Server console handler: [app//org.fusesource.jansi.internal.Kernel32.ReadConsoleInputW(Native Method), app//org.fusesource.jansi.internal.Kernel32.readConsoleInputHelper(Kernel32.java:761), app//org.fusesource.jansi.internal.Kernel32.readConsoleKeyInput(Kernel32.java:794), app//org.fusesource.jansi.internal.WindowsSupport.readConsoleInput(WindowsSupport.java:97), app//org.bukkit.craftbukkit.libs.jline.WindowsTerminal.readConsoleInput(WindowsTerminal.java:215), app//org.bukkit.craftbukkit.libs.jline.WindowsTerminal.access$000(WindowsTerminal.java:55), app//org.bukkit.craftbukkit.libs.jline.WindowsTerminal$1.read(WindowsTerminal.java:157), app//org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:169), app//org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:137), app//org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read(NonBlockingInputStream.java:246), app//org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:261), app//org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:198), app//org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readCharacter(ConsoleReader.java:2145), app//org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:2349), app//net.minecraft.server.v1_8_R3.DedicatedServer$2.run(DedicatedServer.java:78)], RUNNABLE Attach Listener: [], TIMED_WAITING Server Infinisleeper: [[email protected]/java.lang.Thread.sleep(Native Method), app//net.minecraft.server.v1_8_R3.DedicatedServer$1.run(DedicatedServer.java:53)], TIMED_WAITING Common-Cleaner: [[email protected]/java.lang.Object.wait(Native Method), [email protected]/java.lang.ref.ReferenceQueue.remove(Unknown Source), [email protected]/jdk.internal.ref.CleanerImpl.run(Unknown Source), [email protected]/java.lang.Thread.run(Unknown Source), [email protected]/jdk.internal.misc.InnocuousThread.run(Unknown Source)], RUNNABLE DestroyJavaVM: [], WAITING Finalizer: [[email protected]/java.lang.Object.wait(Native Method), [email protected]/java.lang.ref.ReferenceQueue.remove(Unknown Source), [email protected]/java.lang.ref.ReferenceQueue.remove(Unknown Source), [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)], RUNNABLE Server thread: [[email protected]/java.lang.Thread.dumpThreads(Native Method), [email protected]/java.lang.Thread.getAllStackTraces(Unknown Source), app//org.bukkit.craftbukkit.v1_8_R3.CraftCrashReport.call(CraftCrashReport.java:29), app//net.minecraft.server.v1_8_R3.CrashReportSystemDetails.a(SourceFile:78), app//net.minecraft.server.v1_8_R3.CrashReport.h(CrashReport.java:127), app//net.minecraft.server.v1_8_R3.CrashReport.<init>(CrashReport.java:34), app//net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:554), [email protected]/java.lang.Thread.run(Unknown Source)], RUNNABLE Signal Dispatcher: [], RUNNABLE Thread-4: [[email protected]/java.io.FileOutputStream.writeBytes(Native Method), [email protected]/java.io.FileOutputStream.write(Unknown Source), [email protected]/java.io.BufferedOutputStream.flushBuffer(Unknown Source), [email protected]/java.io.BufferedOutputStream.flush(Unknown Source), [email protected]/java.io.PrintStream.write(Unknown Source), app//org.fusesource.jansi.AnsiOutputStream.write(AnsiOutputStream.java:82), [email protected]/java.io.FilterOutputStream.write(Unknown Source), [email protected]/java.io.PrintStream.write(Unknown Source), [email protected]/java.io.FilterOutputStream.write(Unknown Source), app//org.bukkit.craftbukkit.v1_8_R3.util.TerminalConsoleWriterThread.run(TerminalConsoleWriterThread.java:34), [email protected]/java.lang.Thread.run(Unknown Source)], WAITING Snooper Timer: [[email protected]/java.lang.Object.wait(Native Method), [email protected]/java.lang.Object.wait(Unknown Source), [email protected]/java.util.TimerThread.mainLoop(Unknown Source), [email protected]/java.util.TimerThread.run(Unknown Source)],}
   Recent tasks from -31--1{}
	Profiler Position: N/A (disabled)
	Is Modded: Definitely; Server brand changed to 'CraftBukkit'
	Type: Dedicated Server (map_server.txt)

 

 

Opublikowano

no blad to taki troche niepypowy i zwiazany z gsonem :l , ogolnie jest tak ze mowisz do gsona aby zrobil  liste a tu czary mary jest String ...
 

kiedy wywala blad ?

nie wiem czego to wina :l ale 2 rzeczy ktore mozesz zrobic i ktore moga sypac .
- 1.8... czy t wymaga komentarza ?  kurde ludzie mamy 2019 rok i wersje 1.13 !!! 1.13 to bedzie dobre 4 AKTUALIZACJE w stosunku do 1.8

- mozliwe ze cos skopane w pliku konfiguracyjnym , ale nie wiem ,  raczej bukkitowy yaml jest idioto odporny ale kto wie , jak to jest ten blad to sprobuj wygenerowac config kodem

- DEBUGUJ masz blad debugujesz i widzisz ktora linijka sypie i co sie poklei dzieje

 

teraz czepie sie kodu

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/command/CommandExecutor.html

if (cmd.getName().equalsIgnoreCase("randomtp")) { 

cmd.getName() <- metoda zwraca NAZWE komendy a jako nazwe mam na mysli /nazwa cos cos cos
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/command/Command.html

oczywiscie chodzi o nazwe faktyczna nie aliasy , alias jest obok jako stringus

boolean onCommand(@NotNull
                  CommandSender sender,
                  @NotNull
                  Command command,
                  @NotNull
                  String label,
                  @NotNull
                  String[] args)

Executes the given command, returning its success.
If false is returned, then the "usage" plugin.yml entry for this command (if defined) will be sent to the player.

Parameters:
    sender - Source of the command
    command - Command which was executed
    label - Alias of the command which was used
    args - Passed command arguments
Returns:
    true if a valid command, otherwise false 

więc jesli rejestrujesz JEDEN OBIEKT dla JEDNEJ komendy sprawdzanie tego jest raczej zbedne bo tylko jedna komenda jest przypisana do "executora" wykonawcy ,

 

double x = Double.parseDouble(getConfig().getString("RandomTP.region"));

a co tu jest dziwne :? popaczmy w dokumentacje

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/configuration/file/FileConfiguration.html

a dokladniej o tutaj

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/configuration/ConfigurationSection.html#getDouble-java.lang.String-double-

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/configuration/ConfigurationSection.html#getString-java.lang.String-

a wiec bez problemow mozna z Fileconfiguration wyciagnac typy proste jak i cale obiekty , a wiec mozna zrobic getDouble("PAHTH) , a stringa moze wcale nie odszukac (nie wiem jak to jest konkretnie zrobione a nigdy tego nie sprawdzalem  ) bo i po co ladowac do pamieci dwa razy to samo jako string i jako liczbe , ogolnie jest tak ze jesli wpiszesz liczbe to zostanie to wczytane jako liczba a jak chcesz stringa to dajesz go w '' .



 

Opublikowano
8 godzin temu, damianq20 napisał:

no blad to taki troche niepypowy i zwiazany z gsonem :l , ogolnie jest tak ze mowisz do gsona aby zrobil  liste a tu czary mary jest String ...
 

kiedy wywala blad ?

nie wiem czego to wina :l ale 2 rzeczy ktore mozesz zrobic i ktore moga sypac .
- 1.8... czy t wymaga komentarza ?  kurde ludzie mamy 2019 rok i wersje 1.13 !!! 1.13 to bedzie dobre 4 AKTUALIZACJE w stosunku do 1.8

- mozliwe ze cos skopane w pliku konfiguracyjnym , ale nie wiem ,  raczej bukkitowy yaml jest idioto odporny ale kto wie , jak to jest ten blad to sprobuj wygenerowac config kodem

- DEBUGUJ masz blad debugujesz i widzisz ktora linijka sypie i co sie poklei dzieje

 

teraz czepie sie kodu

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/command/CommandExecutor.html

if (cmd.getName().equalsIgnoreCase("randomtp")) { 

cmd.getName() <- metoda zwraca NAZWE komendy a jako nazwe mam na mysli /nazwa cos cos cos
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/command/Command.html

oczywiscie chodzi o nazwe faktyczna nie aliasy , alias jest obok jako stringus


boolean onCommand(@NotNull
                  CommandSender sender,
                  @NotNull
                  Command command,
                  @NotNull
                  String label,
                  @NotNull
                  String[] args)

Executes the given command, returning its success.
If false is returned, then the "usage" plugin.yml entry for this command (if defined) will be sent to the player.

Parameters:
    sender - Source of the command
    command - Command which was executed
    label - Alias of the command which was used
    args - Passed command arguments
Returns:
    true if a valid command, otherwise false 

więc jesli rejestrujesz JEDEN OBIEKT dla JEDNEJ komendy sprawdzanie tego jest raczej zbedne bo tylko jedna komenda jest przypisana do "executora" wykonawcy ,

 

double x = Double.parseDouble(getConfig().getString("RandomTP.region"));

a co tu jest dziwne :? popaczmy w dokumentacje

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/configuration/file/FileConfiguration.html

a dokladniej o tutaj

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/configuration/ConfigurationSection.html#getDouble-java.lang.String-double-

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/configuration/ConfigurationSection.html#getString-java.lang.String-

a wiec bez problemow mozna z Fileconfiguration wyciagnac typy proste jak i cale obiekty , a wiec mozna zrobic getDouble("PAHTH) , a stringa moze wcale nie odszukac (nie wiem jak to jest konkretnie zrobione a nigdy tego nie sprawdzalem  ) bo i po co ladowac do pamieci dwa razy to samo jako string i jako liczbe , ogolnie jest tak ze jesli wpiszesz liczbe to zostanie to wczytane jako liczba a jak chcesz stringa to dajesz go w '' .



 

Dzięki, że odpisałeś. Jakieś 30 min temu dowiedziałem się, że ten błąd to wina serwera, a nie pluginu. W nim był tylko 1 błąd który naprawiłem,a plugin polepszyłem, by nie zapisywało się do pamięci coś 2 razy :)

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...