Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
Здравствуйте, пытаюсь создать торговый инвентарь, но он почему то не хочет открываться, вот тестовый код:
Код:
Bukkit.getServer().getLogger().info("market - 3");
String name = "Торговец";
Inventory i = Bukkit.getServer().createInventory(null, InventoryType.MERCHANT, name);
ItemStack i1 = new ItemStack(Material.APPLE);
i1.setAmount(10);
ItemStack i2 = new ItemStack(Material.BONE);
i2.setAmount(2);
ItemStack i3 = new ItemStack(Material.DIAMOND_AXE);
i3.setAmount(1);
Bukkit.getServer().getLogger().info("market - 4 "+i.getType());
ItemStack[] recipe = new ItemStack[3];
recipe[0] = i1;
recipe[1] = i2;
recipe[2] = i3;
i.setContents(recipe);
Bukkit.getServer().getLogger().info("market - 5 "+i.getName());
player.openInventory(i);
Bukkit.getServer().getLogger().info("market - 7 "+i.getTitle());
Все проверочные сообщения в консоль отрабатывают, ошибок нет, но инвентарь не открывается.
Ради интереса пробовал дублировать и открывать инвентарь игрока, он открывается без проблем, а этот, новый никак не хочет, что я делаю неправильно, подскажите?
Хочу еще спросить, как бы вы посоветовали сохранять торговые наборы в БД, вот у меня класс, слизан с вашего:
Код:
public class Trade {
private ItemStack item1;
private ItemStack item2;
private ItemStack rewardItem;
public Trade(ItemStack item1, ItemStack item2, ItemStack rewardItem) {
this.item1 = item1;
this.item2 = item2;
this.rewardItem = rewardItem;
}
public Trade(ItemStack item1, ItemStack rewardItem) {
this.item1 = item1;
this.rewardItem = rewardItem;
}
public boolean hasItem2() {
return this.item2 != null;
}
public ItemStack getItem1() {
return this.item1;
}
public ItemStack getItem2() {
return this.item2;
}
public ItemStack getRewardItem() {
return this.rewardItem;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((rewardItem == null) ? 0 : rewardItem.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Trade other = (Trade) obj;
if (rewardItem == null) {
if (other.rewardItem != null)
return false;
} else if (!rewardItem.equals(other.rewardItem))
return false;
return true;
}
@Override
public String toString() {
return "Trade [item1=" + item1 + ", item2=" + item2 + ", rewardItem=" + rewardItem + "]";
}
}
Я для сохранения торгового набора в БД, пытаюсь их преобразовать в строку Json:
Код:
public String stringTrades(List<Trade> trs) {
if (trs==null || trs.isEmpty()) return "";
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
String json = gson.toJson(trs);
return json;
}
И у меня куча ошибок именно в процессе преобразования, на этой строке: String json = gson.toJson(trs);
Пробовал самые разные способы, даже создавал класс Сериализации, всегда одно и то же:
[02:18:59] [Server thread/INFO]: Korvinius issued server command: /my addtrade Storm
[02:18:59] [Server thread/INFO]: + 1
[02:18:59] [Server thread/INFO]: + 2
[02:18:59] [Server thread/INFO]: + 3
[02:18:59] [Server thread/INFO]: + 4
[02:18:59] [Server thread/INFO]: + 5
[02:18:59] [Server thread/INFO]: + 6
[02:18:59] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'my' in plugin Mystery v0.7.5.7
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1397) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1232) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_151]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_151]
at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
Caused by: java.lang.StackOverflowError
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google
Здесь очень много точно такого же .....
потом
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:158) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
такого тоже очень много...
Может я что то делаю не правильно или есть другой способ преобразовать набор торгов в строку, для сохранение в бд SQLite
Cамое странное, что подобные способы преобразования других классов и коллекций классов, я использую много раз, там все нормально, а вот именно в этом случае чего то не хочет работать
Хочу еще спросить, как бы вы посоветовали сохранять торговые наборы в БД, вот у меня класс, слизан с вашего:
Код:
public class Trade {
private ItemStack item1;
private ItemStack item2;
private ItemStack rewardItem;
public Trade(ItemStack item1, ItemStack item2, ItemStack rewardItem) {
this.item1 = item1;
this.item2 = item2;
this.rewardItem = rewardItem;
}
public Trade(ItemStack item1, ItemStack rewardItem) {
this.item1 = item1;
this.rewardItem = rewardItem;
}
public boolean hasItem2() {
return this.item2 != null;
}
public ItemStack getItem1() {
return this.item1;
}
public ItemStack getItem2() {
return this.item2;
}
public ItemStack getRewardItem() {
return this.rewardItem;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((rewardItem == null) ? 0 : rewardItem.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Trade other = (Trade) obj;
if (rewardItem == null) {
if (other.rewardItem != null)
return false;
} else if (!rewardItem.equals(other.rewardItem))
return false;
return true;
}
@Override
public String toString() {
return "Trade [item1=" + item1 + ", item2=" + item2 + ", rewardItem=" + rewardItem + "]";
}
}
Я для сохранения торгового набора в БД, пытаюсь их преобразовать в строку Json:
Код:
public String stringTrades(List<Trade> trs) {
if (trs==null || trs.isEmpty()) return "";
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
String json = gson.toJson(trs);
return json;
}
И у меня куча ошибок именно в процессе преобразования, на этой строке: String json = gson.toJson(trs);
Пробовал самые разные способы, даже создавал класс Сериализации, всегда одно и то же:
[02:18:59] [Server thread/INFO]: Korvinius issued server command: /my addtrade Storm
[02:18:59] [Server thread/INFO]: + 1
[02:18:59] [Server thread/INFO]: + 2
[02:18:59] [Server thread/INFO]: + 3
[02:18:59] [Server thread/INFO]: + 4
[02:18:59] [Server thread/INFO]: + 5
[02:18:59] [Server thread/INFO]: + 6
[02:18:59] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'my' in plugin Mystery v0.7.5.7
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1397) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1232) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_151]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_151]
at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
Caused by: java.lang.StackOverflowError
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google
Здесь очень много точно такого же .....
потом
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:158) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.getAdapter(Gson.java:423) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
такого тоже очень много...
Может я что то делаю не правильно или есть другой способ преобразовать набор торгов в строку, для сохранение в бд SQLite
Cамое странное, что подобные способы преобразования других классов и коллекций классов, я использую много раз, там все нормально, а вот именно в этом случае чего то не хочет работать
Нет, он за абстракцией, ток ручками. У стака даже yml серилизатор не полный, хотя уже лучше в 1.13, начал понимать атрибуты. Но тег головы со скином все еще не знает и тег инструентов для приключения .
public class MyItem {
private Material type;
private MaterialData data;
private List<String> lore = new ArrayList<>();
private String displayName;
private Map<Enchantment, Integer> enchantment = new HashMap<>();
private int amount;
public MyItem(Material type, int amount) {
super();
this.type = type;
this.amount = amount;
}
public MyItem(Material type, MaterialData data, List<String> lore, String displayName,
Map<Enchantment, Integer> enchantment, int amount) {
super();
this.type = type;
this.data = data;
this.lore = lore;
this.displayName = displayName;
this.enchantment = enchantment;
this.amount = amount;
}
public Material getType() {
return type;
}
public void setType(Material type) {
this.type = type;
}
public MaterialData getData() {
return data;
}
public void setData(MaterialData data) {
this.data = data;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public Map<Enchantment, Integer> getEnchantments() {
return enchantment;
}
public void setEnchantments(Map<Enchantment, Integer> ench) {
this.enchantment = ench;
}
public List<String> getLore() {
return lore;
}
public void setLore(List<String> lore) {
this.lore = lore;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + amount;
result = prime * result + ((data == null) ? 0 : data.hashCode());
result = prime * result + ((displayName == null) ? 0 : displayName.hashCode());
result = prime * result + ((enchantment == null) ? 0 : enchantment.hashCode());
result = prime * result + ((lore == null) ? 0 : lore.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyItem other = (MyItem) obj;
if (amount != other.amount)
return false;
if (data == null) {
if (other.data != null)
return false;
} else if (!data.equals(other.data))
return false;
if (displayName == null) {
if (other.displayName != null)
return false;
} else if (!displayName.equals(other.displayName))
return false;
if (enchantment == null) {
if (other.enchantment != null)
return false;
} else if (!enchantment.equals(other.enchantment))
return false;
if (lore == null) {
if (other.lore != null)
return false;
} else if (!lore.equals(other.lore))
return false;
if (type != other.type)
return false;
return true;
}
@Override
public String toString() {
return "MyItem [type=" + type + ", data=" + data + ", lore=" + lore + ", displayName=" + displayName
+ ", enchantment=" + enchantment + ", amount=" + amount + "]";
}
}
Метод преобразования:
Код:
public static MyItem getItemStack(ItemStack i) {
MyItem item = new MyItem(i.getType(), i.getAmount());
if (i.getData() != null) item.setData(i.getData());
if (i.hasItemMeta()) {
if (i.getItemMeta().getDisplayName()!=null)
item.setDisplayName(i.getItemMeta().getDisplayName());
if (i.getItemMeta().getLore() != null && !i.getItemMeta().getLore().isEmpty())
item.setLore(i.getItemMeta().getLore());
}
if (!i.getEnchantments().isEmpty()) item.setEnchantments(i.getEnchantments());
return item;
}
Метод обратного преобразования:
Код:
public static ItemStack getItem(MyItem i) {
ItemStack item = new ItemStack(i.getType(), i.getAmount());
if (i.getData() != null) item.setData(i.getData());
if (i.getDisplayName() != null)
item.getItemMeta().setDisplayName(i.getDisplayName());
if (i.getLore() != null && !i.getLore().isEmpty())
item.getItemMeta().setLore(i.getLore());
if (i.getEnchantments() != null && !i.getEnchantments().isEmpty()) {
for(Entry<Enchantment, Integer> entry : i.getEnchantments().entrySet()) {
item.addUnsafeEnchantment(entry.getKey(), entry.getValue());
}
}
return item;
}
Первое, что меня смущает, это обратное преобразование, походу я неправильно сделал с ItemMeta так как в предметях с DisplayName и Lore, в переменную и базу они передаются нормально, а в обратном преобразовании теряются.
Запись в базу проходит нормально, вот как этот объект там выглядит:
public List<Trade> getTrades(String str) {
List<Trade> trs = new ArrayList<>();
if (isStringNull(str)) return trs;
Trade[] mcArray = new Gson().fromJson(str, Trade[].class);
trs = new ArrayList<>(Arrays.asList(mcArray));
return trs;
}
И второе, здесь, опять вылазит ошибка, по идее там еще что то с получением зачарований в объект Trade из строки Json у меня не правильно:
[02:24:51] [Server thread/INFO]: [Mystery] Enabling Mystery v0.7.5.7
[02:24:51] [Server thread/ERROR]: Error occurred while enabling Mystery v0.7.5.7 (Is it up to date?)
java.lang.RuntimeException: Unable to invoke no-args constructor for class org.bukkit.enchantments.Enchantment. Register an InstanceCreator with Gson for this type may fix this problem.
at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:226) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:210) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:186) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.fromJson(Gson.java:887) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.fromJson(Gson.java:852) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.fromJson(Gson.java:801) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.Gson.fromJson(Gson.java:773) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.wealth_mc.mystery.db.MyTradeSQLite.getTrades(MyTradeSQLite.java:115) ~[?:?]
at net.wealth_mc.mystery.db.MyTradeSQLite.getTradesmansDB(MyTradeSQLite.java:59) ~[?:?]
at net.wealth_mc.mystery.eco.TradesWork.getTradesmanDB(TradesWork.java:209) ~[?:?]
at net.wealth_mc.mystery.Mystery.loadConfMystery(Mystery.java:250) ~[?:?]
at net.wealth_mc.mystery.Mystery.onEnable(Mystery.java:160) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:403) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:381) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:330) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:422) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:383) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:338) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:272) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:545) [middle12.jar:git-Spigot-eb3d921-2b93d83]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
Caused by: java.lang.UnsupportedOperationException: Abstract class can't be instantiated! Class name: org.bukkit.enchantments.Enchantment
at com.google.gson.internal.UnsafeAllocator.assertInstantiable(UnsafeAllocator.java:120) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.UnsafeAllocator.access$000(UnsafeAllocator.java:31) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:49) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:223) ~[middle12.jar:git-Spigot-eb3d921-2b93d83]
... 30 more
ругается на эту строку кода: Trade[] mcArray = new Gson().fromJson(str, Trade[].class);
Подскажите где я напартачил?
На данном сайте используются cookie-файлы, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших cookie-файлов.