Package org.bukkit.block.data

# Interface BlockData

All Superinterfaces:
  `Cloneable`

All Known Subinterfaces:
  `Ageable`, `AmethystCluster`, `AnaloguePowerable`, `Attachable`, `Bamboo`, `Barrel`, `Bed`, `Beehive`, `Bell`, `BigDripleaf`, `Bisected`, `BrewingStand`, `BubbleColumn`, `Cake`, `Campfire`, `Candle`, `CaveVines`, `CaveVinesPlant`, `Chain`, `Chest`, `ChiseledBookshelf`, `Cocoa`, `CommandBlock`, `Comparator`, `CoralWallFan`, `DaylightDetector`, `Directional`, `Dispenser`, `Door`, `Dripleaf`, `EnderChest`, `EndPortalFrame`, `FaceAttachable`, `Farmland`, `Fence`, `Fire`, `Furnace`, `Gate`, `GlassPane`, `GlowLichen`, `Grindstone`, `Hangable`, `HangingSign`, `Hopper`, `Jigsaw`, `Jukebox`, `Ladder`, `Lantern`, `Leaves`, `Lectern`, `Levelled`, `Light`, `Lightable`, `LightningRod`, `MangrovePropagule`, `MultipleFacing`, `NoteBlock`, `Observer`, `Openable`, `Orientable`, `Piston`, `PistonHead`, `PointedDripstone`, `Powerable`, `Rail`, `RedstoneRail`, `RedstoneWallTorch`, `RedstoneWire`, `Repeater`, `RespawnAnchor`, `Rotatable`, `Sapling`, `Scaffolding`, `SculkCatalyst`, `SculkSensor`, `SculkShrieker`, `SculkVein`, `SeaPickle`, `Sign`, `Slab`, `SmallDripleaf`, `Snow`, `Snowable`, `Stairs`, `StructureBlock`, `Switch`, `TechnicalPiston`, `TNT`, `TrapDoor`, `Tripwire`, `TripwireHook`, `TurtleEgg`, `Wall`, `WallHangingSign`, `WallSign`, `Waterlogged`

public interface BlockData extends Cloneable

## Method Summary

Modifier and Type
Method
Description
`@NotNull BlockData`
`clone()`
Returns a copy of this BlockData.
`@NotNull String`
`getAsString()`
Gets a string, which when passed into a method such as `Server.createBlockData(java.lang.String)` will unambiguously recreate this instance.
`@NotNull String`
`getAsString(boolean hideUnspecified)`
Gets a string, which when passed into a method such as `Server.createBlockData(java.lang.String)` will recreate this or a similar instance where unspecified states (if any) may be optionally omitted.
`@NotNull Material`
`getMaterial()`
Get the Material represented by this block data.
`@NotNull SoundGroup`
`getSoundGroup()`
Gets the block's `SoundGroup` which can be used to get its step sound, hit sound, and others.
`boolean`
`isFaceSturdy(@NotNull BlockFace face, @NotNull BlockSupport support)`
Checks if a state's `BlockFace` is capable of providing a given level of `BlockSupport` for neighbouring block states.
`boolean`
`isPreferredTool(ItemStack tool)`
Returns if the given item is a preferred choice to break this block.
`boolean`
`isRandomlyTicked()`
Gets if this block is ticked randomly in the world.
`boolean`
`isSupported(@NotNull Block block)`
Checks if this state would be properly supported if it were placed at the given `Block`.
`boolean`
`isSupported(@NotNull Location location)`
Checks if this state would be properly supported if it were placed at the block at the given `Location`.
`boolean`
`matches(@Nullable BlockData data)`
Checks if the specified BlockData matches this block data.
`@NotNull BlockData`
`merge(@NotNull BlockData data)`
Merges all explicitly set states from the given data with this BlockData.

## Method Details

### getMaterial

@NotNull @NotNull Material getMaterial()
Get the Material represented by this block data.

Returns:
  the material

### getAsString

@NotNull @NotNull String getAsString()
Gets a string, which when passed into a method such as `Server.createBlockData(java.lang.String)` will unambiguously recreate this instance.

Returns:
  serialized data string for this block

### getAsString

@NotNull @NotNull String getAsString(boolean hideUnspecified)
Gets a string, which when passed into a method such as `Server.createBlockData(java.lang.String)` will recreate this or a similar instance where unspecified states (if any) may be optionally omitted. If this instance was parsed and states are omitted, this exact instance will be creatable when parsed again, else their equality cannot be guaranteed.

This method will only take effect for BlockData instances created by methods such as `Server.createBlockData(String)` or any similar method whereby states are optionally defined. If otherwise, the result of `getAsString()` will be returned. The following behaviour would be expected:

     String dataString = "minecraft:chest[waterlogged=true]"
     BlockData data = Bukkit.createBlockData(dataString);
     dataString.equals(data.getAsString(true)); // This would return true
     dataString.equals(data.getAsString(false)); // This would return false as all states are present
     dataString.equals(data.getAsString()); // This is equivalent to the above, "getAsString(false)"

Parameters:
  `hideUnspecified` - true if unspecified states should be omitted, false if they are to be shown as performed by `getAsString()`.
Returns:
  serialized data string for this block

### merge

@NotNull @NotNull BlockData merge(@NotNull @NotNull BlockData data)
Merges all explicitly set states from the given data with this BlockData.
Note that the given data MUST have been created from one of the String parse methods, e.g. `Server.createBlockData(java.lang.String)` and not have been subsequently modified.
Note also that the block types must match identically.

Parameters:
  `data` - the data to merge from
Returns:
  a new instance of this blockdata with the merged data

### matches

boolean matches(@Nullable @Nullable BlockData data)
Checks if the specified BlockData matches this block data.
The semantics of this method are such that for manually created or modified BlockData it has the same effect as `Object.equals(java.lang.Object)`, whilst for parsed data (that to which `merge(org.bukkit.block.data.BlockData)` applies, it will return true when the type and all explicitly set states match.
Note that these semantics mean that a.matches(b) may not be the same as b.matches(a)

Parameters:
  `data` - the data to match against (normally a parsed constant)
Returns:
  if there is a match

### clone

@NotNull @NotNull BlockData clone()
Returns a copy of this BlockData.

Returns:
  a copy of the block data

### getSoundGroup

@NotNull @NotNull SoundGroup getSoundGroup()
Gets the block's `SoundGroup` which can be used to get its step sound, hit sound, and others.

Returns:
  the sound effect group

### isSupported

boolean isSupported(@NotNull @NotNull Block block)
Checks if this state would be properly supported if it were placed at the given `Block`.

This may be useful, for instance, to check whether or not a wall torch is capable of surviving on its neighbouring block states.

Parameters:
  `block` - the block position at which the state would be placed
Returns:
  true if the block is supported, false if this state would not survive the world conditions

### isSupported

boolean isSupported(@NotNull @NotNull Location location)
Checks if this state would be properly supported if it were placed at the block at the given `Location`.

This may be useful, for instance, to check whether or not a wall torch is capable of surviving on its neighbouring block states.

Parameters:
  `location` - the location at which the state would be placed
Returns:
  true if the block is supported, false if this state would not survive the world conditions

### isFaceSturdy

boolean isFaceSturdy(@NotNull @NotNull BlockFace face, @NotNull @NotNull BlockSupport support)
Checks if a state's `BlockFace` is capable of providing a given level of `BlockSupport` for neighbouring block states.

Any given state may support either none, one, or more than one level of block support depending on its states. A common example would be a wall's ability to support torches only on the center of the upper block face, whereas a grass block would support all levels of block support on all block faces.

Parameters:
  `face` - the face to check
  `support` - the possible support level
Returns:
  true if the face is sturdy and can support a block, false otherwise

### isRandomlyTicked

boolean isRandomlyTicked()
Gets if this block is ticked randomly in the world. The blocks current state may change this value.

Returns:
  is ticked randomly

### isPreferredTool

boolean isPreferredTool(@NotNull ItemStack tool)
Returns if the given item is a preferred choice to break this block. In some cases this determines if a block will drop anything or extra loot.

Parameters:
  `tool` - The tool or item used for breaking this block
Returns:
  true if the tool is preferred for breaking this block