From 6774b6f8aa4e107c53e041dceb021315be142346 Mon Sep 17 00:00:00 2001 From: p2vman Date: Wed, 29 Jan 2025 15:52:18 +0200 Subject: [PATCH] da --- base/build.gradle | 4 +- .../main/java/io/github/p2vman/nbt/NbtIo.java | 63 +++++++ .../java/io/github/p2vman/nbt/Serializer.java | 51 ++++++ .../java/io/github/p2vman/nbt/TagReader.java | 36 ++++ .../java/io/github/p2vman/nbt/TagWriter.java | 28 ++++ .../java/io/github/p2vman/nbt/tag/Tag.java | 28 ++++ .../io/github/p2vman/nbt/tag/TagByte.java | 40 +++++ .../github/p2vman/nbt/tag/TagByteArray.java | 48 ++++++ .../io/github/p2vman/nbt/tag/TagCompound.java | 55 ++++++ .../io/github/p2vman/nbt/tag/TagDouble.java | 41 +++++ .../java/io/github/p2vman/nbt/tag/TagEnd.java | 29 ++++ .../io/github/p2vman/nbt/tag/TagFloat.java | 41 +++++ .../java/io/github/p2vman/nbt/tag/TagInt.java | 41 +++++ .../io/github/p2vman/nbt/tag/TagIntArray.java | 53 ++++++ .../io/github/p2vman/nbt/tag/TagList.java | 77 +++++++++ .../io/github/p2vman/nbt/tag/TagLong.java | 38 +++++ .../github/p2vman/nbt/tag/TagLongArray.java | 49 ++++++ .../io/github/p2vman/nbt/tag/TagShort.java | 38 +++++ .../io/github/p2vman/nbt/tag/TagString.java | 38 +++++ .../java/io/github/p2vman/utils/Pair.java | 13 ++ base/src/main/java/org/eptalist/Config.java | 2 + .../src/main/java/org/eptalist/Constants.java | 5 + .../main/java/org/eptalist/storge/NBT.java | 157 ++++++++++++++++++ build.gradle | 8 +- spigot/build.gradle | 2 +- .../java/org/eptalist/spigot/EptaList.java | 3 +- spigot/src/main/resources/plugin.yml | 2 +- velocity/build.gradle | 2 +- .../java/org/eptalist/velocity/Velocity.java | 3 +- 29 files changed, 985 insertions(+), 10 deletions(-) create mode 100644 base/src/main/java/io/github/p2vman/nbt/NbtIo.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/Serializer.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/TagReader.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/TagWriter.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/Tag.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagByte.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagByteArray.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagCompound.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagDouble.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagEnd.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagFloat.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagInt.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagIntArray.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagList.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagLong.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagLongArray.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagShort.java create mode 100644 base/src/main/java/io/github/p2vman/nbt/tag/TagString.java create mode 100644 base/src/main/java/io/github/p2vman/utils/Pair.java create mode 100644 base/src/main/java/org/eptalist/Constants.java create mode 100644 base/src/main/java/org/eptalist/storge/NBT.java diff --git a/base/build.gradle b/base/build.gradle index 27e0c8b..4e0c0f8 100644 --- a/base/build.gradle +++ b/base/build.gradle @@ -3,7 +3,7 @@ plugins { } group = 'io.github.p2vman' -version = '1.0' +version = '1.2' repositories { mavenCentral() @@ -11,6 +11,8 @@ repositories { dependencies { implementation "com.google.code.gson:gson:2.8.9" + annotationProcessor 'org.projectlombok:lombok:1.18.30' + compileOnly 'org.projectlombok:lombok:1.18.30' } task createJar(type: Jar) { diff --git a/base/src/main/java/io/github/p2vman/nbt/NbtIo.java b/base/src/main/java/io/github/p2vman/nbt/NbtIo.java new file mode 100644 index 0000000..4e3a334 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/NbtIo.java @@ -0,0 +1,63 @@ +package io.github.p2vman.nbt; + +import io.github.p2vman.nbt.tag.*; +import io.github.p2vman.utils.Pair; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class NbtIo { + private Map> idclass; + + public NbtIo(Map> idclass) { + this.idclass = idclass; + } + + public Serializer getSerializer() { + return new Serializer(this); + } + + public NbtIo() { + this.idclass = new HashMap<>(); + for (Tag tag : new Tag[] { + new TagEnd(), + new TagFloat(), + new TagInt(), + new TagCompound(), + new TagIntArray(), + new TagList(), + new TagByte(), + new TagByteArray(), + new TagDouble(), + new TagLong(), + new TagLongArray(), + new TagShort(), + new TagString() + }) { + idclass.put(tag.getID(), tag.getClass()); + } + } + + public Pair read(DataInputStream stream) throws IOException { + TagReader reader = new TagReader(this.idclass); + return reader.read(stream); + } + + public void write(DataOutputStream stream, Tag tag) throws IOException { + TagWriter writer = new TagWriter(this.idclass); + writer.write(stream, tag); + } + + public TagCompound readCompound(DataInputStream stream) throws IOException { + TagReader reader = new TagReader(this.idclass); + Tag tag = reader.read(stream).v; + return tag instanceof TagCompound ? (TagCompound) tag : new TagCompound(); + } + + public static NbtIo create(Tag... tags) { + return new NbtIo(); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/Serializer.java b/base/src/main/java/io/github/p2vman/nbt/Serializer.java new file mode 100644 index 0000000..432664c --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/Serializer.java @@ -0,0 +1,51 @@ +package io.github.p2vman.nbt; + + +import io.github.p2vman.nbt.tag.*; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.lang.reflect.Field; +public class Serializer { + private NbtIo io; + public Tag get(Field field, Object obj) throws IllegalArgumentException, IllegalAccessException { + Object fobj = field.get(obj); + if (fobj instanceof Integer) { + return new TagInt((Integer) fobj); + } else if (fobj instanceof Byte) { + return new TagByte((Byte) fobj); + } else if (fobj instanceof Short) { + return new TagShort((Short) fobj); + } else if (fobj instanceof String) { + return new TagString((String) fobj); + } else if (fobj instanceof Long) { + return new TagLong((Long) fobj); + } else { + return new TagEnd(); + } + } + + public TagCompound objr(Object obj) throws IllegalArgumentException, IllegalAccessException { + TagCompound compound = new TagCompound(); + Class cls = obj.getClass(); + compound.put("!", new TagString(cls.getTypeName())); + + for (Field field : cls.getFields()) { + Tag tag = get(field, obj); + if (tag instanceof TagEnd) { + compound.put(field.getName(), objr(field.get(obj))); + } else { + compound.put(field.getName(), tag); + } + } + return compound; + } + + public Serializer(NbtIo io) { + this.io = io; + } + + public void write(DataOutputStream stream, Object obj) throws IOException, IllegalArgumentException, IllegalAccessException { + io.write(stream, objr(obj)); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/TagReader.java b/base/src/main/java/io/github/p2vman/nbt/TagReader.java new file mode 100644 index 0000000..4487563 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/TagReader.java @@ -0,0 +1,36 @@ +package io.github.p2vman.nbt; + +import io.github.p2vman.nbt.tag.Tag; +import io.github.p2vman.nbt.tag.TagEnd; +import io.github.p2vman.utils.Pair; + +import java.io.DataInputStream; +import java.io.IOException; +import java.util.Map; + +public class TagReader { + public final Map> idclass; + public TagReader(Map> idclass) { + this.idclass = idclass; + } + + public Pair read(DataInputStream stream) throws IOException { + char type = (char) stream.readByte(); + if (type == 0) { + return new Pair<>("", new TagEnd()); + } + + for (Map.Entry> entry : idclass.entrySet()) { + if (entry.getKey() == type) { + try { + Pair pair = new Pair<>(stream.readUTF(), entry.getValue().getDeclaredConstructor().newInstance()); + pair.v.read(stream, this); + return pair; + } catch (java.lang.InstantiationException | java.lang.IllegalAccessException | java.lang.NoSuchMethodException | java.lang.reflect.InvocationTargetException e) { + throw new IOException(e); + } + } + } + return new Pair<>("", new TagEnd()); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/TagWriter.java b/base/src/main/java/io/github/p2vman/nbt/TagWriter.java new file mode 100644 index 0000000..6fe7cfc --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/TagWriter.java @@ -0,0 +1,28 @@ +package io.github.p2vman.nbt; + +import io.github.p2vman.nbt.tag.Tag; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Map; + +public class TagWriter { + public final Map> idclass; + public TagWriter(Map> idclass) { + this.idclass = idclass; + } + + public void write(DataOutputStream stream, Tag tag) throws IOException { + write(stream, tag, ""); + } + + public void write(DataOutputStream stream, Tag tag, String name) throws IOException { + for (Map.Entry> entry : idclass.entrySet()) { + if (entry.getValue() == tag.getClass()) { + stream.write(tag.getID()); + stream.writeUTF(name); + tag.write(stream, this); + } + } + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/Tag.java b/base/src/main/java/io/github/p2vman/nbt/tag/Tag.java new file mode 100644 index 0000000..e4ace58 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/Tag.java @@ -0,0 +1,28 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public abstract class Tag { + public static final char TagByte = 1; + public static final char TagShort = 2; + public static final char TagInt = 3; + public static final char TagLong = 4; + public static final char TagFloat = 5; + public static final char TagDouble = 6; + public static final char TagByteArray = 7; + public static final char TagString = 8; + public static final char TagList = 9; + public static final char TagCompound = 10; + public static final char TagIntArray = 11; + public static final char TagLongArray = 12; + public abstract char getID(); + + + public abstract void write(DataOutputStream stream, TagWriter writer) throws IOException; + public abstract void read(DataInputStream stream, TagReader reader) throws IOException; +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagByte.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagByte.java new file mode 100644 index 0000000..a5768d0 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagByte.java @@ -0,0 +1,40 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +@NoArgsConstructor +@ToString +public class TagByte extends Tag { + @Getter + @Setter + private byte value; + public TagByte(byte value) { + this.value = value; + } + + @Override + public char getID() { + return 1; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + byte[] buffer = new byte[1]; + stream.read(buffer); + value = buffer[0]; + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.write(value); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagByteArray.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagByteArray.java new file mode 100644 index 0000000..368e881 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagByteArray.java @@ -0,0 +1,48 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; + +@NoArgsConstructor +@ToString +public class TagByteArray extends Tag { + @Getter + @Setter + private byte[] value; + + public int size() { + if (value != null) return value.length; + return 0; + } + public TagByteArray(byte[] value) { + this.value = value; + } + + @Override + public char getID() { + return 7; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + byte[] buffer = new byte[4]; + stream.read(buffer); + value = new byte[ByteBuffer.wrap(buffer).getInt()]; + stream.read(value); + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.write(ByteBuffer.allocate(Integer.BYTES).putInt(value.length).array()); + stream.write(value); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagCompound.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagCompound.java new file mode 100644 index 0000000..7797e20 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagCompound.java @@ -0,0 +1,55 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import io.github.p2vman.utils.Pair; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@NoArgsConstructor +@ToString +public class TagCompound extends Tag { + private Map tagMap = new HashMap<>(); + public void put(String name, Tag tag) { + tagMap.put(name, tag); + } + + public Tag get(String name) { + return tagMap.get(name); + } + + public boolean is(String name) { + return tagMap.containsKey(name); + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + for (Map.Entry entry : tagMap.entrySet()) { + writer.write(stream, entry.getValue(), entry.getKey()); + } + stream.writeByte(0x00); + } + + @Override + public char getID() { + return 10; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + this.tagMap.clear(); + while (true) { + Pair tagPair = reader.read(stream); + if (tagPair.getV().getID() == 0) { + break; + } + tagMap.put(tagPair.k, tagPair.v); + } + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagDouble.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagDouble.java new file mode 100644 index 0000000..c256cc3 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagDouble.java @@ -0,0 +1,41 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; + +@NoArgsConstructor +@ToString +public class TagDouble extends Tag { + @Getter + @Setter + private double value; + public TagDouble(double value) { + this.value = value; + } + + @Override + public char getID() { + return 6; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + byte[] buffer = new byte[Double.BYTES]; + stream.read(buffer); + value = ByteBuffer.wrap(buffer).getDouble(); + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.write(ByteBuffer.allocate(Double.BYTES).putDouble(value).array()); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagEnd.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagEnd.java new file mode 100644 index 0000000..c22ae13 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagEnd.java @@ -0,0 +1,29 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +@NoArgsConstructor +@ToString +public class TagEnd extends Tag { + @Override + public char getID() { + return 0; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.write(0x00); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagFloat.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagFloat.java new file mode 100644 index 0000000..aad7a92 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagFloat.java @@ -0,0 +1,41 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; + +@NoArgsConstructor +@ToString +public class TagFloat extends Tag { + @Getter + @Setter + private float value; + public TagFloat(float value) { + this.value = value; + } + + @Override + public char getID() { + return 5; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + byte[] buffer = new byte[Float.BYTES]; + stream.read(buffer); + value = ByteBuffer.wrap(buffer).getFloat(); + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.write(ByteBuffer.allocate(Float.BYTES).putFloat(value).array()); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagInt.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagInt.java new file mode 100644 index 0000000..319fa5d --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagInt.java @@ -0,0 +1,41 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; + +@NoArgsConstructor +@ToString +public class TagInt extends Tag { + @Getter + @Setter + private int value; + public TagInt(int value) { + this.value = value; + } + + @Override + public char getID() { + return 3; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + byte[] buffer = new byte[Integer.BYTES]; + stream.read(buffer); + value = ByteBuffer.wrap(buffer).getInt(); + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.write(ByteBuffer.allocate(Integer.BYTES).putInt(value).array()); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagIntArray.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagIntArray.java new file mode 100644 index 0000000..9fb78d1 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagIntArray.java @@ -0,0 +1,53 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; + +@NoArgsConstructor +@ToString +public class TagIntArray extends Tag { + @Getter + @Setter + private int[] value; + + public int size() { + if (value != null) return value.length; + return 0; + } + public TagIntArray(int[] value) { + this.value = value; + } + + @Override + public char getID() { + return 11; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + byte[] buffer = new byte[4]; + stream.read(buffer); + value = new int[ByteBuffer.wrap(buffer).getInt()]; + for (int i = 0; i < value.length; i++) { + stream.read(buffer); + value[i] = ByteBuffer.wrap(buffer).getInt(); + } + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.write(ByteBuffer.allocate(Integer.BYTES).putInt(value.length).array()); + for (int i = 0; i < value.length; i++) { + stream.write(ByteBuffer.allocate(Integer.BYTES).putInt(value[i]).array()); + } + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagList.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagList.java new file mode 100644 index 0000000..377a4ad --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagList.java @@ -0,0 +1,77 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +@NoArgsConstructor +@ToString +public class TagList extends Tag implements Iterable { + @Getter + private char type; + private List values = new ArrayList<>(0); + public int size() { + return values.size(); + } + + public boolean add(Tag tag) { + return values.add(tag); + } + + public Tag remove(int index) { + return values.remove(index); + } + + public boolean remove(Tag tag) { + return values.remove(tag); + } + + public TagList(char type) { + this.type = type; + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.writeByte(type); + stream.writeInt(values.size()); + for (Tag tag : values) { + tag.write(stream, writer); + } + } + + @Override + public char getID() { + return 9; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + this.values.clear(); + this.type = (char) stream.readByte(); + int s = stream.readInt(); + Class cls = reader.idclass.get(type); + for (int i = 0; i < s; i++) { + try { + Tag tag = cls.getDeclaredConstructor().newInstance(); + tag.read(stream, reader); + values.add(tag); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + @Override + public Iterator iterator() { + return values.iterator(); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagLong.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagLong.java new file mode 100644 index 0000000..4f6b37b --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagLong.java @@ -0,0 +1,38 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +@NoArgsConstructor +@ToString +public class TagLong extends Tag { + @Getter + @Setter + private long value; + public TagLong(long value) { + this.value = value; + } + + @Override + public char getID() { + return 4; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + value = stream.readLong(); + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.writeLong(value); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagLongArray.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagLongArray.java new file mode 100644 index 0000000..b085fad --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagLongArray.java @@ -0,0 +1,49 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagReader; +import io.github.p2vman.nbt.TagWriter; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +@NoArgsConstructor +@ToString +public class TagLongArray extends Tag { + @Getter + @Setter + private long[] value; + + public int size() { + if (value != null) return value.length; + return 0; + } + public TagLongArray(long[] value) { + this.value = value; + } + + @Override + public char getID() { + return 12; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + value = new long[stream.readInt()]; + for (int i = 0; i < value.length; i++) { + value[i] = stream.readLong(); + } + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.writeInt(value.length); + for (int i = 0; i < value.length; i++) { + stream.writeLong(value[i]); + } + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagShort.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagShort.java new file mode 100644 index 0000000..307afba --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagShort.java @@ -0,0 +1,38 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagWriter; +import io.github.p2vman.nbt.TagReader; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +@NoArgsConstructor +@ToString +public class TagShort extends Tag { + @Getter + @Setter + private short value; + public TagShort(short value) { + this.value = value; + } + + @Override + public char getID() { + return 2; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + value = stream.readShort(); + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.writeShort(value); + } +} diff --git a/base/src/main/java/io/github/p2vman/nbt/tag/TagString.java b/base/src/main/java/io/github/p2vman/nbt/tag/TagString.java new file mode 100644 index 0000000..ffcea14 --- /dev/null +++ b/base/src/main/java/io/github/p2vman/nbt/tag/TagString.java @@ -0,0 +1,38 @@ +package io.github.p2vman.nbt.tag; + +import io.github.p2vman.nbt.TagWriter; +import io.github.p2vman.nbt.TagReader; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +@NoArgsConstructor +@ToString +public class TagString extends Tag { + @Getter + @Setter + private String value; + public TagString(String value) { + this.value = value; + } + + @Override + public char getID() { + return 8; + } + + @Override + public void read(DataInputStream stream, TagReader reader) throws IOException { + value = stream.readUTF(); + } + + @Override + public void write(DataOutputStream stream, TagWriter writer) throws IOException { + stream.writeUTF(value); + } +} \ No newline at end of file diff --git a/base/src/main/java/io/github/p2vman/utils/Pair.java b/base/src/main/java/io/github/p2vman/utils/Pair.java new file mode 100644 index 0000000..ac4067d --- /dev/null +++ b/base/src/main/java/io/github/p2vman/utils/Pair.java @@ -0,0 +1,13 @@ +package io.github.p2vman.utils; + +import lombok.*; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +@ToString +public class Pair { + public K k; + public V v; +} diff --git a/base/src/main/java/org/eptalist/Config.java b/base/src/main/java/org/eptalist/Config.java index 42fe9d9..896008e 100644 --- a/base/src/main/java/org/eptalist/Config.java +++ b/base/src/main/java/org/eptalist/Config.java @@ -6,7 +6,9 @@ import io.github.p2vman.Static; import io.github.p2vman.Utils; import java.io.*; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public class Config { diff --git a/base/src/main/java/org/eptalist/Constants.java b/base/src/main/java/org/eptalist/Constants.java new file mode 100644 index 0000000..034d639 --- /dev/null +++ b/base/src/main/java/org/eptalist/Constants.java @@ -0,0 +1,5 @@ +package org.eptalist; + +public class Constants { + public static final int bstats_id = 24527; +} diff --git a/base/src/main/java/org/eptalist/storge/NBT.java b/base/src/main/java/org/eptalist/storge/NBT.java new file mode 100644 index 0000000..94b04ea --- /dev/null +++ b/base/src/main/java/org/eptalist/storge/NBT.java @@ -0,0 +1,157 @@ +package org.eptalist.storge; + +import io.github.p2vman.nbt.NbtIo; +import io.github.p2vman.nbt.tag.Tag; +import io.github.p2vman.nbt.tag.TagCompound; +import io.github.p2vman.nbt.tag.TagList; +import io.github.p2vman.nbt.tag.TagString; +import io.github.p2vman.utils.Pair; + +import java.io.*; +import java.util.*; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +public class NBT extends ArrayList implements Data { + private final NbtIo io = new NbtIo(); + public void close() throws IOException { + save(); + } + + @Override + public boolean addUser(String name) { + if (is(name)) { + return false; + } + return add(name); + } + + @Override + public boolean is(String name) { + return contains(name); + } + + @Override + public boolean removeUser(String name) { + if (!is(name)) { + + return false; + } + return remove(name); + } + + public Map data; + + public NBT(Map data) { + this.data = data; + if (!(size()>0)) { + load(); + } + } + + public void load() { + clear(); + + try { + InputStream stream = new FileInputStream((String) this.data.get("file")); + + if (this.data.containsKey("gzip") && (Boolean) this.data.get("gzip")) { + stream = new GZIPInputStream(stream); + } + DataInputStream datastream = new DataInputStream(stream); + + Pair tag = io.read(datastream); + if (tag.v instanceof TagCompound compound) { + if (compound.is("whitelist") && (compound.get("whitelist") instanceof TagList list)) { + Iterator it = list.iterator(); + while (it.hasNext()) if (it.next() instanceof TagString palyer) { + add(palyer.getValue()); + } + } + } + else { + save(); + } + datastream.close(); + } catch (Exception e) { + save(); + } + } + + public void save() { + try { + OutputStream stream = new FileOutputStream((String) this.data.get("file")); + + if (this.data.containsKey("gzip") && (Boolean) this.data.get("gzip")) { + stream = new GZIPOutputStream(stream); + } + DataOutputStream datastream = new DataOutputStream(stream); + + TagCompound compound = new TagCompound(); + { + TagList list = new TagList(Tag.TagString); + for (String s : this) list.add(new TagString(s)); + compound.put("whitelist", list); + } + io.write(datastream, compound); + datastream.close(); + } catch (Exception e) { + save(); + } + } + + @Override + public boolean add(String s) { + if (super.add(s)) { + save(); + return true; + } + else { + return false; + } + } + + @Override + public boolean remove(Object o) { + if (super.remove(o)) { + save(); + return true; + } else { + return false; + } + } + + @Override + public void sort(Comparator c) { + super.sort(c); + save(); + } + + @Override + public List toList() { + return this; + } + + @Override + public boolean is(String name, List info) { + return contains(name); + } + + @Override + public boolean removeUser(String name, List info) { + if (!is(name)) { + info.add("&r" + name + "is not in the whitelist"); + return false; + } + return remove(name); + } + + @Override + public boolean addUser(String name, List info) { + if (is(name)) { + info.add("&r" + name + "is already on the whitelist"); + return false; + } + return add(name); + } +} diff --git a/build.gradle b/build.gradle index 724fd45..53a1fb9 100644 --- a/build.gradle +++ b/build.gradle @@ -10,12 +10,12 @@ allprojects { task mergeJars(type: Jar) { archiveBaseName = 'EptaList' - archiveVersion = '1.1-release' + archiveVersion = '1.2' def jarPaths = [ - "C:\\Users\\User\\IdeaProjects\\EptaListProject\\velocity\\build\\libs\\velocity-1.0.jar", - "C:\\Users\\User\\IdeaProjects\\EptaListProject\\spigot\\build\\libs\\spigot-1.0.jar", - "C:\\Users\\User\\IdeaProjects\\EptaListProject\\base\\build\\libs\\base-1.0.jar" + "C:\\Users\\User\\IdeaProjects\\EptaListProject\\velocity\\build\\libs\\velocity-"+'1.2'+".jar", + "C:\\Users\\User\\IdeaProjects\\EptaListProject\\spigot\\build\\libs\\spigot-"+'1.2'+".jar", + "C:\\Users\\User\\IdeaProjects\\EptaListProject\\base\\build\\libs\\base-"+'1.2'+".jar" ] from jarPaths.collect { zipTree(it) } diff --git a/spigot/build.gradle b/spigot/build.gradle index b328063..b230af7 100644 --- a/spigot/build.gradle +++ b/spigot/build.gradle @@ -3,7 +3,7 @@ plugins { } group = 'org.eg4rerer' -version = "1.0" +version = "1.2" repositories { mavenCentral() diff --git a/spigot/src/main/java/org/eptalist/spigot/EptaList.java b/spigot/src/main/java/org/eptalist/spigot/EptaList.java index 4a82154..e58665b 100644 --- a/spigot/src/main/java/org/eptalist/spigot/EptaList.java +++ b/spigot/src/main/java/org/eptalist/spigot/EptaList.java @@ -5,6 +5,7 @@ import io.github.p2vman.profiling.ExempleProfiler; import io.github.p2vman.profiling.Profiler; import org.eptalist.Config; import io.github.p2vman.Identifier; +import org.eptalist.Constants; import org.eptalist.spigot.metrics.Metrics; import org.eptalist.storge.Data; import org.bukkit.Bukkit; @@ -57,7 +58,7 @@ public final class EptaList extends JavaPlugin { @Override public void onEnable() { profiler.push("init"); - metrics = new Metrics(this, 24527); + metrics = new Metrics(this, Constants.bstats_id); File data = getDataFolder(); if (!data.exists()) { diff --git a/spigot/src/main/resources/plugin.yml b/spigot/src/main/resources/plugin.yml index 3020c54..1321579 100644 --- a/spigot/src/main/resources/plugin.yml +++ b/spigot/src/main/resources/plugin.yml @@ -1,3 +1,3 @@ name: EptaList -version: "1.1-release" +version: "1.2" main: org.eptalist.spigot.EptaList diff --git a/velocity/build.gradle b/velocity/build.gradle index 41400ae..f38f77a 100644 --- a/velocity/build.gradle +++ b/velocity/build.gradle @@ -5,7 +5,7 @@ plugins { } group = 'org.eg4rerer' -version = "1.1-release" +version = "1.2" repositories { mavenCentral() diff --git a/velocity/src/main/java/org/eptalist/velocity/Velocity.java b/velocity/src/main/java/org/eptalist/velocity/Velocity.java index 12816a4..f4ae95d 100644 --- a/velocity/src/main/java/org/eptalist/velocity/Velocity.java +++ b/velocity/src/main/java/org/eptalist/velocity/Velocity.java @@ -15,6 +15,7 @@ import io.github.p2vman.profiling.ExempleProfiler; import io.github.p2vman.profiling.Profiler; import net.kyori.adventure.text.Component; import org.eptalist.Config; +import org.eptalist.Constants; import org.eptalist.storge.Data; import org.eptalist.velocity.metrics.Metrics; import org.slf4j.Logger; @@ -80,7 +81,7 @@ public class Velocity { @Subscribe public void onProxyInitialization(ProxyInitializeEvent event) { - Metrics metrics = metricsFactory.make(this, 24527); + Metrics metrics = metricsFactory.make(this, Constants.bstats_id); metrics.addCustomChart(new Metrics.SimplePie("data_type", () -> mode.storage)); }