Skip to content

Commit

Permalink
[EXPERIMENTAL] Implement better legacy support
Browse files Browse the repository at this point in the history
  • Loading branch information
Morphan1 committed Jul 18, 2018
1 parent d0f263b commit 53f0627
Show file tree
Hide file tree
Showing 22 changed files with 102 additions and 100 deletions.
Expand Up @@ -6,7 +6,7 @@

public interface BlockData {

void setBlock(Block block);
void setBlock(Block block, boolean physics);

String toCompressedFormat();

Expand Down
Expand Up @@ -21,7 +21,7 @@ public interface BlockHelper {

void setNbtData(Block block, CompoundTag compoundTag);

BlockData getBlockData(short id, byte data);
BlockData getBlockData(Material material, byte data);

BlockData getBlockData(Block block);

Expand Down
Expand Up @@ -513,7 +513,7 @@ public void setBlocks_internal(List<BlockData> materials) {
for (int y = 0; y != y_distance + 1; y++) {
for (int z = 0; z != z_distance + 1; z++) {
if (loc_1.getY() + y >= 0 && loc_1.getY() + y < 256) {
materials.get(index).setBlock(loc_1.clone().add(x, y, z).getBlock());
materials.get(index).setBlock(loc_1.clone().add(x, y, z).getBlock(), false);
}
index++;
}
Expand Down
26 changes: 9 additions & 17 deletions plugin/src/main/java/net/aufdemrand/denizen/objects/dLocation.java
Expand Up @@ -3,6 +3,7 @@
import net.aufdemrand.denizen.Settings;
import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.NMSVersion;
import net.aufdemrand.denizen.nms.interfaces.BlockData;
import net.aufdemrand.denizen.nms.interfaces.EntityHelper;
import net.aufdemrand.denizen.nms.util.PlayerProfile;
import net.aufdemrand.denizen.objects.notable.NotableManager;
Expand Down Expand Up @@ -2159,6 +2160,12 @@ public void adjust(Mechanism mechanism) {

Element value = mechanism.getValue();

if (mechanism.matches("data") && mechanism.hasValue()) {
dB.echoError("Material ID and data magic number support is deprecated and WILL be removed in a future release.");
BlockData blockData = NMSHandler.getInstance().getBlockHelper().getBlockData(getBlock().getType(), (byte) value.asInt());
blockData.setBlock(getBlock(), false);
}

// <--[mechanism]
// @object dLocation
// @name block_type
Expand All @@ -2171,10 +2178,8 @@ public void adjust(Mechanism mechanism) {
if (mechanism.matches("block_type") && mechanism.requireObject(dMaterial.class)) {
dMaterial mat = value.asType(dMaterial.class);
byte data = mat.hasData() ? mat.getData() : 0;
// TODO: 1.13 - confirm this works
Block block = getBlock();
block.setType(mat.getMaterial());
block.setData(data, false);
BlockData blockData = NMSHandler.getInstance().getBlockHelper().getBlockData(mat.getMaterial(), data);
blockData.setBlock(getBlock(), false);
}

// <--[mechanism]
Expand Down Expand Up @@ -2453,19 +2458,6 @@ && getBlock().getState() instanceof CreatureSpawner) {
sk.update();
}

// <--[mechanism]
// @object dLocation
// @name data
// @input Element(Number)
// @description
// Sets the data-value of a block.
// @tags
// <l@location.material.data>
// -->
if (mechanism.matches("data") && mechanism.hasValue()) {
getBlock().setData((byte) value.asInt());
}

// <--[mechanism]
// @object dLocation
// @name generate_tree
Expand Down
Expand Up @@ -14,7 +14,6 @@
import net.aufdemrand.denizencore.tags.Attribute;
import net.aufdemrand.denizencore.tags.TagContext;
import net.aufdemrand.denizencore.utilities.CoreUtilities;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.TreeType;
import org.bukkit.material.MaterialData;
Expand Down Expand Up @@ -103,7 +102,7 @@ public static enum dMaterials {
Map<String, Material> map = ReflectionHelper.getFieldValue(Material.class, "BY_NAME", null);
for (Material material : map.values()) {
if (material.isLegacy()) {
MATERIAL_BY_LEGACY_ID.put(material.getId(), Bukkit.getUnsafe().fromLegacy(material));
MATERIAL_BY_LEGACY_ID.put(material.getId(), material);
}
}
}
Expand Down Expand Up @@ -602,6 +601,8 @@ public static dMaterial getMaterialFrom(Material material, int data) {
}
}

material = NMSHandler.getInstance().getBlockHelper().getBlockData(material, (byte) data).getMaterial();

return new dMaterial(material, data);
}

Expand Down Expand Up @@ -641,10 +642,16 @@ public static dMaterial valueOf(String string, TagContext context) {
}
Material m = Material.getMaterial(string);
if (m != null) {
if (!nope && index >= 0) {
dB.echoError("Material ID and data magic number support is deprecated and WILL be removed in a future release.");
}
return getMaterialFrom(m, data);
}
dMaterial mat = all_dMaterials.get(string);
if (mat != null) {
if (!nope && index >= 0) {
dB.echoError("Material ID and data magic number support is deprecated and WILL be removed in a future release.");
}
if (data == 0) {
return mat;
}
Expand Down
@@ -1,5 +1,7 @@
package net.aufdemrand.denizen.scripts.commands.world;

import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.interfaces.BlockData;
import net.aufdemrand.denizen.objects.dCuboid;
import net.aufdemrand.denizen.objects.dLocation;
import net.aufdemrand.denizen.utilities.debugging.dB;
Expand Down Expand Up @@ -89,9 +91,9 @@ else if (copy_cuboid != null) {
BlockState sourceState = source.getState();
Block update = destination.getBlock();

// TODO: 1.13 - check if this works
update.setType(source.getType());
update.setData(source.getData(), false);
// TODO: 1.13 - confirm this works
BlockData blockData = NMSHandler.getInstance().getBlockHelper().getBlockData(source);
blockData.setBlock(update, false);

BlockState updateState = update.getState();

Expand Down
@@ -1,6 +1,7 @@
package net.aufdemrand.denizen.scripts.commands.world;

import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.interfaces.BlockData;
import net.aufdemrand.denizen.nms.interfaces.WorldHelper;
import net.aufdemrand.denizen.objects.dCuboid;
import net.aufdemrand.denizen.objects.dEllipsoid;
Expand All @@ -25,7 +26,6 @@
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
Expand Down Expand Up @@ -344,10 +344,9 @@ void setBlock(Location location, dMaterial material, boolean physics, boolean na
location.getBlock().breakNaturally();
}
else {
// TODO: 1.13 - check if this works
Block block = location.getBlock();
block.setType(material.getMaterial());
block.setData(material.getMaterialData().getData(), physics);
// TODO: 1.13 - confirm this works
BlockData blockData = NMSHandler.getInstance().getBlockHelper().getBlockData(material.getMaterial(), material.getData());
blockData.setBlock(location.getBlock(), physics);
}
}

Expand Down
Expand Up @@ -2,6 +2,7 @@

import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.NMSVersion;
import net.aufdemrand.denizen.nms.interfaces.BlockData;
import net.aufdemrand.denizen.objects.dLocation;
import net.aufdemrand.denizen.utilities.Utilities;
import net.aufdemrand.denizen.utilities.debugging.dB;
Expand Down Expand Up @@ -88,17 +89,17 @@ public void execute(final ScriptEntry scriptEntry) throws CommandExecutionExcept
BlockFace bf = Utilities.chooseSignRotation(direction);
org.bukkit.material.Sign sgntmp = new org.bukkit.material.Sign(Material.WALL_SIGN);
sgntmp.setFacingDirection(bf);
// TODO: 1.13 - check if this works
sign.setType(Material.WALL_SIGN);
sign.setData(sgntmp.getData(), false);
// TODO: 1.13 - confirm this works
BlockData blockData = NMSHandler.getInstance().getBlockHelper().getBlockData(Material.WALL_SIGN, sgntmp.getData());
blockData.setBlock(sign, false);
}
else {
BlockFace bf = Utilities.chooseSignRotation(sign);
org.bukkit.material.Sign sgntmp = new org.bukkit.material.Sign(Material.WALL_SIGN);
sgntmp.setFacingDirection(bf);
// TODO: 1.13 - check if this works
sign.setType(Material.WALL_SIGN);
sign.setData(sgntmp.getData(), false);
// TODO: 1.13 - confirm this works
BlockData blockData = NMSHandler.getInstance().getBlockHelper().getBlockData(Material.WALL_SIGN, sgntmp.getData());
blockData.setBlock(sign, false);
}
}
else {
Expand All @@ -121,9 +122,9 @@ else if (sign.getType() != Material.WALL_SIGN
BlockFace bf = Utilities.chooseSignRotation(sign);
org.bukkit.material.Sign sgntmp = new org.bukkit.material.Sign(Material.WALL_SIGN);
sgntmp.setFacingDirection(bf);
// TODO: 1.13 - check if this works
sign.setType(Material.WALL_SIGN);
sign.setData(sgntmp.getData(), false);
// TODO: 1.13 - confirm this works
BlockData blockData = NMSHandler.getInstance().getBlockHelper().getBlockData(Material.WALL_SIGN, sgntmp.getData());
blockData.setBlock(sign, false);
}
}
BlockState signState = sign.getState();
Expand Down
Expand Up @@ -3,6 +3,7 @@
import net.aufdemrand.denizen.BukkitScriptEntryData;
import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.nms.NMSVersion;
import net.aufdemrand.denizen.nms.interfaces.BlockData;
import net.aufdemrand.denizen.objects.dLocation;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizen.utilities.debugging.dB;
Expand Down Expand Up @@ -144,7 +145,9 @@ else if (Depends.citizens != null) {
else {
block = interactLocation;
}
block.getBlock().setData((byte) (block.getBlock().getData() ^ 4));
// TODO: 1.13 - confirm this works
BlockData blockData = NMSHandler.getInstance().getBlockHelper().getBlockData(ironDoor, (byte) (block.getBlock().getData() ^ 4));
blockData.setBlock(block.getBlock(), false);
}
else {
NMSHandler.getInstance().getEntityHelper().forceInteraction(player, interactLocation);
Expand Down
Expand Up @@ -4,6 +4,7 @@
import net.aufdemrand.denizen.nms.interfaces.BlockData;
import net.aufdemrand.denizen.nms.util.jnbt.*;
import net.aufdemrand.denizen.objects.dCuboid;
import net.aufdemrand.denizen.objects.dMaterial;
import net.aufdemrand.denizen.scripts.commands.world.SchematicCommand;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizen.utilities.debugging.dB;
Expand Down Expand Up @@ -88,7 +89,7 @@ public void run() {
long y = ((index.theInt - z) % ((long) (y_length * z_height))) / ((long) z_height);
long x = (index.theInt - y - z) / ((long) (y_length * z_height));
if (!noAir || blocks.get((int) index.theInt).getMaterial() != Material.AIR) {
blocks.get((int) index.theInt).setBlock(loc.clone().add(x - center_x, y - center_y, z - center_z).getBlock());
blocks.get((int) index.theInt).setBlock(loc.clone().add(x - center_x, y - center_y, z - center_z).getBlock(), false);
}
index.theInt++;
if (System.currentTimeMillis() - start > 50) {
Expand All @@ -114,7 +115,7 @@ public void setBlocks(Location loc, boolean noAir) {
for (int y = 0; y < y_length; y++) {
for (int z = 0; z < z_height; z++) {
if (!noAir || blocks.get(index).getMaterial() != Material.AIR) {
blocks.get(index).setBlock(loc.clone().add(x - center_x, y - center_y, z - center_z).getBlock());
blocks.get(index).setBlock(loc.clone().add(x - center_x, y - center_y, z - center_z).getBlock(), false);
}
index++;
}
Expand Down Expand Up @@ -293,7 +294,8 @@ else if (entry.getKey().equals("z")) {
for (int z = 0; z < length; z++) {
int index = y * width * length + z * width + x;
BlockVector pt = new BlockVector(x, y, z);
BlockData block = NMSHandler.getInstance().getBlockHelper().getBlockData(blocks[index], blockData[index]);
// TODO: 1.13 - move away from legacy IDs somehow?
BlockData block = NMSHandler.getInstance().getBlockHelper().getBlockData(dMaterial.getLegacyMaterial(blocks[index]), blockData[index]);
if (tileEntitiesMap.containsKey(pt)) {
CompoundTag otag = NMSHandler.getInstance().createCompoundTag(tileEntitiesMap.get(pt));
block.setCompoundTag(otag);
Expand Down
Expand Up @@ -82,8 +82,8 @@ public void setNbtData(Block block, CompoundTag compoundTag) {
}

@Override
public BlockData getBlockData(short id, byte data) {
return new BlockData_v1_10_R1(id, data);
public BlockData getBlockData(Material material, byte data) {
return new BlockData_v1_10_R1(material, data);
}

@Override
Expand Down
Expand Up @@ -19,8 +19,8 @@ public class BlockData_v1_10_R1 implements BlockData {
public BlockData_v1_10_R1() {
}

public BlockData_v1_10_R1(short mat, byte dat) {
material = Material.getMaterial(mat);
public BlockData_v1_10_R1(Material mat, byte dat) {
material = mat;
data = dat;
}

Expand All @@ -36,8 +36,8 @@ public BlockData_v1_10_R1(Block block) {
}
}

public void setBlock(Block block) {
block.setTypeIdAndData(material.getId(), (byte) data, false);
public void setBlock(Block block, boolean physics) {
block.setTypeIdAndData(material.getId(), (byte) data, physics);
if (ctag != null) {
CompoundTagBuilder builder = ctag.createBuilder();
builder.putInt("x", block.getX());
Expand Down
Expand Up @@ -82,8 +82,8 @@ public void setNbtData(Block block, CompoundTag compoundTag) {
}

@Override
public BlockData getBlockData(short id, byte data) {
return new BlockData_v1_11_R1(id, data);
public BlockData getBlockData(Material material, byte data) {
return new BlockData_v1_11_R1(material, data);
}

@Override
Expand Down
Expand Up @@ -19,8 +19,8 @@ public class BlockData_v1_11_R1 implements BlockData {
public BlockData_v1_11_R1() {
}

public BlockData_v1_11_R1(short mat, byte dat) {
material = Material.getMaterial(mat);
public BlockData_v1_11_R1(Material mat, byte dat) {
material = mat;
data = dat;
}

Expand All @@ -36,8 +36,8 @@ public BlockData_v1_11_R1(Block block) {
}
}

public void setBlock(Block block) {
block.setTypeIdAndData(material.getId(), (byte) data, false);
public void setBlock(Block block, boolean physics) {
block.setTypeIdAndData(material.getId(), (byte) data, physics);
if (ctag != null) {
CompoundTagBuilder builder = ctag.createBuilder();
builder.putInt("x", block.getX());
Expand Down
Expand Up @@ -98,8 +98,8 @@ public void setNbtData(Block block, CompoundTag compoundTag) {
}

@Override
public BlockData getBlockData(short id, byte data) {
return new BlockData_v1_12_R1(id, data);
public BlockData getBlockData(Material material, byte data) {
return new BlockData_v1_12_R1(material, data);
}

@Override
Expand Down
Expand Up @@ -19,8 +19,8 @@ public class BlockData_v1_12_R1 implements BlockData {
public BlockData_v1_12_R1() {
}

public BlockData_v1_12_R1(short mat, byte dat) {
material = Material.getMaterial(mat);
public BlockData_v1_12_R1(Material mat, byte dat) {
material = mat;
data = dat;
}

Expand All @@ -36,8 +36,8 @@ public BlockData_v1_12_R1(Block block) {
}
}

public void setBlock(Block block) {
block.setTypeIdAndData(material.getId(), (byte) data, false);
public void setBlock(Block block, boolean physics) {
block.setTypeIdAndData(material.getId(), (byte) data, physics);
if (ctag != null) {
CompoundTagBuilder builder = ctag.createBuilder();
builder.putInt("x", block.getX());
Expand Down
Expand Up @@ -103,8 +103,8 @@ public void setNbtData(Block block, CompoundTag compoundTag) {
}

@Override
public BlockData getBlockData(short id, byte data) {
return new BlockData_v1_13_R1(id, data);
public BlockData getBlockData(Material material, byte data) {
return new BlockData_v1_13_R1(material, data);
}

@Override
Expand Down

0 comments on commit 53f0627

Please sign in to comment.