Diskuze: plugin

Java Java plugin

Avatar
Patrik Neumann:

Ahoj, dělám si podle webu svůj základní plugin do minecraftu, ale jakmile jsem tam přidal po nějakém čase pár řádků, tak mi ho server nechce načíst.
kód Main.java:

package pl.patrikneumann.cz.main;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {
   @Override
   public void onEnable() {
      Bukkit.broadcastMessage("Plugin [testPlugin] byl zapnut! v " + this.getDescription().getVersion() + ".");
   }

   @Override
   public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
          String prefixer = ChatColor.YELLOW + "[Atlantis" + ChatColor.GOLD + "-" + ChatColor.BLUE + "Craft]";
          String vipx = "Cena: 50 kč\nTrvání: 30 dní\nTvar sms: csmc s107285 <nick>\nČíslo: 9033350\nVýhody: /heal,/back,/jump,5X sethome";
          String vippx = "Cena: 79 kč\nTrvání: 30 dní\nTvar sms: csmc s107285 <nick>\nČíslo: 9033379\nVýhody: stejné, jako VIP,/wb,/fly,/speed (1-10),/top,10X sethome";
          String evipx = "Cena: 99 kč\nTrvání: 30 dní\nTvar sms: csmc s107285 <nick>\nČíslo: 9033399\nVýhody: stejné, jako VIP+,/gm,/kick,/ec,15X sethome";
          String vipy = "Cena: 149 Kč\nTrvání: navždy\nTvar sms: csmc 149 s107285 <nick>\nČíslo: 90333\nVýhody: /heal,/back,/jump,5X sethome";
          String vippy = "Cena: 199 Kč\nTrvání: navždy\nTvar sms: csmc 199 s107285 <nick>\nČíslo: 90333\nVýhody: stejné, jako VIP,/wb,/fly,/speed (1-10),/top,10X sethome";
          String evipy = "Cena: 249 Kč\nTrvání: navždy\nTvar sms: csmc 249 s107285 <nick>\bČíslo: 90333\nVýhody: stejné, jako VIP+,/gm,/kick,/ec,15X sethome";
      if (cmd.getName().equalsIgnoreCase("web")) {
         if (sender.hasPermission("commands.CMD.web")) {
            sender.sendMessage(prefixer + ChatColor.GREEN + "http://patrikneumann.cz/");
         } else {
            sender.sendMessage(prefixer + ChatColor.RED + "Nemáte oprávnění.");
         }
       }
      if (cmd.getName().equalsIgnoreCase("ts")) {
         if (sender.hasPermission("commands.CMD.ts")) {
                 sender.sendMessage(prefixer + ChatColor.GREEN + "158.69.202.156:9995");
         } else {
                 sender.sendMessage(prefixer + ChatColor.RED + "Nemáte oprávnění");
         }
        }
      if (cmd.getName().equalsIgnoreCase("vip")) {
          if (sender.hasPermission("commands.CMD.vip")) {
                  sender.sendMessage(prefixer + ChatColor.BLUE + vipx);
          } else {
                  sender.sendMessage(prefixer + ChatColor.RED + "Již vlastníte VIP");
          }
      }
      if (cmd.getName().equalsIgnoreCase("vip+")) {
          if (sender.hasPermission("commands.CMD.vipp")) {
                  sender.sendMessage(prefixer + ChatColor.BLUE + vippx);
          } else {
                  sender.sendMessage(prefixer + ChatColor.RED + "Již vlastníte VIP+");
          }
      }
      if (cmd.getName().equalsIgnoreCase("evip")) {
          if (sender.hasPermission("commands.CMD.evip")) {
                  sender.sendMessage(prefixer + ChatColor.BLUE + evipx);
          } else {
                  sender.sendMessage(prefixer + ChatColor.RED + "Již vlastníte E-VIP");
          }
      }
      if (cmd.getName().equalsIgnoreCase("vipf")) {
          if (sender.hasPermission("commands.CMD.vipf")) {
                  sender.sendMessage(prefixer + ChatColor.BLUE + vipy);
          } else {
                  sender.sendMessage(prefixer + ChatColor.RED + "Již vlastníte VIP");
          }
      }
      if (cmd.getName().equalsIgnoreCase("vippf")) {
          if (sender.hasPermission("commands.CMD.vippf")) {
                  sender.sendMessage(prefixer + ChatColor.BLUE + vippy);
          } else {
                  sender.sendMessage(prefixer + ChatColor.RED + "Již vlastníte VIP+");
          }
      }
      if (cmd.getName().equalsIgnoreCase("evipf")) {
          if (sender.hasPermission("commands.CMD.evipf")) {
                  sender.sendMessage(prefixer + ChatColor.BLUE + evipy);
          } else {
                  sender.sendMessage(prefixer + ChatColor.RED + "Již vlastníte E-VIP");
          }
      }
      if (cmd.getName().equalsIgnoreCase("email")) {
          if (sender.hasPermission("commands.CMD.email")) {
                  sender.sendMessage(prefixer + ChatColor.BLUE + "server@patrikneumann.cz");
          } else {
                  sender.sendMessage(prefixer + ChatColor.RED + "Nemáte oprávnění");
          }
      }
      return true;
   }
}

a kód plugin.yml:

name: commands
main: pl.patrikneumann.cz.main.Main
version: 1.1.0
author: EUcreepemineCZ
website: 'http://www.patrikneumann.cz/'
permissions:
    commands.CMD.*:
        description: "Vsechny Prava."
        children:
            commands.CMD.web: true
            commands.CMD.ts: true
            commands.CMD.vip: true
            commands.CMD.vipp: true
            commands.CMD.evip: true
            commands.CMD.vipf: true
            commands.CMD.vippf: true
            commands.CMD.evipf: true
            commands.CMD.email: true
    commands.CMD.web:
      description: Web
      default: true
    commands.CMD.ts:
      description: TS3
      default: true
    commands.CMD.vip:
      description: info o VIP
      default: true
    commands.CMD.vipp:
      description: info o VIP+
      default: true
    commands.CMD.evip:
      description: info o E-VIP
      default: true
    commands.CMD.vipf:
          description: info o VIP navzdy
          default: true
        commands.CMD.vippf:
          description: info o VIP+ navzdy
          default: true
        commands.CMD.evipf:
          description: info o E-VIP navzdy
          default: true
    commands.CMD.email:
      description: Email serveru
      default: true
commands:
    web:
      description: Web
      permission: commands.CMD.web
    ts:
      description: TS3
      permission: commands.CMD.ts
    vip:
      description: info o VIP
      permission: commands.CMD.vip
    vip+:
      description: info o VIP+
      permission: commands.CMD.vipp
    evip:
      description: info o E-VIP
      permission: commands.CMD.evip
    vipf:
      description: info o VIP navzdy
      permission: commands.CMD.vipf
    vippf:
      description: info o VIP+ navzdy
      permission: commands.CMD.vippf
    evipf:
      description: info o E-VIP navzdy
      permission: commands.CMD.evipf
    email:
      description: Email serveru
      permission: commands.CMD.email

přidával jsem části: vipf,vippf,evipf.
Když tam ty 3 části nejsou, plugin funguje, jakmile je přidám, plugin přestane fungovat, kde je chyba?

Odpovědět 5. července 14:21
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Patrik Neumann
Richard Závodný:

Neměl by ten soubor plugin.yml mít nazev balíčku stejný jako samotný kód?

name: commands
main: pl.patrikneumann.cz.main
version: 1.1.0
author: EUcreepemineCZ
website: 'http://www.patrikneumann.cz/'
permissions:
    commands.CMD.*:
        description: "Vsechny Prava."
        children:
            commands.CMD.web: true
            commands.CMD.ts: true
            commands.CMD.vip: true
            commands.CMD.vipp: true
            commands.CMD.evip: true
            commands.CMD.vipf: true
            commands.CMD.vippf: true
            commands.CMD.evipf: true
            commands.CMD.email: true
    commands.CMD.web:
      description: Web
      default: true
    commands.CMD.ts:
      description: TS3
      default: true
    commands.CMD.vip:
      description: info o VIP
      default: true
    commands.CMD.vipp:
      description: info o VIP+
      default: true
    commands.CMD.evip:
      description: info o E-VIP
      default: true
    commands.CMD.vipf:
          description: info o VIP navzdy
          default: true
        commands.CMD.vippf:
          description: info o VIP+ navzdy
          default: true
        commands.CMD.evipf:
          description: info o E-VIP navzdy
          default: true
    commands.CMD.email:
      description: Email serveru
      default: true
commands:
    web:
      description: Web
      permission: commands.CMD.web
    ts:
      description: TS3
      permission: commands.CMD.ts
    vip:
      description: info o VIP
      permission: commands.CMD.vip
    vip+:
      description: info o VIP+
      permission: commands.CMD.vipp
    evip:
      description: info o E-VIP
      permission: commands.CMD.evip
    vipf:
      description: info o VIP navzdy
      permission: commands.CMD.vipf
    vippf:
      description: info o VIP+ navzdy
      permission: commands.CMD.vippf
    evipf:
      description: info o E-VIP navzdy
      permission: commands.CMD.evipf
    email:
      description: Email serveru
      permission: commands.CMD.email
 
Nahoru Odpovědět 5. července 14:42
Avatar
Odpovídá na Richard Závodný
Patrik Neumann:

nwm, pokud tam nebyly ty vipf,vippf a evipf, tak to fungovalo, název plugin.yml se používá i u essentials

Nahoru Odpovědět 5. července 14:46
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Patrik Neumann
Josef Kuchař (Pepa489):

Vidím tu pay2win, to je na minecraft serverech zakázáno používat kvůli mojangu (mrkwosoftu)

Nahoru Odpovědět 5. července 17:08
2x piš, jednou debuguj
Avatar
pocitac770
Redaktor
Avatar
pocitac770:

Tak zaprvé, mohl by jsi nám zvýraznit, které části přidáš, což způsobuje nenačtení pluginu? Zadruhé, když se plugin nenačte, tak to napíše chybovou hlášku do konzole. Jaká byla? Zařetí, sakra, chlape, nauč se používat switch....

switch(cmd.getName().toLowerCase()){
        case "web":
                .....
                break;
        case "ts":
                .....
                break;
        ........
}

A zbytek kódu taky vypadá příšerně, ani se nedivím že se v tom neorientuju :D

Editováno 5. července 23:36
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 5. července 23:36
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na pocitac770
Hartrik:

Switch ten problém nevyřeší, jen posune. Chtělo by to naučit se používat enum nebo obecně polymorfismus.

 
Nahoru Odpovědět  +1 6. července 0:21
Avatar
Odpovídá na Hartrik
Patrik Neumann:

je to můj první plugin

Nahoru Odpovědět 6. července 2:27
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na pocitac770
Patrik Neumann:

přidávám tyto řádky:
Main.java:

if (cmd.getName().equalsIgnoreCase("vipf")) {
    if (sender.hasPermission("commands.CMD.vipf")) {
            sender.sendMessage(prefixer + ChatColor.BLUE + vipy);
    } else {
            sender.sendMessage(prefixer + ChatColor.RED + "Již vlastníte VIP");
    }
}
if (cmd.getName().equalsIgnoreCase("vippf")) {
    if (sender.hasPermission("commands.CMD.vippf")) {
            sender.sendMessage(prefixer + ChatColor.BLUE + vippy);
    } else {
            sender.sendMessage(prefixer + ChatColor.RED + "Již vlastníte VIP+");
    }
}
if (cmd.getName().equalsIgnoreCase("evipf")) {
    if (sender.hasPermission("commands.CMD.evipf")) {
            sender.sendMessage(prefixer + ChatColor.BLUE + evipy);
    } else {
            sender.sendMessage(prefixer + ChatColor.RED + "Již vlastníte E-VIP");
    }
}

plugin.yml:
children:

commands.CMD.vipf: true
commands.CMD.vippf: true
commands.CMD.evipf: true

pod children

commands.CMD.vipf:
      description: info o VIP navzdy
      default: true
    commands.CMD.vippf:
      description: info o VIP+ navzdy
      default: true
    commands.CMD.evipf:
      description: info o E-VIP navzdy
      default: true

commands

vipf:
  description: info o VIP navzdy
  permission: commands.CMD.vipf
vippf:
  description: info o VIP+ navzdy
  permission: commands.CMD.vippf
evipf:
  description: info o E-VIP navzdy
  permission: commands.CMD.evipf
Nahoru Odpovědět 6. července 2:33
Nic není nemožné, proto se snažím dál.
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Hartrik
pocitac770:

Takhle, třeba kdybych to měl vyřešit co nejjednodušeji já, tak bych to udělal vytvořením abstraktní třídy BaseInfoCommand, která by dědila z Command, v té by se nastavila základní funkčnost práv (často mají hodně společné práva a název), a možná další věci, které jsou "společné", v potomcích by se nastavily konkrétní fráze, co nejdou odvodit + by se předal předkovi ten název commandu.
To s tím switchem bylo pouze ohledně přehlednosti, často totiž lidé rádi takhle vytvářejí pluginy bez základních znalostí OOP, s tím, že Javu znají minimálně, ale alespoň switch by měl znát každý nevímco.

Patriku, až se dostanu k PC, tak to sám zkusím zkopilovat, a podívat se, co na tom nefunguje (pořád jsem ještě nedostal tu chybovou hlášku z konzole ;))

Editováno 6. července 9:05
 
Nahoru Odpovědět 6. července 9:04
Avatar
Odpovídá na pocitac770
Patrik Neumann:

omlouvám se, ale chybovou hlášku jsem nedal, protože mám konzoli zaspamovanou nějakým pluginem, ale nevím, kterým, prostě to vypisuje furt dokola toto:

>[2K [12:05:21 WARN]: Exception in thread "pool-3-thread-446"
>[2K [12:05:21 WARN]: org.apache.commons.lang.UnhandledException: Plugin GUIShop v2.1 generated an exception while executing task 59
at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:56)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: org.bukkit.Server.getOnlinePlayers()[Lorg/bukkit/entity/Player;
at us.alreadycoded.shop.Metrics.postPlugin(Metrics.java:336)
at us.alreadycoded.shop.Metrics.access$4(Metrics.java:329)
at us.alreadycoded.shop.Metrics$1.run(Metrics.java:224)
at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftTask.run(CraftTask.java:53)
at org.bukkit.craftbukkit.v1_9_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53)
... 3 more
Nahoru Odpovědět 6. července 12:06
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Patrik Neumann
Patrik Neumann:

zde je ta chyba: >[2K [12:08:46 ERROR]: Could not load 'plugins/comman­ds.jar' in folder 'plugins'
org.bukkit.plu­gin.InvalidDes­criptionExcep­tion: Invalid plugin.yml

Nahoru Odpovědět 6. července 12:10
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Patrik Neumann
Patrik Neumann:

celá chyba: >[2K [12:08:46 ERROR]: Could not load 'plugins/comman­ds.jar' in folder 'plugins'
org.bukkit.plu­gin.InvalidDes­criptionExcep­tion: Invalid plugin.yml
at org.bukkit.plu­gin.java.Java­PluginLoader.get­PluginDescrip­tion(JavaPlugin­Loader.java:162) ~[server.jar:git-Bukkit-b103841]
at org.bukkit.plu­gin.SimplePlu­ginManager.lo­adPlugins(Sim­plePluginMana­ger.java:133) [server.jar:git-Bukkit-b103841]
at org.bukkit.craf­tbukkit.v1_9_R1­.CraftServer.lo­adPlugins(Craf­tServer.java:293) [server.jar:git-Bukkit-b103841]
at org.bukkit.craf­tbukkit.v1_9_R1­.CraftServer.(Craf­tServer.java:255) [server.jar:git-Bukkit-b103841]
at net.minecraft­.server.v1_9_R1­.PlayerList.(Pla­yerList.java:69) [server.jar:git-Bukkit-b103841]
at net.minecraft­.server.v1_9_R1­.DedicatedPla­yerList.(Source­File:14) [server.jar:git-Bukkit-b103841]
at net.minecraft­.server.v1_9_R1­.DedicatedSer­ver.init(Dedi­catedServer.ja­va:182) [server.jar:git-Bukkit-b103841]
at net.minecraft­.server.v1_9_R1­.MinecraftSer­ver.run(Minecraf­tServer.java:506) [server.jar:git-Bukkit-b103841]
at java.lang.Thre­ad.run(Thread­.java:745) [?:1.8.0_91]
Caused by: org.yaml.snake­yaml.scanner.Scan­nerException: while scanning for the next token
found character '\t(TAB)' that cannot start any token. (Do not use \t(TAB) for indentation)
in 'reader', line 35, column 4:
description: info o VIP navzdy

Nahoru Odpovědět 6. července 12:13
Nic není nemožné, proto se snažím dál.
Avatar
Odpovídá na Patrik Neumann
Patrik Neumann:

už funguje, ten debil eclipse tam nezobrazil tabulátory v plugin.yml

Nahoru Odpovědět 6. července 13:21
Nic není nemožné, proto se snažím dál.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.