Modern Phone - notes for moderators and reviewers
=================================================

What this mod is
----------------
An in-game smartphone item. Everything it does happens inside Minecraft: chat and groups,
a social feed, voice/video calls (optional, through Simple Voice Chat), a camera that
photographs the game world, a gallery, notes, drawing, music, chess, and two small games.
All player data lives in the world save (SavedData), not on any external service.

The code is written in Portuguese, the game text is English
-----------------------------------------------------------
Everything the player reads in game is in English. Under the hood it is different: class
names are English, but method names, field names, comments and Javadoc are in Brazilian
Portuguese. This is the author's first language and it is deliberate - nothing is
obfuscated, minified or hidden. Every class carries Javadoc that explains WHY the code is
the way it is, not just what it does. If you need a specific file explained, the author can
translate it on request.

Network access - one place, and it is the player who asks
----------------------------------------------------------
The only outbound HTTP request in this mod is in:

    com/celular/client/midi/MidiSongs.java  ->  baixar(String) / puxar(URI)

The Music app has a text field where the player pastes a link to a .mid file. Nothing is
downloaded unless the player types a URL and presses the button. There is no hardcoded
endpoint, no analytics, no telemetry, no update check and no phone-home of any kind.

The request itself is deliberately defensive:
  - http:// and https:// only, everything else is refused;
  - 15 second connect and read timeout;
  - the response must look like MIDI (.mid/.midi path or a MIDI content-type);
  - the size cap (1 MB) is enforced while READING THE STREAM, not by trusting the
    Content-Length header, so a hostile server cannot announce 10 KB and send a gigabyte;
  - it runs on the background executor, never on the render thread.

Everything else the mod sends or receives travels on Minecraft's own custom payload
channels, between the client and the server the player is already connected to.

Test and demo classes that ship in the jar
------------------------------------------
Three classes exist to test and to record footage of the mod, and they are inert unless a
system property is passed on the command line:

    client/Autotest.java     -Dcelular.autotest=true      single-player test run
    client/AutotestMp.java   -Dcelular.autotest.mp=...    two-client multiplayer test run
    client/DemoTour.java     -Dcelular.tour=true          scripted tour for video/screenshots

When enabled, they drive the game: create a test world, run commands as the player, take
screenshots into the game folder, and call Minecraft.stop() at the end. That is why they
look alarming in a decompiler - each one is a robot playing the game so a human does not
have to. Without the property they do nothing at all. The gate is the first field of each class:
Autotest and DemoTour read Boolean.getBoolean(...), AutotestMp reads
System.getProperty("celular.autotest.mp", "") and stays idle while it is empty.

They are shipped rather than stripped on purpose: they are what tests the PUBLISHED jar on
every loader before release, and a test build that differs from the release build tests the
wrong artifact. Together they are about 1.2% of the jar.

Reflection
----------
Three call sites, all of them soft dependencies - the mod asks whether an optional mod is
present instead of hard-linking to it, so it still loads when that mod is absent:

    calls/AudioBridges.java   Simple Voice Chat bridge
    client/Shaders.java       Iris, to detect an active shaderpack
    CelularMod.java           reads a static field of its own packet classes to preload them

No process execution, no file access outside the game folder
------------------------------------------------------------
There is no ProcessBuilder, no Runtime.exec, and no read or write outside the Minecraft
game directory. The only files written are the world save, the mod's own config, MIDI files
the player imported, and screenshots taken by the test classes described above.

Licensing and third-party assets
--------------------------------
The mod is MIT licensed (see LICENSE_ModernPhone). The only third-party asset is the Inter
typeface by Rasmus Andersson, used under the SIL Open Font License 1.1; the full license
text ships in this jar as LICENSE-Inter-OFL.txt. All other art, icons and sounds were made
for this mod.

One jar, three loaders
----------------------
This is a single jar that runs on Forge, NeoForge and Fabric. It therefore contains the
shared code TWICE - once under com/celular/** (Mojang mappings, for Forge and NeoForge) and
once under fab/celular/** (intermediary mappings, for Fabric). That duplication is generated
at build time from one source tree; it is a mapping requirement, not two implementations.
