Instantiating HorseInventory from Gson

Discussion in 'Plugin Development' started by Malikk, Dec 22, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    Malikk

    Hey Everybody!

    I'm trying to get a HorseInventory from a string saved with Gson. The code below works for every mob type with an inventory except horses.

    Code:java
    1.  
    2.  
    3. public static String toGsonString(Inventory inventory) {
    4.  
    5. Gson gson = new Gson();
    6. return gson.toJson(inventory, Inventory.class);
    7.  
    8. }
    9.  
    10. public static Inventory fromGsonString(String data) {
    11.  
    12. Gson gson = new Gson();
    13. return gson.fromJson(data, Inventory.class);
    14.  
    15.  
    16. }


    When I try to use it on a Horse, it throws this

    Show Spoiler

    [20:15:03 WARN]: java.lang.RuntimeException: Unable to invoke no-args constructor for interface org.bukkit.inventory.HorseInventory. Register an InstanceCreator with Gson for this type may fix this problem.
    [20:15:03 WARN]:at org.bukkit.craftbukkit.libs.com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:166)
    [20:15:03 WARN]:at org.bukkit.craftbukkit.libs.com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:163)
    [20:15:03 WARN]:at org.bukkit.craftbukkit.libs.com.google.gson.Gson.fromJson(Gson.java:755)
    [20:15:03 WARN]:at org.bukkit.craftbukkit.libs.com.google.gson.Gson.fromJson(Gson.java:721)
    [20:15:03 WARN]:at org.bukkit.craftbukkit.libs.com.google.gson.Gson.fromJson(Gson.java:670)
    [20:15:03 WARN]:at org.bukkit.craftbukkit.libs.com.google.gson.Gson.fromJson(Gson.java:642)
    [20:15:03 WARN]:at me.jordan.mobcatcher.InventorySerializer.fromBase64Horse(InventorySerializer.java:75)
    [20:15:03 WARN]:at me.jordan.mobcatcher.MCSpawnMob.<init>(MCSpawnMob.java:121)
    [20:15:03 WARN]:at me.jordan.mobcatcher.MCSpawnListener.clickEvent(MCSpawnListener.java:153)
    [20:15:03 WARN]:at me.jordan.mobcatcher.MCSpawnListener.onPlayerInteract(MCSpawnListener.java:93)
    [20:15:03 WARN]:at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [20:15:03 WARN]:at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    [20:15:03 WARN]:at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [20:15:03 WARN]:at java.lang.reflect.Method.invoke(Method.java:601)
    [20:15:03 WARN]:at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
    [20:15:03 WARN]:at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    [20:15:03 WARN]:at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:481)
    [20:15:03 WARN]:at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:466)
    [20:15:03 WARN]:at org.bukkit.craftbukkit.v1_7_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:191)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.PlayerInteractManager.interact(PlayerInteractManager.java:374)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:625)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.PacketPlayInBlockPlace.a(SourceFile:60)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.PacketPlayInBlockPlace.handle(SourceFile:9)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:655)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457)
    [20:15:03 WARN]:at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617)
    [20:15:03 WARN]: Caused by: java.lang.reflect.InvocationTargetException
    [20:15:03 WARN]:at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [20:15:03 WARN]:at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    [20:15:03 WARN]:at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [20:15:03 WARN]:at java.lang.reflect.Method.invoke(Method.java:601)
    [20:15:03 WARN]:at org.bukkit.craftbukkit.libs.com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:48)
    [20:15:03 WARN]:at org.bukkit.craftbukkit.libs.com.google.gson.internal.ConstructorConstructor$8.construct(ConstructorConstructor.java:163)
    [20:15:03 WARN]:... 29 more
    [20:15:03 WARN]: Caused by: java.lang.InstantiationException: org.bukkit.inventory.HorseInventory
    [20:15:03 WARN]:at sun.misc.Unsafe.allocateInstance(Native Method)
    [20:15:03 WARN]:... 35 more


    Looks to me like all the other inventory types can take a no args constructor, but the HorseInventory for whatever reason doesn't have a no args constructor. I know how to register an instance creator in gson, but i can't figure out what the HorseInventory constructor needs. All I can find is the interface on the bukkit github and that doesn't help me.

    Thanks in advance for any help
     
  2. Offline

    Malikk

    bump.
     
Thread Status:
Not open for further replies.

Share This Page