Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Использование craftbukkit в качестве библиотеки потребует перекомпиляции проекта после обновлений

Используете ли вы классы из пакетов: net.minecraft.server и org.bukkit.craftbukkit?


  • Опрос закрыт .
благославляю эту тему... ибо тут увидел что шпигот не изуродовали как буккит.
Для разработчиков и так будет огромным гемором выпускать плагины каждый раз под новые версии CraftBukkit. А если брать в расчет спигот... Если кто-то пишет под CB, dряд ли он станет заботиться еще и о спиготе. Тут придется выбирать, или спигот, или cb, или выпускать по отдельной версии для каждого типа сервера, или же извращаться с использованием рефлексий (ох уж это и нудно (T__T )... но вполне реально)
 
Ну spigot интересен будет только если он будет работать как с новыми плагинами так и старыми. И интересен будет именно в качестве платформы для сервера. Но никак не с точки зрения разработки плагина: если я выложу плагин и напишу только для Spigot - меня не поймут ;)
 
Ну spigot интересен будет только если он будет работать как с новыми плагинами так и старыми.
Вряд ли это случится. Не знаю способа реализовать поддержку плагинов для CB со стороны spigot (разве что можно запихать все версии классов cb в один jar - но это перебор).
fromgate
Как успехи c подтверждением на dev.bukkit.org?
 
DPOH-VAR, ждём-с ;) Сегодня или завтра будет MonsterFix - там одна небольшая функция. Она в принципе и раньше была частично с рефлексиями (нужно было добраться до "приватного" поля). Сейчас же я её вынес в отдельный класс (на развод, вдруг ещё что-то потребуется). В общем посмотрим к чему это приведет ;)
 
Вряд ли это случится. Не знаю способа реализовать поддержку плагинов для CB со стороны spigot (разве что можно запихать все версии классов cb в один jar - но это перебор).

Ну md_5 такой товарищ. Я вот про видео на картах думал, но даже не помыслил, что кто-то в здравом уме будет такое реализовывать. А он недавно видео выкладывал ;)
 
@DPOH-VAR, WeatherMan 0.4.8 нормально приняли. Так что метод - "допустимый" ;)
 
Наконец-то. Прочитал 2 очень не плохих статьи по отражениям и теперь мне не страшны такие измывательства над bukkit'ом. Правда одно НО: исходник перевода книжек увеличился в 4 раз ^^
 
Ission,
Дай ссылки на статьи, пожалуйста. Почитаю с удовольствием. У меня сейчас ещё одна задача стоит, там как раз могут отражения потребоваться ;)
Кстати, разве книжного API BookMeta не достаточно?

Ведь ItemMeta и его наследники (BookMeta, EnchantmentStorageMeta, FireworkEffectMeta, FireworkMeta, LeatherArmorMeta, MapMeta, PotionMeta, Repairable, SkullMeta) как раз и нужны для работы с NBT в составе соответствующими предметами.

Правда они ограничены :(
Взять тот же MapMeta - там нет доступа к изображению сохраненному в виде NBT-тага. Т.е. все равно через craftbukkit лезть, если потребуется. С другой стороны, API для нанесения изображения на карту есть. Чего ещё нужно ;)
А вот с книгами, по моему все нормально: setTitle, setAuthor, setPages. Чего ещё для счастья нужно? ;)
 
Ission,
Дай ссылки на статьи, пожалуйста. Почитаю с удовольствием. У меня сейчас ещё одна задача стоит, там как раз могут отражения потребоваться ;)
Кстати, разве книжного API BookMeta не достаточно?

Ведь ItemMeta и его наследники (BookMeta, EnchantmentStorageMeta, FireworkEffectMeta, FireworkMeta, LeatherArmorMeta, MapMeta, PotionMeta, Repairable, SkullMeta) как раз и нужны для работы с NBT в составе соответствующими предметами.

Правда они ограничены :(
Взять тот же MapMeta - там нет доступа к изображению сохраненному в виде NBT-тага. Т.е. все равно через craftbukkit лезть, если потребуется. С другой стороны, API для нанесения изображения на карту есть. Чего ещё нужно ;)
А вот с книгами, по моему все нормально: setTitle, setAuthor, setPages. Чего ещё для счастья нужно? ;)
Часть 1 и Часть 2 обе части - PDF'очки.
А вот теперь с книжками: В старых версиях API ещё не появилось, поэтому нужно пользоваться старыми классами. А в новых версиях уже появилось API, при этом у CraftItemStack убрали очень нужную функцию: gatHandler() и на прямую к нужным частям этим кодом уже не обратиться, поэтому нужно использовать новое API. Но при использовании нового API, старые ваерсии начинают ругаться, что нет такого файла для импорта и приходится изворачиваться: для новых бверсий рефлексии для подгрузки bukkit API, а для старых рефлексии для подгрузки старых классов. При этом на части версий, где уже есть деление по версиям, но нет API для книг, всё равно не будет работать :(
 
А в новых версиях уже появилось API, при этом у CraftItemStack убрали очень нужную функцию: gatHandler() и на прямую к нужным частям этим кодом уже не обратиться, поэтому нужно использовать новое API.
Сначала пытаемся через рефлексии вызвать getHandle();
в блоке catch (если метода нет) пытаемся взять значение поля "handle"
не забываем про setAccessible(true)
Таким образом будет совместимость со всеми версиями. Но количество кода - в 2 раза больше)
NBTTagCompound в обертке XNBTBase у предметов:
Java:
    public XNBTBase getRootBase() {
        Object is = null;
        try {
            is = callMethod(item, "getHandle", noInput);
        } catch (Exception ignored) {
        }
        if (is == null) {
            is = getShell(VersionFix.FixInterface.class, item).getProxyField("handle");
        }
        return getShell(XNBTBase.class, callMethod(is, "getTag", noInput));
    }
 
Сначала пытаемся через рефлексии вызвать getHandle();
в блоке catch (если метода нет) пытаемся взять значение поля "handle"
не забываем про setAccessible(true)
Таким образом будет совместимость со всеми версиями. Но количество кода - в 2 раза больше)
NBTTagCompound в обертке XNBTBase у предметов:
Java:
    public XNBTBase getRootBase() {
        Object is = null;
        try {
            is = callMethod(item, "getHandle", noInput);
        } catch (Exception ignored) {
        }
        if (is == null) {
            is = getShell(VersionFix.FixInterface.class, item).getProxyField("handle");
        }
        return getShell(XNBTBase.class, callMethod(is, "getTag", noInput));
    }
Остносительно того, что у меня сейчас, количество кода увеличится незначительно. Да, я не учёл того, что getHandle() возвращает закрытую переменную... К тому же я уже реализовал через другое место, близкое к тому, что сделали bukkit-овцы. (:
 

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

Назад
Верх