Здравствуйте. Я изучаю C++ и хочу представить свою небольшую наработку — оболочку для сервера Minecraft с открытым исходным кодом.

Вот так выглядит главное окно программы:

image

Вот так выглядит программа при запущеннм сервере. Можно запустить и остановить сервер, в том числе и принудительно, а также выбрать уровень логгирования или отправить команду серверу:

image

Можно управлять игроками (банить, кикать, давать или лишать административных привилегий):

image

Также можно управлять установленными мирами:

image

Смотреть информацию о доступных модах:



И менять настройки сервера:



Будет приятно услышать конструктивную критику и получить помощь в разработке программы. Исходный код: github

Комментарии (16)


  1. RoPi0n
    07.01.2019 17:40
    +1

    Помню была стандартная оболочка, которая выглядела примерно также. В чем разница между ней и вашей?


  1. Sinatr
    07.01.2019 18:37

    В слове server пропущена первая буква… Ну или еще кучка идей для именования утилит: MCanager, MCelper, MCool (последний варианты кстате «клевый», если решите использовать, поделитесь донатом плиз).


    1. Igorgro Автор
      07.01.2019 18:39

      пропущена первая буква
      Не, это специально так.


      1. Sinatr
        08.01.2019 11:13

        Не, это специально так.
        А можно «попо дробнее»? Почему так?

        P.S.: У меня есть знакомый, он называет свои программы именами островов, тоесть тут было бы что-то вроде «MCS Equador».


  1. Softer
    07.01.2019 19:50

    Если это запускатор — такое в принципе не нужно. На нормальных серверах нет ни винды ни Х-ов. Ну разве что для самообучения… :)


    1. ApacheeJava
      07.01.2019 22:35
      -1

      это удобно, чтобы с друзьями поиграть, так более удобно всем управлять


      1. Softer
        07.01.2019 23:08

        Ну такое, как по мне — правка server.properties, bukkit.yml и их аналогов удобней. Равно как и старт сервера через shell-ник…


        1. YaakovTooth
          08.01.2019 08:02

          По тебе. Кроме тебя ещё чуть больше восьми миллиардов людей на планете, чтобы от их лица говорить „это в принципе не нужно”.


          1. Softer
            08.01.2019 13:08

            Да, но многие ли из них буду заморачиваться с сервером Майнкрафта? :) Многие для игры с друзьями просто купят Realm.


            1. YaakovTooth
              08.01.2019 13:10

              Это тоже да. :)

              Я лишь призываю быть добрее и корректнее.


  1. Heinhain
    07.01.2019 20:40

    А о чем, собственно, статья? Никаких поинтов, просто набор скринов…


  1. Sazonov
    08.01.2019 12:09

    С ходу, то что с телефона разглядел:
    1) Косяки с многопоточностью. Если вы хотите останавливать поток по bool переменной, её нужно сделать atomic.
    2) Куча синглтонов. Они не нужны в принципе, но если уж очень хочется, то сделайте их через базовый класс.
    3) Какие-то ненужные обвёртки вокруг stl контейнеров, которые ничего не делают. Самописный QSettings.
    4) GUI сильно связан с логикой.


    1. Igorgro Автор
      08.01.2019 12:41

      Можно поподробнее про 3 пункт? По поводу п.4 согласен, но не знаю что с этим делать, постоянно замечаю у себя этот косяк (не только в этой программе). Может быть посоветуете что-нибудь почитать по этой теме?


      1. Sazonov
        08.01.2019 13:57

        Для code review есть замечательный сайт codereview.stackexchange.com. Хабр немного не для этого.
        Про 3-й пункт, минимально вот так:

            template < typename T >
            class Singleton
            {
            public:
                static T& instance()
                {
                    static T inst;
                    return inst;
                }
            protected:
                Singleton() {}
                virtual ~Singleton() {}
            private:
                Singleton( const Singleton& ) = delete;
                Singleton& operator=( const Singleton& ) = delete;
            };
        // Ну и использование:
        class MyClass : public Singleton<MyClass>{ ...


        По поводу высокой связанности, в Qt есть сигналы/слоты. Неплохой пример, правда под QtQuick/QML можно глянуть тут.
        Но я бы на вашем месте намного больше парился насчёт понимания многопоточности. Прочитайте про atomic/volatile. Про оптимизации компиляторов и т.п.


        1. Door
          08.01.2019 20:10

          Ну зачем же вы вредный код показываете: virtual деструктор здесь не нужен. Да и вообще, реюзабельность таких темплейтных синглтон классов — сильно под сомнением — вам всё равно нужно еще дописать MyClass. Этот код компилируется [1]:


          MyClass instances[100];

          [1] https://wandbox.org/permlink/ede7bBfl0KSq6QV2


          1. Sazonov
            09.01.2019 04:44

            Спасибо за замечание. Если честно, скопипастил с какой-то своей старой лабы. Сам уже очень давно не использовал синглтоны на практике. Думаю суть посыла автор понял.