Veamos, teniendo la siguiente string:
/sudoif $hand(nombre_de_jugador)==3 comando_que_se_aplica_si_se_cumple_la_condición Nota: no tiene por qué ser $hand, sino cualquier otro como $exp. Aunque siempre siguiendo el patrón: $*(*).
Necesito separar y tener dos variables que sean "
hand" y "
nombre_de_jugador" para así poder reemplazar "
$hand(nombre_de_jugador)" por el valor correspondiente a "
Integer.toString(nombre_de_jugador.getItemInHand() .getTypeId())".
Hay que tener en cuenta que un mismo string puede contener varios "$*(*)" donde el nombre del jugador cambie e incluso la "variable principal" cambie.
Por ejemplo:
/sudoif $exp(nombre_de_jugador_1)>$exp(nombre_de_jugador_2 ) comando_que_se_aplica_si_se_cumple_la_condición /sudoif $food(nombre_de_jugador_2)>10 comando_que_se_aplica_si_se_cumple_la_condición
Ahí es donde tengo que saber si es "
$exp(*)" por ejemplo para reemplazar por "
Integer.toString(*.getTotalExperience())" o si es "
$food(*)" para en ese caso reemplazar por "
Integer.toString(*.getFoodLevel())".
No sé si ahora me he explicado correctamente con el asunto del problema.
Saludos!
##############################################
EDITO:
He solucionado parcialmente el problema haciendo esto:
Código:
public String variables(String string) {
Calendar calendar = Calendar.getInstance();
return string.replaceAll("\\$gamemode\\((.+?)\\)", Bukkit.getServer().getPlayer("$1").getGameMode().name())
.replaceAll("\\$world\\((.+?)\\)", Bukkit.getServer().getPlayer("$1").getWorld().getName())
.replaceAll("\\$food\\((.+?)\\)", Integer.toString(Bukkit.getServer().getPlayer("$1").getFoodLevel()))
.replaceAll("\\$health\\((.+?)\\)", Integer.toString(Bukkit.getServer().getPlayer("$1").getHealth()))
.replaceAll("\\$exp\\((.+?)\\)", Integer.toString(Bukkit.getServer().getPlayer("$1").getTotalExperience()))
.replaceAll("\\$amount\\((.+?)\\)", Integer.toString(Bukkit.getServer().getPlayer("$1").getItemInHand().getTypeId()))
.replaceAll("\\$mctime\\((.+?)\\)", Integer.toString(Bukkit.getServer().getPlayer("$1").getItemInHand().getAmount()))
.replace("$hour", Integer.toString(calendar.get(Calendar.HOUR_OF_DAY)))
.replace("$min", Integer.toString(calendar.get(Calendar.MINUTE)))
.replace("$sec", Integer.toString(calendar.get(Calendar.SECOND)))
.replace("$year", Integer.toString(calendar.get(Calendar.YEAR)))
.replace("$month", Integer.toString(calendar.get(Calendar.MONTH)+1))
.replace("$day", Integer.toString(calendar.get(Calendar.DAY_OF_MONTH)));
}
El problema es que ahora "$1" no lo reemplaza por el nombre del usuario, sino que se queda simplemente en "$1". Sin embargo si hago esto:
Código:
.replaceAll("\\$gamemode\\((.+?)\\)", "$1")
Sí obtengo lo que necesito.
¿Alguna idea sobre cómo podría solventar esto?