This NMS is luxyry not really required. It also takes a lot of startup time. Feel sniped. :D
This commit is contained in:
parent
a7465021df
commit
8b175ba9a6
@ -1,8 +1,6 @@
|
|||||||
package com.massivecraft.massivecore.util;
|
package com.massivecraft.massivecore.util;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -18,15 +16,10 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
import java.util.concurrent.ConcurrentSkipListMap;
|
import java.util.concurrent.ConcurrentSkipListMap;
|
||||||
import java.util.concurrent.ConcurrentSkipListSet;
|
import java.util.concurrent.ConcurrentSkipListSet;
|
||||||
|
|
||||||
import net.minecraft.server.v1_7_R4.DedicatedServer;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTCompressedStreamTools;
|
|
||||||
import net.minecraft.server.v1_7_R4.NBTTagCompound;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
import org.bukkit.craftbukkit.v1_7_R4.CraftServer;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -797,12 +790,6 @@ public class IdUtil implements Listener, Runnable
|
|||||||
|
|
||||||
public static void loadDatas()
|
public static void loadDatas()
|
||||||
{
|
{
|
||||||
MassiveCore.get().log(Txt.parse("<i>Loading Playerdat datas..."));
|
|
||||||
for (IdData data : getPlayerdatDatas())
|
|
||||||
{
|
|
||||||
update(data.getId(), data.getName(), data.getMillis(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
MassiveCore.get().log(Txt.parse("<i>Loading Cachefile datas..."));
|
MassiveCore.get().log(Txt.parse("<i>Loading Cachefile datas..."));
|
||||||
for (IdData data : getCachefileDatas())
|
for (IdData data : getCachefileDatas())
|
||||||
{
|
{
|
||||||
@ -873,111 +860,6 @@ public class IdUtil implements Listener, Runnable
|
|||||||
saveCachefileDatas();
|
saveCachefileDatas();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// PLAYERDAT DATAS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// This data source is based on the player.dat files.
|
|
||||||
// It extracts relevant NBT contents.
|
|
||||||
// NOTE: The reason this section contains some NMS is because MassiveCore loads at startup. Some of the Bukkit API is broken then and I could not use it.
|
|
||||||
|
|
||||||
public static File getBaseworldDirectory()
|
|
||||||
{
|
|
||||||
CraftServer cserver = (CraftServer)Bukkit.getServer();
|
|
||||||
DedicatedServer dserver = (DedicatedServer)cserver.getServer();
|
|
||||||
String levelName = dserver.propertyManager.getString("level-name", "world");
|
|
||||||
return new File(Bukkit.getWorldContainer(), levelName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static File getPlayerdatDirectory()
|
|
||||||
{
|
|
||||||
// after 1.7.8
|
|
||||||
// a2cce16b-9494-45ff-b5ff-0362ca687d4e.dat (the uuid)
|
|
||||||
return new File(getBaseworldDirectory(), "playerdata");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Set<IdData> getPlayerdatDatas()
|
|
||||||
{
|
|
||||||
Set<IdData> ret = new LinkedHashSet<IdData>();
|
|
||||||
|
|
||||||
// Get the directory
|
|
||||||
File directory = getPlayerdatDirectory();
|
|
||||||
|
|
||||||
// List the files in the directory
|
|
||||||
File[] files = directory.listFiles();
|
|
||||||
|
|
||||||
// The directory may not exist
|
|
||||||
if (files == null) return ret;
|
|
||||||
|
|
||||||
// For each file
|
|
||||||
for (File file : files)
|
|
||||||
{
|
|
||||||
IdData data = getPlayerdatData(file);
|
|
||||||
if (data == null) continue;
|
|
||||||
ret.add(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
// For the data to be interesting it must contain the bukkit.laskKnownName NBT entry.
|
|
||||||
// It's especially nice if bukkit.lastPlayed also is present.
|
|
||||||
// If bukkit.lastPlayed isn't present we will set lastPlayed millis to 0 in the data.
|
|
||||||
// This will mean the data is considered quite uncertain since data entries are prioritized after their millis.
|
|
||||||
public static IdData getPlayerdatData(File file)
|
|
||||||
{
|
|
||||||
// Get filename
|
|
||||||
String filename = file.getName();
|
|
||||||
|
|
||||||
// Ensure filename ends with ".dat"
|
|
||||||
if (!filename.toLowerCase().endsWith(".dat")) return null;
|
|
||||||
|
|
||||||
// Pick id through ".dat" removal
|
|
||||||
String id = filename.substring(0, filename.length()-4);
|
|
||||||
|
|
||||||
// Ensure file name was of the correct format
|
|
||||||
UUID uuid = uuidFromString(id);
|
|
||||||
if (uuid == null) return null;
|
|
||||||
|
|
||||||
// Load Compound
|
|
||||||
NBTTagCompound compound = loadTagCompound(file);
|
|
||||||
if (compound == null) return null;
|
|
||||||
|
|
||||||
// Get Compound --> bukkit
|
|
||||||
if (!compound.hasKey("bukkit")) return null;
|
|
||||||
NBTTagCompound bukkit = compound.getCompound("bukkit");
|
|
||||||
if (bukkit == null) return null;
|
|
||||||
|
|
||||||
// Get Compound --> bukkit --> lastKnownName
|
|
||||||
if (!bukkit.hasKey("lastKnownName")) return null;
|
|
||||||
String name = bukkit.getString("lastKnownName");
|
|
||||||
if (name == null) return null;
|
|
||||||
|
|
||||||
// Last Played?
|
|
||||||
long lastPlayed = 0;
|
|
||||||
if (bukkit.hasKey("lastPlayed"))
|
|
||||||
{
|
|
||||||
lastPlayed = bukkit.getLong("lastPlayed");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add to ret
|
|
||||||
return new IdData(id, name, lastPlayed);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static NBTTagCompound loadTagCompound(File file)
|
|
||||||
{
|
|
||||||
if (!file.exists()) return null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return NBTCompressedStreamTools.a((InputStream) (new FileInputStream(file)));
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
String message = Txt.parse("<b>NBT file couldn't be loaded: <h>%s<b>. Error: %s.", file.toString(), e.getMessage());
|
|
||||||
MassiveCore.get().log(message);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// ONLINEPLAYER DATAS
|
// ONLINEPLAYER DATAS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
Loading…
Reference in New Issue
Block a user