xX10Eric02Xx Geschrieben 11. April 2014 Share Geschrieben 11. April 2014 (bearbeitet) Hey Leute! Habe ein Plugin geschrieben das euch erlaubt Unsichtbar zu machen (Vanish) und es ist ganz einfach und nimmt wenig Speicher ein. Permissions: Alle Permissions sind auch über /perm im Spiel lesbar. gamevanish.gvh = /gvh gamevanish.gv = /gv gamevanish.perm = /perm gamevanish.gvd = /gvd gamevanish.gvt = /gvt gamevanish.check = /check gamevanish.list = /gvl Developer: Dieses Plugin wurde von 3 Leuten geschrieben. Plugin Idee und Programmierer: xX10Eric02Xx Plugin Helfer und Programmierer: Baustein + Arcalio Danke an euch beide Changelog: [+] = Hinzugefügt [-] = Gelöscht [*] = Fixed 11. Juli 2014: [+] /gvl Download des Plugins: GamemodeVanish.zip bearbeitet 11. Juli 2014 von xX10Eric02Xx Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kabummalex Geschrieben 11. April 2014 Share Geschrieben 11. April 2014 NUn, aber was soll das bringen? Denn s gibt ja den command /vanish Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
xX10Eric02Xx Geschrieben 12. April 2014 Autor Share Geschrieben 12. April 2014 NUn, aber was soll das bringen? Denn s gibt ja den command /vanish Da mein Plugin noch in Arbeit ist kann ich noch nicht genau sagen was noch hinzukommen wird. Das ist erstmal das Gerüst um euch zu zeigen wie das Plugin ist und ihr Vorschläge mir senden könnt! Ich schaue das ich in den nächsten Tagen was hinzufügen werde was /vanish nicht hat und auch kein anderes! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 12. April 2014 Share Geschrieben 12. April 2014 if ((cmd.getName().equalsIgnoreCase("gvon")) && (p.hasPermission("gamevanish.gvon")) && (p != null)) { p.sendMessage("?8?l[?r?3GV?l?8] ?r?2Vanish-Mode Started"); p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 36000, 10)); p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 36000, 3)); p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 36000, 10)); return true; } if ((cmd.getName().equalsIgnoreCase("gvoff")) && (p.hasPermission("gamevanish.gvoff")) && (p != null)) { p.sendMessage("?8?l[?r?3GV?l?8] ?r?2Vanish-Mode Stoped"); p.removePotionEffect(PotionEffectType.INVISIBILITY); p.removePotionEffect(PotionEffectType.JUMP); p.removePotionEffect(PotionEffectType.SPEED); return true; } Das finde ich sehr interessant. Du gibst also bloß Potion-Effects, und das ist leider nicht 100% sicher. Wenn der "Unsichtbare" Rüstung anhat oder ein Item in der Hand hält, wird er trotzdem gesehen. Mach das lieber mit einer for-each-Schleife. for (Player onlinePlayer : Bukkit.getServer().getOnlinePlayers()) { onlinePlayer.hidePlayer(p); } return; Wobei p der Spieler sein muss, den du bei der onCommand-Methode definiert hast. Dann musst du aber auch noch darauf aufpassen, dass Spieler, die neu auf den Server kommen, diesen spezifischen Spieler auch nicht sehen können. Dafür brauchst du einen EventListener, d.h. du musst bei extends JavaPlugin noch implements Listener hinzufügen und die Events registrieren mit etwas wie public void onEnable() { Bukkit.getServer().getPluginManager().registerEvents(this, this); } wobei ich hier vorrausgesetzt habe, dass du den EventListener in der Main-Klasse ausführst, was bei größeren Projekten der Übersichtlichkeit schaden kann. Dann fügst du eine neue Methode für den EventHandler machen, die dem neuen Spieler die unsichtbaren Spieler auch versteckt. Solltest du dabei Hilfe benötigen, sag mir bescheid Wenn dir mein Beitrag geholfen hat, klick doch bitte auf "Gefällt mir" am unteren rechten Bildrand. Danke! Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
xX10Eric02Xx Geschrieben 12. April 2014 Autor Share Geschrieben 12. April 2014 (bearbeitet) Ich werde es Updaten!!! mit 100% Sicher meine ich das KEINE daten gesendet werden (Ips, Passwörter etc.) oder alle spieler beim Joinen sofort op bekommen. bearbeitet 12. April 2014 von Eric Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 12. April 2014 Share Geschrieben 12. April 2014 Du hattest ja bei meinem Plugin geschrieben das ich mit den PotionEffekten was anderes nehmen soll! Allerdings verstehe ich nicht wie man dieses dann rückgängig machen. Es gibt die Methode hidePlayer() und die Methode showPlayer(). if ((cmd.getName().equalsIgnoreCase("gvon")) && (p.hasPermission("gamevanish.on")) && (p != null)) { if (p != null) { if (p.hasPermission("gamevanish.on")) { // Bla for (Player onlineplayer : Bukkit.getOnlinePlayers()) { onlineplayer.hidePlayer(p); } } }}if ((cmd.getName().equalsIgnoreCase("gvoff")) && (p.hasPermission("gamevanish.off")) && (p != null)) { if (p != null) { if (p.hasPermission("gamevanish.off")) { // Bla for (Player onlineplayer : Bukkit.getOnlinePlayers()) { onlineplayer.showPlayer(p); } } }} Würde einen Spieler also ein- bzw. ausblenden, auf neue Spieler wird hier noch nicht geachtet. Dabei kann ich dir wenn nötig wie gesagt auch helfen. Sollte dir mein Beitrag geholfen haben, so klick doch bitte unten rechts auf "Gefällt mir"! Danke Liebe Grüße, Baustein EDIT: Die verschachtelte If-Abfrage finde ich übersichtlicher. Außerdem würde ich zuerst abfragen, ob p != null ist, und nicht, ob p die Permission hat, denn sonst könnte es groooooße Errors geben. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
xX10Eric02Xx Geschrieben 12. April 2014 Autor Share Geschrieben 12. April 2014 Ok aber wie stelle ich ein das die Spieler beim Joinen/Rejoinen mich/den Admin nicht sehen kann? Muss ich dann bei dem Event (PlayerJoinEvent) das eintippen: for (Player onlineplayer : Bukkit.getOnlinePlayers()) { onlineplayer.hidePlayer(p); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 12. April 2014 Share Geschrieben 12. April 2014 Dafür brauchst du eine ArrayList<Player>. public ArrayList<Player> invisible = new ArrayList<Player>(); @EventHandler public void onPlayerJoin (PlayerJoinEvent joinev) { Player p = joinev.getPlayer(); hideThem(p); } public void hideThem(Player p) { for (Player privatePlayer : invisible) { p.hidePlayer(privatePlayer); } return; } Hab den Code nicht getestet, prinzipiell gilt, dass du dich erstmal über HashMaps informieren solltest, bevor du sie anwendest. Natürlich fügst du dann bei der onCommand-Sache die Spieler zu der HashMap hinzu, das solltest du selber schaffen ;D Sollte ich dir hiermit ( ) geholfen haben, kick doch bitte unten rechts auf "Gefällt mir"! Danke Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
xX10Eric02Xx Geschrieben 12. April 2014 Autor Share Geschrieben 12. April 2014 (bearbeitet) Ich bleibe unsichtbar wenn ich mich relog aber nicht wenn ein anderer sich relogt :/ bearbeitet 12. April 2014 von Eric Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 13. April 2014 Share Geschrieben 13. April 2014 Ich versteh das Problem nicht ganz Also wenn du auf den Server gehst, /gvon eingibst, runtergehst und wieder draufgehst bist du immernoch unsichtbar? Wenn du das nicht so haben willst, musst du halt ein weiteres Event, nämlich ein PlayerQuitEvent abfangen, und den Spieler dabei aus der ArrayList entfernen. Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
xX10Eric02Xx Geschrieben 13. April 2014 Autor Share Geschrieben 13. April 2014 (bearbeitet) ne es ist genau andersrum. Wenn ich runter gehe und wieder drauf komme bleibe ich unsichtbar. Wenn aber ein anderer Spieler runter geht und wieder drauf kommt (Oder ein neuer kommt) und ich davor unsichtbar war bin ich für ihn wieder sichtbar. bearbeitet 13. April 2014 von Eric Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 13. April 2014 Share Geschrieben 13. April 2014 Ja, weil du den EventListener mit dem PlayerJoinEvent nicht richtig hast. Schick uns bitte mal eine aktuelle Version des Plugins bzw. den gesamten Code. Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
xX10Eric02Xx Geschrieben 13. April 2014 Autor Share Geschrieben 13. April 2014 (bearbeitet) Hier ist er: public class GV extends JavaPlugin implements Listener{ public ArrayList<Player> invisible = new ArrayList<Player>(); @EventHandler public void onPlayerJoin(PlayerJoinEvent pe){ Player p = pe.getPlayer(); hideThem(p); } public void hideThem(Player p) { for (Player privatePlayer : invisible){ p.hidePlayer(privatePlayer); } return; } public void onEnable(){ Bukkit.getServer().getPluginManager().registerEvents(this, this); } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { bearbeitet 13. April 2014 von Eric Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 13. April 2014 Share Geschrieben 13. April 2014 Das ist nicht der ganze Code. Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
xX10Eric02Xx Geschrieben 13. April 2014 Autor Share Geschrieben 13. April 2014 (bearbeitet) Asoo den ganzen: package gamemode.eric.de; import java.util.ArrayList; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.java.JavaPlugin; public class GV extends JavaPlugin implements Listener{ public ArrayList<Player> invisible = new ArrayList<Player>(); @EventHandler public void onPlayerJoin(PlayerJoinEvent pe){ Player p = pe.getPlayer(); hideThem(p); } public void hideThem(Player p) { for (Player privatePlayer : invisible){ p.hidePlayer(privatePlayer); } return; } public void onEnable(){ Bukkit.getServer().getPluginManager().registerEvents(this, this); } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { //Sender -> Player Player p = null; if(sender instanceof Player){ p = (Player) sender; } //CMD "gv" if(cmd.getName().equalsIgnoreCase("gv")){ if(p != null){ if(p.hasPermission("gamevanish.gv")){ p.sendMessage("?3?l----?c?lGameModeVanish?3?l----"); p.sendMessage("?2/gvon ?6Start Vanish"); p.sendMessage("?2/gvoff ?6Stop Vanish"); p.sendMessage("?2/vtp [Player] ?6Teleport to [Player]"); p.sendMessage("?2/perm ?6List all Permissions for this Plugin"); p.sendMessage("?2/gvt [Player] ?6Troll [Player]"); p.sendMessage("?2/gvd ?6Infos about this Plugin"); p.sendMessage("?2/check [Player] ?6Check [Player]"); return true; } } } //CMD "vtp" if(cmd.getName().equalsIgnoreCase("vtp")){ if(p != null){ if(p.hasPermission("gamevanish.vtp")){ if(args.length != 1){ p.sendMessage("?8?l[?r?3GV?8?l] ?r?c/vtp [Player]"); return true; } if(args.length == 1){ Player zielSpieler = getServer().getPlayer(args[0]); if(zielSpieler.isOnline()){ Location zielLocation = zielSpieler.getLocation(); p.teleport(zielLocation); p.sendMessage("?8?l[?r?3GV?8?l] ?r?2You was succesfully Teleport to " + args[0]); return true; } } } } } //CMD "gvon" if(cmd.getName().equalsIgnoreCase("gvon")){ if(p != null){ if(p.hasPermission("gamevanish.gvon")){ p.sendMessage("?8?l[?r?3GV?l?8] ?r?2Vanish-Mode Started"); Player[] targets = getServer().getOnlinePlayers(); for(Player targetPlayer : targets) { targetPlayer.hidePlayer(p); } return true; } } } //CMD "gvoff" if(cmd.getName().equalsIgnoreCase("gvoff")){ if(p != null){ if(p.hasPermission("gamevanish.gvoff")){ p.sendMessage("?8?l[?r?3GV?l?8] ?r?2Vanish-Mode Stoped"); Player[] targets = getServer().getOnlinePlayers(); for(Player targetPlayer : targets){ targetPlayer.showPlayer(p); } return true; } } } Da sind zwar noch einpaar befehle. Die sind aber für den Teil erstmal nicht interresant bearbeitet 13. April 2014 von Eric Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Arcalio Geschrieben 13. April 2014 Share Geschrieben 13. April 2014 (bearbeitet) Natürlich fügst du dann bei der onCommand-Sache die Spieler zu der HashMap hinzu, das solltest du selber schaffen ;D Das hast du vergessen Mit diesem Code sollte es (hoffentlich) gehen. Ist nur ein Ausschnitt, aber man sieht ja, wo das hin muss //CMD "gvon" if(cmd.getName().equalsIgnoreCase("gvon")){ if(p != null){ if(p.hasPermission("gamevanish.gvon")){ p.sendMessage("?8?l[?r?3GV?l?8] ?r?2Vanish-Mode Started"); Player[] targets = getServer().getOnlinePlayers(); invisible.add(p); for(Player targetPlayer : targets) { targetPlayer.hidePlayer(p); } return true; } } Und ich habe noch ein paar kleinere Aspekte, die man verbessern kann, auch wenn das nicht unbedingt relevant ist. Ich merke es an der Stelle nur mal an, damit du es für später weißt. So spart man zum Teil ein wenig an Ressourcen bzw. hält sich eher an Namenskonventionen 1. Deine ArrayList sollte das Attribut static haben, denn es gibt genau eine Liste mit Spielern, welche unsichtbar sind. 2. Wenn du nur eine Klasse verwendest, kann die ArrayList auch Private statt Public sein. 2. Dein Package sollte (in dem Fall hier) de.eric.gamemode heißen. Man beginnt also quasi beim Allgemeinsten. Und um das wie der liebe Baustein zu machen: Sollte dir mein Kommentar geholfen haben, klicke doch bitte rechts unten auf "Gefallt mir" bearbeitet 13. April 2014 von Arcalio Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 14. April 2014 Share Geschrieben 14. April 2014 Uii, da nimmt mir wer die Arbeit weg Nee, hast du ja gut gemacht, Arcalio Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
xX10Eric02Xx Geschrieben 14. April 2014 Autor Share Geschrieben 14. April 2014 (bearbeitet) Danke an euch beide!!! Jetzt hat es gefunzt . Ich habe euch schon im Plugin eingetragen :3 bearbeitet 14. April 2014 von Eric Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 14. April 2014 Share Geschrieben 14. April 2014 Dann hau doch mal die neue, sicherere Version raus Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
xX10Eric02Xx Geschrieben 14. April 2014 Autor Share Geschrieben 14. April 2014 Vergessen zu fragen: Gibt es auch ein Event das den Unsichtbaren spieler keine Items aufheben lässt? Es gibt wohl PlayerItemPickUpEvent Aber ich denke das man damit nichts anfangen kann Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 14. April 2014 Share Geschrieben 14. April 2014 package baustein.minecraftforum.itempickup; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.plugin.java.JavaPlugin; public class Main extends JavaPlugin implements Listener { @Override public void onEnable() { Bukkit.getServer().getPluginManager().registerEvents(this, this); } @EventHandler public void onItemPickup(PlayerPickupItemEvent event) { Player p = event.getPlayer(); // Abfrage ob p unsichtbar ist event.setCancelled(true); } } Sollte super funktionieren. Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
KiviTheFruit Geschrieben 14. April 2014 Share Geschrieben 14. April 2014 Ähm warum nicht einfach den SpectatorGamemode von der 1.8 nehmen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 14. April 2014 Share Geschrieben 14. April 2014 Weil die 1.8 noch nicht da ist Und selbst programmieren kann doch nie schaden!? Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Biber Geschrieben 14. April 2014 Share Geschrieben 14. April 2014 Außerdem gibt's ja schon Vanish Warum nochmal 'nen Plugin? +× by Phone ×+ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Baustein Geschrieben 14. April 2014 Share Geschrieben 14. April 2014 Und selbst programmieren kann doch nie schaden!? Eric scheint noch neu zu sein, was das Entwickeln von Bukkit Plugins angeht. Er muss noch die schöne weite Welt erkunden. Lasst ihn. Liebe Grüße, Baustein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden