add task to format/update input files

This commit is contained in:
Lulu13022002 2025-04-19 21:01:01 +02:00
parent d3a2d131ac
commit d346e8c548
No known key found for this signature in database
GPG Key ID: 491C8F0B8ACDEB01
15 changed files with 387 additions and 259 deletions

View File

@ -77,6 +77,20 @@ tasks.register("generate") {
dependsOn(generateApi, generateImpl)
}
tasks.register<JavaExec>("prepareInputFiles") {
group = "generation"
description = "Prepare input files by sorting them (and updating them if possible)"
javaLauncher = javaToolchains.defaultJavaLauncher(project)
mainClass.set("io.papermc.generator.utils.PrepareInputFiles")
classpath(sourceSets.main.map { it.runtimeClasspath })
inputs.property("gameVersion", gameVersion)
val resourceDir = layout.projectDirectory.dir("src/main/resources")
args(resourceDir)
inputs.dir(resourceDir)
outputs.dir(resourceDir)
}
if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) {
val scanOldGeneratedSourceCode by tasks.registering(JavaExec::class) {
group = "verification"

View File

@ -182,7 +182,7 @@ public final class Rewriters {
.register("MobGoalHelper#bukkitMap", Types.MOB_GOAL_HELPER, new SearchReplaceRewriter() {
@Override
protected void insert(SearchMetadata metadata, StringBuilder builder) {
for (Map.Entry<Class<? extends Mob>, ClassName> entry : MobGoalNames.ENTITY_NAMES.entrySet()) {
for (Map.Entry<Class<? extends Mob>, ClassName> entry : MobGoalNames.ENTITY_CLASS_NAMES.entrySet()) {
builder.append(metadata.indent()).append("bukkitMap.put(%s.class, %s.class);".formatted(
entry.getKey().getCanonicalName(), this.importCollector.getShortName(Types.typed(entry.getValue()))
));

View File

@ -1,6 +1,7 @@
package io.papermc.generator.rewriter.types.simple;
import com.google.gson.JsonObject;
import com.mojang.datafixers.util.Either;
import com.mojang.serialization.Codec;
import com.mojang.serialization.JsonOps;
import com.mojang.serialization.codecs.RecordCodecBuilder;
@ -26,24 +27,31 @@ import static io.papermc.generator.utils.Formatting.quoted;
public class EntityTypeRewriter extends EnumRegistryRewriter<EntityType<?>> {
record Data(ClassNamed api, int legacyId) {
public record Data(ClassNamed api, int legacyId) {
private static final int NO_LEGACY_ID = -1;
public Data(ClassNamed api) {
this(api, -1);
this(api, NO_LEGACY_ID);
}
public static final Codec<Data> DIRECT_CODEC = RecordCodecBuilder.create(instance -> instance.group(
SourceCodecs.CLASS_NAMED.fieldOf("api").forGetter(Data::api),
ExtraCodecs.intRange(-1, Integer.MAX_VALUE).optionalFieldOf("legacy_id", -1).deprecated(13).forGetter(Data::legacyId)
ExtraCodecs.intRange(-1, Integer.MAX_VALUE).optionalFieldOf("legacy_id", NO_LEGACY_ID).deprecated(13).forGetter(Data::legacyId)
).apply(instance, Data::new));
private static final Codec<Data> CLASS_ONLY_CODEC = SourceCodecs.CLASS_NAMED.xmap(Data::new, Data::api);
public static final Codec<Data> CODEC = Codec.withAlternative(CLASS_ONLY_CODEC, DIRECT_CODEC);
public static final Codec<Data> CODEC = Codec.either(CLASS_ONLY_CODEC, DIRECT_CODEC).xmap(Either::unwrap, data -> {
if (data.legacyId() != NO_LEGACY_ID) {
return Either.right(data);
}
return Either.left(data);
});
}
private static final Map<ResourceKey<EntityType<?>>, Data> DATA;
private static final Codec<Map<ResourceKey<EntityType<?>>, Data>> DATA_CODEC = Codec.unboundedMap(ResourceKey.codec(Registries.ENTITY_TYPE), Data.CODEC);
public static final Codec<Map<ResourceKey<EntityType<?>>, Data>> DATA_CODEC = Codec.unboundedMap(ResourceKey.codec(Registries.ENTITY_TYPE), Data.CODEC);
static {
try (Reader input = new BufferedReader(new InputStreamReader(EntityTypeRewriter.class.getClassLoader().getResourceAsStream("data/entity_types.json")))) {
JsonObject registries = SourceCodecs.GSON.fromJson(input, JsonObject.class);

View File

@ -26,15 +26,15 @@ import org.jspecify.annotations.NullMarked;
public final class MobGoalNames { // todo sync with MobGoalHelper ideally this should not be duplicated
private static final Map<Class<? extends Goal>, ClassName> entityClassCache = new HashMap<>();
public static final Map<Class<? extends Mob>, ClassName> ENTITY_NAMES;
private static final Codec<Map<Class<? extends Mob>, ClassName>> ENTITY_NAMES_CODEC = Codec.unboundedMap(
public static final Map<Class<? extends Mob>, ClassName> ENTITY_CLASS_NAMES;
public static final Codec<Map<Class<? extends Mob>, ClassName>> ENTITY_CLASS_NAMES_CODEC = Codec.unboundedMap(
SourceCodecs.classCodec(Mob.class), SourceCodecs.CLASS_NAME
);
static {
try (Reader input = new BufferedReader(new InputStreamReader(MobGoalNames.class.getClassLoader().getResourceAsStream("data/entity_class_names.json")))) {
JsonObject names = SourceCodecs.GSON.fromJson(input, JsonObject.class);
ENTITY_NAMES = ENTITY_NAMES_CODEC.parse(JsonOps.INSTANCE, names).getOrThrow();
ENTITY_CLASS_NAMES = ENTITY_CLASS_NAMES_CODEC.parse(JsonOps.INSTANCE, names).getOrThrow();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
@ -102,7 +102,7 @@ public final class MobGoalNames { // todo sync with MobGoalHelper ideally this s
}
private static ClassName toBukkitClass(Class<? extends net.minecraft.world.entity.Mob> nmsClass) {
ClassName bukkitClass = ENTITY_NAMES.get(nmsClass);
ClassName bukkitClass = ENTITY_CLASS_NAMES.get(nmsClass);
if (bukkitClass == null) {
throw new RuntimeException("Can't figure out applicable bukkit entity for nms entity " + nmsClass); // maybe just return Mob?
}

View File

@ -11,6 +11,7 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.mojang.datafixers.util.Either;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.JsonOps;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import io.papermc.generator.types.craftblockdata.property.holder.VirtualField;
@ -47,6 +48,7 @@ import org.bukkit.block.data.type.Furnace;
import org.bukkit.block.data.type.RedstoneRail;
import org.bukkit.block.data.type.ResinClump;
import org.bukkit.block.data.type.Switch;*/
import org.jetbrains.annotations.NotNull;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
@ -180,14 +182,35 @@ public final class BlockStateMapping {
MAPPING = Collections.unmodifiableMap(map);
}*/
record PropertyData(Optional<String> field, Optional<String> name, ClassNamed api, boolean pure) {
public record PropertyData(Optional<String> field, Optional<String> name, ClassNamed api, boolean pure) implements Comparable<PropertyData> { // todo either? fieldOrName but keep them separate in the codec
public static final Codec<PropertyData> CODEC = RecordCodecBuilder.create(instance -> instance.group(
public static final Codec<PropertyData> UNSAFE_CODEC = RecordCodecBuilder.create(instance -> instance.group(
SourceCodecs.IDENTIFIER.optionalFieldOf("field").forGetter(PropertyData::field),
Codec.STRING.optionalFieldOf("name").forGetter(PropertyData::name),
SourceCodecs.CLASS_NAMED.fieldOf("api").forGetter(PropertyData::api),
Codec.BOOL.optionalFieldOf("pure", false).forGetter(PropertyData::pure)
).apply(instance, PropertyData::new));
public static final Codec<PropertyData> CODEC = UNSAFE_CODEC.validate(data -> {
return data.field().isEmpty() && data.name().isEmpty() ? DataResult.error(() -> "Must contains a name or a field") : DataResult.success(data);
});
@Override
public int compareTo(@NotNull BlockStateMapping.PropertyData data) {
if (this.field().isPresent() && data.field().isPresent()) {
return this.field().orElseThrow().compareTo(data.field().orElseThrow());
} else if (this.name().isPresent() && data.name().isPresent()) {
return this.name().orElseThrow().compareTo(data.name().orElseThrow());
} else {
if (this.name().isPresent() && data.field().isPresent()) {
return 1;
} else if (this.field().isPresent() && data.name().isPresent()) {
return -1;
}
return 0; // shouldn't happen
}
}
}
// levelled and ageable are done using the property name
@ -196,11 +219,12 @@ public final class BlockStateMapping {
private static final Map<String, ClassNamed> NAME_TO_DATA;
private static final Map<Property<?>, ClassNamed> PROPERTY_TO_DATA;
private static final Map<Property<?>, ClassNamed> MAIN_PROPERTY_TO_DATA;
public static final Codec<List<PropertyData>> PROPERTY_DATA_CODEC = PropertyData.CODEC.listOf();
static {
List<PropertyData> propertyData;
try (Reader input = new BufferedReader(new InputStreamReader(BlockStateMapping.class.getClassLoader().getResourceAsStream("data/block_state_properties.json")))) {
JsonArray properties = SourceCodecs.GSON.fromJson(input, JsonArray.class);
propertyData = PropertyData.CODEC.listOf().parse(JsonOps.INSTANCE, properties).getOrThrow();
propertyData = PROPERTY_DATA_CODEC.parse(JsonOps.INSTANCE, properties).getOrThrow();
} catch (IOException ex) {
throw new RuntimeException(ex);
}

View File

@ -5,12 +5,9 @@ import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import io.papermc.generator.Main;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.tags.TagKey;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.util.StringRepresentable;
@ -96,23 +93,21 @@ public sealed interface ItemPredicate permits ItemPredicate.IsClassPredicate, It
record IsElementPredicate(ExtraCodecs.TagOrElementLocation value) implements ItemPredicate {
private static final Codec<ExtraCodecs.TagOrElementLocation> ITEM_TAG_OR_ELEMENT_ID = ExtraCodecs.TAG_OR_ELEMENT_ID.validate(
value -> {
if (value.tag()) {
if (BuiltInRegistries.ITEM.get(TagKey.create(Registries.ITEM, value.id())).isPresent()) {
return DataResult.success(value);
} else {
return DataResult.error(() -> "Invalid tag id: " + value);
}
private static final Codec<ExtraCodecs.TagOrElementLocation> ITEM_TAG_OR_ELEMENT_ID = ExtraCodecs.TAG_OR_ELEMENT_ID.validate(value -> {
if (value.tag()) {
if (BuiltInRegistries.ITEM.get(TagKey.create(Registries.ITEM, value.id())).isPresent()) {
return DataResult.success(value);
} else {
if (BuiltInRegistries.ITEM.get(value.id()).isPresent()) {
return DataResult.success(value);
} else {
return DataResult.error(() -> "Invalid element id: " + value);
}
return DataResult.error(() -> "Invalid tag id: " + value);
}
} else {
if (BuiltInRegistries.ITEM.get(value.id()).isPresent()) {
return DataResult.success(value);
} else {
return DataResult.error(() -> "Invalid element id: " + value);
}
}
);
});
public static final MapCodec<IsElementPredicate> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(
ITEM_TAG_OR_ELEMENT_ID.fieldOf("value").forGetter(IsElementPredicate::value)

View File

@ -0,0 +1,77 @@
package io.papermc.generator.utils;
import com.google.gson.JsonElement;
import com.mojang.serialization.Codec;
import com.mojang.serialization.JsonOps;
import io.papermc.generator.Main;
import io.papermc.generator.rewriter.types.simple.EntityTypeRewriter;
import io.papermc.generator.types.goal.MobGoalNames;
import io.papermc.typewriter.ClassNamed;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.entity.EntityType;
import java.io.IOException;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class PrepareInputFiles {
static {
Main.bootStrap(true);
}
@FunctionalInterface
public interface Transmuter<A> {
A transmute(A value);
}
private record DataFile<A>(String path, Codec<A> codec, Transmuter<A> transmuter) {
public A transmuteRaw(Object value) {
return this.transmuter.transmute((A) value);
}
}
private static <K, V> Transmuter<Map<K, V>> transmuteMap(Comparator<K> comparator) {
return value -> {
TreeMap<K, V> map = new TreeMap<>(comparator);
map.putAll(value);
return map;
};
}
private static final List<DataFile<?>> DATA_FILES = List.of(
new DataFile<>("block_state_properties.json", BlockStateMapping.PROPERTY_DATA_CODEC, value -> {
List<BlockStateMapping.PropertyData> mutableValue = new ArrayList<>(value);
mutableValue.sort(Comparator.naturalOrder());
return mutableValue;
}),
new DataFile<>("enum_property_types.json", BlockStateMapping.ENUM_PROPERTY_TYPES_CODEC, transmuteMap(Comparator.comparing((Class<?> klass) -> klass.getCanonicalName()))),
new DataFile<>("entity_types.json", EntityTypeRewriter.DATA_CODEC, transmuteMap(Formatting.alphabeticKeyOrder((ResourceKey<EntityType<?>> key) -> key.location().getPath()))),
new DataFile<>("entity_class_names.json", MobGoalNames.ENTITY_CLASS_NAMES_CODEC, transmuteMap(Comparator.comparing((Class<?> klass) -> klass.getCanonicalName()))),
new DataFile<>("item_meta/bridge.json", ItemMetaData.BRIDGE_CODEC, transmuteMap(Comparator.comparing(ClassNamed::canonicalName)))
);
public static void main(String[] args) throws IOException {
String resourceDir = args[0];
for (DataFile<?> file : DATA_FILES) {
Path resourcePath = Path.of(resourceDir, "data/" + file.path());
try (Reader input = Files.newBufferedReader(resourcePath)) {
JsonElement element = SourceCodecs.GSON.fromJson(input, JsonElement.class);
Object javaElement = file.transmuteRaw(file.codec().parse(JsonOps.INSTANCE, element).getOrThrow());
element = ((Codec<Object>) file.codec()).encodeStart(JsonOps.INSTANCE, javaElement).getOrThrow();
Files.writeString(resourcePath, SourceCodecs.GSON.toJson(element) + "\n", StandardCharsets.UTF_8);
} catch (IOException ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
}
}

View File

@ -1,17 +1,19 @@
package io.papermc.generator.utils;
import com.google.common.reflect.TypeToken;
import com.google.gson.FormattingStyle;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.squareup.javapoet.ClassName;
import io.papermc.generator.types.SimpleGenerator;
import io.papermc.typewriter.ClassNamed;
import javax.lang.model.SourceVersion;
public final class SourceCodecs {
public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
public static final Gson GSON = new GsonBuilder().setFormattingStyle(FormattingStyle.PRETTY.withIndent(SimpleGenerator.INDENT_UNIT)).create();
private SourceCodecs() {
}
@ -30,7 +32,7 @@ public final class SourceCodecs {
} catch (ClassNotFoundException e) {
return DataResult.error(() -> "Class not found: %s".formatted(e.getMessage()));
}
}, Class::toString);
}, Class::getName);
public static <T> Codec<Class<? extends T>> classCodec(Class<T> baseClass) {
return CLASS.comapFlatMap(klass -> {

View File

@ -1,109 +1,109 @@
{
"net.minecraft.world.entity.animal.horse.AbstractChestedHorse": "org.bukkit.entity.ChestedHorse",
"net.minecraft.world.entity.AgeableMob": "org.bukkit.entity.Ageable",
"net.minecraft.world.entity.FlyingMob": "org.bukkit.entity.Flying",
"net.minecraft.world.entity.GlowSquid": "org.bukkit.entity.GlowSquid",
"net.minecraft.world.entity.Mob": "org.bukkit.entity.Mob",
"net.minecraft.world.entity.PathfinderMob": "org.bukkit.entity.Creature",
"net.minecraft.world.entity.TamableAnimal": "org.bukkit.entity.Tameable",
"net.minecraft.world.entity.ambient.AmbientCreature": "org.bukkit.entity.Ambient",
"net.minecraft.world.entity.ambient.Bat": "org.bukkit.entity.Bat",
"net.minecraft.world.entity.animal.AbstractCow": "org.bukkit.entity.AbstractCow",
"net.minecraft.world.entity.animal.AbstractFish": "org.bukkit.entity.Fish",
"net.minecraft.world.entity.animal.AbstractGolem": "org.bukkit.entity.Golem",
"net.minecraft.world.entity.animal.horse.AbstractHorse": "org.bukkit.entity.AbstractHorse",
"net.minecraft.world.entity.monster.AbstractIllager": "org.bukkit.entity.Illager",
"net.minecraft.world.entity.monster.piglin.AbstractPiglin": "org.bukkit.entity.PiglinAbstract",
"net.minecraft.world.entity.animal.AbstractSchoolingFish": "io.papermc.paper.entity.SchoolableFish",
"net.minecraft.world.entity.monster.AbstractSkeleton": "org.bukkit.entity.AbstractSkeleton",
"net.minecraft.world.entity.npc.AbstractVillager": "org.bukkit.entity.AbstractVillager",
"net.minecraft.world.entity.AgeableMob": "org.bukkit.entity.Ageable",
"net.minecraft.world.entity.animal.AgeableWaterCreature": "org.bukkit.entity.Squid",
"net.minecraft.world.entity.animal.allay.Allay": "org.bukkit.entity.Allay",
"net.minecraft.world.entity.ambient.AmbientCreature": "org.bukkit.entity.Ambient",
"net.minecraft.world.entity.animal.Animal": "org.bukkit.entity.Animals",
"net.minecraft.world.entity.animal.armadillo.Armadillo": "org.bukkit.entity.Armadillo",
"net.minecraft.world.entity.animal.axolotl.Axolotl": "org.bukkit.entity.Axolotl",
"net.minecraft.world.entity.ambient.Bat": "org.bukkit.entity.Bat",
"net.minecraft.world.entity.animal.Bee": "org.bukkit.entity.Bee",
"net.minecraft.world.entity.monster.Blaze": "org.bukkit.entity.Blaze",
"net.minecraft.world.entity.monster.Bogged": "org.bukkit.entity.Bogged",
"net.minecraft.world.entity.monster.breeze.Breeze": "org.bukkit.entity.Breeze",
"net.minecraft.world.entity.animal.camel.Camel": "org.bukkit.entity.Camel",
"net.minecraft.world.entity.animal.Cat": "org.bukkit.entity.Cat",
"net.minecraft.world.entity.monster.CaveSpider": "org.bukkit.entity.CaveSpider",
"net.minecraft.world.entity.animal.Chicken": "org.bukkit.entity.Chicken",
"net.minecraft.world.entity.animal.Cod": "org.bukkit.entity.Cod",
"net.minecraft.world.entity.animal.Cow": "org.bukkit.entity.Cow",
"net.minecraft.world.entity.monster.creaking.Creaking": "org.bukkit.entity.Creaking",
"net.minecraft.world.entity.monster.Creeper": "org.bukkit.entity.Creeper",
"net.minecraft.world.entity.animal.Dolphin": "org.bukkit.entity.Dolphin",
"net.minecraft.world.entity.animal.horse.Donkey": "org.bukkit.entity.Donkey",
"net.minecraft.world.entity.monster.Drowned": "org.bukkit.entity.Drowned",
"net.minecraft.world.entity.monster.ElderGuardian": "org.bukkit.entity.ElderGuardian",
"net.minecraft.world.entity.boss.enderdragon.EnderDragon": "org.bukkit.entity.EnderDragon",
"net.minecraft.world.entity.monster.EnderMan": "org.bukkit.entity.Enderman",
"net.minecraft.world.entity.monster.Endermite": "org.bukkit.entity.Endermite",
"net.minecraft.world.entity.monster.Evoker": "org.bukkit.entity.Evoker",
"net.minecraft.world.entity.FlyingMob": "org.bukkit.entity.Flying",
"net.minecraft.world.entity.animal.Fox": "org.bukkit.entity.Fox",
"net.minecraft.world.entity.animal.frog.Frog": "org.bukkit.entity.Frog",
"net.minecraft.world.entity.monster.Ghast": "org.bukkit.entity.Ghast",
"net.minecraft.world.entity.monster.Giant": "org.bukkit.entity.Giant",
"net.minecraft.world.entity.GlowSquid": "org.bukkit.entity.GlowSquid",
"net.minecraft.world.entity.animal.goat.Goat": "org.bukkit.entity.Goat",
"net.minecraft.world.entity.monster.Guardian": "org.bukkit.entity.Guardian",
"net.minecraft.world.entity.monster.hoglin.Hoglin": "org.bukkit.entity.Hoglin",
"net.minecraft.world.entity.animal.horse.Horse": "org.bukkit.entity.Horse",
"net.minecraft.world.entity.monster.Husk": "org.bukkit.entity.Husk",
"net.minecraft.world.entity.monster.Illusioner": "org.bukkit.entity.Illusioner",
"net.minecraft.world.entity.animal.IronGolem": "org.bukkit.entity.IronGolem",
"net.minecraft.world.entity.animal.horse.Llama": "org.bukkit.entity.Llama",
"net.minecraft.world.entity.monster.MagmaCube": "org.bukkit.entity.MagmaCube",
"net.minecraft.world.entity.Mob": "org.bukkit.entity.Mob",
"net.minecraft.world.entity.monster.Monster": "org.bukkit.entity.Monster",
"net.minecraft.world.entity.animal.horse.Mule": "org.bukkit.entity.Mule",
"net.minecraft.world.entity.animal.MushroomCow": "org.bukkit.entity.MushroomCow",
"net.minecraft.world.entity.animal.Ocelot": "org.bukkit.entity.Ocelot",
"net.minecraft.world.entity.animal.Panda": "org.bukkit.entity.Panda",
"net.minecraft.world.entity.animal.Parrot": "org.bukkit.entity.Parrot",
"net.minecraft.world.entity.PathfinderMob": "org.bukkit.entity.Creature",
"net.minecraft.world.entity.monster.PatrollingMonster": "org.bukkit.entity.Raider",
"net.minecraft.world.entity.monster.Phantom": "org.bukkit.entity.Phantom",
"net.minecraft.world.entity.animal.Pig": "org.bukkit.entity.Pig",
"net.minecraft.world.entity.monster.piglin.Piglin": "org.bukkit.entity.Piglin",
"net.minecraft.world.entity.monster.piglin.PiglinBrute": "org.bukkit.entity.PiglinBrute",
"net.minecraft.world.entity.monster.Pillager": "org.bukkit.entity.Pillager",
"net.minecraft.world.entity.animal.PolarBear": "org.bukkit.entity.PolarBear",
"net.minecraft.world.entity.animal.Pufferfish": "org.bukkit.entity.PufferFish",
"net.minecraft.world.entity.animal.Rabbit": "org.bukkit.entity.Rabbit",
"net.minecraft.world.entity.raid.Raider": "org.bukkit.entity.Raider",
"net.minecraft.world.entity.monster.Ravager": "org.bukkit.entity.Ravager",
"net.minecraft.world.entity.animal.Salmon": "org.bukkit.entity.Salmon",
"net.minecraft.world.entity.animal.sheep.Sheep": "org.bukkit.entity.Sheep",
"net.minecraft.world.entity.animal.ShoulderRidingEntity": "org.bukkit.entity.Parrot",
"net.minecraft.world.entity.animal.SnowGolem": "org.bukkit.entity.Snowman",
"net.minecraft.world.entity.animal.Squid": "org.bukkit.entity.Squid",
"net.minecraft.world.entity.animal.TropicalFish": "org.bukkit.entity.TropicalFish",
"net.minecraft.world.entity.animal.Turtle": "org.bukkit.entity.Turtle",
"net.minecraft.world.entity.animal.WaterAnimal": "org.bukkit.entity.WaterMob",
"net.minecraft.world.entity.animal.allay.Allay": "org.bukkit.entity.Allay",
"net.minecraft.world.entity.animal.armadillo.Armadillo": "org.bukkit.entity.Armadillo",
"net.minecraft.world.entity.animal.axolotl.Axolotl": "org.bukkit.entity.Axolotl",
"net.minecraft.world.entity.animal.camel.Camel": "org.bukkit.entity.Camel",
"net.minecraft.world.entity.animal.frog.Frog": "org.bukkit.entity.Frog",
"net.minecraft.world.entity.animal.frog.Tadpole": "org.bukkit.entity.Tadpole",
"net.minecraft.world.entity.animal.goat.Goat": "org.bukkit.entity.Goat",
"net.minecraft.world.entity.animal.horse.AbstractChestedHorse": "org.bukkit.entity.ChestedHorse",
"net.minecraft.world.entity.animal.horse.AbstractHorse": "org.bukkit.entity.AbstractHorse",
"net.minecraft.world.entity.animal.horse.Donkey": "org.bukkit.entity.Donkey",
"net.minecraft.world.entity.animal.horse.Horse": "org.bukkit.entity.Horse",
"net.minecraft.world.entity.animal.horse.Llama": "org.bukkit.entity.Llama",
"net.minecraft.world.entity.animal.horse.Mule": "org.bukkit.entity.Mule",
"net.minecraft.world.entity.animal.horse.SkeletonHorse": "org.bukkit.entity.SkeletonHorse",
"net.minecraft.world.entity.animal.horse.TraderLlama": "org.bukkit.entity.TraderLlama",
"net.minecraft.world.entity.animal.horse.ZombieHorse": "org.bukkit.entity.ZombieHorse",
"net.minecraft.world.entity.animal.sheep.Sheep": "org.bukkit.entity.Sheep",
"net.minecraft.world.entity.animal.sniffer.Sniffer": "org.bukkit.entity.Sniffer",
"net.minecraft.world.entity.animal.wolf.Wolf": "org.bukkit.entity.Wolf",
"net.minecraft.world.entity.boss.enderdragon.EnderDragon": "org.bukkit.entity.EnderDragon",
"net.minecraft.world.entity.boss.wither.WitherBoss": "org.bukkit.entity.Wither",
"net.minecraft.world.entity.monster.AbstractIllager": "org.bukkit.entity.Illager",
"net.minecraft.world.entity.monster.AbstractSkeleton": "org.bukkit.entity.AbstractSkeleton",
"net.minecraft.world.entity.monster.Blaze": "org.bukkit.entity.Blaze",
"net.minecraft.world.entity.monster.Bogged": "org.bukkit.entity.Bogged",
"net.minecraft.world.entity.monster.CaveSpider": "org.bukkit.entity.CaveSpider",
"net.minecraft.world.entity.monster.Creeper": "org.bukkit.entity.Creeper",
"net.minecraft.world.entity.monster.Drowned": "org.bukkit.entity.Drowned",
"net.minecraft.world.entity.monster.ElderGuardian": "org.bukkit.entity.ElderGuardian",
"net.minecraft.world.entity.monster.EnderMan": "org.bukkit.entity.Enderman",
"net.minecraft.world.entity.monster.Endermite": "org.bukkit.entity.Endermite",
"net.minecraft.world.entity.monster.Evoker": "org.bukkit.entity.Evoker",
"net.minecraft.world.entity.monster.Ghast": "org.bukkit.entity.Ghast",
"net.minecraft.world.entity.monster.Giant": "org.bukkit.entity.Giant",
"net.minecraft.world.entity.monster.Guardian": "org.bukkit.entity.Guardian",
"net.minecraft.world.entity.monster.Husk": "org.bukkit.entity.Husk",
"net.minecraft.world.entity.monster.Illusioner": "org.bukkit.entity.Illusioner",
"net.minecraft.world.entity.monster.MagmaCube": "org.bukkit.entity.MagmaCube",
"net.minecraft.world.entity.monster.Monster": "org.bukkit.entity.Monster",
"net.minecraft.world.entity.monster.PatrollingMonster": "org.bukkit.entity.Raider",
"net.minecraft.world.entity.monster.Phantom": "org.bukkit.entity.Phantom",
"net.minecraft.world.entity.monster.Pillager": "org.bukkit.entity.Pillager",
"net.minecraft.world.entity.monster.Ravager": "org.bukkit.entity.Ravager",
"net.minecraft.world.entity.monster.Shulker": "org.bukkit.entity.Shulker",
"net.minecraft.world.entity.monster.Silverfish": "org.bukkit.entity.Silverfish",
"net.minecraft.world.entity.monster.Skeleton": "org.bukkit.entity.Skeleton",
"net.minecraft.world.entity.animal.horse.SkeletonHorse": "org.bukkit.entity.SkeletonHorse",
"net.minecraft.world.entity.monster.Slime": "org.bukkit.entity.Slime",
"net.minecraft.world.entity.animal.sniffer.Sniffer": "org.bukkit.entity.Sniffer",
"net.minecraft.world.entity.animal.SnowGolem": "org.bukkit.entity.Snowman",
"net.minecraft.world.entity.monster.SpellcasterIllager": "org.bukkit.entity.Spellcaster",
"net.minecraft.world.entity.monster.Spider": "org.bukkit.entity.Spider",
"net.minecraft.world.entity.animal.Squid": "org.bukkit.entity.Squid",
"net.minecraft.world.entity.monster.Stray": "org.bukkit.entity.Stray",
"net.minecraft.world.entity.monster.Strider": "org.bukkit.entity.Strider",
"net.minecraft.world.entity.animal.frog.Tadpole": "org.bukkit.entity.Tadpole",
"net.minecraft.world.entity.TamableAnimal": "org.bukkit.entity.Tameable",
"net.minecraft.world.entity.animal.horse.TraderLlama": "org.bukkit.entity.TraderLlama",
"net.minecraft.world.entity.animal.TropicalFish": "org.bukkit.entity.TropicalFish",
"net.minecraft.world.entity.animal.Turtle": "org.bukkit.entity.Turtle",
"net.minecraft.world.entity.monster.Vex": "org.bukkit.entity.Vex",
"net.minecraft.world.entity.npc.Villager": "org.bukkit.entity.Villager",
"net.minecraft.world.entity.monster.Vindicator": "org.bukkit.entity.Vindicator",
"net.minecraft.world.entity.npc.WanderingTrader": "org.bukkit.entity.WanderingTrader",
"net.minecraft.world.entity.monster.warden.Warden": "org.bukkit.entity.Warden",
"net.minecraft.world.entity.animal.WaterAnimal": "org.bukkit.entity.WaterMob",
"net.minecraft.world.entity.monster.Witch": "org.bukkit.entity.Witch",
"net.minecraft.world.entity.boss.wither.WitherBoss": "org.bukkit.entity.Wither",
"net.minecraft.world.entity.monster.WitherSkeleton": "org.bukkit.entity.WitherSkeleton",
"net.minecraft.world.entity.animal.wolf.Wolf": "org.bukkit.entity.Wolf",
"net.minecraft.world.entity.monster.Zoglin": "org.bukkit.entity.Zoglin",
"net.minecraft.world.entity.monster.Zombie": "org.bukkit.entity.Zombie",
"net.minecraft.world.entity.animal.horse.ZombieHorse": "org.bukkit.entity.ZombieHorse",
"net.minecraft.world.entity.monster.ZombieVillager": "org.bukkit.entity.ZombieVillager",
"net.minecraft.world.entity.monster.ZombifiedPiglin": "org.bukkit.entity.PigZombie"
"net.minecraft.world.entity.monster.ZombifiedPiglin": "org.bukkit.entity.PigZombie",
"net.minecraft.world.entity.monster.breeze.Breeze": "org.bukkit.entity.Breeze",
"net.minecraft.world.entity.monster.creaking.Creaking": "org.bukkit.entity.Creaking",
"net.minecraft.world.entity.monster.hoglin.Hoglin": "org.bukkit.entity.Hoglin",
"net.minecraft.world.entity.monster.piglin.AbstractPiglin": "org.bukkit.entity.PiglinAbstract",
"net.minecraft.world.entity.monster.piglin.Piglin": "org.bukkit.entity.Piglin",
"net.minecraft.world.entity.monster.piglin.PiglinBrute": "org.bukkit.entity.PiglinBrute",
"net.minecraft.world.entity.monster.warden.Warden": "org.bukkit.entity.Warden",
"net.minecraft.world.entity.npc.AbstractVillager": "org.bukkit.entity.AbstractVillager",
"net.minecraft.world.entity.npc.Villager": "org.bukkit.entity.Villager",
"net.minecraft.world.entity.npc.WanderingTrader": "org.bukkit.entity.WanderingTrader",
"net.minecraft.world.entity.raid.Raider": "org.bukkit.entity.Raider"
}

View File

@ -1,17 +1,19 @@
{
"net.minecraft.world.level.block.state.properties.AttachFace": "org.bukkit.block.data.FaceAttachable.AttachedFace",
"net.minecraft.core.Direction": "org.bukkit.block.BlockFace",
"net.minecraft.core.Direction$Axis": "org.bukkit.Axis",
"net.minecraft.core.FrontAndTop": "org.bukkit.block.Orientation",
"net.minecraft.world.level.block.entity.trialspawner.TrialSpawnerState": "org.bukkit.block.data.type.TrialSpawner.State",
"net.minecraft.world.level.block.entity.vault.VaultState": "org.bukkit.block.data.type.Vault.State",
"net.minecraft.world.level.block.state.properties.AttachFace": "org.bukkit.block.data.FaceAttachable.AttachedFace",
"net.minecraft.world.level.block.state.properties.BambooLeaves": "org.bukkit.block.data.type.Bamboo.Leaves",
"net.minecraft.world.level.block.state.properties.BedPart": "org.bukkit.block.data.type.Bed.Part",
"net.minecraft.world.level.block.state.properties.BellAttachType": "org.bukkit.block.data.type.Bell.Attachment",
"net.minecraft.world.level.block.state.properties.ChestType": "org.bukkit.block.data.type.Chest.Type",
"net.minecraft.world.level.block.state.properties.ComparatorMode": "org.bukkit.block.data.type.Comparator.Mode",
"net.minecraft.world.level.block.state.properties.CreakingHeartState": "org.bukkit.block.data.type.CreakingHeart.State",
"net.minecraft.core.Direction": "org.bukkit.block.BlockFace",
"net.minecraft.world.level.block.state.properties.DoorHingeSide": "org.bukkit.block.data.type.Door.Hinge",
"net.minecraft.world.level.block.state.properties.DoubleBlockHalf": "org.bukkit.block.data.Bisected.Half",
"net.minecraft.world.level.block.state.properties.DripstoneThickness": "org.bukkit.block.data.type.PointedDripstone.Thickness",
"net.minecraft.core.FrontAndTop": "org.bukkit.block.Orientation",
"net.minecraft.world.level.block.state.properties.Half": "org.bukkit.block.data.Bisected.Half",
"net.minecraft.world.level.block.state.properties.NoteBlockInstrument": "org.bukkit.Instrument",
"net.minecraft.world.level.block.state.properties.PistonType": "org.bukkit.block.data.type.TechnicalPiston.Type",
@ -23,7 +25,5 @@
"net.minecraft.world.level.block.state.properties.StructureMode": "org.bukkit.block.data.type.StructureBlock.Mode",
"net.minecraft.world.level.block.state.properties.TestBlockMode": "org.bukkit.block.data.type.TestBlock.Mode",
"net.minecraft.world.level.block.state.properties.Tilt": "org.bukkit.block.data.type.BigDripleaf.Tilt",
"net.minecraft.world.level.block.entity.trialspawner.TrialSpawnerState": "org.bukkit.block.data.type.TrialSpawner.State",
"net.minecraft.world.level.block.entity.vault.VaultState": "org.bukkit.block.data.type.Vault.State",
"net.minecraft.world.level.block.state.properties.WallSide": "org.bukkit.block.data.type.Wall.Height"
}

View File

@ -1,99 +1,75 @@
{
"org.bukkit.craftbukkit.inventory.CraftMetaArmorStand": {
"api": "com.destroystokyo.paper.inventory.meta.ArmorStandMeta",
"field": "ARMOR_STAND_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaBookSigned": {
"api": "org.bukkit.inventory.meta.BookMeta",
"field": "SIGNED_BOOK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaBook": {
"api": "org.bukkit.inventory.meta.BookMeta",
"field": "WRITABLE_BOOK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaSkull": {
"api": "org.bukkit.inventory.meta.SkullMeta",
"field": "SKULL_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaArmor": {
"api": "org.bukkit.inventory.meta.ArmorMeta",
"field": "ARMOR_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaColorableArmor": {
"api": "org.bukkit.inventory.meta.ColorableArmorMeta",
"field": "COLORABLE_ARMOR_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaLeatherArmor": {
"api": "org.bukkit.inventory.meta.LeatherArmorMeta",
"field": "LEATHER_ARMOR_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaPotion": {
"api": "org.bukkit.inventory.meta.PotionMeta",
"field": "POTION_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaMap": {
"api": "org.bukkit.inventory.meta.MapMeta",
"field": "MAP_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaFirework": {
"api": "org.bukkit.inventory.meta.FireworkMeta",
"field": "FIREWORK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaCharge": {
"api": "org.bukkit.inventory.meta.FireworkEffectMeta",
"field": "CHARGE_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaEnchantedBook": {
"api": "org.bukkit.inventory.meta.EnchantmentStorageMeta",
"field": "ENCHANTED_BOOK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaBanner": {
"api": "org.bukkit.inventory.meta.BannerMeta",
"field": "BANNER_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaSpawnEgg": {
"api": "org.bukkit.inventory.meta.SpawnEggMeta",
"field": "SPAWN_EGG_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaKnowledgeBook": {
"api": "org.bukkit.inventory.meta.KnowledgeBookMeta",
"field": "KNOWLEDGE_BOOK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaBlockState": {
"api": "org.bukkit.inventory.meta.BlockStateMeta",
"field": "BLOCK_STATE_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaShield": {
"api": "org.bukkit.inventory.meta.ShieldMeta",
"field": "SHIELD_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaTropicalFishBucket": {
"api": "org.bukkit.inventory.meta.TropicalFishBucketMeta",
"field": "TROPICAL_FISH_BUCKET_META_DATA"
"org.bukkit.craftbukkit.inventory.CraftMetaArmorStand": {
"api": "com.destroystokyo.paper.inventory.meta.ArmorStandMeta",
"field": "ARMOR_STAND_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaAxolotlBucket": {
"api": "org.bukkit.inventory.meta.AxolotlBucketMeta",
"field": "AXOLOTL_BUCKET_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaCrossbow": {
"api": "org.bukkit.inventory.meta.CrossbowMeta",
"field": "CROSSBOW_META_DATA"
"org.bukkit.craftbukkit.inventory.CraftMetaBanner": {
"api": "org.bukkit.inventory.meta.BannerMeta",
"field": "BANNER_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaSuspiciousStew": {
"api": "org.bukkit.inventory.meta.SuspiciousStewMeta",
"field": "SUSPICIOUS_STEW_META_DATA"
"org.bukkit.craftbukkit.inventory.CraftMetaBlockState": {
"api": "org.bukkit.inventory.meta.BlockStateMeta",
"field": "BLOCK_STATE_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaEntityTag": {
"api": "org.bukkit.inventory.meta.ItemMeta",
"field": "ENTITY_TAG_META_DATA"
"org.bukkit.craftbukkit.inventory.CraftMetaBook": {
"api": "org.bukkit.inventory.meta.BookMeta",
"field": "WRITABLE_BOOK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaBookSigned": {
"api": "org.bukkit.inventory.meta.BookMeta",
"field": "SIGNED_BOOK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaBundle": {
"api": "org.bukkit.inventory.meta.BundleMeta",
"field": "BUNDLE_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaCharge": {
"api": "org.bukkit.inventory.meta.FireworkEffectMeta",
"field": "CHARGE_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaColorableArmor": {
"api": "org.bukkit.inventory.meta.ColorableArmorMeta",
"field": "COLORABLE_ARMOR_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaCompass": {
"api": "org.bukkit.inventory.meta.CompassMeta",
"field": "COMPASS_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaBundle": {
"api": "org.bukkit.inventory.meta.BundleMeta",
"field": "BUNDLE_META_DATA"
"org.bukkit.craftbukkit.inventory.CraftMetaCrossbow": {
"api": "org.bukkit.inventory.meta.CrossbowMeta",
"field": "CROSSBOW_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaEnchantedBook": {
"api": "org.bukkit.inventory.meta.EnchantmentStorageMeta",
"field": "ENCHANTED_BOOK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaEntityTag": {
"api": "org.bukkit.inventory.meta.ItemMeta",
"field": "ENTITY_TAG_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaFirework": {
"api": "org.bukkit.inventory.meta.FireworkMeta",
"field": "FIREWORK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaKnowledgeBook": {
"api": "org.bukkit.inventory.meta.KnowledgeBookMeta",
"field": "KNOWLEDGE_BOOK_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaLeatherArmor": {
"api": "org.bukkit.inventory.meta.LeatherArmorMeta",
"field": "LEATHER_ARMOR_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaMap": {
"api": "org.bukkit.inventory.meta.MapMeta",
"field": "MAP_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaMusicInstrument": {
"api": "org.bukkit.inventory.meta.MusicInstrumentMeta",
@ -102,5 +78,29 @@
"org.bukkit.craftbukkit.inventory.CraftMetaOminousBottle": {
"api": "org.bukkit.inventory.meta.OminousBottleMeta",
"field": "OMINOUS_BOTTLE_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaPotion": {
"api": "org.bukkit.inventory.meta.PotionMeta",
"field": "POTION_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaShield": {
"api": "org.bukkit.inventory.meta.ShieldMeta",
"field": "SHIELD_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaSkull": {
"api": "org.bukkit.inventory.meta.SkullMeta",
"field": "SKULL_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaSpawnEgg": {
"api": "org.bukkit.inventory.meta.SpawnEggMeta",
"field": "SPAWN_EGG_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaSuspiciousStew": {
"api": "org.bukkit.inventory.meta.SuspiciousStewMeta",
"field": "SUSPICIOUS_STEW_META_DATA"
},
"org.bukkit.craftbukkit.inventory.CraftMetaTropicalFishBucket": {
"api": "org.bukkit.inventory.meta.TropicalFishBucketMeta",
"field": "TROPICAL_FISH_BUCKET_META_DATA"
}
}

View File

@ -23,17 +23,12 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public class BlockStatePropertyTest {
public class BlockStatePropertyTest extends BootstrapTest {
private static Set<Class<? extends Comparable<?>>> ENUM_PROPERTY_VALUES;
@BeforeAll
public static void getAllProperties() {
// bootstrap
SharedConstants.tryDetectVersion();
Bootstrap.bootStrap();
Bootstrap.validate();
// get all properties
Set<Class<? extends Comparable<?>>> enumPropertyValues = Collections.newSetFromMap(new IdentityHashMap<>());
try {

View File

@ -0,0 +1,13 @@
package io.papermc.generator;
import net.minecraft.SharedConstants;
import net.minecraft.server.Bootstrap;
public class BootstrapTest {
static {
SharedConstants.tryDetectVersion();
Bootstrap.bootStrap();
Bootstrap.validate();
}
}

View File

@ -12,7 +12,7 @@ import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class MobGoalConverterTest {
public class MobGoalConverterTest extends BootstrapTest {
@Test
public void testBukkitMap() {
@ -25,7 +25,7 @@ public class MobGoalConverterTest {
List<String> missingClasses = new ArrayList<>();
for (Class<Mob> nmsClass : classes) {
if (!MobGoalNames.ENTITY_NAMES.containsKey(nmsClass)) {
if (!MobGoalNames.ENTITY_CLASS_NAMES.containsKey(nmsClass)) {
missingClasses.add(nmsClass.getCanonicalName());
}
}

View File

@ -37,113 +37,113 @@ public class MobGoalHelper {
//<editor-fold defaultstate="collapsed" desc="bukkitMap Entities">
// Start generate - MobGoalHelper#bukkitMap
// @GeneratedFrom 1.21.5
bukkitMap.put(net.minecraft.world.entity.animal.horse.AbstractChestedHorse.class, ChestedHorse.class);
bukkitMap.put(net.minecraft.world.entity.AgeableMob.class, Ageable.class);
bukkitMap.put(net.minecraft.world.entity.FlyingMob.class, Flying.class);
bukkitMap.put(net.minecraft.world.entity.GlowSquid.class, GlowSquid.class);
bukkitMap.put(net.minecraft.world.entity.Mob.class, Mob.class);
bukkitMap.put(net.minecraft.world.entity.PathfinderMob.class, Creature.class);
bukkitMap.put(net.minecraft.world.entity.TamableAnimal.class, Tameable.class);
bukkitMap.put(net.minecraft.world.entity.ambient.AmbientCreature.class, Ambient.class);
bukkitMap.put(net.minecraft.world.entity.ambient.Bat.class, Bat.class);
bukkitMap.put(net.minecraft.world.entity.animal.AbstractCow.class, AbstractCow.class);
bukkitMap.put(net.minecraft.world.entity.animal.AbstractFish.class, Fish.class);
bukkitMap.put(net.minecraft.world.entity.animal.AbstractGolem.class, Golem.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.AbstractHorse.class, AbstractHorse.class);
bukkitMap.put(net.minecraft.world.entity.monster.AbstractIllager.class, Illager.class);
bukkitMap.put(net.minecraft.world.entity.monster.piglin.AbstractPiglin.class, PiglinAbstract.class);
bukkitMap.put(net.minecraft.world.entity.animal.AbstractSchoolingFish.class, SchoolableFish.class);
bukkitMap.put(net.minecraft.world.entity.monster.AbstractSkeleton.class, AbstractSkeleton.class);
bukkitMap.put(net.minecraft.world.entity.npc.AbstractVillager.class, AbstractVillager.class);
bukkitMap.put(net.minecraft.world.entity.AgeableMob.class, Ageable.class);
bukkitMap.put(net.minecraft.world.entity.animal.AgeableWaterCreature.class, Squid.class);
bukkitMap.put(net.minecraft.world.entity.animal.allay.Allay.class, Allay.class);
bukkitMap.put(net.minecraft.world.entity.ambient.AmbientCreature.class, Ambient.class);
bukkitMap.put(net.minecraft.world.entity.animal.Animal.class, Animals.class);
bukkitMap.put(net.minecraft.world.entity.animal.armadillo.Armadillo.class, Armadillo.class);
bukkitMap.put(net.minecraft.world.entity.animal.axolotl.Axolotl.class, Axolotl.class);
bukkitMap.put(net.minecraft.world.entity.ambient.Bat.class, Bat.class);
bukkitMap.put(net.minecraft.world.entity.animal.Bee.class, Bee.class);
bukkitMap.put(net.minecraft.world.entity.monster.Blaze.class, Blaze.class);
bukkitMap.put(net.minecraft.world.entity.monster.Bogged.class, Bogged.class);
bukkitMap.put(net.minecraft.world.entity.monster.breeze.Breeze.class, Breeze.class);
bukkitMap.put(net.minecraft.world.entity.animal.camel.Camel.class, Camel.class);
bukkitMap.put(net.minecraft.world.entity.animal.Cat.class, Cat.class);
bukkitMap.put(net.minecraft.world.entity.monster.CaveSpider.class, CaveSpider.class);
bukkitMap.put(net.minecraft.world.entity.animal.Chicken.class, Chicken.class);
bukkitMap.put(net.minecraft.world.entity.animal.Cod.class, Cod.class);
bukkitMap.put(net.minecraft.world.entity.animal.Cow.class, Cow.class);
bukkitMap.put(net.minecraft.world.entity.monster.creaking.Creaking.class, Creaking.class);
bukkitMap.put(net.minecraft.world.entity.monster.Creeper.class, Creeper.class);
bukkitMap.put(net.minecraft.world.entity.animal.Dolphin.class, Dolphin.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.Donkey.class, Donkey.class);
bukkitMap.put(net.minecraft.world.entity.monster.Drowned.class, Drowned.class);
bukkitMap.put(net.minecraft.world.entity.monster.ElderGuardian.class, ElderGuardian.class);
bukkitMap.put(net.minecraft.world.entity.boss.enderdragon.EnderDragon.class, EnderDragon.class);
bukkitMap.put(net.minecraft.world.entity.monster.EnderMan.class, Enderman.class);
bukkitMap.put(net.minecraft.world.entity.monster.Endermite.class, Endermite.class);
bukkitMap.put(net.minecraft.world.entity.monster.Evoker.class, Evoker.class);
bukkitMap.put(net.minecraft.world.entity.FlyingMob.class, Flying.class);
bukkitMap.put(net.minecraft.world.entity.animal.Fox.class, Fox.class);
bukkitMap.put(net.minecraft.world.entity.animal.frog.Frog.class, Frog.class);
bukkitMap.put(net.minecraft.world.entity.monster.Ghast.class, Ghast.class);
bukkitMap.put(net.minecraft.world.entity.monster.Giant.class, Giant.class);
bukkitMap.put(net.minecraft.world.entity.GlowSquid.class, GlowSquid.class);
bukkitMap.put(net.minecraft.world.entity.animal.goat.Goat.class, Goat.class);
bukkitMap.put(net.minecraft.world.entity.monster.Guardian.class, Guardian.class);
bukkitMap.put(net.minecraft.world.entity.monster.hoglin.Hoglin.class, Hoglin.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.Horse.class, Horse.class);
bukkitMap.put(net.minecraft.world.entity.monster.Husk.class, Husk.class);
bukkitMap.put(net.minecraft.world.entity.monster.Illusioner.class, Illusioner.class);
bukkitMap.put(net.minecraft.world.entity.animal.IronGolem.class, IronGolem.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.Llama.class, Llama.class);
bukkitMap.put(net.minecraft.world.entity.monster.MagmaCube.class, MagmaCube.class);
bukkitMap.put(net.minecraft.world.entity.Mob.class, Mob.class);
bukkitMap.put(net.minecraft.world.entity.monster.Monster.class, Monster.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.Mule.class, Mule.class);
bukkitMap.put(net.minecraft.world.entity.animal.MushroomCow.class, MushroomCow.class);
bukkitMap.put(net.minecraft.world.entity.animal.Ocelot.class, Ocelot.class);
bukkitMap.put(net.minecraft.world.entity.animal.Panda.class, Panda.class);
bukkitMap.put(net.minecraft.world.entity.animal.Parrot.class, Parrot.class);
bukkitMap.put(net.minecraft.world.entity.PathfinderMob.class, Creature.class);
bukkitMap.put(net.minecraft.world.entity.monster.PatrollingMonster.class, Raider.class);
bukkitMap.put(net.minecraft.world.entity.monster.Phantom.class, Phantom.class);
bukkitMap.put(net.minecraft.world.entity.animal.Pig.class, Pig.class);
bukkitMap.put(net.minecraft.world.entity.monster.piglin.Piglin.class, Piglin.class);
bukkitMap.put(net.minecraft.world.entity.monster.piglin.PiglinBrute.class, PiglinBrute.class);
bukkitMap.put(net.minecraft.world.entity.monster.Pillager.class, Pillager.class);
bukkitMap.put(net.minecraft.world.entity.animal.PolarBear.class, PolarBear.class);
bukkitMap.put(net.minecraft.world.entity.animal.Pufferfish.class, PufferFish.class);
bukkitMap.put(net.minecraft.world.entity.animal.Rabbit.class, Rabbit.class);
bukkitMap.put(net.minecraft.world.entity.raid.Raider.class, Raider.class);
bukkitMap.put(net.minecraft.world.entity.monster.Ravager.class, Ravager.class);
bukkitMap.put(net.minecraft.world.entity.animal.Salmon.class, Salmon.class);
bukkitMap.put(net.minecraft.world.entity.animal.sheep.Sheep.class, Sheep.class);
bukkitMap.put(net.minecraft.world.entity.animal.ShoulderRidingEntity.class, Parrot.class);
bukkitMap.put(net.minecraft.world.entity.animal.SnowGolem.class, Snowman.class);
bukkitMap.put(net.minecraft.world.entity.animal.Squid.class, Squid.class);
bukkitMap.put(net.minecraft.world.entity.animal.TropicalFish.class, TropicalFish.class);
bukkitMap.put(net.minecraft.world.entity.animal.Turtle.class, Turtle.class);
bukkitMap.put(net.minecraft.world.entity.animal.WaterAnimal.class, WaterMob.class);
bukkitMap.put(net.minecraft.world.entity.animal.allay.Allay.class, Allay.class);
bukkitMap.put(net.minecraft.world.entity.animal.armadillo.Armadillo.class, Armadillo.class);
bukkitMap.put(net.minecraft.world.entity.animal.axolotl.Axolotl.class, Axolotl.class);
bukkitMap.put(net.minecraft.world.entity.animal.camel.Camel.class, Camel.class);
bukkitMap.put(net.minecraft.world.entity.animal.frog.Frog.class, Frog.class);
bukkitMap.put(net.minecraft.world.entity.animal.frog.Tadpole.class, Tadpole.class);
bukkitMap.put(net.minecraft.world.entity.animal.goat.Goat.class, Goat.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.AbstractChestedHorse.class, ChestedHorse.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.AbstractHorse.class, AbstractHorse.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.Donkey.class, Donkey.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.Horse.class, Horse.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.Llama.class, Llama.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.Mule.class, Mule.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.SkeletonHorse.class, SkeletonHorse.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.TraderLlama.class, TraderLlama.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.ZombieHorse.class, ZombieHorse.class);
bukkitMap.put(net.minecraft.world.entity.animal.sheep.Sheep.class, Sheep.class);
bukkitMap.put(net.minecraft.world.entity.animal.sniffer.Sniffer.class, Sniffer.class);
bukkitMap.put(net.minecraft.world.entity.animal.wolf.Wolf.class, Wolf.class);
bukkitMap.put(net.minecraft.world.entity.boss.enderdragon.EnderDragon.class, EnderDragon.class);
bukkitMap.put(net.minecraft.world.entity.boss.wither.WitherBoss.class, Wither.class);
bukkitMap.put(net.minecraft.world.entity.monster.AbstractIllager.class, Illager.class);
bukkitMap.put(net.minecraft.world.entity.monster.AbstractSkeleton.class, AbstractSkeleton.class);
bukkitMap.put(net.minecraft.world.entity.monster.Blaze.class, Blaze.class);
bukkitMap.put(net.minecraft.world.entity.monster.Bogged.class, Bogged.class);
bukkitMap.put(net.minecraft.world.entity.monster.CaveSpider.class, CaveSpider.class);
bukkitMap.put(net.minecraft.world.entity.monster.Creeper.class, Creeper.class);
bukkitMap.put(net.minecraft.world.entity.monster.Drowned.class, Drowned.class);
bukkitMap.put(net.minecraft.world.entity.monster.ElderGuardian.class, ElderGuardian.class);
bukkitMap.put(net.minecraft.world.entity.monster.EnderMan.class, Enderman.class);
bukkitMap.put(net.minecraft.world.entity.monster.Endermite.class, Endermite.class);
bukkitMap.put(net.minecraft.world.entity.monster.Evoker.class, Evoker.class);
bukkitMap.put(net.minecraft.world.entity.monster.Ghast.class, Ghast.class);
bukkitMap.put(net.minecraft.world.entity.monster.Giant.class, Giant.class);
bukkitMap.put(net.minecraft.world.entity.monster.Guardian.class, Guardian.class);
bukkitMap.put(net.minecraft.world.entity.monster.Husk.class, Husk.class);
bukkitMap.put(net.minecraft.world.entity.monster.Illusioner.class, Illusioner.class);
bukkitMap.put(net.minecraft.world.entity.monster.MagmaCube.class, MagmaCube.class);
bukkitMap.put(net.minecraft.world.entity.monster.Monster.class, Monster.class);
bukkitMap.put(net.minecraft.world.entity.monster.PatrollingMonster.class, Raider.class);
bukkitMap.put(net.minecraft.world.entity.monster.Phantom.class, Phantom.class);
bukkitMap.put(net.minecraft.world.entity.monster.Pillager.class, Pillager.class);
bukkitMap.put(net.minecraft.world.entity.monster.Ravager.class, Ravager.class);
bukkitMap.put(net.minecraft.world.entity.monster.Shulker.class, Shulker.class);
bukkitMap.put(net.minecraft.world.entity.monster.Silverfish.class, Silverfish.class);
bukkitMap.put(net.minecraft.world.entity.monster.Skeleton.class, Skeleton.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.SkeletonHorse.class, SkeletonHorse.class);
bukkitMap.put(net.minecraft.world.entity.monster.Slime.class, Slime.class);
bukkitMap.put(net.minecraft.world.entity.animal.sniffer.Sniffer.class, Sniffer.class);
bukkitMap.put(net.minecraft.world.entity.animal.SnowGolem.class, Snowman.class);
bukkitMap.put(net.minecraft.world.entity.monster.SpellcasterIllager.class, Spellcaster.class);
bukkitMap.put(net.minecraft.world.entity.monster.Spider.class, Spider.class);
bukkitMap.put(net.minecraft.world.entity.animal.Squid.class, Squid.class);
bukkitMap.put(net.minecraft.world.entity.monster.Stray.class, Stray.class);
bukkitMap.put(net.minecraft.world.entity.monster.Strider.class, Strider.class);
bukkitMap.put(net.minecraft.world.entity.animal.frog.Tadpole.class, Tadpole.class);
bukkitMap.put(net.minecraft.world.entity.TamableAnimal.class, Tameable.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.TraderLlama.class, TraderLlama.class);
bukkitMap.put(net.minecraft.world.entity.animal.TropicalFish.class, TropicalFish.class);
bukkitMap.put(net.minecraft.world.entity.animal.Turtle.class, Turtle.class);
bukkitMap.put(net.minecraft.world.entity.monster.Vex.class, Vex.class);
bukkitMap.put(net.minecraft.world.entity.npc.Villager.class, Villager.class);
bukkitMap.put(net.minecraft.world.entity.monster.Vindicator.class, Vindicator.class);
bukkitMap.put(net.minecraft.world.entity.npc.WanderingTrader.class, WanderingTrader.class);
bukkitMap.put(net.minecraft.world.entity.monster.warden.Warden.class, Warden.class);
bukkitMap.put(net.minecraft.world.entity.animal.WaterAnimal.class, WaterMob.class);
bukkitMap.put(net.minecraft.world.entity.monster.Witch.class, Witch.class);
bukkitMap.put(net.minecraft.world.entity.boss.wither.WitherBoss.class, Wither.class);
bukkitMap.put(net.minecraft.world.entity.monster.WitherSkeleton.class, WitherSkeleton.class);
bukkitMap.put(net.minecraft.world.entity.animal.wolf.Wolf.class, Wolf.class);
bukkitMap.put(net.minecraft.world.entity.monster.Zoglin.class, Zoglin.class);
bukkitMap.put(net.minecraft.world.entity.monster.Zombie.class, Zombie.class);
bukkitMap.put(net.minecraft.world.entity.animal.horse.ZombieHorse.class, ZombieHorse.class);
bukkitMap.put(net.minecraft.world.entity.monster.ZombieVillager.class, ZombieVillager.class);
bukkitMap.put(net.minecraft.world.entity.monster.ZombifiedPiglin.class, PigZombie.class);
bukkitMap.put(net.minecraft.world.entity.monster.breeze.Breeze.class, Breeze.class);
bukkitMap.put(net.minecraft.world.entity.monster.creaking.Creaking.class, Creaking.class);
bukkitMap.put(net.minecraft.world.entity.monster.hoglin.Hoglin.class, Hoglin.class);
bukkitMap.put(net.minecraft.world.entity.monster.piglin.AbstractPiglin.class, PiglinAbstract.class);
bukkitMap.put(net.minecraft.world.entity.monster.piglin.Piglin.class, Piglin.class);
bukkitMap.put(net.minecraft.world.entity.monster.piglin.PiglinBrute.class, PiglinBrute.class);
bukkitMap.put(net.minecraft.world.entity.monster.warden.Warden.class, Warden.class);
bukkitMap.put(net.minecraft.world.entity.npc.AbstractVillager.class, AbstractVillager.class);
bukkitMap.put(net.minecraft.world.entity.npc.Villager.class, Villager.class);
bukkitMap.put(net.minecraft.world.entity.npc.WanderingTrader.class, WanderingTrader.class);
bukkitMap.put(net.minecraft.world.entity.raid.Raider.class, Raider.class);
// End generate - MobGoalHelper#bukkitMap
//</editor-fold>
}