Jump to content

MCNeo - A major, standalone MineCraft mod


EHX

Recommended Posts

Hi everyone,

 

since I'm not entirely sure whether or not to set up Twitch so I can have a MCForum account, I'll post this here for now. This post will be updated with the MCForum link as soon as my project is up there too.

 

EDIT: The MCForum post can be found here.

 

Anyway, as it says, MCNeo is a major MineCraft mod I'm currently working on. It's currently being developed for MineCraft 1.8, as I'm only planning to introduce it to 1.9+ once I'm introducing stat packs, and I have more than enough major features planned for the 1.8 release already. I'm building it with the MineCraft Coder Pack.

 

I'm currently working on transferring structure generation to a template system, fairly similar to Ruins, except my concept is modular in order to allow for procedural structures. Other planned features are:

  • Import of the dimension mods Aether, Erebus, Atum and Deeper Caves.
  • Import of some more basic mods, namely Torch Levers, Iron Chests, Potion Core, Exp Chests, Deconstruction Table, Power Apples and Lucky Blocks.
  • World generation will be overhauled to use something akin to Customized for everything, expanded to support all world types. Also world gen will be customizable for each dimension individually, and allowed to feature biomes that normally only appear in other dimensions.
  • I also plan to pre-port the Outer End and Bone Fossils.
  • The world type setting will also include a version of the Standard Overworld that includes the Far Lands, as well as basically a Superflat for the Nether (for convenience so you don't have to put a lot of air layers and then the bottom layers in opposite order manually).
  • Oh, I mentioned Lucky Blocks. I'm actually not only including the basic mod, but also 7 alternative textures for the block itself, each with a list of drops that resembles the original addon, with Loot++ blocks and items obviously being imported.
  • Oh right, Loot++. The recipe customization feature will also exist, with recipe lists for all crafting tables, furnaces, brewing and the Offering Altar from the Erebus mod. Custom ChestGenHooks are obviously a thing also.
  • Also on the side of modded entities, besides what comes with the dimensions, I'm also planning to import Elemental Witches, Ore Spiders and Aqua Creepers, as well as the minotaurs from Gabriele Maurina's Best Mazes (obviously along with Ivory, Pisellite and the mazes).
  • If possible, I will also include TangoTek's Mummy Mod. Yes, in addition to Atum Mummies.
  • Now with all the imports, you may think I'm not planning anything of my own besides a massive customization expansion. Well, I actually also plan to feature a custom rendition of the Wither Storm and my very own interpretation of the Hovering Inferno, as well as a custom Demon Lord boss. (Well, sort of. I'm using existing textures because I'm garbage at shading. But the abilities are meant to be fully custom.)
  • I also have a bunch of random custom additions on my list:
    • A piston that can push any block in the game (except for extended Pistons), but requires a Dragon Egg for crafting by default.
    • 2 new Slime Block variations, one of which is hard and slippery, and one is swampy and somewhat similar to Soul Sand.
    • A cake that requires rare ingreidents, but in exchange grants a few buffs as you eat a slice.
    • Glass that replicates the different dimensional portals (purely aesthetical).
    • Wool that replicates a few special property blocks (for instance I heard some players like using Snow when building, but Snow can cause melting issues, so...).
    • 5 fairly hard custom achievements, although I'll tweak a few aspects so they will all be possible on Easy difficulty and without heavily relying on RNG.
    • Fully custom recipes for all Potion Core potions. (I'm literally not looking at any mods for inspiration on that regard. I have some of them in my JSON file for crafting recipes already, so feel free to have a look.)
  • Also, MineCraft gets an actual backstory, that is being referenced at, as well as being written in a custom Book of Lore that can occasionally be found in Starter Chests.

 

Long story short, it's pretty much a combination of my favourite mods with removals of limitations I noticed on them, as well as stuff I always wished existed, but I never found a mod that properly provided it. For a better overview what I'm planning, I included my main config files, as well as the en-US.lang and a few example templates. (Some of those files are heavily WIP. For instance, creation.json will include most recipes from Vanilla MineCraft and the imported mods in the final product, and ChestGenHooks from some structures I plan to add are still missing too, in particular the ones from Aether dungeons.)

 

Now as I mentioned, I'm currently working on the template system. It's a modular template system where each room in a structure has its own template, and there's additional templates for the structures themselves that put it all together. The room linkage system has two parts: The structure template determines which module templates are loaded into the structure as rooms. The module templates themselves are fairly similar to Ruins templates (except I tried to improve readability by using JSON). One major addition, however, are the connectors that define areas within the module where it can overlap with other modules (and thereby become part of the structure). Connectors have a named ID (connectors with the same ID are treated as "basically the same") and a list of IDs they can connect to. This list is optional, by default it's a list with only the connector's own ID. If you provide a list, however, the connector's own ID will not be included implicitly. Module and structure templates are distinguished by their location: Module templates are being put in .minecraft/generation/structure-modules, while structure templates use the .minecraft/generation/structures folder. From the appended templates, cobble-boulder.json, navy-very-lucky-acropolis.json and village-path.json are modules and village.json and dungeon.json are structures.

 

Currently, chances are I'm working on the template system as my bachelor thesis, so I can't take that much help on it. What I know for sure will be allowed, though, is asking a few questions that arose:

  1. Where are the chest gen hooks for starter chests and mineshaft chests located in the code? Those are the only two I can't seem to find anywhere.
  2. Since I'm using non-seed RNG for the structure layout (by design), I can't populate chunks before doing part of the generation on them. And if I only populate chunks that are currently being loaded, structures will always be either very small, or stretched out in one direction. So I need to perform the abstract generation steps in advance, on a notably larger scale. Currently I'm struggling at how to approach that. Does anyone have any ideas?
  3. I'm having testing issues. My code relies on data that would normally be located at the root of the .minecraft directory. However, I have no idea what location in MCP corresponds to .minecraft, so I don't know where to put my test data. Can someone help me out on that?

 

Thanks in advance, guys!

village.json

dungeon.json

cobble-boulder.json

village-path.json

ChestGenHooks.json

creation.json

en_US.lang

navy-very-lucky-acropolis.json

Edited by EHX
Inserted link to MCForum post
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.