Spigot - satış komutu envanter hatası

Mucosoft

Megapat
Katılım
5 Mart 2014
Mesajlar
5.508
Makaleler
12
Çözümler
41
Market sistemi kodladım. Markete ürün ekleme, marketten ürün kaldırma ve marketten ürün alma sorunsuz fakat kullanıcılar markete ürün satınca işler biraz daha karmaşıklaşıyor. Çünkü envanter ile ilgili işlemler de mevcut. Burada bazı hatalar yaşadım. Bu kodun nasıl düzeltilmesi gerekiyor? Özellikle envanter ile ilgili kısımda hatanın olduğunu düşünüyorum.

Java:
 else if (args[0].equals("Sat"))
{
if (args.length >= 3)
{
if (Functions.SQLDataControl("select * from market where Name = '"+ args[1] +"'"))
{
if (StringUtils.isNumeric(args[2]))
{
int Value = Integer.parseInt(args[2]);
if (Value > 0)
{
double MyMoney = Double.parseDouble(Functions.SQLSingleRead("select * from users where MinecraftUsername = '"+ Username +"'", "money"));
double MoneyValue = Double.parseDouble(Functions.SQLSingleRead("select * from market where Name = '"+ args[1] +"'", "Sell"));
double CurrencyValue = Double.parseDouble(Functions.SQLSingleRead("select * from currency where ID = 1", "Money"));
String ProductCode = Functions.SQLSingleRead("select * from market where Name = '"+ args[1] +"'", "Product");
getLogger().info("[Ekonomi] " + Username + " -> " + MyMoney + "\nMucosoft Lirası Miktarı -> " + CurrencyValue);
double TotalMoney = MoneyValue * Value;
if (CurrencyValue > TotalMoney)
{
Player Pl = (Player) Sender;
PlayerInventory Inv = Pl.getInventory();
ItemStack[] Items = Inv.getContents();
int InvCount = 0;
for (ItemStack Item : Items)
{
if (Item != null & Item.getAmount() > 0 & Item.getType().name() == ProductCode)
{
InvCount += Item.getAmount();
Inv.remove(Item);
}
}
if (InvCount > 0)
{
int Dif = InvCount - Value;
if (Dif > 0)
{
Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "give "+ Username +" "+ ProductCode +" "+ Dif);
}
MyMoney += TotalMoney;
CurrencyValue -= TotalMoney;
Functions.SQLExecute("update currency set Money = "+ CurrencyValue +" where ID = 1");
Functions.SQLExecute("update users set money = "+ MyMoney +" where MinecraftUsername = '"+ Username +"'");
MinecraftFunctions.SendMsg(Sender, MsgType.Info, "Ürünü başarılı bir şekilde sattın.");
}
else.
{
MinecraftFunctions.SendMsg(Sender, MsgType.Error, "Ürünü satmak için envanterinde en az 1 adet bulunmalı.");
}
}
else.
{
MinecraftFunctions.SendMsg(Sender, MsgType.Error, "Toplam değer piyasadaki para miktarından fazla. Piyasadaki para miktarı " + CurrencyValue + " ML olarak yer alıyor.");
}
}
else.
{
MinecraftFunctions.SendMsg(Sender, MsgType.Error, "Miktar 0'dan büyük olmalı.");
}
}
else.
{
MinecraftFunctions.SendMsg(Sender, MsgType.Error, "Hatalı sayı formatı girildi.");
}
}
else.
{
MinecraftFunctions.SendMsg(Sender, MsgType.Error, "Ürün markette bulunmuyor.");
}
}
else.
{
MinecraftFunctions.SendMsg(Sender, MsgType.Error, NoArg);
}
}
else.
{
MinecraftFunctions.SendMsg(Sender, MsgType.Error, NoArg);
}
 
Kodunuz çok nahif sütunlar üzerinde duruyor.
Özellikle concat ile oluşturulmuş SQL ifadeleri.
Zincir şeklinde if-else'ler. Neredeyse her şeyi tek bir methodun yapıyor oluşu.
Bir biri ile alakasız işlemlerin yan yana yer alıyor oluşu. (Lack of Cohesion)
 
Son düzenleme:
SQL Injection yer gibi duruyor bu kod.
Ne gibi sorunlar yasiyorsun, problem nedir tam olarak?
Spigot kütüphanesine hakim olanların anlayabileceği sorunlar. Çünkü kod sorunsuz fakat Spigot kütüphanesinde yer alan envanter olayı hata veriyor. Verdiği hatayı da atayım.

Java:
[12:51:23] [Server thread/INFO]: ToprakBot28 issued server command: /Market Sat Ta? 1
[12:51:23] [Server thread/INFO]: [Mucosoft] [Ekonomi] ToprakBot28 -> 1.0
Mucosoft Liras? Miktar? -> 10009.0
[12:51:23] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'market' in plugin Mucosoft v1.0
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at org.bukkit.craftbukkit.v1_16_R3.CraftServer.dispatchCommand(CraftServer.java:763) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.PlayerConnection.handleCommand(PlayerConnection.java:1788) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.PlayerConnection.c(PlayerConnection.java:1631) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1584) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(SourceFile:144) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(SourceFile:118) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:942) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:935) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(SourceFile:127) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:919) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:851) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_201]
Caused by: java.lang.NullPointerException
    at Plugin.Main.onCommand(Main.java:234) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[sunucu.jar:2991-Spigot-018b9a0-f3f3094]
    ... 19 more
Kodunuz çok nahif sütunlar üzerinde duruyor.
Özellikle concat ile oluşturulmuş SQL ifadeleri.
Zincir şeklinde if-else'ler. Neredeyse her şeyi tek bir methodun yapıyor oluşu.
Bir biri ile alakasız işlemlerin yan yana yer alıyor oluşu. (Lack of Cohesion)
Üzdün. 🥲
 

Yeni konular

Geri
Yukarı