-
Posts
17 -
Joined
-
Last visited
Everything posted by InvictusSlayer
-
[1.20.1] How to change the terrain of a custom dimension.
InvictusSlayer replied to Spyro64bit's topic in Modder Support
If you want to customise the dimension somewhat I would recommend this site as it has a built-in viewer so you can see your changes. https://misode.github.io/worldgen/noise-settings/?version=1.20.3 Otherwise if you just want it to be a replica of the overworld you will need to change the noise_settings in your "dimension/example.json" file to the overworld. It should look something like this: "generator": { "type": "minecraft:noise", "settings": "minecraft:overworld", "biome_source": { "type": "minecraft:multi_noise", "biomes": [] } } Hope this helps! -
[1.20] Add custom entity to custom biome
InvictusSlayer replied to Robin Roloff's topic in Modder Support
The problem seems to be with the `VanillaParameterOverlayBuilder` (so you are right there is a bug with TerraBlender). However there is an easy fix which also runs marginally faster which is to use the "Consumer.accept()" method to add your custom biomes. @Override public void addBiomes(Registry<Biome> registry, Consumer<Pair<Climate.ParameterPoint, ResourceKey<Biome>>> mapper) { biome(mapper, AlpineBiomes.ALPS, Temperature.FROZEN.parameter(), Humidity.HUMID.parameter(), Continentalness.FAR_INLAND.parameter(), Erosion.EROSION_0.parameter(), Weirdness.FULL_RANGE.parameter()); biome(mapper, AlpineBiomes.ALPS_VALLEY, Temperature.NEUTRAL.parameter(), Humidity.NEUTRAL.parameter(), Continentalness.FAR_INLAND.parameter(), Climate.Parameter.span(0.5F, 1F), Climate.Parameter.span(-0.35F, 0.35F)); } private void biome(Consumer<Pair<Climate.ParameterPoint, ResourceKey<Biome>>> mapper, ResourceKey<Biome> biome, Climate.Parameter temperature, Climate.Parameter humidity, Climate.Parameter continentalness, Climate.Parameter erosion, Climate.Parameter weirdness) { mapper.accept(Pair.of(Climate.parameters(temperature, humidity, continentalness, erosion, Depth.FLOOR.parameter(), weirdness, 0F), biome)); mapper.accept(Pair.of(Climate.parameters(temperature, humidity, continentalness, erosion, Depth.SURFACE.parameter(), weirdness, 0F), biome)); } Here's an example I made from your code which runs fine but feel free to manipulate this however you wish. -
[1.20] Add custom entity to custom biome
InvictusSlayer replied to Robin Roloff's topic in Modder Support
I'm confident it's not terrablender as I am a frequent user and have never encountered an issue like this. I'll test out your code to see if I can find the root of the problem. -
[1.20.4] Missing DatapackBuiltinEntriesProvider
InvictusSlayer replied to InvictusSlayer's topic in Modder Support
Thanks so much! I managed to get it working for all vanilla registries with only reconstructing the DatapackBuiltinEntriesProvider. It doesn't work for forge registries like BiomeModifiers and StructureModifiers but they aren't too much hastle to write manually so I've just removed them from my builder temporarily. -
[1.20] Add custom entity to custom biome
InvictusSlayer replied to Robin Roloff's topic in Modder Support
If you're adding mobs to your own biomes its better to add them in that biomes .json file rather than adding via the biome modifier (It probably doesn't work because of the order in which forge will load modded biomes vs biome modifiers but I'm not sure). The easiest solution should be to add the mob to the `MobSpawnSettings.Builder` when bootstrapping the biome here: https://github.com/robinroloff/alpinemod/blob/master/src/main/java/de/robin/alpine/worldgen/biome/AlpineBiomes.java Hope this helps! -
I am updating my mod from 1.20.2 to 1.20.4 and it utilises the `DatapackBuiltinEntriesProvider` class during data generation. For forge versions 49.0.X this class seems to have been removed without any alternative. My IDE (Intellij) does not recognise that the file exists and it does not appear in the external libraries hence my code will not even compile. If someone knows that this is an issue on my end please let me know but I am certain it is a bug.
-
I'm currently updating my mod from 1.20.2 to 1.20.4 and the forge `DatapackBuiltinEntriesProvider` class is missing. I've looked through the forge source files for an alternative and I'm struggling to find one. I have also tried using different forge versions (49.0.0 to 49.0.14) and they are all missing it. As far as I am aware this is the only missing java class and there is no mention of it in the forge changelogs. If anyone has an idea how to fix this or any suggestions what to do next before making a bug report.
-
Add new biome with Terrablender [1.20]
InvictusSlayer replied to Robin Roloff's topic in Modder Support
In your biome modifier "alpinechicken.json" the "biomes" field has a # where there shouldn't be one as test_biome is not a tag. -
1.19.4 Changes to Registering Configured Features from 1.19.2 to 1.19.3+
InvictusSlayer replied to itzer's topic in Modder Support
It is now done with datagen, you will need to add a `DatapackBuiltinEntriesProvider` to your data generator. The `RegistrySetBuilder` argument should look something like this: private static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() .add(Registries.CONFIGURED_FEATURE, ModConfiguredFeatures::bootstrap) .add(Registries.PLACED_FEATURE, ModPlacedFeatures::bootstrap); with your `ModConfiguredFeatures` class based on this rough template: public static final ResourceKey<ConfiguredFeature<?, ?>> EXAMPLE = createKey("example"); // Add more keys here public static void bootstrap(BootstapContext<ConfiguredFeature<?, ?>> context) { HolderGetter<ConfiguredFeature<?, ?>> configured = context.lookup(Registries.CONFIGURED_FEATURE); HolderGetter<PlacedFeature> placed = context.lookup(Registries.PLACED_FEATURE); register(context, EXAMPLE, Feature.EXAMPLE_FEATURE, new ExampleConfiguration(args)); // Register more features here } private static ResourceKey<ConfiguredFeature<?, ?>> createKey(String name) { return ResourceKey.create(Registries.CONFIGURED_FEATURE, new ResourceLocation("modid", name)); } private static <FC extends FeatureConfiguration, F extends Feature<FC>> void register(BootstapContext<ConfiguredFeature<?, ?>> context, ResourceKey<ConfiguredFeature<?, ?>> key, F feature, FC config) { context.register(key, new ConfiguredFeature<>(feature, config)); } Hope this helps get you started -
If you're using Intellij, you can right-click on the field and there is an option saying "Get SRG Name". Alternatively, there should be a folder in your external libraries with a name something like "net.minecraft:mappings" where there will be some .csv files containing all the SRG names with their MCP translations. Searching for the MCP name with Ctrl+F should give you what you're looking for. After a quick look through the name you're looking for should be f_118468_
-
[1.20] How to make custom block spawn
InvictusSlayer replied to Robin Roloff's topic in Modder Support
Look into `ConfiguredFeatures` and `PlacedFeatures`. You should be able to find examples of these in the vanilla `OreFeatures` class for Andesite spawns and any other ore. -
Add new biome with Terrablender [1.20]
InvictusSlayer replied to Robin Roloff's topic in Modder Support
So in your `ModOverworldRegion` class your "builder" should not be embedded within the addModifiedVanillaOverwordBiomes() method. That method is only used for overriding vanilla biomes. Besides that I think that you're good https://github.com/Glitchfiend/TerraBlender/blob/1.20.4/Example/Forge/src/main/java/terrablender/example/TestRegion1.java Here's the example from TerraBlender -
[1.20] Looking for an example of trees without data generation
InvictusSlayer replied to Myxtro's topic in Modder Support
Ah that'll be to do with the block model .json file for your leaves. I haven't implemented the tinting leaves personally but I think you'll need to change the "parent" from: "parent": "minecraft:block/cube_all" to: "parent": "minecraft:block/leaves" I intend to try the tint system in the near future so I'll amend this at some point if I'm wrong. Otherwise I'd just recommend colouring the leaf textures manually. Good luck!! -
[1.20] Looking for an example of trees without data generation
InvictusSlayer replied to Myxtro's topic in Modder Support
https://gist.github.com/InvictusSlayer/a8acb91b89d844d95f607327896abbd6 Here's an example from my mod where I added Aspen trees. You can replace the values with the foliage, leaves, logs, trunk and any numbers you may want to change. Make sure your file is in "resources/data/modid/worldgen/configured_feature" and name it the same as your key ("sequoia.json"). The DeferredRegister and bootstrap() methods you added are redundant but other than that you're all good - the DeferredRegister is how you would store an object but that isn't necessary here since the game calls the tree instance from the data (in your case `SEQUOIA_KEY`); and bootstrap is the method that your data generator would call hence unneeded here. Essentially Minecraft does not register features like trees (along with others) the same way it does with blocks and items. I would highly recommend using datagen as that bootstrap method would just make the "sequoia.json" file for you. Besides that nice job and keep at it -
To sum up the mod's aim I'm essentially trying to overwrite the `TheEndBiomeSource` class for the End dimension with my custom `MultiNoiseBiomeSource` class like the Nether and Overworld dimensions which will allow me to customise it more flexibly. https://gist.github.com/InvictusSlayer/355bd6b9757697a8c6c3b458aa2b782d In the log file you can see the error is caused by: Missing key in ResourceKey[minecraft:root / minecraft:worldgen/world_preset]: ResourceKey[minecraft:worldgen/world_preset / minecraft:normal] This key would usually be initialised in the `WorldPreset$Bootstrap` class where I am injecting my code into. But for some reason my code is disrupting the [:runData] cycle and preventing this key from being initialised. I am sure that it is not an issue with the Mixins as the ".mixin.out" files look how I would want them to (it won't let me add these to the gist but I can ss if needed). I am quite clueless as to where my issue is as I have inherited my `TheEndMultiNoiseBiomeSource` class from the vanilla `MultiNoiseBiomeSource` class, while only injecting into classes with my custom `MultiNoiseBiomeSourceParameterList$Preset` where the vanilla Nether and Overworld do. Any insight into what I have missed or if there is some element to the [:runData] cycle I am not aware of would be much appreciated.
-
[1.19.3] [solved] custom TrunkPlacerType
InvictusSlayer replied to InvictusSlayer's topic in Modder Support
Thanks for the advice, I've sourced out the problem from comparing it and it's working consistently now. And yes the reflection turned out to be redundant. In future I'll link my repository in the post too cheers. (https://github.com/InvictusSlayer/Slayers-Beasts-1.19.3 if you're curious.) -
I'm attempting to add a custom trunk placer for my custom trees. I have attempted to register the type as a new RegistryObject and tried to use Reflection as the TrunkPlacerType register() method is private. public static final DeferredRegister<TrunkPlacerType<?>> TRUNK_PLACER_TYPES = DeferredRegister.create(Registries.TRUNK_PLACER_TYPE, SlayersBeasts.MOD_ID); public static final RegistryObject<TrunkPlacerType<CrossTrunkPlacer>> CROSS_TRUNK_PLACER = TRUNK_PLACER_TYPES.register("cross_trunk_placer", () -> new TrunkPlacerType<>(CrossTrunkPlacer.CODEC)); public ModTrunkPlacerTypes(Codec<P> pCodec) { super(pCodec); } public static void registerTrunkPlacers() { try { Method method = ObfuscationReflectionHelper.findMethod(TrunkPlacerType.class, "register", String.class, Codec.class); method.setAccessible(true); method.invoke(null, "cross_trunk_placer", CrossTrunkPlacer.CODEC); } catch (Exception e) { e.printStackTrace(); } } public static void register(IEventBus eventBus) { TRUNK_PLACER_TYPES.register(eventBus); } The registerTrunkPlacers() method has been called in the event.enqueueWork() supplier in commonSetup. My issue is now that both saplings and worldgen spawn the tree with acacia trunks and I'm stumped as to why seeing as there is no reference to them in my code and there are no errors in the logs. I did rip some of the vanilla acacia trunk code for reference initially but that has been changed significantly now. And I'm sure it cannot be the CrossTrunkPlacer class as that was working in 1.18.x versions and I can't find any changes to the vanilla classes. This is new code I wrote when porting to 1.19+ created errors. As I'm quite new to Reflection I'm guessing the issue may lie somewhere in there? Or perhaps that I created a DeferredRegister for a non-forge registry? I am unsure how to continue if anyone has any suggestions.