Wie lass ich zwei Spieler zu zwei unterschiedlichen Locations teleportieren (Spigot Java Minecraft)?
Wie lass ich zwei Spieler zu zwei unterschiedlichen Locations teleportieren (Spigot Java Minecraft)?
Ich will nämlich ein 1v1 Plugin machen
wie kann ich zwei Spieler definieren. Also der Spieler joint er wird als Spieler 1 gespeichert und der zweite der joint wird als Spieler 2 gespeichert
4 Antworten
player.teleport(Location location);
Evtl. darauf achten, das die zufällige Location, innerhalb der 1vs1 Arena ist und die Menschen da genug Abstand haben.
Der Distanz zwischen zwei Punkten ist über den euklidischen Abstand zu berechnen.
Ja das ist ja klar aber wie kann ich zwei Spieler definieren. Also der Spieler joint er wird als Spieler 1 gespeichert und der zweite der joint wird als Spieler 2 gespeichert
Das sollte grundsätzlich das sein was du wolltest. Ich habe alles auskommentiert, damit du weißt was da genau abgeht. Ich hoffe ich konnte dir helfen
//Die Liste in der die Arenaspieler gespeichert werden
private ArrayList<Player> players = new ArrayList<Player>();
//Der Radius von der Arenamitte in der die Spieler spawnen
private int radius = 30;
//Die Location Arenamitte kannst du dann zb aus einer Config laden
Location arenamitte = new Location(Bukkit.getWorld("world"), 0, 60, 0);
@EventHandler
public void onPlayerJoinEvent(PlayerJoinEvent e) {
//wird gecalled wenn ein Spieler den Server betritt
Player player = e.getPlayer();
/*Wenn schon zwei Spieler in der Arena sind,
sollen keine neuen mehr joinen können.
Du kannst die zahl natürlich erhöhen (z.b für ein ffa mit 16 spielern oder so)
*/
if(players.size() > 1) {
player.kickPlayer("§cDie Arena ist voll!");
return;
}else {
//Wenn es noch Platz gibt fügen wir den Spieler in die Liste
players.add(player);
}
if(players.size() == 2) {
//Das Match beginnt. Hier kannst du dann deine Methoden reinschreiben (Z.b items geben etc)
for (Player p : players) {
//alle spieler in der liste werden zu einer zufälligen location teleportiert (in dem radius)
p.teleport(getRandomLocation(arenamitte));
}
}
}
public Location getRandomLocation(Location loc) {
Random r = new Random();
//soll der wert von r positiv oder negativ zur location berrechnet werden?
boolean positiv = r.nextBoolean();
//gibt einen x und z wert von 0 bis 30 (radius)
int x = r.nextInt(radius);
int z = r.nextInt(radius);
Location ret = (positiv) ? new Location(loc.getWorld(), loc.getX() + x, loc.getY(),loc.getZ() + z):new Location(loc.getWorld(), loc.getX() - x, loc.getY(), loc.getZ() - z);
return ret;
}
Sollen die Spieler gespeichert werden, wenn sie den Server betreten oder wenn sie die Welt betreten?
Ok kannst du mir es trotzdem mit sagen, wenn sie den Server betreten?
Mit einem PlayerJoinEvent und wenn 0 Spieler auf dem Server sind und ein Spieler joint, definierst du player1, und wenn 1 Spieler auf dem Server ist und einer joint, dann definierst du player2. Bei 2 Spielern auf dem Server soll jeder weitere Spieler, der joinen will, gekickt werden.
Das Problem dabei ist, wenn ein Spieler verlässt...
Weil wenn ein Spieler leavt, dann wird der Spieler der dann erneut join, als Spieler 1 gekennzeichnet, dann gibt es zwei Spieler 1
Vectoren und location
Hey, vielen danke!