package net.glowstone.io.entity;
import net.glowstone.entity.objects.GlowMinecart;
import net.glowstone.io.nbt.NbtSerialization;
import net.glowstone.util.nbt.CompoundTag;
import org.bukkit.Location;
import org.bukkit.inventory.InventoryHolder;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class MinecartStore extends EntityStore<GlowMinecart> {
private GlowMinecart.MinecartType type;
public MinecartStore(GlowMinecart.MinecartType type) {
super((Class<GlowMinecart>) type.getMinecartClass(), type.getEntityType());
this.type = type;
}
@Override
public GlowMinecart createEntity(Location location, CompoundTag compound) {
try {
Constructor<? extends GlowMinecart> constructor = type.getMinecartClass().getConstructor(Location.class);
return constructor.newInstance(location);
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
@Override
public void load(GlowMinecart entity, CompoundTag tag) {
super.load(entity, tag);
if (entity instanceof InventoryHolder) {
InventoryHolder inv = (InventoryHolder) entity;
if (inv.getInventory() != null) {
inv.getInventory().setContents(NbtSerialization.readInventory(tag.getCompoundList("Items"), 0, inv.getInventory().getSize()));
}
}
// todo
}
@Override
public void save(GlowMinecart entity, CompoundTag tag) {
super.save(entity, tag);
if (entity instanceof InventoryHolder) {
InventoryHolder inv = (InventoryHolder) entity;
if (inv.getInventory() != null) {
tag.putCompoundList("Items", NbtSerialization.writeInventory(inv.getInventory().getContents(), 0));
}
}
// todo
}
}