Scift

# Scift [![](https://jitpack.io/v/Nova-Committee/Scift.svg)](https://jitpack.io/#Nova-Committee/Scift)

##### Scala runtime libraries for Rift

Scift provides the runtime and libraries required for creating Rift mods in Scala. For usage, append the following to your Gradle build script:

“`
plugins {
id ‘scala’
}

repositories {
maven { url = ‘https://jitpack.io’ }
}
“`

Scala2

“`
dependencies {
implementation ‘com.github.Nova-Committee:Scift:2-1.1.0’
}
“`

Scala3

“`
dependencies {
implementation ‘com.github.Nova-Committee:Scift:3-1.1.0’
}
“`

Here’s an example [Scift-based Rift project](https://github.com/Nova-Committee/SciftExampleMod).

PatPatPat

# Introduction
PatPatPat allows players to pat(Shift + Left Click) a tamed cat or wolf.

# Feature
When patting:
– The entity that gets patted will nod, shake its tail, and sound with pleasure and ease, perhaps even slightly healed.
– The player may get experience.

# ATTENTION
After 1.20.X-1.1.0, the mod has its compatible Spigot plugin. See **Versions**.

You **DEFINITELY CAN** add the mod to your modpack.

Omnilook

# Omnilook

_A simple freelook/perspective mod for Minecraft._

Omnilook implements a small utility function for your player camera, which lets you rotate which way the third-person camera faces independent of your player’s head movement. This lets you take fancy cinematic shots or aim your cursor in a specific direction while not having to be locked to looking in that direction too!

## Version Support
Omnilook will support pretty much any and every mod loader and version of Minecraft you can think of. The table for this is kind of big, so please see [the GitHub readme](https://github.com/rhysdh540/Omnilook#version-support) for the full thing.

## Why Omnilook?
Omnilook is not the first mod to do this. Here’s why you should try it out:
– **It’s lightweight.** Unlike other mods, Omnilook is small and lightweight in about every way possible. It depends on other mods minimally, doesn’t interrupt your game in the slightest, and the mod jar weighs in at far under 100 kilobytes.
– **It’s compatible.** Omnilook will *just work* anywhere you put it. It uses as few injections as possible to get the job done, and often uses mod loaders’ events and APIs to make sure it functions well with other mods.
– …that’s about it for now.

## Configuration
Omnilook at its core is a pretty simple mod, so there aren’t too many configuration options right now. Besides the activation key binding (by default bound to the grave key, `), the one other option to configure is if pressing it toggles the effect, or if holding it keeps it activated.

## Issues?
See me on [GitHub](https://github.com/rhysdh540/Omnilook/issues). I’d love to help!

Litematica

## Description

Litematica is a modern schematic mod primarily targeting light mod loaders like LiteLoader on MC 1.12.x, Rift on MC 1.13.x and Fabric on MC 1.14+.

There is also a Forge version, but currently only for MC 1.12.2. For later MC versions there are currently only third party ports such as [Forgematica](https://modrinth.com/mod/forgematica).

Litematica has all the main features (plus a bunch more) of the old [Schematica](https://legacy.curseforge.com/minecraft/mc-mods/schematica) mod, except for the printer, which is not planned for Litematica itself, but instead is left to extension mods (see: [aria1th printer](https://modrinth.com/mod/litematica-printer-easyplace-extension) or [the other printer](https://modrinth.com/mod/litematica-printer)).

## Compatibility with shaders

**Litematica’s rendering doesn’t currently work properly with shaders (even with Iris) in 1.21.3+. So when you need to use Litematica (schematic rendering), disable shaders.**

In older MC versions the rendering works better with shaders, at least with Iris, but also depending on the shader pack. Some shader packs break the rendering pretty badly, but some used to work pretty nicely. Optifine in general is/was a lot more problematic, pretty much you can’t use shaders at all with Optifine if you use Litematica. The general recommendation is to use Sodium (and Iris) instead of Optifine.

## Hotkeys

The default hotkey to open the Litematica main menu is `M`.

Note: If you use a non-QWERTY keyboard layout, then the keys may be different, such as `M` becoming `,` on AZERTY.

Other common default hotkeys:

– `M + C` – The direct hotkey to open the **c**onfig menu
– `M + R` – Toggle ON/OFF ALL **r**endering from Litematica
– `M + G` – Toggle ON/OFF just schematic rendering (“**g**host blocks” – all HUDs for example will still render)
– `M + T` – Toggle ON/OFF the “**t**ool item” (which is by default a stick) functionality
– `M + P` – Directly open the Schematic **P**lacements menu/list
– `M + V` – Open the Schematic **V**erifier menu
– `Numpad minus` – Open the placement configuration menu for the currently selected placement
– `Numpad multiply` – Open the Area Editor menu
– `Page Up/Down` – Change the selected layer in the render layers settings
– `M + Page Up/Down` – Change the render layers mode
– `Ctrl + scroll` (holding the tool) – Cycle the “tool mode” (there is also a button for this in the lower left corner of the main menu)
– `Alt + scroll` (holding the tool) – Nudge/move the selected placement or area selection box or corner (depending on the tool mode) in the direction the player is looking at
– `Ctrl + M` – Toggle or cycle the “sub-mode” or main setting of some of the “tool modes”, such as `pasteReplaceBehavior` in Paste mode, the `Corners` vs. `Expand` behavior in Area Selection mode, or the `Area` vs. `Placement` behavior of the Delete mode

## Warning for multiplayer

The Easy Place mode feature may get you banned on some servers!

The Easy Place feature will always be clicking on the target position’s air block, and this can easily be detected by anti-cheat systems. So this can result in at least two things: The block placement will just be rejected and you just get client-side ghost blocks, or some anti-cheat system flags that as cheating and auto-bans you from the server. So before using Easy Place, find out of it’s allowed on the server!

## If you have Optifine…

In general I don’t recommend using Optifine (with Litematica, or otherwise) due to the various rendering issues it causes. Instead I would recommend using Sodium and/or Iris if you want shaders.

If you have Optifine installed, then there are some options that you most likely will need to disable in Optifine, or otherwise it will break the schematic rendering:

– If you get glitchy weird triangles, then in 1.16+ first try updating to the latest Litematica version. If that doesn’t work, then set shaders to `OFF` (**not** `Internal`) and restart the game.
– `Render Regions` probably needs to be disabled to prevent weird rendering issues (the schematic partially rendering in weird places)
– `Fast Render` might also need to be disabled if there are still some weird HUD/GUI rendering issues

## Documentation

There is a [wiki](https://github.com/maruohon/litematica/wiki). The wiki is still being worked on, and it will probably have a new address at some point (or rather there will be a new wiki in a new location with a lot more coverage).

### Other/older documentation and explanations, some FAQ answers

Here is a Reddit post that explains the very basics of the mod:
– https://old.reddit.com/r/Minecraft/comments/cqdmkk/anyone_can_help_me_how_do_i_make_schematics_with/exeug78/

Litematica – Easy Place support on servers
– https://old.reddit.com/r/litematica/comments/1c7j79l/easy_place_on_server/l0hzmkt/

Misc explanations on Reddit or my Discord server

Schematic format conversions:
– https://old.reddit.com/r/Minecraft/comments/oabwea/schem_files_work_in_litematica_but_schematic/h3ju3sy/

Litematica Normal selection mode with sub-regions:
– https://old.reddit.com/r/feedthebeast/comments/r9n9mi/litematicas_addselectionbox_keybind_wont_work/
– https://old.reddit.com/r/feedthebeast/comments/r9n9mi/litematicas_addselectionbox_keybind_wont_work/hnpe9yg/

Litematica – hiding an area selection:
– https://github.com/maruohon/litematica/discussions/755#discussioncomment-6772682
– https://old.reddit.com/r/fabricmc/comments/yw9r5y/litematica_1192_issues/ixr7l5h/

Litematica – can’t create new selection sub-regions (in Simple mode):
– https://www.curseforge.com/minecraft/mc-mods/litematica?comment=2694

Litematica – Normal/Multi-Region area selection tutorial:
– https://github.com/maruohon/litematica/issues/716#issuecomment-1596121219

Litematica – Easy Place on a server with FabricCarpet but no CarpetExtra:
– https://discord.com/channels/169369095538606080/566649314001158165/1235158483792433214
– https://discord.com/channels/169369095538606080/566649314001158165/1221223833889935420

Litematica – easy/fast selections tutorial:
– https://discord.com/channels/169369095538606080/566649314001158165/1187372903377936435

Litematica – schematic formats:
– https://discord.com/channels/169369095538606080/183172448919748608/1180841121845354516
– https://discord.com/channels/169369095538606080/566649314001158165/1176569283271213098
– https://discord.com/channels/169369095538606080/566649314001158165/1097540707931127938
– https://discord.com/channels/169369095538606080/169369095538606080/1081089742944337941
– https://discord.com/channels/169369095538606080/566649314001158165/1097564948999184394
– https://github.com/maruohon/litematica/issues/812#issuecomment-1924300257

Litematica – saving and pasting with block entity data:
– https://discord.com/channels/169369095538606080/566649314001158165/1193304174838960200

Litematica – Material Lists variants:
– https://www.reddit.com/r/litematica/comments/15yz2bo/material_list_not_showing_up/jxfiwvh/

Litematica – Manual Origin issue:
– https://github.com/maruohon/litematica/issues/751#issuecomment-1671611897

Litematica – placing stairs correctly:
– https://github.com/maruohon/litematica/issues/797#issuecomment-1848386879

Litematica – performance tips with large schematics:
– https://discord.com/channels/169369095538606080/566649314001158165/1186744945399320647

Litematica – large schematics, bad performance or crashes, what to do:
– https://discord.com/channels/169369095538606080/566649314001158165/1122755969651318894

Litematica – how to only show one block type at a time:
– https://discord.com/channels/169369095538606080/566649314001158165/1133702185121755258

Litematica not working/keys not working:
– https://discord.com/channels/169369095538606080/566649314001158165/1196124302634922075

Litematica “only render one block”:
– https://discord.com/channels/169369095538606080/566649314001158165/1061881509579075684

Litematica – finding the schematics directory/game directory:
– https://old.reddit.com/r/litematica/comments/1co6vh4/downloading_schematics_on_different_versions_of/l3c21l9/
– https://old.reddit.com/r/litematica/comments/13es48n/how_to_import_schematics_on_mac/kb8bu5d/

Litematica – using sub-regions:
– https://github.com/maruohon/litematica/discussions/647

Litematica – pasting redstone on servers:
– https://discord.com/channels/169369095538606080/566649314001158165/1063578995347685446
– https://legacy.curseforge.com/minecraft/mc-mods/litematica?comment=2838
– https://discord.com/channels/169369095538606080/566649314001158165/1227276878830764183

Litematica – pasting inventory contents on servers, feat. Litemoretica:
– https://old.reddit.com/r/litematica/comments/1cg186f/items_wont_transfer/

Litematica – paste task not running + somewhat comprehensive mspt and profiling quick howto:
– https://github.com/maruohon/litematica/issues/656

Litematica – schematic placement explained:
– https://github.com/maruohon/litematica/issues/703#issuecomment-1553132401

Litematica – material list:
– https://discord.com/channels/169369095538606080/566649314001158165/1071408321417973780

Litematica – performance tips with large schematics:
– https://discord.com/channels/169369095538606080/566649314001158165/1198321606536200324

Litematica – no schematics directory in the .minecraft directory:
– https://www.reddit.com/r/fabricmc/comments/jn8u5d/how_do_i_add_a_schematic_for_litematic_to_load/jhk6941/

Litematica “not working” (not in Controls) -> F3, malilib keys, Mod Menu:
– https://discord.com/channels/169369095538606080/169369095538606080/1197972330958295110

World Edit pasting:
– https://old.reddit.com/r/technicalminecraft/comments/j9ipu1/how_can_i_load_a_schem_file_that_i_downloaded/g8k49xj/

MacOS how to go up one directory:
– https://discord.com/channels/169369095538606080/1135325334565298237/1186539038572822618

## Youtube tutorials

Here are some of the better Youtube tutorial videos I’ve come across.

Youtube tutorials

Item Scroller

## Description

A client-side mod that adds several more convenient ways of moving items inside inventory screens. This is done by scrolling the mouse wheel over item slots (optionally while holding some modifier keys) or by holding down modifier keys and then left- or right-click dragging over the slots.

There are also special features for faster villager trading and crafting.

Available for Ornithe (1.12.2 [and more versions at some point]), LiteLoader (1.12.x), Rift (1.13.2), Fabric (1.14+) and Forge (1.8 – 1.14.4).

More background and details…

The mod has a few configurable modifier keys (depending on the mod/MC version, in modern versions by default `Shift`, `Ctrl` and `Alt`) to move entire stacks, all matching items, or all items at once. It also has special handling for Villagers to ease the annoying clicking around while trading. As of version `0.11.0`, it also has special crafting inventory handling (with a 18-slot internal “recipe memory”).

The basic item scrolling feature is similar to what NEI (and some other mods) also did/do. But I wanted more control and more ways to move items, so I made this mod to have all those modes that I find useful, in one distinct, client-side mod (so it also works on vanilla servers all the same).

There are config options to individually enable or disable more or less any of the modes. There are also options to reverse the scroll directions, or to change what for example “scrolling up” means. All the configs are accessible via the in-game config menu.

Note: All recent Item Scroller versions (starting from version 0.13.0) require the malilib library mod:

https://modrinth.com/mod/malilib

## Key combinations

Some of the default hotkeys

– `I + C` – In the modern (Rift, Fabric, LiteLoader, Ornithe) versions, the default hotkey to open the in-game config screen is `I + C`
– `Mouse wheel scroll` alone: Move one item at a time from or to the slot hovered over
– `Shift + scroll`: Move matching, entire stacks one by one. The stack hovered over is moved last.
– `Ctrl + scroll`: Move all matching stacks to or from the other inventory.
– `Alt + click`: Move all matching stacks to or from the other inventory. (Same as `Ctrl + scroll`.)
– `Ctrl + Shift + scroll`: Move everything to or from the other inventory
– `Alt + Shift + click`: Move everything to or from the other inventory. (Same as `Control + Shift + scroll`.)
– `Shift + left click and hold + drag`: Move all the stacks that are dragged over
– `Shift + right click and hold + drag`: Move all but the last item from all the stacks that are dragged over
– `Ctrl + left or right click and hold + drag`: Move only one item from all the stacks that are dragged over.
– `Shift + click` on an empty slot with items in the cursor: Move all matching items to that inventory
– `Shift + click` outside the inventory with items in the cursor: Drop all matching items from the entire inventory
– `Ctrl + Drop key + left or right click and hold + drag`: Drop one item from all dragged-over slots
– `Shift + Drop key + right click and hold + drag`: Drop all but one item from all dragged-over slots
– `Shift + Drop key + left click and hold + drag`: Drop all items from all the dragged-over slots
– `W/S + Shift/Control + click (and drag)`: Move items up (W) or down (S) in the inventory

Note: Before version 0.6.1, the Shift + right click and hold + drag functionality required one empty slot in the source inventory for an intermediate click action.

## Villager GUIs

Villager screen special features

Villager GUI has special handling (if enabled in the configs). It is only used when you hover over the output slot.

– `Hold shift and scroll down`: Fill the recipe/trade input slots
– `Hold shift and scroll up`: Move the output items to the player inventory as usual
– When the output slot is empty: hold `Shift and scroll up` to move the input items to the player inventory

So basically you can just hold shift and scroll down/up repeatedly to trade items fast & easy.

In the 1.12.2 and 1.16.5+ versions you can right click the trade buttons to fully trade that one trade. You can also `middle click` or `Shift + middle click` to mark trades as favorites or “global favorites” (= not per individual villager), which moves those trades to the top of the list, and it also allows you to use the hotkey to trade all favorites at once. If a given villager has any non-global favorites, then that takes precedence and the global favorites are not used for that villager (until the per-villager favorites are all unmarked).

## Crafting features

About the crafting features

There are some (quick) crafting helpers features. Most notably the `massCraft` and `craftEverything` hotkeys.

For any of these to work, you need to store a crafting recipe to Item Scroller’s own “recipe storage”. By default you open the recipe view by holding `A` inside an inventory screen. You add recipes by holding open the recipe view with `A`, and then middle clicking on the output item on a crafting grid. You can clear a stored recipe by middle clicking on an empty crafting output slot.

Note that the crafting system needs the crafting inventory and slots to be added to the config, so by default it only works for the vanilla player crafting and crafting table inventories.

Note that the `massCraft` feature is pretty laggy and unreliable due to the massive amount of continuous slot clicks it does, and when the server to client syncs happen in the middle of the slot click cpam, that can lead to outdated inventory state on the client, which basically means that mass craft can craft the wrong items (partial recipes).

So in general I would recommend avoiding the `massCraft` feature unless you absolutely need to use it. And if you do, then you would probably want to use Andrews’ “item scroller craft fix” fork instead ([found here](https://github.com/Andrews54757/itemscroller-crafting-fix/releases)), as it implements the vanilla recipe book item transfer fo mass crafting. That makes it vastly more reliable and less laggy. I will add it to the base mod at some point after I rewrite the entire mod from scratch…

If you only need to craft a “moderate amount” of items, like one inventory of nuggets into ingots or similar, then the `craftEverything` hotkey is what you want. It crafts everything possible once. It doesn’t repeat or loop, so it also shouldn’t craft the wrong things as nothing “external” will update the inventory state during that one operation. It doesn’t nicely work for “expanding” recipes however, such as logs to planks, because it doesn’t throw any items out, so the inventory will fill up midway if you try to craft an entire inventory of logs to planks for example.

Recipes Addition – Salt Block

This mod / datapack old name is Formula Addition – Salt Block.

This mod / datapack add a lot of recipes and easter eggs.

This mod / datapack will add some more convenient recipes to your game.

Compared to other recipes extensions, this datapack adds more recipes and links with other mods.

Such us:

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

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

![easter eggs](https://i2.mcmod.cn/editor/upload/20221118/1668751544_383300_CoIR.webp)

linkage:

![Debug Tool](https://cdn.modrinth.com/data/cached_images/44b6cfc1724487cd9753c62975ae5d35245f6d59.png)

Bedrock Edition:[https://www.mcmod.cn/download/13261.html](https://www.mcmod.cn/download/13261.html)

Ears (+ Snouts/Muzzles, Tails, Horns, Wings, and More)

 

Faithful fancy fashion features for fuzzy folk.

 

Support me and my mods

 

 

Created due to a lack of the Tails mod for 1.16, Ears is a mod that adds ears, snouts, tails, horns, wings, and more to the player. Eventually, it also became a complete lightweight open source 1.9 skin backport for many old versions, which works even if you aren’t using its special features.

 

Ears has a more vanilla-faithful appearance than Tails, with a lot of 2D regions but a few 3D ones too. There are a wide variety of possible configurations and it can all be customized.

 

Configure your skin at The Manipulator (click here)

 

Why use Ears instead of Tails? Because Ears is easy to port to other versions, based on a multi-version abstraction allowing the mod to even run in web browsers. The Tails mod has wonderful 3D models and animations, but it’s a burden to update it to any version due to its large rendering system and all the data syncing code, causing it to be tightly coupled with the version of the game and mod loader it was designed for. Ears stores all data as pixels in the player’s skin.

 

However, Ears requires you to draw your own additions, and does not come with easy recolorable prefabs like Tails. Additionally, unlike CPM or Figura, Ears has a limited number of customization options. (Note that if you have a simple idea, I may add it. Open an issue on GitHub or hop in Discord.) Ears offers a good middle-ground that will work in almost any version you wish to play. It also does not and never will use external servers, just Mojang’s skin server, so there’s no concerns about a third-party server going down (be it temporarily or for good).

 

Why use Ears instead of other skin fixes? Ears provides a lot of new features to customize your skin, and is a much more lightweight patch with no usage of third-party servers and is completely open source. Additionally, Ears backports translucent secondary layer support to 1.8 and 1.7.

 

Come discuss this mod and any of my others on Discord or Matrix, or send me an email.

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)!

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Crowdin](https://badges.crowdin.net/craftpresence/localized.svg)](https://crowdin.com/project/craftpresence)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5e0667f7208b49ecab1a6affbfa6cbf7)](https://app.codacy.com/gl/CDAGaming/CraftPresence/dashboard?utm_source=gl&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
[![Pipeline Status](https://github.com/CDAGaming/CraftPresence-Mirror/actions/workflows/build.yml/badge.svg?branch=master)](https://gitlab.com/CDAGaming/CraftPresence/commits/master)

[![CurseForge-Downloads](https://cf.way2muchnoise.eu/full_craftpresence_downloads.svg)](https://www.curseforge.com/minecraft/mc-mods/craftpresence)
[![CurseForge-Availability](https://cf.way2muchnoise.eu/versions/craftpresence.svg)](https://www.curseforge.com/minecraft/mc-mods/craftpresence)

[![Modrinth-Downloads](https://img.shields.io/modrinth/dt/DFqQfIBR)](https://modrinth.com/mod/craftpresence)
[![Modrinth-Availability](https://img.shields.io/modrinth/game-versions/DFqQfIBR)](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:cstack2011@yahoo.com)
* [CurseForge](https://www.curseforge.com/minecraft/mc-mods/craftpresence)
* [Discord :: ![Discord Chat](https://img.shields.io/discord/455206084907368457.svg)](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)