use of org.spongepowered.api.item.inventory.ItemStack in project Skree by Skelril.
the class Luminositor method onRightClick.
@Listener
public void onRightClick(InteractBlockEvent.Secondary.MainHand event, @First Player player) {
Optional<ItemStack> optHeldItem = player.getItemInHand(HandTypes.MAIN_HAND);
if (optHeldItem.isPresent()) /* && optClickedPosition.isPresent() */
{
if (this.equals(optHeldItem.get().getItem())) {
Direction dir = event.getTargetSide();
Optional<Location<World>> optTargetBlockLoc = event.getTargetBlock().getLocation();
if (!optTargetBlockLoc.isPresent()) {
return;
}
Location<World> targetBlockLoc = optTargetBlockLoc.get();
Vector3i targPos = targetBlockLoc.getBlockPosition().add(dir.toVector3d().toInt());
Location<World> trueTargBlock = new Location<>(targetBlockLoc.getExtent(), targPos);
int lightLevel = LightLevelUtil.getMaxLightLevel(trueTargBlock).get();
TextColor color;
if (lightLevel >= 12) {
color = TextColors.GREEN;
} else if (lightLevel >= 8) {
color = TextColors.RED;
} else {
color = TextColors.DARK_RED;
}
// TODO system message.color(color)
player.sendMessage(Text.of(TextColors.YELLOW, "Light level: ", color, lightLevel));
event.setUseBlockResult(Tristate.FALSE);
}
}
}
use of org.spongepowered.api.item.inventory.ItemStack in project Skree by Skelril.
the class CursedMineInstance method ghost.
public void ghost(final Player player, BlockType blockID) {
if (Probability.getChance(player.getLocation().getBlockY())) {
if (Probability.getChance(2)) {
switch(Probability.getRandom(6)) {
case 1:
player.sendMessage(Text.of(TextColors.YELLOW, "Caspher the friendly ghost drops some bread."));
new ItemDropper(player.getLocation()).dropStacks(Lists.newArrayList(newItemStack(ItemTypes.BREAD, Probability.getRandom(16))), SpawnTypes.DROPPED_ITEM);
break;
case 2:
player.sendMessage(Text.of(TextColors.YELLOW, "COOKIE gives you a cookie."));
new ItemDropper(player.getLocation()).dropStacks(Lists.newArrayList(newItemStack(ItemTypes.COOKIE)), SpawnTypes.DROPPED_ITEM);
break;
case 3:
player.sendMessage(Text.of(TextColors.YELLOW, "Caspher the friendly ghost appears."));
List<ItemStack> caspherLoot = new ArrayList<>();
for (int i = 0; i < 8; i++) {
caspherLoot.add(newItemStack(ItemTypes.IRON_INGOT, Probability.getRandom(64)));
caspherLoot.add(newItemStack(ItemTypes.GOLD_INGOT, Probability.getRandom(64)));
caspherLoot.add(newItemStack(ItemTypes.DIAMOND, Probability.getRandom(64)));
}
new ItemDropper(player.getLocation()).dropStacks(caspherLoot, SpawnTypes.DROPPED_ITEM);
break;
case 4:
player.sendMessage(Text.of(TextColors.YELLOW, "John gives you a new jacket."));
new ItemDropper(player.getLocation()).dropStacks(Lists.newArrayList(newItemStack(ItemTypes.LEATHER_CHESTPLATE)), SpawnTypes.DROPPED_ITEM);
break;
case 5:
player.sendMessage(Text.of(TextColors.YELLOW, "Tim teleports items to you."));
getContained(Item.class).forEach(i -> i.setLocation(player.getLocation()));
// Add in some extra drops just in case the loot wasn't very juicy
List<ItemStack> teleportLootExtras = Lists.newArrayList(newItemStack(ItemTypes.IRON_INGOT, Probability.getRandom(64)), newItemStack(ItemTypes.GOLD_INGOT, Probability.getRandom(64)), newItemStack(ItemTypes.DIAMOND, Probability.getRandom(64)));
new ItemDropper(player.getLocation()).dropStacks(teleportLootExtras, SpawnTypes.DROPPED_ITEM);
break;
case 6:
player.sendMessage(Text.of(TextColors.YELLOW, "Dan gives you a sparkling touch."));
ItemType sparkingType;
switch(Probability.getRandom(3)) {
case 1:
sparkingType = ItemTypes.IRON_INGOT;
break;
case 2:
sparkingType = ItemTypes.GOLD_INGOT;
break;
case 3:
sparkingType = ItemTypes.DIAMOND;
break;
default:
sparkingType = ItemTypes.REDSTONE;
break;
}
TimedRunnable inventoryFX = new TimedRunnable<>(new IntegratedRunnable() {
@Override
public boolean run(int times) {
new InventoryCurse(sparkingType, 64).accept(player);
return true;
}
@Override
public void end() {
}
}, 10);
inventoryFX.setTask(Task.builder().execute(inventoryFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
activeTask.merge(player, Lists.newArrayList(inventoryFX.getTask()), (a, b) -> {
a.addAll(b);
return a;
});
break;
default:
break;
}
} else {
switch(Probability.getRandom(11)) {
case 1:
if (Probability.getChance(4)) {
if (blockID == BlockTypes.DIAMOND_ORE) {
hitList.addPlayer(player);
player.sendMessage(Text.of(TextColors.RED, "You ignite fumes in the air!"));
EditSession ess = WorldEdit.getInstance().getEditSessionFactory().getEditSession(new WorldResolver(getRegion().getExtent()).getWorldEditWorld(), -1);
try {
Vector3d pos = player.getLocation().getPosition();
ess.fillXZ(new Vector(pos.getX(), pos.getY(), pos.getZ()), WorldEdit.getInstance().getBaseBlockFactory().getBaseBlock(BlockID.FIRE), 20, 20, true);
} catch (MaxChangedBlocksException ignored) {
}
for (int i = Probability.getRandom(24) + 20; i > 0; --i) {
final boolean untele = i == 11;
Task.builder().execute(() -> {
if (untele) {
recordSystem.revertByPlayer(player.getUniqueId());
hitList.remPlayer(player);
}
if (!contains(player))
return;
Vector3i pos = new PositionRandomizer(3).createPosition3i(player.getLocation().getPosition());
player.getLocation().getExtent().triggerExplosion(Explosion.builder().radius(3).location(player.getLocation().setPosition(pos.toDouble().add(.5, .5, .5))).shouldDamageEntities(true).canCauseFire(true).build(), Cause.source(SkreePlugin.container()).build());
}).delayTicks(12 * i).submit(SkreePlugin.inst());
}
} else {
hitList.addPlayer(player);
// player.chat("Who's a good ghost?!?!");
Task.builder().execute(() -> {
// player.chat("Don't hurt me!!!");
Task.builder().execute(() -> {
// player.chat("Nooooooooooo!!!");
TimedRunnable cannonFX = new TimedRunnable<>(new IntegratedRunnable() {
@Override
public boolean run(int times) {
new CannonCurse().accept(player);
return true;
}
@Override
public void end() {
}
}, 120);
cannonFX.setTask(Task.builder().execute(cannonFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
activeTask.merge(player, Lists.newArrayList(cannonFX.getTask()), (a, b) -> {
a.addAll(b);
return a;
});
}).delay(1, TimeUnit.SECONDS).submit(SkreePlugin.inst());
}).delay(1, TimeUnit.SECONDS).submit(SkreePlugin.inst());
}
break;
}
case 2:
player.sendMessage(Text.of(TextColors.RED, "Dave attaches to your soul..."));
for (int i = 20; i > 0; --i) {
Task.builder().execute(() -> {
if (!contains(player))
return;
player.offer(Keys.HEALTH, Probability.getRandom(Probability.getRandom(player.get(Keys.MAX_HEALTH).get())) - 1);
}).delayTicks(12 * i).submit(SkreePlugin.inst());
}
break;
case 3:
player.sendMessage(Text.of(TextColors.RED, "George plays with fire, sadly too close to you."));
TimedRunnable fireFX = new TimedRunnable<>(new IntegratedRunnable() {
@Override
public boolean run(int times) {
new FireCurse().accept(player);
return true;
}
@Override
public void end() {
}
}, 90);
fireFX.setTask(Task.builder().execute(fireFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
activeTask.merge(player, Lists.newArrayList(fireFX.getTask()), (a, b) -> {
a.addAll(b);
return a;
});
break;
case 4:
player.sendMessage(Text.of(TextColors.RED, "Simon says pick up sticks."));
List<ItemStack> sticks = new ArrayList<>();
for (int i = 0; i < tf(player).inventory.mainInventory.length * 1.5; i++) {
sticks.add(newItemStack(ItemTypes.STICK, 64));
}
new ItemDropper(player.getLocation()).dropStacks(sticks, SpawnTypes.DROPPED_ITEM);
break;
case 5:
player.sendMessage(Text.of(TextColors.RED, "Ben dumps out your backpack."));
TimedRunnable butterFingerFX = new TimedRunnable<>(new IntegratedRunnable() {
@Override
public boolean run(int times) {
new ButterFingersCurse().accept(player);
return true;
}
@Override
public void end() {
}
}, 20);
butterFingerFX.setTask(Task.builder().execute(butterFingerFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
activeTask.merge(player, Lists.newArrayList(butterFingerFX.getTask()), (a, b) -> {
a.addAll(b);
return a;
});
break;
case 6:
player.sendMessage(Text.of(TextColors.RED, "Merlin attacks with a mighty rage!"));
TimedRunnable merlinFX = new TimedRunnable<>(new IntegratedRunnable() {
@Override
public boolean run(int times) {
new MerlinCurse().accept(player);
return true;
}
@Override
public void end() {
}
}, 40);
merlinFX.setTask(Task.builder().execute(merlinFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
activeTask.merge(player, Lists.newArrayList(merlinFX.getTask()), (a, b) -> {
a.addAll(b);
return a;
});
break;
case 7:
player.sendMessage(Text.of(TextColors.RED, "Dave tells everyone that your mining!"));
MessageChannel.TO_PLAYERS.send(Text.of(TextColors.GOLD, player.getName() + " is mining in the cursed mine!!!"));
break;
case 8:
player.sendMessage(Text.of(TextColors.RED, "Dave likes your food."));
hitList.addPlayer(player);
TimedRunnable starvationFX = new TimedRunnable<>(new IntegratedRunnable() {
@Override
public boolean run(int times) {
new StarvationCurse().accept(player);
return true;
}
@Override
public void end() {
}
}, 40);
starvationFX.setTask(Task.builder().execute(starvationFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
activeTask.merge(player, Lists.newArrayList(starvationFX.getTask()), (a, b) -> {
a.addAll(b);
return a;
});
break;
case 9:
player.sendMessage(Text.of(TextColors.RED, "Hallow declares war on YOU!"));
for (int i = 0; i < Probability.getRangedRandom(10, 30); i++) {
Blaze blaze = (Blaze) getRegion().getExtent().createEntity(EntityTypes.BLAZE, player.getLocation().getPosition());
blaze.setTarget(player);
getRegion().getExtent().spawnEntity(blaze, Cause.source(SpawnCause.builder().type(SpawnTypes.BLOCK_SPAWNING).build()).build());
}
break;
case 10:
player.sendMessage(Text.of(TextColors.RED, "A legion of hell hounds appears!"));
for (int i = 0; i < Probability.getRangedRandom(10, 30); i++) {
Wolf wolf = (Wolf) getRegion().getExtent().createEntity(EntityTypes.WOLF, player.getLocation().getPosition());
wolf.setTarget(player);
getRegion().getExtent().spawnEntity(wolf, Cause.source(SpawnCause.builder().type(SpawnTypes.BLOCK_SPAWNING).build()).build());
}
break;
case 11:
if (blockID == BlockTypes.EMERALD_ORE) {
player.sendMessage(Text.of(TextColors.RED, "Dave got a chemistry set!"));
hitList.addPlayer(player);
TimedRunnable deadlyPotionFX = new TimedRunnable<>(new IntegratedRunnable() {
@Override
public boolean run(int times) {
new DeadlyPotionCurse().accept(player);
return true;
}
@Override
public void end() {
}
}, 2 * 60 * 30);
deadlyPotionFX.setTask(Task.builder().execute(deadlyPotionFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
activeTask.merge(player, Lists.newArrayList(deadlyPotionFX.getTask()), (a, b) -> {
a.addAll(b);
return a;
});
} else {
player.sendMessage(Text.of(TextColors.RED, "Dave says hi, that's not good."));
hitList.addPlayer(player);
TimedRunnable attackOfDaveFX = new TimedRunnable<>(new IntegratedRunnable() {
@Override
public boolean run(int times) {
new AttackOfDaveCurse().accept(player);
return true;
}
@Override
public void end() {
}
}, 2 * 60 * 30);
attackOfDaveFX.setTask(Task.builder().execute(attackOfDaveFX).interval(500, TimeUnit.MILLISECONDS).submit(SkreePlugin.inst()));
activeTask.merge(player, Lists.newArrayList(attackOfDaveFX.getTask()), (a, b) -> {
a.addAll(b);
return a;
});
}
break;
default:
break;
}
}
}
}
use of org.spongepowered.api.item.inventory.ItemStack 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.item.inventory.ItemStack in project Skree by Skelril.
the class CursedMineListener method onBlockBreak.
@Listener
public void onBlockBreak(ChangeBlockEvent.Break event, @Named(NamedCause.SOURCE) Player player) {
Optional<CursedMineInstance> optInst = manager.getApplicableZone(player);
if (!optInst.isPresent()) {
return;
}
CursedMineInstance inst = optInst.get();
Optional<ItemStack> optHeldItem = player.getItemInHand(HandTypes.MAIN_HAND);
if (!optHeldItem.isPresent()) {
event.setCancelled(true);
return;
}
for (Transaction<BlockSnapshot> block : event.getTransactions()) {
BlockType originalType = block.getOriginal().getState().getType();
if (cursedOres.contains(originalType)) {
// we were having some multi-firing problems
if (inst.recordBlockBreak(player, new BlockRecord(block.getOriginal()))) {
/*if (Probability.getChance(3000)) {
ChatUtil.send(player, "You feel as though a spirit is trying to tell you something...");
player.getInventory().addItem(BookUtil.Lore.Areas.theGreatMine());
}*/
ExperienceOrb xpOrb = (ExperienceOrb) player.getWorld().createEntity(EntityTypes.EXPERIENCE_ORB, block.getOriginal().getLocation().get().getPosition());
xpOrb.offer(Keys.CONTAINED_EXPERIENCE, (70 - player.getLocation().getBlockY()) / 2);
inst.eatFood(player);
inst.poison(player, 6);
inst.ghost(player, originalType);
}
} else if (stealableFluids.contains(originalType)) {
inst.recordBlockBreak(player, new BlockRecord(block.getOriginal()));
} else {
block.setCustom(block.getOriginal());
}
}
}
use of org.spongepowered.api.item.inventory.ItemStack in project Skree by Skelril.
the class ButterFingersCurse method accept.
@Override
public void accept(Player player) {
List<ItemStack> drops = new ArrayList<>();
while (true) {
Optional<ItemStack> optDrop = player.getInventory().poll();
if (!optDrop.isPresent()) {
break;
}
drops.add(optDrop.get());
}
Collections.shuffle(drops);
new ItemDropper(player.getLocation()).dropStacks(drops, SpawnTypes.DROPPED_ITEM);
}
Aggregations