KajetansMod.java 4.4 KB

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