Jump to content

Proof of concept mod compiler (Now with GUI!)


tuxie

Recommended Posts

https://github.com/magnusjjj/mcbuildatron

 

Update: Made a GUI

 

78fa32ee3f0b469ebfdd0cfb7dbd4d19.png

 

I made a tool that downloads the source code for open source mods (there is a list of recipies for a bunch of them included) from github, adds gradlew to the directory if required, and builds it.

Its.. not that polished right now. Built it mostly to see how much of the modpack that I am assembling could actually be built automatically :).

Link to comment
Share on other sites

To make it simpler to set up a dev environment for open source mods, so you can help out when you notice something wrong without spending half of your energy setting up a dev environment and all your settings just right. You download this, run the run_me_first.bat, then the gui.bat, and bam, a list of mods that are actually open source. You press the mod you want, you hit the red button, it clones the repo, sets up gradle, and compiles it.

 

 

<my lifes story>

Oh! Well, I was making a modpack, and after going through every single mod from another major modpack, finding the license requirements for each and every single one and going ever so slightly insane...

 

I wanted to see how many mods I could actually compile. I run my own game servers, and every once in a while a mod absolutely shits itself, and throws an exception when the server starts. I wanted to make a tool that would let me, since I am a person with.. not a lot of energy.. with the click of a button set up a dev environment for that mod so I can help out fixing the bug instead of just setting those 'delete all entities that cause exceptions' settings.

 

I then figured it might be usefull for someone else. So I tried to make it into a simple command line dealio. Type in 'builder name_of_mod', and it downloads the sources, sets up gradle, and compiles it for you.

 

Then I figured that I wanted to fuck around with making a GUI, and, *patting own shoulder*, it turned out decent-ish.

</my life story>

Link to comment
Share on other sites

This seems like a lot more work than simply forking a project and setting up a dev environment yourself, while you may have a list of mods that can be seen on one screen without the use of a quick browser/google/github search, it will never be complete, to plus you just download the master, what if i wanted to say make a PR fix for BoP 1.8.9? Your tool is going to get me the default branch which is currently sitting on 1.11.2

Link to comment
Share on other sites

Yup. Hence the 'proof of concept' in the title :). Its incredibly, incredibly, incredibly easy to add new recipes, and to share said recipes.

 

For the rest? Yeah, totally with you on that. It lacks a toooooooon of features. Just a ton of them. I'll probably add them as I need them, but right now all it is is a request for comments and for others to play around with. Its not all that usefull right now. I plan to add a bunch of shortcuts, and try to be somewhat newbiefriendly. The goal, right now, is just to be able to build as many mods as possible as simply as possible, and to fuck around with it a bit :).

 

Oh! Well, I was making a modpack, and after going through every single mod from another major modpack, finding the license requirements for each and every single one and going ever so slightly insane...

for that there is curseforge

 

There is not :P. Curseforge has about a 50% hit rate when it comes to mods and their licenses. Source: I spent hours and hours compiling a list of 261 mods, their licenses, where to find the source... :'). The google spreadsheet of doom and despair.

This is not a solution to that, its just the backstory behind my bout of insanity~

Link to comment
Share on other sites

I really like this idea and sincerely hope you keep working on it.

 

For all the naysayers, disbelievers, and what have yous, sheesh, even the car you take for granted started with a wheel and an idea. Don't shit on his idea just because all you see is a door handle.

 

Most people who would even bother to post a proof a concept would simply post a bunch of words describing a grandiose idea, this guy went and produced a working program.

 

Good job!

Link to comment
Share on other sites

On 2017-02-01 at 0:10 PM, kreezxil said:

I really like this idea and sincerely hope you keep working on it.

 

For all the naysayers, disbelievers, and what have yous, sheesh, even the car you take for granted started with a wheel and an idea. Don't shit on his idea just because all you see is a door handle.

 

Most people who would even bother to post a proof a concept would simply post a bunch of words describing a grandiose idea, this guy went and produced a working program.

 

Good job!

Thanks <3. Your comment made me have a bit more energy.

 

Just wanted to post some progress for the latest version due in a couple of days :).

132 recipes at the moment, 21 failing. Better list, more things in the edit window...

Setting a common gradle cache directory, so if you launch multiple builds it doesn't hammer the forge website so heavily.

 

Most recipes that won't compile is due to missing libraries. Some mods want you to drop a jar or two into a specific directory. Not sure how I want to implement that, given that most of those are manual (say, thaumcraft's API and the crazy licensing there). Might just be a popup explaining what to do :).

 

That, and most other errors are web servers that are down. Seems like some of the forge api servers are having a hard time lately? Timeouts are crazy often, but if you try and try again everything works just fine.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.