Mod Remapping API

# Mod Remapping API

Remaps non-Fabric mods made for a different environment (by default obfuscated) to the current runtime mappings.
Provides hooks to expand the remapping process from other mods.

This mod doesn’t depend on a specific Minecraft version and should work on any version that Fabric Loader can launch.

### Mods depending on this API:
– [Fabricated Legacy Forge](https://modrinth.com/mod/fabricated-forge)
– [Apron](https://modrinth.com/mod/Apron)
– [Fabricated-Rift](https://modrinth.com/mod/fabricated-rift)

## Credits
### Most of the original code of the mod remapper
– paulevsGitch’s mod BetaLoader

Mod Loading Screen

# Mod Loading Screen

An advanced loading screen with the loading progress of mods. It works on all Minecraft versions, as it doesn’t even require Minecraft. Its only requirement is Fabric Loader 0.12.0 or later or Quilt Loader (specific versions of Quilt support are unknown). Do note that if you run this mod on a game other than Minecraft, the loading screen may not close itself.

## Agent

Mod Loading Screen provides a Java agent, which allows opening the loading screen before even the mod loader itself loads. This feature is primarily targeted at modpack developers who want to make a seamless loading experience. The agent can be used by passing `-javaagent:mod-loading-screen-1.0.4.jar` as a JVM argument. If the agent is used, the loading screen should *not* be installed as a mod.

## API

To depend on the API, use the Modrinth Maven. The API should be JiJed, and doing so will not include Mod Loading Screen inside your mod (it will only include the API, which is only a few kilobytes). The API is designed to have both forwards and backwards binary compatibility with future Mod Loading Screen versions. An API is provided for checking which API calls will return stubs and which ones are real.

“`gradle
repositories {
exclusiveContent {
forRepository {
maven {
name = “Modrinth”
url = “https://api.modrinth.com/maven”
}
}
filter {
includeGroup(“maven.modrinth”)
}
}
}

dependencies {
// implementation, not modImplementation!
include(implementation(“maven.modrinth:mod-loading-screen:1.0.4:api”))
}
“`

The API has two top-level classes: `LoadingScreenApi` and `AvailableFeatures`. Full javadocs are available for both classes.

Mirror Shield

# Mirror Shield

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

The design uses a mirror theme.

No OptiFine required. Vanilla compatible.

## More Shield Themes

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

MineZRoy’s Avontuur – Music Disc

Changes music disc 13 to a very good song about MineZRoy. 100% recommend it!

Mellstroy (Я уже красный) Totem of Undying

**EN**: This resource pack replaces the original **Totem of Undying** with the Meme from Mellstroy **I’m already red, it won’t work out culturally** with sound. This meme has become very popular on TikTok over the past couple of years.

**RU**: Этот ресурспак заменяет оригинальный **Тотем бессмертия** на Мем от Меллстроя **Я уже красный, культурно не получится** со звуком, данный мем за последние пару лет стал очень популярным в Тик Ток

– [Омайгадность Тотем](https://modrinth.com/resourcepack/ohmygod-totem-of-undying)

– [Тотем Меллстрой](https://modrinth.com/resourcepack/mellstroy-totem-of-undying)

– [ПОЛНАЯ КОЛЛЕКЦИЯ РЕСУРСПАКОВ – МЕМЫ + СТРИМЕРЫ](https://modrinth.com/collection/sfDcDGAi)

![1](https://avatars.mds.yandex.net/get-vthumb/4628628/c035261781a3b6883b8cb8b8c554fd11/800×450)

MaLiLib API

MaLiLib API is a library mod designed to make use of the [MaLiLib](https://modrinth.com/project/malilib) config library easier

MacOS Input Fixes

Fixes [MC-122296](https://bugs.mojang.com/browse/MC-122296)

Fixes [MC-121772](https://bugs.mojang.com/browse/MC-121772)

Fixes [MC-59810](https://bugs.mojang.com/browse/MC-59810)

Fixes [MC-22882](https://bugs.mojang.com/browse/MC-22882)

Fixes control + tab and control + escape not being detected

Specific fixes:

– Correctly detects left click while control is pressed
– Make trackpad scrolling not scroll a ridiculous number of items at once
– It also fixes momentum scrolling (which changes the number of scroll events based on how quickly you did it, even by like x5-10, meaning you couldn’t easily scroll to the correct item)
– On the trackpad it also only considers scrolling while fingers are on the trackpad (and the same for any fancy mice that support the relevant api e.g. probably apple’s fancy mice/trackpad thing)
– It also fixes scrolling being broken when shift is down on some older mice.
– When dropping an item, Minecraft checks for command + the key, since the default key is Q, this doesn’t make sense, so this mod allows both control + key and command + key to work
– Fixes control + tab and control + escape not being detected

Menu Options (under Mouse Settings Screen):
– Option for trackpad scrolling sensitivity (macOS only)
– Option to enable momentum scrolling on hotbar (macOS only)
– Option to disable workaround for smooth scrolling in interfaces (macOS only)
– Option to reverse scrolling of the whole game
– Option to reverse scrolling of the hotbar
– Option to disable the fix for the ctrl + left click becomes right click bug (macOS only)

 

On platforms other than macOS, the mod does nothing (except the aformentioned menu options), so it can be safely included in any modpack.

Requires Fabric Loader 0.18.5+

Requires Minecraft 1.14+

NOTE!

If you get an error like the following, you need to update Fabric Launcher to the version specified above. Some launchers may require you to update fabric launcher, remove macos input fixes mod fully, and then re-add macos input fixes mod. See https://github.com/hamarb123/MCMacOSInputFixes/issues/60 for the original issue. Note that the “More details” section is very misleading, and parts around it about my mod should be ignored (try disabling it, after the steps before for re-installing, if you are still getting errors to confirm that it is actually an issue with this mod).

![Replace mod ‘Fabric Loader’ (fabricloader) 0.18.4 with version 0.18.5 or later](https://cdn.modrinth.com/data/cached_images/0109c539d7f7fffb4ee8fb9c8625a0d2709e0eac.png)

Github repository: [https://github.com/hamarb123/MCMacOSInputFixes](https://github.com/hamarb123/MCMacOSInputFixes).

And yes, I know I need a better icon 😉

### DISCLAIMER
As [required](https://www.minecraft.net/en-us/usage-guidelines) to mention prominently according to Mojang – THIS IS NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.

View the license for the disclaimer of the actual mod.

LoginPhaseProxy

**LoginPhaseProxy** is a somewhat “*simple*” Velocity Plugin that allows you to proxy the LoginPluginMessagePacket from backend server to the player and LoginPluginResponsePacket from the player to the backend server. This is useful for modded backend servers that rely on Login Plugin Message communication to work, such as [AutoModpack](https://github.com/Skidamek/AutoModpack).

> Disclaimer: This plugin is in early development and may contain bugs and performance issues. Use it at your own risk.

## 🔁 When to use

| Author(s) | Mod |
|—————————————–|——————————————————————————–|
| [Skidam](https://github.com/Skidamek) | [AutoModpack](https://github.com/Skidamek/AutoModpack) (Fabric/Forge/Neoforge) |

> You’re welcome to suggest new use cases via [Issue](https://github.com/caiostoduto/LoginPhaseProxy/issues/new/choose) or [Pull Request](https://github.com/caiostoduto/LoginPhaseProxy/pulls)!

## ❓ What does it solve (detailed)

![Sequence Diagram](https://github.com/caiostoduto/LoginPhaseProxy/raw/main/docs/sequence_diagram_original.png)

Normal Setup ⦁ Made in Figma

On a normal Velocity setup, when a player connects to the proxy, they go through the (P ↔ V) Login Phase, exchanging packets with the Velocity until the proxy sends a Server Login Success Packet, completing the (P ↔ V) Login Phase and triggering the backend connection process. The backend server then goes through its own (V ↔ B) Login Phase, where it may send Login Plugin Message Packets to the Velocity, and they can’t be forwarded to the player, because the (P ↔ V) Login Phase is already complete, so Velocity reponds them with an empty data Login Plugin Response Packet, as it doesn’t know how to handle them. This is a problem for modded backend servers that rely on Login Plugin Message communication to work, such as [AutoModpack](https://github.com/Skidamek/AutoModpack), as they won’t be able to send the necessary data to the player during the Login Phase, and the player won’t be able to join the backend server. This plugin tries to solve this issue by proxying the Login Plugin Message communication between the player and the backend server, allowing modded backend servers to work with Velocity without any issues.

## ✨ How it works (detailed)

~~Basically black magic 🪄🔮~~. It uses [Java Reflection](https://www.oracle.com/technical-resources/articles/java/javareflection.html) to access the internal Velocity classes [ProxyServer](https://github.com/PaperMC/Velocity/blob/ad8de4361c9d6e93b818d3381e85b14e0c90ad05/proxy/src/main/java/com/velocitypowered/proxy/VelocityServer.java) -> [ConnectionManager](https://github.com/PaperMC/Velocity/blob/dev/3.0.0/proxy/src/main/java/com/velocitypowered/proxy/network/ConnectionManager.java)[[1]](https://github.com/caiostoduto/LoginPhaseProxy/blob/main/src/main/java/com/caiostoduto/loginPhaseProxy/initializer/VelocityChannelInitializer.java) to override the serverChannelInitializer[[2]](https://github.com/caiostoduto/LoginPhaseProxy/blob/main/src/main/java/com/caiostoduto/loginPhaseProxy/initializer/FrontendChannelInitializer.java) and backendChannelInitializer[[3]](https://github.com/caiostoduto/LoginPhaseProxy/blob/main/src/main/java/com/caiostoduto/loginPhaseProxy/initializer/BackendChannelInitializer.java), so it can intercept the Velocity communication with the player (P <-> V)[[4]](https://github.com/caiostoduto/LoginPhaseProxy/blob/main/src/main/java/com/caiostoduto/loginPhaseProxy/intercept/FrontendInterceptor.java) and backend server (V <-> S)[[5]](https://github.com/caiostoduto/LoginPhaseProxy/blob/main/src/main/java/com/caiostoduto/loginPhaseProxy/intercept/BackendInterceptor.java), respectively.

![Sequence Diagram](https://github.com/caiostoduto/LoginPhaseProxy/raw/main/docs/sequence_diagram_plugin.png)

Plugin Implementation ⦁ Made in Figma

With that, our plugin watches the Login Phase player connection until it sees a SetCompressionPacket(5) (optionally) and ServerLoginSuccessPacket(6), adding them to a buffer instead of sending them to the player and synthetically sends a loginAcknowledgedPacket(7) to the Velocity pipeline, tricking it into thinking the Login Phase is complete and starting the backend connection process. To make sure the Velocity doesn’t mess the packet interception and sending process, our plugin removes stealthly (so that it doesn’t trigger it’s handlerRemoved lifecycle[[6]](https://github.com/caiostoduto/LoginPhaseProxy/blob/main/src/main/java/com/caiostoduto/loginPhaseProxy/utils/StealthPipeline.java)) the handlers from the Velocity serverChannel pipeline[[4]](https://github.com/caiostoduto/LoginPhaseProxy/blob/main/src/main/java/com/caiostoduto/loginPhaseProxy/intercept/FrontendInterceptor.java) that were added after the Login Phase to Config Phase transition ([MinecraftCompressorAndLengthEncoder](https://github.com/PaperMC/Velocity/blob/ad8de4361c9d6e93b818d3381e85b14e0c90ad05/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressorAndLengthEncoder.java#L33) and [MinecraftCompressDecoder](https://github.com/PaperMC/Velocity/blob/ad8de4361c9d6e93b818d3381e85b14e0c90ad05/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftCompressDecoder.java#L34), others are removed naturally afterwards). Also, our plugin adds the [MinecraftVarintLengthEncoder](https://github.com/PaperMC/Velocity/blob/ad8de4361c9d6e93b818d3381e85b14e0c90ad05/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftVarintLengthEncoder.java#L33)[[4]](https://github.com/caiostoduto/LoginPhaseProxy/blob/main/src/main/java/com/caiostoduto/loginPhaseProxy/intercept/FrontendInterceptor.java) back (was removed at the transition) and sets the [MinecraftDecoder](https://github.com/PaperMC/Velocity/blob/ad8de4361c9d6e93b818d3381e85b14e0c90ad05/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftDecoder.java#L34) state to StateRegistry.LOGIN[[4]](https://github.com/caiostoduto/LoginPhaseProxy/blob/main/src/main/java/com/caiostoduto/loginPhaseProxy/intercept/FrontendInterceptor.java) so the packets are properly encoded and decoded.

If the backend server sends a LoginPluginMessagePacket(10) during its Login Phase, our plugin will intercept it and send it to the player(11), and if the player sends a LoginPluginResponsePacket(12), our plugin will intercept it and send it to the backend server(13). This way, we can effectively proxy the LoginPluginMessagePacket and LoginPluginResponsePacket between the player and the backend server, allowing modded backend servers to work with Velocity without any issues. Then, when the backend server ends the Login Phase sending the ServerLoginSuccessPacket(15), our plugin will flush the buffered packets to the player, completing the Login Phase and allowing the player to join the backend server as normal. Afterwards, if the user sends a LoginAcknowledgedPacket (clientProtocolVersion >= ProtocolVersion.MINECRAFT_1_20_2)(16) after the Login Phase is complete, our plugin will simply ignore it, as it is not expected to be sent by the player at that point. Finally, the plugin will restore the [MinecraftDecoder](https://github.com/PaperMC/Velocity/blob/ad8de4361c9d6e93b818d3381e85b14e0c90ad05/proxy/src/main/java/com/velocitypowered/proxy/protocol/netty/MinecraftDecoder.java#L34) state to its previous state (Config Phase).

So, yeah, *basically black magic* 🪄🔮. Yayyyy!

## 🙏 Acknowledgements

– [Skidam](https://github.com/Skidamek), who inspired me to create this plugin!
– [lucas-gcp](https://github.com/lucas-gcp), who supported me and helped with testing!

Log Cleaner

A lightweight mod that cleans old, unused log files.

The best thing is that this mod keeps files not based on creation date, but the most recent access (of any kind) to the file, so logs that are still being accessed for whatever reason are not removed unwillingly.

It works both client-side only and server-side only, and works in every Minecraft version.

By default, it will clean logs that haven’t been used in more than 14 days, so there’s plenty of time in case you ever need them for debugging, but you can configure it to any amount of days you want.

## Configuration

You can find the mod’s configuration file in `config/logcleaner.json`. There’s two options you can change in there:

– `daysOld`: The number of days a log has to have been unused in order for it to be deleted. Defaults to `14`
– `silent`: If set to `true`, Log Cleaner will not send a message with the amount of deleted log files to the log. Defaults to `false`

Killer Head

[![Modrinth Icon](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy-minimal/available/modrinth_vector.svg)](https://modrinth.com/project/I7bAUQBi)
[![Discord Icon](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy-minimal/social/discord-singular_vector.svg)](https://discord.gg/FVq3j5heAc)

[![Fabric Icon](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy-minimal/supported/fabric_vector.svg)](https://fabricmc.net/)
[![Quilt Icon](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy-minimal/supported/quilt_vector.svg)](https://quiltmc.org/)
[![NeoForge Icon](https://raw.githubusercontent.com/Solmeye/Mirror-Anticheat/2b0ed26bc9fd49f2f1c6b8aa289dbb81cd0db956/neoforge.svg)](https://neoforged.net/)
[![Forge Icon](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy-minimal/supported/forge_vector.svg)](minecraftforge.net)

___

## What’s Killer Head ?
**Killer Head** is a project to drop the killer’s head when his victim dies.

## How it works ?
### Edit player loot table `entities/player.json`
Adds a player head to the death of a player and correlates the characteristics of the killer.

## Complementary
You can also use [Drop Head](https://modrinth.com/project/drop-head).
Here’s [Stackable Heads](https://modrinth.com/project/stackable-heads) which is interesting to use.

## Compatibility
**Killer Head** should work anywhere.

## Support me!
Join my Hardcore Minecraft server: `38.143.19.130:51965`