a few changes.

This commit is contained in:
Olof Larsson 2012-08-30 20:04:17 +02:00
parent 3b7c87f2b6
commit e8ec7fb852
10 changed files with 219 additions and 270 deletions

View File

@ -11,10 +11,11 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import com.massivecraft.mcore4.adapter.InventoryAdapter;
import com.massivecraft.mcore4.adapter.ItemStackAdapter;
import com.massivecraft.mcore4.adapter.MongoURIAdapter;
import com.massivecraft.mcore4.cmd.Cmd; import com.massivecraft.mcore4.cmd.Cmd;
import com.massivecraft.mcore4.gson.InventoryTypeAdapter; import com.massivecraft.mcore4.lib.gson.Gson;
import com.massivecraft.mcore4.gson.ItemStackAdapter;
import com.massivecraft.mcore4.gson.MongoURIAdapter;
import com.massivecraft.mcore4.lib.gson.GsonBuilder; import com.massivecraft.mcore4.lib.gson.GsonBuilder;
import com.massivecraft.mcore4.lib.mongodb.MongoURI; import com.massivecraft.mcore4.lib.mongodb.MongoURI;
import com.massivecraft.mcore4.persist.One; import com.massivecraft.mcore4.persist.One;
@ -30,6 +31,7 @@ public class MCore extends JavaPlugin
// -------------------------------------------- // // -------------------------------------------- //
// PERSIST // PERSIST
// -------------------------------------------- // // -------------------------------------------- //
private static Map<Object, Persist> persistInstances = new HashMap<Object, Persist>(); private static Map<Object, Persist> persistInstances = new HashMap<Object, Persist>();
public static Map<Object, Persist> getPersistInstances() { return persistInstances; } public static Map<Object, Persist> getPersistInstances() { return persistInstances; }
public static Persist getPersist(Object owner) { return persistInstances.get(owner); } public static Persist getPersist(Object owner) { return persistInstances.get(owner); }
@ -84,8 +86,7 @@ public class MCore extends JavaPlugin
// -------------------------------------------- // // -------------------------------------------- //
public static Random random = new Random(); public static Random random = new Random();
public static Gson gson = getGsonBuilder().create();
@Override @Override
public void onDisable() public void onDisable()
@ -117,7 +118,7 @@ public class MCore extends JavaPlugin
.excludeFieldsWithModifiers(Modifier.TRANSIENT) .excludeFieldsWithModifiers(Modifier.TRANSIENT)
.registerTypeAdapter(MongoURI.class, MongoURIAdapter.get()) .registerTypeAdapter(MongoURI.class, MongoURIAdapter.get())
.registerTypeAdapter(ItemStack.class, new ItemStackAdapter()) .registerTypeAdapter(ItemStack.class, new ItemStackAdapter())
.registerTypeAdapter(Inventory.class, new InventoryTypeAdapter()); .registerTypeAdapter(Inventory.class, new InventoryAdapter());
} }
// -------------------------------------------- // // -------------------------------------------- //

View File

@ -1,4 +1,4 @@
package com.massivecraft.mcore4.gson; package com.massivecraft.mcore4.adapter;
import java.lang.reflect.Type; import java.lang.reflect.Type;
@ -14,8 +14,9 @@ import com.massivecraft.mcore4.lib.gson.JsonParseException;
import com.massivecraft.mcore4.lib.gson.JsonPrimitive; import com.massivecraft.mcore4.lib.gson.JsonPrimitive;
import com.massivecraft.mcore4.lib.gson.JsonSerializationContext; import com.massivecraft.mcore4.lib.gson.JsonSerializationContext;
import com.massivecraft.mcore4.lib.gson.JsonSerializer; import com.massivecraft.mcore4.lib.gson.JsonSerializer;
import com.massivecraft.mcore4.lib.mongodb.BasicDBObject;
public class InventoryTypeAdapter implements JsonDeserializer<Inventory>, JsonSerializer<Inventory> public class InventoryAdapter implements JsonDeserializer<Inventory>, JsonSerializer<Inventory>
{ {
// -------------------------------------------- // // -------------------------------------------- //
// FIELD NAME CONSTANTS // FIELD NAME CONSTANTS
@ -30,20 +31,20 @@ public class InventoryTypeAdapter implements JsonDeserializer<Inventory>, JsonSe
@Override @Override
public JsonElement serialize(Inventory src, Type typeOfSrc, JsonSerializationContext context) public JsonElement serialize(Inventory src, Type typeOfSrc, JsonSerializationContext context)
{ {
return serialize(src); return toJson(src);
} }
@Override @Override
public Inventory deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException public Inventory deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{ {
return deserialize(json); return fromJson(json);
} }
// -------------------------------------------- // // -------------------------------------------- //
// STATIC LOGIC // JSON
// -------------------------------------------- // // -------------------------------------------- //
public static JsonElement serialize(Inventory src) public static JsonElement toJson(Inventory src)
{ {
JsonObject jsonInventory = new JsonObject(); JsonObject jsonInventory = new JsonObject();
ItemStack[] itemStacks = src.getContents(); ItemStack[] itemStacks = src.getContents();
@ -52,7 +53,7 @@ public class InventoryTypeAdapter implements JsonDeserializer<Inventory>, JsonSe
for (int i = 0; i < itemStacks.length; i++) for (int i = 0; i < itemStacks.length; i++)
{ {
ItemStack itemStack = itemStacks[i]; ItemStack itemStack = itemStacks[i];
JsonObject jsonItemStack = ItemStackAdapter.serialize(itemStack); JsonObject jsonItemStack = ItemStackAdapter.toJson(itemStack);
if (jsonItemStack == null) continue; if (jsonItemStack == null) continue;
jsonInventory.add(String.valueOf(i), jsonItemStack); jsonInventory.add(String.valueOf(i), jsonItemStack);
} }
@ -60,7 +61,7 @@ public class InventoryTypeAdapter implements JsonDeserializer<Inventory>, JsonSe
return jsonInventory; return jsonInventory;
} }
public static Inventory deserialize(JsonElement json) public static Inventory fromJson(JsonElement json)
{ {
if ( ! json.isJsonObject()) return null; if ( ! json.isJsonObject()) return null;
JsonObject jsonInventory = json.getAsJsonObject(); JsonObject jsonInventory = json.getAsJsonObject();
@ -75,7 +76,49 @@ public class InventoryTypeAdapter implements JsonDeserializer<Inventory>, JsonSe
// Fetch the jsonItemStack or mark it as empty and continue // Fetch the jsonItemStack or mark it as empty and continue
String stackIdx = String.valueOf(i); String stackIdx = String.valueOf(i);
JsonElement jsonItemStack = jsonInventory.get(stackIdx); JsonElement jsonItemStack = jsonInventory.get(stackIdx);
ItemStack itemStack = ItemStackAdapter.deserialize(jsonItemStack); ItemStack itemStack = ItemStackAdapter.fromJson(jsonItemStack);
itemStacks[i] = itemStack;
}
Inventory ret = new CraftInventoryCustom(null, size, "items");
ret.setContents(itemStacks);
return ret;
}
// -------------------------------------------- //
// BSON
// -------------------------------------------- //
public static BasicDBObject toBson(Inventory src)
{
BasicDBObject bsonInventory = new BasicDBObject();
ItemStack[] itemStacks = src.getContents();
bsonInventory.put(SIZE, itemStacks.length);
for (int i = 0; i < itemStacks.length; i++)
{
ItemStack itemStack = itemStacks[i];
BasicDBObject bsonItemStack = ItemStackAdapter.toBson(itemStack);
if (bsonItemStack == null) continue;
bsonInventory.put(String.valueOf(i), bsonItemStack);
}
return bsonInventory;
}
public static Inventory fromBson(BasicDBObject bsonInventory)
{
if ( ! bsonInventory.containsField(SIZE)) return null;
int size = bsonInventory.getInt(SIZE);
ItemStack[] itemStacks = new ItemStack[size];
for (int i = 0; i < size; i++)
{
// Fetch the jsonItemStack or mark it as empty and continue
String stackIdx = String.valueOf(i);
BasicDBObject bsonItemStack = (BasicDBObject) bsonInventory.get(stackIdx);
ItemStack itemStack = ItemStackAdapter.fromBson(bsonItemStack);
itemStacks[i] = itemStack; itemStacks[i] = itemStack;
} }

View File

@ -1,4 +1,4 @@
package com.massivecraft.mcore4.gson; package com.massivecraft.mcore4.adapter;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -13,6 +13,7 @@ import com.massivecraft.mcore4.lib.gson.JsonObject;
import com.massivecraft.mcore4.lib.gson.JsonParseException; import com.massivecraft.mcore4.lib.gson.JsonParseException;
import com.massivecraft.mcore4.lib.gson.JsonSerializationContext; import com.massivecraft.mcore4.lib.gson.JsonSerializationContext;
import com.massivecraft.mcore4.lib.gson.JsonSerializer; import com.massivecraft.mcore4.lib.gson.JsonSerializer;
import com.massivecraft.mcore4.lib.mongodb.BasicDBObject;
public class ItemStackAdapter implements JsonDeserializer<ItemStack>, JsonSerializer<ItemStack> public class ItemStackAdapter implements JsonDeserializer<ItemStack>, JsonSerializer<ItemStack>
{ {
@ -32,20 +33,20 @@ public class ItemStackAdapter implements JsonDeserializer<ItemStack>, JsonSerial
@Override @Override
public JsonElement serialize(ItemStack itemStack, Type typeOfSrc, JsonSerializationContext context) public JsonElement serialize(ItemStack itemStack, Type typeOfSrc, JsonSerializationContext context)
{ {
return serialize(itemStack); return toJson(itemStack);
} }
@Override @Override
public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{ {
return deserialize(json); return fromJson(json);
} }
// -------------------------------------------- // // -------------------------------------------- //
// STATIC LOGIC // JSON
// -------------------------------------------- // // -------------------------------------------- //
public static JsonObject serialize(ItemStack itemStack) public static JsonObject toJson(ItemStack itemStack)
{ {
if (itemStack == null || itemStack.getTypeId() == 0 || itemStack.getAmount() == 0) if (itemStack == null || itemStack.getTypeId() == 0 || itemStack.getAmount() == 0)
{ {
@ -76,7 +77,7 @@ public class ItemStackAdapter implements JsonDeserializer<ItemStack>, JsonSerial
return jsonItemStack; return jsonItemStack;
} }
public static ItemStack deserialize(JsonElement json) public static ItemStack fromJson(JsonElement json)
{ {
if (json == null || ! json.isJsonObject()) return null; if (json == null || ! json.isJsonObject()) return null;
@ -119,4 +120,83 @@ public class ItemStackAdapter implements JsonDeserializer<ItemStack>, JsonSerial
return stack; return stack;
} }
// -------------------------------------------- //
// BSON
// -------------------------------------------- //
public static BasicDBObject toBson(ItemStack itemStack)
{
if (itemStack == null || itemStack.getTypeId() == 0 || itemStack.getAmount() == 0)
{
return null;
}
BasicDBObject bsonItemStack = new BasicDBObject();
bsonItemStack.put(TYPE, itemStack.getTypeId());
if (itemStack.getAmount() != 1)
{
bsonItemStack.put(AMOUNT, itemStack.getAmount());
}
if (itemStack.getDurability() != 0) // Durability is a weird name since it is the amount of damage.
{
bsonItemStack.put(DAMAGE, itemStack.getDurability());
}
if (itemStack.getEnchantments().size() > 0)
{
BasicDBObject bsonEnchantments = new BasicDBObject();
for (Entry<Enchantment, Integer> entry : itemStack.getEnchantments().entrySet())
{
bsonEnchantments.put(String.valueOf(entry.getKey().getId()), entry.getValue());
}
bsonItemStack.put(ENCHANTMENTS, bsonEnchantments);
}
return bsonItemStack;
}
public static ItemStack fromBson(BasicDBObject bsonItemStack)
{
if (bsonItemStack == null) return null;
// Populate values
int type = 0;
int amount = 1;
short damage = 0;
if (bsonItemStack.containsField(TYPE))
{
type = bsonItemStack.getInt(TYPE);
}
if (bsonItemStack.containsField(AMOUNT))
{
amount = bsonItemStack.getInt(AMOUNT);
}
if (bsonItemStack.containsField(DAMAGE))
{
damage = (short) bsonItemStack.getInt(DAMAGE);
}
// Create Non enchanted stack
ItemStack stack = new ItemStack(type, amount, damage);
// Add enchantments if there are any
if (bsonItemStack.containsField(ENCHANTMENTS))
{
BasicDBObject bsonEnchantments = (BasicDBObject) bsonItemStack.get(ENCHANTMENTS);
for (Entry<String, Object> enchantmentEntry: bsonEnchantments.entrySet())
{
int enchantmentId = Integer.valueOf(enchantmentEntry.getKey());
Integer enchantmentLevel = (Integer) enchantmentEntry.getValue();
stack.addUnsafeEnchantment(Enchantment.getById(enchantmentId), enchantmentLevel);
}
}
return stack;
}
} }

View File

@ -1,4 +1,4 @@
package com.massivecraft.mcore4.gson; package com.massivecraft.mcore4.adapter;
import java.lang.reflect.Type; import java.lang.reflect.Type;

View File

@ -1,76 +0,0 @@
package com.massivecraft.mcore4.mongodb;
import org.bukkit.craftbukkit.inventory.CraftInventoryCustom;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import com.massivecraft.mcore4.lib.mongodb.BasicDBObject;
public class InventoryTypeAdapter
{
// -------------------------------------------- //
// FIELD NAME CONSTANTS
// -------------------------------------------- //
public static final String SIZE = "size";
// -------------------------------------------- //
// STATIC LOGIC
// -------------------------------------------- //
public static BasicDBObject serialize(Inventory src)
{
BasicDBObject bsonInventory = new BasicDBObject();
ItemStack[] itemStacks = src.getContents();
bsonInventory.put(SIZE, itemStacks.length);
for (int i = 0; i < itemStacks.length; i++)
{
ItemStack itemStack = itemStacks[i];
BasicDBObject bsonItemStack = ItemStackAdapter.serialize(itemStack);
if (bsonItemStack == null) continue;
bsonInventory.put(String.valueOf(i), bsonItemStack);
}
return bsonInventory;
}
public static Inventory deserialize(BasicDBObject bsonInventory)
{
if ( ! bsonInventory.containsField(SIZE)) return null;
int size = bsonInventory.getInt(SIZE);
ItemStack[] itemStacks = new ItemStack[size];
for (int i = 0; i < size; i++)
{
// Fetch the jsonItemStack or mark it as empty and continue
String stackIdx = String.valueOf(i);
BasicDBObject bsonItemStack = (BasicDBObject) bsonInventory.get(stackIdx);
ItemStack itemStack = ItemStackAdapter.deserialize(bsonItemStack);
itemStacks[i] = itemStack;
}
Inventory ret = new CraftInventoryCustom(null, size, "items");
ret.setContents(itemStacks);
return ret;
}
// -------------------------------------------- //
// UTIL
// -------------------------------------------- //
// This utility is nice to have in many cases :)
public static boolean isInventoryEmpty(Inventory inv)
{
if (inv == null) return true;
for (ItemStack stack : inv.getContents())
{
if (stack == null) continue;
if (stack.getAmount() == 0) continue;
if (stack.getTypeId() == 0) continue;
return false;
}
return true;
}
}

View File

@ -1,99 +0,0 @@
package com.massivecraft.mcore4.mongodb;
import java.util.Map.Entry;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import com.massivecraft.mcore4.lib.mongodb.BasicDBObject;
public class ItemStackAdapter
{
// -------------------------------------------- //
// FIELD NAME CONSTANTS
// -------------------------------------------- //
public static final String TYPE = "type";
public static final String AMOUNT = "amount";
public static final String DAMAGE = "damage";
public static final String ENCHANTMENTS = "enchantments";
// -------------------------------------------- //
// STATIC LOGIC
// -------------------------------------------- //
public static BasicDBObject serialize(ItemStack itemStack)
{
if (itemStack == null || itemStack.getTypeId() == 0 || itemStack.getAmount() == 0)
{
return null;
}
BasicDBObject bsonItemStack = new BasicDBObject();
bsonItemStack.put(TYPE, itemStack.getTypeId());
if (itemStack.getAmount() != 1)
{
bsonItemStack.put(AMOUNT, itemStack.getAmount());
}
if (itemStack.getDurability() != 0) // Durability is a weird name since it is the amount of damage.
{
bsonItemStack.put(DAMAGE, itemStack.getDurability());
}
if (itemStack.getEnchantments().size() > 0)
{
BasicDBObject bsonEnchantments = new BasicDBObject();
for (Entry<Enchantment, Integer> entry : itemStack.getEnchantments().entrySet())
{
bsonEnchantments.put(String.valueOf(entry.getKey().getId()), entry.getValue());
}
bsonItemStack.put(ENCHANTMENTS, bsonEnchantments);
}
return bsonItemStack;
}
public static ItemStack deserialize(BasicDBObject bsonItemStack)
{
if (bsonItemStack == null) return null;
// Populate values
int type = 0;
int amount = 1;
short damage = 0;
if (bsonItemStack.containsField(TYPE))
{
type = bsonItemStack.getInt(TYPE);
}
if (bsonItemStack.containsField(AMOUNT))
{
amount = bsonItemStack.getInt(AMOUNT);
}
if (bsonItemStack.containsField(DAMAGE))
{
damage = (short) bsonItemStack.getInt(DAMAGE);
}
// Create Non enchanted stack
ItemStack stack = new ItemStack(type, amount, damage);
// Add enchantments if there are any
if (bsonItemStack.containsField(ENCHANTMENTS))
{
BasicDBObject bsonEnchantments = (BasicDBObject) bsonItemStack.get(ENCHANTMENTS);
for (Entry<String, Object> enchantmentEntry: bsonEnchantments.entrySet())
{
int enchantmentId = Integer.valueOf(enchantmentEntry.getKey());
Integer enchantmentLevel = (Integer) enchantmentEntry.getValue();
stack.addUnsafeEnchantment(Enchantment.getById(enchantmentId), enchantmentLevel);
}
}
return stack;
}
}

View File

@ -1,13 +1,5 @@
package com.massivecraft.mcore4.persist; package com.massivecraft.mcore4.persist;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@ -81,53 +73,6 @@ public class Persist
// UTILS // UTILS
// -------------------------------------------- // // -------------------------------------------- //
public static void write(File file, String content) throws IOException
{
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, false), "UTF8"));
out.write(content);
out.close();
}
public static String read(File file) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
String ret = new String(new byte[0], "UTF-8");
String line;
while ((line = in.readLine()) != null)
{
ret += line;
}
in.close();
return ret;
}
public static boolean writeCatch(File file, String content)
{
try
{
write(file, content);
return true;
}
catch (Exception e)
{
return false;
}
}
public static String readCatch(File file)
{
try
{
return read(file);
}
catch (IOException e)
{
return null;
}
}
public static <T> ArrayList<T> uglySQL(Collection<T> items, Predictate<T> where, Comparator<T> orderby, Integer limit, Integer offset) public static <T> ArrayList<T> uglySQL(Collection<T> items, Predictate<T> where, Comparator<T> orderby, Integer limit, Integer offset)
{ {
ArrayList<T> ret = new ArrayList<T>(items.size()); ArrayList<T> ret = new ArrayList<T>(items.size());

View File

@ -15,6 +15,7 @@ import com.massivecraft.mcore4.Predictate;
import com.massivecraft.mcore4.lib.gson.Gson; import com.massivecraft.mcore4.lib.gson.Gson;
import com.massivecraft.mcore4.persist.IClassManager; import com.massivecraft.mcore4.persist.IClassManager;
import com.massivecraft.mcore4.persist.Persist; import com.massivecraft.mcore4.persist.Persist;
import com.massivecraft.mcore4.util.DiscUtil;
public abstract class GsonClassManager<T> implements IClassManager<T> public abstract class GsonClassManager<T> implements IClassManager<T>
{ {
@ -259,7 +260,7 @@ public abstract class GsonClassManager<T> implements IClassManager<T>
{ {
String json = this.getGson().toJson(entity); String json = this.getGson().toJson(entity);
File file = this.fileFromId(id); File file = this.fileFromId(id);
return Persist.writeCatch(file, json); return DiscUtil.writeCatch(file, json);
} }
this.removeFile(id); this.removeFile(id);
// TODO: Remove if loaded?? // TODO: Remove if loaded??
@ -307,7 +308,7 @@ public abstract class GsonClassManager<T> implements IClassManager<T>
if (entity != null) return entity; if (entity != null) return entity;
if ( ! this.containsId(id)) return null; if ( ! this.containsId(id)) return null;
File file = this.fileFromId(id); File file = this.fileFromId(id);
String json = Persist.readCatch(file); String json = DiscUtil.readCatch(file);
if (json == null) return null; if (json == null) return null;
entity = this.getGson().fromJson(json, this.getManagedClass()); entity = this.getGson().fromJson(json, this.getManagedClass());
this.attach(entity, id, true); this.attach(entity, id, true);

View File

@ -4,33 +4,48 @@ import java.io.*;
import java.net.URL; import java.net.URL;
import java.nio.channels.Channels; import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel; import java.nio.channels.ReadableByteChannel;
import java.nio.file.Files;
public class DiscUtil public class DiscUtil
{ {
// -------------------------------------------- //
// CONSTANTS
// -------------------------------------------- //
private final static String UTF8 = "UTF-8";
// -------------------------------------------- //
// BYTE
// -------------------------------------------- //
public static byte[] readBytes(File file) throws IOException
{
return Files.readAllBytes(file.toPath());
}
public static void writeBytes(File file, byte[] bytes) throws IOException
{
Files.write(file.toPath(), bytes);
}
// -------------------------------------------- //
// STRING
// -------------------------------------------- //
public static void write(File file, String content) throws IOException public static void write(File file, String content) throws IOException
{ {
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, false), "UTF8")); writeBytes(file, utf8(content));
out.write(content);
out.close();
} }
public static String read(File file) throws IOException public static String read(File file) throws IOException
{ {
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")); return utf8(readBytes(file));
String ret = new String(new byte[0], "UTF-8");
String line;
while ((line = in.readLine()) != null)
{
ret += line+"\n";
}
in.close();
if (ret.length() == 0) return ret;
return ret.substring(0, ret.length()-1);
} }
// -------------------------------------------- //
// CATCH
// -------------------------------------------- //
public static boolean writeCatch(File file, String content) public static boolean writeCatch(File file, String content)
{ {
try try
@ -56,6 +71,10 @@ public class DiscUtil
} }
} }
// -------------------------------------------- //
// DOWNLOAD
// -------------------------------------------- //
public static boolean downloadUrl(String urlstring, File file) public static boolean downloadUrl(String urlstring, File file)
{ {
try try
@ -78,6 +97,10 @@ public class DiscUtil
return downloadUrl(urlstring, new File(filename)); return downloadUrl(urlstring, new File(filename));
} }
// -------------------------------------------- //
// FILE DELETION
// -------------------------------------------- //
public static boolean deleteRecursive(File path) throws FileNotFoundException public static boolean deleteRecursive(File path) throws FileNotFoundException
{ {
if ( ! path.exists()) throw new FileNotFoundException(path.getAbsolutePath()); if ( ! path.exists()) throw new FileNotFoundException(path.getAbsolutePath());
@ -91,5 +114,35 @@ public class DiscUtil
} }
return ret && path.delete(); return ret && path.delete();
} }
// -------------------------------------------- //
// UTF8 ENCODE AND DECODE
// -------------------------------------------- //
public static byte[] utf8(String string)
{
try
{
return string.getBytes(UTF8);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
return null;
}
}
public static String utf8(byte[] bytes)
{
try
{
return new String(bytes, UTF8);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
return null;
}
}
} }

View File

@ -42,6 +42,7 @@ public class PlayerUtil
eplayer.netServerHandler.sendPacket(new Packet8UpdateHealth(eplayer.getHealth(), eplayer.getFoodData().a(), eplayer.getFoodData().e())); eplayer.netServerHandler.sendPacket(new Packet8UpdateHealth(eplayer.getHealth(), eplayer.getFoodData().a(), eplayer.getFoodData().e()));
} }
// TODO: Is there synchronization/parallelism risks here?
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static Player getPlayerExact(String exactPlayerName) public static Player getPlayerExact(String exactPlayerName)
{ {