use of com.sk89q.worldedit.util.TargetBlock 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());
}
}
Aggregations