diff --git a/api/src/main/java/com/lunarclient/apollo/event/modsetting/ApolloUpdateModOptionEvent.java b/api/src/main/java/com/lunarclient/apollo/event/modsetting/ApolloUpdateModOptionEvent.java
index d8724a6d..0199fabb 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/modsetting/ApolloUpdateModOptionEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/modsetting/ApolloUpdateModOptionEvent.java
@@ -24,17 +24,27 @@
package com.lunarclient.apollo.event.modsetting;
import com.lunarclient.apollo.event.Event;
+import com.lunarclient.apollo.module.RestrictedAccess;
+import com.lunarclient.apollo.module.modsetting.ModSettingModule;
import com.lunarclient.apollo.option.Option;
import com.lunarclient.apollo.player.ApolloPlayer;
import lombok.Value;
import org.jetbrains.annotations.Nullable;
/**
- * Represents an event that is fired when an option is updated.
+ * Represents an event that is fired when a player's Lunar Client mod option is updated.
+ *
+ *
This event is fired for live updates only, not for the options listed in a
+ * {@link ModSettingModule#requestModStatus(ApolloPlayer)} response.
+ *
+ * This event is part of the private Mod Status API of {@link ModSettingModule}. Lunar Client
+ * only reports mod status to servers that have been granted access, so this event is never
+ * fired on other servers.
*
* @since 1.2.1
*/
@Value
+@RestrictedAccess
public class ApolloUpdateModOptionEvent implements Event {
/**
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/Mods.java b/api/src/main/java/com/lunarclient/apollo/mods/Mods.java
index 98e66355..808a4a4a 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/Mods.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/Mods.java
@@ -52,12 +52,14 @@
import com.lunarclient.apollo.mods.impl.ModFreelook;
import com.lunarclient.apollo.mods.impl.ModGlintColorizer;
import com.lunarclient.apollo.mods.impl.ModGuiScale;
+import com.lunarclient.apollo.mods.impl.ModHeightLimit;
import com.lunarclient.apollo.mods.impl.ModHitColor;
import com.lunarclient.apollo.mods.impl.ModHitbox;
import com.lunarclient.apollo.mods.impl.ModHorseStats;
import com.lunarclient.apollo.mods.impl.ModHurtCam;
import com.lunarclient.apollo.mods.impl.ModHypixelBedwars;
import com.lunarclient.apollo.mods.impl.ModHypixelMod;
+import com.lunarclient.apollo.mods.impl.ModHypixelStats;
import com.lunarclient.apollo.mods.impl.ModInventoryMod;
import com.lunarclient.apollo.mods.impl.ModItemCounter;
import com.lunarclient.apollo.mods.impl.ModItemCustomizer;
@@ -68,6 +70,7 @@
import com.lunarclient.apollo.mods.impl.ModKnockbackTrainer;
import com.lunarclient.apollo.mods.impl.ModLightOverlay;
import com.lunarclient.apollo.mods.impl.ModLighting;
+import com.lunarclient.apollo.mods.impl.ModLocatorBar;
import com.lunarclient.apollo.mods.impl.ModMarkers;
import com.lunarclient.apollo.mods.impl.ModMemory;
import com.lunarclient.apollo.mods.impl.ModMenuBlur;
@@ -116,6 +119,7 @@
import com.lunarclient.apollo.mods.impl.ModToggleSneak;
import com.lunarclient.apollo.mods.impl.ModTotemCounter;
import com.lunarclient.apollo.mods.impl.ModUhcOverlay;
+import com.lunarclient.apollo.mods.impl.ModViewAngles;
import com.lunarclient.apollo.mods.impl.ModWaila;
import com.lunarclient.apollo.mods.impl.ModWaypoints;
import com.lunarclient.apollo.mods.impl.ModWeatherChanger;
@@ -141,10 +145,12 @@ public final class Mods {
ModOneSevenVisuals.class,
ModFps.class,
ModCps.class,
+ ModViewAngles.class,
ModToggleSneak.class,
ModZoom.class,
ModHypixelMod.class,
ModHypixelBedwars.class,
+ ModHeightLimit.class,
ModQuickplay.class,
ModArmorstatus.class,
ModKeystrokes.class,
@@ -229,12 +235,14 @@ public final class Mods {
ModKillSounds.class,
ModInventoryMod.class,
ModF3Display.class,
+ ModLocatorBar.class,
ModGuiScale.class,
ModKnockbackTrainer.class,
+ ModHypixelStats.class,
ModRadio.class,
ModUhcOverlay.class,
- ModNeu.class,
- ModSba.class
+ ModSba.class,
+ ModNeu.class
);
private Mods() {
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModActionBar.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModActionBar.java
index d416060f..866e3919 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModActionBar.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModActionBar.java
@@ -57,6 +57,18 @@ public final class ModActionBar {
.notifyClient()
.build();
+ /**
+ * Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption LOCK_TO_VANILLA_POSITION = SimpleOption.builder()
+ .comment("Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.")
+ .node("action-bar", "lock-to-vanilla-position").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
private ModActionBar() {
}
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModArmorstatus.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModArmorstatus.java
index 795eb6b9..ee93fb08 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModArmorstatus.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModArmorstatus.java
@@ -51,20 +51,19 @@ public final class ModArmorstatus {
*
* @since 1.0.0
*/
- public static final NumberOption SCALE = NumberOption.number()
- .node("armorstatus", "scale").type(TypeToken.get(Float.class))
- .min(0.25F).max(5.0F)
- .defaultValue(1.0F)
+ public static final SimpleOption MOVE_ARMOR_INDIVIDUALLY = SimpleOption.builder()
+ .node("armorstatus", "move-armor-individually").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
.notifyClient()
.build();
/**
* No documentation available.
*
- * @since 1.0.0
+ * @since 1.3.0
*/
- public static final SimpleOption MOVE_ARMOR_INDIVIDUALLY = SimpleOption.builder()
- .node("armorstatus", "move-armor-individually").type(TypeToken.get(Boolean.class))
+ public static final SimpleOption VANILLA_MODE = SimpleOption.builder()
+ .node("armorstatus", "vanilla-mode").type(TypeToken.get(Boolean.class))
.defaultValue(false)
.notifyClient()
.build();
@@ -72,14 +71,36 @@ public final class ModArmorstatus {
/**
* No documentation available.
*
- * @since 1.1.9
+ * @since 1.3.0
*/
- public static final SimpleOption HIDE_UNBREAKABLE_DURABILITY = SimpleOption.builder()
- .node("armorstatus", "hide-unbreakable-durability").type(TypeToken.get(Boolean.class))
+ public static final SimpleOption HOTBAR_ANCHOR = SimpleOption.builder()
+ .node("armorstatus", "hotbar-anchor").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption ROUNDED_CORNERS = SimpleOption.builder()
+ .node("armorstatus", "rounded-corners").type(TypeToken.get(Boolean.class))
.defaultValue(true)
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption HIDE_EMPTY_SLOTS = SimpleOption.builder()
+ .node("armorstatus", "hide-empty-slots").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
@@ -136,6 +157,17 @@ public final class ModArmorstatus {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.2.8
+ */
+ public static final SimpleOption BACKGROUND_COLOR = SimpleOption.builder()
+ .node("armorstatus", "background-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(0, 0, 0, 111))
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
@@ -159,14 +191,26 @@ public final class ModArmorstatus {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.2.8
+ */
+ public static final SimpleOption BORDER_COLOR = SimpleOption.builder()
+ .node("armorstatus", "border-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(0, 0, 0, 159))
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
* @since 1.0.0
*/
- public static final SimpleOption DAMAGE_OVERLAY = SimpleOption.builder()
- .node("armorstatus", "damage-overlay").type(TypeToken.get(Boolean.class))
- .defaultValue(true)
+ public static final NumberOption SCALE = NumberOption.number()
+ .node("armorstatus", "scale").type(TypeToken.get(Float.class))
+ .min(0.25F).max(5.0F)
+ .defaultValue(1.0F)
.notifyClient()
.build();
@@ -175,8 +219,8 @@ public final class ModArmorstatus {
*
* @since 1.0.0
*/
- public static final SimpleOption ITEM_DAMAGE = SimpleOption.builder()
- .node("armorstatus", "item-damage").type(TypeToken.get(Boolean.class))
+ public static final SimpleOption DAMAGE_OVERLAY = SimpleOption.builder()
+ .node("armorstatus", "damage-overlay").type(TypeToken.get(Boolean.class))
.defaultValue(true)
.notifyClient()
.build();
@@ -184,10 +228,10 @@ public final class ModArmorstatus {
/**
* No documentation available.
*
- * @since 1.0.0
+ * @since 1.3.0
*/
- public static final SimpleOption ARMOR_DAMAGE = SimpleOption.builder()
- .node("armorstatus", "armor-damage").type(TypeToken.get(Boolean.class))
+ public static final SimpleOption LOW_DURABILITY_INDICATOR = SimpleOption.builder()
+ .node("armorstatus", "low-durability-indicator").type(TypeToken.get(Boolean.class))
.defaultValue(true)
.notifyClient()
.build();
@@ -195,33 +239,34 @@ public final class ModArmorstatus {
/**
* No documentation available.
*
- * @since 1.0.0
+ * @since 1.3.0
*/
- public static final SimpleOption MAX_DAMAGE = SimpleOption.builder()
- .node("armorstatus", "max-damage").type(TypeToken.get(Boolean.class))
- .defaultValue(false)
+ public static final NumberOption LOW_DURABILITY_THRESHOLD = NumberOption.number()
+ .node("armorstatus", "low-durability-threshold").type(TypeToken.get(Integer.class))
+ .min(1).max(100)
+ .defaultValue(10)
.notifyClient()
.build();
/**
* No documentation available.
*
- * @since 1.2.8
+ * @since 1.0.0
*/
- public static final SimpleOption BACKGROUND_COLOR = SimpleOption.builder()
- .node("armorstatus", "background-color").type(TypeToken.get(Color.class))
- .defaultValue(new Color(0, 0, 0, 111))
+ public static final SimpleOption ITEM_DAMAGE = SimpleOption.builder()
+ .node("armorstatus", "item-damage").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
.notifyClient()
.build();
/**
* No documentation available.
*
- * @since 1.2.8
+ * @since 1.0.0
*/
- public static final SimpleOption BORDER_COLOR = SimpleOption.builder()
- .node("armorstatus", "border-color").type(TypeToken.get(Color.class))
- .defaultValue(new Color(0, 0, 0, 159))
+ public static final SimpleOption ARMOR_DAMAGE = SimpleOption.builder()
+ .node("armorstatus", "armor-damage").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
.notifyClient()
.build();
@@ -230,12 +275,24 @@ public final class ModArmorstatus {
*
* @since 1.0.0
*/
- public static final SimpleOption STATIC_DAMAGE_COLORS = SimpleOption.builder()
- .node("armorstatus", "static-damage-colors").type(TypeToken.get(Boolean.class))
+ public static final SimpleOption MAX_DAMAGE = SimpleOption.builder()
+ .node("armorstatus", "max-damage").type(TypeToken.get(Boolean.class))
.defaultValue(false)
.notifyClient()
.build();
+ /**
+ * Don't show damage value on items that are unbreakable.
+ *
+ * @since 1.1.9
+ */
+ public static final SimpleOption HIDE_UNBREAKABLE_DURABILITY = SimpleOption.builder()
+ .comment("Don't show damage value on items that are unbreakable")
+ .node("armorstatus", "hide-unbreakable-durability").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
@@ -313,6 +370,17 @@ public final class ModArmorstatus {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.0.0
+ */
+ public static final SimpleOption STATIC_DAMAGE_COLORS = SimpleOption.builder()
+ .node("armorstatus", "static-damage-colors").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
private ModArmorstatus() {
}
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAttackIndicator.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAttackIndicator.java
index 876e47f1..cae8fa07 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAttackIndicator.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAttackIndicator.java
@@ -69,6 +69,18 @@ public final class ModAttackIndicator {
.notifyClient()
.build();
+ /**
+ * Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption LOCK_TO_VANILLA_POSITION = SimpleOption.builder()
+ .comment("Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.")
+ .node("attack-indicator", "lock-to-vanilla-position").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
@@ -269,18 +281,6 @@ public final class ModAttackIndicator {
.notifyClient()
.build();
- /**
- * Play a ding when the weapon cooldowns are done.
- *
- * @since 1.2.8
- */
- public static final SimpleOption ATTACK_INDICATOR_PLAY_SOUND_VANILLA = SimpleOption.builder()
- .comment("Play a ding when the weapon cooldowns are done")
- .node("attack-indicator", "attack-indicator-play-sound-vanilla").type(TypeToken.get(Boolean.class))
- .defaultValue(false)
- .notifyClient()
- .build();
-
/**
* No documentation available.
*
@@ -371,11 +371,25 @@ public final class ModAttackIndicator {
.notifyClient()
.build();
+ /**
+ * Play a ding when the weapon cooldowns are done.
+ *
+ * @since 1.2.8
+ */
+ @Deprecated
+ public static final SimpleOption ATTACK_INDICATOR_PLAY_SOUND_VANILLA = SimpleOption.builder()
+ .comment("Play a ding when the weapon cooldowns are done")
+ .node("attack-indicator", "attack-indicator-play-sound-vanilla").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
/**
* Play a ding when the cooldowns/indicators are done (excluding Sleep Progress, Block Breaking, Consumables and Storage Items).
*
* @since 1.2.8
*/
+ @Deprecated
public static final SimpleOption ATTACK_INDICATOR_PLAY_SOUND_CUSTOM = SimpleOption.builder()
.comment("Play a ding when the cooldowns/indicators are done (excluding Sleep Progress, Block Breaking, Consumables and Storage Items)")
.node("attack-indicator", "attack-indicator-play-sound-custom").type(TypeToken.get(Boolean.class))
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAudioSubtitles.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAudioSubtitles.java
index 1ab6249b..f51bd5a1 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAudioSubtitles.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAudioSubtitles.java
@@ -126,6 +126,18 @@ public final class ModAudioSubtitles {
.notifyClient()
.build();
+ /**
+ * Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption LOCK_TO_VANILLA_POSITION = SimpleOption.builder()
+ .comment("Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.")
+ .node("audio-subtitles", "lock-to-vanilla-position").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModBossbar.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModBossbar.java
index 21d2461d..6a7f03b2 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModBossbar.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModBossbar.java
@@ -103,11 +103,24 @@ public final class ModBossbar {
.build();
/**
- * No documentation available.
+ * Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption LOCK_TO_VANILLA_POSITION = SimpleOption.builder()
+ .comment("Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.")
+ .node("bossbar", "lock-to-vanilla-position").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * On always uses the Minecraft GUI scale for this mod, and Off always uses the Lunar UI scale.
*
* @since 1.1.2
*/
public static final SimpleOption USE_MINECRAFT_GUISCALE = SimpleOption.builder()
+ .comment("On always uses the Minecraft GUI scale for this mod, and Off always uses the Lunar UI scale.")
.node("bossbar", "use-minecraft-g-u-i-scale").type(TypeToken.get(Boolean.class))
.defaultValue(true)
.notifyClient()
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModChat.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModChat.java
index b428e8c2..42e08741 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModChat.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModChat.java
@@ -184,17 +184,6 @@ public final class ModChat {
.notifyClient()
.build();
- /**
- * No documentation available.
- *
- * @since 1.0.0
- */
- public static final SimpleOption CHAT_PING_SOUND = SimpleOption.builder()
- .node("chat", "chat-ping-sound").type(TypeToken.get(Boolean.class))
- .defaultValue(true)
- .notifyClient()
- .build();
-
/**
* Requires the ping message to exactly contain your name.For example, if your name is Notch, this will ping on Notch but not Notch123.
*
@@ -536,6 +525,18 @@ public final class ModChat {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.0.0
+ */
+ @Deprecated
+ public static final SimpleOption CHAT_PING_SOUND = SimpleOption.builder()
+ .node("chat", "chat-ping-sound").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
private ModChat() {
}
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCoordinates.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCoordinates.java
index 66e1d91a..193996f9 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCoordinates.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCoordinates.java
@@ -126,6 +126,18 @@ public final class ModCoordinates {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption DECIMAL_PLACES = NumberOption.number()
+ .node("coordinates", "decimal-places").type(TypeToken.get(Integer.class))
+ .min(0).max(10)
+ .defaultValue(2)
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDamageTint.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDamageTint.java
index 86d04e89..f1a64204 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDamageTint.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDamageTint.java
@@ -88,6 +88,7 @@ public final class ModDamageTint {
*
* @since 1.0.0
*/
+ @Deprecated
public static final SimpleOption HEARTBEAT_AUDIO = SimpleOption.builder()
.comment("Plays a heartbeat, becoming faster the lower your health.")
.node("damage-tint", "heartbeat-audio").type(TypeToken.get(Boolean.class))
@@ -100,6 +101,7 @@ public final class ModDamageTint {
*
* @since 1.2.2
*/
+ @Deprecated
public static final NumberOption HEARTBEAT_AUDIO_VOLUME = NumberOption.number()
.node("damage-tint", "heartbeat-audio-volume").type(TypeToken.get(Float.class))
.min(0.0F).max(1.0F)
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModGuiScale.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModGuiScale.java
index e1974321..9ab6d649 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModGuiScale.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModGuiScale.java
@@ -58,14 +58,15 @@ public final class ModGuiScale {
.build();
/**
- * No documentation available.
+ * 0 = Auto/Vanilla Handling.
*
* @since 1.2.8
*/
public static final NumberOption INVENTORY_SCALE = NumberOption.number()
+ .comment("0 = Auto/Vanilla Handling")
.node("gui-scale", "inventory-scale").type(TypeToken.get(Integer.class))
- .min(1).max(5)
- .defaultValue(2)
+ .min(0).max(5)
+ .defaultValue(0)
.notifyClient()
.build();
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHeightLimit.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHeightLimit.java
new file mode 100644
index 00000000..ea1512b7
--- /dev/null
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHeightLimit.java
@@ -0,0 +1,214 @@
+/*
+ * This file is part of Apollo, licensed under the MIT License.
+ *
+ * Copyright (c) 2026 Moonsworth
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package com.lunarclient.apollo.mods.impl;
+
+import com.lunarclient.apollo.option.NumberOption;
+import com.lunarclient.apollo.option.SimpleOption;
+import io.leangen.geantyref.TypeToken;
+import java.awt.Color;
+
+/**
+ * Block overlay and HUD display to help you build up to map height limits.
+ *
+ * @since 1.3.0
+ */
+public final class ModHeightLimit {
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption ENABLED = SimpleOption.builder()
+ .node("height-limit", "enabled").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption SCALE = NumberOption.number()
+ .node("height-limit", "scale").type(TypeToken.get(Float.class))
+ .min(0.25F).max(5.0F)
+ .defaultValue(1.0F)
+ .notifyClient()
+ .build();
+
+ /**
+ * How far around you the block overlay is drawn.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption RENDER_RANGE = NumberOption.number()
+ .comment("How far around you the block overlay is drawn")
+ .node("height-limit", "render-range").type(TypeToken.get(Integer.class))
+ .min(1).max(8)
+ .defaultValue(4)
+ .notifyClient()
+ .build();
+
+ /**
+ * Display height limit information on the HUD.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption HEIGHT_LIMIT_OVERLAY = SimpleOption.builder()
+ .comment("Display height limit information on the HUD")
+ .node("height-limit", "height-limit-overlay").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * Adds a shadow to text.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption TEXT_SHADOW = SimpleOption.builder()
+ .comment("Adds a shadow to text")
+ .node("height-limit", "text-shadow").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption BACKGROUND = SimpleOption.builder()
+ .node("height-limit", "background").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption BORDER = SimpleOption.builder()
+ .node("height-limit", "border").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption BORDER_THICKNESS = NumberOption.number()
+ .node("height-limit", "border-thickness").type(TypeToken.get(Float.class))
+ .min(0.5F).max(3.0F)
+ .defaultValue(0.5F)
+ .notifyClient()
+ .build();
+
+ /**
+ * Automatically determine text alignment from position. Disable to manually set alignment.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption AUTO_ALIGN = SimpleOption.builder()
+ .comment("Automatically determine text alignment from position. Disable to manually set alignment")
+ .node("height-limit", "auto-align").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * Distance changes color depending on how close you are to the height limit.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption AUTO_COLOR_DISTANCE = SimpleOption.builder()
+ .comment("Distance changes color depending on how close you are to the height limit")
+ .node("height-limit", "auto-color-distance").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption TITLE_COLOR = SimpleOption.builder()
+ .node("height-limit", "title-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(255, 255, 85))
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption TEXT_COLOR = SimpleOption.builder()
+ .node("height-limit", "text-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(255, 255, 255))
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption NUMBER_COLOR = SimpleOption.builder()
+ .node("height-limit", "number-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(85, 255, 85))
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption BACKGROUND_COLOR = SimpleOption.builder()
+ .node("height-limit", "background-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(0, 0, 0, 111))
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption BORDER_COLOR = SimpleOption.builder()
+ .node("height-limit", "border-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(0, 0, 0, 159))
+ .notifyClient()
+ .build();
+
+ private ModHeightLimit() {
+ }
+
+}
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelStats.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelStats.java
new file mode 100644
index 00000000..b708187b
--- /dev/null
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelStats.java
@@ -0,0 +1,50 @@
+/*
+ * This file is part of Apollo, licensed under the MIT License.
+ *
+ * Copyright (c) 2026 Moonsworth
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package com.lunarclient.apollo.mods.impl;
+
+import com.lunarclient.apollo.option.SimpleOption;
+import io.leangen.geantyref.TypeToken;
+
+/**
+ * Tracks stats across different Hypixel games.
+ *
+ * @since 1.3.0
+ */
+public final class ModHypixelStats {
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption ENABLED = SimpleOption.builder()
+ .node("hypixel-stats", "enabled").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ private ModHypixelStats() {
+ }
+
+}
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModInventoryMod.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModInventoryMod.java
index b224de2e..4f38a74a 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModInventoryMod.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModInventoryMod.java
@@ -69,6 +69,17 @@ public final class ModInventoryMod {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption CURSOR_RESET_CHEST_SCREENS_ONLY = SimpleOption.builder()
+ .node("inventory-mod", "cursor-reset-chest-screens-only").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
private ModInventoryMod() {
}
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKnockbackTrainer.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKnockbackTrainer.java
index 1a82c014..e88406dc 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKnockbackTrainer.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKnockbackTrainer.java
@@ -74,6 +74,7 @@ public final class ModKnockbackTrainer {
*
* @since 1.2.9
*/
+ @Deprecated
public static final SimpleOption FALLING_HIT_SOUND = SimpleOption.builder()
.node("knockback-trainer", "falling-hit-sound").type(TypeToken.get(Boolean.class))
.defaultValue(true)
@@ -85,6 +86,7 @@ public final class ModKnockbackTrainer {
*
* @since 1.2.9
*/
+ @Deprecated
public static final NumberOption FALLING_HIT_SOUND_VOLUME = NumberOption.number()
.node("knockback-trainer", "falling-hit-sound-volume").type(TypeToken.get(Float.class))
.min(0.0F).max(1.0F)
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModLocatorBar.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModLocatorBar.java
new file mode 100644
index 00000000..e63357d5
--- /dev/null
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModLocatorBar.java
@@ -0,0 +1,326 @@
+/*
+ * This file is part of Apollo, licensed under the MIT License.
+ *
+ * Copyright (c) 2026 Moonsworth
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package com.lunarclient.apollo.mods.impl;
+
+import com.lunarclient.apollo.option.NumberOption;
+import com.lunarclient.apollo.option.SimpleOption;
+import io.leangen.geantyref.TypeToken;
+
+/**
+ * Customize the locator bar's position, size, and displayed information.
+ *
+ * @since 1.3.0
+ */
+public final class ModLocatorBar {
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption ENABLED = SimpleOption.builder()
+ .node("locator-bar", "enabled").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption HIDE_LOCATOR_BAR = SimpleOption.builder()
+ .node("locator-bar", "hide-locator-bar").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * Move and scale the locator bar like a HUD mod instead of keeping it in the hotbar.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption DETACHED = SimpleOption.builder()
+ .comment("Move and scale the locator bar like a HUD mod instead of keeping it in the hotbar")
+ .node("locator-bar", "detached").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption SCALE = NumberOption.number()
+ .node("locator-bar", "scale").type(TypeToken.get(Float.class))
+ .min(0.5F).max(1.5F)
+ .defaultValue(1.0F)
+ .notifyClient()
+ .build();
+
+ /**
+ * Draw the head of a player instead of the colored dot.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption USE_PLAYER_HEADS = SimpleOption.builder()
+ .comment("Draw the head of a player instead of the colored dot")
+ .node("locator-bar", "use-player-heads").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption PLAYER_HEAD_SCALE = NumberOption.number()
+ .node("locator-bar", "player-head-scale").type(TypeToken.get(Float.class))
+ .min(0.5F).max(2.0F)
+ .defaultValue(1.0F)
+ .notifyClient()
+ .build();
+
+ /**
+ * Draw an outline around the head with the dot color.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption PLAYER_HEAD_HIGHLIGHT = SimpleOption.builder()
+ .comment("Draw an outline around the head with the dot color")
+ .node("locator-bar", "player-head-highlight").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * Players beyond the range show as the colored dot.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption LIMIT_HEAD_RANGE = SimpleOption.builder()
+ .comment("Players beyond the range show as the colored dot")
+ .node("locator-bar", "limit-head-range").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * The maximum distance in blocks at which player heads show.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption PLAYER_HEAD_DISPLAY_RANGE = NumberOption.number()
+ .comment("The maximum distance in blocks at which player heads show")
+ .node("locator-bar", "player-head-display-range").type(TypeToken.get(Integer.class))
+ .min(16).max(332)
+ .defaultValue(100)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption SHOW_PLAYER_NAME = SimpleOption.builder()
+ .node("locator-bar", "show-player-name").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption PLAYER_NAME_SCALE = NumberOption.number()
+ .node("locator-bar", "player-name-scale").type(TypeToken.get(Float.class))
+ .min(0.5F).max(1.0F)
+ .defaultValue(1.0F)
+ .notifyClient()
+ .build();
+
+ /**
+ * Only draw the name of a player when you look toward them.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption ONLY_SHOW_NAME_WHEN_LOOKING_NEAR = SimpleOption.builder()
+ .comment("Only draw the name of a player when you look toward them")
+ .node("locator-bar", "only-show-name-when-looking-near").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * Only draw the names of players within the range.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption LIMIT_NAME_RANGE = SimpleOption.builder()
+ .comment("Only draw the names of players within the range")
+ .node("locator-bar", "limit-name-range").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * The maximum distance in blocks at which player names show.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption PLAYER_NAME_DISPLAY_RANGE = NumberOption.number()
+ .comment("The maximum distance in blocks at which player names show")
+ .node("locator-bar", "player-name-display-range").type(TypeToken.get(Integer.class))
+ .min(16).max(332)
+ .defaultValue(100)
+ .notifyClient()
+ .build();
+
+ /**
+ * Color the player name with their team color, or with their dot color when they have no team.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption COLORED_PLAYER_NAME = SimpleOption.builder()
+ .comment("Color the player name with their team color, or with their dot color when they have no team")
+ .node("locator-bar", "colored-player-name").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * When names overlap, only draw the name closest to the middle of the bar.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption HIDE_OVERLAPPING_NAMES = SimpleOption.builder()
+ .comment("When names overlap, only draw the name closest to the middle of the bar")
+ .node("locator-bar", "hide-overlapping-names").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * Cut names longer than 8 characters, but keep them different from other players.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption CUT_LONG_NAMES = SimpleOption.builder()
+ .comment("Cut names longer than 8 characters, but keep them different from other players")
+ .node("locator-bar", "cut-long-names").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption SHOW_DIRECTION = SimpleOption.builder()
+ .node("locator-bar", "show-direction").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * Show +Z, -Z, +X and -X instead of the direction letters.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption USE_COORDINATE_DIRECTIONS = SimpleOption.builder()
+ .comment("Show +Z, -Z, +X and -X instead of the direction letters")
+ .node("locator-bar", "use-coordinate-directions").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * Draw the dots or player heads. Turn this off to only show the names.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption SHOW_BAR_ICONS = SimpleOption.builder()
+ .comment("Draw the dots or player heads. Turn this off to only show the names")
+ .node("locator-bar", "show-bar-icons").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * Draw the waypoints on the xp bar instead of the locator bar.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption USE_XP_BAR = SimpleOption.builder()
+ .comment("Draw the waypoints on the xp bar instead of the locator bar")
+ .node("locator-bar", "use-xp-bar").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * Adds a shadow to text.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption TEXT_SHADOW = SimpleOption.builder()
+ .comment("Adds a shadow to text")
+ .node("locator-bar", "text-shadow").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * Only show the extra info while the peek keybind is held down.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption LOCATOR_BAR_PEEK = SimpleOption.builder()
+ .comment("Only show the extra info while the peek keybind is held down")
+ .node("locator-bar", "locator-bar-peek").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * Hide the locator bar until you hold the peek keybind.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption ONLY_SHOW_WHILE_PEEKING = SimpleOption.builder()
+ .comment("Hide the locator bar until you hold the peek keybind")
+ .node("locator-bar", "only-show-while-peeking").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ private ModLocatorBar() {
+ }
+
+}
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMinimap.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMinimap.java
index b4a0429f..cc436b39 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMinimap.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMinimap.java
@@ -58,6 +58,18 @@ public final class ModMinimap {
.notifyClient()
.build();
+ /**
+ * Create a viewable image file on your pc of the discovered map areas.For singleplayer, it's saved in the world folderFor Multiplayer, it's saved in the .minecraft folder.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption MINIMAP_SAVE_AS_PICTURE_FILE = SimpleOption.builder()
+ .comment("Create a viewable image file on your pc of the discovered map areas.For singleplayer, it's saved in the world folderFor Multiplayer, it's saved in the .minecraft folder")
+ .node("minimap", "minimap-save-as-picture-file").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNickHider.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNickHider.java
index bcc3874a..46bc470e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNickHider.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNickHider.java
@@ -45,44 +45,48 @@ public final class ModNickHider {
.build();
/**
- * No documentation available.
+ * Replaces your Hypixel nick with your real name, or with your Nickname when Hide Your Real Name is on.
*
* @since 1.0.0
*/
public static final SimpleOption HIDE_NAME = SimpleOption.builder()
+ .comment("Replaces your Hypixel nick with your real name, or with your Nickname when Hide Your Real Name is on")
.node("nick-hider", "hide-name").type(TypeToken.get(Boolean.class))
.defaultValue(true)
.notifyClient()
.build();
/**
- * No documentation available.
+ * Replaces your real name with your Nickname.
*
* @since 1.0.0
*/
public static final SimpleOption HIDE_REAL_NAME = SimpleOption.builder()
+ .comment("Replaces your real name with your Nickname")
.node("nick-hider", "hide-real-name").type(TypeToken.get(Boolean.class))
.defaultValue(true)
.notifyClient()
.build();
/**
- * No documentation available.
+ * Replaces the names of other players with the Hidden Player Prefix and a number.
*
* @since 1.0.0
*/
public static final SimpleOption HIDE_OTHERS_NAMES = SimpleOption.builder()
+ .comment("Replaces the names of other players with the Hidden Player Prefix and a number")
.node("nick-hider", "hide-others-names").type(TypeToken.get(Boolean.class))
.defaultValue(false)
.notifyClient()
.build();
/**
- * No documentation available.
+ * Shows every hidden player as the prefix followed by the Hidden Player Suffix, instead of numbering them.
*
* @since 1.2.2
*/
public static final SimpleOption CUSTOM_SUFFIX = SimpleOption.builder()
+ .comment("Shows every hidden player as the prefix followed by the Hidden Player Suffix, instead of numbering them")
.node("nick-hider", "custom-suffix").type(TypeToken.get(Boolean.class))
.defaultValue(false)
.notifyClient()
@@ -100,33 +104,36 @@ public final class ModNickHider {
.build();
/**
- * No documentation available.
+ * Shows you as Steve or Alex, or with a set skin from another player.
*
* @since 1.0.0
*/
public static final SimpleOption HIDE_OWN_SKIN = SimpleOption.builder()
+ .comment("Shows you as Steve or Alex, or with a set skin from another player")
.node("nick-hider", "hide-own-skin").type(TypeToken.get(Boolean.class))
- .defaultValue(true)
+ .defaultValue(false)
.notifyClient()
.build();
/**
- * No documentation available.
+ * Shows your own skin even when a server changes it, for example with a Hypixel nick.
*
* @since 1.0.0
*/
public static final SimpleOption USE_REAL_SKIN = SimpleOption.builder()
+ .comment("Shows your own skin even when a server changes it, for example with a Hypixel nick")
.node("nick-hider", "use-real-skin").type(TypeToken.get(Boolean.class))
.defaultValue(true)
.notifyClient()
.build();
/**
- * No documentation available.
+ * Shows other players as Steve or Alex.
*
* @since 1.0.0
*/
public static final SimpleOption HIDE_OTHERS_SKIN = SimpleOption.builder()
+ .comment("Shows other players as Steve or Alex")
.node("nick-hider", "hide-others-skin").type(TypeToken.get(Boolean.class))
.defaultValue(false)
.notifyClient()
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModOverlayMod.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModOverlayMod.java
index b04034dd..0c81ad5e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModOverlayMod.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModOverlayMod.java
@@ -58,6 +58,18 @@ public final class ModOverlayMod {
.notifyClient()
.build();
+ /**
+ * Stop your hand from bobbing while holding a map.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption NO_MAP_BOBBING = SimpleOption.builder()
+ .comment("Stop your hand from bobbing while holding a map.")
+ .node("overlay-mod", "no-map-bobbing").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
@@ -130,6 +142,18 @@ public final class ModOverlayMod {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final NumberOption FISHING_BOBBER_OVERLAY = NumberOption.number()
+ .node("overlay-mod", "fishing-bobber-overlay").type(TypeToken.get(Float.class))
+ .min(0.0F).max(1.0F)
+ .defaultValue(1.0F)
+ .notifyClient()
+ .build();
+
/**
* Hides grass and double grass blocks.
*
@@ -480,7 +504,18 @@ public final class ModOverlayMod {
*/
public static final SimpleOption XP_ORB_COLOR = SimpleOption.builder()
.node("overlay-mod", "xp-orb-color").type(TypeToken.get(Color.class))
- .defaultValue(new Color(255, 255, 255, 128))
+ .defaultValue(new Color(128, 255, 32, 128))
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption XP_HOTBAR_TEXT_COLOR = SimpleOption.builder()
+ .node("overlay-mod", "xp-hotbar-text-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(128, 255, 32))
.notifyClient()
.build();
@@ -518,6 +553,72 @@ public final class ModOverlayMod {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption CUSTOM_GUI_COLORS = SimpleOption.builder()
+ .node("overlay-mod", "custom-gui-colors").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption CONTAINER_TINT = SimpleOption.builder()
+ .node("overlay-mod", "container-tint").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(75, 75, 75))
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption HOTBAR_TINT = SimpleOption.builder()
+ .node("overlay-mod", "hotbar-tint").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(75, 75, 75))
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption MENU_TINT = SimpleOption.builder()
+ .node("overlay-mod", "menu-tint").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(75, 75, 75))
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption GUI_TEXT_COLOR = SimpleOption.builder()
+ .node("overlay-mod", "gui-text-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(215, 215, 215))
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption MENU_TEXT_COLOR = SimpleOption.builder()
+ .node("overlay-mod", "menu-text-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(215, 215, 215))
+ .notifyClient()
+ .build();
+
/**
* Improve visibility when riding a horse.
*
@@ -530,6 +631,28 @@ public final class ModOverlayMod {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption HEADLESS_LLAMAS = SimpleOption.builder()
+ .node("overlay-mod", "headless-l-lamas").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption HEADLESS_CAMELS = SimpleOption.builder()
+ .node("overlay-mod", "headless-camels").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPackDisplay.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPackDisplay.java
index be91fbc3..3cef003d 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPackDisplay.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPackDisplay.java
@@ -102,6 +102,17 @@ public final class ModPackDisplay {
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption IGNORE_SERVER_PACK = SimpleOption.builder()
+ .node("pack-display", "ignore-server-pack").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
/**
* Adds a shadow to text.
*
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPotionEffects.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPotionEffects.java
index 649d2ee1..5a5bd241 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPotionEffects.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPotionEffects.java
@@ -92,6 +92,18 @@ public final class ModPotionEffects {
.notifyClient()
.build();
+ /**
+ * Use the vanilla spacing between each effect tile.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption VANILLA_SPACING = SimpleOption.builder()
+ .comment("Use the vanilla spacing between each effect tile")
+ .node("potion-effects", "vanilla-spacing").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
@@ -151,11 +163,33 @@ public final class ModPotionEffects {
/**
* No documentation available.
*
- * @since 1.0.0
+ * @since 1.1.9
*/
- public static final SimpleOption SHOW_IN_INVENTORY = SimpleOption.builder()
- .node("potion-effects", "show-in-inventory").type(TypeToken.get(Boolean.class))
- .defaultValue(true)
+ public static final SimpleOption FORMATTED_DURATIONS = SimpleOption.builder()
+ .node("potion-effects", "formatted-durations").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.1.9
+ */
+ public static final SimpleOption UPPERCASE_POTION_NAMES = SimpleOption.builder()
+ .node("potion-effects", "uppercase-potion-names").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.1.9
+ */
+ public static final SimpleOption REVERSED_TEXT = SimpleOption.builder()
+ .node("potion-effects", "reversed-text").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
.notifyClient()
.build();
@@ -219,21 +253,45 @@ public final class ModPotionEffects {
/**
* No documentation available.
*
- * @since 1.1.9
+ * @since 1.0.0
*/
- public static final SimpleOption UPPERCASE_POTION_NAMES = SimpleOption.builder()
- .node("potion-effects", "uppercase-potion-names").type(TypeToken.get(Boolean.class))
- .defaultValue(false)
+ public static final SimpleOption SHOW_IN_INVENTORY = SimpleOption.builder()
+ .node("potion-effects", "show-in-inventory").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
.notifyClient()
.build();
/**
* No documentation available.
*
- * @since 1.1.9
+ * @since 1.0.0
*/
- public static final SimpleOption REVERSED_TEXT = SimpleOption.builder()
- .node("potion-effects", "reversed-text").type(TypeToken.get(Boolean.class))
+ public static final SimpleOption HIDE_MODERN_ICONS = SimpleOption.builder()
+ .node("potion-effects", "hide-modern-icons").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * Completely hide the potion effects mod HUD.
+ *
+ * @since 1.2.9
+ */
+ public static final SimpleOption HIDE_POTION_STATUS = SimpleOption.builder()
+ .comment("Completely hide the potion effects mod HUD")
+ .node("potion-effects", "hide-potion-status").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * Show effect duration with a progress bar in the inventory/hud.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption EFFECT_BARS = SimpleOption.builder()
+ .comment("Show effect duration with a progress bar in the inventory/hud")
+ .node("potion-effects", "effect-bars").type(TypeToken.get(Boolean.class))
.defaultValue(false)
.notifyClient()
.build();
@@ -241,10 +299,33 @@ public final class ModPotionEffects {
/**
* No documentation available.
*
- * @since 1.1.9
+ * @since 1.3.0
*/
- public static final SimpleOption FORMATTED_DURATIONS = SimpleOption.builder()
- .node("potion-effects", "formatted-durations").type(TypeToken.get(Boolean.class))
+ public static final SimpleOption EFFECT_BAR_VANILLA_HUD = SimpleOption.builder()
+ .node("potion-effects", "effect-bar-vanilla-hud").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption EFFECT_BAR_INVENTORY = SimpleOption.builder()
+ .node("potion-effects", "effect-bar-inventory").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * Show the duration bars on Lunar potion effect status huds.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption EFFECT_BAR_LUNAR_HUD = SimpleOption.builder()
+ .comment("Show the duration bars on Lunar potion effect status huds")
+ .node("potion-effects", "effect-bar-lunar-hud").type(TypeToken.get(Boolean.class))
.defaultValue(false)
.notifyClient()
.build();
@@ -252,26 +333,48 @@ public final class ModPotionEffects {
/**
* No documentation available.
*
- * @since 1.0.0
+ * @since 1.3.0
*/
- public static final SimpleOption HIDE_MODERN_ICONS = SimpleOption.builder()
- .node("potion-effects", "hide-modern-icons").type(TypeToken.get(Boolean.class))
+ public static final SimpleOption EFFECT_BAR_HIDE_AMBIENT = SimpleOption.builder()
+ .node("potion-effects", "effect-bar-hide-ambient").type(TypeToken.get(Boolean.class))
.defaultValue(true)
.notifyClient()
.build();
/**
- * Completely hide the potion effects mod HUD.
+ * Do a gradient animation on the bar color.
*
- * @since 1.2.9
+ * @since 1.3.0
*/
- public static final SimpleOption HIDE_POTION_STATUS = SimpleOption.builder()
- .comment("Completely hide the potion effects mod HUD")
- .node("potion-effects", "hide-potion-status").type(TypeToken.get(Boolean.class))
+ public static final SimpleOption EFFECT_BAR_GRADIENT = SimpleOption.builder()
+ .comment("Do a gradient animation on the bar color")
+ .node("potion-effects", "effect-bar-gradient").type(TypeToken.get(Boolean.class))
+ .defaultValue(true)
+ .notifyClient()
+ .build();
+
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption EFFECT_BAR_CUSTOM_COLOR = SimpleOption.builder()
+ .node("potion-effects", "effect-bar-custom-color").type(TypeToken.get(Boolean.class))
.defaultValue(false)
.notifyClient()
.build();
+ /**
+ * No documentation available.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption EFFECT_BAR_COLOR = SimpleOption.builder()
+ .node("potion-effects", "effect-bar-color").type(TypeToken.get(Color.class))
+ .defaultValue(new Color(255, 255, 255))
+ .notifyClient()
+ .build();
+
/**
* No documentation available.
*
@@ -431,6 +534,30 @@ public final class ModPotionEffects {
.notifyClient()
.build();
+ /**
+ * Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption LOCK_TO_VANILLA_POSITION = SimpleOption.builder()
+ .comment("Keeps the mod at the vanilla position and scale. It can't be moved or scaled in the HUD editor while this is on.")
+ .node("potion-effects", "lock-to-vanilla-position").type(TypeToken.get(Boolean.class))
+ .defaultValue(false)
+ .notifyClient()
+ .build();
+
+ /**
+ * On always uses the Minecraft GUI scale for this mod, and Off always uses the Lunar UI scale.
+ *
+ * @since 1.3.0
+ */
+ public static final SimpleOption USE_MINECRAFT_GUISCALE = SimpleOption.