Wieso funktioniert das Plugin nicht?
Hallo. Ich programmiere gerade ein Plugin. Eigendlich funktioniert es, doch es gibt ein problem. Es solten 2 Spieler an verschiedenen orten Teleportirt werden, doch beide Spieler werden an ein Ort Teleportiert. Hier der Code:
public class TeleportEvent implements Listener {
public static Bootrennen plugin;
public TeleportEvent(Bootrennen plugin) {
TeleportEvent.plugin = plugin;
}
public static void start() {
Location location = plugin.getConfig().getLocation("location.start1");
Location loc = plugin.getConfig().getLocation("location.start2");
int i = 1;
for(Player current : Bukkit.getOnlinePlayers()) {
Location playerLocation = plugin.getConfig().getLocation("location.start" + i);
current.teleport(playerLocation);
if (location != null) {
if(location.getBlock() != current.getLocation().getBlock()) {
i = 1;
current.teleport(Objects.requireNonNull(plugin.getConfig().getLocation("location.start1")));
Boat bt = (Boat) current.getWorld().spawnEntity(location, EntityType.BOAT);
bt.addPassenger(current);
} else {
if (loc != null) {
i = 2;
current.teleport(Objects.requireNonNull(plugin.getConfig().getLocation("location.start2")));
Boat bt = (Boat) current.getWorld().spawnEntity(location, EntityType.BOAT);
bt.addPassenger(current);
i++;
}
}
}
}
}
@EventHandler
public void onExit(VehicleExitEvent e) {
Player player = (Player) e.getExited();
if (e.getExited().hasPermission("Operator")) {
e.setCancelled(false);
} else {
player.sendMessage(ChatColor.RED + "Du darfst das nicht!");
e.setCancelled(true);
}
}
}
2 Antworten
Ich bin zwar kein Profi aber du musst glaube ich programmieren, dass man selber zu dieser Position teleportierst und danach noch, dass der andere auch hin teleportiert wird.
Ich denke, es wäre an dieser Stelle sinnvoll, mit Logausgaben o.ä. einmal zu prüfen, an welche Position die Spieler teleportiert werden und welche Bedingungen zutreffen oder nicht.
Zusätzlich würde ich empfehlen, die Codestruktur (start-Methode) zu überdenken. An verschiedenen Stellen könntest du Code kürzen und somit entwirren / deutlich lesbarer gestalten.
Beispiel:
Configuration configuration = plugin.getConfig();
Location start1 = configuration.getLocation("location.start1");
Location start2 = configuration.getLocation("location.start2");
Wobei start1 und start2 auch innerhalb der Schleife weiterverwendet werden sollten. Wieso du die Werte aber wieder neu holst, ist für mich nicht nachvollziehbar. Die Variable playerLocation nutzt du gar nicht, dabei könnte sie sicherlich deinen Vergleich kürzen:
if (location != playerLocation) {
Da die Argumente von teleport zudem wohl nicht null sein dürfen, deckst du bereits beim ersten teleport-Aufruf einen möglichen Fehlerfall nicht ab. Gerade wenn es doch mehr als zwei Onlinespieler gibt, hättest du wohl das Problem, dass Schlüsselwertpaare in der Konfiguration fehlen (das ist für mich eh die Frage: Wie viele Einträge gibt es in der Konfigurationsdatei, sind mindestens 1, 2 und 3 abgedeckt?).
Diese beiden Zeilen:
Boat bt = (Boat) current.getWorld().spawnEntity(location, EntityType.BOAT);
bt.addPassenger(current);
müsstest du sicherlich nicht zweimal wiederholen und was du mit der Variable i anstellst, ist etwas rätselhaft.