Jump to content

Forge networked Block mapping suggestion


AtomicStryker

Recommended Posts

With forge (in theory) eliminating all interclass-incompatibilities there is another very major problem the bigger mods face:

 

Block IDs. If you install all major mods, you will most certainly experience some overlap, and already some mods (like Redpower) automatically (and unilaterally) remap their blockIDs.

 

 

Now what if Forge did the mapping - instead of each mod registering it's own BlockIDs globally, they register their needed BlockIDs with Forge (starting with 0, per-mod blabla). Forge then serves as provider for whatever BlockID is needed, and more importantly, what BlockID stands for what Block.

 

What's the use? If a client connects to a server, he gets a one-time transmission of what BlockIDs are mapped to what Block, thus forever eliminating the need to keep server (in some case even world) specific blockID configs.

 

Since BlockID's are the same per-mod, you wouldnt even need to transmit ALL Blocks, just the BlockID at which mod x's range starts.

 

 

 

Here's a simple example: Both client and server have 2 mods, derpcraft and herpcraft.

derpcraft used to occupy Block IDs {100,101,102}, herpcraft occupied {101,102,103}. There was a lot of problems with that, saves got corrupted etc etc

New process:

derpcraft and herpcraft both register mod-specific Blocks of IDs {1,2,3}. Forge serverside starts distributing Blocks at 100, and maps 100-102 to derpcraft and 103-105 to herpcraft.

If a client now connects, he gets a packet telling him: derpcraft: 100; herpcraft: 103. His client then maps 100-102 to derpcraft and 103-105 to herpcraft.

 

 

 

EDIT:

 

Sort of an automatic save converter would be needed aswell. When mods change and for example derpcraft suddenly demands 5 Blocks, forge could rework the world-savefile and move herpcraft's BlockIDs 2 up. And for this, some kind of structure in the savefile keeping track of what the mod-BlockIDs were last mapped to.

 

 

 

This is just a proposal though. If you'd rather wait for the 4k BlockIds to actually happen, then yell at mod makers to keep their shit apart .. i can work with that.

Why, that makes no sense at all.

Link to comment
Share on other sites

This is an excellent idea.

 

I would further suggest that the id mapping should be kept with the world save. That way you can load someone else's world save in single player and get all the right mappings. And Forge could warn you if you are missing the mod corresponding to any of the mappings.

Link to comment
Share on other sites

This is an excellent idea.

 

I would further suggest that the id mapping should be kept with the world save. That way you can load someone else's world save in single player and get all the right mappings. And Forge could warn you if you are missing the mod corresponding to any of the mappings.

It actually already does store IDs per world save in his pull request, it is still being finished.

Link to comment
Share on other sites

I totally agree with this. Maybe forge should also implement more block IDs so it would be a easy to adds more blocks than the limitation. (eg. 4096 fix)

 

No, MC is already adding that and mDiyo already has a patch for it for SP.

 

I thought MC 1.3 is going to add its own API? What would forge be when that happens?

Link to comment
Share on other sites

I totally agree with this. Maybe forge should also implement more block IDs so it would be a easy to adds more blocks than the limitation. (eg. 4096 fix)

 

No, MC is already adding that and mDiyo already has a patch for it for SP.

 

I thought MC 1.3 is going to add its own API? What would forge be when that happens?

 

They are adding their own API in parts, the server part will be first, forge will still be useful for a long long time to come, especially since the API keeps getting pushed off.

Link to comment
Share on other sites

this is a very good ideal. Running a server one of the hardest parts are configs. If someone even has one setting off they will crash on connect, crafting or using a GUI. This usually scares players off from using mods or playing smp with mods. So I've  been working on in a few of my mods having the config changed by server packets. For example my ComeCloser mod controls render range of the player name. My original way of changing the range setting was with a config and with the mod version containing the config number. Now with packets i can send the range setting when the player logs in, and Since the render player name is called every update it will use the new setting. this way the player doesn't have to change the setting for range ever server he logs into.

    However, i don't think this would work with blocks since there ids are registered when the game starts. Unless someone rewrites the blocks to not be register till the player loads a world. This in mind a mod could be written that would get the config list from a server and send it to the player. Then backing up the old configs first, delete them and write over with a new temp list. The player can then restart his client and connect to the server with the correct settings. Once logged out the mod will then store the server list in a folder called "ServerConfigs/ServerName". Which can be retrieved latter if the player decides to restore the original configs.

  Another option playing on the same ideal is to redirect where minecraft looks for its mod configs to a new folder containing the servers configs. This way the player doesn't have to restart twice after switching the configs folder from the server.

 

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.