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) 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()) { if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) {
val scanOldGeneratedSourceCode by tasks.registering(JavaExec::class) { val scanOldGeneratedSourceCode by tasks.registering(JavaExec::class) {
group = "verification" group = "verification"

View File

@ -182,7 +182,7 @@ public final class Rewriters {
.register("MobGoalHelper#bukkitMap", Types.MOB_GOAL_HELPER, new SearchReplaceRewriter() { .register("MobGoalHelper#bukkitMap", Types.MOB_GOAL_HELPER, new SearchReplaceRewriter() {
@Override @Override
protected void insert(SearchMetadata metadata, StringBuilder builder) { 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( builder.append(metadata.indent()).append("bukkitMap.put(%s.class, %s.class);".formatted(
entry.getKey().getCanonicalName(), this.importCollector.getShortName(Types.typed(entry.getValue())) entry.getKey().getCanonicalName(), this.importCollector.getShortName(Types.typed(entry.getValue()))
)); ));

View File

@ -1,6 +1,7 @@
package io.papermc.generator.rewriter.types.simple; package io.papermc.generator.rewriter.types.simple;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.mojang.datafixers.util.Either;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.JsonOps; import com.mojang.serialization.JsonOps;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
@ -26,24 +27,31 @@ import static io.papermc.generator.utils.Formatting.quoted;
public class EntityTypeRewriter extends EnumRegistryRewriter<EntityType<?>> { 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) { public Data(ClassNamed api) {
this(api, -1); this(api, NO_LEGACY_ID);
} }
public static final Codec<Data> DIRECT_CODEC = RecordCodecBuilder.create(instance -> instance.group( public static final Codec<Data> DIRECT_CODEC = RecordCodecBuilder.create(instance -> instance.group(
SourceCodecs.CLASS_NAMED.fieldOf("api").forGetter(Data::api), 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)); ).apply(instance, Data::new));
private static final Codec<Data> CLASS_ONLY_CODEC = SourceCodecs.CLASS_NAMED.xmap(Data::new, Data::api); 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 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 { static {
try (Reader input = new BufferedReader(new InputStreamReader(EntityTypeRewriter.class.getClassLoader().getResourceAsStream("data/entity_types.json")))) { try (Reader input = new BufferedReader(new InputStreamReader(EntityTypeRewriter.class.getClassLoader().getResourceAsStream("data/entity_types.json")))) {
JsonObject registries = SourceCodecs.GSON.fromJson(input, JsonObject.class); 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 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<>(); private static final Map<Class<? extends Goal>, ClassName> entityClassCache = new HashMap<>();
public static final Map<Class<? extends Mob>, ClassName> ENTITY_NAMES; public static final Map<Class<? extends Mob>, ClassName> ENTITY_CLASS_NAMES;
private static final Codec<Map<Class<? extends Mob>, ClassName>> ENTITY_NAMES_CODEC = Codec.unboundedMap( public static final Codec<Map<Class<? extends Mob>, ClassName>> ENTITY_CLASS_NAMES_CODEC = Codec.unboundedMap(
SourceCodecs.classCodec(Mob.class), SourceCodecs.CLASS_NAME SourceCodecs.classCodec(Mob.class), SourceCodecs.CLASS_NAME
); );
static { static {
try (Reader input = new BufferedReader(new InputStreamReader(MobGoalNames.class.getClassLoader().getResourceAsStream("data/entity_class_names.json")))) { try (Reader input = new BufferedReader(new InputStreamReader(MobGoalNames.class.getClassLoader().getResourceAsStream("data/entity_class_names.json")))) {
JsonObject names = SourceCodecs.GSON.fromJson(input, JsonObject.class); 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) { } catch (IOException ex) {
throw new RuntimeException(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) { 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) { if (bukkitClass == null) {
throw new RuntimeException("Can't figure out applicable bukkit entity for nms entity " + nmsClass); // maybe just return Mob? 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.google.gson.JsonObject;
import com.mojang.datafixers.util.Either; import com.mojang.datafixers.util.Either;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.JsonOps; import com.mojang.serialization.JsonOps;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import io.papermc.generator.types.craftblockdata.property.holder.VirtualField; 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.RedstoneRail;
import org.bukkit.block.data.type.ResinClump; import org.bukkit.block.data.type.ResinClump;
import org.bukkit.block.data.type.Switch;*/ import org.bukkit.block.data.type.Switch;*/
import org.jetbrains.annotations.NotNull;
import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable; import org.jspecify.annotations.Nullable;
@ -180,14 +182,35 @@ public final class BlockStateMapping {
MAPPING = Collections.unmodifiableMap(map); 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), SourceCodecs.IDENTIFIER.optionalFieldOf("field").forGetter(PropertyData::field),
Codec.STRING.optionalFieldOf("name").forGetter(PropertyData::name), Codec.STRING.optionalFieldOf("name").forGetter(PropertyData::name),
SourceCodecs.CLASS_NAMED.fieldOf("api").forGetter(PropertyData::api), SourceCodecs.CLASS_NAMED.fieldOf("api").forGetter(PropertyData::api),
Codec.BOOL.optionalFieldOf("pure", false).forGetter(PropertyData::pure) Codec.BOOL.optionalFieldOf("pure", false).forGetter(PropertyData::pure)
).apply(instance, PropertyData::new)); ).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 // 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<String, ClassNamed> NAME_TO_DATA;
private static final Map<Property<?>, ClassNamed> PROPERTY_TO_DATA; private static final Map<Property<?>, ClassNamed> PROPERTY_TO_DATA;
private static final Map<Property<?>, ClassNamed> MAIN_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 { static {
List<PropertyData> propertyData; List<PropertyData> propertyData;
try (Reader input = new BufferedReader(new InputStreamReader(BlockStateMapping.class.getClassLoader().getResourceAsStream("data/block_state_properties.json")))) { try (Reader input = new BufferedReader(new InputStreamReader(BlockStateMapping.class.getClassLoader().getResourceAsStream("data/block_state_properties.json")))) {
JsonArray properties = SourceCodecs.GSON.fromJson(input, JsonArray.class); 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) { } catch (IOException ex) {
throw new RuntimeException(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.DataResult;
import com.mojang.serialization.MapCodec; import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import io.papermc.generator.Main;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
import net.minecraft.util.ExtraCodecs; import net.minecraft.util.ExtraCodecs;
import net.minecraft.util.StringRepresentable; import net.minecraft.util.StringRepresentable;
@ -96,23 +93,21 @@ public sealed interface ItemPredicate permits ItemPredicate.IsClassPredicate, It
record IsElementPredicate(ExtraCodecs.TagOrElementLocation value) implements ItemPredicate { record IsElementPredicate(ExtraCodecs.TagOrElementLocation value) implements ItemPredicate {
private static final Codec<ExtraCodecs.TagOrElementLocation> ITEM_TAG_OR_ELEMENT_ID = ExtraCodecs.TAG_OR_ELEMENT_ID.validate( private static final Codec<ExtraCodecs.TagOrElementLocation> ITEM_TAG_OR_ELEMENT_ID = ExtraCodecs.TAG_OR_ELEMENT_ID.validate(value -> {
value -> { if (value.tag()) {
if (value.tag()) { if (BuiltInRegistries.ITEM.get(TagKey.create(Registries.ITEM, value.id())).isPresent()) {
if (BuiltInRegistries.ITEM.get(TagKey.create(Registries.ITEM, value.id())).isPresent()) { return DataResult.success(value);
return DataResult.success(value);
} else {
return DataResult.error(() -> "Invalid tag id: " + value);
}
} else { } else {
if (BuiltInRegistries.ITEM.get(value.id()).isPresent()) { return DataResult.error(() -> "Invalid tag id: " + value);
return DataResult.success(value); }
} else { } else {
return DataResult.error(() -> "Invalid element id: " + value); 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( public static final MapCodec<IsElementPredicate> CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group(
ITEM_TAG_OR_ELEMENT_ID.fieldOf("value").forGetter(IsElementPredicate::value) 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; package io.papermc.generator.utils;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import com.google.gson.FormattingStyle;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult; import com.mojang.serialization.DataResult;
import com.squareup.javapoet.ClassName; import com.squareup.javapoet.ClassName;
import io.papermc.generator.types.SimpleGenerator;
import io.papermc.typewriter.ClassNamed; import io.papermc.typewriter.ClassNamed;
import javax.lang.model.SourceVersion; import javax.lang.model.SourceVersion;
public final class SourceCodecs { 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() { private SourceCodecs() {
} }
@ -30,7 +32,7 @@ public final class SourceCodecs {
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
return DataResult.error(() -> "Class not found: %s".formatted(e.getMessage())); 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) { public static <T> Codec<Class<? extends T>> classCodec(Class<T> baseClass) {
return CLASS.comapFlatMap(klass -> { 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.AbstractCow": "org.bukkit.entity.AbstractCow",
"net.minecraft.world.entity.animal.AbstractFish": "org.bukkit.entity.Fish", "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.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.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.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.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.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.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.Chicken": "org.bukkit.entity.Chicken",
"net.minecraft.world.entity.animal.Cod": "org.bukkit.entity.Cod", "net.minecraft.world.entity.animal.Cod": "org.bukkit.entity.Cod",
"net.minecraft.world.entity.animal.Cow": "org.bukkit.entity.Cow", "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.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.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.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.MushroomCow": "org.bukkit.entity.MushroomCow",
"net.minecraft.world.entity.animal.Ocelot": "org.bukkit.entity.Ocelot", "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.Panda": "org.bukkit.entity.Panda",
"net.minecraft.world.entity.animal.Parrot": "org.bukkit.entity.Parrot", "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.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.PolarBear": "org.bukkit.entity.PolarBear",
"net.minecraft.world.entity.animal.Pufferfish": "org.bukkit.entity.PufferFish", "net.minecraft.world.entity.animal.Pufferfish": "org.bukkit.entity.PufferFish",
"net.minecraft.world.entity.animal.Rabbit": "org.bukkit.entity.Rabbit", "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.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.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.Shulker": "org.bukkit.entity.Shulker",
"net.minecraft.world.entity.monster.Silverfish": "org.bukkit.entity.Silverfish", "net.minecraft.world.entity.monster.Silverfish": "org.bukkit.entity.Silverfish",
"net.minecraft.world.entity.monster.Skeleton": "org.bukkit.entity.Skeleton", "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.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.SpellcasterIllager": "org.bukkit.entity.Spellcaster",
"net.minecraft.world.entity.monster.Spider": "org.bukkit.entity.Spider", "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.Stray": "org.bukkit.entity.Stray",
"net.minecraft.world.entity.monster.Strider": "org.bukkit.entity.Strider", "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.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.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.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.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.Zoglin": "org.bukkit.entity.Zoglin",
"net.minecraft.world.entity.monster.Zombie": "org.bukkit.entity.Zombie", "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.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.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.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.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.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.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.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.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.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.DoubleBlockHalf": "org.bukkit.block.data.Bisected.Half",
"net.minecraft.world.level.block.state.properties.DripstoneThickness": "org.bukkit.block.data.type.PointedDripstone.Thickness", "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.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.NoteBlockInstrument": "org.bukkit.Instrument",
"net.minecraft.world.level.block.state.properties.PistonType": "org.bukkit.block.data.type.TechnicalPiston.Type", "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.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.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.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" "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": { "org.bukkit.craftbukkit.inventory.CraftMetaArmor": {
"api": "org.bukkit.inventory.meta.ArmorMeta", "api": "org.bukkit.inventory.meta.ArmorMeta",
"field": "ARMOR_META_DATA" "field": "ARMOR_META_DATA"
}, },
"org.bukkit.craftbukkit.inventory.CraftMetaColorableArmor": { "org.bukkit.craftbukkit.inventory.CraftMetaArmorStand": {
"api": "org.bukkit.inventory.meta.ColorableArmorMeta", "api": "com.destroystokyo.paper.inventory.meta.ArmorStandMeta",
"field": "COLORABLE_ARMOR_META_DATA" "field": "ARMOR_STAND_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.CraftMetaAxolotlBucket": { "org.bukkit.craftbukkit.inventory.CraftMetaAxolotlBucket": {
"api": "org.bukkit.inventory.meta.AxolotlBucketMeta", "api": "org.bukkit.inventory.meta.AxolotlBucketMeta",
"field": "AXOLOTL_BUCKET_META_DATA" "field": "AXOLOTL_BUCKET_META_DATA"
}, },
"org.bukkit.craftbukkit.inventory.CraftMetaCrossbow": { "org.bukkit.craftbukkit.inventory.CraftMetaBanner": {
"api": "org.bukkit.inventory.meta.CrossbowMeta", "api": "org.bukkit.inventory.meta.BannerMeta",
"field": "CROSSBOW_META_DATA" "field": "BANNER_META_DATA"
}, },
"org.bukkit.craftbukkit.inventory.CraftMetaSuspiciousStew": { "org.bukkit.craftbukkit.inventory.CraftMetaBlockState": {
"api": "org.bukkit.inventory.meta.SuspiciousStewMeta", "api": "org.bukkit.inventory.meta.BlockStateMeta",
"field": "SUSPICIOUS_STEW_META_DATA" "field": "BLOCK_STATE_META_DATA"
}, },
"org.bukkit.craftbukkit.inventory.CraftMetaEntityTag": { "org.bukkit.craftbukkit.inventory.CraftMetaBook": {
"api": "org.bukkit.inventory.meta.ItemMeta", "api": "org.bukkit.inventory.meta.BookMeta",
"field": "ENTITY_TAG_META_DATA" "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": { "org.bukkit.craftbukkit.inventory.CraftMetaCompass": {
"api": "org.bukkit.inventory.meta.CompassMeta", "api": "org.bukkit.inventory.meta.CompassMeta",
"field": "COMPASS_META_DATA" "field": "COMPASS_META_DATA"
}, },
"org.bukkit.craftbukkit.inventory.CraftMetaBundle": { "org.bukkit.craftbukkit.inventory.CraftMetaCrossbow": {
"api": "org.bukkit.inventory.meta.BundleMeta", "api": "org.bukkit.inventory.meta.CrossbowMeta",
"field": "BUNDLE_META_DATA" "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": { "org.bukkit.craftbukkit.inventory.CraftMetaMusicInstrument": {
"api": "org.bukkit.inventory.meta.MusicInstrumentMeta", "api": "org.bukkit.inventory.meta.MusicInstrumentMeta",
@ -102,5 +78,29 @@
"org.bukkit.craftbukkit.inventory.CraftMetaOminousBottle": { "org.bukkit.craftbukkit.inventory.CraftMetaOminousBottle": {
"api": "org.bukkit.inventory.meta.OminousBottleMeta", "api": "org.bukkit.inventory.meta.OminousBottleMeta",
"field": "OMINOUS_BOTTLE_META_DATA" "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.BeforeAll;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
public class BlockStatePropertyTest { public class BlockStatePropertyTest extends BootstrapTest {
private static Set<Class<? extends Comparable<?>>> ENUM_PROPERTY_VALUES; private static Set<Class<? extends Comparable<?>>> ENUM_PROPERTY_VALUES;
@BeforeAll @BeforeAll
public static void getAllProperties() { public static void getAllProperties() {
// bootstrap
SharedConstants.tryDetectVersion();
Bootstrap.bootStrap();
Bootstrap.validate();
// get all properties // get all properties
Set<Class<? extends Comparable<?>>> enumPropertyValues = Collections.newSetFromMap(new IdentityHashMap<>()); Set<Class<? extends Comparable<?>>> enumPropertyValues = Collections.newSetFromMap(new IdentityHashMap<>());
try { 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.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
public class MobGoalConverterTest { public class MobGoalConverterTest extends BootstrapTest {
@Test @Test
public void testBukkitMap() { public void testBukkitMap() {
@ -25,7 +25,7 @@ public class MobGoalConverterTest {
List<String> missingClasses = new ArrayList<>(); List<String> missingClasses = new ArrayList<>();
for (Class<Mob> nmsClass : classes) { for (Class<Mob> nmsClass : classes) {
if (!MobGoalNames.ENTITY_NAMES.containsKey(nmsClass)) { if (!MobGoalNames.ENTITY_CLASS_NAMES.containsKey(nmsClass)) {
missingClasses.add(nmsClass.getCanonicalName()); missingClasses.add(nmsClass.getCanonicalName());
} }
} }

View File

@ -37,113 +37,113 @@ public class MobGoalHelper {
//<editor-fold defaultstate="collapsed" desc="bukkitMap Entities"> //<editor-fold defaultstate="collapsed" desc="bukkitMap Entities">
// Start generate - MobGoalHelper#bukkitMap // Start generate - MobGoalHelper#bukkitMap
// @GeneratedFrom 1.21.5 // @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.AbstractCow.class, AbstractCow.class);
bukkitMap.put(net.minecraft.world.entity.animal.AbstractFish.class, Fish.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.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.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.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.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.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.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.Chicken.class, Chicken.class);
bukkitMap.put(net.minecraft.world.entity.animal.Cod.class, Cod.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.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.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.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.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.MushroomCow.class, MushroomCow.class);
bukkitMap.put(net.minecraft.world.entity.animal.Ocelot.class, Ocelot.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.Panda.class, Panda.class);
bukkitMap.put(net.minecraft.world.entity.animal.Parrot.class, Parrot.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.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.PolarBear.class, PolarBear.class);
bukkitMap.put(net.minecraft.world.entity.animal.Pufferfish.class, PufferFish.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.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.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.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.Shulker.class, Shulker.class);
bukkitMap.put(net.minecraft.world.entity.monster.Silverfish.class, Silverfish.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.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.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.SpellcasterIllager.class, Spellcaster.class);
bukkitMap.put(net.minecraft.world.entity.monster.Spider.class, Spider.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.Stray.class, Stray.class);
bukkitMap.put(net.minecraft.world.entity.monster.Strider.class, Strider.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.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.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.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.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.Zoglin.class, Zoglin.class);
bukkitMap.put(net.minecraft.world.entity.monster.Zombie.class, Zombie.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.ZombieVillager.class, ZombieVillager.class);
bukkitMap.put(net.minecraft.world.entity.monster.ZombifiedPiglin.class, PigZombie.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 // End generate - MobGoalHelper#bukkitMap
//</editor-fold> //</editor-fold>
} }