CustomSkinLoader

# CustomSkinLoader
## What’s this?
Custom Skin Loader mod for Minecraft.
It’s a mod which can load skins and capes from any online source or from your local.

## Download

Build Server : [CircleCI](https://circleci.com/gh/xfl03/MCCustomSkinLoader) & ~~[Infinity Studio CI](https://ci.infstudio.net/job/CustomSkinLoader/)~~
Release Page : [MCBBS](http://www.mcbbs.net/thread-269807-1-1.html) & [GitHub](https://github.com/xfl03/MCCustomSkinLoader/releases) & [CurseForge](https://minecraft.curseforge.com/projects/customskinloader)

## Contact Us
[QQ Group](https://im.qq.com/): [651287593](https://jq.qq.com/?_wv=1027&k=vF16R5tg)
[Telegram](https://telegram.org/): [@customskinloader](https://t.me/customskinloader)

## Feature
### Support Plenty of Skin Load API and Customizable Skin Load List
Supported Skin Load APIs:
– [Mojang API](http://wiki.vg/Mojang_API)
– [CustomSkinAPI](https://github.com/xfl03/CustomSkinLoaderAPI/tree/master/CustomSkinAPI)
– CustomSkinAPIPlus (Test Only)
– [UniSkinAPI](https://github.com/RecursiveG/UniSkinServer/tree/master/doc)
– [ElyByAPI](http://docs.ely.by/api.html)
– Legacy

You can use this feature to customize your skin load list so as to load your skins from any skin server you want.
If you are the owner of skin server, you can use CustomSkinLoader to load skins from your server if one of the APIs has been actualized by your server.

### HD Skins Support
Even though you don’t have OptiFine and MCPatcher, CustomSkinLoader can still load and render HD skins.
You can easily to get a better view of skins.

### Skull Support
Fixed skull loading bug, you can apply any skin to your skull now.
Dynamic skull supported.

### Profile Cache
– Decrease the frenquency of using the network.
– Meanwhile, you can still load profiles when network is unavailable.(*)

*Only when it is opened in configratulation.

### Local Skin
Load skins without a skin server.
Furthermore, by using this function you can preview your skins in game and even change the default skin and model.
You can load local skins by using any API (excluding MojangAPI).
*While using default configratulation, just put your skins into `.minecraft/CustomSkinLoader/LocalSkin/(skin|cape)s/{USERNAME}.png`.

### Extra List
A json file generated by skin servers which supports this feature.
To add a server to your load list, users just need to put the file into `.minecraft/CustomSkinLoader/ExtraList` .

### Transparent Skin Support
The problem of incorrectly rendering textures has been fixed.

### Spectator Menu Fixed
By using this mod, you can see correct avatar of players in Spectator Menu rather than steve and alex.

## Default Load List
– [Mojang](http://www.minecraft.net/) (Mojang API)
– [LittleSkin](https://littleskin.cn/) (CustomSkinAPI)
– [Blessing Skin](http://skin.prinzeugen.net/) (CustomSkinAPI)
– [ElyBy](http://docs.ely.by/) (ElyByAPI)
– SkinMe (UniSkinAPI)
– [TLauncher](https://tlauncher.org/) (ElyByAPI)
– LocalSkin (Legacy)
If you want to apply to add other skin server to default list, please go to [issue](https://github.com/JLChnToZ/MCCustomSkinLoader/issues).

## To Skin Server Owner
CustomSkinLoader is designed for loading from any server, which makes the mod complex.
It’s not a good idea to refer to CustomSkinLoader’s source code to develop your own skin mod.
It’s recommended to use CustomSkinLoader for your server directly.
Furthermore, you can add your server to ‘Default Load List’.
You can also use ‘ExtraList’ which makes it easier for users to add your server into load list.

## Development and Contribution
See [CONTRIBUTING.md](CONTRIBUTING.md)

## Copyright & LICENSE
### Binary File
You could not modify binary file.
Feel free to use and share this mod and unmodified file in anyway like modpack.
When using in modpack, you must put ‘CustomSkinLoader’ in mod list.
You could not repost this mod to any website without permission.
You could not earn money with this mod excluding modpack.
### Source Code
#### Package ‘customskinloader’
Including some codes from
– [AsteriskTeam/TabIconHackForge](http://git.oschina.net/AsteriskTeam/TabIconHackForge) (GPLv3)
– [RecursiveG/UniSkinMod](https://github.com/RecursiveG/UniSkinMod) (GPLv3)
– [NekoCaffeine/Alchemy](https://github.com/NekoCaffeine/Alchemy) (GPLv3)

Copyright © 2013-2014 Jeremy Lam “JLChnToZ”.
Copyright © 2014-2019 Alexander Xia “xfl03”.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

GPLv3: http://www.gnu.org/licenses/gpl.html

You should change the name of the package to avoid others’ misunderstanding.

Customizable Timer

I made a simple timer data pack with some customization!

# Commands
– /function timer:settings -> Change settings like color and style
– /function timer:pause -> Pause the timer
– /function timer:resume -> Start or resume the timer
– /function timer:reset -> Reset and pause the timer.

CRSS Resource Pack

# CRSS Resource Pack

This was the resource pack used in CRSS’ modpack, which has a panorama of the spawn area in [ROP](https://crss.cc/nation/psf).

## CRSS Resource Pack is no longer being updated

I don’t really see a reason to keep updating this resource pack as the modpack is also discontinued.

![The pack applied in 1.8.9](https://cdn.modrinth.com/data/cached_images/84f6348ce59731fcb57e5761b6da10b551149029.png)

CRSS by Blryface is marked with CC0 1.0

Creeper Shield

# Creeper Shield

This resource pack replaces the default shield with a custom 3D model.

The design uses a creeper theme.

No OptiFine required. Vanilla compatible.

## More Shield Themes

– [Black](https://modrinth.com/project/noire-shield)
– [Blue](https://modrinth.com/project/blue-shield)
– [Dark Red](https://modrinth.com/project/dark-red-shield)
– [Mirror](https://modrinth.com/project/mirror-shield)
– [Navy Blue](https://modrinth.com/project/navy-blue-shield)
– [Rabbit](https://modrinth.com/project/rabbit-shield)
– [Red](https://modrinth.com/project/red-shield)

Creeper Ores

### What does this do?
This resource pack retextures all ores to resemble the face of a creeper.

### What versions does this support?
This resource pack works for versions 1.13 (1.13-pre3) and up.

Crazy Tool Models

Welcome to the CrazyToolModels texture pack for Minecraft! This unique texture pack provides a fresh perspective on the tools in your Minecraft world. Instead of focusing on traditional textures, this pack introduces a completely new dimension by overhauling the model rendering for tools.

Craftable Uncraftable Objects [CUO]

A Minecraft Project that adds crafting recipes for normally uncraftable items in Survival mode, along with custom advancements for a more rewarding experience.

**✨ Features**
* **New Crafting Recipes**: Craft items like the Enchanted Golden Apple, Totem of Undying, Trident, Horse Armors, Chainmail Armors, and more.
* **Custom Advancements**: Unique rewards for crafting special items.
* **Wide Compatibility**: Supports Minecraft Java Edition from version 1.13.x up to the latest snapshots.

**🏆 Advancements** & **📜 Recipes**

Advancements
Not Enough Recycling!

![Recycling Advancement](https://cdn.modrinth.com/data/cached_images/4df5333f58e864812f5d538324177e2ba2a3ead4.png)

You will get this Advancement when you craft all **Recycling** recipes.

Who Enchanting Armor Those Days?

![Enchanted Golden Apple Advancement](https://cdn.modrinth.com/data/cached_images/37fefe202558e3cb028bc1603398bf0e12c6fb06.png)

You will get this Advancement when you craft or have an **Enchanted Golden Apple**.

Forget Die.

![Totem of Undying Advancement](https://cdn.modrinth.com/data/cached_images/ba18008a38c21b28787de8081f9b9feb642e8d7a.png)

You will get this Advancement when you craft or have a **Totem of Undying**.

Water Weapon.

![Trident Advancement](https://cdn.modrinth.com/data/cached_images/d8a1ed19988996f6e81b416cc5b430efea5ac29e.png)

You will get this Advancement when you craft or have a **Trident**.

It’s Time to Take a Horse.

![Saddle Advancement](https://cdn.modrinth.com/data/cached_images/30ee0ae6dc27e1c255ff0b30a2223f672fc80be7.png)

You will get this Advancement when you craft or have a **Saddle**.

WoW!

![Experience Bottle Advancement](https://cdn.modrinth.com/data/cached_images/713524805829ae6bc564a71b54f2685b039a3cd6.png)

You will get this Advancement when you craft or have an **Experience Bottle**.

Recipes
Bell

![Bell Recipe](https://cdn.modrinth.com/data/cached_images/f3e34c1750a54d71047766393a78eb37b0587e40.png)

Chainmail Armors
Chainmail Helmet

![Chainmail Helmet](https://cdn.modrinth.com/data/cached_images/0add4b793bb59eee925c672b4a3970a582d248a5.png)

Chainmail Chestplate

![Chainmail Chestplate Recipe](https://cdn.modrinth.com/data/cached_images/c243785cf0515e2cb99e8a905eae57f7b0ddf71f.png)

Chainmail Leggings

![Chainmail Leggings Recipe](https://cdn.modrinth.com/data/cached_images/2de08c737e1790d5ea01f4d4c8287b3c83b0684a.png)

Chainmail Boots

![Chainmail Boots Recipe](https://cdn.modrinth.com/data/cached_images/ad72e5db7d1b70ae6b5cb710ba5fcfeddb044e32.png)

Cobweb

![Cobweb Recipe](https://cdn.modrinth.com/data/cached_images/d94c8480c0f082c7731d5a27c2dfc6fac496a446.png)

Crying Obsidian (1.17 or newer)

![Crying Obsidian Recipe](https://cdn.modrinth.com/data/cached_images/44ed3f9e4125212c260538828bb3d23bb465d4cc.png)

Debug Stick

![Debug Stick Recipe](https://cdn.modrinth.com/data/cached_images/1630fa2509882f2bec7f42504d13a6a3a01c2756.png)

Recommended to Use **[Tweaker Stick Data Pack](https://modrinth.com/datapack/tweaker-stick)** to able to use it with full functionality or instead use Creative mode to able to use it until I add an update that fix this problem.

Elytra

![Elytra Recipe](https://cdn.modrinth.com/data/cached_images/1aa5bac9b321a15885afc97b11f8a029fa076f23.png)

Enchanted Golden Apple

![Enchanted Golden Apple](https://cdn.modrinth.com/data/cached_images/4dab79a18f2dacba46242421a6006d820a67aeef.png)

Experience Bottle

![Experience Bottle Recipe](https://cdn.modrinth.com/data/cached_images/7afbeedbc49ebab86edc534d2242e68940bdf937.png)

Gunpowder

![Gunpowder Recipe (Coal)](https://cdn.modrinth.com/data/cached_images/5dd9556018109526703338bca9504077e1276cca.png)

![Gunpowder Recipe (Charcoal)](https://cdn.modrinth.com/data/cached_images/b4fa707a975f85a19f0addc70822b18329b0fcf8.png)

It will take 30 seconds to give you 1 **Gunpowder**.

(Only works on Furnace)

Horse Armors
Diamond Horse Armor

![Diamond Horse Armor Recipe](https://cdn.modrinth.com/data/cached_images/8f1d5ae84447b577065c46893112ae6a93fde500.png)

Golden Horse Armor

![Golden Horse Armor Recipe](https://cdn.modrinth.com/data/cached_images/7b51141c01e36aa84439277adfab33126f7fda9a.png)

Iron Horse Armor

![Iron Horse Armor Recipe](https://cdn.modrinth.com/data/cached_images/f159fd95893b832667f9b8b5a093f1852d0862f8.png)

Copper Horse Armor (1.21.9 or newer)

![Copper Horse Armor Recipe](https://cdn.modrinth.com/data/cached_images/38c1f3c87fd4dcdd5b940837112a773dafc70cbe.png)

Leather Horse Armor

![Leather Horse Armor Recipe](https://cdn.modrinth.com/data/cached_images/c650a7ffc94e3fd3c52893666090a60d06415af6.png)

(Only works on Furnace)

Leather

![Leather Recipe](https://cdn.modrinth.com/data/cached_images/a57faff967af2f5ce33f59ae8bc242948ff0990a.png)

It will take 10 seconds to give you 1 **Leather**.

(Only works on Furnace)

Name Tag (1.21.11 or older)

![Name Tag Recipe](https://cdn.modrinth.com/data/cached_images/6d22d6c2281e0a47243af958a0d77fe2e251a22e.png)

Nautilus Armors (1.21.11 or newer)
Diamond Nautilus Armor

![Diamond Nautilus Armor Recipe](https://cdn.modrinth.com/data/cached_images/f713e8d594f8dc775d65704e29eb412e58776208.png)

Golden Nautilus Armor

![Golden Nautilus Armor Recipe](https://cdn.modrinth.com/data/cached_images/fcabcd93c9fa1fee81fb3e4ab6dd85350ef26005.png)

Iron Nautilus Armor

![Iron Nautilus Armor Recipe](https://cdn.modrinth.com/data/cached_images/9bcedea8daddb27af77143206a27934de0438abf.png)

Copper Nautilus Armor

![Copper Nautilus Armor Recipe](https://cdn.modrinth.com/data/cached_images/8f16f85c52deffd675911932f41894479516da17.png)

Nautilus Shell

![Nautilus Shell Recipe](https://cdn.modrinth.com/data/cached_images/2b3ed38ac572bc8ab4dcecdc8e85a4166a34e06c.png)

Recycling Recipes
Recycling Amethyst Block (1.17 or newer)

![Recycling Amethyst Block Recipe](https://cdn.modrinth.com/data/cached_images/13dafd6f387111e977bfae7534a4d1e32f77ccbf.png)

Recycling Chainmail Boots

![Recycling Chainmail Boots Recipe](https://cdn.modrinth.com/data/cached_images/641840809ba617130ca1e6e1295c88fc82766a20.png)

Recycling Chainmail Chestplate

![Recycling Chainmail Chestplate Recipe](https://cdn.modrinth.com/data/cached_images/51db3357fe4f6a1918d33134ae909aa05e6cae40.png)

Recycling Chainmail Helmet

![Recycling Chainmail Helmet Recipe](https://cdn.modrinth.com/data/cached_images/6836f936b11ce73256030a0d222d201c170f1035.png)

Recycling Chainmail Leggings

![Recycling Chainmail Leggings Recipe](https://cdn.modrinth.com/data/cached_images/b10c9c614802d5f10b49d4cde3d9e9f59b9d9601.png)

Recycling Cobweb

![Recycling Cobweb Recipe](https://cdn.modrinth.com/data/cached_images/b161d2cfacf529a5d3c2c60d1168d20ec757cf9b.png)

Recycling Crying Obsidian

![Recycling Crying Obsidian Recipe](https://cdn.modrinth.com/data/cached_images/00b7490120171c73355eba5f1568e6c66e007ef4.png)

Recycling Packed Ice

![Recycling Packed Ice Recipe](https://cdn.modrinth.com/data/cached_images/9540c01a67e18096689c11053f20f992b6196288.png)

Recycling Quartz Block

![Recycling Quartz Block Recipe](https://cdn.modrinth.com/data/cached_images/66c904c2f3dd9337a8abc06bc610b35cfd044fd3.png)

Saddle

![Saddle Recipe](https://cdn.modrinth.com/data/cached_images/ca52c3a0f543c868ecef1635e709f82505915289.png)

Totem of Undying

![Totem of Undying Recipe](https://cdn.modrinth.com/data/cached_images/0451d5ee75028e0583a4c888cb8569d39f1bf029.png)~~~~

Trident

**Trident (1.21 or newer)**

![New Trident Recipe](https://cdn.modrinth.com/data/cached_images/719dbae353d3ab8b148df8f5f20de25ab0370e14.png)

**Trident (1.20.6 or older)**

![Old Trident Recipe](https://cdn.modrinth.com/data/cached_images/42081146b8c874e7fd16b18849a0209f27081145.png)

**🗒️ News & Updates**

To see the latest News about my Projects:

[Telegram Channel](https://t.me/iAhmedMinecraft)

[Patreon](https://www.patreon.com/c/iahmedminecraft/posts)

Discord: (Coming Soon..)

**📂 Source Code & Issues**

To see the Source Code of the Project:

[GitLab](https://gitlab.com/iahmed_7024-group/craftable-uncraftable-objects)

Report about a problem or tell a suggestion:

[GitLab](https://gitlab.com/iahmed_7024-group/craftable-uncraftable-objects/-/issues)

**🗂️ Installation**

Linux:

World that already exists:
1. Go to this location “~/.minecraft/saves/” (Make sure you are showing the Hidden Folders and Files by pressing Left Ctrl + H).
2. Choose the world folder you want to put the Data Pack in it.
3. Open datapacks folder, then put the data pack.zip in the datapacks folder.
4. Reload the world by /reload command or by Quit the world and rejoin it.

New World:
1. Open Minecraft, then click on “Singleplayer”.
2. Click on “Create New World”, then click “More World Options…”.
3. Click on “Data Packs” button, then drag the data pack file into Minecraft.
4. Click “Done” and “Create New World”.

———————————————-

MacOS:

World that already exists:
1. Go to this location “~/Library/Application Support/minecraft”.
2. Choose the world folder you want to put the Data Pack in it.
3. Open datapacks folder, then put the data pack.zip in the datapacks folder.
4. Reload the world by /reload command or by Quit the world and rejoin it.

New World:
1. Open Minecraft, then click on “Singleplayer”.
2. Click on “Create New World”, then click “More World Options…”.
3. Click on “Data Packs” button, then drag the data pack file into Minecraft.
4. Click “Done” and “Create New World”.

———————————————-

Windows:

World that already exists:
1. Press Win + R, then type %appdata%, then press Enter.
2. Open “Roaming” folder, then “.minecraft” folder, then open “saves” (Make sure you are showing the Hidden Folders and Files by pressing Left Ctrl + Left Shift + . (period)).
4. Choose the world folder you want to put the Data Pack in it.
5. Open datapacks folder, then put the data pack.zip in the datapacks folder.
6. Reload the world by /reload command or by Quit the world and rejoin it.

New World:
1. Open Minecraft, then click on “Singleplayer”.
2. Click on “Create New World”, then click “More World Options…”.
3. Click on “Data Packs” button, then drag the data pack file into Minecraft.
4. Click “Done” and “Create New World”.

Enjoy.

# Important Thing!
I know this is a Minecraft Project and this project has Minecraft things but because my project is an open source, I will talk about this.

Starting September 2026, a silent update, nonconsensually pushed by Google, will block every Android app whose developer hasn’t registered with Google, signed their contract, paid up, and handed over government ID.
For more information: https://keepandroidopen.org/.

Config Backuper

A simple mod for backing up all configurations at the start of Minecraft.

## Mod review with subtitles

## Features

– Backs up configurations at the start of Minecraft
– Backs up game configurations
– Backs up mod configurations
– Backs up shader configurations
– Compression of backups
– Removes old backups

## Configuration

The configuration file is located at `config/config-backuper.json`.

– `includeGameConfigs` – add game configurations to the backup
– `includeModConfigs` – add mod configurations to the backup
– `includeShaderPackConfigs` – add shader configurations to the backup
– `maxBackups` – maximum number of stored backups (`-1` disables deletion of old backups, default `10`)
– `compressionEnabled` – use compression for backups (enabling compression reduces the size of the backup, but slows down its creation a bit)
– `backupFolder` – directory for backups (`./` – current game directory)
– `backupFilePrefix` – prefix for backup file names
– `backupFileSuffix` – suffix for backup file names

## Modpacks

You can use this mod in modpacks without requesting permission.

CTE – Combine The Experience

RU:
Этот датапак объединяет сферы опыта в одну, **сохраняя их ценность**. Он немного оптимизирует игру, а также не заставляет ждать впитывания всего опыта. По умолчанию объединяет опыт на растоянии 2 блоков, но с CTE v3 можно выбрать своё растояние с момощью `/function cte:menu` прямо внутри игры.

_Если я забыл обновить на последнюю версию mc, то обновлю по запросу._

EN:
This datapack combines the spheres of experience into one, **preserving their value**. It optimizes the game a bit, and also does not make you wait for the whole experience to be absorbed. By default, it combines the experience at a distance of 2 blocks, but with CTE v3, you can select your distance with the power of `/function cte:menu` right inside the game.

_If I forgot to upgrade to the latest version of the mc, I will update it on request._

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)