arthurmaker

FreezeFactory from Hell v1.1 - Bukkit

Jun 20th, 2014
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.40 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.UUID;
  4.  
  5. import org.bukkit.Location;
  6. import org.bukkit.block.Block;
  7. import org.bukkit.block.BlockFace;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.event.EventHandler;
  10. import org.bukkit.event.Listener;
  11. import org.bukkit.event.player.PlayerToggleSprintEvent;
  12. import org.bukkit.plugin.Plugin;
  13. import org.bukkit.potion.PotionEffect;
  14. import org.bukkit.potion.PotionEffectType;
  15. import org.bukkit.scheduler.BukkitRunnable;
  16.  
  17. /**
  18.  * FreezeFactory from Hell - v1.1
  19.  * @author ArthurMaker
  20.  * Greetings from Brazil, gentlemen!
  21.  */
  22. public class FreezeFactory implements Listener {
  23.    
  24.     private Plugin plugin;
  25.     private static List<UUID> players = new ArrayList<UUID>();
  26.    
  27.     public FreezeFactory (Plugin plugin){
  28.         this.plugin = plugin;
  29.         this.plugin.getServer().getPluginManager().registerEvents(this, this.plugin);
  30.     }
  31.    
  32.     /**
  33.      * Freezes a player.
  34.      */
  35.     public void freezePlayer(Player p){
  36.         if(isFrozen(p)) return;
  37.         p.setWalkSpeed(0F);
  38.         p.setFallDistance(0F);
  39.         p.teleport(this.getGround(p));
  40.         p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, -127));
  41.         players.add(p.getUniqueId());
  42.     }
  43.    
  44.     /**
  45.      * Unfreezes a player.
  46.      */
  47.     public void unfreezePlayer(Player p){
  48.         if(!isFrozen(p)) return;
  49.         p.removePotionEffect(PotionEffectType.JUMP);
  50.         p.setWalkSpeed(0.2F); // normal speed
  51.         players.remove(p.getUniqueId());
  52.     }
  53.    
  54.     private Location getGround(Player p){
  55.         Block relative = p.getLocation().getBlock().getRelative(BlockFace.DOWN);
  56.         for(int i = 0; i < 256; i++){
  57.             if(relative.getType().isOccluding()){
  58.                 Location b = relative.getRelative(BlockFace.UP).getLocation();
  59.                 return new Location(b.getWorld(), b.getX(), b.getY(), b.getZ(), p.getEyeLocation().getYaw(), p.getEyeLocation().getPitch()).add(0.5, 0, 0.5);
  60.             }else{
  61.                 relative = relative.getRelative(BlockFace.DOWN);
  62.             }
  63.         }
  64.         return p.getLocation();
  65.     }
  66.    
  67.     /**
  68.      * Check if a player is frozen.
  69.      */
  70.     public boolean isFrozen(Player p){
  71.         return players.contains(p.getUniqueId());
  72.     }
  73.    
  74.     @EventHandler
  75.     public void onSprint(PlayerToggleSprintEvent event){
  76.         final Player p = event.getPlayer();
  77.         if(isFrozen(p)){
  78.             new BukkitRunnable(){
  79.                 @Override
  80.                 public void run() {
  81.                     if(p.isSprinting()){
  82.                         p.teleport(p);
  83.                     }else{
  84.                         this.cancel();
  85.                     }
  86.                 }
  87.             }.runTaskTimer(this.plugin, 0L, 1L);
  88.         }
  89.     }
  90.    
  91. }
Add Comment
Please, Sign In to add comment