From e99190225eec9ea8d5944c89c64421ec0c55f9cc Mon Sep 17 00:00:00 2001
From: Matthew Miller
Date: Mon, 18 Jun 2018 17:53:33 +1000
Subject: [PATCH] Further BaseBlock modernisation
---
.../worldedit/bukkit/BukkitBiomeRegistry.java | 9 +-
.../sk89q/worldedit/bukkit/BukkitEntity.java | 2 +-
.../sk89q/worldedit/bukkit/BukkitPlayer.java | 4 +-
.../bukkit/BukkitPlayerBlockBag.java | 33 +--
.../sk89q/worldedit/bukkit/BukkitUtil.java | 11 +-
.../sk89q/worldedit/bukkit/BukkitWorld.java | 40 +---
.../com/sk89q/worldedit/blocks/LazyBlock.java | 41 +---
.../java/com/sk89q/worldedit/EditSession.java | 50 ++--
.../com/sk89q/worldedit/blocks/BaseBlock.java | 224 +++++-------------
.../com/sk89q/worldedit/blocks/BaseItem.java | 94 ++------
.../sk89q/worldedit/blocks/BaseItemStack.java | 9 +-
.../com/sk89q/worldedit/blocks/BlockType.java | 7 +-
.../worldedit/blocks/type/BlockState.java | 33 +--
.../blocks/type/BlockStateHolder.java | 59 +++++
.../worldedit/command/SelectionCommands.java | 7 +-
.../sk89q/worldedit/command/ToolCommands.java | 4 +-
.../worldedit/command/UtilityCommands.java | 8 +-
.../command/argument/ItemUseParser.java | 2 +-
.../worldedit/command/tool/AreaPickaxe.java | 4 +-
.../worldedit/command/tool/BlockReplacer.java | 2 +-
.../command/tool/FloatingTreeRemover.java | 2 +-
.../worldedit/command/tool/FloodFillTool.java | 4 +-
.../command/tool/LongRangeBuildTool.java | 4 +-
.../worldedit/command/tool/QueryTool.java | 4 +-
.../command/tool/RecursivePickaxe.java | 4 +-
.../worldedit/command/tool/SinglePickaxe.java | 2 +-
.../com/sk89q/worldedit/entity/Player.java | 6 +-
.../extension/factory/DefaultBlockParser.java | 6 +-
.../extension/factory/DefaultItemParser.java | 36 +--
.../platform/AbstractPlayerActor.java | 4 -
.../extension/platform/PlayerProxy.java | 4 +-
.../SignCompatibilityHandler.java | 2 +-
.../extent/inventory/BlockBagExtent.java | 4 +-
.../extent/inventory/OutOfSpaceException.java | 18 +-
.../extent/reorder/MultiStageReorder.java | 14 +-
.../transform/BlockTransformExtent.java | 2 +-
.../validation/DataValidatorExtent.java | 2 +-
.../extent/world/BlockQuirkExtent.java | 2 +-
.../function/block/ExtentBlockCopy.java | 2 +-
.../function/generator/FloraGenerator.java | 4 +-
.../function/generator/ForestGenerator.java | 2 +-
.../generator/GardenPatchGenerator.java | 2 +-
.../worldedit/function/mask/BlockMask.java | 2 +-
.../function/mask/FuzzyBlockMask.java | 2 +-
.../function/mask/SolidBlockMask.java | 2 +-
.../worldedit/math/convolution/HeightMap.java | 4 +-
.../regions/shape/ArbitraryShape.java | 2 +-
.../com/sk89q/worldedit/util/TargetBlock.java | 4 +-
.../sk89q/worldedit/world/AbstractWorld.java | 67 +-----
.../java/com/sk89q/worldedit/world/World.java | 67 ------
.../worldedit/world/chunk/AnvilChunk.java | 32 +--
.../sk89q/worldedit/world/chunk/Chunk.java | 21 +-
.../sk89q/worldedit/world/chunk/OldChunk.java | 82 +++----
.../world/registry/BundledBlockRegistry.java | 4 +-
.../transform/BlockTransformExtentTest.java | 4 +-
.../worldedit/forge/ForgeItemRegistry.java | 5 +-
.../sk89q/worldedit/forge/ForgePlayer.java | 5 +-
.../com/sk89q/worldedit/forge/ForgeWorld.java | 15 +-
.../sk89q/worldedit/forge/ForgeWorldEdit.java | 24 +-
.../sk89q/worldedit/sponge/SpongePlayer.java | 9 +-
.../sk89q/worldedit/sponge/SpongeWorld.java | 7 +-
61 files changed, 344 insertions(+), 787 deletions(-)
create mode 100644 worldedit-core/src/main/java/com/sk89q/worldedit/blocks/type/BlockStateHolder.java
diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitBiomeRegistry.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitBiomeRegistry.java
index 72e3379fc..8a69eaf31 100644
--- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitBiomeRegistry.java
+++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitBiomeRegistry.java
@@ -48,7 +48,7 @@ class BukkitBiomeRegistry implements BiomeRegistry {
public List getBiomes() {
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
if (adapter != null) {
- List biomes = new ArrayList();
+ List biomes = new ArrayList<>();
for (Biome biome : Biome.values()) {
int biomeId = adapter.getBiomeId(biome);
biomes.add(new BaseBiome(biomeId));
@@ -65,12 +65,7 @@ class BukkitBiomeRegistry implements BiomeRegistry {
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
if (adapter != null) {
final Biome bukkitBiome = adapter.getBiome(biome.getId());
- return new BiomeData() {
- @Override
- public String getName() {
- return bukkitBiome.name();
- }
- };
+ return bukkitBiome::name;
} else {
return null;
}
diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitEntity.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitEntity.java
index cfc49b01b..010ad55bc 100644
--- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitEntity.java
+++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitEntity.java
@@ -47,7 +47,7 @@ class BukkitEntity implements Entity {
*/
BukkitEntity(org.bukkit.entity.Entity entity) {
checkNotNull(entity);
- this.entityRef = new WeakReference(entity);
+ this.entityRef = new WeakReference<>(entity);
}
@Override
diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayer.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayer.java
index 9053e4bf3..a129b9633 100644
--- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayer.java
+++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayer.java
@@ -78,8 +78,8 @@ public class BukkitPlayer extends AbstractPlayerActor {
}
@Override
- public void giveItem(int type, int amt) {
- player.getInventory().addItem(new ItemStack(type, amt));
+ public void giveItem(BaseItemStack itemStack) {
+ player.getInventory().addItem(new ItemStack(itemStack.getLegacyId(), itemStack.getAmount()));
}
@Override
diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayerBlockBag.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayerBlockBag.java
index 8733c4f9a..a939c1ae0 100644
--- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayerBlockBag.java
+++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitPlayerBlockBag.java
@@ -21,7 +21,8 @@ package com.sk89q.worldedit.bukkit;
import com.sk89q.worldedit.blocks.BaseItem;
import com.sk89q.worldedit.blocks.BaseItemStack;
-import com.sk89q.worldedit.blocks.BlockID;
+import com.sk89q.worldedit.blocks.type.ItemType;
+import com.sk89q.worldedit.blocks.type.ItemTypes;
import com.sk89q.worldedit.extent.inventory.BlockBag;
import com.sk89q.worldedit.extent.inventory.BlockBagException;
import com.sk89q.worldedit.extent.inventory.OutOfBlocksException;
@@ -64,13 +65,11 @@ public class BukkitPlayerBlockBag extends BlockBag {
@Override
public void fetchItem(BaseItem item) throws BlockBagException {
- final int id = item.getLegacyId();
- final int damage = item.getData();
+ final ItemType id = item.getType();
int amount = (item instanceof BaseItemStack) ? ((BaseItemStack) item).getAmount() : 1;
assert(amount == 1);
- boolean usesDamageValue = true;// TODO ItemType.usesDamageValue(id);
- if (id == BlockID.AIR) {
+ if (id == ItemTypes.AIR) {
throw new IllegalArgumentException("Can't fetch air block");
}
@@ -85,16 +84,12 @@ public class BukkitPlayerBlockBag extends BlockBag {
continue;
}
- if (bukkitItem.getTypeId() != id) {
+ if (bukkitItem.getTypeId() != id.getLegacyId()) {
+ // TODO Fix when bukkit gets not awful
// Type id doesn't fit
continue;
}
- if (usesDamageValue && bukkitItem.getDurability() != damage) {
- // Damage value doesn't fit.
- continue;
- }
-
int currentAmount = bukkitItem.getAmount();
if (currentAmount < 0) {
// Unlimited
@@ -119,13 +114,11 @@ public class BukkitPlayerBlockBag extends BlockBag {
@Override
public void storeItem(BaseItem item) throws BlockBagException {
- final int id = item.getLegacyId();
- final int damage = item.getData();
+ final ItemType id = item.getType();
int amount = (item instanceof BaseItemStack) ? ((BaseItemStack) item).getAmount() : 1;
assert(amount <= 64);
- boolean usesDamageValue = true; //TODO ItemType.usesDamageValue(id);
- if (id == BlockID.AIR) {
+ if (id == ItemTypes.AIR) {
throw new IllegalArgumentException("Can't store air block");
}
@@ -146,16 +139,12 @@ public class BukkitPlayerBlockBag extends BlockBag {
continue;
}
- if (bukkitItem.getTypeId() != id) {
+ if (bukkitItem.getTypeId() != id.getLegacyId()) {
+ // TODO Fix when bukkit gets not terrible
// Type id doesn't fit
continue;
}
- if (usesDamageValue && bukkitItem.getDurability() != damage) {
- // Damage value doesn't fit.
- continue;
- }
-
int currentAmount = bukkitItem.getAmount();
if (currentAmount < 0) {
// Unlimited
@@ -177,7 +166,7 @@ public class BukkitPlayerBlockBag extends BlockBag {
}
if (freeSlot > -1) {
- items[freeSlot] = new ItemStack(id, amount);
+ items[freeSlot] = new ItemStack(id.getLegacyId(), amount); // TODO Ditto
return;
}
diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitUtil.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitUtil.java
index 07d5f81d7..f32d56766 100644
--- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitUtil.java
+++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitUtil.java
@@ -20,14 +20,13 @@
package com.sk89q.worldedit.bukkit;
import com.sk89q.worldedit.BlockVector;
-import com.sk89q.worldedit.NotABlockException;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.blocks.BaseItemStack;
-import com.sk89q.worldedit.blocks.BlockID;
import com.sk89q.worldedit.blocks.BlockType;
import com.sk89q.worldedit.blocks.ItemID;
+import com.sk89q.worldedit.blocks.type.BlockTypes;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.util.Location;
import org.bukkit.DyeColor;
@@ -131,7 +130,7 @@ public final class BukkitUtil {
case ItemID.INK_SACK:
final Dye materialData = (Dye) itemStack.getData();
if (materialData.getColor() == DyeColor.BROWN) {
- return new BaseBlock(BlockID.COCOA_PLANT, -1);
+ return new BaseBlock(BlockTypes.COCOA);
}
break;
@@ -143,11 +142,7 @@ public final class BukkitUtil {
break;
}
- if (world.isValidBlockType(typeId)) {
- return new BaseBlock(typeId, -1);
- }
-
- throw new NotABlockException(typeId);
+ return new BaseBlock(typeId, -1);
}
public static BaseItemStack toBaseItemStack(ItemStack itemStack) {
diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java
index 5454cb799..36871447f 100644
--- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java
+++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java
@@ -248,36 +248,6 @@ public class BukkitWorld extends AbstractWorld {
return true;
}
- @Override
- @Deprecated
- public boolean generateTree(EditSession editSession, Vector pt) {
- return generateTree(TreeGenerator.TreeType.TREE, editSession, pt);
- }
-
- @Override
- @Deprecated
- public boolean generateBigTree(EditSession editSession, Vector pt) {
- return generateTree(TreeGenerator.TreeType.BIG_TREE, editSession, pt);
- }
-
- @Override
- @Deprecated
- public boolean generateBirchTree(EditSession editSession, Vector pt) {
- return generateTree(TreeGenerator.TreeType.BIRCH, editSession, pt);
- }
-
- @Override
- @Deprecated
- public boolean generateRedwoodTree(EditSession editSession, Vector pt) {
- return generateTree(TreeGenerator.TreeType.REDWOOD, editSession, pt);
- }
-
- @Override
- @Deprecated
- public boolean generateTallRedwoodTree(EditSession editSession, Vector pt) {
- return generateTree(TreeGenerator.TreeType.TALL_REDWOOD, editSession, pt);
- }
-
/**
* An EnumMap that stores which WorldEdit TreeTypes apply to which Bukkit TreeTypes
*/
@@ -323,16 +293,10 @@ public class BukkitWorld extends AbstractWorld {
@Override
public void dropItem(Vector pt, BaseItemStack item) {
World world = getWorld();
- ItemStack bukkitItem = new ItemStack(item.getLegacyId(), item.getAmount(),
- item.getData());
+ ItemStack bukkitItem = new ItemStack(item.getLegacyId(), item.getAmount()); // TODO Add data.
world.dropItemNaturally(BukkitUtil.toLocation(world, pt), bukkitItem);
}
- @Override
- public boolean isValidBlockType(int type) {
- return Material.getMaterial(type) != null && Material.getMaterial(type).isBlock();
- }
-
@Override
public void checkLoadedChunk(Vector pt) {
World world = getWorld();
@@ -415,7 +379,7 @@ public class BukkitWorld extends AbstractWorld {
return adapter.setBlock(BukkitAdapter.adapt(getWorld(), position), block, notifyAndLight);
} else {
Block bukkitBlock = getWorld().getBlockAt(position.getBlockX(), position.getBlockY(), position.getBlockZ());
- return bukkitBlock.setTypeIdAndData(block.getType().getLegacyId(), (byte) block.getData(), notifyAndLight);
+ return bukkitBlock.setTypeIdAndData(block.getBlockType().getLegacyId(), (byte) block.getData(), notifyAndLight);
}
}
diff --git a/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/LazyBlock.java b/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/LazyBlock.java
index e70bd31ab..fe7dee50a 100644
--- a/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/LazyBlock.java
+++ b/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/LazyBlock.java
@@ -19,16 +19,13 @@
package com.sk89q.worldedit.blocks;
-import com.sk89q.jnbt.CompoundTag;
-import com.sk89q.worldedit.Vector;
-import com.sk89q.worldedit.blocks.type.BlockType;
-import com.sk89q.worldedit.extent.Extent;
-import com.sk89q.worldedit.world.registry.state.State;
-import com.sk89q.worldedit.world.registry.state.value.StateValue;
-
import static com.google.common.base.Preconditions.checkNotNull;
-import java.util.Map;
+import com.sk89q.jnbt.CompoundTag;
+import com.sk89q.worldedit.Vector;
+import com.sk89q.worldedit.blocks.type.BlockState;
+import com.sk89q.worldedit.blocks.type.BlockType;
+import com.sk89q.worldedit.extent.Extent;
/**
* A implementation of a lazy block for {@link Extent#getLazyBlock(Vector)}
@@ -65,14 +62,13 @@ public class LazyBlock extends BaseBlock {
/**
* Create a new lazy block.
*
- * @param type the block type
- * @param states the block states
+ * @param state the block state
* @param extent the extent to later load the full block data from
* @param position the position to later load the full block data from
*/
@Deprecated
- public LazyBlock(BlockType type, Map states, Extent extent, Vector position) {
- super(type, states);
+ public LazyBlock(BlockState state, Extent extent, Vector position) {
+ super(state);
checkNotNull(extent);
checkNotNull(position);
this.extent = extent;
@@ -96,31 +92,12 @@ public class LazyBlock extends BaseBlock {
this.position = position;
}
- @Override
- public void setId(int id) {
- throw new UnsupportedOperationException("This object is immutable");
- }
-
- @Override
- public void setData(int data) {
- throw new UnsupportedOperationException("This object is immutable");
- }
-
- @Override
- public void setType(BlockType type) {
- throw new UnsupportedOperationException("This object is immutable");
- }
-
- @Override
- public void setState(State state, StateValue stateValue) {
- throw new UnsupportedOperationException("This object is immutable");
- }
-
@Override
public CompoundTag getNbtData() {
if (!loaded) {
BaseBlock loadedBlock = extent.getBlock(position);
super.setNbtData(loadedBlock.getNbtData());
+ loaded = true;
}
return super.getNbtData();
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java b/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java
index 62d78e4d4..f5ed6c283 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java
@@ -1063,7 +1063,7 @@ public class EditSession implements Extent {
// Remove the original blocks
com.sk89q.worldedit.function.pattern.Pattern pattern = replacement != null ?
new BlockPattern(replacement) :
- new BlockPattern(new BaseBlock(BlockID.AIR));
+ new BlockPattern(new BaseBlock(BlockTypes.AIR));
BlockReplace remove = new BlockReplace(this, pattern);
// Copy to a buffer so we don't destroy our original before we can copy all the blocks from it
@@ -1143,22 +1143,22 @@ public class EditSession implements Extent {
* @return number of blocks affected
* @throws MaxChangedBlocksException thrown if too many blocks are changed
*/
- public int fixLiquid(Vector origin, double radius, int moving, int stationary) throws MaxChangedBlocksException {
+ public int fixLiquid(Vector origin, double radius, com.sk89q.worldedit.blocks.type.BlockType moving, com.sk89q.worldedit.blocks.type.BlockType stationary) throws MaxChangedBlocksException {
checkNotNull(origin);
checkArgument(radius >= 0, "radius >= 0 required");
// Our origins can only be liquids
BlockMask liquidMask = new BlockMask(
this,
- new BaseBlock(moving, -1),
- new BaseBlock(stationary, -1));
+ new BaseBlock(moving),
+ new BaseBlock(stationary));
// But we will also visit air blocks
MaskIntersection blockMask =
new MaskUnion(liquidMask,
new BlockMask(
this,
- new BaseBlock(BlockID.AIR)));
+ new BaseBlock(BlockTypes.AIR)));
// There are boundaries that the routine needs to stay in
MaskIntersection mask = new MaskIntersection(
@@ -1449,7 +1449,7 @@ public class EditSession implements Extent {
for (int y = world.getMaxY(); y >= 1; --y) {
Vector pt = new Vector(x, y, z);
- com.sk89q.worldedit.blocks.type.BlockType id = getLazyBlock(pt).getType();
+ com.sk89q.worldedit.blocks.type.BlockType id = getLazyBlock(pt).getBlockType();
if (id == BlockTypes.ICE) {
if (setBlock(pt, water)) {
@@ -1657,14 +1657,14 @@ public class EditSession implements Extent {
for (int y = basePosition.getBlockY(); y >= basePosition.getBlockY() - 10; --y) {
// Check if we hit the ground
- int t = getBlock(new Vector(x, y, z)).getType().getLegacyId();
- if (t == BlockID.GRASS || t == BlockID.DIRT) {
+ com.sk89q.worldedit.blocks.type.BlockType t = getBlock(new Vector(x, y, z)).getBlockType();
+ if (t == BlockTypes.GRASS_BLOCK || t == BlockTypes.DIRT) {
treeGenerator.generate(this, new Vector(x, y + 1, z));
++affected;
break;
- } else if (t == BlockID.SNOW) {
- setBlock(new Vector(x, y, z), new BaseBlock(BlockID.AIR));
- } else if (t != BlockID.AIR) { // Trees won't grow on this!
+ } else if (t == BlockTypes.SNOW) {
+ setBlock(new Vector(x, y, z), new BaseBlock(BlockTypes.AIR));
+ } else if (t != BlockTypes.AIR) { // Trees won't grow on this!
break;
}
}
@@ -1680,9 +1680,9 @@ public class EditSession implements Extent {
* @param region a region
* @return the results
*/
- public List> getBlockDistribution(Region region) {
- List> distribution = new ArrayList<>();
- Map> map = new HashMap<>();
+ public List> getBlockDistribution(Region region) {
+ List> distribution = new ArrayList<>();
+ Map> map = new HashMap<>();
if (region instanceof CuboidRegion) {
// Doing this for speed
@@ -1701,13 +1701,13 @@ public class EditSession implements Extent {
for (int z = minZ; z <= maxZ; ++z) {
Vector pt = new Vector(x, y, z);
- int id = getLazyBlock(pt).getId();
+ com.sk89q.worldedit.blocks.type.BlockType type = getLazyBlock(pt).getBlockType();
- if (map.containsKey(id)) {
- map.get(id).increment();
+ if (map.containsKey(type)) {
+ map.get(type).increment();
} else {
- Countable c = new Countable<>(id, 1);
- map.put(id, c);
+ Countable c = new Countable<>(type, 1);
+ map.put(type, c);
distribution.add(c);
}
}
@@ -1715,13 +1715,13 @@ public class EditSession implements Extent {
}
} else {
for (Vector pt : region) {
- int id = getLazyBlock(pt).getId();
+ com.sk89q.worldedit.blocks.type.BlockType type = getLazyBlock(pt).getBlockType();
- if (map.containsKey(id)) {
- map.get(id).increment();
+ if (map.containsKey(type)) {
+ map.get(type).increment();
} else {
- Countable c = new Countable<>(id, 1);
- map.put(id, c);
+ Countable c = new Countable<>(type, 1);
+ map.put(type, c);
}
}
}
@@ -1809,7 +1809,7 @@ public class EditSession implements Extent {
final Vector scaled = current.subtract(zero).divide(unit);
try {
- if (expression.evaluate(scaled.getX(), scaled.getY(), scaled.getZ(), defaultMaterial.getType().getLegacyId(), defaultMaterial.getData()) <= 0) {
+ if (expression.evaluate(scaled.getX(), scaled.getY(), scaled.getZ(), defaultMaterial.getBlockType().getLegacyId(), defaultMaterial.getData()) <= 0) {
return null;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java
index 5c1644280..df4f5b14a 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java
@@ -24,19 +24,18 @@ import com.sk89q.jnbt.StringTag;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.CuboidClipboard.FlipDirection;
import com.sk89q.worldedit.blocks.type.BlockState;
+import com.sk89q.worldedit.blocks.type.BlockStateHolder;
import com.sk89q.worldedit.blocks.type.BlockType;
import com.sk89q.worldedit.blocks.type.BlockTypes;
import com.sk89q.worldedit.function.mask.Mask;
-import com.sk89q.worldedit.world.registry.BundledBlockData;
import com.sk89q.worldedit.world.registry.state.State;
import com.sk89q.worldedit.world.registry.state.value.StateValue;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import javax.annotation.Nullable;
@@ -54,13 +53,12 @@ import javax.annotation.Nullable;
* as a "wildcard" block value, even though a {@link Mask} would be
* more appropriate.
*/
-public class BaseBlock implements TileEntityBlock {
+public class BaseBlock implements BlockStateHolder, TileEntityBlock {
// Instances of this class should be _as small as possible_ because there will
// be millions of instances of this object.
- private BlockType blockType;
- private Map states;
+ private BlockState blockState;
@Nullable
private CompoundTag nbtData;
@@ -68,18 +66,18 @@ public class BaseBlock implements TileEntityBlock {
* Construct a block with the given ID and a data value of 0.
*
* @param id ID value
- * @see #setId(int)
*/
@Deprecated
public BaseBlock(int id) {
- internalSetId(id);
- internalSetData(0);
- this.states = new HashMap<>();
}
+ /**
+ * Construct a block with a state.
+ *
+ * @param blockState The blockstate
+ */
public BaseBlock(BlockState blockState) {
- this.blockType = blockState.getBlockType();
- this.states = blockState.getStates();
+ this.blockState = blockState;
}
/**
@@ -88,8 +86,18 @@ public class BaseBlock implements TileEntityBlock {
* @param blockType The block type
*/
public BaseBlock(BlockType blockType) {
- internalSetType(blockType);
- this.states = new HashMap<>();
+ this.blockState = blockType.getDefaultState();
+ }
+
+ /**
+ * Construct a block with the given ID, data value and NBT data structure.
+ *
+ * @param state The block state
+ * @param nbtData NBT data, which may be null
+ */
+ public BaseBlock(BlockState state, @Nullable CompoundTag nbtData) {
+ this.blockState = state;
+ setNbtData(nbtData);
}
/**
@@ -97,27 +105,9 @@ public class BaseBlock implements TileEntityBlock {
*
* @param id ID value
* @param data data value
- * @see #setId(int)
- * @see #setData(int)
*/
@Deprecated
public BaseBlock(int id, int data) {
- internalSetId(id);
- internalSetData(data);
- this.states = new HashMap<>();
- }
-
- /**
- * Construct a block with the given ID and data value.
- *
- * @param blockType The block type
- * @param states The states
- * @see #setId(int)
- * @see #setData(int)
- */
- public BaseBlock(BlockType blockType, Map states) {
- internalSetType(blockType);
- setStates(states);
}
/**
@@ -129,22 +119,6 @@ public class BaseBlock implements TileEntityBlock {
*/
@Deprecated
public BaseBlock(int id, int data, @Nullable CompoundTag nbtData) {
- internalSetId(id);
- setData(data);
- setNbtData(nbtData);
- this.states = new HashMap<>();
- }
-
- /**
- * Construct a block with the given ID, data value and NBT data structure.
- *
- * @param blockType The block type
- * @param states The states
- * @param nbtData NBT data, which may be null
- */
- public BaseBlock(BlockType blockType, Map states, @Nullable CompoundTag nbtData) {
- setType(blockType);
- setStates(states);
setNbtData(nbtData);
}
@@ -154,7 +128,16 @@ public class BaseBlock implements TileEntityBlock {
* @param other the other block
*/
public BaseBlock(BaseBlock other) {
- this(other.getType(), other.getStates(), other.getNbtData());
+ this(other.getState(), other.getNbtData());
+ }
+
+ /**
+ * Get the block state
+ *
+ * @return The block state
+ */
+ public BlockState getState() {
+ return this.blockState;
}
/**
@@ -164,45 +147,7 @@ public class BaseBlock implements TileEntityBlock {
*/
@Deprecated
public int getId() {
- return this.blockType.getLegacyId();
- }
-
- /**
- * Set the block ID.
- *
- * @param type block type
- */
- protected final void internalSetType(BlockType type) {
- if (type == null) {
- throw new IllegalArgumentException("You must provide a BlockType");
- }
-
- this.blockType = type;
- }
-
- /**
- * Set the block ID.
- *
- * @param id block id
- */
- @Deprecated
- public void setId(int id) {
- internalSetId(id);
- }
-
- @Deprecated
- private void internalSetId(int id) {
- BlockType type = BlockTypes.getBlockType(BundledBlockData.getInstance().fromLegacyId(id));
- internalSetType(type);
- }
-
- /**
- * Set the block type.
- *
- * @param type block type
- */
- public void setType(BlockType type) {
- internalSetType(type);
+ return this.blockState.getBlockType().getLegacyId();
}
/**
@@ -223,16 +168,17 @@ public class BaseBlock implements TileEntityBlock {
* @return The state map
*/
public Map getStates() {
- return Collections.unmodifiableMap(states);
+ return this.blockState.getStates();
}
- /**
- * Sets the states of this block.
- *
- * @param states The states
- */
- private void setStates(Map states) {
- this.states = states;
+ @Override
+ public BlockType getBlockType() {
+ return this.blockState.getBlockType();
+ }
+
+ @Override
+ public BaseBlock with(State state, StateValue value) {
+ return new BaseBlock(this.blockState.with(state, value), getNbtData());
}
/**
@@ -242,26 +188,7 @@ public class BaseBlock implements TileEntityBlock {
* @return The state value
*/
public StateValue getState(State state) {
- return states.get(state);
- }
-
- /**
- * Sets a state to a specific value
- *
- * @param state The state
- * @param stateValue The value
- */
- public void setState(State state, StateValue stateValue) {
- this.states.put(state, stateValue);
- }
-
- /**
- * Set the block's data value.
- *
- * @param data block data value
- */
- @Deprecated
- protected final void internalSetData(int data) {
+ return this.blockState.getState(state);
}
/**
@@ -271,34 +198,6 @@ public class BaseBlock implements TileEntityBlock {
*/
@Deprecated
public void setData(int data) {
- internalSetData(data);
- }
-
- /**
- * Set both the block's ID and data value.
- *
- * @param id ID value
- * @param data data value
- * @see #setId(int)
- * @see #setData(int)
- */
- @Deprecated
- public void setIdAndData(int id, int data) {
- setId(id);
- setData(data);
- }
-
- /**
- * Returns whether there are no matched states.
- *
- * @return true if there are no matched states
- */
- public boolean hasWildcardData() {
- return getStates().isEmpty();
- }
-
- public boolean hasWildcardDataFor(State state) {
- return getState(state) == null;
}
@Override
@@ -323,21 +222,12 @@ public class BaseBlock implements TileEntityBlock {
@Nullable
@Override
public CompoundTag getNbtData() {
- return nbtData;
+ return this.nbtData;
}
@Override
public void setNbtData(@Nullable CompoundTag nbtData) {
- this.nbtData = nbtData;
- }
-
- /**
- * Get the type of block.
- *
- * @return the type
- */
- public BlockType getType() {
- return this.blockType;
+ throw new UnsupportedOperationException("This class is immutable.");
}
/**
@@ -346,7 +236,7 @@ public class BaseBlock implements TileEntityBlock {
* @return if air
*/
public boolean isAir() {
- return getType() == BlockTypes.AIR;
+ return getBlockType() == BlockTypes.AIR;
}
/**
@@ -357,7 +247,7 @@ public class BaseBlock implements TileEntityBlock {
*/
@Deprecated
public int rotate90() {
- int newData = BlockData.rotate90(getType().getLegacyId(), getData());
+ int newData = BlockData.rotate90(getBlockType().getLegacyId(), getData());
setData(newData);
return newData;
}
@@ -370,7 +260,7 @@ public class BaseBlock implements TileEntityBlock {
*/
@Deprecated
public int rotate90Reverse() {
- int newData = BlockData.rotate90Reverse(getType().getLegacyId(), getData());
+ int newData = BlockData.rotate90Reverse(getBlockType().getLegacyId(), getData());
setData((short) newData);
return newData;
}
@@ -384,7 +274,7 @@ public class BaseBlock implements TileEntityBlock {
*/
@Deprecated
public int cycleData(int increment) {
- int newData = BlockData.cycle(getType().getLegacyId(), getData(), increment);
+ int newData = BlockData.cycle(getBlockType().getLegacyId(), getData(), increment);
setData((short) newData);
return newData;
}
@@ -397,7 +287,7 @@ public class BaseBlock implements TileEntityBlock {
*/
@Deprecated
public BaseBlock flip() {
- setData((short) BlockData.flip(getType().getLegacyId(), getData()));
+ setData((short) BlockData.flip(getBlockType().getLegacyId(), getData()));
return this;
}
@@ -410,7 +300,7 @@ public class BaseBlock implements TileEntityBlock {
*/
@Deprecated
public BaseBlock flip(FlipDirection direction) {
- setData((short) BlockData.flip(getType().getLegacyId(), getData(), direction));
+ setData((short) BlockData.flip(getBlockType().getLegacyId(), getData(), direction));
return this;
}
@@ -425,7 +315,7 @@ public class BaseBlock implements TileEntityBlock {
final BaseBlock otherBlock = (BaseBlock) o;
- return getType() == otherBlock.getType() && getData() == otherBlock.getData();
+ return this.getState().equals(otherBlock.getState()) && Objects.equals(getNbtData(), otherBlock.getNbtData());
}
@@ -436,7 +326,7 @@ public class BaseBlock implements TileEntityBlock {
* @return true if equal
*/
public boolean equalsFuzzy(BaseBlock o) {
- if (!getType().equals(o.getType())) {
+ if (!getBlockType().equals(o.getBlockType())) {
return false;
}
@@ -484,14 +374,16 @@ public class BaseBlock implements TileEntityBlock {
@Override
public int hashCode() {
- int ret = getType().hashCode() << 3;
- ret += getStates().hashCode();
+ int ret = getState().hashCode() << 3;
+ if (hasNbtData()) {
+ ret += getNbtData().hashCode();
+ }
return ret;
}
@Override
public String toString() {
- return "Block{Type:" + getType().getId() + ", States: " + getStates().toString() + "}";
+ return "Block{State: " + this.getState().toString() + ", NBT: " + String.valueOf(getNbtData()) + "}";
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseItem.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseItem.java
index 228035c98..529d5829a 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseItem.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseItem.java
@@ -19,12 +19,11 @@
package com.sk89q.worldedit.blocks;
+import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.blocks.type.ItemType;
-import com.sk89q.worldedit.blocks.type.ItemTypes;
-import com.sk89q.worldedit.world.registry.BundledItemData;
+import com.sk89q.worldedit.world.NbtValued;
-import java.util.HashMap;
-import java.util.Map;
+import javax.annotation.Nullable;
/**
* Represents an item, without an amount value. See {@link BaseItemStack}
@@ -32,11 +31,11 @@ import java.util.Map;
*
* This class may be removed in the future.
*/
-public class BaseItem {
+public class BaseItem implements NbtValued {
private ItemType itemType;
- private short damage;
- private final Map enchantments = new HashMap<>();
+ @Nullable
+ private CompoundTag nbtData;
/**
* Construct the object.
@@ -45,7 +44,6 @@ public class BaseItem {
*/
@Deprecated
public BaseItem(int id) {
- this(id, (short) 0);
}
/**
@@ -57,27 +55,15 @@ public class BaseItem {
this.itemType = itemType;
}
- /**
- * Construct the object.
- *
- * @param id ID of the item
- * @param data data value of the item
- */
- @Deprecated
- public BaseItem(int id, short data) {
- setLegacyId(id);
- this.damage = data;
- }
-
/**
* Construct the object.
*
* @param itemType Type of the item
- * @param damage Damage value of the item
+ * @param tag NBT Compound tag
*/
- public BaseItem(ItemType itemType, short damage) {
+ public BaseItem(ItemType itemType, CompoundTag tag) {
this.itemType = itemType;
- this.damage = damage;
+ this.nbtData = tag;
}
/**
@@ -90,17 +76,6 @@ public class BaseItem {
return this.itemType.getLegacyId();
}
- /**
- * Set the type of item.
- *
- * @param id the id to set
- */
- @Deprecated
- public void setLegacyId(int id) {
- ItemType type = ItemTypes.getItemType(BundledItemData.getInstance().fromLegacyId(id));
- setType(type);
- }
-
/**
* Get the type of item.
*
@@ -119,50 +94,19 @@ public class BaseItem {
this.itemType = itemType;
}
- /**
- * Get the damage value.
- *
- * @return the damage
- */
- public short getDamage() {
- return this.damage;
+ @Override
+ public boolean hasNbtData() {
+ return this.nbtData != null;
}
- /**
- * Get the data value.
- *
- * @return the data
- */
- @Deprecated
- public short getData() {
- return this.damage;
+ @Nullable
+ @Override
+ public CompoundTag getNbtData() {
+ return this.nbtData;
}
- /**
- * Set the data value.
- *
- * @param damage the damage to set
- */
- public void setDamage(short damage) {
- this.damage = damage;
- }
-
- /**
- * Set the data value.
- *
- * @param data the damage to set
- */
- @Deprecated
- public void setData(short data) {
- this.damage = data;
- }
-
- /**
- * Get the map of enchantments.
- *
- * @return map of enchantments
- */
- public Map getEnchantments() {
- return enchantments;
+ @Override
+ public void setNbtData(@Nullable CompoundTag nbtData) {
+ this.nbtData = nbtData;
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseItemStack.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseItemStack.java
index 93c876b8c..acb97c04f 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseItemStack.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BaseItemStack.java
@@ -19,6 +19,7 @@
package com.sk89q.worldedit.blocks;
+import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.blocks.type.ItemType;
/**
@@ -81,7 +82,7 @@ public class BaseItemStack extends BaseItem {
*/
@Deprecated
public BaseItemStack(int id, int amount, short data) {
- super(id, data);
+ super(id);
this.amount = amount;
}
@@ -89,11 +90,11 @@ public class BaseItemStack extends BaseItem {
* Construct the object.
*
* @param id The item type
+ * @param tag Tag value
* @param amount amount in the stack
- * @param damage Damage value
*/
- public BaseItemStack(ItemType id, int amount, short damage) {
- super(id, damage);
+ public BaseItemStack(ItemType id, CompoundTag tag, int amount) {
+ super(id, tag);
this.amount = amount;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockType.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockType.java
index d24b3e73f..19f09490d 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockType.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/BlockType.java
@@ -1540,7 +1540,7 @@ public enum BlockType {
addIdentities(BlockID.DOUBLE_WOODEN_STEP, 7); // rule 3
addIdentities(BlockID.WOODEN_STEP, 7); // rule 1
- nonDataBlockBagItems.put(BlockID.COCOA_PLANT, new BaseItem(ItemID.INK_SACK, (short) (15 - ClothColor.ID.BROWN))); // rule 3
+ nonDataBlockBagItems.put(BlockID.COCOA_PLANT, new BaseItem(ItemID.INK_SACK)); // rule 3 TODO data removed
addIdentity(BlockID.SANDSTONE_STAIRS); // rule 1
nonDataBlockBagItems.put(BlockID.EMERALD_ORE, new BaseItem(ItemID.EMERALD)); // rule 5
addIdentity(BlockID.ENDER_CHEST); // rule 3
@@ -1569,7 +1569,8 @@ public enum BlockType {
addIdentity(BlockID.HOPPER); // rule 1
addIdentities(BlockID.QUARTZ_BLOCK, 1); // rule 4
for (int i = 2; i <= 4; i++) {
- dataBlockBagItems.put(typeDataKey(BlockID.QUARTZ_BLOCK, i), new BaseItem(BlockID.QUARTZ_BLOCK, (short) 2)); // rule 4, quartz pillars
+ dataBlockBagItems.put(typeDataKey(BlockID.QUARTZ_BLOCK, i), new BaseItem(BlockID.QUARTZ_BLOCK)); // rule 4, quartz pillars TODO data
+ // removed
}
addIdentity(BlockID.QUARTZ_STAIRS); // rule 1
addIdentity(BlockID.ACTIVATOR_RAIL); // rule 1
@@ -1629,7 +1630,7 @@ public enum BlockType {
private static void addIdentities(int type, int maxData) {
for (int data = 0; data < maxData; ++data) {
- dataBlockBagItems.put(typeDataKey(type, data), new BaseItem(type, (short) data));
+ dataBlockBagItems.put(typeDataKey(type, data), new BaseItem(type)); // TODO data removed
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/type/BlockState.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/type/BlockState.java
index 420dc9a99..618eeaf6f 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/type/BlockState.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/type/BlockState.java
@@ -34,7 +34,7 @@ import java.util.Map;
* An immutable class that represents the state a block can be in.
*/
@SuppressWarnings("unchecked")
-public class BlockState {
+public class BlockState implements BlockStateHolder {
private final BlockType blockType;
private final Map values;
@@ -67,7 +67,7 @@ public class BlockState {
for(final Map.Entry entry : this.values.entrySet()) {
final State state = entry.getKey();
- state.getValues().stream().forEach(value -> {
+ state.getValues().forEach(value -> {
if(value != entry.getValue()) {
states.put(state, (StateValue) value, stateMap.get(this.withValue(state, (StateValue) value)));
}
@@ -83,22 +83,12 @@ public class BlockState {
return values;
}
- /**
- * Get the block type
- *
- * @return The type
- */
+ @Override
public BlockType getBlockType() {
return this.blockType;
}
- /**
- * Returns a BlockState with the given state and value applied.
- *
- * @param state The state
- * @param value The value
- * @return The modified state, or same if could not be applied
- */
+ @Override
public BlockState with(State state, StateValue value) {
if (fuzzy) {
return setState(state, value);
@@ -108,21 +98,12 @@ public class BlockState {
}
}
- /**
- * Gets the value at the given state
- *
- * @param state The state
- * @return The value
- */
+ @Override
public StateValue getState(State state) {
return this.values.get(state);
}
- /**
- * Gets an immutable collection of the states.
- *
- * @return The states
- */
+ @Override
public Map getStates() {
return Collections.unmodifiableMap(this.values);
}
@@ -136,7 +117,7 @@ public class BlockState {
* @param value The value
* @return The blockstate, for chaining
*/
- BlockState setState(State state, StateValue value) {
+ private BlockState setState(State state, StateValue value) {
this.values.put(state, value);
return this;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/type/BlockStateHolder.java b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/type/BlockStateHolder.java
new file mode 100644
index 000000000..9375d2915
--- /dev/null
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/blocks/type/BlockStateHolder.java
@@ -0,0 +1,59 @@
+/*
+ * WorldEdit, a Minecraft world manipulation toolkit
+ * Copyright (C) sk89q
+ * Copyright (C) WorldEdit team and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see .
+ */
+
+package com.sk89q.worldedit.blocks.type;
+
+import com.sk89q.worldedit.world.registry.state.State;
+import com.sk89q.worldedit.world.registry.state.value.StateValue;
+
+import java.util.Map;
+
+public interface BlockStateHolder {
+
+ /**
+ * Get the block type
+ *
+ * @return The type
+ */
+ BlockType getBlockType();
+
+ /**
+ * Returns a BlockState with the given state and value applied.
+ *
+ * @param state The state
+ * @param value The value
+ * @return The modified state, or same if could not be applied
+ */
+ T with(State state, StateValue value);
+
+ /**
+ * Gets the value at the given state
+ *
+ * @param state The state
+ * @return The value
+ */
+ StateValue getState(State state);
+
+ /**
+ * Gets an immutable collection of the states.
+ *
+ * @return The states
+ */
+ Map getStates();
+}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/SelectionCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/SelectionCommands.java
index 61eaaa9ec..7fe95ac74 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/SelectionCommands.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/SelectionCommands.java
@@ -34,6 +34,7 @@ import com.sk89q.worldedit.Vector2D;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseBlock;
+import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.blocks.type.ItemTypes;
import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.extension.input.ParserContext;
@@ -277,7 +278,7 @@ public class SelectionCommands {
@CommandPermissions("worldedit.wand")
public void wand(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException {
- player.giveItem(ItemTypes.getItemType(we.getConfiguration().wandItem).getLegacyId(), 1);
+ player.giveItem(new BaseItemStack(ItemTypes.getItemType(we.getConfiguration().wandItem), 1));
player.print("Left click: select pos #1; Right click: select pos #2");
}
@@ -677,12 +678,12 @@ public class SelectionCommands {
player.print("# total blocks: " + size);
for (Countable c : distributionData) {
- String name = c.getID().getType().getName();
+ String name = c.getID().getBlockType().getName();
String str = String.format("%-7s (%.3f%%) %s #%s%s",
String.valueOf(c.getAmount()),
c.getAmount() / (double) size * 100,
name,
- c.getID().getType().getId(),
+ c.getID().getBlockType().getId(),
c.getID().getStates());
player.print(str);
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java
index 465e204c3..e1419bd65 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java
@@ -214,7 +214,7 @@ public class ToolCommands {
session.setTool(itemStack.getType(), new LongRangeBuildTool(primary, secondary));
player.print("Long-range building tool bound to " + itemStack.getType().getName() + ".");
- player.print("Left-click set to " + secondary.getType().getName() + "; right-click set to "
- + primary.getType().getName() + ".");
+ player.print("Left-click set to " + secondary.getBlockType().getName() + "; right-click set to "
+ + primary.getBlockType().getName() + ".");
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java
index 1e465df36..1a79e804a 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java
@@ -32,6 +32,7 @@ import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseBlock;
+import com.sk89q.worldedit.blocks.type.BlockTypes;
import com.sk89q.worldedit.command.util.CreatureButcher;
import com.sk89q.worldedit.command.util.EntityRemover;
import com.sk89q.worldedit.entity.Entity;
@@ -65,7 +66,6 @@ import com.sk89q.worldedit.util.formatting.component.CommandUsageBox;
import com.sk89q.worldedit.world.World;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -176,7 +176,7 @@ public class UtilityCommands {
double radius = Math.max(0, args.getDouble(0));
we.checkMaxRadius(radius);
int affected = editSession.fixLiquid(
- session.getPlacementPosition(player), radius, 10, 11);
+ session.getPlacementPosition(player), radius, BlockTypes.FLOWING_LAVA, BlockTypes.LAVA);
player.print(affected + " block(s) have been changed.");
}
@@ -194,7 +194,7 @@ public class UtilityCommands {
double radius = Math.max(0, args.getDouble(0));
we.checkMaxRadius(radius);
int affected = editSession.fixLiquid(
- session.getPlacementPosition(player), radius, 8, 9);
+ session.getPlacementPosition(player), radius, BlockTypes.FLOWING_WATER, BlockTypes.WATER);
player.print(affected + " block(s) have been changed.");
}
@@ -261,7 +261,7 @@ public class UtilityCommands {
int size = Math.max(1, args.getInteger(1, 50));
we.checkMaxRadius(size);
- int affected = editSession.removeNear(session.getPlacementPosition(player), block.getType().getLegacyId(), size);
+ int affected = editSession.removeNear(session.getPlacementPosition(player), block.getBlockType().getLegacyId(), size);
player.print(affected + " block(s) have been removed.");
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/ItemUseParser.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/ItemUseParser.java
index 94e30e1b0..2ce222c5b 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/ItemUseParser.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/argument/ItemUseParser.java
@@ -68,7 +68,7 @@ public class ItemUseParser extends SimpleCommand> {
@Override
public String toString() {
- return "application of the item " + item.getType() + ":" + item.getData();
+ return "application of the item " + item.getType() + ":" + item.getNbtData();
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/AreaPickaxe.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/AreaPickaxe.java
index 7551309fe..fef394793 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/AreaPickaxe.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/AreaPickaxe.java
@@ -50,7 +50,7 @@ public class AreaPickaxe implements BlockTool {
int ox = clicked.getBlockX();
int oy = clicked.getBlockY();
int oz = clicked.getBlockZ();
- BlockType initialType = clicked.getExtent().getBlock(clicked.toVector()).getType();
+ BlockType initialType = clicked.getExtent().getBlock(clicked.toVector()).getBlockType();
if (initialType == BlockTypes.AIR) {
return true;
@@ -68,7 +68,7 @@ public class AreaPickaxe implements BlockTool {
for (int y = oy - range; y <= oy + range; ++y) {
for (int z = oz - range; z <= oz + range; ++z) {
Vector pos = new Vector(x, y, z);
- if (editSession.getBlock(pos).getType() != initialType) {
+ if (editSession.getBlock(pos).getBlockType() != initialType) {
continue;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BlockReplacer.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BlockReplacer.java
index a329638b6..15a503859 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BlockReplacer.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BlockReplacer.java
@@ -67,7 +67,7 @@ public class BlockReplacer implements DoubleActionBlockTool {
public boolean actSecondary(Platform server, LocalConfiguration config, Player player, LocalSession session, com.sk89q.worldedit.util.Location clicked) {
EditSession editSession = session.createEditSession(player);
targetBlock = (editSession).getBlock(clicked.toVector());
- BlockType type = targetBlock.getType().getLegacyType();
+ BlockType type = targetBlock.getBlockType().getLegacyType();
if (type != null) {
player.print("Replacer tool switched to: " + type.getName());
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/FloatingTreeRemover.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/FloatingTreeRemover.java
index 12e71f951..b5ea93730 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/FloatingTreeRemover.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/FloatingTreeRemover.java
@@ -81,7 +81,7 @@ public class FloatingTreeRemover implements BlockTool {
}
for (Vector blockVector : blockSet) {
- final int typeId = editSession.getBlock(blockVector).getType().getLegacyId();
+ final int typeId = editSession.getBlock(blockVector).getBlockType().getLegacyId();
switch (typeId) {
case BlockID.LOG:
case BlockID.LOG2:
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/FloodFillTool.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/FloodFillTool.java
index 25ff56c84..763bc9343 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/FloodFillTool.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/FloodFillTool.java
@@ -54,7 +54,7 @@ public class FloodFillTool implements BlockTool {
public boolean actPrimary(Platform server, LocalConfiguration config, Player player, LocalSession session, Location clicked) {
World world = (World) clicked.getExtent();
- BlockType initialType = world.getLazyBlock(clicked.toVector()).getType();
+ BlockType initialType = world.getLazyBlock(clicked.toVector()).getBlockType();
if (initialType == BlockTypes.AIR) {
return true;
@@ -87,7 +87,7 @@ public class FloodFillTool implements BlockTool {
visited.add(pos);
- if (editSession.getBlock(pos).getType() == initialType) {
+ if (editSession.getBlock(pos).getBlockType() == initialType) {
editSession.setBlock(pos, pattern.apply(pos));
} else {
return;
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java
index d6a64dea8..e121867b3 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java
@@ -55,7 +55,7 @@ public class LongRangeBuildTool extends BrushTool implements DoubleActionTraceTo
if (pos == null) return false;
EditSession eS = session.createEditSession(player);
try {
- if (secondary.getType() == BlockTypes.AIR) {
+ if (secondary.getBlockType() == BlockTypes.AIR) {
eS.setBlock(pos.toVector(), secondary);
} else {
eS.setBlock(pos.getDirection(), secondary);
@@ -74,7 +74,7 @@ public class LongRangeBuildTool extends BrushTool implements DoubleActionTraceTo
if (pos == null) return false;
EditSession eS = session.createEditSession(player);
try {
- if (primary.getType() == BlockTypes.AIR) {
+ if (primary.getBlockType() == BlockTypes.AIR) {
eS.setBlock(pos.toVector(), primary);
} else {
eS.setBlock(pos.getDirection(), primary);
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/QueryTool.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/QueryTool.java
index 9a12f7891..ec0eb9aef 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/QueryTool.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/QueryTool.java
@@ -48,8 +48,8 @@ public class QueryTool implements BlockTool {
BaseBlock block = editSession.getBlock(clicked.toVector());
player.print("\u00A79@" + clicked.toVector() + ": " + "\u00A7e"
- + "#" + block.getType() + "\u00A77" + " ("
- + block.getType().getId() + ") "
+ + "#" + block.getBlockType() + "\u00A77" + " ("
+ + block.getBlockType().getId() + ") "
+ "\u00A7f"
+ "[" + block.getStates().toString() + "]" + " (" + world.getBlockLightLevel(clicked.toVector()) + "/" + world.getBlockLightLevel(clicked.toVector().add(0, 1, 0)) + ")");
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/RecursivePickaxe.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/RecursivePickaxe.java
index eb5ec44dd..ef3bb3f88 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/RecursivePickaxe.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/RecursivePickaxe.java
@@ -53,7 +53,7 @@ public class RecursivePickaxe implements BlockTool {
public boolean actPrimary(Platform server, LocalConfiguration config, Player player, LocalSession session, com.sk89q.worldedit.util.Location clicked) {
World world = (World) clicked.getExtent();
- BlockType initialType = world.getBlock(clicked.toVector()).getType();
+ BlockType initialType = world.getBlock(clicked.toVector()).getBlockType();
if (initialType == BlockTypes.AIR) {
return true;
@@ -89,7 +89,7 @@ public class RecursivePickaxe implements BlockTool {
visited.add(pos);
- if (editSession.getBlock(pos).getType() != initialType) {
+ if (editSession.getBlock(pos).getBlockType() != initialType) {
return;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/SinglePickaxe.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/SinglePickaxe.java
index edafb16c7..8dfe64bb8 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/SinglePickaxe.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/SinglePickaxe.java
@@ -44,7 +44,7 @@ public class SinglePickaxe implements BlockTool {
@Override
public boolean actPrimary(Platform server, LocalConfiguration config, Player player, LocalSession session, com.sk89q.worldedit.util.Location clicked) {
World world = (World) clicked.getExtent();
- final BlockType blockType = world.getLazyBlock(clicked.toVector()).getType();
+ final BlockType blockType = world.getLazyBlock(clicked.toVector()).getBlockType();
if (blockType == BlockTypes.BEDROCK
&& !player.canDestroyBedrock()) {
return true;
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/entity/Player.java b/worldedit-core/src/main/java/com/sk89q/worldedit/entity/Player.java
index c84a3e985..690eb027a 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/entity/Player.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/entity/Player.java
@@ -24,7 +24,6 @@ import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.blocks.BaseItemStack;
-import com.sk89q.worldedit.blocks.type.ItemType;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extent.inventory.BlockBag;
import com.sk89q.worldedit.util.HandSide;
@@ -75,10 +74,9 @@ public interface Player extends Entity, Actor {
/**
* Gives the player an item.
*
- * @param type The item id of the item to be given to the player
- * @param amount How many items in the stack
+ * @param itemStack The item to give
*/
- void giveItem(int type, int amount);
+ void giveItem(BaseItemStack itemStack);
/**
* Get this actor's block bag.
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultBlockParser.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultBlockParser.java
index cb49a0795..6a30a2a3b 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultBlockParser.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultBlockParser.java
@@ -125,7 +125,7 @@ class DefaultBlockParser extends InputParser {
return blockInHand;
}
- blockType = blockInHand.getType();
+ blockType = blockInHand.getBlockType();
blockStates = blockInHand.getStates();
} else if ("offhand".equalsIgnoreCase(typeString)) {
// Get the block type from the item in the user's off hand.
@@ -134,7 +134,7 @@ class DefaultBlockParser extends InputParser {
return blockInHand;
}
- blockType = blockInHand.getType();
+ blockType = blockInHand.getBlockType();
blockStates = blockInHand.getStates();
} else if ("pos1".equalsIgnoreCase(typeString)) {
// Get the block type from the "primary position"
@@ -150,7 +150,7 @@ class DefaultBlockParser extends InputParser {
return blockInHand;
}
- blockType = blockInHand.getType();
+ blockType = blockInHand.getBlockType();
blockStates = blockInHand.getStates();
} else {
// Attempt to lookup a block from ID or name.
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultItemParser.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultItemParser.java
index a4164421f..b146382e9 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultItemParser.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/DefaultItemParser.java
@@ -33,45 +33,11 @@ public class DefaultItemParser extends InputParser {
@Override
public BaseItem parseFromInput(String input, ParserContext context) throws InputParseException {
- String[] tokens = input.split(":", 3);
- BaseItem item;
- short damage = 0;
-
- try {
- int id = Integer.parseInt(tokens[0]);
-
- // Parse metadata
- if (tokens.length == 2) {
- try {
- damage = Short.parseShort(tokens[1]);
- } catch (NumberFormatException ignored) {
- throw new InputParseException("Expected '" + tokens[1] + "' to be a damage value but it's not a number");
- }
- }
-
- item = context.requireWorld().getWorldData().getItemRegistry().createFromId(id);
- } catch (NumberFormatException e) {
- String name = tokens[0];
- if (input.length() >= 2) {
- name += ":" + tokens[1];
- }
-
- // Parse metadata
- if (tokens.length == 3) {
- try {
- damage = Short.parseShort(tokens[2]);
- } catch (NumberFormatException ignored) {
- throw new InputParseException("Expected '" + tokens[2] + "' to be a damage value but it's not a number");
- }
- }
-
- item = context.requireWorld().getWorldData().getItemRegistry().createFromId(name);
- }
+ BaseItem item = context.requireWorld().getWorldData().getItemRegistry().createFromId(input);
if (item == null) {
throw new InputParseException("'" + input + "' did not match any item");
} else {
- item.setDamage(damage);
return item;
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/AbstractPlayerActor.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/AbstractPlayerActor.java
index 322c88e29..8586d0aa4 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/AbstractPlayerActor.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/AbstractPlayerActor.java
@@ -19,7 +19,6 @@
package com.sk89q.worldedit.extension.platform;
-import com.sk89q.worldedit.NotABlockException;
import com.sk89q.worldedit.PlayerDirection;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEditException;
@@ -366,9 +365,6 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
@Override
public BaseBlock getBlockInHand(HandSide handSide) throws WorldEditException {
final ItemType typeId = getItemInHand(handSide).getType();
- if (!getWorld().isValidBlockType(typeId.getLegacyId())) {
- throw new NotABlockException(typeId.getId());
- }
return new BaseBlock(typeId.getLegacyId());
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlayerProxy.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlayerProxy.java
index 1654fba9e..7c5cd3119 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlayerProxy.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/PlayerProxy.java
@@ -65,8 +65,8 @@ class PlayerProxy extends AbstractPlayerActor {
}
@Override
- public void giveItem(int type, int amount) {
- basePlayer.giveItem(type, amount);
+ public void giveItem(BaseItemStack itemStack) {
+ basePlayer.giveItem(itemStack);
}
@Override
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/legacycompat/SignCompatibilityHandler.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/legacycompat/SignCompatibilityHandler.java
index 11c08c183..08605952e 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/legacycompat/SignCompatibilityHandler.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/legacycompat/SignCompatibilityHandler.java
@@ -34,7 +34,7 @@ import java.util.Map;
public class SignCompatibilityHandler implements NBTCompatibilityHandler {
@Override
public boolean isAffectedBlock(BaseBlock block) {
- return block.getType() == BlockTypes.SIGN || block.getType() == BlockTypes.WALL_SIGN;
+ return block.getBlockType() == BlockTypes.SIGN || block.getBlockType() == BlockTypes.WALL_SIGN;
}
@Override
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/inventory/BlockBagExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/inventory/BlockBagExtent.java
index 6063ade33..3742dc7ca 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/inventory/BlockBagExtent.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/inventory/BlockBagExtent.java
@@ -82,8 +82,8 @@ public class BlockBagExtent extends AbstractDelegateExtent {
public boolean setBlock(Vector position, BaseBlock block) throws WorldEditException {
if (blockBag != null) {
BaseBlock lazyBlock = getExtent().getLazyBlock(position);
- int existing = lazyBlock.getType().getLegacyId();
- final int type = block.getType().getLegacyId();
+ int existing = lazyBlock.getBlockType().getLegacyId();
+ final int type = block.getBlockType().getLegacyId();
if (type > 0) {
try {
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/inventory/OutOfSpaceException.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/inventory/OutOfSpaceException.java
index 27eb6d1f4..f9a0900f3 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/inventory/OutOfSpaceException.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/inventory/OutOfSpaceException.java
@@ -19,28 +19,30 @@
package com.sk89q.worldedit.extent.inventory;
+import com.sk89q.worldedit.blocks.type.ItemType;
+
/**
* Thrown when the target inventory of a block bag is full.
*/
public class OutOfSpaceException extends BlockBagException {
- private int id;
+ private ItemType type;
/**
* Construct the object.
*
- * @param id the ID of the block
+ * @param type the type of the block
*/
- public OutOfSpaceException(int id) {
- this.id = id;
+ public OutOfSpaceException(ItemType type) {
+ this.type = type;
}
/**
- * Get the ID of the block
+ * Get the type of the block
*
- * @return the id
+ * @return the type
*/
- public int getID() {
- return id;
+ public ItemType getType() {
+ return this.type;
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/reorder/MultiStageReorder.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/reorder/MultiStageReorder.java
index 7b3b93391..431674249 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/reorder/MultiStageReorder.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/reorder/MultiStageReorder.java
@@ -94,21 +94,21 @@ public class MultiStageReorder extends AbstractDelegateExtent implements Reorder
return super.setBlock(location, block);
}
- if (BlockType.shouldPlaceLast(block.getType().getLegacyId())) {
+ if (BlockType.shouldPlaceLast(block.getBlockType().getLegacyId())) {
// Place torches, etc. last
stage2.put(location.toBlockVector(), block);
- return !(lazyBlock.getType() == block.getType() && lazyBlock.getData() == block.getData());
- } else if (BlockType.shouldPlaceFinal(block.getType().getLegacyId())) {
+ return !(lazyBlock.getBlockType() == block.getBlockType() && lazyBlock.getData() == block.getData());
+ } else if (BlockType.shouldPlaceFinal(block.getBlockType().getLegacyId())) {
// Place signs, reed, etc even later
stage3.put(location.toBlockVector(), block);
- return !(lazyBlock.getType() == block.getType() && lazyBlock.getData() == block.getData());
- } else if (BlockType.shouldPlaceLast(lazyBlock.getType().getLegacyId())) {
+ return !(lazyBlock.getBlockType() == block.getBlockType() && lazyBlock.getData() == block.getData());
+ } else if (BlockType.shouldPlaceLast(lazyBlock.getBlockType().getLegacyId())) {
// Destroy torches, etc. first
super.setBlock(location, new BaseBlock(BlockTypes.AIR));
return super.setBlock(location, block);
} else {
stage1.put(location.toBlockVector(), block);
- return !(lazyBlock.getType() == block.getType() && lazyBlock.getData() == block.getData());
+ return !(lazyBlock.getBlockType() == block.getBlockType() && lazyBlock.getData() == block.getData());
}
}
@@ -150,7 +150,7 @@ public class MultiStageReorder extends AbstractDelegateExtent implements Reorder
final BaseBlock baseBlock = blockTypes.get(current);
- final int type = baseBlock.getType().getLegacyId();
+ final int type = baseBlock.getBlockType().getLegacyId();
final int data = baseBlock.getData();
switch (type) {
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/transform/BlockTransformExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/transform/BlockTransformExtent.java
index abe9a8c7b..9eedc0aa8 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/transform/BlockTransformExtent.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/transform/BlockTransformExtent.java
@@ -138,7 +138,7 @@ public class BlockTransformExtent extends AbstractDelegateExtent {
if (value != null && value.getData() != null) {
DirectionalStateValue newValue = getNewStateValue((DirectionalState) state, transform, value.getDirection());
if (newValue != null) {
- changedBlock.setState(state, newValue);
+ changedBlock.with(state, newValue);
}
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/validation/DataValidatorExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/validation/DataValidatorExtent.java
index 10b09a313..90d126871 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/validation/DataValidatorExtent.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/validation/DataValidatorExtent.java
@@ -51,7 +51,7 @@ public class DataValidatorExtent extends AbstractDelegateExtent {
@Override
public boolean setBlock(Vector location, BaseBlock block) throws WorldEditException {
final int y = location.getBlockY();
- final BlockType type = block.getType();
+ final BlockType type = block.getBlockType();
if (y < 0 || y > world.getMaxY()) {
return false;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/world/BlockQuirkExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/world/BlockQuirkExtent.java
index 8e44947c6..2b3b06281 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/world/BlockQuirkExtent.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/world/BlockQuirkExtent.java
@@ -54,7 +54,7 @@ public class BlockQuirkExtent extends AbstractDelegateExtent {
@Override
public boolean setBlock(Vector position, BaseBlock block) throws WorldEditException {
BaseBlock lazyBlock = getExtent().getLazyBlock(position);
- int existing = lazyBlock.getType().getLegacyId();
+ int existing = lazyBlock.getBlockType().getLegacyId();
if (BlockType.isContainerBlock(existing)) {
world.clearContainerBlockContents(position); // Clear the container block so that it doesn't drop items
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/block/ExtentBlockCopy.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/block/ExtentBlockCopy.java
index 576882ded..9f5b502ec 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/block/ExtentBlockCopy.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/block/ExtentBlockCopy.java
@@ -104,7 +104,7 @@ public class ExtentBlockCopy implements RegionFunction {
builder.putByte("Rot", (byte) MCDirections.toRotation(newDirection));
- return new BaseBlock(state.getType(), state.getStates(), builder.build());
+ return new BaseBlock(state.getState(), builder.build());
}
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/FloraGenerator.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/FloraGenerator.java
index 068c075a6..9447de469 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/FloraGenerator.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/FloraGenerator.java
@@ -106,10 +106,10 @@ public class FloraGenerator implements RegionFunction {
public boolean apply(Vector position) throws WorldEditException {
BaseBlock block = editSession.getBlock(position);
- if (block.getType() == BlockTypes.GRASS) {
+ if (block.getBlockType() == BlockTypes.GRASS) {
editSession.setBlock(position.add(0, 1, 0), temperatePattern.apply(position));
return true;
- } else if (block.getType() == BlockTypes.SAND) {
+ } else if (block.getBlockType() == BlockTypes.SAND) {
editSession.setBlock(position.add(0, 1, 0), desertPattern.apply(position));
return true;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/ForestGenerator.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/ForestGenerator.java
index d0ab03f0a..f5ed90db7 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/ForestGenerator.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/ForestGenerator.java
@@ -51,7 +51,7 @@ public class ForestGenerator implements RegionFunction {
@Override
public boolean apply(Vector position) throws WorldEditException {
BaseBlock block = editSession.getBlock(position);
- BlockType t = block.getType();
+ BlockType t = block.getBlockType();
if (t == BlockTypes.GRASS || t == BlockTypes.DIRT) {
treeGenerator.generate(editSession, position.add(0, 1, 0));
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/GardenPatchGenerator.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/GardenPatchGenerator.java
index ce973c195..65117b76e 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/GardenPatchGenerator.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/generator/GardenPatchGenerator.java
@@ -163,7 +163,7 @@ public class GardenPatchGenerator implements RegionFunction {
position = position.add(0, 1, 0);
}
- if (editSession.getBlock(position.add(0, -1, 0)).getType() != BlockTypes.GRASS) {
+ if (editSession.getBlock(position.add(0, -1, 0)).getBlockType() != BlockTypes.GRASS) {
return false;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/BlockMask.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/BlockMask.java
index 4ffbea7bf..533adc2eb 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/BlockMask.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/BlockMask.java
@@ -95,7 +95,7 @@ public class BlockMask extends AbstractExtentMask {
@Override
public boolean test(Vector vector) {
BaseBlock block = getExtent().getBlock(vector);
- return blocks.contains(block) || blocks.contains(new BaseBlock(block.getType()));
+ return blocks.contains(block) || blocks.contains(new BaseBlock(block.getBlockType()));
}
@Nullable
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/FuzzyBlockMask.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/FuzzyBlockMask.java
index 0b0fc603f..c018ed0a0 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/FuzzyBlockMask.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/FuzzyBlockMask.java
@@ -41,7 +41,7 @@ public class FuzzyBlockMask extends BlockMask {
Extent extent = getExtent();
Collection blocks = getBlocks();
BaseBlock lazyBlock = extent.getLazyBlock(vector);
- BaseBlock compare = new BaseBlock(lazyBlock.getType(), lazyBlock.getStates());
+ BaseBlock compare = new BaseBlock(lazyBlock.getState());
return Blocks.containsFuzzy(blocks, compare);
}
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/SolidBlockMask.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/SolidBlockMask.java
index 5c08cd963..bb755a889 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/SolidBlockMask.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/SolidBlockMask.java
@@ -36,7 +36,7 @@ public class SolidBlockMask extends AbstractExtentMask {
public boolean test(Vector vector) {
Extent extent = getExtent();
BaseBlock lazyBlock = extent.getLazyBlock(vector);
- return !BlockType.canPassThrough(lazyBlock.getType().getLegacyId(), lazyBlock.getData());
+ return !BlockType.canPassThrough(lazyBlock.getBlockType().getLegacyId(), lazyBlock.getData());
}
@Nullable
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/math/convolution/HeightMap.java b/worldedit-core/src/main/java/com/sk89q/worldedit/math/convolution/HeightMap.java
index 45c85a99a..693cefe7f 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/math/convolution/HeightMap.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/math/convolution/HeightMap.java
@@ -148,8 +148,8 @@ public class HeightMap {
BaseBlock existing = session.getBlock(new Vector(xr, curHeight, zr));
// Skip water/lava
- if (existing.getType() != BlockTypes.WATER && existing.getType() != BlockTypes.FLOWING_WATER
- && existing.getType() != BlockTypes.LAVA && existing.getType() != BlockTypes.FLOWING_LAVA) {
+ if (existing.getBlockType() != BlockTypes.WATER && existing.getBlockType() != BlockTypes.FLOWING_WATER
+ && existing.getBlockType() != BlockTypes.LAVA && existing.getBlockType() != BlockTypes.FLOWING_LAVA) {
session.setBlock(new Vector(xr, newHeight, zr), existing);
++blocksChanged;
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/shape/ArbitraryShape.java b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/shape/ArbitraryShape.java
index e9da33d08..b2a6023e2 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/shape/ArbitraryShape.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/shape/ArbitraryShape.java
@@ -99,7 +99,7 @@ public abstract class ArbitraryShape {
return null;
}
- short newCacheEntry = (short) (material.getType().getLegacyId() | ((material.getData() + 1) << 8));
+ short newCacheEntry = (short) (material.getBlockType().getLegacyId() | ((material.getData() + 1) << 8));
if (newCacheEntry == 0) {
// type and data 0
newCacheEntry = -2;
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/TargetBlock.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/TargetBlock.java
index eb95be7eb..f25d9e4d9 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/TargetBlock.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/TargetBlock.java
@@ -103,7 +103,7 @@ public class TargetBlock {
boolean searchForLastBlock = true;
Location lastBlock = null;
while (getNextBlock() != null) {
- if (world.getLazyBlock(getCurrentBlock().toVector()).getType() == BlockTypes.AIR) {
+ if (world.getLazyBlock(getCurrentBlock().toVector()).getBlockType() == BlockTypes.AIR) {
if (searchForLastBlock) {
lastBlock = getCurrentBlock();
if (lastBlock.getBlockY() <= 0 || lastBlock.getBlockY() >= world.getMaxY()) {
@@ -125,7 +125,7 @@ public class TargetBlock {
* @return Block
*/
public Location getTargetBlock() {
- while (getNextBlock() != null && world.getLazyBlock(getCurrentBlock().toVector()).getType() == BlockTypes.AIR) ;
+ while (getNextBlock() != null && world.getLazyBlock(getCurrentBlock().toVector()).getBlockType() == BlockTypes.AIR) ;
return getCurrentBlock();
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java
index 44ca7d2e8..96fe3601e 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java
@@ -20,8 +20,6 @@
package com.sk89q.worldedit.world;
import com.sk89q.worldedit.BlockVector2D;
-import com.sk89q.worldedit.EditSession;
-import com.sk89q.worldedit.MaxChangedBlocksException;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseBlock;
@@ -34,7 +32,6 @@ import com.sk89q.worldedit.function.mask.BlockMask;
import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.function.operation.Operation;
import com.sk89q.worldedit.util.Direction;
-import com.sk89q.worldedit.util.TreeGenerator.TreeType;
import java.util.PriorityQueue;
@@ -53,32 +50,6 @@ public abstract class AbstractWorld implements World {
return false;
}
- @Override
- public final boolean setBlockType(Vector position, int type) {
- try {
- return setBlock(position, new BaseBlock(type));
- } catch (WorldEditException ignored) {
- return false;
- }
- }
-
- @Override
- public final void setBlockData(Vector position, int data) {
- try {
- setBlock(position, new BaseBlock(getLazyBlock(position).getType().getLegacyId(), data));
- } catch (WorldEditException ignored) {
- }
- }
-
- @Override
- public final boolean setTypeIdAndData(Vector position, int type, int data) {
- try {
- return setBlock(position, new BaseBlock(type, data));
- } catch (WorldEditException ignored) {
- return false;
- }
- }
-
@Override
public final boolean setBlock(Vector pt, BaseBlock block) throws WorldEditException {
return setBlock(pt, block, true);
@@ -89,17 +60,6 @@ public abstract class AbstractWorld implements World {
return getMaximumPoint().getBlockY();
}
- @Override
- public boolean isValidBlockType(int type) {
- return BlockType.fromID(type) != null;
- }
-
- @Override
- public boolean usesBlockData(int type) {
- // We future proof here by assuming all unknown blocks use data
- return BlockType.usesData(type) || BlockType.fromID(type) == null;
- }
-
@Override
public Mask createLiquidMask() {
return new BlockMask(this,
@@ -124,7 +84,7 @@ public abstract class AbstractWorld implements World {
if (stack != null) {
final int amount = stack.getAmount();
if (amount > 1) {
- dropItem(pt, new BaseItemStack(stack.getType(), 1, stack.getData()), amount);
+ dropItem(pt, new BaseItemStack(stack.getType(), stack.getNbtData(), 1), amount);
} else {
dropItem(pt, stack, amount);
}
@@ -137,31 +97,6 @@ public abstract class AbstractWorld implements World {
}
}
- @Override
- public boolean generateTree(EditSession editSession, Vector pt) throws MaxChangedBlocksException {
- return generateTree(TreeType.TREE, editSession, pt);
- }
-
- @Override
- public boolean generateBigTree(EditSession editSession, Vector pt) throws MaxChangedBlocksException {
- return generateTree(TreeType.BIG_TREE, editSession, pt);
- }
-
- @Override
- public boolean generateBirchTree(EditSession editSession, Vector pt) throws MaxChangedBlocksException {
- return generateTree(TreeType.BIRCH, editSession, pt);
- }
-
- @Override
- public boolean generateRedwoodTree(EditSession editSession, Vector pt) throws MaxChangedBlocksException {
- return generateTree(TreeType.REDWOOD, editSession, pt);
- }
-
- @Override
- public boolean generateTallRedwoodTree(EditSession editSession, Vector pt) throws MaxChangedBlocksException {
- return generateTree(TreeType.TALL_REDWOOD, editSession, pt);
- }
-
@Override
public void checkLoadedChunk(Vector pt) {
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java
index 3e2b2e0ea..3cebd9817 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java
@@ -34,7 +34,6 @@ import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.util.Direction;
import com.sk89q.worldedit.util.TreeGenerator;
-import com.sk89q.worldedit.util.TreeGenerator.TreeType;
import com.sk89q.worldedit.world.registry.WorldData;
/**
@@ -56,24 +55,6 @@ public interface World extends Extent {
*/
int getMaxY();
- /**
- * Checks whether the given block ID is a valid block ID.
- *
- * @param id the block ID
- * @return true if the block ID is a valid one
- */
- @Deprecated
- boolean isValidBlockType(int id);
-
- /**
- * Checks whether the given block ID uses data values for differentiating
- * types of blocks.
- *
- * @param id the block ID
- * @return true if the block uses data values
- */
- boolean usesBlockData(int id);
-
/**
* Create a mask that matches all liquids.
*
@@ -113,24 +94,6 @@ public interface World extends Extent {
*/
boolean setBlock(Vector position, BaseBlock block, boolean notifyAndLight) throws WorldEditException;
- /**
- * @deprecated Use {@link #setBlock(Vector, BaseBlock)}
- */
- @Deprecated
- boolean setBlockType(Vector position, int type);
-
- /**
- * @deprecated Use {@link #setBlock(Vector, BaseBlock)}
- */
- @Deprecated
- void setBlockData(Vector position, int data);
-
- /**
- * @deprecated Use {@link #setBlock(Vector, BaseBlock)}
- */
- @Deprecated
- boolean setTypeIdAndData(Vector position, int type, int data);
-
/**
* Get the light level at the given block.
*
@@ -192,36 +155,6 @@ public interface World extends Extent {
*/
boolean generateTree(TreeGenerator.TreeType type, EditSession editSession, Vector position) throws MaxChangedBlocksException;
- /**
- * @deprecated Use {@link #generateTree(TreeType, EditSession, Vector)}
- */
- @Deprecated
- boolean generateTree(EditSession editSession, Vector position) throws MaxChangedBlocksException;
-
- /**
- * @deprecated Use {@link #generateTree(TreeType, EditSession, Vector)}
- */
- @Deprecated
- boolean generateBigTree(EditSession editSession, Vector position) throws MaxChangedBlocksException;
-
- /**
- * @deprecated Use {@link #generateTree(TreeType, EditSession, Vector)}
- */
- @Deprecated
- boolean generateBirchTree(EditSession editSession, Vector position) throws MaxChangedBlocksException;
-
- /**
- * @deprecated Use {@link #generateTree(TreeType, EditSession, Vector)}
- */
- @Deprecated
- boolean generateRedwoodTree(EditSession editSession, Vector position) throws MaxChangedBlocksException;
-
- /**
- * @deprecated Use {@link #generateTree(TreeType, EditSession, Vector)}
- */
- @Deprecated
- boolean generateTallRedwoodTree(EditSession editSession, Vector position) throws MaxChangedBlocksException;
-
/**
* Load the chunk at the given position if it isn't loaded.
*
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/AnvilChunk.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/AnvilChunk.java
index 87ec424aa..36046193f 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/AnvilChunk.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/AnvilChunk.java
@@ -118,8 +118,7 @@ public class AnvilChunk implements Chunk {
}
}
- @Override
- public int getBlockID(Vector position) throws DataException {
+ private int getBlockID(Vector position) throws DataException {
int x = position.getBlockX() - rootX * 16;
int y = position.getBlockY();
int z = position.getBlockZ() - rootZ * 16;
@@ -130,9 +129,6 @@ public class AnvilChunk implements Chunk {
}
int yindex = y & 0x0F;
- if (yindex < 0 || yindex >= 16) {
- throw new DataException("Chunk does not contain position " + position);
- }
int index = x + (z * 16 + (yindex * 16 * 16));
@@ -155,8 +151,7 @@ public class AnvilChunk implements Chunk {
}
}
- @Override
- public int getBlockData(Vector position) throws DataException {
+ private int getBlockData(Vector position) throws DataException {
int x = position.getBlockX() - rootX * 16;
int y = position.getBlockY();
int z = position.getBlockZ() - rootZ * 16;
@@ -167,10 +162,6 @@ public class AnvilChunk implements Chunk {
if (section < 0 || section >= blocks.length) {
throw new DataException("Chunk does not contain position " + position);
}
-
- if (yIndex < 0 || yIndex >= 16) {
- throw new DataException("Chunk does not contain position " + position);
- }
int index = x + (z * 16 + (yIndex * 16 * 16));
boolean shift = index % 2 == 0;
@@ -200,8 +191,7 @@ public class AnvilChunk implements Chunk {
for (Tag tag : tags) {
if (!(tag instanceof CompoundTag)) {
- throw new InvalidFormatException(
- "CompoundTag expected in TileEntities");
+ throw new InvalidFormatException("CompoundTag expected in TileEntities");
}
CompoundTag t = (CompoundTag) tag;
@@ -268,21 +258,7 @@ public class AnvilChunk implements Chunk {
int data = getBlockData(position);
BaseBlock block;
- /*if (id == BlockID.WALL_SIGN || id == BlockID.SIGN_POST) {
- block = new SignBlock(id, data);
- } else if (id == BlockID.CHEST) {
- block = new ChestBlock(data);
- } else if (id == BlockID.FURNACE || id == BlockID.BURNING_FURNACE) {
- block = new FurnaceBlock(id, data);
- } else if (id == BlockID.DISPENSER) {
- block = new DispenserBlock(data);
- } else if (id == BlockID.MOB_SPAWNER) {
- block = new MobSpawnerBlock(data);
- } else if (id == BlockID.NOTE_BLOCK) {
- block = new NoteBlock(data);
- } else {*/
- block = new BaseBlock(id, data);
- //}
+ block = new BaseBlock(id, data);
CompoundTag tileEntity = getBlockTileEntity(position);
if (tileEntity != null) {
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/Chunk.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/Chunk.java
index 03eff63be..7cfca5005 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/Chunk.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/Chunk.java
@@ -27,25 +27,6 @@ import com.sk89q.worldedit.world.DataException;
* A 16 by 16 block chunk.
*/
public interface Chunk {
-
- /**
- * Get the block ID of a block.
- *
- * @param position the position of the block
- * @return the type ID of the block
- * @throws DataException thrown on data error
- */
- public int getBlockID(Vector position) throws DataException;
-
- /**
- * Get the block data of a block.
- *
- * @param position the position of the block
- * @return the data value of the block
- * @throws DataException thrown on data error
- */
- public int getBlockData(Vector position) throws DataException;
-
/**
* Get a block;
@@ -54,6 +35,6 @@ public interface Chunk {
* @return block the block
* @throws DataException thrown on data error
*/
- public BaseBlock getBlock(Vector position) throws DataException;
+ BaseBlock getBlock(Vector position) throws DataException;
}
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/OldChunk.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/OldChunk.java
index b2e35d3bc..188341e35 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/OldChunk.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/chunk/OldChunk.java
@@ -28,6 +28,7 @@ import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseBlock;
+import com.sk89q.worldedit.blocks.type.BlockTypes;
import com.sk89q.worldedit.world.DataException;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.storage.InvalidFormatException;
@@ -76,43 +77,6 @@ public class OldChunk implements Chunk {
}
}
- @Override
- public int getBlockID(Vector position) throws DataException {
- if(position.getBlockY() >= 128) return 0;
-
- int x = position.getBlockX() - rootX * 16;
- int y = position.getBlockY();
- int z = position.getBlockZ() - rootZ * 16;
- int index = y + (z * 128 + (x * 128 * 16));
- try {
- return blocks[index];
- } catch (IndexOutOfBoundsException e) {
- throw new DataException("Chunk does not contain position " + position);
- }
- }
-
- @Override
- public int getBlockData(Vector position) throws DataException {
- if(position.getBlockY() >= 128) return 0;
-
- int x = position.getBlockX() - rootX * 16;
- int y = position.getBlockY();
- int z = position.getBlockZ() - rootZ * 16;
- int index = y + (z * 128 + (x * 128 * 16));
- boolean shift = index % 2 == 0;
- index /= 2;
-
- try {
- if (!shift) {
- return (data[index] & 0xF0) >> 4;
- } else {
- return data[index] & 0xF;
- }
- } catch (IndexOutOfBoundsException e) {
- throw new DataException("Chunk does not contain position " + position);
- }
- }
-
/**
* Used to load the tile entities.
*
@@ -188,25 +152,33 @@ public class OldChunk implements Chunk {
@Override
public BaseBlock getBlock(Vector position) throws DataException {
- int id = getBlockID(position);
- int data = getBlockData(position);
- BaseBlock block;
+ if(position.getBlockY() >= 128) new BaseBlock(BlockTypes.AIR);
+ int id, dataVal;
- /*if (id == BlockID.WALL_SIGN || id == BlockID.SIGN_POST) {
- block = new SignBlock(id, data);
- } else if (id == BlockID.CHEST) {
- block = new ChestBlock(data);
- } else if (id == BlockID.FURNACE || id == BlockID.BURNING_FURNACE) {
- block = new FurnaceBlock(id, data);
- } else if (id == BlockID.DISPENSER) {
- block = new DispenserBlock(data);
- } else if (id == BlockID.MOB_SPAWNER) {
- block = new MobSpawnerBlock(data);
- } else if (id == BlockID.NOTE_BLOCK) {
- block = new NoteBlock(data);
- } else {*/
- block = new BaseBlock(id, data);
- //}
+ int x = position.getBlockX() - rootX * 16;
+ int y = position.getBlockY();
+ int z = position.getBlockZ() - rootZ * 16;
+ int index = y + (z * 128 + (x * 128 * 16));
+ try {
+ id = blocks[index];
+ } catch (IndexOutOfBoundsException e) {
+ throw new DataException("Chunk does not contain position " + position);
+ }
+
+ boolean shift = index % 2 == 0;
+ index /= 2;
+
+ try {
+ if (!shift) {
+ dataVal = (data[index] & 0xF0) >> 4;
+ } else {
+ dataVal = data[index] & 0xF;
+ }
+ } catch (IndexOutOfBoundsException e) {
+ throw new DataException("Chunk does not contain position " + position);
+ }
+
+ BaseBlock block = new BaseBlock(id, dataVal);
CompoundTag tileEntity = getBlockTileEntity(position);
if (tileEntity != null) {
diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockRegistry.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockRegistry.java
index 5979a164b..864b36daa 100644
--- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockRegistry.java
+++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockRegistry.java
@@ -53,13 +53,13 @@ public class BundledBlockRegistry implements BlockRegistry {
@Nullable
@Override
public BlockMaterial getMaterial(BaseBlock block) {
- return BundledBlockData.getInstance().getMaterialById(block.getType().getId());
+ return BundledBlockData.getInstance().getMaterialById(block.getBlockType().getId());
}
@Nullable
@Override
public Map getStates(BaseBlock block) {
- return BundledBlockData.getInstance().getStatesById(block.getType().getId());
+ return BundledBlockData.getInstance().getStatesById(block.getBlockType().getId());
}
}
diff --git a/worldedit-core/src/test/java/com/sk89q/worldedit/extent/transform/BlockTransformExtentTest.java b/worldedit-core/src/test/java/com/sk89q/worldedit/extent/transform/BlockTransformExtentTest.java
index 83000503c..70e795a2f 100644
--- a/worldedit-core/src/test/java/com/sk89q/worldedit/extent/transform/BlockTransformExtentTest.java
+++ b/worldedit-core/src/test/java/com/sk89q/worldedit/extent/transform/BlockTransformExtentTest.java
@@ -72,7 +72,7 @@ public class BlockTransformExtentTest {
BaseBlock orig = new BaseBlock(type);
for (int i = 1; i < 4; i++) {
BaseBlock rotated = BlockTransformExtent.transform(new BaseBlock(orig), ROTATE_90, blockRegistry);
- BaseBlock reference = new BaseBlock(orig.getType().getLegacyId(), BlockData.rotate90(orig.getType().getLegacyId(), orig.getData()));
+ BaseBlock reference = new BaseBlock(orig.getBlockType().getLegacyId(), BlockData.rotate90(orig.getBlockType().getLegacyId(), orig.getData()));
assertThat(type + "#" + type.getId() + " rotated " + (90 * i) + " degrees did not match BlockData.rotate90()'s expected result", rotated,
equalTo(reference));
orig = rotated;
@@ -81,7 +81,7 @@ public class BlockTransformExtentTest {
orig = new BaseBlock(type);
for (int i = 0; i < 4; i++) {
BaseBlock rotated = BlockTransformExtent.transform(new BaseBlock(orig), ROTATE_NEG_90, blockRegistry);
- BaseBlock reference = new BaseBlock(orig.getType().getLegacyId(), BlockData.rotate90Reverse(orig.getType().getLegacyId(), orig.getData()));
+ BaseBlock reference = new BaseBlock(orig.getBlockType().getLegacyId(), BlockData.rotate90Reverse(orig.getBlockType().getLegacyId(), orig.getData()));
assertThat(type + "#" + type.getId() + " rotated " + (-90 * i) + " degrees did not match BlockData.rotate90Reverse()'s expected result", rotated, equalTo(reference));
orig = rotated;
}
diff --git a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeItemRegistry.java b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeItemRegistry.java
index 83222c029..713297e02 100644
--- a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeItemRegistry.java
+++ b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeItemRegistry.java
@@ -19,6 +19,7 @@
package com.sk89q.worldedit.forge;
import com.sk89q.worldedit.blocks.BaseItem;
+import com.sk89q.worldedit.blocks.type.ItemTypes;
import com.sk89q.worldedit.world.registry.ItemRegistry;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
@@ -31,7 +32,7 @@ public class ForgeItemRegistry implements ItemRegistry {
public BaseItem createFromId(String id) {
Item match = Item.REGISTRY.getObject(new ResourceLocation(id));
if (match != null) {
- return new BaseItem(Item.REGISTRY.getIDForObject(match), (short) 0);
+ return new BaseItem(ItemTypes.getItemType(id));
} else {
return null;
}
@@ -41,7 +42,7 @@ public class ForgeItemRegistry implements ItemRegistry {
@Override
public BaseItem createFromId(int id) {
if (Item.REGISTRY.getObjectById(id) != null) {
- return new BaseItem(id, (short) 0);
+ return new BaseItem(id);
} else {
return null;
}
diff --git a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgePlayer.java b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgePlayer.java
index 96fc95fbf..9fa198403 100644
--- a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgePlayer.java
+++ b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgePlayer.java
@@ -91,8 +91,9 @@ public class ForgePlayer extends AbstractPlayerActor {
}
@Override
- public void giveItem(int type, int amt) {
- this.player.inventory.addItemStackToInventory(new ItemStack(Item.getItemById(type), amt, 0));
+ public void giveItem(BaseItemStack itemStack) {
+ this.player.inventory.addItemStackToInventory(
+ new ItemStack(Item.getByNameOrId(itemStack.getType().getId()), itemStack.getAmount(), 0));
}
@Override
diff --git a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java
index d2ceafd44..5984a330a 100644
--- a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java
+++ b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java
@@ -238,7 +238,12 @@ public class ForgeWorld extends AbstractWorld {
@Override
public boolean useItem(Vector position, BaseItem item, Direction face) {
Item nativeItem = Item.getByNameOrId(item.getType().getId());
- ItemStack stack = new ItemStack(nativeItem, 1, item.getData());
+ ItemStack stack = null;
+ if (item.getNbtData() == null) {
+ stack = new ItemStack(nativeItem, 1, 0);
+ } else {
+ stack = new ItemStack(nativeItem, 1, 0, NBTConverter.toNative(item.getNbtData()));
+ }
World world = getWorld();
EnumActionResult used = stack.onItemUse(new WorldEditFakePlayer((WorldServer) world), world, ForgeAdapter.toBlockPos(position),
EnumHand.MAIN_HAND, ForgeAdapter.adapt(face), 0, 0, 0);
@@ -333,7 +338,7 @@ public class ForgeWorld extends AbstractWorld {
@Override
public boolean generateTree(TreeType type, EditSession editSession, Vector position) throws MaxChangedBlocksException {
WorldGenerator generator = createWorldGenerator(type);
- return generator != null ? generator.generate(getWorld(), random, ForgeAdapter.toBlockPos(position)) : false;
+ return generator != null && generator.generate(getWorld(), random, ForgeAdapter.toBlockPos(position));
}
@Override
@@ -341,12 +346,6 @@ public class ForgeWorld extends AbstractWorld {
return ForgeWorldData.getInstance();
}
- @Override
- public boolean isValidBlockType(int id) {
- Block block = Block.getBlockById(id);
- return Block.getIdFromBlock(block) == id;
- }
-
@Override
public BaseBlock getBlock(Vector position) {
World world = getWorld();
diff --git a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorldEdit.java b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorldEdit.java
index 657032c5b..3b1efe7eb 100644
--- a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorldEdit.java
+++ b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorldEdit.java
@@ -19,9 +19,8 @@
package com.sk89q.worldedit.forge;
-import com.sk89q.worldedit.util.Location;
-import net.minecraft.block.Block;
-import org.apache.logging.log4j.Logger;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static net.minecraft.block.Block.REGISTRY;
import com.google.common.base.Joiner;
import com.sk89q.worldedit.LocalSession;
@@ -30,12 +29,12 @@ import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.event.platform.PlatformReadyEvent;
import com.sk89q.worldedit.extension.platform.Platform;
import com.sk89q.worldedit.forge.net.LeftClickAirEventMessage;
-
-import java.io.File;
-import java.util.Map;
+import com.sk89q.worldedit.util.Location;
+import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.CommandEvent;
@@ -54,9 +53,9 @@ import net.minecraftforge.fml.common.event.FMLServerStartedEvent;
import net.minecraftforge.fml.common.event.FMLServerStoppingEvent;
import net.minecraftforge.fml.common.eventhandler.Event.Result;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import org.apache.logging.log4j.Logger;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static net.minecraft.block.Block.REGISTRY;
+import java.io.File;
/**
* The Forge implementation of WorldEdit.
@@ -214,12 +213,11 @@ public class ForgeWorldEdit {
}
public static ItemStack toForgeItemStack(BaseItemStack item) {
- ItemStack ret = new ItemStack(Item.getByNameOrId(item.getType().getId()), item.getAmount(), item.getData());
- for (Map.Entry entry : item.getEnchantments().entrySet()) {
- ret.addEnchantment(net.minecraft.enchantment.Enchantment.getEnchantmentByID(entry.getKey()), entry.getValue());
+ NBTTagCompound forgeCompound = null;
+ if (item.getNbtData() != null) {
+ forgeCompound = NBTConverter.toNative(item.getNbtData());
}
-
- return ret;
+ return new ItemStack(Item.getByNameOrId(item.getType().getId()), item.getAmount(), 0, forgeCompound);
}
/**
diff --git a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongePlayer.java b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongePlayer.java
index 07e15825d..d471f09b6 100644
--- a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongePlayer.java
+++ b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongePlayer.java
@@ -31,8 +31,10 @@ import com.sk89q.worldedit.internal.cui.CUIEvent;
import com.sk89q.worldedit.session.SessionKey;
import com.sk89q.worldedit.util.HandSide;
import com.sk89q.worldedit.util.Location;
+import org.spongepowered.api.Sponge;
import org.spongepowered.api.data.type.HandTypes;
import org.spongepowered.api.entity.living.player.Player;
+import org.spongepowered.api.item.ItemType;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.format.TextColor;
@@ -91,8 +93,11 @@ public class SpongePlayer extends AbstractPlayerActor {
}
@Override
- public void giveItem(int type, int amt) {
- this.player.getInventory().offer(ItemStack.of(SpongeWorldEdit.inst().getAdapter().resolveItem(type), amt));
+ public void giveItem(BaseItemStack itemStack) {
+ this.player.getInventory().offer(
+ ItemStack.of(Sponge.getGame().getRegistry().getType(ItemType.class, itemStack.getType().getId()).get(),
+ itemStack.getAmount())
+ );
}
@Override
diff --git a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorld.java b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorld.java
index 3ad40ae59..4586b0bb6 100644
--- a/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorld.java
+++ b/worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeWorld.java
@@ -202,11 +202,6 @@ public abstract class SpongeWorld extends AbstractWorld {
return SpongeWorldData.getInstance();
}
- @Override
- public boolean isValidBlockType(int id) {
- return id == 0 || SpongeWorldEdit.inst().getAdapter().resolveBlock(id) != null;
- }
-
@Override
public int hashCode() {
return getWorld().hashCode();
@@ -220,7 +215,7 @@ public abstract class SpongeWorld extends AbstractWorld {
SpongeWorld other = ((SpongeWorld) o);
World otherWorld = other.worldRef.get();
World thisWorld = worldRef.get();
- return otherWorld != null && thisWorld != null && otherWorld.equals(thisWorld);
+ return otherWorld != null && otherWorld.equals(thisWorld);
} else {
return o instanceof com.sk89q.worldedit.world.World
&& ((com.sk89q.worldedit.world.World) o).getName().equals(getName());