Chyba - programování

Pokec o čemkoliv ostatním
Message
Autor
WorkiS
Příspěvky: 112
Registrován: 22 pro 2015, 00:08
Reputation: 0

Chyba - programování

#1 Příspěvekod WorkiS » 09 úno 2016, 18:20

Server: 82.208.17.13:27933

Zdravím,

měl bych prosím Vás otázku na to, jak to opravit?
Tedy má to fungovat, tak, že po napsání příkazu /removecoins <jmeno> <pocet> se odečtou coiny z databáze.

RemoveCoinsCMD.java:

Kód: Vybrat vše

package cz.domino.mgcoinsapi.commands;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import cz.domino.mgcoinsapi.MySQL.MGCoinsAPI;

public class RemoveCoinsCMD implements CommandExecutor {
   
   public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
      Player p = (Player) sender;
      
      if (cmd.getName().equalsIgnoreCase("removecoins")) {
         if (p.hasPermission("mgcoinsapi.remove")) {
            if (args.length < 2) {
               sender.sendMessage("Pouziti: /removecoins <jmeno> <pocet>");
            }
            
            if (args.length == 2) {
               Player target = Bukkit.getServer().getPlayer(args[2]);
               int cislo;
               cislo = Integer.parseInt(args[3]);
               MGCoinsAPI.removeCoins(target.getUniqueId().toString(), cislo);
               p.sendMessage("Odebral jsi coiny od hrace " + target.getName().toString() + "!");
            }
         } else {
            p.sendMessage("Na tuto akci nemas opravneni!");
         }
      }
      return false;
   }

}


MGCoinsAPI.java

Kód: Vybrat vše

package cz.domino.mgcoinsapi.MySQL;

import java.sql.ResultSet;
import java.sql.SQLException;

import cz.domino.mgcoinsapi.Main;

public class MGCoinsAPI {
   
   public static boolean playerExists(String uuid) {
      try {
         ResultSet rs = Main.mysql.query("SELECT * FROM Coins WHERE UUID= '" + uuid + "'");
         if (rs.next()) {
            return rs.getString("UUID") != null;
         }
         return false;
      } catch (SQLException e) {
         e.printStackTrace();
      }
      return false;
   }
   
   public static void createPlayer(String uuid) {
      if (!playerExists(uuid)) {
         Main.mysql.update("INSERT INTO Coins(UUID, Coins) VALUES ('" + uuid + "', '0');");
         
         System.out.println("-----------------------------------");
         System.out.println("Vytvářím nového uživatele a předávám do databáze!");
         System.out.println("-----------------------------------");
      }
   }
   
   public static Integer getCoins(String uuid) {
      Integer i = Integer.valueOf(0);
      if (playerExists(uuid)) {
         try {
            ResultSet rs = Main.mysql.query("SELECT * FROM Coins WHERE UUID= '" + uuid + "'");
            if ((rs.next()) && (Integer.valueOf(rs.getInt("Coins")) == null)) {}
            i = Integer.valueOf(rs.getInt("Coins"));
         } catch (SQLException e) {
            e.printStackTrace();
         }
      } else {
         createPlayer(uuid);
         getCoins(uuid);
      }
      return i;
   }
   
   public static void addCoins(String uuid, Integer coins) {
      if (playerExists(uuid)) {
         setCoins(uuid, Integer.valueOf(getCoins(uuid).intValue() + coins.intValue()));
      } else {
         createPlayer(uuid);
         addCoins(uuid, coins);
      }
   }
   
   public static void setCoins(String uuid, Integer coins) {
      if (playerExists(uuid)) {
         Main.mysql.update("UPDATE Coins SET Coins= '" + coins + "' WHERE UUID= '" + uuid + "';");
      } else {
         createPlayer(uuid);
         setCoins(uuid, coins);
      }
   }
   
   public static void removeCoins(String uuid, Integer coins) {
      if (playerExists(uuid)) {
         setCoins(uuid, Integer.valueOf(getCoins(uuid).intValue() - coins.intValue()));
      } else {
         createPlayer(uuid);
         removeCoins(uuid, coins);
      }
   }
}


Chyba:

Spoiler: zobrazit
> > [17:21:48 INFO]: Test issued server command: /removecoins d 100
> [17:21:48 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'removecoins' in plugin MGCoinsAPI v1.0
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_51]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_51]
at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

at java.lang.Thread.run(Thread.java:745) [?:1.8.0_51]
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
at cz.domino.mgcoinsapi.commands.RemoveCoinsCMD.onCommand(RemoveCoinsCMD.java:23) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[minecraft_server.jar:git-Spigot-db6de12-3f3c65f]

... 15 more


Děkuji moc.

// vím, že je nějaký problém určitě s argumenty, ale nevím co s tím.

Smexhy
Příspěvky: 5602
Věk: 25
Registrován: 31 říj 2012, 15:50
Reputation: 20
Bydliště: Slovensko
Kontaktovat uživatele:

Re: Chyba - programování

#2 Příspěvekod Smexhy » 09 úno 2016, 18:28

Nesúvisí s podporou o Minecraft serveri, takže presúvam do offtopicu.

WorkiS
Příspěvky: 112
Registrován: 22 pro 2015, 00:08
Reputation: 0

Re: Chyba - programování

#3 Příspěvekod WorkiS » 09 úno 2016, 18:30

Proč by nesouviselo, jedná se o server, kde mi nejde plugin a v tom pluginu je chyba, tak se radím, nechápu proč by to nemělo souviset s Minecraft serverem + celý ten plugin funguje na MC servery, tak v čem je tedy problém?

WorkiS
Příspěvky: 112
Registrován: 22 pro 2015, 00:08
Reputation: 0

Re: Chyba - programování

#4 Příspěvekod WorkiS » 09 úno 2016, 18:40

Tak jsem tedy změnil target na args 0 a cislo = Integer.... na 2

Díky moc, K+

Uživatelský avatar
DenOwq
Příspěvky: 2703
Věk: 28
Registrován: 06 bře 2014, 21:26
Reputation: 2

Re: Chyba - programování

#5 Příspěvekod DenOwq » 09 úno 2016, 22:39

Jen dodám vysvětlení, co tento error vlastně znamená:
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
  • číslo věci z (array)listu je mimo okraje: 2 je okraj - překlad
  • čtení z tvých argumentu je špatné
Muhahha.

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: Chyba - programování

#6 Příspěvekod Mysteria » 10 úno 2016, 00:53

Překlad z Google Translate je vysvětlení? Jako kdyby jsi mu napsal, že prostě se snaží přistupovat k 4. prvku pole, které má jenom 3 prvky by asi bylo lepší, ne?


Zpět na „Off topic“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti