Expose a way of switching between ItemType and BlockType for ItemBlocks.

This commit is contained in:
Matthew Miller 2018-07-01 23:20:07 +10:00
parent b06937d1c8
commit 93b225ca3c
17 changed files with 110 additions and 1243 deletions

View File

@ -69,7 +69,7 @@ public class BukkitPlayer extends AbstractPlayerActor {
ItemStack itemStack = handSide == HandSide.MAIN_HAND
? player.getInventory().getItemInMainHand()
: player.getInventory().getItemInOffHand();
return BukkitUtil.toBlock(getWorld(), itemStack);
return BukkitUtil.toBlock(itemStack);
}
@Override

View File

@ -24,19 +24,17 @@ 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.BlockType;
import com.sk89q.worldedit.blocks.ItemID;
import com.sk89q.worldedit.blocks.type.BlockTypes;
import com.sk89q.worldedit.blocks.type.ItemType;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.util.Location;
import org.bukkit.DyeColor;
import com.sk89q.worldedit.world.registry.LegacyMapper;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.Dye;
import java.util.List;
@ -123,29 +121,17 @@ public final class BukkitUtil {
return ((BukkitWorld) world).getWorld();
}
public static BaseBlock toBlock(com.sk89q.worldedit.world.World world, ItemStack itemStack) throws WorldEditException {
final int typeId = itemStack.getTypeId();
switch (typeId) {
case ItemID.INK_SACK:
final Dye materialData = (Dye) itemStack.getData();
if (materialData.getColor() == DyeColor.BROWN) {
return new BaseBlock(BlockTypes.COCOA);
}
break;
default:
final BaseBlock baseBlock = BlockType.getBlockForItem(typeId, itemStack.getDurability());
if (baseBlock != null) {
return baseBlock;
}
break;
public static BaseBlock toBlock(ItemStack itemStack) throws WorldEditException {
ItemType itemType = LegacyMapper.getInstance().getItemFromLegacy(itemStack.getTypeId(), itemStack.getData().getData());
if (itemType.hasBlockType()) {
return new BaseBlock(itemType.getBlockType().getDefaultState());
} else {
return new BaseBlock(BlockTypes.AIR.getDefaultState());
}
return new BaseBlock(typeId, -1);
}
public static BaseItemStack toBaseItemStack(ItemStack itemStack) {
return new BaseItemStack(itemStack.getTypeId(), itemStack.getDurability());
ItemType itemType = LegacyMapper.getInstance().getItemFromLegacy(itemStack.getTypeId(), itemStack.getData().getData());
return new BaseItemStack(itemType, itemStack.getAmount());
}
}

View File

@ -443,7 +443,7 @@ public class EditSession implements Extent {
Vector pt = new Vector(x, y, z);
BlockState block = getBlock(pt);
int[] datas = LegacyMapper.getInstance().getLegacyFromBlock(block);
if (naturalOnly ? BlockType.isNaturalTerrainBlock(datas[0], datas[1]) : !BlockType.canPassThrough(datas[0], datas[1])) {
if (naturalOnly ? BlockType.isNaturalTerrainBlock(datas[0], datas[1]) : block.getBlockType().getMaterial().isMovementBlocker()) {
return y;
}
}
@ -1583,7 +1583,6 @@ public class EditSession implements Extent {
for (int y = world.getMaxY(); y >= 1; --y) {
final Vector pt = new Vector(x, y, z);
final BlockState block = getBlock(pt);
final com.sk89q.worldedit.blocks.type.BlockType id = block.getBlockType();
if (block.getBlockType() == BlockTypes.DIRT ||
(!onlyNormalDirt && block.getBlockType() == BlockTypes.COARSE_DIRT)) {
@ -1593,7 +1592,7 @@ public class EditSession implements Extent {
break;
} else if (block.getBlockType() == BlockTypes.WATER || block.getBlockType() == BlockTypes.LAVA) {
break;
} else if (!BlockType.canPassThrough(id.getLegacyId())) {
} else if (block.getBlockType().getMaterial().isMovementBlocker()) {
break;
}
}
@ -2116,8 +2115,7 @@ public class EditSession implements Extent {
while (!queue.isEmpty()) {
final BlockVector current = queue.removeFirst();
final BlockState block = getBlock(current);
int[] datas = LegacyMapper.getInstance().getLegacyFromBlock(block);
if (!BlockType.canPassThrough(datas[0], datas[1])) {
if (block.getBlockType().getMaterial().isMovementBlocker()) {
continue;
}

View File

@ -555,7 +555,7 @@ public class LocalSession {
* @throws InvalidToolBindException if the item can't be bound to that item
*/
public void setTool(ItemType item, @Nullable Tool tool) throws InvalidToolBindException {
if (false /*TODO item > 0 && item < 255*/) {
if (item.hasBlockType()) {
throw new InvalidToolBindException(item, "Blocks can't be used");
} else if (item == ItemTypes.getItemType(config.wandItem)) {
throw new InvalidToolBindException(item, "Already used for the wand");

View File

@ -25,7 +25,7 @@ import static com.sk89q.worldedit.event.platform.Interaction.OPEN;
import com.sk89q.worldedit.CuboidClipboard.FlipDirection;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.blocks.BaseItem;
import com.sk89q.worldedit.blocks.BlockType;
import com.sk89q.worldedit.blocks.type.BlockType;
import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.event.platform.BlockInteractEvent;
import com.sk89q.worldedit.event.platform.InputType;
@ -488,7 +488,7 @@ public class WorldEdit {
int i = 0;
for (Integer id : missingBlocks.keySet()) {
BlockType type = BlockType.fromID(id);
BlockType type = LegacyMapper.getInstance().getBlockFromLegacy(id).getBlockType();
str.append(type != null
? type.getName() + " (" + id + ")"

View File

@ -127,7 +127,6 @@ public final class BlockID {
public static final int REDSTONE_REPEATER_ON = 94; // POWERED_REPEATER
@Deprecated
public static final int LOCKED_CHEST = 95;
public static final int STAINED_GLASS = 95;
public static final int TRAP_DOOR = 96; // TRAPDOOR
public static final int SILVERFISH_BLOCK = 97; // MONSTER_EGG
public static final int STONE_BRICK = 98; // STONEBRICK
@ -154,7 +153,6 @@ public final class BlockID {
public static final int END_PORTAL = 119;
public static final int END_PORTAL_FRAME = 120;
public static final int END_STONE = 121;
public static final int DRAGON_EGG = 122;
public static final int REDSTONE_LAMP_OFF = 123; // REDSTONE_LAMP
public static final int REDSTONE_LAMP_ON = 124; // LIT_REDSTONE_LAMP
public static final int DOUBLE_WOODEN_STEP = 125; // DOUBLE_WOODEN_SLAB
@ -170,7 +168,6 @@ public final class BlockID {
public static final int BIRCH_WOOD_STAIRS = 135; // BRUCE_STAIRS
public static final int JUNGLE_WOOD_STAIRS = 136; // JUNGLE_STAIRS
public static final int COMMAND_BLOCK = 137;
public static final int BEACON = 138;
public static final int COBBLESTONE_WALL = 139;
public static final int FLOWER_POT = 140;
public static final int CARROTS = 141;
@ -197,11 +194,8 @@ public final class BlockID {
public static final int LOG2 = 162;
public static final int ACACIA_STAIRS = 163;
public static final int DARK_OAK_STAIRS = 164;
public static final int SLIME = 165;
public static final int BARRIER = 166;
public static final int IRON_TRAP_DOOR = 167;
public static final int PRISMARINE = 168;
public static final int SEA_LANTERN = 169;
public static final int HAY_BLOCK = 170;
public static final int CARPET = 171;
public static final int HARDENED_CLAY = 172;
@ -211,9 +205,7 @@ public final class BlockID {
public static final int STANDING_BANNER = 176;
public static final int WALL_BANNER = 177;
public static final int DAYLIGHT_SENSOR_INVERTED = 178;
public static final int RED_SANDSTONE = 179;
public static final int RED_SANDSTONE_STAIRS = 180;
public static final int DOUBLE_STEP2 = 181;
public static final int STEP2 = 182;
public static final int SPRUCE_FENCE_GATE = 183;
public static final int BIRCH_FENCE_GATE = 184;
@ -233,59 +225,9 @@ public final class BlockID {
public static final int END_ROD = 198;
public static final int CHORUS_PLANT = 199;
public static final int CHORUS_FLOWER = 200;
public static final int PURPUR_BLOCK = 201;
public static final int PURPUR_PILLAR = 202;
public static final int PURPUR_STAIRS = 203;
public static final int PURPUR_DOUBLE_SLAB = 204;
public static final int PURPUR_SLAB = 205;
public static final int END_BRICKS = 206;
public static final int BEETROOTS = 207;
public static final int GRASS_PATH = 208;
public static final int END_GATEWAY = 209;
public static final int REPEATING_COMMAND_BLOCK = 210;
public static final int CHAIN_COMMAND_BLOCK = 211;
public static final int FROSTED_ICE = 212;
public static final int MAGMA_BLOCK = 213;
public static final int NETHER_WART_BLOCK = 214;
public static final int RED_NETHER_BRICK = 215;
public static final int BONE_BLOCK = 216;
public static final int STRUCTURE_VOID = 217;
public static final int OBSERVER = 218;
public static final int SHULKER_BOX_WHITE = 219;
public static final int SHULKER_BOX_ORANGE = 220;
public static final int SHULKER_BOX_MAGENTA = 221;
public static final int SHULKER_BOX_LIGHT_BLUE = 222;
public static final int SHULKER_BOX_YELLOW = 223;
public static final int SHULKER_BOX_LIME = 224;
public static final int SHULKER_BOX_PINK = 225;
public static final int SHULKER_BOX_GRAY = 226;
public static final int SHULKER_BOX_LIGHT_GRAY = 227;
public static final int SHULKER_BOX_CYAN = 228;
public static final int SHULKER_BOX_PURPLE = 229;
public static final int SHULKER_BOX_BLUE = 230;
public static final int SHULKER_BOX_BROWN = 231;
public static final int SHULKER_BOX_GREEN = 232;
public static final int SHULKER_BOX_RED = 233;
public static final int SHULKER_BOX_BLACK = 234;
public static final int TERRACOTTA_WHITE = 235;
public static final int TERRACOTTA_ORANGE = 236;
public static final int TERRACOTTA_MAGENTA = 237;
public static final int TERRACOTTA_LIGHT_BLUE = 238;
public static final int TERRACOTTA_YELLOW = 239;
public static final int TERRACOTTA_LIME = 240;
public static final int TERRACOTTA_PINK = 241;
public static final int TERRACOTTA_GRAY = 242;
public static final int TERRACOTTA_LIGHT_GRAY = 243;
public static final int TERRACOTTA_CYAN = 244;
public static final int TERRACOTTA_PURPLE = 245;
public static final int TERRACOTTA_BLUE = 246;
public static final int TERRACOTTA_BROWN = 247;
public static final int TERRACOTTA_GREEN = 248;
public static final int TERRACOTTA_RED = 249;
public static final int TERRACOTTA_BLACK = 250;
public static final int CONCRETE = 251;
public static final int CONCRETE_POWDER = 252;
public static final int STRUCTURE_BLOCK = 255;
private BlockID() {
}

View File

@ -27,218 +27,35 @@ package com.sk89q.worldedit.blocks;
@Deprecated
public final class ItemID {
public static final int IRON_SHOVEL = 256;
public static final int IRON_PICK = 257;
public static final int IRON_AXE = 258;
public static final int FLINT_AND_TINDER = 259;
public static final int RED_APPLE = 260;
public static final int BOW = 261;
public static final int ARROW = 262;
public static final int COAL = 263;
public static final int DIAMOND = 264;
public static final int IRON_BAR = 265;
public static final int GOLD_BAR = 266;
public static final int IRON_SWORD = 267;
public static final int WOOD_SWORD = 268;
public static final int WOOD_SHOVEL = 269;
public static final int WOOD_PICKAXE = 270;
public static final int WOOD_AXE = 271;
public static final int STONE_SWORD = 272;
public static final int STONE_SHOVEL = 273;
public static final int STONE_PICKAXE = 274;
public static final int STONE_AXE = 275;
public static final int DIAMOND_SWORD = 276;
public static final int DIAMOND_SHOVEL = 277;
public static final int DIAMOND_PICKAXE = 278;
public static final int DIAMOND_AXE = 279;
public static final int STICK = 280;
public static final int BOWL = 281;
public static final int MUSHROOM_SOUP = 282;
public static final int GOLD_SWORD = 283;
public static final int GOLD_SHOVEL = 284;
public static final int GOLD_PICKAXE = 285;
public static final int GOLD_AXE = 286;
public static final int STRING = 287;
public static final int FEATHER = 288;
public static final int SULPHUR = 289;
public static final int WOOD_HOE = 290;
public static final int STONE_HOE = 291;
public static final int IRON_HOE = 292;
public static final int DIAMOND_HOE = 293;
public static final int GOLD_HOE = 294;
public static final int SEEDS = 295;
public static final int WHEAT = 296;
public static final int BREAD = 297;
public static final int LEATHER_HELMET = 298;
public static final int LEATHER_CHEST = 299;
public static final int LEATHER_PANTS = 300;
public static final int LEATHER_BOOTS = 301;
public static final int CHAINMAIL_HELMET = 302;
public static final int CHAINMAIL_CHEST = 303;
public static final int CHAINMAIL_PANTS = 304;
public static final int CHAINMAIL_BOOTS = 305;
public static final int IRON_HELMET = 306;
public static final int IRON_CHEST = 307;
public static final int IRON_PANTS = 308;
public static final int IRON_BOOTS = 309;
public static final int DIAMOND_HELMET = 310;
public static final int DIAMOND_CHEST = 311;
public static final int DIAMOND_PANTS = 312;
public static final int DIAMOND_BOOTS = 313;
public static final int GOLD_HELMET = 314;
public static final int GOLD_CHEST = 315;
public static final int GOLD_PANTS = 316;
public static final int GOLD_BOOTS = 317;
public static final int FLINT = 318;
public static final int RAW_PORKCHOP = 319;
public static final int COOKED_PORKCHOP = 320;
public static final int PAINTING = 321;
public static final int GOLD_APPLE = 322;
public static final int SIGN = 323;
public static final int WOODEN_DOOR_ITEM = 324;
public static final int BUCKET = 325;
public static final int WATER_BUCKET = 326;
public static final int LAVA_BUCKET = 327;
public static final int MINECART = 328;
public static final int SADDLE = 329;
public static final int IRON_DOOR_ITEM = 330;
public static final int REDSTONE_DUST = 331;
public static final int SNOWBALL = 332;
public static final int WOOD_BOAT = 333;
public static final int LEATHER = 334;
public static final int MILK_BUCKET = 335;
public static final int BRICK_BAR = 336;
public static final int CLAY_BALL = 337;
public static final int SUGAR_CANE_ITEM = 338;
public static final int PAPER = 339;
public static final int BOOK = 340;
public static final int SLIME_BALL = 341;
public static final int STORAGE_MINECART = 342;
public static final int POWERED_MINECART = 343;
public static final int EGG = 344;
public static final int COMPASS = 345;
public static final int FISHING_ROD = 346;
public static final int WATCH = 347;
public static final int LIGHTSTONE_DUST = 348;
public static final int RAW_FISH = 349;
public static final int COOKED_FISH = 350;
public static final int INK_SACK = 351;
public static final int BONE = 352;
public static final int SUGAR = 353;
public static final int CAKE_ITEM = 354;
public static final int BED_ITEM = 355;
public static final int REDSTONE_REPEATER = 356;
public static final int COOKIE = 357;
public static final int MAP = 358;
public static final int SHEARS = 359;
public static final int MELON = 360;
public static final int PUMPKIN_SEEDS = 361;
public static final int MELON_SEEDS = 362;
public static final int RAW_BEEF = 363;
public static final int COOKED_BEEF = 364;
public static final int RAW_CHICKEN = 365;
public static final int COOKED_CHICKEN = 366;
public static final int ROTTEN_FLESH = 367;
public static final int ENDER_PEARL = 368;
public static final int BLAZE_ROD = 369;
public static final int GHAST_TEAR = 370;
public static final int GOLD_NUGGET = 371;
public static final int NETHER_WART_SEED = 372;
public static final int POTION = 373;
public static final int GLASS_BOTTLE = 374;
public static final int SPIDER_EYE = 375;
public static final int FERMENTED_SPIDER_EYE = 376;
public static final int BLAZE_POWDER = 377;
public static final int MAGMA_CREAM = 378;
public static final int BREWING_STAND = 379;
public static final int CAULDRON = 380;
public static final int EYE_OF_ENDER = 381;
public static final int GLISTERING_MELON = 382;
public static final int SPAWN_EGG = 383;
public static final int BOTTLE_O_ENCHANTING = 384;
public static final int FIRE_CHARGE = 385;
public static final int BOOK_AND_QUILL = 386;
public static final int WRITTEN_BOOK = 387;
public static final int EMERALD = 388;
public static final int ITEM_FRAME = 389;
public static final int FLOWER_POT = 390;
public static final int CARROT = 391;
public static final int POTATO = 392;
public static final int BAKED_POTATO = 393;
public static final int POISONOUS_POTATO = 394;
public static final int BLANK_MAP = 395;
public static final int GOLDEN_CARROT = 396;
public static final int HEAD = 397;
public static final int CARROT_ON_A_STICK = 398;
public static final int NETHER_STAR = 399;
public static final int PUMPKIN_PIE = 400;
public static final int FIREWORK_ROCKET = 401;
public static final int FIREWORK_STAR = 402;
public static final int ENCHANTED_BOOK = 403;
public static final int COMPARATOR = 404;
public static final int NETHER_BRICK = 405;
public static final int NETHER_QUARTZ = 406;
public static final int TNT_MINECART = 407;
public static final int HOPPER_MINECART = 408;
public static final int PRISMARINE_SHARD = 409;
public static final int PRISMARINE_CRYSTALS = 410;
public static final int RABBIT = 411;
public static final int COOKED_RABBIT = 412;
public static final int RABBIT_STEW = 413;
public static final int RABBIT_FOOT = 414;
public static final int RABBIT_HIDE = 415;
public static final int ARMOR_STAND = 416;
public static final int HORSE_ARMOR_IRON = 417;
public static final int HORSE_ARMOR_GOLD = 418;
public static final int HORSE_ARMOR_DIAMOND = 419;
public static final int LEAD = 420;
public static final int NAME_TAG = 421;
public static final int COMMAND_BLOCK_MINECART = 422;
public static final int MUTTON = 423;
public static final int COOKED_MUTTON = 424;
public static final int BANNER = 425;
public static final int END_CRYSTAL = 426;
public static final int SPRUCE_DOOR = 427;
public static final int BIRCH_DOOR = 428;
public static final int JUNGLE_DOOR = 429;
public static final int ACACIA_DOOR = 430;
public static final int DARK_OAK_DOOR = 431;
public static final int CHORUS_FRUIT = 432;
public static final int CHORUS_FRUIT_POPPED = 433;
public static final int BEETROOT = 434;
public static final int BEETROOT_SEEDS = 435;
public static final int BEETROOT_SOUP = 436;
public static final int DRAGON_BREATH = 437;
public static final int SPLASH_POTION = 438;
public static final int SPECTRAL_ARROW = 439;
public static final int TIPPED_ARROW = 440;
public static final int LINGERING_POTION = 441;
public static final int SHIELD = 442;
public static final int ELYTRA = 443;
public static final int SPRUCE_BOAT = 444;
public static final int BIRCH_BOAT = 445;
public static final int JUNGLE_BOAT = 446;
public static final int ACACIA_BOAT = 447;
public static final int DARK_OAK_BOAT = 448;
public static final int TOTEM_OF_UNDYING = 449;
public static final int SHULKER_SHELL = 450;
public static final int IRON_NUGGET = 452;
public static final int KNOWLEDGE_BOOK = 453;
@Deprecated public static final int GOLD_RECORD = 2256; // deprecated, but leave it there
@Deprecated public static final int GREEN_RECORD = 2257; // deprecated, but leave it there
public static final int DISC_13 = 2256;
public static final int DISC_CAT = 2257;
public static final int DISC_BLOCKS = 2258;
public static final int DISC_CHIRP = 2259;
public static final int DISC_FAR = 2260;
public static final int DISC_MALL = 2261;
public static final int DISC_MELLOHI = 2262;
public static final int DISC_STAL = 2263;
public static final int DISC_STRAD = 2264;
public static final int DISC_WARD = 2265;
public static final int DISC_11 = 2266;
public static final int DISC_WAIT = 2267;
private ItemID() {
}

View File

@ -19,11 +19,16 @@
package com.sk89q.worldedit.blocks.type;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.blocks.BlockMaterial;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.world.registry.BundledBlockData;
import com.sk89q.worldedit.world.registry.LegacyMapper;
import java.util.function.Function;
import javax.annotation.Nullable;
public class BlockType {
private String id;
@ -77,6 +82,34 @@ public class BlockType {
return this.defaultState;
}
/**
* Gets whether this block type has an item representation.
*
* @return If it has an item
*/
public boolean hasItemType() {
return getItemType() != null;
}
/**
* Gets the item representation of this block type, if it exists.
*
* @return The item representation
*/
@Nullable
public ItemType getItemType() {
return ItemTypes.getItemType(this.id);
}
/**
* Get the material for this BlockType.
*
* @return The material
*/
public BlockMaterial getMaterial() {
return WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.GAME_HOOKS).getRegistries().getBlockRegistry().getMaterial(this.id);
}
/**
* Gets the legacy ID. Needed for legacy reasons.
*
@ -94,11 +127,6 @@ public class BlockType {
}
}
@Deprecated
public com.sk89q.worldedit.blocks.BlockType getLegacyType() {
return com.sk89q.worldedit.blocks.BlockType.fromID(getLegacyId());
}
@Override
public int hashCode() {
return this.id.hashCode();

View File

@ -22,6 +22,8 @@ package com.sk89q.worldedit.blocks.type;
import com.sk89q.worldedit.world.registry.BundledItemData;
import com.sk89q.worldedit.world.registry.LegacyMapper;
import javax.annotation.Nullable;
public class ItemType {
private String id;
@ -52,6 +54,26 @@ public class ItemType {
}
}
/**
* Gets whether this item type has a block representation.
*
* @return If it has a block
*/
public boolean hasBlockType() {
return getBlockType() != null;
}
/**
* Gets the block representation of this item type, if it exists.
*
* @return The block representation
*/
@Nullable
public BlockType getBlockType() {
return BlockTypes.getBlockType(this.id);
}
/**
* Gets the legacy ID. Needed for legacy reasons.
*

View File

@ -192,13 +192,13 @@ public class GeneralCommands {
break;
}
// TODO if (blocksOnly && searchType.getID() > 255) {
// continue;
// }
//
// if (itemsOnly && searchType.getID() <= 255) {
// continue;
// }
if (blocksOnly && !searchType.hasBlockType()) {
continue;
}
if (itemsOnly && searchType.hasBlockType()) {
continue;
}
for (String alias : Sets.newHashSet(searchType.getId(), searchType.getName())) {
if (alias.contains(query)) {

View File

@ -102,7 +102,7 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
byte free = 0;
while (y <= world.getMinimumPoint().getBlockY() + 2) {
if (BlockType.canPassThrough(world.getBlock(new Vector(x, y, z)))) {
if (!world.getBlock(new Vector(x, y, z)).getBlockType().getMaterial().isMovementBlocker()) {
++free;
} else {
free = 0;
@ -132,7 +132,7 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
while (y >= 0) {
final Vector pos = new Vector(x, y, z);
final BlockState id = world.getBlock(pos);
if (!BlockType.canPassThrough(id.getBlockType().getLegacyId())) {
if (id.getBlockType().getMaterial().isMovementBlocker()) {
setPosition(new Vector(x + 0.5, y + BlockType.centralTopLimit(id), z + 0.5));
return;
}
@ -158,7 +158,7 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
byte spots = 0;
while (y <= world.getMaximumPoint().getY() + 2) {
if (BlockType.canPassThrough(world.getBlock(new Vector(x, y, z)))) {
if (!world.getBlock(new Vector(x, y, z)).getBlockType().getMaterial().isMovementBlocker()) {
++free;
} else {
free = 0;
@ -198,7 +198,7 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
byte free = 0;
while (y >= 1) {
if (BlockType.canPassThrough(world.getBlock(new Vector(x, y, z)))) {
if (!world.getBlock(new Vector(x, y, z)).getBlockType().getMaterial().isMovementBlocker()) {
++free;
} else {
free = 0;
@ -253,7 +253,7 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
while (y <= world.getMaximumPoint().getY()) {
// Found a ceiling!
if (!BlockType.canPassThrough(world.getBlock(new Vector(x, y, z)))) {
if (world.getBlock(new Vector(x, y, z)).getBlockType().getMaterial().isMovementBlocker()) {
int platformY = Math.max(initialY, y - 3 - clearance);
floatAt(x, platformY + 1, z, alwaysGlass);
return true;
@ -281,7 +281,7 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
final Extent world = getLocation().getExtent();
while (y <= world.getMaximumPoint().getY() + 2) {
if (!BlockType.canPassThrough(world.getBlock(new Vector(x, y, z)))) {
if (world.getBlock(new Vector(x, y, z)).getBlockType().getMaterial().isMovementBlocker()) {
break; // Hit something
} else if (y > maxY + 1) {
break;
@ -364,7 +364,11 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
@Override
public BaseBlock getBlockInHand(HandSide handSide) throws WorldEditException {
final ItemType typeId = getItemInHand(handSide).getType();
return new BaseBlock(typeId.getLegacyId());
if (typeId.hasBlockType()) {
return new BaseBlock(typeId.getBlockType());
} else {
return new BaseBlock(BlockTypes.AIR);
}
}
/**
@ -384,7 +388,7 @@ public abstract class AbstractPlayerActor implements Actor, Player, Cloneable {
boolean inFree = false;
while ((block = hitBlox.getNextBlock()) != null) {
boolean free = BlockType.canPassThrough(world.getBlock(block.toVector()));
boolean free = !world.getBlock(block.toVector()).getBlockType().getMaterial().isMovementBlocker();
if (firstBlock) {
firstBlock = false;

View File

@ -20,7 +20,6 @@
package com.sk89q.worldedit.function.mask;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.blocks.Blocks;
import com.sk89q.worldedit.blocks.type.BlockStateHolder;
import com.sk89q.worldedit.extent.Extent;

View File

@ -19,10 +19,9 @@
package com.sk89q.worldedit.function.mask;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BlockType;
import com.sk89q.worldedit.blocks.type.BlockState;
import com.sk89q.worldedit.extent.Extent;
import javax.annotation.Nullable;
@ -35,8 +34,8 @@ public class SolidBlockMask extends AbstractExtentMask {
@Override
public boolean test(Vector vector) {
Extent extent = getExtent();
BaseBlock lazyBlock = extent.getLazyBlock(vector);
return !BlockType.canPassThrough(lazyBlock.getBlockType().getLegacyId(), lazyBlock.getData());
BlockState block = extent.getBlock(vector);
return block.getBlockType().getMaterial().isMovementBlocker();
}
@Nullable

View File

@ -136,7 +136,7 @@ public class TargetBlock {
* @return Block
*/
public Location getSolidTargetBlock() {
while (getNextBlock() != null && BlockType.canPassThrough(world.getBlock(getCurrentBlock().toVector()))) ;
while (getNextBlock() != null && !world.getBlock(getCurrentBlock().toVector()).getBlockType().getMaterial().isMovementBlocker()) ;
return getCurrentBlock();
}

View File

@ -19,15 +19,15 @@
package com.sk89q.worldedit.world.registry;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.blocks.BlockMaterial;
import com.sk89q.worldedit.blocks.type.BlockState;
import com.sk89q.worldedit.blocks.type.BlockStateHolder;
import com.sk89q.worldedit.world.registry.state.State;
import javax.annotation.Nullable;
import java.util.Map;
import javax.annotation.Nullable;
/**
* Provides information on blocks and provides methods to create them.
*/
@ -45,11 +45,11 @@ public interface BlockRegistry {
/**
* Get the material for the given block.
*
* @param block the block
* @param id the block
* @return the material, or null if the material information is not known
*/
@Nullable
BlockMaterial getMaterial(BaseBlock block);
BlockMaterial getMaterial(String id);
/**
* Get an unmodifiable map of states for this block.

View File

@ -19,16 +19,16 @@
package com.sk89q.worldedit.world.registry;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.blocks.BlockMaterial;
import com.sk89q.worldedit.blocks.type.BlockState;
import com.sk89q.worldedit.blocks.type.BlockStateHolder;
import com.sk89q.worldedit.blocks.type.BlockTypes;
import com.sk89q.worldedit.world.registry.state.State;
import javax.annotation.Nullable;
import java.util.Map;
import javax.annotation.Nullable;
/**
* A block registry that uses {@link BundledBlockData} to serve information
* about blocks.
@ -43,8 +43,8 @@ public class BundledBlockRegistry implements BlockRegistry {
@Nullable
@Override
public BlockMaterial getMaterial(BaseBlock block) {
return BundledBlockData.getInstance().getMaterialById(block.getBlockType().getId());
public BlockMaterial getMaterial(String id) {
return BundledBlockData.getInstance().getMaterialById(id);
}
@Nullable