Помогите компас направить на какой-либо блок

  • Автор темы Автор темы Boss90
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Boss90

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
Boss90
Здраствуйте всем!)
У меня возник вопрос, как компас направить на какой-либо блок, попробовал сам, но не понял как именно работает .setCompassTarget(location); поэтому решил обратиться к вам.

Код:
    e.getPlayer().getInventory().addItem(new ItemStack(Material.COMPASS));
      e.getPlayer().setCompassTarget(new Location(Bukkit.getWorld("world"), -181, 69, 121));
      System.out.println(e.getPlayer().getCompassTarget());

И компас показывает на -192 64 125, почему?
 
Код:
        ItemStack stack = new ItemStack(Material.COMPASS);
        CompassMeta meta  = (CompassMeta) stack.getItemMeta();
        meta.setLodestone(new Location(Bukkit.getWorld("world"), -181, 69, 121));
        stack.setItemMeta(meta);
        e.getPlayer().getInventory().addItem(stack);
 
Код:
        ItemStack stack = new ItemStack(Material.COMPASS);
        CompassMeta meta  = (CompassMeta) stack.getItemMeta();
        meta.setLodestone(new Location(Bukkit.getWorld("world"), -181, 69, 121));
        stack.setItemMeta(meta);
        e.getPlayer().getInventory().addItem(stack);
"Вид" переменной CompassMeta нету :/
upload_2021-4-10_23-33-22.png
 
Здраствуйте всем!)
У меня возник вопрос, как компас направить на какой-либо блок, попробовал сам, но не понял как именно работает .setCompassTarget(location); поэтому решил обратиться к вам.

Код:
    e.getPlayer().getInventory().addItem(new ItemStack(Material.COMPASS));
      e.getPlayer().setCompassTarget(new Location(Bukkit.getWorld("world"), -181, 69, 121));
      System.out.println(e.getPlayer().getCompassTarget());

И компас показывает на -192 64 125, почему?
Должно нормально работать. Код вызывается? Что sout в консоли выводит?
Можешь ещё полностью класс показать
 
Должно нормально работать. Код вызывается? Что sout в консоли выводит?
Можешь ещё полностью класс показать

Класс:

PHP:
package Boss90.Events;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.*********ventory.ItemStack;

public class GPS implements Listener {
    @EventHandler
    public void OnGPS(PlayerJoinEvent e) {
        e.getPlayer().getInventory().addItem(new ItemStack(Material.COMPASS));
          e.getPlayer().setCompassTarget(new Location(Bukkit.getWorld("world"), -181, 69, 121));
          System.out.println(e.getPlayer().getCompassTarget());
    }
}

Код вызывается.

Sout:
Location{world=CraftWorld{name=world},x=-181.0,y=69.0,z=121.0,pitch=0.0,yaw=0.0}
 
Класс:

PHP:
package Boss90.Events;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.*********ventory.ItemStack;

public class GPS implements Listener {
    @EventHandler
    public void OnGPS(PlayerJoinEvent e) {
        e.getPlayer().getInventory().addItem(new ItemStack(Material.COMPASS));
          e.getPlayer().setCompassTarget(new Location(Bukkit.getWorld("world"), -181, 69, 121));
          System.out.println(e.getPlayer().getCompassTarget());
    }
}

Код вызывается.

Sout:
Location{world=CraftWorld{name=world},x=-181.0,y=69.0,z=121.0,pitch=0.0,yaw=0.0}
После перезахода на сервер компас указывает на верную точку?
Попробую обновить ядро
 
player.setCompassTarget(location);
Саму локацию по координатам думаю сам сможешь сделать
 
Там погрешность на пол блока, ибо он показывает на его пересечение. И как ты определил высоту, если компасс может показывать только на X и Z координаты
Код:
package ru.swat1x.commands;

import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class Compass implements CommandExecutor{

    @Override
    public boolean onCommand(CommandSender sender, Command arg1, String label, String[] arg3) {
        Player player = (Player) sender;
        Location location = player.getLocation();
        player.setCompassTarget(location);
        sender.sendMessage("§eЦель компаса установлена на координаты: §a"+ (int)location.getX() +", "+(int)location.getZ());
        return false;
    }

}
 
Там погрешность на пол блока, ибо он показывает на его пересечение. И как ты определил высоту, если компасс может показывать только на X и Z координаты
Код:
package ru.swat1x.commands;

import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class Compass implements CommandExecutor{

    @Override
    public boolean onCommand(CommandSender sender, Command arg1, String label, String[] arg3) {
        Player player = (Player) sender;
        Location location = player.getLocation();
        player.setCompassTarget(location);
        sender.sendMessage("§eЦель компаса установлена на координаты: §a"+ (int)location.getX() +", "+(int)location.getZ());
        return false;
    }

}
Эта проблема решается добавлением 0.5 к x и z координатам. То есть например location.add(0.5d, 0, 0.5d);
 
Эта проблема решается добавлением 0.5 к x и z координатам. То есть например location.add(0.5d, 0, 0.5d);
То, что это решается я не спорю, но у него вообще на блоков 5 уехали корды, а не на пол блока
 
У меня все прекрасно работает.
PHP:
@EventHandler
public void onInteract(PlayerInteractEvent e) {
    if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
        ItemStack stack = e.getItem();
        if (stack == null)
            return;
        if (stack.getType() != Material.COMPASS)
            return;
        Block block = e.getClickedBlock();
        double x = block.getX() + 0.5,
                z = block.getZ() + 0.5;
        Location location = new Location(block.getWorld(), x, 0, z);
        Player player = e.getPlayer();
        player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1, 0.7f);
        player.setCompassTarget(location);
    }
}
 
Всем спасибо)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх