Хостинг серверов Minecraft playvds.com
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Получить цифру из неймтега моба

Тема в разделе "Разработка плагинов для новичков", создана пользователем shitcode1337, 5 окт 2018.

Статус темы:
Закрыта.
  1. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    Есть у меня скелет, у него стоит кастомный неймтег, допустим Скилетон-Братишка [1]
    Как получить это число из скобок?
     
  2. Mr Hosting
  3. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    PHP:
        @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);
            }
        }
    Пробывал так - не работает, ошибок в консоле нет.
     
  4. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    i0xHeX
    Разобраться в базовых регулярных выражениях поможет эта страница:
    http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

    Тебе нужно создать Pattern, пропарсить строку, тем самым получив Matcher, из Matcher'а получить группу (строку), которая тебе нужна (число в скобках), и перевести ее в число (Integer.parseInt(String str)). Хочу заметить, что String#replaceAll заменяет базируясь на регулярном выражении, а символы '[' и ']' являются частью его синтаксиса, а не как обычные символы, чтобы определить их как обычные, нужно записывать через слеши: "\\[".

    Паттерн здесь может быть примерно такой: "\\[(\\d+?)\\]". Это для способа, который я описал выше.

    P.S. Я понял, что там способ как замена НЕ цифровых символов на пустоту. Может быть без [ ] пойдет. В любом случае лучше создавать более устойчивый вариант, т.к. в названии могут быть числа в других местах (вдруг придется так сделать). Так же фразы "не работает" - бесполезные, если нужна адекватная помощь.
     
    Последнее редактирование: 5 окт 2018
  5. Nikolai_Faint

    Nikolai_Faint Активный участник Только чтение Пользователь

    Баллы:
    96
    o4ki codinga
     
  6. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    i0xHeX
  7. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    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));
    Я совсем тугой, написал какой то бред, а его проверить даже не могу, т.к незнаю как мне его теперь вывести :mad:
     
  8. Nikolai_Faint

    Nikolai_Faint Активный участник Только чтение Пользователь

    Баллы:
    96
     
  9. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    Код:
     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));
    попробывал ещё так, но что то пошло не так
     
    Последнее редактирование: 5 окт 2018
  10. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Тебе скинули статью с хабра
     
  11. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    прочитал, но мало что понял.
     
  12. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    Код:
            Pattern patern=Pattern.compile("\\\\[(\\\\d+?)\\\\]");
            Matcher matcher=patern.matcher(string);
            Levels.o4ki.put(p.getName(), Levels.o4ki.get(p.getName()) + Integer.parseInt(matcher.group()));
    Как я понял, это правильный вариант кода, но не работает.
     
    Последнее редактирование: 5 окт 2018
  13. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    i0xHeX
    Много слешей.
    group(1)
     
  14. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    Код:
    @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)));
        }
    }
    Убиваю зомби с неймом 'zxc [123]' ничего не происходит.
     
  15. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    Понял что сам эвент не работает, но другие эвенты в этом классе работают..
     
  16. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    Решено, эвент заработал, но после проверки
    if(e.getEntityType() != EntityType.PLAYER) {
    ничерта
     
  17. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    ошибка
    PHP:
    [21:16:27] [Server thread/ERROR]: Could not pass event EntityDeathEvent to BossFight v0.1
    org
    .bukkit.event.EventExceptionnull
       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 byjava.lang.IllegalStateExceptionNo 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
     
  18. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Если у тебя цифра будет в конце в скобках ([]), то просто как-то так
    PHP:
    public int getInt(String sthrows NumberFormatException {
      
    int number 0;
      
    boolean parsing false;
     
      
    //Никогда раньше не писал таких итераторов, может пропускать один символ, там уже сам поправишь
      
    for(int i s.length()-1i>=0i--) {
        
    char c s.charAt(i);
        if(
    c.equals(']')) parsing true;
        if(
    c.equals('[')) break;

        if(
    parsing) {
          
    int n Integer.parseInt(String.valueOf(c));
          
    number += Math.pow(10String.valueOf(number).length());
        }
      }
      if(!
    parsing) throw new NumberFormatException("Not found!");
      return 
    number;
    }
    Хотя, может проще сплитнуть [, получить последний элемент, дальше сплитнуть ] и получить первый элемент.
     
    Последнее редактирование: 5 окт 2018
  19. Автор темы
    shitcode1337

    shitcode1337 Новичок Пользователь

    Баллы:
    6
    Имя в Minecraft:
    shitcode227
    if(char.equals(']')) parsing = true;
    if(char.equals('[')) break;
    тут char - error
     
  20. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    И обосраться, если в скобках пусто, или не int. Как и варик с реплейсом обосрался на пустоте.
     
  21. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Замени на ==
     
Статус темы:
Закрыта.

Поделиться этой страницей