Feature/1.17 (#1120)

* start v6

* Update classes to v6 method signatures

* change rootVersion to signify p2v6 compat

* Use 16 as toolchain version but target 11 for build output

* add minimessage as api

* Require v6 and don't attempt to "setup" hook from FAWE

* Address comments

* *address /all/ comments

* FAWE classes should only act as a delegate

* Uppercase logger

* Settings for v6-hook have moved to P2-v6, remove unneeded if statements

* Rename classes to Delegate

* add whenDone task to setCuboids

* Remove bad spaces

* Fix plot swap

* Initial work on 1.17 support

* Remove data versions from the Bukkit adapters (#1507)

* Remove data versions from the Bukkit adapters

* Don't allow saving schematics without an adapter in place on Bukkit.

* Removed confusing line

(cherry picked from commit 2056218b4a8644836b1d127105dfa289e9cdbc1c)

* More progress

* Fix chunk sending

* Repackage from com.boydti to com.fastasyncworldedit.<module> (#1119)

* Preliminary work on repackaging

* Rename build artifacts matching our pattern

* Finish up repackaging

* Fix a few field accesses and old imports

* Dirty fix for chunks container ChunkSections outside of 0-15

* Correctly read from NibbleArrays for lighting

* Fix getSections and BlockMaterial for 1.17

* Fix writing blocks to the world.
 - The issue isn't the presence of a "-1" chunk, it's the constructor for ChunkSection requiring the layer (0 to 15) rather than the y chord

* Fix more field accesses

* More work towards 1.17

* Update Upstream

a57f66f Fix watchdog, add negative y support. (1782)

* Add azalea tree to `/tool tree`

* Don't define toolchain twice

* Repackage GriefDefender

* Relocate under new namespace

* Bye bye ecma left overs

* Add 1.17 to issue templates and instructions

* Move to adventure-nbt (#918)

* Initial work for adventure-nbt

* Some more FAWE specific stuff

* Fix erroneous deprecation check

* Workflow change

* Continued merging all adventure NBT related changes

* Continued merging all adventure NBT related changes

* Made a constructor public again

This needs to be public for BlockTransformExtent.java

* Finished converting all NBT data to adventure.

* Make this compile

* Fix conflicts

Co-authored-by: Matt <4009945+MattBDev@users.noreply.github.com>

* Update adapters to 1.17

* Change build prefix to 1.17

* Move more nms classes to adapters

* Move left over nms classes

* Move Spigot 1.17 class

* Remove unneeded adapter loader code
The loader will find the appropriate class now itself

* Update adapters

* Update adapters

* Lazy fix tests

* Update adapters

* Update Upstream

43da91a Remove method reflection for getMinHeight in BukkitWorld. (1796)

* Relocate adventure-nbt under proper namespace

* Add LazyCompoundTag as a non-version-specific class to be used by adapters

* Better integration between old NBT and Adventure NBT - begin fixing the issues seen recently

* Correctly NBT conversion method

* LazyCompoundTags should actually be overriding and correctly returning a CompoundBinaryTag.

* Update worldedit-adapters
Fixes #1141

* Remove unnecessary massive lag machine

* Refactor apply to applyBlock in subclasses

* applyBlock should be overriden by all subclasses.
Default apply to applyBlock

* Closes #1130 Closes #1132

* Squashed commit of the following:

commit a9bfa1a07c77083c844a0c3ba62f4bd94bed107c
Author: NotMyFault <mc.cache@web.de>
Date:   Sun Jun 27 21:53:21 2021 +0200

    [ci skip] Update gradle wrapper validation

commit aa7471f95317d28a16f62e4b200de8d0fea2fa95
Author: Matthew Miller <mnmiller1@me.com>
Date:   Sat Oct 10 15:49:13 2020 +1000

    Add ^x,y,z relative offset support to the offset parser (#1545)

    * Add ^x,y,z relative offset support to the offset parser

    * Wrap in a try-catch

    (cherry picked from commit 28bdf7ff9254bbc85bb4f5f792b303943a3930a8)

* Add `fawe.error.schematic.not.found` translation key

* Update Upstream

728a152 Skip notify if chunk section doesn't exist (1794)

* Fixed #1157

* Add a null check to prevent NPE in nbt code

* Update adapters

* Update Upstream

fbb047a Optimize legacy schematic loading (1808)

* Hurr durr I don't want to update Java

* Update Upstream

0790e6e Fix CLI Mess (1811)

* Fixes #1160

* Expose minimessage transitively thru PlotSquared

Touches #32

* [ci skip] Remove unneeded maven repository

* Steal tab completion from PlotSquared for P2 related commands

* Don't error on startup when building locally

Co-Authored-By: goldfishapp <8278196+goldfishapp@users.noreply.github.com>

* [ci skip] Update gh actions to Java 16

* Update textures to grab 1.17 jar

Co-authored-by: NotMyFault <mc.cache@web.de>
Co-authored-by: SirYwell <hannesgreule@outlook.de>
Co-authored-by: Matthew Miller <mnmiller1@me.com>
Co-authored-by: Matt <4009945+MattBDev@users.noreply.github.com>
Co-authored-by: goldfishapp <8278196+goldfishapp@users.noreply.github.com>
This commit is contained in:
dordsor21
2021-07-01 21:16:25 +01:00
committed by GitHub
parent b0c0689887
commit aa3ae63682
798 changed files with 5101 additions and 16727 deletions

View File

@ -19,15 +19,15 @@
package com.sk89q.worldedit.world.chunk;
import com.sk89q.jnbt.ByteArrayTag;
import com.sk89q.jnbt.ByteTag;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.IntTag;
import com.sk89q.jnbt.ListTag;
import com.sk89q.jnbt.NBTUtils;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.util.nbt.BinaryTag;
import com.sk89q.worldedit.util.nbt.BinaryTagTypes;
import com.sk89q.worldedit.util.nbt.CompoundBinaryTag;
import com.sk89q.worldedit.util.nbt.IntBinaryTag;
import com.sk89q.worldedit.util.nbt.ListBinaryTag;
import com.sk89q.worldedit.util.nbt.NbtUtils;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
@ -36,20 +36,31 @@ import com.sk89q.worldedit.world.registry.LegacyMapper;
import com.sk89q.worldedit.world.storage.InvalidFormatException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
public class AnvilChunk implements Chunk {
private final CompoundTag rootTag;
private final CompoundBinaryTag rootTag;
private final byte[][] blocks;
private final byte[][] blocksAdd;
private final byte[][] data;
private final int rootX;
private final int rootZ;
private Map<BlockVector3, Map<String, Tag>> tileEntities;
private Map<BlockVector3, CompoundBinaryTag> tileEntities;
/**
* Construct the chunk with a compound tag.
*
* @param tag the tag to read
* @throws DataException on a data error
* @deprecated Use {@link #AnvilChunk(CompoundBinaryTag)}
*/
public AnvilChunk(CompoundTag tag) throws DataException {
this(tag.asBinaryTag());
}
/**
* Construct the chunk with a compound tag.
@ -57,42 +68,42 @@ public class AnvilChunk implements Chunk {
* @param tag the tag to read
* @throws DataException on a data error
*/
public AnvilChunk(CompoundTag tag) throws DataException {
public AnvilChunk(CompoundBinaryTag tag) throws DataException {
rootTag = tag;
rootX = NBTUtils.getChildTag(rootTag.getValue(), "xPos", IntTag.class).getValue();
rootZ = NBTUtils.getChildTag(rootTag.getValue(), "zPos", IntTag.class).getValue();
rootX = NbtUtils.getChildTag(rootTag, "xPos", BinaryTagTypes.INT).value();
rootZ = NbtUtils.getChildTag(rootTag, "zPos", BinaryTagTypes.INT).value();
blocks = new byte[16][16 * 16 * 16];
blocksAdd = new byte[16][16 * 16 * 8];
data = new byte[16][16 * 16 * 8];
List<Tag> sections = NBTUtils.getChildTag(rootTag.getValue(), "Sections", ListTag.class).getValue();
ListBinaryTag sections = NbtUtils.getChildTag(rootTag, "Sections", BinaryTagTypes.LIST);
for (Tag rawSectionTag : sections) {
if (!(rawSectionTag instanceof CompoundTag)) {
for (BinaryTag rawSectionTag : sections) {
if (!(rawSectionTag instanceof CompoundBinaryTag)) {
continue;
}
CompoundTag sectionTag = (CompoundTag) rawSectionTag;
if (!sectionTag.getValue().containsKey("Y")) {
CompoundBinaryTag sectionTag = (CompoundBinaryTag) rawSectionTag;
if (sectionTag.get("Y") == null) {
continue; // Empty section.
}
int y = NBTUtils.getChildTag(sectionTag.getValue(), "Y", ByteTag.class).getValue();
int y = NbtUtils.getChildTag(sectionTag, "Y", BinaryTagTypes.BYTE).value();
if (y < 0 || y >= 16) {
continue;
}
blocks[y] = NBTUtils.getChildTag(sectionTag.getValue(),
"Blocks", ByteArrayTag.class).getValue();
data[y] = NBTUtils.getChildTag(sectionTag.getValue(), "Data",
ByteArrayTag.class).getValue();
blocks[y] = NbtUtils.getChildTag(sectionTag,
"Blocks", BinaryTagTypes.BYTE_ARRAY).value();
data[y] = NbtUtils.getChildTag(sectionTag, "Data",
BinaryTagTypes.BYTE_ARRAY).value();
// 4096 ID block support
if (sectionTag.getValue().containsKey("Add")) {
blocksAdd[y] = NBTUtils.getChildTag(sectionTag.getValue(),
"Add", ByteArrayTag.class).getValue();
if (sectionTag.get("Add") != null) {
blocksAdd[y] = NbtUtils.getChildTag(sectionTag,
"Add", BinaryTagTypes.BYTE_ARRAY).value();
}
}
@ -179,50 +190,50 @@ public class AnvilChunk implements Chunk {
* Used to load the tile entities.
*/
private void populateTileEntities() throws DataException {
List<Tag> tags = NBTUtils.getChildTag(rootTag.getValue(),
"TileEntities", ListTag.class).getValue();
ListBinaryTag tags = NbtUtils.getChildTag(rootTag, "TileEntities", BinaryTagTypes.LIST);
tileEntities = new HashMap<>();
for (Tag tag : tags) {
if (!(tag instanceof CompoundTag)) {
for (BinaryTag tag : tags) {
if (!(tag instanceof CompoundBinaryTag)) {
throw new InvalidFormatException("CompoundTag expected in TileEntities");
}
CompoundTag t = (CompoundTag) tag;
CompoundBinaryTag t = (CompoundBinaryTag) tag;
int x = 0;
int y = 0;
int z = 0;
Map<String, Tag> values = new HashMap<>();
CompoundBinaryTag.Builder values = CompoundBinaryTag.builder();
for (Map.Entry<String, Tag> entry : t.getValue().entrySet()) {
switch (entry.getKey()) {
for (String key : t.keySet()) {
BinaryTag value = t.get(key);
switch (key) {
case "x":
if (entry.getValue() instanceof IntTag) {
x = ((IntTag) entry.getValue()).getValue();
if (value instanceof IntBinaryTag) {
x = ((IntBinaryTag) value).value();
}
break;
case "y":
if (entry.getValue() instanceof IntTag) {
y = ((IntTag) entry.getValue()).getValue();
if (value instanceof IntBinaryTag) {
y = ((IntBinaryTag) value).value();
}
break;
case "z":
if (entry.getValue() instanceof IntTag) {
z = ((IntTag) entry.getValue()).getValue();
if (value instanceof IntBinaryTag) {
z = ((IntBinaryTag) value).value();
}
break;
default:
break;
}
values.put(entry.getKey(), entry.getValue());
values.put(key, value);
}
BlockVector3 vec = BlockVector3.at(x, y, z);
tileEntities.put(vec, values);
tileEntities.put(vec, values.build());
}
}
@ -236,17 +247,17 @@ public class AnvilChunk implements Chunk {
* @throws DataException thrown if there is a data error
*/
@Nullable
private CompoundTag getBlockTileEntity(BlockVector3 position) throws DataException {
private CompoundBinaryTag getBlockTileEntity(BlockVector3 position) throws DataException {
if (tileEntities == null) {
populateTileEntities();
}
Map<String, Tag> values = tileEntities.get(position);
CompoundBinaryTag values = tileEntities.get(position);
if (values == null) {
return null;
}
return new CompoundTag(values);
return values;
}
@Override
@ -259,7 +270,7 @@ public class AnvilChunk implements Chunk {
WorldEdit.logger.warn("Unknown legacy block " + id + ":" + data + " found when loading legacy anvil chunk.");
return BlockTypes.AIR.getDefaultState().toBaseBlock();
}
CompoundTag tileEntity = getBlockTileEntity(position);
CompoundBinaryTag tileEntity = getBlockTileEntity(position);
if (tileEntity != null) {
return state.toBaseBlock(tileEntity);

View File

@ -19,15 +19,15 @@
package com.sk89q.worldedit.world.chunk;
import com.sk89q.jnbt.ByteTag;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.IntTag;
import com.sk89q.jnbt.ListTag;
import com.sk89q.jnbt.LongArrayTag;
import com.sk89q.jnbt.NBTUtils;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.registry.state.Property;
import com.sk89q.worldedit.util.nbt.BinaryTag;
import com.sk89q.worldedit.util.nbt.BinaryTagTypes;
import com.sk89q.worldedit.util.nbt.CompoundBinaryTag;
import com.sk89q.worldedit.util.nbt.IntBinaryTag;
import com.sk89q.worldedit.util.nbt.ListBinaryTag;
import com.sk89q.worldedit.util.nbt.NbtUtils;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
@ -36,7 +36,6 @@ import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.storage.InvalidFormatException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
@ -45,12 +44,25 @@ import javax.annotation.Nullable;
*/
public class AnvilChunk13 implements Chunk {
private CompoundTag rootTag;
private final CompoundBinaryTag rootTag;
private BlockState[][] blocks;
private int rootX;
private int rootZ;
private Map<BlockVector3, Map<String, Tag>> tileEntities;
private Map<BlockVector3, CompoundBinaryTag> tileEntities;
/**
* Construct the chunk with a compound tag.
*
* @param tag the tag to read
* @throws DataException on a data error
* @deprecated Use {@link #AnvilChunk13(CompoundBinaryTag)}
*/
@Deprecated
public AnvilChunk13(CompoundTag tag) throws DataException {
this(tag.asBinaryTag());
}
/**
* Construct the chunk with a compound tag.
@ -58,49 +70,49 @@ public class AnvilChunk13 implements Chunk {
* @param tag the tag to read
* @throws DataException on a data error
*/
public AnvilChunk13(CompoundTag tag) throws DataException {
public AnvilChunk13(CompoundBinaryTag tag) throws DataException {
rootTag = tag;
rootX = NBTUtils.getChildTag(rootTag.getValue(), "xPos", IntTag.class).getValue();
rootZ = NBTUtils.getChildTag(rootTag.getValue(), "zPos", IntTag.class).getValue();
rootX = NbtUtils.getChildTag(rootTag, "xPos", BinaryTagTypes.INT).value();
rootZ = NbtUtils.getChildTag(rootTag, "zPos", BinaryTagTypes.INT).value();
blocks = new BlockState[16][];
List<Tag> sections = NBTUtils.getChildTag(rootTag.getValue(), "Sections", ListTag.class).getValue();
ListBinaryTag sections = NbtUtils.getChildTag(rootTag, "Sections", BinaryTagTypes.LIST);
for (Tag rawSectionTag : sections) {
if (!(rawSectionTag instanceof CompoundTag)) {
for (BinaryTag rawSectionTag : sections) {
if (!(rawSectionTag instanceof CompoundBinaryTag)) {
continue;
}
CompoundTag sectionTag = (CompoundTag) rawSectionTag;
if (!sectionTag.getValue().containsKey("Y")) {
CompoundBinaryTag sectionTag = (CompoundBinaryTag) rawSectionTag;
if (sectionTag.get("Y") == null) {
continue; // Empty section.
}
int y = NBTUtils.getChildTag(sectionTag.getValue(), "Y", ByteTag.class).getValue();
int y = NbtUtils.getChildTag(sectionTag, "Y", BinaryTagTypes.BYTE).value();
if (y < 0 || y >= 16) {
continue;
}
// parse palette
List<CompoundTag> paletteEntries = sectionTag.getList("Palette", CompoundTag.class);
ListBinaryTag paletteEntries = sectionTag.getList("Palette", BinaryTagTypes.COMPOUND);
int paletteSize = paletteEntries.size();
if (paletteSize == 0) {
continue;
}
BlockState[] palette = new BlockState[paletteSize];
for (int paletteEntryId = 0; paletteEntryId < paletteSize; paletteEntryId++) {
CompoundTag paletteEntry = paletteEntries.get(paletteEntryId);
CompoundBinaryTag paletteEntry = (CompoundBinaryTag) paletteEntries.get(paletteEntryId);
BlockType type = BlockTypes.get(paletteEntry.getString("Name"));
if (type == null) {
throw new InvalidFormatException("Invalid block type: " + paletteEntry.getString("Name"));
}
BlockState blockState = type.getDefaultState();
if (paletteEntry.containsKey("Properties")) {
CompoundTag properties = NBTUtils.getChildTag(paletteEntry.getValue(), "Properties", CompoundTag.class);
if (paletteEntry.get("Properties") != null) {
CompoundBinaryTag properties = NbtUtils.getChildTag(paletteEntry, "Properties", BinaryTagTypes.COMPOUND);
for (Property<?> property : blockState.getStates().keySet()) {
if (properties.containsKey(property.getName())) {
if (properties.get(property.getName()) != null) {
String value = properties.getString(property.getName());
try {
blockState = getBlockStateWith(blockState, property, value);
@ -114,7 +126,7 @@ public class AnvilChunk13 implements Chunk {
}
// parse block states
long[] blockStatesSerialized = NBTUtils.getChildTag(sectionTag.getValue(), "BlockStates", LongArrayTag.class).getValue();
long[] blockStatesSerialized = NbtUtils.getChildTag(sectionTag, "BlockStates", BinaryTagTypes.LONG_ARRAY).value();
BlockState[] chunkSectionBlocks = new BlockState[16 * 16 * 16];
blocks[y] = chunkSectionBlocks;
@ -166,26 +178,24 @@ public class AnvilChunk13 implements Chunk {
*/
private void populateTileEntities() throws DataException {
tileEntities = new HashMap<>();
if (!rootTag.getValue().containsKey("TileEntities")) {
if (rootTag.get("TileEntities") == null) {
return;
}
List<Tag> tags = NBTUtils.getChildTag(rootTag.getValue(),
"TileEntities", ListTag.class).getValue();
ListBinaryTag tags = NbtUtils.getChildTag(rootTag, "TileEntities", BinaryTagTypes.LIST);
for (Tag tag : tags) {
if (!(tag instanceof CompoundTag)) {
for (BinaryTag tag : tags) {
if (!(tag instanceof CompoundBinaryTag)) {
throw new InvalidFormatException("CompoundTag expected in TileEntities");
}
CompoundTag t = (CompoundTag) tag;
CompoundBinaryTag t = (CompoundBinaryTag) tag;
Map<String, Tag> values = new HashMap<>(t.getValue());
int x = ((IntTag) values.get("x")).getValue();
int y = ((IntTag) values.get("y")).getValue();
int z = ((IntTag) values.get("z")).getValue();
int x = ((IntBinaryTag) t.get("x")).value();
int y = ((IntBinaryTag) t.get("y")).value();
int z = ((IntBinaryTag) t.get("z")).value();
BlockVector3 vec = BlockVector3.at(x, y, z);
tileEntities.put(vec, values);
tileEntities.put(vec, t);
}
}
@ -199,17 +209,17 @@ public class AnvilChunk13 implements Chunk {
* @throws DataException thrown if there is a data error
*/
@Nullable
private CompoundTag getBlockTileEntity(BlockVector3 position) throws DataException {
private CompoundBinaryTag getBlockTileEntity(BlockVector3 position) throws DataException {
if (tileEntities == null) {
populateTileEntities();
}
Map<String, Tag> values = tileEntities.get(position);
CompoundBinaryTag values = tileEntities.get(position);
if (values == null) {
return null;
}
return new CompoundTag(values);
return values;
}
@Override
@ -228,7 +238,7 @@ public class AnvilChunk13 implements Chunk {
BlockState[] sectionBlocks = blocks[section];
BlockState state = sectionBlocks != null ? sectionBlocks[(yIndex << 8) | (z << 4) | x] : BlockTypes.AIR.getDefaultState();
CompoundTag tileEntity = getBlockTileEntity(position);
CompoundBinaryTag tileEntity = getBlockTileEntity(position);
if (tileEntity != null) {
return state.toBaseBlock(tileEntity);

View File

@ -20,6 +20,7 @@
package com.sk89q.worldedit.world.chunk;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.util.nbt.CompoundBinaryTag;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.storage.InvalidFormatException;
@ -34,11 +35,23 @@ public class AnvilChunk16 extends AnvilChunk13 {
*
* @param tag the tag to read
* @throws DataException on a data error
* @deprecated Use {@link #AnvilChunk16(CompoundBinaryTag)}
*/
@Deprecated
public AnvilChunk16(CompoundTag tag) throws DataException {
super(tag);
}
/**
* Construct the chunk with a compound tag.
*
* @param tag the tag to read
* @throws DataException on a data error
*/
public AnvilChunk16(CompoundBinaryTag tag) throws DataException {
super(tag);
}
@Override
protected void readBlockStates(BlockState[] palette, long[] blockStatesSerialized, BlockState[] chunkSectionBlocks) throws InvalidFormatException {
PackedIntArrayReader reader = new PackedIntArrayReader(blockStatesSerialized);

View File

@ -19,14 +19,15 @@
package com.sk89q.worldedit.world.chunk;
import com.sk89q.jnbt.ByteArrayTag;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.IntTag;
import com.sk89q.jnbt.ListTag;
import com.sk89q.jnbt.NBTUtils;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.util.nbt.BinaryTag;
import com.sk89q.worldedit.util.nbt.BinaryTagTypes;
import com.sk89q.worldedit.util.nbt.CompoundBinaryTag;
import com.sk89q.worldedit.util.nbt.IntBinaryTag;
import com.sk89q.worldedit.util.nbt.ListBinaryTag;
import com.sk89q.worldedit.util.nbt.NbtUtils;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
@ -35,7 +36,6 @@ import com.sk89q.worldedit.world.registry.LegacyMapper;
import com.sk89q.worldedit.world.storage.InvalidFormatException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -43,13 +43,26 @@ import java.util.Map;
*/
public class OldChunk implements Chunk {
private final CompoundTag rootTag;
private final CompoundBinaryTag rootTag;
private final byte[] blocks;
private final byte[] data;
private final int rootX;
private final int rootZ;
private Map<BlockVector3, Map<String, Tag>> tileEntities;
private Map<BlockVector3, CompoundBinaryTag> tileEntities;
/**
* Construct the chunk with a compound tag.
*
* @param tag the tag
* @throws DataException if there is an error getting the chunk data
* @deprecated Use {@link #OldChunk(CompoundBinaryTag)}
*/
@Deprecated
public OldChunk(CompoundTag tag) throws DataException {
this(tag.asBinaryTag());
}
/**
* Construct the chunk with a compound tag.
@ -57,13 +70,13 @@ public class OldChunk implements Chunk {
* @param tag the tag
* @throws DataException if there is an error getting the chunk data
*/
public OldChunk(CompoundTag tag) throws DataException {
public OldChunk(CompoundBinaryTag tag) throws DataException {
rootTag = tag;
blocks = NBTUtils.getChildTag(rootTag.getValue(), "Blocks", ByteArrayTag.class).getValue();
data = NBTUtils.getChildTag(rootTag.getValue(), "Data", ByteArrayTag.class).getValue();
rootX = NBTUtils.getChildTag(rootTag.getValue(), "xPos", IntTag.class).getValue();
rootZ = NBTUtils.getChildTag(rootTag.getValue(), "zPos", IntTag.class).getValue();
blocks = NbtUtils.getChildTag(rootTag, "Blocks", BinaryTagTypes.BYTE_ARRAY).value();
data = NbtUtils.getChildTag(rootTag, "Data", BinaryTagTypes.BYTE_ARRAY).value();
rootX = NbtUtils.getChildTag(rootTag, "xPos", BinaryTagTypes.INT).value();
rootZ = NbtUtils.getChildTag(rootTag, "zPos", BinaryTagTypes.INT).value();
int size = 16 * 16 * 128;
if (blocks.length != size) {
@ -83,51 +96,50 @@ public class OldChunk implements Chunk {
* @throws DataException if there is an error getting the chunk data
*/
private void populateTileEntities() throws DataException {
List<Tag> tags = NBTUtils.getChildTag(
rootTag.getValue(), "TileEntities", ListTag.class)
.getValue();
ListBinaryTag tags = NbtUtils.getChildTag(rootTag, "TileEntities", BinaryTagTypes.LIST);
tileEntities = new HashMap<>();
for (Tag tag : tags) {
if (!(tag instanceof CompoundTag)) {
for (BinaryTag tag : tags) {
if (!(tag instanceof CompoundBinaryTag)) {
throw new InvalidFormatException("CompoundTag expected in TileEntities");
}
CompoundTag t = (CompoundTag) tag;
CompoundBinaryTag t = (CompoundBinaryTag) tag;
int x = 0;
int y = 0;
int z = 0;
Map<String, Tag> values = new HashMap<>();
CompoundBinaryTag.Builder values = CompoundBinaryTag.builder();
for (Map.Entry<String, Tag> entry : t.getValue().entrySet()) {
switch (entry.getKey()) {
for (String key : t.keySet()) {
BinaryTag value = t.get(key);
switch (key) {
case "x":
if (entry.getValue() instanceof IntTag) {
x = ((IntTag) entry.getValue()).getValue();
if (value instanceof IntBinaryTag) {
x = ((IntBinaryTag) value).value();
}
break;
case "y":
if (entry.getValue() instanceof IntTag) {
y = ((IntTag) entry.getValue()).getValue();
if (value instanceof IntBinaryTag) {
y = ((IntBinaryTag) value).value();
}
break;
case "z":
if (entry.getValue() instanceof IntTag) {
z = ((IntTag) entry.getValue()).getValue();
if (value instanceof IntBinaryTag) {
z = ((IntBinaryTag) value).value();
}
break;
default:
break;
}
values.put(entry.getKey(), entry.getValue());
values.put(key, value);
}
BlockVector3 vec = BlockVector3.at(x, y, z);
tileEntities.put(vec, values);
tileEntities.put(vec, values.build());
}
}
@ -140,16 +152,16 @@ public class OldChunk implements Chunk {
* @return a tag
* @throws DataException if there is an error getting the chunk data
*/
private CompoundTag getBlockTileEntity(BlockVector3 position) throws DataException {
private CompoundBinaryTag getBlockTileEntity(BlockVector3 position) throws DataException {
if (tileEntities == null) {
populateTileEntities();
}
Map<String, Tag> values = tileEntities.get(position);
CompoundBinaryTag values = tileEntities.get(position);
if (values == null) {
return null;
}
return new CompoundTag(values);
return values;
}
@Override
@ -189,7 +201,7 @@ public class OldChunk implements Chunk {
return BlockTypes.AIR.getDefaultState().toBaseBlock();
}
CompoundTag tileEntity = getBlockTileEntity(position);
CompoundBinaryTag tileEntity = getBlockTileEntity(position);
if (tileEntity != null) {
return state.toBaseBlock(tileEntity);