package org.arkham.cs.events;
import org.arkham.cs.CosmeticSuite;
import org.arkham.cs.cosmetics.TrailingBlock;
import org.arkham.cs.handler.PlayerHandler;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.player.PlayerToggleFlightEvent;
public class FlyListener implements Listener {
public FlyListener(){
CosmeticSuite cs = CosmeticSuite.getInstance();
cs.getServer().getPluginManager().registerEvents(this, cs);
}
@EventHandler
public void onFly(PlayerToggleFlightEvent event){
Player player = event.getPlayer();
if(event.isFlying()){
TrailingBlock tb = TrailingBlock.get(player);
if(tb == null){
tb = new TrailingBlock(player);
return;
}
if(!tb.isInUse()){
return;
}
tb.setInUse(false);
return;
} else {
TrailingBlock tb = TrailingBlock.get(player);
if(tb == null){
return;
}
if(tb.isInUse()){
return;
}
tb.setInUse(true);
}
if(player.isOp()){
return;
}
if(player.hasPermission("cosmetics.*")){
return;
}
boolean serverIsInFly = CosmeticSuite.getInstance().getConfig().getBoolean("flyable", false);
if(serverIsInFly){
if(PlayerHandler.isHero(player) || PlayerHandler.isSuperHero(player)){
return;
}
if(PlayerHandler.isNothingSpecial(player)){
if(event.isFlying()){
event.setCancelled(true);
}
}
return;
}
if(player.hasMetadata("cosmetics-fly")){
return;
}
event.setCancelled(true);
}
@EventHandler
public void onChange(EntityChangeBlockEvent event){
if(event.getEntityType() != EntityType.FALLING_BLOCK){
return;
}
FallingBlock block = (FallingBlock) event.getEntity();
if(block.hasMetadata("flying")){
event.setCancelled(true);
block.remove();
TrailingBlock.blocks.remove(block);
return;
}
}
}