Stránka 1 z 1

Chyba - programování

Napsal: 09 úno 2016, 18:20
od WorkiS
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.

Re: Chyba - programování

Napsal: 09 úno 2016, 18:28
od Smexhy
Nesúvisí s podporou o Minecraft serveri, takže presúvam do offtopicu.

Re: Chyba - programování

Napsal: 09 úno 2016, 18:30
od WorkiS
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?

Re: Chyba - programování

Napsal: 09 úno 2016, 18:40
od WorkiS
Tak jsem tedy změnil target na args 0 a cislo = Integer.... na 2

Díky moc, K+

Re: Chyba - programování

Napsal: 09 úno 2016, 22:39
od DenOwq
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é

Re: Chyba - programování

Napsal: 10 úno 2016, 00:53
od Mysteria
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?