Skip to content

Fix Gradle 9 compatibility: archivesBaseName and sourceCompatibility#1

Merged
Darker935 merged 15 commits intomainfrom
copilot/adapt-mod-for-latest-versions
Feb 28, 2026
Merged

Fix Gradle 9 compatibility: archivesBaseName and sourceCompatibility#1
Darker935 merged 15 commits intomainfrom
copilot/adapt-mod-for-latest-versions

Conversation

Copy link

Copilot AI commented Feb 27, 2026

Gradle 9 removed archivesBaseName, sourceCompatibility, and targetCompatibility as top-level project properties, causing build evaluation to fail immediately.

Changes

  • archivesBaseName → moved into base {} block using the replacement property archivesName; updated the jar task reference from project.archivesBaseNameproject.base.archivesName
  • sourceCompatibility / targetCompatibility → moved from top-level into the java {} block
// Before
archivesBaseName = project.archives_base_name
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21

java { withSourcesJar() }

jar {
    from("LICENSE") {
        rename { "${it}_${project.archivesBaseName}" }
    }
}

// After
base {
    archivesName = project.archives_base_name
}

java {
    sourceCompatibility = JavaVersion.VERSION_21
    targetCompatibility = JavaVersion.VERSION_21
    withSourcesJar()
}

jar {
    from("LICENSE") {
        rename { "${it}_${project.base.archivesName}" }
    }
}

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • maven.fabricmc.net
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -Xmx2560m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 4 commits February 27, 2026 16:28
Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Systematically migrate all Java source files and the access widener:

Import/package renames:
- net.minecraft.client.MinecraftClient → net.minecraft.client.Minecraft
- net.minecraft.util.Identifier → net.minecraft.resources.ResourceLocation
- net.minecraft.client.texture.* → net.minecraft.client.renderer.texture.*
  (NativeImage exception: → com.mojang.blaze3d.platform.NativeImage)
- net.minecraft.client.render.model.* → net.minecraft.client.renderer.block.model.*
- net.minecraft.client.render.model.json.* → net.minecraft.client.renderer.block.model.*
- net.minecraft.client.font.* → net.minecraft.client.gui.font.*
- net.minecraft.client.render.RenderLayer → net.minecraft.client.renderer.RenderType
- net.minecraft.client.render.VertexConsumer → com.mojang.blaze3d.vertex.VertexConsumer
- net.minecraft.resource.* → net.minecraft.server.packs.resources.*
- net.minecraft.client.gui.screen.* → net.minecraft.client.gui.screens.*
- net.minecraft.client.toast.* → net.minecraft.client.gui.components.toasts.*
- net.minecraft.client.gui.widget.* → net.minecraft.client.gui.components.*
- net.minecraft.util.math.* → net.minecraft.core.* / net.minecraft.util.*
- net.minecraft.block.* → net.minecraft.world.level.block.*
- net.minecraft.state.* → net.minecraft.world.level.block.state.*
- net.minecraft.text.Text → net.minecraft.network.chat.Component
- net.minecraft.Bootstrap → net.minecraft.server.Bootstrap
- net.minecraft.registry.Registries → net.minecraft.core.registries.BuiltInRegistries
- net.minecraft.util.math.AffineTransformation → com.mojang.math.Transformation

Class name renames:
- MinecraftClient → Minecraft, Identifier → ResourceLocation
- Sprite → TextureAtlasSprite, BasicBakedModel → SimpleBakedModel
- ModelTransformation → ItemTransforms, Transformation → ItemTransform
- MultipartBakedModel → MultiPartBakedModel, MipmapHelper → MipmapGenerator
- ModelIdentifier → ModelResourceLocation, TextureStitcher → Stitcher
- DrawContext → GuiGraphics, SplashOverlay → SplashScreen
- ToastManager → ToastComponent, ButtonWidget → Button, TextWidget → StringWidget
- WallShape → WallSide, StateManager → StateDefinition, MathHelper → Mth
- Text → Component, Waterloggable → SimpleWaterloggedBlock
- ZipResourcePack → FilePackResources, Profiler → ProfilerFiller
- ResourceFinder → ResourceProvider, Random (MC) → RandomSource
- SpriteGetter → Function<ResourceLocation, TextureAtlasSprite> (TODO: verify)
- AffineTransformation → Transformation (com.mojang.math)
- Registries → BuiltInRegistries (code usage), getStateManager() → getStateDefinition()
- TextRenderer → Font (Mojang name for net.minecraft.client.gui.Font)

Inner class renames:
- SpriteContents.Animation → SpriteContents.AnimatedTexture
- SpriteContents.AnimationFrame → SpriteContents.FrameInfo

Mixin @Inject/@reDIrect target strings updated to Mojang internal class paths.
Access widener updated with Mojang class paths and # comment style for uncertain names.

Uncertain mappings are marked with // TODO: verify Mojang name comments.
These include: net.minecraft.client.gl.* (ShaderProgram, GlUniform, ShaderLoader),
font provider class names, and various internal model manager classes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
…ModelBakery, clean up Dazy types

Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Copilot AI changed the title [WIP] Update MOD for Minecraft versions 1.21.10 and 1.21.11 Port DashLoader to Minecraft 1.21.10 with Mojang official mappings Feb 27, 2026
… (Gradle 8.11 compat)

Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Copilot AI and others added 2 commits February 27, 2026 17:44
Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
- BitmapFont → BitmapProvider (net.minecraft.client.gui.font.providers)
- TrueTypeFont/UnihexFont/GlyphContainer → net.minecraft.client.gui.font.*
- Font (interface)/Font.FontFilterPair → GlyphProvider/GlyphProvider.FilterPair
- BlankFont/SpaceFont → BlankProvider/SpaceProvider
- Glyph → GlyphInfo
- FontManager/FontFilterType → net.minecraft.client.gui.font.*
- MultipartModelSelector → Condition
- And/Or/SimpleMultipartModelSelector → And/Or/KeyValueCondition
- MultipartModelComponent → MultipartUnbakedModel.Selector
- DataPool → net.minecraft.util.random.DataPool
- ResourceMetadata → net.minecraft.server.packs.resources.ResourceMetadata
- SplashTextResourceSupplier → SplashManager
- Fix SplashScreenMixin inject target string (removed embedded TODO)
- Fix SpriteOpenerMixin duplicate import
- Remove TODO comments from verified imports

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI changed the title Port DashLoader to Minecraft 1.21.10 with Mojang official mappings Port DashLoader to MC 1.21.10 Mojang mappings + Gradle 9.3 Feb 27, 2026
…neTransformationMixin

Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Copilot AI changed the title Port DashLoader to MC 1.21.10 Mojang mappings + Gradle 9.3 Port DashLoader from YARN to Mojang official mappings (MC 1.21.10) Feb 27, 2026
Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Copilot AI changed the title Port DashLoader from YARN to Mojang official mappings (MC 1.21.10) Port DashLoader to MC 1.21.10 Mojang mappings + fix build infrastructure Feb 28, 2026
Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Copilot AI changed the title Port DashLoader to MC 1.21.10 Mojang mappings + fix build infrastructure Fix Gradle 9 compatibility: move sourceCompatibility into java {} block Feb 28, 2026
Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Copilot AI changed the title Fix Gradle 9 compatibility: move sourceCompatibility into java {} block Fix Gradle 9 compatibility: archivesBaseName and sourceCompatibility Feb 28, 2026
Copilot stopped work on behalf of Darker935 due to an error February 28, 2026 01:13
@Darker935 Darker935 marked this pull request as ready for review February 28, 2026 03:19
Copilot AI review requested due to automatic review settings February 28, 2026 03:19
@Darker935 Darker935 merged commit c53f8a9 into main Feb 28, 2026
4 checks passed
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Gradle build configuration to be compatible with Gradle 9 (moving removed top-level properties into the appropriate base {} / java {} blocks), and also introduces a large set of new DashLoader mod sources/resources and CI metadata.

Changes:

  • Update Gradle build script to use base.archivesName and java { sourceCompatibility/targetCompatibility } for Gradle 9 compatibility.
  • Add Fabric mod metadata/resources (fabric.mod.json, mixin config, access widener, translations, icon) and extensive new Java implementation for caching/serialization/mixins.
  • Add Gradle wrapper/config files and GitHub Actions build workflow.

Reviewed changes

Copilot reviewed 112 out of 117 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
src/main/resources/fabric.mod.json Adds Fabric mod metadata and entrypoints.
src/main/resources/dashloader/textures/icon.png Adds mod icon asset.
src/main/resources/dashloader/lang/sv_se.json Adds Swedish localization strings.
src/main/resources/dashloader/lang/lol_us.json Adds “lolcat” localization strings.
src/main/resources/dashloader/lang/en_us.json Adds English localization strings.
src/main/resources/dashloader.mixins.json Adds mixin configuration and plugin hook.
src/main/resources/dashloader.accesswidener Adds access widener declaration.
src/main/java/dev/notalpha/dashloader/thread/ThreadHandler.java Adds thread pool utilities for parallel export/calls.
src/main/java/dev/notalpha/dashloader/thread/IndexedArrayMapTask.java Adds ForkJoin task for indexed mapping into arrays.
src/main/java/dev/notalpha/dashloader/registry/data/StageData.java Adds stage-based export orchestration for chunks.
src/main/java/dev/notalpha/dashloader/registry/data/ChunkFactory.java Adds registry chunk factory with dedup and dependency tracking.
src/main/java/dev/notalpha/dashloader/registry/data/ChunkData.java Adds chunk export hooks and parallel export integration.
src/main/java/dev/notalpha/dashloader/registry/TrackingRegistryWriterImpl.java Adds dependency-tracking wrapper writer.
src/main/java/dev/notalpha/dashloader/registry/RegistryWriterImpl.java Adds registry writer implementation and staging/export graph logic.
src/main/java/dev/notalpha/dashloader/registry/RegistryReaderImpl.java Adds registry reader and stage export runner.
src/main/java/dev/notalpha/dashloader/registry/MissingHandler.java Adds missing-handler wrapper type.
src/main/java/dev/notalpha/dashloader/registry/FactoryBinding.java Adds reflective/method-handle based factory binding for DashObjects.
src/main/java/dev/notalpha/dashloader/mixin/option/misc/MipmapHelperMixin.java Adds unsafe pixel access redirects for mipmap generation.
src/main/java/dev/notalpha/dashloader/mixin/option/misc/AffineTransformationMixin.java Adds equals/hashCode override mixin for Transformation.
src/main/java/dev/notalpha/dashloader/mixin/option/cache/font/FontManagerOverride.java Adds font caching integration via mixins.
src/main/java/dev/notalpha/dashloader/mixin/option/cache/SplashTextResourceSupplierMixin.java Adds splash text caching integration via mixins.
src/main/java/dev/notalpha/dashloader/mixin/main/MainMixin.java Adds early bootstrap hook into client main.
src/main/java/dev/notalpha/dashloader/mixin/accessor/UnihexProviderAccessor.java Adds accessors/invokers for UnihexProvider.
src/main/java/dev/notalpha/dashloader/mixin/accessor/TrueTypeGlyphProviderAccessor.java Adds accessors for TrueTypeGlyphProvider internals.
src/main/java/dev/notalpha/dashloader/mixin/accessor/NativeImageAccessor.java Adds accessors/invokers for NativeImage internals.
src/main/java/dev/notalpha/dashloader/mixin/accessor/ModelLoaderAccessor.java Adds accessors for BlockStateDefinitions internals.
src/main/java/dev/notalpha/dashloader/mixin/accessor/IdentifierAccessor.java Adds invoker for ResourceLocation constructor.
src/main/java/dev/notalpha/dashloader/mixin/accessor/FontManagerPreparationAccessor.java Adds invoker/accessors for FontManager.Preparation.
src/main/java/dev/notalpha/dashloader/mixin/accessor/FilterMapAccessor.java Adds accessor for FontOption.Filter map.
src/main/java/dev/notalpha/dashloader/mixin/accessor/BitmapFontGlyphAccessor.java Adds invoker/accessors for BitmapProvider.Glyph.
src/main/java/dev/notalpha/dashloader/mixin/accessor/BitmapFontAccessor.java Adds invoker/accessors for BitmapProvider internals.
src/main/java/dev/notalpha/dashloader/mixin/MixinPlugin.java Adds IMixinConfigPlugin implementation for conditional mixin apply.
src/main/java/dev/notalpha/dashloader/misc/UnsafeImage.java Adds wrapper for direct NativeImage pixel access.
src/main/java/dev/notalpha/dashloader/misc/UnsafeHelper.java Adds Unsafe helper to allocate instances.
src/main/java/dev/notalpha/dashloader/misc/TranslationHelper.java Adds translation loader helper for resource JSON.
src/main/java/dev/notalpha/dashloader/misc/ProfilerUtil.java Adds simple time formatting utility.
src/main/java/dev/notalpha/dashloader/misc/ObjectDumper.java Adds reflective object dump utility.
src/main/java/dev/notalpha/dashloader/misc/HahaManager.java Adds splash-line selection logic.
src/main/java/dev/notalpha/dashloader/io/fragment/SizePiece.java Adds leaf piece for fragmentation sizing.
src/main/java/dev/notalpha/dashloader/io/fragment/SimplePiece.java Adds composite piece for fragmentation sizing.
src/main/java/dev/notalpha/dashloader/io/fragment/Piece.java Adds fragmentation logic over nested pieces.
src/main/java/dev/notalpha/dashloader/io/fragment/Fragment.java Adds fragment descriptor type.
src/main/java/dev/notalpha/dashloader/io/def/NativeImageDataDef.java Adds Hyphen dynamic def for NativeImageData.
src/main/java/dev/notalpha/dashloader/io/def/NativeImageData.java Adds NativeImageData container type.
src/main/java/dev/notalpha/dashloader/io/def/DataUnsafeByteBuffer.java Adds Hyphen annotation marker for unsafe buffers.
src/main/java/dev/notalpha/dashloader/io/data/fragment/StageFragment.java Adds stage fragment metadata type.
src/main/java/dev/notalpha/dashloader/io/data/fragment/FragmentSlice.java Adds fragment slice range/size type.
src/main/java/dev/notalpha/dashloader/io/data/fragment/ChunkFragment.java Adds chunk fragment metadata type.
src/main/java/dev/notalpha/dashloader/io/data/fragment/CacheFragment.java Adds cache fragment metadata type.
src/main/java/dev/notalpha/dashloader/io/data/ChunkInfo.java Adds chunk metadata container.
src/main/java/dev/notalpha/dashloader/io/data/CacheInfo.java Adds cache metadata container.
src/main/java/dev/notalpha/dashloader/io/Serializer.java Adds generic Hyphen serializer wrapper and save/load helpers.
src/main/java/dev/notalpha/dashloader/io/RegistrySerializer.java Adds registry serialization/deserialization (with fragmentation).
src/main/java/dev/notalpha/dashloader/io/MappingSerializer.java Adds module mapping serialization/deserialization.
src/main/java/dev/notalpha/dashloader/io/IOHelper.java Adds zstd file IO helpers and buffer conversions.
src/main/java/dev/notalpha/dashloader/config/Option.java Adds feature-option enum for mixin gating.
src/main/java/dev/notalpha/dashloader/config/ConfigHandler.java Adds config + option activation and mod-provided disables.
src/main/java/dev/notalpha/dashloader/config/Config.java Adds config DTO for JSON.
src/main/java/dev/notalpha/dashloader/client/splash/SplashModule.java Adds splash module and caching data integration.
src/main/java/dev/notalpha/dashloader/client/shader/ShaderModule.java Adds shader module stub.
src/main/java/dev/notalpha/dashloader/client/model/predicates/DashStaticPredicate.java Adds DashObject for boolean condition.
src/main/java/dev/notalpha/dashloader/client/model/predicates/DashSimplePredicate.java Adds DashObject for key/value conditions.
src/main/java/dev/notalpha/dashloader/client/model/predicates/DashOrPredicate.java Adds DashObject for OR combined conditions.
src/main/java/dev/notalpha/dashloader/client/model/predicates/DashAndPredicate.java Adds DashObject for AND combined conditions.
src/main/java/dev/notalpha/dashloader/client/model/predicates/BooleanSelector.java Adds runtime predicate wrapper for always-true/false.
src/main/java/dev/notalpha/dashloader/client/model/ModelModule.java Adds model module stub.
src/main/java/dev/notalpha/dashloader/client/identifier/DashSpriteIdentifier.java Adds DashObject for Material (atlas/texture IDs).
src/main/java/dev/notalpha/dashloader/client/identifier/DashIdentifier.java Adds DashObject for ResourceLocation.
src/main/java/dev/notalpha/dashloader/client/font/FontModule.java Adds font module with provider indexing and caching.
src/main/java/dev/notalpha/dashloader/client/font/DashUnihexFont.java Adds UnihexProvider DashObject implementation.
src/main/java/dev/notalpha/dashloader/client/font/DashTrueTypeFont.java Adds TrueTypeGlyphProvider DashObject implementation.
src/main/java/dev/notalpha/dashloader/client/font/DashSpaceFont.java Adds SpaceProvider DashObject implementation.
src/main/java/dev/notalpha/dashloader/client/font/DashFontFilterPair.java Adds conditional glyph provider DashObject implementation.
src/main/java/dev/notalpha/dashloader/client/font/DashBlankFont.java Adds AllMissingGlyphProvider DashObject implementation.
src/main/java/dev/notalpha/dashloader/client/font/DashBitmapFontGlyph.java Adds bitmap glyph snapshot/export helper.
src/main/java/dev/notalpha/dashloader/client/font/DashBitmapFont.java Adds BitmapProvider DashObject implementation.
src/main/java/dev/notalpha/dashloader/client/blockstate/DashBlockState.java Adds BlockState DashObject implementation.
src/main/java/dev/notalpha/dashloader/client/atlas/AtlasModule.java Adds atlas caching module.
src/main/java/dev/notalpha/dashloader/client/ModMenuCompat.java Adds ModMenu integration stub.
src/main/java/dev/notalpha/dashloader/client/Dazy.java Adds lazy sprite resolution utility.
src/main/java/dev/notalpha/dashloader/client/DashLoaderClient.java Adds client entrypoint, cache wiring, dash object registration.
src/main/java/dev/notalpha/dashloader/api/registry/RegistryWriter.java Adds public registry writer API.
src/main/java/dev/notalpha/dashloader/api/registry/RegistryUtil.java Adds registry ID packing/unpacking utilities.
src/main/java/dev/notalpha/dashloader/api/registry/RegistryReader.java Adds public registry reader API.
src/main/java/dev/notalpha/dashloader/api/registry/RegistryAddException.java Adds typed exception for missing registry writers.
src/main/java/dev/notalpha/dashloader/api/collection/ObjectObjectList.java Adds simple serializable key/value list.
src/main/java/dev/notalpha/dashloader/api/collection/ObjectIntList.java Adds simple serializable key/int list.
src/main/java/dev/notalpha/dashloader/api/collection/IntObjectList.java Adds simple serializable int/value list.
src/main/java/dev/notalpha/dashloader/api/collection/IntIntList.java Adds simple serializable int/int list.
src/main/java/dev/notalpha/dashloader/api/cache/CacheStatus.java Adds cache status enum.
src/main/java/dev/notalpha/dashloader/api/cache/CacheFactory.java Adds cache factory API.
src/main/java/dev/notalpha/dashloader/api/cache/Cache.java Adds cache API contract.
src/main/java/dev/notalpha/dashloader/api/DashObject.java Adds DashObject API contract.
src/main/java/dev/notalpha/dashloader/api/DashModule.java Adds DashModule API contract.
src/main/java/dev/notalpha/dashloader/api/DashEntrypoint.java Adds DashLoader entrypoint API contract.
src/main/java/dev/notalpha/dashloader/api/CachingData.java Adds cache-status-aware in-memory data helper.
src/main/java/dev/notalpha/dashloader/DashObjectClass.java Adds reflective DashObject metadata wrapper.
src/main/java/dev/notalpha/dashloader/DashLoader.java Adds core bootstrap + metadata serializer/hash generation.
src/main/java/dev/notalpha/dashloader/CacheImpl.java Adds cache load/save/remove implementation.
src/main/java/dev/notalpha/dashloader/CacheFactoryImpl.java Adds cache factory implementation and registration sorting.
settings.gradle Adds pluginManagement repos (incl. Fabric) and rootProject name.
log4j-dev.xml Adds dev log4j config.
inspect.java Adds standalone reflection utility (non-build source).
gradlew.bat Adds Gradle wrapper script (Windows).
gradlew Adds Gradle wrapper script (Unix).
gradle/wrapper/gradle-wrapper.properties Pins Gradle distribution for wrapper.
gradle.properties Adds project/version/dependency properties for build.
changelog.md Adds changelog file.
build.gradle Updates build logic for Gradle 9 and mod build/publish configuration.
README.md Replaces README content with expanded project overview.
.gitignore Updates ignored paths (run/, upload.sh).
.github/workflows/build.yml Adds CI build workflow (Java 21 + Gradle build).
.github/ISSUE_TEMPLATE/bug_report.md Updates bug report template text/fields.
.github/ISSUE_TEMPLATE/LAUNCH_ISSUE.yaml Adds launch issue form template.
.gitattributes Adds Windows line-ending rule for .bat files.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +71 to +76
private <O> O acquire(Future<O> future) {
try {
return future.get();
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e);
}
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ThreadHandler.acquire swallows InterruptedException by wrapping it in a RuntimeException without restoring the thread interrupt flag. This can break cooperative cancellation and cause subtle issues in callers. Consider calling Thread.currentThread().interrupt() when catching InterruptedException, and wrapping ExecutionException separately to preserve the interruption semantics.

Copilot uses AI. Check for mistakes.
Comment on lines +27 to +37
private void loadLang(String langCode) {
this.langCode = langCode;
var stream = this.getClass().getClassLoader().getResourceAsStream("dashloader/lang/" + langCode + ".json");
if (stream != null) {
Language.loadFromJson(stream, this.translations::put);
} else {
stream = this.getClass().getClassLoader().getResourceAsStream("dashloader/lang/en_us.json");
if (stream != null) {
Language.loadFromJson(stream, this.translations::put);
}
}
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TranslationHelper.loadLang doesn't clear existing entries before loading a new language, so keys from the previous language can persist when the next JSON lacks them. Also, the InputStream returned by getResourceAsStream is never closed. Clear translations before loading and use try-with-resources for the stream(s).

Copilot uses AI. Check for mistakes.
Comment on lines +39 to +44
switch (value) {
case ThreadLocal<?> local -> appendDetail(buffer, fieldName, local.get());
case HashMap<?, ?> map -> appendDetail(buffer, fieldName, map);
case ArrayList<?> list -> appendDetail(buffer, fieldName, list);
case NativeImage image ->
buffer.append("Image{ format: ").append(image.format()).append(", size: ").append(image.getWidth()).append("x").append(image.getHeight()).append(" }");
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In ObjectDumper.Style.appendDetail, the case ArrayList<?> list -> appendDetail(buffer, fieldName, list); branch calls the same overload again, leading to infinite recursion for ArrayList values. This should delegate to super.appendDetail(...) or implement a dedicated list/collection formatter instead of recursing back into appendDetail(Object).

Copilot uses AI. Check for mistakes.
Comment on lines +12 to +14
FAST_MODEL_IDENTIFIER_EQUALS("misc.ModelIdentifierMixin"), // Use a much faster .equals() on ModelIdentifiers
FAST_WALL_BLOCK("WallBlockMixin"), // Caches the two most common blockstates for wall blocks
UNSAFE_MIPMAP_GENERATION("misc.MipmapGenerator"); // Speeds up get/set pixel operations when generating mipmaps by skipping redundant safety checks
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Option.UNSAFE_MIPMAP_GENERATION uses the substring "misc.MipmapGenerator", but the added mixin class is ...mixin.option.misc.MipmapHelperMixin. With the current value, ConfigHandler.shouldApplyMixin will never match this mixin, so the option can't actually enable/disable it. Update mixinContains to match the real mixin class/package substring.

Copilot uses AI. Check for mistakes.
Comment on lines +17 to +24
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof AffineTransformationMixin that)) return false;
if (!super.equals(o)) return false;

return Objects.equals(matrix, that.matrix);
}
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AffineTransformationMixin.equals is effectively broken: o instanceof AffineTransformationMixin will never be true at runtime because the target class is Transformation, and super.equals(o) will always be false unless this == o (already handled). As written, two equal Transformation instances will never compare equal. Compare against the target type and implement equality based on the shadowed fields (and ensure hashCode is consistent).

Copilot uses AI. Check for mistakes.
Comment on lines +26 to +36
public final void export(@Nullable Consumer<Task> taskConsumer) {
StepTask task = new StepTask("Exporting", Integer.max(this.chunkData.length, 1));
if (taskConsumer != null) {
taskConsumer.accept(task);
}

for (StageData chunkData : chunkData) {
chunkData.preExport(this);
chunkData.export(data, this);
chunkData.postExport(this);
}
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RegistryReaderImpl.export creates a StepTask sized to the number of stages, but never advances it (task.next()), so progress reporting will stay at 0%. Increment the task once per exported stage (and optionally finish it) inside the loop.

Copilot uses AI. Check for mistakes.
Comment on lines +100 to +103
// Sort maps to be comparable
List<Map.Entry<?, ?>> entries = new ArrayList<>(map.entrySet());
entries.sort((o1, o2) -> o1.getKey().toString().compareTo(o2.toString()));
entries.forEach((entry) -> {
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The map sorting comparator uses o1.getKey().toString().compareTo(o2.toString()), which compares the first key to the entire entry string of the second element. This produces unstable/incorrect ordering and can throw if toString() formats differ. Compare key-to-key (o2.getKey().toString()) instead.

Copilot uses AI. Check for mistakes.
Comment on lines +141 to +150
public static byte[] streamToArray(InputStream inputStream) throws IOException {
final ByteArrayOutputStream output = new ByteArrayOutputStream() {
@Override
public synchronized byte @NotNull [] toByteArray() {
return this.buf;
}
};
IOUtils.copy(inputStream, output);
return output.toByteArray();
}
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IOHelper.streamToArray overrides ByteArrayOutputStream.toByteArray() to return the internal buffer (buf) without trimming to count. This returns extra unused bytes and can corrupt consumers (e.g., font parsing). Return a correctly-sized array (e.g., Arrays.copyOf(buf, count)) or just use the standard toByteArray() implementation.

Copilot uses AI. Check for mistakes.
Comment on lines +84 to +88
// Calculate amount of fragments required
int minFragments = (int) (piece.size / MAX_FRAGMENT_SIZE);
int maxFragments = (int) (piece.size / MIN_PER_THREAD_FRAGMENT_SIZE);
int fragmentCount = Integer.max(Integer.max(Integer.min(ThreadHandler.THREADS, maxFragments), minFragments), 1);
long remainingSize = piece.size;
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fragment sizing uses integer division: minFragments = (int) (piece.size / MAX_FRAGMENT_SIZE). This floors the value, so a total size slightly above MAX_FRAGMENT_SIZE can still produce minFragments == 1, allowing a fragment larger than the configured max and causing (int) fragment.info.fileSize to overflow or allocate an oversized direct buffer. Use a ceiling division for minFragments (and consider guarding the cast with Math.toIntExact).

Copilot uses AI. Check for mistakes.
Comment on lines +2 to +6
"debug": "Debug läge är på i konfigurations filen.",
"save": "Påbörjar",
"save.cache": "Laddar",
"save.cache.model": "Laddar modeler",
"save.cache.image": "Laddar bilder",
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Swedish translation string issues: "konfigurations filen" should be a single word ("konfigurationsfilen"), and "modeler" should be "modeller". Fixing these improves in-game localization quality.

Copilot uses AI. Check for mistakes.
@Darker935 Darker935 deleted the copilot/adapt-mod-for-latest-versions branch February 28, 2026 03:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants