}
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
return;
}
SpoutCraftPlayer player = (SpoutCraftPlayer) SpoutCraftPlayer.getPlayer(event.getPlayer());
if (event.getClickedBlock() != null) {
boolean action = false;
switch (event.getClickedBlock().getType()) {
case BREWING_STAND:
case CHEST:
case DISPENSER:
case ENCHANTMENT_TABLE:
case FURNACE:
case WORKBENCH:
case BED_BLOCK:
case CAKE_BLOCK:
case CAULDRON:
case DIODE_BLOCK_OFF:
case DIODE_BLOCK_ON:
case FENCE_GATE:
case IRON_DOOR_BLOCK:
case LEVER:
case NOTE_BLOCK:
case STONE_BUTTON:
case TRAP_DOOR:
case WOODEN_DOOR:
action = true;
break;
}
if (event.hasItem() && !action) {
SpoutBlock block = (SpoutBlock)event.getClickedBlock().getRelative(event.getBlockFace());
if (event.getClickedBlock().getType() == Material.SNOW) {
block = block.getRelative(0, -1, 0);
}
ItemStack item = event.getItem();
int damage = item.getDurability();
if (item.getType() == Material.FLINT && damage != 0) {
SimpleMaterialManager mm = (SimpleMaterialManager)SpoutManager.getMaterialManager();
if (!player.getEyeLocation().getBlock().equals(block) && !player.getLocation().getBlock().equals(block)) {
CustomBlock cb = MaterialData.getCustomBlock(damage);
if (cb != null && isReplaceable(block.getType())) {
BlockState oldState = block.getState();
block.setTypeIdAndData(cb.getBlockId(), (byte)(cb.getBlockData()), true);
cb.onBlockPlace(block.getWorld(), block.getX(), block.getY(), block.getZ(), player);
int rot = Math.round(player.getLocation().getYaw() + 45 % 360);
boolean mirrored = player.getLocation().getPitch() < -45;
if (rot < 0 ) {
rot += 360;
}
rot = (2 - (rot/90)) % 4;
if (rot < 0) {
rot += 4;
}
byte rotation;
if (cb.canMirroredRotate() && mirrored) {
rotation = cb.canRotate() ? (byte) (rot + 4) : 4;
} else {
rotation = cb.canRotate() ? (byte) rot : 0;
}
mm.overrideBlock(block, cb, rotation);
if (canPlaceAt(block, oldState, (SpoutBlock)event.getClickedBlock(), item, player)) {
// Yay, take the item from inventory
if (player.getGameMode() == GameMode.SURVIVAL) {
if (item.getAmount() == 1) {
// Remove this for Stuff
event.getPlayer().setItemInHand(null);
} else {
item.setAmount(item.getAmount() - 1);
}
}
player.playSound(player.getLocation(), Sound.DIG_STONE, 1.0F, 0.7936508F);
player.updateInventory();
// Now we have placed a nice custom block! We should check its rotation and rotate the base block!
if (cb.canRotate()) {
if (cb.canMirroredRotate() && mirrored) {
if (block.getType() == Material.LEVER || block.getType() == Material.TORCH || block.getType() == Material.STONE_BUTTON || block.getType() == Material.WOOD_BUTTON) {
// The below Types need a slightly different data value to assign correct positioning.