Diskuze: plugin
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
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
nwm, pokud tam nebyly ty vipf,vippf a evipf, tak to fungovalo, název plugin.yml se používá i u essentials
Vidím tu pay2win, to je na minecraft serverech zakázáno používat kvůli mojangu (mrkwosoftu)
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
Switch ten problém nevyřeší, jen posune. Chtělo by to naučit se používat enum nebo obecně polymorfismus.
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
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
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
zde je ta chyba: >[2K [12:08:46 ERROR]: Could not load
'plugins/commands.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
celá chyba: >[2K [12:08:46 ERROR]: Could not load
'plugins/commands.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
at
org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPluginLoader.java:162)
~[server.jar:git-Bukkit-b103841]
at
org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:133)
[server.jar:git-Bukkit-b103841]
at
org.bukkit.craftbukkit.v1_9_R1.CraftServer.loadPlugins(CraftServer.java:293)
[server.jar:git-Bukkit-b103841]
at org.bukkit.craftbukkit.v1_9_R1.CraftServer.(CraftServer.java:255)
[server.jar:git-Bukkit-b103841]
at net.minecraft.server.v1_9_R1.PlayerList.(PlayerList.java:69)
[server.jar:git-Bukkit-b103841]
at net.minecraft.server.v1_9_R1.DedicatedPlayerList.(SourceFile:14)
[server.jar:git-Bukkit-b103841]
at
net.minecraft.server.v1_9_R1.DedicatedServer.init(DedicatedServer.java:182)
[server.jar:git-Bukkit-b103841]
at
net.minecraft.server.v1_9_R1.MinecraftServer.run(MinecraftServer.java:506)
[server.jar:git-Bukkit-b103841]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
Caused by: org.yaml.snakeyaml.scanner.ScannerException: 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
už funguje, ten debil eclipse tam nezobrazil tabulátory v plugin.yml
Zobrazeno 13 zpráv z 13.