summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/bukkit
diff options
context:
space:
mode:
authorNathan Adams <dinnerbone@dinnerbone.com>2011-12-12 17:39:52 +0000
committerNathan Adams <dinnerbone@dinnerbone.com>2011-12-12 17:39:52 +0000
commitb653ce3c1c1e3e2da137fc1ec6c3a4983c18f88f (patch)
treeb17329e8fa6f76b21dd024665ff524f9318c1b6f /src/main/java/org/bukkit
parent91ff0b059d441c3e9bcdcc3c962713e7962876b5 (diff)
downloadcraftbukkit-b653ce3c1c1e3e2da137fc1ec6c3a4983c18f88f.tar
craftbukkit-b653ce3c1c1e3e2da137fc1ec6c3a4983c18f88f.tar.gz
craftbukkit-b653ce3c1c1e3e2da137fc1ec6c3a4983c18f88f.tar.lz
craftbukkit-b653ce3c1c1e3e2da137fc1ec6c3a4983c18f88f.tar.xz
craftbukkit-b653ce3c1c1e3e2da137fc1ec6c3a4983c18f88f.zip
Implemented (offline)player date methods
Diffstat (limited to 'src/main/java/org/bukkit')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java66
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java47
2 files changed, 113 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
index 68789a9f..4f8fd21d 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
@@ -1,8 +1,11 @@
package org.bukkit.craftbukkit;
+import java.io.File;
import java.util.LinkedHashMap;
import java.util.Map;
import net.minecraft.server.EntityPlayer;
+import net.minecraft.server.NBTTagCompound;
+import net.minecraft.server.WorldNBTStorage;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
@@ -14,10 +17,12 @@ import org.bukkit.entity.Player;
public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializable {
private final String name;
private final CraftServer server;
+ private final WorldNBTStorage storage;
protected CraftOfflinePlayer(CraftServer server, String name) {
this.server = server;
this.name = name;
+ this.storage = (WorldNBTStorage)(server.console.worlds.get(0).getDataManager());
}
public boolean isOnline() {
@@ -119,4 +124,65 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
hash = 97 * hash + (this.getName() != null ? this.getName().hashCode() : 0);
return hash;
}
+
+ private NBTTagCompound getData() {
+ return storage.getPlayerData(getName());
+ }
+
+ private NBTTagCompound getBukkitData() {
+ NBTTagCompound result = getData();
+
+ if (result != null) {
+ if (!result.hasKey("bukkit")) {
+ result.setCompound("bukkit", new NBTTagCompound());
+ }
+ result = result.getCompound("bukkit");
+ }
+
+ return result;
+ }
+
+ private File getDataFile() {
+ return new File(storage.getPlayerDir(), name + ".dat");
+ }
+
+ public long getFirstPlayed() {
+ Player player = getPlayer();
+ if (player != null) return player.getFirstPlayed();
+
+ NBTTagCompound data = getBukkitData();
+
+ if (data != null) {
+ if (data.hasKey("firstPlayed")) {
+ return data.getLong("firstPlayed");
+ } else {
+ File file = getDataFile();
+ return file.lastModified();
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ public long getLastPlayed() {
+ Player player = getPlayer();
+ if (player != null) return player.getFirstPlayed();
+
+ NBTTagCompound data = getBukkitData();
+
+ if (data != null) {
+ if (data.hasKey("lastPlayed")) {
+ return data.getLong("lastPlayed");
+ } else {
+ File file = getDataFile();
+ return file.lastModified();
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ public boolean hasPlayedBefore() {
+ return getData() != null;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index ba2757bf..bb94842e 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -2,9 +2,12 @@ package org.bukkit.craftbukkit.entity;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.util.Calendar;
+import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import net.minecraft.server.EntityPlayer;
+import net.minecraft.server.NBTTagCompound;
import net.minecraft.server.Packet131ItemData;
import net.minecraft.server.Packet200Statistic;
import net.minecraft.server.Packet201PlayerInfo;
@@ -39,8 +42,14 @@ import org.bukkit.map.MapView;
@DelegateDeserialization(CraftOfflinePlayer.class)
public class CraftPlayer extends CraftHumanEntity implements Player {
+ private long firstPlayed = 0;
+ private long lastPlayed = 0;
+ private boolean hasPlayedBefore = false;
+
public CraftPlayer(CraftServer server, EntityPlayer entity) {
super(server, entity);
+
+ firstPlayed = System.currentTimeMillis();
}
@Override
@@ -567,4 +576,42 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
hash = 97 * hash + (this.getName() != null ? this.getName().hashCode() : 0);
return hash;
}
+
+ public long getFirstPlayed() {
+ return firstPlayed;
+ }
+
+ public long getLastPlayed() {
+ return lastPlayed;
+ }
+
+ public boolean hasPlayedBefore() {
+ return hasPlayedBefore;
+ }
+
+ public void setFirstPlayed(long firstPlayed) {
+ this.firstPlayed = firstPlayed;
+ }
+
+ public void readExtraData(NBTTagCompound nbttagcompound) {
+ hasPlayedBefore = true;
+ if (nbttagcompound.hasKey("bukkit")) {
+ NBTTagCompound data = nbttagcompound.getCompound("bukkit");
+
+ if (data.hasKey("firstPlayed")) {
+ firstPlayed = data.getLong("firstPlayed");
+ lastPlayed = data.getLong("lastPlayed");
+ }
+ }
+ }
+
+ public void setExtraData(NBTTagCompound nbttagcompound) {
+ if (!nbttagcompound.hasKey("bukkit")) {
+ nbttagcompound.setCompound("bukkit", new NBTTagCompound());
+ }
+
+ NBTTagCompound data = nbttagcompound.getCompound("bukkit");
+ data.setLong("firstPlayed", getFirstPlayed());
+ data.setLong("lastPlayed", System.currentTimeMillis());
+ }
}