promotional bannermobile promotional banner

i113w's Camera Lib

A Lib that provides the RTS Style Camera System which is used by Better Mine Team.

i113w's Camera Lib

A NeoForge 1.21.1 client-side library that provides a complete RTS-style camera system — including camera movement, entity box-selection, right-click command zones, ray casting, and highlight rendering.

Designed to be consumed by other mods (e.g., Better Mine Team) via a thin API layer.


Requirements

Item Version
Minecraft 1.21.1
NeoForge 21.1.209+
Java 21
Side Client-only

Importing the Library

Local JAR (place the JAR in your mod's libs/ directory):

dependencies {
    implementation files('libs/i113w_camera_lib-0.0.1.jar')
}

Declare the dependency in META-INF/neoforge.mods.toml:

[[dependencies."your_mod_id"]]
    modId = "i113w_camera_lib"
    type = "required"
    versionRange = "[0.0.1,)"
    ordering = "BEFORE"
    side = "CLIENT"

Key Interfaces & Classes

CameraLibAPI — singleton entry point

CameraLibAPI api = CameraLibAPI.get();

// Register your delegate
api.setInteractionDelegate(new MyDelegate());

// Sync selected entity IDs to the library (drives outline rendering)
api.setSelectedEntities(Set<Integer> ids);

// Query hovered entity (-1 if none)
int id = api.getHoveredEntityId();

// Clear selection and hover state
api.clearSelection();

IRTSInteractionDelegate — inject business logic

public interface IRTSInteractionDelegate {
    boolean isSelectable(Entity entity);
    ResourceLocation getCursorIcon(@Nullable Entity hoveredEntity, boolean isAttackDragging);
}

Register via CameraLibAPI.get().setInteractionDelegate(impl).


Events (fired on NeoForge.EVENT_BUS)

RTSBoxSelectEvent — left-click or drag-box completed

@SubscribeEvent
public static void onSelect(RTSBoxSelectEvent event) {
    List<Entity> candidates = event.getCandidates(); // pre-filtered by isSelectable()
}

RTSRightClickEvent — right-click or right-drag completed

@SubscribeEvent
public static void onRightClick(RTSRightClickEvent event) {
    if (event.isDrag()) {
        List<Entity> targets = event.getDragTargets();
    } else {
        HitResult hit = event.getSingleHitResult(); // BlockHitResult or EntityHitResult
    }
}

RTSCameraController — camera state

RTSCameraController cam = RTSCameraController.get();

cam.toggleRTSMode();      // activate / deactivate
cam.toggleCameraStyle();  // switch RTS <-> FREE (while active)
cam.isActive();           // boolean
cam.reset();              // force-exit, use on logout / level unload

Camera Modes

Mode FOV Zoom Yaw Rotation
RTS 25° (fixed) Scroll wheel Hold Left Ctrl + drag (snaps by rtsSnapAngle)
FREE Standard Scroll wheel (moves forward) Hold Left Ctrl + drag (continuous)

Highlight Rendering

The library automatically draws entity outlines when the camera is active. No rendering code is needed in the consumer mod — just keep CameraLibAPI.setSelectedEntities(...) in sync.

Color Condition
White Entity ID is in the selected set
Yellow Hovered entity (not in selected set)

Configuration

Player-adjustable values in .minecraft/config/i113w_camera_lib-client.toml:

Key Default Description
rtsPitchMin / Max 35 / 45 Pitch clamp range in RTS mode
freePitchMin / Max 10 / 90 Pitch clamp range in FREE mode
rtsZoomMin / Max 10 / 80 Zoom distance clamp in RTS mode
rtsZoomSpeedMultiplier 3.5 Scroll wheel zoom sensitivity
rtsSnapAngle 90 Degrees per yaw snap step
freeRotationSpeed 5.0 Mouse yaw sensitivity in FREE mode
thresholdPx 20 Edge-pan trigger distance (pixels from screen edge)
baseSpeed 1.0 WASD movement speed
sprintMultiplier 2.0 Speed multiplier when sprint key is held

License

MIT — see LICENSE

Author: i113w

The i113w's Camera Lib Team

profile avatar
Owner
  • 3
    Projects
  • 3.6K
    Downloads

More from i113w

  • BetterMineTeam project image

    BetterMineTeam

    • 1.1K
    • Mods

    a Reforged version of Mine Team mod which allows players to convert mobs to teammates and fight together in the battle.

    • 1.1K
    • March 14, 2026
    • Mods
    • +1
  • AttributeFix-Sync project image

    AttributeFix-Sync

    • 2.4K
    • Mods

    Syncs AttributeFix limits from server to client.

    • 2.4K
    • February 2, 2026
    • Mods
  • BetterMineTeam project image

    BetterMineTeam

    • 1.1K
    • Mods

    a Reforged version of Mine Team mod which allows players to convert mobs to teammates and fight together in the battle.

    • 1.1K
    • March 14, 2026
    • Mods
    • +1
  • AttributeFix-Sync project image

    AttributeFix-Sync

    • 2.4K
    • Mods

    Syncs AttributeFix limits from server to client.

    • 2.4K
    • February 2, 2026
    • Mods