Есть у меня такой вот объект:
Он сохраняет себя в метадату блока. Когда я хочу получить его таким способом:
Я получаю его и могу взаимодействовать, НО ТОЛЬКО ДО ПЕРЕЗАГРУЗКИ СЕРВЕРА. После перезапуска, плагин мне выдает EventException: null
По причине того, что не может закастить Merchant в Merchant плагина до перезагрузки.
Ошибка:
Я знаю, что такой подход к хранению объекта нежелателен, но в силу ограниченных сроков, очень нужно
Java:
public class Merchant {
private String ownerName;
private Block block;
private List<MerchantRecipe> goods = new ArrayList<>();
private List<ItemStack> treasury = new ArrayList<>();
public Merchant(String ownerName, Block block) {
this.ownerName = ownerName;
this.block = block;
}
public void save() {
if(this.block.hasMetadata("merchant")) {
this.block.removeMetadata("merchant", VanillaBarterShop.getInstance());
}
this.block.setMetadata("merchant", new FixedMetadataValue(VanillaBarterShop.getInstance(), this));
}
public List<MerchantRecipe> getGoods() {
return this.goods;
}
public List<ItemStack> getTreasury() {
return this.treasury;
}
public Block getBlock() {
return block;
}
public String getOwnerName() {
return ownerName;
}
public void setGoods(List<MerchantRecipe> goods) {
this.goods = goods;
}
public void setTreasury(List<ItemStack> treasury) {
this.treasury = treasury;
}
}
Java:
Merchant merchant = (Merchant) event.getClickedBlock().getMetadata("merchant").get(0).value();
По причине того, что не может закастить Merchant в Merchant плагина до перезагрузки.
Ошибка:
Код:
[15:47:47 ERROR]: Could not pass event PlayerInteractEvent to VanillaBarterShop v1.0-SNAPSHOT
org.bukkit.event.EventException: null
at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:72) ~[patched_1.12.2.jar:git-Paper-1620]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:78) ~[patched_1.12.2.jar:git-Paper-1620]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[patched_1.12.2.jar:git-Paper-1620]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:513) ~[patched_1.12.2.jar:git-Paper-1620]
at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:236) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.PlayerInteractManager.a(PlayerInteractManager.java:486) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1011) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:37) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:5) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(PlayerConnectionUtils.java:14) ~[patched_1.12.2.jar:git-Paper-1620]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:850) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:423) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:774) ~[patched_1.12.2.jar:git-Paper-1620]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:666) ~[patched_1.12.2.jar:git-Paper-1620]
at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.ClassCastException: class ru.er1one.vanillabartershop.utils.Merchant cannot be cast to class ru.er1one.vanillabartershop.utils.Merchant (ru.er1one.vanillabartershop.utils.Merchant is in unnamed module of loader org.bukkit.plugin.java.PluginClassLoader @59299c24; ru.er1one.vanillabartershop.utils.Merchant is in unnamed module of loader org.bukkit.plugin.java.PluginClassLoader @60905ab7)
at ru.er1one.vanillabartershop.handlers.PlaceListener.onBlockInteract(PlaceListener.java:53) ~[?:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor207.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:70) ~[patched_1.12.2.jar:git-Paper-1620]
... 17 more
Объединено
Я знаю, что такой подход к хранению объекта нежелателен, но в силу ограниченных сроков, очень нужно