KajetansMod.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package me.km;
  2. import java.util.function.Supplier;
  3. import me.km.blocks.ModBlocks;
  4. import me.km.networking.ModPacketHandler;
  5. import net.minecraft.block.Block;
  6. import net.minecraft.block.Blocks;
  7. import net.minecraft.server.dedicated.DedicatedServer;
  8. import net.minecraft.world.gen.GenerationStage;
  9. import net.minecraft.world.gen.feature.ConfiguredFeature;
  10. import net.minecraft.world.gen.feature.DecoratedFeatureConfig;
  11. import net.minecraft.world.gen.feature.Feature;
  12. import net.minecraft.world.gen.feature.OreFeatureConfig;
  13. import net.minecraftforge.common.MinecraftForge;
  14. import net.minecraftforge.common.world.BiomeGenerationSettingsBuilder;
  15. import net.minecraftforge.event.world.BiomeLoadingEvent;
  16. import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
  17. import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
  18. import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
  19. import net.minecraftforge.fml.common.Mod;
  20. import net.minecraftforge.eventbus.api.IEventBus;
  21. import net.minecraftforge.eventbus.api.SubscribeEvent;
  22. import net.minecraftforge.fml.DeferredWorkQueue;
  23. import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
  24. import net.minecraftforge.fml.event.server.FMLServerStoppedEvent;
  25. @Mod.EventBusSubscriber
  26. @Mod("km")
  27. public class KajetansMod {
  28. public static final String MODID = "km";
  29. public KajetansMod() {
  30. ClassLoaderUtils.loadDependencies();
  31. IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
  32. bus.addListener(this::init);
  33. bus.addListener(this::clientInit);
  34. MinecraftForge.EVENT_BUS.register(this);
  35. }
  36. private void init(FMLCommonSetupEvent e) {
  37. DeferredWorkQueue.runLater(() -> ModPacketHandler.init());
  38. MinecraftForge.EVENT_BUS.register(new CommonEvents());
  39. }
  40. private void clientInit(FMLClientSetupEvent e) {
  41. Client.init();
  42. }
  43. @SubscribeEvent
  44. public void onServerStart(FMLServerStartingEvent e) {
  45. if(e.getServer().isDedicatedServer()) {
  46. Server.onStart((DedicatedServer) e.getServer());
  47. }
  48. }
  49. @SubscribeEvent
  50. public void onServerStop(FMLServerStoppedEvent e) {
  51. if(e.getServer().isDedicatedServer()) {
  52. Server.onStop();
  53. }
  54. }
  55. @SubscribeEvent
  56. public void onBiomeLoad(BiomeLoadingEvent e) {
  57. if(findOreBiome(e)) {
  58. addFeatures(e.getGeneration());
  59. }
  60. }
  61. private static boolean findOreBiome(BiomeLoadingEvent e) {
  62. for(Supplier<ConfiguredFeature<?, ?>> a : e.getGeneration().getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES)) {
  63. ConfiguredFeature<?, ?> cf = a.get();
  64. if(unpack(cf)) {
  65. return true;
  66. }
  67. }
  68. return false;
  69. }
  70. private static boolean unpack(ConfiguredFeature<?, ?> cf) {
  71. if(cf.config instanceof DecoratedFeatureConfig) {
  72. return unpack(((DecoratedFeatureConfig) cf.config).feature.get());
  73. } else if(cf.config instanceof OreFeatureConfig) {
  74. OreFeatureConfig oreConfig = (OreFeatureConfig) cf.config;
  75. if(oreConfig.state.getBlock() == Blocks.IRON_ORE) {
  76. return true;
  77. }
  78. }
  79. return false;
  80. }
  81. private static void addOre(BiomeGenerationSettingsBuilder builder, Block ore, int maxCount, int spawnTries, int maxHeight) {
  82. builder.withFeature(GenerationStage.Decoration.UNDERGROUND_ORES, Feature.ORE.withConfiguration(
  83. new OreFeatureConfig(OreFeatureConfig.FillerBlockType.BASE_STONE_OVERWORLD,
  84. ore.getDefaultState(), maxCount)).range(maxHeight).square().func_242731_b(spawnTries));
  85. }
  86. private static void addFeatures(BiomeGenerationSettingsBuilder builder) {
  87. addOre(builder, ModBlocks.copperOre, 9, 25, 128);
  88. addOre(builder, ModBlocks.tinOre, 6, 12, 96);
  89. addOre(builder, ModBlocks.silverOre, 9, 3, 64);
  90. }
  91. }