From 90570c1185fc70349e0a1ef0f20af79a92aced72 Mon Sep 17 00:00:00 2001 From: NewGarbo Date: Thu, 11 Feb 2016 17:08:05 +0000 Subject: [PATCH] progress on saving outposts/wepaons so far. not finished. probably going to change it to a different format --- .../core/common/file/DataFileInStream.java | 40 ---- .../core/common/file/DataFileOutStream.java | 100 --------- .../mineplex/core/common/file/UtilFile.java | 79 ------- .../core/common/file/chunks/DataChunk.java | 20 -- .../common/file/chunks/DataChunkByte.java | 35 --- .../core/common/file/chunks/DataChunkInt.java | 45 ---- .../common/file/chunks/DataChunkLong.java | 36 ---- .../common/file/chunks/DataChunkString.java | 74 ------- .../core/common/gson/UUIDTypeAdapter.java | 43 ++++ .../mineplex/core/common/util/UtilEncode.java | 116 ---------- .../mineplex/core/common/util/UtilMath.java | 88 ++++++++ .../src/mineplex/game/clans/clans/Test.java | 24 +++ .../game/clans/clans/siege/SiegeManager.java | 89 ++++++++ .../clans/clans/siege/outpost/Outpost.java | 117 +++++++--- .../clans/siege/outpost/OutpostManager.java | 199 ++++++++++++++++-- .../game/clans/clans/siege/weapon/Cannon.java | 2 +- .../clans/clans/siege/weapon/SiegeWeapon.java | 43 +++- .../weapon/serialization/OutpostToken.java | 19 ++ .../serialization/SiegeWeaponToken.java | 22 ++ .../siege/weapon/serialization/TokenInfo.java | 6 + .../game/clans/gameplay/Gameplay.java | 5 - .../game/clans/gameplay/safelog/SafeLog.java | 21 +- .../gameplay/safelog/npc/CombatLogNPC.java | 16 +- 23 files changed, 633 insertions(+), 606 deletions(-) delete mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/DataFileInStream.java delete mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/DataFileOutStream.java delete mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/UtilFile.java delete mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunk.java delete mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkByte.java delete mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkInt.java delete mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkLong.java delete mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkString.java create mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/gson/UUIDTypeAdapter.java delete mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEncode.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/Test.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/OutpostToken.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/SiegeWeaponToken.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/TokenInfo.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/DataFileInStream.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/DataFileInStream.java deleted file mode 100644 index a8d34b3a0..000000000 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/DataFileInStream.java +++ /dev/null @@ -1,40 +0,0 @@ -package mineplex.core.common.file; - -import java.io.IOException; -import java.util.Iterator; -import java.util.List; - -import org.apache.commons.lang3.ArrayUtils; - -import com.google.common.collect.Lists; - -public class DataFileInStream -{ - private Iterator _iterator; - - public DataFileInStream(String file) throws IOException - { - this(Lists.newArrayList(ArrayUtils.toObject(UtilFile.readAllBytes(file)))); - } - - public DataFileInStream(List chunks) - { - _iterator = chunks.iterator(); - } - - public DataFileInStream(Byte[] chunks) - { - this(Lists.newArrayList(chunks)); - } - - public Byte read() - { - return _iterator.next(); - } - - public void dispose() - { - _iterator = null; - } - -} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/DataFileOutStream.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/DataFileOutStream.java deleted file mode 100644 index 6d6666811..000000000 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/DataFileOutStream.java +++ /dev/null @@ -1,100 +0,0 @@ -package mineplex.core.common.file; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import com.google.common.collect.Lists; - -import mineplex.core.common.file.chunks.DataChunk; - -public class DataFileOutStream -{ - private List> _chunks; - - public DataFileOutStream() - { - _chunks = new ArrayList<>(); - } - - public DataFileOutStream(List> chunks) - { - _chunks = chunks; - } - - public DataFileOutStream(DataChunk[] chunks) - { - this(Lists.newArrayList(chunks)); - } - - public void add(DataChunk chunk) - { - _chunks.add(chunk); - } - - private byte[] ensureSize(byte[] bytes, int size) - { - byte[] newBytes = bytes; - - if (bytes.length < size) - { - newBytes = Arrays.copyOf(bytes, size); - } - - return newBytes; - } - - public void writeToFile(String file) throws IOException - { - byte[] bytes = new byte[1]; - - for (DataChunk chunk : _chunks) - { - int oldLength = bytes.length; - - byte[] chunkBytes = chunk.toBytes(); - - bytes = ensureSize(bytes, chunkBytes.length + bytes.length); - - for (int i = oldLength; i < chunkBytes.length; i++) - { - bytes[i - 1] = chunkBytes[(i - 1) - oldLength]; - } - } - - UtilFile.writeToFile(file, bytes); - } - - public String writeBytesToString() - { - byte[] bytes = new byte[1]; - - for (DataChunk chunk : _chunks) - { - int oldLength = bytes.length; - - byte[] chunkBytes = chunk.toBytes(); - - bytes = ensureSize(bytes, chunkBytes.length + bytes.length); - - for (int i = oldLength; i < chunkBytes.length; i++) - { - bytes[i - 1] = chunkBytes[(i - 1) - oldLength]; - } - } - - return new String(bytes); - } - - public void release() - { - _chunks.clear(); - } - - public List> getChunks() - { - return _chunks; - } - -} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/UtilFile.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/UtilFile.java deleted file mode 100644 index 887747ac6..000000000 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/UtilFile.java +++ /dev/null @@ -1,79 +0,0 @@ -package mineplex.core.common.file; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Files; -import java.nio.file.Paths; - -public class UtilFile -{ - public static void writePlainFile(File file, String text) throws FileNotFoundException - { - PrintWriter writer = new PrintWriter(file); - writer.print(text); - writer.close(); - } - - /** - * Will read the specified file, and return the contents, or a null value, - * if an exception is thrown. Will handle all exceptions, and simply ignore - * them and return null. No stack trace printed or anything. - */ - public static String readIgnoreErrors(File file) - { - try - { - return readToStr(file); - } - catch (IOException exception) - { - return null; - } - } - - public static String readToStr(File file) throws IOException - { - return new String(readAllBytes(file)); - } - - public static byte[] readAllBytes(File file) throws IOException - { - return Files.readAllBytes(Paths.get(file.toURI())); - } - - public static void writePlainFile(String file, String text) throws FileNotFoundException - { - writePlainFile(new File(file), text); - } - - /** - * Will read the specified file, and return the contents, or a null value, - * if an exception is thrown. Will handle all exceptions, and simply ignore - * them and return null. No stack trace printed or anything. - */ - public static String readIgnoreErrors(String file) - { - return readIgnoreErrors(new File(file)); - } - - public static String readToStr(String file) throws IOException - { - return readToStr(new File(file)); - } - - public static byte[] readAllBytes(String file) throws IOException - { - return readAllBytes(new File(file)); - } - - public static void writeToFile(String file, byte[] bytes) throws IOException - { - FileOutputStream stream = new FileOutputStream(new File(file)); - stream.write(bytes); - stream.close(); - } - -} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunk.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunk.java deleted file mode 100644 index 9b6ae472e..000000000 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunk.java +++ /dev/null @@ -1,20 +0,0 @@ -package mineplex.core.common.file.chunks; - -import java.io.DataOutputStream; -import java.io.IOException; - -public abstract class DataChunk -{ - protected Type _value; - - public DataChunk(Type value) - { - _value = value; - } - - public abstract void WriteTo(DataOutputStream stream) throws IOException; - - public abstract byte[] toBytes(); - - public abstract boolean IsValid(Type value); -} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkByte.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkByte.java deleted file mode 100644 index 50e0ef3e2..000000000 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkByte.java +++ /dev/null @@ -1,35 +0,0 @@ -package mineplex.core.common.file.chunks; - -import java.io.DataOutputStream; -import java.io.IOException; - -import mineplex.core.common.file.DataFileInStream; - -public class DataChunkByte extends DataChunk -{ - public DataChunkByte(byte value) - { - super(Byte.valueOf(value)); - } - - public boolean IsValid(Byte value) - { - return value != null; - } - - public void WriteTo(DataOutputStream stream) throws IOException - { - stream.write(toBytes()); - } - - public static Byte ReadFrom(DataFileInStream stream) throws IOException - { - return stream.read(); - } - - public byte[] toBytes() - { - return new byte[] { _value.byteValue() }; - } - -} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkInt.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkInt.java deleted file mode 100644 index d61d97620..000000000 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkInt.java +++ /dev/null @@ -1,45 +0,0 @@ -package mineplex.core.common.file.chunks; - -import java.io.DataOutputStream; -import java.io.IOException; - -import mineplex.core.common.file.DataFileInStream; - -public class DataChunkInt extends DataChunk -{ - public DataChunkInt(int value) - { - super(Integer.valueOf(value)); - } - - public boolean IsValid(Integer value) - { - return value != null; - } - - public void WriteTo(DataOutputStream stream) throws IOException - { - stream.write(toBytes()); - } - - public static Integer ReadFrom(DataFileInStream stream) throws IOException - { - int part1 = stream.read().byteValue(); - int part2 = stream.read().byteValue(); - int part3 = stream.read().byteValue(); - int part4 = stream.read().byteValue(); - - return Integer.valueOf(part1 << 24 + part2 << 16 + part3 << 8 + part4); - } - - public byte[] toBytes() - { - byte part1 = (byte) ((_value.intValue() >>> 24) & 0xFF); - byte part2 = (byte) ((_value.intValue() >>> 16) & 0xFF); - byte part3 = (byte) ((_value.intValue() >>> 8) & 0xFF); - byte part4 = (byte) (_value.intValue() & 0xFF); - - return new byte[] { part1, part2, part3, part4 }; - } - -} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkLong.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkLong.java deleted file mode 100644 index d2d6c91cf..000000000 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkLong.java +++ /dev/null @@ -1,36 +0,0 @@ -package mineplex.core.common.file.chunks; - -import java.io.DataOutputStream; -import java.io.IOException; - -import mineplex.core.common.file.DataFileInStream; -import mineplex.core.common.util.UtilEncode; - -public class DataChunkLong extends DataChunk -{ - public DataChunkLong(long value) - { - super(Long.valueOf(value)); - } - - public boolean IsValid(Long value) - { - return value != null; - } - - public void WriteTo(DataOutputStream stream) throws IOException - { - stream.write(toBytes()); - } - - public static Long ReadFrom(DataFileInStream stream) throws IOException - { - return Long.valueOf(UtilEncode.bytesToLong(new byte[] { stream.read().byteValue(), stream.read().byteValue(), stream.read().byteValue(), stream.read().byteValue(), stream.read().byteValue(), stream.read().byteValue(), stream.read().byteValue(), stream.read().byteValue() })); - } - - public byte[] toBytes() - { - return UtilEncode.longToBytes(_value.longValue()); - } - -} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkString.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkString.java deleted file mode 100644 index e9df4c5ad..000000000 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/file/chunks/DataChunkString.java +++ /dev/null @@ -1,74 +0,0 @@ -package mineplex.core.common.file.chunks; - -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang.ArrayUtils; - -import mineplex.core.common.file.DataFileInStream; -import mineplex.core.common.util.UtilEncode; - -public class DataChunkString extends DataChunk -{ - private static final String ENCODING = "UTF-8"; - - public DataChunkString(String value) - { - super(value); - } - - public boolean IsValid(String value) - { - return value != null; - } - - public void WriteTo(DataOutputStream stream) throws IOException - { - stream.write(toBytes()); - } - - public static String ReadFrom(DataFileInStream stream) throws IOException - { - int length = DataChunkInt.ReadFrom(stream).intValue(); - - StringBuilder builder = new StringBuilder(); - - for (int i = 0; i < length; i++) - { - builder.append(DataChunkByte.ReadFrom(stream)); - } - - return null; - } - - public byte[] toBytes() - { - try - { - /* four extra bytes reserved for the size of the string represented as an int */ - byte[] bytes = new byte[4 + _value.getBytes(ENCODING).length]; - - byte[] intBytes = UtilEncode.intToBytes(_value.getBytes(ENCODING).length); - - for (int i = 0; i < intBytes.length; i++) - { - bytes[i] = intBytes[i]; - } - - for (int i = 0; i < _value.getBytes(ENCODING).length; i++) - { - bytes[4 + i] = _value.getBytes(ENCODING)[i]; - } - - return bytes; - } - catch (Exception e) - { - return UtilEncode.intToBytes(0); - } - } - -} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/gson/UUIDTypeAdapter.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/gson/UUIDTypeAdapter.java new file mode 100644 index 000000000..73aef088d --- /dev/null +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/gson/UUIDTypeAdapter.java @@ -0,0 +1,43 @@ +package mineplex.core.common.gson; + +import java.io.IOException; +import java.util.UUID; + +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; + +public class UUIDTypeAdapter extends TypeAdapter +{ + public UUID read(JsonReader reader) throws IOException + { + String uuid = null; + + reader.beginObject(); + + read: + while (reader.hasNext()) + { + switch (reader.nextName()) + { + case "bytes": + { + uuid = reader.nextString(); + break read; + } + } + } + + reader.endObject(); + + return UUID.fromString(uuid); + } + + public void write(JsonWriter writer, UUID uuid) throws IOException + { + writer.beginObject(); + writer.name("bytes").value(uuid.toString()); + writer.endObject(); + } + +} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEncode.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEncode.java deleted file mode 100644 index 59ccae5e0..000000000 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEncode.java +++ /dev/null @@ -1,116 +0,0 @@ -package mineplex.core.common.util; - -public class UtilEncode -{ - public static byte[] intToBytes(int value) - { - byte part1 = (byte) ((value >>> 24) & 0xFF); - byte part2 = (byte) ((value >>> 16) & 0xFF); - byte part3 = (byte) ((value >>> 8) & 0xFF); - byte part4 = (byte) (value & 0xFF); - - return new byte[] { part1, part2, part3, part4 }; - } - - public static byte[] booleanToBytes(boolean value) - { - return new byte[] { (byte) (value ? 1 : 0) }; - } - - public static byte[] doubleToBytes(double value) - { - return longToBytes(Double.doubleToLongBits(value)); - } - - public static byte[] floatToBytes(float value) - { - return intToBytes(Float.floatToIntBits(value)); - } - - public static byte[] charToBytes(char value) - { - byte part1 = (byte) ((value >>> 24) & 0xFF); - byte part2 = (byte) (value & 0xFF); - - return new byte[] { part1, part2 }; - } - - public static byte[] shortToBytes(short value) - { - byte part1 = (byte) ((value >>> 24) & 0xFF); - byte part2 = (byte) (value & 0xFF); - - return new byte[] { part1, part2 }; - } - - public static byte[] longToBytes(long value) - { - byte part1 = (byte) (value >>> 56); - byte part2 = (byte) (value >>> 48); - byte part3 = (byte) (value >>> 40); - byte part4 = (byte) (value >>> 32); - byte part5 = (byte) (value >>> 24); - byte part6 = (byte) (value >>> 16); - byte part7 = (byte) (value >>> 8); - byte part8 = (byte) (value); - - - return new byte[] { part1, part2, part3, part4, part5, part6, part7, part8 }; - } - - public static long bytesToLong(byte[] bytes) - { - long part1 = ((long) bytes[0]) << 56; - long part2 = (((long) bytes[1]) & 255) << 48; - long part3 = (((long) bytes[2]) & 255) << 40; - long part4 = (((long) bytes[3]) & 255) << 32; - long part5 = (((long) bytes[4]) & 255) << 24; - long part6 = (((long) bytes[5]) & 255) << 16; - long part7 = (((long) bytes[6]) & 255) << 8; - long part8 = (((long) bytes[7]) & 255); - - return part1 + part2 + part3 + part4 + part5 + part6 + part7 + part8; - } - - public static int bytesToInt(byte[] bytes) - { - int part1 = ((int) bytes[0]) << 24; - int part2 = ((int) bytes[1]) << 16; - int part3 = ((int) bytes[2]) << 8; - int part4 = ((int) bytes[3]); - - return part1 + part2 + part3 + part4; - } - - public static boolean bytesToBoolean(byte[] bytes) - { - return bytes[0] == 1; - } - -// public static byte[] bytesToDouble(byte[] bytes) -// { -// return Double.longBitsToDouble(); -// } -// -// public static byte[] floatToBytes(float value) -// { -// return intToBytes(Float.floatToIntBits(value)); -// } -// -// public static byte[] charToBytes(char value) -// { -// byte part1 = (byte) ((value >>> 24) & 0xFF); -// byte part2 = (byte) (value & 0xFF); -// -// return new byte[] { part1, part2 }; -// } -// -// public static byte[] shortToBytes(short value) -// { -// byte part1 = (byte) ((value >>> 24) & 0xFF); -// byte part2 = (byte) (value & 0xFF); -// -// return new byte[] { part1, part2 }; -// } - -} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java index d089bad59..82bbb711f 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java @@ -189,5 +189,93 @@ public class UtilMath public static boolean isEven(int size) { return size % 2 == 0; + } + + public static byte[] getBits(int value) + { + byte[] bits = new byte[32]; + + String bit = Long.toBinaryString(value); + + while (bit.length() < 32) + { + bit = "0" + bit; + } + + int index = 0; + for (char c : bit.toCharArray()) + { + bits[index] = (byte) (c == '1' ? '1' : '0'); + + index++; + } + + return bits; + } + + public static byte[] getBits(long value) + { + byte[] bits = new byte[64]; + + String bit = Long.toBinaryString(value); + + while (bit.length() < 64) + { + bit = "0" + bit; + } + + int index = 0; + for (char c : bit.toCharArray()) + { + bits[index] = (byte) (c == '1' ? '1' : '0'); + + index++; + } + + return bits; + } + + public static byte[] getBits(byte value) + { + byte[] bits = new byte[8]; + + String bit = Long.toBinaryString(value); + + while (bit.length() < 8) + { + bit = "0" + bit; + } + + int index = 0; + for (char c : bit.toCharArray()) + { + bits[index] = (byte) (c == '1' ? '1' : '0'); + + index++; + } + + return bits; + } + + public static byte[] getBits(short value) + { + byte[] bits = new byte[16]; + + String bit = Long.toBinaryString(value); + + while (bit.length() < 16) + { + bit = "0" + bit; + } + + int index = 0; + for (char c : bit.toCharArray()) + { + bits[index] = (byte) (c == '1' ? '1' : '0'); + + index++; + } + + return bits; } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/Test.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/Test.java new file mode 100644 index 000000000..46daab300 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/Test.java @@ -0,0 +1,24 @@ +package mineplex.game.clans.clans; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Test { + public static void main(String[] args) throws IOException + { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(stream); + + dos.writeByte(91); + dos.flush(); + stream.flush(); + + System.out.println(new String(stream.toByteArray())); + + dos.close(); + stream.close(); + + + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java index a9b8f3878..35a8a8935 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java @@ -2,8 +2,11 @@ package mineplex.game.clans.clans.siege; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import org.bukkit.Location; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; @@ -11,7 +14,11 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.plugin.java.JavaPlugin; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + import mineplex.core.MiniPlugin; +import mineplex.core.common.gson.UUIDTypeAdapter; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilPlayer; @@ -24,7 +31,9 @@ import mineplex.game.clans.clans.siege.outpost.OutpostManager; import mineplex.game.clans.clans.siege.weapon.Cannon; import mineplex.game.clans.clans.siege.weapon.Catapult; import mineplex.game.clans.clans.siege.weapon.SiegeWeapon; +import mineplex.game.clans.clans.siege.weapon.serialization.TokenInfo; import mineplex.game.clans.core.repository.ClanTerritory; +import mineplex.game.clans.spawn.Spawn; public class SiegeManager extends MiniPlugin { @@ -36,19 +45,99 @@ public class SiegeManager extends MiniPlugin public List LiveSiegeWeapons = new ArrayList<>(); + private Gson _gson; + public SiegeManager(JavaPlugin plugin, ClansManager clans) { super("Siege", plugin); + _gson = new GsonBuilder().registerTypeAdapter(UUID.class, new UUIDTypeAdapter()).create(); + _clans = clans; _outpostManager = new OutpostManager(clans, this); + _outpostManager.loadExistingOutposts(); + + loadExistingWeapons(); + addCommand(new CommandSiegeSupplies(_outpostManager)); Instance = this; } + /** + * data clusters: + * STRING : { + * int(4BYTE) length; + * byte[] bytes; + * } + * + * LOCATION : { + * STRING world; + * int(4BYTE) x; + * int(4BYTE) y; + * int(4BYTE) z; + * } + * + * ITEM : { + * STRING material; + * byte data; + * int amount; + * } + * + * INVENTORY : { + * int numOfEntries; + * ITEM[] item; + * } + * + * data format: + * Outpost { + * STRING clanOwner; + * int weaponType; + * STRING outpostId; + * LOCATION location; + * INVENTORY inventory; + * MAP comprisedOf; + * double health; + * double yaw; + * String rider; + * long lastFired; + * } + */ + private void loadExistingWeapons() + { + try + { + for (Entity entity : Spawn.getSpawnWorld().getEntities()) + { + if (!(entity instanceof ArmorStand)) + { + continue; + } + + if (!entity.hasMetadata("$SERIALIZED_SIEGE_WEAPON_DATA$") ||!entity.hasMetadata("$TOKEN_INFO$")) + { + continue; + } + + ArmorStand stand = (ArmorStand) entity; + + String data = entity.getMetadata("$SERIALIZED_SIEGE_WEAPON_DATA$").get(0).asString(); + String type = entity.getMetadata("$TOKEN_INFO$").get(0).asString(); + + SiegeWeapon weapon = _gson.fromJson(data, _gson.fromJson(type, TokenInfo.class).Type); + + + + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + @EventHandler public void projectileHit(ProjectileHitEvent event) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/Outpost.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/Outpost.java index 806ba7a3d..3c3e82886 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/Outpost.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/Outpost.java @@ -1,5 +1,7 @@ package mineplex.game.clans.clans.siege.outpost; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -12,6 +14,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Chest; +import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Arrow; import org.bukkit.entity.FallingBlock; import org.bukkit.entity.Player; @@ -75,7 +78,7 @@ public class Outpost implements Listener private OutpostManager _host; - private UUID _uuid = UUID.randomUUID(); + private final String _id; private ClanInfo _owner; @@ -122,10 +125,56 @@ public class Outpost implements Listener private long _siegeDeclaredTime = -1; private Arrow _declarationArrow; + private ArmorStand _dataEntity; + + public Outpost(OutpostManager outpostManager, String id, Location origin, ClanInfo ownerClan, OutpostType outpostType, double health, long spawnTime, ClanInfo againstClan, long siegeDeclaredTime, OutpostState outpostState) + { + _host = outpostManager; + + _health = health; + + _siegeDeclaredTime = siegeDeclaredTime; + _against = againstClan; + + _id = id; + + _siegeWeaponDistance = outpostType._size + 27.5; + + _owner = ownerClan; + + _startCorner = origin.clone().subtract(outpostType._size, 1.1, outpostType._size); + _endCorner = origin.clone().add(outpostType._size + .9, outpostType._ySize - 1, outpostType._size + .9); + + _weapons = new ArrayList<>(); + + _forceFieldStart = _startCorner.clone().subtract(4, 0, 4); + _forceFieldEnd = _endCorner.clone().add(4.5, 0, 4.5); + + _origin = origin; + + _type = outpostType; + + _spawnTime = spawnTime; + + _core = _type.getCoreLocation(_origin); + + _preHologram = new Hologram(_owner.Clans.getHologramManager(), _origin.clone().add(0.5, 2.3, 0.5), F.elem(_owner.getName()) + C.cWhite + "'s Outpost block (Right-Click to activate)"); + _preHologram2 = new Hologram(_owner.Clans.getHologramManager(), _origin.clone().add(0.5, 3, 0.5), "Despawning: " + UtilText.getProgress(null, 0, null, true)); + + _preHologram.start(); + _preHologram2.start(); + + _dataEntity = origin.getWorld().spawn(origin, ArmorStand.class); + + _state = outpostState; + } + public Outpost(OutpostManager host, ClanInfo clan, Location location, OutpostType type) { _host = host; + _id = Integer.toString(UtilMath.random.nextInt(13333337)); + _siegeWeaponDistance = type._size + 27.5; _owner = clan; @@ -135,8 +184,8 @@ public class Outpost implements Listener _weapons = new ArrayList<>(); - _forceFieldStart = _startCorner.clone().subtract(3, 0, 3); - _forceFieldEnd = _endCorner.clone().add(3, 0, 3); + _forceFieldStart = _startCorner.clone().subtract(4, 0, 4); + _forceFieldEnd = _endCorner.clone().add(4.5, 0, 4.5); _origin = location.clone(); @@ -152,9 +201,27 @@ public class Outpost implements Listener _preHologram.start(); _preHologram2.start(); + _dataEntity = location.getWorld().spawn(location, ArmorStand.class); + _state = OutpostState.AWAITING; } + private void updateData() + { + try + { + String data = ""; + + + + _dataEntity.setMetadata("$SERIALIZED_OUTPOST_DATA$", new FixedMetadataValue(_host.getPlugin(), data)); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + private void cleanup() { _blocks = null; @@ -210,12 +277,16 @@ public class Outpost implements Listener @EventHandler(priority = EventPriority.HIGHEST) public void fireBow(EntityShootBowEvent event) { - if (!(event.getEntity() instanceof Player)) + if (!(event.getEntity() instanceof Player) || !(event.getProjectile() instanceof Arrow)) { return; } + + event.setCancelled(true); + Player player = (Player) event.getEntity(); + Arrow arrow = player.shootArrow(); if (_owner.isMember(player)) { @@ -230,10 +301,10 @@ public class Outpost implements Listener if (item.isSimilar(SIEGE_DECLARATION_ARROW)) { - if (_against == null && !event.getProjectile().hasMetadata("OutpostData")) + if (_against == null && !arrow.hasMetadata("OutpostData")) { - event.getProjectile().setMetadata("OutpostData", new FixedMetadataValue(_host.getPlugin(), _owner.getName() + ";" + player.getName())); - _declarationArrow = (Arrow) event.getProjectile(); + arrow.setMetadata("OutpostData", new FixedMetadataValue(_host.getPlugin(), _owner.getName() + ";" + player.getName())); + _declarationArrow = (Arrow) arrow; } player.getInventory().setItem(slot, null); @@ -301,6 +372,15 @@ public class Outpost implements Listener protected void update() { + if (_declarationArrow != null) + { + _declarationArrow.setFireTicks(20); + + RGBData color = _arrowColors.next(); + + UtilParticle.PlayParticle(ParticleType.MOB_SPELL, _declarationArrow.getLocation(), new Vector(color.getRed(), color.getGreen(), color.getBlue()), 1f, 0, ViewDist.MAX); + } + if (_against != null && getTimeToSiege() > 0) { _against.getOnlinePlayers().forEach(this::informTimeToSiege); @@ -321,15 +401,6 @@ public class Outpost implements Listener return; } - if (_declarationArrow != null) - { - _declarationArrow.setFireTicks(20); - - RGBData color = _arrowColors.next(); - - UtilParticle.PlayParticle(ParticleType.MOB_SPELL, _declarationArrow.getLocation(), new Vector(color.getRed(), color.getGreen(), color.getBlue()), 1f, 0, ViewDist.MAX); - } - _preHologram2.setText(UtilText.getProgress(null, UtilMath.clamp(getLifetime(), 0., 60000.) / 60000., null, true)); RGBData color = UtilColor.RgbLightBlue; @@ -490,13 +561,6 @@ public class Outpost implements Listener return list; } - public void instakill() - { - _blocks.values().forEach(OutpostBlock::restore); - - cleanup(); - } - public void kill() { _state = OutpostState.DESTRUCTING; @@ -663,7 +727,7 @@ public class Outpost implements Listener public long getTimeToSiege() { - return System.currentTimeMillis() - getTimeSiegeDeclared(); + return PREP_TIME - (System.currentTimeMillis() - getTimeSiegeDeclared()); } public void setDeclarationArrow(Arrow arrow) @@ -680,4 +744,9 @@ public class Outpost implements Listener { _weapons.add(weapon); } + + public String getId() + { + return _id; + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/OutpostManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/OutpostManager.java index d0702fbb5..3034e6f0d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/OutpostManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/outpost/OutpostManager.java @@ -1,15 +1,18 @@ package mineplex.game.clans.clans.siege.outpost; +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -20,11 +23,9 @@ import org.bukkit.event.entity.EntityChangeBlockEvent; import com.google.common.collect.Lists; import mineplex.core.MiniPlugin; -import mineplex.core.common.events.ServerShutdownEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; @@ -39,12 +40,14 @@ import mineplex.game.clans.clans.event.PlayerClaimTerritoryEvent; import mineplex.game.clans.clans.siege.SiegeManager; import mineplex.game.clans.clans.siege.events.SiegeWeaponExplodeEvent; import mineplex.game.clans.core.repository.ClanTerritory; +import mineplex.game.clans.spawn.Spawn; public class OutpostManager extends MiniPlugin { private ClansManager _clansManager; private Map _outposts = new HashMap<>(); + private Map _idToOutpost = new HashMap<>(); private List _removalQueue; @@ -61,6 +64,182 @@ public class OutpostManager extends MiniPlugin _removalQueue = new ArrayList<>(); } + public void loadExistingOutposts() + { + try + { + for (Entity entity : Spawn.getSpawnWorld().getEntities()) + { + if (!(entity instanceof ArmorStand)) + { + continue; + } + + if (!entity.hasMetadata("$SERIALIZED_OUTPOST_DATA$")) + { + continue; + } + + ArmorStand stand = (ArmorStand) entity; + + String data = entity.getMetadata("$SERIALIZED_OUTPOST_DATA$").get(0).asString(); + + ByteArrayInputStream stream = new ByteArrayInputStream(data.getBytes("UTF-8")); + DataInputStream dis = new DataInputStream(stream); + + String id; + Location origin; + OutpostType outpostType; + ClanInfo ownerClan; + double health; + long spawnTime; + ClanInfo againstClan; + long siegeDeclaredTime; + OutpostState outpostState; + + // Read UUID + { + int uuidLength = dis.readInt(); + + StringBuilder clanName = new StringBuilder(); + + for (int i = 0; i < uuidLength; i++) + { + clanName.append((char) dis.readByte()); + } + + id = clanName.toString(); + } + + // Read origin location + { + int worldLength = dis.readInt(); + + StringBuilder worldName = new StringBuilder(); + + for (int i = 0; i < worldLength; i++) + { + worldName.append((char) dis.readByte()); + } + + String world = worldName.toString(); + + int x = dis.readInt(); + int y = dis.readInt(); + int z = dis.readInt(); + + origin = new Location(Bukkit.getWorld(world), x, y, z); + } + + // Read outpost type + { + int typeLength = dis.readInt(); + + StringBuilder type = new StringBuilder(); + + for (int i = 0; i < typeLength; i++) + { + type.append((char) dis.readByte()); + } + + outpostType = OutpostType.valueOf(type.toString()); + } + + // Read owner clan + { + int clanNameLength = dis.readInt(); + + StringBuilder clanName = new StringBuilder(); + + for (int i = 0; i < clanNameLength; i++) + { + clanName.append((char) dis.readByte()); + } + + ClanInfo clan = _clansManager.getClanUtility().getClanByClanName(clanName.toString()); + + if (clan == null) + { + System.out.println("OUTPOSTMANAGER: Tried to load Outpost (ID: " + id + ") but did not find owner clan."); + return; + } + + ownerClan = clan; + } + + // Read health + { + health = dis.readDouble(); + } + + // Read spawn time + { + spawnTime = dis.readLong(); + } + + // Read "against" clan + { + int clanNameLength = dis.readInt(); + + if (clanNameLength == 0) + { + againstClan = null; + } + else + { + StringBuilder clanName = new StringBuilder(); + + for (int i = 0; i < clanNameLength; i++) + { + clanName.append((char) dis.readByte()); + } + + ClanInfo clan = _clansManager.getClanUtility().getClanByClanName(clanName.toString()); + + if (clan == null) + { + System.out.println("OUTPOSTMANAGER: Tried to load Outpost (ID: " + id + ") but did not find against clan."); + return; + } + + againstClan = clan; + } + } + + // Read siegeDeclaredTime + { + siegeDeclaredTime = dis.readLong(); + } + + // Read outpost state + { + int stateLength = dis.readInt(); + + StringBuilder state = new StringBuilder(); + + for (int i = 0; i < stateLength; i++) + { + state.append((char) dis.readByte()); + } + + outpostState = OutpostState.valueOf(state.toString()); + } + + dis.close(); + stream.close(); + + Outpost outpost = new Outpost(this, id, origin, ownerClan, outpostType, health, spawnTime, againstClan, siegeDeclaredTime, outpostState); + + _outposts.put(ownerClan.getName(), outpost); + _idToOutpost.put(id, outpost); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + @EventHandler(priority = EventPriority.LOWEST) public void onPlaceBlock(BlockPlaceEvent event) { @@ -187,6 +366,7 @@ public class OutpostManager extends MiniPlugin } _outposts.put(clan.getName(), new Outpost(this, clan, location, type)); + _idToOutpost.put(_outposts.get(clan.getName()).getId(), _outposts.get(clan.getName())); _plugin.getServer().getPluginManager().registerEvents(_outposts.get(clan.getName()), _plugin); @@ -202,15 +382,6 @@ public class OutpostManager extends MiniPlugin } } - @EventHandler - public void onServerShutdown(ServerShutdownEvent event) - { - for (Outpost outpost : _outposts.values()) - { - outpost.instakill(); - } - } - @EventHandler public void onClaim(PlayerClaimTerritoryEvent event) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index 5ef7f26fc..ea1ddbee3 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -136,7 +136,7 @@ public class Cannon extends SiegeWeapon armorStand.setVisible(false); armorStand.setGravity(false); - armorStand.setPassenger(getEntity("Filler")); + armorStand.setPassenger(getEntity("Filler_1")); addEntity(armorStand, "WEAPON"); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java index 240ab2315..f15d5f1d9 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java @@ -1,7 +1,10 @@ package mineplex.game.clans.clans.siege.weapon; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; import org.apache.commons.lang.Validate; import org.bukkit.Location; @@ -49,6 +52,7 @@ import mineplex.game.clans.clans.siege.events.SiegeWeaponExplodeEvent; import mineplex.game.clans.clans.siege.outpost.Outpost; import mineplex.game.clans.clans.siege.weapon.projectile.ProjectileAttributes; import mineplex.game.clans.clans.siege.weapon.projectile.WeaponProjectile; +import mineplex.game.clans.clans.siege.weapon.serialization.SiegeWeaponToken; import mineplex.game.clans.clans.siege.weapon.util.AccessRule; import mineplex.game.clans.clans.siege.weapon.util.AccessType; import mineplex.game.clans.clans.siege.weapon.util.BarrierCollisionBox; @@ -123,8 +127,12 @@ public abstract class SiegeWeapon implements Listener protected boolean _alive = true; - public SiegeWeapon(Location location, double maxHealth, String name, ClanInfo owner, ClansManager clansManager, SiegeManager siegeManager, Outpost outpost) + protected final int _weaponTypeIdentifier; + + public SiegeWeapon(int typeId, Location location, double maxHealth, String name, ClanInfo owner, ClansManager clansManager, SiegeManager siegeManager, Outpost outpost) { + _weaponTypeIdentifier = typeId; + _outpost = outpost; _siegeManager = siegeManager; _location = location; @@ -144,6 +152,39 @@ public abstract class SiegeWeapon implements Listener _clans = clansManager; } + public SiegeWeaponToken tokenize() + { + SiegeWeaponToken token = new SiegeWeaponToken(); + + Map comprisedOf = new HashMap<>(); + + for (Entry entry : _entityMapping.entrySet()) + { + comprisedOf.put(entry.getKey(), entry.getValue().getUniqueId()); + } + + + token.ComprisedOf = comprisedOf; + + token.OwnerClan = _owner; + + token.WeaponType = _weaponTypeIdentifier; + + token.OutpostId = _outpost == null ? null : _outpost.getId(); + + token.Location = _location; + + token.Health = _health; + + token.Yaw = _yaw; + + token.Rider = _rider; + + token.LastFired = _lastFired; + + return token; + } + public int getBaseDamage() { return _baseDamage; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/OutpostToken.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/OutpostToken.java new file mode 100644 index 000000000..3ba7ee23f --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/OutpostToken.java @@ -0,0 +1,19 @@ +package mineplex.game.clans.clans.siege.weapon.serialization; + +import org.bukkit.Location; + +import mineplex.game.clans.clans.siege.outpost.OutpostState; +import mineplex.game.clans.clans.siege.outpost.OutpostType; + +public class OutpostToken +{ + public String Id; + public Location Origin; + public OutpostType Type; + public String OwnerClan; + public double Health; + public long TimeSpawned; + public String againstClan; + public long siegeDeclaredTime; + public OutpostState outpostState; +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/SiegeWeaponToken.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/SiegeWeaponToken.java new file mode 100644 index 000000000..858214ae4 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/SiegeWeaponToken.java @@ -0,0 +1,22 @@ +package mineplex.game.clans.clans.siege.weapon.serialization; + +import java.util.Map; +import java.util.UUID; + +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import mineplex.game.clans.clans.ClanInfo; + +public class SiegeWeaponToken +{ + public ClanInfo OwnerClan; + public int WeaponType; + public String OutpostId; + public Location Location; + public Map ComprisedOf; + public double Health; + public double Yaw; + public Player Rider; + public long LastFired; +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/TokenInfo.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/TokenInfo.java new file mode 100644 index 000000000..2bab907e6 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/serialization/TokenInfo.java @@ -0,0 +1,6 @@ +package mineplex.game.clans.clans.siege.weapon.serialization; + +public class TokenInfo +{ + public Class Type; +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java index a7e4d801e..ac061de02 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java @@ -164,11 +164,6 @@ public class Gameplay extends MiniPlugin if (!playerClass.IsGameClass(ClassType.Assassin, ClassType.Ranger)) { - if (event.getProjectile().hasMetadata("OutpostData")) - { - return; - } - notify(player, "You cannot use bows without the proper class!"); event.setCancelled(true); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/SafeLog.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/SafeLog.java index 4b7bc5f4b..7dbdfd162 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/SafeLog.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/SafeLog.java @@ -1,6 +1,8 @@ package mineplex.game.clans.gameplay.safelog; +import java.io.DataInputStream; import java.io.File; +import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; @@ -13,9 +15,6 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; -import mineplex.core.common.file.DataFileInStream; -import mineplex.core.common.file.chunks.DataChunkLong; -import mineplex.core.common.file.chunks.DataChunkString; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; @@ -77,10 +76,18 @@ public class SafeLog extends MiniPlugin { try { - DataFileInStream stream = new DataFileInStream(_clansManager.UserDataDir + String.format("DEATH_%s.dat", player.getUniqueId().toString())); + DataInputStream stream = new DataInputStream(new FileInputStream(deathFile)); - final long time = DataChunkLong.ReadFrom(stream).longValue(); - final String killerName = DataChunkString.ReadFrom(stream); + final long time = stream.readLong(); + final int length = stream.readInt(); + final StringBuilder killerName = new StringBuilder(); + + for (int i = 0; i < length; i++) + { + killerName.append((char) stream.readByte()); + } + + stream.close(); UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(getPlugin(), new Runnable() { @@ -92,8 +99,6 @@ public class SafeLog extends MiniPlugin } }, 15); - stream.dispose(); - deathFile.delete(); } catch (Exception e) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/npc/CombatLogNPC.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/npc/CombatLogNPC.java index eacca4e90..f83a7b0cb 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/npc/CombatLogNPC.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/safelog/npc/CombatLogNPC.java @@ -1,6 +1,8 @@ package mineplex.game.clans.gameplay.safelog.npc; +import java.io.DataOutputStream; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.util.List; @@ -15,8 +17,6 @@ import org.bukkit.entity.Player; import org.bukkit.entity.Skeleton; import org.bukkit.metadata.FixedMetadataValue; -import mineplex.core.common.file.DataFileOutStream; -import mineplex.core.common.file.UtilFile; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilEnt; @@ -90,20 +90,20 @@ public class CombatLogNPC { killerName = ((CraftPlayer) killer).getName(); } - else if (killer != null) + else { killerName = UtilEnt.getName(killer); } - System.out.println(killerName); - try { - DataFileOutStream stream = new DataFileOutStream(); + DataOutputStream stream = new DataOutputStream(new FileOutputStream(_userDataPath + String.format("DEATH_%s.dat", _playerInfo.getPlayerUuid()))); - stream.writeToFile(_userDataPath + String.format("DEATH_%s.dat", _playerInfo.getPlayerUuid())); + stream.writeLong(System.currentTimeMillis()); + stream.writeInt(killerName.length()); + stream.writeBytes(killerName); - stream.release(); + stream.close(); } catch (IOException e) {