[Plugin] ChatUtility [Hlavně UUID]
Napsal: 14 črc 2014, 19:20
Protože minecraft nyní přechází na UUID, dovolil jsem si pro vás udělat vychytávku. Nepochybuji o tom že většina pluginu nyní bude požadovat UUID. Proto vám představuji ChatUtility. Plugin který se o starosti UUID postará.
Tvůrce: siOnzee
Testováno na: git-Spigot-1517 (MC: 1.7.9) (API version 1.7.9-R0.3-SNAPSHOT)
Verze: 1.0
Jak plugin funguje
Vezme si příkaz který jste přeposlal jako hráč do chatu. (tj. PlayerCommandPreprocessEvent)
Zkontroluje zdali vůbec obsahuje slovo '{UUID='
Pokud obsahuje vezme regex \\{UUID=(\\S+)\\} a nahradí jméno hráče za UUID.
Pokračuje v odeslání příkazu.
Celej kód je ošetřenej Try & Catch, v případě chyby se vypíše do konzole.
V případě že je hráč Online: Systém to bere rovnou z jeho třídy, a je to okamžité.
V případě že je hráč Offline: UUID musí být vygenerováno, a proto je možná malinka odezva.
V případě že nastane chyba: Příkaz se neodešle (zruší se) a napíše vám to
"UUID for "jméno" not found.
Příklad: /giveitem <uuid> <item> //Ovšem UUID hráče neznáme.
Proto díky ChatUtility můžeme použít
/giveitem {UUID=jménoHráče} koloběžka
ve výsledku nám to převede na
/giveitem 4a2e865c-cba9-3f81-b62e-9b0ca96c5ae7 koloběžka
A odešle se jako normalní příkaz který posílá hráč.
V Konzoli uvidíte ''issued server command: /giveitem {UUID=jménoHráče} koloběžka"
ALTGR = Pravý ALT na klávesnici (nikoliv levý)
+ = Je potřeba ALT držet a pak zmáčknout příslušnou klávesu a zase ho pustit.
{ se dělá přes ALTGR + B
} se dělá přes ALTGR + N
= se dělá hned druhým tlačítkem doleva od backspace (tj. klávesa pro mazání textu)
Stáhnout
Pro programátory v jazyce Java tu je kód, kterým jím vše vysvětlí.
[code=java file=ChatUtility.java]public class ChatUtility extends JavaPlugin {
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(new OnPlayerCommandPreprocess(), this);
}
}
[/code]
[code=java file=OnPlayerCommandPreprocess.java]public class OnPlayerCommandPreprocess implements Listener {
@EventHandler
public void $(PlayerCommandPreprocessEvent event) {
String message = event.getMessage();
if (message.contains("{UUID=")) {
try {
Pattern p = Pattern.compile("\\{UUID=(\\S+)\\}");
Matcher m = p.matcher(message);
while (m.find()) {
String targetName = m.group(1);
Player target = null;
OfflinePlayer offTarget = null;
if ((target = Bukkit.getPlayer(targetName)) != null) {
message = message.replaceAll("\\{UUID=" + targetName + "\\}", target.getUniqueId().toString());
} else if ((offTarget = Bukkit.getOfflinePlayer(targetName)) != null) {
message = message.replaceAll("\\{UUID=" + targetName + "\\}", offTarget.getUniqueId().toString());
} else {
event.getPlayer().sendMessage("UUID for \"" + targetName + "\" not found.");
event.setCancelled(true);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
event.setMessage(message);
}
}[/code]
Tvůrce: siOnzee
Testováno na: git-Spigot-1517 (MC: 1.7.9) (API version 1.7.9-R0.3-SNAPSHOT)
Verze: 1.0
Jak plugin funguje
Vezme si příkaz který jste přeposlal jako hráč do chatu. (tj. PlayerCommandPreprocessEvent)
Zkontroluje zdali vůbec obsahuje slovo '{UUID='
Pokud obsahuje vezme regex \\{UUID=(\\S+)\\} a nahradí jméno hráče za UUID.
Pokračuje v odeslání příkazu.
Celej kód je ošetřenej Try & Catch, v případě chyby se vypíše do konzole.
V případě že je hráč Online: Systém to bere rovnou z jeho třídy, a je to okamžité.
V případě že je hráč Offline: UUID musí být vygenerováno, a proto je možná malinka odezva.
V případě že nastane chyba: Příkaz se neodešle (zruší se) a napíše vám to
"UUID for "jméno" not found.
Příklad: /giveitem <uuid> <item> //Ovšem UUID hráče neznáme.
Proto díky ChatUtility můžeme použít
/giveitem {UUID=jménoHráče} koloběžka
ve výsledku nám to převede na
/giveitem 4a2e865c-cba9-3f81-b62e-9b0ca96c5ae7 koloběžka
A odešle se jako normalní příkaz který posílá hráč.
V Konzoli uvidíte ''issued server command: /giveitem {UUID=jménoHráče} koloběžka"
ALTGR = Pravý ALT na klávesnici (nikoliv levý)
+ = Je potřeba ALT držet a pak zmáčknout příslušnou klávesu a zase ho pustit.
{ se dělá přes ALTGR + B
} se dělá přes ALTGR + N
= se dělá hned druhým tlačítkem doleva od backspace (tj. klávesa pro mazání textu)
Stáhnout
Pro programátory v jazyce Java tu je kód, kterým jím vše vysvětlí.
[code=java file=ChatUtility.java]public class ChatUtility extends JavaPlugin {
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(new OnPlayerCommandPreprocess(), this);
}
}
[/code]
[code=java file=OnPlayerCommandPreprocess.java]public class OnPlayerCommandPreprocess implements Listener {
@EventHandler
public void $(PlayerCommandPreprocessEvent event) {
String message = event.getMessage();
if (message.contains("{UUID=")) {
try {
Pattern p = Pattern.compile("\\{UUID=(\\S+)\\}");
Matcher m = p.matcher(message);
while (m.find()) {
String targetName = m.group(1);
Player target = null;
OfflinePlayer offTarget = null;
if ((target = Bukkit.getPlayer(targetName)) != null) {
message = message.replaceAll("\\{UUID=" + targetName + "\\}", target.getUniqueId().toString());
} else if ((offTarget = Bukkit.getOfflinePlayer(targetName)) != null) {
message = message.replaceAll("\\{UUID=" + targetName + "\\}", offTarget.getUniqueId().toString());
} else {
event.getPlayer().sendMessage("UUID for \"" + targetName + "\" not found.");
event.setCancelled(true);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
event.setMessage(message);
}
}[/code]