KajetansMod.java 4.2 KB

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