From 429983879e46ce769ff24bfa20f675a95404f5e9 Mon Sep 17 00:00:00 2001 From: GhostTypes <106415648+GhostTypes@users.noreply.github.com> Date: Sat, 2 May 2026 14:10:24 -0400 Subject: [PATCH 1/8] Add Meteor 26x parser profile support --- build.gradle | 29 +++- .../java/com/cope/addonparser/cli/Main.java | 20 ++- .../addonparser/profile/MappingProfile.java | 28 ++++ .../addonparser/scanner/AddonScanner.java | 16 +- .../addonparser/scanner/IsolatedScanner.java | 21 ++- .../cope/addonparser/scanner/ScanWorker.java | 28 +++- .../util/ChildFirstClassLoader.java | 3 +- .../addonparser/util/MappingResolver.java | 17 ++ .../addonparser/util/ValueNormalizer.java | 18 +- .../jfronny/meteoradditions/util/IModule.java | 8 + .../meteorclient/gui/WidgetScreen.java | 15 ++ .../gui/utils/SettingsWidgetFactory.java | 18 ++ .../gui/widgets/containers/WContainer.java | 9 + .../settings/BlockDataSetting.java | 1 - .../settings/BlockListSetting.java | 6 +- .../settings/BlockPosSetting.java | 2 - .../meteorclient/settings/BlockSetting.java | 2 - .../meteorclient/settings/BoolSetting.java | 2 - .../settings/ColorListSetting.java | 2 - .../meteorclient/settings/ColorSetting.java | 2 - .../meteorclient/settings/DoubleSetting.java | 2 - .../settings/EnchantmentListSetting.java | 2 - .../settings/EntityTypeListSetting.java | 12 +- .../meteorclient/settings/EnumSetting.java | 2 - .../meteorclient/settings/GenericSetting.java | 2 - .../meteorclient/settings/IntSetting.java | 2 - .../settings/ItemListSetting.java | 6 +- .../meteorclient/settings/ItemSetting.java | 2 - .../meteorclient/settings/KeybindSetting.java | 2 - .../settings/PacketListSetting.java | 1 - .../settings/ScreenHandlerListSetting.java | 2 - .../meteorclient/settings/Setting.java | 2 - .../settings/SoundEventListSetting.java | 2 - .../settings/StringListSetting.java | 2 - .../meteorclient/settings/StringSetting.java | 2 - .../settings/Vector3dSetting.java | 2 - .../meteorclient/systems/modules/Modules.java | 7 +- .../utils/entity/SortPriority.java | 10 ++ .../utils/misc/HorizontalDirection.java | 41 +++++ .../utils/misc/ISerializable.java | 11 +- .../meteorclient/utils/misc/Keybind.java | 2 - .../utils/network/MeteorExecutor.java | 15 ++ src/main/java/net/minecraft/class_2382.java | 6 + .../listener/AbstractGameEventListener.java | 4 + .../util/MappingResolverFactory.java | 60 +++++++ .../server/McpServer.java | 68 ++++++++ .../server/McpServerFeatures.java | 45 +++++ .../server/McpSyncServer.java | 8 + .../server/McpSyncServerExchange.java | 10 ++ ...vletStreamableServerTransportProvider.java | 42 +++++ .../modelcontextprotocol/spec/McpSchema.java | 158 ++++++++++++++++++ .../McpStreamableServerTransportProvider.java | 4 + .../fastutil/objects/ObjectOpenHashSet.java | 17 ++ .../java/jakarta/servlet/Servlet.java | 4 + .../meteorclient/MeteorClient.java | 24 +++ .../meteorclient/gui/tabs/Tab.java | 19 +++ .../meteorclient/gui/tabs/TabScreen.java | 20 +++ .../meteorclient/gui/tabs/Tabs.java | 26 +++ .../settings/StatusEffectListSetting.java | 57 +++++++ .../systems/modules/Category.java | 38 +++++ .../meteorclient/systems/modules/Module.java | 147 ++++++++++++++++ .../utils/misc/MeteorStarscript.java | 40 +++++ .../meteordevelopment/starscript/Script.java | 4 + .../starscript/Starscript.java | 9 + .../starscript/utils/SFunction.java | 7 + .../starscript/value/Value.java | 26 +++ .../starscript/value/ValueMap.java | 4 + .../loader/api/EntrypointContainer.java | 12 ++ .../net/fabricmc/loader/api/FabricLoader.java | 38 +++++ .../fabricmc/loader/api/MappingResolver.java | 24 +++ .../net/fabricmc/loader/api/ModContainer.java | 8 + .../net/fabricmc/loader/api/ModMetadata.java | 22 +++ .../java/net/fabricmc/loader/api/Version.java | 13 ++ .../java/net/minecraft/client/KeyMapping.java | 8 + .../java/net/minecraft/client/Minecraft.java | 14 ++ .../net/minecraft/client/OptionInstance.java | 18 ++ .../java/net/minecraft/client/Options.java | 19 +++ .../minecraft/client/gui/screens/Screen.java | 6 + .../client/multiplayer/ClientInformation.java | 6 + .../java/net/minecraft/core/BlockPos.java | 26 +++ .../net/minecraft/core/DefaultedRegistry.java | 13 ++ .../java/net/minecraft/core/Direction.java | 17 ++ .../java/net/minecraft/core/Holder.java | 8 + .../java/net/minecraft/core/Registry.java | 11 ++ .../net/minecraft/core/SimpleRegistry.java | 44 +++++ .../core/registries/BuiltInRegistries.java | 61 +++++++ .../minecraft/core/registries/Registries.java | 24 +++ .../java/net/minecraft/nbt/CompoundTag.java | 6 + .../net/minecraft/network/chat/Component.java | 12 ++ .../network/chat/MutableComponent.java | 27 +++ .../net/minecraft/resources/Identifier.java | 25 +++ .../net/minecraft/resources/ResourceKey.java | 26 +++ .../minecraft/resources/ResourceLocation.java | 42 +++++ .../packs/resources/ResourceManager.java | 4 + .../ResourceManagerReloadListener.java | 6 + .../java/net/minecraft/sounds/SoundEvent.java | 6 + .../net/minecraft/sounds/SoundEvents.java | 10 ++ .../java/net/minecraft/util/RandomSource.java | 10 ++ .../net/minecraft/world/effect/MobEffect.java | 6 + .../world/effect/MobEffectInstance.java | 6 + .../minecraft/world/entity/EntityType.java | 23 +++ .../minecraft/world/entity/HumanoidArm.java | 7 + .../net/minecraft/world/item/EggItem.java | 6 + .../minecraft/world/item/EnderpearlItem.java | 6 + .../world/item/ExperienceBottleItem.java | 6 + .../world/item/FireworkRocketItem.java | 6 + .../minecraft/world/item/FishingRodItem.java | 6 + .../java/net/minecraft/world/item/Item.java | 6 + .../net/minecraft/world/item/ItemStack.java | 22 +++ .../java/net/minecraft/world/item/Items.java | 28 ++++ .../world/item/ProjectileWeaponItem.java | 6 + .../minecraft/world/item/SnowballItem.java | 6 + .../world/item/ThrowablePotionItem.java | 6 + .../net/minecraft/world/item/TridentItem.java | 6 + .../minecraft/world/item/WindChargeItem.java | 6 + .../minecraft/world/level/block/Block.java | 21 +++ .../minecraft/world/level/block/Blocks.java | 39 +++++ .../world/level/block/state/BlockState.java | 24 +++ .../properties/BlockStateProperties.java | 145 ++++++++++++++++ .../state/properties/BooleanProperty.java | 10 ++ .../block/state/properties/EnumProperty.java | 24 +++ .../state/properties/IntegerProperty.java | 10 ++ .../block/state/properties/Property.java | 8 + .../java/org/apache/catalina/Container.java | 4 + .../java/org/apache/catalina/Context.java | 10 ++ .../apache/catalina/LifecycleException.java | 10 ++ .../java/org/apache/catalina/Loader.java | 4 + .../java/org/apache/catalina/Wrapper.java | 14 ++ .../apache/catalina/connector/Connector.java | 10 ++ .../apache/catalina/core/StandardContext.java | 12 ++ .../loader/WebappClassLoaderBase.java | 26 +++ .../apache/catalina/loader/WebappLoader.java | 10 ++ .../org/apache/catalina/startup/Tomcat.java | 65 +++++++ src/profile-26x/java/org/lwjgl/opengl/GL.java | 14 ++ .../java/org/lwjgl/opengl/GLCapabilities.java | 6 + .../org/meteordev/starscript/Starscript.java | 33 ++++ .../meteordev/starscript/utils/SFunction.java | 0 .../org/meteordev/starscript/value/Value.java | 70 ++++++++ .../meteordev/starscript/value/ValueMap.java | 32 ++++ .../util/MappingResolverFactory.java | 36 ++++ .../addonparser/util/YarnMappingResolver.java | 2 +- .../meteorclient/MeteorClient.java | 0 .../settings/StatusEffectListSetting.java | 2 - .../systems/modules/Category.java | 0 .../meteorclient/systems/modules/Module.java | 11 +- .../utils/misc/MeteorStarscript.java | 0 .../meteordevelopment/starscript/Script.java | 5 + .../starscript/Starscript.java | 0 .../starscript/utils/SFunction.java | 0 .../starscript/value/Value.java | 0 .../starscript/value/ValueMap.java | 0 .../java/net/minecraft/class_1291.java | 6 + .../java/net/minecraft/class_1293.java | 6 + .../java/net/minecraft/class_3417.java | 0 .../net/minecraft/class_6880$class_6883.java | 0 .../java/net/minecraft/sounds/SoundEvent.java | 6 + .../minecraft/world/entity/EntityType.java | 6 + .../java/net/minecraft/world/item/Item.java | 6 + .../minecraft/world/level/block/Block.java | 6 + .../block/state/properties/Property.java | 8 + .../cope/addonparser/tools/StubGenerator.java | 7 +- .../com/cope/addonparser/FixtureScanTest.java | 16 +- .../cope/addonparser/IsolatedScannerTest.java | 20 +-- 163 files changed, 2581 insertions(+), 112 deletions(-) create mode 100644 src/main/java/com/cope/addonparser/profile/MappingProfile.java create mode 100644 src/main/java/com/cope/addonparser/util/MappingResolver.java create mode 100644 src/main/java/dev/jfronny/meteoradditions/util/IModule.java create mode 100644 src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java create mode 100644 src/main/java/meteordevelopment/meteorclient/gui/utils/SettingsWidgetFactory.java create mode 100644 src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/entity/SortPriority.java create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/misc/HorizontalDirection.java create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/network/MeteorExecutor.java create mode 100644 src/main/java/net/minecraft/class_2382.java create mode 100644 src/profile-26x/java/baritone/api/event/listener/AbstractGameEventListener.java create mode 100644 src/profile-26x/java/com/cope/addonparser/util/MappingResolverFactory.java create mode 100644 src/profile-26x/java/io/modelcontextprotocol/server/McpServer.java create mode 100644 src/profile-26x/java/io/modelcontextprotocol/server/McpServerFeatures.java create mode 100644 src/profile-26x/java/io/modelcontextprotocol/server/McpSyncServer.java create mode 100644 src/profile-26x/java/io/modelcontextprotocol/server/McpSyncServerExchange.java create mode 100644 src/profile-26x/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java create mode 100644 src/profile-26x/java/io/modelcontextprotocol/spec/McpSchema.java create mode 100644 src/profile-26x/java/io/modelcontextprotocol/spec/McpStreamableServerTransportProvider.java create mode 100644 src/profile-26x/java/it/unimi/dsi/fastutil/objects/ObjectOpenHashSet.java create mode 100644 src/profile-26x/java/jakarta/servlet/Servlet.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/MeteorClient.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/Tab.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/TabScreen.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/Tabs.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/systems/modules/Category.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/systems/modules/Module.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java create mode 100644 src/profile-26x/java/meteordevelopment/starscript/Script.java create mode 100644 src/profile-26x/java/meteordevelopment/starscript/Starscript.java create mode 100644 src/profile-26x/java/meteordevelopment/starscript/utils/SFunction.java create mode 100644 src/profile-26x/java/meteordevelopment/starscript/value/Value.java create mode 100644 src/profile-26x/java/meteordevelopment/starscript/value/ValueMap.java create mode 100644 src/profile-26x/java/net/fabricmc/loader/api/EntrypointContainer.java create mode 100644 src/profile-26x/java/net/fabricmc/loader/api/FabricLoader.java create mode 100644 src/profile-26x/java/net/fabricmc/loader/api/MappingResolver.java create mode 100644 src/profile-26x/java/net/fabricmc/loader/api/ModContainer.java create mode 100644 src/profile-26x/java/net/fabricmc/loader/api/ModMetadata.java create mode 100644 src/profile-26x/java/net/fabricmc/loader/api/Version.java create mode 100644 src/profile-26x/java/net/minecraft/client/KeyMapping.java create mode 100644 src/profile-26x/java/net/minecraft/client/Minecraft.java create mode 100644 src/profile-26x/java/net/minecraft/client/OptionInstance.java create mode 100644 src/profile-26x/java/net/minecraft/client/Options.java create mode 100644 src/profile-26x/java/net/minecraft/client/gui/screens/Screen.java create mode 100644 src/profile-26x/java/net/minecraft/client/multiplayer/ClientInformation.java create mode 100644 src/profile-26x/java/net/minecraft/core/BlockPos.java create mode 100644 src/profile-26x/java/net/minecraft/core/DefaultedRegistry.java create mode 100644 src/profile-26x/java/net/minecraft/core/Direction.java create mode 100644 src/profile-26x/java/net/minecraft/core/Holder.java create mode 100644 src/profile-26x/java/net/minecraft/core/Registry.java create mode 100644 src/profile-26x/java/net/minecraft/core/SimpleRegistry.java create mode 100644 src/profile-26x/java/net/minecraft/core/registries/BuiltInRegistries.java create mode 100644 src/profile-26x/java/net/minecraft/core/registries/Registries.java create mode 100644 src/profile-26x/java/net/minecraft/nbt/CompoundTag.java create mode 100644 src/profile-26x/java/net/minecraft/network/chat/Component.java create mode 100644 src/profile-26x/java/net/minecraft/network/chat/MutableComponent.java create mode 100644 src/profile-26x/java/net/minecraft/resources/Identifier.java create mode 100644 src/profile-26x/java/net/minecraft/resources/ResourceKey.java create mode 100644 src/profile-26x/java/net/minecraft/resources/ResourceLocation.java create mode 100644 src/profile-26x/java/net/minecraft/server/packs/resources/ResourceManager.java create mode 100644 src/profile-26x/java/net/minecraft/server/packs/resources/ResourceManagerReloadListener.java create mode 100644 src/profile-26x/java/net/minecraft/sounds/SoundEvent.java create mode 100644 src/profile-26x/java/net/minecraft/sounds/SoundEvents.java create mode 100644 src/profile-26x/java/net/minecraft/util/RandomSource.java create mode 100644 src/profile-26x/java/net/minecraft/world/effect/MobEffect.java create mode 100644 src/profile-26x/java/net/minecraft/world/effect/MobEffectInstance.java create mode 100644 src/profile-26x/java/net/minecraft/world/entity/EntityType.java create mode 100644 src/profile-26x/java/net/minecraft/world/entity/HumanoidArm.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/EggItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/EnderpearlItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/ExperienceBottleItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/FireworkRocketItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/FishingRodItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/Item.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/ItemStack.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/Items.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/ProjectileWeaponItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/SnowballItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/ThrowablePotionItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/TridentItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/WindChargeItem.java create mode 100644 src/profile-26x/java/net/minecraft/world/level/block/Block.java create mode 100644 src/profile-26x/java/net/minecraft/world/level/block/Blocks.java create mode 100644 src/profile-26x/java/net/minecraft/world/level/block/state/BlockState.java create mode 100644 src/profile-26x/java/net/minecraft/world/level/block/state/properties/BlockStateProperties.java create mode 100644 src/profile-26x/java/net/minecraft/world/level/block/state/properties/BooleanProperty.java create mode 100644 src/profile-26x/java/net/minecraft/world/level/block/state/properties/EnumProperty.java create mode 100644 src/profile-26x/java/net/minecraft/world/level/block/state/properties/IntegerProperty.java create mode 100644 src/profile-26x/java/net/minecraft/world/level/block/state/properties/Property.java create mode 100644 src/profile-26x/java/org/apache/catalina/Container.java create mode 100644 src/profile-26x/java/org/apache/catalina/Context.java create mode 100644 src/profile-26x/java/org/apache/catalina/LifecycleException.java create mode 100644 src/profile-26x/java/org/apache/catalina/Loader.java create mode 100644 src/profile-26x/java/org/apache/catalina/Wrapper.java create mode 100644 src/profile-26x/java/org/apache/catalina/connector/Connector.java create mode 100644 src/profile-26x/java/org/apache/catalina/core/StandardContext.java create mode 100644 src/profile-26x/java/org/apache/catalina/loader/WebappClassLoaderBase.java create mode 100644 src/profile-26x/java/org/apache/catalina/loader/WebappLoader.java create mode 100644 src/profile-26x/java/org/apache/catalina/startup/Tomcat.java create mode 100644 src/profile-26x/java/org/lwjgl/opengl/GL.java create mode 100644 src/profile-26x/java/org/lwjgl/opengl/GLCapabilities.java create mode 100644 src/profile-26x/java/org/meteordev/starscript/Starscript.java rename src/{main => profile-26x}/java/org/meteordev/starscript/utils/SFunction.java (100%) create mode 100644 src/profile-26x/java/org/meteordev/starscript/value/Value.java create mode 100644 src/profile-26x/java/org/meteordev/starscript/value/ValueMap.java create mode 100644 src/profile-legacy/java/com/cope/addonparser/util/MappingResolverFactory.java rename src/{main => profile-legacy}/java/com/cope/addonparser/util/YarnMappingResolver.java (99%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/MeteorClient.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java (98%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/systems/modules/Category.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/systems/modules/Module.java (92%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java (100%) create mode 100644 src/profile-legacy/java/meteordevelopment/starscript/Script.java rename src/{main => profile-legacy}/java/meteordevelopment/starscript/Starscript.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/starscript/utils/SFunction.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/starscript/value/Value.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/starscript/value/ValueMap.java (100%) create mode 100644 src/profile-legacy/java/net/minecraft/class_1291.java create mode 100644 src/profile-legacy/java/net/minecraft/class_1293.java rename src/{main => profile-legacy}/java/net/minecraft/class_3417.java (100%) rename src/{main => profile-legacy}/java/net/minecraft/class_6880$class_6883.java (100%) create mode 100644 src/profile-legacy/java/net/minecraft/sounds/SoundEvent.java create mode 100644 src/profile-legacy/java/net/minecraft/world/entity/EntityType.java create mode 100644 src/profile-legacy/java/net/minecraft/world/item/Item.java create mode 100644 src/profile-legacy/java/net/minecraft/world/level/block/Block.java create mode 100644 src/profile-legacy/java/net/minecraft/world/level/block/state/properties/Property.java diff --git a/build.gradle b/build.gradle index 9c7fc72..edd5fcf 100644 --- a/build.gradle +++ b/build.gradle @@ -9,10 +9,18 @@ version = '0.1.0' java { toolchain { - languageVersion = JavaLanguageVersion.of(21) + languageVersion = JavaLanguageVersion.of(25) } } +// Mapping profile: selects which shim source dir is included in the main sourceSet. +// Run gradle with -PparserProfile=legacy to build the 1.21.x flavor; default is 26x. +ext.parserProfile = (project.findProperty('parserProfile') ?: '26x').toString().toLowerCase() +if (parserProfile != 'legacy' && parserProfile != '26x') { + throw new GradleException("Unknown parserProfile: ${parserProfile} (expected 'legacy' or '26x')") +} +def profileSourceDir = parserProfile == 'legacy' ? 'src/profile-legacy/java' : 'src/profile-26x/java' + repositories { mavenCentral() maven { url = uri('https://libraries.minecraft.net') } @@ -21,8 +29,8 @@ repositories { dependencies { implementation 'com.fasterxml.jackson.core:jackson-databind:2.18.3' - implementation 'org.ow2.asm:asm:9.7.1' - implementation 'org.ow2.asm:asm-commons:9.7.1' + implementation 'org.ow2.asm:asm:9.9' + implementation 'org.ow2.asm:asm-commons:9.9' implementation 'org.slf4j:slf4j-api:2.0.16' runtimeOnly 'org.slf4j:slf4j-simple:2.0.16' implementation 'org.apache.logging.log4j:log4j-api:2.24.3' @@ -31,20 +39,23 @@ dependencies { implementation 'com.mojang:brigadier:1.0.18' implementation 'org.spongepowered:mixin:0.8.5' testImplementation 'org.junit.jupiter:junit-jupiter:5.11.4' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.withType(Test).configureEach { useJUnitPlatform() jvmArgs '-noverify' + systemProperty 'addonparser.profile', parserProfile } application { mainClass = 'com.cope.addonparser.cli.Main' - applicationDefaultJvmArgs = ['-noverify'] + applicationDefaultJvmArgs = ['-noverify', "-Daddonparser.profile=${project.parserProfile}"] } tasks.named('run') { jvmArgs '-noverify' + systemProperty 'addonparser.profile', parserProfile } sourceSets { @@ -56,13 +67,13 @@ sourceSets { main { java { - srcDirs += ['src/generated/java'] + srcDirs += ['src/generated/java', profileSourceDir] } } } dependencies { - stubgenImplementation 'org.ow2.asm:asm:9.7.1' + stubgenImplementation 'org.ow2.asm:asm:9.9' stubgenImplementation 'com.google.code.gson:gson:2.11.0' } @@ -71,7 +82,8 @@ tasks.register('generateStubs', JavaExec) { mainClass = 'com.cope.addonparser.tools.StubGenerator' args '--input-dir', 'fixtures/addons/jars', '--output-dir', 'src/generated/java', - '--manual-class-list', 'tools/manual_classes.txt' + '--manual-class-list', 'tools/manual_classes.txt', + '--profile', parserProfile // Incremental support: declare inputs and outputs inputs.dir('fixtures/addons/jars') @@ -139,7 +151,8 @@ tasks.named('clean') { // AP-009: Spotless configuration for Google Java Style on manual sources spotless { java { - target 'src/main/java/**/*.java', 'src/test/java/**/*.java', 'src/stubgen/java/**/*.java' + target 'src/main/java/**/*.java', 'src/test/java/**/*.java', 'src/stubgen/java/**/*.java', + 'src/profile-legacy/java/**/*.java', 'src/profile-26x/java/**/*.java' targetExclude 'src/generated/java/**' googleJavaFormat() removeUnusedImports() diff --git a/src/main/java/com/cope/addonparser/cli/Main.java b/src/main/java/com/cope/addonparser/cli/Main.java index f73e7ab..703936e 100644 --- a/src/main/java/com/cope/addonparser/cli/Main.java +++ b/src/main/java/com/cope/addonparser/cli/Main.java @@ -2,6 +2,7 @@ import com.cope.addonparser.model.JarScanResult; import com.cope.addonparser.model.ScanSummary; +import com.cope.addonparser.profile.MappingProfile; import com.cope.addonparser.scanner.AddonScanner; import com.cope.addonparser.scanner.IsolatedScanner; import com.cope.addonparser.scanner.RuntimeMode; @@ -25,6 +26,10 @@ public static void main(String[] args) throws Exception { return; } + // Make profile visible to in-process consumers (e.g. ValueNormalizer) and forwarded + // subprocesses. + System.setProperty(MappingProfile.SYSTEM_PROPERTY, parsed.profile.cliValue()); + List jars = collectJars(parsed.input); if (jars.isEmpty()) { System.err.println("No jar files found in: " + parsed.input); @@ -40,9 +45,12 @@ public static void main(String[] args) throws Exception { summary.jarCount = jars.size(); System.out.println("Runtime mode: " + parsed.mode); + System.out.println("Mapping profile: " + parsed.profile.cliValue()); try (AutoCloseable scanner = - parsed.mode == RuntimeMode.ISOLATED ? new IsolatedScanner() : new AddonScanner()) { + parsed.mode == RuntimeMode.ISOLATED + ? new IsolatedScanner(parsed.profile) + : new AddonScanner(parsed.profile)) { for (Path jar : jars) { JarScanResult result = parsed.mode == RuntimeMode.ISOLATED @@ -115,15 +123,17 @@ private static List collectJars(Path input) throws Exception { private static void printUsage() { System.out.println( - "Usage: java -jar addon-parser.jar --input [--output ] [--summary ] [--mode isolated|legacy]"); + "Usage: java -jar addon-parser.jar --input [--output ] [--summary ] [--mode isolated|legacy] [--profile legacy|26x]"); } - private record Args(Path input, Path outputDir, Path summaryFile, RuntimeMode mode) { + private record Args( + Path input, Path outputDir, Path summaryFile, RuntimeMode mode, MappingProfile profile) { static Args parse(String[] args) { Path input = null; Path output = Paths.get("output"); Path summary = null; RuntimeMode mode = RuntimeMode.LEGACY; + MappingProfile profile = MappingProfile.fromSystemProperty(); for (int i = 0; i < args.length; i++) { String arg = args[i]; @@ -135,13 +145,15 @@ static Args parse(String[] args) { summary = Paths.get(args[++i]); } else if ("--mode".equals(arg) && i + 1 < args.length) { mode = RuntimeMode.fromString(args[++i]); + } else if ("--profile".equals(arg) && i + 1 < args.length) { + profile = MappingProfile.fromString(args[++i]); } else { return null; } } if (input == null) return null; - return new Args(input, output, summary, mode); + return new Args(input, output, summary, mode, profile); } } } diff --git a/src/main/java/com/cope/addonparser/profile/MappingProfile.java b/src/main/java/com/cope/addonparser/profile/MappingProfile.java new file mode 100644 index 0000000..a90d97a --- /dev/null +++ b/src/main/java/com/cope/addonparser/profile/MappingProfile.java @@ -0,0 +1,28 @@ +package com.cope.addonparser.profile; + +import java.util.Locale; + +public enum MappingProfile { + LEGACY, + MOJMAP_26X; + + public static final String SYSTEM_PROPERTY = "addonparser.profile"; + + public static MappingProfile fromString(String value) { + if (value == null || value.isBlank()) return MOJMAP_26X; + return switch (value.trim().toLowerCase(Locale.ROOT)) { + case "legacy", "1.21", "1.21.x", "yarn" -> LEGACY; + case "26x", "26", "26.1", "mojmap", "mojmap_26x" -> MOJMAP_26X; + default -> throw new IllegalArgumentException( + "Unknown mapping profile: " + value + " (expected 'legacy' or '26x')"); + }; + } + + public static MappingProfile fromSystemProperty() { + return fromString(System.getProperty(SYSTEM_PROPERTY)); + } + + public String cliValue() { + return this == LEGACY ? "legacy" : "26x"; + } +} diff --git a/src/main/java/com/cope/addonparser/scanner/AddonScanner.java b/src/main/java/com/cope/addonparser/scanner/AddonScanner.java index 5acd1cc..5be0ac1 100644 --- a/src/main/java/com/cope/addonparser/scanner/AddonScanner.java +++ b/src/main/java/com/cope/addonparser/scanner/AddonScanner.java @@ -6,6 +6,7 @@ import com.cope.addonparser.model.ModuleDump; import com.cope.addonparser.model.SettingDump; import com.cope.addonparser.model.SettingGroupDump; +import com.cope.addonparser.profile.MappingProfile; import com.cope.addonparser.util.ChildFirstClassLoader; import com.cope.addonparser.util.FabricModParser; import com.cope.addonparser.util.ValueNormalizer; @@ -40,7 +41,20 @@ public class AddonScanner implements AutoCloseable { private static final String KEEP_TMP_PROPERTY = "addonparser.keepTmp"; private static final Path DEFAULT_TMP_ROOT = Paths.get("tmp", "addon-parser-runtime"); - public AddonScanner() {} + private final MappingProfile profile; + + public AddonScanner() { + this(MappingProfile.fromSystemProperty()); + } + + public AddonScanner(MappingProfile profile) { + this.profile = profile; + System.setProperty(MappingProfile.SYSTEM_PROPERTY, profile.cliValue()); + } + + public MappingProfile profile() { + return profile; + } public JarScanResult scan(Path jarPath) { Path absoluteJar = jarPath.toAbsolutePath().normalize(); diff --git a/src/main/java/com/cope/addonparser/scanner/IsolatedScanner.java b/src/main/java/com/cope/addonparser/scanner/IsolatedScanner.java index 3521522..598149b 100644 --- a/src/main/java/com/cope/addonparser/scanner/IsolatedScanner.java +++ b/src/main/java/com/cope/addonparser/scanner/IsolatedScanner.java @@ -1,6 +1,7 @@ package com.cope.addonparser.scanner; import com.cope.addonparser.model.JarScanResult; +import com.cope.addonparser.profile.MappingProfile; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedReader; @@ -22,13 +23,23 @@ public class IsolatedScanner implements AutoCloseable { private static final String WORKER_MAIN = ScanWorker.class.getName(); private final long timeoutSeconds; + private final MappingProfile profile; public IsolatedScanner() { - this(DEFAULT_TIMEOUT_SECONDS); + this(DEFAULT_TIMEOUT_SECONDS, MappingProfile.fromSystemProperty()); + } + + public IsolatedScanner(MappingProfile profile) { + this(DEFAULT_TIMEOUT_SECONDS, profile); } public IsolatedScanner(long timeoutSeconds) { + this(timeoutSeconds, MappingProfile.fromSystemProperty()); + } + + public IsolatedScanner(long timeoutSeconds, MappingProfile profile) { this.timeoutSeconds = timeoutSeconds; + this.profile = profile; } public JarScanResult scan(Path jarPath) { @@ -39,7 +50,7 @@ public JarScanResult scan(Path jarPath) { result.jarPath = absoluteJar.toString(); try { - List command = buildWorkerCommand(absoluteJar); + List command = buildWorkerCommand(absoluteJar, profile); ProcessBuilder pb = new ProcessBuilder(command); pb.redirectErrorStream(false); @@ -118,7 +129,7 @@ public JarScanResult scan(Path jarPath) { } } - private static List buildWorkerCommand(Path jarPath) { + private static List buildWorkerCommand(Path jarPath, MappingProfile profile) { List cmd = new ArrayList<>(); String javaHome = System.getProperty("java.home"); String javaBin = Path.of(javaHome, "bin", "java").toString(); @@ -145,8 +156,12 @@ private static List buildWorkerCommand(Path jarPath) { } } + cmd.add("-D" + MappingProfile.SYSTEM_PROPERTY + "=" + profile.cliValue()); + cmd.add(WORKER_MAIN); cmd.add(jarPath.toString()); + cmd.add("--profile"); + cmd.add(profile.cliValue()); return cmd; } diff --git a/src/main/java/com/cope/addonparser/scanner/ScanWorker.java b/src/main/java/com/cope/addonparser/scanner/ScanWorker.java index 9a529ef..8f6ee01 100644 --- a/src/main/java/com/cope/addonparser/scanner/ScanWorker.java +++ b/src/main/java/com/cope/addonparser/scanner/ScanWorker.java @@ -1,6 +1,7 @@ package com.cope.addonparser.scanner; import com.cope.addonparser.model.JarScanResult; +import com.cope.addonparser.profile.MappingProfile; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.PrintStream; import java.nio.file.Path; @@ -9,26 +10,45 @@ * Entry point for the isolated worker JVM process. Scans a single jar using {@link AddonScanner} * and writes the result as JSON to stdout. * - *

Usage: {@code java ... com.cope.addonparser.scanner.ScanWorker } + *

Usage: {@code java ... com.cope.addonparser.scanner.ScanWorker [--profile + * legacy|26x]} */ public final class ScanWorker { private ScanWorker() {} public static void main(String[] args) { if (args.length < 1) { - System.err.println("Usage: ScanWorker "); + System.err.println("Usage: ScanWorker [--profile legacy|26x]"); System.exit(2); return; } + Path jarPath = null; + MappingProfile profile = MappingProfile.fromSystemProperty(); + for (int i = 0; i < args.length; i++) { + String arg = args[i]; + if ("--profile".equals(arg) && i + 1 < args.length) { + profile = MappingProfile.fromString(args[++i]); + } else if (jarPath == null) { + jarPath = Path.of(arg); + } + } + + if (jarPath == null) { + System.err.println("Usage: ScanWorker [--profile legacy|26x]"); + System.exit(2); + return; + } + + System.setProperty(MappingProfile.SYSTEM_PROPERTY, profile.cliValue()); + // Redirect stdout early so addon code can't pollute the JSON output PrintStream originalOut = System.out; System.setOut(System.err); - Path jarPath = Path.of(args[0]); JarScanResult result; - try (AddonScanner scanner = new AddonScanner()) { + try (AddonScanner scanner = new AddonScanner(profile)) { result = scanner.scan(jarPath); } catch (Throwable t) { result = new JarScanResult(); diff --git a/src/main/java/com/cope/addonparser/util/ChildFirstClassLoader.java b/src/main/java/com/cope/addonparser/util/ChildFirstClassLoader.java index 16af27d..c8c1a88 100644 --- a/src/main/java/com/cope/addonparser/util/ChildFirstClassLoader.java +++ b/src/main/java/com/cope/addonparser/util/ChildFirstClassLoader.java @@ -368,6 +368,7 @@ private boolean isParentFirst(String name) { || name.startsWith("sun.") || name.startsWith("org.meteordev.starscript.") || name.startsWith("meteordevelopment.starscript.") - || name.startsWith("com.cope.addonparser."); + || name.startsWith("com.cope.addonparser.") + || name.equals("dev.jfronny.meteoradditions.util.IModule"); } } diff --git a/src/main/java/com/cope/addonparser/util/MappingResolver.java b/src/main/java/com/cope/addonparser/util/MappingResolver.java new file mode 100644 index 0000000..b1e4374 --- /dev/null +++ b/src/main/java/com/cope/addonparser/util/MappingResolver.java @@ -0,0 +1,17 @@ +package com.cope.addonparser.util; + +/** + * Resolves obfuscated/intermediary names to human-readable names. Implementations are profile + * specific: legacy (Yarn) maps {@code class_*} to mojang names; the 26x profile is identity + * because Mojmap addons are already unobfuscated. + */ +public interface MappingResolver { + /** Map a class name (dot-separated), or return null if no mapping exists. */ + String mapClass(String className); + + /** Map a static field reference {@code owner.name}, or return null. */ + String mapSymbol(String ownerClass, String fieldName); + + /** Map a single field name on the given owner, or return null. */ + String mapField(String ownerClass, String fieldName); +} diff --git a/src/main/java/com/cope/addonparser/util/ValueNormalizer.java b/src/main/java/com/cope/addonparser/util/ValueNormalizer.java index 46d2f64..e322bee 100644 --- a/src/main/java/com/cope/addonparser/util/ValueNormalizer.java +++ b/src/main/java/com/cope/addonparser/util/ValueNormalizer.java @@ -21,16 +21,8 @@ public final class ValueNormalizer { private static final Pattern DEFAULT_OBJECT_TOSTRING = Pattern.compile("^.+@[0-9a-fA-F]+$"); private static final Map OBJECT_SYMBOL_CACHE = Collections.synchronizedMap(new IdentityHashMap<>()); - private static final YarnMappingResolver YARN = YarnMappingResolver.get(); - private static final Map> OWNER_HINTS = - Map.of( - "net.minecraft.class_1792", List.of("net.minecraft.class_1802"), - "net.minecraft.class_2248", List.of("net.minecraft.class_2246"), - "net.minecraft.class_3414", List.of("net.minecraft.class_3417"), - "net.minecraft.class_1887", List.of("net.minecraft.class_1893"), - "net.minecraft.class_5321", List.of("net.minecraft.class_1893"), - "net.minecraft.class_1291", List.of("net.minecraft.class_1294"), - "net.minecraft.class_6880", List.of("net.minecraft.class_1294")); + private static final MappingResolver YARN = MappingResolverFactory.get(); + private static final Map> OWNER_HINTS = MappingResolverFactory.ownerHints(); private ValueNormalizer() {} @@ -149,9 +141,9 @@ private static String resolveSymbol(Object value) { new LinkedHashSet<>(OWNER_HINTS.getOrDefault(valueClass.getName(), List.of())); // Fallback to nearby registry-like owner classes when we don't have explicit hints. - String simple = valueClass.getSimpleName(); - if ("class_1792".equals(simple)) candidates.add("net.minecraft.class_1802"); - if ("class_2248".equals(simple)) candidates.add("net.minecraft.class_2246"); + String fallbackOwner = + MappingResolverFactory.fallbackOwnerForSimpleName(valueClass.getSimpleName()); + if (fallbackOwner != null) candidates.add(fallbackOwner); ClassLoader loader = valueClass.getClassLoader(); for (String ownerName : candidates) { diff --git a/src/main/java/dev/jfronny/meteoradditions/util/IModule.java b/src/main/java/dev/jfronny/meteoradditions/util/IModule.java new file mode 100644 index 0000000..34be7b8 --- /dev/null +++ b/src/main/java/dev/jfronny/meteoradditions/util/IModule.java @@ -0,0 +1,8 @@ +package dev.jfronny.meteoradditions.util; + +@SuppressWarnings("all") +public interface IModule { + void meteorAdditions$setKeywords(String... keywords); + + String meteorAdditions$getQueryString(); +} diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java new file mode 100644 index 0000000..bbb37bf --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -0,0 +1,15 @@ +package meteordevelopment.meteorclient.gui; + +import meteordevelopment.meteorclient.gui.utils.Cell; +import meteordevelopment.meteorclient.gui.widgets.WWidget; + +@SuppressWarnings("all") +public class WidgetScreen { + public WidgetScreen() {} + + public WidgetScreen(GuiTheme theme, String title) {} + + public Cell add(WWidget widget) { + return new Cell(); + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/gui/utils/SettingsWidgetFactory.java b/src/main/java/meteordevelopment/meteorclient/gui/utils/SettingsWidgetFactory.java new file mode 100644 index 0000000..7eb1c1e --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/gui/utils/SettingsWidgetFactory.java @@ -0,0 +1,18 @@ +package meteordevelopment.meteorclient.gui.utils; + +import java.util.function.Function; +import meteordevelopment.meteorclient.gui.GuiTheme; +import meteordevelopment.meteorclient.gui.widgets.WWidget; +import meteordevelopment.meteorclient.settings.Setting; + +@SuppressWarnings("all") +public final class SettingsWidgetFactory { + private SettingsWidgetFactory() {} + + public static void registerCustomFactory(Class klass, Function, WWidget> factory) {} + + @FunctionalInterface + public interface Factory { + WWidget create(GuiTheme theme, Setting setting); + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java new file mode 100644 index 0000000..8126e3c --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java @@ -0,0 +1,9 @@ +package meteordevelopment.meteorclient.gui.widgets.containers; + +import meteordevelopment.meteorclient.gui.widgets.WWidget; + +/** Hand stub for the WContainer GUI widget container. We only need the type for parameter + * signatures; no behavior. */ +public abstract class WContainer extends WWidget { + public WContainer() {} +} diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java index de03860..623bae4 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java @@ -29,7 +29,6 @@ protected boolean isValueValid(Map value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java index 1fd09b8..41972ec 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java @@ -29,12 +29,10 @@ protected boolean isValueValid(List value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected List load(net.minecraft.class_2487 tag) { return value; } @@ -57,6 +55,10 @@ public Builder filter(java.util.function.Predicate fil return this; } + public Builder defaultValue(net.minecraft.world.level.block.Block... blocks) { + return this; + } + @Override public BlockListSetting build() { return new BlockListSetting( diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java index a3b3885..9f71186 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java @@ -21,12 +21,10 @@ protected boolean isValueValid(net.minecraft.class_2338 value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected net.minecraft.class_2338 load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java index 1641870..dcd051b 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java @@ -27,12 +27,10 @@ protected boolean isValueValid(net.minecraft.class_2248 value) { return value != null && (filter == null || filter.test(value)); } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected net.minecraft.class_2248 load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java index 5a7d973..4ab054a 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java @@ -23,12 +23,10 @@ protected boolean isValueValid(Boolean value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected Boolean load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java index 54b0044..0adf63a 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java @@ -25,12 +25,10 @@ protected boolean isValueValid(List value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java index d2983de..828a945 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java @@ -24,12 +24,10 @@ protected boolean isValueValid(SettingColor value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected SettingColor load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java index fb50313..fe15018 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java @@ -45,12 +45,10 @@ protected boolean isValueValid(Double value) { return value != null && value >= min && value <= max; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected Double load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java index 693fbe5..d42434b 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java @@ -27,12 +27,10 @@ protected boolean isValueValid(Set value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected Set load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java index be4e80d..9671f3e 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java @@ -28,12 +28,10 @@ protected boolean isValueValid(Set value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected Set load(net.minecraft.class_2487 tag) { return value; } @@ -42,6 +40,7 @@ public static class Builder extends Setting.SettingBuilder< Builder, Set, EntityTypeListSetting> { private boolean onlyAttackable; + private java.util.function.Predicate filter; public Builder() { super(new LinkedHashSet<>()); @@ -60,6 +59,15 @@ public Builder onlyAttackable() { return this; } + public Builder filter(java.util.function.Predicate filter) { + this.filter = filter; + return this; + } + + public Builder defaultValue(net.minecraft.world.entity.EntityType... values) { + return this; + } + @Override public EntityTypeListSetting build() { return new EntityTypeListSetting( diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java index 96bd7fc..2c0866b 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java @@ -21,12 +21,10 @@ protected boolean isValueValid(T value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected T load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java index 6f63638..06829e2 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java @@ -21,12 +21,10 @@ protected boolean isValueValid(T value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected T load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java index 50efbd5..2fcbe09 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java @@ -44,12 +44,10 @@ protected boolean isValueValid(Integer value) { return value != null && value >= min && value <= max; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected Integer load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java index 954d170..fa7bacb 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java @@ -29,12 +29,10 @@ protected boolean isValueValid(List value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected List load(net.minecraft.class_2487 tag) { return value; } @@ -57,6 +55,10 @@ public Builder filter(java.util.function.Predicate fil return this; } + public Builder defaultValue(net.minecraft.world.item.Item... items) { + return this; + } + @Override public ItemListSetting build() { return new ItemListSetting( diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java index a7e16f2..512237c 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java @@ -25,12 +25,10 @@ protected boolean isValueValid(net.minecraft.class_1792 value) { return value != null && (filter == null || filter.test(value)); } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected net.minecraft.class_1792 load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java index b2a3340..6eca1a0 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java @@ -34,12 +34,10 @@ protected boolean isValueValid(Keybind value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected Keybind load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java index 69a2d22..9b70eed 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java @@ -29,7 +29,6 @@ protected boolean isValueValid(Set> value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java index 1aad8f6..ed37379 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java @@ -24,12 +24,10 @@ protected boolean isValueValid(List value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Setting.java b/src/main/java/meteordevelopment/meteorclient/settings/Setting.java index b9b56e5..eafc86d 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/Setting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/Setting.java @@ -104,7 +104,6 @@ public List getSuggestions() { protected abstract net.minecraft.class_2487 save(net.minecraft.class_2487 tag); - @Override public net.minecraft.class_2487 toTag() { net.minecraft.class_2487 tag = new net.minecraft.class_2487(); return save(tag); @@ -112,7 +111,6 @@ public net.minecraft.class_2487 toTag() { protected abstract T load(net.minecraft.class_2487 tag); - @Override public T fromTag(net.minecraft.class_2487 tag) { T loaded = load(tag); if (loaded != null) value = loaded; diff --git a/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java index 28ce996..e1c95b7 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java @@ -24,12 +24,10 @@ protected boolean isValueValid(List value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java index e2f2024..dcdef29 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java @@ -25,12 +25,10 @@ protected boolean isValueValid(List value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java index 4c4fdbe..2cc6396 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java @@ -36,12 +36,10 @@ protected boolean isValueValid(String value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected String load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java index 6183b00..3411ab9 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java @@ -21,12 +21,10 @@ protected boolean isValueValid(org.joml.Vector3d value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected org.joml.Vector3d load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java index 2d12437..b09df49 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java @@ -20,6 +20,7 @@ public final class Modules { private final Map, Module> moduleInstances = new HashMap<>(); private final Map> groups = new HashMap<>(); private final List active = new ArrayList<>(); + private final Category placeholderCategory = new Category("Meteor"); private Modules() {} @@ -62,7 +63,11 @@ public Module get(String name) { for (Module module : moduleInstances.values()) { if (name.equalsIgnoreCase(module.name)) return module; } - return null; + + Module placeholder = new Module(placeholderCategory, name, "") {}; + moduleInstances.put(placeholder.getClass(), placeholder); + getGroup(placeholderCategory).add(placeholder); + return placeholder; } public boolean isActive(Class klass) { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/entity/SortPriority.java b/src/main/java/meteordevelopment/meteorclient/utils/entity/SortPriority.java new file mode 100644 index 0000000..a80f934 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/entity/SortPriority.java @@ -0,0 +1,10 @@ +package meteordevelopment.meteorclient.utils.entity; + +@SuppressWarnings("all") +public enum SortPriority { + LowestDistance, + HighestDistance, + ClosestAngle, + LowestHealth, + HighestHealth +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/HorizontalDirection.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/HorizontalDirection.java new file mode 100644 index 0000000..d283193 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/HorizontalDirection.java @@ -0,0 +1,41 @@ +package meteordevelopment.meteorclient.utils.misc; + +public enum HorizontalDirection { + South("South", "Z+", false, 0, 0, 1), + SouthEast("South East", "X+ Z+", true, -45, 1, 1), + West("West", "X-", false, 90, -1, 0), + NorthWest("North West", "X- Z-", true, 135, -1, -1), + North("North", "Z-", false, 180, 0, -1), + NorthEast("North East", "X+ Z-", true, -135, 1, -1), + East("East", "X+", false, -90, 1, 0), + SouthWest("South West", "X- Z+", true, 45, -1, 1); + + public final String name; + public final String axis; + public final boolean diagonal; + public final float yaw; + public final int offsetX, offsetZ; + + HorizontalDirection( + String name, String axis, boolean diagonal, float yaw, int offsetX, int offsetZ) { + this.axis = axis; + this.name = name; + this.diagonal = diagonal; + this.yaw = yaw; + this.offsetX = offsetX; + this.offsetZ = offsetZ; + } + + public static HorizontalDirection get(float yaw) { + yaw = yaw % 360; + if (yaw < 0) yaw += 360; + if (yaw >= 337.5 || yaw < 22.5) return South; + if (yaw < 67.5) return SouthWest; + if (yaw < 112.5) return West; + if (yaw < 157.5) return NorthWest; + if (yaw < 202.5) return North; + if (yaw < 247.5) return NorthEast; + if (yaw < 292.5) return East; + return SouthEast; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java index d048486..de9318f 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java @@ -1,7 +1,8 @@ package meteordevelopment.meteorclient.utils.misc; -public interface ISerializable { - net.minecraft.class_2487 toTag(); - - T fromTag(net.minecraft.class_2487 tag); -} +/** + * Marker interface implemented by classes that round-trip to NBT in real Meteor. The parser does + * not exercise serialization, so the interface intentionally has no methods - subclasses keep + * their own profile-specific toTag/fromTag overloads as orphan methods. + */ +public interface ISerializable {} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java index 9264029..4d0240f 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java @@ -56,12 +56,10 @@ public Keybind copy() { return bind; } - @Override public net.minecraft.class_2487 toTag() { return new net.minecraft.class_2487(); } - @Override public Keybind fromTag(net.minecraft.class_2487 tag) { return this; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/network/MeteorExecutor.java b/src/main/java/meteordevelopment/meteorclient/utils/network/MeteorExecutor.java new file mode 100644 index 0000000..3879d83 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/network/MeteorExecutor.java @@ -0,0 +1,15 @@ +package meteordevelopment.meteorclient.utils.network; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; + +@SuppressWarnings("all") +public final class MeteorExecutor { + private MeteorExecutor() {} + + public static void execute(Runnable task) {} + + public static Future submit(Runnable task) { + return CompletableFuture.completedFuture(null); + } +} diff --git a/src/main/java/net/minecraft/class_2382.java b/src/main/java/net/minecraft/class_2382.java new file mode 100644 index 0000000..db24715 --- /dev/null +++ b/src/main/java/net/minecraft/class_2382.java @@ -0,0 +1,6 @@ +package net.minecraft; + +@SuppressWarnings("all") +public class class_2382 { + public class_2382() {} +} diff --git a/src/profile-26x/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/profile-26x/java/baritone/api/event/listener/AbstractGameEventListener.java new file mode 100644 index 0000000..4758b51 --- /dev/null +++ b/src/profile-26x/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -0,0 +1,4 @@ +package baritone.api.event.listener; + +@SuppressWarnings("all") +public interface AbstractGameEventListener {} diff --git a/src/profile-26x/java/com/cope/addonparser/util/MappingResolverFactory.java b/src/profile-26x/java/com/cope/addonparser/util/MappingResolverFactory.java new file mode 100644 index 0000000..b2357dd --- /dev/null +++ b/src/profile-26x/java/com/cope/addonparser/util/MappingResolverFactory.java @@ -0,0 +1,60 @@ +package com.cope.addonparser.util; + +import java.util.List; +import java.util.Map; + +/** + * 26x (Mojmap) profile bindings for ValueNormalizer. Mojmap is unobfuscated, so the resolver is + * an identity no-op. Owner hints map registry holders to their Items/Blocks/etc. registry class so + * we can recover symbolic names like {@code Items.DIAMOND}. + */ +public final class MappingResolverFactory { + private static final MappingResolver IDENTITY = + new MappingResolver() { + @Override + public String mapClass(String className) { + return null; + } + + @Override + public String mapSymbol(String ownerClass, String fieldName) { + return null; + } + + @Override + public String mapField(String ownerClass, String fieldName) { + return null; + } + }; + + private static final Map> OWNER_HINTS = + Map.of( + "net.minecraft.world.item.Item", List.of("net.minecraft.world.item.Items"), + "net.minecraft.world.level.block.Block", List.of("net.minecraft.world.level.block.Blocks"), + "net.minecraft.sounds.SoundEvent", List.of("net.minecraft.sounds.SoundEvents"), + "net.minecraft.world.item.enchantment.Enchantment", + List.of("net.minecraft.world.item.enchantment.Enchantments"), + "net.minecraft.world.effect.MobEffect", + List.of("net.minecraft.world.effect.MobEffects"), + "net.minecraft.core.Holder", + List.of("net.minecraft.world.effect.MobEffects", "net.minecraft.world.item.Items")); + + private MappingResolverFactory() {} + + public static MappingResolver get() { + return IDENTITY; + } + + public static Map> ownerHints() { + return OWNER_HINTS; + } + + public static String fallbackOwnerForSimpleName(String simpleName) { + return switch (simpleName) { + case "Item" -> "net.minecraft.world.item.Items"; + case "Block" -> "net.minecraft.world.level.block.Blocks"; + case "MobEffect" -> "net.minecraft.world.effect.MobEffects"; + default -> null; + }; + } +} diff --git a/src/profile-26x/java/io/modelcontextprotocol/server/McpServer.java b/src/profile-26x/java/io/modelcontextprotocol/server/McpServer.java new file mode 100644 index 0000000..a683c11 --- /dev/null +++ b/src/profile-26x/java/io/modelcontextprotocol/server/McpServer.java @@ -0,0 +1,68 @@ +package io.modelcontextprotocol.server; + +import io.modelcontextprotocol.spec.McpStreamableServerTransportProvider; +import java.time.Duration; +import java.util.List; + +@SuppressWarnings("all") +public final class McpServer { + private McpServer() {} + + public static StreamableSyncSpecification sync(McpStreamableServerTransportProvider transportProvider) { + return new StreamableSyncSpecification(); + } + + public static SyncSpecification sync(Object transportProvider) { + return new SyncSpecification(); + } + + public static AsyncSpec async(Object transportProvider) { + return new AsyncSpec(); + } + + public static class StreamableSyncSpecification extends SyncSpecification {} + + public static class SyncSpecification { + public SyncSpecification serverInfo(String name, String version) { + return this; + } + + public SyncSpecification capabilities(Object capabilities) { + return this; + } + + public SyncSpecification instructions(String instructions) { + return this; + } + + public SyncSpecification tools(List tools) { + return this; + } + + public SyncSpecification resources(List resources) { + return this; + } + + public SyncSpecification requestTimeout(Duration requestTimeout) { + return this; + } + + public McpSyncServer build() { + return new McpSyncServer(); + } + } + + public static class AsyncSpec { + public AsyncSpec serverInfo(String name, String version) { + return this; + } + + public AsyncSpec capabilities(Object capabilities) { + return this; + } + + public Object build() { + return new Object(); + } + } +} diff --git a/src/profile-26x/java/io/modelcontextprotocol/server/McpServerFeatures.java b/src/profile-26x/java/io/modelcontextprotocol/server/McpServerFeatures.java new file mode 100644 index 0000000..13e9199 --- /dev/null +++ b/src/profile-26x/java/io/modelcontextprotocol/server/McpServerFeatures.java @@ -0,0 +1,45 @@ +package io.modelcontextprotocol.server; + +import io.modelcontextprotocol.spec.McpSchema; +import java.util.function.BiFunction; + +@SuppressWarnings("all") +public final class McpServerFeatures { + private McpServerFeatures() {} + + public record SyncToolSpecification( + McpSchema.Tool tool, + BiFunction + callHandler) { + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private McpSchema.Tool tool; + private BiFunction + callHandler; + + public Builder tool(McpSchema.Tool tool) { + this.tool = tool; + return this; + } + + public Builder callHandler( + BiFunction + callHandler) { + this.callHandler = callHandler; + return this; + } + + public SyncToolSpecification build() { + return new SyncToolSpecification(tool, callHandler); + } + } + } + + public record SyncResourceSpecification( + McpSchema.Resource resource, + BiFunction + readHandler) {} +} diff --git a/src/profile-26x/java/io/modelcontextprotocol/server/McpSyncServer.java b/src/profile-26x/java/io/modelcontextprotocol/server/McpSyncServer.java new file mode 100644 index 0000000..067801c --- /dev/null +++ b/src/profile-26x/java/io/modelcontextprotocol/server/McpSyncServer.java @@ -0,0 +1,8 @@ +package io.modelcontextprotocol.server; + +@SuppressWarnings("all") +public class McpSyncServer { + public McpSyncServer() {} + + public void closeGracefully() {} +} diff --git a/src/profile-26x/java/io/modelcontextprotocol/server/McpSyncServerExchange.java b/src/profile-26x/java/io/modelcontextprotocol/server/McpSyncServerExchange.java new file mode 100644 index 0000000..bfea9fc --- /dev/null +++ b/src/profile-26x/java/io/modelcontextprotocol/server/McpSyncServerExchange.java @@ -0,0 +1,10 @@ +package io.modelcontextprotocol.server; + +@SuppressWarnings("all") +public class McpSyncServerExchange { + public McpSyncServerExchange() {} + + public String sessionId() { + return "addon-parser"; + } +} diff --git a/src/profile-26x/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java b/src/profile-26x/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java new file mode 100644 index 0000000..7714b02 --- /dev/null +++ b/src/profile-26x/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java @@ -0,0 +1,42 @@ +package io.modelcontextprotocol.server.transport; + +@SuppressWarnings("all") +public class HttpServletStreamableServerTransportProvider + implements io.modelcontextprotocol.spec.McpStreamableServerTransportProvider, + jakarta.servlet.Servlet { + public HttpServletStreamableServerTransportProvider() {} + + public HttpServletStreamableServerTransportProvider(Object... args) {} + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + public Builder() {} + + public Builder contextPath(String value) { + return this; + } + + public Builder endpoint(String value) { + return this; + } + + public Builder objectMapper(Object value) { + return this; + } + + public Builder mcpEndpoint(String value) { + return this; + } + + public Builder keepAliveInterval(java.time.Duration value) { + return this; + } + + public HttpServletStreamableServerTransportProvider build() { + return new HttpServletStreamableServerTransportProvider(); + } + } +} diff --git a/src/profile-26x/java/io/modelcontextprotocol/spec/McpSchema.java b/src/profile-26x/java/io/modelcontextprotocol/spec/McpSchema.java new file mode 100644 index 0000000..610f153 --- /dev/null +++ b/src/profile-26x/java/io/modelcontextprotocol/spec/McpSchema.java @@ -0,0 +1,158 @@ +package io.modelcontextprotocol.spec; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@SuppressWarnings("all") +public final class McpSchema { + private McpSchema() {} + + public interface Content {} + + public interface ResourceContents {} + + public record TextContent(String type, String text, Map annotations) + implements Content { + public TextContent(String text) { + this("text", text, null); + } + } + + public record TextResourceContents(String uri, String mimeType, String text) + implements ResourceContents {} + + public record CallToolRequest(Map arguments) { + public CallToolRequest() { + this(Map.of()); + } + } + + public record ReadResourceRequest(String uri) { + public ReadResourceRequest() { + this(""); + } + } + + public record ReadResourceResult(List contents) {} + + public record CallToolResult( + List content, Boolean isError, Object structuredContent) { + public CallToolResult(List content, Boolean isError) { + this(content, isError, null); + } + + public CallToolResult(String content, Boolean isError) { + this(List.of(new TextContent(content)), isError, null); + } + + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private final List content = new ArrayList<>(); + private Boolean isError; + private Object structuredContent; + + public Builder addTextContent(String text) { + content.add(new TextContent(text)); + return this; + } + + public Builder isError(Boolean isError) { + this.isError = isError; + return this; + } + + public Builder structuredContent(Object structuredContent) { + this.structuredContent = structuredContent; + return this; + } + + public CallToolResult build() { + return new CallToolResult(List.copyOf(content), isError, structuredContent); + } + } + } + + public record JsonSchema( + String type, + Map properties, + List required, + Boolean additionalProperties, + Map definitions, + Map schema) { + public JsonSchema() { + this(null, Map.of(), List.of(), null, Map.of(), Map.of()); + } + } + + public record Tool(String name, String description, JsonSchema inputSchema) { + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private String name; + private String description; + private JsonSchema inputSchema; + + public Builder name(String name) { + this.name = name; + return this; + } + + public Builder description(String description) { + this.description = description; + return this; + } + + public Builder inputSchema(JsonSchema inputSchema) { + this.inputSchema = inputSchema; + return this; + } + + public Tool build() { + return new Tool(name, description, inputSchema); + } + } + } + + public record Resource(String uri, String name, String description, String mimeType) { + public static Builder builder() { + return new Builder(); + } + + public static final class Builder { + private String uri; + private String name; + private String description; + private String mimeType; + + public Builder uri(String uri) { + this.uri = uri; + return this; + } + + public Builder name(String name) { + this.name = name; + return this; + } + + public Builder description(String description) { + this.description = description; + return this; + } + + public Builder mimeType(String mimeType) { + this.mimeType = mimeType; + return this; + } + + public Resource build() { + return new Resource(uri, name, description, mimeType); + } + } + } +} diff --git a/src/profile-26x/java/io/modelcontextprotocol/spec/McpStreamableServerTransportProvider.java b/src/profile-26x/java/io/modelcontextprotocol/spec/McpStreamableServerTransportProvider.java new file mode 100644 index 0000000..fa694db --- /dev/null +++ b/src/profile-26x/java/io/modelcontextprotocol/spec/McpStreamableServerTransportProvider.java @@ -0,0 +1,4 @@ +package io.modelcontextprotocol.spec; + +@SuppressWarnings("all") +public interface McpStreamableServerTransportProvider {} diff --git a/src/profile-26x/java/it/unimi/dsi/fastutil/objects/ObjectOpenHashSet.java b/src/profile-26x/java/it/unimi/dsi/fastutil/objects/ObjectOpenHashSet.java new file mode 100644 index 0000000..77cff30 --- /dev/null +++ b/src/profile-26x/java/it/unimi/dsi/fastutil/objects/ObjectOpenHashSet.java @@ -0,0 +1,17 @@ +package it.unimi.dsi.fastutil.objects; + +import java.util.Collection; +import java.util.LinkedHashSet; + +@SuppressWarnings("all") +public class ObjectOpenHashSet extends LinkedHashSet { + public ObjectOpenHashSet() {} + + public ObjectOpenHashSet(int expected) { + super(Math.max(0, expected)); + } + + public ObjectOpenHashSet(Collection values) { + super(values == null ? java.util.List.of() : values); + } +} diff --git a/src/profile-26x/java/jakarta/servlet/Servlet.java b/src/profile-26x/java/jakarta/servlet/Servlet.java new file mode 100644 index 0000000..b870c25 --- /dev/null +++ b/src/profile-26x/java/jakarta/servlet/Servlet.java @@ -0,0 +1,4 @@ +package jakarta.servlet; + +@SuppressWarnings("all") +public interface Servlet {} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/MeteorClient.java b/src/profile-26x/java/meteordevelopment/meteorclient/MeteorClient.java new file mode 100644 index 0000000..07586aa --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/MeteorClient.java @@ -0,0 +1,24 @@ +package meteordevelopment.meteorclient; + +import java.io.File; +import meteordevelopment.orbit.IEventBus; +import meteordevelopment.orbit.SimpleEventBus; + +public final class MeteorClient { + public static final IEventBus EVENT_BUS = new SimpleEventBus(); + public static volatile File FOLDER = resolveInitialFolder(); + + public static net.minecraft.client.Minecraft mc = new net.minecraft.client.Minecraft(); + + private MeteorClient() {} + + public static void setFolder(File folder) { + FOLDER = folder == null ? new File(".") : folder; + } + + private static File resolveInitialFolder() { + String configured = System.getProperty("addonparser.meteorFolder"); + if (configured != null && !configured.isBlank()) return new File(configured); + return new File("."); + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/Tab.java b/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/Tab.java new file mode 100644 index 0000000..d45855f --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/Tab.java @@ -0,0 +1,19 @@ +package meteordevelopment.meteorclient.gui.tabs; + +import meteordevelopment.meteorclient.gui.GuiTheme; +import net.minecraft.client.gui.screens.Screen; + +@SuppressWarnings("all") +public abstract class Tab { + public final String name; + + public Tab(String name) { + this.name = name; + } + + public void openScreen(GuiTheme theme) {} + + public abstract TabScreen createScreen(GuiTheme theme); + + public abstract boolean isScreen(Screen screen); +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/TabScreen.java b/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/TabScreen.java new file mode 100644 index 0000000..151e8c1 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/TabScreen.java @@ -0,0 +1,20 @@ +package meteordevelopment.meteorclient.gui.tabs; + +import meteordevelopment.meteorclient.gui.GuiTheme; +import meteordevelopment.meteorclient.gui.WidgetScreen; +import meteordevelopment.meteorclient.gui.utils.Cell; +import meteordevelopment.meteorclient.gui.widgets.WWidget; + +@SuppressWarnings("all") +public abstract class TabScreen extends WidgetScreen { + public final Tab tab; + + public TabScreen(GuiTheme theme, Tab tab) { + super(theme, tab == null ? "" : tab.name); + this.tab = tab; + } + + public Cell addDirect(WWidget widget) { + return add(widget); + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/Tabs.java b/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/Tabs.java new file mode 100644 index 0000000..ea8db5e --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/Tabs.java @@ -0,0 +1,26 @@ +package meteordevelopment.meteorclient.gui.tabs; + +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("all") +public final class Tabs { + private static final List TABS = new ArrayList<>(); + + private Tabs() {} + + public static void add(Tab tab) { + if (tab != null) TABS.add(tab); + } + + public static List get() { + return TABS; + } + + public static Tab get(Class klass) { + for (Tab tab : TABS) { + if (klass.isInstance(tab)) return tab; + } + return null; + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java new file mode 100644 index 0000000..143f9f8 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java @@ -0,0 +1,57 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.function.Consumer; +import net.minecraft.core.Holder; +import net.minecraft.world.effect.MobEffect; + +public class StatusEffectListSetting extends Setting>> { + private StatusEffectListSetting( + String name, + String description, + List> defaultValue, + Consumer>> onChanged, + Consumer>>> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected List> parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(List> value) { + return value != null; + } + + protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { + return tag; + } + + protected List> load(net.minecraft.class_2487 tag) { + return value; + } + + public static class Builder + extends SettingBuilder>, StatusEffectListSetting> { + public Builder() { + super(new ArrayList<>()); + } + + @SafeVarargs + public final Builder defaultValue(Holder... effects) { + this.defaultValue = new ArrayList<>(Arrays.asList(effects)); + return this; + } + + @Override + public StatusEffectListSetting build() { + return new StatusEffectListSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/systems/modules/Category.java b/src/profile-26x/java/meteordevelopment/meteorclient/systems/modules/Category.java new file mode 100644 index 0000000..99a085c --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/systems/modules/Category.java @@ -0,0 +1,38 @@ +package meteordevelopment.meteorclient.systems.modules; + +import java.util.Objects; +import java.util.function.Supplier; +import net.minecraft.world.item.ItemStack; + +public class Category { + public final String name; + public final Supplier icon; + private final int nameHash; + + public Category(String name, Supplier icon) { + this.name = name; + this.icon = icon == null ? ItemStack::new : icon; + this.nameHash = name == null ? 0 : name.hashCode(); + } + + public Category(String name) { + this(name, null); + } + + @Override + public String toString() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Category category)) return false; + return Objects.equals(this.name, category.name); + } + + @Override + public int hashCode() { + return nameHash; + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/systems/modules/Module.java b/src/profile-26x/java/meteordevelopment/meteorclient/systems/modules/Module.java new file mode 100644 index 0000000..4777aae --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/systems/modules/Module.java @@ -0,0 +1,147 @@ +package meteordevelopment.meteorclient.systems.modules; + +import com.cope.addonparser.util.NameUtils; +import java.util.Objects; +import meteordevelopment.meteorclient.MeteorClient; +import meteordevelopment.meteorclient.addons.AddonManager; +import meteordevelopment.meteorclient.addons.MeteorAddon; +import meteordevelopment.meteorclient.settings.Settings; +import meteordevelopment.meteorclient.utils.misc.ISerializable; +import meteordevelopment.meteorclient.utils.misc.Keybind; +import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.client.Minecraft; + +public abstract class Module + implements ISerializable, Comparable, dev.jfronny.meteoradditions.util.IModule { + protected final Minecraft mc; + + public final Category category; + public final String name; + public final String title; + public final String description; + public final String[] aliases; + public final Color color; + + public final MeteorAddon addon; + public final Settings settings = new Settings(); + + private boolean active; + + public boolean serialize = true; + public boolean runInMainMenu = false; + public boolean autoSubscribe = true; + + public final Keybind keybind = Keybind.none(); + public boolean toggleOnBindRelease = false; + public boolean chatFeedback = true; + public boolean favorite = false; + + public Module(Category category, String name, String description, String... aliases) { + this.mc = MeteorClient.mc; + this.category = category; + this.name = name; + this.title = NameUtils.nameToTitle(name); + this.description = description; + this.aliases = aliases == null ? new String[0] : aliases; + this.color = new Color(255, 255, 255, 255); + + MeteorAddon resolved = null; + String className = getClass().getName(); + for (MeteorAddon a : AddonManager.ADDONS) { + String pkg = a.getPackage(); + if (pkg != null && className.startsWith(pkg)) { + resolved = a; + break; + } + } + this.addon = resolved; + } + + public Module(Category category, String name, String description) { + this(category, name, description, new String[0]); + } + + public meteordevelopment.meteorclient.gui.widgets.WWidget getWidget( + meteordevelopment.meteorclient.gui.GuiTheme theme) { + return null; + } + + public void onActivate() {} + + public void onDeactivate() {} + + public void toggle() { + if (!active) { + active = true; + Modules.get().addActive(this); + settings.onActivated(); + if (autoSubscribe) MeteorClient.EVENT_BUS.subscribe(this); + onActivate(); + } else { + if (autoSubscribe) MeteorClient.EVENT_BUS.unsubscribe(this); + onDeactivate(); + active = false; + Modules.get().removeActive(this); + } + } + + public void enable() { + if (!isActive()) toggle(); + } + + public void disable() { + if (isActive()) toggle(); + } + + public boolean isActive() { + return active; + } + + public void info(net.minecraft.network.chat.Component message) {} + + public void info(String message, Object... args) {} + + public void warning(String message, Object... args) {} + + public void error(String message, Object... args) {} + + public String getInfoString() { + return null; + } + + @Override + public void meteorAdditions$setKeywords(String... keywords) {} + + @Override + public String meteorAdditions$getQueryString() { + return name == null ? "" : name; + } + + public net.minecraft.nbt.CompoundTag toTag() { + return new net.minecraft.nbt.CompoundTag(); + } + + public Module fromTag(net.minecraft.nbt.CompoundTag tag) { + return this; + } + + @Override + public int compareTo(Module o) { + if (o == null || o.name == null) return 1; + if (name == null) return -1; + return name.compareTo(o.name); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Module)) return false; + Module module = (Module) o; + return Objects.equals(name, module.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java new file mode 100644 index 0000000..b865ab9 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java @@ -0,0 +1,40 @@ +package meteordevelopment.meteorclient.utils.misc; + +import org.meteordev.starscript.Script; +import org.meteordev.starscript.Starscript; +import org.meteordev.starscript.value.Value; + +/** + * 26x stub for Meteor's starscript helper. Real Meteor builds compile starscript scripts and wraps + * Minecraft values; the parser does not exercise this path, so we expose minimal no-op + * signatures. + */ +public final class MeteorStarscript { + public static Starscript ss = new Starscript(); + + private MeteorStarscript() {} + + public static Script compile(String script) { + return new Script(); + } + + public static String run(Script script) { + return ""; + } + + public static Value wrap(net.minecraft.world.effect.MobEffectInstance value) { + return Value.null_(); + } + + public static Value wrap(net.minecraft.world.item.ItemStack value) { + return Value.null_(); + } + + public static Value wrap(HorizontalDirection value) { + return Value.null_(); + } + + public static net.minecraft.resources.Identifier popIdentifier(Starscript starscript, String key) { + return null; + } +} diff --git a/src/profile-26x/java/meteordevelopment/starscript/Script.java b/src/profile-26x/java/meteordevelopment/starscript/Script.java new file mode 100644 index 0000000..eb4b0cf --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/starscript/Script.java @@ -0,0 +1,4 @@ +package meteordevelopment.starscript; + +@SuppressWarnings("all") +public class Script extends org.meteordev.starscript.Script {} diff --git a/src/profile-26x/java/meteordevelopment/starscript/Starscript.java b/src/profile-26x/java/meteordevelopment/starscript/Starscript.java new file mode 100644 index 0000000..b89f638 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/starscript/Starscript.java @@ -0,0 +1,9 @@ +package meteordevelopment.starscript; + +@SuppressWarnings("all") +public class Starscript extends org.meteordev.starscript.Starscript { + public meteordevelopment.starscript.value.ValueMap set( + String name, meteordevelopment.starscript.value.Value value) { + return new meteordevelopment.starscript.value.ValueMap(); + } +} diff --git a/src/profile-26x/java/meteordevelopment/starscript/utils/SFunction.java b/src/profile-26x/java/meteordevelopment/starscript/utils/SFunction.java new file mode 100644 index 0000000..1022096 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/starscript/utils/SFunction.java @@ -0,0 +1,7 @@ +package meteordevelopment.starscript.utils; + +@SuppressWarnings("all") +@FunctionalInterface +public interface SFunction { + int run(Object starscript, int argCount); +} diff --git a/src/profile-26x/java/meteordevelopment/starscript/value/Value.java b/src/profile-26x/java/meteordevelopment/starscript/value/Value.java new file mode 100644 index 0000000..8404ce5 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/starscript/value/Value.java @@ -0,0 +1,26 @@ +package meteordevelopment.starscript.value; + +import meteordevelopment.starscript.utils.SFunction; + +@SuppressWarnings("all") +public class Value extends org.meteordev.starscript.value.Value { + public static Value bool(boolean value) { + return new Value(); + } + + public static Value function(SFunction function) { + return new Value(); + } + + public static Value null_() { + return new Value(); + } + + public static Value number(double value) { + return new Value(); + } + + public static Value string(String value) { + return new Value(); + } +} diff --git a/src/profile-26x/java/meteordevelopment/starscript/value/ValueMap.java b/src/profile-26x/java/meteordevelopment/starscript/value/ValueMap.java new file mode 100644 index 0000000..b348312 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/starscript/value/ValueMap.java @@ -0,0 +1,4 @@ +package meteordevelopment.starscript.value; + +@SuppressWarnings("all") +public class ValueMap extends org.meteordev.starscript.value.ValueMap {} diff --git a/src/profile-26x/java/net/fabricmc/loader/api/EntrypointContainer.java b/src/profile-26x/java/net/fabricmc/loader/api/EntrypointContainer.java new file mode 100644 index 0000000..fdfdb88 --- /dev/null +++ b/src/profile-26x/java/net/fabricmc/loader/api/EntrypointContainer.java @@ -0,0 +1,12 @@ +package net.fabricmc.loader.api; + +@SuppressWarnings("all") +public class EntrypointContainer { + public T getEntrypoint() { + return null; + } + + public ModContainer getProvider() { + return new ModContainer(); + } +} diff --git a/src/profile-26x/java/net/fabricmc/loader/api/FabricLoader.java b/src/profile-26x/java/net/fabricmc/loader/api/FabricLoader.java new file mode 100644 index 0000000..760635e --- /dev/null +++ b/src/profile-26x/java/net/fabricmc/loader/api/FabricLoader.java @@ -0,0 +1,38 @@ +package net.fabricmc.loader.api; + +import java.nio.file.Path; +import java.util.List; +import java.util.Optional; + +@SuppressWarnings("all") +public class FabricLoader { + private static final FabricLoader INSTANCE = new FabricLoader(); + + public static FabricLoader getInstance() { + return INSTANCE; + } + + public List getAllMods() { + return List.of(); + } + + public List> getEntrypointContainers(String key, Class type) { + return List.of(); + } + + public Path getGameDir() { + return Path.of(System.getProperty("addonparser.meteorFolder", ".")); + } + + public boolean isModLoaded(String id) { + return false; + } + + public Optional getModContainer(String id) { + return Optional.empty(); + } + + public MappingResolver getMappingResolver() { + return new MappingResolver(); + } +} diff --git a/src/profile-26x/java/net/fabricmc/loader/api/MappingResolver.java b/src/profile-26x/java/net/fabricmc/loader/api/MappingResolver.java new file mode 100644 index 0000000..43db6e5 --- /dev/null +++ b/src/profile-26x/java/net/fabricmc/loader/api/MappingResolver.java @@ -0,0 +1,24 @@ +package net.fabricmc.loader.api; + +@SuppressWarnings("all") +public class MappingResolver { + public java.util.Collection getNamespaces() { + return java.util.List.of("mojmap", "named", "intermediary"); + } + + public String getCurrentRuntimeNamespace() { + return "mojmap"; + } + + public String mapClassName(String namespace, String className) { + return className; + } + + public String mapFieldName(String namespace, String owner, String name, String descriptor) { + return name; + } + + public String mapMethodName(String namespace, String owner, String name, String descriptor) { + return name; + } +} diff --git a/src/profile-26x/java/net/fabricmc/loader/api/ModContainer.java b/src/profile-26x/java/net/fabricmc/loader/api/ModContainer.java new file mode 100644 index 0000000..5339ba6 --- /dev/null +++ b/src/profile-26x/java/net/fabricmc/loader/api/ModContainer.java @@ -0,0 +1,8 @@ +package net.fabricmc.loader.api; + +@SuppressWarnings("all") +public class ModContainer { + public ModMetadata getMetadata() { + return new ModMetadata(); + } +} diff --git a/src/profile-26x/java/net/fabricmc/loader/api/ModMetadata.java b/src/profile-26x/java/net/fabricmc/loader/api/ModMetadata.java new file mode 100644 index 0000000..46b662e --- /dev/null +++ b/src/profile-26x/java/net/fabricmc/loader/api/ModMetadata.java @@ -0,0 +1,22 @@ +package net.fabricmc.loader.api; + +import net.fabricmc.loader.api.metadata.CustomValue; + +@SuppressWarnings("all") +public class ModMetadata { + public String getId() { + return ""; + } + + public String getName() { + return ""; + } + + public Version getVersion() { + return new Version(); + } + + public CustomValue getCustomValue(String key) { + return new CustomValue() {}; + } +} diff --git a/src/profile-26x/java/net/fabricmc/loader/api/Version.java b/src/profile-26x/java/net/fabricmc/loader/api/Version.java new file mode 100644 index 0000000..192d969 --- /dev/null +++ b/src/profile-26x/java/net/fabricmc/loader/api/Version.java @@ -0,0 +1,13 @@ +package net.fabricmc.loader.api; + +@SuppressWarnings("all") +public class Version { + public String getFriendlyString() { + return ""; + } + + @Override + public String toString() { + return getFriendlyString(); + } +} diff --git a/src/profile-26x/java/net/minecraft/client/KeyMapping.java b/src/profile-26x/java/net/minecraft/client/KeyMapping.java new file mode 100644 index 0000000..445dbcf --- /dev/null +++ b/src/profile-26x/java/net/minecraft/client/KeyMapping.java @@ -0,0 +1,8 @@ +package net.minecraft.client; + +@SuppressWarnings("all") +public class KeyMapping { + public boolean isDown() { + return false; + } +} diff --git a/src/profile-26x/java/net/minecraft/client/Minecraft.java b/src/profile-26x/java/net/minecraft/client/Minecraft.java new file mode 100644 index 0000000..80c6e57 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/client/Minecraft.java @@ -0,0 +1,14 @@ +package net.minecraft.client; + +@SuppressWarnings("all") +public class Minecraft { + public final Options options = new Options(); + + public static Minecraft getInstance() { + return new Minecraft(); + } + + public Minecraft() {} + + public void setScreen(net.minecraft.client.gui.screens.Screen screen) {} +} diff --git a/src/profile-26x/java/net/minecraft/client/OptionInstance.java b/src/profile-26x/java/net/minecraft/client/OptionInstance.java new file mode 100644 index 0000000..2e9d8c0 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/client/OptionInstance.java @@ -0,0 +1,18 @@ +package net.minecraft.client; + +@SuppressWarnings("all") +public class OptionInstance { + private T value; + + public OptionInstance(T value) { + this.value = value; + } + + public T get() { + return value; + } + + public void set(T value) { + this.value = value; + } +} diff --git a/src/profile-26x/java/net/minecraft/client/Options.java b/src/profile-26x/java/net/minecraft/client/Options.java new file mode 100644 index 0000000..6208481 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/client/Options.java @@ -0,0 +1,19 @@ +package net.minecraft.client; + +import net.minecraft.client.KeyMapping; +import net.minecraft.world.entity.HumanoidArm; + +@SuppressWarnings("all") +public class Options { + public final KeyMapping keyPlayerList = new KeyMapping(); + public final KeyMapping keyUse = new KeyMapping(); + private final OptionInstance mainHand = new OptionInstance<>(HumanoidArm.RIGHT); + + public OptionInstance mainHand() { + return mainHand; + } + + public net.minecraft.client.multiplayer.ClientInformation buildPlayerInformation() { + return new net.minecraft.client.multiplayer.ClientInformation(); + } +} diff --git a/src/profile-26x/java/net/minecraft/client/gui/screens/Screen.java b/src/profile-26x/java/net/minecraft/client/gui/screens/Screen.java new file mode 100644 index 0000000..a8ccc3e --- /dev/null +++ b/src/profile-26x/java/net/minecraft/client/gui/screens/Screen.java @@ -0,0 +1,6 @@ +package net.minecraft.client.gui.screens; + +@SuppressWarnings("all") +public class Screen { + public Screen() {} +} diff --git a/src/profile-26x/java/net/minecraft/client/multiplayer/ClientInformation.java b/src/profile-26x/java/net/minecraft/client/multiplayer/ClientInformation.java new file mode 100644 index 0000000..5194634 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/client/multiplayer/ClientInformation.java @@ -0,0 +1,6 @@ +package net.minecraft.client.multiplayer; + +@SuppressWarnings("all") +public class ClientInformation { + public ClientInformation() {} +} diff --git a/src/profile-26x/java/net/minecraft/core/BlockPos.java b/src/profile-26x/java/net/minecraft/core/BlockPos.java new file mode 100644 index 0000000..67d8af2 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/core/BlockPos.java @@ -0,0 +1,26 @@ +package net.minecraft.core; + +@SuppressWarnings("all") +public class BlockPos { + public static final BlockPos ZERO = new BlockPos(); + + public BlockPos() {} + + public BlockPos(int x, int y, int z) {} + + public static class MutableBlockPos extends BlockPos { + public MutableBlockPos() {} + + public MutableBlockPos(int x, int y, int z) { + super(x, y, z); + } + + public MutableBlockPos set(BlockPos pos) { + return this; + } + + public MutableBlockPos set(int x, int y, int z) { + return this; + } + } +} diff --git a/src/profile-26x/java/net/minecraft/core/DefaultedRegistry.java b/src/profile-26x/java/net/minecraft/core/DefaultedRegistry.java new file mode 100644 index 0000000..bbbbfb3 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/core/DefaultedRegistry.java @@ -0,0 +1,13 @@ +package net.minecraft.core; + +import java.util.Iterator; + +@SuppressWarnings("all") +public class DefaultedRegistry extends Registry implements Iterable { + public DefaultedRegistry() {} + + @Override + public Iterator iterator() { + return entrySet().stream().map(java.util.Map.Entry::getValue).iterator(); + } +} diff --git a/src/profile-26x/java/net/minecraft/core/Direction.java b/src/profile-26x/java/net/minecraft/core/Direction.java new file mode 100644 index 0000000..cc1adea --- /dev/null +++ b/src/profile-26x/java/net/minecraft/core/Direction.java @@ -0,0 +1,17 @@ +package net.minecraft.core; + +@SuppressWarnings("all") +public enum Direction { + DOWN, + UP, + NORTH, + SOUTH, + WEST, + EAST; + + public enum Axis { + X, + Y, + Z + } +} diff --git a/src/profile-26x/java/net/minecraft/core/Holder.java b/src/profile-26x/java/net/minecraft/core/Holder.java new file mode 100644 index 0000000..f38b0d7 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/core/Holder.java @@ -0,0 +1,8 @@ +package net.minecraft.core; + +@SuppressWarnings("all") +public interface Holder { + T value(); + + interface Reference extends Holder {} +} diff --git a/src/profile-26x/java/net/minecraft/core/Registry.java b/src/profile-26x/java/net/minecraft/core/Registry.java new file mode 100644 index 0000000..d8c67c1 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/core/Registry.java @@ -0,0 +1,11 @@ +package net.minecraft.core; + +import net.minecraft.resources.ResourceKey; + +@SuppressWarnings("all") +public class Registry extends SimpleRegistry { + public static T register(Registry registry, ResourceKey key, T value) { + if (registry != null && value != null) registry.add(value); + return value; + } +} diff --git a/src/profile-26x/java/net/minecraft/core/SimpleRegistry.java b/src/profile-26x/java/net/minecraft/core/SimpleRegistry.java new file mode 100644 index 0000000..1a05d23 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/core/SimpleRegistry.java @@ -0,0 +1,44 @@ +package net.minecraft.core; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; + +@SuppressWarnings("all") +public class SimpleRegistry { + private final Map values = new LinkedHashMap<>(); + + public void add(T value) { + if (value != null) values.put(ResourceLocation.parse(value.getClass().getSimpleName().toLowerCase()), value); + } + + public Set> entrySet() { + return values.entrySet(); + } + + public ResourceLocation getKey(T value) { + for (Map.Entry entry : values.entrySet()) { + if (entry.getValue() == value) return entry.getKey(); + } + return ResourceLocation.parse("minecraft:air"); + } + + public T getValue(ResourceLocation id) { + return values.get(id); + } + + public Optional> getRandom(Random random) { + return values.values().stream().findFirst().map(SimpleHolder::new); + } + + public Holder.Reference get(ResourceKey key) { + T value = getValue(key == null ? null : key.location()); + return value == null ? null : new SimpleHolder<>(value); + } + + private record SimpleHolder(T value) implements Holder.Reference {} +} diff --git a/src/profile-26x/java/net/minecraft/core/registries/BuiltInRegistries.java b/src/profile-26x/java/net/minecraft/core/registries/BuiltInRegistries.java new file mode 100644 index 0000000..1437cb1 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/core/registries/BuiltInRegistries.java @@ -0,0 +1,61 @@ +package net.minecraft.core.registries; + +import net.minecraft.core.DefaultedRegistry; +import net.minecraft.core.Registry; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; + +@SuppressWarnings("all") +public final class BuiltInRegistries { + public static final DefaultedRegistry BLOCK = new DefaultedRegistry<>(); + public static final Registry BLOCK_ENTITY_TYPE = new Registry<>(); + public static final Registry CREATIVE_MODE_TAB = new Registry<>(); + public static final DefaultedRegistry> ENTITY_TYPE = new DefaultedRegistry<>(); + public static final DefaultedRegistry ITEM = new DefaultedRegistry<>(); + public static final Registry MENU = new Registry<>(); + public static final Registry MOB_EFFECT = new Registry<>(); + public static final Registry PARTICLE_TYPE = new Registry<>(); + public static final Registry POTION = new Registry<>(); + public static final Registry SOUND_EVENT = new Registry<>(); + + static { + BLOCK.add(Blocks.AIR); + BLOCK.add(Blocks.DIRT); + + ITEM.add(Items.AIR); + ITEM.add(Items.BOW); + ITEM.add(Items.CROSSBOW); + ITEM.add(Items.DIRT); + ITEM.add(Items.EGG); + ITEM.add(Items.ENDER_PEARL); + ITEM.add(Items.EXPERIENCE_BOTTLE); + ITEM.add(Items.FIREWORK_ROCKET); + ITEM.add(Items.FISHING_ROD); + ITEM.add(Items.SNOWBALL); + ITEM.add(Items.SPLASH_POTION); + ITEM.add(Items.TRIDENT); + ITEM.add(Items.WIND_CHARGE); + + ENTITY_TYPE.add(EntityType.ARROW); + ENTITY_TYPE.add(EntityType.DRAGON_FIREBALL); + ENTITY_TYPE.add(EntityType.EGG); + ENTITY_TYPE.add(EntityType.ENDER_PEARL); + ENTITY_TYPE.add(EntityType.EXPERIENCE_BOTTLE); + ENTITY_TYPE.add(EntityType.EYE_OF_ENDER); + ENTITY_TYPE.add(EntityType.LLAMA_SPIT); + ENTITY_TYPE.add(EntityType.SHULKER_BULLET); + ENTITY_TYPE.add(EntityType.SMALL_FIREBALL); + ENTITY_TYPE.add(EntityType.SNOWBALL); + ENTITY_TYPE.add(EntityType.SPECTRAL_ARROW); + ENTITY_TYPE.add(EntityType.SPLASH_POTION); + ENTITY_TYPE.add(EntityType.TRIDENT); + ENTITY_TYPE.add(EntityType.WIND_CHARGE); + ENTITY_TYPE.add(EntityType.WITHER_SKULL); + } + + private BuiltInRegistries() {} +} diff --git a/src/profile-26x/java/net/minecraft/core/registries/Registries.java b/src/profile-26x/java/net/minecraft/core/registries/Registries.java new file mode 100644 index 0000000..95a6f11 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/core/registries/Registries.java @@ -0,0 +1,24 @@ +package net.minecraft.core.registries; + +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; + +@SuppressWarnings("all") +public final class Registries { + public static final ResourceKey BLOCK = key("block"); + public static final ResourceKey BLOCK_ENTITY_TYPE = key("block_entity_type"); + public static final ResourceKey CREATIVE_MODE_TAB = key("creative_mode_tab"); + public static final ResourceKey ENCHANTMENT = key("enchantment"); + public static final ResourceKey ENTITY_TYPE = key("entity_type"); + public static final ResourceKey ITEM = key("item"); + public static final ResourceKey MENU = key("menu"); + public static final ResourceKey MOB_EFFECT = key("mob_effect"); + public static final ResourceKey PLACED_FEATURE = key("placed_feature"); + public static final ResourceKey WORLD_PRESET = key("world_preset"); + + private Registries() {} + + private static ResourceKey key(String path) { + return ResourceKey.createRegistryKey(ResourceLocation.fromNamespaceAndPath("minecraft", path)); + } +} diff --git a/src/profile-26x/java/net/minecraft/nbt/CompoundTag.java b/src/profile-26x/java/net/minecraft/nbt/CompoundTag.java new file mode 100644 index 0000000..5c6c288 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/nbt/CompoundTag.java @@ -0,0 +1,6 @@ +package net.minecraft.nbt; + +@SuppressWarnings("all") +public class CompoundTag { + public CompoundTag() {} +} diff --git a/src/profile-26x/java/net/minecraft/network/chat/Component.java b/src/profile-26x/java/net/minecraft/network/chat/Component.java new file mode 100644 index 0000000..2123bc5 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/network/chat/Component.java @@ -0,0 +1,12 @@ +package net.minecraft.network.chat; + +@SuppressWarnings("all") +public interface Component { + static MutableComponent literal(String text) { + return new MutableComponent(text); + } + + static MutableComponent translatable(String key, Object... args) { + return new MutableComponent(key); + } +} diff --git a/src/profile-26x/java/net/minecraft/network/chat/MutableComponent.java b/src/profile-26x/java/net/minecraft/network/chat/MutableComponent.java new file mode 100644 index 0000000..2daf772 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/network/chat/MutableComponent.java @@ -0,0 +1,27 @@ +package net.minecraft.network.chat; + +@SuppressWarnings("all") +public class MutableComponent implements Component { + private final String text; + + public MutableComponent() { + this(""); + } + + public MutableComponent(String text) { + this.text = text == null ? "" : text; + } + + public MutableComponent append(Component component) { + return this; + } + + public MutableComponent append(String text) { + return this; + } + + @Override + public String toString() { + return text; + } +} diff --git a/src/profile-26x/java/net/minecraft/resources/Identifier.java b/src/profile-26x/java/net/minecraft/resources/Identifier.java new file mode 100644 index 0000000..2e9ceee --- /dev/null +++ b/src/profile-26x/java/net/minecraft/resources/Identifier.java @@ -0,0 +1,25 @@ +package net.minecraft.resources; + +@SuppressWarnings("all") +public class Identifier extends ResourceLocation { + public Identifier() { + super(); + } + + private Identifier(String namespace, String path) { + super(namespace, path); + } + + public static Identifier fromNamespaceAndPath(String namespace, String path) { + return new Identifier(namespace, path); + } + + public static Identifier of(String value) { + ResourceLocation location = ResourceLocation.parse(value); + return new Identifier(location.getNamespace(), location.getPath()); + } + + public static Identifier parse(String value) { + return of(value); + } +} diff --git a/src/profile-26x/java/net/minecraft/resources/ResourceKey.java b/src/profile-26x/java/net/minecraft/resources/ResourceKey.java new file mode 100644 index 0000000..1f5386c --- /dev/null +++ b/src/profile-26x/java/net/minecraft/resources/ResourceKey.java @@ -0,0 +1,26 @@ +package net.minecraft.resources; + +@SuppressWarnings("all") +public class ResourceKey { + private final ResourceLocation location; + + private ResourceKey(ResourceLocation location) { + this.location = location == null ? new ResourceLocation() : location; + } + + public static ResourceKey create(ResourceKey registry, ResourceLocation location) { + return new ResourceKey<>(location); + } + + public static ResourceKey create(ResourceKey registry, Identifier location) { + return new ResourceKey<>(location); + } + + public static ResourceKey createRegistryKey(ResourceLocation location) { + return new ResourceKey<>(location); + } + + public ResourceLocation location() { + return location; + } +} diff --git a/src/profile-26x/java/net/minecraft/resources/ResourceLocation.java b/src/profile-26x/java/net/minecraft/resources/ResourceLocation.java new file mode 100644 index 0000000..2607b94 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/resources/ResourceLocation.java @@ -0,0 +1,42 @@ +package net.minecraft.resources; + +@SuppressWarnings("all") +public class ResourceLocation { + private final String namespace; + private final String path; + + public ResourceLocation() { + this("minecraft", "air"); + } + + protected ResourceLocation(String namespace, String path) { + this.namespace = namespace == null || namespace.isBlank() ? "minecraft" : namespace; + this.path = path == null || path.isBlank() ? "air" : path; + } + + public static ResourceLocation parse(String value) { + if (value == null) return new ResourceLocation(); + int separator = value.indexOf(':'); + if (separator >= 0) { + return new ResourceLocation(value.substring(0, separator), value.substring(separator + 1)); + } + return new ResourceLocation("minecraft", value); + } + + public static ResourceLocation fromNamespaceAndPath(String namespace, String path) { + return new ResourceLocation(namespace, path); + } + + public String getNamespace() { + return namespace; + } + + public String getPath() { + return path; + } + + @Override + public String toString() { + return namespace + ":" + path; + } +} diff --git a/src/profile-26x/java/net/minecraft/server/packs/resources/ResourceManager.java b/src/profile-26x/java/net/minecraft/server/packs/resources/ResourceManager.java new file mode 100644 index 0000000..17b65c1 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/server/packs/resources/ResourceManager.java @@ -0,0 +1,4 @@ +package net.minecraft.server.packs.resources; + +@SuppressWarnings("all") +public interface ResourceManager {} diff --git a/src/profile-26x/java/net/minecraft/server/packs/resources/ResourceManagerReloadListener.java b/src/profile-26x/java/net/minecraft/server/packs/resources/ResourceManagerReloadListener.java new file mode 100644 index 0000000..19c5689 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/server/packs/resources/ResourceManagerReloadListener.java @@ -0,0 +1,6 @@ +package net.minecraft.server.packs.resources; + +@SuppressWarnings("all") +public interface ResourceManagerReloadListener { + default void onResourceManagerReload(ResourceManager resourceManager) {} +} diff --git a/src/profile-26x/java/net/minecraft/sounds/SoundEvent.java b/src/profile-26x/java/net/minecraft/sounds/SoundEvent.java new file mode 100644 index 0000000..716b5e9 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/sounds/SoundEvent.java @@ -0,0 +1,6 @@ +package net.minecraft.sounds; + +@SuppressWarnings("all") +public class SoundEvent { + public SoundEvent() {} +} diff --git a/src/profile-26x/java/net/minecraft/sounds/SoundEvents.java b/src/profile-26x/java/net/minecraft/sounds/SoundEvents.java new file mode 100644 index 0000000..2c02dd4 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/sounds/SoundEvents.java @@ -0,0 +1,10 @@ +package net.minecraft.sounds; + +@SuppressWarnings("all") +public final class SoundEvents { + public static final SoundEvent EXPERIENCE_ORB_PICKUP = new SoundEvent(); + public static final SoundEvent ITEM_PICKUP = new SoundEvent(); + public static final SoundEvent NOTE_BLOCK_PLING = new SoundEvent(); + + private SoundEvents() {} +} diff --git a/src/profile-26x/java/net/minecraft/util/RandomSource.java b/src/profile-26x/java/net/minecraft/util/RandomSource.java new file mode 100644 index 0000000..da07485 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/util/RandomSource.java @@ -0,0 +1,10 @@ +package net.minecraft.util; + +import java.util.Random; + +@SuppressWarnings("all") +public class RandomSource extends Random { + public static RandomSource create() { + return new RandomSource(); + } +} diff --git a/src/profile-26x/java/net/minecraft/world/effect/MobEffect.java b/src/profile-26x/java/net/minecraft/world/effect/MobEffect.java new file mode 100644 index 0000000..70e6315 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/effect/MobEffect.java @@ -0,0 +1,6 @@ +package net.minecraft.world.effect; + +@SuppressWarnings("all") +public class MobEffect { + public MobEffect() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/effect/MobEffectInstance.java b/src/profile-26x/java/net/minecraft/world/effect/MobEffectInstance.java new file mode 100644 index 0000000..98b23ca --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/effect/MobEffectInstance.java @@ -0,0 +1,6 @@ +package net.minecraft.world.effect; + +@SuppressWarnings("all") +public class MobEffectInstance { + public MobEffectInstance() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/entity/EntityType.java b/src/profile-26x/java/net/minecraft/world/entity/EntityType.java new file mode 100644 index 0000000..fab3dff --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/entity/EntityType.java @@ -0,0 +1,23 @@ +package net.minecraft.world.entity; + +@SuppressWarnings("all") +public class EntityType { + public static final EntityType ARROW = new EntityType<>(); + public static final EntityType DRAGON_FIREBALL = new EntityType<>(); + public static final EntityType EGG = new EntityType<>(); + public static final EntityType ENDER_PEARL = new EntityType<>(); + public static final EntityType EXPERIENCE_BOTTLE = new EntityType<>(); + public static final EntityType EYE_OF_ENDER = new EntityType<>(); + public static final EntityType LLAMA_SPIT = new EntityType<>(); + public static final EntityType PLAYER = new EntityType<>(); + public static final EntityType SHULKER_BULLET = new EntityType<>(); + public static final EntityType SMALL_FIREBALL = new EntityType<>(); + public static final EntityType SNOWBALL = new EntityType<>(); + public static final EntityType SPECTRAL_ARROW = new EntityType<>(); + public static final EntityType SPLASH_POTION = new EntityType<>(); + public static final EntityType TRIDENT = new EntityType<>(); + public static final EntityType WIND_CHARGE = new EntityType<>(); + public static final EntityType WITHER_SKULL = new EntityType<>(); + + public EntityType() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/entity/HumanoidArm.java b/src/profile-26x/java/net/minecraft/world/entity/HumanoidArm.java new file mode 100644 index 0000000..1bf0cec --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/entity/HumanoidArm.java @@ -0,0 +1,7 @@ +package net.minecraft.world.entity; + +@SuppressWarnings("all") +public enum HumanoidArm { + LEFT, + RIGHT +} diff --git a/src/profile-26x/java/net/minecraft/world/item/EggItem.java b/src/profile-26x/java/net/minecraft/world/item/EggItem.java new file mode 100644 index 0000000..0f01413 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/EggItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class EggItem extends Item { + public EggItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/EnderpearlItem.java b/src/profile-26x/java/net/minecraft/world/item/EnderpearlItem.java new file mode 100644 index 0000000..2d80b96 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/EnderpearlItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class EnderpearlItem extends Item { + public EnderpearlItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/ExperienceBottleItem.java b/src/profile-26x/java/net/minecraft/world/item/ExperienceBottleItem.java new file mode 100644 index 0000000..03ce345 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/ExperienceBottleItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class ExperienceBottleItem extends Item { + public ExperienceBottleItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/FireworkRocketItem.java b/src/profile-26x/java/net/minecraft/world/item/FireworkRocketItem.java new file mode 100644 index 0000000..a588335 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/FireworkRocketItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class FireworkRocketItem extends Item { + public FireworkRocketItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/FishingRodItem.java b/src/profile-26x/java/net/minecraft/world/item/FishingRodItem.java new file mode 100644 index 0000000..ccae513 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/FishingRodItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class FishingRodItem extends Item { + public FishingRodItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/Item.java b/src/profile-26x/java/net/minecraft/world/item/Item.java new file mode 100644 index 0000000..fd16bf7 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/Item.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class Item { + public Item() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/ItemStack.java b/src/profile-26x/java/net/minecraft/world/item/ItemStack.java new file mode 100644 index 0000000..47bef40 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/ItemStack.java @@ -0,0 +1,22 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class ItemStack { + private Item item; + + public ItemStack() { + this(new Item(), 1); + } + + public ItemStack(Item item) { + this(item, 1); + } + + public ItemStack(Item item, int count) { + this.item = item; + } + + public Item getItem() { + return item; + } +} diff --git a/src/profile-26x/java/net/minecraft/world/item/Items.java b/src/profile-26x/java/net/minecraft/world/item/Items.java new file mode 100644 index 0000000..2380339 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/Items.java @@ -0,0 +1,28 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public final class Items { + public static final Item AIR = new Item(); + public static final Item BEETROOT_SEEDS = new Item(); + public static final ProjectileWeaponItem BOW = new ProjectileWeaponItem(); + public static final Item CARROT = new Item(); + public static final ProjectileWeaponItem CROSSBOW = new ProjectileWeaponItem(); + public static final Item DIAMOND = new Item(); + public static final Item DIRT = new Item(); + public static final EggItem EGG = new EggItem(); + public static final EnderpearlItem ENDER_PEARL = new EnderpearlItem(); + public static final ExperienceBottleItem EXPERIENCE_BOTTLE = new ExperienceBottleItem(); + public static final FireworkRocketItem FIREWORK_ROCKET = new FireworkRocketItem(); + public static final FishingRodItem FISHING_ROD = new FishingRodItem(); + public static final Item NETHER_WART = new Item(); + public static final Item PITCHER_POD = new Item(); + public static final Item POTATO = new Item(); + public static final SnowballItem SNOWBALL = new SnowballItem(); + public static final ThrowablePotionItem SPLASH_POTION = new ThrowablePotionItem(); + public static final Item TORCHFLOWER_SEEDS = new Item(); + public static final TridentItem TRIDENT = new TridentItem(); + public static final Item WHEAT_SEEDS = new Item(); + public static final WindChargeItem WIND_CHARGE = new WindChargeItem(); + + private Items() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/ProjectileWeaponItem.java b/src/profile-26x/java/net/minecraft/world/item/ProjectileWeaponItem.java new file mode 100644 index 0000000..af5f83c --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/ProjectileWeaponItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class ProjectileWeaponItem extends Item { + public ProjectileWeaponItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/SnowballItem.java b/src/profile-26x/java/net/minecraft/world/item/SnowballItem.java new file mode 100644 index 0000000..299e887 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/SnowballItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class SnowballItem extends Item { + public SnowballItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/ThrowablePotionItem.java b/src/profile-26x/java/net/minecraft/world/item/ThrowablePotionItem.java new file mode 100644 index 0000000..d600aaf --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/ThrowablePotionItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class ThrowablePotionItem extends Item { + public ThrowablePotionItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/TridentItem.java b/src/profile-26x/java/net/minecraft/world/item/TridentItem.java new file mode 100644 index 0000000..0922141 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/TridentItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class TridentItem extends Item { + public TridentItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/item/WindChargeItem.java b/src/profile-26x/java/net/minecraft/world/item/WindChargeItem.java new file mode 100644 index 0000000..0db1958 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/WindChargeItem.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class WindChargeItem extends Item { + public WindChargeItem() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/level/block/Block.java b/src/profile-26x/java/net/minecraft/world/level/block/Block.java new file mode 100644 index 0000000..b2008f3 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/level/block/Block.java @@ -0,0 +1,21 @@ +package net.minecraft.world.level.block; + +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.state.BlockState; + +@SuppressWarnings("all") +public class Block { + public Block() {} + + public BlockState defaultBlockState() { + return new BlockState(this); + } + + public static Block byItem(Item item) { + return new Block(); + } + + public Item asItem() { + return new Item(); + } +} diff --git a/src/profile-26x/java/net/minecraft/world/level/block/Blocks.java b/src/profile-26x/java/net/minecraft/world/level/block/Blocks.java new file mode 100644 index 0000000..a557dd0 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/level/block/Blocks.java @@ -0,0 +1,39 @@ +package net.minecraft.world.level.block; + +@SuppressWarnings("all") +public final class Blocks { + public static final Block AIR = new Block(); + public static final Block BAMBOO = new Block(); + public static final Block BEDROCK = new Block(); + public static final Block BEETROOTS = new Block(); + public static final Block CACTUS = new Block(); + public static final Block CARROTS = new Block(); + public static final Block COARSE_DIRT = new Block(); + public static final Block COCOA = new Block(); + public static final Block CRYING_OBSIDIAN = new Block(); + public static final Block DEEPSLATE = new Block(); + public static final Block DIRT = new Block(); + public static final Block DIRT_PATH = new Block(); + public static final Block GRASS_BLOCK = new Block(); + public static final Block KELP = new Block(); + public static final Block KELP_PLANT = new Block(); + public static final Block LECTERN = new Block(); + public static final Block MELON = new Block(); + public static final Block MYCELIUM = new Block(); + public static final Block NETHER_WART = new Block(); + public static final Block OBSIDIAN = new Block(); + public static final Block PITCHER_CROP = new Block(); + public static final Block PODZOL = new Block(); + public static final Block POTATOES = new Block(); + public static final Block POWDER_SNOW = new Block(); + public static final Block PUMPKIN = new Block(); + public static final Block ROOTED_DIRT = new Block(); + public static final Block SLIME_BLOCK = new Block(); + public static final Block SUGAR_CANE = new Block(); + public static final Block SWEET_BERRY_BUSH = new Block(); + public static final Block TORCHFLOWER = new Block(); + public static final Block TORCHFLOWER_CROP = new Block(); + public static final Block WHEAT = new Block(); + + private Blocks() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/level/block/state/BlockState.java b/src/profile-26x/java/net/minecraft/world/level/block/state/BlockState.java new file mode 100644 index 0000000..791a072 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/level/block/state/BlockState.java @@ -0,0 +1,24 @@ +package net.minecraft.world.level.block.state; + +import net.minecraft.world.level.block.Block; + +@SuppressWarnings("all") +public class BlockState { + private final Block block; + + public BlockState() { + this(null); + } + + public BlockState(Block block) { + this.block = block; + } + + public Block getBlock() { + return block; + } + + public boolean is(Block block) { + return this.block == block; + } +} diff --git a/src/profile-26x/java/net/minecraft/world/level/block/state/properties/BlockStateProperties.java b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/BlockStateProperties.java new file mode 100644 index 0000000..9052827 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/BlockStateProperties.java @@ -0,0 +1,145 @@ +package net.minecraft.world.level.block.state.properties; + +@SuppressWarnings("all") +public final class BlockStateProperties { + public static final BooleanProperty ATTACHED = new BooleanProperty(); + public static final BooleanProperty BERRIES = new BooleanProperty(); + public static final BooleanProperty BLOOM = new BooleanProperty(); + public static final BooleanProperty BOTTOM = new BooleanProperty(); + public static final BooleanProperty CAN_SUMMON = new BooleanProperty(); + public static final BooleanProperty CONDITIONAL = new BooleanProperty(); + public static final BooleanProperty DISARMED = new BooleanProperty(); + public static final BooleanProperty DRAG = new BooleanProperty(); + public static final BooleanProperty ENABLED = new BooleanProperty(); + public static final BooleanProperty EXTENDED = new BooleanProperty(); + public static final BooleanProperty EYE = new BooleanProperty(); + public static final BooleanProperty FALLING = new BooleanProperty(); + public static final BooleanProperty HANGING = new BooleanProperty(); + public static final BooleanProperty HAS_BOTTLE_0 = new BooleanProperty(); + public static final BooleanProperty HAS_BOTTLE_1 = new BooleanProperty(); + public static final BooleanProperty HAS_BOTTLE_2 = new BooleanProperty(); + public static final BooleanProperty HAS_BOOK = new BooleanProperty(); + public static final BooleanProperty HAS_RECORD = new BooleanProperty(); + public static final BooleanProperty IN_WALL = new BooleanProperty(); + public static final BooleanProperty INVERTED = new BooleanProperty(); + public static final BooleanProperty LIT = new BooleanProperty(); + public static final BooleanProperty LOCKED = new BooleanProperty(); + public static final BooleanProperty MAP = new BooleanProperty(); + public static final BooleanProperty NATURAL = new BooleanProperty(); + public static final BooleanProperty OCCUPIED = new BooleanProperty(); + public static final BooleanProperty OMINOUS = new BooleanProperty(); + public static final BooleanProperty OPEN = new BooleanProperty(); + public static final BooleanProperty PERSISTENT = new BooleanProperty(); + public static final BooleanProperty POWERED = new BooleanProperty(); + public static final BooleanProperty SHORT = new BooleanProperty(); + public static final BooleanProperty SHRIEKING = new BooleanProperty(); + public static final BooleanProperty SIGNAL_FIRE = new BooleanProperty(); + public static final BooleanProperty SNOWY = new BooleanProperty(); + public static final BooleanProperty TIP = new BooleanProperty(); + public static final BooleanProperty TRIGGERED = new BooleanProperty(); + public static final BooleanProperty UNSTABLE = new BooleanProperty(); + public static final BooleanProperty WATERLOGGED = new BooleanProperty(); + public static final EnumProperty HORIZONTAL_AXIS = new EnumProperty(); + public static final EnumProperty AXIS = new EnumProperty(); + public static final BooleanProperty UP = new BooleanProperty(); + public static final BooleanProperty DOWN = new BooleanProperty(); + public static final BooleanProperty NORTH = new BooleanProperty(); + public static final BooleanProperty EAST = new BooleanProperty(); + public static final BooleanProperty SOUTH = new BooleanProperty(); + public static final BooleanProperty WEST = new BooleanProperty(); + public static final EnumProperty FACING = new EnumProperty(); + public static final EnumProperty FACING_HOPPER = new EnumProperty(); + public static final EnumProperty HORIZONTAL_FACING = new EnumProperty(); + public static final IntegerProperty FLOWER_AMOUNT = new IntegerProperty(); + public static final IntegerProperty SEGMENT_AMOUNT = new IntegerProperty(); + public static final EnumProperty ORIENTATION = new EnumProperty(); + public static final EnumProperty ATTACH_FACE = new EnumProperty(); + public static final EnumProperty BELL_ATTACHMENT = new EnumProperty(); + public static final EnumProperty EAST_WALL = new EnumProperty(); + public static final EnumProperty NORTH_WALL = new EnumProperty(); + public static final EnumProperty SOUTH_WALL = new EnumProperty(); + public static final EnumProperty WEST_WALL = new EnumProperty(); + public static final EnumProperty EAST_REDSTONE = new EnumProperty(); + public static final EnumProperty NORTH_REDSTONE = new EnumProperty(); + public static final EnumProperty SOUTH_REDSTONE = new EnumProperty(); + public static final EnumProperty WEST_REDSTONE = new EnumProperty(); + public static final EnumProperty DOUBLE_BLOCK_HALF = new EnumProperty(); + public static final EnumProperty HALF = new EnumProperty(); + public static final EnumProperty RAIL_SHAPE = new EnumProperty(); + public static final EnumProperty RAIL_SHAPE_STRAIGHT = new EnumProperty(); + public static final int MAX_AGE_1 = 1; + public static final int MAX_AGE_2 = 2; + public static final int MAX_AGE_3 = 3; + public static final int MAX_AGE_4 = 4; + public static final int MAX_AGE_5 = 5; + public static final int MAX_AGE_7 = 7; + public static final int MAX_AGE_15 = 15; + public static final int MAX_AGE_25 = 25; + public static final IntegerProperty AGE_1 = new IntegerProperty(); + public static final IntegerProperty AGE_2 = new IntegerProperty(); + public static final IntegerProperty AGE_3 = new IntegerProperty(); + public static final IntegerProperty AGE_4 = new IntegerProperty(); + public static final IntegerProperty AGE_5 = new IntegerProperty(); + public static final IntegerProperty AGE_7 = new IntegerProperty(); + public static final IntegerProperty AGE_15 = new IntegerProperty(); + public static final IntegerProperty AGE_25 = new IntegerProperty(); + public static final IntegerProperty BITES = new IntegerProperty(); + public static final IntegerProperty CANDLES = new IntegerProperty(); + public static final IntegerProperty DELAY = new IntegerProperty(); + public static final int MAX_DISTANCE = 7; + public static final IntegerProperty DISTANCE = new IntegerProperty(); + public static final IntegerProperty EGGS = new IntegerProperty(); + public static final IntegerProperty HATCH = new IntegerProperty(); + public static final IntegerProperty LAYERS = new IntegerProperty(); + public static final int MIN_LEVEL = 0; + public static final int MIN_LEVEL_CAULDRON = 1; + public static final int MAX_LEVEL_3 = 3; + public static final int MAX_LEVEL_8 = 8; + public static final IntegerProperty LEVEL_CAULDRON = new IntegerProperty(); + public static final IntegerProperty LEVEL_COMPOSTER = new IntegerProperty(); + public static final IntegerProperty LEVEL_FLOWING = new IntegerProperty(); + public static final IntegerProperty LEVEL_HONEY = new IntegerProperty(); + public static final int MAX_LEVEL_15 = 15; + public static final IntegerProperty LEVEL = new IntegerProperty(); + public static final IntegerProperty MOISTURE = new IntegerProperty(); + public static final IntegerProperty NOTE = new IntegerProperty(); + public static final IntegerProperty PICKLES = new IntegerProperty(); + public static final IntegerProperty POWER = new IntegerProperty(); + public static final IntegerProperty STAGE = new IntegerProperty(); + public static final int STABILITY_MAX_DISTANCE = 7; + public static final IntegerProperty STABILITY_DISTANCE = new IntegerProperty(); + public static final int MIN_RESPAWN_ANCHOR_CHARGES = 0; + public static final int MAX_RESPAWN_ANCHOR_CHARGES = 4; + public static final IntegerProperty RESPAWN_ANCHOR_CHARGES = new IntegerProperty(); + public static final IntegerProperty DRIED_GHAST_HYDRATION_LEVELS = new IntegerProperty(); + public static final IntegerProperty ROTATION_16 = new IntegerProperty(); + public static final EnumProperty BED_PART = new EnumProperty(); + public static final EnumProperty CHEST_TYPE = new EnumProperty(); + public static final EnumProperty MODE_COMPARATOR = new EnumProperty(); + public static final EnumProperty DOOR_HINGE = new EnumProperty(); + public static final EnumProperty NOTEBLOCK_INSTRUMENT = new EnumProperty(); + public static final EnumProperty PISTON_TYPE = new EnumProperty(); + public static final EnumProperty SLAB_TYPE = new EnumProperty(); + public static final EnumProperty STAIRS_SHAPE = new EnumProperty(); + public static final EnumProperty STRUCTUREBLOCK_MODE = new EnumProperty(); + public static final EnumProperty BAMBOO_LEAVES = new EnumProperty(); + public static final EnumProperty TILT = new EnumProperty(); + public static final EnumProperty VERTICAL_DIRECTION = new EnumProperty(); + public static final EnumProperty DRIPSTONE_THICKNESS = new EnumProperty(); + public static final EnumProperty SCULK_SENSOR_PHASE = new EnumProperty(); + public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_0_OCCUPIED = new BooleanProperty(); + public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_1_OCCUPIED = new BooleanProperty(); + public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_2_OCCUPIED = new BooleanProperty(); + public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_3_OCCUPIED = new BooleanProperty(); + public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_4_OCCUPIED = new BooleanProperty(); + public static final BooleanProperty CHISELED_BOOKSHELF_SLOT_5_OCCUPIED = new BooleanProperty(); + public static final IntegerProperty DUSTED = new IntegerProperty(); + public static final BooleanProperty CRACKED = new BooleanProperty(); + public static final BooleanProperty CRAFTING = new BooleanProperty(); + public static final EnumProperty TRIAL_SPAWNER_STATE = new EnumProperty(); + public static final EnumProperty VAULT_STATE = new EnumProperty(); + public static final EnumProperty CREAKING_HEART_STATE = new EnumProperty(); + public static final EnumProperty TEST_BLOCK_MODE = new EnumProperty(); + + private BlockStateProperties() {} +} diff --git a/src/profile-26x/java/net/minecraft/world/level/block/state/properties/BooleanProperty.java b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/BooleanProperty.java new file mode 100644 index 0000000..cd953e7 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/BooleanProperty.java @@ -0,0 +1,10 @@ +package net.minecraft.world.level.block.state.properties; + +@SuppressWarnings("all") +public class BooleanProperty extends Property { + public BooleanProperty() {} + + public static BooleanProperty create(String name) { + return new BooleanProperty(); + } +} diff --git a/src/profile-26x/java/net/minecraft/world/level/block/state/properties/EnumProperty.java b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/EnumProperty.java new file mode 100644 index 0000000..7a7f97d --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/EnumProperty.java @@ -0,0 +1,24 @@ +package net.minecraft.world.level.block.state.properties; + +import java.util.function.Predicate; + +@SuppressWarnings("all") +public class EnumProperty & Comparable> extends Property { + public EnumProperty() {} + + public static & Comparable> EnumProperty create( + String name, Class enumClass) { + return new EnumProperty<>(); + } + + @SafeVarargs + public static & Comparable> EnumProperty create( + String name, Class enumClass, T... values) { + return new EnumProperty<>(); + } + + public static & Comparable> EnumProperty create( + String name, Class enumClass, Predicate filter) { + return new EnumProperty<>(); + } +} diff --git a/src/profile-26x/java/net/minecraft/world/level/block/state/properties/IntegerProperty.java b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/IntegerProperty.java new file mode 100644 index 0000000..103b551 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/IntegerProperty.java @@ -0,0 +1,10 @@ +package net.minecraft.world.level.block.state.properties; + +@SuppressWarnings("all") +public class IntegerProperty extends Property { + public IntegerProperty() {} + + public static IntegerProperty create(String name, int min, int max) { + return new IntegerProperty(); + } +} diff --git a/src/profile-26x/java/net/minecraft/world/level/block/state/properties/Property.java b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/Property.java new file mode 100644 index 0000000..2445f31 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/level/block/state/properties/Property.java @@ -0,0 +1,8 @@ +package net.minecraft.world.level.block.state.properties; + +@SuppressWarnings("all") +public class Property> { + public String getName() { + return ""; + } +} diff --git a/src/profile-26x/java/org/apache/catalina/Container.java b/src/profile-26x/java/org/apache/catalina/Container.java new file mode 100644 index 0000000..5a0826c --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/Container.java @@ -0,0 +1,4 @@ +package org.apache.catalina; + +@SuppressWarnings("all") +public interface Container {} diff --git a/src/profile-26x/java/org/apache/catalina/Context.java b/src/profile-26x/java/org/apache/catalina/Context.java new file mode 100644 index 0000000..2cfe52f --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/Context.java @@ -0,0 +1,10 @@ +package org.apache.catalina; + +@SuppressWarnings("all") +public interface Context extends Container { + Wrapper createWrapper(); + + void addChild(Container child); + + void addServletMappingDecoded(String pattern, String name); +} diff --git a/src/profile-26x/java/org/apache/catalina/LifecycleException.java b/src/profile-26x/java/org/apache/catalina/LifecycleException.java new file mode 100644 index 0000000..0290a53 --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/LifecycleException.java @@ -0,0 +1,10 @@ +package org.apache.catalina; + +@SuppressWarnings("all") +public class LifecycleException extends Exception { + public LifecycleException() {} + + public LifecycleException(String message) { + super(message); + } +} diff --git a/src/profile-26x/java/org/apache/catalina/Loader.java b/src/profile-26x/java/org/apache/catalina/Loader.java new file mode 100644 index 0000000..0c41c44 --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/Loader.java @@ -0,0 +1,4 @@ +package org.apache.catalina; + +@SuppressWarnings("all") +public interface Loader {} diff --git a/src/profile-26x/java/org/apache/catalina/Wrapper.java b/src/profile-26x/java/org/apache/catalina/Wrapper.java new file mode 100644 index 0000000..1dcf4eb --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/Wrapper.java @@ -0,0 +1,14 @@ +package org.apache.catalina; + +import jakarta.servlet.Servlet; + +@SuppressWarnings("all") +public interface Wrapper extends Container { + void setName(String name); + + void setServlet(Servlet servlet); + + void setLoadOnStartup(int loadOnStartup); + + void setAsyncSupported(boolean asyncSupported); +} diff --git a/src/profile-26x/java/org/apache/catalina/connector/Connector.java b/src/profile-26x/java/org/apache/catalina/connector/Connector.java new file mode 100644 index 0000000..b46e55b --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/connector/Connector.java @@ -0,0 +1,10 @@ +package org.apache.catalina.connector; + +@SuppressWarnings("all") +public class Connector { + public boolean setProperty(String name, String value) { + return true; + } + + public void setAsyncTimeout(long timeout) {} +} diff --git a/src/profile-26x/java/org/apache/catalina/core/StandardContext.java b/src/profile-26x/java/org/apache/catalina/core/StandardContext.java new file mode 100644 index 0000000..7da852b --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/core/StandardContext.java @@ -0,0 +1,12 @@ +package org.apache.catalina.core; + +import org.apache.catalina.Context; +import org.apache.catalina.Loader; + +@SuppressWarnings("all") +public class StandardContext extends org.apache.catalina.startup.Tomcat.SimpleContext + implements Context { + public StandardContext() {} + + public void setLoader(Loader loader) {} +} diff --git a/src/profile-26x/java/org/apache/catalina/loader/WebappClassLoaderBase.java b/src/profile-26x/java/org/apache/catalina/loader/WebappClassLoaderBase.java new file mode 100644 index 0000000..e267386 --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/loader/WebappClassLoaderBase.java @@ -0,0 +1,26 @@ +package org.apache.catalina.loader; + +@SuppressWarnings("all") +public abstract class WebappClassLoaderBase extends ClassLoader { + private boolean delegate; + + public WebappClassLoaderBase() { + super(Thread.currentThread().getContextClassLoader()); + } + + public WebappClassLoaderBase(ClassLoader parent) { + super(parent); + } + + public boolean getDelegate() { + return delegate; + } + + public void setDelegate(boolean delegate) { + this.delegate = delegate; + } + + public abstract WebappClassLoaderBase copyWithoutTransformers(); + + protected void clearReferences() {} +} diff --git a/src/profile-26x/java/org/apache/catalina/loader/WebappLoader.java b/src/profile-26x/java/org/apache/catalina/loader/WebappLoader.java new file mode 100644 index 0000000..8143f72 --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/loader/WebappLoader.java @@ -0,0 +1,10 @@ +package org.apache.catalina.loader; + +import org.apache.catalina.Loader; + +@SuppressWarnings("all") +public class WebappLoader implements Loader { + public WebappLoader() {} + + public void setLoaderClass(String loaderClass) {} +} diff --git a/src/profile-26x/java/org/apache/catalina/startup/Tomcat.java b/src/profile-26x/java/org/apache/catalina/startup/Tomcat.java new file mode 100644 index 0000000..f9dc644 --- /dev/null +++ b/src/profile-26x/java/org/apache/catalina/startup/Tomcat.java @@ -0,0 +1,65 @@ +package org.apache.catalina.startup; + +import jakarta.servlet.Servlet; +import org.apache.catalina.Container; +import org.apache.catalina.Context; +import org.apache.catalina.LifecycleException; +import org.apache.catalina.Wrapper; +import org.apache.catalina.connector.Connector; +import org.apache.catalina.core.StandardContext; + +@SuppressWarnings("all") +public class Tomcat { + private final Connector connector = new Connector(); + + public Tomcat() {} + + public void setPort(int port) {} + + public void setBaseDir(String baseDir) {} + + public Context addContext(String contextPath, String docBase) { + return new StandardContext(); + } + + public Connector getConnector() { + return connector; + } + + public void start() throws LifecycleException {} + + public void stop() throws LifecycleException {} + + public void destroy() throws LifecycleException {} + + public static class SimpleContext implements Context { + public SimpleContext() {} + + @Override + public Wrapper createWrapper() { + return new SimpleWrapper(); + } + + @Override + public void addChild(Container child) {} + + @Override + public void addServletMappingDecoded(String pattern, String name) {} + } + + public static class SimpleWrapper implements Wrapper { + public SimpleWrapper() {} + + @Override + public void setName(String name) {} + + @Override + public void setServlet(Servlet servlet) {} + + @Override + public void setLoadOnStartup(int loadOnStartup) {} + + @Override + public void setAsyncSupported(boolean asyncSupported) {} + } +} diff --git a/src/profile-26x/java/org/lwjgl/opengl/GL.java b/src/profile-26x/java/org/lwjgl/opengl/GL.java new file mode 100644 index 0000000..c59c302 --- /dev/null +++ b/src/profile-26x/java/org/lwjgl/opengl/GL.java @@ -0,0 +1,14 @@ +package org.lwjgl.opengl; + +@SuppressWarnings("all") +public final class GL { + private GL() {} + + public static GLCapabilities getCapabilities() { + return new GLCapabilities(); + } + + public static GLCapabilities createCapabilities() { + return new GLCapabilities(); + } +} diff --git a/src/profile-26x/java/org/lwjgl/opengl/GLCapabilities.java b/src/profile-26x/java/org/lwjgl/opengl/GLCapabilities.java new file mode 100644 index 0000000..ca8fe54 --- /dev/null +++ b/src/profile-26x/java/org/lwjgl/opengl/GLCapabilities.java @@ -0,0 +1,6 @@ +package org.lwjgl.opengl; + +@SuppressWarnings("all") +public class GLCapabilities { + public GLCapabilities() {} +} diff --git a/src/profile-26x/java/org/meteordev/starscript/Starscript.java b/src/profile-26x/java/org/meteordev/starscript/Starscript.java new file mode 100644 index 0000000..bc54192 --- /dev/null +++ b/src/profile-26x/java/org/meteordev/starscript/Starscript.java @@ -0,0 +1,33 @@ +package org.meteordev.starscript; + +import org.meteordev.starscript.value.Value; +import org.meteordev.starscript.value.ValueMap; + +public class Starscript { + public Value pop() { + return Value.null_(); + } + + public ValueMap set(String key, Value value) { + return new ValueMap(); + } + + public ValueMap set(String key, ValueMap value) { + return new ValueMap(); + } + + public meteordevelopment.starscript.value.ValueMap set( + String key, meteordevelopment.starscript.value.Value value) { + return new meteordevelopment.starscript.value.ValueMap(); + } + + public void error(String format, Object... args) {} + + public double popNumber(String key) { + return 0.0d; + } + + public String popString(String key) { + return ""; + } +} diff --git a/src/main/java/org/meteordev/starscript/utils/SFunction.java b/src/profile-26x/java/org/meteordev/starscript/utils/SFunction.java similarity index 100% rename from src/main/java/org/meteordev/starscript/utils/SFunction.java rename to src/profile-26x/java/org/meteordev/starscript/utils/SFunction.java diff --git a/src/profile-26x/java/org/meteordev/starscript/value/Value.java b/src/profile-26x/java/org/meteordev/starscript/value/Value.java new file mode 100644 index 0000000..ffac188 --- /dev/null +++ b/src/profile-26x/java/org/meteordev/starscript/value/Value.java @@ -0,0 +1,70 @@ +package org.meteordev.starscript.value; + +import org.meteordev.starscript.utils.SFunction; + +public class Value { + public static Value bool(boolean value) { + return new Value(); + } + + public static Value function(SFunction function) { + return new Value(); + } + + public boolean getBool() { + return false; + } + + public ValueMap getMap() { + return new ValueMap(); + } + + public double getNumber() { + return 0.0d; + } + + public String getString() { + return ""; + } + + public boolean isBool() { + return false; + } + + public boolean isMap() { + return false; + } + + public boolean isNull() { + return false; + } + + public boolean isNumber() { + return false; + } + + public boolean isString() { + return false; + } + + public static Value map(ValueMap value) { + return new Value(); + } + + public static Value null_() { + return new Value(); + } + + public static Value number(double value) { + return new Value(); + } + + public static Value string(String value) { + return new Value(); + } + + @Override + public String toString() { + return ""; + } +} diff --git a/src/profile-26x/java/org/meteordev/starscript/value/ValueMap.java b/src/profile-26x/java/org/meteordev/starscript/value/ValueMap.java new file mode 100644 index 0000000..529bc2c --- /dev/null +++ b/src/profile-26x/java/org/meteordev/starscript/value/ValueMap.java @@ -0,0 +1,32 @@ +package org.meteordev.starscript.value; + +import java.util.Collections; +import java.util.Set; +import java.util.function.Supplier; +import org.meteordev.starscript.utils.SFunction; + +public class ValueMap { + public Supplier get(String key) { + return () -> Value.null_(); + } + + public Set keys() { + return Collections.emptySet(); + } + + public ValueMap set(String key, Supplier value) { + return this; + } + + public ValueMap set(String key, SFunction value) { + return this; + } + + public ValueMap set(String key, ValueMap value) { + return this; + } + + public ValueMap set(String key, Value value) { + return this; + } +} diff --git a/src/profile-legacy/java/com/cope/addonparser/util/MappingResolverFactory.java b/src/profile-legacy/java/com/cope/addonparser/util/MappingResolverFactory.java new file mode 100644 index 0000000..facfb55 --- /dev/null +++ b/src/profile-legacy/java/com/cope/addonparser/util/MappingResolverFactory.java @@ -0,0 +1,36 @@ +package com.cope.addonparser.util; + +import java.util.List; +import java.util.Map; + +/** Legacy (1.21.x Yarn intermediary) profile bindings for ValueNormalizer. */ +public final class MappingResolverFactory { + private static final Map> OWNER_HINTS = + Map.of( + "net.minecraft.class_1792", List.of("net.minecraft.class_1802"), + "net.minecraft.class_2248", List.of("net.minecraft.class_2246"), + "net.minecraft.class_3414", List.of("net.minecraft.class_3417"), + "net.minecraft.class_1887", List.of("net.minecraft.class_1893"), + "net.minecraft.class_5321", List.of("net.minecraft.class_1893"), + "net.minecraft.class_1291", List.of("net.minecraft.class_1294"), + "net.minecraft.class_6880", List.of("net.minecraft.class_1294")); + + private MappingResolverFactory() {} + + public static MappingResolver get() { + return YarnMappingResolver.get(); + } + + public static Map> ownerHints() { + return OWNER_HINTS; + } + + /** Per-simple-name registry-class fallbacks used when explicit hints are missing. */ + public static String fallbackOwnerForSimpleName(String simpleName) { + return switch (simpleName) { + case "class_1792" -> "net.minecraft.class_1802"; + case "class_2248" -> "net.minecraft.class_2246"; + default -> null; + }; + } +} diff --git a/src/main/java/com/cope/addonparser/util/YarnMappingResolver.java b/src/profile-legacy/java/com/cope/addonparser/util/YarnMappingResolver.java similarity index 99% rename from src/main/java/com/cope/addonparser/util/YarnMappingResolver.java rename to src/profile-legacy/java/com/cope/addonparser/util/YarnMappingResolver.java index b483d17..83c42ca 100644 --- a/src/main/java/com/cope/addonparser/util/YarnMappingResolver.java +++ b/src/profile-legacy/java/com/cope/addonparser/util/YarnMappingResolver.java @@ -28,7 +28,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -public final class YarnMappingResolver { +public final class YarnMappingResolver implements MappingResolver { private static final String MAPPINGS_URL_TEMPLATE = "https://maven.fabricmc.net/net/fabricmc/yarn/%s/yarn-%s-v2.jar"; private static final String DEFAULT_MAPPINGS_DIR = "mappings"; diff --git a/src/main/java/meteordevelopment/meteorclient/MeteorClient.java b/src/profile-legacy/java/meteordevelopment/meteorclient/MeteorClient.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/MeteorClient.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/MeteorClient.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java similarity index 98% rename from src/main/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java index e82b58d..bfa55bd 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java +++ b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java @@ -26,12 +26,10 @@ protected boolean isValueValid(List value) { return value != null; } - @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } - @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Category.java b/src/profile-legacy/java/meteordevelopment/meteorclient/systems/modules/Category.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/systems/modules/Category.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/systems/modules/Category.java diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Module.java b/src/profile-legacy/java/meteordevelopment/meteorclient/systems/modules/Module.java similarity index 92% rename from src/main/java/meteordevelopment/meteorclient/systems/modules/Module.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/systems/modules/Module.java index 89d2ae8..6228426 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Module.java +++ b/src/profile-legacy/java/meteordevelopment/meteorclient/systems/modules/Module.java @@ -10,7 +10,8 @@ import meteordevelopment.meteorclient.utils.misc.Keybind; import meteordevelopment.meteorclient.utils.render.color.Color; -public abstract class Module implements ISerializable, Comparable { +public abstract class Module + implements ISerializable, Comparable, dev.jfronny.meteoradditions.util.IModule { protected final net.minecraft.class_310 mc; public final Category category; @@ -104,11 +105,17 @@ public void warning(String message, Object... args) {} public void error(String message, Object... args) {} @Override + public void meteorAdditions$setKeywords(String... keywords) {} + + @Override + public String meteorAdditions$getQueryString() { + return name == null ? "" : name; + } + public net.minecraft.class_2487 toTag() { return new net.minecraft.class_2487(); } - @Override public Module fromTag(net.minecraft.class_2487 tag) { return this; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java b/src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java diff --git a/src/profile-legacy/java/meteordevelopment/starscript/Script.java b/src/profile-legacy/java/meteordevelopment/starscript/Script.java new file mode 100644 index 0000000..848be05 --- /dev/null +++ b/src/profile-legacy/java/meteordevelopment/starscript/Script.java @@ -0,0 +1,5 @@ +package meteordevelopment.starscript; + +public class Script { + public Script() {} +} diff --git a/src/main/java/meteordevelopment/starscript/Starscript.java b/src/profile-legacy/java/meteordevelopment/starscript/Starscript.java similarity index 100% rename from src/main/java/meteordevelopment/starscript/Starscript.java rename to src/profile-legacy/java/meteordevelopment/starscript/Starscript.java diff --git a/src/main/java/meteordevelopment/starscript/utils/SFunction.java b/src/profile-legacy/java/meteordevelopment/starscript/utils/SFunction.java similarity index 100% rename from src/main/java/meteordevelopment/starscript/utils/SFunction.java rename to src/profile-legacy/java/meteordevelopment/starscript/utils/SFunction.java diff --git a/src/main/java/meteordevelopment/starscript/value/Value.java b/src/profile-legacy/java/meteordevelopment/starscript/value/Value.java similarity index 100% rename from src/main/java/meteordevelopment/starscript/value/Value.java rename to src/profile-legacy/java/meteordevelopment/starscript/value/Value.java diff --git a/src/main/java/meteordevelopment/starscript/value/ValueMap.java b/src/profile-legacy/java/meteordevelopment/starscript/value/ValueMap.java similarity index 100% rename from src/main/java/meteordevelopment/starscript/value/ValueMap.java rename to src/profile-legacy/java/meteordevelopment/starscript/value/ValueMap.java diff --git a/src/profile-legacy/java/net/minecraft/class_1291.java b/src/profile-legacy/java/net/minecraft/class_1291.java new file mode 100644 index 0000000..4a3262a --- /dev/null +++ b/src/profile-legacy/java/net/minecraft/class_1291.java @@ -0,0 +1,6 @@ +package net.minecraft; + +@SuppressWarnings("all") +public class class_1291 { + public class_1291() {} +} diff --git a/src/profile-legacy/java/net/minecraft/class_1293.java b/src/profile-legacy/java/net/minecraft/class_1293.java new file mode 100644 index 0000000..f1f0267 --- /dev/null +++ b/src/profile-legacy/java/net/minecraft/class_1293.java @@ -0,0 +1,6 @@ +package net.minecraft; + +@SuppressWarnings("all") +public class class_1293 { + public class_1293() {} +} diff --git a/src/main/java/net/minecraft/class_3417.java b/src/profile-legacy/java/net/minecraft/class_3417.java similarity index 100% rename from src/main/java/net/minecraft/class_3417.java rename to src/profile-legacy/java/net/minecraft/class_3417.java diff --git a/src/main/java/net/minecraft/class_6880$class_6883.java b/src/profile-legacy/java/net/minecraft/class_6880$class_6883.java similarity index 100% rename from src/main/java/net/minecraft/class_6880$class_6883.java rename to src/profile-legacy/java/net/minecraft/class_6880$class_6883.java diff --git a/src/profile-legacy/java/net/minecraft/sounds/SoundEvent.java b/src/profile-legacy/java/net/minecraft/sounds/SoundEvent.java new file mode 100644 index 0000000..716b5e9 --- /dev/null +++ b/src/profile-legacy/java/net/minecraft/sounds/SoundEvent.java @@ -0,0 +1,6 @@ +package net.minecraft.sounds; + +@SuppressWarnings("all") +public class SoundEvent { + public SoundEvent() {} +} diff --git a/src/profile-legacy/java/net/minecraft/world/entity/EntityType.java b/src/profile-legacy/java/net/minecraft/world/entity/EntityType.java new file mode 100644 index 0000000..8bb669b --- /dev/null +++ b/src/profile-legacy/java/net/minecraft/world/entity/EntityType.java @@ -0,0 +1,6 @@ +package net.minecraft.world.entity; + +@SuppressWarnings("all") +public class EntityType { + public EntityType() {} +} diff --git a/src/profile-legacy/java/net/minecraft/world/item/Item.java b/src/profile-legacy/java/net/minecraft/world/item/Item.java new file mode 100644 index 0000000..fd16bf7 --- /dev/null +++ b/src/profile-legacy/java/net/minecraft/world/item/Item.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item; + +@SuppressWarnings("all") +public class Item { + public Item() {} +} diff --git a/src/profile-legacy/java/net/minecraft/world/level/block/Block.java b/src/profile-legacy/java/net/minecraft/world/level/block/Block.java new file mode 100644 index 0000000..c10542f --- /dev/null +++ b/src/profile-legacy/java/net/minecraft/world/level/block/Block.java @@ -0,0 +1,6 @@ +package net.minecraft.world.level.block; + +@SuppressWarnings("all") +public class Block { + public Block() {} +} diff --git a/src/profile-legacy/java/net/minecraft/world/level/block/state/properties/Property.java b/src/profile-legacy/java/net/minecraft/world/level/block/state/properties/Property.java new file mode 100644 index 0000000..2445f31 --- /dev/null +++ b/src/profile-legacy/java/net/minecraft/world/level/block/state/properties/Property.java @@ -0,0 +1,8 @@ +package net.minecraft.world.level.block.state.properties; + +@SuppressWarnings("all") +public class Property> { + public String getName() { + return ""; + } +} diff --git a/src/stubgen/java/com/cope/addonparser/tools/StubGenerator.java b/src/stubgen/java/com/cope/addonparser/tools/StubGenerator.java index 0116b8d..372bab7 100644 --- a/src/stubgen/java/com/cope/addonparser/tools/StubGenerator.java +++ b/src/stubgen/java/com/cope/addonparser/tools/StubGenerator.java @@ -49,7 +49,7 @@ public final class StubGenerator { "net/minecraft/class_6880", "net/minecraft/class_1269"); - private record Args(Path inputDir, Path outputDir, Path manualClassList) {} + private record Args(Path inputDir, Path outputDir, Path manualClassList, String profile) {} private record ClassEntry(String internalName, byte[] bytes) {} @@ -127,7 +127,7 @@ public static void main(String[] argv) throws Exception { Args args = parseArgs(argv); if (args == null) { System.err.println( - "Usage: StubGenerator --input-dir --output-dir [--manual-class-list ]"); + "Usage: StubGenerator --input-dir --output-dir [--manual-class-list ] [--profile legacy|26x]"); System.exit(2); return; } @@ -663,10 +663,11 @@ private static Args parseArgs(String[] args) { String input = values.get("--input-dir"); String output = values.get("--output-dir"); String manual = values.get("--manual-class-list"); + String profile = values.getOrDefault("--profile", "26x"); if (input == null || output == null) return null; Path manualPath = manual == null ? null : Path.of(manual); - return new Args(Path.of(input), Path.of(output), manualPath); + return new Args(Path.of(input), Path.of(output), manualPath, profile); } private static void deleteRecursively(Path root) throws IOException { diff --git a/src/test/java/com/cope/addonparser/FixtureScanTest.java b/src/test/java/com/cope/addonparser/FixtureScanTest.java index 2f6aa94..611282c 100644 --- a/src/test/java/com/cope/addonparser/FixtureScanTest.java +++ b/src/test/java/com/cope/addonparser/FixtureScanTest.java @@ -52,20 +52,20 @@ void scansAllFixtureJars() throws Exception { boolean tmpRootMissingAtStart = !Files.exists(runtimeTmpRoot); assertTrue( - jarNames.stream().anyMatch(name -> name.startsWith("Baritone-Controller--")), - "Missing fixture jar for Baritone-Controller"); + jarNames.stream().anyMatch(name -> name.startsWith("MeteorAdditions--")), + "Missing fixture jar for MeteorAdditions"); assertTrue( - jarNames.stream().anyMatch(name -> name.startsWith("mc-games--")), - "Missing fixture jar for mc-games"); + jarNames.stream().anyMatch(name -> name.startsWith("Nora-Tweaks--")), + "Missing fixture jar for Nora-Tweaks"); assertTrue( - jarNames.stream().anyMatch(name -> name.startsWith("meteor-satellite-addon--")), - "Missing fixture jar for meteor-satellite-addon"); + jarNames.stream().anyMatch(name -> name.startsWith("meteor-addon-template--")), + "Missing fixture jar for meteor-addon-template"); assertTrue( jarNames.stream().anyMatch(name -> name.startsWith("meteor-translation-addon--")), "Missing fixture jar for meteor-translation-addon"); assertTrue( - jarNames.stream().anyMatch(name -> name.startsWith("Trouser-Streak--")), - "Missing fixture jar for Trouser-Streak"); + jarNames.stream().anyMatch(name -> name.startsWith("Seija-Printer--")), + "Missing fixture jar for Seija-Printer"); List failures = new ArrayList<>(); try (AddonScanner scanner = new AddonScanner()) { diff --git a/src/test/java/com/cope/addonparser/IsolatedScannerTest.java b/src/test/java/com/cope/addonparser/IsolatedScannerTest.java index 18b42c4..a90e579 100644 --- a/src/test/java/com/cope/addonparser/IsolatedScannerTest.java +++ b/src/test/java/com/cope/addonparser/IsolatedScannerTest.java @@ -46,20 +46,20 @@ void scansAllFixtureJars() throws Exception { // Verify expected fixture jars exist assertTrue( - jarNames.stream().anyMatch(name -> name.startsWith("Baritone-Controller--")), - "Missing fixture jar for Baritone-Controller"); + jarNames.stream().anyMatch(name -> name.startsWith("MeteorAdditions--")), + "Missing fixture jar for MeteorAdditions"); assertTrue( - jarNames.stream().anyMatch(name -> name.startsWith("mc-games--")), - "Missing fixture jar for mc-games"); + jarNames.stream().anyMatch(name -> name.startsWith("Nora-Tweaks--")), + "Missing fixture jar for Nora-Tweaks"); assertTrue( - jarNames.stream().anyMatch(name -> name.startsWith("meteor-satellite-addon--")), - "Missing fixture jar for meteor-satellite-addon"); + jarNames.stream().anyMatch(name -> name.startsWith("meteor-addon-template--")), + "Missing fixture jar for meteor-addon-template"); assertTrue( jarNames.stream().anyMatch(name -> name.startsWith("meteor-translation-addon--")), "Missing fixture jar for meteor-translation-addon"); assertTrue( - jarNames.stream().anyMatch(name -> name.startsWith("Trouser-Streak--")), - "Missing fixture jar for Trouser-Streak"); + jarNames.stream().anyMatch(name -> name.startsWith("Seija-Printer--")), + "Missing fixture jar for Seija-Printer"); // Known addon side-effect artifacts that may be created during scanning. List sideEffectPaths = @@ -127,7 +127,7 @@ void scanResultContainsExpectedMetadata() throws Exception { // Find a known fixture jar with predictable metadata List jars = Files.list(jarDir) - .filter(p -> p.getFileName().toString().startsWith("meteor-satellite-addon--")) + .filter(p -> p.getFileName().toString().startsWith("meteor-translation-addon--")) .toList(); if (jars.isEmpty()) { @@ -140,7 +140,7 @@ void scanResultContainsExpectedMetadata() throws Exception { assertTrue(result.success, "Scan should succeed: " + String.join(", ", result.errors)); assertNotNull(result.jarName, "jarName should be set"); assertNotNull(result.jarPath, "jarPath should be set"); - assertTrue(result.jarName.startsWith("meteor-satellite-addon--"), "Unexpected jar name: " + result.jarName); + assertTrue(result.jarName.startsWith("meteor-translation-addon--"), "Unexpected jar name: " + result.jarName); // Verify addon metadata is populated assertFalse(result.addons.isEmpty(), "Should have at least one addon"); From 9e5afde0fe25a9acfb0f29746f6b28f08fa18ac1 Mon Sep 17 00:00:00 2001 From: GhostTypes <106415648+GhostTypes@users.noreply.github.com> Date: Sat, 2 May 2026 14:19:23 -0400 Subject: [PATCH 2/8] Restore profile-specific serialization contracts --- .../settings/BlockDataSetting.java | 1 + .../settings/BlockListSetting.java | 2 + .../settings/BlockPosSetting.java | 2 + .../meteorclient/settings/BlockSetting.java | 2 + .../meteorclient/settings/BoolSetting.java | 2 + .../settings/ColorListSetting.java | 2 + .../meteorclient/settings/ColorSetting.java | 2 + .../meteorclient/settings/DoubleSetting.java | 2 + .../settings/EnchantmentListSetting.java | 2 + .../settings/EntityTypeListSetting.java | 2 + .../meteorclient/settings/EnumSetting.java | 2 + .../meteorclient/settings/GenericSetting.java | 2 + .../meteorclient/settings/IntSetting.java | 2 + .../settings/ItemListSetting.java | 2 + .../meteorclient/settings/ItemSetting.java | 2 + .../meteorclient/settings/KeybindSetting.java | 2 + .../settings/PacketListSetting.java | 1 + .../settings/ScreenHandlerListSetting.java | 2 + .../meteorclient/settings/SettingGroup.java | 9 + .../meteorclient/settings/Settings.java | 9 + .../settings/SoundEventListSetting.java | 2 + .../settings/StringListSetting.java | 2 + .../meteorclient/settings/StringSetting.java | 2 + .../settings/Vector3dSetting.java | 2 + .../utils/misc/ISerializable.java | 8 - .../meteorclient/settings/Setting.java | 177 ++++++++++++++++++ .../settings/StatusEffectListSetting.java | 2 + .../utils/misc/ISerializable.java | 7 + .../meteorclient/utils/misc/Keybind.java | 78 ++++++++ .../meteorclient/settings/Setting.java | 2 + .../settings/StatusEffectListSetting.java | 2 + .../utils/misc/ISerializable.java | 7 + .../meteorclient/utils/misc/Keybind.java | 2 + .../java/net/minecraft/nbt/CompoundTag.java | 6 + 34 files changed, 343 insertions(+), 8 deletions(-) delete mode 100644 src/main/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/Setting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Keybind.java rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/Setting.java (99%) create mode 100644 src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/utils/misc/Keybind.java (98%) create mode 100644 src/profile-legacy/java/net/minecraft/nbt/CompoundTag.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java index 623bae4..de03860 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java @@ -29,6 +29,7 @@ protected boolean isValueValid(Map value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java index 41972ec..b00d4f7 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java @@ -29,10 +29,12 @@ protected boolean isValueValid(List value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java index 9f71186..a3b3885 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java @@ -21,10 +21,12 @@ protected boolean isValueValid(net.minecraft.class_2338 value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected net.minecraft.class_2338 load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java index dcd051b..1641870 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java @@ -27,10 +27,12 @@ protected boolean isValueValid(net.minecraft.class_2248 value) { return value != null && (filter == null || filter.test(value)); } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected net.minecraft.class_2248 load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java index 4ab054a..5a7d973 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java @@ -23,10 +23,12 @@ protected boolean isValueValid(Boolean value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected Boolean load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java index 0adf63a..54b0044 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java @@ -25,10 +25,12 @@ protected boolean isValueValid(List value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java index 828a945..d2983de 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java @@ -24,10 +24,12 @@ protected boolean isValueValid(SettingColor value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected SettingColor load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java index fe15018..fb50313 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java @@ -45,10 +45,12 @@ protected boolean isValueValid(Double value) { return value != null && value >= min && value <= max; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected Double load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java index d42434b..693fbe5 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java @@ -27,10 +27,12 @@ protected boolean isValueValid(Set value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected Set load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java index 9671f3e..b50f503 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java @@ -28,10 +28,12 @@ protected boolean isValueValid(Set value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected Set load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java index 2c0866b..96bd7fc 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java @@ -21,10 +21,12 @@ protected boolean isValueValid(T value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected T load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java index 06829e2..6f63638 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java @@ -21,10 +21,12 @@ protected boolean isValueValid(T value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected T load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java index 2fcbe09..50efbd5 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java @@ -44,10 +44,12 @@ protected boolean isValueValid(Integer value) { return value != null && value >= min && value <= max; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected Integer load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java index fa7bacb..e72a449 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java @@ -29,10 +29,12 @@ protected boolean isValueValid(List value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java index 512237c..a7e16f2 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java @@ -25,10 +25,12 @@ protected boolean isValueValid(net.minecraft.class_1792 value) { return value != null && (filter == null || filter.test(value)); } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected net.minecraft.class_1792 load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java index 6eca1a0..b2a3340 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java @@ -34,10 +34,12 @@ protected boolean isValueValid(Keybind value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected Keybind load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java index 9b70eed..69a2d22 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java @@ -29,6 +29,7 @@ protected boolean isValueValid(Set> value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java index ed37379..1aad8f6 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java @@ -24,10 +24,12 @@ protected boolean isValueValid(List value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/SettingGroup.java b/src/main/java/meteordevelopment/meteorclient/settings/SettingGroup.java index eff6370..b307a31 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/SettingGroup.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/SettingGroup.java @@ -53,7 +53,16 @@ public net.minecraft.class_2487 toTag() { return new net.minecraft.class_2487(); } + public net.minecraft.nbt.CompoundTag toTag(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + public SettingGroup fromTag(net.minecraft.class_2487 tag) { return this; } + + public SettingGroup fromTag(net.minecraft.nbt.CompoundTag tag) { + return this; + } } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Settings.java b/src/main/java/meteordevelopment/meteorclient/settings/Settings.java index 0e5d298..afaffd0 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/Settings.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/Settings.java @@ -119,7 +119,16 @@ public net.minecraft.class_2487 toTag() { return new net.minecraft.class_2487(); } + public net.minecraft.nbt.CompoundTag toTag(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + public Settings fromTag(net.minecraft.class_2487 tag) { return this; } + + public Settings fromTag(net.minecraft.nbt.CompoundTag tag) { + return this; + } } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java index e1c95b7..28ce996 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java @@ -24,10 +24,12 @@ protected boolean isValueValid(List value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java index dcdef29..e2f2024 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java @@ -25,10 +25,12 @@ protected boolean isValueValid(List value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java index 2cc6396..4c4fdbe 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java @@ -36,10 +36,12 @@ protected boolean isValueValid(String value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected String load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java index 3411ab9..6183b00 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java @@ -21,10 +21,12 @@ protected boolean isValueValid(org.joml.Vector3d value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected org.joml.Vector3d load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java deleted file mode 100644 index de9318f..0000000 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java +++ /dev/null @@ -1,8 +0,0 @@ -package meteordevelopment.meteorclient.utils.misc; - -/** - * Marker interface implemented by classes that round-trip to NBT in real Meteor. The parser does - * not exercise serialization, so the interface intentionally has no methods - subclasses keep - * their own profile-specific toTag/fromTag overloads as orphan methods. - */ -public interface ISerializable {} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/Setting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/Setting.java new file mode 100644 index 0000000..c1734c8 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/Setting.java @@ -0,0 +1,177 @@ +package meteordevelopment.meteorclient.settings; + +import com.cope.addonparser.util.NameUtils; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.function.Consumer; +import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.meteorclient.utils.misc.IGetter; +import meteordevelopment.meteorclient.utils.misc.ISerializable; + +public abstract class Setting implements IGetter, ISerializable { + private static final List NO_SUGGESTIONS = new ArrayList<>(0); + + public final String name; + public final String title; + public final String description; + private final IVisible visible; + + protected final T defaultValue; + protected T value; + + public final Consumer> onModuleActivated; + private final Consumer onChanged; + + public Module module; + public boolean lastWasVisible; + + public Setting( + String name, + String description, + T defaultValue, + Consumer onChanged, + Consumer> onModuleActivated, + IVisible visible) { + this.name = name; + this.title = NameUtils.nameToTitle(name); + this.description = description; + this.defaultValue = defaultValue; + this.onChanged = onChanged; + this.onModuleActivated = onModuleActivated; + this.visible = visible; + + resetImpl(); + } + + @Override + public T get() { + return value; + } + + public boolean set(T value) { + if (!isValueValid(value)) return false; + this.value = value; + onChanged(); + return true; + } + + protected void resetImpl() { + value = defaultValue; + } + + public void reset() { + resetImpl(); + onChanged(); + } + + public T getDefaultValue() { + return defaultValue; + } + + public boolean parse(String str) { + T newValue = parseImpl(str); + if (newValue != null && isValueValid(newValue)) { + value = newValue; + onChanged(); + } + return newValue != null; + } + + public boolean wasChanged() { + return !Objects.equals(value, defaultValue); + } + + public void onChanged() { + if (onChanged != null) onChanged.accept(value); + } + + public void onActivated() { + if (onModuleActivated != null) onModuleActivated.accept(this); + } + + public boolean isVisible() { + return visible == null || visible.isVisible(); + } + + protected abstract T parseImpl(String str); + + protected abstract boolean isValueValid(T value); + + public List getSuggestions() { + return NO_SUGGESTIONS; + } + + protected abstract net.minecraft.class_2487 save(net.minecraft.class_2487 tag); + + @Override + public net.minecraft.nbt.CompoundTag toTag() { + return new net.minecraft.nbt.CompoundTag(); + } + + protected abstract T load(net.minecraft.class_2487 tag); + + @Override + public T fromTag(net.minecraft.nbt.CompoundTag tag) { + onChanged(); + return value; + } + + public T fromTag(net.minecraft.class_2487 tag) { + T loaded = load(tag); + if (loaded != null) value = loaded; + onChanged(); + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @SuppressWarnings("unchecked") + public abstract static class SettingBuilder { + protected String name = "undefined"; + protected String description = ""; + protected V defaultValue; + protected IVisible visible; + protected Consumer onChanged; + protected Consumer> onModuleActivated; + + protected SettingBuilder(V defaultValue) { + this.defaultValue = defaultValue; + } + + public B name(String name) { + this.name = name; + return (B) this; + } + + public B description(String description) { + this.description = description; + return (B) this; + } + + public B defaultValue(V defaultValue) { + this.defaultValue = defaultValue; + return (B) this; + } + + public B visible(IVisible visible) { + this.visible = visible; + return (B) this; + } + + public B onChanged(java.util.function.Consumer onChanged) { + this.onChanged = onChanged; + return (B) this; + } + + public B onModuleActivated(java.util.function.Consumer> onModuleActivated) { + this.onModuleActivated = onModuleActivated; + return (B) this; + } + + public abstract S build(); + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java index 143f9f8..b1e5437 100644 --- a/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java @@ -28,10 +28,12 @@ protected boolean isValueValid(List> value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected List> load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java new file mode 100644 index 0000000..1f586a2 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java @@ -0,0 +1,7 @@ +package meteordevelopment.meteorclient.utils.misc; + +public interface ISerializable { + net.minecraft.nbt.CompoundTag toTag(); + + T fromTag(net.minecraft.nbt.CompoundTag tag); +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Keybind.java b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Keybind.java new file mode 100644 index 0000000..dde91c9 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Keybind.java @@ -0,0 +1,78 @@ +package meteordevelopment.meteorclient.utils.misc; + +public class Keybind implements ISerializable { + private boolean isKey; + private int value; + private int modifiers; + + public static Keybind none() { + return new Keybind(); + } + + public static Keybind fromKey(int key) { + Keybind bind = new Keybind(); + bind.isKey = true; + bind.value = key; + return bind; + } + + public static Keybind fromKeys(int key, int modifiers) { + Keybind bind = new Keybind(); + bind.isKey = true; + bind.value = key; + bind.modifiers = modifiers; + return bind; + } + + public boolean matches(boolean isKey, int value, int modifiers) { + return this.isKey == isKey && this.value == value && this.modifiers == modifiers; + } + + public boolean isPressed() { + return false; + } + + public boolean canBindTo(boolean isKey, int value, int modifiers) { + return true; + } + + public void set(boolean isKey, int value, int modifiers) { + this.isKey = isKey; + this.value = value; + this.modifiers = modifiers; + } + + public Keybind set(Keybind other) { + if (other == null) return this; + this.isKey = other.isKey; + this.value = other.value; + this.modifiers = other.modifiers; + return this; + } + + public Keybind copy() { + Keybind bind = new Keybind(); + bind.set(this); + return bind; + } + + @Override + public net.minecraft.nbt.CompoundTag toTag() { + return new net.minecraft.nbt.CompoundTag(); + } + + @Override + public Keybind fromTag(net.minecraft.nbt.CompoundTag tag) { + return this; + } + + public Keybind fromTag(net.minecraft.class_2487 tag) { + return this; + } + + @Override + public String toString() { + if (value == 0) return "None"; + return (isKey ? "Key:" : "Mouse:") + value; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Setting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/Setting.java similarity index 99% rename from src/main/java/meteordevelopment/meteorclient/settings/Setting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/Setting.java index eafc86d..b9b56e5 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/Setting.java +++ b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/Setting.java @@ -104,6 +104,7 @@ public List getSuggestions() { protected abstract net.minecraft.class_2487 save(net.minecraft.class_2487 tag); + @Override public net.minecraft.class_2487 toTag() { net.minecraft.class_2487 tag = new net.minecraft.class_2487(); return save(tag); @@ -111,6 +112,7 @@ public net.minecraft.class_2487 toTag() { protected abstract T load(net.minecraft.class_2487 tag); + @Override public T fromTag(net.minecraft.class_2487 tag) { T loaded = load(tag); if (loaded != null) value = loaded; diff --git a/src/profile-legacy/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java index bfa55bd..e82b58d 100644 --- a/src/profile-legacy/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java +++ b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java @@ -26,10 +26,12 @@ protected boolean isValueValid(List value) { return value != null; } + @Override protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { return tag; } + @Override protected List load(net.minecraft.class_2487 tag) { return value; } diff --git a/src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java b/src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java new file mode 100644 index 0000000..d048486 --- /dev/null +++ b/src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/ISerializable.java @@ -0,0 +1,7 @@ +package meteordevelopment.meteorclient.utils.misc; + +public interface ISerializable { + net.minecraft.class_2487 toTag(); + + T fromTag(net.minecraft.class_2487 tag); +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java b/src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/Keybind.java similarity index 98% rename from src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/Keybind.java index 4d0240f..9264029 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java +++ b/src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/Keybind.java @@ -56,10 +56,12 @@ public Keybind copy() { return bind; } + @Override public net.minecraft.class_2487 toTag() { return new net.minecraft.class_2487(); } + @Override public Keybind fromTag(net.minecraft.class_2487 tag) { return this; } diff --git a/src/profile-legacy/java/net/minecraft/nbt/CompoundTag.java b/src/profile-legacy/java/net/minecraft/nbt/CompoundTag.java new file mode 100644 index 0000000..5c6c288 --- /dev/null +++ b/src/profile-legacy/java/net/minecraft/nbt/CompoundTag.java @@ -0,0 +1,6 @@ +package net.minecraft.nbt; + +@SuppressWarnings("all") +public class CompoundTag { + public CompoundTag() {} +} From b60cfa541b0cec8dce309c43481424d5a2cd6ce7 Mon Sep 17 00:00:00 2001 From: GhostTypes <106415648+GhostTypes@users.noreply.github.com> Date: Sat, 2 May 2026 14:26:23 -0400 Subject: [PATCH 3/8] Run CI against 26x profile --- .github/workflows/ci.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d5aec64..41c82fe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,11 +41,11 @@ jobs: - name: Check out repository uses: actions/checkout@v4 - - name: Set up Java 21 + - name: Set up Java 25 uses: actions/setup-java@v4 with: distribution: temurin - java-version: "21" + java-version: "25" - name: Set up Gradle uses: gradle/actions/setup-gradle@v4 @@ -63,8 +63,13 @@ jobs: - name: Download latest release fixture jars run: gradle downloadLatestReleaseJars --no-daemon - - name: Run test suite - run: gradle test --no-daemon -PautoGenerateStubs + - name: Run 26x test suite + run: gradle test --no-daemon -PautoGenerateStubs -PparserProfile=26x + + - name: Generate 26x JSON output + run: > + gradle run --no-daemon -PparserProfile=26x + --args="--input fixtures/addons/jars --output output/poc-scan --summary output/poc-scan/summary.json --profile 26x" - name: Upload release summaries if: always() From 9a6f154ed43f0fff35c76272dd0118b6f8348b30 Mon Sep 17 00:00:00 2001 From: GhostTypes <106415648+GhostTypes@users.noreply.github.com> Date: Sat, 2 May 2026 14:27:45 -0400 Subject: [PATCH 4/8] Use Gradle 9 for Java 25 CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 41c82fe..5947b56 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: - name: Set up Gradle uses: gradle/actions/setup-gradle@v4 with: - gradle-version: "8.12.1" + gradle-version: "9.4.1" - name: Set up Python uses: actions/setup-python@v5 From 9a16cc1d8a7634a53d413a968384eb719df036da Mon Sep 17 00:00:00 2001 From: GhostTypes <106415648+GhostTypes@users.noreply.github.com> Date: Sat, 2 May 2026 14:50:40 -0400 Subject: [PATCH 5/8] Make 26x stub generation reproducible from clean state - StubGenerator: feed hand-written shim source dirs as exclusions, render nested-class references as Outer.Inner when outer is a manual shim. - Move legacy EntityTypeListSetting to profile-legacy and add 26x version using net.minecraft.world.entity.EntityType. - Add hand shim for WindowTabScreen and class_3417 in profile-26x, expand McpSchema with InitializeResult and ListToolsResult. --- build.gradle | 3 + .../modelcontextprotocol/spec/McpSchema.java | 4 + .../gui/tabs/WindowTabScreen.java | 10 +++ .../settings/EntityTypeListSetting.java | 75 +++++++++++++++++ .../java/net/minecraft/class_3417.java | 17 ++++ .../settings/EntityTypeListSetting.java | 0 .../cope/addonparser/tools/StubGenerator.java | 84 +++++++++++++++---- 7 files changed, 177 insertions(+), 16 deletions(-) create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/WindowTabScreen.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java create mode 100644 src/profile-26x/java/net/minecraft/class_3417.java rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java (100%) diff --git a/build.gradle b/build.gradle index edd5fcf..2fe1b66 100644 --- a/build.gradle +++ b/build.gradle @@ -83,11 +83,14 @@ tasks.register('generateStubs', JavaExec) { args '--input-dir', 'fixtures/addons/jars', '--output-dir', 'src/generated/java', '--manual-class-list', 'tools/manual_classes.txt', + '--manual-source-dirs', files('src/main/java', profileSourceDir).asPath, '--profile', parserProfile // Incremental support: declare inputs and outputs inputs.dir('fixtures/addons/jars') inputs.file('tools/manual_classes.txt') + inputs.dir('src/main/java') + inputs.dir(profileSourceDir) inputs.files(sourceSets.stubgen.output) outputs.dir('src/generated/java') } diff --git a/src/profile-26x/java/io/modelcontextprotocol/spec/McpSchema.java b/src/profile-26x/java/io/modelcontextprotocol/spec/McpSchema.java index 610f153..a2d2352 100644 --- a/src/profile-26x/java/io/modelcontextprotocol/spec/McpSchema.java +++ b/src/profile-26x/java/io/modelcontextprotocol/spec/McpSchema.java @@ -12,6 +12,10 @@ public interface Content {} public interface ResourceContents {} + public record InitializeResult(String protocolVersion, Object capabilities, Object serverInfo) {} + + public record ListToolsResult(List tools, String nextCursor) {} + public record TextContent(String type, String text, Map annotations) implements Content { public TextContent(String text) { diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/WindowTabScreen.java b/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/WindowTabScreen.java new file mode 100644 index 0000000..0ab9737 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/gui/tabs/WindowTabScreen.java @@ -0,0 +1,10 @@ +package meteordevelopment.meteorclient.gui.tabs; + +import meteordevelopment.meteorclient.gui.GuiTheme; + +@SuppressWarnings("all") +public abstract class WindowTabScreen extends TabScreen { + public WindowTabScreen(GuiTheme theme, Tab tab) { + super(theme, tab); + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java new file mode 100644 index 0000000..5c81cfe --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java @@ -0,0 +1,75 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.LinkedHashSet; +import java.util.Set; +import net.minecraft.world.entity.EntityType; + +public class EntityTypeListSetting extends Setting>> { + private boolean onlyAttackable; + + private EntityTypeListSetting( + String name, + String description, + Set> defaultValue, + java.util.function.Consumer>> onChanged, + java.util.function.Consumer>>> onModuleActivated, + IVisible visible, + boolean onlyAttackable) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.onlyAttackable = onlyAttackable; + } + + @Override + protected Set> parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(Set> value) { + return value != null; + } + + @Override + protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { + return tag; + } + + @Override + protected Set> load(net.minecraft.class_2487 tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder>, EntityTypeListSetting> { + private boolean onlyAttackable; + private java.util.function.Predicate> filter; + + public Builder() { + super(new LinkedHashSet<>()); + } + + @SuppressWarnings("unchecked") + public Builder defaultValue(EntityType... values) { + LinkedHashSet> set = new LinkedHashSet<>(); + for (EntityType value : values) set.add(value); + this.defaultValue = set; + return this; + } + + public Builder onlyAttackable() { + this.onlyAttackable = true; + return this; + } + + public Builder filter(java.util.function.Predicate> filter) { + this.filter = filter; + return this; + } + + @Override + public EntityTypeListSetting build() { + return new EntityTypeListSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible, onlyAttackable); + } + } +} diff --git a/src/profile-26x/java/net/minecraft/class_3417.java b/src/profile-26x/java/net/minecraft/class_3417.java new file mode 100644 index 0000000..0bfcf39 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/class_3417.java @@ -0,0 +1,17 @@ +package net.minecraft; + +import com.cope.addonparser.stubs.StubSupport; + +@SuppressWarnings({"all", "unchecked"}) +public class class_3417 { + public static class_3414 field_14561 = (class_3414) StubSupport.defaultValue(class_3414.class); + public static class_3414 field_14627 = (class_3414) StubSupport.defaultValue(class_3414.class); + public static class_3414 field_14641 = (class_3414) StubSupport.defaultValue(class_3414.class); + public static class_3414 field_14665 = (class_3414) StubSupport.defaultValue(class_3414.class); + public static class_3414 field_17265 = (class_3414) StubSupport.defaultValue(class_3414.class); + public static class_3414 field_26942 = (class_3414) StubSupport.defaultValue(class_3414.class); + public static class_3414 field_26972 = (class_3414) StubSupport.defaultValue(class_3414.class); + public static class_3414 field_26973 = (class_3414) StubSupport.defaultValue(class_3414.class); + + public class_3417() {} +} diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java diff --git a/src/stubgen/java/com/cope/addonparser/tools/StubGenerator.java b/src/stubgen/java/com/cope/addonparser/tools/StubGenerator.java index 372bab7..647bb51 100644 --- a/src/stubgen/java/com/cope/addonparser/tools/StubGenerator.java +++ b/src/stubgen/java/com/cope/addonparser/tools/StubGenerator.java @@ -1,5 +1,6 @@ package com.cope.addonparser.tools; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -49,7 +50,14 @@ public final class StubGenerator { "net/minecraft/class_6880", "net/minecraft/class_1269"); - private record Args(Path inputDir, Path outputDir, Path manualClassList, String profile) {} + private record Args( + Path inputDir, + Path outputDir, + Path manualClassList, + List manualSourceDirs, + String profile) {} + + private static Set currentManualClasses = Set.of(); private record ClassEntry(String internalName, byte[] bytes) {} @@ -132,7 +140,8 @@ public static void main(String[] argv) throws Exception { return; } - ManualClassConfig manual = loadManualClasses(args.manualClassList); + ManualClassConfig manual = loadManualClasses(args.manualClassList, args.manualSourceDirs); + currentManualClasses = manual.exactClasses; regenerateStubs(args.inputDir, args.outputDir, manual); } @@ -408,32 +417,57 @@ private static boolean shouldSkipClass( if ("module-info".equals(internalName) || internalName.endsWith("/module-info")) return true; if (definedInJars.contains(internalName)) return true; if (manualClasses.contains(internalName)) return true; + int nestedSeparator = internalName.indexOf('$'); + if (nestedSeparator > 0 && manualClasses.contains(internalName.substring(0, nestedSeparator))) { + return true; + } for (String prefix : manualPrefixes) { if (internalName.startsWith(prefix)) return true; } return false; } - private static ManualClassConfig loadManualClasses(Path path) { - if (path == null || !Files.exists(path)) return new ManualClassConfig(Set.of(), Set.of()); - + private static ManualClassConfig loadManualClasses(Path path, List sourceDirs) { Set exact = new HashSet<>(); Set prefixes = new HashSet<>(); - try { - for (String raw : Files.readAllLines(path, StandardCharsets.UTF_8)) { - String line = raw.trim(); - if (line.isEmpty() || line.startsWith("#")) continue; - String normalized = line.replace('.', '/'); - if (normalized.endsWith("*")) - prefixes.add(normalized.substring(0, normalized.length() - 1)); - else exact.add(normalized); + + if (path != null && Files.exists(path)) { + try { + for (String raw : Files.readAllLines(path, StandardCharsets.UTF_8)) { + String line = raw.trim(); + if (line.isEmpty() || line.startsWith("#")) continue; + String normalized = line.replace('.', '/'); + if (normalized.endsWith("*")) { + prefixes.add(normalized.substring(0, normalized.length() - 1)); + } else { + exact.add(normalized); + } + } + } catch (IOException e) { + // Config file missing or unreadable — keep source-dir exclusions. } - } catch (IOException e) { - // Config file missing or unreadable — return empty config } + + for (Path sourceDir : sourceDirs) addSourceClasses(sourceDir, exact); return new ManualClassConfig(exact, prefixes); } + private static void addSourceClasses(Path sourceDir, Set exact) { + if (sourceDir == null || !Files.isDirectory(sourceDir)) return; + try (var files = Files.walk(sourceDir)) { + files + .filter(path -> Files.isRegularFile(path) && path.getFileName().toString().endsWith(".java")) + .forEach( + path -> { + Path relative = sourceDir.relativize(path); + String name = relative.toString().replace(File.separatorChar, '/'); + exact.add(name.substring(0, name.length() - ".java".length())); + }); + } catch (IOException e) { + // Missing source exclusions only affect generated duplicate avoidance. + } + } + private static String renderStub(StubModel model) { String javaName = internalToJavaType(model.internalName); String pkg = ""; @@ -592,6 +626,13 @@ private static String renderParams(Type[] args) { } private static String internalToJavaType(String internalName) { + int dollarIdx = internalName.indexOf('$'); + if (dollarIdx > 0) { + String outer = internalName.substring(0, dollarIdx); + if (currentManualClasses.contains(outer)) { + return internalName.replace('/', '.').replace('$', '.'); + } + } return internalName.replace('/', '.'); } @@ -663,11 +704,22 @@ private static Args parseArgs(String[] args) { String input = values.get("--input-dir"); String output = values.get("--output-dir"); String manual = values.get("--manual-class-list"); + String manualSources = values.get("--manual-source-dirs"); String profile = values.getOrDefault("--profile", "26x"); if (input == null || output == null) return null; Path manualPath = manual == null ? null : Path.of(manual); - return new Args(Path.of(input), Path.of(output), manualPath, profile); + List manualSourceDirs = parsePathList(manualSources); + return new Args(Path.of(input), Path.of(output), manualPath, manualSourceDirs, profile); + } + + private static List parsePathList(String value) { + if (value == null || value.isBlank()) return List.of(); + List paths = new ArrayList<>(); + for (String entry : value.split(java.util.regex.Pattern.quote(File.pathSeparator))) { + if (!entry.isBlank()) paths.add(Path.of(entry)); + } + return paths; } private static void deleteRecursively(Path root) throws IOException { From a5f76063813ef9ea29316aa08d80c0ae0c756b35 Mon Sep 17 00:00:00 2001 From: GhostTypes <106415648+GhostTypes@users.noreply.github.com> Date: Sat, 2 May 2026 15:15:30 -0400 Subject: [PATCH 6/8] Finish 26x settings migration; remove Yarn from shared sources - Move all class_*-using Setting subclasses, Settings, SettingGroup, System, Names, SettingColor, and the class_2382 shim from src/main/java to src/profile-legacy/java. - Add Mojmap twins under src/profile-26x/java using CompoundTag, Block, Item, BlockPos, Holder, ResourceKey, SoundEvent, EntityType, Vec3i, Enchantment. - Setting (26x) now declares save/load against CompoundTag. - Add WindowScreen and Enchantment shims under profile-26x. - Remove meteor-villager-roller (1.21.11/Yarn) from the fixture set. src/main/java is now Yarn-free; 26x compiles clean against pure Mojmap fixtures. --- .../meteorclient/gui/WindowScreen.java | 22 +++ .../settings/BlockDataSetting.java | 62 +++++++++ .../settings/BlockListSetting.java | 66 +++++++++ .../settings/BlockPosSetting.java | 46 +++++++ .../meteorclient/settings/BlockSetting.java | 64 +++++++++ .../meteorclient/settings/BoolSetting.java | 47 +++++++ .../settings/ColorListSetting.java | 37 +++++ .../meteorclient/settings/ColorSetting.java | 58 ++++++++ .../meteorclient/settings/DoubleSetting.java | 129 +++++++++++++++++ .../settings/EnchantmentListSetting.java | 69 ++++++++++ .../settings/EntityTypeListSetting.java | 4 +- .../meteorclient/settings/EnumSetting.java | 45 ++++++ .../meteorclient/settings/GenericSetting.java | 45 ++++++ .../meteorclient/settings/IntSetting.java | 123 +++++++++++++++++ .../settings/ItemListSetting.java | 66 +++++++++ .../meteorclient/settings/ItemSetting.java | 57 ++++++++ .../meteorclient/settings/KeybindSetting.java | 58 ++++++++ .../settings/PacketListSetting.java | 60 ++++++++ .../settings/ScreenHandlerListSetting.java | 49 +++++++ .../meteorclient/settings/Setting.java | 11 +- .../meteorclient/settings/SettingGroup.java | 64 +++++++++ .../meteorclient/settings/Settings.java | 130 ++++++++++++++++++ .../settings/SoundEventListSetting.java | 56 ++++++++ .../settings/StatusEffectListSetting.java | 4 +- .../settings/StringListSetting.java | 59 ++++++++ .../meteorclient/settings/StringSetting.java | 94 +++++++++++++ .../settings/Vector3dSetting.java | 51 +++++++ .../meteorclient/systems/System.java | 29 ++++ .../meteorclient/utils/misc/Keybind.java | 4 - .../meteorclient/utils/misc/Names.java | 17 +++ .../utils/render/color/SettingColor.java | 54 ++++++++ .../java/net/minecraft/class_3417.java | 17 --- .../world/item/enchantment/Enchantment.java | 6 + .../settings/BlockDataSetting.java | 0 .../settings/BlockListSetting.java | 0 .../settings/BlockPosSetting.java | 0 .../meteorclient/settings/BlockSetting.java | 0 .../meteorclient/settings/BoolSetting.java | 0 .../settings/ColorListSetting.java | 0 .../meteorclient/settings/ColorSetting.java | 0 .../meteorclient/settings/DoubleSetting.java | 0 .../settings/EnchantmentListSetting.java | 0 .../meteorclient/settings/EnumSetting.java | 0 .../meteorclient/settings/GenericSetting.java | 0 .../meteorclient/settings/IntSetting.java | 0 .../settings/ItemListSetting.java | 0 .../meteorclient/settings/ItemSetting.java | 0 .../meteorclient/settings/KeybindSetting.java | 0 .../settings/PacketListSetting.java | 0 .../settings/ScreenHandlerListSetting.java | 0 .../meteorclient/settings/SettingGroup.java | 0 .../meteorclient/settings/Settings.java | 0 .../settings/SoundEventListSetting.java | 0 .../settings/StringListSetting.java | 0 .../meteorclient/settings/StringSetting.java | 0 .../settings/Vector3dSetting.java | 0 .../meteorclient/systems/System.java | 0 .../meteorclient/utils/misc/Names.java | 0 .../utils/render/color/SettingColor.java | 0 .../java/net/minecraft/class_2382.java | 0 tools/addon_repos.csv | 1 - 61 files changed, 1670 insertions(+), 34 deletions(-) create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/gui/WindowScreen.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockListSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/BoolSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/ColorListSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/ColorSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/DoubleSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/EnumSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/GenericSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/IntSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/ItemListSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/ItemSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/KeybindSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/PacketListSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/SettingGroup.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/Settings.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/StringListSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/StringSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/systems/System.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Names.java create mode 100644 src/profile-26x/java/meteordevelopment/meteorclient/utils/render/color/SettingColor.java delete mode 100644 src/profile-26x/java/net/minecraft/class_3417.java create mode 100644 src/profile-26x/java/net/minecraft/world/item/enchantment/Enchantment.java rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/BlockListSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/BlockSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/BoolSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/ColorListSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/ColorSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/DoubleSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/EnumSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/GenericSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/IntSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/ItemListSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/ItemSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/KeybindSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/PacketListSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/SettingGroup.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/Settings.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/StringListSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/StringSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/systems/System.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/utils/misc/Names.java (100%) rename src/{main => profile-legacy}/java/meteordevelopment/meteorclient/utils/render/color/SettingColor.java (100%) rename src/{main => profile-legacy}/java/net/minecraft/class_2382.java (100%) diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/gui/WindowScreen.java b/src/profile-26x/java/meteordevelopment/meteorclient/gui/WindowScreen.java new file mode 100644 index 0000000..e779b53 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/gui/WindowScreen.java @@ -0,0 +1,22 @@ +package meteordevelopment.meteorclient.gui; + +import meteordevelopment.meteorclient.gui.utils.Cell; +import meteordevelopment.meteorclient.gui.widgets.WWidget; +import net.minecraft.client.gui.screens.Screen; + +@SuppressWarnings("all") +public class WindowScreen extends Screen { + public WindowScreen() {} + + public WindowScreen(GuiTheme theme, String title) {} + + public Cell add(WWidget widget) { + return new Cell(); + } + + public void init() {} + + public void onClose() {} + + public void tick() {} +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java new file mode 100644 index 0000000..eca1da1 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java @@ -0,0 +1,62 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.HashMap; +import java.util.Map; +import meteordevelopment.meteorclient.utils.misc.IGetter; + +public class BlockDataSetting extends Setting> { + private final IGetter defaultData; + + private BlockDataSetting( + String name, + String description, + Map defaultValue, + java.util.function.Consumer> onChanged, + java.util.function.Consumer>> onModuleActivated, + IVisible visible, + IGetter defaultData) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.defaultData = defaultData; + } + + @Override + protected Map parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(Map value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected Map load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder< + Builder, Map, BlockDataSetting> { + private IGetter defaultData; + + public Builder() { + super(new HashMap<>()); + } + + public Builder defaultData(IGetter getter) { + this.defaultData = getter; + return this; + } + + @Override + public BlockDataSetting build() { + return new BlockDataSetting<>( + name, description, defaultValue, onChanged, onModuleActivated, visible, defaultData); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockListSetting.java new file mode 100644 index 0000000..5d50891 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockListSetting.java @@ -0,0 +1,66 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class BlockListSetting extends Setting> { + private java.util.function.Predicate filter; + + private BlockListSetting( + String name, + String description, + List defaultValue, + java.util.function.Consumer> onChanged, + java.util.function.Consumer>> onModuleActivated, + IVisible visible, + java.util.function.Predicate filter) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.filter = filter; + } + + @Override + protected List parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(List value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected List load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder, BlockListSetting> { + private java.util.function.Predicate filter; + + public Builder() { + super(new ArrayList<>()); + } + + public Builder defaultValue(net.minecraft.world.level.block.Block... blocks) { + this.defaultValue = new ArrayList<>(Arrays.asList(blocks)); + return this; + } + + public Builder filter(java.util.function.Predicate filter) { + this.filter = filter; + return this; + } + + @Override + public BlockListSetting build() { + return new BlockListSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible, filter); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java new file mode 100644 index 0000000..9de4e06 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java @@ -0,0 +1,46 @@ +package meteordevelopment.meteorclient.settings; + +public class BlockPosSetting extends Setting { + private BlockPosSetting( + String name, + String description, + net.minecraft.core.BlockPos defaultValue, + java.util.function.Consumer onChanged, + java.util.function.Consumer> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected net.minecraft.core.BlockPos parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(net.minecraft.core.BlockPos value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected net.minecraft.core.BlockPos load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder { + public Builder() { + super(new net.minecraft.core.BlockPos()); + } + + @Override + public BlockPosSetting build() { + return new BlockPosSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockSetting.java new file mode 100644 index 0000000..b5fede1 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BlockSetting.java @@ -0,0 +1,64 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.function.Consumer; + +public class BlockSetting extends Setting { + private java.util.function.Predicate filter; + + private BlockSetting( + String name, + String description, + net.minecraft.world.level.block.Block defaultValue, + Consumer onChanged, + Consumer> onModuleActivated, + IVisible visible, + java.util.function.Predicate filter) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.filter = filter; + } + + @Override + protected net.minecraft.world.level.block.Block parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(net.minecraft.world.level.block.Block value) { + return value != null && (filter == null || filter.test(value)); + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected net.minecraft.world.level.block.Block load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends SettingBuilder { + private java.util.function.Predicate filter; + + public Builder() { + super(null); + } + + public Builder defaultValue(net.minecraft.world.level.block.Block block) { + this.defaultValue = block; + return this; + } + + public Builder filter(java.util.function.Predicate filter) { + this.filter = filter; + return this; + } + + @Override + public BlockSetting build() { + return new BlockSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible, filter); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/BoolSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BoolSetting.java new file mode 100644 index 0000000..d948ad9 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/BoolSetting.java @@ -0,0 +1,47 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.function.Consumer; + +public class BoolSetting extends Setting { + private BoolSetting( + String name, + String description, + Boolean defaultValue, + Consumer onChanged, + Consumer> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected Boolean parseImpl(String str) { + return Boolean.parseBoolean(str); + } + + @Override + protected boolean isValueValid(Boolean value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected Boolean load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder extends Setting.SettingBuilder { + public Builder() { + super(false); + } + + @Override + public BoolSetting build() { + return new BoolSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/ColorListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ColorListSetting.java new file mode 100644 index 0000000..977b56d --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ColorListSetting.java @@ -0,0 +1,37 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.ArrayList; +import java.util.List; +import meteordevelopment.meteorclient.utils.render.color.SettingColor; + +public class ColorListSetting extends Setting> { + public ColorListSetting( + String name, + String description, + List defaultValue, + java.util.function.Consumer> onChanged, + java.util.function.Consumer>> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected List parseImpl(String str) { + return new ArrayList<>(); + } + + @Override + protected boolean isValueValid(List value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected List load(net.minecraft.nbt.CompoundTag tag) { + return value; + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/ColorSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ColorSetting.java new file mode 100644 index 0000000..3f2f442 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ColorSetting.java @@ -0,0 +1,58 @@ +package meteordevelopment.meteorclient.settings; + +import meteordevelopment.meteorclient.utils.render.color.Color; +import meteordevelopment.meteorclient.utils.render.color.SettingColor; + +public class ColorSetting extends Setting { + private ColorSetting( + String name, + String description, + SettingColor defaultValue, + java.util.function.Consumer onChanged, + java.util.function.Consumer> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected SettingColor parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(SettingColor value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected SettingColor load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder extends Setting.SettingBuilder { + public Builder() { + super(new SettingColor(255, 255, 255, 255)); + } + + public Builder defaultValue(Color color) { + this.defaultValue = new SettingColor(color.r, color.g, color.b, color.a); + return this; + } + + public Builder defaultValue(SettingColor color) { + this.defaultValue = color; + return this; + } + + @Override + public ColorSetting build() { + return new ColorSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/DoubleSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/DoubleSetting.java new file mode 100644 index 0000000..bf6813e --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/DoubleSetting.java @@ -0,0 +1,129 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.function.Consumer; + +public class DoubleSetting extends Setting { + public double min; + public double max; + public double sliderMin; + public double sliderMax; + public boolean noSlider; + public int decimalPlaces = 3; + + private DoubleSetting( + String name, + String description, + Double defaultValue, + Consumer onChanged, + Consumer> onModuleActivated, + IVisible visible, + double min, + double max, + double sliderMin, + double sliderMax, + boolean noSlider) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.min = min; + this.max = max; + this.sliderMin = sliderMin; + this.sliderMax = sliderMax; + this.noSlider = noSlider; + } + + @Override + protected Double parseImpl(String str) { + try { + return Double.parseDouble(str); + } catch (NumberFormatException e) { + // Invalid double string - return null to indicate parse failure + return null; + } + } + + @Override + protected boolean isValueValid(Double value) { + return value != null && value >= min && value <= max; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected Double load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder extends Setting.SettingBuilder { + private double min = -Double.MAX_VALUE; + private double max = Double.MAX_VALUE; + private double sliderMin; + private double sliderMax; + private boolean noSlider; + + public Builder() { + super(0.0d); + } + + public Builder defaultValue(double value) { + this.defaultValue = value; + return this; + } + + public Builder min(double min) { + this.min = min; + return this; + } + + public Builder max(double max) { + this.max = max; + return this; + } + + public Builder range(double min, double max) { + this.min = min; + this.max = max; + return this; + } + + public Builder sliderMin(double sliderMin) { + this.sliderMin = sliderMin; + return this; + } + + public Builder sliderMax(double sliderMax) { + this.sliderMax = sliderMax; + return this; + } + + public Builder sliderRange(double sliderMin, double sliderMax) { + this.sliderMin = sliderMin; + this.sliderMax = sliderMax; + return this; + } + + public Builder noSlider() { + this.noSlider = true; + return this; + } + + @Override + public DoubleSetting build() { + double actualSliderMin = sliderMin == 0.0d ? min : sliderMin; + double actualSliderMax = sliderMax == 0.0d ? max : sliderMax; + return new DoubleSetting( + name, + description, + defaultValue, + onChanged, + onModuleActivated, + visible, + min, + max, + actualSliderMin, + actualSliderMax, + noSlider); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java new file mode 100644 index 0000000..ae2eef3 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java @@ -0,0 +1,69 @@ +package meteordevelopment.meteorclient.settings; + +import com.cope.addonparser.stubs.StubSupport; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.function.Consumer; + +public class EnchantmentListSetting extends Setting> { + private EnchantmentListSetting( + String name, + String description, + Set defaultValue, + Consumer> onChanged, + Consumer>> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected Set parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(Set value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected Set load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends SettingBuilder, EnchantmentListSetting> { + public Builder() { + super(new LinkedHashSet<>()); + } + + public Builder defaultValue(net.minecraft.resources.ResourceKey... enchantments) { + this.defaultValue = new LinkedHashSet<>(Arrays.asList(enchantments)); + return this; + } + + public Builder defaultValue(net.minecraft.world.item.enchantment.Enchantment... enchantments) { + LinkedHashSet keys = new LinkedHashSet<>(); + if (enchantments != null) { + for (net.minecraft.world.item.enchantment.Enchantment ignored : enchantments) { + keys.add( + (net.minecraft.resources.ResourceKey) StubSupport.defaultValue(net.minecraft.resources.ResourceKey.class)); + } + } + this.defaultValue = keys; + return this; + } + + @Override + public EnchantmentListSetting build() { + return new EnchantmentListSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java index 5c81cfe..6e03c3a 100644 --- a/src/profile-26x/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java @@ -30,12 +30,12 @@ protected boolean isValueValid(Set> value) { } @Override - protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { return tag; } @Override - protected Set> load(net.minecraft.class_2487 tag) { + protected Set> load(net.minecraft.nbt.CompoundTag tag) { return value; } diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/EnumSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/EnumSetting.java new file mode 100644 index 0000000..eb6009a --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/EnumSetting.java @@ -0,0 +1,45 @@ +package meteordevelopment.meteorclient.settings; + +public class EnumSetting extends Setting { + private EnumSetting( + String name, + String description, + T defaultValue, + java.util.function.Consumer onChanged, + java.util.function.Consumer> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected T parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(T value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected T load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder extends Setting.SettingBuilder, T, EnumSetting> { + public Builder() { + super(null); + } + + @Override + public EnumSetting build() { + return new EnumSetting<>( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/GenericSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/GenericSetting.java new file mode 100644 index 0000000..84cdead --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/GenericSetting.java @@ -0,0 +1,45 @@ +package meteordevelopment.meteorclient.settings; + +public class GenericSetting extends Setting { + private GenericSetting( + String name, + String description, + T defaultValue, + java.util.function.Consumer onChanged, + java.util.function.Consumer> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected T parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(T value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected T load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder extends Setting.SettingBuilder, T, GenericSetting> { + public Builder() { + super(null); + } + + @Override + public GenericSetting build() { + return new GenericSetting<>( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/IntSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/IntSetting.java new file mode 100644 index 0000000..6a9e6b7 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/IntSetting.java @@ -0,0 +1,123 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.function.Consumer; + +public class IntSetting extends Setting { + public int min; + public int max; + public int sliderMin; + public int sliderMax; + public boolean noSlider; + + private IntSetting( + String name, + String description, + Integer defaultValue, + Consumer onChanged, + Consumer> onModuleActivated, + IVisible visible, + int min, + int max, + int sliderMin, + int sliderMax, + boolean noSlider) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.min = min; + this.max = max; + this.sliderMin = sliderMin; + this.sliderMax = sliderMax; + this.noSlider = noSlider; + } + + @Override + protected Integer parseImpl(String str) { + try { + return Integer.parseInt(str); + } catch (NumberFormatException e) { + // Invalid integer string - return null to indicate parse failure + return null; + } + } + + @Override + protected boolean isValueValid(Integer value) { + return value != null && value >= min && value <= max; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected Integer load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder extends Setting.SettingBuilder { + private int min = Integer.MIN_VALUE; + private int max = Integer.MAX_VALUE; + private int sliderMin = 0; + private int sliderMax = 0; + private boolean noSlider; + + public Builder() { + super(0); + } + + public Builder min(int min) { + this.min = min; + return this; + } + + public Builder max(int max) { + this.max = max; + return this; + } + + public Builder range(int min, int max) { + this.min = min; + this.max = max; + return this; + } + + public Builder sliderMax(int sliderMax) { + this.sliderMax = sliderMax; + return this; + } + + public Builder sliderMin(int sliderMin) { + this.sliderMin = sliderMin; + return this; + } + + public Builder sliderRange(int sliderMin, int sliderMax) { + this.sliderMin = sliderMin; + this.sliderMax = sliderMax; + return this; + } + + public Builder noSlider() { + this.noSlider = true; + return this; + } + + @Override + public IntSetting build() { + int actualSliderMin = sliderMin == 0 ? min : sliderMin; + int actualSliderMax = sliderMax == 0 ? max : sliderMax; + return new IntSetting( + name, + description, + defaultValue, + onChanged, + onModuleActivated, + visible, + min, + max, + actualSliderMin, + actualSliderMax, + noSlider); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/ItemListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ItemListSetting.java new file mode 100644 index 0000000..0065573 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ItemListSetting.java @@ -0,0 +1,66 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ItemListSetting extends Setting> { + private java.util.function.Predicate filter; + + private ItemListSetting( + String name, + String description, + List defaultValue, + java.util.function.Consumer> onChanged, + java.util.function.Consumer>> onModuleActivated, + IVisible visible, + java.util.function.Predicate filter) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.filter = filter; + } + + @Override + protected List parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(List value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected List load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder, ItemListSetting> { + private java.util.function.Predicate filter; + + public Builder() { + super(new ArrayList<>()); + } + + public Builder defaultValue(net.minecraft.world.item.Item... items) { + this.defaultValue = new ArrayList<>(Arrays.asList(items)); + return this; + } + + public Builder filter(java.util.function.Predicate filter) { + this.filter = filter; + return this; + } + + @Override + public ItemListSetting build() { + return new ItemListSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible, filter); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/ItemSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ItemSetting.java new file mode 100644 index 0000000..623aaa7 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ItemSetting.java @@ -0,0 +1,57 @@ +package meteordevelopment.meteorclient.settings; + +public class ItemSetting extends Setting { + private java.util.function.Predicate filter; + + private ItemSetting( + String name, + String description, + net.minecraft.world.item.Item defaultValue, + java.util.function.Consumer onChanged, + java.util.function.Consumer> onModuleActivated, + IVisible visible, + java.util.function.Predicate filter) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.filter = filter; + } + + @Override + protected net.minecraft.world.item.Item parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(net.minecraft.world.item.Item value) { + return value != null && (filter == null || filter.test(value)); + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected net.minecraft.world.item.Item load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder { + private java.util.function.Predicate filter; + + public Builder() { + super(new net.minecraft.world.item.Item()); + } + + public Builder filter(java.util.function.Predicate filter) { + this.filter = filter; + return this; + } + + @Override + public ItemSetting build() { + return new ItemSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible, filter); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/KeybindSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/KeybindSetting.java new file mode 100644 index 0000000..ca5c3ac --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/KeybindSetting.java @@ -0,0 +1,58 @@ +package meteordevelopment.meteorclient.settings; + +import meteordevelopment.meteorclient.utils.misc.Keybind; + +public class KeybindSetting extends Setting { + public KeybindSetting( + String name, + String description, + Keybind defaultValue, + java.util.function.Consumer onChanged, + java.util.function.Consumer> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + public KeybindSetting( + String name, + String description, + Keybind defaultValue, + java.util.function.Consumer onChanged, + java.util.function.Consumer> onModuleActivated, + IVisible visible, + Runnable onAction) { + this(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected Keybind parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(Keybind value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected Keybind load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder extends Setting.SettingBuilder { + public Builder() { + super(Keybind.none()); + } + + @Override + public KeybindSetting build() { + return new KeybindSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/PacketListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/PacketListSetting.java new file mode 100644 index 0000000..3a9adee --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/PacketListSetting.java @@ -0,0 +1,60 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.function.Consumer; + +public class PacketListSetting extends Setting>> { + private java.util.function.Predicate> filter; + + private PacketListSetting( + String name, + String description, + Set> defaultValue, + Consumer>> onChanged, + Consumer>>> onModuleActivated, + IVisible visible, + java.util.function.Predicate> filter) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.filter = filter; + } + + @Override + protected Set> parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(Set> value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected Set> load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder extends SettingBuilder>, PacketListSetting> { + private java.util.function.Predicate> filter; + + public Builder() { + super(new LinkedHashSet<>()); + } + + public Builder filter(java.util.function.Predicate> filter) { + this.filter = filter; + return this; + } + + @Override + public PacketListSetting build() { + return new PacketListSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible, filter); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java new file mode 100644 index 0000000..8ae4c73 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java @@ -0,0 +1,49 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.ArrayList; +import java.util.List; + +public class ScreenHandlerListSetting extends Setting> { + private ScreenHandlerListSetting( + String name, + String description, + List defaultValue, + java.util.function.Consumer> onChanged, + java.util.function.Consumer>> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected List parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(List value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected List load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder, ScreenHandlerListSetting> { + public Builder() { + super(new ArrayList<>()); + } + + @Override + public ScreenHandlerListSetting build() { + return new ScreenHandlerListSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/Setting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/Setting.java index c1734c8..9a57ae1 100644 --- a/src/profile-26x/java/meteordevelopment/meteorclient/settings/Setting.java +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/Setting.java @@ -102,22 +102,17 @@ public List getSuggestions() { return NO_SUGGESTIONS; } - protected abstract net.minecraft.class_2487 save(net.minecraft.class_2487 tag); + protected abstract net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag); @Override public net.minecraft.nbt.CompoundTag toTag() { - return new net.minecraft.nbt.CompoundTag(); + return save(new net.minecraft.nbt.CompoundTag()); } - protected abstract T load(net.minecraft.class_2487 tag); + protected abstract T load(net.minecraft.nbt.CompoundTag tag); @Override public T fromTag(net.minecraft.nbt.CompoundTag tag) { - onChanged(); - return value; - } - - public T fromTag(net.minecraft.class_2487 tag) { T loaded = load(tag); if (loaded != null) value = loaded; onChanged(); diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/SettingGroup.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/SettingGroup.java new file mode 100644 index 0000000..9676388 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/SettingGroup.java @@ -0,0 +1,64 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.function.Consumer; + +public class SettingGroup implements Iterable> { + public final String name; + public boolean sectionExpanded; + + final List> settings = new ArrayList<>(1); + + SettingGroup(String name, boolean sectionExpanded) { + this.name = name; + this.sectionExpanded = sectionExpanded; + } + + public Setting get(String name) { + for (Setting setting : this) { + if (setting.name.equals(name)) return setting; + } + return null; + } + + public > T add(T setting) { + settings.add(setting); + return setting; + } + + public Setting getByIndex(int index) { + return settings.get(index); + } + + public boolean wasChanged() { + for (Setting setting : settings) { + if (setting.wasChanged()) return true; + } + return false; + } + + @Override + public Iterator> iterator() { + return settings.iterator(); + } + + @Override + public void forEach(Consumer> action) { + settings.forEach(action); + } + + public net.minecraft.nbt.CompoundTag toTag() { + return new net.minecraft.nbt.CompoundTag(); + } + + public net.minecraft.nbt.CompoundTag toTag(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + + public SettingGroup fromTag(net.minecraft.nbt.CompoundTag tag) { + return this; + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/Settings.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/Settings.java new file mode 100644 index 0000000..b720135 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/Settings.java @@ -0,0 +1,130 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.function.Consumer; +import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.meteorclient.utils.render.color.RainbowColors; +import meteordevelopment.meteorclient.utils.render.color.SettingColor; + +public class Settings implements Iterable { + private SettingGroup defaultGroup; + + public final List groups = new ArrayList<>(1); + + public void onActivated() { + for (SettingGroup group : groups) { + for (Setting setting : group) { + setting.onActivated(); + } + } + } + + public Setting get(String name) { + for (SettingGroup sg : this) { + for (Setting setting : sg) { + if (name.equalsIgnoreCase(setting.name)) return setting; + } + } + return null; + } + + @SuppressWarnings("unchecked") + public Setting get(String name, Class tClass) { + for (SettingGroup sg : this) { + for (Setting setting : sg) { + Object dv = setting.getDefaultValue(); + if (dv != null && name.equalsIgnoreCase(setting.name) && tClass.equals(dv.getClass())) { + return (Setting) setting; + } + } + } + return null; + } + + public void reset() { + for (SettingGroup group : groups) { + for (Setting setting : group) { + setting.reset(); + } + } + } + + public SettingGroup getGroup(String name) { + for (SettingGroup sg : this) { + if (sg.name.equals(name)) return sg; + } + return null; + } + + public SettingGroup getDefaultGroup() { + if (defaultGroup == null) defaultGroup = createGroup("General"); + return defaultGroup; + } + + public SettingGroup createGroup(String name, boolean expanded) { + SettingGroup group = new SettingGroup(name, expanded); + groups.add(group); + return group; + } + + public SettingGroup createGroup(String name) { + return createGroup(name, true); + } + + @SuppressWarnings("unchecked") + public void registerColorSettings(Module module) { + for (SettingGroup group : this) { + for (Setting setting : group) { + setting.module = module; + + if (setting instanceof ColorSetting) { + RainbowColors.addSetting((Setting) setting); + } else if (setting instanceof ColorListSetting) { + RainbowColors.addSettingList((Setting>) setting); + } + } + } + } + + @SuppressWarnings("unchecked") + public void unregisterColorSettings() { + for (SettingGroup group : this) { + for (Setting setting : group) { + if (setting instanceof ColorSetting) { + RainbowColors.removeSetting((Setting) setting); + } else if (setting instanceof ColorListSetting) { + RainbowColors.removeSettingList((Setting>) setting); + } + } + } + } + + public void tick( + meteordevelopment.meteorclient.gui.widgets.containers.WContainer settings, + meteordevelopment.meteorclient.gui.GuiTheme theme) {} + + @Override + public Iterator iterator() { + return groups.iterator(); + } + + @Override + public void forEach(Consumer action) { + groups.forEach(action); + } + + public net.minecraft.nbt.CompoundTag toTag() { + return new net.minecraft.nbt.CompoundTag(); + } + + public net.minecraft.nbt.CompoundTag toTag(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + + public Settings fromTag(net.minecraft.nbt.CompoundTag tag) { + return this; + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java new file mode 100644 index 0000000..52d9157 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java @@ -0,0 +1,56 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.ArrayList; +import java.util.List; + +public class SoundEventListSetting extends Setting> { + private SoundEventListSetting( + String name, + String description, + List defaultValue, + java.util.function.Consumer> onChanged, + java.util.function.Consumer>> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected List parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(List value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected List load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder< + Builder, List, SoundEventListSetting> { + public Builder() { + super(new ArrayList<>()); + } + + public Builder defaultValue(net.minecraft.sounds.SoundEvent... values) { + this.defaultValue = + values == null ? new ArrayList<>() : new ArrayList<>(java.util.Arrays.asList(values)); + return this; + } + + @Override + public SoundEventListSetting build() { + return new SoundEventListSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java index b1e5437..78a60f3 100644 --- a/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java @@ -29,12 +29,12 @@ protected boolean isValueValid(List> value) { } @Override - protected net.minecraft.class_2487 save(net.minecraft.class_2487 tag) { + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { return tag; } @Override - protected List> load(net.minecraft.class_2487 tag) { + protected List> load(net.minecraft.nbt.CompoundTag tag) { return value; } diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/StringListSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StringListSetting.java new file mode 100644 index 0000000..57342a3 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StringListSetting.java @@ -0,0 +1,59 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class StringListSetting extends Setting> { + private StringListSetting( + String name, + String description, + List defaultValue, + java.util.function.Consumer> onChanged, + java.util.function.Consumer>> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected List parseImpl(String str) { + return new ArrayList<>(Arrays.asList(str.split(","))); + } + + @Override + protected boolean isValueValid(List value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected List load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder, StringListSetting> { + public Builder() { + super(new ArrayList<>()); + } + + public Builder defaultValue(String... values) { + this.defaultValue = new ArrayList<>(Arrays.asList(values)); + return this; + } + + public Builder renderer(Class renderer) { + return this; + } + + @Override + public StringListSetting build() { + return new StringListSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/StringSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StringSetting.java new file mode 100644 index 0000000..ee50da5 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/StringSetting.java @@ -0,0 +1,94 @@ +package meteordevelopment.meteorclient.settings; + +import java.util.function.Consumer; + +public class StringSetting extends Setting { + public String placeholder; + public Class renderer; + public boolean wide; + public meteordevelopment.meteorclient.gui.utils.CharFilter filter; + + private StringSetting( + String name, + String description, + String defaultValue, + Consumer onChanged, + Consumer> onModuleActivated, + IVisible visible, + String placeholder, + Class renderer, + boolean wide, + meteordevelopment.meteorclient.gui.utils.CharFilter filter) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.placeholder = placeholder; + this.renderer = renderer; + this.wide = wide; + this.filter = filter; + } + + @Override + protected String parseImpl(String str) { + return str; + } + + @Override + protected boolean isValueValid(String value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected String load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder extends Setting.SettingBuilder { + private String placeholder; + private Class renderer; + private boolean wide; + private meteordevelopment.meteorclient.gui.utils.CharFilter filter; + + public Builder() { + super(""); + } + + public Builder placeholder(String placeholder) { + this.placeholder = placeholder; + return this; + } + + public Builder renderer(Class renderer) { + this.renderer = renderer; + return this; + } + + public Builder wide() { + this.wide = true; + return this; + } + + public Builder filter(meteordevelopment.meteorclient.gui.utils.CharFilter filter) { + this.filter = filter; + return this; + } + + @Override + public StringSetting build() { + return new StringSetting( + name, + description, + defaultValue, + onChanged, + onModuleActivated, + visible, + placeholder, + renderer, + wide, + filter); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java b/src/profile-26x/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java new file mode 100644 index 0000000..894553c --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java @@ -0,0 +1,51 @@ +package meteordevelopment.meteorclient.settings; + +public class Vector3dSetting extends Setting { + private Vector3dSetting( + String name, + String description, + org.joml.Vector3d defaultValue, + java.util.function.Consumer onChanged, + java.util.function.Consumer> onModuleActivated, + IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + } + + @Override + protected org.joml.Vector3d parseImpl(String str) { + return value; + } + + @Override + protected boolean isValueValid(org.joml.Vector3d value) { + return value != null; + } + + @Override + protected net.minecraft.nbt.CompoundTag save(net.minecraft.nbt.CompoundTag tag) { + return tag; + } + + @Override + protected org.joml.Vector3d load(net.minecraft.nbt.CompoundTag tag) { + return value; + } + + public static class Builder + extends Setting.SettingBuilder { + public Builder() { + super(new org.joml.Vector3d()); + } + + public Builder defaultValue(org.joml.Vector3d value) { + this.defaultValue = value; + return this; + } + + @Override + public Vector3dSetting build() { + return new Vector3dSetting( + name, description, defaultValue, onChanged, onModuleActivated, visible); + } + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/systems/System.java b/src/profile-26x/java/meteordevelopment/meteorclient/systems/System.java new file mode 100644 index 0000000..2a314e1 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/systems/System.java @@ -0,0 +1,29 @@ +package meteordevelopment.meteorclient.systems; + +public class System> { + public final String name; + + public final meteordevelopment.meteorclient.settings.Settings settings = + new meteordevelopment.meteorclient.settings.Settings(); + + public System(String name) { + this.name = name; + } + + public void init() {} + + public void load(java.io.File folder) {} + + public void save() {} + + public void save(java.io.File folder) {} + + public net.minecraft.nbt.CompoundTag toTag() { + return new net.minecraft.nbt.CompoundTag(); + } + + @SuppressWarnings("unchecked") + public T fromTag(net.minecraft.nbt.CompoundTag tag) { + return (T) this; + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Keybind.java b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Keybind.java index dde91c9..981a701 100644 --- a/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Keybind.java +++ b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Keybind.java @@ -66,10 +66,6 @@ public Keybind fromTag(net.minecraft.nbt.CompoundTag tag) { return this; } - public Keybind fromTag(net.minecraft.class_2487 tag) { - return this; - } - @Override public String toString() { if (value == 0) return "None"; diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Names.java b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Names.java new file mode 100644 index 0000000..7f2d778 --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/utils/misc/Names.java @@ -0,0 +1,17 @@ +package meteordevelopment.meteorclient.utils.misc; + +public final class Names { + private Names() {} + + public static String get(net.minecraft.world.item.Item item) { + return String.valueOf(item); + } + + public static String get(net.minecraft.world.level.block.Block block) { + return String.valueOf(block); + } + + public static String get(net.minecraft.core.Holder sound) { + return String.valueOf(sound); + } +} diff --git a/src/profile-26x/java/meteordevelopment/meteorclient/utils/render/color/SettingColor.java b/src/profile-26x/java/meteordevelopment/meteorclient/utils/render/color/SettingColor.java new file mode 100644 index 0000000..4ecbe8b --- /dev/null +++ b/src/profile-26x/java/meteordevelopment/meteorclient/utils/render/color/SettingColor.java @@ -0,0 +1,54 @@ +package meteordevelopment.meteorclient.utils.render.color; + +public class SettingColor extends Color { + public boolean rainbow; + + public SettingColor(int r, int g, int b) { + super(r, g, b); + } + + public SettingColor(int r, int g, int b, int a) { + super(r, g, b, a); + } + + public SettingColor(int r, int g, int b, int a, boolean rainbow) { + super(r, g, b, a); + this.rainbow = rainbow; + } + + public SettingColor(int r, int g, int b, boolean rainbow) { + super(r, g, b); + this.rainbow = rainbow; + } + + public SettingColor(SettingColor other) { + super(other); + this.rainbow = other.rainbow; + } + + public SettingColor set(Color other) { + if (other == null) return this; + this.r = other.r; + this.g = other.g; + this.b = other.b; + this.a = other.a; + return this; + } + + public void validate() { + r = Math.max(0, Math.min(255, r)); + g = Math.max(0, Math.min(255, g)); + b = Math.max(0, Math.min(255, b)); + a = Math.max(0, Math.min(255, a)); + } + + public void update() {} + + public net.minecraft.nbt.CompoundTag toTag() { + return new net.minecraft.nbt.CompoundTag(); + } + + public SettingColor fromTag(net.minecraft.nbt.CompoundTag tag) { + return this; + } +} diff --git a/src/profile-26x/java/net/minecraft/class_3417.java b/src/profile-26x/java/net/minecraft/class_3417.java deleted file mode 100644 index 0bfcf39..0000000 --- a/src/profile-26x/java/net/minecraft/class_3417.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minecraft; - -import com.cope.addonparser.stubs.StubSupport; - -@SuppressWarnings({"all", "unchecked"}) -public class class_3417 { - public static class_3414 field_14561 = (class_3414) StubSupport.defaultValue(class_3414.class); - public static class_3414 field_14627 = (class_3414) StubSupport.defaultValue(class_3414.class); - public static class_3414 field_14641 = (class_3414) StubSupport.defaultValue(class_3414.class); - public static class_3414 field_14665 = (class_3414) StubSupport.defaultValue(class_3414.class); - public static class_3414 field_17265 = (class_3414) StubSupport.defaultValue(class_3414.class); - public static class_3414 field_26942 = (class_3414) StubSupport.defaultValue(class_3414.class); - public static class_3414 field_26972 = (class_3414) StubSupport.defaultValue(class_3414.class); - public static class_3414 field_26973 = (class_3414) StubSupport.defaultValue(class_3414.class); - - public class_3417() {} -} diff --git a/src/profile-26x/java/net/minecraft/world/item/enchantment/Enchantment.java b/src/profile-26x/java/net/minecraft/world/item/enchantment/Enchantment.java new file mode 100644 index 0000000..44d9a07 --- /dev/null +++ b/src/profile-26x/java/net/minecraft/world/item/enchantment/Enchantment.java @@ -0,0 +1,6 @@ +package net.minecraft.world.item.enchantment; + +@SuppressWarnings("all") +public class Enchantment { + public Enchantment() {} +} diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/BlockDataSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/BlockListSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/BlockListSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/BlockPosSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/BlockSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/BlockSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/BoolSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/BoolSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/ColorListSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/ColorListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/ColorListSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/ColorSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/ColorSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/DoubleSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/DoubleSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/DoubleSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/EnchantmentListSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/EnumSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/EnumSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/GenericSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/GenericSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/IntSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/IntSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/IntSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/ItemListSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/ItemListSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/ItemSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/ItemSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/KeybindSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/KeybindSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/PacketListSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/PacketListSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/ScreenHandlerListSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/SettingGroup.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/SettingGroup.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/SettingGroup.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/SettingGroup.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Settings.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/Settings.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/Settings.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/Settings.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/StringListSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/StringListSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/StringListSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/StringSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/StringSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/StringSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java b/src/profile-legacy/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/settings/Vector3dSetting.java diff --git a/src/main/java/meteordevelopment/meteorclient/systems/System.java b/src/profile-legacy/java/meteordevelopment/meteorclient/systems/System.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/systems/System.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/systems/System.java diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/Names.java b/src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/Names.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/utils/misc/Names.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/utils/misc/Names.java diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/color/SettingColor.java b/src/profile-legacy/java/meteordevelopment/meteorclient/utils/render/color/SettingColor.java similarity index 100% rename from src/main/java/meteordevelopment/meteorclient/utils/render/color/SettingColor.java rename to src/profile-legacy/java/meteordevelopment/meteorclient/utils/render/color/SettingColor.java diff --git a/src/main/java/net/minecraft/class_2382.java b/src/profile-legacy/java/net/minecraft/class_2382.java similarity index 100% rename from src/main/java/net/minecraft/class_2382.java rename to src/profile-legacy/java/net/minecraft/class_2382.java diff --git a/tools/addon_repos.csv b/tools/addon_repos.csv index b018d20..33ee83a 100644 --- a/tools/addon_repos.csv +++ b/tools/addon_repos.csv @@ -7,7 +7,6 @@ meteor-client-webgui,https://github.com/MCDxAI/meteor-client-webgui meteor-mcp-addon,https://github.com/MCDxAI/meteor-mcp-addon meteor-satellite-addon,https://github.com/crazycat256/meteor-satellite-addon meteor-translation-addon,https://github.com/Nippaku-Zanmu/meteor-translation-addon -meteor-villager-roller,https://github.com/maxsupermanhd/meteor-villager-roller Meteorist,https://github.com/Zgoly/Meteorist MeteorPlus,https://github.com/MeteorClientPlus/MeteorPlus nerv-printer-addon,https://github.com/Julflips/nerv-printer-addon From d5a9791c5e027f14040de47ef694023975395a06 Mon Sep 17 00:00:00 2001 From: GhostTypes <106415648+GhostTypes@users.noreply.github.com> Date: Sat, 2 May 2026 15:19:49 -0400 Subject: [PATCH 7/8] Curate fixture set to known 26.x addons only Drop addons that still ship 1.21.x/Yarn jars (Baritone-Controller, mc-games, meteor-satellite-addon, Meteorist, MeteorPlus, nerv-printer-addon, Trouser-Streak). Add 26.x-confirmed entries (MeteorAdditions, PowHax, Seija-Printer) explicitly. CI now downloads only Mojmap fixtures. --- tools/addon_repos.csv | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tools/addon_repos.csv b/tools/addon_repos.csv index 33ee83a..6b62fa7 100644 --- a/tools/addon_repos.csv +++ b/tools/addon_repos.csv @@ -1,14 +1,10 @@ folder,repo_url -Baritone-Controller,https://github.com/cqb13/Baritone-Controller -mc-games,https://github.com/cqb13/mc-games meteor-addon-template,https://github.com/MeteorDevelopment/meteor-addon-template meteor-addons-addon,https://github.com/MCDxAI/meteor-addons-addon meteor-client-webgui,https://github.com/MCDxAI/meteor-client-webgui meteor-mcp-addon,https://github.com/MCDxAI/meteor-mcp-addon -meteor-satellite-addon,https://github.com/crazycat256/meteor-satellite-addon meteor-translation-addon,https://github.com/Nippaku-Zanmu/meteor-translation-addon -Meteorist,https://github.com/Zgoly/Meteorist -MeteorPlus,https://github.com/MeteorClientPlus/MeteorPlus -nerv-printer-addon,https://github.com/Julflips/nerv-printer-addon +MeteorAdditions,https://github.com/JFronny/MeteorAdditions Nora-Tweaks,https://github.com/noramibu/Nora-Tweaks -Trouser-Streak,https://github.com/etianl/Trouser-Streak +PowHax,https://github.com/Powie69/PowHax +Seija-Printer,https://github.com/Nippaku-Zanmu/Seija-Printer From fb38eb08fe20fcc7c337fa86cc878b02e779ee06 Mon Sep 17 00:00:00 2001 From: GhostTypes <106415648+GhostTypes@users.noreply.github.com> Date: Sat, 2 May 2026 16:05:41 -0400 Subject: [PATCH 8/8] Fix registry/placeholder collisions flagged in PR review - SimpleRegistry.add: key by identity hash instead of class simple name so multiple instances of the same class (e.g. Blocks.AIR vs Blocks.DIRT) don't overwrite each other. - Modules.get(String): cache placeholders in a name-keyed map instead of putting them in moduleInstances by anonymous class type, which collapses every placeholder onto Modules$1 and overwrites prior entries. --- .../meteorclient/systems/modules/Modules.java | 9 +++++++-- .../java/net/minecraft/core/SimpleRegistry.java | 6 +++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java index b09df49..fc37db4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java @@ -18,6 +18,7 @@ public final class Modules { private static boolean strictCategoryCheck = false; private final Map, Module> moduleInstances = new HashMap<>(); + private final Map placeholderInstances = new HashMap<>(); private final Map> groups = new HashMap<>(); private final List active = new ArrayList<>(); private final Category placeholderCategory = new Category("Meteor"); @@ -64,8 +65,12 @@ public Module get(String name) { if (name.equalsIgnoreCase(module.name)) return module; } - Module placeholder = new Module(placeholderCategory, name, "") {}; - moduleInstances.put(placeholder.getClass(), placeholder); + String key = name.toLowerCase(); + Module placeholder = placeholderInstances.get(key); + if (placeholder != null) return placeholder; + + placeholder = new Module(placeholderCategory, name, "") {}; + placeholderInstances.put(key, placeholder); getGroup(placeholderCategory).add(placeholder); return placeholder; } diff --git a/src/profile-26x/java/net/minecraft/core/SimpleRegistry.java b/src/profile-26x/java/net/minecraft/core/SimpleRegistry.java index 1a05d23..8a7ac3c 100644 --- a/src/profile-26x/java/net/minecraft/core/SimpleRegistry.java +++ b/src/profile-26x/java/net/minecraft/core/SimpleRegistry.java @@ -13,7 +13,11 @@ public class SimpleRegistry { private final Map values = new LinkedHashMap<>(); public void add(T value) { - if (value != null) values.put(ResourceLocation.parse(value.getClass().getSimpleName().toLowerCase()), value); + if (value != null) { + values.put( + ResourceLocation.parse("stub_" + Integer.toHexString(System.identityHashCode(value))), + value); + } } public Set> entrySet() {