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

[WIP] Hexogen - очередная "не допиленная" пустышка.

Тема в разделе "Альтернативные серверные платформы", создана пользователем BeYkeR, 31 янв 2015.

  1. Автор темы
    BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    Не ожидал, что застряну на этом, но... как реализовать систему сущностей ? Мне нужна полная кастомизация, тип добавление новых мобов на уровне API и модификация уже существующих.
     
  2. kirill2011s

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

    Баллы:
    103
    Используй ООП. Делаешь интерфейс Entity, ему добавляешь основные свойства, кому надо кастомизировать моба, пишет реализацию.
     
  3. InterVi

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

    Баллы:
    173
    Крч классы для API, ибо будущая толпа школодевелоперов не осилит написание собственного функционала: https://cloud.mail.ru/public/4oRp/RAx6CCvny
    JavaDoc правда так и не сделал. Вот подумываю собрать все свое добро в либу для баккита, а то там стандартное API просто высер какой-то (про оптимизацию вообще молчу).
     
    Последнее редактирование: 31 авг 2015
  4. ensirius

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

    Баллы:
    123
    Пожалуйста, ничего не делайте( без слез смотреть немогу!
     
  5. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Лучше пусть делает, но вместе с этим умные статьи читает. Все когда-то были говнокодерами.
     
  6. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    ///
    Сори за оффтоп но что с Carbon-2 случилось? Почему не обновляете?
     
  7. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Времени нет
     
  8. InterVi

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

    Баллы:
    173
    В основном жалуются на то, что стиль не устраивает. Серьезно, все используют код только для чтения, а не для работы?) Интересно, видели ли они коды самого ведра и таких плагинов, как AuthMe... там, видимо, код правильный, особенно в AuthMe :lol::lol::lol:
    Может хоть ты меня просветишь насчет грубых ошибок в моих классах, если там такие есть? Они ведь вполне хорошо работают, не понимаю чего еще надо.
     
    Последнее редактирование: 1 сен 2015
  9. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Насчёт стиля - ты хотя бы реши, либо табы либо пробелы. Хотя за названия классов с маленькой буквы надо бы бить.

    А неправильности - ну вот например
    1.
    Код:
      private String trim(String s) { //чистка от пробелов
         return s.trim().replaceAll(" ", "");
       }
    
    Ты итак режешь все пробелы, нахера вызов trim()? И кстати туда же нафига вызов replaceAll() вместо replace(), проёб производительности на пустом месте.

    2. result.io == true
    Зашквар, тут даже говорить не надо

    3.
    Код:
    for (блабала)
    if (i != 0) write.newLine();
    write.write(file[i]);
    
    После такого тебе просто везёт что BufferedReader нормально читает линию не завершённую эндлайном, хотя в доках указано что оно должно завершаться. (Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.)


    4.
    Код:
        public result getRes() {result res = new result(); return res;}
    
    И это внутри класса result... На***????? Ну и да return new result() будет короче.

    5. indexOf() со строковым аргументом из одного символа... Вот не зря же сделали такой же метод но принимающий char, наверняка ведь для чего-то нужен, да? Впрочем это уже совсем мелочи, но их слишком много.

    Короче знания надо сильно подтягивать и срочно, особенно в знании стандартной библиотеки.

    P.S. Про сампальный конфиг я вообще молчу. Он стрёмный на 100%. На каждый чих парсить его заново - это сильно.
     
    Последнее редактирование: 1 сен 2015
  10. InterVi

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

    Баллы:
    173
    а это тогда что?
    А там что?
     
  11. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Вот только последи за своей логикой, у тебя после последних записанный символов не будет символов конца линии ибо пишешь ты в порядке новая линия, символы, а надо наоборот.

    Что не так в конфиге - да всё. Парсинг заново при любом запросе переменной только чего стоит. Получение элементов только по индексу, а не по имени ключа делает этот конфиг абсолютно неюзабельным.
     
  12. InterVi

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

    Баллы:
    173
    Так я рассчитывал под конфиг, а не под базу с тысячами строк. Элементы берутся все по названию, методы вызывают поиск индекса и потом по индексу вызывают нужный метод для получения значения. Нужно было для работы с секциями, чтобы код не дублировать много раз. Так что не понимаю тебя, при использовании все выглядит примерно так:
    Код:
            this.exchest = ut.cfload.getBoolean("exchest");
            this.remtiles = ut.cfload.getIntArray("remtiles");
            this.clislot = ut.cfload.getStringArray("clislot");
            this.reminf = ut.cfload.getBoolean("reminf");
            this.boomblock = ut.cfload.getBoolean("boomblock");
            this.boomblocks = ut.cfload.getIntArray("boomblocks");
            this.boombers = ut.cfload.getStringArray("boombers");
            this.blockboombers = ut.cfload.getIntArray("blockboombers");
            this.noentityboom = ut.cfload.getBoolean("noentityboom");
            this.noblockboom = ut.cfload.getBoolean("noblockboom");
            this.allbentity = ut.cfload.getBoolean("allbentity");
            this.allbblock = ut.cfload.getBoolean("allbblock");
            this.antitab = ut.cfload.getBoolean("antitab");
            this.tabmess = ut.cfload.getString("tabmess");
            this.notab = ut.cfload.getStringArray("notab");
     
  13. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    А итоге получилось что-то отдалённо напоминающее YamlConfiguration, но тормозящее, и не умеющее и половину того. Итого в сухом остатке: велосипед из костылей.

    Если уж делать что-то своё то оно должно иметь смысл.
     
    Последнее редактирование: 1 сен 2015
  14. InterWall

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

    Баллы:
    173
    Такой вопрос, вот тот кусок кода, который он сейчас показал, правильный?
    Просто для меня весь код ява-приложений сам по себе непонятный, но здесь как-то напомнило примеры работ "программистов из Индии".
     
  15. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Ты про самый последний где из конфига всё загружается в переменные? Ну вообще правильный ход, но не помешало бы переменные проименовать попонятнее.
     
  16. InterWall

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

    Баллы:
    173
    Не, просто мне кажется, что можно было бы написать понятнее. Хотя может быть мне просто кажется.
     
  17. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Если хочешь красиво - сериализация и десериализация. Но в твоём случае это излишне. Да и действительно, лучше использовать баккитовский FileConfiguration, или же джавовский properties.

    А также не игнорируй разметку. Ctrl+A, Ctrl+X, Ctrl+Shift+V.
     
  18. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    А ещё даже попытка прокомментировать код приводит к необходимости минимального рефакторинга и читаемость улучшается.
     
  19. InterWall

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

    Баллы:
    173
    Спасибо, про Ctrl+Shift+V не знал.
     
  20. Автор темы
    BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    Спустя длительное время отдыха за границей во время каникул (под возгласами ле маман "ОТСТАНЬ ТЫ ОТ СВОЕГО КОМПУДАХТЕРА!1!!") и ужасным началом учебного года (11 класс всё-таки) кое-что про ядро напишу:
    [​IMG]
    Думаю, по картинке все ясно. За столь длительное время я не смог написать хотя бы что-то напоминающее серверное ядро (Да и вообще наверно в одиночку это невозможно). В данный момент он напоминает какое-то дерьмо пустое ведро с текущими возможностями:
    - Запускаться.
    - Читать инфу из конфига сервера.
    - Загружать файлы локализации (но не создавать).
    - Загружать некоторые плагины.
    - Менять некоторые слова в файлах локализации. Например %MOD_NAME% --> CyanWool. (это сделано для кастомизации сообщений)
    - Отвечать на некоторые команды (info, plugins, shutdown).
    Также параллельно разрабатывался (сейчас на переходит на общий API) модульная система серверного ядра напоминающая ядро Spout (с плагином Vanilla). По идее в этой версии ядра можно было менять практически любые менеджеры, значения и всякую фигню с помощью обычных плагинов и это давало бы некую поддержку снапшотов (поменяли бы менеджеры отвечающие, за мир ,сущностей и протокол) и кастомизацию используя один файл с общим API. Если надо, гитхаб все еще живой.
    Возможно, если дело так будет продолжаться, то придется закрыть эту фабрику, а исходники оставлю для будущего поколения, вдруг кто-то захочет повторять мои ошибки или ошибки других. (Что для некоторых личностей будет большим праздником)
     

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