Jump to content

Recommended Posts

Posted

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.

Posted

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.

Posted
  On 4/27/2012 at 1:02 AM, gcewing said:

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.

Posted
  On 5/3/2012 at 1:00 AM, calclavia said:

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.

Posted
  On 5/3/2012 at 1:05 AM, OvermindDL1 said:

  Quote

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?

Posted
  On 5/3/2012 at 4:58 AM, calclavia said:

  Quote

  Quote

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.

Posted

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.

 

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

    • Hey man,    i have only been modding Minecraft for a few days but maybe I can help you. First of all make sure to follow every step of Kaupenjoe's tutorial, I found it to been very helpful and complete. The game uses the raw translation key for the item (in your case "item.testmod.alexandrite") if it can't find the correct lang file. Make sure it's name is "en_us.json" and it is saved under "ressources" -> "assets" -> "testmod".
    • whenever I try to get this item to render into the game it appears with the not texture purple and black squares and calls itself by the lang translation file path instead of the name i gave it.   { "item.testmod.alexandrite": "Alexandrite" } this is the lang json file package net.Hurst.testmod.item; import net.Hurst.testmod.TestMod; import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; public class ModItems { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, TestMod.MOD_ID); public static final RegistryObject<Item> ALEXANDRITE = ITEMS.register("alexandrite", () -> new Item(new Item.Properties())); public static void register(IEventBus eventBus){ ITEMS.register(eventBus); } } this is my ModItems.java file package net.Hurst.testmod; import com.mojang.logging.LogUtils; import net.Hurst.testmod.item.ModItems; import net.minecraft.world.item.CreativeModeTabs; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.slf4j.Logger; // The value here should match an entry in the META-INF/mods.toml file @Mod(TestMod.MOD_ID) public class TestMod { public static final String MOD_ID = "testmod"; private static final Logger LOGGER = LogUtils.getLogger(); public TestMod() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); ModItems.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); modEventBus.addListener(this::addCreative); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.SPEC); } private void commonSetup(final FMLCommonSetupEvent event) { } // Add the example block item to the building blocks tab private void addCreative(BuildCreativeModeTabContentsEvent event) { if(event.getTabKey() == CreativeModeTabs.INGREDIENTS){ event.accept(ModItems.ALEXANDRITE); } } // You can use SubscribeEvent and let the Event Bus discover methods to call @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { } // You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent @Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public static class ClientModEvents { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { } } } this is my TestMod.java file { "parent": "minecraft:item/generated", "textures": { "layer0": "testmod:item/generated" } } this is my model file for the item. I am using intellij 2025.1.2 with fdk 1.21 and java 21 I would appreciate the help.
    • Also remove VS Create Armor, createbigcannons and The Factory Must Grow
    • Add the latest.log (logs-folder) with sites like https://mclo.gs/ and paste the link to it here  
  • Topics

×
×
  • Create New...

Important Information

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