传送方法使我的坐标加倍(龙头)

Teleport Method Keeps Doubling My Coordinates(Spigot)

我正在尝试制作一个传送魔杖,它可以将你传送一个方块,爆炸,并让你恢复 1 秒,但每次我传送它都会因为某种原因使我的坐标加倍。例如,我会从坐标 383、43、256 转到坐标 767、86、512。有人知道这是什么原因吗?

这是我的 Class 代码:

package com.jason.sbitems.swords;

import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.potion.PotionEffectType;

public class AOTE implements Listener {
    @EventHandler
    public static void onPlayerInteract(PlayerInteractEvent e) {
        Player p = e.getPlayer();
        Material mat = e.getPlayer().getInventory().getItemInMainHand().getType();

        int x = p.getLocation().getBlockX();
        int y = p.getLocation().getBlockY();
        int z = p.getLocation().getBlockZ();
        Location a = p.getLocation().add(x + 1, y, z);

        if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
            if (mat == Material.STICK) {
                p.getWorld().createExplosion(p.getLocation(), 0f);
                p.teleport(a);
                p.addPotionEffect(PotionEffectType.REGENERATION.createEffect(20, 1));
            }
        }
    }
}

您的问题是您误解了 add() 方法如何处理位置。您正在 添加 提供的双打到当前位置,因此您不需要再次指定坐标。

所以要将 X 坐标加 1,您可以这样做

Location a = p.getLocation().add(1, 0, 0);

您再次添加它们会使它们的坐标加倍。除了 X 坐标,您在此处再次将值加一。

旁注,如果您的目标是将玩家向前传送一个方块,添加到 X 并不总是会导致 'forward',具体取决于玩家的视线。你可以用类似的东西来实现:

Vector teleportTo = player.getLocation().getDirection().normalize().multiply(1);
player.teleport(player.getLocation().add(teleportTo));

这将允许它们被传送到一个方块中,因此您当然需要执行自己的检查和修改。