xX10Eric02Xx Posted April 11, 2014 Share Posted April 11, 2014 (edited) 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 Edited July 11, 2014 by xX10Eric02Xx Link to comment Share on other sites More sharing options...
Kabummalex Posted April 11, 2014 Share Posted April 11, 2014 NUn, aber was soll das bringen? Denn s gibt ja den command /vanish Link to comment Share on other sites More sharing options...
xX10Eric02Xx Posted April 12, 2014 Author Share Posted April 12, 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 to comment Share on other sites More sharing options...
Baustein Posted April 12, 2014 Share Posted April 12, 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 to comment Share on other sites More sharing options...
xX10Eric02Xx Posted April 12, 2014 Author Share Posted April 12, 2014 (edited) 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. Edited April 12, 2014 by Eric Link to comment Share on other sites More sharing options...
Baustein Posted April 12, 2014 Share Posted April 12, 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 to comment Share on other sites More sharing options...
xX10Eric02Xx Posted April 12, 2014 Author Share Posted April 12, 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 to comment Share on other sites More sharing options...
Baustein Posted April 12, 2014 Share Posted April 12, 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 to comment Share on other sites More sharing options...
xX10Eric02Xx Posted April 12, 2014 Author Share Posted April 12, 2014 (edited) Ich bleibe unsichtbar wenn ich mich relog aber nicht wenn ein anderer sich relogt :/ Edited April 12, 2014 by Eric Link to comment Share on other sites More sharing options...
Baustein Posted April 13, 2014 Share Posted April 13, 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 to comment Share on other sites More sharing options...
xX10Eric02Xx Posted April 13, 2014 Author Share Posted April 13, 2014 (edited) 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. Edited April 13, 2014 by Eric Link to comment Share on other sites More sharing options...
Baustein Posted April 13, 2014 Share Posted April 13, 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 to comment Share on other sites More sharing options...
xX10Eric02Xx Posted April 13, 2014 Author Share Posted April 13, 2014 (edited) 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) { Edited April 13, 2014 by Eric Link to comment Share on other sites More sharing options...
Baustein Posted April 13, 2014 Share Posted April 13, 2014 Das ist nicht der ganze Code. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
xX10Eric02Xx Posted April 13, 2014 Author Share Posted April 13, 2014 (edited) 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 Edited April 13, 2014 by Eric Link to comment Share on other sites More sharing options...
Arcalio Posted April 13, 2014 Share Posted April 13, 2014 (edited) 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" Edited April 13, 2014 by Arcalio Link to comment Share on other sites More sharing options...
Baustein Posted April 14, 2014 Share Posted April 14, 2014 Uii, da nimmt mir wer die Arbeit weg Nee, hast du ja gut gemacht, Arcalio Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
xX10Eric02Xx Posted April 14, 2014 Author Share Posted April 14, 2014 (edited) Danke an euch beide!!! Jetzt hat es gefunzt . Ich habe euch schon im Plugin eingetragen :3 Edited April 14, 2014 by Eric Link to comment Share on other sites More sharing options...
Baustein Posted April 14, 2014 Share Posted April 14, 2014 Dann hau doch mal die neue, sicherere Version raus Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
xX10Eric02Xx Posted April 14, 2014 Author Share Posted April 14, 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 to comment Share on other sites More sharing options...
Baustein Posted April 14, 2014 Share Posted April 14, 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 to comment Share on other sites More sharing options...
KiviTheFruit Posted April 14, 2014 Share Posted April 14, 2014 Ähm warum nicht einfach den SpectatorGamemode von der 1.8 nehmen? Link to comment Share on other sites More sharing options...
Baustein Posted April 14, 2014 Share Posted April 14, 2014 Weil die 1.8 noch nicht da ist Und selbst programmieren kann doch nie schaden!? Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Biber Posted April 14, 2014 Share Posted April 14, 2014 Außerdem gibt's ja schon Vanish Warum nochmal 'nen Plugin? +× by Phone ×+ Link to comment Share on other sites More sharing options...
Baustein Posted April 14, 2014 Share Posted April 14, 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 to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now