ItemStackはシリアライズ可能ではなく、ObjectStackフィールドを持つObjectiveオブジェクトをファイルに保存しようとしています。私はItemStackを拡張してSerializableを実装し、新しい直列化可能なサブクラスにフィールドを変更しようとしましたが、これもうまくいきませんでした。Bukkit ItemStackフィールドをファイルに保存しようとしましたが、ItemStackはSerrializableではありません
java.io.NotSerializableException: org.bukkit.inventory.ItemStack
:私は、このエラーを与えている
ItemStack reward = new ItemStack(Material.DIAMOND_SWORD);
Objective objective = new Objective(args[1] ,Integer.parseInt(args[2]), Integer.parseInt(args[3]), reward);
:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import org.bukkit.inventory.ItemStack;
public class Objective implements Serializable {
private static final long serialVersionUID = -2018456670240873538L;
private static ArrayList<Requirement> requirements = new ArrayList<>();
private String name;
private Requirement requirement;
private ItemStack reward;
private int tillComplete;
private boolean complete;
public Objective(String name, int requirementIndex, int tillComplete, ItemStack reward) {
if(requirements.isEmpty()) {
requirements.add(Requirement.kill_Skeletons);
requirements.add(Requirement.kill_Spiders);
requirements.add(Requirement.kill_Zombies);
}
this.name = name;
this.requirement = requirements.get(requirementIndex);
this.tillComplete = tillComplete;
this.reward = reward;
complete = false;
}
public String getName() {
return name;
}
public Object getRequirement() {
return requirement;
}
public static ArrayList<Requirement> getRequirements() {
return requirements;
}
public static void setRequirements(ArrayList<Requirement> requirements) {
Objective.requirements = requirements;
}
public int getTillComplete() {
return tillComplete;
}
public void setTillComplete(int tillComplete) {
this.tillComplete = tillComplete;
}
public void setName(String name) {
this.name = name;
}
public void setRequirement(Requirement requirement) {
this.requirement = requirement;
}
public void setReward(ItemStackSerializable reward) {
this.reward = reward;
}
public void setComplete(boolean complete) {
this.complete = complete;
}
public ItemStack getReward() {
return reward;
}
public boolean isComplete() {
return complete;
}
}他の場所で私のコードのコード行で
:ここに私の元のコードの関連部分は、
このオブジェクトをシリアル化するにはどうすればよいですか?私はそれを格納する必要がありますが、Javaは私をさせません。ご協力いただきありがとうございます。コードスニペットやその他の情報が必要な場合はお知らせください。
ItemStacksにはNBTデータも含まれることがありますが、幸いにもNBTデータもシリアライズ可能です。 – Draco18s