From 9c661047b681d080a05abdd69ea1f9c92b751c3e Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sat, 27 Dec 2025 03:45:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=A8=A1=E5=9E=8B=E5=AE=9A?= =?UTF-8?q?=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bukkit/build.gradle.kts | 8 +- .../BukkitCompatibilityManager.java | 6 +- .../bukkit/block/BlockEventListener.java | 5 +- .../bukkit/block/BukkitBlockManager.java | 2 +- .../bukkit/block/BukkitCustomBlock.java | 2 +- .../behavior/DropExperienceBlockBehavior.java | 4 +- .../ArmorStandFurnitureElementConfig.java | 4 +- .../ItemDisplayFurnitureElementConfig.java | 4 +- .../element/ItemFurnitureElementConfig.java | 4 +- .../TextDisplayFurnitureElementConfig.java | 4 +- .../bukkit/item/BukkitCustomItem.java | 2 +- .../item/behavior/BlockItemBehavior.java | 2 +- .../item/behavior/FurnitureItemBehavior.java | 2 +- .../item/listener/ItemEventListener.java | 2 +- .../plugin/network/BukkitNetworkManager.java | 6 +- core/build.gradle.kts | 24 ++-- .../core/block/AbstractBlockManager.java | 6 +- .../core/block/AbstractCustomBlock.java | 2 +- .../craftengine/core/block/CustomBlock.java | 2 +- .../furniture/AbstractFurnitureManager.java | 4 +- .../entity/furniture/CustomFurniture.java | 2 +- .../entity/furniture/CustomFurnitureImpl.java | 2 +- .../core/item/AbstractCustomItem.java | 2 +- .../core/item/AbstractItemManager.java | 15 ++- .../craftengine/core/item/CustomItem.java | 2 +- .../craftengine/core/item/ItemManager.java | 4 +- .../item/processor/ConditionalProcessor.java | 4 +- .../item/processor/lore/LoreProcessor.java | 4 +- .../item/recipe/AbstractRecipeSerializer.java | 8 +- .../core/pack/AbstractPackManager.java | 10 +- .../ResolutionMergeLegacyModel.java | 2 +- .../core/pack/host/impl/AlistHost.java | 4 +- .../core/pack/host/impl/DropboxHost.java | 4 +- .../core/pack/host/impl/ExternalHost.java | 4 +- .../core/pack/host/impl/GitLabHost.java | 4 +- .../core/pack/host/impl/LobFileHost.java | 4 +- .../core/pack/host/impl/NoneHost.java | 4 +- .../core/pack/host/impl/OneDriveHost.java | 4 +- .../core/pack/host/impl/S3HostFactory.java | 2 +- .../core/pack/host/impl/SelfHost.java | 4 +- .../core/pack/model/ItemModels.java | 82 ------------- .../model/condition/ConditionProperties.java | 87 ------------- .../model/{ => definition}/BaseItemModel.java | 35 +++--- .../BundleSelectedItemModel.java | 20 ++- .../{ => definition}/CompositeItemModel.java | 22 ++-- .../{ => definition}/ConditionItemModel.java | 24 ++-- .../{ => definition}/EmptyItemModel.java | 22 ++-- .../model/{ => definition}/ItemModel.java | 4 +- .../{ => definition}/ItemModelFactory.java | 3 +- .../{ => definition}/ItemModelReader.java | 3 +- .../pack/model/definition/ItemModelType.java | 6 + .../pack/model/definition/ItemModels.java | 62 ++++++++++ .../{ => definition}/ModernItemModel.java | 12 +- .../RangeDispatchItemModel.java | 26 ++-- .../{ => definition}/SelectItemModel.java | 24 ++-- .../{ => definition}/SpecialItemModel.java | 29 ++--- .../condition/BrokenConditionProperty.java | 22 ++-- .../condition/ComponentConditionProperty.java | 24 ++-- .../condition/ConditionProperties.java | 58 +++++++++ .../condition/ConditionProperty.java | 4 +- .../condition/ConditionPropertyFactory.java | 2 +- .../condition/ConditionPropertyReader.java | 2 +- .../condition/ConditionPropertyType.java | 6 + .../CustomModelDataConditionProperty.java | 20 +-- .../condition/DamagedConditionProperty.java | 22 ++-- .../HasComponentConditionProperty.java | 29 ++--- .../KeyBindDownConditionProperty.java | 22 ++-- .../condition/RodCastConditionProperty.java | 22 ++-- .../condition/SimpleConditionProperty.java | 15 ++- .../condition/UsingItemConditionProperty.java | 22 ++-- .../CompassRangeDispatchProperty.java | 24 ++-- .../CrossBowPullingRangeDispatchProperty.java | 24 ++-- .../CustomModelDataRangeDispatchProperty.java | 24 ++-- .../DamageRangeDispatchProperty.java | 22 ++-- .../NormalizeRangeDispatchProperty.java | 23 ++-- .../RangeDispatchProperties.java | 54 +++++++++ .../rangedisptach/RangeDispatchProperty.java | 5 +- .../RangeDispatchPropertyFactory.java | 2 +- .../RangeDispatchPropertyReader.java | 2 +- .../RangeDispatchPropertyType.java | 6 + .../SimpleRangeDispatchProperty.java | 23 ++-- .../TimeRangeDispatchProperty.java | 28 +++-- .../UseCycleRangeDispatchProperty.java | 22 ++-- .../UseDurationRangeDispatchProperty.java | 24 ++-- .../select/BlockStateSelectProperty.java | 22 ++-- .../select/ChargeTypeSelectProperty.java | 22 ++-- .../select/ComponentSelectProperty.java | 20 +-- .../select/CustomModelDataSelectProperty.java | 22 ++-- .../select/DisplayContextSelectProperty.java | 20 ++- .../select/LocalTimeSelectProperty.java | 28 +++-- .../select/MainHandSelectProperty.java | 22 ++-- .../definition/select/SelectProperties.java | 54 +++++++++ .../select/SelectProperty.java | 5 +- .../select/SelectPropertyFactory.java | 2 +- .../select/SelectPropertyReader.java | 2 +- .../definition/select/SelectPropertyType.java | 6 + .../select/SimpleSelectProperty.java | 17 ++- .../select/TrimMaterialSelectProperty.java | 65 ++++++++++ .../special/BannerSpecialModel.java | 20 +-- .../special/BedSpecialModel.java | 22 ++-- .../special/ChestSpecialModel.java | 30 +++-- .../CopperGolemStatueSpecialModel.java | 24 ++-- .../special/HeadSpecialModel.java | 28 +++-- .../special/PlayerHeadSpecialModel.java | 25 ++-- .../special/ShulkerBoxSpecialModel.java | 32 +++-- .../special/SignSpecialModel.java | 25 ++-- .../special/SimpleSpecialModel.java | 17 ++- .../special/SpecialModel.java | 5 +- .../special/SpecialModelFactory.java | 2 +- .../special/SpecialModelReader.java | 2 +- .../definition/special/SpecialModelType.java | 6 + .../definition/special/SpecialModels.java | 57 +++++++++ .../{ => definition}/tint/ConstantTint.java | 22 ++-- .../tint/CustomModelDataTint.java | 26 ++-- .../{ => definition}/tint/GrassTint.java | 20 +-- .../tint/SimpleDefaultTint.java | 21 ++-- .../model/{ => definition}/tint/Tint.java | 4 +- .../{ => definition}/tint/TintFactory.java | 2 +- .../{ => definition}/tint/TintReader.java | 2 +- .../pack/model/definition/tint/TintType.java | 6 + .../pack/model/definition/tint/Tints.java | 52 ++++++++ .../model/{ => legacy}/LegacyItemModel.java | 2 +- .../{ => legacy}/LegacyModelPredicate.java | 2 +- .../{ => legacy}/LegacyOverridesModel.java | 2 +- .../RangeDispatchProperties.java | 78 ------------ .../pack/model/select/SelectProperties.java | 78 ------------ .../select/TrimMaterialSelectProperty.java | 67 ---------- .../pack/model/special/SpecialModels.java | 87 ------------- .../core/pack/model/tint/Tints.java | 72 ----------- .../core/plugin/context/CommonConditions.java | 68 +++++++++++ .../core/plugin/context/CommonFunctions.java | 113 +++++++++++++++++ .../context/{event => }/EventTrigger.java | 2 +- .../plugin/context/event/EventConditions.java | 70 ----------- .../plugin/context/event/EventFunctions.java | 114 ------------------ .../function/RotateFurnitureFunction.java | 8 +- .../number/BinomialNumberProvider.java | 4 +- .../number/ExpressionNumberProvider.java | 4 +- .../context/number/FixedNumberProvider.java | 4 +- .../number/GaussianNumberProvider.java | 4 +- .../context/number/NumberProviders.java | 2 +- .../context/number/UniformNumberProvider.java | 4 +- .../gui/category/ItemBrowserManagerImpl.java | 8 +- .../core/registry/BuiltInRegistries.java | 42 +++---- .../craftengine/core/registry/Registries.java | 42 +++---- 144 files changed, 1353 insertions(+), 1479 deletions(-) delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModels.java delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionProperties.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/BaseItemModel.java (80%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/BundleSelectedItemModel.java (64%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/CompositeItemModel.java (85%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/ConditionItemModel.java (83%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/EmptyItemModel.java (65%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/ItemModel.java (88%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/ItemModelFactory.java (58%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/ItemModelReader.java (57%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelType.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModels.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/ModernItemModel.java (89%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/RangeDispatchItemModel.java (88%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/SelectItemModel.java (92%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/SpecialItemModel.java (79%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/BrokenConditionProperty.java (54%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/ComponentConditionProperty.java (68%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionProperties.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/ConditionProperty.java (70%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/ConditionPropertyFactory.java (64%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/ConditionPropertyReader.java (64%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyType.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/CustomModelDataConditionProperty.java (60%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/DamagedConditionProperty.java (50%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/HasComponentConditionProperty.java (67%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/KeyBindDownConditionProperty.java (57%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/RodCastConditionProperty.java (53%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/SimpleConditionProperty.java (59%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/condition/UsingItemConditionProperty.java (60%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/CompassRangeDispatchProperty.java (66%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/CrossBowPullingRangeDispatchProperty.java (54%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/CustomModelDataRangeDispatchProperty.java (57%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/DamageRangeDispatchProperty.java (66%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/NormalizeRangeDispatchProperty.java (65%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchProperties.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/RangeDispatchProperty.java (52%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/RangeDispatchPropertyFactory.java (64%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/RangeDispatchPropertyReader.java (64%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyType.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/SimpleRangeDispatchProperty.java (58%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/TimeRangeDispatchProperty.java (62%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/UseCycleRangeDispatchProperty.java (56%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/rangedisptach/UseDurationRangeDispatchProperty.java (62%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/BlockStateSelectProperty.java (58%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/ChargeTypeSelectProperty.java (55%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/ComponentSelectProperty.java (62%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/CustomModelDataSelectProperty.java (56%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/DisplayContextSelectProperty.java (71%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/LocalTimeSelectProperty.java (72%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/MainHandSelectProperty.java (52%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectProperties.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/SelectProperty.java (83%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/SelectPropertyFactory.java (64%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/SelectPropertyReader.java (64%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyType.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/select/SimpleSelectProperty.java (59%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/TrimMaterialSelectProperty.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/BannerSpecialModel.java (68%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/BedSpecialModel.java (65%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/ChestSpecialModel.java (69%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/CopperGolemStatueSpecialModel.java (71%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/HeadSpecialModel.java (74%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/PlayerHeadSpecialModel.java (62%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/ShulkerBoxSpecialModel.java (78%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/SignSpecialModel.java (74%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/SimpleSpecialModel.java (67%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/SpecialModel.java (72%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/SpecialModelFactory.java (63%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/special/SpecialModelReader.java (62%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelType.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModels.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/tint/ConstantTint.java (62%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/tint/CustomModelDataTint.java (67%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/tint/GrassTint.java (80%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/tint/SimpleDefaultTint.java (69%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/tint/Tint.java (92%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/tint/TintFactory.java (97%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => definition}/tint/TintReader.java (93%) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintType.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/Tints.java rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => legacy}/LegacyItemModel.java (98%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => legacy}/LegacyModelPredicate.java (75%) rename core/src/main/java/net/momirealms/craftengine/core/pack/model/{ => legacy}/LegacyOverridesModel.java (98%) delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchProperties.java delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectProperties.java delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModels.java delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tints.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/context/CommonConditions.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/context/CommonFunctions.java rename core/src/main/java/net/momirealms/craftengine/core/plugin/context/{event => }/EventTrigger.java (94%) delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventConditions.java delete mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventFunctions.java diff --git a/bukkit/build.gradle.kts b/bukkit/build.gradle.kts index 281a51a17..9c0ac2d70 100644 --- a/bukkit/build.gradle.kts +++ b/bukkit/build.gradle.kts @@ -135,7 +135,7 @@ publishing { } } publications { - create("mavenJava") { + create("bukkit") { groupId = "net.momirealms" artifactId = "craft-engine-bukkit" version = rootProject.properties["project_version"].toString() @@ -153,7 +153,7 @@ publishing { } } } - create("mavenJavaSnapshot") { + create("bukkitSnapshot") { groupId = "net.momirealms" artifactId = "craft-engine-bukkit" version = "${rootProject.properties["project_version"]}-SNAPSHOT" @@ -177,11 +177,11 @@ publishing { tasks.register("publishRelease") { group = "publishing" description = "Publishes to the release repository" - dependsOn("publishMavenJavaPublicationToReleasesRepository") + dependsOn("publishBukkitPublicationToReleasesRepository") } tasks.register("publishSnapshot") { group = "publishing" description = "Publishes to the snapshot repository" - dependsOn("publishMavenJavaSnapshotPublicationToSnapshotRepository") + dependsOn("publishBukkitSnapshotPublicationToSnapshotRepository") } \ No newline at end of file diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java index 25beedc9e..ad92e8050 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java @@ -36,9 +36,9 @@ import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.loot.LootConditions; import net.momirealms.craftengine.core.plugin.compatibility.*; import net.momirealms.craftengine.core.plugin.config.Config; +import net.momirealms.craftengine.core.plugin.context.CommonConditions; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.condition.AlwaysFalseCondition; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; import net.momirealms.craftengine.core.plugin.locale.TranslationManager; import net.momirealms.craftengine.core.plugin.network.NetWorkUser; import net.momirealms.craftengine.core.plugin.text.minimessage.FormattedLine; @@ -125,11 +125,11 @@ public class BukkitCompatibilityManager implements CompatibilityManager { Key worldGuardRegion = Key.of("worldguard:region"); if (this.hasPlugin("WorldGuard")) { runCatchingHook(() -> { - EventConditions.register(worldGuardRegion, new WorldGuardRegionCondition.FactoryImpl<>()); + CommonConditions.register(worldGuardRegion, new WorldGuardRegionCondition.FactoryImpl<>()); LootConditions.register(worldGuardRegion, new WorldGuardRegionCondition.FactoryImpl<>()); }, "WorldGuard"); } else { - EventConditions.register(worldGuardRegion, new AlwaysFalseCondition.FactoryImpl<>()); + CommonConditions.register(worldGuardRegion, new AlwaysFalseCondition.FactoryImpl<>()); LootConditions.register(worldGuardRegion, new AlwaysFalseCondition.FactoryImpl<>()); } if (this.hasPlugin("Geyser-Spigot")) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java index 89f3279c5..39806daba 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java @@ -17,8 +17,8 @@ import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.loot.LootTable; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.context.ContextHolder; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; import net.momirealms.craftengine.core.sound.SoundData; import net.momirealms.craftengine.core.sound.SoundSource; @@ -58,6 +58,7 @@ public final class BlockEventListener implements Listener { if (!VersionHelper.isOrAbove1_20_5()) { if (event.getDamager() instanceof Player player) { BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player); + if (serverPlayer == null) return; serverPlayer.setClientSideCanBreakBlock(true); } } @@ -67,6 +68,7 @@ public final class BlockEventListener implements Listener { public void onPlaceBlock(BlockPlaceEvent event) { Player player = event.getPlayer(); BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player); + if (serverPlayer == null) return; // send swing if player is clicking a replaceable block if (serverPlayer.shouldResendSwing()) { player.swingHand(event.getHand()); @@ -106,6 +108,7 @@ public final class BlockEventListener implements Listener { Player player = event.getPlayer(); Location location = block.getLocation(); BukkitServerPlayer serverPlayer = BukkitAdaptors.adapt(player); + if (serverPlayer == null) return; net.momirealms.craftengine.core.world.World world = BukkitAdaptors.adapt(player.getWorld()); WorldPosition position = new WorldPosition(world, location.getBlockX() + 0.5, location.getBlockY() + 0.5, location.getBlockZ() + 0.5); Item itemInHand = serverPlayer.getItemInHand(InteractionHand.MAIN_HAND); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index 2f98cd2c8..4b3b04ce0 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -23,7 +23,7 @@ import net.momirealms.craftengine.core.loot.LootTable; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.plugin.logger.Debugger; import net.momirealms.craftengine.core.registry.Holder; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlock.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlock.java index 9f4b7af8d..fb52dee38 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlock.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlock.java @@ -10,7 +10,7 @@ import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.loot.LootTable; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.registry.Holder; import net.momirealms.craftengine.core.world.context.BlockPlaceContext; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DropExperienceBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DropExperienceBlockBehavior.java index 424921c6e..03119f033 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DropExperienceBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DropExperienceBlockBehavior.java @@ -12,10 +12,10 @@ import net.momirealms.craftengine.core.block.behavior.BlockBehavior; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.loot.LootContext; +import net.momirealms.craftengine.core.plugin.context.CommonConditions; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.ContextHolder; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; import net.momirealms.craftengine.core.plugin.context.number.NumberProvider; import net.momirealms.craftengine.core.plugin.context.number.NumberProviders; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; @@ -94,7 +94,7 @@ public class DropExperienceBlockBehavior extends BukkitBlockBehavior { @Override public BlockBehavior create(CustomBlock block, Map arguments) { NumberProvider amount = NumberProviders.fromObject(ResourceConfigUtils.get(arguments, "amount", "count")); - List> conditionList = ResourceConfigUtils.parseConfigAsList(ResourceConfigUtils.get(arguments, "conditions", "condition"), EventConditions::fromMap); + List> conditionList = ResourceConfigUtils.parseConfigAsList(ResourceConfigUtils.get(arguments, "conditions", "condition"), CommonConditions::fromMap); return new DropExperienceBlockBehavior(block, amount, MiscUtils.allOf(conditionList)); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ArmorStandFurnitureElementConfig.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ArmorStandFurnitureElementConfig.java index 2a92ea2fa..dc6b12114 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ArmorStandFurnitureElementConfig.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ArmorStandFurnitureElementConfig.java @@ -12,9 +12,9 @@ import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemKeys; import net.momirealms.craftengine.core.item.data.FireworkExplosion; +import net.momirealms.craftengine.core.plugin.context.CommonConditions; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.PlayerContext; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.LegacyChatFormatter; import net.momirealms.craftengine.core.util.MiscUtils; @@ -96,7 +96,7 @@ public class ArmorStandFurnitureElementConfig implements FurnitureElementConfig< @Override public ArmorStandFurnitureElementConfig create(Map arguments) { - List> conditions = ResourceConfigUtils.parseConfigAsList(arguments.get("conditions"), EventConditions::fromMap); + List> conditions = ResourceConfigUtils.parseConfigAsList(arguments.get("conditions"), CommonConditions::fromMap); return new ArmorStandFurnitureElementConfig( Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("item"), "warning.config.furniture.element.armor_stand.missing_item")), ResourceConfigUtils.getAsFloat(arguments.getOrDefault("scale", 1f), "scale"), diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ItemDisplayFurnitureElementConfig.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ItemDisplayFurnitureElementConfig.java index 88a3ef863..3eb940aca 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ItemDisplayFurnitureElementConfig.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ItemDisplayFurnitureElementConfig.java @@ -13,9 +13,9 @@ import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemKeys; import net.momirealms.craftengine.core.item.data.FireworkExplosion; +import net.momirealms.craftengine.core.plugin.context.CommonConditions; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.PlayerContext; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; import net.momirealms.craftengine.core.util.Color; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; @@ -137,7 +137,7 @@ public class ItemDisplayFurnitureElementConfig implements FurnitureElementConfig @Override public ItemDisplayFurnitureElementConfig create(Map arguments) { Map brightness = ResourceConfigUtils.getAsMap(arguments.getOrDefault("brightness", Map.of()), "brightness"); - List> conditions = ResourceConfigUtils.parseConfigAsList(arguments.get("conditions"), EventConditions::fromMap); + List> conditions = ResourceConfigUtils.parseConfigAsList(arguments.get("conditions"), CommonConditions::fromMap); return new ItemDisplayFurnitureElementConfig( Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("item"), "warning.config.furniture.element.item_display.missing_item")), ResourceConfigUtils.getAsVector3f(arguments.getOrDefault("scale", 1f), "scale"), diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ItemFurnitureElementConfig.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ItemFurnitureElementConfig.java index 28e1a0634..346332221 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ItemFurnitureElementConfig.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/ItemFurnitureElementConfig.java @@ -11,9 +11,9 @@ import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemKeys; import net.momirealms.craftengine.core.item.data.FireworkExplosion; +import net.momirealms.craftengine.core.plugin.context.CommonConditions; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.PlayerContext; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; @@ -78,7 +78,7 @@ public class ItemFurnitureElementConfig implements FurnitureElementConfig arguments) { - List> conditions = ResourceConfigUtils.parseConfigAsList(arguments.get("conditions"), EventConditions::fromMap); + List> conditions = ResourceConfigUtils.parseConfigAsList(arguments.get("conditions"), CommonConditions::fromMap); return new ItemFurnitureElementConfig( Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("item"), "warning.config.furniture.element.item.missing_item")), ResourceConfigUtils.getAsVector3f(arguments.getOrDefault("position", 0f), "position"), diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/TextDisplayFurnitureElementConfig.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/TextDisplayFurnitureElementConfig.java index d359b3548..61b36f6b5 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/TextDisplayFurnitureElementConfig.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/element/TextDisplayFurnitureElementConfig.java @@ -9,10 +9,10 @@ import net.momirealms.craftengine.core.entity.furniture.Furniture; import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElementConfig; import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElementConfigFactory; import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.plugin.context.CommonConditions; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext; import net.momirealms.craftengine.core.plugin.context.PlayerContext; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; import net.momirealms.craftengine.core.util.AdventureHelper; import net.momirealms.craftengine.core.util.Color; import net.momirealms.craftengine.core.util.MiscUtils; @@ -140,7 +140,7 @@ public class TextDisplayFurnitureElementConfig implements FurnitureElementConfig @Override public TextDisplayFurnitureElementConfig create(Map arguments) { Map brightness = ResourceConfigUtils.getAsMap(arguments.getOrDefault("brightness", Map.of()), "brightness"); - List> conditions = ResourceConfigUtils.parseConfigAsList(arguments.get("conditions"), EventConditions::fromMap); + List> conditions = ResourceConfigUtils.parseConfigAsList(arguments.get("conditions"), CommonConditions::fromMap); return new TextDisplayFurnitureElementConfig( ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("text"), "warning.config.furniture.element.text_display.missing_text"), ResourceConfigUtils.getAsVector3f(arguments.getOrDefault("scale", 1f), "scale"), diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitCustomItem.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitCustomItem.java index fb3d9f49a..c7839cb4a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitCustomItem.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitCustomItem.java @@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.item.behavior.ItemBehavior; import net.momirealms.craftengine.core.item.processor.ItemProcessor; import net.momirealms.craftengine.core.item.updater.ItemUpdateConfig; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.UniqueKey; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BlockItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BlockItemBehavior.java index 2bc4acf81..7a68fc8bc 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BlockItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BlockItemBehavior.java @@ -25,8 +25,8 @@ import net.momirealms.craftengine.core.pack.PendingConfigSection; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.context.ContextHolder; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.*; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java index 586fc20e1..eb2034ba2 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java @@ -19,8 +19,8 @@ import net.momirealms.craftengine.core.pack.Pack; import net.momirealms.craftengine.core.pack.PendingConfigSection; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.context.ContextHolder; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.plugin.logger.Debugger; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java index 52ce742dd..564a72662 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java @@ -27,8 +27,8 @@ import net.momirealms.craftengine.core.item.setting.FoodData; import net.momirealms.craftengine.core.item.updater.ItemUpdateResult; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.context.ContextHolder; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; import net.momirealms.craftengine.core.sound.SoundSet; import net.momirealms.craftengine.core.sound.SoundSource; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index 657a69977..7237b72a3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -80,11 +80,7 @@ import net.momirealms.craftengine.core.pack.host.ResourcePackDownloadData; import net.momirealms.craftengine.core.pack.host.ResourcePackHost; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; -import net.momirealms.craftengine.core.plugin.context.ContextHolder; -import net.momirealms.craftengine.core.plugin.context.CooldownData; -import net.momirealms.craftengine.core.plugin.context.NetworkTextReplaceContext; -import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.*; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; import net.momirealms.craftengine.core.plugin.locale.TranslationManager; import net.momirealms.craftengine.core.plugin.logger.Debugger; diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 0b1f929f0..112d80703 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -99,14 +99,12 @@ tasks.withType { dependsOn(tasks.clean) } -val adventureLibrariesJar by tasks.registering(ShadowJar::class) { +tasks.register("adventureBundle", ShadowJar::class) { group = "build" - description = "将 adventureLibraries 类型的依赖打包并 Relocate 到单独的 Jar 中" - archiveBaseName.set("buildAdventureLibrariesJar") // 你想要的产物名 + archiveBaseName.set("adventure-bundle") archiveClassifier.set("") configurations = listOf(adventureLibraries) - - relocate("net.kyori", "net.momirealms.craftengine.libraries.net.kyori") + relocate("net.kyori", "net.momirealms.craftengine.libraries") } tasks { @@ -155,7 +153,7 @@ publishing { } } publications { - create("mavenJava") { + create("core") { groupId = "net.momirealms" artifactId = "craft-engine-core" version = rootProject.properties["project_version"].toString() @@ -173,7 +171,7 @@ publishing { } } } - create("mavenJavaSnapshot") { + create("coreSnapshot") { groupId = "net.momirealms" artifactId = "craft-engine-core" version = "${rootProject.properties["project_version"]}-SNAPSHOT" @@ -191,21 +189,21 @@ publishing { } } } - create("mavenAdventure") { + create("adventure") { groupId = "net.momirealms" artifactId = "craft-engine-adventure" version = rootProject.properties["project_version"].toString() - artifact(tasks.named("adventureLibrariesJar")) + artifact(tasks.named("adventureBundle")) pom { name = "CraftEngine API" url = "https://github.com/Xiao-MoMi/craft-engine" } } - create("mavenAdventureSnapshot") { + create("adventureSnapshot") { groupId = "net.momirealms" artifactId = "craft-engine-adventure" version = "${rootProject.properties["project_version"]}-SNAPSHOT" - artifact(tasks.named("adventureLibrariesJar")) + artifact(tasks.named("adventureBundle")) pom { name = "CraftEngine API" url = "https://github.com/Xiao-MoMi/craft-engine" @@ -217,11 +215,11 @@ publishing { tasks.register("publishRelease") { group = "publishing" description = "Publishes to the release repository" - dependsOn("publishMavenJavaPublicationToReleasesRepository", "publishMavenAdventurePublicationToReleasesRepository") + dependsOn("publishCorePublicationToReleasesRepository", "publishAdventurePublicationToReleasesRepository") } tasks.register("publishSnapshot") { group = "publishing" description = "Publishes to the snapshot repository" - dependsOn("publishMavenJavaSnapshotPublicationToSnapshotRepository", "publishMavenAdventureSnapshotPublicationToSnapshotRepository") + dependsOn("publishCoreSnapshotPublicationToSnapshotRepository", "publishAdventureSnapshotPublicationToSnapshotRepository") } \ No newline at end of file diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java index fa2b30948..faf87b201 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java @@ -28,9 +28,9 @@ import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.config.ConfigParser; import net.momirealms.craftengine.core.plugin.config.IdSectionConfigParser; import net.momirealms.craftengine.core.plugin.config.SectionConfigParser; +import net.momirealms.craftengine.core.plugin.context.CommonFunctions; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventFunctions; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.plugin.entityculling.CullingData; import net.momirealms.craftengine.core.plugin.locale.LocalizedException; @@ -523,7 +523,7 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem Map>> events; try { - events = EventFunctions.parseEvents(ResourceConfigUtils.get(section, "events", "event")); + events = CommonFunctions.parseEvents(ResourceConfigUtils.get(section, "events", "event")); } catch (LocalizedResourceConfigException e) { eCollector1.add(e); events = Map.of(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractCustomBlock.java b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractCustomBlock.java index fbdef8fc8..21995f68a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractCustomBlock.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractCustomBlock.java @@ -6,7 +6,7 @@ import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.loot.LootTable; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.registry.Holder; import net.momirealms.craftengine.core.util.Key; diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java b/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java index 41be7444a..b9023209a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/CustomBlock.java @@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.block; import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.loot.LootTable; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.world.context.BlockPlaceContext; import net.momirealms.sparrow.nbt.CompoundTag; diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java index d439e8ea3..59e8107dc 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java @@ -14,7 +14,7 @@ import net.momirealms.craftengine.core.pack.PendingConfigSection; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.config.IdSectionConfigParser; -import net.momirealms.craftengine.core.plugin.context.event.EventFunctions; +import net.momirealms.craftengine.core.plugin.context.CommonFunctions; import net.momirealms.craftengine.core.plugin.entityculling.CullingData; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask; @@ -249,7 +249,7 @@ public abstract class AbstractFurnitureManager implements FurnitureManager { .id(id) .settings(FurnitureSettings.fromMap(MiscUtils.castToMap(section.get("settings"), true))) .variants(variants) - .events(EventFunctions.parseEvents(ResourceConfigUtils.get(section, "events", "event"))) + .events(CommonFunctions.parseEvents(ResourceConfigUtils.get(section, "events", "event"))) .lootTable(LootTable.fromMap(MiscUtils.castToMap(section.get("loot"), true))) .behavior(FurnitureBehaviorTypes.fromMap(ResourceConfigUtils.getAsMapOrNull(ResourceConfigUtils.get(section, "behaviors", "behavior"), "behavior"))) .build(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurniture.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurniture.java index 3f3cf37a9..4a6304c60 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurniture.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurniture.java @@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.entity.furniture; import net.momirealms.craftengine.core.entity.furniture.behavior.FurnitureBehavior; import net.momirealms.craftengine.core.loot.LootTable; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.util.Key; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurnitureImpl.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurnitureImpl.java index ca01c0538..ffc2447d0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurnitureImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurnitureImpl.java @@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.entity.furniture.behavior.EmptyFurnitureB import net.momirealms.craftengine.core.entity.furniture.behavior.FurnitureBehavior; import net.momirealms.craftengine.core.loot.LootTable; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.util.Key; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractCustomItem.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractCustomItem.java index b4853798c..a4c4a524d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractCustomItem.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractCustomItem.java @@ -4,7 +4,7 @@ import net.momirealms.craftengine.core.item.behavior.ItemBehavior; import net.momirealms.craftengine.core.item.processor.ItemProcessor; import net.momirealms.craftengine.core.item.updater.ItemUpdateConfig; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.UniqueKey; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java index 50e319222..3b6b2d0e3 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java @@ -14,19 +14,22 @@ import net.momirealms.craftengine.core.pack.AbstractPackManager; import net.momirealms.craftengine.core.pack.LoadingSequence; import net.momirealms.craftengine.core.pack.Pack; import net.momirealms.craftengine.core.pack.allocator.IdAllocator; -import net.momirealms.craftengine.core.pack.model.*; +import net.momirealms.craftengine.core.pack.model.definition.*; +import net.momirealms.craftengine.core.pack.model.definition.select.ChargeTypeSelectProperty; +import net.momirealms.craftengine.core.pack.model.definition.select.TrimMaterialSelectProperty; import net.momirealms.craftengine.core.pack.model.generation.AbstractModelGenerator; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; -import net.momirealms.craftengine.core.pack.model.select.ChargeTypeSelectProperty; -import net.momirealms.craftengine.core.pack.model.select.TrimMaterialSelectProperty; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyItemModel; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyOverridesModel; import net.momirealms.craftengine.core.pack.model.simplified.SimplifiedModelReader; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.config.ConfigParser; import net.momirealms.craftengine.core.plugin.config.IdSectionConfigParser; +import net.momirealms.craftengine.core.plugin.context.CommonFunctions; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventFunctions; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.plugin.logger.Debugger; import net.momirealms.craftengine.core.util.*; @@ -605,7 +608,7 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl // 事件 Map>> eventTriggerListMap; try { - eventTriggerListMap = EventFunctions.parseEvents(ResourceConfigUtils.get(section, "event", "events")); + eventTriggerListMap = CommonFunctions.parseEvents(ResourceConfigUtils.get(section, "event", "events")); } catch (LocalizedResourceConfigException e) { collector.add(e); eventTriggerListMap = Map.of(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/CustomItem.java b/core/src/main/java/net/momirealms/craftengine/core/item/CustomItem.java index e62ed6855..d7b1c595f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/CustomItem.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/CustomItem.java @@ -4,7 +4,7 @@ import net.momirealms.craftengine.core.item.behavior.ItemBehavior; import net.momirealms.craftengine.core.item.processor.ItemProcessor; import net.momirealms.craftengine.core.item.updater.ItemUpdateConfig; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventTrigger; +import net.momirealms.craftengine.core.plugin.context.EventTrigger; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.UniqueKey; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java index 7d7973d24..dbc5d1854 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java @@ -6,9 +6,9 @@ import net.momirealms.craftengine.core.item.equipment.Equipment; import net.momirealms.craftengine.core.item.recipe.DatapackRecipeResult; import net.momirealms.craftengine.core.item.recipe.UniqueIdItem; import net.momirealms.craftengine.core.item.updater.ItemUpdateResult; -import net.momirealms.craftengine.core.pack.model.LegacyOverridesModel; -import net.momirealms.craftengine.core.pack.model.ModernItemModel; +import net.momirealms.craftengine.core.pack.model.definition.ModernItemModel; import net.momirealms.craftengine.core.pack.model.generation.ModelGenerator; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyOverridesModel; import net.momirealms.craftengine.core.plugin.Manageable; import net.momirealms.craftengine.core.plugin.config.ConfigParser; import net.momirealms.craftengine.core.util.Key; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/processor/ConditionalProcessor.java b/core/src/main/java/net/momirealms/craftengine/core/item/processor/ConditionalProcessor.java index d3535a4db..6aee65b15 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/processor/ConditionalProcessor.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/processor/ConditionalProcessor.java @@ -3,9 +3,9 @@ package net.momirealms.craftengine.core.item.processor; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemBuildContext; import net.momirealms.craftengine.core.item.ItemProcessorFactory; +import net.momirealms.craftengine.core.plugin.context.CommonConditions; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; @@ -53,7 +53,7 @@ public class ConditionalProcessor implements ItemProcessor { @Override public ItemProcessor create(Object arg) { Map conditionalData = ResourceConfigUtils.getAsMap(arg, "conditional"); - List> conditions = ResourceConfigUtils.parseConfigAsList(conditionalData.get("conditions"), EventConditions::fromMap); + List> conditions = ResourceConfigUtils.parseConfigAsList(conditionalData.get("conditions"), CommonConditions::fromMap); List> modifiers = new ArrayList<>(); ItemProcessors.applyDataModifiers(ResourceConfigUtils.getAsMap(conditionalData.get("data"), "conditional.data"), m -> modifiers.add((ItemProcessor) m)); return new ConditionalProcessor<>(MiscUtils.allOf(conditions), modifiers.toArray(new ItemProcessor[0])); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/processor/lore/LoreProcessor.java b/core/src/main/java/net/momirealms/craftengine/core/item/processor/lore/LoreProcessor.java index 4fafc1aa4..bf6b5b5d4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/processor/lore/LoreProcessor.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/processor/lore/LoreProcessor.java @@ -8,8 +8,8 @@ import net.momirealms.craftengine.core.item.ItemProcessorFactory; import net.momirealms.craftengine.core.item.processor.ItemProcessor; import net.momirealms.craftengine.core.item.processor.SimpleNetworkItemProcessor; import net.momirealms.craftengine.core.plugin.config.Config; +import net.momirealms.craftengine.core.plugin.context.CommonConditions; import net.momirealms.craftengine.core.plugin.context.Condition; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; import net.momirealms.craftengine.core.plugin.text.minimessage.FormattedLine; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; @@ -75,7 +75,7 @@ public sealed interface LoreProcessor extends SimpleNetworkItemProcessor LoreModification.Operation operation = ResourceConfigUtils.getAsEnum(Optional.ofNullable(complexLore.get("operation")).map(String::valueOf).orElse(null), LoreModification.Operation.class, LoreModification.Operation.APPEND); lastPriority = Optional.ofNullable(complexLore.get("priority")).map(it -> ResourceConfigUtils.getAsInt(it, "priority")).orElse(lastPriority); boolean split = ResourceConfigUtils.getAsBoolean(complexLore.get("split-lines"), "split-lines"); - List> conditions = ResourceConfigUtils.parseConfigAsList(complexLore.get("conditions"), EventConditions::fromMap); + List> conditions = ResourceConfigUtils.parseConfigAsList(complexLore.get("conditions"), CommonConditions::fromMap); modifications.add(new LoreModificationHolder(new LoreModification(operation, split, Arrays.stream(content).map(line -> Config.addNonItalicTag() && !line.startsWith("") ? FormattedLine.create("" + line) : FormattedLine.create(line)) .toArray(FormattedLine[]::new), MiscUtils.allOf(conditions)), lastPriority)); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java index 2e81fb837..9b931131c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java @@ -9,11 +9,11 @@ import net.momirealms.craftengine.core.item.recipe.result.CustomRecipeResult; import net.momirealms.craftengine.core.item.recipe.result.PostProcessor; import net.momirealms.craftengine.core.item.recipe.result.PostProcessors; import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.plugin.context.CommonConditions; +import net.momirealms.craftengine.core.plugin.context.CommonFunctions; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.condition.AllOfCondition; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; -import net.momirealms.craftengine.core.plugin.context.event.EventFunctions; import net.momirealms.craftengine.core.plugin.context.function.Function; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.*; @@ -34,14 +34,14 @@ public abstract class AbstractRecipeSerializer> implement protected Function[] functions(Map arguments) { Object functions = ResourceConfigUtils.get(arguments, "functions", "function"); if (functions == null) return null; - List> functionList = ResourceConfigUtils.parseConfigAsList(functions, EventFunctions::fromMap); + List> functionList = ResourceConfigUtils.parseConfigAsList(functions, CommonFunctions::fromMap); return functionList.toArray(new Function[0]); } protected Condition conditions(Map arguments) { Object conditions = ResourceConfigUtils.get(arguments, "conditions", "condition"); if (conditions == null) return null; - List> conditionList = ResourceConfigUtils.parseConfigAsList(conditions, EventConditions::fromMap); + List> conditionList = ResourceConfigUtils.parseConfigAsList(conditions, CommonConditions::fromMap); if (conditionList.isEmpty()) return null; if (conditionList.size() == 1) return conditionList.getFirst(); return new AllOfCondition<>(conditionList); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java index 8caaa6a07..cf34d5897 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java @@ -22,13 +22,13 @@ import net.momirealms.craftengine.core.pack.mcmeta.Overlay; import net.momirealms.craftengine.core.pack.mcmeta.PackMcMeta; import net.momirealms.craftengine.core.pack.mcmeta.PackVersion; import net.momirealms.craftengine.core.pack.mcmeta.overlay.OverlayCombination; -import net.momirealms.craftengine.core.pack.model.ItemModel; -import net.momirealms.craftengine.core.pack.model.LegacyOverridesModel; -import net.momirealms.craftengine.core.pack.model.ModernItemModel; -import net.momirealms.craftengine.core.pack.model.RangeDispatchItemModel; +import net.momirealms.craftengine.core.pack.model.definition.ItemModel; +import net.momirealms.craftengine.core.pack.model.definition.ModernItemModel; +import net.momirealms.craftengine.core.pack.model.definition.RangeDispatchItemModel; +import net.momirealms.craftengine.core.pack.model.definition.rangedisptach.CustomModelDataRangeDispatchProperty; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; import net.momirealms.craftengine.core.pack.model.generation.ModelGenerator; -import net.momirealms.craftengine.core.pack.model.rangedisptach.CustomModelDataRangeDispatchProperty; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyOverridesModel; import net.momirealms.craftengine.core.pack.model.simplified.*; import net.momirealms.craftengine.core.pack.revision.Revision; import net.momirealms.craftengine.core.pack.revision.Revisions; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeLegacyModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeLegacyModel.java index 851f9589a..ac69b0b88 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeLegacyModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergeLegacyModel.java @@ -4,7 +4,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.conflict.PathContext; -import net.momirealms.craftengine.core.pack.model.LegacyOverridesModel; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyOverridesModel; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.GsonHelper; import net.momirealms.craftengine.core.util.Key; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java index ecd57bc95..256d18f13 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/AlistHost.java @@ -33,7 +33,7 @@ import java.util.*; import java.util.concurrent.CompletableFuture; public class AlistHost implements ResourcePackHost { - public static final Factory FACTORY = new Factory(); + public static final ResourcePackHostFactory FACTORY = new Factory(); private final String apiUrl; private final String userName; private final String password; @@ -284,7 +284,7 @@ public class AlistHost implements ResourcePackHost { new RuntimeException("Failed to obtain resource pack download URL (HTTP " + response.statusCode() + "): " + response.body())); } - public static class Factory implements ResourcePackHostFactory { + private static class Factory implements ResourcePackHostFactory { @Override public ResourcePackHost create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java index ccafa796a..0a684834a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java @@ -27,7 +27,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.locks.ReentrantLock; public class DropboxHost implements ResourcePackHost { - public static final Factory FACTORY = new Factory(); + public static final ResourcePackHostFactory FACTORY = new Factory(); private final String appKey; private final String appSecret; private final String uploadPath; @@ -257,7 +257,7 @@ public class DropboxHost implements ResourcePackHost { } } - public static class Factory implements ResourcePackHostFactory { + private static class Factory implements ResourcePackHostFactory { @Override public ResourcePackHost create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/ExternalHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/ExternalHost.java index 9d59c88ac..9e6af36f9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/ExternalHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/ExternalHost.java @@ -16,7 +16,7 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; public class ExternalHost implements ResourcePackHost { - public static final Factory FACTORY = new Factory(); + public static final ResourcePackHostFactory FACTORY = new Factory(); private final ResourcePackDownloadData downloadData; public ExternalHost(ResourcePackDownloadData downloadData) { @@ -43,7 +43,7 @@ public class ExternalHost implements ResourcePackHost { return ResourcePackHosts.EXTERNAL; } - public static class Factory implements ResourcePackHostFactory { + private static class Factory implements ResourcePackHostFactory { @Override public ResourcePackHost create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java index 4f8211779..f43783d37 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/GitLabHost.java @@ -27,7 +27,7 @@ import java.util.*; import java.util.concurrent.CompletableFuture; public class GitLabHost implements ResourcePackHost { - public static final Factory FACTORY = new Factory(); + public static final ResourcePackHostFactory FACTORY = new Factory(); private final String gitlabUrl; private final String accessToken; private final String projectId; @@ -166,7 +166,7 @@ public class GitLabHost implements ResourcePackHost { return HttpRequest.BodyPublishers.ofByteArrays(parts); } - public static class Factory implements ResourcePackHostFactory { + private static class Factory implements ResourcePackHostFactory { @Override public ResourcePackHost create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java index 88d3d6c36..ee3411b8c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java @@ -33,7 +33,7 @@ import java.util.*; import java.util.concurrent.CompletableFuture; public class LobFileHost implements ResourcePackHost { - public static final Factory FACTORY = new Factory(); + public static final ResourcePackHostFactory FACTORY = new Factory(); private final String apiKey; private final ProxySelector proxy; private AccountInfo accountInfo; @@ -267,7 +267,7 @@ public class LobFileHost implements ResourcePackHost { return sb.toString(); } - public static class Factory implements ResourcePackHostFactory { + private static class Factory implements ResourcePackHostFactory { @Override public ResourcePackHost create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/NoneHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/NoneHost.java index 3802756b5..99575e589 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/NoneHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/NoneHost.java @@ -13,7 +13,7 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; public class NoneHost implements ResourcePackHost { - public static final Factory FACTORY = new Factory(); + public static final ResourcePackHostFactory FACTORY = new Factory(); public static final NoneHost INSTANCE = new NoneHost(); @Override @@ -36,7 +36,7 @@ public class NoneHost implements ResourcePackHost { return ResourcePackHosts.NONE; } - public static class Factory implements ResourcePackHostFactory { + private static class Factory implements ResourcePackHostFactory { @Override public ResourcePackHost create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java index 2665818ac..921753fa8 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java @@ -30,7 +30,7 @@ import java.util.*; import java.util.concurrent.CompletableFuture; public class OneDriveHost implements ResourcePackHost { - public static final Factory FACTORY = new Factory(); + public static final ResourcePackHostFactory FACTORY = new Factory(); private final String clientId; private final String clientSecret; private final ProxySelector proxy; @@ -227,7 +227,7 @@ public class OneDriveHost implements ResourcePackHost { return this.refreshToken.mid(); } - public static class Factory implements ResourcePackHostFactory { + private static class Factory implements ResourcePackHostFactory { @Override public ResourcePackHost create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/S3HostFactory.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/S3HostFactory.java index 3f52ff790..92956c0e9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/S3HostFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/S3HostFactory.java @@ -9,7 +9,7 @@ import java.util.List; import java.util.Map; public class S3HostFactory implements ResourcePackHostFactory { - public static final S3HostFactory INSTANCE = new S3HostFactory(); + public static final ResourcePackHostFactory INSTANCE = new S3HostFactory(); @Override public ResourcePackHost create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java index 9d08e7c78..ba742ae35 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java @@ -19,7 +19,7 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; public class SelfHost implements ResourcePackHost { - public static final Factory FACTORY = new Factory(); + public static final ResourcePackHostFactory FACTORY = new Factory(); private static final SelfHost INSTANCE = new SelfHost(); public SelfHost() { @@ -57,7 +57,7 @@ public class SelfHost implements ResourcePackHost { return ResourcePackHosts.SELF; } - public static class Factory implements ResourcePackHostFactory { + private static class Factory implements ResourcePackHostFactory { @Override public ResourcePackHost create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModels.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModels.java deleted file mode 100644 index e6d151250..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModels.java +++ /dev/null @@ -1,82 +0,0 @@ -package net.momirealms.craftengine.core.pack.model; - -import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.registry.BuiltInRegistries; -import net.momirealms.craftengine.core.registry.Registries; -import net.momirealms.craftengine.core.registry.WritableRegistry; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.MiscUtils; -import net.momirealms.craftengine.core.util.ResourceKey; - -import java.util.List; -import java.util.Map; - -public class ItemModels { - public static final Key EMPTY = Key.of("minecraft:empty"); - public static final Key MODEL = Key.of("minecraft:model"); - public static final Key COMPOSITE = Key.of("minecraft:composite"); - public static final Key CONDITION = Key.of("minecraft:condition"); - public static final Key RANGE_DISPATCH = Key.of("minecraft:range_dispatch"); - public static final Key SELECT = Key.of("minecraft:select"); - public static final Key SPECIAL = Key.of("minecraft:special"); - public static final Key BUNDLE_SELECTED_ITEM = Key.of("minecraft:bundle/selected_item"); - - static { - registerFactory(EMPTY, EmptyItemModel.FACTORY); - registerReader(EMPTY, EmptyItemModel.READER); - registerFactory(COMPOSITE, CompositeItemModel.FACTORY); - registerReader(COMPOSITE, CompositeItemModel.READER); - registerFactory(MODEL, BaseItemModel.FACTORY); - registerReader(MODEL, BaseItemModel.READER); - registerFactory(CONDITION, ConditionItemModel.FACTORY); - registerReader(CONDITION, ConditionItemModel.READER); - registerFactory(SPECIAL, SpecialItemModel.FACTORY); - registerReader(SPECIAL, SpecialItemModel.READER); - registerFactory(RANGE_DISPATCH, RangeDispatchItemModel.FACTORY); - registerReader(RANGE_DISPATCH, RangeDispatchItemModel.READER); - registerFactory(SELECT, SelectItemModel.FACTORY); - registerReader(SELECT, SelectItemModel.READER); - registerFactory(BUNDLE_SELECTED_ITEM, BundleSelectedItemModel.FACTORY); - registerReader(BUNDLE_SELECTED_ITEM, BundleSelectedItemModel.READER); - } - - public static void registerFactory(Key key, ItemModelFactory factory) { - ((WritableRegistry) BuiltInRegistries.ITEM_MODEL_FACTORY) - .register(ResourceKey.create(Registries.ITEM_MODEL_FACTORY.location(), key), factory); - } - - public static void registerReader(Key key, ItemModelReader reader) { - ((WritableRegistry) BuiltInRegistries.ITEM_MODEL_READER) - .register(ResourceKey.create(Registries.ITEM_MODEL_READER.location(), key), reader); - } - - public static ItemModel fromObj(Object object) { - if (object == null) return null; - if (object instanceof Map map) { - return fromMap(MiscUtils.castToMap(map, false)); - } else { - return new BaseItemModel(object.toString(), List.of(), null); - } - } - - public static ItemModel fromMap(Map map) { - String type = map.getOrDefault("type", "minecraft:model").toString(); - Key key = Key.withDefaultNamespace(type, "minecraft"); - ItemModelFactory factory = BuiltInRegistries.ITEM_MODEL_FACTORY.getValue(key); - if (factory == null) { - throw new LocalizedResourceConfigException("warning.config.item.model.invalid_type", type); - } - return factory.create(map); - } - - public static ItemModel fromJson(JsonObject json) { - String type = json.get("type").getAsString(); - Key key = Key.withDefaultNamespace(type, "minecraft"); - ItemModelReader reader = BuiltInRegistries.ITEM_MODEL_READER.getValue(key); - if (reader == null) { - throw new IllegalArgumentException("Invalid item model type: " + key); - } - return reader.read(json); - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionProperties.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionProperties.java deleted file mode 100644 index f2d5022fa..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionProperties.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.momirealms.craftengine.core.pack.model.condition; - -import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.registry.BuiltInRegistries; -import net.momirealms.craftengine.core.registry.Registries; -import net.momirealms.craftengine.core.registry.WritableRegistry; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.ResourceKey; - -import java.util.Map; - -public class ConditionProperties { - public static final Key BROKEN = Key.of("minecraft:broken"); - public static final Key BUNDLE_HAS_SELECTED_ITEM = Key.of("minecraft:bundle/has_selected_item"); - public static final Key CARRIED = Key.of("minecraft:carried"); - public static final Key CUSTOM_MODEL_DATA = Key.of("minecraft:custom_model_data"); - public static final Key DAMAGED = Key.of("minecraft:damaged"); - public static final Key EXTENDED_VIEW = Key.of("minecraft:extended_view"); - public static final Key FISHING_ROD_CAST = Key.of("minecraft:fishing_rod/cast"); - public static final Key HAS_COMPONENT = Key.of("minecraft:has_component"); - public static final Key KEYBIND_DOWN = Key.of("minecraft:keybind_down"); - public static final Key COMPONENT = Key.of("minecraft:component"); - public static final Key SELECTED = Key.of("minecraft:selected"); - public static final Key USING_ITEM = Key.of("minecraft:using_item"); - public static final Key VIEW_ENTITY = Key.of("minecraft:view_entity"); - - static { - registerFactory(BROKEN, BrokenConditionProperty.FACTORY); - registerReader(BROKEN, BrokenConditionProperty.READER); - registerFactory(BUNDLE_HAS_SELECTED_ITEM, SimpleConditionProperty.FACTORY); - registerReader(BUNDLE_HAS_SELECTED_ITEM, SimpleConditionProperty.READER); - registerFactory(CARRIED, SimpleConditionProperty.FACTORY); - registerReader(CARRIED, SimpleConditionProperty.READER); - registerFactory(DAMAGED, DamagedConditionProperty.FACTORY); - registerReader(DAMAGED, DamagedConditionProperty.READER); - registerFactory(EXTENDED_VIEW, SimpleConditionProperty.FACTORY); - registerReader(EXTENDED_VIEW, SimpleConditionProperty.READER); - registerFactory(FISHING_ROD_CAST, RodCastConditionProperty.FACTORY); - registerReader(FISHING_ROD_CAST, RodCastConditionProperty.READER); - registerFactory(SELECTED, SimpleConditionProperty.FACTORY); - registerReader(SELECTED, SimpleConditionProperty.READER); - registerFactory(USING_ITEM, UsingItemConditionProperty.FACTORY); - registerReader(USING_ITEM, UsingItemConditionProperty.READER); - registerFactory(VIEW_ENTITY, SimpleConditionProperty.FACTORY); - registerReader(VIEW_ENTITY, SimpleConditionProperty.READER); - registerFactory(CUSTOM_MODEL_DATA, CustomModelDataConditionProperty.FACTORY); - registerReader(CUSTOM_MODEL_DATA, CustomModelDataConditionProperty.READER); - registerFactory(HAS_COMPONENT, HasComponentConditionProperty.FACTORY); - registerReader(HAS_COMPONENT, HasComponentConditionProperty.READER); - registerFactory(KEYBIND_DOWN, KeyBindDownConditionProperty.FACTORY); - registerReader(KEYBIND_DOWN, KeyBindDownConditionProperty.READER); - registerFactory(COMPONENT, ComponentConditionProperty.FACTORY); - registerReader(COMPONENT, ComponentConditionProperty.READER); - } - - public static void registerFactory(Key key, ConditionPropertyFactory factory) { - ((WritableRegistry) BuiltInRegistries.CONDITION_PROPERTY_FACTORY) - .register(ResourceKey.create(Registries.CONDITION_PROPERTY_FACTORY.location(), key), factory); - } - - public static void registerReader(Key key, ConditionPropertyReader reader) { - ((WritableRegistry) BuiltInRegistries.CONDITION_PROPERTY_READER) - .register(ResourceKey.create(Registries.CONDITION_PROPERTY_READER.location(), key), reader); - } - - public static ConditionProperty fromMap(Map map) { - String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("property"), "warning.config.item.model.condition.missing_property"); - Key key = Key.withDefaultNamespace(type, "minecraft"); - ConditionPropertyFactory factory = BuiltInRegistries.CONDITION_PROPERTY_FACTORY.getValue(key); - if (factory == null) { - throw new LocalizedResourceConfigException("warning.config.item.model.condition.invalid_property", type); - } - return factory.create(map); - } - - public static ConditionProperty fromJson(JsonObject json) { - String type = json.get("property").getAsString(); - Key key = Key.withDefaultNamespace(type, "minecraft"); - ConditionPropertyReader reader = BuiltInRegistries.CONDITION_PROPERTY_READER.getValue(key); - if (reader == null) { - throw new IllegalArgumentException("Invalid condition property type: " + key); - } - return reader.read(json); - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/BaseItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/BaseItemModel.java similarity index 80% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/BaseItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/BaseItemModel.java index 66eed8371..f3a3e3b12 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/BaseItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/BaseItemModel.java @@ -1,37 +1,47 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.ResourceLocation; +import net.momirealms.craftengine.core.pack.model.definition.tint.Tint; +import net.momirealms.craftengine.core.pack.model.definition.tint.Tints; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; -import net.momirealms.craftengine.core.pack.model.tint.Tint; -import net.momirealms.craftengine.core.pack.model.tint.Tints; import net.momirealms.craftengine.core.pack.revision.Revision; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MinecraftVersion; import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; import java.util.Map; -public class BaseItemModel implements ItemModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class BaseItemModel implements ItemModel { + public static final Key ID = Key.of("minecraft:model"); + public static final ItemModelFactory FACTORY = new Factory(); + public static final ItemModelReader READER = new Reader(); private final String path; private final List tints; private final ModelGeneration modelGeneration; - public BaseItemModel(String path, List tints, @Nullable ModelGeneration modelGeneration) { + public BaseItemModel(@NotNull String path, + @NotNull List tints, + @Nullable ModelGeneration modelGeneration) { this.path = path; this.tints = tints; this.modelGeneration = modelGeneration; } + @Nullable + public ModelGeneration modelGeneration() { + return this.modelGeneration; + } + + @NotNull public List tints() { return this.tints; } @@ -43,7 +53,7 @@ public class BaseItemModel implements ItemModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); json.addProperty("model", this.path); if (!this.tints.isEmpty()) { JsonArray array = new JsonArray(); @@ -55,11 +65,6 @@ public class BaseItemModel implements ItemModel { return json; } - @Override - public Key type() { - return ItemModels.MODEL; - } - @Override public List modelsToGenerate() { if (this.modelGeneration == null) { @@ -74,7 +79,7 @@ public class BaseItemModel implements ItemModel { return List.of(); } - public static class Factory implements ItemModelFactory { + private static class Factory implements ItemModelFactory { @SuppressWarnings("unchecked") @Override @@ -101,7 +106,7 @@ public class BaseItemModel implements ItemModel { } } - public static class Reader implements ItemModelReader { + private static class Reader implements ItemModelReader { @Override public ItemModel read(JsonObject json) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/BundleSelectedItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/BundleSelectedItemModel.java similarity index 64% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/BundleSelectedItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/BundleSelectedItemModel.java index 28d1969e5..fff424572 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/BundleSelectedItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/BundleSelectedItemModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; @@ -9,15 +9,13 @@ import net.momirealms.craftengine.core.util.MinecraftVersion; import java.util.List; import java.util.Map; -public class BundleSelectedItemModel implements ItemModel { +public final class BundleSelectedItemModel implements ItemModel { + public static final Key ID = Key.of("minecraft:bundle/selected_item"); public static final BundleSelectedItemModel INSTANCE = new BundleSelectedItemModel(); - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); + public static final ItemModelFactory FACTORY = new Factory(); + public static final ItemModelReader READER = new Reader(); - @Override - public Key type() { - return ItemModels.BUNDLE_SELECTED_ITEM; - } + private BundleSelectedItemModel() {} @Override public List modelsToGenerate() { @@ -32,18 +30,18 @@ public class BundleSelectedItemModel implements ItemModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); return json; } - public static class Factory implements ItemModelFactory { + private static class Factory implements ItemModelFactory { @Override public ItemModel create(Map arguments) { return INSTANCE; } } - public static class Reader implements ItemModelReader { + private static class Reader implements ItemModelReader { @Override public ItemModel read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/CompositeItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/CompositeItemModel.java similarity index 85% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/CompositeItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/CompositeItemModel.java index cb2302c3c..dc59f58a2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/CompositeItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/CompositeItemModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonArray; import com.google.gson.JsonElement; @@ -8,20 +8,23 @@ import net.momirealms.craftengine.core.pack.revision.Revision; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MinecraftVersion; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; import java.util.Map; -public class CompositeItemModel implements ItemModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class CompositeItemModel implements ItemModel { + public static final Key ID = Key.of("minecraft:composite"); + public static final ItemModelFactory FACTORY = new Factory(); + public static final ItemModelReader READER = new Reader(); private final List models; public CompositeItemModel(List models) { this.models = models; } + @NotNull public List models() { return this.models; } @@ -29,7 +32,7 @@ public class CompositeItemModel implements ItemModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); JsonArray array = new JsonArray(); for (ItemModel model : this.models) { array.add(model.apply(version)); @@ -38,11 +41,6 @@ public class CompositeItemModel implements ItemModel { return json; } - @Override - public Key type() { - return ItemModels.COMPOSITE; - } - @Override public List revisions() { List versions = new ArrayList<>(); @@ -61,7 +59,7 @@ public class CompositeItemModel implements ItemModel { return models; } - public static class Factory implements ItemModelFactory { + private static class Factory implements ItemModelFactory { @SuppressWarnings("unchecked") @Override @@ -85,7 +83,7 @@ public class CompositeItemModel implements ItemModel { } } - public static class Reader implements ItemModelReader { + private static class Reader implements ItemModelReader { @Override public ItemModel read(JsonObject json) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ConditionItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ConditionItemModel.java similarity index 83% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/ConditionItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ConditionItemModel.java index ed9117060..cba5e1851 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ConditionItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ConditionItemModel.java @@ -1,8 +1,8 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.pack.model.condition.ConditionProperties; -import net.momirealms.craftengine.core.pack.model.condition.ConditionProperty; +import net.momirealms.craftengine.core.pack.model.definition.condition.ConditionProperties; +import net.momirealms.craftengine.core.pack.model.definition.condition.ConditionProperty; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; import net.momirealms.craftengine.core.pack.revision.Revision; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; @@ -14,9 +14,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -public class ConditionItemModel implements ItemModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class ConditionItemModel implements ItemModel { + public static final Key ID = Key.of("minecraft:condition"); + public static final ItemModelFactory FACTORY = new Factory(); + public static final ItemModelReader READER = new Reader(); private final ConditionProperty property; private final ItemModel onTrue; private final ItemModel onFalse; @@ -39,11 +40,6 @@ public class ConditionItemModel implements ItemModel { return this.onFalse; } - @Override - public Key type() { - return ItemModels.CONDITION; - } - @Override public List revisions() { List onTrueVersions = this.onTrue.revisions(); @@ -69,14 +65,14 @@ public class ConditionItemModel implements ItemModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); json.add("on_true", this.onTrue.apply(version)); json.add("on_false", this.onFalse.apply(version)); this.property.accept(json); return json; } - public static class Factory implements ItemModelFactory { + private static class Factory implements ItemModelFactory { @Override public ItemModel create(Map arguments) { @@ -93,7 +89,7 @@ public class ConditionItemModel implements ItemModel { } } - public static class Reader implements ItemModelReader { + private static class Reader implements ItemModelReader { @Override public ItemModel read(JsonObject json) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/EmptyItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/EmptyItemModel.java similarity index 65% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/EmptyItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/EmptyItemModel.java index 48013160f..11cffb374 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/EmptyItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/EmptyItemModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; @@ -9,23 +9,21 @@ import net.momirealms.craftengine.core.util.MinecraftVersion; import java.util.List; import java.util.Map; -public class EmptyItemModel implements ItemModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class EmptyItemModel implements ItemModel { + public static final Key ID = Key.of("minecraft:empty"); + public static final ItemModelFactory FACTORY = new Factory(); + public static final ItemModelReader READER = new Reader(); private static final EmptyItemModel INSTANCE = new EmptyItemModel(); + private EmptyItemModel() {} + @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); return json; } - @Override - public Key type() { - return ItemModels.EMPTY; - } - @Override public List modelsToGenerate() { return List.of(); @@ -36,14 +34,14 @@ public class EmptyItemModel implements ItemModel { return List.of(); } - public static class Factory implements ItemModelFactory { + private static class Factory implements ItemModelFactory { @Override public ItemModel create(Map arguments) { return INSTANCE; } } - public static class Reader implements ItemModelReader { + private static class Reader implements ItemModelReader { @Override public ItemModel read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModel.java similarity index 88% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModel.java index 8b6636bf3..82eb87d85 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; @@ -11,8 +11,6 @@ import java.util.function.Function; public interface ItemModel extends Function { - Key type(); - List modelsToGenerate(); List revisions(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModelFactory.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelFactory.java similarity index 58% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModelFactory.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelFactory.java index 43b9631bf..cedfb097e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModelFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelFactory.java @@ -1,7 +1,8 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import java.util.Map; +@FunctionalInterface public interface ItemModelFactory { ItemModel create(Map arguments); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModelReader.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelReader.java similarity index 57% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModelReader.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelReader.java index 8da23e303..6379fe7f8 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ItemModelReader.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelReader.java @@ -1,7 +1,8 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonObject; +@FunctionalInterface public interface ItemModelReader { ItemModel read(JsonObject json); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelType.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelType.java new file mode 100644 index 000000000..b1f22b9f1 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModelType.java @@ -0,0 +1,6 @@ +package net.momirealms.craftengine.core.pack.model.definition; + +import net.momirealms.craftengine.core.util.Key; + +public record ItemModelType(Key id, ItemModelFactory factory, ItemModelReader reader) { +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModels.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModels.java new file mode 100644 index 000000000..afe01736b --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ItemModels.java @@ -0,0 +1,62 @@ +package net.momirealms.craftengine.core.pack.model.definition; + +import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.MiscUtils; +import net.momirealms.craftengine.core.util.ResourceKey; + +import java.util.List; +import java.util.Map; + +public final class ItemModels { + public static final ItemModelType EMPTY = register(EmptyItemModel.ID, EmptyItemModel.FACTORY, EmptyItemModel.READER); + public static final ItemModelType MODEL = register(BaseItemModel.ID, BaseItemModel.FACTORY, BaseItemModel.READER); + public static final ItemModelType COMPOSITE = register(CompositeItemModel.ID, CompositeItemModel.FACTORY, CompositeItemModel.READER); + public static final ItemModelType CONDITION = register(ConditionItemModel.ID, ConditionItemModel.FACTORY, ConditionItemModel.READER); + public static final ItemModelType RANGE_DISPATCH = register(RangeDispatchItemModel.ID, RangeDispatchItemModel.FACTORY, RangeDispatchItemModel.READER); + public static final ItemModelType SELECT = register(SelectItemModel.ID, SelectItemModel.FACTORY, SelectItemModel.READER); + public static final ItemModelType SPECIAL = register(SpecialItemModel.ID, SpecialItemModel.FACTORY, SpecialItemModel.READER); + public static final ItemModelType BUNDLE_SELECTED_ITEM = register(BundleSelectedItemModel.ID, BundleSelectedItemModel.FACTORY, BundleSelectedItemModel.READER); + + private ItemModels() {} + + public static ItemModelType register(Key key, ItemModelFactory factory, ItemModelReader reader) { + ItemModelType type = new ItemModelType(key, factory, reader); + ((WritableRegistry) BuiltInRegistries.ITEM_MODEL_TYPE) + .register(ResourceKey.create(Registries.ITEM_MODEL_TYPE.location(), key), type); + return type; + } + + public static ItemModel fromObj(Object object) { + if (object == null) return null; + if (object instanceof Map map) { + return fromMap(MiscUtils.castToMap(map, false)); + } else { + return new BaseItemModel(object.toString(), List.of(), null); + } + } + + public static ItemModel fromMap(Map map) { + String type = map.getOrDefault("type", "minecraft:model").toString(); + Key key = Key.withDefaultNamespace(type, "minecraft"); + ItemModelType itemModelType = BuiltInRegistries.ITEM_MODEL_TYPE.getValue(key); + if (itemModelType == null) { + throw new LocalizedResourceConfigException("warning.config.item.model.invalid_type", type); + } + return itemModelType.factory().create(map); + } + + public static ItemModel fromJson(JsonObject json) { + String type = json.get("type").getAsString(); + Key key = Key.withDefaultNamespace(type, "minecraft"); + ItemModelType itemModelType = BuiltInRegistries.ITEM_MODEL_TYPE.getValue(key); + if (itemModelType == null) { + throw new IllegalArgumentException("Invalid item model type: " + key); + } + return itemModelType.reader().read(json); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ModernItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ModernItemModel.java similarity index 89% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/ModernItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ModernItemModel.java index 3e1512dea..650db6248 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ModernItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/ModernItemModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.util.MinecraftVersion; import java.util.List; -public class ModernItemModel { +public final class ModernItemModel { private final ItemModel itemModel; private final boolean oversizedInGui; private final boolean handAnimationOnSwap; @@ -50,18 +50,18 @@ public class ModernItemModel { } public boolean handAnimationOnSwap() { - return handAnimationOnSwap; + return this.handAnimationOnSwap; } public ItemModel itemModel() { - return itemModel; + return this.itemModel; } public boolean oversizedInGui() { - return oversizedInGui; + return this.oversizedInGui; } public float swapAnimationScale() { - return swapAnimationScale; + return this.swapAnimationScale; } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/RangeDispatchItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/RangeDispatchItemModel.java similarity index 88% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/RangeDispatchItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/RangeDispatchItemModel.java index 5b5f7041a..27b8bd43d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/RangeDispatchItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/RangeDispatchItemModel.java @@ -1,11 +1,11 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.pack.model.definition.rangedisptach.RangeDispatchProperties; +import net.momirealms.craftengine.core.pack.model.definition.rangedisptach.RangeDispatchProperty; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; -import net.momirealms.craftengine.core.pack.model.rangedisptach.RangeDispatchProperties; -import net.momirealms.craftengine.core.pack.model.rangedisptach.RangeDispatchProperty; import net.momirealms.craftengine.core.pack.revision.Revision; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; @@ -19,9 +19,10 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; -public class RangeDispatchItemModel implements ItemModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class RangeDispatchItemModel implements ItemModel { + public static final Key ID = Key.of("minecraft:range_dispatch"); + public static final ItemModelFactory FACTORY = new Factory(); + public static final ItemModelReader READER = new Reader(); private final RangeDispatchProperty property; private final float scale; private final ItemModel fallBack; @@ -57,10 +58,10 @@ public class RangeDispatchItemModel implements ItemModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); this.property.accept(json); JsonArray array = new JsonArray(); - for (Map.Entry entry : entries.entrySet()) { + for (Map.Entry entry : this.entries.entrySet()) { float threshold = entry.getKey(); ItemModel model = entry.getValue(); JsonObject jo = new JsonObject(); @@ -78,11 +79,6 @@ public class RangeDispatchItemModel implements ItemModel { return json; } - @Override - public Key type() { - return ItemModels.RANGE_DISPATCH; - } - @Override public List revisions() { List versions = new ArrayList<>(4); @@ -107,7 +103,7 @@ public class RangeDispatchItemModel implements ItemModel { return models; } - public static class Factory implements ItemModelFactory { + private static class Factory implements ItemModelFactory { @SuppressWarnings("unchecked") @Override @@ -143,7 +139,7 @@ public class RangeDispatchItemModel implements ItemModel { } } - public static class Reader implements ItemModelReader { + private static class Reader implements ItemModelReader { @Override public ItemModel read(JsonObject json) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/SelectItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/SelectItemModel.java similarity index 92% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/SelectItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/SelectItemModel.java index 7bd78f855..5d84983d3 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/SelectItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/SelectItemModel.java @@ -1,11 +1,11 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.pack.model.definition.select.SelectProperties; +import net.momirealms.craftengine.core.pack.model.definition.select.SelectProperty; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; -import net.momirealms.craftengine.core.pack.model.select.SelectProperties; -import net.momirealms.craftengine.core.pack.model.select.SelectProperty; import net.momirealms.craftengine.core.pack.revision.Revision; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.GsonHelper; @@ -20,9 +20,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class SelectItemModel implements ItemModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class SelectItemModel implements ItemModel { + public static final Key ID = Key.of("minecraft:select"); + public static final ItemModelFactory FACTORY = new Factory(); + public static final ItemModelReader READER = new Reader(); private final SelectProperty property; private final Map>, ItemModel> whenMap; private final ItemModel fallBack; @@ -50,7 +51,7 @@ public class SelectItemModel implements ItemModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); this.property.accept(json); JsonArray array = new JsonArray(); json.add("cases", array); @@ -89,11 +90,6 @@ public class SelectItemModel implements ItemModel { return json; } - @Override - public Key type() { - return ItemModels.SELECT; - } - @Override public List revisions() { List versions = new ArrayList<>(4); @@ -127,7 +123,7 @@ public class SelectItemModel implements ItemModel { return models; } - public static class Factory implements ItemModelFactory { + private static class Factory implements ItemModelFactory { @SuppressWarnings("unchecked") @Override @@ -174,7 +170,7 @@ public class SelectItemModel implements ItemModel { } } - public static class Reader implements ItemModelReader { + private static class Reader implements ItemModelReader { @Override public ItemModel read(JsonObject json) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/SpecialItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/SpecialItemModel.java similarity index 79% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/SpecialItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/SpecialItemModel.java index cb7409f03..f6649f789 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/SpecialItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/SpecialItemModel.java @@ -1,10 +1,10 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.definition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.ResourceLocation; +import net.momirealms.craftengine.core.pack.model.definition.special.SpecialModel; +import net.momirealms.craftengine.core.pack.model.definition.special.SpecialModels; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; -import net.momirealms.craftengine.core.pack.model.special.SpecialModel; -import net.momirealms.craftengine.core.pack.model.special.SpecialModels; import net.momirealms.craftengine.core.pack.revision.Revision; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.Key; @@ -16,9 +16,10 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; -public class SpecialItemModel implements ItemModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class SpecialItemModel implements ItemModel { + public static final Key ID = Key.of("minecraft:special"); + public static final ItemModelFactory FACTORY = new Factory(); + public static final ItemModelReader READER = new Reader(); private final SpecialModel specialModel; private final String base; private final ModelGeneration modelGeneration; @@ -33,6 +34,11 @@ public class SpecialItemModel implements ItemModel { return this.specialModel; } + @Nullable + public ModelGeneration modelGeneration() { + return this.modelGeneration; + } + public String base() { return this.base; } @@ -40,17 +46,12 @@ public class SpecialItemModel implements ItemModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); json.add("model", this.specialModel.apply(version)); json.addProperty("base", this.base); return json; } - @Override - public Key type() { - return ItemModels.SPECIAL; - } - @Override public List modelsToGenerate() { if (this.modelGeneration == null) { @@ -65,7 +66,7 @@ public class SpecialItemModel implements ItemModel { return this.specialModel.revisions(); } - public static class Factory implements ItemModelFactory { + private static class Factory implements ItemModelFactory { @Override public ItemModel create(Map arguments) { @@ -83,7 +84,7 @@ public class SpecialItemModel implements ItemModel { } } - public static class Reader implements ItemModelReader { + private static class Reader implements ItemModelReader { @Override public ItemModel read(JsonObject json) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/BrokenConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/BrokenConditionProperty.java similarity index 54% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/BrokenConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/BrokenConditionProperty.java index cf08f10c0..714478419 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/BrokenConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/BrokenConditionProperty.java @@ -1,25 +1,23 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.ItemKeys; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class BrokenConditionProperty implements ConditionProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class BrokenConditionProperty implements ConditionProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:broken"); + public static final ConditionPropertyFactory FACTORY = new Factory(); + public static final ConditionPropertyReader READER = new Reader(); public static final BrokenConditionProperty INSTANCE = new BrokenConditionProperty(); - @Override - public Key type() { - return ConditionProperties.BROKEN; - } + private BrokenConditionProperty() {} @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); } @Override @@ -33,14 +31,14 @@ public class BrokenConditionProperty implements ConditionProperty, LegacyModelPr return value ? 1 : 0; } - public static class Factory implements ConditionPropertyFactory { + private static class Factory implements ConditionPropertyFactory { @Override public ConditionProperty create(Map arguments) { return INSTANCE; } } - public static class Reader implements ConditionPropertyReader { + private static class Reader implements ConditionPropertyReader { @Override public ConditionProperty read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ComponentConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ComponentConditionProperty.java similarity index 68% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ComponentConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ComponentConditionProperty.java index b0907744e..3049616c0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ComponentConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ComponentConditionProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -8,9 +8,10 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class ComponentConditionProperty implements ConditionProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class ComponentConditionProperty implements ConditionProperty { + public static final Key ID = Key.of("minecraft:component"); + public static final ConditionPropertyFactory FACTORY = new Factory(); + public static final ConditionPropertyReader READER = new Reader(); private final String predicate; private final JsonElement value; @@ -19,19 +20,22 @@ public class ComponentConditionProperty implements ConditionProperty { this.value = value; } - @Override - public Key type() { - return ConditionProperties.COMPONENT; + public String predicate() { + return this.predicate; + } + + public JsonElement value() { + return this.value; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); jsonObject.addProperty("predicate", this.predicate); jsonObject.add("value", this.value); } - public static class Factory implements ConditionPropertyFactory { + private static class Factory implements ConditionPropertyFactory { @Override public ConditionProperty create(Map arguments) { String predicate = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("predicate"), "warning.config.item.model.condition.component.missing_predicate"); @@ -40,7 +44,7 @@ public class ComponentConditionProperty implements ConditionProperty { } } - public static class Reader implements ConditionPropertyReader { + private static class Reader implements ConditionPropertyReader { @Override public ConditionProperty read(JsonObject json) { String predicate = json.get("predicate").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionProperties.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionProperties.java new file mode 100644 index 000000000..74b3552a5 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionProperties.java @@ -0,0 +1,58 @@ +package net.momirealms.craftengine.core.pack.model.definition.condition; + +import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.pack.model.definition.rangedisptach.RangeDispatchPropertyType; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.ResourceKey; + +import java.util.Map; + +public final class ConditionProperties { + public static final ConditionPropertyType BROKEN = register(BrokenConditionProperty.ID, BrokenConditionProperty.FACTORY, BrokenConditionProperty.READER); + public static final ConditionPropertyType BUNDLE_HAS_SELECTED_ITEM = register(Key.of("minecraft:bundle/has_selected_item"), SimpleConditionProperty.FACTORY, SimpleConditionProperty.READER); + public static final ConditionPropertyType CARRIED = register(Key.of("minecraft:carried"), SimpleConditionProperty.FACTORY, SimpleConditionProperty.READER); + public static final ConditionPropertyType CUSTOM_MODEL_DATA = register(CustomModelDataConditionProperty.ID, CustomModelDataConditionProperty.FACTORY, CustomModelDataConditionProperty.READER); + public static final ConditionPropertyType DAMAGED = register(DamagedConditionProperty.ID, DamagedConditionProperty.FACTORY, DamagedConditionProperty.READER); + public static final ConditionPropertyType EXTENDED_VIEW = register(Key.of("minecraft:extended_view"), SimpleConditionProperty.FACTORY, SimpleConditionProperty.READER); + public static final ConditionPropertyType FISHING_ROD_CAST = register(RodCastConditionProperty.ID, RodCastConditionProperty.FACTORY, RodCastConditionProperty.READER); + public static final ConditionPropertyType SELECTED = register(Key.of("minecraft:selected"), SimpleConditionProperty.FACTORY, SimpleConditionProperty.READER); + public static final ConditionPropertyType USING_ITEM = register(UsingItemConditionProperty.ID, UsingItemConditionProperty.FACTORY, UsingItemConditionProperty.READER); + public static final ConditionPropertyType VIEW_ENTITY = register(Key.of("minecraft:view_entity"), SimpleConditionProperty.FACTORY, SimpleConditionProperty.READER); + public static final ConditionPropertyType HAS_COMPONENT = register(HasComponentConditionProperty.ID, HasComponentConditionProperty.FACTORY, HasComponentConditionProperty.READER); + public static final ConditionPropertyType KEYBIND_DOWN = register(KeyBindDownConditionProperty.ID, KeyBindDownConditionProperty.FACTORY, KeyBindDownConditionProperty.READER); + public static final ConditionPropertyType COMPONENT = register(ComponentConditionProperty.ID, ComponentConditionProperty.FACTORY, ComponentConditionProperty.READER); + + private ConditionProperties() {} + + public static ConditionPropertyType register(Key id, ConditionPropertyFactory factory, ConditionPropertyReader reader) { + ConditionPropertyType type = new ConditionPropertyType(id, factory, reader); + ((WritableRegistry) BuiltInRegistries.CONDITION_PROPERTY_TYPE) + .register(ResourceKey.create(Registries.CONDITION_PROPERTY_TYPE.location(), id), type); + return type; + } + + public static ConditionProperty fromMap(Map map) { + String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("property"), "warning.config.item.model.condition.missing_property"); + Key key = Key.withDefaultNamespace(type, "minecraft"); + ConditionPropertyType propertyType = BuiltInRegistries.CONDITION_PROPERTY_TYPE.getValue(key); + if (propertyType == null) { + throw new LocalizedResourceConfigException("warning.config.item.model.condition.invalid_property", type); + } + return propertyType.factory().create(map); + } + + public static ConditionProperty fromJson(JsonObject json) { + String type = json.get("property").getAsString(); + Key key = Key.withDefaultNamespace(type, "minecraft"); + ConditionPropertyType propertyType = BuiltInRegistries.CONDITION_PROPERTY_TYPE.getValue(key); + if (propertyType == null) { + throw new IllegalArgumentException("Invalid condition property type: " + key); + } + return propertyType.reader().read(json); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionProperty.java similarity index 70% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionProperty.java index 4680c534e..f825f1083 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,6 +6,4 @@ import net.momirealms.craftengine.core.util.Key; import java.util.function.Consumer; public interface ConditionProperty extends Consumer { - - Key type(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionPropertyFactory.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyFactory.java similarity index 64% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionPropertyFactory.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyFactory.java index b3d60032b..e22224848 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionPropertyFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyFactory.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import java.util.Map; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionPropertyReader.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyReader.java similarity index 64% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionPropertyReader.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyReader.java index 5b11bebd3..78d844059 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/ConditionPropertyReader.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyReader.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyType.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyType.java new file mode 100644 index 000000000..4600e453b --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/ConditionPropertyType.java @@ -0,0 +1,6 @@ +package net.momirealms.craftengine.core.pack.model.definition.condition; + +import net.momirealms.craftengine.core.util.Key; + +public record ConditionPropertyType(Key id, ConditionPropertyFactory factory, ConditionPropertyReader reader) { +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/CustomModelDataConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/CustomModelDataConditionProperty.java similarity index 60% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/CustomModelDataConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/CustomModelDataConditionProperty.java index 0e413e2dd..e7fc2e276 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/CustomModelDataConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/CustomModelDataConditionProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,28 +6,28 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class CustomModelDataConditionProperty implements ConditionProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class CustomModelDataConditionProperty implements ConditionProperty { + public static final Key ID = Key.of("minecraft:custom_model_data"); + public static final ConditionPropertyFactory FACTORY = new Factory(); + public static final ConditionPropertyReader READER = new Reader(); private final int index; public CustomModelDataConditionProperty(int index) { this.index = index; } - @Override - public Key type() { - return ConditionProperties.CUSTOM_MODEL_DATA; + public int index() { + return this.index; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); if (this.index != 0) jsonObject.addProperty("index", this.index); } - public static class Factory implements ConditionPropertyFactory { + private static class Factory implements ConditionPropertyFactory { @Override public ConditionProperty create(Map arguments) { int index = ResourceConfigUtils.getAsInt(arguments.getOrDefault("index", 0), "index"); @@ -35,7 +35,7 @@ public class CustomModelDataConditionProperty implements ConditionProperty { } } - public static class Reader implements ConditionPropertyReader { + private static class Reader implements ConditionPropertyReader { @Override public ConditionProperty read(JsonObject json) { int index = json.has("index") ? json.get("index").getAsInt() : 0; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/DamagedConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/DamagedConditionProperty.java similarity index 50% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/DamagedConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/DamagedConditionProperty.java index 2955ee8be..8caf6a400 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/DamagedConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/DamagedConditionProperty.java @@ -1,24 +1,22 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class DamagedConditionProperty implements ConditionProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class DamagedConditionProperty implements ConditionProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:damaged"); + public static final ConditionPropertyFactory FACTORY = new Factory(); + public static final ConditionPropertyReader READER = new Reader(); public static final DamagedConditionProperty INSTANCE = new DamagedConditionProperty(); - @Override - public Key type() { - return ConditionProperties.DAMAGED; - } + private DamagedConditionProperty() {} @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); } @Override @@ -31,14 +29,14 @@ public class DamagedConditionProperty implements ConditionProperty, LegacyModelP return value ? 1 : 0; } - public static class Factory implements ConditionPropertyFactory { + private static class Factory implements ConditionPropertyFactory { @Override public ConditionProperty create(Map arguments) { return INSTANCE; } } - public static class Reader implements ConditionPropertyReader { + private static class Reader implements ConditionPropertyReader { @Override public ConditionProperty read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/HasComponentConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/HasComponentConditionProperty.java similarity index 67% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/HasComponentConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/HasComponentConditionProperty.java index 0c4fb5846..7d4895e75 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/HasComponentConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/HasComponentConditionProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,9 +6,10 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class HasComponentConditionProperty implements ConditionProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class HasComponentConditionProperty implements ConditionProperty { + public static final Key ID = Key.of("minecraft:has_component"); + public static final ConditionPropertyFactory FACTORY = new Factory(); + public static final ConditionPropertyReader READER = new Reader(); private final String component; private final boolean ignoreDefault; @@ -18,29 +19,23 @@ public class HasComponentConditionProperty implements ConditionProperty { } public String component() { - return component; + return this.component; } public boolean ignoreDefault() { - return ignoreDefault; - } - - @Override - public Key type() { - return ConditionProperties.HAS_COMPONENT; + return this.ignoreDefault; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - jsonObject.addProperty("component", component); - if (ignoreDefault) { + jsonObject.addProperty("property", ID.asMinimalString()); + jsonObject.addProperty("component", this.component); + if (this.ignoreDefault) { jsonObject.addProperty("ignore_default", true); } } - public static class Factory implements ConditionPropertyFactory { - + private static class Factory implements ConditionPropertyFactory { @Override public ConditionProperty create(Map arguments) { boolean ignoreDefault = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("ignore-default", false), "ignore-default"); @@ -49,7 +44,7 @@ public class HasComponentConditionProperty implements ConditionProperty { } } - public static class Reader implements ConditionPropertyReader { + private static class Reader implements ConditionPropertyReader { @Override public ConditionProperty read(JsonObject json) { String component = json.get("component").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/KeyBindDownConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/KeyBindDownConditionProperty.java similarity index 57% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/KeyBindDownConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/KeyBindDownConditionProperty.java index acf925aee..fcc596a17 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/KeyBindDownConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/KeyBindDownConditionProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,27 +6,27 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class KeyBindDownConditionProperty implements ConditionProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class KeyBindDownConditionProperty implements ConditionProperty { + public static final Key ID = Key.of("minecraft:keybind_down"); + public static final ConditionPropertyFactory FACTORY = new Factory(); + public static final ConditionPropertyReader READER = new Reader(); private final String keybind; public KeyBindDownConditionProperty(String keybind) { this.keybind = keybind; } - @Override - public Key type() { - return ConditionProperties.KEYBIND_DOWN; + public String keybind() { + return this.keybind; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - jsonObject.addProperty("keybind", keybind); + jsonObject.addProperty("property", ID.asMinimalString()); + jsonObject.addProperty("keybind", this.keybind); } - public static class Factory implements ConditionPropertyFactory { + private static class Factory implements ConditionPropertyFactory { @Override public ConditionProperty create(Map arguments) { String keybindObj = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("keybind"), "warning.config.item.model.condition.keybind.missing_keybind"); @@ -34,7 +34,7 @@ public class KeyBindDownConditionProperty implements ConditionProperty { } } - public static class Reader implements ConditionPropertyReader { + private static class Reader implements ConditionPropertyReader { @Override public ConditionProperty read(JsonObject json) { String keybind = json.get("keybind").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/RodCastConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/RodCastConditionProperty.java similarity index 53% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/RodCastConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/RodCastConditionProperty.java index d4faf0d7b..efdad4a72 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/RodCastConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/RodCastConditionProperty.java @@ -1,25 +1,23 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.ItemKeys; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class RodCastConditionProperty implements ConditionProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class RodCastConditionProperty implements ConditionProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:fishing_rod/cast"); + public static final ConditionPropertyFactory FACTORY = new Factory(); + public static final ConditionPropertyReader READER = new Reader(); public static final RodCastConditionProperty INSTANCE = new RodCastConditionProperty(); - @Override - public Key type() { - return ConditionProperties.FISHING_ROD_CAST; - } + private RodCastConditionProperty() {} @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); } @Override @@ -33,14 +31,14 @@ public class RodCastConditionProperty implements ConditionProperty, LegacyModelP return value ? 1 : 0; } - public static class Factory implements ConditionPropertyFactory { + private static class Factory implements ConditionPropertyFactory { @Override public ConditionProperty create(Map arguments) { return INSTANCE; } } - public static class Reader implements ConditionPropertyReader { + private static class Reader implements ConditionPropertyReader { @Override public ConditionProperty read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/SimpleConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/SimpleConditionProperty.java similarity index 59% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/SimpleConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/SimpleConditionProperty.java index 61ff846fd..e97fa36ca 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/SimpleConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/SimpleConditionProperty.java @@ -1,30 +1,29 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class SimpleConditionProperty implements ConditionProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class SimpleConditionProperty implements ConditionProperty { + public static final ConditionPropertyFactory FACTORY = new Factory(); + public static final ConditionPropertyReader READER = new Reader(); private final Key type; public SimpleConditionProperty(Key type) { this.type = type; } - @Override public Key type() { return type; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", this.type.asMinimalString()); } - public static class Factory implements ConditionPropertyFactory { + private static class Factory implements ConditionPropertyFactory { @Override public ConditionProperty create(Map arguments) { Key type = Key.of(arguments.get("property").toString()); @@ -32,7 +31,7 @@ public class SimpleConditionProperty implements ConditionProperty { } } - public static class Reader implements ConditionPropertyReader { + private static class Reader implements ConditionPropertyReader { @Override public ConditionProperty read(JsonObject json) { return new SimpleConditionProperty(Key.of(json.get("property").getAsString())); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/UsingItemConditionProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/UsingItemConditionProperty.java similarity index 60% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/UsingItemConditionProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/UsingItemConditionProperty.java index 6a385429d..bf83e6942 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/condition/UsingItemConditionProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/condition/UsingItemConditionProperty.java @@ -1,25 +1,23 @@ -package net.momirealms.craftengine.core.pack.model.condition; +package net.momirealms.craftengine.core.pack.model.definition.condition; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.ItemKeys; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class UsingItemConditionProperty implements ConditionProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class UsingItemConditionProperty implements ConditionProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:using_item"); + public static final ConditionPropertyFactory FACTORY = new Factory(); + public static final ConditionPropertyReader READER = new Reader(); public static final UsingItemConditionProperty INSTANCE = new UsingItemConditionProperty(); - @Override - public Key type() { - return ConditionProperties.USING_ITEM; - } + private UsingItemConditionProperty() {} @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); } @Override @@ -36,14 +34,14 @@ public class UsingItemConditionProperty implements ConditionProperty, LegacyMode return value ? 1 : 0; } - public static class Factory implements ConditionPropertyFactory { + private static class Factory implements ConditionPropertyFactory { @Override public ConditionProperty create(Map arguments) { return INSTANCE; } } - public static class Reader implements ConditionPropertyReader { + private static class Reader implements ConditionPropertyReader { @Override public ConditionProperty read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CompassRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/CompassRangeDispatchProperty.java similarity index 66% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CompassRangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/CompassRangeDispatchProperty.java index f3a9b5d06..c8d3e657a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CompassRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/CompassRangeDispatchProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,9 +6,10 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class CompassRangeDispatchProperty implements RangeDispatchProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class CompassRangeDispatchProperty implements RangeDispatchProperty { + public static final Key ID = Key.of("minecraft:compass"); + public static final RangeDispatchPropertyFactory FACTORY = new Factory(); + public static final RangeDispatchPropertyReader READER = new Reader(); private final String target; private final boolean wobble; @@ -17,21 +18,24 @@ public class CompassRangeDispatchProperty implements RangeDispatchProperty { this.wobble = wobble; } - @Override - public Key type() { - return RangeDispatchProperties.COMPASS; + public String target() { + return this.target; + } + + public boolean wobble() { + return this.wobble; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); jsonObject.addProperty("target", this.target); if (!this.wobble) { jsonObject.addProperty("wobble", false); } } - public static class Factory implements RangeDispatchPropertyFactory { + private static class Factory implements RangeDispatchPropertyFactory { @Override public RangeDispatchProperty create(Map arguments) { String targetObj = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("target"), "warning.config.item.model.range_dispatch.compass.missing_target"); @@ -40,7 +44,7 @@ public class CompassRangeDispatchProperty implements RangeDispatchProperty { } } - public static class Reader implements RangeDispatchPropertyReader { + private static class Reader implements RangeDispatchPropertyReader { @Override public RangeDispatchProperty read(JsonObject json) { String target = json.get("target").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CrossBowPullingRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/CrossBowPullingRangeDispatchProperty.java similarity index 54% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CrossBowPullingRangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/CrossBowPullingRangeDispatchProperty.java index e32a42e1f..2379f58a1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CrossBowPullingRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/CrossBowPullingRangeDispatchProperty.java @@ -1,25 +1,23 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.ItemKeys; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class CrossBowPullingRangeDispatchProperty implements RangeDispatchProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class CrossBowPullingRangeDispatchProperty implements RangeDispatchProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:crossbow/pull"); + public static final RangeDispatchPropertyFactory FACTORY = new Factory(); + public static final RangeDispatchPropertyReader READER = new Reader(); public static final CrossBowPullingRangeDispatchProperty INSTANCE = new CrossBowPullingRangeDispatchProperty(); + private CrossBowPullingRangeDispatchProperty() {} + @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - } - - @Override - public Key type() { - return RangeDispatchProperties.CROSSBOW_PULL; + jsonObject.addProperty("property", ID.asMinimalString()); } @Override @@ -33,14 +31,14 @@ public class CrossBowPullingRangeDispatchProperty implements RangeDispatchProper return value; } - public static class Factory implements RangeDispatchPropertyFactory { + private static class Factory implements RangeDispatchPropertyFactory { @Override public RangeDispatchProperty create(Map arguments) { return INSTANCE; } } - public static class Reader implements RangeDispatchPropertyReader { + private static class Reader implements RangeDispatchPropertyReader { @Override public RangeDispatchProperty read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CustomModelDataRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/CustomModelDataRangeDispatchProperty.java similarity index 57% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CustomModelDataRangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/CustomModelDataRangeDispatchProperty.java index aeeb2dcc5..ee685e790 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/CustomModelDataRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/CustomModelDataRangeDispatchProperty.java @@ -1,30 +1,30 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class CustomModelDataRangeDispatchProperty implements RangeDispatchProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class CustomModelDataRangeDispatchProperty implements RangeDispatchProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:custom_model_data"); + public static final RangeDispatchPropertyFactory FACTORY = new Factory(); + public static final RangeDispatchPropertyReader READER = new Reader(); private final int index; public CustomModelDataRangeDispatchProperty(int index) { this.index = index; } - @Override - public Key type() { - return RangeDispatchProperties.CUSTOM_MODEL_DATA; + public int index() { + return this.index; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - jsonObject.addProperty("index", index); + jsonObject.addProperty("property", ID.asMinimalString()); + jsonObject.addProperty("index", this.index); } @Override @@ -37,7 +37,7 @@ public class CustomModelDataRangeDispatchProperty implements RangeDispatchProper return value.intValue(); } - public static class Factory implements RangeDispatchPropertyFactory { + private static class Factory implements RangeDispatchPropertyFactory { @Override public RangeDispatchProperty create(Map arguments) { int index = ResourceConfigUtils.getAsInt(arguments.getOrDefault("index", 0), "index"); @@ -45,7 +45,7 @@ public class CustomModelDataRangeDispatchProperty implements RangeDispatchProper } } - public static class Reader implements RangeDispatchPropertyReader { + private static class Reader implements RangeDispatchPropertyReader { @Override public RangeDispatchProperty read(JsonObject json) { int index = json.has("index") ? json.get("index").getAsInt() : 0; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/DamageRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/DamageRangeDispatchProperty.java similarity index 66% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/DamageRangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/DamageRangeDispatchProperty.java index a37939865..9fea67ef9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/DamageRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/DamageRangeDispatchProperty.java @@ -1,29 +1,29 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class DamageRangeDispatchProperty implements RangeDispatchProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class DamageRangeDispatchProperty implements RangeDispatchProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:damage"); + public static final RangeDispatchPropertyFactory FACTORY = new Factory(); + public static final RangeDispatchPropertyReader READER = new Reader(); private final boolean normalize; public DamageRangeDispatchProperty(boolean normalize) { this.normalize = normalize; } - @Override - public Key type() { - return RangeDispatchProperties.DAMAGE; + public boolean normalize() { + return this.normalize; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); if (!normalize) { jsonObject.addProperty("normalize", false); } @@ -41,7 +41,7 @@ public class DamageRangeDispatchProperty implements RangeDispatchProperty, Legac throw new RuntimeException("Enable 'normalize' option if you want to use 'damage' on 1.21.3 and below"); } - public static class Factory implements RangeDispatchPropertyFactory { + private static class Factory implements RangeDispatchPropertyFactory { @Override public RangeDispatchProperty create(Map arguments) { boolean normalize = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("normalize", true), "normalize"); @@ -49,7 +49,7 @@ public class DamageRangeDispatchProperty implements RangeDispatchProperty, Legac } } - public static class Reader implements RangeDispatchPropertyReader { + private static class Reader implements RangeDispatchPropertyReader { @Override public RangeDispatchProperty read(JsonObject json) { boolean normalize = !json.has("normalize") || json.get("normalize").getAsBoolean(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/NormalizeRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/NormalizeRangeDispatchProperty.java similarity index 65% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/NormalizeRangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/NormalizeRangeDispatchProperty.java index 24f4802ea..3b5559c70 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/NormalizeRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/NormalizeRangeDispatchProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,9 +6,9 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class NormalizeRangeDispatchProperty implements RangeDispatchProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class NormalizeRangeDispatchProperty implements RangeDispatchProperty { + public static final RangeDispatchPropertyFactory FACTORY = new Factory(); + public static final RangeDispatchPropertyReader READER = new Reader(); private final Key type; private final boolean normalize; @@ -17,20 +17,23 @@ public class NormalizeRangeDispatchProperty implements RangeDispatchProperty { this.normalize = normalize; } - @Override public Key type() { - return type; + return this.type; + } + + public boolean normalize() { + return this.normalize; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - if (!normalize) { + jsonObject.addProperty("property", this.type.asMinimalString()); + if (!this.normalize) { jsonObject.addProperty("normalize", false); } } - public static class Factory implements RangeDispatchPropertyFactory { + private static class Factory implements RangeDispatchPropertyFactory { @Override public RangeDispatchProperty create(Map arguments) { Key type = Key.of(arguments.get("property").toString()); @@ -39,7 +42,7 @@ public class NormalizeRangeDispatchProperty implements RangeDispatchProperty { } } - public static class Reader implements RangeDispatchPropertyReader { + private static class Reader implements RangeDispatchPropertyReader { @Override public RangeDispatchProperty read(JsonObject json) { Key type = Key.of(json.get("property").toString()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchProperties.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchProperties.java new file mode 100644 index 000000000..98ddcbae9 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchProperties.java @@ -0,0 +1,54 @@ +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; + +import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.ResourceKey; + +import java.util.Map; + +public final class RangeDispatchProperties { + public static final RangeDispatchPropertyType BUNDLE_FULLNESS = register(Key.of("minecraft:bundle/fullness"), SimpleRangeDispatchProperty.FACTORY, SimpleRangeDispatchProperty.READER); + public static final RangeDispatchPropertyType COMPASS = register(CompassRangeDispatchProperty.ID, CompassRangeDispatchProperty.FACTORY, CompassRangeDispatchProperty.READER); + public static final RangeDispatchPropertyType COOLDOWN = register(Key.of("minecraft:cooldown"), SimpleRangeDispatchProperty.FACTORY, SimpleRangeDispatchProperty.READER); + public static final RangeDispatchPropertyType COUNT = register(Key.of("minecraft:count"), NormalizeRangeDispatchProperty.FACTORY, NormalizeRangeDispatchProperty.READER); + public static final RangeDispatchPropertyType CROSSBOW_PULL = register(CrossBowPullingRangeDispatchProperty.ID, CrossBowPullingRangeDispatchProperty.FACTORY, CrossBowPullingRangeDispatchProperty.READER); + public static final RangeDispatchPropertyType CUSTOM_MODEL_DATA = register(CustomModelDataRangeDispatchProperty.ID, CustomModelDataRangeDispatchProperty.FACTORY, CustomModelDataRangeDispatchProperty.READER); + public static final RangeDispatchPropertyType DAMAGE = register(DamageRangeDispatchProperty.ID, DamageRangeDispatchProperty.FACTORY, DamageRangeDispatchProperty.READER); + public static final RangeDispatchPropertyType TIME = register(TimeRangeDispatchProperty.ID, TimeRangeDispatchProperty.FACTORY, TimeRangeDispatchProperty.READER); + public static final RangeDispatchPropertyType USE_CYCLE = register(UseCycleRangeDispatchProperty.ID, UseCycleRangeDispatchProperty.FACTORY, UseCycleRangeDispatchProperty.READER); + public static final RangeDispatchPropertyType USE_DURATION = register(UseDurationRangeDispatchProperty.ID, UseDurationRangeDispatchProperty.FACTORY, UseDurationRangeDispatchProperty.READER); + + private RangeDispatchProperties() {} + + public static RangeDispatchPropertyType register(Key id, RangeDispatchPropertyFactory factory, RangeDispatchPropertyReader reader) { + RangeDispatchPropertyType type = new RangeDispatchPropertyType(id, factory, reader); + ((WritableRegistry) BuiltInRegistries.RANGE_DISPATCH_PROPERTY_TYPE) + .register(ResourceKey.create(Registries.RANGE_DISPATCH_PROPERTY_TYPE.location(), id), type); + return type; + } + + public static RangeDispatchProperty fromMap(Map map) { + String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("property"), "warning.config.item.model.range_dispatch.missing_property"); + Key key = Key.withDefaultNamespace(type, "minecraft"); + RangeDispatchPropertyType propertyType = BuiltInRegistries.RANGE_DISPATCH_PROPERTY_TYPE.getValue(key); + if (propertyType == null) { + throw new LocalizedResourceConfigException("warning.config.item.model.range_dispatch.invalid_property", type); + } + return propertyType.factory().create(map); + } + + public static RangeDispatchProperty fromJson(JsonObject json) { + String type = json.get("property").getAsString(); + Key key = Key.withDefaultNamespace(type, "minecraft"); + RangeDispatchPropertyType propertyType = BuiltInRegistries.RANGE_DISPATCH_PROPERTY_TYPE.getValue(key); + if (propertyType == null) { + throw new IllegalArgumentException("Invalid range dispatch property type: " + key); + } + return propertyType.reader().read(json); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchProperty.java similarity index 52% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchProperty.java index c6fb47b48..641722dea 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchProperty.java @@ -1,11 +1,8 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.util.Key; import java.util.function.Consumer; public interface RangeDispatchProperty extends Consumer { - - Key type(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchPropertyFactory.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyFactory.java similarity index 64% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchPropertyFactory.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyFactory.java index 0d5a274de..bed02e697 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchPropertyFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyFactory.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import java.util.Map; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchPropertyReader.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyReader.java similarity index 64% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchPropertyReader.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyReader.java index adcd719d0..0d0fd9a13 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchPropertyReader.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyReader.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyType.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyType.java new file mode 100644 index 000000000..539ecec28 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/RangeDispatchPropertyType.java @@ -0,0 +1,6 @@ +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; + +import net.momirealms.craftengine.core.util.Key; + +public record RangeDispatchPropertyType(Key id, RangeDispatchPropertyFactory factory, RangeDispatchPropertyReader reader) { +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/SimpleRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/SimpleRangeDispatchProperty.java similarity index 58% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/SimpleRangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/SimpleRangeDispatchProperty.java index 5c637e301..28ea5aa66 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/SimpleRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/SimpleRangeDispatchProperty.java @@ -1,30 +1,29 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class SimpleRangeDispatchProperty implements RangeDispatchProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class SimpleRangeDispatchProperty implements RangeDispatchProperty { + public static final RangeDispatchPropertyFactory FACTORY = new Factory(); + public static final RangeDispatchPropertyReader READER = new Reader(); private final Key type; public SimpleRangeDispatchProperty(Key type) { this.type = type; } + public Key type() { + return this.type; + } + @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type.toString()); + jsonObject.addProperty("property", this.type.asMinimalString()); } - @Override - public Key type() { - return type; - } - - public static class Factory implements RangeDispatchPropertyFactory { + private static class Factory implements RangeDispatchPropertyFactory { @Override public RangeDispatchProperty create(Map arguments) { Key type = Key.of(arguments.get("property").toString()); @@ -32,7 +31,7 @@ public class SimpleRangeDispatchProperty implements RangeDispatchProperty { } } - public static class Reader implements RangeDispatchPropertyReader { + private static class Reader implements RangeDispatchPropertyReader { @Override public RangeDispatchProperty read(JsonObject json) { Key type = Key.of(json.get("property").getAsString()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/TimeRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/TimeRangeDispatchProperty.java similarity index 62% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/TimeRangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/TimeRangeDispatchProperty.java index bebe9a895..f9281a88c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/TimeRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/TimeRangeDispatchProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,9 +6,10 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class TimeRangeDispatchProperty implements RangeDispatchProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class TimeRangeDispatchProperty implements RangeDispatchProperty { + public static final Key ID = Key.of("minecraft:time"); + public static final RangeDispatchPropertyFactory FACTORY = new Factory(); + public static final RangeDispatchPropertyReader READER = new Reader(); private final String source; private final boolean wobble; @@ -17,21 +18,24 @@ public class TimeRangeDispatchProperty implements RangeDispatchProperty { this.wobble = wobble; } - @Override - public Key type() { - return RangeDispatchProperties.TIME; + public String source() { + return this.source; + } + + public boolean wobble() { + return this.wobble; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - jsonObject.addProperty("source", source); - if (!wobble) { + jsonObject.addProperty("property", ID.asMinimalString()); + jsonObject.addProperty("source", this.source); + if (!this.wobble) { jsonObject.addProperty("wobble", false); } } - public static class Factory implements RangeDispatchPropertyFactory { + private static class Factory implements RangeDispatchPropertyFactory { @Override public RangeDispatchProperty create(Map arguments) { String sourceObj = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("source"), "warning.config.item.model.range_dispatch.time.missing_source"); @@ -40,7 +44,7 @@ public class TimeRangeDispatchProperty implements RangeDispatchProperty { } } - public static class Reader implements RangeDispatchPropertyReader { + private static class Reader implements RangeDispatchPropertyReader { @Override public RangeDispatchProperty read(JsonObject json) { String source = json.get("source").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseCycleRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/UseCycleRangeDispatchProperty.java similarity index 56% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseCycleRangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/UseCycleRangeDispatchProperty.java index b585a7633..c9ed02851 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseCycleRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/UseCycleRangeDispatchProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,27 +6,27 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class UseCycleRangeDispatchProperty implements RangeDispatchProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class UseCycleRangeDispatchProperty implements RangeDispatchProperty { + public static final Key ID = Key.of("minecraft:use_cycle"); + public static final RangeDispatchPropertyFactory FACTORY = new Factory(); + public static final RangeDispatchPropertyReader READER = new Reader(); private final float period; public UseCycleRangeDispatchProperty(float period) { this.period = period; } - @Override - public Key type() { - return RangeDispatchProperties.USE_CYCLE; + public float period() { + return this.period; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - jsonObject.addProperty("period", period); + jsonObject.addProperty("property", ID.asMinimalString()); + jsonObject.addProperty("period", this.period); } - public static class Factory implements RangeDispatchPropertyFactory { + private static class Factory implements RangeDispatchPropertyFactory { @Override public RangeDispatchProperty create(Map arguments) { float period = ResourceConfigUtils.getAsFloat(arguments.getOrDefault("period", 0), "period"); @@ -34,7 +34,7 @@ public class UseCycleRangeDispatchProperty implements RangeDispatchProperty { } } - public static class Reader implements RangeDispatchPropertyReader { + private static class Reader implements RangeDispatchPropertyReader { @Override public RangeDispatchProperty read(JsonObject json) { float period = json.has("period") ? json.get("period").getAsFloat() : 1.0f; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/UseDurationRangeDispatchProperty.java similarity index 62% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/UseDurationRangeDispatchProperty.java index a8f17ff84..e9de76da2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/UseDurationRangeDispatchProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/rangedisptach/UseDurationRangeDispatchProperty.java @@ -1,31 +1,31 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; +package net.momirealms.craftengine.core.pack.model.definition.rangedisptach; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.ItemKeys; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class UseDurationRangeDispatchProperty implements RangeDispatchProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class UseDurationRangeDispatchProperty implements RangeDispatchProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:use_duration"); + public static final RangeDispatchPropertyFactory FACTORY = new Factory(); + public static final RangeDispatchPropertyReader READER = new Reader(); private final boolean remaining; public UseDurationRangeDispatchProperty(boolean remaining) { this.remaining = remaining; } - @Override - public Key type() { - return RangeDispatchProperties.USE_DURATION; + public boolean remaining() { + return this.remaining; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - if (remaining) { + jsonObject.addProperty("property", ID.asMinimalString()); + if (this.remaining) { jsonObject.addProperty("remaining", true); } } @@ -41,7 +41,7 @@ public class UseDurationRangeDispatchProperty implements RangeDispatchProperty, return value; } - public static class Factory implements RangeDispatchPropertyFactory { + private static class Factory implements RangeDispatchPropertyFactory { @Override public RangeDispatchProperty create(Map arguments) { boolean remaining = ResourceConfigUtils.getAsBoolean(arguments.getOrDefault("remaining", false), "remaining"); @@ -49,7 +49,7 @@ public class UseDurationRangeDispatchProperty implements RangeDispatchProperty, } } - public static class Reader implements RangeDispatchPropertyReader { + private static class Reader implements RangeDispatchPropertyReader { @Override public RangeDispatchProperty read(JsonObject json) { boolean remaining = json.has("remaining") && json.get("remaining").getAsBoolean(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/BlockStateSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/BlockStateSelectProperty.java similarity index 58% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/BlockStateSelectProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/BlockStateSelectProperty.java index c894e9c59..c8280dd72 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/BlockStateSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/BlockStateSelectProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,27 +6,27 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class BlockStateSelectProperty implements SelectProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class BlockStateSelectProperty implements SelectProperty { + public static final Key ID = Key.of("minecraft:block_state"); + public static final SelectPropertyFactory FACTORY = new Factory(); + public static final SelectPropertyReader READER = new Reader(); private final String blockStateProperty; public BlockStateSelectProperty(String blockStateProperty) { this.blockStateProperty = blockStateProperty; } - @Override - public Key type() { - return SelectProperties.BLOCK_STATE; + public String blockStateProperty() { + return this.blockStateProperty; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - jsonObject.addProperty("block_state_property", blockStateProperty); + jsonObject.addProperty("property", ID.asMinimalString()); + jsonObject.addProperty("block_state_property", this.blockStateProperty); } - public static class Factory implements SelectPropertyFactory { + private static class Factory implements SelectPropertyFactory { @Override public SelectProperty create(Map arguments) { String property = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("block-state-property"), "warning.config.item.model.select.block_state.missing_property"); @@ -34,7 +34,7 @@ public class BlockStateSelectProperty implements SelectProperty { } } - public static class Reader implements SelectPropertyReader { + private static class Reader implements SelectPropertyReader { @Override public SelectProperty read(JsonObject json) { String property = json.get("block_state_property").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ChargeTypeSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/ChargeTypeSelectProperty.java similarity index 55% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ChargeTypeSelectProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/ChargeTypeSelectProperty.java index ce324f274..eb22a408b 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ChargeTypeSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/ChargeTypeSelectProperty.java @@ -1,25 +1,23 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.item.ItemKeys; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class ChargeTypeSelectProperty implements SelectProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class ChargeTypeSelectProperty implements SelectProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:charge_type"); + public static final SelectPropertyFactory FACTORY = new Factory(); + public static final SelectPropertyReader READER = new Reader(); public static final ChargeTypeSelectProperty INSTANCE = new ChargeTypeSelectProperty(); - @Override - public Key type() { - return SelectProperties.CHARGE_TYPE; - } + private ChargeTypeSelectProperty() {} @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); } @Override @@ -34,14 +32,14 @@ public class ChargeTypeSelectProperty implements SelectProperty, LegacyModelPred return 0; } - public static class Factory implements SelectPropertyFactory { + private static class Factory implements SelectPropertyFactory { @Override public SelectProperty create(Map arguments) { return INSTANCE; } } - public static class Reader implements SelectPropertyReader { + private static class Reader implements SelectPropertyReader { @Override public SelectProperty read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ComponentSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/ComponentSelectProperty.java similarity index 62% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ComponentSelectProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/ComponentSelectProperty.java index 3448a3f4d..0a39106a4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/ComponentSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/ComponentSelectProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,27 +6,27 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class ComponentSelectProperty implements SelectProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class ComponentSelectProperty implements SelectProperty { + public static final Key ID = Key.of("minecraft:component"); + public static final SelectPropertyFactory FACTORY = new Factory(); + public static final SelectPropertyReader READER = new Reader(); private final String component; public ComponentSelectProperty(String component) { this.component = component; } - @Override - public Key type() { - return SelectProperties.COMPONENT; + public String component() { + return this.component; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); jsonObject.addProperty("component", this.component); } - public static class Factory implements SelectPropertyFactory { + private static class Factory implements SelectPropertyFactory { @Override public SelectProperty create(Map arguments) { String component = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("component"), "warning.config.item.model.select.component.missing_component"); @@ -34,7 +34,7 @@ public class ComponentSelectProperty implements SelectProperty { } } - public static class Reader implements SelectPropertyReader { + private static class Reader implements SelectPropertyReader { @Override public SelectProperty read(JsonObject json) { String component = json.get("component").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/CustomModelDataSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/CustomModelDataSelectProperty.java similarity index 56% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/CustomModelDataSelectProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/CustomModelDataSelectProperty.java index bf318036d..60bfeaf39 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/CustomModelDataSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/CustomModelDataSelectProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -6,27 +6,27 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class CustomModelDataSelectProperty implements SelectProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class CustomModelDataSelectProperty implements SelectProperty { + public static final Key ID = Key.of("minecraft:custom_model_data"); + public static final SelectPropertyFactory FACTORY = new Factory(); + public static final SelectPropertyReader READER = new Reader(); private final int index; public CustomModelDataSelectProperty(int index) { this.index = index; } - @Override - public Key type() { - return SelectProperties.CUSTOM_MODEL_DATA; + public int index() { + return this.index; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - jsonObject.addProperty("index", index); + jsonObject.addProperty("property", ID.asMinimalString()); + jsonObject.addProperty("index", this.index); } - public static class Factory implements SelectPropertyFactory { + private static class Factory implements SelectPropertyFactory { @Override public SelectProperty create(Map arguments) { int index = ResourceConfigUtils.getAsInt(arguments.getOrDefault("index", 0), "index"); @@ -34,7 +34,7 @@ public class CustomModelDataSelectProperty implements SelectProperty { } } - public static class Reader implements SelectPropertyReader { + private static class Reader implements SelectPropertyReader { @Override public SelectProperty read(JsonObject json) { int index = json.has("index") ? json.get("index").getAsInt() : 0; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/DisplayContextSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/DisplayContextSelectProperty.java similarity index 71% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/DisplayContextSelectProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/DisplayContextSelectProperty.java index 8b2e953a7..82fbf64d9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/DisplayContextSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/DisplayContextSelectProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -12,19 +12,17 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; -public class DisplayContextSelectProperty implements SelectProperty { +public final class DisplayContextSelectProperty implements SelectProperty { + public static final Key ID = Key.of("minecraft:display_context"); public static final DisplayContextSelectProperty INSTANCE = new DisplayContextSelectProperty(); - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); + public static final SelectPropertyFactory FACTORY = new Factory(); + public static final SelectPropertyReader READER = new Reader(); - @Override - public Key type() { - return SelectProperties.DISPLAY_CONTEXT; - } + private DisplayContextSelectProperty() {} @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); } @Override @@ -45,14 +43,14 @@ public class DisplayContextSelectProperty implements SelectProperty { return element; } - public static class Factory implements SelectPropertyFactory { + private static class Factory implements SelectPropertyFactory { @Override public SelectProperty create(Map arguments) { return INSTANCE; } } - public static class Reader implements SelectPropertyReader { + private static class Reader implements SelectPropertyReader { @Override public SelectProperty read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/LocalTimeSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/LocalTimeSelectProperty.java similarity index 72% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/LocalTimeSelectProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/LocalTimeSelectProperty.java index 3009ab33d..e16616781 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/LocalTimeSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/LocalTimeSelectProperty.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -8,9 +8,10 @@ import org.jetbrains.annotations.Nullable; import java.util.Map; -public class LocalTimeSelectProperty implements SelectProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class LocalTimeSelectProperty implements SelectProperty { + public static final Key ID = Key.of("minecraft:local_time"); + public static final SelectPropertyFactory FACTORY = new Factory(); + public static final SelectPropertyReader READER = new Reader(); private final String pattern; private final String locale; private final String timeZone; @@ -23,14 +24,21 @@ public class LocalTimeSelectProperty implements SelectProperty { this.timeZone = timeZone; } - @Override - public Key type() { - return SelectProperties.LOCAL_TIME; + public String pattern() { + return this.pattern; + } + + public String locale() { + return this.locale; + } + + public String timeZone() { + return this.timeZone; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); jsonObject.addProperty("pattern", this.pattern); if (this.locale != null) { jsonObject.addProperty("locale", this.locale); @@ -40,7 +48,7 @@ public class LocalTimeSelectProperty implements SelectProperty { } } - public static class Factory implements SelectPropertyFactory { + private static class Factory implements SelectPropertyFactory { @Override public SelectProperty create(Map arguments) { String pattern = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("pattern"), "warning.config.item.model.select.local_time.missing_pattern"); @@ -50,7 +58,7 @@ public class LocalTimeSelectProperty implements SelectProperty { } } - public static class Reader implements SelectPropertyReader { + private static class Reader implements SelectPropertyReader { @Override public SelectProperty read(JsonObject json) { String pattern = json.get("pattern").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/MainHandSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/MainHandSelectProperty.java similarity index 52% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/MainHandSelectProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/MainHandSelectProperty.java index ca0bdb6b1..e7e8128c1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/MainHandSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/MainHandSelectProperty.java @@ -1,24 +1,22 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class MainHandSelectProperty implements SelectProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class MainHandSelectProperty implements SelectProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:main_hand"); + public static final SelectPropertyFactory FACTORY = new Factory(); + public static final SelectPropertyReader READER = new Reader(); public static final MainHandSelectProperty INSTANCE = new MainHandSelectProperty(); - @Override - public Key type() { - return SelectProperties.MAIN_HAND; - } + private MainHandSelectProperty() {} @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", ID.asMinimalString()); } @Override @@ -32,14 +30,14 @@ public class MainHandSelectProperty implements SelectProperty, LegacyModelPredic return 0; } - public static class Factory implements SelectPropertyFactory { + private static class Factory implements SelectPropertyFactory { @Override public SelectProperty create(Map arguments) { return INSTANCE; } } - public static class Reader implements SelectPropertyReader { + private static class Reader implements SelectPropertyReader { @Override public SelectProperty read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectProperties.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectProperties.java new file mode 100644 index 000000000..56057f9e1 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectProperties.java @@ -0,0 +1,54 @@ +package net.momirealms.craftengine.core.pack.model.definition.select; + +import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.ResourceKey; + +import java.util.Map; + +public final class SelectProperties { + public static final SelectPropertyType BLOCK_STATE = register(BlockStateSelectProperty.ID, BlockStateSelectProperty.FACTORY, BlockStateSelectProperty.READER); + public static final SelectPropertyType CHARGE_TYPE = register(ChargeTypeSelectProperty.ID, ChargeTypeSelectProperty.FACTORY, ChargeTypeSelectProperty.READER); + public static final SelectPropertyType CONTEXT_DIMENSION = register(Key.of("minecraft:context_dimension"), SimpleSelectProperty.FACTORY, SimpleSelectProperty.READER); + public static final SelectPropertyType CONTEXT_ENTITY_TYPE = register(Key.of("minecraft:context_entity_type"), SimpleSelectProperty.FACTORY, SimpleSelectProperty.READER); + public static final SelectPropertyType DISPLAY_CONTEXT = register(DisplayContextSelectProperty.ID, DisplayContextSelectProperty.FACTORY, DisplayContextSelectProperty.READER); + public static final SelectPropertyType MAIN_HAND = register(MainHandSelectProperty.ID, MainHandSelectProperty.FACTORY, MainHandSelectProperty.READER); + public static final SelectPropertyType TRIM_MATERIAL = register(TrimMaterialSelectProperty.ID, TrimMaterialSelectProperty.FACTORY, TrimMaterialSelectProperty.READER); + public static final SelectPropertyType CUSTOM_MODEL_DATA = register(CustomModelDataSelectProperty.ID, CustomModelDataSelectProperty.FACTORY, CustomModelDataSelectProperty.READER); + public static final SelectPropertyType LOCAL_TIME = register(LocalTimeSelectProperty.ID, LocalTimeSelectProperty.FACTORY, LocalTimeSelectProperty.READER); + public static final SelectPropertyType COMPONENT = register(ComponentSelectProperty.ID, ComponentSelectProperty.FACTORY, ComponentSelectProperty.READER); + + private SelectProperties() {} + + public static SelectPropertyType register(Key id, SelectPropertyFactory factory, SelectPropertyReader reader) { + SelectPropertyType type = new SelectPropertyType(id, factory, reader); + ((WritableRegistry) BuiltInRegistries.SELECT_PROPERTY_TYPE) + .register(ResourceKey.create(Registries.SELECT_PROPERTY_TYPE.location(), id), type); + return type; + } + + public static SelectProperty fromMap(Map map) { + String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("property"), "warning.config.item.model.select.missing_property"); + Key key = Key.withDefaultNamespace(type, "minecraft"); + SelectPropertyType selectPropertyType = BuiltInRegistries.SELECT_PROPERTY_TYPE.getValue(key); + if (selectPropertyType == null) { + throw new LocalizedResourceConfigException("warning.config.item.model.select.invalid_property", type); + } + return selectPropertyType.factory().create(map); + } + + public static SelectProperty fromJson(JsonObject json) { + String type = json.get("property").getAsString(); + Key key = Key.withDefaultNamespace(type, "minecraft"); + SelectPropertyType selectPropertyType = BuiltInRegistries.SELECT_PROPERTY_TYPE.getValue(key); + if (selectPropertyType == null) { + throw new IllegalArgumentException("Invalid select property type: " + key); + } + return selectPropertyType.reader().read(json); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectProperty.java similarity index 83% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectProperty.java index 4b33b96cb..add90bb40 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectProperty.java @@ -1,9 +1,8 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; -import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MinecraftVersion; import javax.annotation.Nullable; @@ -13,8 +12,6 @@ import java.util.function.Consumer; public interface SelectProperty extends Consumer { - Key type(); - default List revisions(JsonElement element) { return Collections.emptyList(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectPropertyFactory.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyFactory.java similarity index 64% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectPropertyFactory.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyFactory.java index e44598784..18eeb80ee 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectPropertyFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyFactory.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import java.util.Map; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectPropertyReader.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyReader.java similarity index 64% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectPropertyReader.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyReader.java index f270388c8..288ebf241 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectPropertyReader.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyReader.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonObject; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyType.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyType.java new file mode 100644 index 000000000..936afc70c --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SelectPropertyType.java @@ -0,0 +1,6 @@ +package net.momirealms.craftengine.core.pack.model.definition.select; + +import net.momirealms.craftengine.core.util.Key; + +public record SelectPropertyType(Key id, SelectPropertyFactory factory, SelectPropertyReader reader) { +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SimpleSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SimpleSelectProperty.java similarity index 59% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SimpleSelectProperty.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SimpleSelectProperty.java index c108fc94f..d61cfde1e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SimpleSelectProperty.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/SimpleSelectProperty.java @@ -1,30 +1,29 @@ -package net.momirealms.craftengine.core.pack.model.select; +package net.momirealms.craftengine.core.pack.model.definition.select; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; import java.util.Map; -public class SimpleSelectProperty implements SelectProperty { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class SimpleSelectProperty implements SelectProperty { + public static final SelectPropertyFactory FACTORY = new Factory(); + public static final SelectPropertyReader READER = new Reader(); private final Key type; public SimpleSelectProperty(Key type) { this.type = type; } - @Override public Key type() { - return type; + return this.type; } @Override public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); + jsonObject.addProperty("property", this.type.asMinimalString()); } - public static class Factory implements SelectPropertyFactory { + private static class Factory implements SelectPropertyFactory { @Override public SelectProperty create(Map arguments) { Key type = Key.of(arguments.get("property").toString()); @@ -32,7 +31,7 @@ public class SimpleSelectProperty implements SelectProperty { } } - public static class Reader implements SelectPropertyReader { + private static class Reader implements SelectPropertyReader { @Override public SelectProperty read(JsonObject json) { Key type = Key.of(json.get("property").getAsString()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/TrimMaterialSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/TrimMaterialSelectProperty.java new file mode 100644 index 000000000..ccab1ec30 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/select/TrimMaterialSelectProperty.java @@ -0,0 +1,65 @@ +package net.momirealms.craftengine.core.pack.model.definition.select; + +import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.pack.model.legacy.LegacyModelPredicate; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.MiscUtils; + +import java.util.HashMap; +import java.util.Map; + +public final class TrimMaterialSelectProperty implements SelectProperty, LegacyModelPredicate { + public static final Key ID = Key.of("minecraft:trim_material"); + public static final SelectPropertyFactory FACTORY = new Factory(); + public static final SelectPropertyReader READER = new Reader(); + public static final TrimMaterialSelectProperty INSTANCE = new TrimMaterialSelectProperty(); + private static final Map LEGACY_TRIM_DATA = MiscUtils.init(new HashMap<>(), map -> { + map.put("minecraft:quartz", 0.1f); + map.put("minecraft:iron", 0.2f); + map.put("minecraft:netherite", 0.3f); + map.put("minecraft:redstone", 0.4f); + map.put("minecraft:copper", 0.5f); + map.put("minecraft:gold", 0.6f); + map.put("minecraft:emerald", 0.7f); + map.put("minecraft:diamond", 0.8f); + map.put("minecraft:lapis", 0.9f); + map.put("minecraft:amethyst", 1.0f); + // INVALID + map.put("minecraft:resin", 1.1F); + }); + + private TrimMaterialSelectProperty() {} + + @Override + public void accept(JsonObject jsonObject) { + jsonObject.addProperty("property", ID.asMinimalString()); + } + + @Override + public String legacyPredicateId(Key material) { + return "trim_type"; + } + + @Override + public Number toLegacyValue(String value) { + Float f = LEGACY_TRIM_DATA.get(value); + if (f == null) { + throw new IllegalArgumentException("Invalid trim material '" + value + "'"); + } + return f; + } + + private static class Factory implements SelectPropertyFactory { + @Override + public SelectProperty create(Map arguments) { + return INSTANCE; + } + } + + private static class Reader implements SelectPropertyReader { + @Override + public SelectProperty read(JsonObject json) { + return INSTANCE; + } + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/BannerSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/BannerSpecialModel.java similarity index 68% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/BannerSpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/BannerSpecialModel.java index 64734b778..40762cebd 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/BannerSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/BannerSpecialModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -9,18 +9,18 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.List; import java.util.Map; -public class BannerSpecialModel implements SpecialModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class BannerSpecialModel implements SpecialModel { + public static final Key ID = Key.of("minecraft:banner"); + public static final SpecialModelFactory FACTORY = new Factory(); + public static final SpecialModelReader READER = new Reader(); private final String color; public BannerSpecialModel(String color) { this.color = color; } - @Override - public Key type() { - return SpecialModels.BANNER; + public String color() { + return this.color; } @Override @@ -31,12 +31,12 @@ public class BannerSpecialModel implements SpecialModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); json.addProperty("color", this.color); return json; } - public static class Factory implements SpecialModelFactory { + private static class Factory implements SpecialModelFactory { @Override public SpecialModel create(Map arguments) { String color = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("color"), "warning.config.item.model.special.banner.missing_color"); @@ -44,7 +44,7 @@ public class BannerSpecialModel implements SpecialModel { } } - public static class Reader implements SpecialModelReader { + private static class Reader implements SpecialModelReader { @Override public SpecialModel read(JsonObject json) { String color = json.get("color").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/BedSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/BedSpecialModel.java similarity index 65% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/BedSpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/BedSpecialModel.java index accd8abff..273d483da 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/BedSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/BedSpecialModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -9,25 +9,25 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.List; import java.util.Map; -public class BedSpecialModel implements SpecialModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class BedSpecialModel implements SpecialModel { + public static final Key ID = Key.of("minecraft:bed"); + public static final SpecialModelFactory FACTORY = new Factory(); + public static final SpecialModelReader READER = new Reader(); private final String texture; public BedSpecialModel(String texture) { this.texture = texture; } - @Override - public Key type() { - return SpecialModels.BED; + public String texture() { + return this.texture; } @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); - json.addProperty("texture", texture); + json.addProperty("type", ID.asMinimalString()); + json.addProperty("texture", this.texture); return json; } @@ -36,7 +36,7 @@ public class BedSpecialModel implements SpecialModel { return List.of(); } - public static class Factory implements SpecialModelFactory { + private static class Factory implements SpecialModelFactory { @Override public SpecialModel create(Map arguments) { String texture = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("texture"), "warning.config.item.model.special.bed.missing_texture"); @@ -44,7 +44,7 @@ public class BedSpecialModel implements SpecialModel { } } - public static class Reader implements SpecialModelReader { + private static class Reader implements SpecialModelReader { @Override public SpecialModel read(JsonObject json) { String texture = json.get("texture").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ChestSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/ChestSpecialModel.java similarity index 69% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ChestSpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/ChestSpecialModel.java index e7a7b4dfe..ca0ef193d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ChestSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/ChestSpecialModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -10,9 +10,10 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.List; import java.util.Map; -public class ChestSpecialModel implements SpecialModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class ChestSpecialModel implements SpecialModel { + public static final Key ID = Key.of("minecraft:chest"); + public static final SpecialModelFactory FACTORY = new Factory(); + public static final SpecialModelReader READER = new Reader(); private final String texture; private final float openness; @@ -21,9 +22,12 @@ public class ChestSpecialModel implements SpecialModel { this.openness = openness; } - @Override - public Key type() { - return SpecialModels.CHEST; + public String texture() { + return this.texture; + } + + public float openness() { + return this.openness; } @Override @@ -34,15 +38,15 @@ public class ChestSpecialModel implements SpecialModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); - json.addProperty("texture", texture); - if (openness > 0) { - json.addProperty("openness", openness); + json.addProperty("type", ID.asMinimalString()); + json.addProperty("texture", this.texture); + if (this.openness > 0) { + json.addProperty("openness", this.openness); } return json; } - public static class Factory implements SpecialModelFactory { + private static class Factory implements SpecialModelFactory { @Override public SpecialModel create(Map arguments) { float openness = ResourceConfigUtils.getAsFloat(arguments.getOrDefault("openness", 0), "openness"); @@ -54,7 +58,7 @@ public class ChestSpecialModel implements SpecialModel { } } - public static class Reader implements SpecialModelReader { + private static class Reader implements SpecialModelReader { @Override public SpecialModel read(JsonObject json) { float openness = json.has("openness") ? json.get("openness").getAsFloat() : 0; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/CopperGolemStatueSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/CopperGolemStatueSpecialModel.java similarity index 71% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/CopperGolemStatueSpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/CopperGolemStatueSpecialModel.java index 132461a83..aaa032b05 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/CopperGolemStatueSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/CopperGolemStatueSpecialModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -9,9 +9,10 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.List; import java.util.Map; -public class CopperGolemStatueSpecialModel implements SpecialModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class CopperGolemStatueSpecialModel implements SpecialModel { + public static final Key ID = Key.of("minecraft:copper_golem_statue"); + public static final SpecialModelFactory FACTORY = new Factory(); + public static final SpecialModelReader READER = new Reader(); private final String pose; private final String texture; @@ -20,9 +21,12 @@ public class CopperGolemStatueSpecialModel implements SpecialModel { this.texture = texture; } - @Override - public Key type() { - return SpecialModels.COPPER_GOLEM_STATUE; + public String pose() { + return this.pose; + } + + public String texture() { + return this.texture; } @Override @@ -33,13 +37,13 @@ public class CopperGolemStatueSpecialModel implements SpecialModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); json.addProperty("pose", this.pose); json.addProperty("texture", this.texture); return json; } - public static class Factory implements SpecialModelFactory { + private static class Factory implements SpecialModelFactory { @Override public SpecialModel create(Map arguments) { String pose = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("pose"), "warning.config.item.model.special.copper_golem_statue.missing_pose"); @@ -48,7 +52,7 @@ public class CopperGolemStatueSpecialModel implements SpecialModel { } } - public static class Reader implements SpecialModelReader { + private static class Reader implements SpecialModelReader { @Override public SpecialModel read(JsonObject json) { String pose = json.get("pose").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/HeadSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/HeadSpecialModel.java similarity index 74% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/HeadSpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/HeadSpecialModel.java index 35e43ac08..2983c3455 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/HeadSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/HeadSpecialModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -10,9 +10,10 @@ import java.util.List; import java.util.Map; import java.util.Optional; -public class HeadSpecialModel implements SpecialModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class HeadSpecialModel implements SpecialModel { + public static final Key ID = Key.of("minecraft:head"); + public static final SpecialModelFactory FACTORY = new Factory(); + public static final SpecialModelReader READER = new Reader(); private final String kind; private final String texture; private final float animation; @@ -23,9 +24,16 @@ public class HeadSpecialModel implements SpecialModel { this.animation = animation; } - @Override - public Key type() { - return SpecialModels.HEAD; + public String kind() { + return this.kind; + } + + public String texture() { + return this.texture; + } + + public float animation() { + return this.animation; } @Override @@ -36,7 +44,7 @@ public class HeadSpecialModel implements SpecialModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); json.addProperty("kind", this.kind); if (this.texture != null) { json.addProperty("texture", this.texture); @@ -47,7 +55,7 @@ public class HeadSpecialModel implements SpecialModel { return json; } - public static class Factory implements SpecialModelFactory { + private static class Factory implements SpecialModelFactory { @Override public SpecialModel create(Map arguments) { String kind = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("kind"), "warning.config.item.model.special.head.missing_kind"); @@ -57,7 +65,7 @@ public class HeadSpecialModel implements SpecialModel { } } - public static class Reader implements SpecialModelReader { + private static class Reader implements SpecialModelReader { @Override public SpecialModel read(JsonObject json) { String kind = json.get("kind").getAsString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/PlayerHeadSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/PlayerHeadSpecialModel.java similarity index 62% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/PlayerHeadSpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/PlayerHeadSpecialModel.java index a36998761..087751181 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/PlayerHeadSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/PlayerHeadSpecialModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -9,18 +9,13 @@ import net.momirealms.craftengine.core.util.MinecraftVersion; import java.util.List; import java.util.Map; -public class PlayerHeadSpecialModel implements SpecialModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class PlayerHeadSpecialModel implements SpecialModel { + public static final Key ID = Key.of("minecraft:player_head"); + public static final SpecialModelFactory FACTORY = new Factory(); + public static final SpecialModelReader READER = new Reader(); public static final PlayerHeadSpecialModel INSTANCE = new PlayerHeadSpecialModel(); - public PlayerHeadSpecialModel() { - } - - @Override - public Key type() { - return SpecialModels.PLAYER_HEAD; - } + private PlayerHeadSpecialModel() {} @Override public List revisions() { @@ -31,22 +26,22 @@ public class PlayerHeadSpecialModel implements SpecialModel { public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); if (version.isAtOrAbove(MinecraftVersion.V1_21_6)) { - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); } else { - json.addProperty("type", SpecialModels.HEAD.toString()); + json.addProperty("type", HeadSpecialModel.ID.asString()); json.addProperty("kind", "player"); } return json; } - public static class Factory implements SpecialModelFactory { + private static class Factory implements SpecialModelFactory { @Override public SpecialModel create(Map arguments) { return INSTANCE; } } - public static class Reader implements SpecialModelReader { + private static class Reader implements SpecialModelReader { @Override public SpecialModel read(JsonObject json) { return INSTANCE; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ShulkerBoxSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/ShulkerBoxSpecialModel.java similarity index 78% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ShulkerBoxSpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/ShulkerBoxSpecialModel.java index 20e67ca70..955130a21 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/ShulkerBoxSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/ShulkerBoxSpecialModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -14,9 +14,10 @@ import java.util.Locale; import java.util.Map; import java.util.Optional; -public class ShulkerBoxSpecialModel implements SpecialModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class ShulkerBoxSpecialModel implements SpecialModel { + public static final Key ID = Key.of("minecraft:shulker_box"); + public static final SpecialModelFactory FACTORY = new Factory(); + public static final SpecialModelReader READER = new Reader(); private final String texture; private final float openness; private final Direction orientation; @@ -27,20 +28,27 @@ public class ShulkerBoxSpecialModel implements SpecialModel { this.orientation = orientation; } + public String texture() { + return this.texture; + } + + public float openness() { + return this.openness; + } + + public Direction orientation() { + return this.orientation; + } + @Override public List revisions() { return List.of(); } - @Override - public Key type() { - return SpecialModels.SHULKER_BOX; - } - @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", ID.asMinimalString()); json.addProperty("texture", texture); if (orientation != null) { json.addProperty("orientation", orientation.name().toLowerCase(Locale.ENGLISH)); @@ -49,7 +57,7 @@ public class ShulkerBoxSpecialModel implements SpecialModel { return json; } - public static class Factory implements SpecialModelFactory { + private static class Factory implements SpecialModelFactory { @Override public SpecialModel create(Map arguments) { float openness = ResourceConfigUtils.getAsFloat(arguments.getOrDefault("openness", 0), "openness"); @@ -62,7 +70,7 @@ public class ShulkerBoxSpecialModel implements SpecialModel { } } - public static class Reader implements SpecialModelReader { + private static class Reader implements SpecialModelReader { @Override public SpecialModel read(JsonObject json) { float openness = json.has("openness") ? json.get("openness").getAsFloat() : 0f; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SignSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SignSpecialModel.java similarity index 74% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SignSpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SignSpecialModel.java index b6a83032c..af35c579a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SignSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SignSpecialModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -9,9 +9,9 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.List; import java.util.Map; -public class SignSpecialModel implements SpecialModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class SignSpecialModel implements SpecialModel { + public static final SpecialModelFactory FACTORY = new Factory(); + public static final SpecialModelReader READER = new Reader(); private final Key type; private final String woodType; private final String texture; @@ -22,9 +22,16 @@ public class SignSpecialModel implements SpecialModel { this.texture = texture; } - @Override public Key type() { - return type; + return this.type; + } + + public String woodType() { + return this.woodType; + } + + public String texture() { + return this.texture; } @Override @@ -35,13 +42,13 @@ public class SignSpecialModel implements SpecialModel { @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", this.type.asMinimalString()); json.addProperty("wood_type", woodType); json.addProperty("texture", texture); return json; } - public static class Factory implements SpecialModelFactory { + private static class Factory implements SpecialModelFactory { @Override public SpecialModel create(Map arguments) { Key type = Key.of(arguments.get("type").toString()); @@ -51,7 +58,7 @@ public class SignSpecialModel implements SpecialModel { } } - public static class Reader implements SpecialModelReader { + private static class Reader implements SpecialModelReader { @Override public SpecialModel read(JsonObject json) { Key type = Key.of(json.get("type").toString()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SimpleSpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SimpleSpecialModel.java similarity index 67% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SimpleSpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SimpleSpecialModel.java index facbc1d4b..7d36b584a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SimpleSpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SimpleSpecialModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; @@ -8,24 +8,23 @@ import net.momirealms.craftengine.core.util.MinecraftVersion; import java.util.List; import java.util.Map; -public class SimpleSpecialModel implements SpecialModel { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class SimpleSpecialModel implements SpecialModel { + public static final SpecialModelFactory FACTORY = new Factory(); + public static final SpecialModelReader READER = new Reader(); private final Key type; public SimpleSpecialModel(Key type) { this.type = type; } - @Override public Key type() { - return type; + return this.type; } @Override public JsonObject apply(MinecraftVersion version) { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", this.type.asMinimalString()); return json; } @@ -34,7 +33,7 @@ public class SimpleSpecialModel implements SpecialModel { return List.of(); } - public static class Factory implements SpecialModelFactory { + private static class Factory implements SpecialModelFactory { @Override public SpecialModel create(Map arguments) { Key type = Key.of(arguments.get("type").toString()); @@ -42,7 +41,7 @@ public class SimpleSpecialModel implements SpecialModel { } } - public static class Reader implements SpecialModelReader { + private static class Reader implements SpecialModelReader { @Override public SpecialModel read(JsonObject json) { Key type = Key.of(json.get("type").getAsString()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModel.java similarity index 72% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModel.java index c5cfaac2a..22bade7d3 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModel.java @@ -1,8 +1,7 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.pack.revision.Revision; -import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MinecraftVersion; import java.util.List; @@ -10,7 +9,5 @@ import java.util.function.Function; public interface SpecialModel extends Function { - Key type(); - List revisions(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModelFactory.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelFactory.java similarity index 63% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModelFactory.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelFactory.java index ca740f8df..861556cb0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModelFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelFactory.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import java.util.Map; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModelReader.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelReader.java similarity index 62% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModelReader.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelReader.java index e15039a3f..6b6c1236c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModelReader.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelReader.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.special; +package net.momirealms.craftengine.core.pack.model.definition.special; import com.google.gson.JsonObject; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelType.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelType.java new file mode 100644 index 000000000..0e5bf77ac --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModelType.java @@ -0,0 +1,6 @@ +package net.momirealms.craftengine.core.pack.model.definition.special; + +import net.momirealms.craftengine.core.util.Key; + +public record SpecialModelType(Key id, SpecialModelFactory factory, SpecialModelReader reader) { +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModels.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModels.java new file mode 100644 index 000000000..be95bb97e --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/special/SpecialModels.java @@ -0,0 +1,57 @@ +package net.momirealms.craftengine.core.pack.model.definition.special; + +import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.ResourceKey; + +import java.util.Map; + +public final class SpecialModels { + public static final SpecialModelType BANNER = register(BannerSpecialModel.ID, BannerSpecialModel.FACTORY, BannerSpecialModel.READER); + public static final SpecialModelType BED = register(BedSpecialModel.ID, BedSpecialModel.FACTORY, BedSpecialModel.READER); + public static final SpecialModelType CONDUIT = register(Key.of("minecraft:conduit"), SimpleSpecialModel.FACTORY, SimpleSpecialModel.READER); + public static final SpecialModelType CHEST = register(ChestSpecialModel.ID, ChestSpecialModel.FACTORY, ChestSpecialModel.READER); + public static final SpecialModelType DECORATED_POT = register(Key.of("minecraft:decorated_pot"), SimpleSpecialModel.FACTORY, SimpleSpecialModel.READER); + public static final SpecialModelType HANGING_SIGN = register(Key.of("minecraft:hanging_sign"), SignSpecialModel.FACTORY, SignSpecialModel.READER); + public static final SpecialModelType STANDING_SIGN = register(Key.of("minecraft:standing_sign"), SignSpecialModel.FACTORY, SignSpecialModel.READER); + public static final SpecialModelType HEAD = register(HeadSpecialModel.ID, HeadSpecialModel.FACTORY, HeadSpecialModel.READER); + public static final SpecialModelType SHIELD = register(Key.of("minecraft:shield"), SimpleSpecialModel.FACTORY, SimpleSpecialModel.READER); + public static final SpecialModelType SHULKER_BOX = register(ShulkerBoxSpecialModel.ID, ShulkerBoxSpecialModel.FACTORY, ShulkerBoxSpecialModel.READER); + public static final SpecialModelType TRIDENT = register(Key.of("minecraft:trident"), SimpleSpecialModel.FACTORY, SimpleSpecialModel.READER); + public static final SpecialModelType PLAYER_HEAD = register(PlayerHeadSpecialModel.ID, PlayerHeadSpecialModel.FACTORY, PlayerHeadSpecialModel.READER); + public static final SpecialModelType COPPER_GOLEM_STATUE = register(CopperGolemStatueSpecialModel.ID, CopperGolemStatueSpecialModel.FACTORY, CopperGolemStatueSpecialModel.READER); + + private SpecialModels() {} + + public static SpecialModelType register(Key id, SpecialModelFactory factory, SpecialModelReader reader) { + SpecialModelType type = new SpecialModelType(id, factory, reader); + ((WritableRegistry) BuiltInRegistries.SPECIAL_MODEL_TYPE) + .register(ResourceKey.create(Registries.SPECIAL_MODEL_TYPE.location(), id), type); + return type; + } + + public static SpecialModel fromMap(Map map) { + String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.item.model.special.missing_type"); + Key key = Key.withDefaultNamespace(type, "minecraft"); + SpecialModelType specialModelType = BuiltInRegistries.SPECIAL_MODEL_TYPE.getValue(key); + if (specialModelType == null) { + throw new LocalizedResourceConfigException("warning.config.item.model.special.invalid_type", type); + } + return specialModelType.factory().create(map); + } + + public static SpecialModel fromJson(JsonObject json) { + String type = json.get("type").getAsString(); + Key key = Key.withDefaultNamespace(type, "minecraft"); + SpecialModelType specialModelType = BuiltInRegistries.SPECIAL_MODEL_TYPE.getValue(key); + if (specialModelType == null) { + throw new IllegalArgumentException("Invalid special model type: " + key); + } + return specialModelType.reader().read(json); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/ConstantTint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/ConstantTint.java similarity index 62% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/ConstantTint.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/ConstantTint.java index 4faf39430..8e234c02f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/ConstantTint.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/ConstantTint.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.tint; +package net.momirealms.craftengine.core.pack.model.definition.tint; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -8,29 +8,29 @@ import org.incendo.cloud.type.Either; import java.util.List; import java.util.Map; -public class ConstantTint implements Tint { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class ConstantTint implements Tint { + public static final Key ID = Key.of("minecraft:constant"); + public static final TintFactory FACTORY = new Factory(); + public static final TintReader READER = new Reader(); private final Either> value; public ConstantTint(Either> value) { this.value = value; } - @Override - public Key type() { - return Tints.CONSTANT; + public Either> value() { + return this.value; } @Override public JsonObject get() { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); - applyAnyTint(json, value, "value"); + json.addProperty("type", ID.asMinimalString()); + applyAnyTint(json, this.value, "value"); return json; } - public static class Factory implements TintFactory { + private static class Factory implements TintFactory { @Override public Tint create(Map arguments) { Object value = ResourceConfigUtils.requireNonNullOrThrow(ResourceConfigUtils.get(arguments, "value", "default"), "warning.config.item.model.tint.constant.missing_value"); @@ -38,7 +38,7 @@ public class ConstantTint implements Tint { } } - public static class Reader implements TintReader { + private static class Reader implements TintReader { @Override public Tint read(JsonObject json) { return new ConstantTint(parseTintValue(json.get("value"))); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/CustomModelDataTint.java similarity index 67% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/CustomModelDataTint.java index 88e9b8266..499a4d421 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/CustomModelDataTint.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/CustomModelDataTint.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.tint; +package net.momirealms.craftengine.core.pack.model.definition.tint; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -8,9 +8,10 @@ import org.incendo.cloud.type.Either; import java.util.List; import java.util.Map; -public class CustomModelDataTint implements Tint { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class CustomModelDataTint implements Tint { + public static final Key ID = Key.of("minecraft:custom_model_data"); + public static final TintFactory FACTORY = new Factory(); + public static final TintReader READER = new Reader(); private final Either> value; private final int index; @@ -19,22 +20,25 @@ public class CustomModelDataTint implements Tint { this.value = value; } - @Override - public Key type() { - return Tints.CUSTOM_MODEL_DATA; + public Either> value() { + return this.value; + } + + public int index() { + return this.index; } @Override public JsonObject get() { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); - if (index != 0) + json.addProperty("type", ID.asMinimalString()); + if (this.index != 0) json.addProperty("index", this.index); applyAnyTint(json, this.value, "default"); return json; } - public static class Factory implements TintFactory { + private static class Factory implements TintFactory { @Override public Tint create(Map arguments) { Object value = arguments.containsKey("default") ? arguments.getOrDefault("default", 0) : arguments.getOrDefault("value", 0); @@ -43,7 +47,7 @@ public class CustomModelDataTint implements Tint { } } - public static class Reader implements TintReader { + private static class Reader implements TintReader { @Override public Tint read(JsonObject json) { return new CustomModelDataTint( diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/GrassTint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/GrassTint.java similarity index 80% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/GrassTint.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/GrassTint.java index 105f606a3..675322b9e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/GrassTint.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/GrassTint.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.tint; +package net.momirealms.craftengine.core.pack.model.definition.tint; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; @@ -7,7 +7,8 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; -public class GrassTint implements Tint { +public final class GrassTint implements Tint { + public static final Key ID = Key.of("minecraft:grass"); public static final Factory FACTORY = new Factory(); public static final Reader READER = new Reader(); private final float temperature; @@ -18,17 +19,20 @@ public class GrassTint implements Tint { this.downfall = downfall; } - @Override - public Key type() { - return Tints.GRASS; + public float temperature() { + return this.temperature; + } + + public float downfall() { + return this.downfall; } @Override public JsonObject get() { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); - json.addProperty("temperature", temperature); - json.addProperty("downfall", downfall); + json.addProperty("type", ID.asMinimalString()); + json.addProperty("temperature", this.temperature); + json.addProperty("downfall", this.downfall); return json; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/SimpleDefaultTint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/SimpleDefaultTint.java similarity index 69% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/SimpleDefaultTint.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/SimpleDefaultTint.java index 570af530c..cd658dcda 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/SimpleDefaultTint.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/SimpleDefaultTint.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.tint; +package net.momirealms.craftengine.core.pack.model.definition.tint; import com.google.gson.JsonObject; import net.momirealms.craftengine.core.util.Key; @@ -8,9 +8,9 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; -public class SimpleDefaultTint implements Tint { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); +public final class SimpleDefaultTint implements Tint { + public static final TintFactory FACTORY = new Factory(); + public static final TintReader READER = new Reader(); private final Either> defaultValue; private final Key type; @@ -19,20 +19,23 @@ public class SimpleDefaultTint implements Tint { this.type = type; } - @Override + public Either> defaultValue() { + return this.defaultValue; + } + public Key type() { - return type; + return this.type; } @Override public JsonObject get() { JsonObject json = new JsonObject(); - json.addProperty("type", type().toString()); + json.addProperty("type", this.type.asMinimalString()); applyAnyTint(json, this.defaultValue, "default"); return json; } - public static class Factory implements TintFactory { + private static class Factory implements TintFactory { @Override public Tint create(Map arguments) { Object value = arguments.containsKey("default") ? arguments.getOrDefault("default", 0) : arguments.getOrDefault("value", 0); @@ -41,7 +44,7 @@ public class SimpleDefaultTint implements Tint { } } - public static class Reader implements TintReader { + private static class Reader implements TintReader { @Override public Tint read(JsonObject json) { return new SimpleDefaultTint(Key.of(json.get("type").getAsString()), parseTintValue(json.get("default"))); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tint.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/Tint.java similarity index 92% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tint.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/Tint.java index 80a16fdca..43fa00cbf 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tint.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/Tint.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.tint; +package net.momirealms.craftengine.core.pack.model.definition.tint; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -10,8 +10,6 @@ import java.util.function.Supplier; public interface Tint extends Supplier { - Key type(); - default void applyAnyTint(JsonObject json, Either> value, String key) { if (value == null) return; if (value.primary().isPresent()) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintFactory.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintFactory.java similarity index 97% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintFactory.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintFactory.java index e0fbd1947..5db297b29 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintFactory.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.tint; +package net.momirealms.craftengine.core.pack.model.definition.tint; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.MiscUtils; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintReader.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintReader.java similarity index 93% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintReader.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintReader.java index 5c6167ae0..a8c2d49eb 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/TintReader.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintReader.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model.tint; +package net.momirealms.craftengine.core.pack.model.definition.tint; import com.google.gson.JsonArray; import com.google.gson.JsonElement; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintType.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintType.java new file mode 100644 index 000000000..a192d25e5 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/TintType.java @@ -0,0 +1,6 @@ +package net.momirealms.craftengine.core.pack.model.definition.tint; + +import net.momirealms.craftengine.core.util.Key; + +public record TintType(Key id, TintFactory factory, TintReader reader) { +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/Tints.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/Tints.java new file mode 100644 index 000000000..5e96608cc --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/definition/tint/Tints.java @@ -0,0 +1,52 @@ +package net.momirealms.craftengine.core.pack.model.definition.tint; + +import com.google.gson.JsonObject; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.ResourceKey; + +import java.util.Map; + +public final class Tints { + public static final TintType CONSTANT = register(ConstantTint.ID, ConstantTint.FACTORY, ConstantTint.READER); + public static final TintType CUSTOM_MODEL_DATA = register(CustomModelDataTint.ID, CustomModelDataTint.FACTORY, CustomModelDataTint.READER); + public static final TintType DYE = register(Key.of("minecraft:dye"), SimpleDefaultTint.FACTORY, SimpleDefaultTint.READER); + public static final TintType FIREWORK = register(Key.of("minecraft:firework"), SimpleDefaultTint.FACTORY, SimpleDefaultTint.READER); + public static final TintType MAP_COLOR = register(Key.of("minecraft:map_color"), SimpleDefaultTint.FACTORY, SimpleDefaultTint.READER); + public static final TintType POTION = register(Key.of("minecraft:potion"), SimpleDefaultTint.FACTORY, SimpleDefaultTint.READER); + public static final TintType TEAM = register(Key.of("minecraft:team"), SimpleDefaultTint.FACTORY, SimpleDefaultTint.READER); + public static final TintType GRASS = register(GrassTint.ID, GrassTint.FACTORY, GrassTint.READER); + + private Tints() {} + + public static TintType register(Key id, TintFactory factory, TintReader reader) { + TintType type = new TintType(id, factory, reader); + ((WritableRegistry) BuiltInRegistries.TINT_TYPE) + .register(ResourceKey.create(Registries.TINT_TYPE.location(), id), type); + return type; + } + + public static Tint fromMap(Map map) { + String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.item.model.tint.missing_type"); + Key key = Key.withDefaultNamespace(type, "minecraft"); + TintType tintType = BuiltInRegistries.TINT_TYPE.getValue(key); + if (tintType == null) { + throw new LocalizedResourceConfigException("warning.config.item.model.tint.invalid_type", type); + } + return tintType.factory().create(map); + } + + public static Tint fromJson(JsonObject json) { + String type = json.get("type").getAsString(); + Key key = Key.withDefaultNamespace(type, "minecraft"); + TintType tintType = BuiltInRegistries.TINT_TYPE.getValue(key); + if (tintType == null) { + throw new IllegalArgumentException("Invalid tint type: " + type); + } + return tintType.reader().read(json); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/legacy/LegacyItemModel.java similarity index 98% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyItemModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/legacy/LegacyItemModel.java index 925b2bb87..a54c6002e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyItemModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/legacy/LegacyItemModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.legacy; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyModelPredicate.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/legacy/LegacyModelPredicate.java similarity index 75% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyModelPredicate.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/legacy/LegacyModelPredicate.java index 10ab58f4a..5b677536d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyModelPredicate.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/legacy/LegacyModelPredicate.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.legacy; import net.momirealms.craftengine.core.util.Key; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyOverridesModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/legacy/LegacyOverridesModel.java similarity index 98% rename from core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyOverridesModel.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/model/legacy/LegacyOverridesModel.java index 91cb5cf49..05ba88304 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/LegacyOverridesModel.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/legacy/LegacyOverridesModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.model; +package net.momirealms.craftengine.core.pack.model.legacy; import com.google.gson.JsonElement; import com.google.gson.JsonObject; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchProperties.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchProperties.java deleted file mode 100644 index a8f09bcc0..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/rangedisptach/RangeDispatchProperties.java +++ /dev/null @@ -1,78 +0,0 @@ -package net.momirealms.craftengine.core.pack.model.rangedisptach; - -import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.registry.BuiltInRegistries; -import net.momirealms.craftengine.core.registry.Registries; -import net.momirealms.craftengine.core.registry.WritableRegistry; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.ResourceKey; - -import java.util.Map; - -public class RangeDispatchProperties { - public static final Key BUNDLE_FULLNESS = Key.of("minecraft:bundle/fullness"); - public static final Key COMPASS = Key.of("minecraft:compass"); - public static final Key COOLDOWN = Key.of("minecraft:cooldown"); - public static final Key COUNT = Key.of("minecraft:count"); - public static final Key CROSSBOW_PULL = Key.of("minecraft:crossbow/pull"); - public static final Key CUSTOM_MODEL_DATA = Key.of("minecraft:custom_model_data"); - public static final Key DAMAGE = Key.of("minecraft:damage"); - public static final Key TIME = Key.of("minecraft:time"); - public static final Key USE_CYCLE = Key.of("minecraft:use_cycle"); - public static final Key USE_DURATION = Key.of("minecraft:use_duration"); - - static { - registerFactory(BUNDLE_FULLNESS, SimpleRangeDispatchProperty.FACTORY); - registerReader(BUNDLE_FULLNESS, SimpleRangeDispatchProperty.READER); - registerFactory(COOLDOWN, SimpleRangeDispatchProperty.FACTORY); - registerReader(COOLDOWN, SimpleRangeDispatchProperty.READER); - registerFactory(CROSSBOW_PULL, CrossBowPullingRangeDispatchProperty.FACTORY); - registerReader(CROSSBOW_PULL, CrossBowPullingRangeDispatchProperty.READER); - registerFactory(COMPASS, CompassRangeDispatchProperty.FACTORY); - registerReader(COMPASS, CompassRangeDispatchProperty.READER); - registerFactory(COUNT, NormalizeRangeDispatchProperty.FACTORY); - registerReader(COUNT, NormalizeRangeDispatchProperty.READER); - registerFactory(DAMAGE, DamageRangeDispatchProperty.FACTORY); - registerReader(DAMAGE, DamageRangeDispatchProperty.READER); - registerFactory(CUSTOM_MODEL_DATA, CustomModelDataRangeDispatchProperty.FACTORY); - registerReader(CUSTOM_MODEL_DATA, CustomModelDataRangeDispatchProperty.READER); - registerFactory(TIME, TimeRangeDispatchProperty.FACTORY); - registerReader(TIME, TimeRangeDispatchProperty.READER); - registerFactory(USE_CYCLE, UseCycleRangeDispatchProperty.FACTORY); - registerReader(USE_CYCLE, UseCycleRangeDispatchProperty.READER); - registerFactory(USE_DURATION, UseDurationRangeDispatchProperty.FACTORY); - registerReader(USE_DURATION, UseDurationRangeDispatchProperty.READER); - } - - public static void registerFactory(Key key, RangeDispatchPropertyFactory factory) { - ((WritableRegistry) BuiltInRegistries.RANGE_DISPATCH_PROPERTY_FACTORY) - .register(ResourceKey.create(Registries.RANGE_DISPATCH_PROPERTY_FACTORY.location(), key), factory); - } - - public static void registerReader(Key key, RangeDispatchPropertyReader reader) { - ((WritableRegistry) BuiltInRegistries.RANGE_DISPATCH_PROPERTY_READER) - .register(ResourceKey.create(Registries.RANGE_DISPATCH_PROPERTY_READER.location(), key), reader); - } - - public static RangeDispatchProperty fromMap(Map map) { - String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("property"), "warning.config.item.model.range_dispatch.missing_property"); - Key key = Key.withDefaultNamespace(type, "minecraft"); - RangeDispatchPropertyFactory factory = BuiltInRegistries.RANGE_DISPATCH_PROPERTY_FACTORY.getValue(key); - if (factory == null) { - throw new LocalizedResourceConfigException("warning.config.item.model.range_dispatch.invalid_property", type); - } - return factory.create(map); - } - - public static RangeDispatchProperty fromJson(JsonObject json) { - String type = json.get("property").getAsString(); - Key key = Key.withDefaultNamespace(type, "minecraft"); - RangeDispatchPropertyReader reader = BuiltInRegistries.RANGE_DISPATCH_PROPERTY_READER.getValue(key); - if (reader == null) { - throw new IllegalArgumentException("Invalid range dispatch property type: " + key); - } - return reader.read(json); - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectProperties.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectProperties.java deleted file mode 100644 index e6f5b46e0..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/SelectProperties.java +++ /dev/null @@ -1,78 +0,0 @@ -package net.momirealms.craftengine.core.pack.model.select; - -import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.registry.BuiltInRegistries; -import net.momirealms.craftengine.core.registry.Registries; -import net.momirealms.craftengine.core.registry.WritableRegistry; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.ResourceKey; - -import java.util.Map; - -public class SelectProperties { - public static final Key BLOCK_STATE = Key.of("minecraft:block_state"); - public static final Key CHARGE_TYPE = Key.of("minecraft:charge_type"); - public static final Key CONTEXT_DIMENSION = Key.of("minecraft:context_dimension"); - public static final Key CONTEXT_ENTITY_TYPE = Key.of("minecraft:context_entity_type"); - public static final Key CUSTOM_MODEL_DATA = Key.of("minecraft:custom_model_data"); - public static final Key DISPLAY_CONTEXT = Key.of("minecraft:display_context"); - public static final Key LOCAL_TIME = Key.of("minecraft:local_time"); - public static final Key MAIN_HAND = Key.of("minecraft:main_hand"); - public static final Key TRIM_MATERIAL = Key.of("minecraft:trim_material"); - public static final Key COMPONENT = Key.of("minecraft:component"); - - static { - registerFactory(CHARGE_TYPE, ChargeTypeSelectProperty.FACTORY); - registerReader(CHARGE_TYPE, ChargeTypeSelectProperty.READER); - registerFactory(CONTEXT_DIMENSION, SimpleSelectProperty.FACTORY); - registerReader(CONTEXT_DIMENSION, SimpleSelectProperty.READER); - registerFactory(CONTEXT_ENTITY_TYPE, SimpleSelectProperty.FACTORY); - registerReader(CONTEXT_ENTITY_TYPE, SimpleSelectProperty.READER); - registerFactory(DISPLAY_CONTEXT, DisplayContextSelectProperty.FACTORY); - registerReader(DISPLAY_CONTEXT, DisplayContextSelectProperty.READER); - registerFactory(MAIN_HAND, MainHandSelectProperty.FACTORY); - registerReader(MAIN_HAND, MainHandSelectProperty.READER); - registerFactory(TRIM_MATERIAL, TrimMaterialSelectProperty.FACTORY); - registerReader(TRIM_MATERIAL, TrimMaterialSelectProperty.READER); - registerFactory(BLOCK_STATE, BlockStateSelectProperty.FACTORY); - registerReader(BLOCK_STATE, BlockStateSelectProperty.READER); - registerFactory(CUSTOM_MODEL_DATA, CustomModelDataSelectProperty.FACTORY); - registerReader(CUSTOM_MODEL_DATA, CustomModelDataSelectProperty.READER); - registerFactory(LOCAL_TIME, LocalTimeSelectProperty.FACTORY); - registerReader(LOCAL_TIME, LocalTimeSelectProperty.READER); - registerFactory(COMPONENT, ComponentSelectProperty.FACTORY); - registerReader(COMPONENT, ComponentSelectProperty.READER); - } - - public static void registerFactory(Key key, SelectPropertyFactory factory) { - ((WritableRegistry) BuiltInRegistries.SELECT_PROPERTY_FACTORY) - .register(ResourceKey.create(Registries.SELECT_PROPERTY_FACTORY.location(), key), factory); - } - - public static void registerReader(Key key, SelectPropertyReader reader) { - ((WritableRegistry) BuiltInRegistries.SELECT_PROPERTY_READER) - .register(ResourceKey.create(Registries.SELECT_PROPERTY_READER.location(), key), reader); - } - - public static SelectProperty fromMap(Map map) { - String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("property"), "warning.config.item.model.select.missing_property"); - Key key = Key.withDefaultNamespace(type, "minecraft"); - SelectPropertyFactory factory = BuiltInRegistries.SELECT_PROPERTY_FACTORY.getValue(key); - if (factory == null) { - throw new LocalizedResourceConfigException("warning.config.item.model.select.invalid_property", type); - } - return factory.create(map); - } - - public static SelectProperty fromJson(JsonObject json) { - String type = json.get("property").getAsString(); - Key key = Key.withDefaultNamespace(type, "minecraft"); - SelectPropertyReader reader = BuiltInRegistries.SELECT_PROPERTY_READER.getValue(key); - if (reader == null) { - throw new IllegalArgumentException("Invalid select property type: " + key); - } - return reader.read(json); - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java deleted file mode 100644 index 6bdd5995f..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/select/TrimMaterialSelectProperty.java +++ /dev/null @@ -1,67 +0,0 @@ -package net.momirealms.craftengine.core.pack.model.select; - -import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.pack.model.LegacyModelPredicate; -import net.momirealms.craftengine.core.util.Key; - -import java.util.HashMap; -import java.util.Map; - -public class TrimMaterialSelectProperty implements SelectProperty, LegacyModelPredicate { - public static final Factory FACTORY = new Factory(); - public static final Reader READER = new Reader(); - public static final TrimMaterialSelectProperty INSTANCE = new TrimMaterialSelectProperty(); - private static final Map LEGACY_TRIM_DATA = new HashMap<>(); - static { - LEGACY_TRIM_DATA.put("minecraft:quartz", 0.1f); - LEGACY_TRIM_DATA.put("minecraft:iron", 0.2f); - LEGACY_TRIM_DATA.put("minecraft:netherite", 0.3f); - LEGACY_TRIM_DATA.put("minecraft:redstone", 0.4f); - LEGACY_TRIM_DATA.put("minecraft:copper", 0.5f); - LEGACY_TRIM_DATA.put("minecraft:gold", 0.6f); - LEGACY_TRIM_DATA.put("minecraft:emerald", 0.7f); - LEGACY_TRIM_DATA.put("minecraft:diamond", 0.8f); - LEGACY_TRIM_DATA.put("minecraft:lapis", 0.9f); - LEGACY_TRIM_DATA.put("minecraft:amethyst", 1.0f); - // INVALID - LEGACY_TRIM_DATA.put("minecraft:resin", 1.1F); - } - - @Override - public Key type() { - return SelectProperties.TRIM_MATERIAL; - } - - @Override - public void accept(JsonObject jsonObject) { - jsonObject.addProperty("property", type().toString()); - } - - @Override - public String legacyPredicateId(Key material) { - return "trim_type"; - } - - @Override - public Number toLegacyValue(String value) { - Float f = LEGACY_TRIM_DATA.get(value); - if (f == null) { - throw new IllegalArgumentException("Invalid trim material '" + value + "'"); - } - return f; - } - - public static class Factory implements SelectPropertyFactory { - @Override - public SelectProperty create(Map arguments) { - return INSTANCE; - } - } - - public static class Reader implements SelectPropertyReader { - @Override - public SelectProperty read(JsonObject json) { - return INSTANCE; - } - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModels.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModels.java deleted file mode 100644 index c27c4bba3..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/special/SpecialModels.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.momirealms.craftengine.core.pack.model.special; - -import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.registry.BuiltInRegistries; -import net.momirealms.craftengine.core.registry.Registries; -import net.momirealms.craftengine.core.registry.WritableRegistry; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.ResourceKey; - -import java.util.Map; - -public class SpecialModels { - public static final Key BANNER = Key.of("minecraft:banner"); - public static final Key BED = Key.of("minecraft:bed"); - public static final Key CONDUIT = Key.of("minecraft:conduit"); - public static final Key CHEST = Key.of("minecraft:chest"); - public static final Key DECORATED_POT = Key.of("minecraft:decorated_pot"); - public static final Key HANGING_SIGN = Key.of("minecraft:hanging_sign"); - public static final Key HEAD = Key.of("minecraft:head"); - public static final Key SHIELD = Key.of("minecraft:shield"); - public static final Key SHULKER_BOX = Key.of("minecraft:shulker_box"); - public static final Key STANDING_SIGN = Key.of("minecraft:standing_sign"); - public static final Key TRIDENT = Key.of("minecraft:trident"); - public static final Key PLAYER_HEAD = Key.of("minecraft:player_head"); - public static final Key COPPER_GOLEM_STATUE = Key.of("minecraft:copper_golem_statue"); - - static { - registerFactory(TRIDENT, SimpleSpecialModel.FACTORY); - registerReader(TRIDENT, SimpleSpecialModel.READER); - registerFactory(DECORATED_POT, SimpleSpecialModel.FACTORY); - registerReader(DECORATED_POT, SimpleSpecialModel.READER); - registerFactory(CONDUIT, SimpleSpecialModel.FACTORY); - registerReader(CONDUIT, SimpleSpecialModel.READER); - registerFactory(SHIELD, SimpleSpecialModel.FACTORY); - registerReader(SHIELD, SimpleSpecialModel.READER); - registerFactory(HANGING_SIGN, SignSpecialModel.FACTORY); - registerReader(HANGING_SIGN, SignSpecialModel.READER); - registerFactory(STANDING_SIGN, SignSpecialModel.FACTORY); - registerReader(STANDING_SIGN, SignSpecialModel.READER); - registerFactory(PLAYER_HEAD, PlayerHeadSpecialModel.FACTORY); - registerReader(PLAYER_HEAD, PlayerHeadSpecialModel.READER); - registerFactory(CHEST, ChestSpecialModel.FACTORY); - registerReader(CHEST, ChestSpecialModel.READER); - registerFactory(BANNER, BannerSpecialModel.FACTORY); - registerReader(BANNER, BannerSpecialModel.READER); - registerFactory(BED, BedSpecialModel.FACTORY); - registerReader(BED, BedSpecialModel.READER); - registerFactory(HEAD, HeadSpecialModel.FACTORY); - registerReader(HEAD, HeadSpecialModel.READER); - registerFactory(SHULKER_BOX, ShulkerBoxSpecialModel.FACTORY); - registerReader(SHULKER_BOX, ShulkerBoxSpecialModel.READER); - registerFactory(COPPER_GOLEM_STATUE, CopperGolemStatueSpecialModel.FACTORY); - registerReader(COPPER_GOLEM_STATUE, CopperGolemStatueSpecialModel.READER); - } - - public static void registerFactory(Key key, SpecialModelFactory factory) { - ((WritableRegistry) BuiltInRegistries.SPECIAL_MODEL_FACTORY) - .register(ResourceKey.create(Registries.SPECIAL_MODEL_FACTORY.location(), key), factory); - } - - public static void registerReader(Key key, SpecialModelReader reader) { - ((WritableRegistry) BuiltInRegistries.SPECIAL_MODEL_READER) - .register(ResourceKey.create(Registries.SPECIAL_MODEL_READER.location(), key), reader); - } - - public static SpecialModel fromMap(Map map) { - String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.item.model.special.missing_type"); - Key key = Key.withDefaultNamespace(type, "minecraft"); - SpecialModelFactory factory = BuiltInRegistries.SPECIAL_MODEL_FACTORY.getValue(key); - if (factory == null) { - throw new LocalizedResourceConfigException("warning.config.item.model.special.invalid_type", type); - } - return factory.create(map); - } - - public static SpecialModel fromJson(JsonObject json) { - String type = json.get("type").getAsString(); - Key key = Key.withDefaultNamespace(type, "minecraft"); - SpecialModelReader reader = BuiltInRegistries.SPECIAL_MODEL_READER.getValue(key); - if (reader == null) { - throw new IllegalArgumentException("Invalid special model type: " + key); - } - return reader.read(json); - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tints.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tints.java deleted file mode 100644 index d44d3102d..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/tint/Tints.java +++ /dev/null @@ -1,72 +0,0 @@ -package net.momirealms.craftengine.core.pack.model.tint; - -import com.google.gson.JsonObject; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.registry.BuiltInRegistries; -import net.momirealms.craftengine.core.registry.Registries; -import net.momirealms.craftengine.core.registry.WritableRegistry; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.ResourceKey; - -import java.util.Map; - -public class Tints { - public static final Key CONSTANT = Key.of("minecraft:constant"); - public static final Key CUSTOM_MODEL_DATA = Key.of("minecraft:custom_model_data"); - public static final Key DYE = Key.of("minecraft:dye"); - public static final Key FIREWORK = Key.of("minecraft:firework"); - public static final Key GRASS = Key.of("minecraft:grass"); - public static final Key MAP_COLOR = Key.of("minecraft:map_color"); - public static final Key POTION = Key.of("minecraft:potion"); - public static final Key TEAM = Key.of("minecraft:team"); - - static { - registerFactory(CONSTANT, ConstantTint.FACTORY); - registerReader(CONSTANT, ConstantTint.READER); - registerFactory(CUSTOM_MODEL_DATA, CustomModelDataTint.FACTORY); - registerReader(CUSTOM_MODEL_DATA, CustomModelDataTint.READER); - registerFactory(GRASS, GrassTint.FACTORY); - registerReader(GRASS, GrassTint.READER); - registerFactory(DYE, SimpleDefaultTint.FACTORY); - registerReader(DYE, SimpleDefaultTint.READER); - registerFactory(FIREWORK, SimpleDefaultTint.FACTORY); - registerReader(FIREWORK, SimpleDefaultTint.READER); - registerFactory(MAP_COLOR, SimpleDefaultTint.FACTORY); - registerReader(MAP_COLOR, SimpleDefaultTint.READER); - registerFactory(POTION, SimpleDefaultTint.FACTORY); - registerReader(POTION, SimpleDefaultTint.READER); - registerFactory(TEAM, SimpleDefaultTint.FACTORY); - registerReader(TEAM, SimpleDefaultTint.READER); - } - - public static void registerFactory(Key key, TintFactory factory) { - ((WritableRegistry) BuiltInRegistries.TINT_FACTORY) - .register(ResourceKey.create(Registries.TINT_FACTORY.location(), key), factory); - } - - public static void registerReader(Key key, TintReader reader) { - ((WritableRegistry) BuiltInRegistries.TINT_READER) - .register(ResourceKey.create(Registries.TINT_READER.location(), key), reader); - } - - public static Tint fromMap(Map map) { - String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.item.model.tint.missing_type"); - Key key = Key.withDefaultNamespace(type, "minecraft"); - TintFactory factory = BuiltInRegistries.TINT_FACTORY.getValue(key); - if (factory == null) { - throw new LocalizedResourceConfigException("warning.config.item.model.tint.invalid_type", type); - } - return factory.create(map); - } - - public static Tint fromJson(JsonObject json) { - String type = json.get("type").getAsString(); - Key key = Key.withDefaultNamespace(type, "minecraft"); - TintReader reader = BuiltInRegistries.TINT_READER.getValue(key); - if (reader == null) { - throw new IllegalArgumentException("Invalid tint type: " + type); - } - return reader.read(json); - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/CommonConditions.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/CommonConditions.java new file mode 100644 index 000000000..a23c7bf4e --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/CommonConditions.java @@ -0,0 +1,68 @@ +package net.momirealms.craftengine.core.plugin.context; + +import net.momirealms.craftengine.core.plugin.context.condition.*; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.ResourceKey; + +import java.util.Map; + +public class CommonConditions { + + static { + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.HAS_PLAYER, new HasPlayerCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.HAS_ITEM, new HasItemCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.MATCH_ITEM, new MatchItemCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.MATCH_ENTITY, new MatchEntityCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.MATCH_BLOCK, new MatchBlockCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.MATCH_BLOCK_PROPERTY, new MatchBlockPropertyCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.TABLE_BONUS, new TableBonusCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.SURVIVES_EXPLOSION, new SurvivesExplosionCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.ANY_OF, new AnyOfCondition.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.ALL_OF, new AllOfCondition.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.ENCHANTMENT, new EnchantmentCondition.Factory<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.INVERTED, new InvertedCondition.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.FALLING_BLOCK, new FallingBlockCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.RANDOM, new RandomCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.DISTANCE, new DistanceCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.PERMISSION, new PermissionCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.EQUALS, new StringEqualsCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.STRING_REGEX, new StringRegexCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.STRING_EQUALS, new StringEqualsCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.STRING_CONTAINS, new StringContainsCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.EXPRESSION, new ExpressionCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.IS_NULL, new IsNullCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.HAND, new HandCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.ON_COOLDOWN, new OnCooldownCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.INVENTORY_HAS_ITEM, new InventoryHasItemCondition.FactoryImpl<>()); + register(net.momirealms.craftengine.core.plugin.context.condition.CommonConditions.MATCH_FURNITURE_VARIANT, new MatchFurnitureVariantCondition.FactoryImpl<>()); + } + + public static void register(Key key, ConditionFactory factory) { + ((WritableRegistry>) BuiltInRegistries.EVENT_CONDITION_FACTORY) + .register(ResourceKey.create(Registries.EVENT_CONDITION_FACTORY.location(), key), factory); + } + + @SuppressWarnings("unchecked") + public static Condition fromMap(Map map) { + String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.event.condition.missing_type"); + Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE); + if (type.charAt(0) == '!') { + ConditionFactory factory = BuiltInRegistries.EVENT_CONDITION_FACTORY.getValue(new Key(key.namespace(), key.value().substring(1))); + if (factory == null) { + throw new LocalizedResourceConfigException("warning.config.event.condition.invalid_type", type); + } + return new InvertedCondition<>((Condition) factory.create(map)); + } else { + ConditionFactory factory = BuiltInRegistries.EVENT_CONDITION_FACTORY.getValue(key); + if (factory == null) { + throw new LocalizedResourceConfigException("warning.config.event.condition.invalid_type", type); + } + return (Condition) factory.create(map); + } + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/CommonFunctions.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/CommonFunctions.java new file mode 100644 index 000000000..c020bdd80 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/CommonFunctions.java @@ -0,0 +1,113 @@ +package net.momirealms.craftengine.core.plugin.context; + +import net.momirealms.craftengine.core.plugin.context.function.*; +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.MiscUtils; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.ResourceKey; + +import java.util.*; + +public class CommonFunctions { + + static { + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.COMMAND, new CommandFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.MESSAGE, new MessageFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.ACTIONBAR, new ActionBarFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.TITLE, new TitleFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.OPEN_WINDOW, new OpenWindowFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.CANCEL_EVENT, new CancelEventFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.RUN, new RunFunction.FactoryImpl<>(CommonFunctions::fromMap, CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.PLACE_BLOCK, new PlaceBlockFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.UPDATE_BLOCK_PROPERTY, new UpdateBlockPropertyFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.TRANSFORM_BLOCK, new TransformBlockFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.BREAK_BLOCK, new BreakBlockFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.UPDATE_INTERACTION_TICK, new UpdateInteractionFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.SET_COUNT, new SetCountFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.DROP_LOOT, new DropLootFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.SWING_HAND, new SwingHandFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.SET_FOOD, new SetFoodFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.SET_SATURATION, new SetSaturationFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.PLAY_SOUND, new PlaySoundFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.PARTICLE, new ParticleFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.POTION_EFFECT, new PotionEffectFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.REMOVE_POTION_EFFECT, new RemovePotionEffectFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.LEVELER_EXP, new LevelerExpFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.SET_COOLDOWN, new SetCooldownFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.REMOVE_COOLDOWN, new RemoveCooldownFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.SPAWN_FURNITURE, new SpawnFurnitureFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.REMOVE_FURNITURE, new RemoveFurnitureFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.REPLACE_FURNITURE, new ReplaceFurnitureFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.ROTATE_FURNITURE, new RotateFurnitureFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.MYTHIC_MOBS_SKILL, new MythicMobsSkillFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.TELEPORT, new TeleportFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.SET_VARIABLE, new SetVariableFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.TOAST, new ToastFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.DAMAGE, new DamageFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.MERCHANT_TRADE, new MerchantTradeFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.REMOVE_ENTITY, new RemoveEntityFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.IF_ELSE, new IfElseFunction.FactoryImpl<>(CommonConditions::fromMap, CommonFunctions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.ALTERNATIVES, new IfElseFunction.FactoryImpl<>(CommonConditions::fromMap, CommonFunctions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.WHEN, new WhenFunction.FactoryImpl<>(CommonConditions::fromMap, CommonFunctions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.DAMAGE_ITEM, new DamageItemFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.CYCLE_BLOCK_PROPERTY, new CycleBlockPropertyFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.SET_EXP, new SetExpFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.SET_LEVEL, new SetLevelFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.PLAY_TOTEM_ANIMATION, new PlayTotemAnimationFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.CLOSE_INVENTORY, new CloseInventoryFunction.FactoryImpl<>(CommonConditions::fromMap)); + register(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.CLEAR_ITEM, new ClearItemFunction.FactoryImpl<>(CommonConditions::fromMap)); + } + + public static void register(Key key, FunctionFactory factory) { + ((WritableRegistry>) BuiltInRegistries.EVENT_FUNCTION_FACTORY) + .register(ResourceKey.create(Registries.EVENT_FUNCTION_FACTORY.location(), key), factory); + } + + public static Function fromMap(Map map) { + String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.function.missing_type"); + Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE); + FunctionFactory factory = BuiltInRegistries.EVENT_FUNCTION_FACTORY.getValue(key); + if (factory == null) { + throw new LocalizedResourceConfigException("warning.config.function.invalid_type", type); + } + return factory.create(map); + } + + public static Map>> parseEvents(Object eventsObj) { + if (eventsObj == null) return Map.of(); + EnumMap>> events = new EnumMap<>(EventTrigger.class); + if (eventsObj instanceof Map eventsSection) { + Map eventsSectionMap = MiscUtils.castToMap(eventsSection, false); + for (Map.Entry eventEntry : eventsSectionMap.entrySet()) { + try { + EventTrigger eventTrigger = EventTrigger.byName(eventEntry.getKey()); + events.put(eventTrigger, ResourceConfigUtils.parseConfigAsList(eventEntry.getValue(), CommonFunctions::fromMap)); + } catch (IllegalArgumentException e) { + throw new LocalizedResourceConfigException("warning.config.event.invalid_trigger", eventEntry.getKey()); + } + } + } else if (eventsObj instanceof List list) { + @SuppressWarnings("unchecked") + List> eventsList = (List>) list; + for (Map eventSection : eventsList) { + String on = ResourceConfigUtils.requireNonEmptyStringOrThrow(eventSection.get("on"), "warning.config.event.missing_trigger"); + try { + EventTrigger eventTrigger = EventTrigger.byName(on); + if (eventSection.containsKey("type")) { + Function function = CommonFunctions.fromMap(eventSection); + events.computeIfAbsent(eventTrigger, k -> new ArrayList<>(4)).add(function); + } else if (eventSection.containsKey("functions")) { + events.computeIfAbsent(eventTrigger, k -> new ArrayList<>(4)).add(Objects.requireNonNull(BuiltInRegistries.EVENT_FUNCTION_FACTORY.getValue(net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.RUN)).create(eventSection)); + } + } catch (IllegalArgumentException e) { + throw new LocalizedResourceConfigException("warning.config.event.invalid_trigger", on); + } + } + } + return events; + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventTrigger.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/EventTrigger.java similarity index 94% rename from core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventTrigger.java rename to core/src/main/java/net/momirealms/craftengine/core/plugin/context/EventTrigger.java index 0faee9842..5aea90be9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventTrigger.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/EventTrigger.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.plugin.context.event; +package net.momirealms.craftengine.core.plugin.context; import java.util.HashMap; import java.util.Map; diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventConditions.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventConditions.java deleted file mode 100644 index a82686946..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventConditions.java +++ /dev/null @@ -1,70 +0,0 @@ -package net.momirealms.craftengine.core.plugin.context.event; - -import net.momirealms.craftengine.core.plugin.context.Condition; -import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.condition.*; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.registry.BuiltInRegistries; -import net.momirealms.craftengine.core.registry.Registries; -import net.momirealms.craftengine.core.registry.WritableRegistry; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.ResourceKey; - -import java.util.Map; - -public class EventConditions { - - static { - register(CommonConditions.HAS_PLAYER, new HasPlayerCondition.FactoryImpl<>()); - register(CommonConditions.HAS_ITEM, new HasItemCondition.FactoryImpl<>()); - register(CommonConditions.MATCH_ITEM, new MatchItemCondition.FactoryImpl<>()); - register(CommonConditions.MATCH_ENTITY, new MatchEntityCondition.FactoryImpl<>()); - register(CommonConditions.MATCH_BLOCK, new MatchBlockCondition.FactoryImpl<>()); - register(CommonConditions.MATCH_BLOCK_PROPERTY, new MatchBlockPropertyCondition.FactoryImpl<>()); - register(CommonConditions.TABLE_BONUS, new TableBonusCondition.FactoryImpl<>()); - register(CommonConditions.SURVIVES_EXPLOSION, new SurvivesExplosionCondition.FactoryImpl<>()); - register(CommonConditions.ANY_OF, new AnyOfCondition.FactoryImpl<>(EventConditions::fromMap)); - register(CommonConditions.ALL_OF, new AllOfCondition.FactoryImpl<>(EventConditions::fromMap)); - register(CommonConditions.ENCHANTMENT, new EnchantmentCondition.Factory<>()); - register(CommonConditions.INVERTED, new InvertedCondition.FactoryImpl<>(EventConditions::fromMap)); - register(CommonConditions.FALLING_BLOCK, new FallingBlockCondition.FactoryImpl<>()); - register(CommonConditions.RANDOM, new RandomCondition.FactoryImpl<>()); - register(CommonConditions.DISTANCE, new DistanceCondition.FactoryImpl<>()); - register(CommonConditions.PERMISSION, new PermissionCondition.FactoryImpl<>()); - register(CommonConditions.EQUALS, new StringEqualsCondition.FactoryImpl<>()); - register(CommonConditions.STRING_REGEX, new StringRegexCondition.FactoryImpl<>()); - register(CommonConditions.STRING_EQUALS, new StringEqualsCondition.FactoryImpl<>()); - register(CommonConditions.STRING_CONTAINS, new StringContainsCondition.FactoryImpl<>()); - register(CommonConditions.EXPRESSION, new ExpressionCondition.FactoryImpl<>()); - register(CommonConditions.IS_NULL, new IsNullCondition.FactoryImpl<>()); - register(CommonConditions.HAND, new HandCondition.FactoryImpl<>()); - register(CommonConditions.ON_COOLDOWN, new OnCooldownCondition.FactoryImpl<>()); - register(CommonConditions.INVENTORY_HAS_ITEM, new InventoryHasItemCondition.FactoryImpl<>()); - register(CommonConditions.MATCH_FURNITURE_VARIANT, new MatchFurnitureVariantCondition.FactoryImpl<>()); - } - - public static void register(Key key, ConditionFactory factory) { - ((WritableRegistry>) BuiltInRegistries.EVENT_CONDITION_FACTORY) - .register(ResourceKey.create(Registries.EVENT_CONDITION_FACTORY.location(), key), factory); - } - - @SuppressWarnings("unchecked") - public static Condition fromMap(Map map) { - String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.event.condition.missing_type"); - Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE); - if (type.charAt(0) == '!') { - ConditionFactory factory = BuiltInRegistries.EVENT_CONDITION_FACTORY.getValue(new Key(key.namespace(), key.value().substring(1))); - if (factory == null) { - throw new LocalizedResourceConfigException("warning.config.event.condition.invalid_type", type); - } - return new InvertedCondition<>((Condition) factory.create(map)); - } else { - ConditionFactory factory = BuiltInRegistries.EVENT_CONDITION_FACTORY.getValue(key); - if (factory == null) { - throw new LocalizedResourceConfigException("warning.config.event.condition.invalid_type", type); - } - return (Condition) factory.create(map); - } - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventFunctions.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventFunctions.java deleted file mode 100644 index 5cbe2e8db..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/event/EventFunctions.java +++ /dev/null @@ -1,114 +0,0 @@ -package net.momirealms.craftengine.core.plugin.context.event; - -import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.function.*; -import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.registry.BuiltInRegistries; -import net.momirealms.craftengine.core.registry.Registries; -import net.momirealms.craftengine.core.registry.WritableRegistry; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.MiscUtils; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.ResourceKey; - -import java.util.*; - -public class EventFunctions { - - static { - register(CommonFunctions.COMMAND, new CommandFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.MESSAGE, new MessageFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.ACTIONBAR, new ActionBarFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.TITLE, new TitleFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.OPEN_WINDOW, new OpenWindowFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.CANCEL_EVENT, new CancelEventFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.RUN, new RunFunction.FactoryImpl<>(EventFunctions::fromMap, EventConditions::fromMap)); - register(CommonFunctions.PLACE_BLOCK, new PlaceBlockFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.UPDATE_BLOCK_PROPERTY, new UpdateBlockPropertyFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.TRANSFORM_BLOCK, new TransformBlockFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.BREAK_BLOCK, new BreakBlockFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.UPDATE_INTERACTION_TICK, new UpdateInteractionFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.SET_COUNT, new SetCountFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.DROP_LOOT, new DropLootFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.SWING_HAND, new SwingHandFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.SET_FOOD, new SetFoodFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.SET_SATURATION, new SetSaturationFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.PLAY_SOUND, new PlaySoundFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.PARTICLE, new ParticleFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.POTION_EFFECT, new PotionEffectFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.REMOVE_POTION_EFFECT, new RemovePotionEffectFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.LEVELER_EXP, new LevelerExpFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.SET_COOLDOWN, new SetCooldownFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.REMOVE_COOLDOWN, new RemoveCooldownFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.SPAWN_FURNITURE, new SpawnFurnitureFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.REMOVE_FURNITURE, new RemoveFurnitureFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.REPLACE_FURNITURE, new ReplaceFurnitureFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.ROTATE_FURNITURE, new RotateFurnitureFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.MYTHIC_MOBS_SKILL, new MythicMobsSkillFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.TELEPORT, new TeleportFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.SET_VARIABLE, new SetVariableFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.TOAST, new ToastFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.DAMAGE, new DamageFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.MERCHANT_TRADE, new MerchantTradeFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.REMOVE_ENTITY, new RemoveEntityFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.IF_ELSE, new IfElseFunction.FactoryImpl<>(EventConditions::fromMap, EventFunctions::fromMap)); - register(CommonFunctions.ALTERNATIVES, new IfElseFunction.FactoryImpl<>(EventConditions::fromMap, EventFunctions::fromMap)); - register(CommonFunctions.WHEN, new WhenFunction.FactoryImpl<>(EventConditions::fromMap, EventFunctions::fromMap)); - register(CommonFunctions.DAMAGE_ITEM, new DamageItemFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.CYCLE_BLOCK_PROPERTY, new CycleBlockPropertyFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.SET_EXP, new SetExpFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.SET_LEVEL, new SetLevelFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.PLAY_TOTEM_ANIMATION, new PlayTotemAnimationFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.CLOSE_INVENTORY, new CloseInventoryFunction.FactoryImpl<>(EventConditions::fromMap)); - register(CommonFunctions.CLEAR_ITEM, new ClearItemFunction.FactoryImpl<>(EventConditions::fromMap)); - } - - public static void register(Key key, FunctionFactory factory) { - ((WritableRegistry>) BuiltInRegistries.EVENT_FUNCTION_FACTORY) - .register(ResourceKey.create(Registries.EVENT_FUNCTION_FACTORY.location(), key), factory); - } - - public static Function fromMap(Map map) { - String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.function.missing_type"); - Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE); - FunctionFactory factory = BuiltInRegistries.EVENT_FUNCTION_FACTORY.getValue(key); - if (factory == null) { - throw new LocalizedResourceConfigException("warning.config.function.invalid_type", type); - } - return factory.create(map); - } - - public static Map>> parseEvents(Object eventsObj) { - if (eventsObj == null) return Map.of(); - EnumMap>> events = new EnumMap<>(EventTrigger.class); - if (eventsObj instanceof Map eventsSection) { - Map eventsSectionMap = MiscUtils.castToMap(eventsSection, false); - for (Map.Entry eventEntry : eventsSectionMap.entrySet()) { - try { - EventTrigger eventTrigger = EventTrigger.byName(eventEntry.getKey()); - events.put(eventTrigger, ResourceConfigUtils.parseConfigAsList(eventEntry.getValue(), EventFunctions::fromMap)); - } catch (IllegalArgumentException e) { - throw new LocalizedResourceConfigException("warning.config.event.invalid_trigger", eventEntry.getKey()); - } - } - } else if (eventsObj instanceof List list) { - @SuppressWarnings("unchecked") - List> eventsList = (List>) list; - for (Map eventSection : eventsList) { - String on = ResourceConfigUtils.requireNonEmptyStringOrThrow(eventSection.get("on"), "warning.config.event.missing_trigger"); - try { - EventTrigger eventTrigger = EventTrigger.byName(on); - if (eventSection.containsKey("type")) { - Function function = EventFunctions.fromMap(eventSection); - events.computeIfAbsent(eventTrigger, k -> new ArrayList<>(4)).add(function); - } else if (eventSection.containsKey("functions")) { - events.computeIfAbsent(eventTrigger, k -> new ArrayList<>(4)).add(Objects.requireNonNull(BuiltInRegistries.EVENT_FUNCTION_FACTORY.getValue(CommonFunctions.RUN)).create(eventSection)); - } - } catch (IllegalArgumentException e) { - throw new LocalizedResourceConfigException("warning.config.event.invalid_trigger", on); - } - } - } - return events; - } -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RotateFurnitureFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RotateFurnitureFunction.java index eb16cedd0..e81e52bad 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RotateFurnitureFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/RotateFurnitureFunction.java @@ -1,9 +1,9 @@ package net.momirealms.craftengine.core.plugin.context.function; import net.momirealms.craftengine.core.entity.furniture.Furniture; +import net.momirealms.craftengine.core.plugin.context.CommonFunctions; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.event.EventFunctions; import net.momirealms.craftengine.core.plugin.context.number.NumberProvider; import net.momirealms.craftengine.core.plugin.context.number.NumberProviders; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; @@ -50,7 +50,7 @@ public class RotateFurnitureFunction extends AbstractCondit @Override public Key type() { - return CommonFunctions.ROTATE_FURNITURE; + return net.momirealms.craftengine.core.plugin.context.function.CommonFunctions.ROTATE_FURNITURE; } public NumberProvider degree() { @@ -66,8 +66,8 @@ public class RotateFurnitureFunction extends AbstractCondit @Override public Function create(Map arguments) { NumberProvider degree = NumberProviders.fromObject(arguments.getOrDefault("degree", 90)); - List> onSuccess = ResourceConfigUtils.parseConfigAsList(arguments.get("on-success"), EventFunctions::fromMap); - List> onFailure = ResourceConfigUtils.parseConfigAsList(arguments.get("on-failure"), EventFunctions::fromMap); + List> onSuccess = ResourceConfigUtils.parseConfigAsList(arguments.get("on-success"), CommonFunctions::fromMap); + List> onFailure = ResourceConfigUtils.parseConfigAsList(arguments.get("on-failure"), CommonFunctions::fromMap); return new RotateFurnitureFunction<>(getPredicates(arguments), degree, onSuccess, onFailure); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/BinomialNumberProvider.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/BinomialNumberProvider.java index 3d2306df8..ac9c03676 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/BinomialNumberProvider.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/BinomialNumberProvider.java @@ -8,7 +8,7 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; public record BinomialNumberProvider(NumberProvider trials, NumberProvider successProbability) implements NumberProvider { - public static final Factory FACTORY = new Factory(); + public static final NumberProviderFactory FACTORY = new Factory(); @Override public float getFloat(Context context) { @@ -39,7 +39,7 @@ public record BinomialNumberProvider(NumberProvider trials, NumberProvider succe return NumberProviders.BINOMIAL; } - public static class Factory implements NumberProviderFactory { + private static class Factory implements NumberProviderFactory { @Override public NumberProvider create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/ExpressionNumberProvider.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/ExpressionNumberProvider.java index e00e459d6..af124b785 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/ExpressionNumberProvider.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/ExpressionNumberProvider.java @@ -12,7 +12,7 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; public class ExpressionNumberProvider implements NumberProvider { - public static final Factory FACTORY = new Factory(); + public static final NumberProviderFactory FACTORY = new Factory(); private final String expr; public ExpressionNumberProvider(String expr) { @@ -52,7 +52,7 @@ public class ExpressionNumberProvider implements NumberProvider { return this.expr; } - public static class Factory implements NumberProviderFactory { + private static class Factory implements NumberProviderFactory { @Override public NumberProvider create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/FixedNumberProvider.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/FixedNumberProvider.java index 5deeeb5a0..42ff6d155 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/FixedNumberProvider.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/FixedNumberProvider.java @@ -9,7 +9,7 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; public class FixedNumberProvider implements NumberProvider { - public static final Factory FACTORY = new Factory(); + public static final NumberProviderFactory FACTORY = new Factory(); private final double value; public FixedNumberProvider(double value) { @@ -35,7 +35,7 @@ public class FixedNumberProvider implements NumberProvider { return new FixedNumberProvider(value); } - public static class Factory implements NumberProviderFactory { + private static class Factory implements NumberProviderFactory { @Override public NumberProvider create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/GaussianNumberProvider.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/GaussianNumberProvider.java index 4554a46ec..4b7dcacad 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/GaussianNumberProvider.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/GaussianNumberProvider.java @@ -10,7 +10,7 @@ import java.util.Random; import java.util.concurrent.ThreadLocalRandom; public class GaussianNumberProvider implements NumberProvider { - public static final Factory FACTORY = new Factory(); + public static final NumberProviderFactory FACTORY = new Factory(); private final double min; private final double max; private final double mean; @@ -82,7 +82,7 @@ public class GaussianNumberProvider implements NumberProvider { return stdDev; } - public static class Factory implements NumberProviderFactory { + private static class Factory implements NumberProviderFactory { @Override public NumberProvider create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/NumberProviders.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/NumberProviders.java index fd636b1c7..81c1750a0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/NumberProviders.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/NumberProviders.java @@ -12,7 +12,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -public class NumberProviders { +public final class NumberProviders { public static final Key FIXED = Key.of("craftengine:fixed"); public static final Key CONSTANT = Key.of("craftengine:constant"); public static final Key UNIFORM = Key.of("craftengine:uniform"); diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/UniformNumberProvider.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/UniformNumberProvider.java index eb56593d0..9284a70f1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/UniformNumberProvider.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/UniformNumberProvider.java @@ -8,7 +8,7 @@ import net.momirealms.craftengine.core.util.ResourceConfigUtils; import java.util.Map; public class UniformNumberProvider implements NumberProvider { - public static final Factory FACTORY = new Factory(); + public static final NumberProviderFactory FACTORY = new Factory(); private final NumberProvider min; private final NumberProvider max; @@ -45,7 +45,7 @@ public class UniformNumberProvider implements NumberProvider { return NumberProviders.UNIFORM; } - public static class Factory implements NumberProviderFactory { + private static class Factory implements NumberProviderFactory { @Override public NumberProvider create(Map arguments) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java index a8f463235..455165321 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java @@ -14,11 +14,7 @@ import net.momirealms.craftengine.core.pack.Pack; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.ConfigParser; import net.momirealms.craftengine.core.plugin.config.IdSectionConfigParser; -import net.momirealms.craftengine.core.plugin.context.Condition; -import net.momirealms.craftengine.core.plugin.context.Context; -import net.momirealms.craftengine.core.plugin.context.ContextHolder; -import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext; -import net.momirealms.craftengine.core.plugin.context.event.EventConditions; +import net.momirealms.craftengine.core.plugin.context.*; import net.momirealms.craftengine.core.plugin.gui.*; import net.momirealms.craftengine.core.plugin.gui.Ingredient; import net.momirealms.craftengine.core.util.*; @@ -133,7 +129,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { int priority = ResourceConfigUtils.getAsInt(section.getOrDefault("priority", 0), "priority"); List lore = MiscUtils.getAsStringList(section.getOrDefault("lore", List.of())); boolean hidden = ResourceConfigUtils.getAsBoolean(section.getOrDefault("hidden", false), "hidden"); - List> conditionList = ResourceConfigUtils.parseConfigAsList(ResourceConfigUtils.get(section, "conditions", "condition"), EventConditions::fromMap); + List> conditionList = ResourceConfigUtils.parseConfigAsList(ResourceConfigUtils.get(section, "conditions", "condition"), CommonConditions::fromMap); Category category = new Category(id, name, lore, icon, new ArrayList<>(members), priority, hidden, MiscUtils.allOf(conditionList)); if (ItemBrowserManagerImpl.this.byId.containsKey(id)) { ItemBrowserManagerImpl.this.byId.get(id).merge(category); diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java index 5a78689fd..e2d63aea2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java @@ -27,18 +27,14 @@ import net.momirealms.craftengine.core.loot.function.LootFunctionFactory; import net.momirealms.craftengine.core.pack.conflict.PathContext; import net.momirealms.craftengine.core.pack.conflict.resolution.ResolutionFactory; import net.momirealms.craftengine.core.pack.host.ResourcePackHostFactory; -import net.momirealms.craftengine.core.pack.model.ItemModelFactory; -import net.momirealms.craftengine.core.pack.model.ItemModelReader; -import net.momirealms.craftengine.core.pack.model.condition.ConditionPropertyFactory; -import net.momirealms.craftengine.core.pack.model.condition.ConditionPropertyReader; -import net.momirealms.craftengine.core.pack.model.rangedisptach.RangeDispatchPropertyFactory; -import net.momirealms.craftengine.core.pack.model.rangedisptach.RangeDispatchPropertyReader; -import net.momirealms.craftengine.core.pack.model.select.SelectPropertyFactory; -import net.momirealms.craftengine.core.pack.model.select.SelectPropertyReader; -import net.momirealms.craftengine.core.pack.model.special.SpecialModelFactory; -import net.momirealms.craftengine.core.pack.model.special.SpecialModelReader; -import net.momirealms.craftengine.core.pack.model.tint.TintFactory; -import net.momirealms.craftengine.core.pack.model.tint.TintReader; +import net.momirealms.craftengine.core.pack.model.definition.ItemModelType; +import net.momirealms.craftengine.core.pack.model.definition.condition.ConditionPropertyFactory; +import net.momirealms.craftengine.core.pack.model.definition.condition.ConditionPropertyReader; +import net.momirealms.craftengine.core.pack.model.definition.condition.ConditionPropertyType; +import net.momirealms.craftengine.core.pack.model.definition.rangedisptach.RangeDispatchPropertyType; +import net.momirealms.craftengine.core.pack.model.definition.select.SelectPropertyType; +import net.momirealms.craftengine.core.pack.model.definition.special.SpecialModelType; +import net.momirealms.craftengine.core.pack.model.definition.tint.TintType; import net.momirealms.craftengine.core.plugin.config.template.argument.TemplateArgumentFactory; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.condition.ConditionFactory; @@ -50,7 +46,7 @@ import net.momirealms.craftengine.core.plugin.network.codec.NetworkCodec; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import net.momirealms.craftengine.core.util.ResourceKey; -public class BuiltInRegistries { +public final class BuiltInRegistries { public static final Registry BLOCK = createDynamicBoundRegistry(Registries.BLOCK, 512); public static final Registry BLOCK_BEHAVIOR_TYPE = createConstantBoundRegistry(Registries.BLOCK_BEHAVIOR_TYPE, 64); public static final Registry> ITEM_PROCESSOR_TYPE = createConstantBoundRegistry(Registries.ITEM_PROCESSOR_TYPE, 64); @@ -61,18 +57,12 @@ public class BuiltInRegistries { public static final Registry> LOOT_ENTRY_CONTAINER_FACTORY = createConstantBoundRegistry(Registries.LOOT_ENTRY_CONTAINER_FACTORY, 16); public static final Registry NUMBER_PROVIDER_FACTORY = createConstantBoundRegistry(Registries.NUMBER_PROVIDER_FACTORY, 16); public static final Registry TEMPLATE_ARGUMENT_FACTORY = createConstantBoundRegistry(Registries.TEMPLATE_ARGUMENT_FACTORY, 16); - public static final Registry ITEM_MODEL_FACTORY = createConstantBoundRegistry(Registries.ITEM_MODEL_FACTORY, 16); - public static final Registry ITEM_MODEL_READER = createConstantBoundRegistry(Registries.ITEM_MODEL_READER, 16); - public static final Registry TINT_FACTORY = createConstantBoundRegistry(Registries.TINT_FACTORY, 16); - public static final Registry TINT_READER = createConstantBoundRegistry(Registries.TINT_READER, 16); - public static final Registry SPECIAL_MODEL_FACTORY = createConstantBoundRegistry(Registries.SPECIAL_MODEL_FACTORY, 16); - public static final Registry SPECIAL_MODEL_READER = createConstantBoundRegistry(Registries.SPECIAL_MODEL_READER, 16); - public static final Registry RANGE_DISPATCH_PROPERTY_FACTORY = createConstantBoundRegistry(Registries.RANGE_DISPATCH_PROPERTY_FACTORY, 16); - public static final Registry RANGE_DISPATCH_PROPERTY_READER = createConstantBoundRegistry(Registries.RANGE_DISPATCH_PROPERTY_READER, 16); - public static final Registry CONDITION_PROPERTY_FACTORY = createConstantBoundRegistry(Registries.CONDITION_PROPERTY_FACTORY, 16); - public static final Registry CONDITION_PROPERTY_READER = createConstantBoundRegistry(Registries.CONDITION_PROPERTY_READER, 16); - public static final Registry SELECT_PROPERTY_FACTORY = createConstantBoundRegistry(Registries.SELECT_PROPERTY_FACTORY, 16); - public static final Registry SELECT_PROPERTY_READER = createConstantBoundRegistry(Registries.SELECT_PROPERTY_READER, 16); + public static final Registry ITEM_MODEL_TYPE = createConstantBoundRegistry(Registries.ITEM_MODEL_TYPE, 16); + public static final Registry TINT_TYPE = createConstantBoundRegistry(Registries.TINT_TYPE, 16); + public static final Registry SPECIAL_MODEL_TYPE = createConstantBoundRegistry(Registries.SPECIAL_MODEL_TYPE, 16); + public static final Registry RANGE_DISPATCH_PROPERTY_TYPE = createConstantBoundRegistry(Registries.RANGE_DISPATCH_PROPERTY_TYPE, 16); + public static final Registry CONDITION_PROPERTY_TYPE = createConstantBoundRegistry(Registries.CONDITION_PROPERTY_TYPE, 16); + public static final Registry SELECT_PROPERTY_TYPE = createConstantBoundRegistry(Registries.SELECT_PROPERTY_TYPE, 16); public static final Registry>> RECIPE_SERIALIZER = createConstantBoundRegistry(Registries.RECIPE_FACTORY, 16); public static final Registry FORMULA_FACTORY = createConstantBoundRegistry(Registries.FORMULA_FACTORY, 16); public static final Registry> PATH_MATCHER_FACTORY = createConstantBoundRegistry(Registries.PATH_MATCHER_FACTORY, 16); @@ -96,6 +86,8 @@ public class BuiltInRegistries { public static final Registry> FURNITURE_HITBOX_TYPE = createConstantBoundRegistry(Registries.FURNITURE_HITBOX_TYPE, 16); public static final Registry> FURNITURE_BEHAVIOR_TYPE = createConstantBoundRegistry(Registries.FURNITURE_BEHAVIOR_TYPE, 32); + private BuiltInRegistries() {} + private static Registry createConstantBoundRegistry(ResourceKey> key, int expectedSize) { return new ConstantBoundRegistry<>(key, expectedSize); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java index eb539c9bd..145e36ad8 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java @@ -27,18 +27,14 @@ import net.momirealms.craftengine.core.loot.function.LootFunctionFactory; import net.momirealms.craftengine.core.pack.conflict.PathContext; import net.momirealms.craftengine.core.pack.conflict.resolution.ResolutionFactory; import net.momirealms.craftengine.core.pack.host.ResourcePackHostFactory; -import net.momirealms.craftengine.core.pack.model.ItemModelFactory; -import net.momirealms.craftengine.core.pack.model.ItemModelReader; -import net.momirealms.craftengine.core.pack.model.condition.ConditionPropertyFactory; -import net.momirealms.craftengine.core.pack.model.condition.ConditionPropertyReader; -import net.momirealms.craftengine.core.pack.model.rangedisptach.RangeDispatchPropertyFactory; -import net.momirealms.craftengine.core.pack.model.rangedisptach.RangeDispatchPropertyReader; -import net.momirealms.craftengine.core.pack.model.select.SelectPropertyFactory; -import net.momirealms.craftengine.core.pack.model.select.SelectPropertyReader; -import net.momirealms.craftengine.core.pack.model.special.SpecialModelFactory; -import net.momirealms.craftengine.core.pack.model.special.SpecialModelReader; -import net.momirealms.craftengine.core.pack.model.tint.TintFactory; -import net.momirealms.craftengine.core.pack.model.tint.TintReader; +import net.momirealms.craftengine.core.pack.model.definition.ItemModelType; +import net.momirealms.craftengine.core.pack.model.definition.condition.ConditionPropertyFactory; +import net.momirealms.craftengine.core.pack.model.definition.condition.ConditionPropertyReader; +import net.momirealms.craftengine.core.pack.model.definition.condition.ConditionPropertyType; +import net.momirealms.craftengine.core.pack.model.definition.rangedisptach.RangeDispatchPropertyType; +import net.momirealms.craftengine.core.pack.model.definition.select.SelectPropertyType; +import net.momirealms.craftengine.core.pack.model.definition.special.SpecialModelType; +import net.momirealms.craftengine.core.pack.model.definition.tint.TintType; import net.momirealms.craftengine.core.plugin.config.template.argument.TemplateArgumentFactory; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.condition.ConditionFactory; @@ -51,7 +47,9 @@ import net.momirealms.craftengine.core.util.FriendlyByteBuf; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceKey; -public class Registries { +public final class Registries { + private Registries() {} + public static final Key ROOT_REGISTRY = Key.withDefaultNamespace("root"); public static final ResourceKey> BLOCK = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("block")); public static final ResourceKey>> ITEM_PROCESSOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("item_processor_type")); @@ -63,18 +61,12 @@ public class Registries { public static final ResourceKey>> LOOT_CONDITION_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("loot_condition_factory")); public static final ResourceKey> NUMBER_PROVIDER_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("number_provider_factory")); public static final ResourceKey> TEMPLATE_ARGUMENT_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("template_argument_factory")); - public static final ResourceKey> ITEM_MODEL_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("item_model_factory")); - public static final ResourceKey> ITEM_MODEL_READER = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("item_model_reader")); - public static final ResourceKey> TINT_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("tint_factory")); - public static final ResourceKey> TINT_READER = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("tint_reader")); - public static final ResourceKey> SPECIAL_MODEL_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("special_model_factory")); - public static final ResourceKey> SPECIAL_MODEL_READER = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("special_model_reader")); - public static final ResourceKey> RANGE_DISPATCH_PROPERTY_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("range_dispatch_property_factory")); - public static final ResourceKey> RANGE_DISPATCH_PROPERTY_READER = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("range_dispatch_property_reader")); - public static final ResourceKey> CONDITION_PROPERTY_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("condition_property_factory")); - public static final ResourceKey> CONDITION_PROPERTY_READER = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("condition_property_reader")); - public static final ResourceKey> SELECT_PROPERTY_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("select_property_factory")); - public static final ResourceKey> SELECT_PROPERTY_READER = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("select_property_reader")); + public static final ResourceKey> ITEM_MODEL_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("item_model_type")); + public static final ResourceKey> TINT_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("tint_type")); + public static final ResourceKey> SPECIAL_MODEL_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("special_model_type")); + public static final ResourceKey> RANGE_DISPATCH_PROPERTY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("range_dispatch_property_type")); + public static final ResourceKey> CONDITION_PROPERTY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("condition_property_type")); + public static final ResourceKey> SELECT_PROPERTY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("select_property_type")); public static final ResourceKey>>> RECIPE_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_factory")); public static final ResourceKey> FORMULA_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("formula_factory")); public static final ResourceKey>> PATH_MATCHER_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("path_matcher_factory"));