• 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!

Eigenes clearlag Plugin geht nicht

BrothersHouse

Minecrafter
Registriert
6 Januar 2017
Beiträge
5
Diamanten
0
Hey hey liebes Forum,
ich habe ein Problem, nicht nur das ich den Post zuerst falsch gepostet habe. Nein es gibt noch mehr.


Ich dachte mir, mein Server brauch noch ein clearlag Plugin, die die ich downloaden kann finde ich öde.
Lieber mache ich ein Selbst.
Nun schön und gut.
Es funktioniert nur halb und ich finde mein Fehler zum verrecken nicht.
hier mal der Quellcode:

Main
Java:
package de.payne.classes;

import java.text.DecimalFormat;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Animals;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Monster;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {

DecimalFormat formatter = new DecimalFormat("#.##");
    public void onEnable() {
        Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new TPS(), 100L, 1L);
    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    
        if(cmd.getName().equalsIgnoreCase("tps")){
        
            if(sender.hasPermission("tps.use")){
            
            if(sender instanceof Player) {
            Player player = (Player) sender;
            if(player.isOp());
            ChatColor.translateAlternateColorCodes('&', "§");
            player.sendMessage("§8§m-----------------------");
            player.sendMessage("");
            player.sendMessage("§e§l(!)§r §eServer §7: §8(§7" + Bukkit.getServerName() + "§8)");
            player.sendMessage("§e§l(!)§r §eTPS §7: " + formatter.format(TPS.getTPS()) + "#.##");
            player.sendMessage("§e§l(!)§r §eServer §7: §8(§aOnline§8)");
            player.sendMessage("");
            player.sendMessage("§8§m-----------------------");
                }
            }
        return false;
    }
        return false;
    }
        public boolean onCommand1(final CommandSender sender,Command cmd,String label,String[] args){
            
            
                if(label.equalsIgnoreCase("clearlag")){
                
                        if(sender.hasPermission("clearlag.use")){
                        
                                if(args.length == 0){
                                
                                        for(Entity entity : Bukkit.getWorld("world").getEntities()){
                                                if(entity instanceof Item || entity instanceof Animals || entity instanceof Monster){
                                                        entity.remove();
                                                }
                                        }
                                        sender.sendMessage(ChatColor.GREEN+"Alle Entitys gelöscht!");
                                }else{
                                    sender.sendMessage(ChatColor.GREEN+"Du musst /clearlag eingeben!");
                                }
                                    
                                    
                                }}
                return false;
}}

TPS
Java:
package de.payne.classes;

import org.bukkit.Bukkit;

public class TPS
  implements Runnable
{
  public static int TICK_COUNT = 0;
  public static long[] TICKS = new long['»'];
  public static long LAST_TICK = 0L;

  public static double getTPS()
  {
    return getTPS(100);
  }

  public static double getTPS(int ticks)
  {
    try
    {
      if (TICK_COUNT < ticks) {
        return 20.0D;
      }
      int target = (TICK_COUNT - 1 - ticks) % TICKS.length;
      long elapsed = System.currentTimeMillis() - TICKS[target];

      return ticks / (elapsed / 1000.0D);
    }
    catch (Exception e)
    {
      if ((e instanceof ArrayIndexOutOfBound***ception)) {
        return 20.0D;
      }
      Bukkit.getLogger().severe("[Clearlag] Beim abrufen des TPS ist ein Fehler aufgetreten");
    }
    return 20.0D;
  }

  public static long getElapsed(int tickID)
  {
    long time = TICKS[(tickID % TICKS.length)];
    return System.currentTimeMillis() - time;
  }

  public void run()
  {
    TICKS[(TICK_COUNT % TICKS.length)] = System.currentTimeMillis();
    TICK_COUNT += 1;
  }
}

plugin.yml
Code:
name: clearlag
version: 1.0
author: Felix Payne
main: de.payne.classes.Main
commands:
  clearlag:
  tps:

Main.java --> http://pastebin.com/Ng1dH3w6
TPS.java --> http://pastebin.com/Xf79hpeV
plugin.yml --> http://pastebin.com/bpEi3LMv

das /tps funktioniert jetzt, nur das /clearlag will nicht funktionieren, ich bin mir nicht sicher ob ich bei dem Teil:

Code:
if(label.equalsIgnoreCase("clearlag")){
das mache muss:
Code:
if(cmd.getName().equalsIgnoreCase("clearlag")){
Hilfe, und danke schon mal im voraus.
 
Zuletzt bearbeitet:

BrothersHouse

Minecrafter
Registriert
6 Januar 2017
Beiträge
5
Diamanten
0
Was soll denn onCommand1 sein?
Du musst onCommand1 in onCommand integrieren oder onCommand1 im false-Fall von onCommand aufrufen.


Meinst du etwa so?
Java:
package de.payne.classes;

import java.text.DecimalFormat;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Animals;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Monster;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
   
DecimalFormat formatter = new DecimalFormat("#.##");
    public void onEnable() {
        Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new TPS(), 100L, 1L);
    }
   
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
       
        if(cmd.getName().equalsIgnoreCase("tps")){
           
            if(sender.hasPermission("tps.use")){
               
            if(sender instanceof Player) {
            Player player = (Player) sender;
            if(player.isOp());
            ChatColor.translateAlternateColorCodes('&', "§");
            player.sendMessage("§8§m-----------------------");
            player.sendMessage("");
            player.sendMessage("§e§l(!)§r §eServer §7: §8(§7" + Bukkit.getServerName() + "§8)");
            player.sendMessage("§e§l(!)§r §eTPS §7: " + formatter.format(TPS.getTPS()) + "#.##");
            player.sendMessage("§e§l(!)§r §eServer §7: §8(§aOnline§8)");
            player.sendMessage("");
            player.sendMessage("§8§m-----------------------");
           
           
        if(label.equalsIgnoreCase("clearlag")){
               
            if(sender.hasPermission("clearlag.use")){
                   
                    if(args.length == 0){
                           
                           for(Entity entity : Bukkit.getWorld("world").getEntities()){
                                  if(entity instanceof Item || entity instanceof Animals || entity instanceof Monster){
                                            entity.remove();
                                    }
                            }
                            sender.sendMessage(ChatColor.GREEN+"Alle Entitys gelöscht!");
                    }else{
                        sender.sendMessage(ChatColor.GREEN+"Du musst /clearlag eingeben!");
                    }
                               
                               
                    }}
            }
        }
    return false;
}
    return false;        
}}

so klappt das immer noch nicht...
möchtest du das für mich machen, sodass ich aus deinem Ergebnis lernen kann?
bzw. so dass ich das mal vergleichen kann.
 

TheSimufreak

Kuhfänger
Registriert
28 Juni 2012
Beiträge
78
Diamanten
0
Wenn ich die beiden Klassen vergleiche, beschleicht mich das Gefühl, dass du die TPS Klasse (mithilfe eines Decompilers) kopiert hast.
Man könnte sagen, ich habe den Eindruck du weißt nicht wirklich was du da eigentlich tust...
Du findest hier eine gute Übersicht über die Pluginprogrammierung für Bukkit/Spigot, wenn du dich daran orientierst sollten sich die Fehler auflösen. Ich rate dir auch deinen Quellcode vernünftig zu formatieren, das ist ja schon fast eine Zumutung den zu lesen.
 

Watteschaf

Redstoneengineer
Registriert
2 November 2013
Beiträge
40
Diamanten
0
Du musst das schon richtig integrieren. Erstmal deinen if-Block aus Zeile 28 ordentlich abschließen, dann den zweiten Befehl entsprechend mit else if(cmd.getname().equalsIgnoreCase...) integrieren.
Wichtig: Ich hab mir bisher nur deine Struktur angesehen, ob der Inhalt von onCommand1 funktioniert hab ich mir nicht angeschaut.

Ansonsten kann ich mich TheSimufreak nur anschließen. ;-)
 
F

Figz

Guest
Aus dem Kopf und mit Notepad++, also keine Garantie, dass es jetzt funktioniert.
Ist jedoch vom Codeansatz auf jeden Fall besser!

Code:
package de.payne.classes;

import java.text.DecimalFormat;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Animals;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.Monster;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
 
DecimalFormat formatter = new DecimalFormat("#.##");

    @Override
    public void onEnable() {
        Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new TPS(), 100L, 1L);
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
     
        if(label.equalsIgnoreCase("tps")){
         
            if(sender.hasPermission("tps.use")){
             
            if(sender instanceof Player) {
            Player player = (Player) sender;
            if(player.isOp()){
            ChatColor.translateAlternateColorCodes('&', "§");
            player.sendMessage("§8§m-----------------------");
            player.sendMessage("");
            player.sendMessage("§e§l(!)§r §eServer §7: §8(§7" + Bukkit.getServerName() + "§8)");
            player.sendMessage("§e§l(!)§r §eTPS §7: " + formatter.format(TPS.getTPS()) + "#.##");
            player.sendMessage("§e§l(!)§r §eServer §7: §8(§aOnline§8)");
            player.sendMessage("");
            player.sendMessage("§8§m-----------------------");
           return true;
           }
            }
            }
            }
       
        else if(label.equalsIgnoreCase("clearlag")){
             
            if(sender.hasPermission("clearlag.use")){
                 
                    if(args.length == 0){
                         
                           for(Entity entity : Bukkit.getWorld("world").getEntities()){
                                  if(entity instanceof Item || entity instanceof Animals || entity instanceof Monster){
                                            entity.remove();
                                    }
                            }
                            sender.sendMessage(ChatColor.GREEN+"Alle Entitys gelöscht!");
                            return true;
                    }else{
                        sender.sendMessage(ChatColor.GREEN+"Du musst /clearlag eingeben!");
                    }
                             
            }
        }
    return false;
}

}

Plugin.yml:

Code:
name: clearlag
version: 1.0
author: Felix Payne
main: de.payne.classes.Main
commands:
  clearlag:
    usage: /<command>
  tps:
    usage: /<command>
 
Zuletzt bearbeitet von einem Moderator:

ᅟᅟᅟᅟᅟᅟᅟ

Minecrafter
Registriert
26 Dezember 2016
Beiträge
1
Alter
28
Diamanten
0
Minecraft
SenpaiAFAIK
Man benutzt die onCommand Methode vom JavaPlugin nicht, never ever.

Lieber:

Code:
public class cmdClearlag implements CommandExecutor{

    /* (non-Javadoc)
    * @see org.bukkit.command.CommandExecutor#onCommand(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String, java.lang.String[])
    */
    @Override
    public boolean onCommand(CommandSender arg0, Command arg1, String arg2, String[] arg3) {

        if (label.equalsIgnoreCase("clearlag")) {

            if (sender.hasPermission("clearlag.use")) {

                if (args.length == 0) {

                    for (Entity entity : Bukkit.getWorld("world").getEntities()) {
                        if (entity instanceof Item || entity instanceof Animals || entity instanceof Monster) {
                            entity.remove();
                        }
                    }
                    sender.sendMessage(ChatColor.GREEN + "Alle Entitys gelöscht!");
                } else {
                    sender.sendMessage(ChatColor.GREEN + "Du musst /clearlag eingeben!");
                }

            }
        }
        return false;
    }
}

Command registrieren mit
Code:
public void onEnable() {
        getServer().getScheduler().scheduleSyncRepeatingTask(this, new TPS(), 100L, 1L);

        getServer().getPluginCommand("clearlag").setExecutor(new cmdClearlag());
}

Alternativ kannst du auch anstatt "implements CommandExecutor" "extends BukkitCommand" machen und den Command mit
Code:
public void onEnable() {
        getServer().getScheduler().scheduleSyncRepeatingTask(this, new TPS(), 100L, 1L);

        ((CraftServer)getServer()).getCommandMap().register("clearlag", new cmdClearlag("clearlag"))
[code]
registrieren.

Die zweite Methode ist besser, damit kannst du aber nur für 1 Serverversion

Wobei ich nicht verstehe, warum der Command nicht auch bei '/clearlag random shit' ausgeführt werden soll.
 

BrothersHouse

Minecrafter
Registriert
6 Januar 2017
Beiträge
5
Diamanten
0
Du musst das schon richtig integrieren. Erstmal deinen if-Block aus Zeile 28 ordentlich abschließen, dann den zweiten Befehl entsprechend mit else if(cmd.getname().equalsIgnoreCase...) integrieren.
Wichtig: Ich hab mir bisher nur deine Struktur angesehen, ob der Inhalt von onCommand1 funktioniert hab ich mir nicht angeschaut.

Ansonsten kann ich mich TheSimufreak nur anschließen. ;-)

vielen dank, nicht nur an dich sondern auch an TheSimufreak,
der Quellcode von TPS.java hab ich mir aus dem Inet gezogen, war kostenlos ;)
Ich hab mir jetzt nen Buch zu Java bestellt, könnt ihr mir sagen ob das ne gute Wahl war?
https://www.amazon.de/Programmieren...&qid=1483736613&sr=8-1&keywords=Java+8+lernen
 

BrothersHouse

Minecrafter
Registriert
6 Januar 2017
Beiträge
5
Diamanten
0
Man benutzt die onCommand Methode vom JavaPlugin nicht, never ever.

Lieber:

Code:
public class cmdClearlag implements CommandExecutor{

    /* (non-Javadoc)
    * @see org.bukkit.command.CommandExecutor#onCommand(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String, java.lang.String[])
    */
    @Override
    public boolean onCommand(CommandSender arg0, Command arg1, String arg2, String[] arg3) {

        if (label.equalsIgnoreCase("clearlag")) {

            if (sender.hasPermission("clearlag.use")) {

                if (args.length == 0) {

                    for (Entity entity : Bukkit.getWorld("world").getEntities()) {
                        if (entity instanceof Item || entity instanceof Animals || entity instanceof Monster) {
                            entity.remove();
                        }
                    }
                    sender.sendMessage(ChatColor.GREEN + "Alle Entitys gelöscht!");
                } else {
                    sender.sendMessage(ChatColor.GREEN + "Du musst /clearlag eingeben!");
                }

            }
        }
        return false;
    }
}

Command registrieren mit
Code:
public void onEnable() {
        getServer().getScheduler().scheduleSyncRepeatingTask(this, new TPS(), 100L, 1L);

        getServer().getPluginCommand("clearlag").setExecutor(new cmdClearlag());
}

Alternativ kannst du auch anstatt "implements CommandExecutor" "extends BukkitCommand" machen und den Command mit
Code:
public void onEnable() {
        getServer().getScheduler().scheduleSyncRepeatingTask(this, new TPS(), 100L, 1L);

        ((CraftServer)getServer()).getCommandMap().register("clearlag", new cmdClearlag("clearlag"))
[code]
registrieren.

Die zweite Methode ist besser, damit kannst du aber nur für 1 Serverversion

Wobei ich nicht verstehe, warum der Command nicht auch bei '/clearlag random shit' ausgeführt werden soll.

vielen dank an euch <3 habt mir wirklich weiter geholfen.
Bin komplett neu in Java... wie schon gesagt, werde mir nen Buch kaufen.
Hoffe das das dann besser klappen wird.
 

TheSimufreak

Kuhfänger
Registriert
28 Juni 2012
Beiträge
78
Diamanten
0
vielen dank an euch 3 habt mir wirklich weiter geholfen.
Immer wieder gerne.
Kann zu den Bücher leider nicht viel sagen, kann aber nicht allzu verkehrt sein :D
Alternativ hab ich in der Vergangenheit gute Erfahrung mit wikibooks gemacht, ist wie Wikipedia nur dass dort ganze Themengebiete erklärt werden. Fehlen darf natürlich auf keinen Fall der Klassiker von Rheinwerk, ebenfalls kostenlos.
 

TheSimufreak

Kuhfänger
Registriert
28 Juni 2012
Beiträge
78
Diamanten
0
Man benutzt die onCommand Methode vom JavaPlugin nicht, never ever.
Hab den Beitrag gar nicht gesehen :'D
Grundsätzlich hat <der dessen Name nicht genannt werden ...kann> recht, die Logik für die Commands in der Hauptklasse zeugt von schlechtem Programmierstil. Du musst dich bei der genannten Methode mit Vererbung und Interfaces auseinandersetzen, was am Anfang etwas verwirrend sein kann. Zum Einstieg ist das (meiner Meinung nach) ausreichend, gewöhn dir das aber bitte nicht an.
 
Oben