use of cn.nukkit.item.Item in project Nukkit by Nukkit.
the class BlockRail method place.
// Information from http://minecraft.gamepedia.com/Rail
@Override
public boolean place(Item item, Block block, Block target, BlockFace face, double fx, double fy, double fz, Player player) {
Block down = this.down();
if (down == null || down.isTransparent()) {
return false;
}
Map<BlockRail, BlockFace> railsAround = this.checkRailsAroundAffected();
List<BlockRail> rails = new ArrayList<>(railsAround.keySet());
List<BlockFace> faces = new ArrayList<>(railsAround.values());
if (railsAround.size() == 1) {
BlockRail other = rails.get(0);
this.setDamage(this.connect(other, railsAround.get(other)).metadata());
} else if (railsAround.size() == 4) {
if (this.isAbstract()) {
this.setDamage(this.connect(rails.get(faces.indexOf(SOUTH)), SOUTH, rails.get(faces.indexOf(EAST)), EAST).metadata());
} else {
this.setDamage(this.connect(rails.get(faces.indexOf(EAST)), EAST, rails.get(faces.indexOf(WEST)), WEST).metadata());
}
} else if (!railsAround.isEmpty()) {
if (this.isAbstract()) {
if (railsAround.size() == 2) {
BlockRail rail1 = rails.get(0);
BlockRail rail2 = rails.get(1);
this.setDamage(this.connect(rail1, railsAround.get(rail1), rail2, railsAround.get(rail2)).metadata());
} else {
List<BlockFace> cd = Stream.of(CURVED_SOUTH_EAST, CURVED_NORTH_EAST, CURVED_SOUTH_WEST).filter(o -> o.connectingDirections().stream().allMatch(faces::contains)).findFirst().get().connectingDirections();
BlockFace f1 = cd.get(0);
BlockFace f2 = cd.get(1);
this.setDamage(this.connect(rails.get(faces.indexOf(f1)), f1, rails.get(faces.indexOf(f2)), f2).metadata());
}
} else {
BlockFace f = faces.stream().sorted((f1, f2) -> (f1.getIndex() < f2.getIndex()) ? 1 : ((x == y) ? 0 : -1)).findFirst().get();
BlockFace fo = f.getOpposite();
if (faces.contains(fo)) {
// Opposite connectable
this.setDamage(this.connect(rails.get(faces.indexOf(f)), f, rails.get(faces.indexOf(fo)), fo).metadata());
} else {
this.setDamage(this.connect(rails.get(faces.indexOf(f)), f).metadata());
}
}
}
this.level.setBlock(this, this, true, true);
if (!isAbstract()) {
level.scheduleUpdate(this, this, 0);
}
return true;
}
use of cn.nukkit.item.Item in project Nukkit by Nukkit.
the class BlockFlowerPot method getDrops.
@Override
public Item[] getDrops(Item item) {
boolean dropInside = false;
int insideID = 0;
int insideMeta = 0;
BlockEntity blockEntity = getLevel().getBlockEntity(this);
if (blockEntity instanceof BlockEntityFlowerPot) {
dropInside = true;
insideID = blockEntity.namedTag.getShort("item");
insideMeta = blockEntity.namedTag.getInt("data");
}
if (dropInside) {
return new Item[] { new ItemFlowerPot(), Item.get(insideID, insideMeta, 1) };
} else {
return new Item[] { new ItemFlowerPot() };
}
}
use of cn.nukkit.item.Item in project Nukkit by Nukkit.
the class BlockMelon method getDrops.
@Override
public Item[] getDrops(Item item) {
Random random = new Random();
int count = 3 + random.nextInt(5);
Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING);
if (fortune != null && fortune.getLevel() >= 1) {
count += random.nextInt(fortune.getLevel() + 1);
}
return new Item[] { new ItemMelon(0, Math.min(9, count)) };
}
use of cn.nukkit.item.Item in project Nukkit by Nukkit.
the class BlockItemFrame method onActivate.
@Override
public boolean onActivate(Item item, Player player) {
BlockEntity blockEntity = this.getLevel().getBlockEntity(this);
BlockEntityItemFrame itemFrame = (BlockEntityItemFrame) blockEntity;
if (itemFrame.getItem().getId() == Item.AIR) {
// We can't use Item.get(item.getId(), item.getDamage(), 1) because
// we need to keep the item's NBT tags
// So we clone the item
Item itemOnFrame = item.clone();
// Change it to only one item (if we keep +1, visual glitches will happen)
itemOnFrame.setCount(1);
// And then we set it on the item frame
itemFrame.setItem(itemOnFrame);
// The item will be removed from the player's hand a few lines ahead
this.getLevel().addSound(this, Sound.BLOCK_ITEMFRAME_ADD_ITEM);
if (player != null && player.isSurvival()) {
int count = item.getCount();
if (count-- <= 0) {
player.getInventory().setItemInHand(new ItemBlock(new BlockAir(), 0, 0));
return true;
}
item.setCount(count);
player.getInventory().setItemInHand(item);
}
} else {
int itemRot = itemFrame.getItemRotation();
if (itemRot >= 7) {
itemRot = 0;
} else {
itemRot++;
}
itemFrame.setItemRotation(itemRot);
this.getLevel().addSound(this, Sound.BLOCK_ITEMFRAME_ROTATE_ITEM);
}
return true;
}
use of cn.nukkit.item.Item in project Nukkit by Nukkit.
the class BlockOreLapis method getDrops.
@Override
public Item[] getDrops(Item item) {
if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) {
int count = 4 + ThreadLocalRandom.current().nextInt(5);
Enchantment fortune = item.getEnchantment(Enchantment.ID_FORTUNE_DIGGING);
if (fortune != null && fortune.getLevel() >= 1) {
int i = ThreadLocalRandom.current().nextInt(fortune.getLevel() + 2) - 1;
if (i < 0) {
i = 0;
}
count *= (i + 1);
}
return new Item[] { new ItemDye(4, new Random().nextInt(4) + 4) };
} else {
return new Item[0];
}
}
Aggregations