use of org.spongepowered.api.entity.Item in project Skree by Skelril.
the class CursedMineListener method onItemDrop.
@Listener
public void onItemDrop(DropItemEvent.Destruct event, @Named(NamedCause.SOURCE) BlockSpawnCause spawnCause, @Named(NamedCause.NOTIFIER) Player player) {
if (!Probability.getChance(4)) {
return;
}
BlockSnapshot blockSnapshot = spawnCause.getBlockSnapshot();
Optional<Location<World>> optLocation = blockSnapshot.getLocation();
if (!optLocation.isPresent()) {
return;
}
Location<World> loc = optLocation.get();
Optional<CursedMineInstance> optInst = manager.getApplicableZone(loc);
if (!optInst.isPresent()) {
return;
}
CursedMineInstance inst = optInst.get();
if (!inst.hasrecordForPlayerAt(player, loc)) {
return;
}
List<ItemStackSnapshot> itemStacks = new ArrayList<>();
Iterator<Entity> entityIterator = event.getEntities().iterator();
while (entityIterator.hasNext()) {
Entity entity = entityIterator.next();
if (entity instanceof Item) {
ItemStackSnapshot snapshot = ((Item) entity).item().get();
itemStacks.add(snapshot);
entityIterator.remove();
}
}
int times = 1;
Optional<ModifierService> optService = Sponge.getServiceManager().provide(ModifierService.class);
if (optService.isPresent()) {
ModifierService service = optService.get();
if (service.isActive(Modifiers.DOUBLE_CURSED_ORES)) {
times *= 2;
}
}
for (ItemStackSnapshot stackSnapshot : itemStacks) {
int quantity = Math.min(stackSnapshot.getCount() * Probability.getRangedRandom(4, 8), stackSnapshot.getType().getMaxStackQuantity());
for (int i = 0; i < times; ++i) {
ItemStack stack = stackSnapshot.createStack();
stack.setQuantity(quantity);
player.getInventory().offer(stack);
}
}
}
use of org.spongepowered.api.entity.Item in project Skree by Skelril.
the class FixedPointItemDropper method dropItem.
@Override
public void dropItem(ItemStackSnapshot snapshot, Cause cause) {
Item item = (Item) getExtent().createEntity(EntityTypes.ITEM, getPos());
item.offer(Keys.REPRESENTED_ITEM, snapshot);
item.setVelocity(new Vector3d(0, 0, 0));
getExtent().spawnEntity(item, cause);
}
use of org.spongepowered.api.entity.Item in project Skree by Skelril.
the class ItemDropper method dropItem.
public void dropItem(ItemStackSnapshot snapshot, Cause cause) {
Item item = (Item) getExtent().createEntity(EntityTypes.ITEM, getPos());
item.offer(Keys.REPRESENTED_ITEM, snapshot);
getExtent().spawnEntity(item, cause);
}
use of org.spongepowered.api.entity.Item in project ClearMob by axle2005.
the class ClearEntity method run.
public static void run(ClearMob plugin, EntityType tile, Collection<World> worlds, CommandSource src) {
int removedentities = 0;
Collection<Entity> e = new ArrayList<Entity>();
for (World world : worlds) {
for (Entity entity : world.getEntities()) {
e.add(entity);
}
}
if (!e.isEmpty()) {
for (Entity entity : e) {
if (!(entity instanceof Item) && !(entity instanceof Player) && !(entity instanceof ExperienceOrb)) {
if ((entity.getType().equals(tile))) {
entity.getLocation().removeBlock(Cause.source(Sponge.getPluginManager().fromInstance(plugin).get()).build());
removedentities++;
}
}
}
}
feedback(plugin, src, removedentities);
}
use of org.spongepowered.api.entity.Item in project SpongeCommon by SpongePowered.
the class SpongeCommonEventFactory method callInventoryPickupEvent.
public static ItemStack callInventoryPickupEvent(IInventory inventory, EntityItem item, ItemStack stack) {
try (StackFrame frame = Sponge.getCauseStackManager().pushCauseFrame()) {
frame.pushCause(inventory);
ItemStackSnapshot snapshot = ItemStackUtil.snapshotOf(stack);
ChangeInventoryEvent.Pickup.Pre event = SpongeEventFactory.createChangeInventoryEventPickupPre(frame.getCurrentCause(), Optional.empty(), Collections.singletonList(snapshot), snapshot, ((Item) item), ((Inventory) inventory));
SpongeImpl.postEvent(event);
if (event.isCancelled()) {
return stack;
}
int size = inventory.getSizeInventory();
ItemStack[] prevInventory = new ItemStack[size];
for (int i = 0; i < size; i++) {
prevInventory[i] = inventory.getStackInSlot(i);
}
if (event.getCustom().isPresent()) {
if (event.getCustom().get().isEmpty()) {
return ItemStack.EMPTY;
}
boolean fullTransfer = true;
for (ItemStackSnapshot snap : event.getCustom().get()) {
ItemStack stackToAdd = ItemStackUtil.fromSnapshotToNative(snap);
ItemStack remaining = TileEntityHopper.putStackInInventoryAllSlots(null, inventory, stackToAdd, null);
if (!remaining.isEmpty()) {
fullTransfer = false;
break;
}
}
if (!fullTransfer) {
for (int i = 0; i < prevInventory.length; i++) {
inventory.setInventorySlotContents(i, prevInventory[i]);
}
return stack;
}
if (callInventoryPickupEvent(inventory, prevInventory)) {
return ItemStack.EMPTY;
}
return stack;
} else {
ItemStack remainder = TileEntityHopper.putStackInInventoryAllSlots(null, inventory, stack, null);
if (callInventoryPickupEvent(inventory, prevInventory)) {
return remainder;
}
return stack;
}
}
}
Aggregations