Fix Gradle 9 compatibility: archivesBaseName and sourceCompatibility#1
Fix Gradle 9 compatibility: archivesBaseName and sourceCompatibility#1
Conversation
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>
… (Gradle 8.11 compat) Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
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>
…neTransformationMixin Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
Co-authored-by: Darker935 <70950705+Darker935@users.noreply.github.com>
…b.com/Darker935/DashLoader into copilot/adapt-mod-for-latest-versions
There was a problem hiding this comment.
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.archivesNameandjava { 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.
| private <O> O acquire(Future<O> future) { | ||
| try { | ||
| return future.get(); | ||
| } catch (InterruptedException | ExecutionException e) { | ||
| throw new RuntimeException(e); | ||
| } |
There was a problem hiding this comment.
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.
| 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); | ||
| } | ||
| } |
There was a problem hiding this comment.
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).
| 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(" }"); |
There was a problem hiding this comment.
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).
| 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 |
There was a problem hiding this comment.
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.
| @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); | ||
| } |
There was a problem hiding this comment.
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).
| 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); | ||
| } |
There was a problem hiding this comment.
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.
| // 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) -> { |
There was a problem hiding this comment.
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.
| 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(); | ||
| } |
There was a problem hiding this comment.
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.
| // 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; |
There was a problem hiding this comment.
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).
| "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", |
There was a problem hiding this comment.
Swedish translation string issues: "konfigurations filen" should be a single word ("konfigurationsfilen"), and "modeler" should be "modeller". Fixing these improves in-game localization quality.
Gradle 9 removed
archivesBaseName,sourceCompatibility, andtargetCompatibilityas top-level project properties, causing build evaluation to fail immediately.Changes
archivesBaseName→ moved intobase {}block using the replacement propertyarchivesName; updated thejartask reference fromproject.archivesBaseName→project.base.archivesNamesourceCompatibility/targetCompatibility→ moved from top-level into thejava {}blockWarning
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/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.