- Баллы
- 61
- Имя в Minecraft
- Aviloo
Всем привет. Писал плагин на рандомную телепортацию и столкнулся с проблемой. При отправке команды ничего не происходит, ни ошибок в консоль , ни непосредственно телепортации. Только выводит в консоль строку предназначенную, если не игрок попытается ввести команду. Попытался понять в чем суть, но никак не могу сообразить. Хотя я скорее всего перемудрил с Scheduler` ом. Ниже прилагаю код. Буду благодарен ,если кто-нибудь покажет, где я накосячил. Заранее, спасибо.
Скрин консоли :
Код Команды:
Код Телепорта (На всякий случай):
Скрин консоли :
Код Команды:
Код:
package me.aviloo.myrtp.Commands;
import me.aviloo.myrtp.Utils.ColorUtils;
import me.aviloo.myrtp.Utils.TeleportUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class defaultTeleportSubCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(!(sender instanceof Player)) {
sender.sendMessage(ColorUtils.translateColorCodes(
"&7[&6MyRTP&7] &fThis command can only be used by players!"));
return true;
}
Player player = (Player) sender;
if(command.getName().equalsIgnoreCase("rtp")) {
Bukkit.broadcastMessage("c1");
TeleportUtils.defaultTeleport(player, -500, 500,
-500, 500, (player.getWorld()));
Bukkit.broadcastMessage("c2");
}
return true;
}
}
Код Телепорта (На всякий случай):
Код:
package me.aviloo.myrtp.Utils;
import me.aviloo.myrtp.MyRTP;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
public class TeleportUtils {
private static int randomBetween(int min, int max) {
max -= min;
return (int) (Math.random() * ++max) + min;
}
private static Location defaultLocation;
private static void getTeleportLocation(Player player, int minX,
int maxX, int minZ, int maxZ, World world) {
int x = randomBetween(minX, maxX);
int z = randomBetween(minZ, maxZ);
int y = world.getHighestBlockAt(x, z).getY() + 1;
Location loc = new Location(world, x, y, z);
defaultLocation = loc;
}
public static void defaultTeleport(Player player, int minX,
int maxX, int minZ, int maxZ, World world) {
new BukkitRunnable() {
@Override
public void run() {
boolean isSafeToTeleport = false;
while (!isSafeToTeleport){
getTeleportLocation(player, minX, maxX, minZ, maxZ, world);
if(!defaultLocation.add(0,-1,0).getBlock().isLiquid()){
isSafeToTeleport = true;
break;
}
Bukkit.getScheduler().runTask(MyRTP.getPlugin(),() -> {
player.teleport(defaultLocation);
player.sendMessage(ColorUtils.translateColorCodes(
"&7[&6Система&7] &fВы были перемещены на координаты " +
defaultLocation.getX()+", "+defaultLocation.getY()+
", "+defaultLocation.getZ()
));
});
cancel();
}
}
}.runTaskAsynchronously(MyRTP.getPlugin());
}
}
Последнее редактирование: