Fast Leaves +

Made for The Last Frontier of Dominion project

leavesplus


**If any mod creators are concerned about this resource pack supporting their mods, I’m open to communication.**

🌴 **Features:**

– Transparency **removed** from modded leaves
– Supported Mods:
– [Oh The Biomes We’ve Gone](https://modrinth.com/mod/oh-the-biomes-weve-gone)
– [Burnt](https://modrinth.com/mod/burnt)
– [Chipped](https://modrinth.com/mod/chipped)
– [IceAndFire Community Edition](https://modrinth.com/mod/iceandfire-ce)
– [Malum](https://modrinth.com/mod/malum)
– [[Let’s Do] Meadow](https://modrinth.com/mod/lets-do-meadow)
**! Hanging Birch Leaves have a temporary solution / fix, which will most likely change with updates.**
– [Nature’s Aura](https://modrinth.com/mod/natures-aura)
– [Nature’s Spirit](https://modrinth.com/mod/natures-spirit)
– [Pastel](https://modrinth.com/mod/pastel-mod)
– [Project: Vibrant Journeys](https://modrinth.com/mod/project-vibrant-journeys)
– [Regions Unexplored](https://modrinth.com/mod/regions-unexplored)
– [Roots](https://www.curseforge.com/minecraft/mc-mods/roots)
– [Thavma](https://modrinth.com/mod/thavma)

For lovers of solid foliage and mods – enjoy! 🎋


Fast Leaves

Made for The Last Frontier of Dominion project

leaves


🍀 **Features:**

– Transparency **removed** from all vanilla leaves
– Dark oak leaves are **darker** for clearer visual contrast with oak leaves
– Glow lichen **no longer has a backside** – you almost never see it, so there’s no reason for it to exist

For lovers of solid foliage – enjoy using it! 🍂


Fabricated Legacy Forge

# Fabricated Forge

Load Forge/ModLoader mods as if they were Fabric Loader mods.

Supported Minecraft versions: 1.3.2, 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.4.5, 1.4.6 and 1.4.7.

This mod requires [Mod Remapping API](https://modrinth.com/mod/mod-remapping-api).

## Credits
### MinecraftForge
– Eloraam
– FlowerChild
– Hawkye
– MALfunction84
– Scokeev9
– SpaceToad
– LexManos

### Forge Mod Loader (FML)
– cpw
– Risugami, author of ModLoader
– LexManos

### Paulscode IBXM Library
– IBXM
– Martin Cameron

### Paulscode SoundSystem CodecIBXM
– Paul Lamb
– IBXM
– Martin Cameron

### Player API (2.0.0>)
– Divisor

### ClassLoaderFixer
– ThexXTURBOXx

### Fabricated Forge itself
– CatCore (aka. arthurbambou)
– Contributors

Fabric Placeholder

# Fabric Placeholder
A placeholder mod that provides the `fabric` mod ID for older mods.

## MALWARE WARNING
There is a vibe-coded version of this mod going around that downloads and runs a Remote Access Trojan (RAT). The impersonation has the mod ID `fabric-placeholder` along with code whereas this mod is called `fabric-ph` and has no code in it.

Do not run mods or modpacks from people who you do not absolutely trust, and be sure not to download anything off of Discord either.

## Do I need this?
**Probably not.** Fabric API only removed the `fabirc` mod ID in `26.1-snapshot-1`, so mods using this mod ID will need to be recompiled anyway. However, if a mod asks you to add `fabric` on 26.1 or later, you can try using this mod to resolve the error. However, it very likely won’t work. I mostly made this as a joke in the Fabric Voice Chat, so if this actually works for something, please ping @sylv256 in the Fabric Discord server because it would be extremely funny.

## Use Case
You may need this if you’re using simpler mods that support many
versions at once within one jar or simply a mod that hasn’t updated
to using the `fabric-api` mod ID as a dependency.

~~In general, it is better to install this mod than not, especially
if a mod requires `fabric` and you have Fabric API installed.~~

Exit Confirmation

**Note that the alpha and beta versions can crash Minecraft.**
**This mod supports both forge and fabric, check the files tab to choose between those.**
_See the Bugs / Issues / Crashes section for more info on how to send feedback._

# Features
Configuration, including close prompt when using escape in title screen, when in-game and the quit button in the title screen.

Close prompt when trying to exit minecraft (occurs while following the config that’s set).

# Bugs / Issues / Crashes
**In Alpha / Beta releases stuff might change or break, it’s recommended to use them for testing purposes only.**

If there’s a problem with the mod: don’t post the crash report in the comments, but post it on the issue tracker here: [Exit Confirmation Issues at GitHub](https://github.com/Ultreon/exit-confirmation/issues).

If there’s no crash report but it still crashes, post the debug.log file in your .minecraft/logs folder to the issue tracker.

If there’s no crash report and there’s no crash in the debug.log, then there’s probably a problem with the Java installation or a windows driver (what I have sometimes).

# Feature requests
If you want to request a feature you can do it on [GitHub](https://github.com/Ultreon/exit-confirmation/issues).

[![](https://discordapp.com/api/guilds/569842567152402432/widget.png?style=banner3)](https://discord.gg/dtdc46g6ry)

Doku’s RPG

**About**:
————
This pack is a continuation of Doku’s RPG,
a texture pack by Doku, it was the initial inspiration for Gerudoku and several other remix packs, Doku’s RPG was discontinued in 2010.

in 2014 Handsome_Dan started a continuation project called Doku RPG: Faithful Continuation,
it had a few items and new blocks, but was discontinued in 2015 due to lack of time,
most of Doku RPG: Faithful Continuation is used within this pack.

the original plan for this continuation was to avoid using anything made for Gerudoku and parts of Dokucraft, however I realized that I would never finish the pack if I didn’t use a few parts from them, the original version of Doku’s RPG didn’t have items or mobs and the task of making nearly 14 years worth of textures all at once was a little too daunting, so I’ve tried to use as few as possible while updating the pack through each version of minecraft and trying to maintain a consistent style.

**Links and Other Information**
——————————
I recommend **Optifine** for full functionality of the pack.

For Fabric I’d recommend the **Fabulously Optimized** modpack for ease of use, or https://lambdaurora.dev/optifine_alternatives/ for a list of Optifine alternatives

Some things will not work without optifine or an alternative,

**Optifine**
– https://www.optifine.net/downloads

**Fabulously Optimized**
– https://modrinth.com/modpack/fabulously-optimized
– https://www.curseforge.com/minecraft/modpacks/fabulously-optimized

——————————

– **[Doku RPG: Faithful Continuation](https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/resource-packs/wip-resource-pack/2290911-doku-rpg-faithful-continuation-on-hiatus)**

– **[Gerudoku Faithful](https://modrinth.com/resourcepack/gerudoku-faithful)**

– **[Gerudoku Genesis](https://www.curseforge.com/minecraft/texture-packs/gerudoku-genesis)**

– **[Proof of Permission](https://imgur.com/a/LNjg4BY)**

**Alternate Textures & Add-on files**
——————————

Alternate Textures & add-on files available on Github:
– **[Doku’s RPG Github](https://github.com/ShadySalesGnome/Doku-s-RPG)**

**Credits**
——————————
Doku, Handsome_Dan, SOM3GUY, Tyken132, Jademalo, Lilyo, Coagulated, Runesmith, Krayloon, Jzus,TDWP_FTW/Forstride, DrZhark, Executive_Hamster, Bloody_Toast, Vamediah, History, Hozz, Richasackboy/Teknician, GameslayerX2, DooDooRoonys, Velimas,

Specific Credits in zip file.

All Dokucraft textures included within this pack were made by Doku for Dokucraft 1.0 to 2.5 between March 2011 and July 2011.

DockBridge

# DockBridge

Velocity plugin to auto-register Docker-backed servers (e.g., Limbo) and check for updates on Modrinth.

## Features
– Auto-discovery: Containers with label `net.uebliche.dockbridge.autoregister=true` are registered as Velocity servers. Host from container name, port from label `net.uebliche.dockbridge.server_port` (fallback: first exposed port, else 25565).
– Name collisions: Default `suffix` → append short container id (`basename-abcdef`). Alternative `overwrite` → keep basename, last writer wins.
– `/dockbridge` command (permission `dockbridge.command`): Shows label filter, duplicate strategy, last scan stats, and registered servers (no sensitive data).
– Modrinth update check on proxy start; login hint for players with permission `dockbridge.update.notify`.

## Installation
1) Download the latest DockBridge release from Modrinth (jar file).
2) Place the jar into your Velocity `plugins/` folder.
3) (Optional) If Velocity runs in Docker, mount `/var/run/docker.sock` into the Velocity container so DockBridge can discover containers.
4) Start Velocity. On first start, the config file `dockbridge.conf` is created in the Velocity data folder; adjust settings and restart.
5) Permissions:
– `dockbridge.command` for `/dockbridge`
– `dockbridge.update.notify` for update hints on login

## Configuration
`dockbridge.conf` (created in the Velocity data folder on first start):
“`
docker.endpoint=unix:///var/run/docker.sock
docker.poll_interval_seconds=30
filters.proxy_group=default
docker.autoregister.label_key=net.uebliche.dockbridge.autoregister
docker.autoregister.label_value=true
docker.autoregister.name_label=net.uebliche.dockbridge.server_name
docker.autoregister.port_label=net.uebliche.dockbridge.server_port
docker.autoregister.duplicate_strategy=suffix # suffix | overwrite
“`

## Docker labels (example)
“`
net.uebliche.dockbridge.autoregister=true
net.uebliche.dockbridge.server_name=limbo
net.uebliche.dockbridge.server_port=30000
“`


## Local testing
### Gradle run
“`
./gradlew runVelocity
“`
Downloads Velocity, builds the plugin (shadowJar), and starts the proxy with the plugin loaded.

### Docker Compose (Limbo set)
“`
docker compose up –build # or: docker compose -f docker-compose.limbo.yml up –build
“`
Includes three Limbo backends (ports 30000/30001/30002) and Velocity on host port 26678. Velocity runs via `runVelocity` inside the container and mounts your sources/config.

## Commands & permissions
– `/dockbridge` (permission `dockbridge.command`): Status and registered servers.
– Update hint on login: permission `dockbridge.update.notify`.

## Troubleshooting
– No servers registered?
– Ensure your containers have the label `net.uebliche.dockbridge.autoregister=true` and a valid `net.uebliche.dockbridge.server_port`.
– Make sure Velocity can reach Docker: mount `/var/run/docker.sock` (or set `docker.endpoint` to a reachable TCP endpoint).
– Check `/dockbridge` output for last scan count and registered servers.
– Port mismatch or forwarding errors?
– Verify the Limbo (or other backend) port matches the label and the server properties.
– For Velocity forwarding, ensure forwarding secret/mode match on both ends.
– Duplicate names?
– Default strategy is `suffix`. Switch to `overwrite` via `docker.autoregister.duplicate_strategy` if you want last-writer-wins.


## Build
“`
./gradlew build
“`
Produces the shaded jar at `build/libs/DockBridge-.jar`.

## Contributing
– Fork & PRs welcome. Keep code comments minimal but purposeful.
– Default Java 21, Gradle Kotlin DSL, Velocity API 3.4.0-SNAPSHOT for run task; 3.1.1 for compileOnly/annotationProcessor.
– Run `./gradlew build` before submitting; Docker-based tests are optional.

Dithering3D

# 🎨 Dithering3D – Surface-Stable Fractal Dithering

![Minecraft](https://img.shields.io/badge/Minecraft-1.8.9_*_1.21%2B-62B47A?style=for-the-badge)
![OptiFine](https://img.shields.io/badge/OptiFine-All_Versions-2577D0?style=for-the-badge)
![Iris](https://img.shields.io/badge/Iris-1.2.0%2B-9B59B6?style=for-the-badge)
![License](https://img.shields.io/badge/License-MPL_2.0-E67E22?style=for-the-badge)

## 🖼️ Screenshots

![Dithering3D Preview](https://media.forgecdn.net/attachments/1454/997/2026-01-07_03-01-52-jpg.jpg)

## ✨ A Revolutionary Visual Experience

Transform your Minecraft world with **Surface-Stable Fractal Dithering** — a groundbreaking rendering technique where dither dots **stick to 3D surfaces** instead of the screen, creating a unique manga/comic book aesthetic that feels alive.

> 🎬 *Based on the innovative work by [Rune Skovbo Johansen](https://github.com/runevision/Dither3D)* — **[Watch the explainer video](https://youtu.be/HPqGaIMVuLs)**

## 🖼️ What Makes This Shader Special?

### 📌 **Surface-Stable Dots**
Unlike traditional dithering where patterns “swim” on screen, Dither3D anchors each dot to the actual 3D surface. Walk around blocks, and the dots stay perfectly attached!

### 🔄 **Fractal Scaling Magic**
As you move closer or farther from surfaces, dots dynamically split or merge to maintain **constant screen-space density**. It’s mesmerizing to watch!

### 🎨 **Three Color Modes**

| Mode | Description |
|:—-:|:————|
| **Grayscale** | Classic black & white dithering — clean, minimalist, timeless |
| **RGB** | Each color channel gets its own dot layer — vibrant and unique |
| **CMYK Halftone** | Authentic newspaper/comic print simulation with rotated dot angles |

## ⚡ Features at a Glance

| Feature | Description |
|:——–|:————|
| 🎯 **Precision Dithering** | SVD-based frequency analysis for mathematically perfect dot placement |
| 🌀 **Anti-Stretch Technology** | Anisotropic smoothing keeps dots circular even on oblique surfaces |
| 🎥 **Camera Stable** | Radial compensation prevents dot swimming during camera rotation |
| ⚙️ **Highly Configurable** | 10+ parameters to fine-tune your perfect look |
| 🚀 **Performance Optimized** | Efficient 3D texture sampling for smooth gameplay |
| 📱 **Universal Compatibility** | Works with OptiFine AND Iris on virtually any Minecraft version |

## 🎛️ Customization Options

Fine-tune every aspect of the dithering effect with our intuitive in-game sliders:

### 🔧 Dither Settings
| Parameter | Range | Effect |
|———–|:—–:|——–|
| **Dot Scale** | 2 – 10 | Control overall dot size (exponential) |
| **Size Variability** | 0 – 1 | 0 = Bayer pattern, 1 = Halftone style |
| **Dot Contrast** | 0 – 2 | Sharpen or soften dot edges |
| **Stretch Smooth** | 0 – 2 | Combat stretched dots on angled surfaces |

### 💡 Input Controls
| Parameter | Range | Effect |
|———–|:—–:|——–|
| **Exposure** | 0 – 5 | Brightness multiplier |
| **Offset** | -1 to 1 | Brightness offset adjustment |

### 🎮 Additional Options
– **Inverse Dots** — Flip dot colors for a negative effect
– **Radial Compensation** — Stabilize during camera rotation *(recommended!)*
– **Quantize Layers** — Prevent dot morphing for a more “classic” look
– **Debug Mode** — Visualize fractal layers for development

## 📦 Installation

### For OptiFine Users
1. Download and extract the shader pack
2. Place the `shaders` folder in `.minecraft/shaderpacks/`
3. Launch Minecraft → Options → Video Settings → Shaders
4. Select **Dithering3D** and enjoy!

### For Iris Users (Fabric/Quilt)
1. Install Iris Shaders mod (1.2.0+)
2. Download and extract the shader pack
3. Place the `shaders` folder in `.minecraft/shaderpacks/`
4. Press **O** in-game to open shader menu
5. Select **Dithering3D**

> 💡 **Tip:** Press `F3 + T` to quickly reload shaders after making changes!

## 🎨 Preset Profiles

Choose from pre-configured profiles for instant results:

| Profile | Color Mode | Dot Scale | Best For |
|:——-:|:———-:|:———:|:———|
| 🟢 **LOW** | Grayscale | 4.0 | Performance, retro feel |
| 🟡 **MEDIUM** | Grayscale | 5.0 | Balanced experience |
| 🟠 **HIGH** | RGB | 5.0 | Colorful, artistic |
| 🔴 **ULTRA** | CMYK | 6.0 | Maximum visual impact |

## 🌟 Perfect For

| 📸 Screenshot enthusiasts | Create unique, artistic captures |
|:————————:|:——————————–|
| 🎬 **Content creators** | Stand out with a distinctive visual style |
| 🎮 **Retro lovers** | Relive the charm of 1-bit graphics |
| 🎨 **Artists** | Manga, comic book, and newspaper aesthetics |
| 🧪 **Tech enthusiasts** | Experience cutting-edge rendering techniques |

## ❓ FAQ

**Q: Does this work with other shaders?**
> Dithering3D is a standalone shader pack. Combining with other shaders may cause conflicts.

**Q: Why do some surfaces look different?**
> The sky and some special effects may appear different as surface-stable dithering reveals flat geometry.

**Q: Performance impact?**
> Moderate. The 3D texture sampling is optimized but more demanding than vanilla rendering. Most GPUs handle it smoothly.

**Q: Can I use this in my modpack?**
> Yes! Under MPL-2.0 license. Credit appreciated.

## 🔬 The Science Behind It

Dithering3D uses **Singular Value Decomposition (SVD)** to analyze UV coordinate derivatives in real-time, determining the exact frequency and direction of surface textures. This mathematical approach enables:

“`
✅ Perfectly uniform dot density regardless of distance
✅ Seamless fractal transitions between detail levels
✅ Circular dots even on extremely angled surfaces
✅ Rotation-stable patterns that don’t “swim”
“`

## 📚 Credits & Resources

| Resource | Link |
|:———|:—–|
| 🔗 **Original Algorithm** | [Rune Skovbo Johansen](https://github.com/runevision/Dither3D) |
| 🎥 **Technique Explanation** | [YouTube Video](https://youtu.be/HPqGaIMVuLs) |
| 💬 **Technical Discussion** | [FAQ Thread](https://github.com/runevision/Dither3D/discussions/12) |

## 📄 License

“`
Mozilla Public License 2.0 (MPL-2.0)
“`

🎨 Transform your world. Experience Dithering3D. 🎨

If you enjoy this shader, consider leaving a ⭐ and sharing this shader page !

CraftDen1al

# Plugin Synopsis
This is a lightweight plugin run on server-side, which allows you to refuse certain crafting operations from client-side.
# How to Use This Plugin
Loading world with this plugin loading, this plugin will not actively modify anything. You need to create and edit a file named `craftden1al.json` (case sensitive on Linux) in the root directory of the world (i.e. in the same directory as `level.dat`).
Example of `craftden1al.json`: (“//” comments for ease of understanding, actual JSON files do not allow comments)
“`json
{
“deny_mode”: false, // defaults ‘true’; ‘true’ for deny mode and ‘false’ for allow mode; accepts: ‘true’ | ‘false’
“patterns”: [
[
{
“type”: “rege_s_simple_datapack:all”, // a string represents a condiion type, registered in rege.rege.minecraftmod.craftden1al.util.ConditionRegistry
“data”: [] // any element, depends on the type’s requirement
}, // an object represents a conditional match, or ‘null’ represents an unconditional match; accepts: an object | ‘null’
[
“minecraft:string”, // a string(available on MC 1.7+) represents the resource location of the item, or a number represents the raw ID of the item, or an object(see below) represents a more detailed item, or ‘null’ represents an empty slot
“minecraft:string”, // the same as the previous line
“minecraft:string”, // the same as the previous line
“minecraft:string” // the same as the previous line
], // an array represents a shaped or shapeless recipe’s ingredients, or ‘null’ represents that the ingredients are unimportant
{
“id”: “minecraft:wool”, // a string(available on MC 1.7+) represents the resource location of the item, or a number represents the raw ID of the item
“dv”: 0, // a number represents the DV(Damage Value) of the item
“count”: 1 // a number represents the count of the result item; won’t be useful in ingredients’ definitions
}, // a string(available on MC 1.7+) represents the resource location of the result item, or a number represents the raw ID of the result item, or an object represents a more detailed result item, or ‘null’ represents that the result item is unimportant
2, // an integer represents the width of the shaped recipe, or null represents that the width of the shaped recipe is unimportant; if both this and next element is absent, it represents that whether the recipe to match is shaped or not is unimportant
2 // an integer represents the height of the shaped recipe, or null represents that the height of the shaped recipe is unimportant; if this element is absent and the previous element is present, it represents that the recipe to match is shapeless
]
] // defaults ‘[]’; an array represents all recipe patterns to match
}
“`
So, after editing the file and restarting the server / re-entering the world, the client player will find they are only able to craft 1 [White Wool](https://minecraft.wiki/w/White_Wool) with 4 [String](https://minecraft.wiki/w/String)s, and when trying to craft other recipes, even though the result item is displayed on the right side of the crafting screen, when trying to take out the item, it will “bounce back”, thus refusing to craft certain recipes.
# Notice
Please refer to the Minecraft Wiki’s history for recipe lists, and the width and height of the shaped crafting patterns are strictly “source-code-based”.
For example, the width and height of [Diamond Axe](https://minecraft.wiki/w/Diamond_Axe)’s are 2 and 3, not 3 and 3; and must be `[“minecraft:diamond”, “minecraft:diamond”, “minecraft:diamond”, “minecraft:stick”, null, “minecraft:stick”]`, not its horizontal-mirrored form (i.e. `[“minecraft:diamond”, “minecraft:diamond”, “minecraft:stick”, “minecraft:diamond”, “minecraft:stick”, null]`).
If you are not able to view the source code, the best way is to write both to the pattern.
# FAQ
Q: Is it useful to run this mod on the client-side?
A: Client-side loading of this mod is useful for entering singleplayer worlds. It takes no effect for entering multiplayer games. Whether it takes effect depends on whether this mod is loaded on the server side.
Q:Seems that the pattern defined in `craftden1al.json` did not being loaded?
A:Please check whether the content of `craftden1al.json` conforms to the syntax of JSON (pay special attention to the presence or absence of commas, whether the symbols are halfwidth, and no comments allowed). If there is a syntax error, the game log will show `Incorrect JSON syntax of craftden1al.json, giving up loading: reason`. As well as confirming that the key names are spelled correctly (e.g. `patterns` is written as `pattern` causing no patterns to load), and that the recipe list is incorrect.
Q: In Creative Mode, I can press a number key to move an item from the result item slot out without bouncing it back?
A: This is a feature of Creative Mode, this won’t happen in Survival/Adventure Mode.
Q: Will `craftden1al.json` be overwritten because it contains invalid item IDs, etc.?
A: No. This plugin will only read the file, not write to it.

CME is Bad

# Abstract
Players and modpack developers sometimes find the game crashed with `ConcurrentModificationExceptions` (CME) and `IndexOutOfBoundsExceptions` (IOOBE), which only give stacktrace of current thread and are hard to trace which mod causes them. Here’s one of the crashes which is caused by SimpleReloadInstance in 1.20.1 Forge:

![CME from SimpleReloadInstance](https://cdn.modrinth.com/data/cached_images/877cd1d1976b1969fffb619bdbd62b13244e02c8.png)

So this is what the mod is developed for. Players who install this mod and add javaagent to JVM Argument correctly will receive a full log for modification history of a certain collection:

![log of this mod](https://cdn.modrinth.com/data/cached_images/d3d00f23694f96591fc77d8387540d7ce29c078a.png)

# Usage
First, add this jar to mods folder.

Second, edit your Java Virtual Machine Argument in your launcher. Add `-javaagent:mods/CMESuckMyDuck-.jar=;;;`.

Finally, run the game, play and wait until the crash happens.

# Usage for Other Java Projects
This mod can not only be used for Minecraft debugging, but also be utilized to debug other java projects. Similar to Minecraft. The only different step is that you should add gson and asm jar to classpath (`-cp`) before javaagent, and add our `CMESuckMyDuck-.jar` to classpath after javaagent.

# Arguments
##
A full name of the class, which has a container that you would like to monitor. Use “ instead of `.` (a.k.a. the internal name of class).

##
A field name of the container in target class, which you would like to monitor. For Forge, use SRG name. For Fabric, use intermediary name. For NeoForge, use official name.

##
Currently, we only support three containers: `List`, `Set`, `Map`. This argument indicates the type of monitored container.

## `static` or `nonstatic`. This argument indicates the container is a static field or non-static field.

# How to get and
Let’s start with an example.

First, take a look at the stacktrace of CME/IOOBE:

![Replace this with a description](https://cdn.modrinth.com/data/cached_images/f4908f0fb44bc480d0fba4a1714bf9dbca4b8043.png)

Second, read the source code of SoundEngine and confirm which container is facing this issue:

![Replace this with a description](https://cdn.modrinth.com/data/cached_images/26c2eefabbde9a9ce3aea62dbfdf1012d736c16d.png)

Now we know we should monitor map `field_217942_m` (`instanceToChannel` in `SoundEngine`). Keep going.

Third, install this mod, and add “`-javaagent:mods/CMESuckMyDuck-1.0.0.jar=net/minecraft/client/audio/SoundEngine;field_217942_m;Map;nonstatic`” to Java Virtual Machine Argument. Relaunch the game and wait for the next crash.

Finally, open `CMESuckMyDuck.log` file and you will see which thread and which mod has concurrently modified the container.

# Examples (JVM Arguments)
## ConcurrentModificationException from SoundEngine in Forge 1.16.5 Environment
`-javaagent:mods/CMESuckMyDuck-1.0.0.jar=net/minecraft/client/audio/SoundEngine;field_217942_m;Map;nonstatic`

## ConcurrentModificationException from PotionBrewing in Forge 1.20.1 Environment
`-javaagent:mods/CMESuckMyDuck-1.0.0.jar=net/minecraft/world/item/alchemy/PotionBrewing;f_43494_;List;static`

## ArrayIndexOutOfBoundsException from Zeta mod
`-javaagent:CMESuckMyDuck-1.0.0.jar=org/violetmoon/zetaimplforge/event/ForgeZetaEventBus;convertedHandlers;Map;nonstatic`

# Other options
## Log Level
Use system property `-Dcme_suck_my_duck.log_level=` to set custom log level.

Default 1, which means no debug message will be logged.

Users can set it to 0 to output debug message, which is not recommended – query functions like Map#get, Set#containsAll will also be logged when set to 0, and make the file very very long.

## ASM API Version (v1.0.2+)

In order to maintain compatibility with the latest version of Minecraft, this mod is compiled with asm version 9.7. For older versions of Minecraft (such as 1.12.2), API level operations such as ASM_9 cannot be applied, so players need to use `-Dcme_suck_my_duck.asm_api_version=` to modify the ASM API version compatibility. For example, game version 1.12.2: `-Dcme_suck_my_duck.asm_api_version=5`.

## File Max Entries (v1.0.3+)

Since we notice that when crash happens, the last few operations in the log are much more important than the previous ones. So our mod adopts a paging strategy after v1.0.3, and only the last two pages are retained at the end. The number of logs output on each page (that is, the number of operation call stacks) is fixed, and the default value is 500. Players can use `-Dcme_suck_my_duck.file_max_entries=` to modify the maximum number of elements on the page.

## Whitelist of Constructor (v1.0.3+)

Sometimes a container in a certain class is used in many places (eg. CompoundTag#tags). Directly using this mod will cause the log to be too long or the valid content to be replaced by subsequent operations. Therefore, players can specify an additional constructor whitelist to monitor the corresponding container in the corresponding class of a specific module. The default is empty, that is, there is no whitelist. Players can use `-Dcme_suck_my_duck.whitelist_constructor_stacktrace=` to specify it. If any line in the stack trace where the container is constructed includes the content of the whitelist string, the container will be monitored – otherwise, the container will not be monitored, which greatly simplifies the log output information.

## Transform to Thread Safe (v1.0.4+)
Use system property `-Dcme_suck_my_duck.transform_to_thread_safe=true` to transform the field into a thread-safe container.

This is NOT recommended unless you like slowness and don’t want to fix the problem.

## Inject method (v1.0.4+)
Use system property `-Dcme_suck_my_duck.inject_method=true` to switch to inject mode.

If set, you should use `-javaagent:CMESuckMyDuck-.jar=;` and whenever this method is called, you will receive a stack trace in log files.

## Ignore threads (v1.0.5+)
Use system property `-Dcme_suck_my_duck.ignore_threads=;;;…` to ignore some thread that is expected to modify the given container (or call the given method). For example, `-Dcme_suck_my_duck.ignore_threads=”Server thread”`.

## Stop logging early (v1.0.7+)
Use system property `-Dcme_suck_my_duck.stop_logging_if_exception_created=false` to stop logging if critical error occurs.

## Trace ID Updater (v1.0.8+)
Use system property `-Dcme_suck_my_duck.trace_id_updater=;` to update trace ID when calling the given method. This might be useful in inject mode.

## Monitoring Local Variables (v1.1.0+)
Use system property `-Dcme_suck_my_duck.local_var_index=` to monitor local variable at given index in the given method.

If set, you should use `-javaagent:CMESuckMyDuck-.jar=;;`. By the way, the index can be reused by different local variables. So you might have to use `-Dcme_suck_my_duck.match_local_index=` to specify the ordinal of ASTORE operation to indicate which local variable to monitor.

# Conclusion
I like eating peking duck. It’s so delicious!

![Photo by Polina Tankilevitch: https://www.pexels.com/photo/close-up-photo-of-savory-peking-duck-dish-on-a-ceramic-bowl-5848604/](https://cdn.modrinth.com/data/cached_images/d4ce4bba6f0bef8780cd5843390bf3358dd9b55b_0.webp)