From 3a2e368d8e04dc6302bc45a8cf8df41fc67a09a8 Mon Sep 17 00:00:00 2001 From: Shnupbups Date: Thu, 5 Oct 2023 06:35:27 +1100 Subject: [PATCH] More Type Providers Add type providers for: - Goats (Regular vs Screaming) - Horses (Colors... not Markings at the moment) - Llamas (Variants) - Magma Cubes (Sizes) - Mooshrooms (Variants) - Pandas (Variants) - Rabbits (Variants) - Villagers (Biome Variants... not Professions at the moment) - Zombie Villagers (Biome Variants... not Professions at the moment) --- .../identity/api/variant/IdentityType.java | 9 +++ .../identity/api/variant/TypeProvider.java | 3 +- .../impl/variant/GoatTypeProvider.java | 41 +++++++++++++ .../impl/variant/HorseTypeProvider.java | 40 +++++++++++++ .../impl/variant/LlamaTypeProvider.java | 39 +++++++++++++ .../impl/variant/MagmaCubeTypeProvider.java | 40 +++++++++++++ .../impl/variant/MooshroomTypeProvider.java | 39 +++++++++++++ .../impl/variant/PandaTypeProvider.java | 41 +++++++++++++ .../impl/variant/RabbitTypeProvider.java | 58 +++++++++++++++++++ .../impl/variant/VillagerTypeProvider.java | 43 ++++++++++++++ .../variant/ZombieVillagerTypeProvider.java | 40 +++++++++++++ 11 files changed, 392 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/draylar/identity/impl/variant/GoatTypeProvider.java create mode 100644 common/src/main/java/draylar/identity/impl/variant/HorseTypeProvider.java create mode 100644 common/src/main/java/draylar/identity/impl/variant/LlamaTypeProvider.java create mode 100644 common/src/main/java/draylar/identity/impl/variant/MagmaCubeTypeProvider.java create mode 100644 common/src/main/java/draylar/identity/impl/variant/MooshroomTypeProvider.java create mode 100644 common/src/main/java/draylar/identity/impl/variant/PandaTypeProvider.java create mode 100644 common/src/main/java/draylar/identity/impl/variant/RabbitTypeProvider.java create mode 100644 common/src/main/java/draylar/identity/impl/variant/VillagerTypeProvider.java create mode 100644 common/src/main/java/draylar/identity/impl/variant/ZombieVillagerTypeProvider.java diff --git a/common/src/main/java/draylar/identity/api/variant/IdentityType.java b/common/src/main/java/draylar/identity/api/variant/IdentityType.java index 36aaccb..e1c29b0 100644 --- a/common/src/main/java/draylar/identity/api/variant/IdentityType.java +++ b/common/src/main/java/draylar/identity/api/variant/IdentityType.java @@ -28,6 +28,15 @@ public class IdentityType { VARIANT_BY_TYPE.put(EntityType.CAT, new CatTypeProvider()); VARIANT_BY_TYPE.put(EntityType.SLIME, new SlimeTypeProvider()); VARIANT_BY_TYPE.put(EntityType.FROG, new FrogTypeProvider()); + VARIANT_BY_TYPE.put(EntityType.MOOSHROOM, new MooshroomTypeProvider()); + VARIANT_BY_TYPE.put(EntityType.MAGMA_CUBE, new MagmaCubeTypeProvider()); + VARIANT_BY_TYPE.put(EntityType.RABBIT, new RabbitTypeProvider()); + VARIANT_BY_TYPE.put(EntityType.LLAMA, new LlamaTypeProvider()); + VARIANT_BY_TYPE.put(EntityType.HORSE, new HorseTypeProvider()); + VARIANT_BY_TYPE.put(EntityType.VILLAGER, new VillagerTypeProvider()); + VARIANT_BY_TYPE.put(EntityType.ZOMBIE_VILLAGER, new ZombieVillagerTypeProvider()); + VARIANT_BY_TYPE.put(EntityType.GOAT, new GoatTypeProvider()); + VARIANT_BY_TYPE.put(EntityType.PANDA, new PandaTypeProvider()); } public IdentityType(EntityType type) { diff --git a/common/src/main/java/draylar/identity/api/variant/TypeProvider.java b/common/src/main/java/draylar/identity/api/variant/TypeProvider.java index a73e233..1f96643 100644 --- a/common/src/main/java/draylar/identity/api/variant/TypeProvider.java +++ b/common/src/main/java/draylar/identity/api/variant/TypeProvider.java @@ -25,6 +25,7 @@ public IdentityType create(EntityType type, T entity) { public abstract Text modifyText(T entity, MutableText text); public final String formatTypePrefix(String prefix) { - return String.valueOf(prefix.charAt(0)).toUpperCase(Locale.ROOT) + prefix.substring(1); + String formattedPrefix = prefix.replace('_', ' '); + return String.valueOf(formattedPrefix.charAt(0)).toUpperCase(Locale.ROOT) + formattedPrefix.substring(1); } } diff --git a/common/src/main/java/draylar/identity/impl/variant/GoatTypeProvider.java b/common/src/main/java/draylar/identity/impl/variant/GoatTypeProvider.java new file mode 100644 index 0000000..955e57d --- /dev/null +++ b/common/src/main/java/draylar/identity/impl/variant/GoatTypeProvider.java @@ -0,0 +1,41 @@ +package draylar.identity.impl.variant; + +import draylar.identity.api.variant.TypeProvider; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.passive.FoxEntity; +import net.minecraft.entity.passive.GoatEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public class GoatTypeProvider extends TypeProvider { + + @Override + public int getVariantData(GoatEntity entity) { + return entity.isScreaming() ? 1 : 0; + } + + @Override + public GoatEntity create(EntityType type, World world, int data) { + GoatEntity goat = new GoatEntity(type, world); + goat.setScreaming(data > 0); + return goat; + } + + @Override + public int getFallbackData() { + return 0; + } + + @Override + public int getRange() { + return 1; + } + + @Override + public Text modifyText(GoatEntity entity, MutableText text) { + if(entity.isScreaming()) return Text.literal("Screaming ").append(text); + else return text; + } +} diff --git a/common/src/main/java/draylar/identity/impl/variant/HorseTypeProvider.java b/common/src/main/java/draylar/identity/impl/variant/HorseTypeProvider.java new file mode 100644 index 0000000..383fb91 --- /dev/null +++ b/common/src/main/java/draylar/identity/impl/variant/HorseTypeProvider.java @@ -0,0 +1,40 @@ +package draylar.identity.impl.variant; + +import draylar.identity.api.variant.TypeProvider; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.passive.HorseColor; +import net.minecraft.entity.passive.HorseEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public class HorseTypeProvider extends TypeProvider { + + @Override + public int getVariantData(HorseEntity entity) { + return entity.getVariant().getId(); + } + + @Override + public HorseEntity create(EntityType type, World world, int data) { + HorseEntity horse = new HorseEntity(type, world); + horse.setVariant(HorseColor.byId(data)); + return horse; + } + + @Override + public int getFallbackData() { + return HorseColor.WHITE.getId(); + } + + @Override + public int getRange() { + return HorseColor.values().length - 1; + } + + @Override + public Text modifyText(HorseEntity entity, MutableText text) { + return Text.literal(formatTypePrefix(entity.getVariant().asString()) + " ").append(text); + } +} diff --git a/common/src/main/java/draylar/identity/impl/variant/LlamaTypeProvider.java b/common/src/main/java/draylar/identity/impl/variant/LlamaTypeProvider.java new file mode 100644 index 0000000..073693e --- /dev/null +++ b/common/src/main/java/draylar/identity/impl/variant/LlamaTypeProvider.java @@ -0,0 +1,39 @@ +package draylar.identity.impl.variant; + +import draylar.identity.api.variant.TypeProvider; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.passive.LlamaEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public class LlamaTypeProvider extends TypeProvider { + + @Override + public int getVariantData(LlamaEntity entity) { + return entity.getVariant().getIndex(); + } + + @Override + public LlamaEntity create(EntityType type, World world, int data) { + LlamaEntity llama = new LlamaEntity(type, world); + llama.setVariant(LlamaEntity.Variant.byId(data)); + return llama; + } + + @Override + public int getFallbackData() { + return LlamaEntity.Variant.CREAMY.getIndex(); + } + + @Override + public int getRange() { + return LlamaEntity.Variant.values().length - 1; + } + + @Override + public Text modifyText(LlamaEntity entity, MutableText text) { + return Text.literal(formatTypePrefix(entity.getVariant().asString()) + " ").append(text); + } +} diff --git a/common/src/main/java/draylar/identity/impl/variant/MagmaCubeTypeProvider.java b/common/src/main/java/draylar/identity/impl/variant/MagmaCubeTypeProvider.java new file mode 100644 index 0000000..c2376c4 --- /dev/null +++ b/common/src/main/java/draylar/identity/impl/variant/MagmaCubeTypeProvider.java @@ -0,0 +1,40 @@ +package draylar.identity.impl.variant; + +import draylar.identity.api.variant.TypeProvider; +import draylar.identity.mixin.accessor.SlimeEntityAccessor; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.mob.MagmaCubeEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public class MagmaCubeTypeProvider extends TypeProvider { + + @Override + public int getVariantData(MagmaCubeEntity entity) { + return entity.getSize(); + } + + @Override + public MagmaCubeEntity create(EntityType type, World world, int data) { + MagmaCubeEntity magmaCube = new MagmaCubeEntity(type, world); + ((SlimeEntityAccessor) magmaCube).callSetSize(data + 1, true); + return magmaCube; + } + + @Override + public int getFallbackData() { + return 0; + } + + @Override + public int getRange() { + return 4; + } + + @Override + public Text modifyText(MagmaCubeEntity entity, MutableText text) { + return Text.literal(String.format("Size %d ", entity.getSize())).append(text); + } +} diff --git a/common/src/main/java/draylar/identity/impl/variant/MooshroomTypeProvider.java b/common/src/main/java/draylar/identity/impl/variant/MooshroomTypeProvider.java new file mode 100644 index 0000000..ca1e9e7 --- /dev/null +++ b/common/src/main/java/draylar/identity/impl/variant/MooshroomTypeProvider.java @@ -0,0 +1,39 @@ +package draylar.identity.impl.variant; + +import draylar.identity.api.variant.TypeProvider; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.passive.MooshroomEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public class MooshroomTypeProvider extends TypeProvider { + + @Override + public int getVariantData(MooshroomEntity entity) { + return entity.getVariant().ordinal(); + } + + @Override + public MooshroomEntity create(EntityType type, World world, int data) { + MooshroomEntity mooshroom = new MooshroomEntity(type, world); + mooshroom.setVariant(MooshroomEntity.Type.values()[data]); + return mooshroom; + } + + @Override + public int getFallbackData() { + return MooshroomEntity.Type.RED.ordinal(); + } + + @Override + public int getRange() { + return MooshroomEntity.Type.values().length - 1; + } + + @Override + public Text modifyText(MooshroomEntity entity, MutableText text) { + return Text.literal(formatTypePrefix(entity.getVariant().asString()) + " ").append(text); + } +} diff --git a/common/src/main/java/draylar/identity/impl/variant/PandaTypeProvider.java b/common/src/main/java/draylar/identity/impl/variant/PandaTypeProvider.java new file mode 100644 index 0000000..11aaf1f --- /dev/null +++ b/common/src/main/java/draylar/identity/impl/variant/PandaTypeProvider.java @@ -0,0 +1,41 @@ +package draylar.identity.impl.variant; + +import draylar.identity.api.variant.TypeProvider; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.passive.PandaEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public class PandaTypeProvider extends TypeProvider { + + @Override + public int getVariantData(PandaEntity entity) { + return entity.getMainGene().getId(); + } + + @Override + public PandaEntity create(EntityType type, World world, int data) { + PandaEntity panda = new PandaEntity(type, world); + panda.setMainGene(PandaEntity.Gene.byId(data)); + return panda; + } + + @Override + public int getFallbackData() { + return PandaEntity.Gene.NORMAL.getId(); + } + + @Override + public int getRange() { + return PandaEntity.Gene.values().length - 1; + } + + @Override + public Text modifyText(PandaEntity entity, MutableText text) { + PandaEntity.Gene gene = entity.getMainGene(); + if(gene.equals(PandaEntity.Gene.NORMAL)) return text; + else return Text.literal(formatTypePrefix(gene.asString()) + " ").append(text); + } +} diff --git a/common/src/main/java/draylar/identity/impl/variant/RabbitTypeProvider.java b/common/src/main/java/draylar/identity/impl/variant/RabbitTypeProvider.java new file mode 100644 index 0000000..474fbda --- /dev/null +++ b/common/src/main/java/draylar/identity/impl/variant/RabbitTypeProvider.java @@ -0,0 +1,58 @@ +package draylar.identity.impl.variant; + +import java.util.Map; + +import com.google.common.collect.ImmutableMap; + +import draylar.identity.api.variant.TypeProvider; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.passive.RabbitEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public class RabbitTypeProvider extends TypeProvider { + + private static final Map PREFIX_BY_ID = ImmutableMap + .builder() + .put(0, "Brown") + .put(1, "White") + .put(2, "Black") + .put(3, "White Splotched") + .put(4, "Gold") + .put(5, "Salt and Pepper") + .build(); + + @Override + public int getVariantData(RabbitEntity entity) { + int id = entity.getVariant().getId(); + if(id == 99) return 6; + else return id; + } + + @Override + public RabbitEntity create(EntityType type, World world, int data) { + RabbitEntity rabbit = new RabbitEntity(type, world); + if (data == 6) data = 99; + rabbit.setVariant(RabbitEntity.RabbitType.byId(data)); + return rabbit; + } + + @Override + public int getFallbackData() { + return RabbitEntity.RabbitType.BROWN.getId(); + } + + @Override + public int getRange() { + return RabbitEntity.RabbitType.values().length - 1; + } + + @Override + public Text modifyText(RabbitEntity entity, MutableText text) { + RabbitEntity.RabbitType type = entity.getVariant(); + if(type.equals(RabbitEntity.RabbitType.EVIL)) return Text.translatable("entity.minecraft.killer_bunny"); + else return Text.literal(PREFIX_BY_ID.get(type.getId()) + " ").append(text); + } +} diff --git a/common/src/main/java/draylar/identity/impl/variant/VillagerTypeProvider.java b/common/src/main/java/draylar/identity/impl/variant/VillagerTypeProvider.java new file mode 100644 index 0000000..a1a119e --- /dev/null +++ b/common/src/main/java/draylar/identity/impl/variant/VillagerTypeProvider.java @@ -0,0 +1,43 @@ +package draylar.identity.impl.variant; + +import draylar.identity.api.variant.TypeProvider; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.passive.HorseColor; +import net.minecraft.entity.passive.HorseEntity; +import net.minecraft.entity.passive.VillagerEntity; +import net.minecraft.registry.Registries; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.village.VillagerType; +import net.minecraft.world.World; + +public class VillagerTypeProvider extends TypeProvider { + + @Override + public int getVariantData(VillagerEntity entity) { + return Registries.VILLAGER_TYPE.getRawId(entity.getVariant()); + } + + @Override + public VillagerEntity create(EntityType type, World world, int data) { + VillagerEntity villager = new VillagerEntity(type, world); + villager.setVariant(Registries.VILLAGER_TYPE.get(data)); + return villager; + } + + @Override + public int getFallbackData() { + return 0; + } + + @Override + public int getRange() { + return Registries.VILLAGER_TYPE.size() - 1; + } + + @Override + public Text modifyText(VillagerEntity entity, MutableText text) { + return Text.literal(formatTypePrefix(entity.getVariant().toString()) + " ").append(text); + } +} diff --git a/common/src/main/java/draylar/identity/impl/variant/ZombieVillagerTypeProvider.java b/common/src/main/java/draylar/identity/impl/variant/ZombieVillagerTypeProvider.java new file mode 100644 index 0000000..0ea0d1f --- /dev/null +++ b/common/src/main/java/draylar/identity/impl/variant/ZombieVillagerTypeProvider.java @@ -0,0 +1,40 @@ +package draylar.identity.impl.variant; + +import draylar.identity.api.variant.TypeProvider; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.mob.ZombieVillagerEntity; +import net.minecraft.registry.Registries; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.world.World; + +public class ZombieVillagerTypeProvider extends TypeProvider { + + @Override + public int getVariantData(ZombieVillagerEntity entity) { + return Registries.VILLAGER_TYPE.getRawId(entity.getVariant()); + } + + @Override + public ZombieVillagerEntity create(EntityType type, World world, int data) { + ZombieVillagerEntity villager = new ZombieVillagerEntity(type, world); + villager.setVariant(Registries.VILLAGER_TYPE.get(data)); + return villager; + } + + @Override + public int getFallbackData() { + return 0; + } + + @Override + public int getRange() { + return Registries.VILLAGER_TYPE.size() - 1; + } + + @Override + public Text modifyText(ZombieVillagerEntity entity, MutableText text) { + return Text.literal(formatTypePrefix(entity.getVariant().toString()) + " ").append(text); + } +}