Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.8][Solved]Biome Help


WitherDoggie
 Share

Recommended Posts

I'm trying to create a custom biome. I wrote the biome class and registered my new biome. My custom biome generates in-game with most of the custom blocks that I want it to. My question is, how can I remove the normal minecraft stone that generates there and replace it with my custom stone block? I also have a custom ore that I want to generate in this biome only. How can I do this?

 

ModBiomeRegistry

http://pastebin.com/ubMKLHE9

 

ModBiome

http://pastebin.com/NthUZFAr

 

I've also noticed that water lilies are spawning every where in the water even though I've never told the biome to. Why is this?

 

Another problem I've noticed is that mobs are spawning in the biome even though I don't have any mobs set to spawn there.

 

One last question. I made custom dirt, grass, and stone blocks that I want to have the same properties as the vanilla dirt, grass, and stone blocks. Can I just create a class for each that extends the vanilla class?

Link to comment
Share on other sites

I'm trying to create a custom biome. I wrote the biome class and registered my new biome. My custom biome generates in-game with most of the custom blocks that I want it to. My question is, how can I remove the normal minecraft stone that generates there and replace it with my custom stone block? I also have a custom ore that I want to generate in this biome only. How can I do this?

 

ModBiomeRegistry

http://pastebin.com/ubMKLHE9

 

ModBiome

http://pastebin.com/NthUZFAr

 

I've also noticed that water lilies are spawning every where in the water even though I've never told the biome to. Why is this?

 

Another problem I've noticed is that mobs are spawning in the biome even though I don't have any mobs set to spawn there.

 

One last question. I made custom dirt, grass, and stone blocks that I want to have the same properties as the vanilla dirt, grass, and stone blocks. Can I just create a class for each that extends the vanilla class?

Link to comment
Share on other sites

There's more than one way to substitute the vanilla stone. I think there's an event where you can detect vanilla stone and the biome, making the switch whenever you like the combo. You could also hunt down the code that fills most deep areas with stone. Be aware though: Most ores spawn only in vanilla stone; they won't replace anything else, so your biome might not get any diamonds, gold, iron etc.

 

Mobs decide where they want to spawn. There might be some that spawn in any biome.

 

Extending dirt etc will duplicate the intrinsic characteristics, but... Some game behavior is reactive (like plants deciding where they can grow). Therefore, some other objects in the game might not recognize your dirt as dirt (e.g. Plants might refuse to grow on it.)

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

There's more than one way to substitute the vanilla stone. I think there's an event where you can detect vanilla stone and the biome, making the switch whenever you like the combo. You could also hunt down the code that fills most deep areas with stone. Be aware though: Most ores spawn only in vanilla stone; they won't replace anything else, so your biome might not get any diamonds, gold, iron etc.

 

Mobs decide where they want to spawn. There might be some that spawn in any biome.

 

Extending dirt etc will duplicate the intrinsic characteristics, but... Some game behavior is reactive (like plants deciding where they can grow). Therefore, some other objects in the game might not recognize your dirt as dirt (e.g. Plants might refuse to grow on it.)

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

There's more than one way to substitute the vanilla stone. I think there's an event where you can detect vanilla stone and the biome, making the switch whenever you like the combo. You could also hunt down the code that fills most deep areas with stone. Be aware though: Most ores spawn only in vanilla stone; they won't replace anything else, so your biome might not get any diamonds, gold, iron etc.

 

Mobs decide where they want to spawn. There might be some that spawn in any biome.

 

Extending dirt etc will duplicate the intrinsic characteristics, but... Some game behavior is reactive (like plants deciding where they can grow). Therefore, some other objects in the game might not recognize your dirt as dirt (e.g. Plants might refuse to grow on it.)

 

1. Okay thanks, I'll look into it. As far as the vanilla ores go, I was hoping there was a way to disable them and use my custom ores instead.

 

2. I'll see if I can find a way to work around that.

 

3. No plants is fine. The biome is supposed to be dead looking. Though I will add some custom plants that can only grow on my custom dirt.

Link to comment
Share on other sites

There's more than one way to substitute the vanilla stone. I think there's an event where you can detect vanilla stone and the biome, making the switch whenever you like the combo. You could also hunt down the code that fills most deep areas with stone. Be aware though: Most ores spawn only in vanilla stone; they won't replace anything else, so your biome might not get any diamonds, gold, iron etc.

 

Mobs decide where they want to spawn. There might be some that spawn in any biome.

 

Extending dirt etc will duplicate the intrinsic characteristics, but... Some game behavior is reactive (like plants deciding where they can grow). Therefore, some other objects in the game might not recognize your dirt as dirt (e.g. Plants might refuse to grow on it.)

 

1. Okay thanks, I'll look into it. As far as the vanilla ores go, I was hoping there was a way to disable them and use my custom ores instead.

 

2. I'll see if I can find a way to work around that.

 

3. No plants is fine. The biome is supposed to be dead looking. Though I will add some custom plants that can only grow on my custom dirt.

Link to comment
Share on other sites

I tracked down the code that fills chunks with stone, and it looks like the stone is generated first then the biome blocks are placed. Not sure what to do with that. Do you happen to know the event that I can use instead?

 

Also, I managed to stop mobs from spawning here.( When I disabled creature spawning, I forgot to disable monster spawning.) I want the biome to only spawn wither skeletons. I made the biome spawn normal skeletons, how can I get wither skeletons to spawn?

 

Please Note: I am not trying to replace the stone in all biomes. I only want my custom stone to generate in my custom biome. All other biomes won't be changed.

Link to comment
Share on other sites

I tracked down the code that fills chunks with stone, and it looks like the stone is generated first then the biome blocks are placed. Not sure what to do with that. Do you happen to know the event that I can use instead?

 

Also, I managed to stop mobs from spawning here.( When I disabled creature spawning, I forgot to disable monster spawning.) I want the biome to only spawn wither skeletons. I made the biome spawn normal skeletons, how can I get wither skeletons to spawn?

 

Please Note: I am not trying to replace the stone in all biomes. I only want my custom stone to generate in my custom biome. All other biomes won't be changed.

Link to comment
Share on other sites

Unfortunately, I haven't worked with world generation before, so I can only give strategic advice on how to explore the Forge code yourself looking for hooks that Forge has injected. On one end, search the chunk generation source for any mention of forge or event (they often employ fully qualified names, so you can't rely on import statements to expose Forge references).

 

You might also try world's block-placement method or whatever the chunk generator returns to. You'd be looking for a call-back to a Forge method that would let you intervene. At the other end, go to net.minecraftforge.event and browse every event in every class to get an idea what's possible. Terraingen and World look like promising subfolders there.

 

Even after finding an event at a usable intervention point, you would still need to see if it carries enough information each way for you to detect your condition and achieve your goal. I think your chances are good, since this forum has discussed block substitutions before. However, I can't recall whether biome was a factor in any of them.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

Unfortunately, I haven't worked with world generation before, so I can only give strategic advice on how to explore the Forge code yourself looking for hooks that Forge has injected. On one end, search the chunk generation source for any mention of forge or event (they often employ fully qualified names, so you can't rely on import statements to expose Forge references).

 

You might also try world's block-placement method or whatever the chunk generator returns to. You'd be looking for a call-back to a Forge method that would let you intervene. At the other end, go to net.minecraftforge.event and browse every event in every class to get an idea what's possible. Terraingen and World look like promising subfolders there.

 

Even after finding an event at a usable intervention point, you would still need to see if it carries enough information each way for you to detect your condition and achieve your goal. I think your chances are good, since this forum has discussed block substitutions before. However, I can't recall whether biome was a factor in any of them.

The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.

Link to comment
Share on other sites

I've done as you said and overriden genTerrainBlocks (changed the vanilla integer names to easier to identify ones), but I can't figure out how to change the stone. I looked online for some help and the things I found told me to just copy the entire method generateBiomeTerrain in the BiomeGenBase class and then modify it to fit my needs. I do not want to copy and paste things unless it is completely necessary. How to I change the stone?

 

ModBiome.class

http://pastebin.com/4ZyHv9DJ

Link to comment
Share on other sites

I've done as you said and overriden genTerrainBlocks (changed the vanilla integer names to easier to identify ones), but I can't figure out how to change the stone. I looked online for some help and the things I found told me to just copy the entire method generateBiomeTerrain in the BiomeGenBase class and then modify it to fit my needs. I do not want to copy and paste things unless it is completely necessary. How to I change the stone?

 

ModBiome.class

http://pastebin.com/4ZyHv9DJ

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
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.

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • I installed a modpack from curseforge and it came with a 1.16.5 server. I did everything I normally do to set up a server yet this time it came back with bunch of errors.   [26Jan2022 15:45:27.619] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--gameDir, ., --launchTarget, fmlserver, --fml.forgeVersion, 36.2.23, --fml.mcpVersion, 20210115.111550, --fml.mcVersion, 1.16.5, --fml.forgeGroup, net.minecraftforge, nogui] [26Jan2022 15:45:27.621] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 8.0.9+86+master.3cf110c starting: java version 1.8.0_321 by Oracle Corporation [26Jan2022 15:45:27.850] [main/INFO] [net.minecraftforge.fml.loading.FixSSL/CORE]: Added Lets Encrypt root certificates as additional trust [26Jan2022 15:45:27.873] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.4 Source=file:/E:/Extra/MC001/VH001/VaultHunters-OfficialModpack-1.12.4-Server/libraries/org/spongepowered/mixin/0.8.4/mixin-0.8.4.jar Service=ModLauncher Env=SERVER [26Jan2022 15:45:28.735] [main/INFO] [STDERR/]: [org.antlr.v4.runtime.ConsoleErrorListener:syntaxError:38]: line 1:0 token recognition error at: '~' [26Jan2022 15:45:29.262] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: java.lang.NoSuchMethodError: sun.security.util.ManifestEntryVerifier.<init>(Ljava/util/jar/Manifest;)V [26Jan2022 15:45:29.262] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.SecureJarHandler.createCodeSource(SecureJarHandler.java:66) [26Jan2022 15:45:29.262] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.TransformingClassLoader$DelegatedClassLoader.findClass(TransformingClassLoader.java:275) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:136) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:98) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at java.lang.ClassLoader.loadClass(Unknown Source) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at java.lang.Class.forName0(Native Method) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at java.lang.Class.forName(Unknown Source) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at org.spongepowered.asm.service.modlauncher.ModLauncherClassProvider.findClass(ModLauncherClassProvider.java:67) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at org.spongepowered.asm.launch.platform.MixinConnectorManager.loadConnectors(MixinConnectorManager.java:70) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at org.spongepowered.asm.launch.platform.MixinConnectorManager.inject(MixinConnectorManager.java:59) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at org.spongepowered.asm.launch.platform.MixinPlatformManager.inject(MixinPlatformManager.java:196) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at org.spongepowered.asm.launch.MixinBootstrap.inject(MixinBootstrap.java:202) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at org.spongepowered.asm.launch.MixinLaunchPluginLegacy.initializeLaunch(MixinLaunchPluginLegacy.java:201) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at org.spongepowered.asm.launch.MixinLaunchPluginLegacy.initializeLaunch(MixinLaunchPluginLegacy.java:195) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.LaunchPluginHandler.lambda$announceLaunch$9(LaunchPluginHandler.java:97) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at java.util.HashMap.forEach(Unknown Source) [26Jan2022 15:45:29.263] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.LaunchPluginHandler.announceLaunch(LaunchPluginHandler.java:97) [26Jan2022 15:45:29.264] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:52) [26Jan2022 15:45:29.264] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [26Jan2022 15:45:29.264] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.Launcher.run(Launcher.java:82) [26Jan2022 15:45:29.264] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [26Jan2022 15:45:29.264] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at net.minecraftforge.server.ServerMain$Runner.runLauncher(ServerMain.java:63) [26Jan2022 15:45:29.264] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at net.minecraftforge.server.ServerMain$Runner.access$100(ServerMain.java:60) [26Jan2022 15:45:29.264] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]:     at net.minecraftforge.server.ServerMain.main(ServerMain.java:57)   Any help would be great, trying to load up the Vault hunters modpack. Thanks.
    • When i launch forge-1.16.5-36.2.23.jar eula.txt doesnt come but in older version like 1.12.2 it comes idk why. do you guys know how i can fix this ?
    • MegaMiner is just my playground mod. Here's the entire MegaMinerEvents class. It's just a static event receiver.   package nu.rydin.explodingarrows.common.events; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import nu.rydin.explodingarrows.common.Main; import nu.rydin.explodingarrows.common.enchantments.ModEnchantments; import java.util.LinkedList; @Mod.EventBusSubscriber(modid = Main.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) public class MegaMinerEvents { private static final class BlockToBreak { private final BlockPos pos; private final Player player; public BlockToBreak(final BlockPos pos, final Player player) { this.pos = pos; this.player = player; } } private static final LinkedList<BlockToBreak> queue = new LinkedList<>(); @SubscribeEvent public static void onBreakBlock(final BlockEvent.BreakEvent e) { final LevelAccessor world = e.getWorld(); if (world.isClientSide()) { return; } for (final Tag t : e.getPlayer().getMainHandItem().getEnchantmentTags()) { final CompoundTag ct = (CompoundTag) t; if (ct.getString("id") .equals(ModEnchantments.MEGA_MINER.get().getRegistryName().toString())) { MegaMinerEvents.mineNeighborhood(e.getPos(), e.getPlayer(), e.getState().getBlock()); } } } @SubscribeEvent public static void onTick(final TickEvent.ServerTickEvent e) { if (MegaMinerEvents.queue.isEmpty()) { return; } final BlockToBreak b = MegaMinerEvents.queue.removeFirst(); final Level world = b.player.level; final BlockState bs = world.getBlockState(b.pos); bs.getBlock().playerDestroy(world, b.player, b.pos, bs, null, b.player.getMainHandItem()); world.removeBlock(b.pos, true); // MegaMinerEvents.mineNeighborhood(b.pos, b.player, bs.getBlock()); System.out.println(MegaMinerEvents.queue.size()); } private static void mineNeighborhood( final BlockPos pos, final Player player, final Block blockType) { final float x0 = pos.getX(); final float y0 = pos.getY(); final float z0 = pos.getZ(); for (float z = z0 - 1.0F; z <= z0 + 1; z += 1.0) { for (float y = y0 - 1.0F; y <= y0 + 1; y += 1.0) { for (float x = x0 - 1.0F; x <= x0 + 1; x += 1.0) { final BlockState b = player.getLevel().getBlockState(pos); if (b.is(blockType)) { MegaMinerEvents.queue.addLast(new BlockToBreak(pos, player)); } } } } } }  
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.