Skip to content

Commit

Permalink
Migrate to adventure-nbt
Browse files Browse the repository at this point in the history
  • Loading branch information
me4502 committed Feb 6, 2021
1 parent 476342a commit 137c266
Show file tree
Hide file tree
Showing 49 changed files with 1,019 additions and 415 deletions.
3 changes: 2 additions & 1 deletion buildSrc/src/main/kotlin/LibsConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ fun Project.applyLibrariesConfiguration() {

val relocations = mapOf(
"net.kyori.text" to "com.sk89q.worldedit.util.formatting.text",
"net.kyori.minecraft" to "com.sk89q.worldedit.util.kyori"
"net.kyori.minecraft" to "com.sk89q.worldedit.util.kyori",
"net.kyori.adventure.nbt" to "com.sk89q.worldedit.util.nbt"
)

tasks.register<ShadowJar>("jar") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ public <B extends BlockStateHolder<B>> void sendFakeBlock(BlockVector3 pos, B bl
player.sendBlockChange(loc, player.getWorld().getBlockAt(loc).getBlockData());
} else {
player.sendBlockChange(loc, BukkitAdapter.adapt(block));
if (block instanceof BaseBlock && ((BaseBlock) block).hasNbtData()) {
if (block instanceof BaseBlock && ((BaseBlock) block).hasNbt()) {
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
if (adapter != null) {
if (block.getBlockType() == BlockTypes.STRUCTURE_BLOCK) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,8 @@ public com.sk89q.worldedit.entity.Entity createEntity(com.sk89q.worldedit.util.L
}
} catch (Exception e) {
logger.warn("Corrupt entity found when creating: " + entity.getType().getId());
if (entity.getNbtData() != null) {
logger.warn(entity.getNbtData().toString());
if (entity.getNbt() != null) {
logger.warn(entity.getNbt().toString());
}
e.printStackTrace();
return null;
Expand Down Expand Up @@ -457,9 +457,9 @@ public <B extends BlockStateHolder<B>> boolean setBlock(BlockVector3 position, B
try {
return worldNativeAccess.setBlock(position, block, sideEffects);
} catch (Exception e) {
if (block instanceof BaseBlock && ((BaseBlock) block).getNbtData() != null) {
if (block instanceof BaseBlock && ((BaseBlock) block).getNbt() != null) {
logger.warn("Tried to set a corrupt tile entity at " + position.toString()
+ ": " + ((BaseBlock) block).getNbtData(), e);
+ ": " + ((BaseBlock) block).getNbt(), e);
} else {
logger.warn("Failed to set block via adapter, falling back to generic", e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,18 @@

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.IntTag;
import com.sk89q.jnbt.ListTag;
import com.sk89q.jnbt.NBTUtils;
import com.sk89q.jnbt.ShortTag;
import com.sk89q.jnbt.StringTag;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.util.NbtUtils;
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.ShortBinaryTag;
import com.sk89q.worldedit.util.nbt.StringBinaryTag;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.storage.InvalidFormatException;

import java.util.HashMap;
import java.util.Map;

/**
* A mob spawner block.
*/
Expand All @@ -46,8 +44,8 @@ public class MobSpawnerBlock extends BaseBlock {
// advanced mob spawner features
private short spawnCount = 4;
private short spawnRange = 4;
private CompoundTag spawnData;
private ListTag spawnPotentials;
private CompoundBinaryTag spawnData;
private ListBinaryTag spawnPotentials;
private short minSpawnDelay = 200;
private short maxSpawnDelay = 800;
private short maxNearbyEntities = 6;
Expand Down Expand Up @@ -110,7 +108,7 @@ public void setDelay(short delay) {
}

@Override
public boolean hasNbtData() {
public boolean hasNbt() {
return true;
}

Expand All @@ -120,50 +118,52 @@ public String getNbtId() {
}

@Override
public CompoundTag getNbtData() {
Map<String, Tag> values = new HashMap<>();
values.put("Delay", new ShortTag(delay));
values.put("SpawnCount", new ShortTag(spawnCount));
values.put("SpawnRange", new ShortTag(spawnRange));
values.put("MinSpawnDelay", new ShortTag(minSpawnDelay));
values.put("MaxSpawnDelay", new ShortTag(maxSpawnDelay));
values.put("MaxNearbyEntities", new ShortTag(maxNearbyEntities));
values.put("RequiredPlayerRange", new ShortTag(requiredPlayerRange));
public CompoundBinaryTag getNbt() {
CompoundBinaryTag.Builder values = CompoundBinaryTag.builder();
values.put("Delay", ShortBinaryTag.of(delay));
values.put("SpawnCount", ShortBinaryTag.of(spawnCount));
values.put("SpawnRange", ShortBinaryTag.of(spawnRange));
values.put("MinSpawnDelay", ShortBinaryTag.of(minSpawnDelay));
values.put("MaxSpawnDelay", ShortBinaryTag.of(maxSpawnDelay));
values.put("MaxNearbyEntities", ShortBinaryTag.of(maxNearbyEntities));
values.put("RequiredPlayerRange", ShortBinaryTag.of(requiredPlayerRange));
if (spawnData == null) {
values.put("SpawnData", new CompoundTag(ImmutableMap.of("id", new StringTag(mobType))));
values.put("SpawnData", CompoundBinaryTag.builder().put("id", StringBinaryTag.of(mobType)).build());
} else {
values.put("SpawnData", new CompoundTag(spawnData.getValue()));
values.put("SpawnData", spawnData);
}
if (spawnPotentials == null) {
values.put("SpawnPotentials", new ListTag(CompoundTag.class, ImmutableList.of(
new CompoundTag(ImmutableMap.of("Weight", new IntTag(1), "Entity",
new CompoundTag(ImmutableMap.of("id", new StringTag(mobType))))))));
values.put("SpawnPotentials", ListBinaryTag.of(
BinaryTagTypes.COMPOUND,
ImmutableList.of(CompoundBinaryTag.from(ImmutableMap.of(
"Weight", IntBinaryTag.of(1),
"Entity", CompoundBinaryTag.from(ImmutableMap.of("id", StringBinaryTag.of(mobType)))
)))
));
} else {
values.put("SpawnPotentials", new ListTag(CompoundTag.class, spawnPotentials.getValue()));
values.put("SpawnPotentials", spawnPotentials);
}

return new CompoundTag(values);
return values.build();
}

@Override
public void setNbtData(CompoundTag rootTag) {
public void setNbt(CompoundBinaryTag rootTag) {
if (rootTag == null) {
return;
}

Map<String, Tag> values = rootTag.getValue();

Tag t = values.get("id");
if (!(t instanceof StringTag) || !((StringTag) t).getValue().equals(getNbtId())) {
BinaryTag t = rootTag.get("id");
if (!(t instanceof StringBinaryTag) || !((StringBinaryTag) t).value().equals(getNbtId())) {
throw new RuntimeException(String.format("'%s' tile entity expected", getNbtId()));
}

CompoundTag spawnDataTag;
CompoundBinaryTag spawnDataTag;
String mobType;
ShortTag delayTag;
ShortBinaryTag delayTag;

try {
spawnDataTag = NBTUtils.getChildTag(values, "SpawnData", CompoundTag.class);
spawnDataTag = NbtUtils.getChildTag(rootTag, "SpawnData", CompoundBinaryTag.class);
mobType = spawnDataTag.getString("id");
if (mobType.equals("")) {
throw new InvalidFormatException("No spawn id.");
Expand All @@ -174,68 +174,68 @@ public void setNbtData(CompoundTag rootTag) {
throw new RuntimeException("Invalid mob spawner data: no SpawnData and/or no Delay");
}
try {
delayTag = NBTUtils.getChildTag(values, "Delay", ShortTag.class);
this.delay = delayTag.getValue();
delayTag = NbtUtils.getChildTag(rootTag, "Delay", ShortBinaryTag.class);
this.delay = delayTag.value();
} catch (InvalidFormatException ignored) {
this.delay = -1;
}

ShortTag spawnCountTag = null;
ShortTag spawnRangeTag = null;
ShortTag minSpawnDelayTag = null;
ShortTag maxSpawnDelayTag = null;
ShortTag maxNearbyEntitiesTag = null;
ShortTag requiredPlayerRangeTag = null;
ListTag spawnPotentialsTag = null;
ShortBinaryTag spawnCountTag = null;
ShortBinaryTag spawnRangeTag = null;
ShortBinaryTag minSpawnDelayTag = null;
ShortBinaryTag maxSpawnDelayTag = null;
ShortBinaryTag maxNearbyEntitiesTag = null;
ShortBinaryTag requiredPlayerRangeTag = null;
ListBinaryTag spawnPotentialsTag = null;
try {
spawnCountTag = NBTUtils.getChildTag(values, "SpawnCount", ShortTag.class);
spawnCountTag = NbtUtils.getChildTag(rootTag, "SpawnCount", ShortBinaryTag.class);
} catch (InvalidFormatException ignored) {
}
try {
spawnRangeTag = NBTUtils.getChildTag(values, "SpawnRange", ShortTag.class);
spawnRangeTag = NbtUtils.getChildTag(rootTag, "SpawnRange", ShortBinaryTag.class);
} catch (InvalidFormatException ignored) {
}
try {
minSpawnDelayTag = NBTUtils.getChildTag(values, "MinSpawnDelay", ShortTag.class);
minSpawnDelayTag = NbtUtils.getChildTag(rootTag, "MinSpawnDelay", ShortBinaryTag.class);
} catch (InvalidFormatException ignored) {
}
try {
maxSpawnDelayTag = NBTUtils.getChildTag(values, "MaxSpawnDelay", ShortTag.class);
maxSpawnDelayTag = NbtUtils.getChildTag(rootTag, "MaxSpawnDelay", ShortBinaryTag.class);
} catch (InvalidFormatException ignored) {
}
try {
maxNearbyEntitiesTag = NBTUtils.getChildTag(values, "MaxNearbyEntities", ShortTag.class);
maxNearbyEntitiesTag = NbtUtils.getChildTag(rootTag, "MaxNearbyEntities", ShortBinaryTag.class);
} catch (InvalidFormatException ignored) {
}
try {
requiredPlayerRangeTag = NBTUtils.getChildTag(values, "RequiredPlayerRange", ShortTag.class);
requiredPlayerRangeTag = NbtUtils.getChildTag(rootTag, "RequiredPlayerRange", ShortBinaryTag.class);
} catch (InvalidFormatException ignored) {
}
try {
spawnPotentialsTag = NBTUtils.getChildTag(values, "SpawnPotentials", ListTag.class);
spawnPotentialsTag = NbtUtils.getChildTag(rootTag, "SpawnPotentials", ListBinaryTag.class);
} catch (InvalidFormatException ignored) {
}

if (spawnCountTag != null) {
this.spawnCount = spawnCountTag.getValue();
this.spawnCount = spawnCountTag.value();
}
if (spawnRangeTag != null) {
this.spawnRange = spawnRangeTag.getValue();
this.spawnRange = spawnRangeTag.value();
}
if (minSpawnDelayTag != null) {
this.minSpawnDelay = minSpawnDelayTag.getValue();
this.minSpawnDelay = minSpawnDelayTag.value();
}
if (maxSpawnDelayTag != null) {
this.maxSpawnDelay = maxSpawnDelayTag.getValue();
this.maxSpawnDelay = maxSpawnDelayTag.value();
}
if (maxNearbyEntitiesTag != null) {
this.maxNearbyEntities = maxNearbyEntitiesTag.getValue();
this.maxNearbyEntities = maxNearbyEntitiesTag.value();
}
if (requiredPlayerRangeTag != null) {
this.requiredPlayerRange = requiredPlayerRangeTag.getValue();
this.requiredPlayerRange = requiredPlayerRangeTag.value();
}
if (spawnPotentialsTag != null) {
this.spawnPotentials = new ListTag(CompoundTag.class, spawnPotentialsTag.getValue());
this.spawnPotentials = spawnPotentialsTag;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@
import com.sk89q.jnbt.StringTag;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.util.gson.GsonUtil;
import com.sk89q.worldedit.util.nbt.CompoundBinaryTag;
import com.sk89q.worldedit.util.nbt.StringBinaryTag;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;

import java.util.HashMap;
import java.util.Map;

/**
Expand Down Expand Up @@ -82,7 +83,7 @@ public void setText(String[] text) {
}

@Override
public boolean hasNbtData() {
public boolean hasNbt() {
return true;
}

Expand All @@ -92,13 +93,13 @@ public String getNbtId() {
}

@Override
public CompoundTag getNbtData() {
Map<String, Tag> values = new HashMap<>();
values.put("Text1", new StringTag(text[0]));
values.put("Text2", new StringTag(text[1]));
values.put("Text3", new StringTag(text[2]));
values.put("Text4", new StringTag(text[3]));
return new CompoundTag(values);
public CompoundBinaryTag getNbt() {
CompoundBinaryTag.Builder values = CompoundBinaryTag.builder();
values.put("Text1", StringBinaryTag.of(text[0]));
values.put("Text2", StringBinaryTag.of(text[1]));
values.put("Text3", StringBinaryTag.of(text[2]));
values.put("Text4", StringBinaryTag.of(text[3]));
return values.build();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,16 @@

package com.sk89q.worldedit.blocks;

import com.google.common.collect.ImmutableMap;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.StringTag;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.internal.util.DeprecationUtil;
import com.sk89q.worldedit.util.nbt.CompoundBinaryTag;
import com.sk89q.worldedit.util.nbt.StringBinaryTag;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;

import java.util.HashMap;
import java.util.Map;

/**
Expand Down Expand Up @@ -81,7 +83,7 @@ public String getOwner() {
}

@Override
public boolean hasNbtData() {
public boolean hasNbt() {
return true;
}

Expand All @@ -91,12 +93,12 @@ public String getNbtId() {
}

@Override
public CompoundTag getNbtData() {
Map<String, Tag> values = new HashMap<>();
Map<String, Tag> inner = new HashMap<>();
inner.put("Name", new StringTag(owner));
values.put(DeprecationUtil.getHeadOwnerKey(), new CompoundTag(inner));
return new CompoundTag(values);
public CompoundBinaryTag getNbt() {
CompoundBinaryTag.Builder values = CompoundBinaryTag.builder();
values.put(DeprecationUtil.getHeadOwnerKey(), CompoundBinaryTag.from(
ImmutableMap.of("Name", StringBinaryTag.of(owner))
));
return values.build();
}

@Override
Expand Down
Loading

0 comments on commit 137c266

Please sign in to comment.