Skip to content

Commit

Permalink
feat(game.datagen): IHTagsProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
WakelessSloth56 committed Oct 6, 2022
1 parent 6281a8d commit d8edb14
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 20 deletions.
@@ -0,0 +1,27 @@
package org.auioc.mcmod.arnicalib.game.datagen.tag;

import java.util.function.Predicate;
import javax.annotation.Nullable;
import net.minecraft.data.tags.TagsProvider.TagAppender;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.IForgeRegistryEntry;

public interface IHTagsProvider<T extends IForgeRegistryEntry<T>> {

@Nullable
default IForgeRegistry<T> getRegistry() {
return null;
}

default TagAppender<T> addFromRegistry(TagAppender<T> appender, Predicate<T> predicate) {
var registry = this.getRegistry();
if (registry == null) throw new UnsupportedOperationException("'addFromRegistry' method should not be called unless a registry is specified");
for (var value : registry.getValues()) {
if (predicate.test(value)) {
appender.add(value);
}
}
return appender;
}

}
@@ -1,17 +1,19 @@
package org.auioc.mcmod.arnicalib.mod.datagen.provider;

import static org.auioc.mcmod.arnicalib.game.tag.HEntityTypeTags.*;
import java.util.function.Predicate;
import javax.annotation.Nonnull;
import org.auioc.mcmod.arnicalib.ArnicaLib;
import org.auioc.mcmod.arnicalib.game.datagen.tag.IHTagsProvider;
import org.auioc.mcmod.arnicalib.game.entity.EntityTypePredicates;
import org.jetbrains.annotations.Nullable;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.tags.EntityTypeTagsProvider;
import net.minecraft.world.entity.EntityType;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.IForgeRegistry;

public class HEntityTypeTagsProvider extends EntityTypeTagsProvider {
public class HEntityTypeTagsProvider extends EntityTypeTagsProvider implements IHTagsProvider<EntityType<?>> {

public HEntityTypeTagsProvider(DataGenerator generator, @Nullable ExistingFileHelper existingFileHelper) {
super(generator, ArnicaLib.MOD_ID, existingFileHelper);
Expand All @@ -22,6 +24,12 @@ public String getName() {
return "HEntityTypeTags";
}

@Nonnull
@Override
public IForgeRegistry<EntityType<?>> getRegistry() {
return ForgeRegistries.ENTITIES;
}

@Override
protected void addTags() {
tag(UNDEFINED_MOBS);
Expand All @@ -47,25 +55,17 @@ protected void addTags() {
EntityType.SQUID, EntityType.TROPICAL_FISH, EntityType.TURTLE
);

add(tag(MISC_ENTITIES), EntityTypePredicates.IS_MISC);
add(tag(MONSTERS), EntityTypePredicates.IS_MONSTER);
add(tag(CREATURES), EntityTypePredicates.IS_CREATURE);
add(tag(AXOLOTLS), EntityTypePredicates.IS_AXOLOTLS);
add(tag(UNDERGROUND_WATER_CREATURES), EntityTypePredicates.IS_UNDERGROUND_WATER_CREATURE);
add(tag(WATER_CREATURES), EntityTypePredicates.IS_WATER_CREATURE);
add(tag(WATER_AMBIENT_ENTITIES), EntityTypePredicates.IS_WATER_AMBIENT);
add(tag(AMBIENT_ENTITIES), EntityTypePredicates.IS_AMBIENT);

add(tag(FRIENDLY_ENTITIES), EntityTypePredicates.IS_FRIENDLY);
add(tag(PERSISTENT_ENTITIES), EntityTypePredicates.IS_PERSISTENT);
}
addFromRegistry(tag(MISC_ENTITIES), EntityTypePredicates.IS_MISC);
addFromRegistry(tag(MONSTERS), EntityTypePredicates.IS_MONSTER);
addFromRegistry(tag(CREATURES), EntityTypePredicates.IS_CREATURE);
addFromRegistry(tag(AXOLOTLS), EntityTypePredicates.IS_AXOLOTLS);
addFromRegistry(tag(UNDERGROUND_WATER_CREATURES), EntityTypePredicates.IS_UNDERGROUND_WATER_CREATURE);
addFromRegistry(tag(WATER_CREATURES), EntityTypePredicates.IS_WATER_CREATURE);
addFromRegistry(tag(WATER_AMBIENT_ENTITIES), EntityTypePredicates.IS_WATER_AMBIENT);
addFromRegistry(tag(AMBIENT_ENTITIES), EntityTypePredicates.IS_AMBIENT);

private static void add(TagAppender<EntityType<?>> appender, Predicate<EntityType<?>> predicate) {
for (var entityType : ForgeRegistries.ENTITIES.getValues()) {
if (predicate.test(entityType)) {
appender.add(entityType);
}
}
addFromRegistry(tag(FRIENDLY_ENTITIES), EntityTypePredicates.IS_FRIENDLY);
addFromRegistry(tag(PERSISTENT_ENTITIES), EntityTypePredicates.IS_PERSISTENT);
}

}

0 comments on commit d8edb14

Please sign in to comment.