Wie lass ich zwei Spieler zu zwei unterschiedlichen Locations teleportieren (Spigot Java Minecraft)?

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.


Jan55539 
Fragesteller
 30.08.2020, 19:58

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

0

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?

Woher ich das weiß:Hobby – Habe ich in 2015-2022 gezockt aber ark ist besser

Jan55539 
Fragesteller
 30.08.2020, 23:14

wenn sie der Welt beitreten

0
Brockdish  30.08.2020, 23:29
@Jan55539

Dann weiß ich es nicht : (

Du kannst es ja mit einem Scheduler versuchen

0
Jan55539 
Fragesteller
 30.08.2020, 23:35
@Brockdish

Ok kannst du mir es trotzdem mit sagen, wenn sie den Server betreten?

0
Brockdish  31.08.2020, 02:21
@Jan55539

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.

0
Jan55539 
Fragesteller
 31.08.2020, 15:12
@Brockdish

Das Problem dabei ist, wenn ein Spieler verlässt...

0
Brockdish  31.08.2020, 21:16
@Jan55539

Welches Problem hast du dann, wenn ein Spieler den Server verlässt?

0
Jan55539 
Fragesteller
 03.09.2020, 17:08
@Brockdish

Weil wenn ein Spieler leavt, dann wird der Spieler der dann erneut join, als Spieler 1 gekennzeichnet, dann gibt es zwei Spieler 1

0
Brockdish  03.09.2020, 17:22
@Jan55539

Dann musst du gucken, ob player1 null ist, und ihn erst dann definieren.

Und wenn player1 leavet, dann machst du ihn zu null.

Das gleiche auch bei player2.

0