Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Minecraft
You last visited: Today at 19:52

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Minecraft Plugin

Discussion on Minecraft Plugin within the Minecraft forum part of the Other Online Games category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2012
Posts: 13
Received Thanks: 0
Minecraft Plugin

Hallo Mein name ist Jan ich bin seid Kurzen mit dem Programmieren von Plugins beschäftigt habe jetzt das erstemal das Plugin versucht zu exportieren das klappt auch alles aber leider kriege ich eine Fehler Meldung mit Invalid plugin.yml ich habe mir jetzt mindestens 20 Videos angeguckt und habe da die Struktur von der plugin.yml Genommen aber leider funktioniert es immer noch nicht.

Hier der Error Code:
Code:
[19:09:48 ERROR]: Could not load 'plugins\Archipelago.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
        at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPlug
inLoader.java:164) ~[spigot.jar:git-Spigot-13716d9-0899683]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
.java:133) [spigot.jar:git-Spigot-13716d9-0899683]
        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.loadPlugins(CraftServer.ja
va:290) [spigot.jar:git-Spigot-13716d9-0899683]
        at net.minecraft.server.v1_8_R1.DedicatedServer.init(DedicatedServer.jav
a:152) [spigot.jar:git-Spigot-13716d9-0899683]
        at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java
:494) [spigot.jar:git-Spigot-13716d9-0899683]
        at java.lang.Thread.run(Unknown Source) [?:1.7.0_45]
Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInp
utException: Input length = 1
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
~[spigot.jar:git-Spigot-13716d9-0899683]
        at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60) ~
[spigot.jar:git-Spigot-13716d9-0899683]
        at org.yaml.snakeyaml.Yaml.load(Yaml.java:412) ~[spigot.jar:git-Spigot-1
3716d9-0899683]
        at org.bukkit.plugin.PluginDescriptionFile.<init>(PluginDescriptionFile.
java:232) ~[spigot.jar:git-Spigot-13716d9-0899683]
        at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPlug
inLoader.java:159) ~[spigot.jar:git-Spigot-13716d9-0899683]
        ... 5 more
Caused by: java.nio.charset.MalformedInputException: Input length = 1
        at java.nio.charset.CoderResult.throwException(Unknown Source) ~[?:1.7.0
_45]
        at sun.nio.cs.StreamDecoder.implRead(Unknown Source) ~[?:1.7.0_45]
        at sun.nio.cs.StreamDecoder.read(Unknown Source) ~[?:1.7.0_45]
        at java.io.InputStreamReader.read(Unknown Source) ~[?:1.7.0_45]
        at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:123)
~[spigot.jar:git-Spigot-13716d9-0899683]
        at java.io.Reader.read(Unknown Source) ~[?:1.7.0_45]
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
~[spigot.jar:git-Spigot-13716d9-0899683]
        at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60) ~
[spigot.jar:git-Spigot-13716d9-0899683]
        at org.yaml.snakeyaml.Yaml.load(Yaml.java:412) ~[spigot.jar:git-Spigot-1
3716d9-0899683]
        at org.bukkit.plugin.PluginDescriptionFile.<init>(PluginDescriptionFile.
java:232) ~[spigot.jar:git-Spigot-13716d9-0899683]
        at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPlug
inLoader.java:159) ~[spigot.jar:git-Spigot-13716d9-0899683]
        ... 5 more
Und hier ist die plugin.yml:
Code:
main: me.Archipelago.main.PluginArchipelago
name: PluginArchipelago
version: 1.0
author: Fragenboy


commands:
    Fly:
****** description: You can now fly / or not.
****** usage: / <command> [player]
****** permission: PluginArchipelago.Fly
****** permission-message: But you have no rights.

*** Heal:
****** Description: This command is still in progress.
****** usage: / <command> [player]
****** permission: PluginArchipelago.Heal
****** permission-message: But you have no rights.

*** Warp:
****** Description: This command is still in progress.
****** usage: / <command> [player]
****** permission: PluginArchipelago.Warp
****** permission-message: But you have no rights.

*** say:
****** Description: This command is still in progress.
****** usage: / <command> [player]
****** permission: PluginArchipelago.Say
****** permission-message: But you have no rights.

*** Rules:
****** descripion: Here you have the Sever rules.
****** usage: / <command> [Player]
Danke für jede hilfe.
Donner744 is offline  
Old 02/06/2015, 20:34   #2
Moderator


 
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
Also mit den ganzen * wundert mich nichts.

Code:
main: me.Archipelago.main.PluginArchipelago
name: PluginArchipelago
version: 1.0
author: Fragenboy

commands:
  Fly:
    description: You can now fly / or not.
    usage: /<command> [player]
    permission: PluginArchipelago.Fly
    permission-message: But you have no rights.

  Heal:
    Description: This command is still in progress.
    usage: /<command> [player]
    permission: PluginArchipelago.Heal
    permission-message: But you have no rights.

  Warp:
    Description: This command is still in progress.
    usage: /<command> [player]
    permission: PluginArchipelago.Warp
    permission-message: But you have no rights.

  say:
    Description: This command is still in progress.
    usage: /<command> [player]
    permission: PluginArchipelago.Say
    permission-message: But you have no rights.

  Rules:
    descripion: Here you have the Sever rules.
    usage: /<command> [Player]
ComputerBaer is offline  
Thanks
1 User
Old 02/07/2015, 08:55   #3
 
elite*gold: 0
Join Date: Jan 2012
Posts: 13
Received Thanks: 0
Danke dir die Sternchen waren bei mir garnicht zu sehen. Trozdem danke jetzt funktioniert es.

So hier nochmal der Code des plugins ich weis die Commands gibt es schon aber würde gerne eine Zusammenfassung für den server machen den wir in Planung haben. Der Möchte immer einen Player namen haben aber ich habe ja soweit ich weis angegeben das Player p = (Player)sender ist. Hier der Code:

Code:
            public void onEnable(){
                System.out.println("Archipelago ist Gestartet");}
		    
            public void onDisable(){ 
                System.out.println("Archipelago ist Gestoppt");
			
            }
                @SuppressWarnings("deprecation")
                public boolean onCommand(CommandSender sender, Command cmd, String[] args) {
                    Player p = (Player)sender;
                    if (cmd.getName() .equalsIgnoreCase("Heal")){
                           if (p.hasPermission("Archi.Heal")) 
                        	{
                                p.sendMessage("§aDu Wurdest erfolgreich geheilt.");
                                p.setFoodLevel(20);
                                p.setHealth(20);
                                p.setMaxHealth(20);
                            }
                            {
                                 if (cmd.getName() .equalsIgnoreCase("Rules")){
                                    p.sendMessage("§2< Willkommen hier sind die Regeln:");
                                    p.sendMessage("§3Confing.yml");
                                    p.sendMessage("Regeln Ende>");
                                }
                                {
									if (cmd.getName().equalsIgnoreCase("Warp")) {
										p.sendMessage("§3Du wurdest Teleportiert.");
										p.sendMessage("Noch in Arbeit.");
                                    }
                                    }
								{
									if (cmd.getName() .equalsIgnoreCase("Say")) {
										p.sendMessage ("Leider noch auser Betrieb.");
                                    }
									
                                {
									if (cmd.getName().equalsIgnoreCase("Fly")) {
										p.getAllowFlight();
										p.isFlying();
										p.getFlySpeed();
									}
								{
									if (cmd.getName().equalsIgnoreCase("Kick")) {
										p.sendMessage("Dies ist leider noch nicht in Funktion.");
									}
								}
								{
									if (cmd.getName().equalsIgnoreCase("Ban")) {
									     p.sendMessage ("Leider noch nicht in Betrieb.");
									}
								}
								}
								}
                            }
                            {
						}
						
					}
                    
					return true;
					
             }
          
}
Donner744 is offline  
Old 02/07/2015, 13:23   #4
Moderator


 
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
Da stellst du mich jetzt aber vor eine große Aufgabe ...

Als erstes solltest du mit (Player)sender vorsichtig sein, weil nicht jeder sender auch ein Player ist. Wenn der Befehl z.B. von der Konsole oder einem Kommandoblock ausgeführt wird, wird es einen Fehler geben. Das könnte man jetzt so lösen, wenn nur Spieler gewünscht sind:
Code:
if(!(sender instanceof Player)) {
    sender.sendMessage("Du bist kein Spieler!");
    return true;
}

Player p = (Player)sender;
Dann hast du in deiner plugin.yml so schön die Berechtigungen für die einzelnen Befehle angegeben. (Ich gestehe, das habe ich noch nie gemacht) Daher weiß ich jetzt nicht, ob Bukkit die beim Ausführen schon für die überprüft oder ob du das weiterhin tun musst.
Ich gehe jetzt einfach mal vom zweiten aus, weil ich damit wieder auf deinen Quellcode eingehen kann. Du überprüfst bei keinem Befehel außer bei heal ob der Spieler das Recht hat und dann ist es plötzlich eine ganz andere Berechtigung. Das könnte also besser so aussehen:
Code:
        if (cmd.getName().equalsIgnoreCase("Heal")) {
            if (p.hasPermission("PluginArchipelago.Heal")) {
                p.sendMessage("§aDu Wurdest erfolgreich geheilt.");
                p.setFoodLevel(20);
                p.setHealth(20);
                p.setMaxHealth(20);
            } else {
                p.sendMessage("Du hast keine Berechtigung.");
            }
        }
Kleine Anmerkung weil es mir an diesem Punkt auffällt und auch dazu passt. Die Befehle kick und ban stehen nicht in deiner plugin.yml, die werden also erst funktionieren können, wenn du sie dort hinzufügst. (Solltest du das bereits getan haben und das sieht man hier bloß nicht, dann ignorier diese Anmerkung)

Dein Code enthält ein wahres Klammerchaos, das die Lesbarkeit ziemlich gut zerstört. Mal ein kleiner Beispiel:
Code:
							{ // ???
									if (cmd.getName().equalsIgnoreCase("Kick")) {
										p.sendMessage("Dies ist leider noch nicht in Funktion.");
									}
								} // ???
								{ // ???
									if (cmd.getName().equalsIgnoreCase("Ban")) {
									     p.sendMessage ("Leider noch nicht in Betrieb.");
									}
								} // ???
								} // ???
								} // ???
                            } // ???
                            { // ???
Außerdem ist eine falsch plazierte Klammer daran Schuld, dass du nur den Heal Befehl benutzen kannst und alle anderen niemals aufgerufen werden. Wenn der Befehl bereits Heal heißt, kann er dann nicht plötzlich rules oder warp oder was auch immer heißen. Dein Code stark vereinfacht:
Code:
        if (cmd.getName() .equalsIgnoreCase("Heal")) {
            if (p.hasPermission("Archi.Heal")) { [...] }
            
            if (cmd.getName() .equalsIgnoreCase("Rules")) { [...] }
            
            if (cmd.getName().equalsIgnoreCase("Warp")) { [...] }
            
            if (cmd.getName() .equalsIgnoreCase("Say")) { [...] }
            
            if (cmd.getName().equalsIgnoreCase("Fly")) { [...] }
            
            if (cmd.getName().equalsIgnoreCase("Kick")) { [...] }
            
            if (cmd.getName().equalsIgnoreCase("Ban")) { [...] }
        }
Aufgeräumt könnte das ganze jetzt so aussehen:
Code:
    public void onEnable() {
        System.out.println("Archipelago ist Gestartet");
    }
    
    public void onDisable() { 
        System.out.println("Archipelago ist Gestoppt");
    }
    
    public boolean onCommand(CommandSender sender, Command cmd, String[] args) {
        if(!(sender instanceof Player)) {
            sender.sendMessage("Du bist kein Spieler!");
            return true;
        }

        Player p = (Player)sender;
        
        if (cmd.getName().equalsIgnoreCase("Heal")) {
            if (p.hasPermission("PluginArchipelago.Heal")) {
                p.sendMessage("§aDu Wurdest erfolgreich geheilt.");
                p.setFoodLevel(20);
                p.setHealth(20);
                p.setMaxHealth(20);
            } else {
                p.sendMessage("Du hast keine Berechtigung.");
            }
        }
        
        if (cmd.getName() .equalsIgnoreCase("Rules")) {
            p.sendMessage("§2< Willkommen hier sind die Regeln:");
            p.sendMessage("§3Confing.yml");
            p.sendMessage("Regeln Ende>");
        }

        if (cmd.getName().equalsIgnoreCase("Warp")) {
            if (p.hasPermission("PluginArchipelago.Warp")) {
                p.sendMessage("§3Du wurdest Teleportiert.");
                p.sendMessage("Noch in Arbeit.");
            } else {
                p.sendMessage("Du hast keine Berechtigung.");
            }
        }

        if (cmd.getName() .equalsIgnoreCase("Say")) {
            if (p.hasPermission("PluginArchipelago.Say")) {
                p.sendMessage ("Leider noch auser Betrieb.");
            } else {
                p.sendMessage("Du hast keine Berechtigung.");
            }
        }
    
        if (cmd.getName().equalsIgnoreCase("Fly")) {
            if (p.hasPermission("PluginArchipelago.Fly")) {
                p.getAllowFlight();
                p.isFlying();
                p.getFlySpeed();
            } else {
                p.sendMessage("Du hast keine Berechtigung.");
            }
        }

        if (cmd.getName().equalsIgnoreCase("Kick")) {
            p.sendMessage("Dies ist leider noch nicht in Funktion.");
        }

        if (cmd.getName().equalsIgnoreCase("Ban")) {
             p.sendMessage ("Leider noch nicht in Betrieb.");
        }
        
        return true;
    }
Auf die Sache mit dem Spieler im Befehl gehe ich im nächsten Beitrag ein, ich muss jetzt aber erstmal weg und will das hier noch los werden.
ComputerBaer is offline  
Old 02/07/2015, 14:48   #5
Moderator


 
elite*gold: 558
Join Date: Feb 2010
Posts: 6,546
Received Thanks: 1,418
So, als erstes sind mir ein paar Fehler aufgefallen:
Code:
    @Override
    public void onEnable() {
        System.out.println("Archipelago ist Gestartet");
    }
    
    @Override
    public void onDisable() { 
        System.out.println("Archipelago ist Gestoppt");
    }
    
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        // [...]
        return true;
    }
Das @Override solltest du angeben, weil du ja die Methoden von JavaPlugin überschreibst. Und was noch viel schlimmer war und die Ausführung deiner Befehle komplett verhindert hat: Dein onCommand hat nicht den Vorgaben entsprochen und wurde dadurch niemals aufgerufen.

So, jetzt zum Spielernamen, oder auch der Frage was du eigentlich erreichen willst.
Bei deinen Befehlen hast du überall im Usage-Text stehen, dass sie einen Spielernamen erwarten. Bei manchen mag das Sinn machen, bei anderen überhaupt nicht. Deinen aktuellen Code kümmert das jedenfalls überhaupt nicht und du ignorierst einen eventuell angegebenen Namen komplett.

Ich werde das ganze jetzt nur am Beispiel des Heal-Befehls zeigen, weil es letztendlich für alle Befehle das selbe ist. Ich werde dir jetzt auch nur eine der möglichen Lösungen zeigen, wenn die dir nicht gefällt denk dir selbst eine aus, das ist ja das schöne an der Programmierung.
Code:
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        Player p = null;
        if((sender instanceof Player)) {
            p = (Player)sender;
        }
        
        Player p2 = null;
        if(args.length == 1) {
            p2 = Bukkit.getPlayer(args[0]);
        }
        
        if (cmd.getName().equalsIgnoreCase("Heal")) {
            if (p.hasPermission("PluginArchipelago.Heal")) {
                if (p2 != null) {
                    sender.sendMessage("Du hast den Spieler erfolgreich geheilt.");
                    p2.sendMessage("§aDu Wurdest erfolgreich geheilt.");
                    p2.setFoodLevel(20);
                    p2.setHealth(20);
                    p2.setMaxHealth(20);
                } else if(p != null) {
                    p.sendMessage("§aDu Wurdest erfolgreich geheilt.");
                    p.setFoodLevel(20);
                    p.setHealth(20);
                    p.setMaxHealth(20);
                } else {
                    sender.sendMessage("Du bist kein Spieler!");
                }
            } else {
                p.sendMessage("Du hast keine Berechtigung.");
            }
        }

        return true;
    }
Bevor du das jetzt einfach übernimmst solltest du noch wissen, dass du mir dem Code bei allen anderen Befehlen (also nicht bei heal) wieder Fehler bekommst wenn es kein Spieler ausführt. Die anderen Befehle müsstest du also erst noch entsprechend anpassen.

Ich könnte dir jetzt alle Befehle anpassen, sodass sie mit der Überarbeitung für heal funktionieren und auch selbst auf andere Spieler angewendet werden können. Da das aber reine Fleißarbeit und keine großartigen überlegungen braucht, werde ich darauf jetzt verzichten.


So jetzt muss ich einfach noch eine Frage stellen (wenn ich es nicht tue wird es ein anderer machen) und will dir dann noch ein paar Tipps geben.

Weißt du überhaupt was du das tust? Hast du vorher Java gelernt? Oder direkt damit angefangen aus Videos abzuschreiben?

Ich glaube nicht, dass Videos die beste Wahl sind wenn es darum geht das Programmieren zu lernen. Es mag Personen geben, die damit perfekt klar kommen, bei den meisten scheint es aber bloß dazu zu führen, dass die alles abschreiben und dann glauben etwas gelernt zu haben, was eigentlich fast nie der Fall ist.
Deshalb kann ich dir nur empfehlen, lern erstmal Java und nimm dazu ein Buch. Und ich will dir da auch gleich eins vorschlagen: Java ist auch eine Insel ( oder als )
Wenn du Java kannst, kann ich dir auch wieder nur empfehlen die Programmierung von Bukkitplugins in Textform zu lernen. Die Dokumentation von Bukkit ist großartig und enthält auch einige gute Tutorials und jede Menge gute Erklärungen.
ComputerBaer is offline  
Old 02/07/2015, 16:34   #6
 
elite*gold: 0
Join Date: Jan 2012
Posts: 13
Received Thanks: 0
Antwort auf die Fragen:
Ich habe java mit hilfe eines Buches in reallife gelernt bin aber trozdem noch anfänger.
Das buch heißt Java mit Eclipse für kids vieleicht kennst du es ja. Tut mir echt leid aber bin sozusagen seid 3 Tagen am programmieren und nach 20 versuchen solche Commands und so zum laufen zu kriegen kenne ich keine anderen ausweg mehr als nachzufragen.

Nochmals ein dankeschön an dich ich gucke mir die Codes von dir an und versuche diese dann zu verstehen und bei anderen Commands Umzusetzen.
Donner744 is offline  
Reply




All times are GMT +1. The time now is 19:52.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.