diff --git a/libnbt-core/pom.xml b/libnbt-core/pom.xml index 5b3193e..8185818 100644 --- a/libnbt-core/pom.xml +++ b/libnbt-core/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-standalone/pom.xml b/libnbt-standalone/pom.xml index 4415b12..6b0bd72 100644 --- a/libnbt-standalone/pom.xml +++ b/libnbt-standalone/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_10_R1/pom.xml b/libnbt-v1_10_R1/pom.xml index 90d81b1..9f70ef0 100644 --- a/libnbt-v1_10_R1/pom.xml +++ b/libnbt-v1_10_R1/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_11_R1/pom.xml b/libnbt-v1_11_R1/pom.xml index 963c1e7..22d796f 100644 --- a/libnbt-v1_11_R1/pom.xml +++ b/libnbt-v1_11_R1/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_12_R1/pom.xml b/libnbt-v1_12_R1/pom.xml index fa53634..038558f 100644 --- a/libnbt-v1_12_R1/pom.xml +++ b/libnbt-v1_12_R1/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_12_R1_1/pom.xml b/libnbt-v1_12_R1_1/pom.xml index a277b86..33b2a65 100644 --- a/libnbt-v1_12_R1_1/pom.xml +++ b/libnbt-v1_12_R1_1/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_12_R1_2/pom.xml b/libnbt-v1_12_R1_2/pom.xml index a82d173..ff85731 100644 --- a/libnbt-v1_12_R1_2/pom.xml +++ b/libnbt-v1_12_R1_2/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_13_R1/pom.xml b/libnbt-v1_13_R1/pom.xml index 674f62f..381da7a 100644 --- a/libnbt-v1_13_R1/pom.xml +++ b/libnbt-v1_13_R1/pom.xml @@ -5,7 +5,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_13_R2/pom.xml b/libnbt-v1_13_R2/pom.xml index 513e54a..dd5c8d4 100644 --- a/libnbt-v1_13_R2/pom.xml +++ b/libnbt-v1_13_R2/pom.xml @@ -5,7 +5,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_13_R2_1/pom.xml b/libnbt-v1_13_R2_1/pom.xml index 5f8d5c1..80de8e4 100644 --- a/libnbt-v1_13_R2_1/pom.xml +++ b/libnbt-v1_13_R2_1/pom.xml @@ -5,7 +5,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_14_R1/pom.xml b/libnbt-v1_14_R1/pom.xml new file mode 100644 index 0000000..ffb8828 --- /dev/null +++ b/libnbt-v1_14_R1/pom.xml @@ -0,0 +1,41 @@ + + 4.0.0 + org.cyberiantiger.minecraft + libnbt-v1_14_R1 + + org.cyberiantiger.minecraft + libnbt-parent + 2.11-SNAPSHOT + + + src/main/java + + + true + src/resources + + + + + maven-compiler-plugin + 3.0 + + 1.8 + 1.8 + + + + + + + org.bukkit + craftbukkit + 1.14-pre5-SNAPSHOT + + + ${project.groupId} + libnbt-core + ${project.version} + + + diff --git a/libnbt-v1_14_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_14_R1/NBTTools.java b/libnbt-v1_14_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_14_R1/NBTTools.java new file mode 100644 index 0000000..44e602a --- /dev/null +++ b/libnbt-v1_14_R1/src/main/java/org/cyberiantiger/minecraft/unsafe/v1_14_R1/NBTTools.java @@ -0,0 +1,381 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.cyberiantiger.minecraft.unsafe.v1_14_R1; + +import java.lang.reflect.Array; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_14_R1.BlockPosition; +import net.minecraft.server.v1_14_R1.IBlockData; +import net.minecraft.server.v1_14_R1.NBTBase; +import net.minecraft.server.v1_14_R1.NBTTagByte; +import net.minecraft.server.v1_14_R1.NBTTagByteArray; +import net.minecraft.server.v1_14_R1.NBTTagCompound; +import net.minecraft.server.v1_14_R1.NBTTagDouble; +import net.minecraft.server.v1_14_R1.NBTTagFloat; +import net.minecraft.server.v1_14_R1.NBTTagInt; +import net.minecraft.server.v1_14_R1.NBTTagIntArray; +import net.minecraft.server.v1_14_R1.NBTTagList; +import net.minecraft.server.v1_14_R1.NBTTagLong; +import net.minecraft.server.v1_14_R1.NBTTagShort; +import net.minecraft.server.v1_14_R1.NBTTagString; +import net.minecraft.server.v1_14_R1.TileEntity; +import net.minecraft.server.v1_14_R1.WorldServer; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_14_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; +import org.bukkit.entity.Entity; +import org.bukkit.inventory.ItemStack; +import org.cyberiantiger.minecraft.nbt.ByteArrayTag; +import org.cyberiantiger.minecraft.nbt.ByteTag; +import org.cyberiantiger.minecraft.nbt.CompoundTag; +import org.cyberiantiger.minecraft.nbt.DoubleTag; +import org.cyberiantiger.minecraft.nbt.FloatTag; +import org.cyberiantiger.minecraft.nbt.IntArrayTag; +import org.cyberiantiger.minecraft.nbt.IntTag; +import org.cyberiantiger.minecraft.nbt.ListTag; +import org.cyberiantiger.minecraft.nbt.LongTag; +import org.cyberiantiger.minecraft.nbt.ShortTag; +import org.cyberiantiger.minecraft.nbt.StringTag; +import org.cyberiantiger.minecraft.nbt.Tag; +import org.cyberiantiger.minecraft.nbt.TagType; + +/** + * + * @author antony + */ +public final class NBTTools implements org.cyberiantiger.minecraft.unsafe.NBTTools { + + public NBTTagCompound toNativeCompound(CompoundTag tag) { + NBTTagCompound result = new NBTTagCompound(); + for (@SuppressWarnings("rawtypes") + Map.Entry e : tag.getValue().entrySet()) { + NBTBase base; + String name = e.getKey(); + Tag t = e.getValue(); + switch (t.getType()) { + case BYTE: + base = new NBTTagByte(((ByteTag) t).getRawValue()); + break; + case BYTE_ARRAY: + base = new NBTTagByteArray(((ByteArrayTag) t).getValue()); + break; + case COMPOUND: + base = toNativeCompound((CompoundTag) t); + break; + case DOUBLE: + base = new NBTTagDouble(((DoubleTag) t).getRawValue()); + break; + case FLOAT: + base = new NBTTagFloat(((FloatTag) t).getRawValue()); + break; + case INT: + base = new NBTTagInt(((IntTag) t).getRawValue()); + break; + case INT_ARRAY: + base = new NBTTagIntArray(((IntArrayTag) t).getValue()); + break; + case LIST: + base = toNativeList((ListTag) t); + break; + case LONG: + base = new NBTTagLong(((LongTag) t).getRawValue()); + break; + case SHORT: + base = new NBTTagShort(((ShortTag) t).getRawValue()); + break; + case STRING: + base = new NBTTagString(((StringTag) t).getValue()); + break; + default: + // Can't be reached. + throw new IllegalArgumentException(); + } + result.set(name, base); + } + return result; + } + + public NBTTagList toNativeList(ListTag tag) { + NBTTagList result = new NBTTagList(); + + switch (tag.getListType()) { + case BYTE: + for (ByteTag t : (ByteTag[]) tag.getValue()) { + result.add(new NBTTagByte(t.getRawValue())); + } + break; + case BYTE_ARRAY: + for (ByteArrayTag t : (ByteArrayTag[]) tag.getValue()) { + result.add(new NBTTagByteArray(t.getValue())); + } + break; + case COMPOUND: + for (CompoundTag t : (CompoundTag[]) tag.getValue()) { + result.add(toNativeCompound(t)); + } + break; + case DOUBLE: + for (DoubleTag t : (DoubleTag[]) tag.getValue()) { + result.add(new NBTTagDouble(t.getRawValue())); + } + break; + case FLOAT: + for (FloatTag t : (FloatTag[]) tag.getValue()) { + result.add(new NBTTagFloat(t.getRawValue())); + } + break; + case INT: + for (IntTag t : (IntTag[]) tag.getValue()) { + result.add(new NBTTagInt(t.getRawValue())); + } + break; + case INT_ARRAY: + for (IntArrayTag t : (IntArrayTag[]) tag.getValue()) { + result.add(new NBTTagIntArray(t.getValue())); + } + break; + case LIST: + for (ListTag t : (ListTag[]) tag.getValue()) { + result.add(toNativeList(t)); + } + case LONG: + for (LongTag t : (LongTag[]) tag.getValue()) { + result.add(new NBTTagLong(t.getRawValue())); + } + break; + case SHORT: + for (ShortTag t : (ShortTag[]) tag.getValue()) { + result.add(new NBTTagShort(t.getRawValue())); + } + break; + case STRING: + for (StringTag t : (StringTag[]) tag.getValue()) { + result.add(new NBTTagString(t.getValue())); + } + break; + case END: + break; + } + + return result; + } + + public CompoundTag fromNativeCompound(NBTTagCompound tag) { + try { + @SuppressWarnings("rawtypes") + Map result = new HashMap(); + for (String name : tag.getKeys()) { + NBTBase b = tag.get(name); + switch (TagType.values()[b.getTypeId()]) { + case BYTE: + result.put(name, new ByteTag(((NBTTagByte) b).asByte())); + break; + case BYTE_ARRAY: + result.put(name, new ByteArrayTag(((NBTTagByteArray) b).getBytes())); + break; + case COMPOUND: + result.put(name, fromNativeCompound((NBTTagCompound) b)); + break; + case DOUBLE: + result.put(name, new DoubleTag(((NBTTagDouble) b).asDouble())); + break; + case FLOAT: + result.put(name, new FloatTag(((NBTTagFloat) b).asFloat())); + break; + case INT: + result.put(name, new IntTag(((NBTTagInt) b).asInt())); + break; + case INT_ARRAY: + result.put(name, new IntArrayTag(((NBTTagIntArray) b).getInts())); + break; + case LIST: + result.put(name, fromNativeList((NBTTagList) b)); + break; + case LONG: + result.put(name, new LongTag(((NBTTagLong) b).asLong())); + break; + case SHORT: + result.put(name, new ShortTag(((NBTTagShort) b).asShort())); + break; + case STRING: + result.put(name, new StringTag(((NBTTagString) b).asString())); + break; + case END: + break; + } + } + return new CompoundTag(result); + } catch (IllegalArgumentException ex) { + Logger.getLogger(NBTTools.class.getName()).log(Level.SEVERE, null, ex); + } + return null; + } + + public ListTag fromNativeList(NBTTagList tag) { + try { + TagType type = TagType.values()[tag.getTypeId()]; + if (type == TagType.END) { + type = TagType.BYTE; + } + @SuppressWarnings("rawtypes") + Tag[] t = (Tag[]) Array.newInstance(type.getTagClass(), tag.size()); + switch (type) { + case BYTE: + case END: + for (int i = 0; i < tag.size(); i++) { + t[i] = new ByteTag(((NBTTagByte) tag.get(i)).asByte()); + } + break; + case BYTE_ARRAY: + for (int i = 0; i < tag.size(); i++) { + t[i] = new ByteArrayTag(((NBTTagByteArray) tag.get(i)).getBytes()); + } + break; + case COMPOUND: + for (int i = 0; i < tag.size(); i++) { + if (tag.get(i) == null) { + t[i] = new CompoundTag(); + } else { + t[i] = fromNativeCompound((NBTTagCompound) tag.get(i)); + } + } + break; + case DOUBLE: + for (int i = 0; i < tag.size(); i++) { + t[i] = new DoubleTag(((NBTTagDouble) tag.get(i)).asDouble()); + } + break; + case FLOAT: + for (int i = 0; i < tag.size(); i++) { + t[i] = new FloatTag(((NBTTagFloat) tag.get(i)).asFloat()); + } + break; + case INT: + for (int i = 0; i < tag.size(); i++) { + t[i] = new IntTag(((NBTTagInt) tag.get(i)).asInt()); + } + break; + case INT_ARRAY: + for (int i = 0; i < tag.size(); i++) { + t[i] = new IntArrayTag(((NBTTagIntArray) tag.get(i)).getInts()); + } + break; + case LIST: + for (int i = 0; i < tag.size(); i++) { + t[i] = fromNativeList((NBTTagList) tag.get(i)); + } + break; + case LONG: + for (int i = 0; i < tag.size(); i++) { + t[i] = new LongTag(((NBTTagLong) tag.get(i)).asLong()); + } + break; + case SHORT: + for (int i = 0; i < tag.size(); i++) { + t[i] = new ShortTag(((NBTTagShort) tag.get(i)).asShort()); + } + break; + case STRING: + for (int i = 0; i < tag.size(); i++) { + t[i] = new StringTag(((NBTTagString) tag.get(i)).asString()); + } + break; + } + return new ListTag(type, t); + } catch (IllegalArgumentException ex) { + Logger.getLogger(NBTTools.class.getName()).log(Level.SEVERE, null, ex); + } + return null; + } + + @Override + public void writeTileEntity(Block block, CompoundTag tag) { + CraftWorld craftWorld = (CraftWorld) block.getWorld(); + TileEntity tileEntity = craftWorld.getHandle().getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); + if (tileEntity == null) { + return; + } + tileEntity.save(toNativeCompound(tag)); + tileEntity.update(); + BlockPosition pos = new BlockPosition(block.getX(), block.getY(), block.getZ()); + WorldServer handle = craftWorld.getHandle(); + IBlockData blockData = handle.getType(pos); + craftWorld.getHandle().notify(new BlockPosition(block.getX(), block.getY(), block.getZ()), blockData, blockData, 3); + } + + @Override + public CompoundTag readTileEntity(Block block) { + CraftWorld craftWorld = (CraftWorld) block.getWorld(); + TileEntity tileEntity = craftWorld.getHandle().getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); + if (tileEntity == null) { + return null; + } + NBTTagCompound tag = new NBTTagCompound(); + tileEntity.load(tag); + return fromNativeCompound(tag); + } + + @Override + public CompoundTag readItemStack(ItemStack stack) { + net.minecraft.server.v1_14_R1.ItemStack nativeStack = CraftItemStack.asNMSCopy(stack); + if (nativeStack == null) { + return null; + } + NBTTagCompound compound = new NBTTagCompound(); + nativeStack.save(compound); + return fromNativeCompound(compound); + } + + @Override + public ItemStack createItemStack(CompoundTag tag) { + net.minecraft.server.v1_14_R1.ItemStack nativeStack = net.minecraft.server.v1_14_R1.ItemStack.a(toNativeCompound(tag)); + return CraftItemStack.asCraftMirror(nativeStack); + } + + @Override + public CompoundTag readEntity(Entity e) { + net.minecraft.server.v1_14_R1.Entity handle = ((CraftEntity) e).getHandle(); + NBTTagCompound compound = new NBTTagCompound(); + handle.c(compound); + return fromNativeCompound(compound); + } + + @Override + public void updateEntity(Entity entity, CompoundTag tag) { + CraftEntity craftEntity = (CraftEntity) entity; + craftEntity.getHandle().f(toNativeCompound(tag)); + } + + @Override + public Entity getEntityByUUID(World world, UUID id) { + CraftWorld craftWorld = (CraftWorld) world; + net.minecraft.server.v1_14_R1.Entity entity = craftWorld.getHandle().getEntity(id); + if (entity == null) { + return null; + } + return entity.getBukkitEntity(); + } + + @Override + public boolean isEntityByIdSupported() { + return false; + } + + @Override + public boolean isEntityByUuidSupported() { + return true; + } + + @Override + public Entity getEntityById(World world, int id) { + throw new UnsupportedOperationException("Not supported"); + } +} diff --git a/libnbt-v1_9_R1/pom.xml b/libnbt-v1_9_R1/pom.xml index 4da08d8..ca7dfe2 100644 --- a/libnbt-v1_9_R1/pom.xml +++ b/libnbt-v1_9_R1/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt-v1_9_R2/pom.xml b/libnbt-v1_9_R2/pom.xml index 6f72c69..825cd87 100644 --- a/libnbt-v1_9_R2/pom.xml +++ b/libnbt-v1_9_R2/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT src/main/java diff --git a/libnbt/pom.xml b/libnbt/pom.xml index ca5f33a..e4f3069 100644 --- a/libnbt/pom.xml +++ b/libnbt/pom.xml @@ -4,7 +4,7 @@ org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT @@ -91,5 +91,10 @@ libnbt-v1_13_R2_1 ${project.version} + + ${project.groupId} + libnbt-v1_14_R1 + ${project.version} + diff --git a/pom.xml b/pom.xml index 56c6c42..347bcf5 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 org.cyberiantiger.minecraft libnbt-parent - 2.10-SNAPSHOT + 2.11-SNAPSHOT pom libnbt-standalone @@ -17,6 +17,7 @@ libnbt-v1_13_R1 libnbt-v1_13_R2 libnbt-v1_13_R2_1 + libnbt-v1_14_R1 libnbt