Jump to content

[LittlePlugin] GameModeVanish


Empfohlene Beiträge

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 thumbsup.png

Changelog:

[+] = Hinzugefügt [-] = Gelöscht [*] = Fixed 11. Juli 2014: [+] /gvl

Download des Plugins:

GamemodeVanish.zip

bearbeitet von xX10Eric02Xx
Link zu diesem Kommentar
Auf anderen Seiten teilen

NUn, aber was soll das bringen? :D

Denn s gibt ja den command /vanish :D

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

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

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

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

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

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 von Eric
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Eric
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Eric
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Arcalio
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B