Domanda setMaxHealth

Stato
Discussione chiusa ad ulteriori risposte.

DeeJack

Utente Electrum
25 Agosto 2015
409
25
43
124
Salve, ho bisogno ancora una volta di aiuto. In pratica vorrei fare un plugin con il comando /maxhealth set 30 ad esempio mette 30 di vita a tutti, il problema è... come? con player.setMaxHealth() posso solo mettere un numero tra le parentesi, io vorrei mettere l'args[1], cioè il numero scelto al player, ma come?
E altra cosa, come faccio a fare che la modifica avviene in tutto il server e non solo al sender? Grazie
Scusate se faccio tante domande, ma me le sto ancora studiando ste cose e su internet ho trovato solo cose vecchie e che non andavano bene.
@AlessioDP
 

AlessioDP

Sviluppatore
Amministratore
30 Gennaio 2012
4,966
228
964
1,735
Premetto che non sono sicuro si possa fare in modo che la vita di un utente superi 20 però puoi comunque provare.

Il comando è semplice:
Codice:
sender.sexMaxHealth(30);
Se vuoi mettere il valore scelto dall'utente fai:
Codice:
sender.sexMaxHealth(Integer.parseInt(args[1]));
Mi raccomando devi assicurarti che siano solo numeri.

Tu però vuoi farlo a tutti gli utenti attivi nel server, quindi devi fare un ciclo for per tutti gli utenti del server:
Codice:
for(Player player : Bukkit.getOnlinePlayers()){
    player.setMaxHealth(Integer.parseInt(args[1]));
}

Ricordati inoltre che ogni utente che entra nel server deve anch'esso avere la nuova vita. Quindi all'evento Join inserirai il comando. (Mi raccomando evita di cambiarla per tutti i player ogni volta, basta che ti salvi la vita massima in una variabile così che quando entra un utente nel server invece di inserire args[1], metti la variabile)
 

DeeJack

Utente Electrum
25 Agosto 2015
409
25
43
124
Ultima modifica:
Premetto che non sono sicuro si possa fare in modo che la vita di un utente superi 20 però puoi comunque provare.

Il comando è semplice:
Codice:
sender.sexMaxHealth(30);
Se vuoi mettere il valore scelto dall'utente fai:
Codice:
sender.sexMaxHealth(Integer.parseInt(args[1]));
Mi raccomando devi assicurarti che siano solo numeri.

Tu però vuoi farlo a tutti gli utenti attivi nel server, quindi devi fare un ciclo for per tutti gli utenti del server:
Codice:
for(Player player : Bukkit.getOnlinePlayers()){
    player.setMaxHealth(Integer.parseInt(args[1]));
}

Ricordati inoltre che ogni utente che entra nel server deve anch'esso avere la nuova vita. Quindi all'evento Join inserirai il comando. (Mi raccomando evita di cambiarla per tutti i player ogni volta, basta che ti salvi la vita massima in una variabile così che quando entra un utente nel server invece di inserire args[1], metti la variabile)
Non riesco, cioè il comando funziona perfettamente, ma non capisco come fare a prendere la variabile che setto all'args[1] e usarla all'evento, e un'altra cosa, io lo uso in una classe separata dal plugin che prende i vari comandi, come devo fare per farlo eseguire all'evento?

Edit: mi era venuto doppio post.
 

AlessioDP

Sviluppatore
Amministratore
30 Gennaio 2012
4,966
228
964
1,735
Non riesco, cioè il comando funziona perfettamente, ma non capisco come fare a prendere la variabile che setto all'args[1] e usarla all'evento, e un'altra cosa, io lo uso in una classe separata dal plugin che prende i vari comandi, come devo fare per farlo eseguire all'evento?

Edit: mi era venuto doppio post.
Come le ho detto deve catturare l'evento di quando joina un player (Cerca su google: bukkit on join player).

Riguardo a come fai a salvare il valore è semplice: basta che metti il valore in una variabile globale, anche statica va bene.
Così che dall'altro metodo riesci a prenderla.
 

DeeJack

Utente Electrum
25 Agosto 2015
409
25
43
124
Come le ho detto deve catturare l'evento di quando joina un player (Cerca su google: bukkit on join player).
Sisi quello lo so, ho letto il "tutorial" sul sito di bukkit. Il problema è: Funziona anche se è in un'altra classe?
Riguardo a come fai a salvare il valore è semplice: basta che metti il valore in una variabile globale, anche statica va bene.
Così che dall'altro metodo riesci a prenderla.
Ok ;)
 

DeeJack

Utente Electrum
25 Agosto 2015
409
25
43
124
Ovviamente si, Java è fatto apposta.
Scusa se ti chiedo di nuovo ma non riesco proprio, questo è il codice fin'ora:
Pastebin
Dove la devo mettere la variabile pubblica? se provo a metterla dentro il "onCommand" mi dice che posso usare solo "final" e non "public" o "static", dove lo devo mettere? E hai consigli se ho sbagliato qualcosa?
 

AlessioDP

Sviluppatore
Amministratore
30 Gennaio 2012
4,966
228
964
1,735
Scusa se ti chiedo di nuovo ma non riesco proprio, questo è il codice fin'ora:
Pastebin
Dove la devo mettere la variabile pubblica? se provo a metterla dentro il "onCommand" mi dice che posso usare solo "final" e non "public" o "static", dove lo devo mettere? E hai consigli se ho sbagliato qualcosa?
Scusami ma un minimo di java lo devi conoscere per fare queste cose.
Non è obbligatorio l'utilizzo della variabile statica, sta a te decidere se la vuoi così o no.

Dovresti però leggerti cos'è una variabile globale e soprattutto come far passare una variabile tra 2 class differenti. (Se fosse static sarebbe più facile)

Dopo che avrai letto cos'è una variabile globale ti consiglio di inserirla nella classe principale, così da poterci accedere tramite la variabile che hai inserito "Plugin plugin".
Quindi una cosa simile:
Codice:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
...
plugin.variabile = Integer.parseInt(args[1]);
...
In questo modo, plugin.variabile, avrà quel valore.


Ps. Te lo dico per esperienza: hai sbagliato un import "net.md_5.bungee.api.ChatColor", devi inserire l'altro. (Ti genererà un errore altrimenti)
 
Stato
Discussione chiusa ad ulteriori risposte.