I haven't played The Betweenlands, but I downloaded it to investigate - the large filesize is not from HD textures, but from sounds - according to WinDirStat, the "sounds" folder accounts for 89.5% of the mod's size (or 116.9 MB of 146.9 MB when extracted)
Immersive Railroading, on the other hand, seems to get most of its size from the "models" folder (96.9% when extracted), though mostly .obj files (79.6%) which apparently compress well - to around 15 to 22% of original size.
Edit: I'm not sure how big the other mods mentioned are by this metric, but GregTech 5 Unofficial with my current settings lists 8067 mod-specific items in NEI. Admittedly, many of those aren't obtainable in survival with default settings, like osmium ore (since osmium is obtained as a byproduct of iridium ore) or blocks of mithril (since I don't have Metallurgy 4 installed)
Immersive Railroading, on the other hand, seems to get most of its size from the "models" folder (96.9% when extracted), though mostly .obj files (79.6%) which apparently compress well - to around 15 to 22% of original size.
I recall that the changes to block models in 1.8 had a major impact on some mods because of the number of model files they now required but this is quite ridiculous - surely Forge allows for some way for mods to use the "original" rendering methods, which might require more code but a lot less than the size of model files, which can surely only be possible due to using an automated script to create them, and aside from creating so many files it increases load time and memory usage, especially the latter from what I've heard.
As an illustration of the power of rendering models in pure code, the following relatively simple code allows for a virtually infinite number of rendered models, which my custom flowerpots use to render actual trees in them, with every tree being different depending on its coordinates (not shown is the code that generates the actual trees, which is basically a copy of the code used by world generation, except the "setBlock" method writes to "treeData" with coordinates set to 10, 0, 10 and space checks/hidden branches were removed; the overall size of the flowerpot rendering code is 135 KB, which includes rendering for dozens of other plants, most of which reuse the same rendering methods):
for (int x = 0; x < 21; ++x)
{
float offsetX = (float)(rX + (double)x * (double)scale);
for (int z = 0; z < 21; ++z)
{
float offsetZ = (float)(rZ + (double)z * (double)scale);
int xzi = x * 48 + z * 1008;
for (int y = 0; y < height; ++y)
{
int block = this.treeData[xzi + y];
if (block >= 0)
{
// Determines if any sides should be rendered
int renderSide = (y > 0 && this.treeData[xzi + y - 1] == -1 ? 1 : 0);
if (y >= 47 || this.treeData[xzi + y + 1] == -1) renderSide |= 2;
if (x <= 0 || this.treeData[xzi + y - 48] == -1) renderSide |= 4;
if (x >= 20 || this.treeData[xzi + y + 48] == -1) renderSide |= 8;
if (z <= 0 || this.treeData[xzi + y - 1008] == -1) renderSide |= 16;
if (z >= 20 || this.treeData[xzi + y + 1008] == -1) renderSide |= 32;
if (renderSide > 0)
{
if (block < 16)
{
// Wood, uses values 0-3
this.renderTreeBlock(tess, Block.wood.getIcon(2, block), offsetX, (float)(rY + (double)y * (double)scale), offsetZ, scale, renderSide, 1.0F, 1.0F, 1.0F);
}
else
{
// Leaves, uses values 16+
float r, g, b;
block -= 16;
// Sets leaf color
switch (block)
{
case 1: // Spruce leaves
r = 0.4191F;
g = 0.6611F;
b = 0.4191F;
break;
case 2: // Birch leaves
r = 0.5522F;
g = 0.7205F;
b = 0.3674F;
break;
case 3: // Jungle leaves
r = 0.21105F;
g = 0.7623F;
b = 0.04536F;
break;
default:
case 4: // Oak and Mega Tree leaves
r = 0.3124F;
g = 0.781F;
b = 0.10362F;
break;
case 5: // Palm leaves
r = 0.2268F;
g = 0.7581F;
b = 0.07413F;
break;
case 6: // Dark/Swamp Oak leaves
r = 0.2761F;
g = 0.5698F;
b = 0.1386F;
break;
case 7: // Acacia leaves
r = 0.71715F;
g = 0.6762F;
b = 0.17325F;
break;
}
// Block.leaves are 16-19 and Block.leaves2 are 20-23. A negative side for getIcon always returns opaque (Fast) texture
if (block < 4)
{
this.renderTreeBlock(tess, Block.leaves.getIcon(-1, block), offsetX, (float)(rY + (double)y * (double)scale), offsetZ, scale, renderSide, r, g, b);
}
else
{
this.renderTreeBlock(tess, Block.leaves2.getIcon(-1, block), offsetX, (float)(rY + (double)y * (double)scale), offsetZ, scale, renderSide, r, g, b);
}
}
}
}
}
}
// Renders a standard cube block with the specified scale; all sides use the same icon
// renderSide is 1 for bottom, 2 for top, 4 for west, 8 for east, 16 for north, 32 for south (63 for all sides)
private void renderTreeBlock(Tessellator tess, Icon icon, float minX, float minY, float minZ, float scale, int renderSide, float r, float g, float b )
{
float maxX = minX + scale;
float maxY = minY + scale;
float maxZ = minZ + scale;
float minU = icon.getMinU();
float maxU = icon.getMaxU();
float minV = icon.getMinV();
float maxV = icon.getMaxV();
// Bottom face
if ((renderSide & 1) != 0)
{
tess.setColorOpaque_FU(r * 0.5F, g * 0.5F, b * 0.5F);
tess.addBlockVertex(minX, minY, maxZ, maxU, maxV);
tess.addBlockVertex(minX, minY, minZ, maxU, minV);
tess.addBlockVertex(maxX, minY, minZ, minU, minV);
tess.addBlockVertex(maxX, minY, maxZ, minU, maxV);
}
// Top face
if ((renderSide & 2) != 0)
{
tess.setColorOpaque_FU(r, g, b);
tess.addBlockVertex(maxX, maxY, maxZ, maxU, maxV);
tess.addBlockVertex(maxX, maxY, minZ, maxU, minV);
tess.addBlockVertex(minX, maxY, minZ, minU, minV);
tess.addBlockVertex(minX, maxY, maxZ, minU, maxV);
}
// West face
if ((renderSide & 4) != 0)
{
tess.setColorOpaque_FU(r * 0.6F, g * 0.6F, b * 0.6F);
tess.addBlockVertex(minX, maxY, maxZ, maxU, minV);
tess.addBlockVertex(minX, maxY, minZ, minU, minV);
tess.addBlockVertex(minX, minY, minZ, minU, maxV);
tess.addBlockVertex(minX, minY, maxZ, maxU, maxV);
}
// East face
if ((renderSide & 8) != 0)
{
tess.setColorOpaque_FU(r * 0.6F, g * 0.6F, b * 0.6F);
tess.addBlockVertex(maxX, minY, maxZ, minU, maxV);
tess.addBlockVertex(maxX, minY, minZ, maxU, maxV);
tess.addBlockVertex(maxX, maxY, minZ, maxU, minV);
tess.addBlockVertex(maxX, maxY, maxZ, minU, minV);
}
// North face
if ((renderSide & 16) != 0)
{
tess.setColorOpaque_FU(r * 0.8F, g * 0.8F, b * 0.8F);
tess.addBlockVertex(minX, maxY, minZ, maxU, minV);
tess.addBlockVertex(maxX, maxY, minZ, minU, minV);
tess.addBlockVertex(maxX, minY, minZ, minU, maxV);
tess.addBlockVertex(minX, minY, minZ, maxU, maxV);
}
// South face
if ((renderSide & 32) != 0)
{
tess.setColorOpaque_FU(r * 0.8F, g * 0.8F, b * 0.8F);
tess.addBlockVertex(minX, maxY, maxZ, minU, minV);
tess.addBlockVertex(minX, minY, maxZ, minU, maxV);
tess.addBlockVertex(maxX, minY, maxZ, maxU, maxV);
tess.addBlockVertex(maxX, maxY, maxZ, maxU, minV);
}
}
Every sapling has at least one tree variant which can be cycled through by right-clicking on a flowerpot while sneaking; the tree models represent the majority of tree types that are in TMCW:
These are all the same variant of tree; each one generates differently based on its coordinates:
Mushrooms also have corresponding huge mushroom models for each of 5 different colors (these also represent every variant of naturally generated huge mushroom), using similar code as shown above for trees (in this case each color has the same 10 models so the actual code that creates the mushrooms is much simpler):
Also, this shows that baseline memory usage is only about 30 MB (on a default Superflat world; however, any memory usage above this in a normal world is solely due to more block data being loaded). Also, the first item in my hotbar is the actual flowerpot block - I completely removed the redundant "item" form as it made no sense at all, same for many other blocks and items, such as cake and cauldrons, which all likewise render using their block models, and eliminates an unnecessary texture and item (1.6.4 registers items for all blocks regardless of whether they are supposed to be obtainable in that form, e.g. you can give yourself a water block, which renders as the "2D item with thickness" model, the default for non-cuboid blocks that do not override the default render method):
I agree it's ridiculous, but I think it has to do with the way Immersive Railroading bases its models on real-world objects, rather than making any discernible attempt to make them fit with Minecraft aesthetics. As an example, I'm attaching an image of a1_peppercorn_tender.obj as opened by "3D Viewer" and switched to the Stats & Shading tab, so you can see how complicated it is.
Yeah everyones mentioning mods like the betweenlands, orespawn, etc. I have yet to see Eternal Isles which was a mod that came out a while ago with like twenty dimensions or something ridiculous.
The chipped mod adds like 10 variants to loads of blocks, like amethyst and netherite and even adds more than just variants. So that probs wins for items.
There was a pack that Direwolf20 was playing a while back that included the Betweenlands. There's some seriously creepy mobs, challenging puzzles and difficult boss fights, plus your usual tools and armor don't work here or will start to decay, and the light level is very low (it is much darker than a similar large mod, the Twilight Forest.)
I haven't played The Betweenlands, but I downloaded it to investigate - the large filesize is not from HD textures, but from sounds - according to WinDirStat, the "sounds" folder accounts for 89.5% of the mod's size (or 116.9 MB of 146.9 MB when extracted)
Immersive Railroading, on the other hand, seems to get most of its size from the "models" folder (96.9% when extracted), though mostly .obj files (79.6%) which apparently compress well - to around 15 to 22% of original size.
Edit: I'm not sure how big the other mods mentioned are by this metric, but GregTech 5 Unofficial with my current settings lists 8067 mod-specific items in NEI. Admittedly, many of those aren't obtainable in survival with default settings, like osmium ore (since osmium is obtained as a byproduct of iridium ore) or blocks of mithril (since I don't have Metallurgy 4 installed)
I recall that the changes to block models in 1.8 had a major impact on some mods because of the number of model files they now required but this is quite ridiculous - surely Forge allows for some way for mods to use the "original" rendering methods, which might require more code but a lot less than the size of model files, which can surely only be possible due to using an automated script to create them, and aside from creating so many files it increases load time and memory usage, especially the latter from what I've heard.
As an illustration of the power of rendering models in pure code, the following relatively simple code allows for a virtually infinite number of rendered models, which my custom flowerpots use to render actual trees in them, with every tree being different depending on its coordinates (not shown is the code that generates the actual trees, which is basically a copy of the code used by world generation, except the "setBlock" method writes to "treeData" with coordinates set to 10, 0, 10 and space checks/hidden branches were removed; the overall size of the flowerpot rendering code is 135 KB, which includes rendering for dozens of other plants, most of which reuse the same rendering methods):
These are all the same variant of tree; each one generates differently based on its coordinates:
Mushrooms also have corresponding huge mushroom models for each of 5 different colors (these also represent every variant of naturally generated huge mushroom), using similar code as shown above for trees (in this case each color has the same 10 models so the actual code that creates the mushrooms is much simpler):
Also, this shows that baseline memory usage is only about 30 MB (on a default Superflat world; however, any memory usage above this in a normal world is solely due to more block data being loaded). Also, the first item in my hotbar is the actual flowerpot block - I completely removed the redundant "item" form as it made no sense at all, same for many other blocks and items, such as cake and cauldrons, which all likewise render using their block models, and eliminates an unnecessary texture and item (1.6.4 registers items for all blocks regardless of whether they are supposed to be obtainable in that form, e.g. you can give yourself a water block, which renders as the "2D item with thickness" model, the default for non-cuboid blocks that do not override the default render method):
TheMasterCaver's First World - possibly the most caved-out world in Minecraft history - includes world download.
TheMasterCaver's World - my own version of Minecraft largely based on my views of how the game should have evolved since 1.6.4.
Why do I still play in 1.6.4?
I agree it's ridiculous, but I think it has to do with the way Immersive Railroading bases its models on real-world objects, rather than making any discernible attempt to make them fit with Minecraft aesthetics. As an example, I'm attaching an image of a1_peppercorn_tender.obj as opened by "3D Viewer" and switched to the Stats & Shading tab, so you can see how complicated it is.
to play project ozone 3 is the best mod i ever seen is 1.33GB but with tenthousands of plessure mods and other one is rlcraft
Yeah everyones mentioning mods like the betweenlands, orespawn, etc. I have yet to see Eternal Isles which was a mod that came out a while ago with like twenty dimensions or something ridiculous.
Isn't Eternal Isles just Advent Of Ascension for 1.7?
for 1.7.2 and only 2 versions in 1.7.10
in terms of file size
either tragicmc2 or betweenlands
Is that an AoA referance
I just took the Minecraft Noob test! Check out what I scored. Think you can beat me?!
To take the test, check out
https://minecraftnoobtest.com/test.php
The biggest mod is definitely The Betweenlands
The list is not in order or preferences
1. Security Craft
2. Chisel
3. Decocraft
4. Galacticraft
5. Immersive Vehicles
6. MCA(Minecraft Comes Alive)
7. Rustic
8. XL Food Mod
9. Conquest reforged
10. Chisel and bits
Obviously 11. JEI
12. Journeymap
I like other mods too but this is enough to start with a base of mods
The chipped mod adds like 10 variants to loads of blocks, like amethyst and netherite and even adds more than just variants. So that probs wins for items.
Advent of ascension
Divine RPG
Orespawn
Lost infinity stones
Its 100% CE'S MINERALS AND MORE
There was a pack that Direwolf20 was playing a while back that included the Betweenlands. There's some seriously creepy mobs, challenging puzzles and difficult boss fights, plus your usual tools and armor don't work here or will start to decay, and the light level is very low (it is much darker than a similar large mod, the Twilight Forest.)