MCPcopy Index your code
hub / github.com/Mapacheee/ExtendedHorizons

github.com/Mapacheee/ExtendedHorizons @V3.1.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release V3.1.4 ↗ · + Follow
524 symbols 1,491 edges 57 files 21 documented · 4% updated 5d agoV3.1.4 · 2026-07-01★ 623 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

eh_main(1)(1)


What is ExtendedHorizons?

ExtendedHorizons is a high-performance view-distance extension plugin for modern Paper/Folia servers.
It renders distant terrain using optimized fake chunks and optional far-player sync, so players can see farther than vanilla without the usual server overhead.


Dependencies


How to build

Build this project with this command:

./gradlew shadowJar

The artifact will be generated in build/libs/ExtendedHorizons-{version}.jar ready to use!


For developers

ExtendedHorizons is built entirely with WinterFramework (Guice), so you can inject its services directly or resolve them statically.

Add this to your plugin.yml or paper-plugin.yml:

depend:
  - ExtendedHorizons

Accessing Services

You can access services natively through the Guice Injector provided by WinterFramework:

import me.mapacheee.extendedhorizons.ExtendedHorizonsPlugin;
import me.mapacheee.extendedhorizons.config.ConfigFacade;
import me.mapacheee.extendedhorizons.fakechunks.session.SessionRegistry;
import org.bukkit.plugin.java.JavaPlugin;

ExtendedHorizonsPlugin eh = JavaPlugin.getPlugin(ExtendedHorizonsPlugin.class);

// Retrieve via standard Guice Injector:
SessionRegistry sessionRegistry = eh.getInjector().getInstance(SessionRegistry.class);

// Or via the static helper:
sessionRegistry = ExtendedHorizonsPlugin.getService(SessionRegistry.class);

What you can do through these services:

  • Override view distance: Set a custom radius for specific players dynamically. java PlayerSession session = sessionRegistry.ensureFor(player, false); session.playerOverrideDistance(64); // See up to 64 fake chunks
  • Reset view distance: Clear the custom override and allow the plugin to fall back to world-settings or permissions. java PlayerSession session = sessionRegistry.get(player.getUniqueId()); if (session != null) { session.resetPlayerOverrideDistance(); }
  • Read configuration: Access world rules, safe factors, and far-player settings dynamically via configFacade.get().
  • Track Far Players: ExtendedHorizons natively syncs far players. You can read the trackedFarPlayers() from a PlayerSession to see exactly which entities are being simulated locally.

Contribute

To contribute to this project, just follow this steps: - Fork repository. - Make ur changes. - Make sure your changes work. - Create a pull request explaining what you've done!

Every contribution is welcome and appreciated!


Support

Extension points exported contracts — how you extend this code

ReplacementStrategy (Interface)
(no doc) [3 implementers]
src/main/java/me/mapacheee/extendedhorizons/fakechunks/antixray/ReplacementStrategy.java
FarPlayerBackend (Interface)
(no doc) [2 implementers]
src/main/java/me/mapacheee/extendedhorizons/fakechunks/farplayers/backend/FarPlayerBackend.java
ChunkBackend (Interface)
(no doc) [2 implementers]
src/main/java/me/mapacheee/extendedhorizons/fakechunks/backend/ChunkBackend.java
ExtendedHorizonsPluginAPI (Interface)
(no doc)
src/main/java/me/mapacheee/extendedhorizons/ExtendedHorizonsPluginAPI.java
ReplacementPresets (Interface)
(no doc)
src/main/java/me/mapacheee/extendedhorizons/fakechunks/antixray/ReplacementPresets.java

Core symbols most depended-on inside this repo

get
called by 114
src/main/java/me/mapacheee/extendedhorizons/fakechunks/antixray/ReplacementStrategy.java
set
called by 34
src/main/java/me/mapacheee/extendedhorizons/fakechunks/session/PlayerSession.java
write
called by 28
src/main/java/me/mapacheee/extendedhorizons/fakechunks/netty/EhPacketHandler.java
pack
called by 25
src/main/java/me/mapacheee/extendedhorizons/fakechunks/util/ChunkKeyCodec.java
x
called by 25
src/main/java/me/mapacheee/extendedhorizons/fakechunks/util/ChunkKeyCodec.java
z
called by 25
src/main/java/me/mapacheee/extendedhorizons/fakechunks/util/ChunkKeyCodec.java
remove
called by 19
src/main/java/me/mapacheee/extendedhorizons/fakechunks/session/SessionRegistry.java
release
called by 18
src/main/java/me/mapacheee/extendedhorizons/fakechunks/dispatch/GlobalGenerationLimiterService.java

Shape

Method 437
Class 79
Interface 6
Enum 2

Languages

Java100%

Modules by API surface

src/main/java/me/mapacheee/extendedhorizons/fakechunks/session/PlayerSession.java66 symbols
src/main/java/me/mapacheee/extendedhorizons/config/EhConfig.java40 symbols
src/main/java/me/mapacheee/extendedhorizons/fakechunks/backend/PaperChunkBackend.java21 symbols
src/main/java/me/mapacheee/extendedhorizons/fakechunks/netty/PacketIdRegistry.java19 symbols
src/main/java/me/mapacheee/extendedhorizons/fakechunks/backend/FastLightDataWriter.java19 symbols
src/main/java/me/mapacheee/extendedhorizons/fakechunks/FakeChunkOrchestratorService.java18 symbols
src/main/java/me/mapacheee/extendedhorizons/fakechunks/cache/ChunkBuildCacheService.java17 symbols
src/main/java/me/mapacheee/extendedhorizons/fakechunks/disk/BlockPaletteResolver.java14 symbols
src/main/java/me/mapacheee/extendedhorizons/fakechunks/antixray/AntiXrayProcessor.java14 symbols
src/main/java/me/mapacheee/extendedhorizons/hooks/worldedit/InternalWorldEditListener.java13 symbols
src/main/java/me/mapacheee/extendedhorizons/runtime/ChunkBuildMetricsService.java12 symbols
src/main/java/me/mapacheee/extendedhorizons/fakechunks/netty/ChannelInjectionService.java12 symbols

For agents

$ claude mcp add ExtendedHorizons \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact