• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Spigot [Abgebrochen] Verbesserungen am Vanish Command

Sullaysur

Redstoneengineer
Osterei Experte
Mitglied seit
22 Januar 2019
Beiträge
48
Hallo Community, ich habe vor kurzem meinen Vanish Command etwas verbessert, komme aber leider nun an 2 Stellen nicht mehr weiter.

Folgendes sind die Probleme:
  • Wenn man /Vanish eingibt wird man für alle sich auf dem Server befindlichen Spieler "versteckt", problem ist, personen die joinen sehen einen noch, wie kann ich das verhindern?
  • Ich würde gerne personen mit gewissen permission die spieler im Vanish wie im Spectatormode anzeigen lassen, wie geht das?
Hier ist der Code:
Code:
 Player p = (Player) sender;
String player = p.toString();
if(cmd.getName().equalsIgnoreCase("vanish")) {
    if(p.hasPermission("c.vanish")) {
        if(args.length == 0) {
            if(PlayerManager.isvanish(getUUID(player))) {
                PlayerManager.vanishoff(getUUID(player));
                for(Player all : Bukkit.getOnlinePlayers()) {
                    all.showPlayer(p);
                }
                if(PlayerManager.isfly(getUUID(player))) {
                    p.setAllowFlight(true);
                    p.setFlying(true);
                } else {
                    p.setAllowFlight(false);
                    p.setFlying(false);
                }
                p.getWorld().playEffect(p.getLocation(), Effect.POTION_BREAK, 5);
                p.sendMessage(Main.prefix + "§eDu bist nun wieder Sichtbar!");
            } else {
                PlayerManager.vanishon(getUUID(player), player, vanish, fly);
                for(Player all : Bukkit.getOnlinePlayers()) {
                    all.hidePlayer(p);
                }
                p.setAllowFlight(true);
                p.setFlying(true);
                p.getWorld().strikeLightningEffect(p.getLocation());
                p.sendMessage(Main.prefix + "§eDu bist nun nicht mehr Sichtbar!");
            }
        } else {
            p.sendMessage(Main.prefix + " §4Bitte benutzte §3/help §4für Hilfe!");
        }
    } else {
        p.sendMessage(Main.noperm);
    }
Zudem wird beim Joinen geprüft ob man vanish ist oder nicht und dann auch wieder gesetzt oder nicht, sieht so aus:
Code:
@EventHandler
public void onJoin(PlayerJoinEvent e) {
    Player p = e.getPlayer();
    if(PlayerManager.isvanish(p.getUniqueId().toString())) {
            for(Player all : Bukkit.getOnlinePlayers()) {
                all.hidePlayer(p);
            }
            p.setAllowFlight(true);
            p.setFlying(true);
            p.getWorld().strikeLightningEffect(p.getLocation());
            p.sendMessage(Main.prefix + "§eDu bist im Vanish gejoint!");
        }
}
Vielen Dank schonmal im Vorraus,

mfg Sullaysur
 

BlackHole

Workaholic
Mitglied seit
1 Juli 2012
Beiträge
749
Minecraft
BlackHole
Beim Joinen musst du noch für den joinenden Spieler alle Spieler verstecken, die bereits versteckt sind.
Zweiteres würde nur mit Modifikationen am Quellcode des Servers oder mit einer Bibliothek zum Filtern von Paketen funktionieren, z.B. ProtocolLib
 

Sullaysur

Redstoneengineer
Osterei Experte
Mitglied seit
22 Januar 2019
Beiträge
48
Wie kann ich denn abfragen welche spieler versteckt sind und diese dann für den joinenden spieler verstecken, das ist ja mein Problem.
 

TntTastisch

Kuhfänger
Mitglied seit
26 März 2018
Beiträge
53
Alter
18
Minecraft
TntTastisch
Du musst den Code einfach nur so anpassen:


Code:
  if(PlayerManager.isvanish(p.getUniqueId().toString())) {
             for(Player all : Bukkit.getOnlinePlayers()) {
                 if(all.showPlayer(p) {
                     all.hidePlayer(p);
                 }
             }
             p.setAllowFlight(true);
             p.setFlying(true);
             p.getWorld().strikeLightningEffect(p.getLocation());
             p.sendMessage(Main.prefix + "§eDu bist im Vanish gejoint!");
         }
 

Sullaysur

Redstoneengineer
Osterei Experte
Mitglied seit
22 Januar 2019
Beiträge
48
Du musst den Code einfach nur so anpassen:


Code:
  if(PlayerManager.isvanish(p.getUniqueId().toString())) {
             for(Player all : Bukkit.getOnlinePlayers()) {
                 if(all.showPlayer(p) {
                     all.hidePlayer(p);
                 }
             }
             p.setAllowFlight(true);
             p.setFlying(true);
             p.getWorld().strikeLightningEffect(p.getLocation());
             p.sendMessage(Main.prefix + "§eDu bist im Vanish gejoint!");
         }
Funktioniert nicht! Es gibt dann einen Fehler bei if(all.showPlayer(p)) {
 

TntTastisch

Kuhfänger
Mitglied seit
26 März 2018
Beiträge
53
Alter
18
Minecraft
TntTastisch
Dann würde ich dir raten, es in einem BukkitScheduler zu machen.
 

TntTastisch

Kuhfänger
Mitglied seit
26 März 2018
Beiträge
53
Alter
18
Minecraft
TntTastisch
Du musst dies so machen:

Code:
 Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
                    @Override
                    public void run() {
                        for(Player all : Bukkit.getOnlinePlayers()){
                            all.hidePlayer(player);
                        }
                    }
                }, 1, 1);
 

Sullaysur

Redstoneengineer
Osterei Experte
Mitglied seit
22 Januar 2019
Beiträge
48
Habe es jetzt eingebunden, bekomme aber einen Fehler.
Code:
@EventHandler
public void onJoin(PlayerJoinEvent e) {
    Player p = e.getPlayer();
        
    Bukkit.getScheduler().scheduleSyncRepeatingTask((Plugin) this, new Runnable() {
        @Override
        public void run() {
            for(Player all : Bukkit.getOnlinePlayers()){
                   all.hidePlayer(p);
               }
        }
    }, 1, 1);
        
    if(PlayerManager.isvanish(p.getUniqueId().toString())) {
        for(Player all : Bukkit.getOnlinePlayers()) {
            all.hidePlayer(p);
        }
        p.setAllowFlight(true);
        p.setFlying(true);
        p.getWorld().strikeLightningEffect(p.getLocation());
        p.sendMessage(Main.prefix + "§eDu bist im Vanish gejoint!");
    }
}
Code:
[18:28:24 ERROR]: Could not pass event PlayerJoinEvent to Calderya v1.5.7
org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:309) ~[spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.PlayerList.onPlayerJoin(PlayerList.java:343) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.PlayerList.a(PlayerList.java:162) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.LoginListener.b(LoginListener.java:149) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.LoginListener.tick(LoginListener.java:53) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.NetworkManager.a(NetworkManager.java:230) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.ServerConnection.c(ServerConnection.java:119) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:994) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:417) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:831) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:729) [spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_201]
Caused by: java.lang.ClassCastException: de.thegreeny.calderya.listener.PlayerEvents cannot be cast to org.bukkit.plugin.Plugin
        at de.thegreeny.calderya.listener.PlayerEvents.onJoin(PlayerEvents.java:52) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_201]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:305) ~[spigot-1.13.2.jar:git-Spigot-f56e2e7-1a64d4a]
        ... 14 more
 

TntTastisch

Kuhfänger
Mitglied seit
26 März 2018
Beiträge
53
Alter
18
Minecraft
TntTastisch
Kannst du mir mal den Sourcecode schicken? bzw. den Fehlercode und das mit Vanish.
 

TntTastisch

Kuhfänger
Mitglied seit
26 März 2018
Beiträge
53
Alter
18
Minecraft
TntTastisch
Achso, hier liegt der Fehler, tut mir Leid ich habe es schlecht erklärt.

Code:
@EventHandler
public void onJoin(PlayerJoinEvent e) {
    Player p = e.getPlayer();
        
  
        
    if(PlayerManager.isvanish(p.getUniqueId().toString())) {
        Bukkit.getScheduler().scheduleSyncRepeatingTask((Plugin) this, new Runnable() {
        @Override
        public void run() {
            for(Player all : Bukkit.getOnlinePlayers()){
                   all.hidePlayer(p);
               }
            }
        }, 1, 1);
        p.setAllowFlight(true);
        p.setFlying(true);
        p.getWorld().strikeLightningEffect(p.getLocation());
        p.sendMessage(Main.prefix + "§eDu bist im Vanish gejoint!");
    }
}
So musst du es machen.
 

Sullaysur

Redstoneengineer
Osterei Experte
Mitglied seit
22 Januar 2019
Beiträge
48
Funktioniert leider nicht, ich kann nach dem Joinen die Spieler im Vanish dennoch sehen, nur wenn ich schon draufbin, werden die versteckt
 

DerFrZocker

Schafhirte
Osterei Experte
Mitglied seit
10 Dezember 2017
Beiträge
112
Alter
19
Minecraft
DerFrZocker
In der Fehler Nachricht sieht man, daß es ein classCastExeption gibt wenn du versuchst dein Listener zum Plugin zu Casten, was auch logisch ist da deine Classe nicht das interface plugin implementiert. Das heißt dort muss nicht this hin sondern eine instance von deiner main classe wo JavaPlugin erbt.
 

Sullaysur

Redstoneengineer
Osterei Experte
Mitglied seit
22 Januar 2019
Beiträge
48
In der Fehler Nachricht sieht man, daß es ein classCastExeption gibt wenn du versuchst dein Listener zum Plugin zu Casten, was auch logisch ist da deine Classe nicht das interface plugin implementiert. Das heißt dort muss nicht this hin sondern eine instance von deiner main classe wo JavaPlugin erbt.
Hat leider auch nicht funktioniert, habe jetzt eine funktion erstellt womit ich alle Spieler die Vanish sind abrufen kann.
Code:
public static List<String> getVanishedPlayers(){
        List<String> list = new ArrayList<String>();
        ResultSet rs = MySQL.getResult("SELECT * FROM Playervanish");
        try {
            while(rs.next()) {
                list.add(rs.getString("Spielername"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
Und habe diese dann versucht über das Player Join Event abzurufen, bin da aber auf ein Problem gestoßen.
Code:
List<String> list = PlayerManager.getVanishedPlayers();
for(String allVanished : PlayerManager.getVanishedPlayers()) {
    p.hidePlayer(allVanished);
}
Und zwar bekomme ich bei p.hidePlayer(allVanished); den fehler: The method hidePlayer(Player) in the type Player is not applicable for the arguments (String), wie kann ich das problem ändern?
 

ES-Henne

Redstoneengineer
Mitglied seit
3 Oktober 2017
Beiträge
41
1. Du holst dir alle Spieler die unsichtbar sind und versuchst diese unsichtbar zu setzen. Allerdings interessieren dich doch nur die Spieler die aktuell online sind (abgesehen davon, dass du niemand unsichtbar setzen kannst, der offline ist).

2. Du übergibst der Methode hidePlayer ein String-Objekt, allerdings muss es ein Player-Objekt sein.
 

Sullaysur

Redstoneengineer
Osterei Experte
Mitglied seit
22 Januar 2019
Beiträge
48
1. Du holst dir alle Spieler die unsichtbar sind und versuchst diese unsichtbar zu setzen. Allerdings interessieren dich doch nur die Spieler die aktuell online sind (abgesehen davon, dass du niemand unsichtbar setzen kannst, der offline ist).

2. Du übergibst der Methode hidePlayer ein String-Objekt, allerdings muss es ein Player-Objekt sein.
Wie müsste ich dann meinen Code Abändern, damit es richtig funktioniert?
 
Allgemein
Hilfe Benutzer
  • HardSoul HardSoul:
    Gute Nacht!
  • Stern☆ Stern☆:
    gn8^^
  • realMaxW realMaxW:
    Guten Morgen <3:cow:
  • maybeto maybeto:
    guten Morgen....
  • Matthias Matthias:
    Guten Morgen
  • Matthias Matthias:
    heut mal richtig lang geschlafen
  • HardSoul HardSoul:
    Guten Morgen
  • LottaXL LottaXL:
    Moin, moin =)
  • SirYwell SirYwell:
    Was ist denn eigentlich mit den Farben von
    Code:
    Code
    im Dark Mode passiert? Ich find das irgendwie anstrengend zu lesen
  • Matthias Matthias:
    @Hadde-chan hatte da eine Beschwerde die @Dean beseitigt hat
  • HardSoul HardSoul:
    Ich kann @SirYwell Nur zustimmen. Hab auch Probleme das zu lesen
  • SirYwell SirYwell:
    Keine Ahnung über was sich Hadde beschwert hat, aber eventuell muss ich mal ein ernstes Wörtchen mit ihm reden
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Hadde hat sich bestimmt darüber beschwert, dass sein Code so scheiße aussieht und Dean hat das Problem beseitigt
  • SirYwell SirYwell:
    voll offensive
  • Matthias Matthias:
    also im nicht dark mode sieht es gut aus
  • maybeto maybeto:
    und manchmal ist es auch besser, wenn man nicht alles lesen kann... :eek:
    +2
  • Dean Dean:
    Im nicht Darkmode gehen aber die Augen von denen kaputt, weil es zu hell ist
  • Matthias Matthias:
    mh ja, ich sitze nicht im dunkeln keller
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    fordere dark mode freundlichen avatar von matthias
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    das weiß im hintergrund blendet mich
  • maybeto maybeto:
    seit ich meine Fenster geputzt habe, ist es besser geworden.....
  • Dean Dean:
    im Darkmode kann ich ja die Avatare invertieren, sollte dann reichen
  • HardSoul HardSoul:
    Ein Herz für Kellerkinder! Manchmal hat man nunmal nicht die Wahl des Fensters!
    HardSoul HardSoul: Ein Herz für Kellerkinder! Manchmal hat man nunmal nicht die Wahl des Fensters!
    Oben