- Баллы
- 6
- Имя в Minecraft
- shitcode227
Есть у меня скелет, у него стоит кастомный неймтег, допустим Скилетон-Братишка [1]
Как получить это число из скобок?
Как получить это число из скобок?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
@EventHandler
public void OnMobKill(final EntityDeathEvent e) {
if(e.getEntityType() != EntityType.PLAYER && e.getEntity().isCustomNameVisible()) {
Player p = e.getEntity().getKiller();
String string = e.getEntity().getCustomName();
Integer amount = Integer.parseInt(string.replaceAll("[\\D]", ""));
Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + amount);
}
}
o4ki codinga
Pattern patern=Pattern.compile("[-]?[0-9]+(.[0-9]+)?");
Matcher matcher=patern.matcher(string);
Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + Integer.parseInt(matcher));
Я совсем тугой, написал какой то бред, а его проверить даже не могу, т.к незнаю как мне его теперь вывести 😠PHP:Pattern patern=Pattern.compile("[-]?[0-9]+(.[0-9]+)?"); Matcher matcher=patern.matcher(string); Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + Integer.parseInt(matcher));
Pattern: \\[(\\d+?)\\]
Pattern patern=Pattern.compile("\\\\[(\\\\d+?)\\\\]");
Matcher matcher=patern.matcher(string);
String onlynum=string.replaceAll("[^0-9]+", "");
Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + Integer.parseInt(s1));
Тебе скинули статью с хабраа как мне вывести, не доходит, уже всё что эклипс предлогал попробывал - не работаетКод:Pattern patern=Pattern.compile("\\\\[(\\\\d+?)\\\\]"); Matcher matcher=patern.matcher(string);
попробывал ещё так, но что то пошло не такКод:String onlynum=string.replaceAll("[^0-9]+", ""); Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + Integer.parseInt(s1));
прочитал, но мало что понял.Тебе скинули статью с хабра
Pattern patern=Pattern.compile("\\\\[(\\\\d+?)\\\\]");
Matcher matcher=patern.matcher(string);
Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + Integer.parseInt(matcher.group()));
Много слешей.Как я понял, это правильный вариант кода, но не работает.Код:Pattern patern=Pattern.compile("\\\\[(\\\\d+?)\\\\]"); Matcher matcher=patern.matcher(string); Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + Integer.parseInt(matcher.group()));
Много слешей.
group(1)
@EventHandler
public void OnMobKill(final EntityDeathEvent e) {
if(e.getEntityType() != EntityType.PLAYER) {
Player p = e.getEntity().getKiller();
String string = e.getEntity().getCustomName();
Pattern patern=Pattern.compile("\\[(\\d+?)\\]");
Matcher matcher=patern.matcher(string);
Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + Integer.parseInt(matcher.group(1)));
}
}
[21:16:27] [Server thread/ERROR]: Could not pass event EntityDeathEvent to BossFight v0.1
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory.callEntityDeathEvent(CraftEventFactory.java:395) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.EntityLiving.die(EntityLiving.java:1116) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.EntityZombie.die(EntityZombie.java:429) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.EntityLiving.damageEntity(EntityLiving.java:956) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.EntityMonster.damageEntity(EntityMonster.java:44) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.EntityZombie.damageEntity(EntityZombie.java:163) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.EntityHuman.attack(EntityHuman.java:1005) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.EntityPlayer.attack(EntityPlayer.java:1311) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1623) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.PacketPlayInUseEntity.a(SourceFile:69) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.PacketPlayInUseEntity.a(SourceFile:13) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_181]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_181]
at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_181]
Caused by: java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Unknown Source) ~[?:1.8.0_181]
at lco.ezsc.bossfight.Levels.OnMobKill(Levels.java:134) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_181]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_181]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-dcd1643-e60fc34]
... 23 more
Если у тебя цифра будет в конце в скобках ([]), то просто как-то такУбиваю зомби с неймом 'zxc [123]' ничего не происходит.Код:@EventHandler public void OnMobKill(final EntityDeathEvent e) { if(e.getEntityType() != EntityType.PLAYER) { Player p = e.getEntity().getKiller(); String string = e.getEntity().getCustomName(); Pattern patern=Pattern.compile("\\[(\\d+?)\\]"); Matcher matcher=patern.matcher(string); Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + Integer.parseInt(matcher.group(1))); } }
public int getInt(String s) throws NumberFormatException {
int number = 0;
boolean parsing = false;
//Никогда раньше не писал таких итераторов, может пропускать один символ, там уже сам поправишь
for(int i = s.length()-1; i>=0; i--) {
char c = s.charAt(i);
if(c.equals(']')) parsing = true;
if(c.equals('[')) break;
if(parsing) {
int n = Integer.parseInt(String.valueOf(c));
number += n * Math.pow(10, String.valueOf(number).length());
}
}
if(!parsing) throw new NumberFormatException("Not found!");
return number;
}
if(char.equals(']')) parsing = true;Если у тебя цифра будет в конце в скобках ([]), то просто как-то так
Хотя, может проще сплитнуть [, получить последний элемент, дальше сплитнуть ] и получить первый элемент.PHP:public int getInt(String s) throws NumberFormatException { int number = 0; boolean parsing = false; //Никогда раньше не писал таких итераторов, может пропускать один символ, там уже сам поправишь for(int i = s.length()-1; i>=0; i--) { char c = s.charAt(i); if(char.equals(']')) parsing = true; if(char.equals('[')) break; if(parsing) { int n = Integer.parseInt(String.valueOf(c)); number += n * Math.pow(10, String.valueOf(number).length()); } } if(!parsing) throw new NumberFormatException("Not found!"); return number; }
И обосраться, если в скобках пусто, или не int. Как и варик с реплейсом обосрался на пустоте.Хотя, может проще сплитнуть [, получить последний элемент, дальше сплитнуть ] и получить первый элемент.
Замени на ==if(char.equals(']')) parsing = true;
if(char.equals('[')) break;
тут char - error