use of org.spongepowered.api.event.Listener in project Skree by Skelril.
the class AntiCactusFarmListener method onItemDrop.
@Listener
public void onItemDrop(DropItemEvent.Destruct event, @Named(NamedCause.SOURCE) BlockSpawnCause spawnCause) {
if (event.getCause().containsType(Player.class)) {
return;
}
BlockSnapshot blockSnapshot = spawnCause.getBlockSnapshot();
Optional<Location<World>> optLocation = blockSnapshot.getLocation();
if (!optLocation.isPresent()) {
return;
}
Location<World> location = optLocation.get();
while (true) {
location = location.add(0, -1, 0);
if (location.getBlockType() != BlockTypes.CACTUS) {
break;
}
location.setBlockType(BlockTypes.AIR, Cause.source(SkreePlugin.container()).build());
}
}
use of org.spongepowered.api.event.Listener in project Skree by Skelril.
the class GoldRushListener method onChestClose.
@Listener
public void onChestClose(InteractInventoryEvent.Close event) {
Inventory inventory = event.getTargetInventory();
if (inventory instanceof ContainerChest) {
IInventory chestInv = ((ContainerChest) inventory).getLowerChestInventory();
if (chestInv instanceof ILockableContainer) {
String lockCode = ((ILockableContainer) chestInv).getLockCode().getLock();
Optional<Player> optPlayer = Optional.ofNullable(tileEntityClaimMap.remove(lockCode));
if (optPlayer.isPresent()) {
Player player = optPlayer.get();
((ILockableContainer) chestInv).setLockCode(LockCode.EMPTY_CODE);
Optional<GoldRushInstance> optInst = manager.getApplicableZone(player);
if (!optInst.isPresent()) {
return;
}
// TODO Sponge port
GoldRushInstance inst = optInst.get();
List<org.spongepowered.api.item.inventory.ItemStack> toEvaluate = new ArrayList<>();
ArrayDeque<org.spongepowered.api.item.inventory.ItemStack> toReturn = new ArrayDeque<>();
for (int i = 0; i < chestInv.getSizeInventory(); ++i) {
ItemStack stack = chestInv.getStackInSlot(i);
if (stack == ItemStack.EMPTY) {
continue;
}
if (stack.getItem() instanceof CofferItem) {
toEvaluate.add(tf(stack));
} else {
toReturn.add(tf(stack));
}
chestInv.setInventorySlotContents(i, ItemStack.EMPTY);
}
BigDecimal value = BigDecimal.ZERO;
for (org.spongepowered.api.item.inventory.ItemStack stack : toEvaluate) {
value = value.add(new BigDecimal(CofferValueMap.inst().getValue(Collections.singleton(stack)).orElse(BigInteger.ZERO)));
}
inst.cofferRisk.put(player.getUniqueId(), value);
for (Inventory slot : player.getInventory().slots()) {
if (toReturn.isEmpty()) {
break;
}
if (slot.size() == 0) {
slot.set(toReturn.poll());
}
}
if (!toReturn.isEmpty()) {
new ItemDropper(player.getLocation()).dropStacks(toReturn, SpawnTypes.PLUGIN);
}
player.sendMessage(Text.of(TextColors.YELLOW, "You are now risking ", format(value), " coffers."));
MessageChannel targetChannel = inst.getPlayerMessageChannel(PlayerClassifier.SPECTATOR);
targetChannel.send(Text.of(TextColors.YELLOW, "Group risk of ", format(inst.getTotalRisk()), " coffers."));
targetChannel.send(Text.of(TextColors.YELLOW, "Risk of lava ", inst.getChanceOfLava(), " / 100."));
targetChannel.send(Text.of(TextColors.YELLOW, "Security system delay ", inst.getBaseTime(), " +/- ", inst.getTimeVariance(), " seconds."));
}
}
}
}
use of org.spongepowered.api.event.Listener in project Skree by Skelril.
the class GoldRushListener method onPlayerInteractEvent.
@Listener(order = Order.FIRST)
public void onPlayerInteractEvent(InteractBlockEvent.Secondary.MainHand event, @Root Player player) {
Optional<GoldRushInstance> optInst = manager.getApplicableZone(player);
if (!optInst.isPresent()) {
return;
}
GoldRushInstance inst = optInst.get();
BlockSnapshot snapshot = event.getTargetBlock();
BlockState state = snapshot.getState();
if (!snapshot.getLocation().isPresent()) {
return;
}
Location<World> targetBlock = snapshot.getLocation().get();
if (state.getType() == BlockTypes.WALL_SIGN && inst.getLockLocations().contains(targetBlock)) {
Optional<TileEntity> optTileEnt = snapshot.getLocation().get().getTileEntity();
if (!optTileEnt.isPresent()) {
return;
}
TileEntity tileEntity = optTileEnt.get();
Optional<List<Text>> optTexts = tileEntity.get(Keys.SIGN_LINES);
if (!optTexts.isPresent()) {
return;
}
List<Text> texts = optTexts.get();
boolean unlocked = false;
String text = texts.get(1).toPlain().toLowerCase();
NonNullList<ItemStack> itemStacks = tf(player).inventory.mainInventory;
for (int i = 0; i < itemStacks.size(); ++i) {
ItemStack is = itemStacks.get(i);
if (is == ItemStack.EMPTY || is.getItem() != CustomItemTypes.GOLD_RUSH_KEY) {
continue;
}
if (text.contains("blue")) {
if (is.getItemDamage() != 1) {
continue;
}
} else if (text.contains("red")) {
if (is.getItemDamage() != 0) {
continue;
}
} else {
continue;
}
unlocked = true;
itemStacks.set(i, ItemStack.EMPTY);
break;
}
if (unlocked) {
tf(player).inventoryContainer.detectAndSendChanges();
texts.set(2, Text.of("Locked"));
texts.set(3, Text.of("- Unlocked -"));
tileEntity.offer(Keys.SIGN_LINES, texts);
}
} else if (state.getType() == BlockTypes.LEVER) {
Task.builder().execute(() -> {
if (inst.checkLevers()) {
inst.completeGame();
}
}).delayTicks(1).submit(SkreePlugin.inst());
} else if (targetBlock.equals(inst.getRewardChestLoc()) && inst.isComplete()) {
event.setUseItemResult(Tristate.FALSE);
event.setUseBlockResult(Tristate.FALSE);
player.sendMessage(Text.of(TextColors.YELLOW, "You have successfully robbed the bank!"));
inst.payPlayer(player);
} else if (!inst.isLocked()) {
if (state.getType() == BlockTypes.STONE_BUTTON) {
inst.tryToStart();
}
}
}
use of org.spongepowered.api.event.Listener in project Skree by Skelril.
the class SkyWarsListener method onInteract.
@Listener
public void onInteract(InteractBlockEvent event, @First Player player) {
Optional<SkyWarsInstance> optInst = manager.getApplicableZone(player);
if (!optInst.isPresent()) {
return;
}
SkyWarsInstance inst = optInst.get();
if (inst.getState() != SkyWarsState.IN_PROGRESS) {
return;
}
Optional<SkyWarsPlayerData> optPlayerData = inst.getPlayerData(player);
if (!optPlayerData.isPresent()) {
return;
}
SkyWarsPlayerData playerData = optPlayerData.get();
Optional<ItemStack> optStack = player.getItemInHand(HandTypes.MAIN_HAND);
if (!optStack.isPresent()) {
return;
}
ItemStack stack = optStack.get();
if (stack.getItem() == CustomItemTypes.SKY_FEATHER) {
Vector3d vel = EntityDirectionUtil.getFacingVector(player);
Optional<SkyFeather.Data> optData = SkyFeather.getDataFor(stack);
if (!optData.isPresent()) {
return;
}
SkyFeather.Data data = optData.get();
double radius = data.radius;
double flight = data.flight;
double pushBack = data.pushBack;
if (event instanceof InteractBlockEvent.Primary.MainHand) {
if (!playerData.canFly()) {
return;
}
vel = vel.mul(flight);
player.setVelocity(vel);
playerData.stopFlight(250);
} else if (event instanceof InteractBlockEvent.Secondary.MainHand) {
if (!playerData.canPushBack()) {
return;
}
vel = vel.mul(pushBack * 2);
SpongePlayer spongePlayer = SpongeWorldEdit.inst().wrapPlayer(player);
Collection<Entity> possibleTargets = inst.getContained(Player.class, Chicken.class);
possibleTargets.remove(player);
ParticleEffect radiationEffect = ParticleEffect.builder().type(ParticleTypes.FLAME).quantity(1).build();
TargetBlock targetBlock = new TargetBlock(spongePlayer, 50, .2);
while (targetBlock.getNextBlock() != null) {
BlockWorldVector weBlock = targetBlock.getCurrentBlock();
Location<World> loc = new Location<>(inst.getRegion().getExtent(), weBlock.getX(), weBlock.getY(), weBlock.getZ());
for (int i = 0; i < 10; ++i) {
inst.getRegion().getExtent().spawnParticles(radiationEffect, loc.getPosition().add(Probability.getRangedRandom(0, 1.0), Probability.getRangedRandom(0, 1.0), Probability.getRangedRandom(0, 1.0)));
}
for (Entity aEntity : possibleTargets) {
if (aEntity.getLocation().getPosition().distanceSquared(loc.getPosition()) <= Math.pow(radius, 2)) {
if (aEntity instanceof Player) {
Player aPlayer = (Player) aEntity;
if (inst.isFriendlyFire(player, aPlayer)) {
continue;
}
// Handle Sender
playerData.stopPushBack(250);
player.sendMessage(Text.of(TextColors.YELLOW, "You push back: ", aPlayer.getName(), "!"));
// Handle Target
aPlayer.setVelocity(vel);
Optional<SkyWarsPlayerData> optAPlayerData = inst.getPlayerData(aPlayer);
if (optAPlayerData.isPresent()) {
SkyWarsPlayerData aPlayerData = optAPlayerData.get();
if (aPlayerData.canDefrost()) {
aPlayerData.stopFlight();
}
}
} else {
inst.awardPowerup(player, stack);
aEntity.remove();
}
}
}
}
}
tf(stack).attemptDamageItem(1, new Random());
}
}
use of org.spongepowered.api.event.Listener in project Skree by Skelril.
the class DropClearServiceImpl method onItemSpawn.
@Listener(order = Order.POST)
public void onItemSpawn(SpawnEntityEvent event) {
event.getEntities().stream().filter(DropClearServiceImpl.CHECK_PREDICATE).forEach((e) -> {
World targetWorld = e.getWorld();
entityCount.merge(targetWorld, 1L, (a, b) -> a + b);
});
entityCount.forEach((world, count) -> {
if (count > autoAmt) {
checkedCleanup(world);
}
});
}
Aggregations