From d346e8c5489bc62d23c775f0cc29e8d8b6ec09e3 Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Sat, 19 Apr 2025 21:01:01 +0200 Subject: [PATCH] add task to format/update input files --- paper-generator/build.gradle.kts | 14 ++ .../java/io/papermc/generator/Rewriters.java | 2 +- .../types/simple/EntityTypeRewriter.java | 18 +- .../generator/types/goal/MobGoalNames.java | 8 +- .../generator/utils/BlockStateMapping.java | 30 +++- .../generator/utils/ItemPredicate.java | 29 ++-- .../generator/utils/PrepareInputFiles.java | 77 +++++++++ .../papermc/generator/utils/SourceCodecs.java | 6 +- .../resources/data/entity_class_names.json | 136 +++++++-------- .../resources/data/enum_property_types.json | 10 +- .../main/resources/data/item_meta/bridge.json | 158 +++++++++--------- .../generator/BlockStatePropertyTest.java | 7 +- .../io/papermc/generator/BootstrapTest.java | 13 ++ .../generator/MobGoalConverterTest.java | 4 +- .../paper/entity/ai/MobGoalHelper.java | 134 +++++++-------- 15 files changed, 387 insertions(+), 259 deletions(-) create mode 100644 paper-generator/src/main/java/io/papermc/generator/utils/PrepareInputFiles.java create mode 100644 paper-generator/src/test/java/io/papermc/generator/BootstrapTest.java diff --git a/paper-generator/build.gradle.kts b/paper-generator/build.gradle.kts index 1cdb398e44..09425a0222 100644 --- a/paper-generator/build.gradle.kts +++ b/paper-generator/build.gradle.kts @@ -77,6 +77,20 @@ tasks.register("generate") { dependsOn(generateApi, generateImpl) } +tasks.register("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" diff --git a/paper-generator/src/main/java/io/papermc/generator/Rewriters.java b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java index 648960e7dd..d7121a6236 100644 --- a/paper-generator/src/main/java/io/papermc/generator/Rewriters.java +++ b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java @@ -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, ClassName> entry : MobGoalNames.ENTITY_NAMES.entrySet()) { + for (Map.Entry, 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())) )); diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/EntityTypeRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/EntityTypeRewriter.java index 6f597a2cef..bc02b0afaa 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/EntityTypeRewriter.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/EntityTypeRewriter.java @@ -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> { - 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 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 CLASS_ONLY_CODEC = SourceCodecs.CLASS_NAMED.xmap(Data::new, Data::api); - public static final Codec CODEC = Codec.withAlternative(CLASS_ONLY_CODEC, DIRECT_CODEC); + public static final Codec 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>, Data> DATA; - private static final Codec>, Data>> DATA_CODEC = Codec.unboundedMap(ResourceKey.codec(Registries.ENTITY_TYPE), Data.CODEC); + public static final Codec>, 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); diff --git a/paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java b/paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java index 91ad8d210d..a940d35070 100644 --- a/paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java +++ b/paper-generator/src/main/java/io/papermc/generator/types/goal/MobGoalNames.java @@ -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, ClassName> entityClassCache = new HashMap<>(); - public static final Map, ClassName> ENTITY_NAMES; - private static final Codec, ClassName>> ENTITY_NAMES_CODEC = Codec.unboundedMap( + public static final Map, ClassName> ENTITY_CLASS_NAMES; + public static final Codec, 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 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? } diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/BlockStateMapping.java b/paper-generator/src/main/java/io/papermc/generator/utils/BlockStateMapping.java index 5d2fbe1f31..79c1ffc2b8 100644 --- a/paper-generator/src/main/java/io/papermc/generator/utils/BlockStateMapping.java +++ b/paper-generator/src/main/java/io/papermc/generator/utils/BlockStateMapping.java @@ -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 field, Optional name, ClassNamed api, boolean pure) { + public record PropertyData(Optional field, Optional name, ClassNamed api, boolean pure) implements Comparable { // todo either? fieldOrName but keep them separate in the codec - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final Codec 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 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 NAME_TO_DATA; private static final Map, ClassNamed> PROPERTY_TO_DATA; private static final Map, ClassNamed> MAIN_PROPERTY_TO_DATA; + public static final Codec> PROPERTY_DATA_CODEC = PropertyData.CODEC.listOf(); static { List 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); } diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/ItemPredicate.java b/paper-generator/src/main/java/io/papermc/generator/utils/ItemPredicate.java index aad0465ff9..9a5db1f534 100644 --- a/paper-generator/src/main/java/io/papermc/generator/utils/ItemPredicate.java +++ b/paper-generator/src/main/java/io/papermc/generator/utils/ItemPredicate.java @@ -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 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 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 CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( ITEM_TAG_OR_ELEMENT_ID.fieldOf("value").forGetter(IsElementPredicate::value) diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/PrepareInputFiles.java b/paper-generator/src/main/java/io/papermc/generator/utils/PrepareInputFiles.java new file mode 100644 index 0000000000..a8a8d7cb73 --- /dev/null +++ b/paper-generator/src/main/java/io/papermc/generator/utils/PrepareInputFiles.java @@ -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 transmute(A value); + } + + private record DataFile(String path, Codec codec, Transmuter transmuter) { + + public A transmuteRaw(Object value) { + return this.transmuter.transmute((A) value); + } + } + + private static Transmuter> transmuteMap(Comparator comparator) { + return value -> { + TreeMap map = new TreeMap<>(comparator); + map.putAll(value); + return map; + }; + } + + private static final List> DATA_FILES = List.of( + new DataFile<>("block_state_properties.json", BlockStateMapping.PROPERTY_DATA_CODEC, value -> { + List 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> 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) 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); + } + } + } +} diff --git a/paper-generator/src/main/java/io/papermc/generator/utils/SourceCodecs.java b/paper-generator/src/main/java/io/papermc/generator/utils/SourceCodecs.java index 87d9d2bf45..eeddf6fe42 100644 --- a/paper-generator/src/main/java/io/papermc/generator/utils/SourceCodecs.java +++ b/paper-generator/src/main/java/io/papermc/generator/utils/SourceCodecs.java @@ -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 Codec> classCodec(Class baseClass) { return CLASS.comapFlatMap(klass -> { diff --git a/paper-generator/src/main/resources/data/entity_class_names.json b/paper-generator/src/main/resources/data/entity_class_names.json index 3807ba8408..d668df521f 100644 --- a/paper-generator/src/main/resources/data/entity_class_names.json +++ b/paper-generator/src/main/resources/data/entity_class_names.json @@ -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" } diff --git a/paper-generator/src/main/resources/data/enum_property_types.json b/paper-generator/src/main/resources/data/enum_property_types.json index 7db436deaa..54fce84313 100644 --- a/paper-generator/src/main/resources/data/enum_property_types.json +++ b/paper-generator/src/main/resources/data/enum_property_types.json @@ -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" } diff --git a/paper-generator/src/main/resources/data/item_meta/bridge.json b/paper-generator/src/main/resources/data/item_meta/bridge.json index 6a7f1a6efc..1f5eff93c3 100644 --- a/paper-generator/src/main/resources/data/item_meta/bridge.json +++ b/paper-generator/src/main/resources/data/item_meta/bridge.json @@ -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" } } diff --git a/paper-generator/src/test/java/io/papermc/generator/BlockStatePropertyTest.java b/paper-generator/src/test/java/io/papermc/generator/BlockStatePropertyTest.java index 766ef849ba..cb81650490 100644 --- a/paper-generator/src/test/java/io/papermc/generator/BlockStatePropertyTest.java +++ b/paper-generator/src/test/java/io/papermc/generator/BlockStatePropertyTest.java @@ -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>> ENUM_PROPERTY_VALUES; @BeforeAll public static void getAllProperties() { - // bootstrap - SharedConstants.tryDetectVersion(); - Bootstrap.bootStrap(); - Bootstrap.validate(); - // get all properties Set>> enumPropertyValues = Collections.newSetFromMap(new IdentityHashMap<>()); try { diff --git a/paper-generator/src/test/java/io/papermc/generator/BootstrapTest.java b/paper-generator/src/test/java/io/papermc/generator/BootstrapTest.java new file mode 100644 index 0000000000..58feb4a3a0 --- /dev/null +++ b/paper-generator/src/test/java/io/papermc/generator/BootstrapTest.java @@ -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(); + } +} diff --git a/paper-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java b/paper-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java index 98333fe9e0..76e7fab63c 100644 --- a/paper-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java +++ b/paper-generator/src/test/java/io/papermc/generator/MobGoalConverterTest.java @@ -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 missingClasses = new ArrayList<>(); for (Class nmsClass : classes) { - if (!MobGoalNames.ENTITY_NAMES.containsKey(nmsClass)) { + if (!MobGoalNames.ENTITY_CLASS_NAMES.containsKey(nmsClass)) { missingClasses.add(nmsClass.getCanonicalName()); } } diff --git a/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java index b2da03d756..5ff561d3d3 100644 --- a/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/paper-server/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java @@ -37,113 +37,113 @@ public class MobGoalHelper { // // 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 // }