Custom Messages
# CustomMessages
[](https://github.com/Garsooon/Custom-Messages/releases/latest)
[](https://github.com/Garsooon/Custom-Messages/releases)
CustomMessages is a Beta 1.7.3 Minecraft Project Poseidon plugin that allows players and admins to set custom join and leave messages, with advanced filtering options.
## Features
– Set your own join or leave message using `/setjoin` or `/setleave`
– Admins can view, set or reset messages for any player
– Supports color codes (ie. `&6` for gold)
– Configurable regex-based blacklist for blocking words or patterns
– Notifies admins in game and in console when players try to use blacklisted words
## Commands
– `/setjoin ` — Set your custom join message (must include `%player%`)
– `/setleave ` — Set your custom leave message (must include `%player%`)
– `/viewmessages ` — View a player’s join and leave messages
– `/setplayerjoin ` — Set another player’s join message
– `/setplayerleave ` — Set another player’s leave message
– `/resetmessages ` — Reset a player’s messages to default
## Permissions
– `custommessages.setjoin` — Allows setting your join message
– `custommessages.setleave` — Allows setting your leave message
– `custommessages.admin` — Allows setting/resetting messages for any player (`default: op`)
## Configuration
– Place your blacklist regex patterns in `plugins/CustomMessages/blacklist.txt`
Example:
“`
(?i)bt[e3]+stb
(?i)btr[e3]+eb
“`
– Player join & leave Messages are stored in `plugins/CustomMessages/messages.properties`
## Setup
1. Drop the plugin jar into your server’s `plugins` folder
2. Start the server to generate config files
3. Edit `blacklist.txt` to specify disallowed words/patterns
4. Add permission nodes as needed to groups or players
CraftPresence
# CraftPresence
Completely customize the way others see you play Minecraft via Discord’s Rich Presence API & the DiscordIPC API
by [jagrosh](https://github.com/jagrosh)!
[](https://opensource.org/licenses/MIT)
[](https://crowdin.com/project/craftpresence)
[](https://app.codacy.com/gl/CDAGaming/CraftPresence/dashboard?utm_source=gl&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
[](https://gitlab.com/CDAGaming/CraftPresence/commits/master)
[](https://www.curseforge.com/minecraft/mc-mods/craftpresence)
[](https://www.curseforge.com/minecraft/mc-mods/craftpresence)
[](https://modrinth.com/mod/craftpresence)
[](https://modrinth.com/mod/craftpresence)
## General Notes
* Beginning in v2.5.0, [UniLib](https://gitlab.com/CDAGaming/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](https://modrinth.com/mod/unilib)
* 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](https://modrinth.com/mod/fabric-api)
and the [Fabric mod loader](https://fabricmc.net/use/installer)
* Some versions of the mod for Minecraft 1.13.x require
the [Rift API](https://www.curseforge.com/minecraft/mc-mods/rift)
and the [Rift mod loader](https://github.com/DimensionalDevelopment/Rift/releases)
* Some versions of the mod for Minecraft 1.1.0 and below
require [Risugami’s ModLoader](https://mcarchive.net/mods/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](https://github.com/MeteorDevelopment/starscript)
* The older list of this section can be
viewed [here](https://gitlab.com/CDAGaming/CraftPresence/-/wikis/Legacy-Placeholders-(v1.x))
* 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](https://github.com/MeteorDevelopment/starscript/wiki)
___
### 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](https://gitlab.com/CDAGaming/CraftPresence/issues/), 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](https://gitlab.com/CDAGaming/CraftPresence/-/wikis/Making-your-Own-Client-ID-+-Using-your-own-Images)
### 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](https://www.curseforge.com/minecraft/mc-mods/craftpresence)
* [Discord :: ](https://discord.com/invite/BdKkbpP)
Additionally, codebase documentation for this mod is
available [here](https://cdagaming.gitlab.io/craftpresence-documentation/) with further guides available
on [the wiki](https://gitlab.com/CDAGaming/CraftPresence/-/wikis/Home)
#### 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](https://github.com/MeteorDevelopment/starscript)
by [MeteorDevelopment](https://github.com/MeteorDevelopment)
* [DiscordIPC API](https://github.com/jagrosh/DiscordIPC) by [jagrosh](https://github.com/jagrosh)
* [UniLib](https://gitlab.com/CDAGaming/UniLib) by [CDAGaming](https://gitlab.com/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](https://discord.com/developers/docs/legal)
The terms of service for using Discord as a service can additionally be located [here](https://discord.com/terms)
Colorful Spawning Sheep
# Colorful Spawning Sheep! Beta 1.7.3
The spawning of different colors is completely equal. There is no sort of rarity, just sheep spawning with all the color of wool!
This mod makes a very simple change to the ‘EntitySheep’ class. View Code in Spoiler directly below.
**_Modloader not required but I had to select an API._**
Spoiler
Base Fuction
“`java
public static int getRandomFleeceColor(Random random0) {
int i1 = random0.nextInt(100);
return i1 < 5 ? 15 : (i1 < 10 ? 7 : (i1 < 15 ? 8 : (i1 < 18 ? 12 : (random0.nextInt(500) == 0 ? 6 : 0))));
}
```
Edited for this mod
```java
public static int getRandomFleeceColor(Random random0) {
int i1 = random0.nextInt(100);
return i1;
}
```
Here is some extra information about the two diffetent version ‘Normal Drops’ and ‘x2 Drops’.
Normal Drops just means when you shear a sheep you will get the normal amount of wool out of them, 2-5.
X2 Drops will give you 4-10 when you shear the sheep. View Code in Spoiler directly below.
Spoiler
Normal Drops
“`java
public boolean interact(EntityPlayer entityPlayer1) {
ItemStack itemStack2 = entityPlayer1.inventory.getCurrentItem();
if(itemStack2 != null && itemStack2.itemID == Item.shears.shiftedIndex && !this.getSheared()) {
if(!this.worldObj.multiplayerWorld) {
this.setSheared(true);
int i3 = 2 + this.rand.nextInt(3);
for(int i4 = 0; i4 < i3; ++i4) {
EntityItem entityItem5 = this.entityDropItem(new ItemStack(Block.cloth.blockID, 1, this.getFleeceColor()), 1.0F);
entityItem5.motionY += (double)(this.rand.nextFloat() * 0.05F);
entityItem5.motionX += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F);
entityItem5.motionZ += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F);
}
}
itemStack2.damageItem(1, entityPlayer1);
}
return false;
}
```
x2 Drops
```java
public boolean interact(EntityPlayer entityPlayer1) {
ItemStack itemStack2 = entityPlayer1.inventory.getCurrentItem();
if(itemStack2 != null && itemStack2.itemID == Item.shears.shiftedIndex && !this.getSheared()) {
if(!this.worldObj.multiplayerWorld) {
this.setSheared(true);
int i3 = 4 + this.rand.nextInt(6);
for(int i4 = 0; i4 < i3; ++i4) {
EntityItem entityItem5 = this.entityDropItem(new ItemStack(Block.cloth.blockID, 1, this.getFleeceColor()), 1.0F);
entityItem5.motionY += (double)(this.rand.nextFloat() * 0.05F);
entityItem5.motionX += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F);
entityItem5.motionZ += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F);
}
}
itemStack2.damageItem(1, entityPlayer1);
}
return false;
}
```
Specifially these lines
```java
int i3 = 2 + this.rand.nextInt(3);
```
```java
int i3 = 4 + this.rand.nextInt(6);
```
2 or 4 is the amount of wool you will always get from the sheep, where the 'this.rand.nextInt(3);' or 6 will give you an extra 0 through 3 or 6 in addition to the 2 or 4 you have already been given. This happens simultaneously but I am trying to explain the fuction :)
Edit: 7 April 2024
No Changes, but I added support for b1.2-b1.8.1, r1.0, r1.1, r1.2.4&5. I will do 1.2, 1.2.1, 1.2.2, and 1.2.3 soon.
Edit: 8 April 2024
Added 1.2.1-3 support. I am considering adding 1.3-1.20 support. It will be a bit before that happens I am sure.
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:

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:

# 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:

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

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!

Classic Natural Textures
# Natural Texture Pack

This texture pack was originally created by 4J Studios for the legacy console editions of the games. I extracted this from the texture files for the Xbox 360 edition and ported most of the textures (excluding console-exclusive GUI textures I’d have to make from scratch). This pack is soley for early release and beta versions of the game. If you want a modern port for the current version, the people behind Legacy4J maintain a port of the modern bedrock version with recreations of the missing GUI textures you can download [here](https://modrinth.com/resourcepack/natural-texture-pack)
### Due to being 32x, this pack needs mods to work (OptiFine, MCPatcher, StationAPI, etc.) on versions 1.5 and older. If they aren’t present, you will encounter issues like this:

### This is not an issue of the pack. This is a game issue those mods fix.
Circular Logs
# Improve the look of your default Logs with… ↴

## Adds Vanilla-like circulated Logs Top | No Optifine or other Mods needed!
### It’s supports every Version of the game! (even including Legacy ones)
### And day-by-day will have more and more mods supported!
Supported Mods
• [Abundance](https://modrinth.com/mod/abundance) – by exoplanetary
• [Architect’s Palette](https://modrinth.com/mod/architects-palette) – by Jsburg
• [Biomes O’ Plenty](https://modrinth.com/mod/biomes-o-plenty) – by Forstride & Adubbz
• [The Aether](https://modrinth.com/mod/aether) – by Oz-Payn
• Vanilla Minecraft – by Mojang
• [Wilder Wild](https://modrinth.com/mod/wilder-wild) – by FrozenBlock
Cave Tweaks
CAVE TWEAKS!
❤️ Made by Wilozyx and DraconicAxolotl! ❤️
Cave tweaks is a vanilla-esque tweaks 16x pack for most minecraft versions. The goal of the pack is to include most versions from infdev (yep), alpha, beta and release!
This pack is 100% public domain, we totally allow and encourage people who enjoy the pack to use, edit and improve upon our textures for their own works if you wish to do so!
Wish to support us?
Subscribe to our channels on youtube!
[Wilozyx’s Channel](https://www.youtube.com/@wilozyx) |
[DraconicAxolotl’s Channel](https://www.youtube.com/@Draconic_Axolotl)
—
What versions is the pack available for, currently?
| Sign | State |
|———————|:———————:|
| ✔️ | Fully done & uploaded |
| ❌ | Not done but planned |
| 🔨 | Currently being worked on |
| ⏳ | Done and awaiting to be posted |
| Version | Status |
|———————|:———————:|
| Beta 1.0 | 🔨 |
| Beta 1.1 | 🔨 |
| Beta 1.2 | 🔨 |
| Beta 1.3 | ⏳ |
| Beta 1.4 | ⏳ |
| Beta 1.5 | ✔️ |
| Beta 1.6 | ✔️ |
| Beta 1.7 | ✔️ |
| Beta 1.8 | ✔️ |
| Release 1.0 | ✔️ |
| Release 1.1 | ✔️ |
| Release 1.2| ✔️ |
| Release 1.3| ✔️ |
| Release 1.4| ✔️ |
| Release 1.5| ✔️ |
| Release 1.6| ✔️ |
| Release 1.7| ✔️ |
| Release 1.8| ✔️ |
| Release 1.9| ✔️ |
| Release 1.10| ✔️ |
| Release 1.11| 🔨 |
| Release 1.12+| ❌ |
BukkitGreentext
The best >greentext plugin out there. Probably.
Prefix any message with a “>” and *bam* it’s >green. Or postfix it with “<” and it's orange<.

Cool features:
* Per-player and global toggling via command
* Optional permissions check
* Compatibility with emoticons >:c >_<
* Custom exceptions to greenification
* 1.16+ RGB support for 4chan-accurate color
Everything should work right out-of-the-box.
Metrics for the plugin can be found on [bStats](https://bstats.org/plugin/bukkit/BukkitGreentext/2814).
## Usage
Download the plugin JAR
and drop it in the `plugins/` directory of your Minecraft server.
Any message starting with the greater-than sign, `>`,
is made green, whilst any message *ending* with the opposite `<`
is made orange.
Players can avoid making anything starting with `>` green by
prepending a space, i.e. ` >`, or by using `/greentext [on|off]`.
### Configuration
To avoid automatic greenification of angry emotions, e.g. `>:C`,
or Japanese-style emoticons such as `>_>`, *exceptions*
for `:` and `_` are specified in the config file.
Custom exceptions are allowed as well, naturally.
Greentext can be either enabled or disabled upon startup.
In the case the parameter `enabled-by-default` is set true,
each player must manually enable the plugin with `/greentext on`.
Additionally, orangetext, an obscure feature
[used probably once](https://www.reddit.com/r/BannedFrom4chan/comments/221co5/),
can be disabled via config.
If you want to take advantage of 1.16’s full RGB support and
use 4chan-accurate colors in chat, set `use-hex-colors` as true.
### Permissions
If `check-for-permissions` is set true in the config file,
give players the desired permissions to enable use of the plugin:
* `greentext.chat.*`: all features
* `greentext.chat.green`: greentext
* `greentext.chat.orange`: orangetext
* `greentext.toggle`: toggle ability to use features
* `greentext.toggle.others`: toggle others’ ability to use features
BuildCraft Transport
The transport submodule as provided by [BuildCraft](https://modrinth.com/mod/buildcraft).
This submodule adds BuildCraft’s pipe system – designed to be low-level, simple, and allow a high degree of flexibility and control over the flow of your **items**, **liquids** and **energy** (MJ/RF, depending on version).
The functionality of the pipe system includes, depending on version:
* being able to control the maximum flow rate of liquids and power,
* being able to route items by type and color tagging,
* being able to perform round-robin extraction and insertion,
* being able to use **Gates** to react to events and control pipe behaviour,
* being able to use facades, different types of stones, and pipe staining for decorative and compact building purposes.
Note that the [BuildCraft](https://modrinth.com/mod/buildcraft) project contains the complete mod in single-JAR format – but not all versions are available in this format; likewise, not all versions are available in this multi-JAR submodule format.
Licensing information is provided in the full version’s description above.
BuildCraft Factory
The factory submodule as provided by [BuildCraft](https://modrinth.com/mod/buildcraft).
This submodule adds single-block, smaller-scale machines, such as the following:
* **Mining Well** – 1×1 vertical mining block,
* **Pump** – liquid extraction block,
* **Auto Workbench** – low-tier automatic crafting block,
* **Tank**,
* **Flood Gate**,
* **Chute**,
* **Distiller** and **Heat Exchanger**.
Note that the [BuildCraft](https://modrinth.com/mod/buildcraft) project contains the complete mod in single-JAR format – but not all versions are available in this format; likewise, not all versions are available in this multi-JAR submodule format.
Licensing information is provided in the full version’s description above.