传送方法使我的坐标加倍(龙头)
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));
这将允许它们被传送到一个方块中,因此您当然需要执行自己的检查和修改。
我正在尝试制作一个传送魔杖,它可以将你传送一个方块,爆炸,并让你恢复 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));
这将允许它们被传送到一个方块中,因此您当然需要执行自己的检查和修改。