Skip to content

Releases: Onyx-i7/SimpleDifficulty

v0.8.1

21 Jun 18:47
b3d1da8

Choose a tag to compare

Release v0.8.1 - Build System Modernization & RetroFuturaGradle Migration

This maintenance release focuses on modernizing the entire build infrastructure by migrating from the abandoned ForgeGradle 2.3 to RetroFuturaGradle 2.0.2, ensuring long-term compatibility with modern development environments and CI/CD pipelines

Technical Improvements & Build System Changes

  1. Migrated to RetroFuturaGradle 2.0.2 (build.gradle):

    • Completely replaced the abandoned ForgeGradle 2.3 build system with RetroFuturaGradle 2.0.2, actively maintained by the GTNewHorizons community
    • Updated dependency resolution to use the GTNH Maven repository (https://nexus.gtnewhorizons.com/repository/public/) for proper plugin resolution
    • Modernized Gradle syntax: replaced deprecated archivesBaseName with the new base { archivesName = '...' } block required by Gradle 9.x
  2. Upgraded Gradle from 4.10.3 to 9.3.1 (gradle-wrapper.properties):

    • Gradle 9.3.1 brings significant performance improvements including parallel execution, configuration caching, and enhanced error reporting
    • Added the required gradle-wrapper.jar to enable automated builds without manual Gradle installation.
    • Optimized JVM settings in gradle.properties for better memory management and garbage collection with modern Gradle

Performance Improvements

  1. Build Speed:

    • First build: Reduced from 10-15 minutes to 4-5 minutes (60-70% faster).
    • Subsequent builds: Reduced from 5-10 minutes to 30-60 seconds (80-90% faster) thanks to intelligent caching.
    • Minecraft decompilation: Fernflower now decompiles the entire Minecraft source in just 115 seconds (previously 5-10 minutes with ForgeGradle 2.3)
  2. Development Experience:

    • Incremental compilation: Only changed files are recompiled, not the entire project.
    • Better IDE integration: Improved autocomplete, debugging, and error highlighting in modern IDEs (IntelliJ IDEA, VS Code)
    • 525 MCP patches applied: All decompilation errors are automatically fixed, providing clean, readable method and variable names for debugging

Compatibility & Backward Compatibility

  • Fully backward compatible: The compiled mod JAR works identically with Minecraft 1.12.2 Forge 14.23.5.2847 or later
  • No source code changes: All Java source files remain completely unchanged. This is purely a build system migration
  • Same dependencies: All mod dependencies (Streams, Serene Seasons, Dynamic Trees, Fluidlogged API, Traveler's Backpack) continue to work exactly as before

Known Issues

  1. Deprecation Warnings:

    • Issue: Gradle displays warnings about deprecated features that will be removed in Gradle 10.
    • Status: These warnings come from RetroFuturaGradle 2.0.2 and do not affect the compiled mod. They will be resolved in future RFG updates no action required from users or developers
  2. First Build Time:

    • Issue: The first compilation after cloning the repository takes 4-5 minutes due to Minecraft decompilation and dependency downloads
    • Status: This is expected behavior. All subsequent builds are cached and complete in under 1 minute. This is a one-time cost per development environment

For Developers & Contributors

If you want to build this mod locally or contribute to development:

Requirements:

  • Java 21 or higher (for running Gradle)
  • Java 8 (automatically downloaded by Gradle toolchain for mod compilation)

Build command:

./gradlew build

Output files:
build/libs/SimpleDifficulty-1.12.2-0.8.1.jar - Main mod file (for players)
build/libs/SimpleDifficulty-1.12.2-0.8.1-api.jar - API for dependent mods
build/libs/SimpleDifficulty-1.12.2-0.8.1-dev.jar - Development sources for debugging

Note: The old ForgeGradle 2.3 setup is no longer supported. All developers must use the new RetroFuturaGradle 2.0.2 system or CleanroomMC MDK

Full Changelog: v0.8.0...v0.8.1

v0.8.0

19 Jun 19:25
b1abb05

Choose a tag to compare

Release v0.8.0 - Dynamic Weather2 Thermal Mechanics & Traveler's Backpack Integration

This major update introduces real-time environmental thermal influences on the player by linking into the Weather2 engine, alongside brand new liquid compatibility with Traveler's Backpack.

New Features & Compatibility

  1. Dynamic Weather2 Thermal Influence (Weather2Modifier.java):

    • Implemented a brand new dynamic temperature modifier by linking directly into ITemperatureDynamicModifier.
    • SimpleDifficulty now actively communicates via reflection with Weather2's WeatherObject engine to scale your body temperature according to live storm severity.
    • Heat Waves / Sandstorms: Approaching or standing inside a Sandstorm now dramatically increases body heat.
    • Blizzards / Freezing Fronts: Getting caught in a Blizzard drastically accelerates hypothermia.
    • Wind Chill Factor Fallback: High gale winds (>0.8 speed) combined with active precipitation will now realistically plunge the player's perceived temperature.
  2. Traveler's Backpack Fluid Integration:

    • Added full compatibility with the Traveler's Backpack mod tanks.
    • Players can now successfully pour, store, and transport Purified Water and Salt Water directly inside the backpack's built-in fluid tanks.

Known Issues

  1. Traveler's Backpack Creative Tab Delay:
    • Issue: There is currently a small, brief lag spike/delay when opening the Traveler's Backpack creative tab in-game.
    • Status: This is a known issue due to registry caching for the new fluid types on tab initialization. It only affects the creative menu loading time slightly and does not impact regular gameplay, survival backpack usage, or tank mechanics. A patch will be worked on for the next update.

Code Cleanup & Technical Changes

  • Robust Multi-Mod Fallbacks: Patched the reflection bridge to suppress runtime discrepancies securely. If Weather2 is uninstalled or undergoes updates, the mod fails gracefully back to stable Vanilla behavior without throwing exceptions or causing server crashes.
  • Campfire debug enabled by default: This generated unnecessary logs and it was because I forgot to remove it and it was used to see what was failing. This was there because it had many errors with Weather2 compatibility.

Full Changelog: v0.7.9...v0.8.0

v0.7.9

14 Jun 18:25
e978cbd

Choose a tag to compare

Release v0.7.9 - Bugfixes & Weather2 Compatibility

This is a minor update that fixes issues related to weather synchronization and introduces a patch for campfire behavior when running alongside Weather2, as well as an improvement in Weather2 compatibility for future updates

Bugfixes

  1. Fixed Weather2 Compatibility with Rain Collectors:
    Resolved an issue where rain collectors failed to detect rain properly when Weather2 was installed
    Note: The collection rates are currently accelerated, I will see if I can adjust the filling speed to a slower one in the next update

  2. Fixed Premature Campfire Extinguishing:
    Issue: Campfires were extinguishing almost instantly after being lit due to an unverified external method call
    Fix: I improved the logic of the extinguishCampfire method. The server now performs a check of the weather conditions (isRainingAt) before allowing the fire block to change state, blocking extinction loops caused by updates from neighboring blocks or external event handlers

Improvements

  1. Improvement & Optimization of Weather2Compat.java:
    This is not yet 100% implemented, but these code improvements will be useful for future updates, and soon it will be possible to add features like the wind making you feel cold or hot. Depending on this, it will likely be added in versions 0.8.0 or 0.9.0, as the code is somewhat simple since it only detects whether it is raining or not

v0.7.8

14 Jun 01:40
ac83eaf

Choose a tag to compare

Release v0.7.8 - Memory Leak Purge & Performance

Main Features

  • Massive Garbage Collector Leak Purge
    Critical performance bottlenecks on both client and server threads have been thoroughly eliminated. Iterative loops that handle real-time rendering, translation keys, and thirst/temperature attributes have been structurally detached from volatile array cloning allocations, resulting in a dramatic reduction in CPU overhead and fluid frame pacing.

  • Functional Lambda Translation for Item Properties
    Legacy, verbose anonymous inner classes used by Forge’s item property override registries have been completely modernized into efficient functional lambda streams. This prevents the runtime heap from being bloated by micro-instantiations during inventory ticks and visual item updates.

  • Deep Code Archeology & Legacy Removal
    Continuing the structural cleanup started in v0.7.7, ancient "fossilized" code remnants dating back 7 years to version v0.1.0 and obsolete layers from 4 years ago have been entirely eradicated. The codebase is now a lean, optimized, and fully modernized environment tailored for high-performance 1.12.2 technical modpacks.

  • Robust NBT & Boundary Fail-Safes
    Enhanced protection layers have been injected into item metadata and compound NBT handlers. The mod now gracefully handles corrupt itemstacks, extreme edge-case sub-types, or unexpected sub-zero metadata indexing without throwing null pointer exceptions or crashing server tickers.


Technical changes & Refactoring of sources

  • ItemCanteen.java & ItemDragonCanteen.java:

    • Resolved a severe client-side GC leak inside getTranslationKey by caching the immutable ThirstEnum.values() array into a local static reference (THIRST_VALUES), saving megabytes of redundant heap allocations per minute.
    • Re-engineered the "contain" ResourceLocation property getter override using an optimized lambda expression.
    • Secured type safety and cleared raw type compilation warnings by adding explicit diamond types (<ItemStack>) to the ActionResult instantiations.
  • ItemIronCanteen.java:

    • Modernized property overrides using functional lambda structures to compress bytecode and speed up rendering calls.
    • Fixed a potential heap leak by replacing repetitive enum evaluation loops with cached static value lookups.
  • ItemDrinkBase.java:

    • Fixed an optimization flaw inside onItemUseFinish where calling .getRegistryName().toString() repeatedly forced redundant string objects into memory; now safely assigned and evaluated via a local variable wrapper.
    • Optimized JSON configuration lookups by changing the jctList loop to utilize an explicit null/empty pre-check gate, completely skipping iterator allocations when no custom consumable thirst overrides are present.
  • ItemJuice.java:

    • Solved a critical real-time performance bottleneck by caching JuiceEnum.values() locally to JUICE_VALUES, cutting off constant array cloning across rendering, thirst level updates, and dirty saturation checks.
    • Hardened the getEnumForStack subroutine against out-of-bounds corruption by introducing a strict lower-bound array index validation gate (meta < 0).
  • ItemThermometer.java:

    • Replaced a highly inefficient map auditing system that previously generated massive autoboxing overhead during real-time client texture wobbling (wobble).
    • Implemented an advanced high-performance map clearing sequence using Java 8 lambda removeIf streams directly on the entrySet(), dropping the redundant tracking list entirely.
    • Purged old, experimental, and dead commented code sections to restore source sanitization under strict developer guidelines.

Download Guide

  • Correct file: SimpleDifficulty-1.12.2-0.7.8.jar
  • Developer files: Avoid files ending in -api.jar or -sources.jar.

v0.7.7

13 Jun 03:46
2668fdd

Choose a tag to compare

Release v0.7.7 - Performance Improvement & Code Modernization (Part I)

In this version, almost all the source code has been modernized and optimized; at this moment, the mod may be prone to errors since 90% or 100% of it has been rewritten.

The changes in this version are so significant that it's impossible to mention them all, as most of the code has been rewritten, updating code that was 7 years old. That said, I do notice a performance improvement on my PC, not a very noticeable one, but it is an improvement in performance.

Known bugs in this version:

  1. The campfire goes out extremely quickly, almost instantly.
  2. The Rain Collector doesn't work at all.

Review the version comparison as it is very long and I did it in 3 days, and I forgot to briefly note the changes. I'm sorry :(
Full changelog: v0.7.6...v0.7.7

v0.7.6

07 Jun 22:27

Choose a tag to compare

Release v0.7.6 - Weather2 Integration, Ice Retextures & Source Refactoring

Main Features

  • Comprehensive Weather2 Remastered Integration Framework
    Survival mode now dynamically adapts to storm and moving cells instead of relying on dimensionally uniform and native global variables. The block logic throughout the mod has been structurally modified to intercept changing atmospheric vectors, shifting clouds

  • Dynamic Rain Collector Reset
    The Rain Collector block is no longer subject to restrictive metrics from vanilla suppliers who previously halted operations based on coded regional biome parameters or elevation limits. It now connects seamlessly with active grid arrays, allowing containers to accurately retain precipitation during specialized localized rainfall under any global environment

  • Reactive environmental fire extinguishing
    Active bonfires now immediately detect stormfronts passing through the server thread. When exposed to localized rain cells, illuminated structures automatically shut down, instantly generating immersive bursts of directional smoke particles ('SMOKE_LARGE' and 'SMOKE_NORMAL') to visually reflect sudden outdoor environmental changes

  • Mechanics of hypothermia due to hailstorms
    Weather events have a direct impact on survival attributes. Being hit by physical blocks of entities generated during hailstorms now triggers damage source matching, applying instantaneous and localized drops in body temperature using a dedicated time category to simulate rapid environmental freezing

  • Saltwater Ice and Purified Ice Review
    To solve logic problems, the Saltwater Ice and Purified Ice blocks have received an updated texture since the new minecraft textures of the ice block were used in the past, but 1.12.2 has the old textures and has been modified a bit by me (although I'm probably going to leave it as it was)


Technical changes & Refactoring of sources

  • BlockCampfire.java:

    • Replaced vanilla checks 'world.isRainingAt(pos.up())' with custom queries 'Weather2Compat.isRainingAt(world, checkPos)'.
    • Fixed vanilla rain extinguishing failures using scheduled updates optimized for the client side
    • Injected direct weather validation backups inside the native 'neighborChanged' and 'randomTick' loops to resolve rendering conflicts with third-party weather managers (e.g. Weather2)
    • Added a public and thread-safe method called 'extinguishCampfire(World, BlockPos, IBlockState)' to handle immediate state changes from external simulation tickers
  • BlockRainCollector.java:

    • I have completely removed the original conditional statement block 'world.getBiomeProvider().getTemperatureAtHeight(f, pos.getY()) >= 0.15F' completely inside 'tryFillFromWeather'
    • Removed the configuration-based random scalar constraint ('ModConfig.server.miscellaneous.rainCollectorFillChance') within the dedicated subroutine for weather fill
    • Re-engineered 'tryFillFromWeather(World, BlockPos, IBlockState)' to directly increase the 'LEVEL' integer block state based solely on active detection of the 'Weather2Compat' grid
    • Fixed an issue where container filling mechanics would inadvertently crash when players interacted with the collector in Creative Mode
  • MiscHandler.java:

    • Added a dedicated listener targeting 'TickEvent.WorldTickEvent' limited exclusively to 'TickEvent.Phase.END' to protect the thread evaluation order
    • Created an optimization gate using 'world.getTotalWorldTime() %20 != 0' to limit loop execution intervals to exactly 1 second (20 game ticks)
    • Implemented a spatial scan of physical coordinates targeting an area defined by 'BlockPos.getAllInBoxMutable' within a structural radius of 16x4x16 around active player arrays to force a continuous state Sync
  • TemperatureHandler.java:

    • Added an isolated subscription hook 'onPlayerHurtByWeather(LivingHurtEvent)'
    • Configured string matching parameters by checking 'if("hail".equals(event.getSource().getDamageType()))' to process specific damage types originating from external impacts on weather entities
    • Managed core capacity modifications by passing the runtime converter stringTemporaryModifierGroupEnum.DRINK.group() instead of structural raw instances
  • CompatController.java & ModifierWet.java:

    • Refactored setupCommonPostInit() to leverage an explicit reflective wrapper using Class.forName("com.charles445.simpledifficulty.compat.mod.Weather2Compat") to safely bypass hard references on headless servers
    • Intercepted standard environmental temperature offsets by routing fluid check mechanics through the dynamic Weather2Compat localization layer
  • Asset Refactoring & Legacy Preservation:

    • Retained the previous modern textures in the source and final build outputs under the altered filenames saltwater_ice_old.png and purifiedwater_ice_old.png for asset archiving
  • Performance & Build Architecture Corrections:

    • Optimized block updates across both functional containers by enforcing state flag 3, ensuring instant dynamic lighting updates and comparator redstone signal recalculations
    • Cleared compiler conflicts by dropping the redundant, duplicate TemperatureHandler.java file structure inside the api/temperature/ directory tree

Download Guide

  • Correct file: SimpleDifficulty-1.12.2-0.7.6.jar
  • Developer files: Avoid files ending in -api.jar or -sources.jar.

v0.7.6-alpha2

06 Jun 18:11
b337b5a

Choose a tag to compare

v0.7.6-alpha2 Pre-release
Pre-release

v0.7.6-alpha2

Important note: This is an alpha version designed for early testing and archiving of features. Not recommended for major or long-term worlds, as features may change or be removed, which could break the world's saves. Also, since my development is split between a public and a private repository, code merge errors or erroneous logic can occur.

Fixes & Optimizations

  • fix(campfire): Modernized and optimized core logic in BlockCampfire.java, fixing vanilla rain extinction behavior and adding smoke particle effects when extinguished.
  • style(textures): Replaced modern Minecraft ice textures for purified and salt water with a customized classic style.
  • refactor(assets): Retained the previous modern textures in the source and final .jar file under the names saltwater_ice_old.png and purifiedwater_ice_old.png.

Screenshots

Side-by-side texture comparison (First time using GIMP):

Comparativa

v0.7.6-alpha1

04 Jun 18:51
a64c64b

Choose a tag to compare

v0.7.6-alpha1 Pre-release
Pre-release

v0.7.6-alpha1

Important note: This is an alpha version designed for early testing and archiving of features. Not recommended for major or long-term worlds, as features may change or be removed, which could break the world's saves. Also, since my development is split between a public and a private repository, code merge errors or erroneous logic can occur.

Fixes & Optimizations

  • fix(campfire): Fixed block not extinguishing under vanilla rain by utilizing client-side scheduled updates.
  • fix(campfire): Resolved rendering conflicts with third-party weather managers (e.g., Weather2).
  • fix(rain-collector): Fixed item filling mechanics being blocked when players are in Creative Mode.
  • perf(blocks): Optimized both blocks by switching world block state updates to flag 3, ensuring instant lighting and comparator updates.

v0.7.5

04 Jun 00:40

Choose a tag to compare

Release v0.7.5 - World Gen, Recipes & Weather Fixes

This update brings crucial bug fixes, deep performance optimizations, and expanded compatibility to ensure a smoother survival experience.

Crafting & Recipes

  • Purified Water Bottle Recipe Fix:
    • Corrected outdated Ore Dictionary syntax (#CHARCOAL_FILTERforge:ore_dict) for proper Forge 1.12.2 compatibility.
    • Added strict NBT data checks to the input water bottle. This fixes the "Uncraftable Potion" visual artifact in JEI and prevents players from accidentally converting valuable potions into purified water.

World Generation

  • Ice Generation Refactor:
    • Resolved a bug where Purified Water Ice would incorrectly overwrite Salt Water Ice during world generation loops.
    • Optimized chunk coordinate calculations using bitshift operations for faster math.
    • Added safety gates to skip invalid precipitation heights (e.g., deep oceans), preventing unnecessary processing ticks.
    • Applied proper block update flags (flag = 2) during generation to bypass redundant light updates and neighbor notifications, speeding up world loading.

Mod Compatibility

  • Weather2 Remastered Support:
    • Rain Collectors now correctly detect and fill during localized rain events generated by Weather2.
    • Implemented a highly optimized, static-cached reflection system to scan for Weather2's API. This ensures zero performance impact, zero memory leaks, and a graceful fallback to vanilla behavior if the mod is absent.

Localization & System

  • Translations: Added French support via machine translation, updated Spanish (Mexico) with official regional terms, and tweaked Spanish (Spain).
  • ModUpdateChecker: Updated tracking endpoints to properly align with the juraj-hrivnak versioning index.

Download Guide

  • Correct file: SimpleDifficulty-1.12.2-0.7.5.jar
  • Developer files: Avoid files ending in -api.jar or -sources.jar.

v0.7.4

03 Jun 21:05
e12a251

Choose a tag to compare

Release v0.7.4 - Localization & JEI Fixes

This minor update resolves item translation display issues, enhances developer documentation, and fixes recipe detection for Just Enough Items (JEI)

Added

  • Missing Translations: Added the missing salt water bucket translation entry to ru_ru.lang.

Fixed & Improved

  • Bucket Localization: Added missing bucket localization entries across en_us.lang and all other supported language files to fix incorrect translation displays in-game.
  • JEI Recipe Detection: Modified FixedBrewingOreRecipe.java to properly handle NBT data, ensuring JEI accurately detects and displays custom potion recipes.
  • Code Documentation: Updated FluidBasic.java with detailed comments explaining how bucket localization strings are handled via .lang files.

Download Guide

If you are a player, please download the standard file. Avoid files ending in -api.jar or -sources.jar, as those are exclusively for developers.

  • Correct file: SimpleDifficulty-1.12.2-0.7.4.jar
  • Developer files: SimpleDifficulty-1.12.2-0.7.4-api.jar / SimpleDifficulty-1.12.2-0.7.4-sources.jar