下面列出了怎么用org.bukkit.entity.Item的API类实例代码及写法,或者点击链接到github查看源代码。
@EventHandler
public void onEntityPickupItem(PlayerPickupItemEvent event) {
try {
final Item item = event.getItem();
final Location location = item.getLocation();
final IslandManager islandManager = IridiumSkyblock.getIslandManager();
final Island island = islandManager.getIslandViaLocation(location);
if (island == null) return;
final Player player = event.getPlayer();
final User user = User.getUser(player);
if (!island.getPermissions(user).pickupItems)
event.setCancelled(true);
} catch (Exception ex) {
IridiumSkyblock.getInstance().sendErrorMessage(ex);
}
}
public PlayerItemTransferEvent(
Event cause,
Type type,
Player player,
@Nullable Inventory fromInventory,
@Nullable Integer fromSlot,
@Nullable Inventory toInventory,
@Nullable Integer toSlot,
ItemStack itemStack,
@Nullable Item itemEntity,
int quantity,
@Nullable ItemStack cursorItem) {
super(
cause, type, fromInventory, fromSlot, toInventory, toSlot, itemStack, itemEntity, quantity);
this.player = player;
this.cursorItem = cursorItem;
}
@Override
protected void executeTask() {
boolean playSound = false;
for (Entity n : p.getNearbyEntities(radius, radius, radius)) {
if (n instanceof Item) {
Item item = (Item) n;
if (!SlimefunUtils.hasNoPickupFlag(item) && item.getPickupDelay() <= 0 && p.getLocation().distanceSquared(item.getLocation()) > 0.3) {
item.teleport(p.getLocation());
playSound = true;
}
}
}
if (playSound) {
p.playSound(p.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 0.25F, 0.9F);
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void OnItemSpawn(ItemSpawnEvent event) {
Item item = event.getEntity();
BonusGoodie goodie = CivGlobal.getBonusGoodie(item.getItemStack());
if (goodie == null) {
return;
}
// Cant validate here, validate in drop item events...
goodie.setItem(item);
try {
goodie.update(false);
goodie.updateLore(item.getItemStack());
} catch (CivException e) {
e.printStackTrace();
}
}
@EventHandler(ignoreCancelled = true)
public void onDespawn(ItemDespawnEvent event) {
Item item = event.getEntity();
ItemStack is = item.getItemStack();
if (!((modManager.isArmorViable(is) || modManager.isToolViable(is) || modManager.isWandViable(is))
|| (MineTinker.getPlugin().getConfig().getBoolean("ItemBehaviour.ForModItems")
&& modManager.isModifierItem(is)))) {
return;
}
if (MineTinker.getPlugin().getConfig().getBoolean("ItemBehaviour.SetPersistent")) {
event.setCancelled(true);
item.setTicksLived(1);
}
}
/**
* Effect if a player drops an item
*
* @param event the event
*/
@EventHandler(ignoreCancelled = true)
public void effect(PlayerDropItemEvent event) {
Item item = event.getItemDrop();
ItemStack tool = item.getItemStack();
if (!(modManager.isArmorViable(tool) || modManager.isToolViable(tool) || modManager.isWandViable(tool))) {
return;
}
if (!modManager.hasMod(tool, this)) {
return;
}
if (toolDroppable) {
return;
}
ChatWriter.logModifier(event.getPlayer(), event, this, tool, "Tool not droppable");
event.setCancelled(true);
}
@Override
public boolean removeDupe() {
if (this.item == null) {
Util.debugLog("Warning: Trying to removeDupe for a null display shop.");
return false;
}
boolean removed = false;
// Chunk chunk = shop.getLocation().getChunk();
for (Entity entity : item.getNearbyEntities(1.5, 1.5, 1.5)) {
if (entity.getType() != EntityType.DROPPED_ITEM) {
continue;
}
Item eItem = (Item) entity;
UUID displayUUID = this.item.getUniqueId();
if (!eItem.getUniqueId().equals(displayUUID)) {
if (DisplayItem.checkIsTargetShopDisplay(eItem.getItemStack(), this.shop)) {
Util.debugLog(
"Removing a duped ItemEntity " + eItem.getUniqueId() + " at " + eItem.getLocation());
entity.remove();
removed = true;
}
}
}
return removed;
}
@Override
public void safeGuard(@NotNull Entity entity) {
if (!(entity instanceof Item)) {
Util.debugLog("Failed to safeGuard " + entity.getLocation() + ", cause target not a Item");
return;
}
Item item = (Item) entity;
// Set item protect in the armorstand's hand
if (plugin.getConfig().getBoolean("shop.display-item-use-name")) {
item.setCustomName(Util.getItemStackName(this.originalItemStack));
item.setCustomNameVisible(true);
} else {
item.setCustomNameVisible(false);
}
item.setPickupDelay(Integer.MAX_VALUE);
item.setSilent(true);
item.setPortalCooldown(Integer.MAX_VALUE);
item.setVelocity(new Vector(0, 0.1, 0));
}
@Test
public void shouldTeleportBecauseSameGroup() {
// given
Group group = mockGroup("test_group", GameMode.SURVIVAL, false);
Item entity = mock(Item.class);
World world = mock(World.class);
given(world.getName()).willReturn("test_group");
Location from = new Location(world, 1, 2, 3);
World worldNether = mock(World.class);
given(worldNether.getName()).willReturn("test_group_nether");
Location to = new Location(worldNether, 1, 2, 3);
given(groupManager.getGroupFromWorld("test_group")).willReturn(group);
given(groupManager.getGroupFromWorld("test_group_nether")).willReturn(group);
EntityPortalEvent event = new EntityPortalEvent(entity, from, to, mock(TravelAgent.class));
// when
listener.onEntityPortalTeleport(event);
// then
assertThat(event.isCancelled(), equalTo(false));
}
public static Item itemDrop(Player player, ItemStack itemStack, double bulletSpread, double radius) {
Location location = player.getLocation().add(0.0D, 1.5D, 0.0D);
Item item = player.getWorld().dropItem(location, itemStack);
double yaw = Math.toRadians((double)(-player.getLocation().getYaw() - 90.0F));
double pitch = Math.toRadians((double)(-player.getLocation().getPitch()));
double x;
double y;
double z;
if (bulletSpread > 0.0D) {
double[] spread = new double[]{1.0D, 1.0D, 1.0D};
IntStream.range(0, 3).forEach((t) -> {
spread[t] = (Numbers.getRandom().nextDouble() - Numbers.getRandom().nextDouble()) * bulletSpread * 0.1D;
});
x = Math.cos(pitch) * Math.cos(yaw) + spread[0];
y = Math.sin(pitch) + spread[1];
z = -Math.sin(yaw) * Math.cos(pitch) + spread[2];
} else {
x = Math.cos(pitch) * Math.cos(yaw);
y = Math.sin(pitch);
z = -Math.sin(yaw) * Math.cos(pitch);
}
Vector dirVel = new Vector(x, y, z);
item.setVelocity(dirVel.normalize().multiply(radius));
return item;
}
@Test
public void shouldTeleportBecauseSameGroup() {
// given
Group group = mockGroup("test_group", GameMode.SURVIVAL, false);
Item entity = mock(Item.class);
World world = mock(World.class);
given(world.getName()).willReturn("test_group");
Location from = new Location(world, 1, 2, 3);
World worldNether = mock(World.class);
given(worldNether.getName()).willReturn("test_group_nether");
Location to = new Location(worldNether, 1, 2, 3);
given(groupManager.getGroupFromWorld("test_group")).willReturn(group);
given(groupManager.getGroupFromWorld("test_group_nether")).willReturn(group);
EntityPortalEvent event = new EntityPortalEvent(entity, from, to, mock(TravelAgent.class));
// when
listener.onEntityPortalTeleport(event);
// then
assertThat(event.isCancelled(), equalTo(false));
}
@EventHandler
public void playerInteract(final PlayerInteractEvent event) {
if(event.getAction() == Action.PHYSICAL
|| !(Gizmos.gizmoMap.get(event.getPlayer()) instanceof GunGizmo)
|| event.getItem() == null || event.getItem().getType() != this.getIcon()) return;
final Player player = event.getPlayer();
RaindropUtil.giveRaindrops(Users.playerId(player), -1, new RaindropResult() {
@Override
public void run() {
if(success) {
Vector velocity = player.getLocation().getDirection().multiply(1.75D);
Item item = player.getWorld().dropItem(event.getPlayer().getEyeLocation(), new ItemStack(Material.GHAST_TEAR));
item.setVelocity(velocity);
item.setTicksLived((5 * 60 * 20) - (5 * 20)); // 5 minutes - 5 seconds
items.put(item, player.getUniqueId());
} else {
player.sendMessage(ChatColor.RED + LobbyTranslations.get().t("gizmo.gun.empty", player));
player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1f, 1f);
}
}
}, null, false, true, false);
}
/**
* Prevents enhanced item from dropping.
*
* @param e
*/
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void onItemDrop(PlayerDropItemEvent e) {
Item droppedItem = e.getItemDrop();
ItemStack DroppedItemStack = droppedItem.getItemStack();
Player p = e.getPlayer();
// Checks if the item is a bounded item
if ((DroppedItemStack.hasItemMeta()) && (DroppedItemStack.getItemMeta()
.getLore() != null)) {
if (DroppedItemStack.getItemMeta().getLore().contains(Util.UNIQUEID + Util.toColor(
SettingsManager.lang.getString("lore.untradeableLore")))) {
e.setCancelled(true);
Util.sendMessage(SettingsManager.lang.getString(
"messages.noDrop"), p);
}
}
}
private void insertItem(Player p, Block b) {
ItemStack hand = p.getInventory().getItemInMainHand();
ItemStack stack = new CustomItem(hand, 1);
if (p.getGameMode() != GameMode.CREATIVE) {
ItemUtils.consumeItem(hand, false);
}
String nametag = ItemUtils.getItemName(stack);
Item entity = b.getWorld().dropItem(b.getLocation().add(0.5, 1.2, 0.5), new CustomItem(stack, "&5&dALTAR &3Probe - &e" + System.nanoTime()));
entity.setVelocity(new Vector(0, 0.1, 0));
SlimefunUtils.markAsNoPickup(entity, "altar_item");
entity.setCustomNameVisible(true);
entity.setCustomName(nametag);
p.playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.3F, 0.3F);
}
@EventHandler(priority = EventPriority.MONITOR)
public void OnChunkUnload(ChunkUnloadEvent event) {
BonusGoodie goodie;
for (Entity entity : event.getChunk().getEntities()) {
if (!(entity instanceof Item)) {
continue;
}
goodie = CivGlobal.getBonusGoodie(((Item)entity).getItemStack());
if (goodie == null) {
continue;
}
goodie.replenish(((Item)entity).getItemStack(), (Item)entity, null, null);
}
}
@EventHandler(priority=EventPriority.HIGHEST, ignoreCancelled=true)
public void StopDrops(PlayerDropItemEvent event)
{
Player player = event.getPlayer();
Item item = event.getItemDrop();
if(item != null)
{
ItemStack stack = item.getItemStack();
if(stack != null)
{
if(KitUtils.isSoulbound(stack))
{
player.playSound(player.getLocation(), Sound.BLAZE_HIT, 1.0F, 0.3F);
event.getItemDrop().remove();
}
}
}
}
private void rotateItem(Object itemObject, Vector vector, EliteMobEntity eliteMobEntity) {
Item item = (Item) itemObject;
if (!item.isValid())
return;
Location currentLocation = item.getLocation().clone();
Location newLocation = eliteMobEntity.getLivingEntity().getLocation().clone().add(new Vector(0, 1, 0)).add(vector);
// if (currentLocation.distanceSquared(newLocation) > Math.pow(3, 2)) {
// item.teleport(newLocation);
// item.setVelocity(new Vector(0.01, 0.01, 0.01));
// return;
// }
Vector movementVector = (newLocation.subtract(currentLocation)).toVector();
movementVector = movementVector.multiply(0.3);
// if (Math.abs(movementVector.getX()) > 3 || Math.abs(movementVector.getY()) > 3 || Math.abs(movementVector.getZ()) > 3) {
// item.teleport(newLocation);
// } else {
item.setVelocity(movementVector);
// }
}
public void remove(Item item) {
if (maxSpawnedResources > 0 && spawnedItems.contains(item)) {
spawnedItems.remove(item);
if (spawnerIsFullHologram && maxSpawnedResources > spawnedItems.size()) {
spawnerIsFullHologram = false;
rerenderHologram = true;
}
}
}
@EventHandler(ignoreCancelled = true)
public void onItemDrop(PlayerDropItemEvent event) {
if (MineTinker.getPlugin().getConfig().getBoolean("ItemBehaviour.DisableDroppingBehaviour")) {
return;
}
Item item = event.getItemDrop();
ItemStack is = item.getItemStack();
boolean isMineTinker = false;
if (MineTinker.getPlugin().getConfig().getBoolean("ItemBehaviour.ForModItems")) {
isMineTinker = modManager.isModifierItem(is);
}
if (modManager.isArmorViable(is) || modManager.isToolViable(is) || modManager.isWandViable(is)) {
isMineTinker = true;
}
if (!isMineTinker) {
return;
}
if (MineTinker.getPlugin().getConfig().getBoolean("ItemBehaviour.ShowName") && is.getItemMeta() != null) {
item.setCustomName(is.getItemMeta().getDisplayName());
item.setCustomNameVisible(true);
}
if (MineTinker.getPlugin().getConfig().getBoolean("ItemBehaviour.SetGlowing")) {
item.setGlowing(true);
}
if (MineTinker.getPlugin().getConfig().getBoolean("ItemBehaviour.SetInvulnerable")) {
item.setInvulnerable(true);
}
}
@EventHandler
public void effect(BlockDropItemEvent event) {
Player player = event.getPlayer();
ItemStack tool = player.getInventory().getItemInMainHand();
if (!player.hasPermission("minetinker.modifiers.directing.use")) {
return;
}
if (!modManager.isToolViable(tool) || !modManager.hasMod(tool, this)) {
return;
}
Iterator<Item> itemIterator = event.getItems().iterator();
while (itemIterator.hasNext()) {
Item item = itemIterator.next();
HashMap<Integer, ItemStack> refusedItems = player.getInventory().addItem(item.getItemStack());
if (!refusedItems.isEmpty()) {
for (ItemStack itemStack : refusedItems.values()) {
player.getWorld().dropItem(player.getLocation(), itemStack);
}
}
itemIterator.remove();
}
Location loc = event.getBlock().getLocation();
ChatWriter.logModifier(player, event, this, tool,
String.format("Block(%d/%d/%d)", loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onItemMerge(ItemMergeEvent e) {
if (plugin.cfg.dropProtectMode == DropProtectMode.OFF) return;
Item ent = e.getEntity();
Item target = e.getTarget();
if (items.getIfPresent(ent.getEntityId()) != null && items.getIfPresent(target.getEntityId()) == null) {
items.put(target.getEntityId(), items.getIfPresent(ent.getEntityId()));
} else if (items.getIfPresent(ent.getEntityId()) == null && items.getIfPresent(target.getEntityId()) != null) {
items.put(target.getEntityId(), items.getIfPresent(target.getEntityId()));//Refresh
} else if (items.getIfPresent(ent.getEntityId()) != null && items.getIfPresent(target.getEntityId()) != null && items.getIfPresent(ent.getEntityId()) != items.getIfPresent(target.getEntityId())) {
e.setCancelled(true);
}
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void player(PlayerFishEvent event) {
if (DisplayItem.getNowUsing() != DisplayType.REALITEM) {
return;
}
if (event.getState() != State.CAUGHT_ENTITY) {
return;
}
if (event.getCaught() == null) {
return;
}
if (event.getCaught().getType() != EntityType.DROPPED_ITEM) {
return;
}
final Item item = (Item) event.getCaught();
final ItemStack is = item.getItemStack();
if (!DisplayItem.checkIsGuardItemStack(is)) {
return;
}
// item.remove();
event.getHook().remove();
// event.getCaught().remove();
event.setCancelled(true);
sendAlert(
"[DisplayGuard] Player "
+ event.getPlayer().getName()
+ " trying hook item use Fishing Rod, QuickShop already removed it.");
Util.inventoryCheck(event.getPlayer().getInventory());
}
@Override
public boolean checkIsShopEntity(@NotNull Entity entity) {
if (!(entity instanceof Item)) {
return false;
}
return DisplayItem.checkIsGuardItemStack(((Item) entity).getItemStack());
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
public void onDrop(PlayerDropItemEvent dropItemEvent) {
Item itemDrop = dropItemEvent.getItemDrop();
ItemStack mapItem = itemDrop.getItemStack();
if (isOurGraph(mapItem)) {
mapItem.setAmount(0);
}
}
public void setItem(Item item) {
this.item = item;
if (item != null) {
// If we are an entity on the ground, we cannot have a holder or be in a frame.
this.frameStore = null;
holderStore = null;
}
}
public void dropItem(Location dropLocation, ItemStack itemStack) {
Item item = this.game.getRegion().getWorld().dropItemNaturally(dropLocation, itemStack);
item.setPickupDelay(0);
if (this.spread != 1.0) {
item.setVelocity(item.getVelocity().multiply(this.spread));
}
}
@EventHandler
public void onEntityRemove(EntityRemoveEvent e) {
Iterator<Entity> iterator = e.getEntityList().iterator();
while (iterator.hasNext()) {
Entity n = iterator.next();
if (n instanceof Item && SlimefunUtils.hasNoPickupFlag((Item) n)) {
iterator.remove();
}
}
}
@Override
public void onTrigger(final Item item) {
item.setFireTicks(50);
int jumpFuse = getFuse() - 10;
if (jumpFuse > 0) {
Bukkit.getScheduler().runTaskLater(getPlugin(), new Runnable() {
@Override
public void run() {
if (!item.isDead()) {
item.setVelocity(item.getVelocity().setY(0.5));
}
}
}, jumpFuse);
}
}
@Override
public Item dropItem(final Location location, final ItemStack item) {
return TaskManager.IMP.sync(new RunnableVal<Item>() {
@Override
public void run(Item value) {
this.value = parent.dropItem(location, item);
}
});
}
public Item findItem(Block b) {
for (Entity n : b.getChunk().getEntities()) {
if (n instanceof Item && b.getLocation().add(0.5, 1.2, 0.5).distanceSquared(n.getLocation()) < 0.5D && n.getCustomName() != null) {
return (Item) n;
}
}
return null;
}