两点之间的随机位置(x1,z1,x2,z2)

时间:2016-03-09 05:15:12

标签: java random plugins numbers minecraft

我正在为Minecraft服务器制作插件,让玩家选择两个位置(x1,z1(第一个位置):x2,z2(第二个位置))并允许他们在两个点之间设置此区域(矩形/正方形)将randomaly传送到给定位置的任何地方。

为了简单起见,我将把大部分代码留下来,只是给你我遇到麻烦的部分。下面,这段代码将(在玩家加入服务器的情况下)将它们传送到该区域内。

我在nextInt()内设置了一些虚拟数据,这样你就可以理解数学了。

Location 1 (x1, z1): -424, 2888
Location 2 (x2, z2): 4248, 3016

以上是下面的proram部分中的位置。 (在图表中将“z”视为“y”。

@EventHandler
    public void onPlayerJoin(PlayerJoinEvent event){
        Player player = event.getPlayer();

        int x = 0, y = 0, z = 0;
        Random randLocation = new Random();

        player.sendMessage(ChatColor.RED + "TELEPORTING TO WASTELAND..");

        x = randLocation.nextInt(((2888 - 424) + 1) + 424);
        z = randLocation.nextInt(((4248 - 3016) + 1) + 3016);
        Location location = player.getLocation();
            location.setX(x);
            location.setZ(z);
            location.setY(player.getWorld().getHighestBlockAt(x, z).getY());
        player.teleport(location);
}

问题是,有时一个(或两个)位置都有负值。我试过并试过不同的方法来提出这些数字,但我很难过。

问题: 反正有没有让Java选择2个恩数之间的随机数?

示例:

randomLocation.nextInt(x1, x2);
randomLocation.nextInt(z1, z2);

2 个答案:

答案 0 :(得分:0)

您在确定随机坐标的代码中有错误:

x = randLocation.nextInt(((2888 - 424) + 1) + 424);
z = randLocation.nextInt(((4248 - 3016) + 1) + 3016);  

当您使用x1z1时,您正在使用xx1来确定新的x2位置:

randX = randLocation.nextInt(Math.abs(x2-x1) + 1) + Math.min(x1,x2);
randZ = randLocation.nextInt(Math.abs(z2-z1) + 1) + Math.min(z1,z2);

答案 1 :(得分:0)

x = randLocation.nextInt((2888 - 424) + 1) + 424;
z = randLocation.nextInt((4248 - 3016) + 1) + 3016;

还有一件事:它应该是这样的:假设x2> x1和z2> z1

x = randLocation.nextInt((x2 - x1) + 1) + x1;
z = randLocation.nextInt((z2 - z1) + 1) + z1;