From d628631949ea96bea409c1b0c8fd0ccc94478359 Mon Sep 17 00:00:00 2001 From: HypherionMC Date: Sat, 6 Aug 2022 01:33:35 +0200 Subject: [PATCH] More Work on Neon Flies and add Auto Spawn --- .../hypherionmc/hyperlighting/Constants.java | 5 -- .../particles/ParticleRegistryHandler.java | 1 - .../common/blocks/AdvancedTorchBlock.java | 2 - .../common/entities/NeonFlyEntity.java | 74 +++++-------------- .../common/init/FlameParticles.java | 6 -- .../hyperlighting/common/init/HLBlocks.java | 1 - .../hyperlighting/common/init/HLEntities.java | 4 +- .../common/init/HLParticles.java | 2 - .../assets/hyperlighting/lang/en_us.json | 2 +- Common/src/main/resources/hyperlighting.aw | 3 +- .../hyperlighting/HyperLightingFabric.java | 7 +- .../client/HyperLightingFabricClient.java | 2 +- .../common/worldgen/FabricWorldGen.java | 30 ++++++++ .../hyperlighting/HyperLightingForge.java | 7 +- .../common/ForgeCommonHandler.java | 2 +- .../common/worldgen/ForgeWorldGen.java | 32 ++++++++ .../biomemodifiers/NeonFlyBiomeModifier.java | 36 +++++++++ .../forge/biome_modifier/neonfly_spawn.json | 10 +++ 18 files changed, 145 insertions(+), 81 deletions(-) create mode 100644 Fabric/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/FabricWorldGen.java create mode 100644 Forge/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/ForgeWorldGen.java create mode 100644 Forge/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/biomemodifiers/NeonFlyBiomeModifier.java create mode 100644 Forge/src/main/resources/data/hyperlighting/forge/biome_modifier/neonfly_spawn.json diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/Constants.java b/Common/src/main/java/me/hypherionmc/hyperlighting/Constants.java index 8ebc8e3..9a1826e 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/Constants.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/Constants.java @@ -1,11 +1,6 @@ package me.hypherionmc.hyperlighting; -import me.hypherionmc.craterlib.client.gui.tabs.CreativeTabBuilder; -import me.hypherionmc.hyperlighting.common.init.HLBlocks; -import me.hypherionmc.hyperlighting.common.init.HLItems; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/client/particles/ParticleRegistryHandler.java b/Common/src/main/java/me/hypherionmc/hyperlighting/client/particles/ParticleRegistryHandler.java index 0f8198c..4a760f6 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/client/particles/ParticleRegistryHandler.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/client/particles/ParticleRegistryHandler.java @@ -1,7 +1,6 @@ package me.hypherionmc.hyperlighting.client.particles; import me.hypherionmc.hyperlighting.common.init.FlameParticles; -import me.hypherionmc.hyperlighting.common.init.HLParticles; import net.minecraft.client.particle.ParticleEngine; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/blocks/AdvancedTorchBlock.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/blocks/AdvancedTorchBlock.java index 48e8194..b386c65 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/common/blocks/AdvancedTorchBlock.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/blocks/AdvancedTorchBlock.java @@ -17,7 +17,6 @@ import net.minecraft.client.color.block.BlockColor; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.network.chat.Component; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -48,7 +47,6 @@ import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Map; -import java.util.function.Supplier; public class AdvancedTorchBlock extends HorizontalDirectionalBlock implements DyableBlock, LightableBlock { diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/entities/NeonFlyEntity.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/entities/NeonFlyEntity.java index c77a002..b72841d 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/common/entities/NeonFlyEntity.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/entities/NeonFlyEntity.java @@ -4,6 +4,7 @@ import me.hypherionmc.hyperlighting.common.entities.ai.FindSimilarEntityGoal; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; @@ -12,20 +13,18 @@ import net.minecraft.world.entity.ai.control.FlyingMoveControl; import net.minecraft.world.entity.ai.goal.*; import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; -import net.minecraft.world.entity.ai.util.AirAndWaterRandomPos; -import net.minecraft.world.entity.ai.util.HoverRandomPos; import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.entity.animal.FlyingAnimal; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.pathfinder.BlockPathTypes; -import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import java.util.EnumSet; @@ -44,20 +43,21 @@ public class NeonFlyEntity extends Animal implements FlyingAnimal { super(type, level); this.moveControl = new FlyingMoveControl(this, 20, true); - this.setPathfindingMalus(BlockPathTypes.COCOA, -1.0F); + this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); + this.setPathfindingMalus(BlockPathTypes.WATER_BORDER, 1.0F); this.color = DyeColor.byId(new Random().nextInt(DyeColor.values().length - 1)); } @Override protected void registerGoals() { - this.goalSelector.addGoal(0, new FireflySwampGoal(this, 1.1D, 24)); - this.goalSelector.addGoal(1, new FindSimilarEntityGoal(this, 1.1D, 24, NeonFlyEntity.class)); - this.goalSelector.addGoal(2, new FireflyWanderGoal()); - this.goalSelector.addGoal(3, new FloatGoal(this)); - this.goalSelector.addGoal(4, new BreedGoal(this, 1.0f)); - this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 8.0f)); - this.goalSelector.addGoal(6, new FleeSunGoal(this, 1.1D)); + this.goalSelector.addGoal(0, new FleeSunGoal(this, 1.1D)); + this.goalSelector.addGoal(1, new FireflySwampGoal(this, 1.1D, 28)); + this.goalSelector.addGoal(2, new FindSimilarEntityGoal(this, 1.1D, 28, NeonFlyEntity.class)); + this.goalSelector.addGoal(3, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(4, new AvoidEntityGoal(this, Player.class, 6.0F, 1.0, 1.2)); + this.goalSelector.addGoal(5, new WaterAvoidingRandomFlyingGoal(this, 1.4D)); + this.goalSelector.addGoal(6, new PanicGoal(this, 1D)); } @Nullable @@ -73,8 +73,8 @@ public class NeonFlyEntity extends Animal implements FlyingAnimal { } @Override - public void load(CompoundTag pCompound) { - super.load(pCompound); + public void readAdditionalSaveData(CompoundTag pCompound) { + super.readAdditionalSaveData(pCompound); this.isGlowing = pCompound.getBoolean("isGlowing"); this.color = DyeColor.byId(pCompound.getInt("color")); } @@ -114,7 +114,7 @@ public class NeonFlyEntity extends Animal implements FlyingAnimal { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, pLevel) { @Override public boolean isStableDestination(BlockPos pPos) { - return true; + return !pLevel.getFluidState(pPos).is(Fluids.WATER) && !pLevel.getFluidState(pPos).is(Fluids.FLOWING_WATER); } }; flyingPathNavigation.setCanOpenDoors(false); @@ -154,51 +154,15 @@ public class NeonFlyEntity extends Animal implements FlyingAnimal { return 0.5f; } - public static boolean canSpawn(EntityType entity, LevelAccessor levelAccessor, MobSpawnType spawnType, BlockPos pos, Random random) { - return levelAccessor instanceof Level level && !level.isDay() && !level.isRainingAt(pos); - } - - class FireflyWanderGoal extends Goal { - - FireflyWanderGoal() { - this.setFlags(EnumSet.of(Flag.MOVE)); - } - - @Override - public boolean canUse() { - return NeonFlyEntity.this.navigation.isDone() && NeonFlyEntity.this.random.nextInt(10) == 0; - } - - @Override - public boolean canContinueToUse() { - return NeonFlyEntity.this.navigation.isInProgress(); - } - - @Override - public void start() { - Vec3 vec3 = this.findPos(); - if (vec3 != null) { - NeonFlyEntity.this.navigation.moveTo( - NeonFlyEntity.this.navigation.createPath(new BlockPos(vec3), 1), - 1.0D - ); - } - } - - @Nullable - private Vec3 findPos() { - Vec3 vec3 = NeonFlyEntity.this.getViewVector(0.0f); - Vec3 vec32 = HoverRandomPos.getPos(NeonFlyEntity.this, 8, 7, vec3.x, vec3.z, ((float)Math.PI / 2F), 3, 1); - return vec32 != null ? vec32 : AirAndWaterRandomPos.getPos(NeonFlyEntity.this, 8, 4, -2, vec3.x, vec3.z, (float)Math.PI / 2F); - } + public static boolean canSpawn(EntityType entity, ServerLevelAccessor levelAccessor, MobSpawnType spawnType, BlockPos pos, RandomSource random) { + return !levelAccessor.getLevel().isDay() && !levelAccessor.getLevel().isRainingAt(pos); } static class FireflySwampGoal extends MoveToBlockGoal { public FireflySwampGoal(PathfinderMob pMob, double pSpeedModifier, int pSearchRange) { super(pMob, pSpeedModifier, pSearchRange); - this.verticalSearchStart = -2; - this.setFlags(EnumSet.of(Flag.JUMP, Goal.Flag.MOVE)); + this.setFlags(EnumSet.of(Goal.Flag.MOVE)); } @Override @@ -208,7 +172,7 @@ public class NeonFlyEntity extends Animal implements FlyingAnimal { @Override protected int nextStartTick(PathfinderMob pCreature) { - return mob.getLevel().random.nextInt(120); + return mob.getLevel().random.nextInt(500); } } } diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/FlameParticles.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/FlameParticles.java index a89343d..b56bb98 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/FlameParticles.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/FlameParticles.java @@ -1,17 +1,11 @@ package me.hypherionmc.hyperlighting.common.init; import me.hypherionmc.craterlib.common.particles.WrappedSimpleParticleType; -import me.hypherionmc.craterlib.systems.reg.RegistrationProvider; import me.hypherionmc.craterlib.systems.reg.RegistryObject; -import me.hypherionmc.hyperlighting.Constants; -import net.minecraft.core.Registry; -import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.level.material.MaterialColor; import java.util.Arrays; -import java.util.function.Supplier; import static me.hypherionmc.hyperlighting.common.init.HLParticles.register; diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlocks.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlocks.java index a9e4ed9..2ef13f1 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlocks.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlocks.java @@ -5,7 +5,6 @@ import me.hypherionmc.craterlib.systems.reg.RegistrationProvider; import me.hypherionmc.hyperlighting.Constants; import me.hypherionmc.hyperlighting.common.blocks.AdvancedTorchBlock; import net.minecraft.core.Registry; -import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.Block; diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLEntities.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLEntities.java index 57f581a..a95a2a5 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLEntities.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLEntities.java @@ -16,10 +16,10 @@ public class HLEntities { public static final RegistrationProvider> ENTITIES = RegistrationProvider.get(Registry.ENTITY_TYPE, Constants.MOD_ID); - public static final RegistryObject> FIREFLY = ENTITIES.register("firefly", () -> EntityType.Builder.of(NeonFlyEntity::new, MobCategory.AMBIENT) + public static final RegistryObject> NEONFLY = ENTITIES.register("neonfly", () -> EntityType.Builder.of(NeonFlyEntity::new, MobCategory.AMBIENT) .sized(1f, 1f) .clientTrackingRange(8) - .build("firefly")); + .build("neonfly")); public static void loadAll() {} } diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLParticles.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLParticles.java index 75d821e..d43c27c 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLParticles.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLParticles.java @@ -1,12 +1,10 @@ package me.hypherionmc.hyperlighting.common.init; -import me.hypherionmc.craterlib.common.particles.WrappedSimpleParticleType; import me.hypherionmc.craterlib.systems.reg.RegistrationProvider; import me.hypherionmc.craterlib.systems.reg.RegistryObject; import me.hypherionmc.hyperlighting.Constants; import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleType; -import net.minecraft.core.particles.SimpleParticleType; import java.util.function.Supplier; diff --git a/Common/src/main/resources/assets/hyperlighting/lang/en_us.json b/Common/src/main/resources/assets/hyperlighting/lang/en_us.json index bf46739..3c5923c 100644 --- a/Common/src/main/resources/assets/hyperlighting/lang/en_us.json +++ b/Common/src/main/resources/assets/hyperlighting/lang/en_us.json @@ -3,7 +3,7 @@ "subtitles.torch_ignite": "Torch Ignite Sound", - "entity.hyperlighting.firefly": "Neon Fly", + "entity.hyperlighting.neonfly": "Neon Fly", "cl.hyperlightingconfig.title": "Hyper Lighting Config", "cl.torchconfig.litbydefault": "Lit when Placed", diff --git a/Common/src/main/resources/hyperlighting.aw b/Common/src/main/resources/hyperlighting.aw index 2019771..8ce89fa 100644 --- a/Common/src/main/resources/hyperlighting.aw +++ b/Common/src/main/resources/hyperlighting.aw @@ -1,3 +1,4 @@ accessWidener v1 named -Accessible class net/minecraft/client/particle/ParticleEngine$SpriteParticleRegistration +accessible class net/minecraft/client/particle/ParticleEngine$SpriteParticleRegistration +accessible method net/minecraft/world/entity/SpawnPlacements register (Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/entity/SpawnPlacements$Type;Lnet/minecraft/world/level/levelgen/Heightmap$Types;Lnet/minecraft/world/entity/SpawnPlacements$SpawnPredicate;)V diff --git a/Fabric/src/main/java/me/hypherionmc/hyperlighting/HyperLightingFabric.java b/Fabric/src/main/java/me/hypherionmc/hyperlighting/HyperLightingFabric.java index a0ab425..60a7a9c 100644 --- a/Fabric/src/main/java/me/hypherionmc/hyperlighting/HyperLightingFabric.java +++ b/Fabric/src/main/java/me/hypherionmc/hyperlighting/HyperLightingFabric.java @@ -3,15 +3,20 @@ package me.hypherionmc.hyperlighting; import me.hypherionmc.hyperlighting.common.entities.NeonFlyEntity; import me.hypherionmc.hyperlighting.common.init.CommonRegistration; import me.hypherionmc.hyperlighting.common.init.HLEntities; +import me.hypherionmc.hyperlighting.common.worldgen.FabricWorldGen; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.minecraft.world.entity.SpawnPlacements; +import net.minecraft.world.level.levelgen.Heightmap; public class HyperLightingFabric implements ModInitializer { @Override public void onInitialize() { CommonRegistration.registerAll(); + FabricWorldGen.registerAll(); - FabricDefaultAttributeRegistry.register(HLEntities.FIREFLY.get(), NeonFlyEntity.prepareAttributes()); + FabricDefaultAttributeRegistry.register(HLEntities.NEONFLY.get(), NeonFlyEntity.prepareAttributes()); + SpawnPlacements.register(HLEntities.NEONFLY.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.WORLD_SURFACE, NeonFlyEntity::canSpawn); } } diff --git a/Fabric/src/main/java/me/hypherionmc/hyperlighting/client/HyperLightingFabricClient.java b/Fabric/src/main/java/me/hypherionmc/hyperlighting/client/HyperLightingFabricClient.java index edb28ea..268453f 100644 --- a/Fabric/src/main/java/me/hypherionmc/hyperlighting/client/HyperLightingFabricClient.java +++ b/Fabric/src/main/java/me/hypherionmc/hyperlighting/client/HyperLightingFabricClient.java @@ -26,7 +26,7 @@ public class HyperLightingFabricClient implements ClientModInitializer { } }); - EntityRendererRegistry.register(HLEntities.FIREFLY.get(), NeonFlyRenderer::new); + EntityRendererRegistry.register(HLEntities.NEONFLY.get(), NeonFlyRenderer::new); EntityModelLayerRegistry.registerModelLayer(NeonFlyModel.LAYER_LOCATION, NeonFlyModel::createBodyLayer); } } diff --git a/Fabric/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/FabricWorldGen.java b/Fabric/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/FabricWorldGen.java new file mode 100644 index 0000000..c5d3b3d --- /dev/null +++ b/Fabric/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/FabricWorldGen.java @@ -0,0 +1,30 @@ +package me.hypherionmc.hyperlighting.common.worldgen; + +import me.hypherionmc.hyperlighting.common.init.HLEntities; +import net.fabricmc.fabric.api.biome.v1.BiomeModifications; +import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.level.biome.Biomes; + +/** + * @author HypherionSA + * @date 06/08/2022 + */ +public class FabricWorldGen { + + public static void registerAll() { + addNeonFlyGen(); + } + + private static void addNeonFlyGen() { + BiomeModifications.addSpawn( + BiomeSelectors.includeByKey(Biomes.SWAMP), + MobCategory.AMBIENT, + HLEntities.NEONFLY.get(), + 10, + 8, + 25 + ); + } + +} diff --git a/Forge/src/main/java/me/hypherionmc/hyperlighting/HyperLightingForge.java b/Forge/src/main/java/me/hypherionmc/hyperlighting/HyperLightingForge.java index 9d758a0..9fbfe3f 100644 --- a/Forge/src/main/java/me/hypherionmc/hyperlighting/HyperLightingForge.java +++ b/Forge/src/main/java/me/hypherionmc/hyperlighting/HyperLightingForge.java @@ -6,6 +6,7 @@ import me.hypherionmc.hyperlighting.client.renderer.entity.NeonFlyRenderer; import me.hypherionmc.hyperlighting.common.entities.NeonFlyEntity; import me.hypherionmc.hyperlighting.common.init.CommonRegistration; import me.hypherionmc.hyperlighting.common.init.HLEntities; +import me.hypherionmc.hyperlighting.common.worldgen.ForgeWorldGen; import net.minecraft.client.renderer.entity.EntityRenderers; import net.minecraft.world.entity.SpawnPlacements; import net.minecraft.world.level.levelgen.Heightmap; @@ -23,16 +24,18 @@ public class HyperLightingForge { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientInit); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonInit); CommonRegistration.registerAll(); + + ForgeWorldGen.registerAll(FMLJavaModLoadingContext.get().getModEventBus()); } public void clientInit(FMLClientSetupEvent event) { new ClientRegistration().registerAll(); ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((mc, screen) -> new CraterConfigScreen(CommonRegistration.config, screen))); - EntityRenderers.register(HLEntities.FIREFLY.get(), NeonFlyRenderer::new); + EntityRenderers.register(HLEntities.NEONFLY.get(), NeonFlyRenderer::new); } public void commonInit(FMLCommonSetupEvent event) { - + SpawnPlacements.register(HLEntities.NEONFLY.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.WORLD_SURFACE, NeonFlyEntity::canSpawn); } } diff --git a/Forge/src/main/java/me/hypherionmc/hyperlighting/common/ForgeCommonHandler.java b/Forge/src/main/java/me/hypherionmc/hyperlighting/common/ForgeCommonHandler.java index 6e5225b..622263a 100644 --- a/Forge/src/main/java/me/hypherionmc/hyperlighting/common/ForgeCommonHandler.java +++ b/Forge/src/main/java/me/hypherionmc/hyperlighting/common/ForgeCommonHandler.java @@ -15,7 +15,7 @@ public class ForgeCommonHandler { @SubscribeEvent public static void onAttributeCreate(EntityAttributeCreationEvent event) { - event.put(HLEntities.FIREFLY.get(), NeonFlyEntity.prepareAttributes().build()); + event.put(HLEntities.NEONFLY.get(), NeonFlyEntity.prepareAttributes().build()); } } diff --git a/Forge/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/ForgeWorldGen.java b/Forge/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/ForgeWorldGen.java new file mode 100644 index 0000000..b2f052a --- /dev/null +++ b/Forge/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/ForgeWorldGen.java @@ -0,0 +1,32 @@ +package me.hypherionmc.hyperlighting.common.worldgen; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import me.hypherionmc.hyperlighting.Constants; +import me.hypherionmc.hyperlighting.common.worldgen.biomemodifiers.NeonFlyBiomeModifier; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +/** + * @author HypherionSA + * @date 05/08/2022 + */ +public class ForgeWorldGen { + + public static final DeferredRegister> BIOMEMODIFIERS = DeferredRegister.create(ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS, Constants.MOD_ID); + + public static final RegistryObject> NEONFLY_CODEC = BIOMEMODIFIERS.register(Constants.MOD_ID, () -> + RecordCodecBuilder.create(builder -> builder.group( + Biome.LIST_CODEC.fieldOf("biomes").forGetter(NeonFlyBiomeModifier::biomes), + PlacedFeature.CODEC.fieldOf("feature").forGetter(NeonFlyBiomeModifier::feature) + ).apply(builder, NeonFlyBiomeModifier::new))); + + public static void registerAll(IEventBus bus) { + BIOMEMODIFIERS.register(bus); + } +} diff --git a/Forge/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/biomemodifiers/NeonFlyBiomeModifier.java b/Forge/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/biomemodifiers/NeonFlyBiomeModifier.java new file mode 100644 index 0000000..825307c --- /dev/null +++ b/Forge/src/main/java/me/hypherionmc/hyperlighting/common/worldgen/biomemodifiers/NeonFlyBiomeModifier.java @@ -0,0 +1,36 @@ +package me.hypherionmc.hyperlighting.common.worldgen.biomemodifiers; + +import com.mojang.serialization.Codec; +import me.hypherionmc.hyperlighting.Constants; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.common.world.ModifiableBiomeInfo; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import static me.hypherionmc.hyperlighting.common.worldgen.ForgeWorldGen.NEONFLY_CODEC; + + +/** + * @author HypherionSA + * @date 05/08/2022 + */ +public record NeonFlyBiomeModifier(HolderSet biomes, Holder feature) implements BiomeModifier { + + private static final RegistryObject> SERIALIZER = RegistryObject.create(new ResourceLocation(Constants.MOD_ID, "neonfly_spawn_serializer"), ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS, Constants.MOD_ID); + + + @Override + public void modify(Holder biome, Phase phase, ModifiableBiomeInfo.BiomeInfo.Builder builder) { + + } + + @Override + public Codec codec() { + return NEONFLY_CODEC.get(); + } +} diff --git a/Forge/src/main/resources/data/hyperlighting/forge/biome_modifier/neonfly_spawn.json b/Forge/src/main/resources/data/hyperlighting/forge/biome_modifier/neonfly_spawn.json new file mode 100644 index 0000000..3889785 --- /dev/null +++ b/Forge/src/main/resources/data/hyperlighting/forge/biome_modifier/neonfly_spawn.json @@ -0,0 +1,10 @@ +{ + "type": "forge:add_spawns", + "biomes": "minecraft:swamp", + "spawners": { + "type": "hyperlighting:neonfly", + "weight": 10, + "minCount": 8, + "maxCount": 25 + } +}