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

Обсудим Лепим пиратский лаунчер

Discussion in 'Управление сервером Bukkit' started by Oinvizion Craft, Sep 27, 2016.

  1. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    Всё! Запуск любой версии майна, как vanilla, так и с Forge по JSON-у я сделал.
    Теперь у меня огромнейшая проблема! Это скачивание файлов! Я решил начать с либрариансов. Принцип прост:
    каждый name из librarians из JSON-а проверяются на существование, и если его нет, он проверят на существование все папки, если их тоже нет, он их создаёт. Но тут возникла проблемка!
    С такими библиотеками, как:
    {
    "name": "net.sf.trove4j:trove4j:3.0.3"
    },
    {
    "name": "com.ibm.icu:icu4j-core-mojang:51.2"
    },
    {
    "name": "net.sf.jopt-simple:jopt-simple:4.5"
    },
    всё норм.
    Вот пример одной ссылки:
    https://libraries.minecraft.net/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar
    Все остальные библиотеки грузятся по этому же принципу!

    С загрузкой Forge - файлов, тоже проблем не возникло: Просто читаем exact_url и url из JSON-а, соответствующие каждому name.

    Но кода дело дошло до lwjgl... Тут и пошли проблемы....

    Дело в том, что libraries.minecraft.net некоторые либрариансы не знает!
    org.lwjgl.lwjgl:lwjgl-platform:2.9.1-nightly-20131017
    Ссылка выходит такая:
    https://libraries.minecraft.net/org...017/lwjgl-platform-2.9.1-nightly-20131017.jar

    И всё! Лаунчер тупо вылетает!
    Подскажите пожалуйста, как быть с lwjgl, потому что больше половины нельзя скачать!
    Или может их как-нибудь просто взять и пропустить!
    Причём JSON трогать не надо![DOUBLEPOST=1475090878,1475090119][/DOUBLEPOST]Сейчас заметил, что TLauncher качает не все библиотеки из json. Тогда что же получается, необходимо под каждую версию прописывать какие именно надо качать библиотеки? Или есть какой-нибудь способ узнать по JSON, какие библиотеки качать?[DOUBLEPOST=1475091365][/DOUBLEPOST]Ещё сейчас при запуске заметил проблемы со звуком:

    [14:35:16] [Client thread/WARN]: Unable to play unknown soundEvent: minecraft:music.menu
    [14:35:30] [Client thread/WARN]: Unable to play unknown soundEvent: minecraft:gui.button.press[DOUBLEPOST=1475091705][/DOUBLEPOST]
    Это я решил заменой ${game_assets} не просто на assets, а на \assets\virtual\legacy[DOUBLEPOST=1475103059][/DOUBLEPOST]Сколько не рылся пока ни одной толковой идеи по скачиванию файлов, используя JSON не нашёл[DOUBLEPOST=1475128544][/DOUBLEPOST]Ура! Спустя 4 часа безуспешного печатания кода, я реализовал загрузку либрариансов по JSON!
    Короче принцип такой:
    У нас есть главный цикл считывания name из libraries
    Затем от строит путь к каждому файлу и проверят, если пути нет, он создаёт папки, затем загружает файл.
    Если при этом существуют параметры exact_url и/или deleteEntries, он грузить exact_url и затем удаляет deleteEntries из скаченного jar, редактируя его как архив и используя Ionic.Zip.dll
    Теперь осталось ещё подумать над закачкой папки assets[DOUBLEPOST=1475129546][/DOUBLEPOST]Если кому-нибудь не сложно напишите полный принцип скачивания assets, я примерно уже и сам понял.
    Тут главный файл indexes/legacy.json (путь у нему также указан в JSON-е версии) из которого скачиваются файлы по принципу:
    И потом переименовываются во что надо.
    Но если кому не лень, можете написать![DOUBLEPOST=1475163674][/DOUBLEPOST]Ребят, помогите плиз, как сделать загрузку natives?
     
  2. Хостинг MineCraft
    <
  3. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Разве в шарпе нет как и в жабе mkdirs, который создает сразу все каталоги.[DOUBLEPOST=1475173973,1475173752][/DOUBLEPOST]Не стандартные ссылки пишутся в url. И да, качаются либы только под нужную платформу в моджанг лаунчере и турке.[DOUBLEPOST=1475174484][/DOUBLEPOST]По поводу assets, 1.6.* юзает virtual/legacy/[DOUBLEPOST=1475174758][/DOUBLEPOST] Тут все просто, берем первые 2 символа из dd85fb564e96ee2dbd4754f711ae9deb08a169f9. Это и будет нада папка dd/[DOUBLEPOST=1475174937][/DOUBLEPOST]
    Нативы лежат в джарниках, тег "extract": означает распаковку в папку natives exclude, пропустить папку-файл, не распаковывать.[DOUBLEPOST=1475175039][/DOUBLEPOST]"rules": [
    {
    "action": "allow",
    "os": {
    "name": "windows"
    }
    }
    Тут все просто, качать только под форточкой.
     
  4. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    Спасибо за инфу, всё опробую, отпишусь!

    Это я уже переделал, по принципу разделителя, т.е. Он тупо создаёт все каталоги и подкаталоги пока существует слэш "/" ! Работает просто идеально!

    Вопрос, как это потом переделать в music/hal3.ogg
    По фразе:
    "music/hal3.ogg": {
    "hash": "dd85fb564e96ee2dbd4754f711ae9deb08a169f9",
    "size": 1923269
    },
    И нужен ли вообще "size", а то я так понял, размер значения не имеет? =D
    А с нэйтивами порпобуем![DOUBLEPOST=1475177988,1475177140][/DOUBLEPOST]А вчера я ещё кое-что придумал, ведь на c# можно килить процессы других программ, так вот, по этому принципу можно сделать мини-защиту от школололо, которые кроме читэнжина, вообще ничем пользоваться не умеют, ну и некоторые (более продвинутые) ещё сессию ваейршарком пытаются спереть.
    Используя всякие примочки от c#, можно сделать неплохую защиту для лаунчера, если например его юзать на проекте.
    А от школьников ещё может такая капча спасти:
    [​IMG]
    =D

    Так что можно успешно сделать не плохой лаунчер для своего проекта!
     
  5. Santa

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

    Trophy Points:
    66
    Имя в Minecraft:
    Santa64
    У меня лаунчер на C#. Сам его писал с нуля. Это дело неблагодарное...
    Открою секрет: лаунчер на изи разбирается и можно сделать обход.
    Есть один выход: писать свою библиотеку, в которой будет весь функционал для лаунчера.
     
  6. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    А защитить исходники нельзя?[DOUBLEPOST=1475259835,1475259775][/DOUBLEPOST]Это совсем не сложно! Зато защитив, его разобрать нельзя будет никак!
     
  7. Santa

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

    Trophy Points:
    66
    Имя в Minecraft:
    Santa64
    Все известные мне обходы на мой лаунчер не работают.
    Я его защитил. Просто тебя предупреждаю.
     
  8. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Ничего переделывать не нужно. Качаешь в assets/objects/dd/85fb564e96ee2dbd4754f711ae9deb08a169f9
    У старых асотов парсеп в assets/virtual/legacy/sounds.json
    А legacy.json это вроде старый костыль под 1.7.2. Но эта версия не имеет смысла.[DOUBLEPOST=1475271841,1475271510][/DOUBLEPOST]
    Универсалка от костика сдувает всех.
     
  9. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    XD У меня теперь новая проблема! Это скан самого json-а!
    Я гадаю и не могу понять, как из этого:
    "minecraft/sounds/entity/rabbit/attack2.ogg": {
    "hash": "4b90ff3a9b1486642bc0f15da0045d83a91df82e",
    "size": 7268
    },
    "minecraft/sounds/entity/shulker/close5.ogg": {
    "hash": "e555fcece121879fe0becbada9d01dea27ab153d",
    "size": 5376
    },
    Извлечь имя (minecraft/sounds/entity/rabbit/attack2.ogg) =D
    На кибер форуме кажись тоже никто не знает! XD
    Я даже нарыл библиотеку Newtonsoft.Json для парсинга JSON-а, но она тоже этого не умеет, так как тут нет параметра, было бы например "name" : "...", а то что есть - это проблема![DOUBLEPOST=1475276091,1475275901][/DOUBLEPOST]
    Это что ещё такое, а ну ка по-подробнее...[DOUBLEPOST=1475276776][/DOUBLEPOST]
    Мну нужно так, чтобы все версии работали, а 1.7.2 не грузится без переделки в папку virtual, у него даже в джосннике указано: "virtual": true
     
  10. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Это называются ключи, их и получай. Криво гуглил просто.

    Первая ссылка в гугле.

    Code:
    JObject obj = JObject.Parse(response);
    foreach (var pair in obj) {
        Console.WriteLine (pair.Key);
    }
     
    Last edited: Oct 1, 2016
  11. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    Да про ключи огромное спасибо! Но тут опять проблема! Нам-то надо читать исключительно всё-то, что под "objects"[DOUBLEPOST=1475297061,1475297025][/DOUBLEPOST]Ну и естественно кибер форум опять ничего не знает!
     
  12. Santa

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

    Trophy Points:
    66
    Имя в Minecraft:
    Santa64
    Впервые слышу. Дай ссылку на инфу
     
  13. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Не имеет значения. Получаешь objects, потом считываешь ключи других объектов.
     
  14. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    Он тупо выводит objects далее всё! Я как только уже не пробовал и не гуглил! Ничего не выходит!
     
  15. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Тупой что ли? Получаешь значение objects, потом из него ключи.
     
  16. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    Давай обойдёмся без оскорблений! Я так уже делал, значение objects получить невозможно, так как там стоят фигурные, а не квадратные скобки! {}, а если и как-то попытаться, он тупо выдаст пустую переменную![DOUBLEPOST=1475346987,1475346669][/DOUBLEPOST]Или же, вот так:
    [​IMG][DOUBLEPOST=1475348450][/DOUBLEPOST]Я уже писал, что всегда недолюбливал JSON в C#, я попросил помочь, так что оскорбление тут твоё совсем не уместно![DOUBLEPOST=1475349758][/DOUBLEPOST]Кажись я понял в чём дело! Он не может прочитать JSON!
     
  17. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Опять же не имеет значения какие там объекты. Читаешь объект objects и все.
     
  18. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    Я же говорю, в этом и вся проблема, ОН НЕ ЧИТАЕТСЯ![DOUBLEPOST=1475350169,1475349985][/DOUBLEPOST]Я по какой-то причине не могу даже текст из него извлечь:
    Code:
    string assetsindexfile = File.ReadAllText(@"C:\1.9.json");
                MessageBox.Show(Convert.ToString(assetsindexfile));
    А результат, такой же как и на скриншоте!
     
  19. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    Ща попробуем твоим методом, ведь мой метод джсонник версии читает превосходно, а с index, вот что:

    [​IMG]

    [​IMG][DOUBLEPOST=1475350915,1475350575][/DOUBLEPOST]Ещё веселее:
    [​IMG]
    http://s018.radikal.ru/i522/1610/b2/0415ec495fc9.png
     
  20. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    У меня нет визуалки для шарпа, я его не юзаю. Просто ищи как получить объект по ключу.
     
  21. Автор темы
    Oinvizion Craft

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

    Trophy Points:
    76
    У меня кажись есть одна версия, как думаешь, может ли быть, что файл слишком большой для чтения?
    4200 строк, как не верти!
     

Share This Page