目前,我正在编写一个RPG插件。我创建了一个PlayerInfo
类,用于存储玩家的UUID、角色类(如骑士和弓箭手)以及修改玩家属性的技能,例如活力
会增加玩家的生命值,强度
会增加玩家身体伤害,等等。
这是到目前为止的课程:
public class PlayerInfo {
public String suuid;
public String charClass;
public int vitality;
public int strength;
public int defense;
public int dexterity;
public int intelligence;
public int faith;
public PlayerInfo() {
}
public PlayerInfo(String UUID, String characterClass, int VIT, int STR, int DEF, int DEX, int INT, int FAI) {
suuid = UUID;
charClass = characterClass;
vitality = VIT;
strength = STR;
defense = DEF;
dexterity = DEX;
intelligence = INT;
faith = FAI;
}
我还想说,我主要是一名Python和Javascript程序员。我大约2天前学会了Java,所以如果我的代码不卫生,我很抱歉。我仍在努力理解语言及其实践。如果你愿意的话,我也很感激你的建议。尽管如此,请随意回答我的基本问题,因为我也将在未来的某个时候发布到Code Review。
向前移动…
在处理此插件的基本框架时,我意识到当服务器停止时,PlayerInfo
类中的信息很可能不会保存。我想也许我可以使用 FileOutputStream 和 ObjectOutputStream
将信息写入文件,并将其存储在html" target="_blank">配置文件夹中,然后使用这些模块的
输入
版本检索它。但是,我在尝试动态选取 jar 文件的路径时遇到了问题,因为我的服务器告诉我,在尝试创建文件夹和文件时,我的访问被拒绝。
我的最后一个问题出现在尝试使用加载的信息时。我的插件的命令以< code>/static开头。如果我有一个名为< code>/static stats的命令来显示用户的统计数据,会像比较用户的UUID和保存文件中存储的一样简单吗?例如:
Player player = (Player) sender;
String suuid = player.getUniqueId().toString();
if (character.suuid == suuid) {
// Load stats here...
}
或者有不同的方法去做这件事吗?
把我的帖子浓缩一点:
我如何有效地存储播放器和类信息,以及我以后如何检索这些数据以用于信息,并查看当前播放器是否与保存的对象匹配?这是像SQL这样的东西的用途吗?
好吧,你可以在你的类上使用序列化,我想这是因为你只有原语,然后你可以将你创建的序列化文件字节写入sql数据库,当你需要的时候,你可以再次读取它并将其类型转换为你的类对象。然后你可以调用一个迭代器来循环遍历属性,并用.equals方法为你的播放器找到匹配项。
当每个玩家连接到服务器时,将他们加载到内存中(为每个玩家创建一个新的PlayerInfo对象,例如使用HashMap或List)。
在播放器断开连接时,您必须将所有信息保存到文件/数据库(包括sql)中,该文件/数据库将在给定播放器的下一次连接时恢复并再次加载。
当服务器停止时,信息会丢失,因此您需要将其存储在某个地方并在需要时检索它。
您可以创建一个简单的函数来检索基于HashMap的PlayerInfo
HashMap<String, PlayerInfo> allplayers = new HashMap<String, PlayerInfo>();
public PlayerInfo getPlayer(Player player){
if(allplayers.containsKey(player.getName())){
return allplayers.get(player.getName());
}else{
return null;
}
}
并将玩家放入哈希地图中
public void addPlayer(Player player){
if(!allplayers.containsKey(player.getName())){
//Load playerInfo
PlayerInfo p = new PlayerInfo(....);
//put into hashmap
allplayers.put(player.getName(), p);
}
}
//saving PlayerInfo can be called on PlayerDisonnect/Server shutdown
public void savePlayer(Player player){
if(allplayers.containsKey(player.getName())){
PlayerInfo p = allplayers.get(player.getName());
//Save information
.....
//remove player from HashMap
allplayers.remove(player.getName());
}
} `
我正在尝试查看玩家的库存中是否有以下物品,如果有,我想移除这些物品并向他们发送消息,说该物品已被移除,但我不知道如何做到这一点,这就是我目前拥有的: 我在.contains(bannedItems,1))行上收到一个错误。 谢谢你的帮助!
我知道你可以得到损坏的原因 在实体损坏事件中,但是我还没有找到返回造成损坏的实体的方法。我需要找出这一点,这样我就可以检查玩家的库存中是否有某个物品。
我正在为《我的世界》编写一个bukkit插件,它会对低食物水平做出反应,然后自动将食物从库存中移动到现成的地方,然后吃掉它。我管理了第一部分,但我在bukkit API(,,其他地方)中找不到让玩家使用物品的方法。 这可能吗?如果可能,怎么做?
问题内容: 我对Java堆内存有一个问题。我用Java开发了一个客户端服务器应用程序,该应用程序作为Windows服务运行,需要超过512MB的内存。我有2GB的RAM,但是运行应用程序时会引发异常 内存不足错误:java堆空间 但是我已经在Java控制面板中设置了堆大小(最大512MB),但仍然收到相同的错误。我无法通过命令行设置堆大小,因为我的应用程序作为Windows服务运行,因此如何增加默
我在java堆内存方面有一个问题。我用java开发了一个客户机服务器应用程序,作为windows服务运行,它需要超过512MB的内存。我有2GB的RAM,但当我运行我的应用程序时,它抛出一个异常 内存不足错误:Java堆空间 但是我已经在java控制面板中设置了堆大小(最大值为512MB),我仍然得到相同的错误。我不能通过命令行设置堆大小,因为我的应用程序是作为windows服务运行的,所以如何增
欣然回答: 提前致谢