- Баллы
- 61
- Имя в Minecraft
- hugo1pro
Писал плагин по видео на крафт и телепортацию, вроде бы всё правильно, но на сервере не работает. Когда убираю return; всё норм работает но можно юзать любой глаз для телепорта.
JavaScript:
public class palka implements Listener {
@EventHandler
public void use(PlayerInteractEvent e){
if(e.getAction() != Action.RIGHT_CLICK_AIR && e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
if(e.getPlayer().getItemInHand().getType() != Material.EYE_OF_ENDER) return;
Player p = e.getPlayer();
ItemStack item = e.getPlayer().getItemInHand();
if(!item.getItemMeta().hasDisplayName()) return;
if(!item.getItemMeta().hasLore()) return;
if(!item.getItemMeta().getDisplayName().equals(ChatColor.BLUE + "Палка-телепорталка")) return;
if(!item.getItemMeta().getLore().equals("Я молюсь что получиться...")) return;
e.setCancelled(true);
removeItem(p);
teleport(p);
}
private void removeItem(Player p){
ItemStack item = p.getItemInHand();
item.setAmount(item.getAmount() - 1);
p.setItemInHand(item);
}
private void teleport(Player p){
Location loc = p.getLocation();
float yaw = loc.getYaw();
float pitch = loc.getPitch();
if(pitch < -40 || pitch > 40){
vertical(p);
return;
}
float y = toDegree(yaw);
if(y > 315 || y < 45){
south(p);
return;
}
if(y > 45 && y < 135){
west(p);
return;
}
if(y > 135 && y < 225){
north(p);
return;
}
if(y > 225 && y < 315){
east(p);
return;
}
}
private void vertical(Player p){
Location loc = p.getLocation();
float pitch = loc.getPitch();
if(pitch < -40){
loc.setY(loc.getY() + 4);
if(block(loc)) p.teleport(loc);
return;
}
if(pitch > 40){
loc.setY(loc.getY() - 3);
if(block(loc)) p.teleport(loc);
}
}
private float toDegree(float y){
if(y <= 360 && y >= 0) return y;
while(!(y <= 360) || !(y >= 0)){
if(y > 360){
y = y - 360;
}
if(y < 0){
y = y + 360;
}
}
return y;
}
private boolean block(Location loc){
int x = loc.getBlockX();
int y = loc.getBlockY();
int z = loc.getBlockZ();
if(loc.getWorld().getBlockAt(x, y, z).getType() != Material.AIR) return false;
if(loc.getWorld().getBlockAt(x, y + 1, z).getType() != Material.AIR) return false;
return true;
}
private void south(Player p){
Location loc = p.getLocation();
double z = loc.getZ();
z = z + 2;
loc.setZ(z);
if(block(loc)) p.teleport(loc);
}
private void north(Player p){
Location loc = p.getLocation();
double z = loc.getZ();
z = z - 2;
loc.setZ(z);
if(block(loc)) p.teleport(loc);
}
private void west(Player p){
Location loc = p.getLocation();
double x = loc.getX();
x = x - 2;
loc.setX(x);
if(block(loc)) p.teleport(loc);
}
private void east(Player p){
Location loc = p.getLocation();
double x = loc.getX();
x = x + 2;
loc.setX(x);
if(block(loc)) p.teleport(loc);
}
}
