Advertisement
Lonely_Wanderer

SignTeleporter

Dec 9th, 2017
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.26 KB | None | 0 0
  1. package ST;
  2.  
  3. import org.bukkit.Bukkit;
  4. import org.bukkit.Location;
  5. import org.bukkit.Material;
  6. import org.bukkit.block.Block;
  7. import org.bukkit.block.Sign;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.event.Listener;
  10. import org.bukkit.event.EventHandler;
  11. import org.bukkit.event.block.Action;
  12. import org.bukkit.event.player.PlayerInteractEvent;
  13. import org.bukkit.plugin.java.JavaPlugin;
  14.  
  15. public class SignTeleport extends JavaPlugin implements Listener{
  16.     @Override
  17.     public void onEnable(){
  18.         Bukkit.getServer().getPluginManager().registerEvents(this, this);
  19.     }
  20.     @Override
  21.     public void onDisable(){
  22.        
  23.     }
  24.    
  25.     @EventHandler
  26.     public void pressOnSign(PlayerInteractEvent e){
  27.         Player p = e.getPlayer();
  28.         Block clickBlock = e.getClickedBlock();
  29.         Sign sign = (Sign)e.getClickedBlock().getState();
  30.         if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
  31.              if(clickBlock.getType() == org.bukkit.Material.WALL_SIGN) {
  32.                   if(canMakeTp(sign, p)){
  33.                       double foodLevel=p.getFoodLevel();
  34.                       int   range=Math.abs(Integer.parseInt(sign.getLine(2))-sign.getY()),
  35.                             delFoodLevel=((range/13) + 1);
  36.                       if(delFoodLevel>foodLevel){
  37.                           p.sendMessage("У тебя недостаточно сытости для телепортации");
  38.                       }else{
  39.                           p.setFoodLevel((int)(foodLevel - delFoodLevel)); //можно заменить снятие голода на что-то другое
  40.                           p.teleport(new Location(sign.getWorld(),sign.getX()+0.5,Integer.parseInt(sign.getLine(2)),sign.getZ()+0.5));
  41.                       }
  42.                   }
  43.              }
  44.         }
  45.     }
  46.    
  47.     public static Material whichBlockPlacedSign(Sign s){
  48.         Location l=s.getLocation();
  49.         Block b;
  50.         switch(s.getData().getData()){
  51.         case 2:
  52.             l.setZ(l.getZ()+1);
  53.             b = s.getWorld().getBlockAt(l);
  54.             return b.getType();
  55.         case 4:
  56.             l.setX(l.getX()+1);
  57.             b = s.getWorld().getBlockAt(l);
  58.             return b.getType();
  59.         case 3:
  60.             l.setZ(l.getZ()-1);
  61.             b = s.getWorld().getBlockAt(l);
  62.             return b.getType();
  63.         case 5:
  64.             l.setX(l.getX()-1);
  65.             b = s.getWorld().getBlockAt(l);
  66.             return b.getType();
  67.         default: return Material.AIR;
  68.         }
  69.     }
  70.    
  71.     public boolean canMakeTp(Sign s, Player p){
  72.         Location l=s.getLocation();
  73.         int num;
  74.         // возможно мир называется по другому
  75.         if(!l.getWorld().getName().equals("world")){
  76.             return false;
  77.         }
  78.            
  79.         if(!s.getLine(1).matches("ALL")&&!s.getLine(1).matches(p.getName()))
  80.             return false;
  81.        
  82.         try{
  83.             num=Integer.parseInt(s.getLine(2));
  84.         }catch(NumberFormatException e){
  85.             return false;
  86.         }
  87.         if(!whichBlockPlacedSign(s).equals(Material.DIAMOND_BLOCK))
  88.             return false;
  89.         Block   b0=otherBlock(l.getBlock(), num-1),    
  90.                 b1=otherBlock(l.getBlock(), num),
  91.                 b2=otherBlock(l.getBlock(), num+1);
  92.         if(num<=255 && num>=5){
  93.             switch(s.getLine(0)){
  94.             case "UP":
  95.             case "DOWN":
  96.                 if(!b1.getType().equals(Material.AIR) || b0.getType().equals(Material.AIR) || b0.isLiquid() || !b2.getType().equals(Material.AIR))
  97.                     return false;
  98.                 break;
  99.             default: return false;
  100.             }
  101.         }      
  102.         return true;
  103.     }
  104.  
  105.     public Block otherBlock(Block b, int y){
  106.         return b.getWorld().getBlockAt(b.getX(),y,b.getZ());
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement