Skip to content

Commit

Permalink
Changed biome config to use Biome Categories, to support modded biomes
Browse files Browse the repository at this point in the history
  • Loading branch information
GirafiStudios committed Sep 29, 2020
1 parent 6342d51 commit a91accc
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 50 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
minecraft_version=1.16.3
forge_version=34.0.7
mappings=20200723-1.16.1
mod_version=0.8.8
mod_version=0.8.9

org.gradle.jvmargs=-Xmx4G
org.gradle.daemon=false
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.girafi.waddles.init.PenguinRegistry;
import com.girafi.waddles.init.WaddlesSounds;
import com.girafi.waddles.utils.ConfigurationHandler;
import net.minecraft.block.Blocks;
import net.minecraft.entity.*;
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
import net.minecraft.entity.ai.attributes.Attributes;
Expand All @@ -17,10 +18,13 @@
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;

import javax.annotation.Nonnull;
import java.util.Random;

public class AdeliePenguinEntity extends AnimalEntity {
private static final Ingredient TEMPTATION_ITEMS = Ingredient.fromItems(Items.COD, Items.SALMON);
Expand Down Expand Up @@ -107,6 +111,10 @@ public AgeableEntity func_241840_a(@Nonnull ServerWorld world, @Nonnull AgeableE
return PenguinRegistry.ADELIE_PENGUIN.create(this.world);
}

public static boolean canPenguinSpawn(EntityType<? extends AdeliePenguinEntity> animal, IWorld world, SpawnReason reason, BlockPos pos, Random random) {
return world.getBlockState(pos.down()).isIn(Blocks.GRASS_BLOCK) && world.getLightSubtracted(pos, 0) > 8 && world.canSeeSky(pos);
}

@Override
protected float getStandingEyeHeight(@Nonnull Pose pose, @Nonnull EntitySize size) {
return this.isChild() ? 0.5F : 0.9F;
Expand Down
39 changes: 1 addition & 38 deletions src/main/java/com/girafi/waddles/init/PenguinRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.girafi.waddles.Waddles;
import com.girafi.waddles.entity.AdeliePenguinEntity;
import com.google.common.base.CaseFormat;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import net.minecraft.entity.EntityClassification;
Expand All @@ -14,11 +13,8 @@
import net.minecraft.item.ItemGroup;
import net.minecraft.item.SpawnEggItem;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.Heightmap;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.world.BiomeLoadingEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;

Expand All @@ -43,16 +39,12 @@ private static <T extends AnimalEntity> EntityType<T> createEntity(String name,
return entity;
}

private static String classToString(Class<? extends AnimalEntity> entityClass) {
return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, entityClass.getSimpleName()).replace("entity_", "");
}

@SubscribeEvent
public static void registerPenguins(RegistryEvent.Register<EntityType<?>> event) {
for (EntityType entity : ENTITIES) {
Preconditions.checkNotNull(entity.getRegistryName(), "registryName");
event.getRegistry().register(entity);
EntitySpawnPlacementRegistry.register(entity, EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, AdeliePenguinEntity::canAnimalSpawn);
EntitySpawnPlacementRegistry.register(entity, EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, AdeliePenguinEntity::canPenguinSpawn);
}
GlobalEntityTypeAttributes.put(ADELIE_PENGUIN, AdeliePenguinEntity.getAttributes().create());
}
Expand All @@ -64,33 +56,4 @@ public static void registerSpawnEggs(RegistryEvent.Register<Item> event) {
event.getRegistry().register(spawnEgg);
}
}

/*public static void addSpawn() { //TODO
List<Biome> spawnableBiomes = Lists.newArrayList();
List<BiomeDictionary.Type> includeList = Arrays.asList(BiomeDictionaryHelper.toBiomeTypeArray(ConfigurationHandler.SPAWN.include.get()));
List<BiomeDictionary.Type> excludeList = Arrays.asList(BiomeDictionaryHelper.toBiomeTypeArray(ConfigurationHandler.SPAWN.exclude.get()));
if (!includeList.isEmpty()) {
for (BiomeDictionary.Type type : includeList) {
for (Biome biome : BiomeDictionary.getBiomes(type)) {
if (!biome.getSpawns(EntityClassification.CREATURE).isEmpty()) {
spawnableBiomes.add(biome);
}
}
}
if (!excludeList.isEmpty()) {
for (BiomeDictionary.Type type : excludeList) {
Set<Biome> excludeBiomes = BiomeDictionary.getBiomes(type);
for (Biome biome : excludeBiomes) {
spawnableBiomes.remove(biome);
}
}
}
} else {
throw new IllegalArgumentException("Do not leave the BiomeDictionary type inclusion list empty. If you wish to disable spawning of an entity, set the weight to 0 instead.");
}
for (Biome biome : spawnableBiomes) {
biome.getSpawns(EntityClassification.CREATURE).add(new Biome.SpawnListEntry(ADELIE_PENGUIN, ConfigurationHandler.SPAWN.weight.get(), ConfigurationHandler.SPAWN.min.get(), ConfigurationHandler.SPAWN.max.get()));
}
}*/
}
6 changes: 5 additions & 1 deletion src/main/java/com/girafi/waddles/init/PenguinSpawn.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,22 @@
import com.girafi.waddles.Waddles;
import com.girafi.waddles.utils.ConfigurationHandler;
import net.minecraft.entity.EntityClassification;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.MobSpawnInfo;
import net.minecraftforge.event.world.BiomeLoadingEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.registries.ForgeRegistries;

@Mod.EventBusSubscriber(modid = Waddles.MOD_ID)
public class PenguinSpawn {

@SubscribeEvent(priority = EventPriority.HIGH)
public static void addSpawn(BiomeLoadingEvent event) {
if (ConfigurationHandler.SPAWN.spawnableBiomes.get().contains(event.getName().toString())) {
Biome biome = ForgeRegistries.BIOMES.getValue(event.getName());
if (biome != null && (ConfigurationHandler.SPAWN.biomeCategoryBiomes.get().contains(biome.getCategory().getName()) || ConfigurationHandler.SPAWN.additionalBiomes.get().contains(event.getName().toString()))) {
System.out.println("CAN SPAWN: " + event.getName());
event.getSpawns().getSpawner(EntityClassification.CREATURE).add(new MobSpawnInfo.Spawners(PenguinRegistry.ADELIE_PENGUIN, ConfigurationHandler.SPAWN.weight.get(), ConfigurationHandler.SPAWN.min.get(), ConfigurationHandler.SPAWN.max.get()));
}
}
Expand Down
18 changes: 8 additions & 10 deletions src/main/java/com/girafi/waddles/utils/ConfigurationHandler.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.girafi.waddles.utils;

import com.google.common.collect.Lists;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.biome.Biomes;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.registries.ForgeRegistries;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;

public class ConfigurationHandler {
public static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder();
Expand Down Expand Up @@ -36,22 +37,19 @@ public static class Spawn {
public final ForgeConfigSpec.IntValue min;
public final ForgeConfigSpec.IntValue max;
public final ForgeConfigSpec.IntValue weight;
public final ForgeConfigSpec.ConfigValue<List<? extends String>> spawnableBiomes;
//public final ForgeConfigSpec.ConfigValue<List<? extends String>> include; //TODO
//public final ForgeConfigSpec.ConfigValue<List<? extends String>> exclude; //TODO
public final ForgeConfigSpec.ConfigValue<List<? extends String>> biomeCategoryBiomes;
public final ForgeConfigSpec.ConfigValue<List<? extends String>> additionalBiomes;

Spawn(ForgeConfigSpec.Builder builder) {
builder.push("spawn chances");
builder.comment("Configure penguins spawn weight & min/max group size. Set weight to 0 to disable.");
min = builder.defineInRange("min", 1, 0, 64);
max = builder.defineInRange("max", 4, 0, 64);
weight = builder.defineInRange("weight", 4, 0, 100);
weight = builder.defineInRange("weight", 6, 0, 100);
builder.pop();
builder.push("spawnable biomes");
spawnableBiomes = builder.defineList("biomes", Arrays.asList(Biomes.SNOWY_TUNDRA.func_240901_a_().toString(), Biomes.ICE_SPIKES.func_240901_a_().toString()), o -> ForgeRegistries.BIOMES.containsKey(new ResourceLocation(String.valueOf(o))));
//builder.comment("BiomeDictionary types to include & exclude.");
//include = builder.defineList("include", Collections.singletonList(SNOWY.toString()), o -> BiomeDictionary.Type.getAll().contains(BiomeDictionaryHelper.getType(String.valueOf(o))));
//exclude = builder.defineList("exclude", Arrays.asList(FOREST.toString(), MOUNTAIN.toString(), NETHER.toString()), o -> BiomeDictionary.Type.getAll().contains(BiomeDictionaryHelper.getType(String.valueOf(o))));
biomeCategoryBiomes = builder.defineList("biome categories", Collections.singletonList(Biome.Category.ICY.getName()), o -> Lists.newArrayList(Biome.Category.values()).contains(Biome.Category.func_235103_a_(String.valueOf(o).toLowerCase(Locale.ROOT))));
additionalBiomes = builder.defineList("additional biomes (Syntax: minecraft:plains)", Collections.emptyList(), o -> ForgeRegistries.BIOMES.containsKey(new ResourceLocation(String.valueOf(o))));
builder.pop();
}
}
Expand Down

0 comments on commit a91accc

Please sign in to comment.