TelepathicGrunt
Software Developer that makes Minecraft mods on free time. See The Bumblezone, Repurposed Structures, and other mods I have made.
- 2025 Serverside Summer Modjam! This contest runs from June 1st and ends on July 31st and will only accept serverside mods. Please visit this blog post for more details of what is accepted, what the prizes are, and how to submit your entries to the contest! neoforged.net/news/2025ser...
- Serverside Summer Minecraft modding contest being hosted by NeoForge! Check it out! #mcdev
- Clear our your plans on the calendar! Serverside Summer Minecraft modding contest going live June 1st to July 31st, 2025! Check out the blog post for more info and what prizes are. Full contest rules will be revealed on June 1st. neoforged.net/news/2025ser...
- If your #minecraft mod need to check if a position is near your block (like during entity ticking), do not do a scan. Instead, register your block into the Point Of Interest system and use that to grab your nearby blocks much faster! Greatly reduces lag compared to blockpos scanning. #mcdev #modding
- This is the same system Villagers use to find nearby beds and workstations very quickly without bringing the game to a crawl. The POI system is designed for this so you do not need to iterate over every position looking for your block, which is slow to do as getChunk and getBlockState has overhead.
- When creating a new entity in a #minecraft mod, always try to use the entity's own RandomSource in the entity's class. You have to use this random and not the incoming level's random or else your entity can crash the game when the entity spawns during worldgen (Very hard to diagnose) #mcdev #modding
- This also goes for goal classes as well for any goal-based mob or animal. Goals are loaded right away when entity spawns so they too need to use the entity's RandomSource to be worldgen safe. Vanilla bee's own goals have this bug which is why I mixin them to make them worldgen spawning safe.
- For #minecraft mods that have recipes that should only load when another mod is present, please use this condition in the recipe to prevent logspam: "neoforge:conditions": [ { "type": "neoforge:mod_loaded", "modid": "examplemod" } ] docs.neoforged.net/docs/resourc... #mcdev #modding
- Also, logspamming is bad for performance. Really. Especially on Windows iirc. Just please try to keep the amount of logspam down for your mods. I beg of you
- To be clear, for many of the logspams we see, the slowness is on world load, server join, starting game, and any resource reloading . The more logging that happens, the more time the computer has to spend writing to an increasingly larger log file. The times start to add up.
- Just added a new optimization to my StructureLayoutOptimizer mod (1.16 to 1.21). For structures with many pieces that have many Jigsaw Blocks, this new code should reduce the layout generation time a ton legacy.curseforge.com/minecraft/mc... modrinth.com/mod/structur... #minecraft #modding #mcdev
- Doing this optimization for Bumblezone caused my Gazebuzz Cluster's layout generation is go from about 3 seconds to around 1.5 seconds. And that structure has a huge number of pieces to spawn and like 28 Jigsaw Blocks to check in every piece. Lots of Jigsaw match-up checks.
- Working on trying to make my Bumblezone mod's worldgen a bit faster for 1.20.1 and 1.21.1 #minecraft. Feels quite a bit faster than unmodded overworld. The main two things taking up most of worldgen in my mod are Surface Rules and the caves using noise generators. #mcdev #modding
- Optimized the surface rules a bit more. Should be slightly faster now than previous video
- After optimizing the features in my Bumblezone mod some more, worldgen is even faster now! The caves are pretty much the main thing taking up worldgen time now but I doubt I can make them faster without losing the cave shape I like. #minecraft #mcdev #modding
- Echoing my message on Discord to here, be sure you are not storing passwords, secrets, webhooks, etc in SERVER type configs on Forge/Neoforge. The config is synced to clients so try and use unsynced configs or roll out your own for private info you’re storing in your mods. #minecraft #modding #mcdev
- Special thanks to Malte and ThatGravyBoat for working hard to make a NeoForge/Forge mitigation mod that will strip certain mod's sensitive config fields from ServerConfigs's sync to the client. www.curseforge.com/minecraft/mc... modrinth.com/mod/serverco... #mcmods #minecraft #modding
- Ever since 1.20.5 #Minecraft, NBT on items have been replaced with DataComponents. As a mod dev, you should have dedicated fields for your data in these components. The CUSTOM_DATA DataComponent holds legacy nbt and if you do use it, ALWAYS call copyTag() or else bugs will happen. #mcdev #modding
- To be more specific when using CUSTOM_DATA, call copyTag(), and modify THAT new CompoundTag. After, make a new CustomData object and give it the new modified CompoundTag. Save that CustomData to the item's CUSTOM_DATA. If you do not do this, you can cause concurrency issues or data entangled items.
- When spawning entities during worldgen, use `EntityType.<entity>.create(` and then `worldGenRegion.addFreshEntityWithPassengers(`. If you call `EntityType.<entity>.spawn(`, you will deadlock/lock-up the game as that will call non-worldgen safe methods on the serverLevel. #minecraft #mcdev #modding
- If you need to check if a Minecraft mod is present in Neoforge before you run some code, do: if (ModList.get().isLoaded("modid")) { If you need to check if mod is on within a MixinPlugin, do this instead: if (LoadingModList.get().getMods().get("modid") != null) { #minecraft #modding #mcdev
- The reason you cannot do ModList check in a MixinPlugin is because it may not be fully loaded if you are targeting early loading classes. LoadingModList is recommended instead for MixinPlugins as that will always be ready and present for you to use in early loading code.
- For mods that aren't exactly traditional mods such as Optifine, you will have to resort to a class presence check instead like this: if (ClassInfo.forName("net.optifine.Config") != null) { For mixin targeting, if you decide not to use MixinPlugins, the `pseudo` annotation may work.
- Reposted by TelepathicGruntWe have held elections for the Steering Council (SC). Welcome new SC members @gigaherz.bsky.social, @marchermans.bsky.social and @telepathicgrunt.bsky.social! Read more at neoforged.net/news/sc-elec.... #mcdev #minecraftmodding #neoforge
- When you define your getShape method in a custom block, please do not construct the VoxelShape directly in there. getShape is called excessively and VoxelShape creation is not cheap. Create the VoxelShape in a static field and call that pre-made VoxelShape in getShape. #minecraft #modding #mcdev
- When using a slow-moving noise generator to sample a huge number of positions during #minecraft #modding worldgen, you can skip over a few spot if the noise value is too far from your target threshold. Gives a significant speed boost when values are at extremes. (X in pic are skipped checks) #mcdev
- Basically the idea is sample more frequently when you get close to the threshold you want and sample less frequently when farther away from the threshold because it'll take some extra positions before the noise generator will start returning values close to the threshold again.
- In this case, this is more applicable to noise generators such as Perlin or Simplex. Noise generators that create a smooth gradual changing noise values based on input positions.
- When making your own mob while #minecraft #modding, using EntityDataAccessor to have synced data is fine. But do not mixin add those to other people's/vanilla's mobs. They are order dependent so if the mixin applies in different order on client vs server, it'll cause disconnect people. #mcdev 1/2
- The general solution then is to use DataAttachments or Components from the modloaders to attach data to the entity that isn't your own entity. Then use packets to sync the data. (Do a packet from client to server when entity loads on client to ask for data. Server sends data back as 2nd packet) 2/2
- Reposted by TelepathicGruntA change I would like to highlight from #Minecraft 1.21.4 is a bug-fix: MC-272062 - "Dimension padding doesn't affect the start piece." This fix makes it possible for data packs to add structures to the end without them ending up in in the void at y=0. #mcdev