Jump to content


Photo

Моддинг, аддонинг (если такое слово есть) и подобное


  • Please log in to reply
18 replies to this topic

#1 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 09.06.2016 - 15:35

Ну, в общем, здравствуйте, я - отчаявшийся начинающий создатель модов да аддонов, в данный момент завлечен идеей написать аддон к индастриалу последнему с оружием всяким интересным, но вот во всех гайдах все на одно лицо, "давайте создадим блок.." "давайте создадим инструмент.. пусть это будет кирка".. все как на одно лицо, я вот сделал Item, зарегал его в майне, дал ему крафт, но даже спустя сутки сидения и колупания в индастриале и тауме с прилежащими аддонами к ним я так и не понял как, к примеру, называется событие, которое вызывается при клике ПКМ предметом и где его описывать, так как (спасибо опять же недо-гайдерам) я смог добраться до кода только спустя 2 дня и то треть функций да методов не расшифровалась и так и осталась "player.func_776645_b" и че все это делает я хз, а в этих гайдах по мододиллерству - ни списка функций хотя б майна, ни списка событий - ничего, что позволяет действительно разойтись, я не собираюсь добавить блок "земля 2" и кирку "алмазная кирка с чуть более быстрым копанием", а хочу реально свободу действий и создавать такие вещи для индастриала (соответственно с потребелением ИК2 энергии) как пушка теслы, волновое орудие и т.п., а как я это создам? где мне взять модельки? анимации? как их прописать? создать то я и сам могу, моделить я умею, а вот как их запихнуть в код? все действия прописать что б на пкм стреляло? ладно уж немного нашел в кодах индастриала и смог создать электрический предмет и то не факт что смог, ведь нигде не говорится как тестить чужой мод сразу в эклипсе, а каждый раз весь мод снова компилить, так я задолбаюсь нафиг насмерть, пока создам нужные мне шмотки, в какой то степени эта тема из серии "пригорело", а в какой то степени это просьба о нехилой помощи.

P.S.: я являюсь проггером уже 6 лет и мой основной язык - C#, который очень схож с явой, но это нифига не помогает, по всем описанным выше причинам, так что не надо мне комментов типа "да ты нифига не поймешь, если получишь списки" и т.п., английский знаю хорошо, программирование знаю хорошо, но нет инфы.



#2 angal

angal

    Добытчик железа

  • Администраторы
  • Active Posts483

Posted 09.06.2016 - 17:08

Спокойствие, только спокойствие.Во первых вам надо немного поменять свое отношение к модингу и форджу. Хоть ява (как и ваш .net) компилирует исходный код в байткод, который сохраняет структуру кода, классы и отладочную информацию, Моянги для его защиты проиводят дополнительную обфускацию. В результате чего большая часть отладочной информации исчезает (Но сохраняется информация о структуре классов, типах переменных и огромном числе прочих полезностей, что сильно облегчает жизнь. Попробуйте как-нибудь покопаться в скомпилированной с оптимизациями и прочем сишной библиотечке.).Так что по этому исходная точка мододелов была кодом, в котором фсе функции во всех классах назывались a, b, иногда c и совсем редко последующими буквами. Создатели форджа и mcp с этим много возились и добавили много всего, в том числе уникальные названия функциям (func_776645_b отличить от func_776342_b куда проще, чем b от b). Так же немного общего (не особо сильно меняющегося с версии на версию) апи для доступа к ваниле и всяким плюшкам форджа, систему событий (в ваниле этого тоже нет, и как следствие можно без патчей на ваниллу отлавливать только те события, до которых добрался фордж), и всякие регистраторы и прочие штуки для разрешения конфликтов между плагинами.

 

Так что с этой точки зрения, сутуация у вас не такая и печальная. Она кончено требует некоторго опыта в реверс-инжиниринге, но если будете дальше копаться в фордже и ваниле, спокойно его наберете и это не будет для вас проблемой.Теперь касаемо гайдов и документаций.Честно говоря к гайдам у меня притензий нет. Они дают базовое представление как разобрать ванилу, написать базовый мод и собрать мод обратно. И этого уже достаточно. Те инструкции про блоки/кирки и прочее в основном для людей далеких от програмирования, которым очень хочется. А давать инструкции вида: "Вызовите функцию func_1732_a(), Передав туда строку и результат функции func_1454_b", которая будет работать только на какой-то 1 версии форджа и после следующего обновления маппингов полностью лешиться смысла, как-то не очень продуктивно. По той же причине и в документации нет практически ничего про ванильный код и его поведение.По-этому вам надо смириться с тем фактом, что рыться в внутреннестях ванилы придется самому (либо подглядывать у других модов на эту же версию).

С внутреннестями форджа чуть лучше. Есть исходники, есть общая документация (довольно лаконичная, но для отправных точек содет), есть вики (сильно устаревшая, но тоже хорошая отправная точка для поиска в исходниках) и даже где-то должны быть явадоки...Касаемо вашего списка события, поиск по вики дал это. Оно хоть и под сильно ранний 1.7.2, но сойдет для угадывание актуальных имен классов, а имея несколько классов, не проблема будет выявить тенденции для поиска в исходниках остальных событий. 

Многие вещи найти будет сложны, а некоторый придется изобретать самому. Фордж особо не добавляет ничего сильно нового по отношению к ваниле, так что если какая-то технология просто не нужна ванильке, значит ее и не будет. Но тут ничего не поделаешь. Для одов это нормальная ситуация.

 

 

Теперь касаемо среды разработки. Я с эклипсом не хорошо знаком... не знаю, почему все его так любят, но раз вы его используете, разберитесь в нем. Найди как настроить выполнение внешних задачь, научитесь вызывать таски mcp из еклипса, собирать им файлы модом, запускать внешний майн и подрубаться к нему дебагером. Не так уж и сложно это, тем более у эклипса документация получше будет (хотя с актуальностю у них тоже проблемы есть). Если еще повозиться, можно наверное как-то оптимизировать, что бы компилировать/обфусцировать только измененные файлы и подгружать их эклипсом и запускать майн внутри. Может так даже быстрее будет (особенно, когда ваш мод станет достаточно большим). Ну, в общем, как-то так. Ничего заоблочного тут нет. Надо просто самому копаться и изучать майн. И быть готовым, что примерно половина накопленных знаний будет становиться неактуальна после каждого обновления на новую версию мана и придется изучать ногое заново. Хотя с новой частотой обновлния может что-то изменится. Но сильно обнадеживать себя не надо. :)Так что удачи. :)


1-5, 2-8, 3-11, 4-14, 5-17

#3 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 09.06.2016 - 22:00

я потратил на изучение мода индастриал, аддона грави и мода таумкрафт уже полтора суток, результата ноль, ничего не дало, так как все функции даже к одному предмету распиханы по файлам и папкам, было у меня примерно так "оп, ваджра, гляну ка... ага.. а где её крафт прописан? где её добавляют? где текстурку выдают? втф..." спустя пол дня нашел файлик где все итемы регают в майне, а так же в принципе с кодами предметов не могу совладать, так как из за того что 30-40% методов не перевелись нормально, а в параметры им передается вообще ахинея всякая, то я не могу собрать полную и целую картину, у меня задача простая, просто добавить пару простых пушек в индастриал, можно копируя код, это просто было б, если б я видел целую картину для одного предмета, но все настолько распихано, заиерархиено и закручено что никак не удается, в идеале мне нужен знающий человек, который объяснит и поможет, в идеале в скайпе, знаете таких?



#4 _random

_random

    Добытчик дерева

  • Пользователи
  • Active Posts151

Posted 10.06.2016 - 00:28

Еще раз:
1) Код майнкрафта обфусцирован. Частично он деобфусцирован создателями mcp.
2) Для загрузки модов используется forge. Девелоперская (или как ее там...) версия форджа содержит деобфусцированный майнкрафт, чтобы было удобнее писать моды.
А при компиляции обфусцирует обратно соответствующие методы, поля, классы. Поэтому, если декомпилировать какой-нибудь мод, там будут всякие func_1732_a.
Если сильно хочется, то можно воспользоваться деобфускаторами, например https://github.com/i...ed-octo-nemesis
3) Незнаю, какие гайды ты смотрел, но сейчас (с версии 1.7.10 и частично 1.6.4) фордж использует систему сборки gradle. Предполагается такая последовательность действий:
- скачать forge-src и распаковать куда-нибудь
- выполнить в консоли "gradlew setupDecompWorkspace eclipse"
- запустить эклипс и выбрать директорию eclipse (в проекте) в качестве воркспейса.
- мод компилируется командой "gradlew build". Клиент (деобфусцированный) можно запустить из эклипса.
Также можно запустить клиент командой "gradlew runClient".
4) Советую смотреть различные моды на гитхабе, большинство из них можно скомпилировать приведенными выше командами.

 

А я вообще не программист, а так... перекладыватель байтов (C, verilog, VHDL).

 Добавлено спустя 2 минуты:

Я с эклипсом не хорошо знаком... не знаю, почему все его так любят, но раз вы его используете, разберитесь в нем.

Может быть из-за огромного количества плагинов, благодаря которым можно использовать множество разнообразных компиляторов и дебагеров.
Для некоторых компиляторов, эклипс - единственный вариант.



#5 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 10.06.2016 - 09:56

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



#6 _random

_random

    Добытчик дерева

  • Пользователи
  • Active Posts151

Posted 10.06.2016 - 13:55

куда пихать моды что б можно было их испытывать тем майном что запускается из клипсы?

В папке eclipse должна быть папка mods, можно пихать в нее. Но, так как клиент деобфусцированный, то и мод тоже должен быть деобфусцированным.Если автор мода выкладывает необфусцированную (dev) версию, можно взять ее, а если не выкладывает, то можно самостоятельно деобфусцировать или собрать из исходников.Наилучшим решением будет подключить maven репозиторий (если он есть) с модом. Пример: https://github.com/M...er/build.gradle 

а так же тот же вопрос по поводу функций и событий, их я тоже не могу толком найти, тот сайт с событиями который давали и я находил, но он мало чего дает, так как нету нормального описания и пояснения полей и т.д.

Не вполне понимаю, приведи пример классов вызывающих затруднения. Конечно, не все классы деобфусцированы. Например, класс Block деобфусцирован почти полностью, но его наследники почти все не деобфусцированы, т.к. мододелам обычно не нужно их касаться.Описания как такового нет, только комментарии в фордже. Придется самостоятельно разбираться, но это не так сложно, как кажется сначала. 

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

Эклипс может показать все места, где используется какой-нибудь метод, всех наследников какого-нибудь класса и многое другое.События, кстати, это api форджа и они используются нечасто, возможно ты их с чем-то путаешь.

Edited by _random, 10.06.2016 - 13:57.


#7 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 10.06.2016 - 21:23

В папке eclipse должна быть папка mods, можно пихать в нее. Но, так как клиент деобфусцированный, то и мод тоже должен быть деобфусцированным.Если автор мода выкладывает необфусцированную (dev) версию, можно взять ее, а если не выкладывает, то можно самостоятельно деобфусцировать или собрать из исходников.Наилучшим решением будет подключить maven репозиторий (если он есть) с модом. Пример: https://github.com/M...er/build.gradle Не вполне понимаю, приведи пример классов вызывающих затруднения. Конечно, не все классы деобфусцированы. Например, класс Block деобфусцирован почти полностью, но его наследники почти все не деобфусцированы, т.к. мододелам обычно не нужно их касаться.Описания как такового нет, только комментарии в фордже. Придется самостоятельно разбираться, но это не так сложно, как кажется сначала. Эклипс может показать все места, где используется какой-нибудь метод, всех наследников какого-нибудь класса и многое другое.События, кстати, это api форджа и они используются нечасто, возможно ты их с чем-то путаешь.

http://www.minecraft...Event_Reference

"PlayerUseItemEvent

Fires when a player starts 'using' an item.

Fields:

ItemStack item - The item being used. int duration - The duration the item has been used for.StartTick

Ticks the eventStopFinish

Fields:

ItemStack result - ItemStack replacing the item being used.UseHoeEvent

This event is fired when a player attempts to use a Hoe on a block.

Fields:

ItemStack current - Reference to the tool used

World world - instance of the world

int x, y, z - Coordinates of the block

This event is cancelable, so calling event.setCanceled(true) will stop the block from being tilled.

You can also set the result to ALLOW to mark the event as processed and damage the hoe.

"

вот эти старт, финиш, тики и прочие слова, я не понимаю к чему они, а пояснения тут толком нету, где эти события можно прописать, какие перегрузки есть, что в них можно прописывать и т.д., когда я смотрел списки функций и событий на C# пару лет назад все было подробно прописано и я все понимал с первого раза, но тут мне мало дается, потому и говорю, что запарил уже более двух дней только на изучение кодов и это ничего не дало, потому в идеале нужен знающий человек.



#8 _random

_random

    Добытчик дерева

  • Пользователи
  • Active Posts151

Posted 11.06.2016 - 11:38

А тут никакой документации, только код и комментарии в нем. Поэтому неудивительно, что ты за два дня не разобрался.

 

Скрытый текст

 

Эти события главным образом предназначены для изменения поведения написанного моджангами кода. Для создания пушки все эти события абсолютно не нужны.
Например, с помощью этого события можно сделать так, чтобы любой лук стрелял файерболами. Как-то так:

public class EventHookExample {    @SubscribeEvent    public void ExampleEvent(PlayerUseItemEvent[paste][/paste]Stop event) {	    World world = event[paste][/paste]entityPlayer[paste][/paste]getEntityWorld();	    if (!world[paste][/paste]isRemote) { // Т[paste][/paste]к[paste][/paste] это событие вызывается и на сервере и на клиенте, вводится это условие[paste][/paste]		    if (event[paste][/paste]entityPlayer[paste][/paste]getItemInUse()[paste][/paste]getItem() == Items[paste][/paste]bow) {			    Vec3 playerLook = event[paste][/paste]entityPlayer[paste][/paste]getLookVec();			    EntityLargeFireball fireball = new EntityLargeFireball(world, event[paste][/paste]entityPlayer, playerLook[paste][/paste]xCoord, playerLook[paste][/paste]yCoord, playerLook[paste][/paste]zCoord);			    world[paste][/paste]spawnEntityInWorld(fireball);		    }	    }    }}

И зарегистрировать это где-нибудь, например (в главном классе мода):

    @EventHandler    public void init(FMLInitializationEvent event) {	    MinecraftForge[paste][/paste]EVENT_BUS[paste][/paste]register(new EventHookExample());    }

Но если ты создаешь свое оружие, то нужно переопределять метод onItemRightClick (наверное) в классе предмета.


Edited by _random, 11.06.2016 - 12:07.

  • angal and Nordicus666 like this

#9 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 12.06.2016 - 06:58

спасибо, вот уже более близко к тому что мне надо, но только вот разобраться я пытаюсь с кодами индастриала, таума и грави, ведь мне нужны конкретно прописанные в них детали (IElectricItem и ElectricItem от индастриала, предметы от грави, молнии от наболдашника шока из таума и разброс с аое дамагом от наболдашника огня из таума), я не шарился особо в кодах самого майна, а в модах комментариев абсолютно нет, в этом проблемка, но вот с переопределением в классе события нажатия ПКМ - спасибо, сработало, но вот еще вопросик: как я понял (разбираясь в кодах) там в индастриале и грави адовая иерархия, т.е. есть класс оружия, а регистрируется оно в другом месте, крафт в третьем, регистрируется в четвертом, текстурка в пятом добавляется, а я даже найти всех этих мест не могу, можно ли тупо забить все этол в главный класс кода? в тот же класс прединициализации или инициализации? а так же, все же стоит вопрос с написанием действия самого оружия



#10 _random

_random

    Добытчик дерева

  • Пользователи
  • Active Posts151

Posted 12.06.2016 - 11:50

Так и не понял, разобрался ли ты с энергией ИК, но все же напишу.1) Добавить в build.gradle

repositories {maven {  name = "chickenbones"  url = "http://chickenbones.net/maven"}maven {  name = "ic2"  url = "http://maven.ic2.player.to/"}}dependencies {compile "codechicken:CodeChickenLib:1.7.10-1.1.3.140:dev"compile "codechicken:CodeChickenCore:1.7.10-1.0.4.29:dev"compile "codechicken:NotEnoughItems:1.7.10-1.0.3.75:dev"compile 'net.industrial-craft:industrialcraft-2:2.2.822-experimental:dev'}

И выполнить "gradlew setupDecompWorkspace eclipse". После этого в эклипсе можно будет увидеть код ИК. NotEnoughItems и прочее добавлять не обязательно, но так удобнее.В IElectricItem и других классах в ic2.api есть комментарии.2) Все, можно создавать предмет. Для этого имплементируем интерфейс IElectricItem

public class ItemExample extends Item implements IElectricItem {    public ItemExample() {        setCreativeTab(CreativeTabs.tabRedstone);    }    @Override    public boolean canProvideEnergy(ItemStack itemStack) {        return true;    }    @Override    public Item getChargedItem(ItemStack itemStack) {        return this;    }    @Override    public Item getEmptyItem(ItemStack itemStack) {        return this;    }    @Override    public double getMaxCharge(ItemStack itemStack) {        return 100e3;    }    @Override    public int getTier(ItemStack itemStack) {        return 1;    }    @Override    public double getTransferLimit(ItemStack itemStack) {        return 128;    }    @Override    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {        if (ElectricItem.manager.canUse(stack, 10e3) && !world.isRemote) {            ElectricItem.manager.use(stack, 10e3, player);            Vec3 playerLook = player.getLookVec();            EntitySmallFireball fireball = new EntitySmallFireball(world, player, playerLook.xCoord, playerLook.yCoord, playerLook.zCoord);            world.spawnEntityInWorld(fireball);        }        return super.onItemRightClick(stack, world, player);    }}

Энергия предмета хранится в дополнительном НБТ-теге предмета, поэтому заряженные предметы стакаться не будут (без дополнительных действий).Старые версии ИК хранили энергию в метадате (уроне предмета).Методы getChargedItem и getEmptyItem, как я понимаю, предназначены для замены полностью заряженных и разряженных предметов, например для того чтобы они стакались.От getTier зависит возможность заряда в разных энергохранилищах. 

а в модах комментариев абсолютно нет, в этом проблемка

Смотри на гитхабе. Полно же модов с открытым исходным кодом. Также в api, как правило, есть комментарии. 

как я понял (разбираясь в кодах) там в индастриале и грави адовая иерархия, т.е. есть класс оружия, а регистрируется оно в другом месте, крафт в третьем, регистрируется в четвертом, текстурка в пятом добавляется, а я даже найти всех этих мест не могу, можно ли тупо забить все этол в главный класс кода? в тот же класс прединициализации или инициализации?

Можно делать как угодно. Обычно это разделяют по классам когда предметов слишком много. 

а так же, все же стоит вопрос с написанием действия самого оружия

Урон и разрушение блоков можно делать множеством способов. Один из способов это сделать сущность снаряда, по аналогии с стрелой, файерболом.


Edited by _random, 12.06.2016 - 12:46.

  • Nordicus666 likes this

#11 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 12.06.2016 - 19:45

Так и не понял, разобрался ли ты с энергией ИК, но все же напишу.1) Добавить в build.gradle

repositories {maven {  name = "chickenbones"  url = "http://chickenbones.net/maven"}maven {  name = "ic2"  url = "http://maven.ic2.player.to/"}}dependencies {compile "codechicken:CodeChickenLib:1.7.10-1.1.3.140:dev"compile "codechicken:CodeChickenCore:1.7.10-1.0.4.29:dev"compile "codechicken:NotEnoughItems:1.7.10-1.0.3.75:dev"compile 'net.industrial-craft:industrialcraft-2:2.2.822-experimental:dev'}

И выполнить "gradlew setupDecompWorkspace eclipse". После этого в эклипсе можно будет увидеть код ИК. NotEnoughItems и прочее добавлять не обязательно, но так удобнее.В IElectricItem и других классах в ic2.api есть комментарии.2) Все, можно создавать предмет. Для этого имплементируем интерфейс IElectricItem

public class ItemExample extends Item implements IElectricItem {    public ItemExample() {        setCreativeTab(CreativeTabs.tabRedstone);    }    @Override    public boolean canProvideEnergy(ItemStack itemStack) {        return true;    }    @Override    public Item getChargedItem(ItemStack itemStack) {        return this;    }    @Override    public Item getEmptyItem(ItemStack itemStack) {        return this;    }    @Override    public double getMaxCharge(ItemStack itemStack) {        return 100e3;    }    @Override    public int getTier(ItemStack itemStack) {        return 1;    }    @Override    public double getTransferLimit(ItemStack itemStack) {        return 128;    }    @Override    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {        if (ElectricItem.manager.canUse(stack, 10e3) && !world.isRemote) {            ElectricItem.manager.use(stack, 10e3, player);            Vec3 playerLook = player.getLookVec();            EntitySmallFireball fireball = new EntitySmallFireball(world, player, playerLook.xCoord, playerLook.yCoord, playerLook.zCoord);            world.spawnEntityInWorld(fireball);        }        return super.onItemRightClick(stack, world, player);    }}

Энергия предмета хранится в дополнительном НБТ-теге предмета, поэтому заряженные предметы стакаться не будут (без дополнительных действий).Старые версии ИК хранили энергию в метадате (уроне предмета).Методы getChargedItem и getEmptyItem, как я понимаю, предназначены для замены полностью заряженных и разряженных предметов, например для того чтобы они стакались.От getTier зависит возможность заряда в разных энергохранилищах. 

Смотри на гитхабе. Полно же модов с открытым исходным кодом. Также в api, как правило, есть комментарии. 

Можно делать как угодно. Обычно это разделяют по классам когда предметов слишком много. 

Урон и разрушение блоков можно делать множеством способов. Один из способов это сделать сущность снаряда, по аналогии с стрелой, файерболом.

печенек этому человеку, просто божественно, аплодирую стоя



#12 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 13.06.2016 - 08:20

Не прошарил в сути первого пункта, как я понял это для того что б он откуда то зарузил все это и декомпильнул в код, либо, как мое предположение, эти моды компильнутые сперва надо скинуть в папку mods в папке eclipse, но об этом не написано, так вот, если просто добавить и дать команду декомпилить, то выдает ошибку, как я понял - не может найти метод compile с аргументом "industrial-craft..." в общем та строчка, что в build.gradlew написана, как решить - не знаю, опять же потому что не шарю, сперва ругался на codechiken, попробовал убрать теперь ругается на индастриал, прошу разъясните что это за строки и для чего они
вот скрин с ошибкой:

 Добавлено спустя 1 минуту:

чет не выложился, тогда через saveImg: http://saveimg.ru/sh...0ae62f5acf31a6b



#13 _random

_random

    Добытчик дерева

  • Пользователи
  • Active Posts151

Posted 13.06.2016 - 09:52

dependencies нужно вставлять после строки "apply plugin: 'forge'". Выше я давал ссылку на пример, только она криво вставилась.https://github.com/M...er/build.gradleЭто просто добавляются зависимости из репозитория. Приведет это к тому, что в кэш gradle скачаются эти файлы и добавятся в проект. Подробностей не знаю (и знать не хочу).Можно скачать эти файлы (не обфусцированные или деобфусцированные моды) вручную и положить в /libs, тогда в build.gradle ничего писать не нужно (потребуется только выполнить "gradlew setupDecompWorkspace eclipse"). Пример: https://github.com/LemADEC/WarpDriveКстати, build.gradle это просто скрипт на groovy.


Edited by _random, 13.06.2016 - 10:05.


#14 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 13.06.2016 - 12:51

сделал как ты и сказал, взял .jar файлы модов (индастриала, таумкрафта и аддона грави), запихнул сперва в папку lib, попробовал - ничего, запихнул в папку jars (ну, джар файлы же, решил попробовать) - тоже ничего, потом посмотрел пример, создал папку libs, запихнул в нее, попробовал еще раз - опять же ничего, в src/main/java и resourses ничего не появляется, да и в майне тоже ничего (каждый раз на всякий запускал, модов небыло), потому не могу понять как это все работает и почему у меня не появляются эти моды в дебаггинге, а если писать что то не в дебаггинке (т.е. там, где он их даже не видит, что и в майне моды не появляются), то клипса даже не проверяет на ошибки написанный код, что сильно все усложняет, прошу, помогите, вроде и близко к цели, но все равно ахинея какая то



#15 _random

_random

    Добытчик дерева

  • Пользователи
  • Active Posts151

Posted 13.06.2016 - 15:10

В libs нужно пихать jar-архивы, классы из которых мы хотим использовать в своем моде.В eclipse/mods можно класть все остальные моды, их будет использовать клиент/сервер, в IDE их не будет видно.Например, в libs можно поместить api мода, а в eclipse/mods сам мод.Но туда нужно пихать только не обфусцированные или деобфусцированные моды, обычные не подходят!

Когда у мода есть maven-репозиторий, не стоит пихать мод в libs, достаточно лишь прописать все в build.gradle.

 

Сделал пример https://bitbucket.or.../examplemod/src (mercurial репозиторий) Достаточно лишь его скачать и выполнить "gradlew setupDecompWorkspace eclipse"Если лень устанавливать mercurial, то вот архив с исходниками: https://bitbucket.or...mplemod-0.1.zipСкомпилированный мод: https://bitbucket.or...-1.7.10-0.1.jar



#16 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 13.06.2016 - 16:24

В libs нужно пихать jar-архивы, классы из которых мы хотим использовать в своем моде.В eclipse/mods можно класть все остальные моды, их будет использовать клиент/сервер, в IDE их не будет видно.Например, в libs можно поместить api мода, а в eclipse/mods сам мод.Но туда нужно пихать только не обфусцированные или деобфусцированные моды, обычные не подходят!

Когда у мода есть maven-репозиторий, не стоит пихать мод в libs, достаточно лишь прописать все в build.gradle.

 

Сделал пример https://bitbucket.or.../examplemod/src (mercurial репозиторий)Достаточно лишь его скачать и выполнить "gradlew setupDecompWorkspace eclipse"Если лень устанавливать mercurial, то вот архив с исходниками: https://bitbucket.or...mplemod-0.1.zipСкомпилированный мод: https://bitbucket.or...-1.7.10-0.1.jar

т.е. у меня никак не получится конкретно через gradlew и клипсу нормально поработать над всем модом сразу, что б его можно было тестить прям в клипсе, постоянно надо будет компилить, обфусицировать и пихать в обычный майн? это ж задолбаться можно, да еще и ошибки клипса не проверяет же... либо я не понял



#17 Cyxapuk

Cyxapuk

     

  • Главные модераторы
  • Active Posts8706
  • Ник в Minecraft:
    Meegoo

Posted 18.06.2016 - 19:27

Вообще можно. Пример с чистым форджем1. Качаешь фордж2. gradlew setupDecompWorkspace3. gradlew eclipse4. В эклипсе как проект открываешь папочку eclipse.5. У тебя должен открыться проект с примером мода и двумя конфигурациями запуска: клиент и сервер6. Пиши код, запускай с дебаггером и делай что хочешьЕсли нужны другие моды, то либо добавляй их в зависимости в build.gradle, но я не знаю, как хорошо их воспринимает эклипс. Возможно придется заново написать gradlew eclipse и gradle обновит проектЛибо качай дев версию мода и добавляй его к проекту как зависимость.


V6xCzSN.png


#18 Nordicus666

Nordicus666

    Странник

  • Пользователи
  • Active Posts11

Posted 19.06.2016 - 10:04

Вообще можно. Пример с чистым форджем1. Качаешь фордж2. gradlew setupDecompWorkspace3. gradlew eclipse4. В эклипсе как проект открываешь папочку eclipse.5. У тебя должен открыться проект с примером мода и двумя конфигурациями запуска: клиент и сервер6. Пиши код, запускай с дебаггером и делай что хочешьЕсли нужны другие моды, то либо добавляй их в зависимости в build.gradle, но я не знаю, как хорошо их воспринимает эклипс. Возможно придется заново написать gradlew eclipse и gradle обновит проектЛибо качай дев версию мода и добавляй его к проекту как зависимость.

как добавлять то правильно в build.gradle? я пробовал - у меня выдавало ошибки (пробовал по гайду выше)



#19 _random

_random

    Добытчик дерева

  • Пользователи
  • Active Posts151

Posted 19.06.2016 - 14:53

Может в гугле поискать?
Например, мне гугл по запросу "compile 'net.industrial-craft" site:github.com выдал 56 результатов:
https://github.com/D...er/build.gradle
https://github.com/O...er/build.gradle
https://github.com/B...er/build.gradle
https://github.com/M...er/build.gradle
https://github.com/c...er/build.gradle
и т.д. Более того, ты можешь скачать исходники любого из этих модов, выполнить "gradlew setupDecompWorkspace eclipse" и открыть в эклипсе.

Может программирование не для тебя? Найди среди тех кто умеет писать моды единомышленника, а сам рисуй текстуры, делай модельки, пиши вики для мода и прочее.
По моему, основная сложность в моддинге - это идеи. Например, я могу сделать мод с пушками, но зачем? Таких модов и так полно, чем мой будет лучше остальных?
 

Если нужны другие моды, то либо добавляй их в зависимости в build.gradle, но я не знаю, как хорошо их воспринимает эклипс. Возможно придется заново написать gradlew eclipse и gradle обновит проект

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

Либо качай дев версию мода и добавляй его к проекту как зависимость.

А вот это не советую, т.к. хотя в эклипсе будет работать, но gradle не будет знать о добавленном моде и "gradlew build" не сработает.

Edited by _random, 19.06.2016 - 15:13.



0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users