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.

CraftPresence

# CraftPresence

Completely customize the way others see you play Minecraft via Discord’s Rich Presence API & the DiscordIPC API
by jagrosh!

![License: MIT](https://opensource.org/licenses/MIT)
![Crowdin](https://crowdin.com/project/craftpresence)
![Codacy Badge](https://app.codacy.com/gl/CDAGaming/CraftPresence/dashboard?utm_source=gl&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
![Pipeline Status](https://gitlab.com/CDAGaming/CraftPresence/commits/master)

![CurseForge-Downloads](https://www.curseforge.com/minecraft/mc-mods/craftpresence)
![CurseForge-Availability](https://www.curseforge.com/minecraft/mc-mods/craftpresence)

![Modrinth-Downloads](https://modrinth.com/mod/craftpresence)
![Modrinth-Availability](https://modrinth.com/mod/craftpresence)

## General Notes

* Beginning in v2.5.0, UniLib is now a **required** dependency
* UniLib is a new library mod I have created to abstract common API functions for more general use cases as well as
future projects
* The mod can be downloaded here
* This mod **will crash** if UniLib is not found or if using an incompatible version
* This mod identifies as a **Client Side-only** mod
* This means it **will not run** on the Server’s side.
* Fabric and Quilt mod loaders will simply ignore the
mod, while other mod loaders may crash.
* Some versions of the mod for Minecraft 1.14.x and above require
the Fabric API
and the Fabric mod loader
* Some versions of the mod for Minecraft 1.13.x require
the Rift API
and the Rift mod loader
* Some versions of the mod for Minecraft 1.1.0 and below
require Risugami’s ModLoader

## Features

In addition to having the ability to change your discord status from “Playing Minecraft”,
This mod offers plenty of customization options to specify entirely how others see you play.
From having your current biome show up, to which dimension your in, as well as which server you’re in, and more.
The customization possibilities are limitless, with the only real limit being how creative you customize your display.

### Launcher and Pack Integration Support

CraftPresence will detect whether your Launch Directory contains:

* A ATLauncher Instance (instance.json)
* A valid Twitch/Overwolf/Curse/GDLauncher Manifest (manifest.json, minecraftinstance.json)
* A MCUpdater Instance (instance.json)
* A Modrinth Instance (profile.json)
* A MultiMC Instance (instance.cfg)
* A Technic installedPacks File (installedPacks)

If using any of these launchers, note the following:

* Prior to v1.6.0, it’ll put the packs name in your display as well as show its icon (when not in a
server)
* From v1.6.0 until v2.0.0, it’ll instead parse the Pack’s name into the `&PACK&` placeholder, that you can configure
for
usage in the RPC
* In v2.0, the pack’s info is instead parsed into the `pack.name` and `pack.icon` placeholders, that you can configure
for
usage in the RPC

As an example, this is how the mod will convert a pack’s name to an iconKey:

Example: `All the Mods 7` would parse as `allthemods7`

Note: MultiMC natively has an Icon Key Property that is used instead of converting from the Pack’s Display Name

## Commands

CraftPresence currently offers the following Commands:

Keep in mind the following:

* Commands must be prefixed by either `/craftpresence` or `/cp`
* In v1.5.0 and above, these commands are only usable via the Commands Gui, found within the Config Gui

___

* `/cp compile “[expr]”` – Test the output of a placeholder expression, via Starscript
* `/cp search (type:typeName, [searchTerm], all)` – Search for valid placeholders available to use with Rich Presence
* `/cp reload` – Reloads mod data
* `/cp request` – View Join Request Info
* `/cp export` – View export commands for mod data
* `/cp view` – Help command to display the commands available to view and control a variety of display data
* `/cp view placeholders` – Displays all available placeholders for use in the RPC
* `/cp view currentData` – Displays your Current RPC Data, in text form
* `/cp view assets (custom | all)` – Displays all asset icon keys available to you
* `/cp view dimensions` – Displays all Dimension Names available for use, requires `Show Current Dimension` to be
enabled
* `/cp view biomes` – Displays all Biome Names available for use, requires `Show Current Biome` to be enabled
* `/cp view servers` – Displays all Server Addresses available for use, requires `Show Game State` to be enabled
* `/cp view screens` – Displays all Gui Names available for use, if Per-Gui is enabled
* `/cp view items` – Displays all Item Names available for use, if Per-Item is enabled
* `/cp view entities` – Displays all Entity Names available for use, if Per-Entity is enabled
* `/cp reboot` – Reboots the RPC
* `/cp shutdown` – Shutdown the RPC (Can be turned on from `/cp reboot`)
* `/cp (help | ?)` – Help Command to display the above commands and these explanations

## KeyBinds

CraftPresence currently contains the following KeyBinds:

Notes:

* In v1.5.5 up to v1.8.0, KeyBinds are now customized in the Accessibility Settings in the Config Gui, and not the
normal controls menu
* In v1.8.0 and above, KeyBinds can now be customized in either the dedicated menu in the Config Gui or the normal
control menu on applicable versions

___

* `Open Config Gui` – KeyBind to open the CraftPresence Config Gui (Default: GRAVE/TILDE Key)

## About Placeholders and Functions

In some configuration areas, CraftPresence provides some placeholders and functions to make things easier:

Keep in mind the following:

* In v2.0.0, placeholders have been rewritten to be compatible
with Starscript
* The older list of this section can be
viewed here)
* All Placeholders, functions, and code expressions must be surrounded with curly brackets (Example: `{foo.bar}`)
* In the event that you need to combine a placeholder with other data in a function argument, use the `getResult`
function
* Additional functions and standard variables are available
within StandardLib

___

### Placeholder List

The following placeholders are available for use anywhere in CraftPresence:

* General Placeholders:
* `general.brand` – The Minecraft branding label
* `general.icon` – The default display icon
* `general.mods` – The amount of mods currently in your mods folder
* `general.title` – The Minecraft title label
* `general.version` – The Minecraft version label
* `general.protocol` – The Minecraft version protocol label
* Menu Event Placeholders (Loading and Main Menu):
* `menu.message` – The main menu’s display data, while applicable
* `menu.icon` – The main menu’s display icon, while applicable
* Pack Placeholders:
* `pack.name` – The currently detected pack’s name
* `pack.icon` – The currently detected pack’s icon
* `pack.type` – The currently detected pack’s type
* Player Placeholders:
* `player.name` – Your username
* `player.uuid.short` – Your UUID (Trimmed Format)
* `player.uuid.full` – Your UUID (Full Format, if valid UUID)
* `player.icon` – Your player head icon, while applicable
* `player.position.x` – Your current in-game X position
* `player.position.y` – Your current in-game Y position
* `player.position.z` – Your current in-game Z position
* `player.health.current` – Your current in-game health
* `player.health.max` – Your current in-game maximum health
* `player.mode` – Your current game mode
* Gui Placeholders:
* `screen.message` – The current Gui Screen’s display data, while applicable
* `screen.name` – The current Gui Screen name
* `screen.icon` – The current Gui Screen icon
* `screen.default.icon` – The default Gui Screen icon
* Biome Placeholders:
* `biome.message` – The current biome’s display data, while in-game
* `biome.name` – The current biome name
* `biome.identifier` – The current biome identifier
* `biome.icon` – The current biome icon
* `biome.default.icon` – The default biome icon
* Dimension Placeholders:
* `dimension.message` – The current dimension’s display data, while in-game
* `dimension.name` – The current dimension name
* `dimension.identifier` – The current dimension identifier
* `dimension.icon` – The current dimension icon
* `dimension.default.icon` – The default dimension icon
* Entity Placeholders:
* `entity.default.icon` – The default entity icon
* `entity.target.message` – The currently targeted entity’s display data, while applicable
* `entity.target.name` – The currently targeted entity’s name
* `entity.target.icon` – The currently targeted entity’s icon
* `entity.riding.message` – The currently riding entity’s display data, while applicable
* `entity.riding.name` – The currently riding entity’s name
* `entity.riding.icon` – The currently riding entity’s icon
* World Placeholders:
* `world.difficulty` – The current world’s difficulty
* `world.weather.name` – The current world’s weather name
* `world.name` – The name of the current world
* `world.type` – The current world type
* `world.time.format_24` – The current world’s in-game time (24-hour format)
* `world.time.format_12` – The current world’s in-game time (12-hour format)
* `world.time.day` – The current world’s in-game day count
* Server Placeholders:
* `server.message` – The current server’s display data, while in-game
* `server.icon` – The current server icon
* `server.default.icon` – The default server icon
* `server.players.current` – The server’s current player count
* `server.players.max` – The server’s maximum player count
* `server.address.full` – (MP) The raw current server address
* `server.address.short` – (MP) The formatted current server address
* `server.name` – (MP) The current server name
* `server.motd.raw` – (MP) The current raw server motd
* `server.minigame` – (Realm) The current realm minigame name
* `server.type` – (Realm) The current realm world type
* Item Placeholders:
* `item.message.default` – The default item display data, while applicable
* `item.message.holding` – The held item(s) display data, while applicable
* `item.message.equipped` – The equipped item(s) display data, while applicable
* `item.[slotId].name` – Current `slotId` item name
* `item.[slotId].message` – Current `slotId` item message
* Integration – Replay Mod:
* `replaymod.time.current` – When in the Video Renderer, retrieves the `renderTimeTaken` field
* `replaymod.time.remaining` – When in the Video Renderer, retrieves the `renderTimeLeft` field
* Extra Placeholders (Advanced Usage):
* `_general.instance` – The `Minecraft` Instance
* `_general.player` – The `Minecraft` Player Instance
* `_general.world` – The `Minecraft` World Instance
* `_config.instance` – The Mod Config Instance
* `_[moduleName].instance` – An instance of one of the modules CraftPresence has
* Module Order: `biome, dimension, entity, item, screen, server, <...>`
* `data.biome.instance` – An instance of the player’s current biome
* `data.biome.class` – The class object for the player’s current biome
* `data.dimension.instance` – An instance of the player’s current dimension
* `data.dimension.class` – The class object for the player’s current dimension
* `data.entity.target.instance` – An instance of the currently targeted entity
* `data.entity.target.class` – The class object for the currently targeted entity
* `data.entity.riding.instance` – An instance of the currently riding entity
* `data.entity.riding.class` – The class object for the currently riding entity
* `data.item.[slotId].instance` – An instance of the current `slotId`
* `data.item.[slotId].class` – The class object for the current `slotId`
* `data.screen.instance` – An instance of the current Gui Screen
* `data.server.motd.line_[number]` – Retrieves a specific line of `server.motd.raw`
* `data.[moduleName].time` – The timestamp at which a module has changed its primary state
* Use `data.general.time` for the current RPC Starting Timestamp

### Function List

The following functions are available for use anywhere in CraftPresence:

* `asIcon(input, whitespaceIndex ?: ”)` – Converts a String into a Valid and Acceptable Icon Format
* `asIdentifier(target, formatToId ?: false, avoid ?: false)` – Converts an Identifier into a properly formatted and
interpretable Name
* `asProperWord(input, avoid ?: false, skipSymbolReplacement ?: false, caseCheckTimes ?: -1)` – Converts input into a
Properly Readable String
* `capitalizeWords(input, timesToCheck ?: -1)` – Capitalizes the words within a specified string
* `clampDouble(num, min, max)` – Clamps the Specified Number between a minimum and maximum limit
* `clampFloat(num, min, max)` – Clamps the Specified Number between a minimum and maximum limit
* `clampInt(num, min, max)` – Clamps the Specified Number between a minimum and maximum limit
* `clampLong(num, min, max)` – Clamps the Specified Number between a minimum and maximum limit
* `convertTime(input, originalPattern, newPattern)` – Convert the specified string into the specified date format, if
able
* `convertTimeFormat(dateString, fromFormat, toFormat)` – Convert a Date String from one format to another format
* `convertTimeZone(dateString, fromFormat, fromTimeZone, toTimeZone)` – Convert a Date String from one timezone to
another timezone
* `dateToEpochMilli(dateString, format, timeZone ?: null)` – Convert Date String to Epoch Timestamp in milliseconds
* `dateToEpochSecond(dateString, format, timeZone ?: null)` – Convert Date String to Epoch Timestamp in seconds
* `epochMilliToDate(epochMilli, format, timeZone ?: null)` – Convert Epoch Timestamp to Date String in the given format
and
timezone
* `epochSecondToDate(epochSecond, format, timeZone ?: null)` – Convert Epoch Timestamp to Date String in the given
format and
timezone
* `executeMethod(classToAccess=Object|String|Class, instance=Object, methodName=String, …)` –
Invokes the specified Method in the Target Class via Reflection
* `format(input=String, args=Object…)` – Returns a formatted string using the specified format string and arguments
* `formatAddress(input, returnPort ?: false)` – Formats an IP Address based on Input
* `getArrayElement(content=Array, index)` – Retrieves the array element from the specified content, or null if unable
* `getAsset(input)` – Retrieves the Specified DiscordAsset data from an Icon Key, if present
* `getAssetId(input)` – Retrieves the Parsed Icon ID from the specified key, if present
* `getAssetKey(input)` – Retrieves the Parsed Icon Key from the specified key, if present
* `getAssetType(input)` – Retrieves the Parsed Image Type from the specified key, if present
* `getAssetUrl(input)` – Retrieves the Parsed Image Url from the specified key, if present
* `getClass(reference=Object|String)` – Attempt to retrieve a class object, via the string path or object reference
* `getComponent(data=DataComponentHolder, path=String)` – (MC 1.20.5+) Attempt to retrieve the Component Data with the
specified path
* `getCurrentTime()` – Retrieve the current time, as an Instant
* `getElapsedMillis()` – Retrieve the elapsed time, in milliseconds
* `getElapsedNanos()` – Retrieve the elapsed time, in nanoseconds
* `getElapsedSeconds()` – Retrieve the elapsed time, in seconds
* `getField(classToAccess=Object|String|Class, instance=Object, fieldName=String…)` – Retrieves the
Specified Field(s) via Reflection
* `getFields(classObj=Object|String|Class)` – Retrieve the available field names for a class object
* `getFirst(args)` – Retrieve the first non-null string from the specified arguments, or return null
* `getJsonElement(url|jsonString, path=Object…)` – Retrieves the json element from the specified content, or null if
unable
* `getMethods(classObj=Object|String|Class)` – Retrieve the available method names for a class object
* `getNamespace(input)` – Retrieve the namespace portion of an Identifier-Style Object
* `getNbt(data=Entity|ItemStack, path=String…)` – Attempt to retrieve the NBT Tag with the specified path
* `getOrDefault(target, alternative ?: ”)` – Retrieve the primary value if non-empty; Otherwise, use the secondary
value
* `getPath(input)` – Retrieve the path portion of an Identifier-Style Object
* `getResult(input)` – Perform recursive conversion on the specified input
* `hasField(classObj=Object|String|Class, fieldName)` – Retrieves whether the specified class contains the specified
field name
* `isColor(input)` – Determines whether an inputted String classifies as a valid Color Code
* `isCustomAsset(input)` – Determines if the Specified Icon Key is present under the Custom Assets List
* `isUuid(input)` – Checks via Regex whether the specified String classifies as a valid Uuid
* `isValidAsset(input)` – Determines if the Specified Icon Key is present under the Current Client ID
* `isValidId(input)` – Determines if the specified Client ID is valid
* `isWithinValue(value, min, max, contains_min ?: false, contains_max ?: false, check_sanity ?: true)` – Determines
whether the specified value is within the specified range
* `length(input)` – Returns the length of the specified string
* `lerpDouble(num, min, max)` – Linearly Interpolate between the specified values
* `lerpFloat(num, min, max)` – Linearly Interpolate between the specified values
* `mcTranslate(input=String, args=Object…)` – Translates an Unlocalized String, based on the game translations
retrieved for
the current language
* `minify(input, length)` – Reduces the Length of a String to the Specified Length
* `nullOrEmpty(input, allowWhitespace ?: false)` – Determines whether a String classifies as NULL or EMPTY
* `randomAsset()` – Attempts to retrieve a Random Icon Key from the available assets
* `randomString(args)` – Retrieves a random element from the specified arguments, as a string
* `removeRepeatWords(input)` – Removes Duplicated Words within an inputted String
* `roundDouble(num, places ?: 0)` – Rounds a Double to the defined decimal place, if possible
* `snapToStep(num, valueStep)` – Rounds the Specified Value to the nearest value, using the Step Rate Value
* `split(input, regex, limit ?: 0)` – Splits this string around matches of the given regular expression
* `stripAllFormatting(input)` – Strips Color and Formatting Codes from the inputted String
* `stripColors(input)` – Strips Color Codes from the inputted String
* `stripFormatting(input)` – Strips Formatting Codes from the inputted String
* `timeFromEpochMilli(epochMilli)` – Retrieve a Time Instant from the specified epoch time
* `timeFromEpochSecond(epochSecond)` – Retrieve a Time Instant from the specified epoch time
* `timeFromString(dateString, fromFormat, fromTimeZone ?: null)` – Format a Date String from one timezone and format
into a valid Instant instance
* `timeToEpochMilli(data)` – Gets the number of milliseconds from the Java Epoch, derived from specified args
* `timeToEpochSecond(data)` – Gets the number of seconds from the Java Epoch, derived from specified args
* `timeToString(date, toFormat, toTimeZone ?: null)` – Format a Date String using the specified timezone and format.
* `toCamelCase(input)` – Converts a String into a Valid and Acceptable Camel-Case Format
* `translate(input=String, args=Object…)` – Translates an Unlocalized String, based on the mod translations retrieved
for
the current language

## Disclaimers & Additional Info

### Minecraft Issues + Additional Build Info

Despite best efforts, issues can occur due to the state of the Minecraft Codebase.

These issues can hinder certain portions of the backend in addition to cause certain parts of the mod to not work.

With this in mind, please note the following:

* **Minecraft 1.16 and above**
* As more parts of the game become data-driven, some modded data is no longer able to be automatically retrieved
without first being in the world.
* So far, Biome and Dimension Modules are effected by this change and only display default data, with extra data
needing to be discovered first.
* **Minecraft 1.15 and below**
* `MC-112292`: When interacting with the `RenderUtils#drawItemStack` method, used in the v2 Item Renderer, blocks
using certain renderers may fail to display properly.
* Additionally, on 1.15.x exclusively, z-level issues may occur on Screens using this method
* **Minecraft a1.1.2_01 and below**
* On these versions, the Biome and Dimension Modules are **stubbed** with default data, due to the logic for these
methods being missing (Having been initially implemented in Alpha 1.2.6)
* **Miscellaneous Issues**
* Due to obfuscation issues in earlier versions of Minecraft, incorrect data may appear when using certain parts of
the mod.
* In this case, the Biome and Dimension Modules may fail to auto-detect some necessary information
* As a fallback, the mod is also designed to add selectable Module Data when said biome/dimension is first
discovered.
* The “Add New” option found in some of the module lists can also be used to work around this issue.

Additionally, some settings or API calls may perform differently under certain MC versions.

### Icon Requesting

Not seeing an Icon you like or have a suggestion for an Icon to add/modify on the default Client ID?

If so, you can make a request on my Issue Tracker, with the
following requirements:

* If adding an Icon from a dimension, specify the Mod’s link that the dimension derives from
* This is because specific Icon IDs must be used, which can be found by the mod or from checking your Logs/Chat
after entering the dimension as CraftPresence will tell you the ID expected
* An Icon of size between `512×512` and `1024×1024` to be used (Either minimum or recommended size for best quality)
* Icons between these sizes can be used, but may not give a great final quality
* If requesting an icon to be modified or removed from the Default Client ID, please specify a reason why
* Mostly just so it can be logged why it was changed for future reference

Additionally, you can also create your own Set of Icons by
following this guide

### Support

Need some assistance with one of my mods or wish to provide feedback?

I can be contacted via the following methods:

* [Email](mailto:[email protected])
* CurseForge
* Discord :: ![Discord Chat](https://discord.com/invite/BdKkbpP)

Additionally, codebase documentation for this mod is
available here with further guides available
on the wiki

#### Licensing

This Mod is under the MIT License as well as the Apache 2.0 License

This project currently makes usage of the following dependencies internally:

* Starscript
by MeteorDevelopment
* DiscordIPC API by jagrosh
* UniLib by CDAGaming

#### Discord Terms of Service

As with other RPC Mods, this Mod uses your in-game data to send display information to a 3rd party service (In this
Case, Discord).

The terms of service relating to Creating a Discord ID for icons can be
found here

The terms of service for using Discord as a service can additionally be located here

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** 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

Patreon

Discord: (Coming Soon..)

**📂 Source Code & Issues**

To see the Source Code of the Project:

GitLab

Report about a problem or tell a suggestion:

GitLab

**🗂️ 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.

Compost

*Create compost based on what you toss into a composter!*

### Get more than just bone meal!
Compost modifies the vanilla composter to allow you to change what compost you get out of it! With version 3.x, the composter now uses a vanilla styled loot table for generating compost, offering the vast configurability that loot tables make possible. Simply create a data pack with a `compost:composter` loot table to use your own configuration!

You can make some items renewable that should be but are not, create deep interactions with different compostables for a complex and realistic compost, or simply make the compost give a modded compost item. The choice is yours!

### Let the world change your compost!
Compost supports using origin-based conditions in your loot table. You can have compost that generates only under certain light levels, elevations, biomes, dimensions, and more! Have a mod that adds an origin-based condition such as one that checks if it is snowing? Compost can use that to determine what compost is created, allowing nature to play a distinct role the composting process.

### Grow compost based on what compostables you add to it!
Compost adds a loot condition for matching what compostables have been used on the composter, so what you put in can determine what you get out! Want a chance of getting apple seeds when you compost apples? How about modded mulch when you compost saplings? Compost gives you the ability to do such and more!

Please note that the default compost loot table is designed to showcase Compost’s compostable matching condition to make bone meal available for villager farmers. You may also find mushrooms growing in your compost when the composter is rained upon in game versions that support the necessary conditions.

### Get the goods!
You can find releases of Compost on both *[Modrinth]* and *[CurseForge]* and also access development builds on *[GitHub]*!

Compost supports Fabric 1.16+, Forge 1.16+, and NeoForge 1.20.2+.

### Figure it all out!
You can delve into the *[wiki]* for details or submit a *[bug report]* if something isn’t quite right!

Still need something? Head on over to the *[discussions]* forum for support, to read announcements, or discuss anything about the mod!

[Modrinth]: https://modrinth.com/mod/compost
[CurseForge]: https://www.curseforge.com/minecraft/mc-mods/compost
[GitHub]: https://github.com/yurisuika/compost
[wiki]: https://github.com/yurisuika/compost/wiki
[bug report]: https://github.com/yurisuika/compost/issues
[discussions]: https://github.com/yurisuika/compost/discussions
[Discord]: https://discord.gg/0zdNEkQle7Qg9C1H

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._

Colorize

# colorize
Right click with the item on some blocks to change them!

### Supported Blocks:
– Dyes (to color them):
– Banner
– Bed
– Candle
– Carpet
– Concrete
– Concrete Powder
– Glazed Terracotta
– Shulker Box
– Stained Glass Block
– Stained Glass Pane
– Terracotta
– Wool
– Amethyst Shard:
– Glass (creates Tinted Glass)
– Vines to create Mossy variants _(with sneaking by default)_:
– Cobblestone
– Cobblestone Slab
– Cobblestone Stairs
– Cobblestone Wall
– Stone Bricks
– Stone Brick Slab
– Stone Brick Stairs
– Stone Brick Wall

### Looking for Minecraft server? Visit BedrockHost.pl and Minecraft-Servers.gg

Code of Copper

Logo

Code of Copper

Code of Copper is a lore heavy, and technically advanced Datapack. Adding a programmable Copper Golem into the game.

Throughout the world, different structures will generate, containing lore, and examples of programs that the Copper Golem can run. Programs can be written into a book, and then given to the Golem, by right clicking it with the book.

Right-clicking the Golem with an empty hand will execute it’s current program.

While we recommend playing through the pack, as an addition to your world, and slowly discovering the language and features over time, if you would like a quick demo of the pack, you can use `/place template bot:demo` to place our demo structure.

Code of Copper is a runtime for GolemScript, the programming language used to program the Golems.

**A datapack by Moxvallix, Gears and Wulfian. Enjoy!**
**Explore the docs
»**
Report Bug

## Requirements
– **This datapack will only work in versions 1.20.2 and higher**
– **Make sure to remember to download and install the resource pack**
– **This datapack will not work without the following datapack libraries:**
– GolemScript
– Moxlib
– Regex Lib

## Installation
To install the datapack, first download the latest release from Modrinth.
You will also need GolemScript, Moxlib, and Regex.

Put these in the `datapacks` folder of your world. For more information, see the Minecraft wiki.

When you install the datapack, you must leave and rejoin the world (or restart the server) for all effects to properly take place.

## Obtaining a Copper Golem
Golems are found in airships, which generate naturally throughout your world when you have the datapack installed. Make sure to keep your render distance up, they spawn around 200 blocks in the air!

Looking for shadows on the ground is a great way to locate airships.
Each airship contains one copper golem, alongside three example programs to help you get started with GolemScript.

If you would like to follow along with the datapack and learn the language as you go, stop reading here.

## Getting started with GolemScript
GolemScript is written in Minecraft books, which are applied to the golem to give it a program.

To learn more about Code of Copper’s features, see Code of Copper documentation.
To learn the language, see the GolemScript documentation.

## License
This project is distributed under the GPL-3.0 License. See `LICENSE.md` for more information.

## Discord Server
You can join our discord server here.

## Oxidisation and progression
After a certain number of instruction executions, the golem will begin to oxidise.

Interacting with the golem while holding an axe removes the rust.

If the golem is fully oxidised, it will not run anymore, but upon scraping it with an axe you will find example programs that explain the language of GolemScript.

This process can be avoided however, by waxing the golem. As with anything copper, you can also scrape off the wax.

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)

Clear wither hearts

Makes** withered hearts clear** to see if they are there or not.