gpt4 book ai didi

java - 尝试将 Bukkit ItemStack 字段存储到文件中,但 ItemStack 不可序列化

转载 作者:行者123 更新时间:2023-12-02 12:55:15 25 4
gpt4 key购买 nike

ItemStack 不可序列化,我试图将带有 ItemStack 字段的名为 Objective 的对象保存到文件中,但由于 ItemStack 不可序列化,因此这不起作用。我尝试扩展 ItemStack 并实现可序列化并将该字段更改为我的新可序列化子类,但这也不起作用。以下是我原始代码的相关部分:

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;
}

}

在我的代码的其他地方,这行代码:

ItemStack reward = new ItemStack(Material.DIAMOND_SWORD);
Objective objective = new Objective(args[1] ,Integer.parseInt(args[2]), Integer.parseInt(args[3]), reward);

给我这个错误:

java.io.NotSerializableException: org.bukkit.inventory.ItemStack

如何序列化这个对象?我需要存储它,但 Java 不允许我存储它。感谢您的帮助。如果您需要更多代码片段或其他信息,请告诉我。

最佳答案

这很可能是 XY 问题。 ItemStack不可序列化,因为它代表运行时的实际项目堆栈。这对于存储在文件中是没有意义的。可能值得一看 ConfigurationSerializable 接口(interface),由 ItemStack 实现,但我认为您在这里不需要它。

在您的示例中,ItemStack您尝试序列化的内容没有任何元数据。这是一把单钻石剑。如果您的所有奖励都只是一个项目,那么您只需保存 Material您可以创建一个新的 ItemStack从那Material每次你想给玩家奖励时。自 Materialenum ,默认是可序列化的。

您还可以序列化 int如果您的某些奖励需要堆叠多个元素,则需要了解堆叠大小。如果您需要任何元数据,请序列化在运行时构建元数据所需的数据。例如,要提供一个项目知识,您可以存储 List<String> (具有 List 的可序列化实现)。

关于java - 尝试将 Bukkit ItemStack 字段存储到文件中,但 ItemStack 不可序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44446664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com