Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eba6978cc0 | ||
|
|
63daa89bcb | ||
|
|
748c65d592 | ||
|
|
91ad350543 | ||
|
|
e281e4024a | ||
|
|
3a84022d8f | ||
|
|
c16b061fe7 | ||
|
|
bc8fc88849 | ||
|
|
e349124fc4 | ||
|
|
93a328a007 | ||
|
|
597e112e2b | ||
|
|
b0406b82f1 | ||
|
|
b10af101ed | ||
|
|
635cdd6c2c | ||
|
|
91b1cef4b2 | ||
|
|
1858aa143c | ||
|
|
93fbabcb60 |
No files matched your search
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 221 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,54 @@
|
||||
id = "ayynoxs_map_pack"
|
||||
kind = "native-mod"
|
||||
name = "ayynoxs map pack"
|
||||
summary = "Minimap and full-screen world map with waypoints, cave layers and opt-in map sharing between players."
|
||||
description = """
|
||||
A **minimap** and a **full-screen world map** for Horizon, written from scratch as a native mod. Inspired by the well-known Java map mods, but no code or graphics are taken from them.
|
||||
|
||||
## ayynoxs minimap
|
||||
- Built on Horizon's own minimap renderer, with coordinates and facing direction below it
|
||||
- Square or round, north-up or rotating, 4 sizes, zoom with `I` / `O`
|
||||
- **Waypoints:** `B` opens a window for the name, `Backspace` removes the one you aim at. They show on the minimap, on the world map and in the world with their distance in metres.
|
||||
- Automatic death point
|
||||
- Chat commands: `/wp add|del|rename|share|sync|list|clear|help`
|
||||
|
||||
## ayynoxs world map
|
||||
- Full-screen map on `M`: drag or WASD to pan, wheel to zoom
|
||||
- Drawn like a vanilla map item, one block per cell
|
||||
- Saves every chunk you explore, per world/server, dimension and layer
|
||||
- Same layers as the minimap: the surface outside, your head height in caves and in the Nether
|
||||
|
||||
## Sharing (off by default)
|
||||
- `/wp share <nr> <player>` sends a waypoint as a private message, on any server. Only private messages to you can add waypoints.
|
||||
- Live map sharing is **off by default** and chosen per server with `/wp sync on|off`. When on, explored chunks and new waypoints go to the other players who turned it on, through a Horizon host (co-op/LAN, Horizon servers) or the AyynoxsMapSync plugin on Paper servers.
|
||||
- What arrives is limited: only your current level, within 2048 blocks of you, at most 1000 waypoints per world.
|
||||
|
||||
Languages: English (default), Deutsch, Français, Italiano, Русский.
|
||||
|
||||
## What it does and doesn't
|
||||
- **Hooks:** the native hook points (frame, tick, HUD, keys, commands, minimap, settings, mods list, screen keys and characters, mod messages, player join/leave), plus the Advancements screen's draw, mouse, scroll and close (the world map is drawn in its place), `extras_connecting` (the server address, for the map's folder) and the chat HUD's `add` / `add_signed` (to hide shared-waypoint private messages).
|
||||
- **Files:** writes only under `horizon-mods/.horizon-mod-data/ayynoxs_minimap/` (settings, waypoints) and `ayynoxs_worldmap/` (map tiles).
|
||||
- **Network:** no internet access. It only sends Horizon mod messages on `ayynoxs_map:sync` to the server you play on (shares only after `/wp sync on`), and `/msg` commands you start yourself with `/wp share <nr> <player>`.
|
||||
- Pinned to nightly `6475f62` (2026-11-04)."""
|
||||
authors = ["DenoxyYT (Ayynox)"]
|
||||
owners = ["DenoxyYT"]
|
||||
owner_ids = [94991632]
|
||||
license = "MIT"
|
||||
source = "https://github.com/DenoxyYT/ayynoxs-map-pack"
|
||||
icon = "icons/ayynoxs_map_pack.png"
|
||||
categories = ["utility", "adventure", "social"]
|
||||
tags = ["minimap", "world", "map", "waypoints", "multiplayer"]
|
||||
|
||||
[[versions]]
|
||||
version = "0.4.2"
|
||||
published = "2026-11-05"
|
||||
game = "26.3"
|
||||
file = "ayynoxs_map_pack-0.4.2.hnmod"
|
||||
sha256 = "d5cef20531720a594969b7b7acfd20d2d32d644d7b0ae230dd68a46f98172371"
|
||||
changelog = """
|
||||
Changes from the review of 0.4.1:
|
||||
- Map sharing is off by default and chosen per server: /wp sync on (or the setting) turns it on. When a server can pass shares on, the pack says so once in chat.
|
||||
- Waypoints arrive only through private messages to the player (commands.message.display.incoming); the marker in public chat does nothing.
|
||||
- Shared chunks are taken only for the player's current level, a real layer and within 2048 blocks of the player; shared waypoints stop at 1000 per world.
|
||||
Also: the world map is drawn like a map item again (one block per cell), which is cheaper while dragging.
|
||||
Built for Horizon nightly 6475f62 (2026-11-04)."""
|
||||
@@ -0,0 +1,33 @@
|
||||
id = "cpm"
|
||||
kind = "native-mod"
|
||||
name = "CustomPlayerModels-Horizon"
|
||||
summary = "Customize your Minecraft avatar with custom models and animations"
|
||||
description = """
|
||||
#For version "Nightly 2026-11-01 c9d474d"
|
||||
CustomPlayerModels-Horizon allows you to use custom player models and animations directly in Minecraft. Customize your avatar with unique shapes, extra parts, and glowing textures.
|
||||
|
||||
## How to use
|
||||
go to options > mods > CPM-settings and add some models, and load it onto your character. when in game you can also use gestures with G and in the same menu pick different models"""
|
||||
authors = ["Scrapper1824", "Claude"]
|
||||
owners = ["Scrapper1824"]
|
||||
owner_ids = [72410525]
|
||||
license = "MIT"
|
||||
source = "https://github.com/Scrapper1824/CustomPlayerModels-Horizon"
|
||||
icon = "icons/cpm.png"
|
||||
categories = ["utility", "decoration", "social"]
|
||||
tags = ["cpm", "player-models", "skin", "cosmetics", "animations", "avatar", "customization", "model", "gestures"]
|
||||
screenshots = ["screenshots/cpm/1.jpg", "screenshots/cpm/2.jpg", "screenshots/cpm/3.jpg", "screenshots/cpm/4.jpg", "screenshots/cpm/5.jpg", "screenshots/cpm/6.jpg", "screenshots/cpm/7.jpg", "screenshots/cpm/8.jpg"]
|
||||
key = "RWTyJv27brzr+KJFfhEDz5Xv/sZ5igWtmwk8cWeHQJXzh147Ptab6NcX"
|
||||
|
||||
[[versions]]
|
||||
version = "0.1.2"
|
||||
published = "2026-11-06"
|
||||
game = "26.3"
|
||||
file = "cpm-0.1.2.hnmod"
|
||||
sha256 = "33725ad0ab212719107355223849b2c26a628551714d70fb44f10f55f79cdca3"
|
||||
signature = """
|
||||
untrusted comment: signature from minisign secret key\r
|
||||
RUTyJv27brzr+PDmXA1VqZ7YKJ5vOFO+0aAAx90yLDVaRfOaIKj0wy2WlrolYkrp/WuIeaM3/zvBune89B0JmibKuzI937MQow4=\r
|
||||
trusted comment: timestamp:1793941342\tfile:cpm.hnmod\r
|
||||
zdDAovasHJ8fJKFR8YlrwkgdlxrjaY0XTw/fULMyceAKY2LXiJbTTu3bqsGbaYe7Q8ZSqjVUs2OCihSNPsnhBg=="""
|
||||
changelog = "first release"
|
||||
@@ -0,0 +1,44 @@
|
||||
id = "hud_plus"
|
||||
kind = "native-mod"
|
||||
name = "HUD+"
|
||||
summary = "One fully configurable HUD with a drag-and-drop editor and four views per module."
|
||||
description = """
|
||||
HUD+ is one configurable HUD for Horizon, with an in-game drag-and-drop layout editor.
|
||||
|
||||
Every module has four views: **Minimal**, **Compact**, **Standard** and **Full**. `Standard` follows the module's own switches; the other three are presets. A profile picks a view for all modules: Minimal gives Minimal, PvP gives Compact, the rest give Standard.
|
||||
|
||||
- **AppleSkin** — the original mod's look: golden saturation outlines over the hunger icons and the food/saturation a held item would restore flashing on the same bar. Minimal draws the outlines only, Compact adds food numbers, Full adds saturation, exhaustion, regeneration and the item preview.
|
||||
- **Effects** — names, amplifiers, remaining time, sorting, grouping, an expiring-only filter and warning colours; can hide vanilla's icons. Minimal shows three rows of icons only, Compact adds names and time up to six rows, Full shows everything without a limit.
|
||||
- **Inventory, armour and held items** — the whole inventory, hotbar, armour and offhand, stack counts, durability bars or percentages, the selected slot, arrows and totems. Minimal is the hotbar alone, Compact adds counts and a durability bar, Full adds the grid, armour, offhand and empty slots.
|
||||
- **Coordinates** — XYZ, facing and yaw, chunk, dimension, and the same place in the other dimension. Minimal is XYZ, Compact adds facing, Full adds chunk, dimension, the Nether equivalent and yaw.
|
||||
- **Keystrokes** — WASD, space, sneak, sprint, mouse buttons and CPS. Minimal is WASD, Compact adds the mouse, Full adds space, sneak, sprint and CPS.
|
||||
- **Performance and time** — FPS, frame time, 1% low, world clock and day, local time and date, speed. Minimal is FPS, Compact adds the clock, Full adds frame time, the 1% low, real time and speed.
|
||||
- **Player vitals, food tooltips, durability tooltips.** Minimal is health, Compact adds food and bars, Full adds absorption, armour, air and XP.
|
||||
- **The vanilla HUD** — every widget (crosshair, hotbar, health and hunger, XP, effect icons, boss bars, chat, scoreboard and the rest) can be moved and scaled on a `Vanilla` page in the editor.
|
||||
|
||||
Settings open as one compact, scrollable panel on the right: General, every module, Vanilla HUD and tooltips are on a single screen, the world stays visible, and each module has its view, anchor, scale, background, border and module-specific options inline. Five profiles (Default, Minimal, PvP, Builder, Streamer) and six themes set everything at once. `H` opens the layout editor, `N` settings, `V` the vanilla layout page; `/hudplus on|off|layout|settings|reset|profile|theme` also work. Configuration lives in `config/hud_plus.json`.
|
||||
|
||||
HUD+ only draws. It has no network code, no packets, no second process and no movement, attack or use calls; `check_client_only.py` scans every source for them and CI fails the build if one appears. A wire-level audit (`tools/packet_audit.py`) records a stock Horizon client and the HUD+ build on the same fresh server behind a decoding proxy, and the two captures match packet for packet. The mod is compiled into the client (not a file in `mods/`), and a client-only HUD is never named in `horizon:mod_list`. It is provided as is under the MIT licence, without warranty; players are responsible for checking that a server's rules allow the modules they turn on.
|
||||
|
||||
Native mod: the launcher builds it into the game on the pinned Horizon Nightly. Uses the saturation art of [squeek502/AppleSkin](https://github.com/squeek502/AppleSkin) (Unlicense)."""
|
||||
authors = ["oxi-does-dev"]
|
||||
owners = ["oxi-does-dev"]
|
||||
owner_ids = [318972665]
|
||||
license = "MIT"
|
||||
source = "https://github.com/oxi-does-dev/hud-plus"
|
||||
icon = "icons/hud_plus.png"
|
||||
categories = ["utility"]
|
||||
tags = ["hud", "ui"]
|
||||
|
||||
[[versions]]
|
||||
version = "4"
|
||||
published = "2026-11-06"
|
||||
game = "26.3"
|
||||
file = "hud_plus-4.hnmod"
|
||||
sha256 = "0f94e0502ccd6a2b4905d4f4e41073e06726cb7ce50cd0d9ec1035841d72a957"
|
||||
changelog = """
|
||||
Four views for every module — Minimal, Compact, Standard and Full. Standard keeps the module's individual switches; the other three are presets, so one row under N makes a module tiny, tidy or exhaustive. Profiles pick a view for all modules (Minimal gives Minimal, PvP gives Compact, the rest Standard).
|
||||
|
||||
Also adds an Off setting for effect timers and a separate inventory-grid switch (Minimal keeps only the hotbar), tightens the held/armour rows for the compact views, drops the full-screen sleep overlay from the Vanilla page because there is nothing to move or scale in it, and makes snap-to-grid move modules around their own default offset so dragging one back restores its exact default position.
|
||||
|
||||
Settings now open as one compact, scrollable panel on the right instead of a list of module pages: General, every module, Vanilla HUD and Tooltips are on a single screen, the world stays visible behind it, and each module keeps its own switches inline. Clicking a row on the Vanilla page now selects the widget actually under the pointer (the list treated its header as a row), Subtitles start where the captions are drawn and move and scale with the rest of the vanilla HUD, and a configuration change made from chat reaches the HUD immediately. AppleSkin keeps its icons on the vanilla hunger bar when the food numbers make the box wider, and centres those numbers over the icons."""
|
||||
@@ -0,0 +1,34 @@
|
||||
id = "minelights"
|
||||
kind = "native-mod"
|
||||
name = "MineLights"
|
||||
summary = "MineLights is a Minecraft mod that brings RGB lighting integrations to Minecraft Java Edition and Horizon."
|
||||
description = """
|
||||
MineLights is a Minecraft Fabric, Quilt, Forge, NeoForge and Horizon mod that brings your world to life with dynamic RGB lighting effects for your peripherals. Effects respond to your environment, weather and player status; keyboard lighting can also display health, hunger, experience and a compass.
|
||||
|
||||
Configure MineLights through Horizon's Mods menu. OpenRGB devices and Yeelight bulbs can connect directly. Other supported RGB devices use [MineLights Server](https://github.com/megabytesme/MineLights-Server).
|
||||
|
||||
MineLights connects to local RGB services and may discover Yeelight bulbs on the local network. MineLights Server uses encrypted, authenticated connections and supports optional pairing with servers on other computers. On Windows, Horizon's server option is off by default. If you opt in and confirm, it can download and launch the reviewed MineLights Server v2.4.0 after verifying its pinned SHA-256. Current clients use authenticated V2; older clients may use loopback-only V1 after explicit approval. You can also install and start the server yourself. Configurable chat notices report a missing server, download start, in-progress status when you join a world during an existing download, and whether the server started or needs a restart when the download finishes; update checks read release metadata without downloading an update.
|
||||
|
||||
This is the Horizon port of [MineLights](https://github.com/megabytesme/MineLights), by MegaBytesMe. As a native mod, it is built into the game and runs with the player's account permissions.
|
||||
"""
|
||||
authors = ["MegaBytesMe"]
|
||||
owners = ["megabytesme"]
|
||||
license = "CC-BY-NC-SA-4.0"
|
||||
source = "https://github.com/megabytesme/MineLights/tree/246c37d4c0c29832fb66236a366265e20a0c70f2/horizon"
|
||||
icon = "icons/minelights.png"
|
||||
categories = ["utility", "technology"]
|
||||
key = "RWQXM9P921f9AnO4kAKnVMu+2UdAr6BeAdM70P6PjbT7xxxmJbVb/qlN"
|
||||
|
||||
[[versions]]
|
||||
version = "2.4.0"
|
||||
published = "2026-11-07"
|
||||
game = "26.3"
|
||||
file = "minelights-2.4.0.hnmod"
|
||||
sha256 = "87fda49af7960a44870bc87c9462b802a28c6df74e70341232f52efca11fd15a"
|
||||
signature = """
|
||||
untrusted comment: signature from minisign secret key
|
||||
RUQXM9P921f9AgU6Svgj11s2TI81XGDIpMoIY4FSBPEBVq9Bi8gfSfo18sN2oLqct85U8dEr5GVbVenTrtqDRmRyXj9W8gbdhwI=
|
||||
trusted comment: MineLights Horizon native mod 2.4.0
|
||||
eJMjw30In2YnoOLLAh3vJTJ8ianrENm3766GtwRD89beMA05QSlDSfdwBVcjgeoaJTDiT9WwNvn3rKi/NncqCg==
|
||||
"""
|
||||
changelog = "Use authenticated V2 connections in Horizon and Java, preserve opt-in V1 support for older clients, add shared-provider priorities and safe shutdown, restore Horizon OpenRGB device state safely, add configurable server download notices, pin the reviewed MineLights Server 2.4.0 release, and fix Windows server-operation locking."
|
||||
@@ -0,0 +1,26 @@
|
||||
id = "projecte"
|
||||
kind = "mod"
|
||||
name = "ProjectE for Horizon (assets)"
|
||||
summary = "The blocks, items, textures, text and recipes of ProjectE for Horizon. Needs the native mod."
|
||||
description = """
|
||||
**This is one of the two parts of [ProjectE for Horizon](https://playhorizon.dev/mods/projecte_core), and does little alone.** Install both: this one, the assets, and the native part.
|
||||
|
||||
It holds the blocks, items, creative tab, textures, text and recipes. It has no code. The code, and the description of what the mod does, are in the native part.
|
||||
|
||||
An unofficial port of [ProjectE](https://github.com/sinkillerj/ProjectE) (MIT, Copyright (c) 2020 Sin Tachikawa); its recipes and names are used under that licence. The textures are original work made for this port, inspired by ProjectE's look; ProjectE's and EE2's art isn't included. No Minecraft assets are included. MIT licensed."""
|
||||
authors = ["Arthur Black"]
|
||||
owners = ["d3xc0"]
|
||||
owner_ids = [136307382]
|
||||
license = "MIT"
|
||||
source = "https://github.com/d3xc0/projecte-horizon"
|
||||
icon = "icons/projecte.png"
|
||||
categories = ["technology", "library"]
|
||||
tags = ["emc", "transmutation", "assets"]
|
||||
|
||||
[[versions]]
|
||||
version = "0.1.0"
|
||||
published = "2026-11-06"
|
||||
game = "26.3"
|
||||
file = "projecte-0.1.0.hmod"
|
||||
sha256 = "da08dffc1d021463e43576db233bc79e943aaf4e76a8a1ea37b66aa8ebab883f"
|
||||
changelog = "First release."
|
||||
@@ -0,0 +1,43 @@
|
||||
id = "projecte_core"
|
||||
kind = "native-mod"
|
||||
name = "ProjectE for Horizon"
|
||||
summary = "Unofficial port of ProjectE: EMC, transmutation tables, collectors, condensers, dark and red matter tools and armour."
|
||||
description = """
|
||||
**This mod has two parts, and you need both.** Install this one, the native part, and [ProjectE for Horizon (assets)](https://playhorizon.dev/mods/projecte), then press Build.
|
||||
|
||||
An **unofficial** port of [ProjectE](https://github.com/sinkillerj/ProjectE) to Horizon. It isn't made or supported by the ProjectE team, so please report its bugs here, not to them.
|
||||
|
||||
Break items down into EMC and turn that EMC into new items:
|
||||
|
||||
- **Transmutation Table and Tablet**: burn an item to learn it and gain its EMC, then make more of anything you've learned. Your EMC and knowledge are saved per player.
|
||||
- **Philosopher's Stone**: changes blocks in the world, with charge and modes, and works as a crafting tool.
|
||||
- **EMC devices**: Energy Collectors MK1-3, Anti-Matter Relays MK1-3, Energy Condensers MK1 and MK2, Dark and Red Matter Furnaces, Klein Stars.
|
||||
- **Fuels and matter**: Alchemical Coal, Mobius and Aeternalis Fuel, Dark and Red Matter, covalence dusts.
|
||||
- **Gear**: unbreakable dark and red matter tools that dig wider as they charge, the katar and morning star, dark matter, red matter and gem armour.
|
||||
- **Trinkets**: rings, stones, amulets, the Repair Talisman, Gem of Eternal Density, Watch of Flowing Time, divining rods, lenses, the pedestal, the Interdiction Torch, Nova explosives, Alchemical Chest and the 16 Alchemical Bags.
|
||||
|
||||
Keys: V charge, G mode, C extra function, R fire projectile.
|
||||
|
||||
The menus are chest and furnace screens, not ProjectE's own. Some things are simplified or missing: Swiftwolf's Rending Gale gives speed and slow falling, not flight; projectiles act at once; rings cost no EMC; the Mercurial Eye isn't ported. EMC values are a fixed table worked out from ProjectE's defaults, so they don't adapt to other mods. The [README](https://github.com/d3xc0/projecte-horizon#simplified-or-left-out) has the full list.
|
||||
|
||||
Native source mod: install it on the launcher's Mods page, press Build there, and confirm the native-code warning. It runs with your account's permissions.
|
||||
|
||||
**Credits.** All credit for the design goes to [ProjectE](https://github.com/sinkillerj/ProjectE) (MIT, Copyright (c) 2020 Sin Tachikawa) by SinKillerJ, pupnewfster, MaPePeR, MozeIntel and its contributors, a rewrite of Equivalent Exchange 2 by x3n0ph0b3. Its recipes, EMC conversions and names are used under its MIT licence; see [CREDITS.md](https://github.com/d3xc0/projecte-horizon/blob/main/CREDITS.md).
|
||||
|
||||
The textures are original work made for this port, inspired by ProjectE's look; ProjectE's and EE2's art isn't included. No Minecraft code or assets are included. MIT licensed."""
|
||||
authors = ["Arthur Black"]
|
||||
owners = ["d3xc0"]
|
||||
owner_ids = [136307382]
|
||||
license = "MIT"
|
||||
source = "https://github.com/d3xc0/projecte-horizon"
|
||||
icon = "icons/projecte_core.png"
|
||||
categories = ["technology", "game-mechanics", "magic"]
|
||||
tags = ["emc", "transmutation", "alchemy", "tools"]
|
||||
|
||||
[[versions]]
|
||||
version = "0.1.0"
|
||||
published = "2026-11-06"
|
||||
game = "26.3"
|
||||
file = "projecte_core-0.1.0.hnmod"
|
||||
sha256 = "ea0cd9cdb85cb8f3bd9f35a99d7b2c8e4f95ea2c0ba321509be02ee8f4b3df85"
|
||||
changelog = "First release. Tested on Horizon Nightly 66f3981 and Horizon Mixins e8cd0aa."
|
||||
@@ -0,0 +1,34 @@
|
||||
## Horizon registry entry for PVP Music (port of the Modrinth project PvP Music, Tkf0xIjA).
|
||||
id = "pvp_music"
|
||||
kind = "native-mod"
|
||||
name = "PVP Music"
|
||||
summary = "Battle music during combat: fades, death fades and the phased two-half track switch, the original's behavior kept."
|
||||
description = """
|
||||
**A native Horizon mod**: the launcher builds it into the game (install it on the launcher's Mods page, then press Build there). Native mods are not sandboxed and run with your account's rights, so read the source before you build it. Pinned to the Horizon tree this was built against.
|
||||
|
||||
- Mutual-combat detection: attacks on and by players and mobs are remembered for 5 s; a mob we hit that then hits us starts a mob battle.
|
||||
- A landed hit on a player starts a player battle; explosion and bad-respawn-point hurts pull in combat within 12 blocks; a wither within 30 blocks starts a fight.
|
||||
- The battle track fades in and out, death fades run at the configured multiplier, and the phased two-half music switches at low health on a beat. Battles of 30 s or more end with the short end sound, of 60 s or more with the long end sound.
|
||||
- `/pvpmusic` drives every setting the original's config screen kept.
|
||||
|
||||
Sounds: the `.hnmod` carries code only, so the four tracks ship as a companion resource pack on the same release (`pvp-music-sounds-1.2.0.zip`, the original's CC0 assets). Install it as a resource pack and the music plays; without it the mod is silent.
|
||||
|
||||
Port of [PvP Music](https://modrinth.com/mod/Tkf0xIjA) by Countered (CC0-1.0); credited upstream, original license preserved. The sound-asset gap is documented in the port README and tracked on horizon-rust/horizon.
|
||||
"""
|
||||
authors = ["sparticle62ops"]
|
||||
owners = ["sparticle62ops"]
|
||||
owner_ids = [209812745]
|
||||
license = "CC0-1.0"
|
||||
source = "https://github.com/Sparticle62ops/horizon-pvp-music"
|
||||
categories = ["utility"]
|
||||
tags = ["combat", "music", "audio", "qol"]
|
||||
|
||||
icon = "icons/pvp_music.png"
|
||||
|
||||
[[versions]]
|
||||
published = "2026-11-06"
|
||||
version = "1.2.0"
|
||||
game = "26.3"
|
||||
file = "pvp-music-1.2.0.hnmod"
|
||||
sha256 = "21e2e7768a5b4f89bee05453ae83e8130ab8b9019431eb5ecb10b2d7326e5be7"
|
||||
changelog = "First release: battle detection, fades, the phased two-half track switch and /pvpmusic. The four tracks ship as a companion resource pack on the same release (the .hnmod carries code only)."
|
||||
@@ -22,7 +22,7 @@ Wheat, carrots, potatoes, beetroot, nether wart, cocoa, torchflower, pitcher cro
|
||||
- Bone meal, ordinary breaking and planting, sweet berries and glow berries keep their normal behaviour.
|
||||
|
||||
### Compatibility
|
||||
Last checked on **November 1, 2026**, for Minecraft 26.3. The release is pinned to Horizon Nightly 2026-10-31 (`9d979ca`), where single-player and LAN were tested. A compilation-only check also passed on the newest Nightly available on that date (`d91cab6`); gameplay on that newer revision was not tested.
|
||||
For Minecraft 26.3. Each version is built and gameplay-tested on one exact Horizon Nightly; the launcher warns when a newer Nightly breaks it. Tested revisions and results: [Validation](https://github.com/AyanoKaito/horizon-right-click-crops/blob/main/VALIDATION.md).
|
||||
|
||||
This is a native mod: install only if you trust its source and accept the launcher's native-code warning.
|
||||
|
||||
@@ -36,8 +36,22 @@ source = "https://github.com/AyanoKaito/horizon-right-click-crops"
|
||||
icon = "icons/right_click_crops.png"
|
||||
categories = ["utility", "food"]
|
||||
tags = ["farming", "crops", "harvest", "replant"]
|
||||
screenshots = ["screenshots/right_click_crops/1.jpg", "screenshots/right_click_crops/2.jpg"]
|
||||
key = "RWRwbuaByP5mM4VUm4kZEQVPiuw+3IEVJ7CZcEHIjY5fPKf9lhQKUZRy"
|
||||
|
||||
[[versions]]
|
||||
version = "1.0.1"
|
||||
published = "2026-11-07"
|
||||
game = "26.3"
|
||||
file = "right_click_crops-1.0.1.hnmod"
|
||||
sha256 = "e369d9cb34320144d805d02f162a3ed357b9cf8bbeee457e409cedc0b7e63d0a"
|
||||
signature = """
|
||||
untrusted comment: signature from minisign secret key\r
|
||||
RURwbuaByP5mMzuPfAJmER9wI28tgK38Mep2zAKwU82bFZt+grGVZOcHq03jTwRSPx7BxM2s6fiQSG1yBNj3fnTM254AAdMTmgY=\r
|
||||
trusted comment: timestamp:1794046822\tfile:right_click_crops-1.0.1.hnmod\thashed\r
|
||||
eZC0QPTQ1vVVypFSHHcn3hb29MfdbBU8aXb3q7Rzrgroq8O9q2BZzniMx9XqwvyYcRJIs+RZZxmEwsiF9ZoNAA=="""
|
||||
changelog = "Compatibility patch for Horizon Nightly 2026-11-05 (`66f3981`). Horizon's block loot helper now takes the broken block's entity data; the managed plants have none, so harvesting passes none and loot is unchanged. No gameplay changes. Validated in single-player and for LAN host and guest on that exact revision."
|
||||
|
||||
[[versions]]
|
||||
version = "1.0.0"
|
||||
published = "2026-11-01"
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
id = "schematics"
|
||||
kind = "native-mod"
|
||||
name = "Schematics"
|
||||
summary = "Load schematics in every common format, see them as ghost blocks in the world, check what is missing, paste them and save areas."
|
||||
description = """
|
||||
Schematics for Horizon.
|
||||
|
||||
Reads `.litematic`, `.schem` (Sponge versions 1 to 3), `.schematic` (numeric ids of 1.12 and before), `.nbt`, `.mcstructure` (Bedrock, translated on a best-effort basis) and `.bp`. Put files in `schematics/` in the game folder.
|
||||
|
||||
- **M**: the menu: load a file, then move, turn, mirror or paste the placement.
|
||||
- **In the world**: missing blocks show as see-through ghosts, wrong blocks red, wrong states orange, extra blocks magenta.
|
||||
- **Materials**: what it takes, what is missing and what you carry.
|
||||
- **Save area**: a stick's left and right clicks set two corners; save them as `.litematic`, `.schem` or `.nbt`.
|
||||
- **Page Up / Page Down**: one layer at a time.
|
||||
- **/schematics** (or **/sch**): the same from chat.
|
||||
|
||||
**What it does and doesn't do:** it reads the game's world, block models and player, and draws over the world, the HUD and its own screen. It reads and writes schematic files in `schematics/` and its settings and placements in `horizon-mods/.horizon-mod-data/schematics/`. It opens no network connections. Pasting in single player runs on the world's own server; on a server it sends `/setblock` and `/summon` commands, which need permission there.
|
||||
|
||||
Written from scratch for Horizon. Pinned to Horizon `c9d474d`, because it reads the game's block models, atlas and world, and the single player server's levels."""
|
||||
authors = ["Nirokx"]
|
||||
owners = ["Nirokx"]
|
||||
owner_ids = [95123456]
|
||||
license = "MIT"
|
||||
source = "https://github.com/Nirokx/horizon-schematics"
|
||||
icon = "icons/schematics.png"
|
||||
categories = ["utility", "management"]
|
||||
tags = ["schematics", "building", "litematic", "schem", "ghost-blocks", "material-list"]
|
||||
|
||||
[[versions]]
|
||||
version = "1.0.0"
|
||||
published = "2026-11-05"
|
||||
game = "26.3"
|
||||
file = "schematics-1.0.0.hnmod"
|
||||
sha256 = "04c0cb5d1fbddf92327cf3456b33070a515af6b51b37109cd43f058ee1b78642"
|
||||
changelog = "First release for Horizon 26.3 (Nightly c9d474d)."
|
||||
@@ -0,0 +1,31 @@
|
||||
id = "seedcrackerx"
|
||||
kind = "native-mod"
|
||||
name = "SeedCrackerX"
|
||||
summary = "SeedCrackerX for Horizon: finds the world seed of a server from the structures you walk past, outlined through walls."
|
||||
description = """
|
||||
A port to Rust of [SeedCrackerX](https://github.com/19MisterX98/SeedcrackerX) 2.16.2 for Horizon, written from the Java source together with the parts of the SeedFinding libraries it calls. Walk near structures (igloos, temples, monuments, shipwrecks, end cities, buried treasure, outposts, trial chambers, desert wells, end gateways, emerald ore, dungeons) and they are outlined through walls; with enough of them the world seed is printed in chat. Commands are `/seedcracker ...` as in the Java (`render outlines`, `finder`, `data`, `cracker`, `version`, `database`, `gui`), and the settings are on the mod's page in Options > Mods. PARITY.md in the source lists every Java file and what became of it.
|
||||
|
||||
What it does not do: the Dungeon and Warped Fungus cracking of Minecraft 1.17 and older (it needs a lattice solver) and the biome-based world seed search. A world seed is found from structures and the hashed seed the server sends. Like the Java mod it shows information the game does not draw by itself, so some servers do not allow it: that choice is the player's.
|
||||
|
||||
For reviewers:
|
||||
- Network, in two places, both in `src/game/seedcracker.rs` and both the Java mod's own behaviour: (1) once when the mod starts, one HTTP GET of the public Google Sheet of known server seeds (`DATABASE_URL`, `src/config/database.rs`) on a background thread, always, with no switch; (2) only if the player switches `databaseSubmits` on (off by default), when a seed is cracked on a server with more than 10 players: the mod asks the game's own `horizon_client::auth::join_server` to prove the account to Mojang's session service under the id `seedcrackerx`, then posts the server address, dimension, seed, version and the player's name (or a hash of it) to the sheet's script (`DATABASE_POST_URL`). The mod never reads or stores the access token. Nothing else opens a socket.
|
||||
- It writes only under `horizon-mods/.horizon-mod-data/seedcrackerx/`: `seedcracker.json` (settings, the Java's layout), `known_seeds.txt` and a folder `SeedCracker saved structures`; it reads the same files back.
|
||||
- It starts an operating system program in one place, `open_uri` in `src/game/seedcracker.rs` (`rundll32` on Windows, `open` on macOS, `xdg-open` on Linux): `/seedcracker database` and the links on its settings page open the seed sheet in the browser.
|
||||
- The `.hnmod` is built from the source of the tagged release, `python tools/pack.py`, and is the same file every time (line endings are written as LF). It carries `LICENSE` and `NOTICE.md`.
|
||||
- MIT, like every original it is a port of; `NOTICE.md` lists SeedCrackerX and the SeedFinding libraries it calls with their copyright notices. Tests: `cargo test` (a diff against 7.3k lines produced by the real Java libraries, the cracker, the finders).
|
||||
- Pinned to Nightly 2026-11-04 (6475f62): the launcher builds the game on that commit, and so does not depend on the Nightly the player has."""
|
||||
authors = ["luhnox (this port); SeedCrackerX by 19MisterX98 and the SeedCrackerX contributors; the SeedFinding libraries by KaptainWutax and Neil and Matthew Bolan"]
|
||||
owners = ["luhnox"]
|
||||
owner_ids = [85970136]
|
||||
license = "MIT"
|
||||
source = "https://github.com/luhnox/horizon-seedcrackerx"
|
||||
icon = "icons/seedcrackerx.png"
|
||||
categories = ["utility"]
|
||||
|
||||
[[versions]]
|
||||
version = "0.2.3"
|
||||
published = "2026-11-05"
|
||||
game = "26.3"
|
||||
file = "seedcrackerx-0.2.3.hnmod"
|
||||
sha256 = "6646fd05f28251ca6ccd935027376fbb27a79ff92ac9980f20b3689964a0be9a"
|
||||
changelog = "First listing. A Rust port of SeedCrackerX 2.16.2 for Horizon 26.3: structures are outlined through walls and the world seed is cracked from them and from the hashed seed the server sends; /seedcracker commands, a settings page in Options > Mods, saved structures, and the shared seed database (reading always, sending only if switched on). Pinned to the newest Nightly, 2026-11-04 (6475f62)."
|
||||
@@ -0,0 +1,42 @@
|
||||
id = "spotify_hud"
|
||||
kind = "native-mod"
|
||||
name = "Spotify HUD"
|
||||
summary = "What Spotify is playing on your HUD, with play, pause, skip, shuffle, repeat and volume."
|
||||
description = """
|
||||
Shows the song Spotify is playing in a box on the HUD: cover, title, artists and progress. Open chat and point at the box for buttons: play/pause, next, previous, shuffle, repeat, volume, the song's link, settings and moving the box.
|
||||
|
||||
## Connect Spotify (one time)
|
||||
|
||||
1. Go to https://developer.spotify.com/dashboard and press **Create app**.
|
||||
2. Add the redirect URI `http://127.0.0.1:21851/spotify/callback`, tick **Web API**, save.
|
||||
3. In a world: `/music clientid <Client ID>`.
|
||||
4. Then `/music login` and allow it in the browser (within two minutes).
|
||||
|
||||
The buttons need **Spotify Premium** (Spotify refuses them from free accounts) and a song playing on some device.
|
||||
|
||||
## Using it
|
||||
|
||||
- `/music` opens the settings: corner, which screens, colours, which buttons, chat line for each new song, and more.
|
||||
- `/music volume [0-100] | play | pause | next | previous | shuffle | repeat | hide | position | restart | logout`
|
||||
- Keys for next, previous, play/pause and hiding the box in Options → Mods → Spotify HUD (unbound by default).
|
||||
|
||||
Settings, the login and `theme.json` (colours you can edit) are in `horizon-mods/.horizon-mod-data/spotify_hud/`.
|
||||
|
||||
By tomasmendes01 (in-game: iLoong). Inspired by ThatGravyBoat's Craftify, written from scratch for Horizon. Not affiliated with Spotify."""
|
||||
authors = ["tomasmendes01"]
|
||||
owners = ["tomasmendes01"]
|
||||
owner_ids = [68385376]
|
||||
license = "MIT"
|
||||
source = "https://github.com/tomasmendes01/spotify-hud-horizon"
|
||||
icon = "icons/spotify_hud.png"
|
||||
categories = ["utility"]
|
||||
tags = ["spotify", "music", "hud", "media-controls"]
|
||||
screenshots = ["screenshots/spotify_hud/1.png", "screenshots/spotify_hud/2.png"]
|
||||
|
||||
[[versions]]
|
||||
version = "1.0.0"
|
||||
published = "2026-11-05"
|
||||
game = "26.3"
|
||||
file = "spotify_hud-1.0.0.hnmod"
|
||||
sha256 = "db7e370554c60fb26fea5048d31bc4b633a1c37d70174789117aa3144e5a3cf3"
|
||||
changelog = "First release."
|
||||
@@ -0,0 +1,26 @@
|
||||
id = "voltz"
|
||||
kind = "mod"
|
||||
name = "Voltz (assets)"
|
||||
summary = "The blocks, items, textures, text and recipes of Voltz. Needs the Voltz native mod."
|
||||
description = """
|
||||
**This is one of the two parts of [Voltz](https://playhorizon.dev/mods/voltz_core), and does little alone.** Install both: this one, the assets, and the native part.
|
||||
|
||||
It holds the blocks, items, creative tabs, textures, text and recipes of Voltz. It has no code. The code, and the description of what the mod does, are in Voltz.
|
||||
|
||||
All the art is original and drawn for this project. No Minecraft assets and no art from other mods are included. MIT licensed."""
|
||||
authors = ["Arthur Black"]
|
||||
owners = ["d3xc0"]
|
||||
owner_ids = [136307382]
|
||||
license = "MIT"
|
||||
source = "https://github.com/d3xc0/voltz-horizon"
|
||||
icon = "icons/voltz.png"
|
||||
categories = ["technology", "library"]
|
||||
tags = ["machines", "energy", "assets"]
|
||||
|
||||
[[versions]]
|
||||
version = "0.3.0"
|
||||
published = "2026-11-06"
|
||||
game = "26.3"
|
||||
file = "voltz-0.3.0.hmod"
|
||||
sha256 = "241548ff66203b4587bdbe5f48d04e8ac24b61ffc8773ea6714b1bd494f96c0a"
|
||||
changelog = "First release in the registry. Pinned to Horizon Nightly 66f3981 and Horizon Mixins e8cd0aa."
|
||||
@@ -0,0 +1,38 @@
|
||||
id = "voltz_core"
|
||||
kind = "native-mod"
|
||||
name = "Voltz"
|
||||
summary = "Machines, power, pipes, a nuclear reactor, missiles, turrets and force fields: the classic Voltz tech pack remade for Horizon."
|
||||
description = """
|
||||
**This mod has two parts, and you need both.** Install this one, the native part, and [Voltz (assets)](https://playhorizon.dev/mods/voltz), then press Build.
|
||||
|
||||
Voltz is a big tech and explosives pack for Horizon, remade from the spirit of the classic Voltz modpack. It adds working machines, power, automation and weapons, each set in its own creative tab:
|
||||
|
||||
- **Power**: wire, coal, heat, wind, solar and geothermal generators, batteries and energy storage.
|
||||
- **Processing**: electric furnace, crusher, compressor, extractor, enrichment chamber, infuser, alloy smelter, SAG mill, smeltery, coke oven, blast furnace, centrifuge and more, with survival recipes.
|
||||
- **Automation**: item pipes, quarry, mining well, and an ME-style storage network with drives, a terminal and an import bus.
|
||||
- **Nuclear**: a 9x6 grid reactor with fuel rods, vents, heat exchangers and coolant cells. Let it overheat and it melts down.
|
||||
- **Explosives and missiles**: 16 explosive blocks, 12 missiles, a launcher and a target designator.
|
||||
- **Defence**: force field projector, four turrets, guns and ammo.
|
||||
- **Worldgen**: new ores, plus tools, armor and six chest tiers.
|
||||
|
||||
Native source mod: install it on the launcher's Mods page, press Build there, and confirm the native-code warning. It runs with your account's permissions. It is pinned to one Horizon Nightly and Horizon Mixins revision.
|
||||
|
||||
**Credits.** All code and art here is new, written for Horizon. Nothing was copied or decompiled from another mod. It follows the gameplay of mods from the Voltz pack, and the full list with authors, licences and links is in [CREDITS.md](https://github.com/d3xc0/voltz-horizon/blob/main/CREDITS.md): Mekanism, ICBM Classic, Ender IO, Tinkers' Construct, BuildCraft, Applied Energistics 2, Iron Chests, IndustrialCraft 2, Railcraft, Atomic Science, Modular Force Field System, Open Modular Turrets and Techguns. Not affiliated with any of them.
|
||||
|
||||
No Minecraft code or assets are included. MIT licensed."""
|
||||
authors = ["Arthur Black"]
|
||||
owners = ["d3xc0"]
|
||||
owner_ids = [136307382]
|
||||
license = "MIT"
|
||||
source = "https://github.com/d3xc0/voltz-horizon"
|
||||
icon = "icons/voltz_core.png"
|
||||
categories = ["technology", "game-mechanics", "storage"]
|
||||
tags = ["machines", "energy", "explosives", "automation", "reactor"]
|
||||
|
||||
[[versions]]
|
||||
version = "0.3.0"
|
||||
published = "2026-11-06"
|
||||
game = "26.3"
|
||||
file = "voltz_core-0.3.0.hnmod"
|
||||
sha256 = "07671d2d8267871a88c4a78ebe890b7b3f63210345f1d889c7f348d317e8d5cf"
|
||||
changelog = "First release in the registry. Pinned to Horizon Nightly 66f3981 and Horizon Mixins e8cd0aa."
|
||||
@@ -48,10 +48,22 @@ owner_ids = [339589475]
|
||||
license = "MIT"
|
||||
source = "https://github.com/Lauch2/horizon-waymap-mod"
|
||||
icon = "icons/waymap.png"
|
||||
categories = ["utility", "adventure"]
|
||||
categories = ["utility", "adventure", "management"]
|
||||
tags = ["waypoints", "minimap", "navigation", "death-points", "hud"]
|
||||
key = "RWS1B1QZPeYaSNKJr9rffnfHDSvB0AZj/Ul1B2pKrJ2XFBgKXL0FC96u"
|
||||
|
||||
[[versions]]
|
||||
version = "0.2.1"
|
||||
published = "2026-11-05"
|
||||
game = "26.3"
|
||||
file = "waymap-0.2.1.hnmod"
|
||||
sha256 = "702af5081ef69b97e4ab8c43eed98140243cc4dc9d0964df2ef2227f9bc76342"
|
||||
signature = """
|
||||
untrusted comment: signature from minisign secret key
|
||||
RUS1B1QZPeYaSHezDLD6R2pB3yPNb/cRiVDBUdyRz6wMEN89Wteo8J9Fnjf9Smoup4qVFZFd1a/L1YogmobVGGzk4OTrb4mVqAY=
|
||||
trusted comment: timestamp:1793896727\tfile:waymap-0.2.1.hnmod\thashed
|
||||
RvWULAMNk5gh3M7ewdU/sju6cpVHsOscwpw1pqEHb5xU7iqFAXRbcXMA5tTEmUvWjMtRgQZJ11m0Fn+Rjb3hDg=="""
|
||||
|
||||
[[versions]]
|
||||
version = "0.2.0"
|
||||
published = "2026-11-04"
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
id = "worldmap"
|
||||
kind = "native-mod"
|
||||
name = "World Map"
|
||||
summary = "A full screen, self-writing world map with a minimap, waypoints (groups, import and export), day and night, cave layers and teleport."
|
||||
description = """
|
||||
A full screen map that writes itself as you explore, with a minimap in the corner of the game.
|
||||
|
||||
- **Self-writing map.** The terrain you have seen stays on the map after you leave, kept per world, dimension and cave layer, in the vanilla map colours. Dark at night, and lit blocks (torches, lava, lanterns) shine.
|
||||
- **Minimap.** In a corner of the game: the map round you, turning with you with the sides of the world on its edge (or north up), your waypoints, other players as dots, dark at night. Under a roof or in a cave it shows the floor at your height.
|
||||
- **Smooth.** Drag to move (the map glides on when you let go), scroll to zoom towards the pointer; far zoom blurs instead of flickering.
|
||||
- **Cave layers.** Under a roof, in a cave or in the Nether the map shows the floor round you; layered or full, with a Top Y slider from -64 to 319.
|
||||
- **Dimensions.** One button shows the Overworld, the Nether or the End from any of them, with the other world's coordinates of the place under the pointer.
|
||||
- **Waypoints.** Right-click for a menu: add, rename, 16 colours, three shapes, group, teleport (/tp), delete. Waypoints show in the world as a square with a letter, with their name and distance; a waypoint is made where you die; a list with search (L) and groups you can hide; Export and Import of the list (it reads other map mods' waypoints files too).
|
||||
- **Also:** the biome under the pointer, other players on the map, go to coordinates (J), a chunk grid, your trail, and an export of the whole map as a PNG.
|
||||
- **Keys.** A World Map section in Options > Controls > Key Binds (with Reset), twelve keys, all rebindable. Open the map with M.
|
||||
- **Russian** interface when the game is in Russian.
|
||||
|
||||
**What it does and doesn't do:** it reads the chunks the game has loaded around you and the game's own state, draws on its own screen and in the game's HUD, and keeps files in `config/worldmap/` (the explored chunks and a waypoints file for each world). It sends `/tp` in chat when you choose Teleport. It makes no network connection and needs no other mod.
|
||||
|
||||
**Native mod, pinned** to Horizon Nightly `66f3981` (Minecraft 26.3): it adds rows to the game's Key Binds screen and reuses the minimap's colour scan, so it builds on that revision."""
|
||||
authors = ["Px228-Da-Da"]
|
||||
owners = ["Px228-Da-Da"]
|
||||
owner_ids = [160890712]
|
||||
license = "MIT"
|
||||
source = "https://github.com/Px228-Da-Da/horizon-worldmap"
|
||||
icon = "icons/worldmap.png"
|
||||
categories = ["utility", "adventure"]
|
||||
tags = ["map", "worldmap", "waypoints", "navigation", "caves", "minimap"]
|
||||
screenshots = ["screenshots/worldmap/1.jpg", "screenshots/worldmap/2.png", "screenshots/worldmap/3.jpg", "screenshots/worldmap/4.png", "screenshots/worldmap/5.png", "screenshots/worldmap/6.png"]
|
||||
|
||||
[[versions]]
|
||||
version = "0.6.0"
|
||||
published = "2026-11-06"
|
||||
game = "26.3"
|
||||
file = "worldmap-0.6.0.hnmod"
|
||||
sha256 = "460af1e08fd353cc7455fc32c4b4bd543572e68f6791c03910ae356725904a40"
|
||||
changelog = """
|
||||
- **Minimap** in a corner of the game, with your waypoints and the night. It turns with you (the way you face is up) with the sides of the world on its edge, or keeps north up. Under a roof or in a cave it shows the floor at your height, at every block, a jump too. Other players are dots on it. Corner and size are in Options > Mods; keys N (on and off) and Z (scale).
|
||||
- **Day and night on the map:** the surface of the Overworld is dark at night, and lit blocks keep their light.
|
||||
- **Waypoints in the world** are a square of their colour with their first letter, name and distance under it; they follow the view smoothly.
|
||||
- **Waypoint groups:** give a waypoint a group in its menu, click the group's heading in the list to hide or show them all.
|
||||
- **Export and Import** of waypoints (exports/waypoints.txt, exports/import.txt); the import also reads the waypoints file of other map mods.
|
||||
- **Smoother map:** it glides on when you let go of a drag, and reads the world faster while it is open.
|
||||
- **Fixed:** worlds with the same name (New World, New World (1)...) and friends' worlds no longer share one map and one set of waypoints."""
|
||||
|
After Width: | Height: | Size: 681 KiB |
|
After Width: | Height: | Size: 927 KiB |
|
After Width: | Height: | Size: 896 KiB |
|
After Width: | Height: | Size: 832 KiB |
|
After Width: | Height: | Size: 744 KiB |
|
After Width: | Height: | Size: 567 KiB |
|
After Width: | Height: | Size: 556 KiB |
|
After Width: | Height: | Size: 565 KiB |
|
After Width: | Height: | Size: 345 KiB |
|
After Width: | Height: | Size: 360 KiB |
|
After Width: | Height: | Size: 946 KiB |
|
After Width: | Height: | Size: 724 KiB |
|
After Width: | Height: | Size: 309 KiB |
|
After Width: | Height: | Size: 461 KiB |
|
After Width: | Height: | Size: 587 KiB |
|
After Width: | Height: | Size: 441 KiB |
|
After Width: | Height: | Size: 525 KiB |
|
After Width: | Height: | Size: 571 KiB |
@@ -79,7 +79,27 @@ class Bundle:
|
||||
# As the launcher does for a mod built on another Horizon than it pins.
|
||||
toml = out / "horizon-mixin.toml"
|
||||
text = re.sub(r'horizon_revision\s*=\s*"[0-9a-f]{40}"', f'horizon_revision = "{revision}"', toml.read_text())
|
||||
toml.write_text(text)
|
||||
toml.write_text(strip_launcher_tables(text))
|
||||
|
||||
|
||||
# The tables only the launcher reads; it removes them before horizon-mixins sees the manifest (native_mods/api.rs).
|
||||
LAUNCHER_TABLES = ("api", "dependencies")
|
||||
|
||||
|
||||
def strip_launcher_tables(text):
|
||||
"""`text` without its [api] and [dependencies] tables (and their sub-tables), the rest unchanged."""
|
||||
kept, skipping = [], False
|
||||
for line in text.splitlines(keepends=True):
|
||||
header = re.match(r'\s*\[\[?\s*([^\]]+?)\s*\]\]?\s*(#.*)?$', line)
|
||||
if header:
|
||||
skipping = header.group(1).split(".")[0].strip().strip('"\'') in LAUNCHER_TABLES
|
||||
if not skipping:
|
||||
kept.append(line)
|
||||
stripped = "".join(kept)
|
||||
want = {k: v for k, v in tomllib.loads(text).items() if k not in LAUNCHER_TABLES}
|
||||
if tomllib.loads(stripped) != want:
|
||||
sys.exit("horizon-mixin.toml: its [api] or [dependencies] table couldn't be removed line by line")
|
||||
return stripped
|
||||
|
||||
|
||||
def download(url, sha256):
|
||||
@@ -321,6 +341,10 @@ def check(args):
|
||||
failed.append(mod.id)
|
||||
if args.no_compile:
|
||||
continue
|
||||
if mod.api:
|
||||
# Its API package is staged by the launcher only (Bundle.api), as `health` leaves these out too.
|
||||
print("- applies; it has a mod API package, which only the launcher builds, so it isn't compiled here.")
|
||||
continue
|
||||
if compiles(stage):
|
||||
print(f"- applies and compiles with {len(popular) - len(refused)} popular mods.")
|
||||
continue
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
"""python3 -m unittest discover -s scripts -p 'test_*.py'"""
|
||||
import tomllib
|
||||
import unittest
|
||||
|
||||
from native_compat import strip_launcher_tables
|
||||
|
||||
MANIFEST = """[mod]
|
||||
id = "example"
|
||||
version = "1.0.0"
|
||||
|
||||
[compatibility]
|
||||
horizon_revision = "0123456789abcdef0123456789abcdef01234567"
|
||||
|
||||
# A trait-mod package.
|
||||
[api]
|
||||
path = "api"
|
||||
|
||||
[dependencies]
|
||||
jei = { optional = true }
|
||||
|
||||
[dependencies.ae2]
|
||||
optional = false
|
||||
|
||||
[[module]]
|
||||
id = "runtime"
|
||||
file = "crates/horizon-client/src/game.rs"
|
||||
name = "example_mod"
|
||||
source = "runtime.rs"
|
||||
|
||||
[[injection]]
|
||||
id = "frame"
|
||||
target = "horizon_client::game::native_hooks::Game<'_>::native_frame"
|
||||
helper = "frame.rs"
|
||||
"""
|
||||
|
||||
|
||||
class StripLauncherTables(unittest.TestCase):
|
||||
def test_removes_only_the_launcher_tables(self):
|
||||
stripped = tomllib.loads(strip_launcher_tables(MANIFEST))
|
||||
original = tomllib.loads(MANIFEST)
|
||||
self.assertNotIn("api", stripped)
|
||||
self.assertNotIn("dependencies", stripped)
|
||||
for key in ("mod", "compatibility", "module", "injection"):
|
||||
self.assertEqual(stripped[key], original[key])
|
||||
|
||||
def test_a_manifest_without_them_is_unchanged(self):
|
||||
plain = MANIFEST.split("# A trait-mod package.")[0] + MANIFEST.split('optional = false\n')[1]
|
||||
self.assertEqual(strip_launcher_tables(plain), plain)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||