No Original Trains (Client side)
Does what the server says, silently — hides the built-in trains your server blocked.
Client-side · Minecraft 1.20.1 · Fabric + Forge · No GUI · No commands
This is the client half of No Original Trains. It receives a blocked-train list from a server running No Original Trains (Server side) and hides those trains locally. It has no settings, no buttons and nothing to configure — install it and forget it.
At a glance
|
Item |
Detail |
|
What it does |
Reads the block list the server sends and removes those MTR built-in trains from your game |
|
Where it runs |
Your client only. Nothing is ever sent back to the server |
|
Interface |
None. No screen, no keybind, no command |
|
What it can remove |
MTR's 378 built-in trains — and only those |
|
What it never touches |
Addon pack vehicles, even if an ID somehow appears on the server's list |
|
Loaders |
Fabric 0.14.21+ · Forge 47.x |
|
Hard requirements |
Minecraft Transit Railway 4.0.0 or newer |
|
FerriteCore / ModernFix |
Not required by this mod |
How it works
- You join a server that runs the server build. It pushes its block list on a dedicated channel.
- The mod writes it to a local cache and removes those trains from the vehicle list for this session — they disappear from the picker immediately.
- The next time you launch the game, those trains are not registered at all: no model, no texture, no memory.
There is no prompt, no toast, no chat message. If the server has no block list, nothing happens and your previous cache stays as it was.
Why the restart
Trains are registered during resource loading, before any server connection exists. Unregistering them mid-session would mean a full resource reload — a stutter on join and a visible flicker while textures rebuild. Doing it at the next launch costs nothing and looks like nothing. That trade was made deliberately: instant consistency is worth less than a clean join.
The cache file
config/mtr_no_original_trains_client.json, written the moment a list arrives:
To clear it, delete the file or set blockedIds to []. The next launch restores every train.
⚠️ The cache is global, not per-server. It is applied at launch, before the game knows which world you will join. So the trains stay hidden in single-player and on every other server too, until a server with the server build sends a new list or you clear the file. If you play both a managed server and your own world, this is the one behaviour to be aware of.
Which file do I need
|
Build |
File |
Needs |
|
Fabric client |
|
Minecraft 1.20.1 · Fabric Loader 0.14.21+ · MTR 4.0.0+ |
|
Forge client |
|
Minecraft 1.20.1 · Forge 47.x · MTR 4.0.0+ |
Drop the matching jar into mods/ and launch. Nothing else to install.
⚠️ Both builds share the same mod ID. Install one of them, never both.
It will not get you kicked
Servers reject clients that are missing a mod all the time on Forge. This mod is built so that cannot happen:
displayTest="IGNORE_ALL_VERSION"— a client without this mod joins fine, and a version mismatch is never compared.
- The channel accepts any version on both sides, so a 1.0.0 client still talks to a future server build.
- No mandatory dependency on the server build in either direction.
- Fabric performs no mod-list check, so the Fabric build is permissive by nature.
- Nothing is announced. No handshake requirement, no login payload, no client-side registration. The mod waits; it never asks.
If a server is rejected by a third-party "mod detector" plugin, that is a server rule rather than a loader handshake, and this mod does not attempt to hide from it.
Installing it next to the client-side No Original Trains
They are different mods with different mod IDs, and they do not reference each other. Installing both produces no conflict warning and no duplicate-mod error.
|
Installed |
What decides which trains disappear |
|
Only Client side |
The server's list |
|
Only No Original Trains |
Your own picks in the in-game panel |
|
Both |
Union — a train hidden by either one is gone. Addon pack picks still belong to the other mod |
Order of loading does not matter. Neither mod reads the other's config.
What this mod cannot do
- It removes trains for you only. Other players see whatever their own setup allows.
- It cannot block addon vehicles. Every ID is checked against a bundled list of MTR's 378 built-in trains before anything is removed, so an addon ID on the server's list is ignored by design.
- It does not enforce anything server-side. A player without this mod still sees and can still place the blocked trains.
- It does not stop trains already in the world from existing — on a server that keeps using them, they may simply be invisible to you.
- Changes never apply mid-session. A new list takes effect on your next launch.
Before you install
- Check the version. Built for Minecraft 1.20.1, Fabric Loader 0.14.21+ or Forge 47.x, MTR 4.0.0+.
- Verify it is running. Your log should contain one line starting with
[NOT-Client], reporting how many IDs were cached and how many built-in trains the catalog holds. On join, a second line reports the list received.
- No cache file? That is normal until you first connect to a server that runs the server build.
- Not supported: NeoForge on 1.20.1, and any Minecraft version other than 1.20.1.
Source and license
MIT licensed · source on GitHub: ChengYouHang/mtr-no-original-trains
This build lives in mtr_no_original_trains_client/ in that repository; the server half is mtr_no_original_trains_server/. Issues and pull requests are welcome.
The project icon is derived from MTR's official texture (assets/mtr/textures/item/train.png). MTR is released under the MIT license, copyright (c) 2021 LogisticsCraft. Thanks to the MTR team for building and open-sourcing it — this addon would not exist without it.

