Nicholas Hammond Posted June 12, 2020 Share Posted June 12, 2020 After various tests I found out that my structure spawner works on all dimensions and biomes except on flat worlds. My custom dimension uses a super flat world generator, therefore I believe it does not generate for this reason. Anyway to generate my structure? Level0ChunkGenerator.java EmptyRoomStructure.java Quote Link to comment Share on other sites More sharing options...
ChampionAsh5357 Posted June 12, 2020 Share Posted June 12, 2020 (edited) Structures need to be added with Biome#addStructure as well. Also, features need to be registered like any block or item not as some anonymous class. Finally, adding anything to the features or structures of different biomes is not thread safe and should be wrapped in a DeferredWorkQueue. Look at how Minecraft handles structures if you need an example. Edited June 12, 2020 by ChampionAsh5357 Quote Link to comment Share on other sites More sharing options...
Nicholas Hammond Posted June 13, 2020 Author Share Posted June 13, 2020 (edited) 1 hour ago, ChampionAsh5357 said: Structures need to be added with Biome#addStructure as well. Also, features need to be registered like any block or item not as some anonymous class. Finally, adding anything to the features or structures of different biomes is not thread safe and should be wrapped in a DeferredWorkQueue. Look at how Minecraft handles structures if you need an example. My code works however, it's literally just the fact that it doesn't spawn in super flat worlds. I use sample code from a program called MCreator, but that's not really the point. Is there a method like flatGenEnabled or something which I can change? The annotation at the top is actually a tag which allows the class to be implemented into minecraft, if you'd like to know. Edited June 13, 2020 by Nicholas Hammond Quote Link to comment Share on other sites More sharing options...
ChampionAsh5357 Posted June 13, 2020 Share Posted June 13, 2020 5 minutes ago, Nicholas Hammond said: My code works however, it's literally just the fact that it doesn't spawn in super flat worlds. My apologies, you might want to try adding it to the following maps in FlatGenerationSettings: FEATURE_STAGES, STRUCTURES, and FEATURE_CONFIGS. Quote Link to comment Share on other sites More sharing options...
Nicholas Hammond Posted June 13, 2020 Author Share Posted June 13, 2020 (edited) 4 minutes ago, ChampionAsh5357 said: My apologies, you might want to try adding it to the following maps in FlatGenerationSettings: FEATURE_STAGES, STRUCTURES, and FEATURE_CONFIGS. Thank you, this was the type of response I was looking for. But how would I do this exactly? Sorry for bothering, I'm a novice. Would I do this in my Level0ChunkGenerator class? I attempted doing something similar to flatgenerationsettings.getWorldFeatures().put("village", Maps.newHashMap()); but it didn't work. Edited June 13, 2020 by Nicholas Hammond Quote Link to comment Share on other sites More sharing options...
ChampionAsh5357 Posted June 13, 2020 Share Posted June 13, 2020 You put your configured feature in the map most likely during the common setup in the DeferredWorkQueue. Quote Link to comment Share on other sites More sharing options...
Nicholas Hammond Posted June 13, 2020 Author Share Posted June 13, 2020 1 minute ago, ChampionAsh5357 said: You put your configured feature in the map most likely during the common setup in the DeferredWorkQueue. Would I do this using a similar method like the example I used in my previous reply? Sorry but I don't really understand to what you're referring to exactly by DeferredWorkQueue. Is this a simple thing to do? Could you possibly send an example line of code? Sorry for my questions, I'm mostly modifying pre existing code like a template so I don't really know what all of this means.. Quote Link to comment Share on other sites More sharing options...
ChampionAsh5357 Posted June 13, 2020 Share Posted June 13, 2020 15 minutes ago, Nicholas Hammond said: Would I do this using a similar method like the example I used in my previous reply? No, the maps are a static final variable so it should be accessed directly from calling the class. Just follow the example in FlatGenerationSettings. 15 minutes ago, Nicholas Hammond said: Sorry but I don't really understand to what you're referring to exactly by DeferredWorkQueue. Is this a simple thing to do? Could you possibly send an example line of code? I quote from the source itself "Utility for running code on the main launch thread at the next available opportunity. There is no guaranteed order that work from various mods will be run, but your own work will be run sequentially." Use DeferredWorkQueue#runLater in your FMLCommonSetupEvent to reference and put your feature in the maps. Even if you're modifying preexisting code, you should check all the information regarding whatever you are doing. What I said early refers to the correct way of registering and adding features to biomes. DeferredWorkQueue is a less obvious one unless you have been paying attention to similar threads on the forms or actively keep checking the changelog and source information. A lot of what is in the source code is just a loose template as you say since there are better ways to approach it. Quote Link to comment Share on other sites More sharing options...
Nicholas Hammond Posted June 13, 2020 Author Share Posted June 13, 2020 (edited) Thank you for your patience and answering my questions. I will attempt to do what you have recommended, but I still have some trouble understand exactly what I have to do. From my understanding I have to register my structure somewhere? Is this in the chunk generator class or the structure class? I'm surprised this seems so difficult, but you obviously know much more than I do. I hope I can ask further questions if I remain stuck Sorry for the bothering. Edited June 13, 2020 by Nicholas Hammond Quote Link to comment Share on other sites More sharing options...
ChampionAsh5357 Posted June 13, 2020 Share Posted June 13, 2020 2 minutes ago, Nicholas Hammond said: From my understanding I have to register my structure somewhere? You might want to read up on registries and look into using DeferredRegister and RegistryObjects. There are plenty of forum posts including both of these if you need some more information. Quote Link to comment Share on other sites More sharing options...
Nicholas Hammond Posted June 13, 2020 Author Share Posted June 13, 2020 (edited) One other thing, when you refer to the "example in FlatGenerationSettings" you mean the example I sent? I tried replacing "village" with "backrooms:empty_room" but of course it didn't work. Also, are you suggesting I rewrite my code? Edited June 13, 2020 by Nicholas Hammond Quote Link to comment Share on other sites More sharing options...
ChampionAsh5357 Posted June 13, 2020 Share Posted June 13, 2020 22 minutes ago, Nicholas Hammond said: One other thing, when you refer to the "example in FlatGenerationSettings" you mean the example I sent? I tried replacing "village" with "backrooms:empty_room" but of course it didn't work. No, I mean the actual source code example. 22 minutes ago, Nicholas Hammond said: Also, are you suggesting I rewrite my code? Yes. Usually I wouldn't suggest rewriting code unless it was a standardized or core component of creating modifications for the game. Registering features is one of the things that is required along with a few other mentions. Quote Link to comment Share on other sites More sharing options...
Nicholas Hammond Posted June 13, 2020 Author Share Posted June 13, 2020 I will not be rewriting code as it is very helpful when using templates from MCreator. Quote Link to comment Share on other sites More sharing options...
DavidM Posted June 13, 2020 Share Posted June 13, 2020 (edited) 33 minutes ago, Nicholas Hammond said: I will not be rewriting code as it is very helpful when using templates from MCreator. Don't use MCreator. It produces broken code as well as clogs up the mod jar with unnecessary fuss. More reasons can be found here. If you want to mod please learn Java and do it properly. Edited June 13, 2020 by DavidM Quote Some tips: Spoiler Modder Support: Spoiler 1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code. 2. Always post your code. 3. Never copy and paste code. You won't learn anything from doing that. 4. Quote Programming via Eclipse's hotfixes will get you nowhere 5. Learn to use your IDE, especially the debugger. 6. Quote The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it. Support & Bug Reports: Spoiler 1. Read the EAQ before asking for help. Remember to provide the appropriate log(s). 2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support. Link to comment Share on other sites More sharing options...
Nicholas Hammond Posted June 13, 2020 Author Share Posted June 13, 2020 1 minute ago, DavidM said: Don't use MCreator. If you want to mod please learn Java and do it properly. I have learned java, it's just very convenient to use MCreator for sample code. Quote Link to comment Share on other sites More sharing options...
DavidM Posted June 13, 2020 Share Posted June 13, 2020 (edited) 3 minutes ago, Nicholas Hammond said: I have learned java, it's just very convenient to use MCreator for sample code. Except the "sample code" is extremely inefficient, fails randomly and crashes immediately on a dedicated server. Edited June 13, 2020 by DavidM Quote Some tips: Spoiler Modder Support: Spoiler 1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code. 2. Always post your code. 3. Never copy and paste code. You won't learn anything from doing that. 4. Quote Programming via Eclipse's hotfixes will get you nowhere 5. Learn to use your IDE, especially the debugger. 6. Quote The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it. Support & Bug Reports: Spoiler 1. Read the EAQ before asking for help. Remember to provide the appropriate log(s). 2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support. Link to comment Share on other sites More sharing options...
Recommended Posts
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.