Jump to content

Refining my development process with Forge


chrixian

Recommended Posts

There's gotta be several ways I can improve my process when updating the version of Forge I'm developing with... here is my current workflow:

 

When I download a new "src" package from files.minecraftforge.net I unzip it to a common folder called "forgedev" and then rename the newly created forge directory to include it's fml build number so 923 would become ~/forgedev/forge.923, I then run install.py, add a symbolic link in mcp/src/minecraft to where I have my mod code, and open the mcp/eclipse workspace in eclipse, import preferences and then spend 20 minutes changing all the settings that don't get exported.

 

This has worked well for me, for the most part. Using a symbolic link rather than importing the source via eclipse lets me have a single location for my code and I can handle any issues between versions of Forge at the version control level (git in my case) via branches. However now I have the need for a few modified Minecraft source files in one of my mods, and it all works fine but now the symbolic link isn't enough since I have to copy the modified portions of code into their respective Minecraft source files (rather than overwrite the new file in case it contains changes other than my own). It's a bit of a headache but not the end of the world.

 

I'm not a big fan of Eclipse, I use IDEA in my professional life and having to deal with a new workspace is probably the thing I like least about how I'm doing things now.

 

So does anyone have a way they do things that involves using the same workspace with their own code but allows forge and mcp to be updated? I haven't explored using the MinecraftForge git repo directly, I suppose that may be an option.

Link to comment
Share on other sites

Hi

 

Unfortunately I don't have any suggestions on how to improve your workflow.  I am wrestling with a similar problem myself and haven't managed to solve it.

 

But if you're not a fan of Eclipse, is there a particular reason you're not using IDEA?  That's what I use and it works great, even in my inexpert hands.  Just followed the tutorial on http://www.minecraftforge.net/wiki/Forge_Development_in_IntelliJ_IDEA, hooked up to GitHub, and away I went.

 

Actually - if you're an IntelliJ expert - do you know of an easy way to clone a project (i.e. its settings)?  I spent two hours trying to figure it out with no luck, and surely it should be very simple?  Wound up having to copy the files and then manually add all the libraries and settings back again.

 

-TGG

Link to comment
Share on other sites

Hi

 

Unfortunately I don't have any suggestions on how to improve your workflow.  I am wrestling with a similar problem myself and haven't managed to solve it.

 

But if you're not a fan of Eclipse, is there a particular reason you're not using IDEA?  That's what I use and it works great, even in my inexpert hands.  Just followed the tutorial on http://www.minecraftforge.net/wiki/Forge_Development_in_IntelliJ_IDEA, hooked up to GitHub, and away I went.

 

Actually - if you're an IntelliJ expert - do you know of an easy way to clone a project (i.e. its settings)?  I spent two hours trying to figure it out with no luck, and surely it should be very simple?  Wound up having to copy the files and then manually add all the libraries and settings back again.

 

-TGG

 

Well, truth be told, I do end up using IDEA instead of Eclipse-- but since that is merely an import of the eclipse workspace I figured I wouldn't complicate the matter since the workspace configuration (while a burden) isn't the ultimate goal-- updating Forge easily :D

 

I just thought I'd keep it as straight forward as possible  ;)

 

As for cloning a project, if you mean "settings" then you can export/import settings via the File menu-- what you choose export/import is vast and properly coded plugins will also be included as an option.

 

If you mean clone a particular module and its "settings" i.e. source, path, dependencies, you can do that by opening the module settings, and right clicking the module from the list and selecting Copy...

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

    • 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;     }  
    • It is an issue with quark - update it to this build: https://www.curseforge.com/minecraft/mc-mods/quark/files/3642325
    • Remove Instant Massive Structures Mod from your server     Add new crash-reports with sites like https://paste.ee/  
    • Update your drivers: https://www.amd.com/en/support/graphics/amd-radeon-r9-series/amd-radeon-r9-200-series/amd-radeon-r9-280x
  • Topics

×
×
  • Create New...

Important Information

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