KajetansMod.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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.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. 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. MinecraftForge.EVENT_BUS.register(new WorldEvents());
  49. Hooks.setPlayerListFunction((ds, impl, pd) -> {
  50. ds.setPlayerList(new ModPlayerList(ds, impl, pd));
  51. });
  52. }
  53. @SubscribeEvent
  54. public void onServerStart(FMLServerStartingEvent e) {
  55. if(e.getServer().isDedicatedServer()) {
  56. Server.onStart((DedicatedServer) e.getServer());
  57. }
  58. }
  59. @SubscribeEvent
  60. public void onServerStop(FMLServerStoppedEvent e) {
  61. if(e.getServer().isDedicatedServer()) {
  62. Server.onStop();
  63. }
  64. }
  65. @SubscribeEvent
  66. public void onBiomeLoad(BiomeLoadingEvent e) {
  67. if(findOreBiome(e)) {
  68. addFeatures(e.getGeneration());
  69. }
  70. }
  71. private static boolean findOreBiome(BiomeLoadingEvent e) {
  72. for(Supplier<ConfiguredFeature<?, ?>> a : e.getGeneration()
  73. .getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES)) {
  74. ConfiguredFeature<?, ?> cf = a.get();
  75. if(unpack(cf)) {
  76. return true;
  77. }
  78. }
  79. return false;
  80. }
  81. private static boolean unpack(ConfiguredFeature<?, ?> cf) {
  82. if(cf.config instanceof DecoratedFeatureConfig) {
  83. return unpack(((DecoratedFeatureConfig) cf.config).feature.get());
  84. } else if(cf.config instanceof OreFeatureConfig) {
  85. OreFeatureConfig oreConfig = (OreFeatureConfig) cf.config;
  86. if(oreConfig.state.getBlock() == Blocks.IRON_ORE) {
  87. return true;
  88. }
  89. }
  90. return false;
  91. }
  92. private static void addOre(BiomeGenerationSettingsBuilder builder, Block ore, int maxCount,
  93. int spawnTries, int maxHeight) {
  94. builder.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, Feature.ORE
  95. .configured(new OreFeatureConfig(OreFeatureConfig.FillerBlockType.NATURAL_STONE,
  96. ore.defaultBlockState(), maxCount))
  97. .range(maxHeight).squared().count(spawnTries));
  98. }
  99. private static void addFeatures(BiomeGenerationSettingsBuilder builder) {
  100. addOre(builder, ModBlocks.copperOre, 9, 25, 128);
  101. addOre(builder, ModBlocks.tinOre, 6, 12, 96);
  102. addOre(builder, ModBlocks.silverOre, 9, 3, 64);
  103. }
  104. }