Posted September 2, 20187 yr Hello. I need to make some vanilla ores to spawn less in overworld. Any ideas how to do it ?
September 2, 20187 yr 1 minute ago, CrashCZ said: Hello. I need to make some vanilla ores to spawn less in overworld. Any ideas how to do it ? Subscribe to the OreGenEvent.GenerateMineable and set the result to deny. And create your own world generator to generate the ores and register it with GameRegistry.registerWorldGenerator VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
September 2, 20187 yr Author ok so id idid this: @SubscribeEvent public static void GenerateMinable(OreGenEvent event) { event.setResult(Result.DENY); } and package com.crashcz.minerals.world; import java.util.Random; import com.crashcz.minerals.init.ModBlocks; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.IChunkGenerator; import net.minecraft.world.gen.feature.WorldGenMinable; import net.minecraftforge.fml.common.IWorldGenerator; public class ModWorldGen implements IWorldGenerator { @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { if(world.provider.getDimension() == 0) { generateOverworld(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); } } private void generateOverworld(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { generateOre(Blocks.IRON_ORE.getDefaultState(), world, random, chunkX * 16, chunkZ * 16, 5, 12, random.nextInt(6) + 1, 4); } private void generateOre(IBlockState ore, World world, Random random, int x, int z, int minY, int maxY, int size, int chances) { int deltaY = maxY - minY; for(int i = 0; i < chances; i++) { BlockPos pos = new BlockPos(x + random.nextInt(16), minY + random.nextInt(deltaY), z + random.nextInt(16)); WorldGenMinable generator = new WorldGenMinable(ore, size); generator.generate(world, random, pos); } } } and @EventHandler public static void PreInit(FMLPreInitializationEvent event) { GameRegistry.registerWorldGenerator(new ModWorldGen(), 3); } but nothing changed, did I do something wrong ?
September 2, 20187 yr As it says in the doc comment of OreGenEvent: Quote All children of this event are fired on the MinecraftForge.ORE_GEN_BUS Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
September 2, 20187 yr 2 minutes ago, CrashCZ said: What does it mean ? You need to register your event handler with MinecraftForge.ORE_GEN_BUS instead of MinecraftForge.EVENT_BUS. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
September 2, 20187 yr 26 minutes ago, CrashCZ said: Could you please show me how to do it ? Instead of calling MinecraftForge.EVENT_BUS.register or using the @EventBusSubscriber annotation, you call MinecraftForge.ORE_GEN_BUS.register. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
September 2, 20187 yr 27 minutes ago, CrashCZ said: Could you please show me how to do it ? MinecraftForge.ORE_GEN_BUS.register(target); VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
September 2, 20187 yr Author So like this ? @EventHandler public static void Init(FMLInitializationEvent event) { MinecraftForge.ORE_GEN_BUS.register(new RegistryHandler()); }
September 2, 20187 yr 43 minutes ago, CrashCZ said: So like this ? @EventHandler public static void Init(FMLInitializationEvent event) { MinecraftForge.ORE_GEN_BUS.register(new RegistryHandler()); } If you use a static event handler method, you need to register the Class object with the event bus rather than an instance of the class. See the documentation for more information. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
September 2, 20187 yr Author Yes, now it's working Thanks for help package com.crashcz.minerals.world; import java.util.Random; import com.crashcz.minerals.init.ModBlocks; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.IChunkGenerator; import net.minecraft.world.gen.feature.WorldGenMinable; import net.minecraftforge.fml.common.IWorldGenerator; public class ModWorldGen implements IWorldGenerator { @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { if(world.provider.getDimension() == 0) { generateOverworld(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); } } private void generateOverworld(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) { generateOre(ModBlocks.RUBY_ORE.getDefaultState(), world, random, chunkX * 16, chunkZ *16, 5, 12, random.nextInt(6) + 1, 4); generateOre(Blocks.IRON_ORE.getDefaultState(), world, random, chunkX * 16, chunkZ * 16, 5, 12, random.nextInt(6) + 1, 4); } private void generateOre(IBlockState ore, World world, Random random, int x, int z, int minY, int maxY, int size, int chances) { int deltaY = maxY - minY; for(int i = 0; i < chances; i++) { BlockPos pos = new BlockPos(x + random.nextInt(16), minY + random.nextInt(deltaY), z + random.nextInt(16)); WorldGenMinable generator = new WorldGenMinable(ore, size); generator.generate(world, random, pos); } } } package com.crashcz.minerals.util.handlers; import com.crashcz.minerals.init.ModBlocks; import com.crashcz.minerals.init.ModItems; import com.crashcz.minerals.util.IHasModel; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.event.terraingen.OreGenEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.eventhandler.Event.Result; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @EventBusSubscriber public class RegistryHandler { @SubscribeEvent public static void onItemRegister(RegistryEvent.Register<Item> event) { event.getRegistry().registerAll(ModItems.ITEMS.toArray(new Item[0])); } @SubscribeEvent public static void onBlockRegister(RegistryEvent.Register<Block> event) { event.getRegistry().registerAll(ModBlocks.BLOCKS.toArray(new Block[0])); } @SubscribeEvent public static void onModelRegister(ModelRegistryEvent event) { for(Item item : ModItems.ITEMS) { if(item instanceof IHasModel) { ((IHasModel)item).registerModels(); } } for(Block block : ModBlocks.BLOCKS) { if(block instanceof IHasModel) { ((IHasModel)block).registerModels(); } } } @SubscribeEvent public static void GenerateMinable(OreGenEvent event) { event.setResult(Result.DENY); } } @EventHandler public static void Init(FMLInitializationEvent event) { ModRecipes.init(); Blocks.IRON_ORE.setHarvestLevel("pickaxe", 3); MinecraftForge.ORE_GEN_BUS.register(RegistryHandler.class); GameRegistry.registerWorldGenerator(new ModWorldGen(), 3); }
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.