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

Помогите Призыв кастомных мобов.

Тема в разделе "Разработка плагинов для новичков", создана пользователем iD3LSY, 29 май 2017.

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

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    Нужно заспавнить кастом моба. Создавал примерно по туториалу (тот же принцип).

    На методе (как мне кажется) происходит ошибка.
    Код:
    public static void spawnEntity(Entity entity, Location loc) {
        entity.setLocation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
        ((CraftWorld)loc.getWorld()).getHandle().addEntity(entity);
    }
    Моб просто не появляется. Ошибок нигде нету.

    В чем проблема? Как пофиксить?
     
  2. Хостинг MineCraft
    <
  3. Lignium

    Lignium Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Lignium
    Почему бы не воспользоваться методом World.spawnEntity(Location, EntityType)?
    Если не подходит, опишите вашу задачу, что нужно реализовать
     
  4. Автор темы
    iD3LSY

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    Используется система спавна мобов (боссов) - Spawner, которые имеют при себе методы спавна, смерти, регистрации и т.д. Босс спавниться со своим интервалом. У него разумеется есть свои PathfinderGoal-ы, ибо агриться может не на тех мобов, дистанция не та, и опять же т.д.

    Это не реализовать через
     
  5. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Это кастумный моб...
    Нужно сначала зарегистрировать этого самого Entity.
    Код:
           try {
                List<Map<?, ?>> dataMaps = new ArrayList<Map<?, ?>>();
                for (Field f : EntityTypes.class.getDeclaredFields())
                    if (f.getType().getSimpleName().equals(Map.class.getSimpleName())) {
                        f.setAccessible(true);
                        dataMaps.add((Map<?, ?>) f.get(null));
                   }
                ((Map<Class<? extends EntityInsentient>, String>) dataMaps.get(1)).put(customClass, имя моба);
                ((Map<Class<? extends EntityInsentient>, Integer>) dataMaps.get(3)).put(customClass, айди);
            } catch (Throwable t) {
                t.printStackTrace();
            }
     
  6. Автор темы
    iD3LSY

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    Код:
    public static Object getPrivateField(String fieldName, Class<?> clazz, PathfinderGoalSelector object) {
        Object o = null;
    
        try {
            Field field = clazz.getDeclaredField(fieldName);
            field.setAccessible(true);
            o = field.get(object);
        } catch (NoSuchFieldException | IllegalAccessException ex) {
            ex.printStackTrace();
        }
    
        return o;
    }
    
    @SuppressWarnings({ "unchecked", "rawtypes" })
    private static void addToMaps(EntityTypes type) {
        ((Map) getPrivateField("d", net.minecraft.server.v1_8_R3.EntityTypes.class, null)).put(type.custom, type.name);
        ((Map) getPrivateField("f", net.minecraft.server.v1_8_R3.EntityTypes.class, null)).put(type.custom, type.id);
    }
    Вроде как регистрируется...
     
  7. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    А ты этот метод - то вызываешь?
     
  8. Автор темы
    iD3LSY

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    Маляхась странный вопрос..)
     
  9. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Тогда код в студию.
     
  10. Qmaks

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

    Баллы:
    173
    Имя в Minecraft:
    Qmaks
    Лол, што? Ну получил ты мапу и шо дальше? Всунуть то обратно надо ее с твоим ентити уже.

    Код:
    @SuppressWarnings({ "unchecked", "rawtypes" })
    private static void addToMaps(EntityTypes type) {
        Class entityTypes = net.minecraft.server.v1_8_R3.EntityTypes.class;
        Field field = entityTypes.getDeclaredField("d");
        field.setAccessible(true);
        Map m = (Map) field.get(new Object[0]);
        m.put(type.custom, type.name);
        field.set(m);
       
        field = entityTypes.getDeclaredField("f");
        field.setAccessible(true);
        m = (Map) field.get(new Object[0]);
        m.put(type.custom, type.id);
        field.set(m);
    }
    [DOUBLEPOST=1496101688,1496101648][/DOUBLEPOST]Это я просто добавил установление мапы в переменную. Возможно там еще надо объект передавать или что-то такое, но то уже твой косяк.
     
  11. Автор темы
    iD3LSY

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    Проблему решил. Может и частично, но код Qmaks помог. Спасибо <3
     
Статус темы:
Закрыта.

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