diff --git a/api/src/bukkit/java/com/lunarclient/apollo/BukkitApollo.java b/api/src/bukkit/java/com/lunarclient/apollo/BukkitApollo.java
index 78645cd21..00a61609e 100644
--- a/api/src/bukkit/java/com/lunarclient/apollo/BukkitApollo.java
+++ b/api/src/bukkit/java/com/lunarclient/apollo/BukkitApollo.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/bungee/java/com/lunarclient/apollo/BungeeApollo.java b/api/src/bungee/java/com/lunarclient/apollo/BungeeApollo.java
index 28c4a75d5..45e35767c 100644
--- a/api/src/bungee/java/com/lunarclient/apollo/BungeeApollo.java
+++ b/api/src/bungee/java/com/lunarclient/apollo/BungeeApollo.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/folia/java/com/lunarclient/apollo/FoliaApollo.java b/api/src/folia/java/com/lunarclient/apollo/FoliaApollo.java
index 846c89eb6..8d19ab2ef 100644
--- a/api/src/folia/java/com/lunarclient/apollo/FoliaApollo.java
+++ b/api/src/folia/java/com/lunarclient/apollo/FoliaApollo.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/Apollo.java b/api/src/main/java/com/lunarclient/apollo/Apollo.java
index 674fd6b94..c578914ec 100644
--- a/api/src/main/java/com/lunarclient/apollo/Apollo.java
+++ b/api/src/main/java/com/lunarclient/apollo/Apollo.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/ApolloPlatform.java b/api/src/main/java/com/lunarclient/apollo/ApolloPlatform.java
index 8ea25ec8c..f63d6cf4d 100644
--- a/api/src/main/java/com/lunarclient/apollo/ApolloPlatform.java
+++ b/api/src/main/java/com/lunarclient/apollo/ApolloPlatform.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/api/ApiRequest.java b/api/src/main/java/com/lunarclient/apollo/api/ApiRequest.java
index 063f19080..7b9b9371c 100644
--- a/api/src/main/java/com/lunarclient/apollo/api/ApiRequest.java
+++ b/api/src/main/java/com/lunarclient/apollo/api/ApiRequest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/api/ApiRequestType.java b/api/src/main/java/com/lunarclient/apollo/api/ApiRequestType.java
index c749e34ae..832ecac61 100644
--- a/api/src/main/java/com/lunarclient/apollo/api/ApiRequestType.java
+++ b/api/src/main/java/com/lunarclient/apollo/api/ApiRequestType.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/api/ApiResponse.java b/api/src/main/java/com/lunarclient/apollo/api/ApiResponse.java
index 04807d742..0284ecbdc 100644
--- a/api/src/main/java/com/lunarclient/apollo/api/ApiResponse.java
+++ b/api/src/main/java/com/lunarclient/apollo/api/ApiResponse.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/api/ApiServiceType.java b/api/src/main/java/com/lunarclient/apollo/api/ApiServiceType.java
index ac59e0b12..a09e86dd3 100644
--- a/api/src/main/java/com/lunarclient/apollo/api/ApiServiceType.java
+++ b/api/src/main/java/com/lunarclient/apollo/api/ApiServiceType.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/async/Future.java b/api/src/main/java/com/lunarclient/apollo/async/Future.java
index 675170e38..b1a9ff9f2 100644
--- a/api/src/main/java/com/lunarclient/apollo/async/Future.java
+++ b/api/src/main/java/com/lunarclient/apollo/async/Future.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/async/Handler.java b/api/src/main/java/com/lunarclient/apollo/async/Handler.java
index 79cd11cd0..dbba8ff78 100644
--- a/api/src/main/java/com/lunarclient/apollo/async/Handler.java
+++ b/api/src/main/java/com/lunarclient/apollo/async/Handler.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/async/future/UncertainFuture.java b/api/src/main/java/com/lunarclient/apollo/async/future/UncertainFuture.java
index 74e8e5270..f91082196 100644
--- a/api/src/main/java/com/lunarclient/apollo/async/future/UncertainFuture.java
+++ b/api/src/main/java/com/lunarclient/apollo/async/future/UncertainFuture.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/client/mod/LunarClientMod.java b/api/src/main/java/com/lunarclient/apollo/client/mod/LunarClientMod.java
index fd619ab17..28c02c6c6 100644
--- a/api/src/main/java/com/lunarclient/apollo/client/mod/LunarClientMod.java
+++ b/api/src/main/java/com/lunarclient/apollo/client/mod/LunarClientMod.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/client/mod/LunarClientModType.java b/api/src/main/java/com/lunarclient/apollo/client/mod/LunarClientModType.java
index cc30b2d28..a437840fe 100644
--- a/api/src/main/java/com/lunarclient/apollo/client/mod/LunarClientModType.java
+++ b/api/src/main/java/com/lunarclient/apollo/client/mod/LunarClientModType.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/client/version/LunarClientVersion.java b/api/src/main/java/com/lunarclient/apollo/client/version/LunarClientVersion.java
index a5b0d791a..1edfec801 100644
--- a/api/src/main/java/com/lunarclient/apollo/client/version/LunarClientVersion.java
+++ b/api/src/main/java/com/lunarclient/apollo/client/version/LunarClientVersion.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/client/version/MinecraftVersion.java b/api/src/main/java/com/lunarclient/apollo/client/version/MinecraftVersion.java
index 418e9eb0d..9e9abaa73 100644
--- a/api/src/main/java/com/lunarclient/apollo/client/version/MinecraftVersion.java
+++ b/api/src/main/java/com/lunarclient/apollo/client/version/MinecraftVersion.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/ApolloColors.java b/api/src/main/java/com/lunarclient/apollo/common/ApolloColors.java
index 6861d4e5f..f1b4f6175 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/ApolloColors.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/ApolloColors.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/ApolloEntity.java b/api/src/main/java/com/lunarclient/apollo/common/ApolloEntity.java
index f07ece8d4..9e38adbfa 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/ApolloEntity.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/ApolloEntity.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/cuboid/Cuboid2D.java b/api/src/main/java/com/lunarclient/apollo/common/cuboid/Cuboid2D.java
index 8be2ed9be..c537ce318 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/cuboid/Cuboid2D.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/cuboid/Cuboid2D.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/cuboid/Cuboid3D.java b/api/src/main/java/com/lunarclient/apollo/common/cuboid/Cuboid3D.java
index fd9e916b1..a327b9296 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/cuboid/Cuboid3D.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/cuboid/Cuboid3D.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/icon/AdvancedResourceLocationIcon.java b/api/src/main/java/com/lunarclient/apollo/common/icon/AdvancedResourceLocationIcon.java
index f71410814..0bc0543ee 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/icon/AdvancedResourceLocationIcon.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/icon/AdvancedResourceLocationIcon.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/icon/Icon.java b/api/src/main/java/com/lunarclient/apollo/common/icon/Icon.java
index 16e70a579..4ac19f948 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/icon/Icon.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/icon/Icon.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/icon/ItemStackIcon.java b/api/src/main/java/com/lunarclient/apollo/common/icon/ItemStackIcon.java
index 963d98450..97ca66ab5 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/icon/ItemStackIcon.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/icon/ItemStackIcon.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/icon/ResourceLocationIcon.java b/api/src/main/java/com/lunarclient/apollo/common/icon/ResourceLocationIcon.java
new file mode 100644
index 000000000..f4716c4a6
--- /dev/null
+++ b/api/src/main/java/com/lunarclient/apollo/common/icon/ResourceLocationIcon.java
@@ -0,0 +1,48 @@
+/*
+ * 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.common.icon;
+
+import lombok.Builder;
+import lombok.Getter;
+
+/**
+ * Represents a resource location icon.
+ *
+ * @since 1.2.5
+ */
+@Getter
+@Builder
+public final class ResourceLocationIcon extends Icon {
+
+ /**
+ * Returns the icon {@link String} resource location.
+ *
+ *
Represents a path to an icon that will appear for the player.
+ *
+ * @return the icon resource location
+ * @since 1.2.5
+ */
+ String resourceLocation;
+
+}
diff --git a/api/src/main/java/com/lunarclient/apollo/common/icon/SimpleResourceLocationIcon.java b/api/src/main/java/com/lunarclient/apollo/common/icon/SimpleResourceLocationIcon.java
index 88ef87b3b..e2b4bb7e8 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/icon/SimpleResourceLocationIcon.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/icon/SimpleResourceLocationIcon.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/location/ApolloBlockLocation.java b/api/src/main/java/com/lunarclient/apollo/common/location/ApolloBlockLocation.java
index 9e728cdef..242fd1ffb 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/location/ApolloBlockLocation.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/location/ApolloBlockLocation.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/location/ApolloLocation.java b/api/src/main/java/com/lunarclient/apollo/common/location/ApolloLocation.java
index bc6a0fe85..55225795a 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/location/ApolloLocation.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/location/ApolloLocation.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/common/location/ApolloPlayerLocation.java b/api/src/main/java/com/lunarclient/apollo/common/location/ApolloPlayerLocation.java
index 8b8cd3cff..002fe7804 100644
--- a/api/src/main/java/com/lunarclient/apollo/common/location/ApolloPlayerLocation.java
+++ b/api/src/main/java/com/lunarclient/apollo/common/location/ApolloPlayerLocation.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/ApolloListener.java b/api/src/main/java/com/lunarclient/apollo/event/ApolloListener.java
index 07f104800..3c74e52fb 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/ApolloListener.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/ApolloListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/Event.java b/api/src/main/java/com/lunarclient/apollo/event/Event.java
index 402b48043..67c00481c 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/Event.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/Event.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/EventBus.java b/api/src/main/java/com/lunarclient/apollo/event/EventBus.java
index 4859c2f95..5309fc57e 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/EventBus.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/EventBus.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/EventCancellable.java b/api/src/main/java/com/lunarclient/apollo/event/EventCancellable.java
index 6a011b3e5..a95bd2478 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/EventCancellable.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/EventCancellable.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/Listen.java b/api/src/main/java/com/lunarclient/apollo/event/Listen.java
index 9232e0906..4c7152340 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/Listen.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/Listen.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/ReflectiveConsumer.java b/api/src/main/java/com/lunarclient/apollo/event/ReflectiveConsumer.java
index 0badccf6f..47821a692 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/ReflectiveConsumer.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/ReflectiveConsumer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 069458c18..d8724a6d6 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/option/ApolloUpdateOptionEvent.java b/api/src/main/java/com/lunarclient/apollo/event/option/ApolloUpdateOptionEvent.java
index 3ade4cff4..487ac1286 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/option/ApolloUpdateOptionEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/option/ApolloUpdateOptionEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/chat/ApolloPlayerChatCloseEvent.java b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/chat/ApolloPlayerChatCloseEvent.java
index 26596d881..9f8250cab 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/chat/ApolloPlayerChatCloseEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/chat/ApolloPlayerChatCloseEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/chat/ApolloPlayerChatOpenEvent.java b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/chat/ApolloPlayerChatOpenEvent.java
index 93ff80236..18dbe326a 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/chat/ApolloPlayerChatOpenEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/chat/ApolloPlayerChatOpenEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/melee/ApolloPlayerAttackEvent.java b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/melee/ApolloPlayerAttackEvent.java
index 79562eddb..800773d05 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/melee/ApolloPlayerAttackEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/melee/ApolloPlayerAttackEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/world/ApolloPlayerUseItemBucketEvent.java b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/world/ApolloPlayerUseItemBucketEvent.java
index a27c1395a..de7a03dce 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/world/ApolloPlayerUseItemBucketEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/world/ApolloPlayerUseItemBucketEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/world/ApolloPlayerUseItemEvent.java b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/world/ApolloPlayerUseItemEvent.java
index beb9e6ede..eab73e621 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/world/ApolloPlayerUseItemEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/packetenrichment/world/ApolloPlayerUseItemEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/player/ApolloPlayerHandshakeEvent.java b/api/src/main/java/com/lunarclient/apollo/event/player/ApolloPlayerHandshakeEvent.java
index 69aa276d3..418533c01 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/player/ApolloPlayerHandshakeEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/player/ApolloPlayerHandshakeEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/player/ApolloRegisterPlayerEvent.java b/api/src/main/java/com/lunarclient/apollo/event/player/ApolloRegisterPlayerEvent.java
index 1c0f69f37..72442d0c4 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/player/ApolloRegisterPlayerEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/player/ApolloRegisterPlayerEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/event/player/ApolloUnregisterPlayerEvent.java b/api/src/main/java/com/lunarclient/apollo/event/player/ApolloUnregisterPlayerEvent.java
index c278f6109..ce8d0055a 100644
--- a/api/src/main/java/com/lunarclient/apollo/event/player/ApolloUnregisterPlayerEvent.java
+++ b/api/src/main/java/com/lunarclient/apollo/event/player/ApolloUnregisterPlayerEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 81cd35a3d..d8a175588 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/Mods.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/Mods.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/Mod2dItems.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/Mod2dItems.java
index e234ff2eb..d9b175454 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/Mod2dItems.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/Mod2dItems.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/Mod3dSkins.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/Mod3dSkins.java
index 839feed6e..5e6337808 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/Mod3dSkins.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/Mod3dSkins.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 2e521b3dc..cf54d8b4d 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 6417131a7..1ab6249b6 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAutoTextActions.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAutoTextActions.java
index dddbd4845..723b5522d 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAutoTextActions.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAutoTextActions.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAutoTextHotkey.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAutoTextHotkey.java
index c710daf9c..a2758655d 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAutoTextHotkey.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModAutoTextHotkey.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModBlockOutline.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModBlockOutline.java
index 4fdd2fec1..e568eb1cb 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModBlockOutline.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModBlockOutline.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 b68f7d235..9e9c40494 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 e794e4f14..989814bc3 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModChunkBorders.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModChunkBorders.java
index 6251c1a2f..24f8e0e49 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModChunkBorders.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModChunkBorders.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModClock.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModClock.java
index 6257b4b5d..802667614 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModClock.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModClock.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModColorSaturation.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModColorSaturation.java
index 5ba262223..61f559aba 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModColorSaturation.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModColorSaturation.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCombo.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCombo.java
index 01b918abb..fbde9c9b7 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCombo.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCombo.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCooldowns.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCooldowns.java
index d3fd8ef69..27e9c8292 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCooldowns.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCooldowns.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 543096967..66e1d91ac 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCps.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCps.java
index 0c711a7c0..ff1911535 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCps.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCps.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCrosshair.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCrosshair.java
index 806867148..2895204bc 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCrosshair.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModCrosshair.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 0f98ebfd6..86d04e89f 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDayCounter.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDayCounter.java
index 5c82312bc..671548aa6 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDayCounter.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDayCounter.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDirectionHud.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDirectionHud.java
index 5b7aa7c02..bd5bb1b14 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDirectionHud.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModDirectionHud.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModF3Display.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModF3Display.java
index 49534a688..3d17e7dc3 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModF3Display.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModF3Display.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFog.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFog.java
index b699abb42..6da911c92 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFog.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFog.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFov.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFov.java
index 8229b8ab8..8773a86b9 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFov.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFov.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFps.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFps.java
index 43f37e411..e6871a72e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFps.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFps.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFreelook.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFreelook.java
index 052f61b4f..0c203e27d 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFreelook.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModFreelook.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModGlintColorizer.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModGlintColorizer.java
index 93658486c..83562e6dc 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModGlintColorizer.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModGlintColorizer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHitColor.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHitColor.java
index 135ebccd6..b42376c2e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHitColor.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHitColor.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHitbox.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHitbox.java
index 8e1330f22..715abbd2d 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHitbox.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHitbox.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHorseStats.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHorseStats.java
index cf4e8ece9..536c8bcca 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHorseStats.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHorseStats.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHurtCam.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHurtCam.java
index 11c712a18..91c0aef15 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHurtCam.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHurtCam.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelBedwars.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelBedwars.java
index 06e85ffa9..3dc1df486 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelBedwars.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelBedwars.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelMod.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelMod.java
index 1329126a9..df33fccee 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelMod.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModHypixelMod.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 d93df0c7d..b224de2e2 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemCounter.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemCounter.java
index f4d5ae029..7d879e54e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemCounter.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemCounter.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemPhysics.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemPhysics.java
index a206035ff..9fc63fb15 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemPhysics.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemPhysics.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemTracker.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemTracker.java
index af51e5f86..7bb83e6b4 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemTracker.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModItemTracker.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKeystrokes.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKeystrokes.java
index be04bbebc..4c62bb09a 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKeystrokes.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKeystrokes.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKillSounds.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKillSounds.java
index c73106102..095b0ade8 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKillSounds.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModKillSounds.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModLighting.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModLighting.java
index f0eca0ca8..bc0d48e2e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModLighting.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModLighting.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMarkers.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMarkers.java
index 15ce1a0f5..a240ffe96 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMarkers.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMarkers.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMemory.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMemory.java
index e6e9f1c36..12a238172 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMemory.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMemory.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMenuBlur.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMenuBlur.java
index 675686819..4770484fd 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMenuBlur.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMenuBlur.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 051ba554f..b4a0429f2 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMobSize.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMobSize.java
index 3937c6eb6..d95900590 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMobSize.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMobSize.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMomentum.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMomentum.java
index 593dffb43..e25795dfa 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMomentum.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMomentum.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMotionBlur.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMotionBlur.java
index 6611458da..cebd9fea9 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMotionBlur.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMotionBlur.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMumbleLink.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMumbleLink.java
index ddb5efb5c..82f658da6 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMumbleLink.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModMumbleLink.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNametag.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNametag.java
index b76ff9be8..64e724b60 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNametag.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNametag.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNeu.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNeu.java
index f338d7607..dbea05580 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNeu.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModNeu.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 fed02a3c0..bcc3874a1 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModOneSevenVisuals.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModOneSevenVisuals.java
index 2d6ab6cfe..f7b973389 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModOneSevenVisuals.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModOneSevenVisuals.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 489dc85ac..f079fb79b 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 f0ad3a863..be91fbc3f 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPackOrganizer.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPackOrganizer.java
index 8e6d0d86f..3dc8c243b 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPackOrganizer.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPackOrganizer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModParticleChanger.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModParticleChanger.java
index e5473af93..dc998ce9e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModParticleChanger.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModParticleChanger.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPing.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPing.java
index 21436fd36..059e63129 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPing.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPing.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPlaytime.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPlaytime.java
index 2484208a2..67a0efb70 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPlaytime.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPlaytime.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
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 f00354aac..93be05cce 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
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPvpInfo.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPvpInfo.java
index e9106493f..eddce0e9c 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPvpInfo.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModPvpInfo.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModQuickplay.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModQuickplay.java
index f65e63e65..1b219fcdb 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModQuickplay.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModQuickplay.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModRadio.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModRadio.java
index 0b7b891af..d23b9a2f2 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModRadio.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModRadio.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModReachDisplay.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModReachDisplay.java
index 778062612..e66aed178 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModReachDisplay.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModReachDisplay.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModReplaymod.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModReplaymod.java
index c59e5d557..07c85da1a 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModReplaymod.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModReplaymod.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModRewind.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModRewind.java
index e2a8c7c52..67323998e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModRewind.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModRewind.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSaturation.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSaturation.java
index e35e81b38..bae9e1b24 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSaturation.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSaturation.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSba.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSba.java
index ba6b5687c..e85271dc1 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSba.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSba.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScoreboard.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScoreboard.java
index 98a74f721..b0425df78 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScoreboard.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScoreboard.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScreenshot.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScreenshot.java
index 478ed138c..2945c34bd 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScreenshot.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScreenshot.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScrollableTooltips.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScrollableTooltips.java
index 06c6c4bad..c333af45f 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScrollableTooltips.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModScrollableTooltips.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModServerAddress.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModServerAddress.java
index 8caa3784d..07eae5262 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModServerAddress.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModServerAddress.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShields.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShields.java
index 79a0a8ba6..e19aa8e83 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShields.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShields.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShinyPots.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShinyPots.java
index 53a38c692..45ae2fb3e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShinyPots.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShinyPots.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShulkerPreview.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShulkerPreview.java
index 92add2a6d..3c8e9acdf 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShulkerPreview.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModShulkerPreview.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSkyblock.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSkyblock.java
index b48036291..40281e0bf 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSkyblock.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSkyblock.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSnaplook.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSnaplook.java
index b0045f9be..5b7662b2b 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSnaplook.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSnaplook.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSoundChanger.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSoundChanger.java
index 1d24999d2..105bd5849 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSoundChanger.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModSoundChanger.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModStopwatch.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModStopwatch.java
index efe8d4915..e994e63fa 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModStopwatch.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModStopwatch.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTab.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTab.java
index 1bf39e56e..9314d2e44 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTab.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTab.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTeamView.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTeamView.java
index 87dc94217..fbd76c69d 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTeamView.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTeamView.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTierTagger.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTierTagger.java
index 5de303447..87d3bfa8e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTierTagger.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTierTagger.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTimeChanger.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTimeChanger.java
index 9d07a7a69..2a437e6be 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTimeChanger.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTimeChanger.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTitles.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTitles.java
index 87b74444c..d7f584be5 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTitles.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTitles.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTntCountdown.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTntCountdown.java
index 68abeacf6..9c4114e9e 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTntCountdown.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTntCountdown.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModToggleSneak.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModToggleSneak.java
index fd4c834e4..1e4e0df65 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModToggleSneak.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModToggleSneak.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTotemCounter.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTotemCounter.java
index e8262b395..9ebd0aace 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTotemCounter.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModTotemCounter.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModUhcOverlay.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModUhcOverlay.java
index 77986f260..848467323 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModUhcOverlay.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModUhcOverlay.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWaila.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWaila.java
index dc912f2e1..e9d0bf8b5 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWaila.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWaila.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWaypoints.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWaypoints.java
index 008b63a50..fad8ca134 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWaypoints.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWaypoints.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWeatherChanger.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWeatherChanger.java
index fede2873d..2423e298c 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWeatherChanger.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWeatherChanger.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWorldeditCui.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWorldeditCui.java
index 943ba4c4d..e90134981 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWorldeditCui.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModWorldeditCui.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModZoom.java b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModZoom.java
index c35d1e122..092f6bede 100644
--- a/api/src/main/java/com/lunarclient/apollo/mods/impl/ModZoom.java
+++ b/api/src/main/java/com/lunarclient/apollo/mods/impl/ModZoom.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/ApolloModule.java b/api/src/main/java/com/lunarclient/apollo/module/ApolloModule.java
index ae1a03d4e..9135fd8e5 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/ApolloModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/ApolloModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/ApolloModuleManager.java b/api/src/main/java/com/lunarclient/apollo/module/ApolloModuleManager.java
index 674a1f1ef..760bcdd36 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/ApolloModuleManager.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/ApolloModuleManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/ModuleDefinition.java b/api/src/main/java/com/lunarclient/apollo/module/ModuleDefinition.java
index d9ae4e286..a441203e1 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/ModuleDefinition.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/ModuleDefinition.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/autotexthotkey/AutoTextHotkeyModule.java b/api/src/main/java/com/lunarclient/apollo/module/autotexthotkey/AutoTextHotkeyModule.java
index 00db4ea6c..3e8226023 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/autotexthotkey/AutoTextHotkeyModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/autotexthotkey/AutoTextHotkeyModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/beam/Beam.java b/api/src/main/java/com/lunarclient/apollo/module/beam/Beam.java
index 0b496134e..226f90e9c 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/beam/Beam.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/beam/Beam.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/beam/BeamModule.java b/api/src/main/java/com/lunarclient/apollo/module/beam/BeamModule.java
index 6681ccf2d..672cc825f 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/beam/BeamModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/beam/BeamModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/border/Border.java b/api/src/main/java/com/lunarclient/apollo/module/border/Border.java
index 2a02070e6..e25d13ca5 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/border/Border.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/border/Border.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/border/BorderModule.java b/api/src/main/java/com/lunarclient/apollo/module/border/BorderModule.java
index 50d72135c..706d2ba4c 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/border/BorderModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/border/BorderModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/chat/ChatModule.java b/api/src/main/java/com/lunarclient/apollo/module/chat/ChatModule.java
index 6faa18919..c6190500c 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/chat/ChatModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/chat/ChatModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/coloredfire/ColoredFireModule.java b/api/src/main/java/com/lunarclient/apollo/module/coloredfire/ColoredFireModule.java
index 2f1012e20..f63dcaba0 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/coloredfire/ColoredFireModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/coloredfire/ColoredFireModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/combat/CombatModule.java b/api/src/main/java/com/lunarclient/apollo/module/combat/CombatModule.java
index 3a57de46f..76288ec0a 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/combat/CombatModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/combat/CombatModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/cooldown/Cooldown.java b/api/src/main/java/com/lunarclient/apollo/module/cooldown/Cooldown.java
index 58cefa889..3a029f397 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/cooldown/Cooldown.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/cooldown/Cooldown.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -27,6 +27,7 @@
import java.time.Duration;
import lombok.Builder;
import lombok.Getter;
+import org.jetbrains.annotations.Nullable;
/**
* Represents a cooldown which can be shown on the client.
@@ -64,4 +65,14 @@ public final class Cooldown {
*/
Icon icon;
+ /**
+ * Returns the cooldown {@link CooldownStyle}.
+ *
+ * If {@code null}, the style defaults to the user's local Cooldown Mod settings.
+ *
+ * @return the cooldown style
+ * @since 1.2.5
+ */
+ @Nullable CooldownStyle style;
+
}
diff --git a/api/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownModule.java b/api/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownModule.java
index b40b9aac7..a0b506727 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownStyle.java b/api/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownStyle.java
new file mode 100644
index 000000000..2641e5a3b
--- /dev/null
+++ b/api/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownStyle.java
@@ -0,0 +1,72 @@
+/*
+ * 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.module.cooldown;
+
+import java.awt.Color;
+import lombok.Builder;
+import lombok.Getter;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Represents the {@link Cooldown} style, allowing customization of the circle start, end, edge & text color.
+ *
+ * @since 1.2.5
+ */
+@Getter
+@Builder
+public final class CooldownStyle {
+
+ /**
+ * Returns the cooldown circle start {@link Color}.
+ *
+ * @return the circle start color
+ * @since 1.2.5
+ */
+ @Nullable Color circleStartColor;
+
+ /**
+ * Returns the cooldown circle end {@link Color}.
+ *
+ * @return the circle end color
+ * @since 1.2.5
+ */
+ @Nullable Color circleEndColor;
+
+ /**
+ * Returns the cooldown circle edge {@link Color}.
+ *
+ * @return the circle edge color
+ * @since 1.2.5
+ */
+ @Nullable Color circleEdgeColor;
+
+ /**
+ * Returns the cooldown text {@link Color}.
+ *
+ * @return the text color
+ * @since 1.2.5
+ */
+ @Nullable Color textColor;
+
+}
diff --git a/api/src/main/java/com/lunarclient/apollo/module/entity/EntityModule.java b/api/src/main/java/com/lunarclient/apollo/module/entity/EntityModule.java
index 5e3ca4666..43454aeeb 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/entity/EntityModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/entity/EntityModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/glint/GlintModule.java b/api/src/main/java/com/lunarclient/apollo/module/glint/GlintModule.java
index 0b8ed9707..7fb6cdaff 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/glint/GlintModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/glint/GlintModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/glow/GlowModule.java b/api/src/main/java/com/lunarclient/apollo/module/glow/GlowModule.java
index aa4b6e791..1c4164ade 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/glow/GlowModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/glow/GlowModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/hologram/Hologram.java b/api/src/main/java/com/lunarclient/apollo/module/hologram/Hologram.java
index 192802fd7..8b73b1afc 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/hologram/Hologram.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/hologram/Hologram.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/hologram/HologramModule.java b/api/src/main/java/com/lunarclient/apollo/module/hologram/HologramModule.java
index 9d5dea47a..b9e46ad47 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/hologram/HologramModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/hologram/HologramModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/inventory/InventoryModule.java b/api/src/main/java/com/lunarclient/apollo/module/inventory/InventoryModule.java
index 968b48a68..ed5861e3b 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/inventory/InventoryModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/inventory/InventoryModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/limb/ArmorPiece.java b/api/src/main/java/com/lunarclient/apollo/module/limb/ArmorPiece.java
index 0c676a69c..6a8d4fe88 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/limb/ArmorPiece.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/limb/ArmorPiece.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/limb/BodyPart.java b/api/src/main/java/com/lunarclient/apollo/module/limb/BodyPart.java
index 7484f9a47..3b0bed074 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/limb/BodyPart.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/limb/BodyPart.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/limb/LimbModule.java b/api/src/main/java/com/lunarclient/apollo/module/limb/LimbModule.java
index 8d8805239..81ed3cd9f 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/limb/LimbModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/limb/LimbModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/modsetting/ModSettingModule.java b/api/src/main/java/com/lunarclient/apollo/module/modsetting/ModSettingModule.java
index c51a89520..cdad6ef4b 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/modsetting/ModSettingModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/modsetting/ModSettingModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/nametag/Nametag.java b/api/src/main/java/com/lunarclient/apollo/module/nametag/Nametag.java
index 8ef9a80bc..5089ffd81 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/nametag/Nametag.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/nametag/Nametag.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/nametag/NametagModule.java b/api/src/main/java/com/lunarclient/apollo/module/nametag/NametagModule.java
index 9fa72b982..a88c8ba3b 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/nametag/NametagModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/nametag/NametagModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/nickhider/NickHiderModule.java b/api/src/main/java/com/lunarclient/apollo/module/nickhider/NickHiderModule.java
index a8bfe8afc..7194ccf47 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/nickhider/NickHiderModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/nickhider/NickHiderModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/notification/Notification.java b/api/src/main/java/com/lunarclient/apollo/module/notification/Notification.java
index 4a8ea14a3..4943134e2 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/notification/Notification.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/notification/Notification.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/notification/NotificationModule.java b/api/src/main/java/com/lunarclient/apollo/module/notification/NotificationModule.java
index 1828d5d57..1a0c20b41 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/notification/NotificationModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/notification/NotificationModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentModule.java b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentModule.java
index bf519e076..cec82188d 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/PlayerInfo.java b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/PlayerInfo.java
index d405097c4..9e2304155 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/PlayerInfo.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/PlayerInfo.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/BlockHitResult.java b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/BlockHitResult.java
index 6bd312c8b..6e5b1e660 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/BlockHitResult.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/BlockHitResult.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/Direction.java b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/Direction.java
index 9b729b15c..2b6e48a3d 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/Direction.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/Direction.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/EntityHitResult.java b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/EntityHitResult.java
index 030436b82..4b95b7082 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/EntityHitResult.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/EntityHitResult.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/MissResult.java b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/MissResult.java
index 5c7f91bc3..f400ad86a 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/MissResult.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/MissResult.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/RayTraceResult.java b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/RayTraceResult.java
index 46eb2667d..beb4c6d57 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/RayTraceResult.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/packetenrichment/raytrace/RayTraceResult.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/paynow/PayNowEmbeddedCheckoutSupport.java b/api/src/main/java/com/lunarclient/apollo/module/paynow/PayNowEmbeddedCheckoutSupport.java
index 4a9be059f..0127b4a79 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/paynow/PayNowEmbeddedCheckoutSupport.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/paynow/PayNowEmbeddedCheckoutSupport.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/paynow/PayNowModule.java b/api/src/main/java/com/lunarclient/apollo/module/paynow/PayNowModule.java
index 79fcc41cc..47561b2a3 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/paynow/PayNowModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/paynow/PayNowModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/richpresence/RichPresenceModule.java b/api/src/main/java/com/lunarclient/apollo/module/richpresence/RichPresenceModule.java
index 25f08cecf..162ad2eea 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/richpresence/RichPresenceModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/richpresence/RichPresenceModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/richpresence/ServerRichPresence.java b/api/src/main/java/com/lunarclient/apollo/module/richpresence/ServerRichPresence.java
index cb0c97255..cb7b1ca4f 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/richpresence/ServerRichPresence.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/richpresence/ServerRichPresence.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/saturation/SaturationModule.java b/api/src/main/java/com/lunarclient/apollo/module/saturation/SaturationModule.java
index a1f40bbac..7a3148cba 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/saturation/SaturationModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/saturation/SaturationModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/serverlink/ServerLink.java b/api/src/main/java/com/lunarclient/apollo/module/serverlink/ServerLink.java
new file mode 100644
index 000000000..2c6d5abfe
--- /dev/null
+++ b/api/src/main/java/com/lunarclient/apollo/module/serverlink/ServerLink.java
@@ -0,0 +1,63 @@
+/*
+ * 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.module.serverlink;
+
+import lombok.Builder;
+import lombok.Getter;
+import net.kyori.adventure.text.Component;
+
+/**
+ * Represents a link entry displayed in the Server Links menu.
+ *
+ * @since 1.2.5
+ */
+@Getter
+@Builder
+public final class ServerLink {
+
+ /**
+ * Returns the server link {@link String} id.
+ *
+ * @return the server link id
+ * @since 1.2.5
+ */
+ String id;
+
+ /**
+ * Returns the server link {@link Component} display name.
+ *
+ * @return the server link display name
+ * @since 1.2.5
+ */
+ Component displayName;
+
+ /**
+ * Returns the server link {@link String} url.
+ *
+ * @return the server link url
+ * @since 1.2.5
+ */
+ String url;
+
+}
diff --git a/api/src/main/java/com/lunarclient/apollo/module/serverlink/ServerLinkModule.java b/api/src/main/java/com/lunarclient/apollo/module/serverlink/ServerLinkModule.java
new file mode 100644
index 000000000..f3010c971
--- /dev/null
+++ b/api/src/main/java/com/lunarclient/apollo/module/serverlink/ServerLinkModule.java
@@ -0,0 +1,130 @@
+/*
+ * 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.module.serverlink;
+
+import com.lunarclient.apollo.common.icon.ResourceLocationIcon;
+import com.lunarclient.apollo.module.ApolloModule;
+import com.lunarclient.apollo.module.ModuleDefinition;
+import com.lunarclient.apollo.recipients.Recipients;
+import java.util.List;
+import org.jetbrains.annotations.ApiStatus;
+
+/**
+ * Represents the server links module.
+ *
+ * This module provides support for the Server Links feature introduced in
+ * Minecraft 1.21.0, with compatibility extending down to version 1.7.
+ *
+ * @since 1.2.5
+ */
+@ApiStatus.NonExtendable
+@ModuleDefinition(id = "server_link", name = "Server Link")
+public abstract class ServerLinkModule extends ApolloModule {
+
+ /**
+ * Overrides the server link menu title image for the {@link Recipients}.
+ *
+ * The provided {@link ResourceLocationIcon} will be displayed in place of the default
+ * menu title.
+ *
+ * The resource location must reference a valid client-side asset using the standard
+ * namespace format:
+ *
+ *
+ * minecraft:textures/item/apple.png
+ * lunar:logo/logo-100x100.png
+ *
+ *
+ * For optimal results, a square image (e.g. 128x128) is recommended.
+ *
+ * @param recipients the recipients that are receiving the packet
+ * @param icon the resource location icon
+ * @since 1.2.5
+ */
+ public abstract void overrideServerLinkResource(Recipients recipients, ResourceLocationIcon icon);
+
+ /**
+ * Resets the server link menu title image for the {@link Recipients}.
+ *
+ * Reverts back to displaying the default menu title.
+ *
+ * @param recipients the recipients that are receiving the packet
+ * @since 1.2.5
+ */
+ public abstract void resetServerLinkResource(Recipients recipients);
+
+ /**
+ * Adds or updates the {@link ServerLink} for the {@link Recipients}.
+ *
+ * @param recipients the recipients that are receiving the packet
+ * @param serverLink the server link
+ * @since 1.2.5
+ */
+ public abstract void addServerLink(Recipients recipients, ServerLink serverLink);
+
+ /**
+ * Adds or updates the {@link ServerLink}s for the {@link Recipients}.
+ *
+ * @param recipients the recipients that are receiving the packet
+ * @param serverLinks the server links
+ * @since 1.2.5
+ */
+ public abstract void addServerLink(Recipients recipients, List serverLinks);
+
+ /**
+ * Removes the {@link ServerLink} from the {@link Recipients}.
+ *
+ * @param recipients the recipients that are receiving the packet
+ * @param serverLinkId the server link id
+ * @since 1.2.5
+ */
+ public abstract void removeServerLink(Recipients recipients, String serverLinkId);
+
+ /**
+ * Removes the {@link ServerLink} from the {@link Recipients}.
+ *
+ * @param recipients the recipients that are receiving the packet
+ * @param serverLink the server link
+ * @since 1.2.5
+ */
+ public abstract void removeServerLink(Recipients recipients, ServerLink serverLink);
+
+ /**
+ * Removes the {@link ServerLink}s from the {@link Recipients}.
+ *
+ * @param recipients the recipients that are receiving the packet
+ * @param serverLinkIds the server link ids
+ * @since 1.2.5
+ */
+ public abstract void removeServerLink(Recipients recipients, List serverLinkIds);
+
+ /**
+ * Resets all {@link ServerLink}s for the {@link Recipients}.
+ *
+ * @param recipients the recipients that are receiving the packet
+ * @since 1.2.5
+ */
+ public abstract void resetServerLinks(Recipients recipients);
+
+}
diff --git a/api/src/main/java/com/lunarclient/apollo/module/serverrule/ServerRuleModule.java b/api/src/main/java/com/lunarclient/apollo/module/serverrule/ServerRuleModule.java
index b7931ea71..01092e3f7 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/serverrule/ServerRuleModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/serverrule/ServerRuleModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/staffmod/StaffMod.java b/api/src/main/java/com/lunarclient/apollo/module/staffmod/StaffMod.java
index de64a3e96..6585a5b28 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/staffmod/StaffMod.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/staffmod/StaffMod.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/staffmod/StaffModModule.java b/api/src/main/java/com/lunarclient/apollo/module/staffmod/StaffModModule.java
index 5a8a348d7..ed1d99998 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/staffmod/StaffModModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/staffmod/StaffModModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/stopwatch/StopwatchModule.java b/api/src/main/java/com/lunarclient/apollo/module/stopwatch/StopwatchModule.java
index 71e47778f..bec983169 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/stopwatch/StopwatchModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/stopwatch/StopwatchModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/team/TeamMember.java b/api/src/main/java/com/lunarclient/apollo/module/team/TeamMember.java
index 7cf3befb6..25ceba6f1 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/team/TeamMember.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/team/TeamMember.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -29,6 +29,7 @@
import lombok.Builder;
import lombok.Getter;
import net.kyori.adventure.text.Component;
+import org.jetbrains.annotations.Nullable;
/**
* Represents a team which can be shown on the client.
@@ -50,23 +51,25 @@ public final class TeamMember {
/**
* Returns the team member's {@link Component}.
*
- * The display name is only used when the player
- * is out of render distance for the observer and when the
- * observer hovers over the marker.
+ * The display name is only shown when the player is outside
+ * the observer's render distance and when the observer hovers
+ * over the marker. If not provided, only the marker is displayed.
*
* @return the team member's display name
* @since 1.0.0
*/
- Component displayName;
+ @Nullable Component displayName;
/**
* Returns the team member's assigned {@link Color} - this will be used
* for any markers (such as on duration HUD, above head markers, etc).
*
+ * If not provided, the default color {@code 0xFFFFFFFF} is used.
+ *
* @return the team member's marker color
* @since 1.0.0
*/
- Color markerColor;
+ @Nullable Color markerColor;
/**
* Returns the team member's {@link ApolloLocation}.
@@ -78,6 +81,6 @@ public final class TeamMember {
* @return the team member location
* @since 1.0.0
*/
- ApolloLocation location;
+ @Nullable ApolloLocation location;
}
diff --git a/api/src/main/java/com/lunarclient/apollo/module/team/TeamModule.java b/api/src/main/java/com/lunarclient/apollo/module/team/TeamModule.java
index 20f613125..4a27f1047 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/team/TeamModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/team/TeamModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/tebex/TebexEmbeddedCheckoutSupport.java b/api/src/main/java/com/lunarclient/apollo/module/tebex/TebexEmbeddedCheckoutSupport.java
index 4f0685777..7634006dc 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/tebex/TebexEmbeddedCheckoutSupport.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/tebex/TebexEmbeddedCheckoutSupport.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/tebex/TebexModule.java b/api/src/main/java/com/lunarclient/apollo/module/tebex/TebexModule.java
index 48b90d36f..6fafb7601 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/tebex/TebexModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/tebex/TebexModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/title/Title.java b/api/src/main/java/com/lunarclient/apollo/module/title/Title.java
index ec207dfe4..2547de9de 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/title/Title.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/title/Title.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/title/TitleModule.java b/api/src/main/java/com/lunarclient/apollo/module/title/TitleModule.java
index f75cddd17..ca0cc6e1d 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/title/TitleModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/title/TitleModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/title/TitleType.java b/api/src/main/java/com/lunarclient/apollo/module/title/TitleType.java
index 66716704e..9841920ea 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/title/TitleType.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/title/TitleType.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/tntcountdown/TntCountdownModule.java b/api/src/main/java/com/lunarclient/apollo/module/tntcountdown/TntCountdownModule.java
index 77aa5d457..cb7db0668 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/tntcountdown/TntCountdownModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/tntcountdown/TntCountdownModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/transfer/PingRequest.java b/api/src/main/java/com/lunarclient/apollo/module/transfer/PingRequest.java
index 6d6558650..276404005 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/transfer/PingRequest.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/transfer/PingRequest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/transfer/PingResponse.java b/api/src/main/java/com/lunarclient/apollo/module/transfer/PingResponse.java
index 9a88b242a..645303d5f 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/transfer/PingResponse.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/transfer/PingResponse.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferModule.java b/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferModule.java
index 21ca0d73c..2d033f4d8 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferRequest.java b/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferRequest.java
index ebade2311..5054841a2 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferRequest.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferRequest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferResponse.java b/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferResponse.java
index 8a96c2c01..0fa8a17a9 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferResponse.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/transfer/TransferResponse.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/vignette/Vignette.java b/api/src/main/java/com/lunarclient/apollo/module/vignette/Vignette.java
index bc9937e34..21a44fb3f 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/vignette/Vignette.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/vignette/Vignette.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/vignette/VignetteModule.java b/api/src/main/java/com/lunarclient/apollo/module/vignette/VignetteModule.java
index 92b977917..4850786a3 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/vignette/VignetteModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/vignette/VignetteModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/waypoint/Waypoint.java b/api/src/main/java/com/lunarclient/apollo/module/waypoint/Waypoint.java
index 6fdf1eb17..39c534b30 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/waypoint/Waypoint.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/waypoint/Waypoint.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/module/waypoint/WaypointModule.java b/api/src/main/java/com/lunarclient/apollo/module/waypoint/WaypointModule.java
index 379d14159..176adab5c 100644
--- a/api/src/main/java/com/lunarclient/apollo/module/waypoint/WaypointModule.java
+++ b/api/src/main/java/com/lunarclient/apollo/module/waypoint/WaypointModule.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/option/EmptyOptions.java b/api/src/main/java/com/lunarclient/apollo/option/EmptyOptions.java
index 62bbe5dc3..c7449c183 100644
--- a/api/src/main/java/com/lunarclient/apollo/option/EmptyOptions.java
+++ b/api/src/main/java/com/lunarclient/apollo/option/EmptyOptions.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/option/EnumOption.java b/api/src/main/java/com/lunarclient/apollo/option/EnumOption.java
index 548d33cc9..e501175b2 100644
--- a/api/src/main/java/com/lunarclient/apollo/option/EnumOption.java
+++ b/api/src/main/java/com/lunarclient/apollo/option/EnumOption.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/option/ListOption.java b/api/src/main/java/com/lunarclient/apollo/option/ListOption.java
index c2d6bce08..09d048e16 100644
--- a/api/src/main/java/com/lunarclient/apollo/option/ListOption.java
+++ b/api/src/main/java/com/lunarclient/apollo/option/ListOption.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/option/NumberOption.java b/api/src/main/java/com/lunarclient/apollo/option/NumberOption.java
index a27a4a3de..dcfb3179b 100644
--- a/api/src/main/java/com/lunarclient/apollo/option/NumberOption.java
+++ b/api/src/main/java/com/lunarclient/apollo/option/NumberOption.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/option/Option.java b/api/src/main/java/com/lunarclient/apollo/option/Option.java
index 3a0115160..24d61baf9 100644
--- a/api/src/main/java/com/lunarclient/apollo/option/Option.java
+++ b/api/src/main/java/com/lunarclient/apollo/option/Option.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/option/OptionBuilder.java b/api/src/main/java/com/lunarclient/apollo/option/OptionBuilder.java
index ac9c44bf9..d1e46378a 100644
--- a/api/src/main/java/com/lunarclient/apollo/option/OptionBuilder.java
+++ b/api/src/main/java/com/lunarclient/apollo/option/OptionBuilder.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/option/Options.java b/api/src/main/java/com/lunarclient/apollo/option/Options.java
index 7c13447b1..a494f7ce4 100644
--- a/api/src/main/java/com/lunarclient/apollo/option/Options.java
+++ b/api/src/main/java/com/lunarclient/apollo/option/Options.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/option/SimpleOption.java b/api/src/main/java/com/lunarclient/apollo/option/SimpleOption.java
index 1ccb7533b..54b756a05 100644
--- a/api/src/main/java/com/lunarclient/apollo/option/SimpleOption.java
+++ b/api/src/main/java/com/lunarclient/apollo/option/SimpleOption.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/player/ApolloPlayer.java b/api/src/main/java/com/lunarclient/apollo/player/ApolloPlayer.java
index b64ff4481..3a2bc71f9 100644
--- a/api/src/main/java/com/lunarclient/apollo/player/ApolloPlayer.java
+++ b/api/src/main/java/com/lunarclient/apollo/player/ApolloPlayer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/player/ApolloPlayerManager.java b/api/src/main/java/com/lunarclient/apollo/player/ApolloPlayerManager.java
index a05387665..4543c6826 100644
--- a/api/src/main/java/com/lunarclient/apollo/player/ApolloPlayerManager.java
+++ b/api/src/main/java/com/lunarclient/apollo/player/ApolloPlayerManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/recipients/ForwardingRecipients.java b/api/src/main/java/com/lunarclient/apollo/recipients/ForwardingRecipients.java
index 57ad9993f..f89eb3281 100644
--- a/api/src/main/java/com/lunarclient/apollo/recipients/ForwardingRecipients.java
+++ b/api/src/main/java/com/lunarclient/apollo/recipients/ForwardingRecipients.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/recipients/Recipients.java b/api/src/main/java/com/lunarclient/apollo/recipients/Recipients.java
index dbf3da036..29f2f81a8 100644
--- a/api/src/main/java/com/lunarclient/apollo/recipients/Recipients.java
+++ b/api/src/main/java/com/lunarclient/apollo/recipients/Recipients.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloRequest.java b/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloRequest.java
index a163cf727..372d8ae3f 100644
--- a/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloRequest.java
+++ b/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloRequest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloResponse.java b/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloResponse.java
index 73e3bf2be..192894e6a 100644
--- a/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloResponse.java
+++ b/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloResponse.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloRoundtripManager.java b/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloRoundtripManager.java
index 5e7111f5b..bc70306bb 100644
--- a/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloRoundtripManager.java
+++ b/api/src/main/java/com/lunarclient/apollo/roundtrip/ApolloRoundtripManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/stats/ApolloPluginDescription.java b/api/src/main/java/com/lunarclient/apollo/stats/ApolloPluginDescription.java
index 48c121f65..bc2804aca 100644
--- a/api/src/main/java/com/lunarclient/apollo/stats/ApolloPluginDescription.java
+++ b/api/src/main/java/com/lunarclient/apollo/stats/ApolloPluginDescription.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/stats/ApolloStats.java b/api/src/main/java/com/lunarclient/apollo/stats/ApolloStats.java
index 03b16d930..e402137f8 100644
--- a/api/src/main/java/com/lunarclient/apollo/stats/ApolloStats.java
+++ b/api/src/main/java/com/lunarclient/apollo/stats/ApolloStats.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/util/ConfigTarget.java b/api/src/main/java/com/lunarclient/apollo/util/ConfigTarget.java
index 4f4a666c5..8957d0fa2 100644
--- a/api/src/main/java/com/lunarclient/apollo/util/ConfigTarget.java
+++ b/api/src/main/java/com/lunarclient/apollo/util/ConfigTarget.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/world/ApolloWorld.java b/api/src/main/java/com/lunarclient/apollo/world/ApolloWorld.java
index 84fe1ddc2..5ef9802f6 100644
--- a/api/src/main/java/com/lunarclient/apollo/world/ApolloWorld.java
+++ b/api/src/main/java/com/lunarclient/apollo/world/ApolloWorld.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/main/java/com/lunarclient/apollo/world/ApolloWorldManager.java b/api/src/main/java/com/lunarclient/apollo/world/ApolloWorldManager.java
index fc491cf66..86276c22e 100644
--- a/api/src/main/java/com/lunarclient/apollo/world/ApolloWorldManager.java
+++ b/api/src/main/java/com/lunarclient/apollo/world/ApolloWorldManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/minestom/java/com/lunarclient/apollo/MinestomApollo.java b/api/src/minestom/java/com/lunarclient/apollo/MinestomApollo.java
index fa8b42def..14144d2db 100644
--- a/api/src/minestom/java/com/lunarclient/apollo/MinestomApollo.java
+++ b/api/src/minestom/java/com/lunarclient/apollo/MinestomApollo.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/api/src/velocity/java/com/lunarclient/apollo/VelocityApollo.java b/api/src/velocity/java/com/lunarclient/apollo/VelocityApollo.java
index 460860daa..f88992ed2 100644
--- a/api/src/velocity/java/com/lunarclient/apollo/VelocityApollo.java
+++ b/api/src/velocity/java/com/lunarclient/apollo/VelocityApollo.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/ApolloConfig.java b/common/src/main/java/com/lunarclient/apollo/ApolloConfig.java
index 8ad9adced..06b1886a4 100644
--- a/common/src/main/java/com/lunarclient/apollo/ApolloConfig.java
+++ b/common/src/main/java/com/lunarclient/apollo/ApolloConfig.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/ApolloManager.java b/common/src/main/java/com/lunarclient/apollo/ApolloManager.java
index 0490073fe..c615bfca7 100644
--- a/common/src/main/java/com/lunarclient/apollo/ApolloManager.java
+++ b/common/src/main/java/com/lunarclient/apollo/ApolloManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/api/ApolloHttpManager.java b/common/src/main/java/com/lunarclient/apollo/api/ApolloHttpManager.java
index 532e03dd7..8cd7f7f56 100644
--- a/common/src/main/java/com/lunarclient/apollo/api/ApolloHttpManager.java
+++ b/common/src/main/java/com/lunarclient/apollo/api/ApolloHttpManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/api/request/DownloadFileRequest.java b/common/src/main/java/com/lunarclient/apollo/api/request/DownloadFileRequest.java
index d527d652a..6473a80ed 100644
--- a/common/src/main/java/com/lunarclient/apollo/api/request/DownloadFileRequest.java
+++ b/common/src/main/java/com/lunarclient/apollo/api/request/DownloadFileRequest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/api/request/ServerStartRequest.java b/common/src/main/java/com/lunarclient/apollo/api/request/ServerStartRequest.java
index c5b86e361..9990f84f9 100644
--- a/common/src/main/java/com/lunarclient/apollo/api/request/ServerStartRequest.java
+++ b/common/src/main/java/com/lunarclient/apollo/api/request/ServerStartRequest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/api/request/VersionRequest.java b/common/src/main/java/com/lunarclient/apollo/api/request/VersionRequest.java
index 7861877d1..a4677e9ac 100644
--- a/common/src/main/java/com/lunarclient/apollo/api/request/VersionRequest.java
+++ b/common/src/main/java/com/lunarclient/apollo/api/request/VersionRequest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/api/request/heartbeat/ServerHeartbeatRequest.java b/common/src/main/java/com/lunarclient/apollo/api/request/heartbeat/ServerHeartbeatRequest.java
index 2a7e5322f..22a48fa3a 100644
--- a/common/src/main/java/com/lunarclient/apollo/api/request/heartbeat/ServerHeartbeatRequest.java
+++ b/common/src/main/java/com/lunarclient/apollo/api/request/heartbeat/ServerHeartbeatRequest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/api/response/DownloadFileResponse.java b/common/src/main/java/com/lunarclient/apollo/api/response/DownloadFileResponse.java
index b8f010db5..e7e53c36c 100644
--- a/common/src/main/java/com/lunarclient/apollo/api/response/DownloadFileResponse.java
+++ b/common/src/main/java/com/lunarclient/apollo/api/response/DownloadFileResponse.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/api/response/ServerHeartbeatResponse.java b/common/src/main/java/com/lunarclient/apollo/api/response/ServerHeartbeatResponse.java
index 34c7d82d3..7f3b101e5 100644
--- a/common/src/main/java/com/lunarclient/apollo/api/response/ServerHeartbeatResponse.java
+++ b/common/src/main/java/com/lunarclient/apollo/api/response/ServerHeartbeatResponse.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/api/response/ServerStartResponse.java b/common/src/main/java/com/lunarclient/apollo/api/response/ServerStartResponse.java
index a536d6ce7..e70922c33 100644
--- a/common/src/main/java/com/lunarclient/apollo/api/response/ServerStartResponse.java
+++ b/common/src/main/java/com/lunarclient/apollo/api/response/ServerStartResponse.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/api/response/VersionResponse.java b/common/src/main/java/com/lunarclient/apollo/api/response/VersionResponse.java
index ae861a27b..a0355cf9c 100644
--- a/common/src/main/java/com/lunarclient/apollo/api/response/VersionResponse.java
+++ b/common/src/main/java/com/lunarclient/apollo/api/response/VersionResponse.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/command/AbstractApolloCommand.java b/common/src/main/java/com/lunarclient/apollo/command/AbstractApolloCommand.java
index 672625296..86c230430 100644
--- a/common/src/main/java/com/lunarclient/apollo/command/AbstractApolloCommand.java
+++ b/common/src/main/java/com/lunarclient/apollo/command/AbstractApolloCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/command/type/ApolloCommand.java b/common/src/main/java/com/lunarclient/apollo/command/type/ApolloCommand.java
index a18bf3231..ac1523101 100644
--- a/common/src/main/java/com/lunarclient/apollo/command/type/ApolloCommand.java
+++ b/common/src/main/java/com/lunarclient/apollo/command/type/ApolloCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/command/type/LunarClientCommand.java b/common/src/main/java/com/lunarclient/apollo/command/type/LunarClientCommand.java
index 74ba54c39..09d8faa36 100644
--- a/common/src/main/java/com/lunarclient/apollo/command/type/LunarClientCommand.java
+++ b/common/src/main/java/com/lunarclient/apollo/command/type/LunarClientCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/event/ApolloReceivePacketEvent.java b/common/src/main/java/com/lunarclient/apollo/event/ApolloReceivePacketEvent.java
index 3a75a4612..84fa25bd6 100644
--- a/common/src/main/java/com/lunarclient/apollo/event/ApolloReceivePacketEvent.java
+++ b/common/src/main/java/com/lunarclient/apollo/event/ApolloReceivePacketEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/event/ApolloSendPacketEvent.java b/common/src/main/java/com/lunarclient/apollo/event/ApolloSendPacketEvent.java
index 34dc08677..ff3a9bc0e 100644
--- a/common/src/main/java/com/lunarclient/apollo/event/ApolloSendPacketEvent.java
+++ b/common/src/main/java/com/lunarclient/apollo/event/ApolloSendPacketEvent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/mods/ApolloModsManager.java b/common/src/main/java/com/lunarclient/apollo/mods/ApolloModsManager.java
index 4925df21a..c2041755e 100644
--- a/common/src/main/java/com/lunarclient/apollo/mods/ApolloModsManager.java
+++ b/common/src/main/java/com/lunarclient/apollo/mods/ApolloModsManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/ApolloModuleManagerImpl.java b/common/src/main/java/com/lunarclient/apollo/module/ApolloModuleManagerImpl.java
index f744e82a2..3ff07e225 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/ApolloModuleManagerImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/ApolloModuleManagerImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/beam/BeamModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/beam/BeamModuleImpl.java
index dcaaf3e61..7353eb986 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/beam/BeamModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/beam/BeamModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/border/BorderModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/border/BorderModuleImpl.java
index 07d31e53a..d4677ec06 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/border/BorderModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/border/BorderModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/chat/ChatModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/chat/ChatModuleImpl.java
index 68dbdfd36..2ccedc8f4 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/chat/ChatModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/chat/ChatModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/coloredfire/ColoredFireModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/coloredfire/ColoredFireModuleImpl.java
index 117e35c5f..d4227e370 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/coloredfire/ColoredFireModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/coloredfire/ColoredFireModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownModuleImpl.java
index 7b602547a..ede716744 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/cooldown/CooldownModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -29,6 +29,7 @@
import com.lunarclient.apollo.network.NetworkTypes;
import com.lunarclient.apollo.player.AbstractApolloPlayer;
import com.lunarclient.apollo.recipients.Recipients;
+import java.awt.Color;
import lombok.NonNull;
/**
@@ -40,12 +41,17 @@ public final class CooldownModuleImpl extends CooldownModule {
@Override
public void displayCooldown(@NonNull Recipients recipients, @NonNull Cooldown cooldown) {
- DisplayCooldownMessage message = DisplayCooldownMessage.newBuilder()
+ DisplayCooldownMessage.Builder builder = DisplayCooldownMessage.newBuilder()
.setName(cooldown.getName())
.setDuration(NetworkTypes.toProtobuf(cooldown.getDuration()))
- .setIcon(NetworkTypes.toProtobuf(cooldown.getIcon()))
- .build();
+ .setIcon(NetworkTypes.toProtobuf(cooldown.getIcon()));
+
+ CooldownStyle style = cooldown.getStyle();
+ if (style != null) {
+ builder.setStyle(this.toProtobuf(style));
+ }
+ DisplayCooldownMessage message = builder.build();
recipients.forEach(player -> ((AbstractApolloPlayer) player).sendPacket(message));
}
@@ -69,4 +75,30 @@ public void resetCooldowns(@NonNull Recipients recipients) {
recipients.forEach(player -> ((AbstractApolloPlayer) player).sendPacket(message));
}
+ private com.lunarclient.apollo.cooldown.v1.CooldownStyle toProtobuf(CooldownStyle style) {
+ com.lunarclient.apollo.cooldown.v1.CooldownStyle.Builder builder = com.lunarclient.apollo.cooldown.v1.CooldownStyle.newBuilder();
+
+ Color circleStartColor = style.getCircleStartColor();
+ if (circleStartColor != null) {
+ builder.setCircleStartColor(NetworkTypes.toProtobuf(circleStartColor));
+ }
+
+ Color circleEndColor = style.getCircleEndColor();
+ if (circleEndColor != null) {
+ builder.setCircleEndColor(NetworkTypes.toProtobuf(circleEndColor));
+ }
+
+ Color circleEdgeColor = style.getCircleEdgeColor();
+ if (circleEdgeColor != null) {
+ builder.setCircleEdgeColor(NetworkTypes.toProtobuf(circleEdgeColor));
+ }
+
+ Color textColor = style.getTextColor();
+ if (textColor != null) {
+ builder.setTextColor(NetworkTypes.toProtobuf(textColor));
+ }
+
+ return builder.build();
+ }
+
}
diff --git a/common/src/main/java/com/lunarclient/apollo/module/entity/EntityModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/entity/EntityModuleImpl.java
index b5a28a87f..e2f6c3b43 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/entity/EntityModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/entity/EntityModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/glow/GlowModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/glow/GlowModuleImpl.java
index e74d94869..59ccdae0b 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/glow/GlowModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/glow/GlowModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/hologram/HologramModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/hologram/HologramModuleImpl.java
index 7fb39ce48..03518c0b4 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/hologram/HologramModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/hologram/HologramModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/limb/LimbModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/limb/LimbModuleImpl.java
index 560df7823..6a7e24d7b 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/limb/LimbModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/limb/LimbModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/modsettings/ModSettingModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/modsettings/ModSettingModuleImpl.java
index b959a32d0..477c6348f 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/modsettings/ModSettingModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/modsettings/ModSettingModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/nametag/NametagModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/nametag/NametagModuleImpl.java
index aedf81cc6..9164a4028 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/nametag/NametagModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/nametag/NametagModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/nickhider/NickHiderModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/nickhider/NickHiderModuleImpl.java
index 6ebe5afb7..11a2faaab 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/nickhider/NickHiderModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/nickhider/NickHiderModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/notification/NotificationModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/notification/NotificationModuleImpl.java
index 6e1283ee0..897b65e00 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/notification/NotificationModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/notification/NotificationModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentImpl.java b/common/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentImpl.java
index 3c4199a40..1446ef118 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/paynow/PayNowModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/paynow/PayNowModuleImpl.java
index 4a181cbc3..068c3c72d 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/paynow/PayNowModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/paynow/PayNowModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/richpresence/RichPresenceModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/richpresence/RichPresenceModuleImpl.java
index b24e466ce..afb224824 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/richpresence/RichPresenceModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/richpresence/RichPresenceModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/serverlink/ServerLinkModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/serverlink/ServerLinkModuleImpl.java
new file mode 100644
index 000000000..4427a9718
--- /dev/null
+++ b/common/src/main/java/com/lunarclient/apollo/module/serverlink/ServerLinkModuleImpl.java
@@ -0,0 +1,114 @@
+/*
+ * 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.module.serverlink;
+
+import com.lunarclient.apollo.common.ApolloComponent;
+import com.lunarclient.apollo.common.icon.ResourceLocationIcon;
+import com.lunarclient.apollo.network.NetworkTypes;
+import com.lunarclient.apollo.player.AbstractApolloPlayer;
+import com.lunarclient.apollo.recipients.Recipients;
+import com.lunarclient.apollo.serverlink.v1.AddServerLinkMessage;
+import com.lunarclient.apollo.serverlink.v1.OverrideServerLinkResourceMessage;
+import com.lunarclient.apollo.serverlink.v1.RemoveServerLinkMessage;
+import com.lunarclient.apollo.serverlink.v1.ResetServerLinkResourceMessage;
+import com.lunarclient.apollo.serverlink.v1.ResetServerLinksMessage;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+import lombok.NonNull;
+
+/**
+ * Provides the server link module.
+ *
+ * @since 1.2.5
+ */
+public final class ServerLinkModuleImpl extends ServerLinkModule {
+
+ @Override
+ public void overrideServerLinkResource(@NonNull Recipients recipients, @NonNull ResourceLocationIcon icon) {
+ OverrideServerLinkResourceMessage message = OverrideServerLinkResourceMessage.newBuilder()
+ .setIcon(NetworkTypes.toProtobuf(icon))
+ .build();
+
+ recipients.forEach(player -> ((AbstractApolloPlayer) player).sendPacket(message));
+ }
+
+ @Override
+ public void resetServerLinkResource(@NonNull Recipients recipients) {
+ ResetServerLinkResourceMessage message = ResetServerLinkResourceMessage.getDefaultInstance();
+ recipients.forEach(player -> ((AbstractApolloPlayer) player).sendPacket(message));
+ }
+
+ @Override
+ public void addServerLink(@NonNull Recipients recipients, @NonNull ServerLink serverLink) {
+ this.addServerLink(recipients, Collections.singletonList(serverLink));
+ }
+
+ @Override
+ public void addServerLink(@NonNull Recipients recipients, @NonNull List serverLinks) {
+ List serverLinksProto = serverLinks.stream()
+ .map(this::toProtobuf)
+ .collect(Collectors.toList());
+
+ AddServerLinkMessage message = AddServerLinkMessage.newBuilder()
+ .addAllServerLinks(serverLinksProto)
+ .build();
+
+ recipients.forEach(player -> ((AbstractApolloPlayer) player).sendPacket(message));
+ }
+
+ @Override
+ public void removeServerLink(@NonNull Recipients recipients, @NonNull String serverLinkId) {
+ this.removeServerLink(recipients, Collections.singletonList(serverLinkId));
+ }
+
+ @Override
+ public void removeServerLink(@NonNull Recipients recipients, @NonNull ServerLink serverLink) {
+ this.removeServerLink(recipients, Collections.singletonList(serverLink.getId()));
+ }
+
+ @Override
+ public void removeServerLink(@NonNull Recipients recipients, @NonNull List serverLinkIds) {
+ RemoveServerLinkMessage message = RemoveServerLinkMessage.newBuilder()
+ .addAllServerLinkIds(serverLinkIds)
+ .build();
+
+ recipients.forEach(player -> ((AbstractApolloPlayer) player).sendPacket(message));
+ }
+
+ @Override
+ public void resetServerLinks(@NonNull Recipients recipients) {
+ ResetServerLinksMessage message = ResetServerLinksMessage.getDefaultInstance();
+ recipients.forEach(player -> ((AbstractApolloPlayer) player).sendPacket(message));
+ }
+
+ private com.lunarclient.apollo.serverlink.v1.ServerLink toProtobuf(ServerLink serverLink) {
+ return com.lunarclient.apollo.serverlink.v1.ServerLink.newBuilder()
+ .setId(serverLink.getId())
+ .setDisplayNameAdventureJsonLines(ApolloComponent.toJson(serverLink.getDisplayName()))
+ .setUrl(serverLink.getUrl())
+ .build();
+ }
+
+}
diff --git a/common/src/main/java/com/lunarclient/apollo/module/staffmod/StaffModModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/staffmod/StaffModModuleImpl.java
index 7833de63f..c9a83db45 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/staffmod/StaffModModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/staffmod/StaffModModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/stopwatch/StopwatchModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/stopwatch/StopwatchModuleImpl.java
index 5f21ca11b..efba37df3 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/stopwatch/StopwatchModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/stopwatch/StopwatchModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/team/TeamModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/team/TeamModuleImpl.java
index 44f302e02..89005d292 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/team/TeamModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/team/TeamModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -24,14 +24,17 @@
package com.lunarclient.apollo.module.team;
import com.lunarclient.apollo.common.ApolloComponent;
+import com.lunarclient.apollo.common.location.ApolloLocation;
import com.lunarclient.apollo.network.NetworkTypes;
import com.lunarclient.apollo.player.AbstractApolloPlayer;
import com.lunarclient.apollo.recipients.Recipients;
import com.lunarclient.apollo.team.v1.ResetTeamMembersMessage;
import com.lunarclient.apollo.team.v1.UpdateTeamMembersMessage;
+import java.awt.Color;
import java.util.List;
import java.util.stream.Collectors;
import lombok.NonNull;
+import net.kyori.adventure.text.Component;
/**
* Provides the teams module.
@@ -43,13 +46,7 @@ public final class TeamModuleImpl extends TeamModule {
@Override
public void updateTeamMembers(@NonNull Recipients recipients, @NonNull List teamMembers) {
List teamMembersProto = teamMembers.stream()
- .map(teamMember -> com.lunarclient.apollo.team.v1.TeamMember.newBuilder()
- .setPlayerUuid(NetworkTypes.toProtobuf(teamMember.getPlayerUuid()))
- .setAdventureJsonPlayerName(ApolloComponent.toJson(teamMember.getDisplayName()))
- .setLocation(NetworkTypes.toProtobuf(teamMember.getLocation()))
- .setMarkerColor(NetworkTypes.toProtobuf(teamMember.getMarkerColor()))
- .build()
- )
+ .map(this::toProtobuf)
.collect(Collectors.toList());
UpdateTeamMembersMessage message = UpdateTeamMembersMessage.newBuilder()
@@ -65,4 +62,26 @@ public void resetTeamMembers(@NonNull Recipients recipients) {
recipients.forEach(player -> ((AbstractApolloPlayer) player).sendPacket(message));
}
+ private com.lunarclient.apollo.team.v1.TeamMember toProtobuf(TeamMember member) {
+ com.lunarclient.apollo.team.v1.TeamMember.Builder builder = com.lunarclient.apollo.team.v1.TeamMember.newBuilder()
+ .setPlayerUuid(NetworkTypes.toProtobuf(member.getPlayerUuid()));
+
+ Component displayName = member.getDisplayName();
+ if (displayName != null) {
+ builder.setAdventureJsonPlayerName(ApolloComponent.toJson(displayName));
+ }
+
+ Color markerColor = member.getMarkerColor();
+ if (markerColor != null) {
+ builder.setMarkerColor(NetworkTypes.toProtobuf(markerColor));
+ }
+
+ ApolloLocation location = member.getLocation();
+ if (location != null) {
+ builder.setLocation(NetworkTypes.toProtobuf(location));
+ }
+
+ return builder.build();
+ }
+
}
diff --git a/common/src/main/java/com/lunarclient/apollo/module/tebex/TebexModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/tebex/TebexModuleImpl.java
index 902773b8c..2b15fbd5c 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/tebex/TebexModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/tebex/TebexModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/title/TitleModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/title/TitleModuleImpl.java
index d9f2d7fb0..250a99c53 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/title/TitleModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/title/TitleModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/tntcountdown/TntCountdownModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/tntcountdown/TntCountdownModuleImpl.java
index d3629c20d..2697a60f3 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/tntcountdown/TntCountdownModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/tntcountdown/TntCountdownModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/transfer/TransferModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/transfer/TransferModuleImpl.java
index 2bfd185ca..6971cf566 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/transfer/TransferModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/transfer/TransferModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/vignette/VignetteModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/vignette/VignetteModuleImpl.java
index 1d43ef4b5..71e609a9c 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/vignette/VignetteModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/vignette/VignetteModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/module/waypoint/WaypointModuleImpl.java b/common/src/main/java/com/lunarclient/apollo/module/waypoint/WaypointModuleImpl.java
index a912eb746..608563ccd 100644
--- a/common/src/main/java/com/lunarclient/apollo/module/waypoint/WaypointModuleImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/module/waypoint/WaypointModuleImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/network/ApolloNetworkManager.java b/common/src/main/java/com/lunarclient/apollo/network/ApolloNetworkManager.java
index 463f84198..ee43fb743 100644
--- a/common/src/main/java/com/lunarclient/apollo/network/ApolloNetworkManager.java
+++ b/common/src/main/java/com/lunarclient/apollo/network/ApolloNetworkManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/network/NetworkOptions.java b/common/src/main/java/com/lunarclient/apollo/network/NetworkOptions.java
index 33f72d39e..e62fe44a5 100644
--- a/common/src/main/java/com/lunarclient/apollo/network/NetworkOptions.java
+++ b/common/src/main/java/com/lunarclient/apollo/network/NetworkOptions.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/network/NetworkTypes.java b/common/src/main/java/com/lunarclient/apollo/network/NetworkTypes.java
index 304c0e043..6d20395f0 100644
--- a/common/src/main/java/com/lunarclient/apollo/network/NetworkTypes.java
+++ b/common/src/main/java/com/lunarclient/apollo/network/NetworkTypes.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -30,6 +30,7 @@
import com.lunarclient.apollo.common.icon.AdvancedResourceLocationIcon;
import com.lunarclient.apollo.common.icon.Icon;
import com.lunarclient.apollo.common.icon.ItemStackIcon;
+import com.lunarclient.apollo.common.icon.ResourceLocationIcon;
import com.lunarclient.apollo.common.icon.SimpleResourceLocationIcon;
import com.lunarclient.apollo.common.location.ApolloBlockLocation;
import com.lunarclient.apollo.common.location.ApolloLocation;
@@ -484,37 +485,15 @@ public static com.lunarclient.apollo.common.v1.Icon toProtobuf(Icon icon) {
com.lunarclient.apollo.common.v1.Icon.Builder builder = com.lunarclient.apollo.common.v1.Icon.newBuilder();
if (icon instanceof ItemStackIcon) {
- ItemStackIcon item = (ItemStackIcon) icon;
- String itemName = item.getItemName();
-
- com.lunarclient.apollo.common.v1.ItemStackIcon.Builder itemBuilder = com.lunarclient.apollo.common.v1.ItemStackIcon.newBuilder()
- .setItemId(item.getItemId())
- .setCustomModelData(item.getCustomModelData());
-
- if (itemName != null) {
- itemBuilder.setItemName(itemName);
- }
-
- builder.setItemStack(itemBuilder.build());
+ builder.setItemStack(NetworkTypes.toProtobuf((ItemStackIcon) icon));
+ } else if (icon instanceof ResourceLocationIcon) {
+ builder.setResourceLocation(NetworkTypes.toProtobuf((ResourceLocationIcon) icon));
} else if (icon instanceof SimpleResourceLocationIcon) {
- SimpleResourceLocationIcon simple = (SimpleResourceLocationIcon) icon;
-
- builder.setSimpleResourceLocation(com.lunarclient.apollo.common.v1.SimpleResourceLocationIcon.newBuilder()
- .setResourceLocation(simple.getResourceLocation())
- .setSize(checkPositive(simple.getSize(), "SimpleResourceLocationIcon#size"))
- .build());
+ builder.setSimpleResourceLocation(NetworkTypes.toProtobuf((SimpleResourceLocationIcon) icon));
} else if (icon instanceof AdvancedResourceLocationIcon) {
- AdvancedResourceLocationIcon advanced = (AdvancedResourceLocationIcon) icon;
-
- builder.setAdvancedResourceLocation(com.lunarclient.apollo.common.v1.AdvancedResourceLocationIcon.newBuilder()
- .setResourceLocation(advanced.getResourceLocation())
- .setWidth(checkPositive(advanced.getWidth(), "AdvancedResourceLocationIcon#width"))
- .setHeight(checkPositive(advanced.getHeight(), "AdvancedResourceLocationIcon#height"))
- .setMinU(checkRange(advanced.getMinU(), 0, 1, "AdvancedResourceLocationIcon#minU"))
- .setMaxU(checkRange(advanced.getMaxU(), 0, 1, "AdvancedResourceLocationIcon#maxU"))
- .setMinV(checkRange(advanced.getMinV(), 0, 1, "AdvancedResourceLocationIcon#minV"))
- .setMaxV(checkRange(advanced.getMaxV(), 0, 1, "AdvancedResourceLocationIcon#maxV"))
- .build());
+ builder.setAdvancedResourceLocation(NetworkTypes.toProtobuf((AdvancedResourceLocationIcon) icon));
+ } else {
+ throw new IllegalArgumentException("Unknown icon type: " + icon.getClass().getName());
}
return builder.build();
@@ -530,35 +509,150 @@ public static com.lunarclient.apollo.common.v1.Icon toProtobuf(Icon icon) {
*/
public static Icon fromProtobuf(com.lunarclient.apollo.common.v1.Icon icon) {
if (icon.hasItemStack()) {
- com.lunarclient.apollo.common.v1.ItemStackIcon item = icon.getItemStack();
-
- return ItemStackIcon.builder()
- .itemName(item.getItemName())
- .itemId(item.getItemId())
- .customModelData(item.getCustomModelData())
- .build();
+ return NetworkTypes.fromProtobuf(icon.getItemStack());
+ } else if (icon.hasResourceLocation()) {
+ return NetworkTypes.fromProtobuf(icon.getResourceLocation());
} else if (icon.hasSimpleResourceLocation()) {
- com.lunarclient.apollo.common.v1.SimpleResourceLocationIcon simple = icon.getSimpleResourceLocation();
-
- return SimpleResourceLocationIcon.builder()
- .resourceLocation(simple.getResourceLocation())
- .size(simple.getSize())
- .build();
+ return NetworkTypes.fromProtobuf(icon.getSimpleResourceLocation());
} else if (icon.hasAdvancedResourceLocation()) {
- com.lunarclient.apollo.common.v1.AdvancedResourceLocationIcon advanced = icon.getAdvancedResourceLocation();
-
- return AdvancedResourceLocationIcon.builder()
- .resourceLocation(advanced.getResourceLocation())
- .width(advanced.getWidth())
- .height(advanced.getHeight())
- .minU(advanced.getMinU())
- .maxU(advanced.getMaxU())
- .minV(advanced.getMinV())
- .maxV(advanced.getMaxV())
- .build();
+ return NetworkTypes.fromProtobuf(icon.getAdvancedResourceLocation());
}
- return null;
+ throw new IllegalArgumentException("Unknown icon proto type");
+ }
+
+ /**
+ * Converts an {@link ItemStackIcon} to a
+ * {@link com.lunarclient.apollo.common.v1.ItemStackIcon} proto message.
+ *
+ * @param icon the item stack icon
+ * @return the proto item stack icon message
+ * @since 1.2.5
+ */
+ public static com.lunarclient.apollo.common.v1.ItemStackIcon toProtobuf(ItemStackIcon icon) {
+ com.lunarclient.apollo.common.v1.ItemStackIcon.Builder builder = com.lunarclient.apollo.common.v1.ItemStackIcon.newBuilder()
+ .setItemId(icon.getItemId())
+ .setCustomModelData(icon.getCustomModelData());
+
+ if (icon.getItemName() != null) {
+ builder.setItemName(icon.getItemName());
+ }
+
+ return builder.build();
+ }
+
+ /**
+ * Converts a {@link com.lunarclient.apollo.common.v1.ItemStackIcon}
+ * proto message to an {@link ItemStackIcon}.
+ *
+ * @param icon the item stack icon message
+ * @return the item stack icon
+ * @since 1.2.5
+ */
+ public static ItemStackIcon fromProtobuf(com.lunarclient.apollo.common.v1.ItemStackIcon icon) {
+ return ItemStackIcon.builder()
+ .itemName(icon.getItemName())
+ .itemId(icon.getItemId())
+ .customModelData(icon.getCustomModelData())
+ .build();
+ }
+
+ /**
+ * Converts a {@link ResourceLocationIcon} to a
+ * {@link com.lunarclient.apollo.common.v1.ResourceLocationIcon} proto message.
+ *
+ * @param icon the resource location icon
+ * @return the proto resource location icon message
+ * @since 1.2.5
+ */
+ public static com.lunarclient.apollo.common.v1.ResourceLocationIcon toProtobuf(ResourceLocationIcon icon) {
+ return com.lunarclient.apollo.common.v1.ResourceLocationIcon.newBuilder()
+ .setResourceLocation(icon.getResourceLocation())
+ .build();
+ }
+
+ /**
+ * Converts a {@link com.lunarclient.apollo.common.v1.ResourceLocationIcon}
+ * proto message to a {@link ResourceLocationIcon}.
+ *
+ * @param icon the resource location icon message
+ * @return the resource location icon
+ * @since 1.2.5
+ */
+ public static ResourceLocationIcon fromProtobuf(com.lunarclient.apollo.common.v1.ResourceLocationIcon icon) {
+ return ResourceLocationIcon.builder()
+ .resourceLocation(icon.getResourceLocation())
+ .build();
+ }
+
+ /**
+ * Converts a {@link SimpleResourceLocationIcon} to a
+ * {@link com.lunarclient.apollo.common.v1.SimpleResourceLocationIcon} proto message.
+ *
+ * @param icon the simple resource location icon
+ * @return the proto simple resource location icon message
+ * @since 1.2.5
+ */
+ public static com.lunarclient.apollo.common.v1.SimpleResourceLocationIcon toProtobuf(SimpleResourceLocationIcon icon) {
+ return com.lunarclient.apollo.common.v1.SimpleResourceLocationIcon.newBuilder()
+ .setResourceLocation(icon.getResourceLocation())
+ .setSize(checkPositive(icon.getSize(), "SimpleResourceLocationIcon#size"))
+ .build();
+ }
+
+ /**
+ * Converts a {@link com.lunarclient.apollo.common.v1.SimpleResourceLocationIcon}
+ * proto message to a {@link SimpleResourceLocationIcon}.
+ *
+ * @param icon the simple resource location icon message
+ * @return the simple resource location icon
+ * @since 1.2.5
+ */
+ public static SimpleResourceLocationIcon fromProtobuf(com.lunarclient.apollo.common.v1.SimpleResourceLocationIcon icon) {
+ return SimpleResourceLocationIcon.builder()
+ .resourceLocation(icon.getResourceLocation())
+ .size(icon.getSize())
+ .build();
+ }
+
+ /**
+ * Converts an {@link AdvancedResourceLocationIcon} to an
+ * {@link com.lunarclient.apollo.common.v1.AdvancedResourceLocationIcon} proto message.
+ *
+ * @param icon the advanced resource location icon
+ * @return the proto advanced resource location icon message
+ * @since 1.2.5
+ */
+ public static com.lunarclient.apollo.common.v1.AdvancedResourceLocationIcon toProtobuf(AdvancedResourceLocationIcon icon) {
+ return com.lunarclient.apollo.common.v1.AdvancedResourceLocationIcon.newBuilder()
+ .setResourceLocation(icon.getResourceLocation())
+ .setWidth(checkPositive(icon.getWidth(), "AdvancedResourceLocationIcon#width"))
+ .setHeight(checkPositive(icon.getHeight(), "AdvancedResourceLocationIcon#height"))
+ .setMinU(checkRange(icon.getMinU(), 0, 1, "AdvancedResourceLocationIcon#minU"))
+ .setMaxU(checkRange(icon.getMaxU(), 0, 1, "AdvancedResourceLocationIcon#maxU"))
+ .setMinV(checkRange(icon.getMinV(), 0, 1, "AdvancedResourceLocationIcon#minV"))
+ .setMaxV(checkRange(icon.getMaxV(), 0, 1, "AdvancedResourceLocationIcon#maxV"))
+ .build();
+ }
+
+ /**
+ * Converts an {@link com.lunarclient.apollo.common.v1.AdvancedResourceLocationIcon}
+ * proto message to an {@link AdvancedResourceLocationIcon}.
+ *
+ * @param icon the advanced resource location icon message
+ * @return the advanced resource location icon
+ * @since 1.2.5
+ */
+ public static AdvancedResourceLocationIcon fromProtobuf(com.lunarclient.apollo.common.v1.AdvancedResourceLocationIcon icon) {
+ return AdvancedResourceLocationIcon.builder()
+ .resourceLocation(icon.getResourceLocation())
+ .width(icon.getWidth())
+ .height(icon.getHeight())
+ .minU(icon.getMinU())
+ .maxU(icon.getMaxU())
+ .minV(icon.getMinV())
+ .maxV(icon.getMaxV())
+ .build();
}
private NetworkTypes() {
diff --git a/common/src/main/java/com/lunarclient/apollo/option/ConfigOptions.java b/common/src/main/java/com/lunarclient/apollo/option/ConfigOptions.java
index f61ba6751..483743dc6 100644
--- a/common/src/main/java/com/lunarclient/apollo/option/ConfigOptions.java
+++ b/common/src/main/java/com/lunarclient/apollo/option/ConfigOptions.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/option/OptionsImpl.java b/common/src/main/java/com/lunarclient/apollo/option/OptionsImpl.java
index 36e94015d..bd20e9eba 100644
--- a/common/src/main/java/com/lunarclient/apollo/option/OptionsImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/option/OptionsImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/option/StatusOptionsImpl.java b/common/src/main/java/com/lunarclient/apollo/option/StatusOptionsImpl.java
index 8b1edfc9c..e9cb12187 100644
--- a/common/src/main/java/com/lunarclient/apollo/option/StatusOptionsImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/option/StatusOptionsImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/option/config/CommonSerializers.java b/common/src/main/java/com/lunarclient/apollo/option/config/CommonSerializers.java
index c970f47ab..4462a8724 100644
--- a/common/src/main/java/com/lunarclient/apollo/option/config/CommonSerializers.java
+++ b/common/src/main/java/com/lunarclient/apollo/option/config/CommonSerializers.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/option/config/Serializer.java b/common/src/main/java/com/lunarclient/apollo/option/config/Serializer.java
index 820fde3f0..557724bc3 100644
--- a/common/src/main/java/com/lunarclient/apollo/option/config/Serializer.java
+++ b/common/src/main/java/com/lunarclient/apollo/option/config/Serializer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/option/config/Serializers.java b/common/src/main/java/com/lunarclient/apollo/option/config/Serializers.java
index 54fa972eb..7d7f5329a 100644
--- a/common/src/main/java/com/lunarclient/apollo/option/config/Serializers.java
+++ b/common/src/main/java/com/lunarclient/apollo/option/config/Serializers.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/player/AbstractApolloPlayer.java b/common/src/main/java/com/lunarclient/apollo/player/AbstractApolloPlayer.java
index fd2be6d34..3c383e455 100644
--- a/common/src/main/java/com/lunarclient/apollo/player/AbstractApolloPlayer.java
+++ b/common/src/main/java/com/lunarclient/apollo/player/AbstractApolloPlayer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/player/ApolloPlayerManagerImpl.java b/common/src/main/java/com/lunarclient/apollo/player/ApolloPlayerManagerImpl.java
index d0952fc99..71ddfaf07 100644
--- a/common/src/main/java/com/lunarclient/apollo/player/ApolloPlayerManagerImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/player/ApolloPlayerManagerImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/stats/ApolloStatsManager.java b/common/src/main/java/com/lunarclient/apollo/stats/ApolloStatsManager.java
index ba8da86f9..c63b43582 100644
--- a/common/src/main/java/com/lunarclient/apollo/stats/ApolloStatsManager.java
+++ b/common/src/main/java/com/lunarclient/apollo/stats/ApolloStatsManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/stats/ApolloStatsThread.java b/common/src/main/java/com/lunarclient/apollo/stats/ApolloStatsThread.java
index 404dcc634..b84890ece 100644
--- a/common/src/main/java/com/lunarclient/apollo/stats/ApolloStatsThread.java
+++ b/common/src/main/java/com/lunarclient/apollo/stats/ApolloStatsThread.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/stats/metadata/ApolloMetadataManager.java b/common/src/main/java/com/lunarclient/apollo/stats/metadata/ApolloMetadataManager.java
index e99485217..75ea93a84 100644
--- a/common/src/main/java/com/lunarclient/apollo/stats/metadata/ApolloMetadataManager.java
+++ b/common/src/main/java/com/lunarclient/apollo/stats/metadata/ApolloMetadataManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/stats/metadata/PlatformMetadata.java b/common/src/main/java/com/lunarclient/apollo/stats/metadata/PlatformMetadata.java
index d17181121..3164f9d40 100644
--- a/common/src/main/java/com/lunarclient/apollo/stats/metadata/PlatformMetadata.java
+++ b/common/src/main/java/com/lunarclient/apollo/stats/metadata/PlatformMetadata.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/util/Ranges.java b/common/src/main/java/com/lunarclient/apollo/util/Ranges.java
index 1d7af1a27..bf7bc7541 100644
--- a/common/src/main/java/com/lunarclient/apollo/util/Ranges.java
+++ b/common/src/main/java/com/lunarclient/apollo/util/Ranges.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/version/ApolloVersion.java b/common/src/main/java/com/lunarclient/apollo/version/ApolloVersion.java
index 9d9b68684..9cbdc177e 100644
--- a/common/src/main/java/com/lunarclient/apollo/version/ApolloVersion.java
+++ b/common/src/main/java/com/lunarclient/apollo/version/ApolloVersion.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/version/ApolloVersionManager.java b/common/src/main/java/com/lunarclient/apollo/version/ApolloVersionManager.java
index fce24d201..a4fa9b5b2 100644
--- a/common/src/main/java/com/lunarclient/apollo/version/ApolloVersionManager.java
+++ b/common/src/main/java/com/lunarclient/apollo/version/ApolloVersionManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/common/src/main/java/com/lunarclient/apollo/world/ApolloWorldManagerImpl.java b/common/src/main/java/com/lunarclient/apollo/world/ApolloWorldManagerImpl.java
index 7835ed80a..3ae1f7d6f 100644
--- a/common/src/main/java/com/lunarclient/apollo/world/ApolloWorldManagerImpl.java
+++ b/common/src/main/java/com/lunarclient/apollo/world/ApolloWorldManagerImpl.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/docs/developers/lightweight/json/_meta.json b/docs/developers/lightweight/json/_meta.json
index 38a141545..83eb3d8b5 100644
--- a/docs/developers/lightweight/json/_meta.json
+++ b/docs/developers/lightweight/json/_meta.json
@@ -1,6 +1,8 @@
{
"getting-started": "Getting Started",
"player-detection": "Player Detection",
+ "serverbound-packets": "Serverbound Packets",
+ "roundtrip-packets": "Roundtrip Packets",
"packet-util": "Packet Util",
"object-util": "Object Util",
"adventure-util": "Adventure Util"
diff --git a/docs/developers/lightweight/json/getting-started.mdx b/docs/developers/lightweight/json/getting-started.mdx
index bed60847d..63e03adcf 100644
--- a/docs/developers/lightweight/json/getting-started.mdx
+++ b/docs/developers/lightweight/json/getting-started.mdx
@@ -18,5 +18,7 @@ While constructing messages, note that the `@type` field isn't required if the m
🔗 [Detecting players using LunarClient](/apollo/developers/lightweight/json/player-detection)
🔗 [Common Apollo Objects](/apollo/developers/lightweight/json/object-util)
🔗 [Adventure Util](/apollo/developers/lightweight/json/adventure-util)
+🔗 [Apollo Serverbound packets](/apollo/developers/lightweight/json/serverbound-packets)
+🔗 [Apollo Roundtrip packets](/apollo/developers/lightweight/json/roundtrip-packets)
For examples of module integration, refer to the specific Module pages. Each page contains code samples under the `Manual JSON Object Construction` tab. For instance, you can find sample code for the `BorderModule` on its dedicated page [BorderModule](/apollo/developers/modules/border#sample-code) in the `Sample Code` section.
diff --git a/docs/developers/lightweight/json/object-util.mdx b/docs/developers/lightweight/json/object-util.mdx
index 1a79ade80..de62365e5 100644
--- a/docs/developers/lightweight/json/object-util.mdx
+++ b/docs/developers/lightweight/json/object-util.mdx
@@ -99,6 +99,16 @@ public static JsonObject createItemStackIconObject(@Nullable String itemName, in
return iconObject;
}
+public static JsonObject createResourceLocationIconObject(@NotNull String resourceLocation) {
+ JsonObject resourceIconObject = new JsonObject();
+ resourceIconObject.addProperty("resource_location", resourceLocation);
+
+ JsonObject iconObject = new JsonObject();
+ iconObject.add("resource_location", resourceIconObject);
+
+ return iconObject;
+}
+
public static JsonObject createSimpleResourceLocationIconObject(@NotNull String resourceLocation, int size) {
JsonObject simpleIconObject = new JsonObject();
simpleIconObject.addProperty("resource_location", resourceLocation);
diff --git a/docs/developers/lightweight/json/packet-util.mdx b/docs/developers/lightweight/json/packet-util.mdx
index 1a3a12e74..cbb8ef035 100644
--- a/docs/developers/lightweight/json/packet-util.mdx
+++ b/docs/developers/lightweight/json/packet-util.mdx
@@ -13,9 +13,9 @@ The methods in this utility leverage the same plugin messaging channel as the Ap
To utilize Apollo Modules, first define a list of the modules you want to use:
```java
-private static final List APOLLO_MODULES = Arrays.asList("limb", "beam", "border", "chat", "colored_fire", "combat", "cooldown",
- "entity", "glow", "hologram", "mod_setting", "nametag", "nick_hider", "notification", "packet_enrichment", "rich_presence",
- "server_rule", "staff_mod", "stopwatch", "team", "title", "tnt_countdown", "transfer", "vignette", "waypoint"
+private static final List APOLLO_MODULES = Arrays.asList("auto_text_hotkey", "beam", "border", "chat", "colored_fire", "combat", "cooldown",
+ "entity", "glint", "glow", "hologram", "inventory", "limb", "mod_setting", "nametag", "nick_hider", "notification", "pay_now", "packet_enrichment",
+ "rich_presence", "saturation", "server_rule", "staff_mod", "stopwatch", "team", "tebex", "title", "tnt_countdown", "transfer", "vignette", "waypoint"
);
```
@@ -31,9 +31,14 @@ Next, specify the properties for these modules. These properties are included in
private static final Table CONFIG_MODULE_PROPERTIES = HashBasedTable.create();
static {
- // Module Options that the client needs to notified about, these properties are sent with the enable module packet
+ // Module Options the client needs to be notified about. These properties are sent with the enable module packet.
// While using the Apollo plugin this would be equivalent to modifying the config.yml
CONFIG_MODULE_PROPERTIES.put("combat", "disable-miss-penalty", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-attack.send-packet", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-chat-open.send-packet", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-chat-close.send-packet", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-use-item.send-packet", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-use-item-bucket.send-packet", false);
CONFIG_MODULE_PROPERTIES.put("server_rule", "competitive-game", false);
CONFIG_MODULE_PROPERTIES.put("server_rule", "competitive-commands", Arrays.asList("/server", "/servers", "/hub"));
CONFIG_MODULE_PROPERTIES.put("server_rule", "disable-shaders", false);
diff --git a/docs/developers/lightweight/json/player-detection.mdx b/docs/developers/lightweight/json/player-detection.mdx
index 80b67ac2c..dafd5dbb7 100644
--- a/docs/developers/lightweight/json/player-detection.mdx
+++ b/docs/developers/lightweight/json/player-detection.mdx
@@ -16,7 +16,7 @@ This example demonstrates how to detect whether a player is using Lunar Client b
```java
public class ApolloPlayerJsonListener implements Listener {
- private final Set playersRunningApollo = new HashSet<>();
+ private static final Set PLAYERS_RUNNING_APOLLO = new HashSet<>();
public ApolloPlayerJsonListener(ApolloExamplePlugin plugin) {
Messenger messenger = Bukkit.getServer().getMessenger();
@@ -27,8 +27,8 @@ public class ApolloPlayerJsonListener implements Listener {
Bukkit.getPluginManager().registerEvents(this, plugin);
}
- private boolean isPlayerRunningApollo(Player player) {
- return this.playersRunningApollo.contains(player.getUniqueId());
+ public static boolean isPlayerRunningApollo(Player player) {
+ return PLAYERS_RUNNING_APOLLO.contains(player.getUniqueId());
}
@EventHandler
@@ -43,7 +43,7 @@ public class ApolloPlayerJsonListener implements Listener {
// Sending the player's world name to the client is required for some modules
JsonPacketUtil.sendPacket(player, this.createUpdatePlayerWorldMessage(player));
- this.playersRunningApollo.add(player.getUniqueId());
+ PLAYERS_RUNNING_APOLLO.add(player.getUniqueId());
player.sendMessage("You are using LunarClient!");
}
diff --git a/docs/developers/lightweight/json/roundtrip-packets.mdx b/docs/developers/lightweight/json/roundtrip-packets.mdx
new file mode 100644
index 000000000..c5315b4ee
--- /dev/null
+++ b/docs/developers/lightweight/json/roundtrip-packets.mdx
@@ -0,0 +1,90 @@
+import { Callout } from 'nextra-theme-docs'
+
+# Roundtrip Packets
+
+## Overview
+
+This example demonstrates how to handle roundtrip packets between the server and the Lunar Client using JSON messages. These packets are sent from the server, expecting a corresponding response from the client. The example utilizes a map to track the requests and their corresponding responses.
+
+
+ Note that this method uses a different plugin channel for
+ sending and receiving packets, which is `apollo:json`.
+
+
+## Integration
+
+```java
+public class ApolloRoundtripJsonListener implements PluginMessageListener {
+
+ private static final String TYPE_PREFIX = "type.googleapis.com/";
+ private static final JsonParser JSON_PARSER = new JsonParser();
+
+ @Getter
+ private static ApolloRoundtripJsonListener instance;
+
+ private final Map>> roundTripPacketFutures = new ConcurrentHashMap<>();
+ private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
+
+ public ApolloRoundtripJsonListener(ApolloExamplePlugin plugin) {
+ instance = this;
+ Bukkit.getServer().getMessenger().registerIncomingPluginChannel(plugin, "apollo:json", this);
+ }
+
+ @Override
+ public void onPluginMessageReceived(@NonNull String channel, @NonNull Player player, byte[] bytes) {
+ JsonObject payload;
+ try {
+ payload = JSON_PARSER.parse(new String(bytes, StandardCharsets.UTF_8)).getAsJsonObject();
+ } catch (Exception e) {
+ return;
+ }
+
+ if (!payload.has("@type")) {
+ return;
+ }
+
+ String type = payload.get("@type").getAsString();
+ if (type.startsWith(TYPE_PREFIX)) {
+ type = type.substring(TYPE_PREFIX.length());
+ }
+
+ if ("lunarclient.apollo.transfer.v1.PingResponse".equals(type)
+ || "lunarclient.apollo.transfer.v1.TransferResponse".equals(type)) {
+ UUID requestId = UUID.fromString(payload.get("request_id").getAsString().replace("+", "-"));
+ this.handleResponse(player, requestId, payload);
+ }
+ }
+
+ public CompletableFuture sendRequest(Player player, UUID requestId, JsonObject request, String requestType) {
+ request.addProperty("@type", TYPE_PREFIX + requestType);
+ request.addProperty("request_id", requestId.toString());
+ JsonPacketUtil.sendPacket(player, request);
+
+ CompletableFuture future = new CompletableFuture<>();
+
+ this.roundTripPacketFutures
+ .computeIfAbsent(player.getUniqueId(), k -> new ConcurrentHashMap<>())
+ .put(requestId, future);
+
+ ScheduledFuture> timeoutTask = this.executorService.schedule(() ->
+ future.completeExceptionally(new TimeoutException("Response timed out")),
+ 10, TimeUnit.SECONDS
+ );
+
+ future.whenComplete((result, throwable) -> timeoutTask.cancel(false));
+ return future;
+ }
+
+ private void handleResponse(Player player, UUID requestId, JsonObject message) {
+ Map> futures = this.roundTripPacketFutures.get(player.getUniqueId());
+ if (futures == null) {
+ return;
+ }
+
+ CompletableFuture future = futures.remove(requestId);
+ if (future != null) {
+ future.complete(message);
+ }
+ }
+}
+```
diff --git a/docs/developers/lightweight/json/serverbound-packets.mdx b/docs/developers/lightweight/json/serverbound-packets.mdx
new file mode 100644
index 000000000..fc86cf124
--- /dev/null
+++ b/docs/developers/lightweight/json/serverbound-packets.mdx
@@ -0,0 +1,144 @@
+import { Callout } from 'nextra-theme-docs'
+
+# Serverbound Packets
+
+## Overview
+
+Players using Lunar Client may send packets to the server for specific Apollo modules, such as the `PacketEnrichment Module` and/or when the player is joining the server. This example demonstrates how to handle packets sent from the client that are related to Apollo while using JSON messages.
+
+Additionally, the `Transfer Module` expects a response packet from the client after the server sends a request. For an example of how to handle roundtrip packets, visit [Packet Roundtrip Example](/apollo/developers/lightweight/json/roundtrip-packets)
+
+
+ Note that this method uses a different plugin channel for
+ sending and receiving packets, which is `apollo:json`.
+
+
+## Integration
+
+```java
+public class ApolloPacketReceiveJsonListener implements PluginMessageListener {
+
+ private static final String TYPE_PREFIX = "type.googleapis.com/";
+ private static final JsonParser JSON_PARSER = new JsonParser();
+
+ public ApolloPacketReceiveJsonListener(ApolloExamplePlugin plugin) {
+ Bukkit.getServer().getMessenger().registerIncomingPluginChannel(plugin, "apollo:json", this);
+ }
+
+ @Override
+ public void onPluginMessageReceived(@NonNull String channel, @NonNull Player player, byte[] bytes) {
+ JsonObject payload;
+ try {
+ payload = JSON_PARSER.parse(new String(bytes, StandardCharsets.UTF_8)).getAsJsonObject();
+ } catch (Exception e) {
+ return;
+ }
+
+ if (!payload.has("@type")) {
+ return;
+ }
+
+ String type = payload.get("@type").getAsString();
+ if (type.startsWith(TYPE_PREFIX)) {
+ type = type.substring(TYPE_PREFIX.length());
+ }
+
+ if ("lunarclient.apollo.player.v1.PlayerHandshakeMessage".equals(type)) {
+ this.onPlayerHandshake(payload);
+ }
+
+ // Packet Enrichment Module
+ if ("lunarclient.apollo.packetenrichment.v1.PlayerAttackMessage".equals(type)) {
+ this.onPlayerAttack(payload);
+ } else if ("lunarclient.apollo.packetenrichment.v1.PlayerChatOpenMessage".equals(type)) {
+ this.onPlayerChatOpen(payload);
+ } else if ("lunarclient.apollo.packetenrichment.v1.PlayerChatCloseMessage".equals(type)) {
+ this.onPlayerChatClose(payload);
+ } else if ("lunarclient.apollo.packetenrichment.v1.PlayerUseItemMessage".equals(type)) {
+ this.onPlayerUseItem(payload);
+ } else if ("lunarclient.apollo.packetenrichment.v1.PlayerUseItemBucketMessage".equals(type)) {
+ this.onPlayerUseItemBucket(payload);
+ }
+ }
+
+ private void onPlayerHandshake(JsonObject message) {
+ String checkoutSupport = message.get("embedded_checkout_support").getAsString();
+
+ JsonObject minecraftVersion = message.getAsJsonObject("minecraft_version");
+ String version = minecraftVersion.get("enum").getAsString();
+
+ JsonObject lunarClientVersion = message.getAsJsonObject("lunar_client_version");
+ String gitBranch = lunarClientVersion.get("git_branch").getAsString();
+ String gitCommit = lunarClientVersion.get("git_commit").getAsString();
+ String semVer = lunarClientVersion.get("semver").getAsString();
+
+ for (JsonElement element : message.getAsJsonArray("installed_mods")) {
+ JsonObject mod = element.getAsJsonObject();
+
+ String modId = mod.get("id").getAsString();
+ String displayName = mod.get("name").getAsString();
+ String modVersion = mod.get("version").getAsString();
+ String modType = mod.get("type").getAsString();
+ }
+ }
+
+ private void onPlayerAttack(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+
+ JsonObject targetInfo = message.getAsJsonObject("target_info");
+ JsonObject attackerInfo = message.getAsJsonObject("attacker_info");
+
+ this.onPlayerInfo(targetInfo);
+ this.onPlayerInfo(attackerInfo);
+ }
+
+ private void onPlayerChatOpen(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+ this.onPlayerInfo(message.getAsJsonObject("player_info"));
+ }
+
+ private void onPlayerChatClose(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+ this.onPlayerInfo(message.getAsJsonObject("player_info"));
+ }
+
+ private void onPlayerUseItem(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+ this.onPlayerInfo(message.getAsJsonObject("player_info"));
+
+ boolean mainHand = message.get("main_hand").getAsBoolean();
+ }
+
+ private void onPlayerUseItemBucket(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+ this.onPlayerInfo(message.getAsJsonObject("player_info"));
+
+ JsonObject rayTraceResult = message.getAsJsonObject("ray_trace_result");
+
+ if (rayTraceResult.has("block")) {
+ JsonObject blockHit = rayTraceResult.getAsJsonObject("block");
+
+ JsonObject hitLocation = blockHit.getAsJsonObject("hit_location");
+ JsonObject blockLocation = blockHit.getAsJsonObject("block_location");
+ String directionStr = blockHit.get("direction").getAsString();
+ } else if (rayTraceResult.has("entity")) {
+ JsonObject entityHit = rayTraceResult.getAsJsonObject("entity");
+
+ JsonObject hitLocation = entityHit.getAsJsonObject("hit_location");
+ String entityId = entityHit.get("entity_id").getAsString();
+ } else {
+ // MISS
+ }
+ }
+
+ private void onPlayerInfo(JsonObject info) {
+ UUID uuid = JsonUtil.toJavaUuid(info.getAsJsonObject("player_uuid"));
+ Location location = JsonUtil.toBukkitPlayerLocation(info.getAsJsonObject("location"));
+ boolean sneaking = info.get("sneaking").getAsBoolean();
+ boolean sprinting = info.get("sprinting").getAsBoolean();
+ boolean jumping = info.get("jumping").getAsBoolean();
+ float forwardSpeed = info.get("forward_speed").getAsFloat();
+ float strafeSpeed = info.get("strafe_speed").getAsFloat();
+ }
+}
+```
diff --git a/docs/developers/lightweight/protobuf/getting-started.mdx b/docs/developers/lightweight/protobuf/getting-started.mdx
index 467c0db9e..e7f159ad9 100644
--- a/docs/developers/lightweight/protobuf/getting-started.mdx
+++ b/docs/developers/lightweight/protobuf/getting-started.mdx
@@ -26,7 +26,7 @@ Available fields for each message, including their types, are available on the B
com.lunarclient
apollo-protos
- 0.0.6
+ 0.0.9
```
@@ -41,7 +41,7 @@ Available fields for each message, including their types, are available on the B
}
dependencies {
- api 'com.lunarclient:apollo-protos:0.0.6'
+ api 'com.lunarclient:apollo-protos:0.0.9'
}
```
@@ -55,7 +55,7 @@ Available fields for each message, including their types, are available on the B
}
dependencies {
- api("com.lunarclient:apollo-protos:0.0.6")
+ api("com.lunarclient:apollo-protos:0.0.9")
}
```
diff --git a/docs/developers/lightweight/protobuf/object-util.mdx b/docs/developers/lightweight/protobuf/object-util.mdx
index 51fb3278b..bff0bbdeb 100644
--- a/docs/developers/lightweight/protobuf/object-util.mdx
+++ b/docs/developers/lightweight/protobuf/object-util.mdx
@@ -7,12 +7,16 @@ These utilities facilitate the creation of Apollo objects, commonly used across
## Integration
```java
-public static UUID toJavaUuid(Uuid message) {
- return new UUID(message.getHigh64(), message.getLow64());
+public static UUID toJavaUuid(JsonObject obj) {
+ long high = Long.parseUnsignedLong(obj.get("high64").getAsString());
+ long low = Long.parseUnsignedLong(obj.get("low64").getAsString());
+ return new UUID(high, low);
}
-public static long toJavaTimestamp(Timestamp message) {
- return message.getSeconds() * 1000 + message.getNanos() / 1000000;
+public static long toJavaTimestamp(JsonObject timestampObject) {
+ JsonObject packetInfo = timestampObject.getAsJsonObject("packet_info");
+ String iso = packetInfo.get("instantiation_time").getAsString();
+ return Instant.parse(iso).toEpochMilli();
}
public static Uuid createUuidProto(UUID object) {
@@ -73,14 +77,19 @@ public static BlockLocation createBlockLocationProto(Location location) {
.build();
}
-public static Location toBukkitLocation(com.lunarclient.apollo.common.v1.Location message) {
- return new Location(Bukkit.getWorld(message.getWorld()), message.getX(), message.getY(), message.getZ());
+public static Location toBukkitLocation(JsonObject message) {
+ return new Location(
+ Bukkit.getWorld(message.get("world").getAsString()),
+ message.get("x").getAsDouble(),
+ message.get("y").getAsDouble(),
+ message.get("z").getAsDouble()
+ );
}
-public static Location toBukkitLocation(com.lunarclient.apollo.common.v1.PlayerLocation message) {
- Location location = ProtobufUtil.toBukkitLocation(message.getLocation());
- location.setYaw(message.getYaw());
- location.setPitch(message.getPitch());
+public static Location toBukkitPlayerLocation(JsonObject message) {
+ Location location = JsonUtil.toBukkitLocation(message.getAsJsonObject("location"));
+ location.setYaw(message.get("yaw").getAsFloat());
+ location.setPitch(message.get("pitch").getAsFloat());
return location;
}
```
@@ -88,7 +97,7 @@ public static Location toBukkitLocation(com.lunarclient.apollo.common.v1.PlayerL
Icon-related methods
```java
-public static Icon createItemStackIconProto(@Nullable String itemName, int itemId, int customModelData) {
+public static ItemStackIcon createItemStackIconProto(@Nullable String itemName, int itemId, int customModelData) {
ItemStackIcon.Builder iconBuilder = ItemStackIcon.newBuilder()
.setItemId(itemId)
.setCustomModelData(customModelData);
@@ -97,21 +106,25 @@ public static Icon createItemStackIconProto(@Nullable String itemName, int itemI
iconBuilder.setItemName(itemName);
}
- return Icon.newBuilder().setItemStack(iconBuilder.build()).build();
+ return iconBuilder.build();
}
-public static Icon createSimpleResourceLocationIconProto(String resourceLocation, int size) {
- SimpleResourceLocationIcon icon = SimpleResourceLocationIcon.newBuilder()
+public static ResourceLocationIcon createResourceLocationIconProto(String resourceLocation) {
+ return ResourceLocationIcon.newBuilder()
.setResourceLocation(resourceLocation)
- .setSize(size)
.build();
+}
- return Icon.newBuilder().setSimpleResourceLocation(icon).build();
+public static SimpleResourceLocationIcon createSimpleResourceLocationIconProto(String resourceLocation, int size) {
+ return SimpleResourceLocationIcon.newBuilder()
+ .setResourceLocation(resourceLocation)
+ .setSize(size)
+ .build();
}
-public static Icon createAdvancedResourceLocationIconProto(String resourceLocation, float width, float height,
+public static AdvancedResourceLocationIcon createAdvancedResourceLocationIconProto(String resourceLocation, float width, float height,
float minU, float maxU, float minV, float maxV) {
- AdvancedResourceLocationIcon icon = AdvancedResourceLocationIcon.newBuilder()
+ return AdvancedResourceLocationIcon.newBuilder()
.setResourceLocation(resourceLocation)
.setWidth(width)
.setHeight(height)
@@ -120,7 +133,5 @@ public static Icon createAdvancedResourceLocationIconProto(String resourceLocati
.setMinV(minV)
.setMaxV(maxV)
.build();
-
- return Icon.newBuilder().setAdvancedResourceLocation(icon).build();
}
```
diff --git a/docs/developers/lightweight/protobuf/packet-util.mdx b/docs/developers/lightweight/protobuf/packet-util.mdx
index 19ad54521..bca907ab1 100644
--- a/docs/developers/lightweight/protobuf/packet-util.mdx
+++ b/docs/developers/lightweight/protobuf/packet-util.mdx
@@ -13,9 +13,9 @@ The methods in this utility leverage the same plugin messaging channel as the Ap
To utilize Apollo Modules, first define a list of the modules you want to use:
```java
-private static final List APOLLO_MODULES = Arrays.asList("limb", "beam", "border", "chat", "colored_fire", "combat", "cooldown",
- "entity", "glow", "hologram", "mod_setting", "nametag", "nick_hider", "notification", "packet_enrichment", "rich_presence",
- "server_rule", "staff_mod", "stopwatch", "team", "title", "tnt_countdown", "transfer", "vignette", "waypoint"
+private static final List APOLLO_MODULES = Arrays.asList("auto_text_hotkey", "beam", "border", "chat", "colored_fire", "combat", "cooldown",
+ "entity", "glint", "glow", "hologram", "inventory", "limb", "mod_setting", "nametag", "nick_hider", "notification", "pay_now", "packet_enrichment",
+ "rich_presence", "saturation", "server_rule", "staff_mod", "stopwatch", "team", "tebex", "title", "tnt_countdown", "transfer", "vignette", "waypoint"
);
```
@@ -31,7 +31,14 @@ Next, specify the properties for these modules. These properties are included in
private static final Table CONFIG_MODULE_PROPERTIES = HashBasedTable.create();
static {
+ // Module Options the client needs to be notified about. These properties are sent with the enable module packet.
+ // While using the Apollo plugin this would be equivalent to modifying the config.yml
CONFIG_MODULE_PROPERTIES.put("combat", "disable-miss-penalty", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-attack.send-packet", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-chat-open.send-packet", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-chat-close.send-packet", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-use-item.send-packet", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-use-item-bucket.send-packet", Value.newBuilder().setBoolValue(false).build());
CONFIG_MODULE_PROPERTIES.put("server_rule", "competitive-game", Value.newBuilder().setBoolValue(false).build());
CONFIG_MODULE_PROPERTIES.put("server_rule", "competitive-commands", Value.newBuilder().setListValue(
ListValue.newBuilder().addAllValues(Arrays.asList(
diff --git a/docs/developers/lightweight/protobuf/player-detection.mdx b/docs/developers/lightweight/protobuf/player-detection.mdx
index 40c8af50a..5e324ae49 100644
--- a/docs/developers/lightweight/protobuf/player-detection.mdx
+++ b/docs/developers/lightweight/protobuf/player-detection.mdx
@@ -9,7 +9,7 @@ This example demonstrates how to detect whether a player is using Lunar Client b
```java
public class ApolloPlayerProtoListener implements Listener {
- private final Set playersRunningApollo = new HashSet<>();
+ private static final Set PLAYERS_RUNNING_APOLLO = new HashSet<>();
public ApolloPlayerProtoListener(ApolloExamplePlugin plugin) {
Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(plugin, "lunar:apollo");
@@ -17,8 +17,8 @@ public class ApolloPlayerProtoListener implements Listener {
Bukkit.getPluginManager().registerEvents(this, plugin);
}
- private boolean isPlayerRunningApollo(Player player) {
- return this.playersRunningApollo.contains(player.getUniqueId());
+ public static boolean isPlayerRunningApollo(Player player) {
+ return PLAYERS_RUNNING_APOLLO.contains(player.getUniqueId());
}
@EventHandler
@@ -33,7 +33,7 @@ public class ApolloPlayerProtoListener implements Listener {
// Sending the player's world name to the client is required for some modules
ProtobufPacketUtil.sendPacket(player, this.createUpdatePlayerWorldMessage(player));
- this.playersRunningApollo.add(player.getUniqueId());
+ PLAYERS_RUNNING_APOLLO.add(player.getUniqueId());
player.sendMessage("You are using LunarClient!");
}
diff --git a/docs/developers/lightweight/protobuf/roundtrip-packets.mdx b/docs/developers/lightweight/protobuf/roundtrip-packets.mdx
index 0bc35d0bc..461a9f30a 100644
--- a/docs/developers/lightweight/protobuf/roundtrip-packets.mdx
+++ b/docs/developers/lightweight/protobuf/roundtrip-packets.mdx
@@ -21,7 +21,7 @@ public class ApolloRoundtripProtoListener implements PluginMessageListener {
}
@Override
- public void onPluginMessageReceived(String s, Player player, byte[] bytes) {
+ public void onPluginMessageReceived(@NonNull String channel, @NonNull Player player, byte[] bytes) {
try {
Any any = Any.parseFrom(bytes);
diff --git a/docs/developers/lightweight/protobuf/serverbound-packets.mdx b/docs/developers/lightweight/protobuf/serverbound-packets.mdx
index c7dc9ab3d..6690301be 100644
--- a/docs/developers/lightweight/protobuf/serverbound-packets.mdx
+++ b/docs/developers/lightweight/protobuf/serverbound-packets.mdx
@@ -16,7 +16,7 @@ public class ApolloPacketReceiveProtoListener implements PluginMessageListener {
}
@Override
- public void onPluginMessageReceived(String s, Player player, byte[] bytes) {
+ public void onPluginMessageReceived(@NonNull String channel, @NonNull Player player, byte[] bytes) {
try {
Any any = Any.parseFrom(bytes);
@@ -33,6 +33,8 @@ public class ApolloPacketReceiveProtoListener implements PluginMessageListener {
this.onPlayerChatClose(any.unpack(PlayerChatCloseMessage.class));
} else if (any.is(PlayerUseItemMessage.class)) {
this.onPlayerUseItem(any.unpack(PlayerUseItemMessage.class));
+ } else if (any.is(PlayerUseItemBucketMessage.class)) {
+ this.onPlayerUseItemBucket(any.unpack(PlayerUseItemBucketMessage.class));
}
} catch (InvalidProtocolBufferException e) {
throw new RuntimeException(e);
@@ -40,6 +42,7 @@ public class ApolloPacketReceiveProtoListener implements PluginMessageListener {
}
private void onPlayerHandshake(PlayerHandshakeMessage message) {
+ EmbeddedCheckoutSupport checkoutSupport = message.getEmbeddedCheckoutSupport();
MinecraftVersion minecraftVersion = message.getMinecraftVersion();
LunarClientVersion lunarClientVersion = message.getLunarClientVersion();
@@ -89,9 +92,32 @@ public class ApolloPacketReceiveProtoListener implements PluginMessageListener {
boolean mainHand = message.getMainHand();
}
+ private void onPlayerUseItemBucket(PlayerUseItemBucketMessage message) {
+ long instantiationTimeMs = ProtobufUtil.toJavaTimestamp(message.getPacketInfo().getInstantiationTime());
+
+ PlayerInfo playerInfo = message.getPlayerInfo();
+ this.onPlayerInfo(playerInfo);
+
+ RayTraceResult rayTraceResult = message.getRayTraceResult();
+
+ if (rayTraceResult.hasBlock()) {
+ BlockHit blockHit = rayTraceResult.getBlock();
+
+ Location hitLocation = blockHit.getHitLocation();
+ BlockLocation blockLocation = blockHit.getBlockLocation();
+ Direction direction = blockHit.getDirection();
+ } else if (rayTraceResult.hasEntity()) {
+ EntityHit entityHit = rayTraceResult.getEntity();
+ Location hitLocation = entityHit.getHitLocation();
+ EntityId entityId = entityHit.getEntityId();
+ } else {
+ // Miss
+ }
+ }
+
private void onPlayerInfo(PlayerInfo info) {
UUID uuid = ProtobufUtil.toJavaUuid(info.getPlayerUuid());
- Location location = ProtobufUtil.toBukkitLocation(info.getLocation());
+ org.bukkit.Location location = ProtobufUtil.toBukkitLocation(info.getLocation());
boolean sneaking = info.getSneaking();
boolean sprinting = info.getSprinting();
boolean jumping = info.getJumping();
diff --git a/docs/developers/modules/_meta.json b/docs/developers/modules/_meta.json
index 02faf06d0..1f3fba9c1 100644
--- a/docs/developers/modules/_meta.json
+++ b/docs/developers/modules/_meta.json
@@ -20,6 +20,7 @@
"packetenrichment": "Packet Enrichment",
"richpresence": "Rich Presence",
"saturation": "Saturation",
+ "serverlink": "Server Link",
"serverrule": "Server Rule",
"staffmod": "Staff Mod",
"stopwatch": "Stopwatch",
diff --git a/docs/developers/modules/cooldown.mdx b/docs/developers/modules/cooldown.mdx
index 4264a826b..16c48fe49 100644
--- a/docs/developers/modules/cooldown.mdx
+++ b/docs/developers/modules/cooldown.mdx
@@ -45,6 +45,31 @@ public void displayCooldownItemExample(Player viewer) {
}
```
+### Displaying a Cooldown with a custom style
+
+```java
+public void displayCooldownWithStyleExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ this.cooldownModule.displayCooldown(apolloPlayer, Cooldown.builder()
+ .name("book-cooldown")
+ .duration(Duration.ofSeconds(30))
+ .icon(ItemStackIcon.builder()
+ .itemName("BOOK")
+ .build())
+ .style(CooldownStyle.builder()
+ .circleStartColor(ApolloColors.RED)
+ .circleEndColor(ApolloColors.GREEN)
+ .circleEdgeColor(ApolloColors.DARK_GRAY)
+ .textColor(ApolloColors.LIGHT_PURPLE)
+ .build())
+ .build()
+ );
+ });
+}
+```
+
### Displaying a Cooldown with a resource
```java
@@ -56,8 +81,8 @@ public void displayCooldownResourceExample(Player viewer) {
.name("lunar-cooldown")
.duration(Duration.ofSeconds(15))
.icon(SimpleResourceLocationIcon.builder()
- .resourceLocation("lunar:logo/logo-200x182.svg")
- .size(12)
+ .resourceLocation("lunar:logo/logo-64x64.png")
+ .size(24)
.build()
)
.build()
@@ -74,6 +99,7 @@ public void removeCooldownExample(Player viewer) {
apolloPlayerOpt.ifPresent(apolloPlayer -> {
this.cooldownModule.removeCooldown(apolloPlayer, "enderpearl-cooldown");
+ this.cooldownModule.removeCooldown(apolloPlayer, "book-cooldown");
this.cooldownModule.removeCooldown(apolloPlayer, "lunar-cooldown");
});
}
@@ -107,9 +133,43 @@ public void resetCooldownsExample(Player viewer) {
`.icon(SimpleResourceLocationIcon)` is how you display a custom texture icon. Read the [icons utilities page](/apollo/developers/utilities/icons) to learn more about icons.
```java
-.icon(SimpleResourceLocationIcon.builder().resourceLocation("lunar:logo/logo-200x182.svg").size(12).build())
+.icon(SimpleResourceLocationIcon.builder().resourceLocation("lunar:logo/logo-64x64.png").size(24).build())
```
+`.style(CooldownStyle)` is how you customize the visual appearance of the cooldown circle and text. See the `CooldownStyle` section below for more.
+```java
+.style(CooldownStyle.builder()
+ .circleStartColor(ApolloColors.RED)
+ .circleEndColor(ApolloColors.GREEN)
+ .circleEdgeColor(ApolloColors.DARK_GRAY)
+ .textColor(ApolloColors.LIGHT_PURPLE)
+ .build())
+```
+
+### `CooldownStyle` Options
+
+`.circleStartColor(java.awt.Color)` is the color displayed at the start of the cooldown circle animation. See the [colors page](/apollo/developers/utilities/colors) for more.
+```java
+.circleStartColor(ApolloColors.RED)
+```
+
+`.circleEndColor(java.awt.Color)` is the color displayed at the end of the cooldown circle animation. See the [colors page](/apollo/developers/utilities/colors) for more.
+```java
+.circleEndColor(ApolloColors.GREEN)
+```
+
+`.circleEdgeColor(java.awt.Color)` is the color of the circle's edge/border. See the [colors page](/apollo/developers/utilities/colors) for more.
+```java
+.circleEdgeColor(ApolloColors.DARK_GRAY)
+```
+
+`.textColor(java.awt.Color)` is the color of the cooldown timer text rendered in the center of the circle. See the [colors page](/apollo/developers/utilities/colors) for more.
+```java
+.textColor(ApolloColors.LIGHT_PURPLE)
+```
+
+All `CooldownStyle` fields are optional; any field left unset will fall back to the client's default value.
+
@@ -121,7 +181,31 @@ public void displayCooldownItemExample(Player viewer) {
DisplayCooldownMessage message = DisplayCooldownMessage.newBuilder()
.setName("enderpearl-cooldown")
.setDuration(ProtobufUtil.createDurationProto(Duration.ofSeconds(15)))
- .setIcon(ProtobufUtil.createItemStackIconProto("ENDER_PEARL", 0, 0))
+ .setIcon(Icon.newBuilder()
+ .setItemStack(ProtobufUtil.createItemStackIconProto("ENDER_PEARL", 0, 0))
+ .build())
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+}
+```
+
+**Displaying a Cooldown with a custom style**
+
+```java
+public void displayCooldownWithStyleExample(Player viewer) {
+ DisplayCooldownMessage message = DisplayCooldownMessage.newBuilder()
+ .setName("book-cooldown")
+ .setDuration(ProtobufUtil.createDurationProto(Duration.ofSeconds(30)))
+ .setIcon(Icon.newBuilder()
+ .setItemStack(ProtobufUtil.createItemStackIconProto("BOOK", 0, 0))
+ .build())
+ .setStyle(CooldownStyle.newBuilder()
+ .setCircleStartColor(ProtobufUtil.createColorProto(new Color(255, 85, 85))) // ApolloColors.RED
+ .setCircleEndColor(ProtobufUtil.createColorProto(new Color(85, 255, 85))) // ApolloColors.GREEN
+ .setCircleEdgeColor(ProtobufUtil.createColorProto(new Color(85, 85, 85))) // ApolloColors.DAR_GRAY
+ .setTextColor(ProtobufUtil.createColorProto(new Color(255, 85, 255))) // ApolloColors.LIGHT_PURPLE
+ .build())
.build();
ProtobufPacketUtil.sendPacket(viewer, message);
@@ -135,7 +219,9 @@ public void displayCooldownResourceExample(Player viewer) {
DisplayCooldownMessage message = DisplayCooldownMessage.newBuilder()
.setName("lunar-cooldown")
.setDuration(ProtobufUtil.createDurationProto(Duration.ofSeconds(15)))
- .setIcon(ProtobufUtil.createSimpleResourceLocationIconProto("lunar:logo/logo-200x182.svg", 12))
+ .setIcon(Icon.newBuilder()
+ .setSimpleResourceLocation(ProtobufUtil.createSimpleResourceLocationIconProto("lunar:logo/logo-64x64.png", 24))
+ .build())
.build();
ProtobufPacketUtil.sendPacket(viewer, message);
@@ -181,6 +267,27 @@ public void displayCooldownItemExample(Player viewer) {
}
```
+**Displaying a Cooldown with a custom style**
+
+```java
+public void displayCooldownWithStyleExample(Player viewer) {
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.cooldown.v1.DisplayCooldownMessage");
+ message.addProperty("name", "book-cooldown");
+ message.addProperty("duration", JsonUtil.createDurationObject(Duration.ofSeconds(30)));
+ message.add("icon", JsonUtil.createItemStackIconObject("BOOK", 0, 0));
+
+ JsonObject style = new JsonObject();
+ style.add("circle_start_color", JsonUtil.createColorObject(new Color(255, 85, 85))); // ApolloColors.RED
+ style.add("circle_end_color", JsonUtil.createColorObject(new Color(85, 255, 85))); // ApolloColors.GREEN
+ style.add("circle_edge_color", JsonUtil.createColorObject(new Color(85, 85, 85))); // ApolloColors.DAR_GRAY
+ style.add("text_color", JsonUtil.createColorObject(new Color(255, 85, 255))); // ApolloColors.LIGHT_PURPLE
+ message.add("style", style);
+
+ JsonPacketUtil.sendPacket(viewer, message);
+}
+```
+
**Displaying a Cooldown with a resource**
```java
@@ -189,7 +296,7 @@ public void displayCooldownResourceExample(Player viewer) {
message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.cooldown.v1.DisplayCooldownMessage");
message.addProperty("name", "lunar-cooldown");
message.addProperty("duration", JsonUtil.createDurationObject(Duration.ofSeconds(15)));
- message.add("icon", JsonUtil.createSimpleResourceLocationIconObject("lunar:logo/logo-200x182.svg", 12));
+ message.add("icon", JsonUtil.createSimpleResourceLocationIconObject("lunar:logo/logo-64x64.png", 24));
JsonPacketUtil.sendPacket(viewer, message);
}
diff --git a/docs/developers/modules/hologram.mdx b/docs/developers/modules/hologram.mdx
index 5cc882065..db5ab913e 100644
--- a/docs/developers/modules/hologram.mdx
+++ b/docs/developers/modules/hologram.mdx
@@ -88,7 +88,7 @@ public void resetHologramsExample(Player viewer) {
)
```
-`.lines(Component)` should be a string, or an Adventure `Component`. See the [chat components](https://docs.advntr.dev/text.html) page for more.
+`.lines(Component)` is using the Adventure `Component`. See the [chat components](https://docs.advntr.dev/text.html) page for more.
```java
.lines(List.of(
diff --git a/docs/developers/modules/nametag.mdx b/docs/developers/modules/nametag.mdx
index 679cfcf22..5ca13ec02 100644
--- a/docs/developers/modules/nametag.mdx
+++ b/docs/developers/modules/nametag.mdx
@@ -81,7 +81,7 @@ public void resetNametagsExample(Player viewer) {
### `Nametag` Options
-`.lines(Component)` should be a string, or an Adventure `Component`. See the [chat components](https://docs.advntr.dev/text.html) page for more.
+`.lines(Component)` is using the Adventure `Component`. See the [chat components](https://docs.advntr.dev/text.html) page for more.
```java
.lines(List.of(
diff --git a/docs/developers/modules/notification.mdx b/docs/developers/modules/notification.mdx
index b88c2b6d3..f9b506b1b 100644
--- a/docs/developers/modules/notification.mdx
+++ b/docs/developers/modules/notification.mdx
@@ -41,7 +41,7 @@ public void displayNotificationExample(Player viewer) {
.append(Component.newline())
.append(Component.text("Good luck!", NamedTextColor.GOLD))
)
- .resourceLocation("icons/golden_apple.png") // This field is optional
+ .resourceLocation("textures/items/apple_golden.png") // This field is optional
.displayTime(Duration.ofSeconds(5))
.build());
});
@@ -78,7 +78,7 @@ public void resetNotificationsExample(Player viewer) {
`.resourceLocation(String)` is the resource location of the shown icon.
```java
-.resourceLocation("icons/golden_apple.png")
+.resourceLocation("textures/items/apple_golden.png")
```
`.displayTime(java.time.Duration)` is the duration you want to keep the notification on screen. See the [java.time.Duration Javadocs](https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html) for more.
@@ -125,7 +125,7 @@ public void displayNotificationExample(Player viewer) {
.append(Component.text("Good luck!", NamedTextColor.GOLD))
)
)
- .setResourceLocation("icons/golden_apple.png") // This field is optional
+ .setResourceLocation("textures/items/apple_golden.png") // This field is optional
.setDisplayTime(ProtobufUtil.createDurationProto(Duration.ofSeconds(5)))
.build();
@@ -164,7 +164,7 @@ public void displayNotificationExample(Player viewer) {
));
message.addProperty("display_time", JsonUtil.createDurationObject(Duration.ofSeconds(5)));
- message.addProperty("resource_location", "icons/golden_apple.png");
+ message.addProperty("resource_location", "textures/items/apple_golden.png");
JsonPacketUtil.sendPacket(viewer, message);
}
diff --git a/docs/developers/modules/serverlink.mdx b/docs/developers/modules/serverlink.mdx
new file mode 100644
index 000000000..081a2dec8
--- /dev/null
+++ b/docs/developers/modules/serverlink.mdx
@@ -0,0 +1,281 @@
+import { Tab, Tabs } from 'nextra-theme-docs'
+
+# Server Link Module
+
+## Overview
+
+The server link module provides enhancements and additional support to the vanilla Minecraft server link feature. Which allows you to display important links to players in a dedicated UI.
+
+- Adds improvements to the existing server link features
+ - Ability to set a custom image title resource for the server links menu
+ - Ability to use chat colors and formats for button names
+- Backported legacy version support for all versions below 1.21
+
+
+
+## Integration
+
+### Sample Code
+Explore each integration by cycling through each tab, to find the best fit for your requirements and needs.
+
+
+
+
+
+### Override the Server Link Menu resource
+
+```java
+public void overrideServerLinkResourceExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ this.serverLinkModule.overrideServerLinkResource(apolloPlayer, ResourceLocationIcon.builder()
+ .resourceLocation("lunar:logo/logo-100x100.png")
+ .build());
+ });
+}
+```
+
+### Reset the Server Link Menu resource
+
+```java
+public void resetServerLinkResourceExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+ apolloPlayerOpt.ifPresent(this.serverLinkModule::resetServerLinkResource);
+}
+```
+
+### Add Server Link
+
+```java
+public void addServerLinkExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ this.serverLinkModule.addServerLink(apolloPlayer, Lists.newArrayList(
+ ServerLink.builder()
+ .id("website")
+ .displayName(Component.text("Website", NamedTextColor.LIGHT_PURPLE))
+ .url("https://www.lunarclient.com/")
+ .build(),
+ ServerLink.builder()
+ .id("support")
+ .displayName(Component.text("Support", NamedTextColor.AQUA))
+ .url("https://support.lunarclient.com/")
+ .build(),
+ ServerLink.builder()
+ .id("status")
+ .displayName(Component.text("Status", NamedTextColor.RED))
+ .url("https://status.lunarclient.com/")
+ .build()
+ ));
+ });
+}
+```
+
+### Remove Server Link
+
+```java
+public void removeServerLinkExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ this.serverLinkModule.removeServerLink(apolloPlayer, Lists.newArrayList(
+ "website", "support", "status"
+ ));
+ });
+}
+```
+
+### Resetting all Server Links
+
+```java
+public void resetServerLinksExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+ apolloPlayerOpt.ifPresent(this.serverLinkModule::resetServerLinks);
+}
+```
+
+### `ServerLink` Options
+
+`.id(String)` sets a unique identifier for the server link.
+
+```java
+.id("website")
+```
+
+`.displayName(Component)` is the public-facing name of the server link. It should contain an Adventure `Component`. See the [chat components](https://docs.advntr.dev/text.html) page for more.
+
+```java
+.displayName(Component.text("Website", NamedTextColor.LIGHT_PURPLE))
+```
+
+`.url(String)` should be a string that specifies the destination URL that will be opened from the server link.
+
+```java
+.url("https://www.lunarclient.com/")
+```
+
+
+
+
+
+**Override the Server Link Menu resource**
+
+```java
+public void overrideServerLinkResourceExample(Player viewer) {
+ OverrideServerLinkResourceMessage message = OverrideServerLinkResourceMessage.newBuilder()
+ .setIcon(ProtobufUtil.createResourceLocationIconProto("lunar:logo/logo-100x100.png"))
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+}
+```
+
+**Reset the Server Link Menu resource**
+
+```java
+public void resetServerLinkResourceExample(Player viewer) {
+ ResetServerLinkResourceMessage message = ResetServerLinkResourceMessage.getDefaultInstance();
+ ProtobufPacketUtil.sendPacket(viewer, message);
+}
+```
+
+**Add Server Link**
+
+```java
+public void addServerLinkExample(Player viewer) {
+ List serverLinks = Lists.newArrayList(
+ ServerLink.newBuilder()
+ .setId("website")
+ .setDisplayNameAdventureJsonLines(AdventureUtil.toJson(
+ Component.text("Website", NamedTextColor.LIGHT_PURPLE)))
+ .setUrl("https://www.lunarclient.com/")
+ .build(),
+ ServerLink.newBuilder()
+ .setId("support")
+ .setDisplayNameAdventureJsonLines(AdventureUtil.toJson(
+ Component.text("Support", NamedTextColor.AQUA)))
+ .setUrl("https://support.lunarclient.com/")
+ .build(),
+ ServerLink.newBuilder()
+ .setId("status")
+ .setDisplayNameAdventureJsonLines(AdventureUtil.toJson(
+ Component.text("Status", NamedTextColor.RED)))
+ .setUrl("https://status.lunarclient.com/")
+ .build()
+ );
+
+ AddServerLinkMessage message = AddServerLinkMessage.newBuilder()
+ .addAllServerLinks(serverLinks)
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+}
+```
+
+**Remove Server Link**
+
+```java
+public void removeServerLinkExample(Player viewer) {
+ List serverLinkIds = Lists.newArrayList("website", "support", "status");
+
+ RemoveServerLinkMessage message = RemoveServerLinkMessage.newBuilder()
+ .addAllServerLinkIds(serverLinkIds)
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+}
+```
+
+**Resetting all Server Links**
+
+```java
+public void resetServerLinksExample(Player viewer) {
+ ResetServerLinksMessage message = ResetServerLinksMessage.getDefaultInstance();
+ ProtobufPacketUtil.sendPacket(viewer, message);
+}
+```
+
+
+
+
+
+**Override the Server Link Menu resource**
+
+```java
+public void overrideServerLinkResourceExample(Player viewer) {
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.OverrideServerLinkResourceMessage");
+ message.add("icon", JsonUtil.createResourceLocationIconObject("lunar:logo/logo-100x100.png"));
+
+ JsonPacketUtil.sendPacket(viewer, message);
+}
+```
+
+**Reset the Server Link Menu resource**
+
+```java
+public void resetServerLinkResourceExample(Player viewer) {
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.ResetServerLinkResourceMessage");
+
+ JsonPacketUtil.sendPacket(viewer, message);
+}
+```
+
+**Add Server Link**
+
+```java
+public void addServerLinkExample(Player viewer) {
+ JsonArray serverLinks = Lists.newArrayList(
+ this.createServerLinkObject("website", Component.text("Website", NamedTextColor.LIGHT_PURPLE), "https://www.lunarclient.com/"),
+ this.createServerLinkObject("support", Component.text("Support", NamedTextColor.AQUA), "https://support.lunarclient.com/"),
+ this.createServerLinkObject("status", Component.text("Status", NamedTextColor.RED), "https://status.lunarclient.com/")
+ ).stream().collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
+
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.AddServerLinkMessage");
+ message.add("server_links", serverLinks);
+
+ JsonPacketUtil.sendPacket(viewer, message);
+}
+
+private JsonObject createServerLinkObject(String id, Component displayName, String url) {
+ JsonObject serverLinkObject = new JsonObject();
+ serverLinkObject.addProperty("id", id);
+ serverLinkObject.addProperty("display_name_adventure_json_lines", AdventureUtil.toJson(displayName));
+ serverLinkObject.addProperty("url", url);
+ return serverLinkObject;
+}
+```
+
+**Remove Server Link**
+
+```java
+public void removeServerLinkExample(Player viewer) {
+ JsonArray serverLinkIds = Lists.newArrayList("website", "support", "status")
+ .stream().collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
+
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.RemoveServerLinkMessage");
+ message.add("server_link_ids", serverLinkIds);
+
+ JsonPacketUtil.sendPacket(viewer, message);
+}
+```
+
+**Resetting all Server Links**
+
+```java
+public void resetServerLinksExample(Player viewer) {
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.ResetServerLinksMessage");
+
+ JsonPacketUtil.sendPacket(viewer, message);
+}
+```
+
+
+
+
diff --git a/docs/developers/modules/team.mdx b/docs/developers/modules/team.mdx
index 488965940..e587e3155 100644
--- a/docs/developers/modules/team.mdx
+++ b/docs/developers/modules/team.mdx
@@ -27,8 +27,8 @@ Explore each integration by cycling through each tab, to find the best fit for y
```java
-private final Map teamsByTeamId = Maps.newHashMap();
-private final Map teamsByPlayerUuid = Maps.newHashMap();
+private final Map teamsByTeamId = new ConcurrentHashMap<>();
+private final Map teamsByPlayerUuid = new ConcurrentHashMap<>();
public TeamApiExample() {
if (ServerUtil.isFolia()) {
@@ -91,7 +91,7 @@ public class Team {
public Team() {
this.teamId = UUID.randomUUID();
- this.members = new HashMap<>();
+ this.members = new ConcurrentHashMap<>();
}
public void addMember(Player player) {
@@ -107,34 +107,77 @@ public class Team {
.ifPresent(TeamApiExample.this.teamModule::resetTeamMembers);
}
- private TeamMember createTeamMember(Player member) {
- Location location = member.getLocation();
+ private TeamMember createTeamMember(Player player, boolean withinPlayerTrackingRange) {
+ TeamMember.TeamMemberBuilder builder = TeamMember.builder()
+ .playerUuid(player.getUniqueId())
+ .markerColor(Color.WHITE);
- return TeamMember.builder()
- .playerUuid(member.getUniqueId())
- .displayName(Component.text()
- .content(member.getName())
- .color(NamedTextColor.WHITE)
- .build())
- .markerColor(Color.WHITE)
- .location(ApolloLocation.builder()
+ if (!withinPlayerTrackingRange) {
+ Location location = player.getLocation();
+
+ builder.location(ApolloLocation.builder()
.world(location.getWorld().getName())
.x(location.getX())
.y(location.getY())
.z(location.getZ())
- .build())
- .build();
+ .build());
+
+ builder.displayName(Component.text()
+ .content(player.getName())
+ .color(NamedTextColor.WHITE)
+ .build());
+ }
+
+ return builder.build();
}
- // The refresh method used for updating members locations
public void refresh() {
- List teammates = this.members.values()
- .stream().filter(Player::isOnline)
- .map(this::createTeamMember)
- .collect(Collectors.toList());
+ for (Player viewer : this.members.values()) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+ if (!apolloPlayerOpt.isPresent()) {
+ continue;
+ }
+
+ List teammates = new ArrayList<>();
+
+ for (Player member : this.members.values()) {
+ if (viewer == member) {
+ continue;
+ }
+
+ if (!viewer.canSee(member)) {
+ continue;
+ }
+
+ if (!viewer.getWorld().getName().equals(member.getWorld().getName())) {
+ continue;
+ }
+
+ boolean withinPlayerTrackingRange = this.isWithinPlayerTrackingRange(viewer, member);
+ teammates.add(this.createTeamMember(member, withinPlayerTrackingRange));
+ }
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ TeamApiExample.this.teamModule.updateTeamMembers(apolloPlayer, teammates);
+ });
+ }
+ }
+
+ /**
+ * Check if player is within 48 blocks. Ideally, this could be checked directly
+ * through the server's internal entity tracker for exact tracking behavior,
+ * but that is not exposed in the Bukkit API.
+ *
+ * @param viewer the viewer
+ * @param member the member
+ * @return whether within player tracking range
+ */
+ private boolean isWithinPlayerTrackingRange(Player viewer, Player member) {
+ double maxDistance = 48;
+ double dx = viewer.getLocation().getX() - member.getLocation().getX();
+ double dz = viewer.getLocation().getZ() - member.getLocation().getZ();
- this.members.values().forEach(member -> Apollo.getPlayerManager().getPlayer(member.getUniqueId())
- .ifPresent(apolloPlayer -> TeamApiExample.this.teamModule.updateTeamMembers(apolloPlayer, teammates)));
+ return (dx * dx + dz * dz) <= (maxDistance * maxDistance);
}
public UUID getTeamId() {
@@ -237,8 +280,8 @@ Custom colors can be created from any RGB values using `new Color(int red, int g
```java
-private final Map teamsByTeamId = Maps.newHashMap();
-private final Map teamsByPlayerUuid = Maps.newHashMap();
+private final Map teamsByTeamId = new ConcurrentHashMap<>();
+private final Map teamsByPlayerUuid = new ConcurrentHashMap<>();
public TeamProtoExample() {
if (ServerUtil.isFolia()) {
@@ -301,7 +344,7 @@ public class Team {
public Team() {
this.teamId = UUID.randomUUID();
- this.members = new HashMap<>();
+ this.members = new ConcurrentHashMap<>();
}
public void addMember(Player player) {
@@ -317,31 +360,74 @@ public class Team {
ProtobufPacketUtil.sendPacket(player, message);
}
- private TeamMember createTeamMember(Player member) {
- return TeamMember.newBuilder()
- .setPlayerUuid(ProtobufUtil.createUuidProto(member.getUniqueId()))
- .setAdventureJsonPlayerName(AdventureUtil.toJson(
+ private TeamMember createTeamMember(Player player, boolean withinPlayerTrackingRange) {
+ TeamMember.Builder builder = TeamMember.newBuilder()
+ .setPlayerUuid(ProtobufUtil.createUuidProto(player.getUniqueId()))
+ .setMarkerColor(ProtobufUtil.createColorProto(Color.WHITE));
+
+ if (!withinPlayerTrackingRange) {
+ builder.setLocation(ProtobufUtil.createLocationProto(player.getLocation()));
+
+ builder.setAdventureJsonPlayerName(AdventureUtil.toJson(
Component.text()
- .content(member.getName())
+ .content(player.getName())
.color(NamedTextColor.WHITE)
.build()
- ))
- .setMarkerColor(ProtobufUtil.createColorProto(Color.WHITE))
- .setLocation(ProtobufUtil.createLocationProto(member.getLocation()))
- .build();
+ ));
+ }
+
+ return builder.build();
}
// The refresh method used for updating members locations
public void refresh() {
- List teammates = this.members.values().stream().filter(Player::isOnline)
- .map(this::createTeamMember)
- .collect(Collectors.toList());
+ for (Player viewer : this.members.values()) {
+ if (!ApolloPlayerProtoListener.isPlayerRunningApollo(viewer)) {
+ continue;
+ }
+
+ List teammates = new ArrayList<>();
- UpdateTeamMembersMessage message = UpdateTeamMembersMessage.newBuilder()
- .addAllMembers(teammates)
- .build();
+ for (Player member : this.members.values()) {
+ if (viewer == member) {
+ continue;
+ }
- this.members.values().forEach(member -> ProtobufPacketUtil.sendPacket(member, message));
+ if (!viewer.canSee(member)) {
+ continue;
+ }
+
+ if (!viewer.getWorld().getName().equals(member.getWorld().getName())) {
+ continue;
+ }
+
+ boolean withinPlayerTrackingRange = this.isWithinPlayerTrackingRange(viewer, member);
+ teammates.add(this.createTeamMember(member, withinPlayerTrackingRange));
+ }
+
+ UpdateTeamMembersMessage message = UpdateTeamMembersMessage.newBuilder()
+ .addAllMembers(teammates)
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+ }
+ }
+
+ /**
+ * Check if player is within 48 blocks. Ideally, this could be checked directly
+ * through the server's internal entity tracker for exact tracking behavior,
+ * but that is not exposed in the Bukkit API.
+ *
+ * @param viewer the viewer
+ * @param member the member
+ * @return whether within player tracking range
+ */
+ private boolean isWithinPlayerTrackingRange(Player viewer, Player member) {
+ double maxDistance = 48;
+ double dx = viewer.getLocation().getX() - member.getLocation().getX();
+ double dz = viewer.getLocation().getZ() - member.getLocation().getZ();
+
+ return (dx * dx + dz * dz) <= (maxDistance * maxDistance);
}
public UUID getTeamId() {
@@ -378,8 +464,8 @@ public class Team {
```java
-private final Map teamsByTeamId = Maps.newHashMap();
-private final Map teamsByPlayerUuid = Maps.newHashMap();
+private final Map teamsByTeamId = new ConcurrentHashMap<>();
+private final Map teamsByPlayerUuid = new ConcurrentHashMap<>();
public TeamJsonExample() {
if (ServerUtil.isFolia()) {
@@ -442,7 +528,7 @@ public class Team {
public Team() {
this.teamId = UUID.randomUUID();
- this.members = new HashMap<>();
+ this.members = new ConcurrentHashMap<>();
}
public void addMember(Player player) {
@@ -460,33 +546,74 @@ public class Team {
JsonPacketUtil.sendPacket(player, message);
}
- private JsonObject createTeamMember(Player member) {
+ private JsonObject createTeamMember(Player player, boolean withinPlayerTrackingRange) {
JsonObject message = new JsonObject();
- message.add("player_uuid", JsonUtil.createUuidObject(member.getUniqueId()));
- message.addProperty("adventure_json_player_name", AdventureUtil.toJson(
- Component.text()
- .content(member.getName())
- .color(NamedTextColor.WHITE)
- .build()
- ));
+ message.add("player_uuid", JsonUtil.createUuidObject(player.getUniqueId()));
message.add("marker_color", JsonUtil.createColorObject(Color.WHITE));
- message.add("location", JsonUtil.createLocationObject(member.getLocation()));
+
+ if (!withinPlayerTrackingRange) {
+ message.add("location", JsonUtil.createLocationObject(player.getLocation()));
+
+ message.addProperty("adventure_json_player_name", AdventureUtil.toJson(
+ Component.text()
+ .content(player.getName())
+ .color(NamedTextColor.WHITE)
+ .build()
+ ));
+ }
return message;
}
// The refresh method used for updating members locations
public void refresh() {
- JsonArray teammates = this.members.values()
- .stream().filter(Player::isOnline)
- .map(this::createTeamMember)
- .collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
+ for (Player viewer : this.members.values()) {
+ if (!ApolloPlayerJsonListener.isPlayerRunningApollo(viewer)) {
+ continue;
+ }
- JsonObject message = new JsonObject();
- message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.team.v1.UpdateTeamMembersMessage");
- message.add("members", teammates);
+ JsonArray teammates = new JsonArray();
+
+ for (Player member : this.members.values()) {
+ if (viewer == member) {
+ continue;
+ }
+
+ if (!viewer.canSee(member)) {
+ continue;
+ }
+
+ if (!viewer.getWorld().getName().equals(member.getWorld().getName())) {
+ continue;
+ }
+
+ boolean withinPlayerTrackingRange = this.isWithinPlayerTrackingRange(viewer, member);
+ teammates.add(this.createTeamMember(member, withinPlayerTrackingRange));
+ }
+
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.team.v1.UpdateTeamMembersMessage");
+ message.add("members", teammates);
+
+ JsonPacketUtil.sendPacket(viewer, message);
+ }
+ }
- this.members.values().forEach(member -> JsonPacketUtil.sendPacket(member, message));
+ /**
+ * Check if player is within 48 blocks. Ideally, this could be checked directly
+ * through the server's internal entity tracker for exact tracking behavior,
+ * but that is not exposed in the Bukkit API.
+ *
+ * @param viewer the viewer
+ * @param member the member
+ * @return whether within player tracking range
+ */
+ private boolean isWithinPlayerTrackingRange(Player viewer, Player member) {
+ double maxDistance = 48;
+ double dx = viewer.getLocation().getX() - member.getLocation().getX();
+ double dz = viewer.getLocation().getZ() - member.getLocation().getZ();
+
+ return (dx * dx + dz * dz) <= (maxDistance * maxDistance);
}
public UUID getTeamId() {
diff --git a/docs/developers/modules/transfer.mdx b/docs/developers/modules/transfer.mdx
index 77030ac2b..51d252ce0 100644
--- a/docs/developers/modules/transfer.mdx
+++ b/docs/developers/modules/transfer.mdx
@@ -246,15 +246,38 @@ public void pingExample(Player player) {
-
- This example is not implemented.
-
-
**Transfer Player**
```java
public void transferExample(Player player) {
+ UUID requestId = UUID.randomUUID();
+
+ JsonObject transferRequestMessage = new JsonObject();
+ transferRequestMessage.addProperty("server_ip", "mc.hypixel.net");
+
+ ApolloRoundtripJsonListener.getInstance()
+ .sendRequest(player, requestId, transferRequestMessage, "lunarclient.apollo.transfer.v1.TransferRequest")
+ .thenAccept(response -> {
+ String message = "";
+ String status = response.get("status").getAsString();
+
+ switch (status) {
+ case "STATUS_ACCEPTED": {
+ message = "Transfer accepted! Goodbye!";
+ break;
+ }
+ case "STATUS_REJECTED": {
+ message = "Transfer rejected by client!";
+ break;
+ }
+ }
+
+ player.sendMessage(message);
+ }).exceptionally(throwable -> {
+ player.sendMessage("Failed to receive a response in time.");
+ return null;
+ });
}
```
@@ -262,7 +285,43 @@ public void transferExample(Player player) {
```java
public void pingExample(Player player) {
+ UUID requestId = UUID.randomUUID();
+
+ JsonObject pingRequestMessage = new JsonObject();
+ JsonArray serverIps = Lists.newArrayList("mc.hypixel.net", "minehut.com")
+ .stream().collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
+ pingRequestMessage.add("server_ips", serverIps);
+
+ ApolloRoundtripJsonListener.getInstance()
+ .sendRequest(player, requestId, pingRequestMessage, "lunarclient.apollo.transfer.v1.PingRequest")
+ .thenAccept(response -> {
+ JsonArray pingDataList = response.getAsJsonArray("ping_data");
+
+ for (JsonElement element : pingDataList) {
+ JsonObject pingData = element.getAsJsonObject();
+ String message = "";
+ String status = pingData.get("status").getAsString();
+ switch (status) {
+ // Displays successful ping request to display the server IP and the players ping to that server.
+ case "STATUS_SUCCESS": {
+ message = String.format("Ping to %s is %d ms.", pingData.get("server_ip").getAsString(), pingData.get("ping").getAsInt());
+ break;
+ }
+
+ // If the ping request times-out
+ case "STATUS_TIMED_OUT": {
+ message = String.format("Failed to ping %s", pingData.get("server_ip").getAsString());
+ break;
+ }
+ }
+
+ player.sendMessage(message);
+ }
+ }).exceptionally(throwable -> {
+ player.sendMessage("Failed to receive a response in time.");
+ return null;
+ });
}
```
diff --git a/docs/developers/utilities/icons.mdx b/docs/developers/utilities/icons.mdx
index 4c01099f9..449151b7c 100644
--- a/docs/developers/utilities/icons.mdx
+++ b/docs/developers/utilities/icons.mdx
@@ -61,6 +61,40 @@ public static ItemStackIcon itemStackNameIconExample() {
}
```
+## `ResourceLocationIcon` Builder
+
+If you're using a custom resource pack and want to create an icon, you can use the `ResourceLocationIcon` builder.
+
+
+ The supplied resource location should point to a texture in the resource pack, or the path to an `svg` file in the resource pack.
+
+
+```java
+public class ResourceLocationIcon extends Icon {
+
+ /**
+ * Returns the icon {@link String} resource location.
+ *
+ * Represents a path to an icon that will appear for the player.
+ *
+ * @return the icon resource location
+ * @since 1.2.5
+ */
+ String resourceLocation;
+
+}
+```
+
+### Sample Code
+
+```java
+public static ResourceLocationIcon resourceLocationExample() {
+ return ResourceLocationIcon.builder()
+ .resourceLocation("minecraft:textures/item/apple.png") // Resource path location
+ .build();
+}
+```
+
## `SimpleResourceLocation` Builder
If you're using a custom resource pack and want to create an icon, you can use the `SimpleResourceLocation` builder.
diff --git a/docs/public/modules/serverlink/overview.png b/docs/public/modules/serverlink/overview.png
new file mode 100644
index 000000000..512543fef
Binary files /dev/null and b/docs/public/modules/serverlink/overview.png differ
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/ApolloApiExamplePlatform.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/ApolloApiExamplePlatform.java
index 08d1fa811..8575bc784 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/ApolloApiExamplePlatform.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/ApolloApiExamplePlatform.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -47,6 +47,7 @@
import com.lunarclient.apollo.example.api.module.NotificationApiExample;
import com.lunarclient.apollo.example.api.module.PayNowApiExample;
import com.lunarclient.apollo.example.api.module.RichPresenceApiExample;
+import com.lunarclient.apollo.example.api.module.ServerLinkApiExample;
import com.lunarclient.apollo.example.api.module.ServerRuleApiExample;
import com.lunarclient.apollo.example.api.module.StaffModApiExample;
import com.lunarclient.apollo.example.api.module.StopwatchApiExample;
@@ -97,6 +98,7 @@ public void registerModuleExamples() {
this.setNotificationExample(new NotificationApiExample());
this.setPayNowExample(new PayNowApiExample());
this.setRichPresenceExample(new RichPresenceApiExample());
+ this.setServerLinkExample(new ServerLinkApiExample());
this.setServerRuleExample(new ServerRuleApiExample());
this.setStaffModExample(new StaffModApiExample());
this.setStopwatchExample(new StopwatchApiExample());
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/Debug.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/Debug.java
index 0b4f4c9a4..8786fe8ac 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/Debug.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/Debug.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/DebugManager.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/DebugManager.java
index 44bc43985..c66dd321d 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/DebugManager.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/DebugManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/DebugTask.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/DebugTask.java
index 568f0776a..ad74edfec 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/DebugTask.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/DebugTask.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/ApolloDebugCommand.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/ApolloDebugCommand.java
index b7d719119..17360e091 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/ApolloDebugCommand.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/ApolloDebugCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/BordersCommand.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/BordersCommand.java
index 093b7704d..0fa22708f 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/BordersCommand.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/BordersCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/SpamPacketsCommand.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/SpamPacketsCommand.java
index 57f90b285..8d0c7f5f6 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/SpamPacketsCommand.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/command/SpamPacketsCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/BorderCollisionTest.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/BorderCollisionTest.java
index aa1f39b36..d83ef7227 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/BorderCollisionTest.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/BorderCollisionTest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/ModSettingsTest.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/ModSettingsTest.java
index c7afb0f78..8601a6a23 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/ModSettingsTest.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/ModSettingsTest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/PayloadTest.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/PayloadTest.java
index 9726c21ab..2802a7cfa 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/PayloadTest.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/PayloadTest.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/SpamPacketDebug.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/SpamPacketDebug.java
index 279b61632..29cfc26cc 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/SpamPacketDebug.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/debug/impl/SpamPacketDebug.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/general/ApolloEventListenerExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/general/ApolloEventListenerExample.java
index f32912706..168287bc6 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/general/ApolloEventListenerExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/general/ApolloEventListenerExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/general/ApolloGeneralExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/general/ApolloGeneralExample.java
index 8469de981..61d8936ff 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/general/ApolloGeneralExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/general/ApolloGeneralExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/listener/ApolloPlayerApiListener.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/listener/ApolloPlayerApiListener.java
index 53a89c20c..0913c1e29 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/listener/ApolloPlayerApiListener.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/listener/ApolloPlayerApiListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -29,6 +29,8 @@
import com.lunarclient.apollo.event.player.ApolloRegisterPlayerEvent;
import com.lunarclient.apollo.example.ApolloExamplePlugin;
import com.lunarclient.apollo.example.api.module.TeamApiExample;
+import com.lunarclient.apollo.example.module.impl.CooldownExample;
+import com.lunarclient.apollo.example.module.impl.ServerLinkExample;
import com.lunarclient.apollo.player.ApolloPlayer;
import org.bukkit.entity.Player;
@@ -58,9 +60,17 @@ private void onApolloRegister(ApolloRegisterPlayerEvent event) {
this.example.getBeamExample().displayBeamExample(player);
this.example.getBorderExample().displayBorderExample(player);
- this.example.getCooldownExample().displayCooldownItemExample(player);
this.example.getNametagExample().overrideNametagExample(player);
this.example.getWaypointExample().displayWaypointExample(player);
+
+ CooldownExample cooldownExample = this.example.getCooldownExample();
+ cooldownExample.displayCooldownItemExample(player);
+ cooldownExample.displayCooldownWithStyleExample(player);
+ cooldownExample.displayCooldownResourceExample(player);
+
+ ServerLinkExample serverLinkExample = this.example.getServerLinkExample();
+ serverLinkExample.overrideServerLinkResourceExample(player);
+ serverLinkExample.addServerLinkExample(player);
}
}
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/mods/ApolloModStatusExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/mods/ApolloModStatusExample.java
index 7e01ba800..71ef2a01e 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/mods/ApolloModStatusExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/mods/ApolloModStatusExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/mods/ModStatusCommand.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/mods/ModStatusCommand.java
index ea8885483..39bed666f 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/mods/ModStatusCommand.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/mods/ModStatusCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/AutoTextHotkeyApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/AutoTextHotkeyApiExample.java
index c907e5727..786a53a32 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/AutoTextHotkeyApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/AutoTextHotkeyApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/BeamApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/BeamApiExample.java
index 26ba34162..c65dc7d06 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/BeamApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/BeamApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/BorderApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/BorderApiExample.java
index 2bc7803e4..179e15084 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/BorderApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/BorderApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ChatApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ChatApiExample.java
index 802f43eec..13f325a1a 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ChatApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ChatApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ColoredFireApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ColoredFireApiExample.java
index 87437218b..a96ee0728 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ColoredFireApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ColoredFireApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/CombatApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/CombatApiExample.java
index 726230912..ce15f2532 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/CombatApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/CombatApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/CooldownApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/CooldownApiExample.java
index a58aec784..121eb27e1 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/CooldownApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/CooldownApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -24,11 +24,13 @@
package com.lunarclient.apollo.example.api.module;
import com.lunarclient.apollo.Apollo;
+import com.lunarclient.apollo.common.ApolloColors;
import com.lunarclient.apollo.common.icon.ItemStackIcon;
import com.lunarclient.apollo.common.icon.SimpleResourceLocationIcon;
import com.lunarclient.apollo.example.module.impl.CooldownExample;
import com.lunarclient.apollo.module.cooldown.Cooldown;
import com.lunarclient.apollo.module.cooldown.CooldownModule;
+import com.lunarclient.apollo.module.cooldown.CooldownStyle;
import com.lunarclient.apollo.player.ApolloPlayer;
import java.time.Duration;
import java.util.Optional;
@@ -55,6 +57,28 @@ public void displayCooldownItemExample(Player viewer) {
});
}
+ @Override
+ public void displayCooldownWithStyleExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ this.cooldownModule.displayCooldown(apolloPlayer, Cooldown.builder()
+ .name("book-cooldown")
+ .duration(Duration.ofSeconds(30))
+ .icon(ItemStackIcon.builder()
+ .itemName("BOOK")
+ .build())
+ .style(CooldownStyle.builder()
+ .circleStartColor(ApolloColors.RED)
+ .circleEndColor(ApolloColors.GREEN)
+ .circleEdgeColor(ApolloColors.DARK_GRAY)
+ .textColor(ApolloColors.LIGHT_PURPLE)
+ .build())
+ .build()
+ );
+ });
+ }
+
@Override
public void displayCooldownResourceExample(Player viewer) {
Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
@@ -64,8 +88,8 @@ public void displayCooldownResourceExample(Player viewer) {
.name("lunar-cooldown")
.duration(Duration.ofSeconds(15))
.icon(SimpleResourceLocationIcon.builder()
- .resourceLocation("lunar:logo/logo-200x182.svg")
- .size(12)
+ .resourceLocation("lunar:logo/logo-64x64.png")
+ .size(24)
.build()
)
.build()
@@ -79,6 +103,7 @@ public void removeCooldownExample(Player viewer) {
apolloPlayerOpt.ifPresent(apolloPlayer -> {
this.cooldownModule.removeCooldown(apolloPlayer, "enderpearl-cooldown");
+ this.cooldownModule.removeCooldown(apolloPlayer, "book-cooldown");
this.cooldownModule.removeCooldown(apolloPlayer, "lunar-cooldown");
});
}
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/EntityApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/EntityApiExample.java
index 682bc6eaf..2b073efc2 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/EntityApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/EntityApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/GlowApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/GlowApiExample.java
index 77ce08b95..4203025b1 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/GlowApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/GlowApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/HologramApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/HologramApiExample.java
index 9cb3ddd4a..92f521b42 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/HologramApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/HologramApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/LimbApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/LimbApiExample.java
index b9a755041..42133de1e 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/LimbApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/LimbApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ModSettingsApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ModSettingsApiExample.java
index e9c5dc31a..53247cf70 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ModSettingsApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ModSettingsApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NametagApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NametagApiExample.java
index f3ded5b83..132d5d868 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NametagApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NametagApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NickHiderApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NickHiderApiExample.java
index 9f0ceeb88..f2fc9dd8c 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NickHiderApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NickHiderApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NotificationApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NotificationApiExample.java
index dd172b5a3..512074740 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NotificationApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/NotificationApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -51,7 +51,7 @@ public void displayNotificationExample(Player viewer) {
.append(Component.newline())
.append(Component.text("Good luck!", NamedTextColor.GOLD))
)
- .resourceLocation("icons/golden_apple.png") // This field is optional
+ .resourceLocation("textures/items/apple_golden.png") // This field is optional
.displayTime(Duration.ofSeconds(5))
.build());
});
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/PayNowApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/PayNowApiExample.java
index 48c78c038..a976b9f7b 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/PayNowApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/PayNowApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/RichPresenceApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/RichPresenceApiExample.java
index 819d37be5..fa229a44f 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/RichPresenceApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/RichPresenceApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ServerLinkApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ServerLinkApiExample.java
new file mode 100644
index 000000000..8c8f9e44c
--- /dev/null
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ServerLinkApiExample.java
@@ -0,0 +1,101 @@
+/*
+ * 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.example.api.module;
+
+import com.google.common.collect.Lists;
+import com.lunarclient.apollo.Apollo;
+import com.lunarclient.apollo.common.icon.ResourceLocationIcon;
+import com.lunarclient.apollo.example.module.impl.ServerLinkExample;
+import com.lunarclient.apollo.module.serverlink.ServerLink;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModule;
+import com.lunarclient.apollo.player.ApolloPlayer;
+import java.util.Optional;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
+import org.bukkit.entity.Player;
+
+public class ServerLinkApiExample extends ServerLinkExample {
+
+ private final ServerLinkModule serverLinkModule = Apollo.getModuleManager().getModule(ServerLinkModule.class);
+
+ @Override
+ public void overrideServerLinkResourceExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ this.serverLinkModule.overrideServerLinkResource(apolloPlayer, ResourceLocationIcon.builder()
+ .resourceLocation("lunar:logo/logo-100x100.png")
+ .build());
+ });
+ }
+
+ @Override
+ public void resetServerLinkResourceExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+ apolloPlayerOpt.ifPresent(this.serverLinkModule::resetServerLinkResource);
+ }
+
+ @Override
+ public void addServerLinkExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ this.serverLinkModule.addServerLink(apolloPlayer, Lists.newArrayList(
+ ServerLink.builder()
+ .id("website")
+ .displayName(Component.text("Website", NamedTextColor.LIGHT_PURPLE))
+ .url("https://www.lunarclient.com/")
+ .build(),
+ ServerLink.builder()
+ .id("support")
+ .displayName(Component.text("Support", NamedTextColor.AQUA))
+ .url("https://support.lunarclient.com/")
+ .build(),
+ ServerLink.builder()
+ .id("status")
+ .displayName(Component.text("Status", NamedTextColor.RED))
+ .url("https://status.lunarclient.com/")
+ .build()
+ ));
+ });
+ }
+
+ @Override
+ public void removeServerLinkExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ this.serverLinkModule.removeServerLink(apolloPlayer, Lists.newArrayList(
+ "website", "support", "status"
+ ));
+ });
+ }
+
+ @Override
+ public void resetServerLinksExample(Player viewer) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+ apolloPlayerOpt.ifPresent(this.serverLinkModule::resetServerLinks);
+ }
+
+}
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ServerRuleApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ServerRuleApiExample.java
index 8658f41c1..22b048623 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ServerRuleApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/ServerRuleApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/StaffModApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/StaffModApiExample.java
index 11d6a8333..6deaa3dd8 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/StaffModApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/StaffModApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/StopwatchApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/StopwatchApiExample.java
index 5bcaf6fee..620bb4fb7 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/StopwatchApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/StopwatchApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TeamApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TeamApiExample.java
index 6985a24aa..21c841265 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TeamApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TeamApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -23,7 +23,6 @@
*/
package com.lunarclient.apollo.example.api.module;
-import com.google.common.collect.Maps;
import com.lunarclient.apollo.Apollo;
import com.lunarclient.apollo.common.location.ApolloLocation;
import com.lunarclient.apollo.example.ApolloExamplePlugin;
@@ -31,15 +30,16 @@
import com.lunarclient.apollo.example.util.ServerUtil;
import com.lunarclient.apollo.module.team.TeamMember;
import com.lunarclient.apollo.module.team.TeamModule;
+import com.lunarclient.apollo.player.ApolloPlayer;
import java.awt.Color;
+import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
@@ -53,8 +53,8 @@ public class TeamApiExample extends TeamExample implements Listener {
private final TeamModule teamModule = Apollo.getModuleManager().getModule(TeamModule.class);
- private final Map teamsByTeamId = Maps.newHashMap();
- private final Map teamsByPlayerUuid = Maps.newHashMap();
+ private final Map teamsByTeamId = new ConcurrentHashMap<>();
+ private final Map teamsByPlayerUuid = new ConcurrentHashMap<>();
public TeamApiExample() {
if (ServerUtil.isFolia()) {
@@ -117,7 +117,7 @@ public class Team {
public Team() {
this.teamId = UUID.randomUUID();
- this.members = new HashMap<>();
+ this.members = new ConcurrentHashMap<>();
}
public void addMember(Player player) {
@@ -133,34 +133,77 @@ public void removeMember(Player player) {
.ifPresent(TeamApiExample.this.teamModule::resetTeamMembers);
}
- private TeamMember createTeamMember(Player member) {
- Location location = member.getLocation();
+ private TeamMember createTeamMember(Player player, boolean withinPlayerTrackingRange) {
+ TeamMember.TeamMemberBuilder builder = TeamMember.builder()
+ .playerUuid(player.getUniqueId())
+ .markerColor(Color.WHITE);
- return TeamMember.builder()
- .playerUuid(member.getUniqueId())
- .displayName(Component.text()
- .content(member.getName())
- .color(NamedTextColor.WHITE)
- .build())
- .markerColor(Color.WHITE)
- .location(ApolloLocation.builder()
+ if (!withinPlayerTrackingRange) {
+ Location location = player.getLocation();
+
+ builder.location(ApolloLocation.builder()
.world(location.getWorld().getName())
.x(location.getX())
.y(location.getY())
.z(location.getZ())
- .build())
- .build();
+ .build());
+
+ builder.displayName(Component.text()
+ .content(player.getName())
+ .color(NamedTextColor.WHITE)
+ .build());
+ }
+
+ return builder.build();
}
- // The refresh method used for updating members locations
public void refresh() {
- List teammates = this.members.values()
- .stream().filter(Player::isOnline)
- .map(this::createTeamMember)
- .collect(Collectors.toList());
+ for (Player viewer : this.members.values()) {
+ Optional apolloPlayerOpt = Apollo.getPlayerManager().getPlayer(viewer.getUniqueId());
+ if (!apolloPlayerOpt.isPresent()) {
+ continue;
+ }
+
+ List teammates = new ArrayList<>();
+
+ for (Player member : this.members.values()) {
+ if (viewer == member) {
+ continue;
+ }
+
+ if (!viewer.canSee(member)) {
+ continue;
+ }
+
+ if (!viewer.getWorld().getName().equals(member.getWorld().getName())) {
+ continue;
+ }
+
+ boolean withinPlayerTrackingRange = this.isWithinPlayerTrackingRange(viewer, member);
+ teammates.add(this.createTeamMember(member, withinPlayerTrackingRange));
+ }
+
+ apolloPlayerOpt.ifPresent(apolloPlayer -> {
+ TeamApiExample.this.teamModule.updateTeamMembers(apolloPlayer, teammates);
+ });
+ }
+ }
- this.members.values().forEach(member -> Apollo.getPlayerManager().getPlayer(member.getUniqueId())
- .ifPresent(apolloPlayer -> TeamApiExample.this.teamModule.updateTeamMembers(apolloPlayer, teammates)));
+ /**
+ * Check if player is within 48 blocks. Ideally, this could be checked directly
+ * through the server's internal entity tracker for exact tracking behavior,
+ * but that is not exposed in the Bukkit API.
+ *
+ * @param viewer the viewer
+ * @param member the member
+ * @return whether within player tracking range
+ */
+ private boolean isWithinPlayerTrackingRange(Player viewer, Player member) {
+ double maxDistance = 48;
+ double dx = viewer.getLocation().getX() - member.getLocation().getX();
+ double dz = viewer.getLocation().getZ() - member.getLocation().getZ();
+
+ return (dx * dx + dz * dz) <= (maxDistance * maxDistance);
}
public UUID getTeamId() {
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TebexApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TebexApiExample.java
index d24194201..00f7904c7 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TebexApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TebexApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TitleApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TitleApiExample.java
index e3843c8f5..12eb761a5 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TitleApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TitleApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TntCountdownApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TntCountdownApiExample.java
index c72a17965..76de40f01 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TntCountdownApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TntCountdownApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TransferApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TransferApiExample.java
index 8ac1fce1f..caaf7c513 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TransferApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/TransferApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/VignetteApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/VignetteApiExample.java
index d914f323e..c1a368f50 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/VignetteApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/VignetteApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/WaypointApiExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/WaypointApiExample.java
index f404c503b..2e7225c0c 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/WaypointApiExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/module/WaypointApiExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/BukkitApolloExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/BukkitApolloExample.java
index 32f374786..0ff02f2b3 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/BukkitApolloExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/BukkitApolloExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/ComponentExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/ComponentExample.java
index a401c88ce..b797cae4d 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/ComponentExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/ComponentExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/CuboidExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/CuboidExample.java
index fe1df4c1b..b65c37b59 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/CuboidExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/CuboidExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/IconExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/IconExample.java
index 155960205..426b63d1f 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/IconExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/IconExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -25,6 +25,7 @@
import com.lunarclient.apollo.common.icon.AdvancedResourceLocationIcon;
import com.lunarclient.apollo.common.icon.ItemStackIcon;
+import com.lunarclient.apollo.common.icon.ResourceLocationIcon;
import com.lunarclient.apollo.common.icon.SimpleResourceLocationIcon;
import org.bukkit.Material;
@@ -42,6 +43,12 @@ public static ItemStackIcon itemStackNameIconExample() {
.build();
}
+ public static ResourceLocationIcon resourceLocationExample() {
+ return ResourceLocationIcon.builder()
+ .resourceLocation("minecraft:textures/item/apple.png") // Resource path location
+ .build();
+ }
+
public static SimpleResourceLocationIcon simpleResourceLocationIconExample() {
return SimpleResourceLocationIcon.builder()
.resourceLocation("icons/server-logo.png") // Resource path location
diff --git a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/LocationExample.java b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/LocationExample.java
index 9a35bf92b..a43c16deb 100644
--- a/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/LocationExample.java
+++ b/example/bukkit/api/src/main/java/com/lunarclient/apollo/example/api/util/LocationExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/api/src/main/resources/plugin.yml b/example/bukkit/api/src/main/resources/plugin.yml
index fbe960bbe..042f5363f 100644
--- a/example/bukkit/api/src/main/resources/plugin.yml
+++ b/example/bukkit/api/src/main/resources/plugin.yml
@@ -49,6 +49,8 @@ commands:
description: "Pay Now!"
richpresence:
description: "Rich Presence!"
+ serverlink:
+ description: "Server Links!"
saturation:
description: "Saturation!"
serverrule:
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/ApolloExamplePlugin.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/ApolloExamplePlugin.java
index 6395b444b..81d28966a 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/ApolloExamplePlugin.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/ApolloExamplePlugin.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -43,6 +43,7 @@
import com.lunarclient.apollo.example.command.PayNowCommand;
import com.lunarclient.apollo.example.command.RichPresenceCommand;
import com.lunarclient.apollo.example.command.SaturationCommand;
+import com.lunarclient.apollo.example.command.ServerLinkCommand;
import com.lunarclient.apollo.example.command.ServerRuleCommand;
import com.lunarclient.apollo.example.command.StaffModCommand;
import com.lunarclient.apollo.example.command.StopwatchCommand;
@@ -73,6 +74,7 @@
import com.lunarclient.apollo.example.module.impl.PayNowExample;
import com.lunarclient.apollo.example.module.impl.RichPresenceExample;
import com.lunarclient.apollo.example.module.impl.SaturationExample;
+import com.lunarclient.apollo.example.module.impl.ServerLinkExample;
import com.lunarclient.apollo.example.module.impl.ServerRuleExample;
import com.lunarclient.apollo.example.module.impl.StaffModExample;
import com.lunarclient.apollo.example.module.impl.StopwatchExample;
@@ -112,6 +114,7 @@ public abstract class ApolloExamplePlugin extends JavaPlugin {
private NotificationExample notificationExample;
private PayNowExample payNowExample;
private RichPresenceExample richPresenceExample;
+ private ServerLinkExample serverLinkExample;
private SaturationExample saturationExample;
private ServerRuleExample serverRuleExample;
private StaffModExample staffModExample;
@@ -163,6 +166,7 @@ private void registerCommonCommands() {
this.getCommand("paynow").setExecutor(new PayNowCommand());
this.getCommand("richpresence").setExecutor(new RichPresenceCommand());
this.getCommand("saturation").setExecutor(new SaturationCommand());
+ this.getCommand("serverlink").setExecutor(new ServerLinkCommand());
this.getCommand("serverrule").setExecutor(new ServerRuleCommand());
this.getCommand("staffmod").setExecutor(new StaffModCommand());
this.getCommand("stopwatch").setExecutor(new StopwatchCommand());
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/ApolloExampleType.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/ApolloExampleType.java
index 0e96b3fee..c7192c380 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/ApolloExampleType.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/ApolloExampleType.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/AutoTextHotkeyCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/AutoTextHotkeyCommand.java
index e99fc825d..26a9c84b4 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/AutoTextHotkeyCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/AutoTextHotkeyCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/BeamCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/BeamCommand.java
index 3414d293e..ae9c83ffb 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/BeamCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/BeamCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/BorderCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/BorderCommand.java
index 1bfbfd283..8b8bc99f9 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/BorderCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/BorderCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ChatCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ChatCommand.java
index e0c376c58..140060cb6 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ChatCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ChatCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ColoredFireCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ColoredFireCommand.java
index af9832539..b37dbef29 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ColoredFireCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ColoredFireCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/CombatCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/CombatCommand.java
index 2a4086859..23e3fda48 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/CombatCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/CombatCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/CooldownCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/CooldownCommand.java
index 62de3bbb0..bb1223125 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/CooldownCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/CooldownCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -43,7 +43,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
Player player = (Player) sender;
if (args.length != 1) {
- player.sendMessage("Usage: /cooldown ");
+ player.sendMessage("Usage: /cooldown ");
return true;
}
@@ -56,6 +56,12 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
break;
}
+ case "displaywithstyle": {
+ cooldownExample.displayCooldownWithStyleExample(player);
+ player.sendMessage("Displaying cooldown with style....");
+ break;
+ }
+
case "displayresource": {
cooldownExample.displayCooldownResourceExample(player);
player.sendMessage("Displaying cooldown resource....");
@@ -75,7 +81,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
}
default: {
- player.sendMessage("Usage: /cooldown ");
+ player.sendMessage("Usage: /cooldown ");
break;
}
}
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/EntityCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/EntityCommand.java
index 47a78bd8c..2a74f6611 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/EntityCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/EntityCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/GlintCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/GlintCommand.java
index 9ccb22ff0..90da6a2af 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/GlintCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/GlintCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/GlowCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/GlowCommand.java
index 0ca3fd3fb..bad65b4f5 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/GlowCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/GlowCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/HologramCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/HologramCommand.java
index 583198af8..f3d990bf4 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/HologramCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/HologramCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/InventoryCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/InventoryCommand.java
index 4367bb929..9f55e94bd 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/InventoryCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/InventoryCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/LimbCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/LimbCommand.java
index 8d9f8ac87..4812eef30 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/LimbCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/LimbCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ModSettingsCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ModSettingsCommand.java
index 0aac61789..96872f467 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ModSettingsCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ModSettingsCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NametagCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NametagCommand.java
index 215c87563..41799b1a2 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NametagCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NametagCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NickHiderCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NickHiderCommand.java
index 8a62e3ab0..6cfefaf41 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NickHiderCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NickHiderCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NotificationCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NotificationCommand.java
index b6f8342a6..6a7ab8d12 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NotificationCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/NotificationCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/PayNowCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/PayNowCommand.java
index b79979308..1047505aa 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/PayNowCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/PayNowCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/RichPresenceCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/RichPresenceCommand.java
index 185cd868a..cb4e8a6c2 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/RichPresenceCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/RichPresenceCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/SaturationCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/SaturationCommand.java
index eb91e56a4..552f8e901 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/SaturationCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/SaturationCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ServerLinkCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ServerLinkCommand.java
new file mode 100644
index 000000000..d52802288
--- /dev/null
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ServerLinkCommand.java
@@ -0,0 +1,91 @@
+/*
+ * 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.example.command;
+
+import com.lunarclient.apollo.example.ApolloExamplePlugin;
+import com.lunarclient.apollo.example.module.impl.ServerLinkExample;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+public class ServerLinkCommand implements CommandExecutor {
+
+ @Override
+ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
+ if (!(sender instanceof Player)) {
+ sender.sendMessage("Player only!");
+ return true;
+ }
+
+ Player player = (Player) sender;
+
+ if (args.length != 1) {
+ player.sendMessage("Usage: /serverlink ");
+ return true;
+ }
+
+ ServerLinkExample serverLinkExample = ApolloExamplePlugin.getInstance().getServerLinkExample();
+
+ switch (args[0].toLowerCase()) {
+ case "overrideresource": {
+ serverLinkExample.overrideServerLinkResourceExample(player);
+ player.sendMessage("Overriding server link resource...");
+ break;
+ }
+
+ case "resetresource": {
+ serverLinkExample.resetServerLinkResourceExample(player);
+ player.sendMessage("Resetting server link resource...");
+ break;
+ }
+
+ case "addserverlink": {
+ serverLinkExample.addServerLinkExample(player);
+ player.sendMessage("Adding server link...");
+ break;
+ }
+
+ case "removeserverlink": {
+ serverLinkExample.removeServerLinkExample(player);
+ player.sendMessage("Removing server link...");
+ break;
+ }
+
+ case "resetserverlinks": {
+ serverLinkExample.resetServerLinksExample(player);
+ player.sendMessage("Resetting server links...");
+ break;
+ }
+
+ default: {
+ player.sendMessage("Usage: /serverlink ");
+ break;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ServerRuleCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ServerRuleCommand.java
index 4793914d7..60b4b0db1 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ServerRuleCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/ServerRuleCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/StaffModCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/StaffModCommand.java
index 7ff3826b5..fa7ff47ed 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/StaffModCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/StaffModCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/StopwatchCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/StopwatchCommand.java
index b4ef9a19b..a4f081a12 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/StopwatchCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/StopwatchCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TeamCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TeamCommand.java
index c8442182b..fdb553fae 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TeamCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TeamCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TebexCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TebexCommand.java
index f517373bd..da1b9375f 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TebexCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TebexCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TitleCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TitleCommand.java
index cf7ad4cf5..b3bd496ca 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TitleCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TitleCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TntCountdownCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TntCountdownCommand.java
index 1da2caed7..1d9487c80 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TntCountdownCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TntCountdownCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TransferCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TransferCommand.java
index ae3ec7604..9d28e47b0 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TransferCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/TransferCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/VignetteCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/VignetteCommand.java
index 4457ad422..9d94144f7 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/VignetteCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/VignetteCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/WaypointCommand.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/WaypointCommand.java
index 729eaf43d..6970074c7 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/WaypointCommand.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/command/WaypointCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/ApolloModuleExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/ApolloModuleExample.java
index 58bde882e..25d994fe6 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/ApolloModuleExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/ApolloModuleExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/NMSExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/NMSExample.java
index c69849525..43926a9f1 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/NMSExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/NMSExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/AutoTextHotkeyExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/AutoTextHotkeyExample.java
index 31b3cbbcf..43903ec15 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/AutoTextHotkeyExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/AutoTextHotkeyExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/BeamExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/BeamExample.java
index 2327631e3..8f8218904 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/BeamExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/BeamExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/BorderExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/BorderExample.java
index 4df2cf602..6115d85bd 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/BorderExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/BorderExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ChatExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ChatExample.java
index 1200200eb..8efd7311b 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ChatExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ChatExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ColoredFireExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ColoredFireExample.java
index d34639384..49f486e70 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ColoredFireExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ColoredFireExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/CombatExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/CombatExample.java
index 8d1673e66..20c3d5f1d 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/CombatExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/CombatExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/CooldownExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/CooldownExample.java
index bf108776e..e0c8ebc81 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/CooldownExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/CooldownExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -30,6 +30,8 @@ public abstract class CooldownExample extends ApolloModuleExample {
public abstract void displayCooldownItemExample(Player viewer);
+ public abstract void displayCooldownWithStyleExample(Player viewer);
+
public abstract void displayCooldownResourceExample(Player viewer);
public abstract void removeCooldownExample(Player viewer);
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/EntityExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/EntityExample.java
index 90ea77088..1e31888ec 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/EntityExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/EntityExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/GlintExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/GlintExample.java
index 1f10cdb70..b8d730720 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/GlintExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/GlintExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/GlowExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/GlowExample.java
index bbddc7c94..bd939b924 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/GlowExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/GlowExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/HologramExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/HologramExample.java
index 7e69b408b..15bbfd764 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/HologramExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/HologramExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/InventoryExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/InventoryExample.java
index 27ffef3a6..37e62f7c0 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/InventoryExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/InventoryExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/LimbExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/LimbExample.java
index 6bce7227d..52e0648c1 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/LimbExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/LimbExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ModSettingsExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ModSettingsExample.java
index 6121c57e3..e9a35e108 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ModSettingsExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ModSettingsExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NametagExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NametagExample.java
index 02e27a40f..3a5616613 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NametagExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NametagExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NickHiderExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NickHiderExample.java
index 841fff8d1..777ce0954 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NickHiderExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NickHiderExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NotificationExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NotificationExample.java
index b6ecef802..f87dee9c9 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NotificationExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/NotificationExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/PayNowExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/PayNowExample.java
index c19effe73..286de51a3 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/PayNowExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/PayNowExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/RichPresenceExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/RichPresenceExample.java
index 06f590c30..d97ba71ad 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/RichPresenceExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/RichPresenceExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/SaturationExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/SaturationExample.java
index 705b1b2eb..fa972c0fa 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/SaturationExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/SaturationExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ServerLinkExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ServerLinkExample.java
new file mode 100644
index 000000000..26ad56fba
--- /dev/null
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ServerLinkExample.java
@@ -0,0 +1,41 @@
+/*
+ * 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.example.module.impl;
+
+import com.lunarclient.apollo.example.module.ApolloModuleExample;
+import org.bukkit.entity.Player;
+
+public abstract class ServerLinkExample extends ApolloModuleExample {
+
+ public abstract void overrideServerLinkResourceExample(Player viewer);
+
+ public abstract void resetServerLinkResourceExample(Player viewer);
+
+ public abstract void addServerLinkExample(Player viewer);
+
+ public abstract void removeServerLinkExample(Player viewer);
+
+ public abstract void resetServerLinksExample(Player viewer);
+
+}
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ServerRuleExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ServerRuleExample.java
index 68c214464..21c88ba75 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ServerRuleExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/ServerRuleExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/StaffModExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/StaffModExample.java
index 11400c7e3..c36d76679 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/StaffModExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/StaffModExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/StopwatchExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/StopwatchExample.java
index 66f0a65df..3994bbd4a 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/StopwatchExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/StopwatchExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TeamExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TeamExample.java
index 2398fc515..f78ab41d4 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TeamExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TeamExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TebexExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TebexExample.java
index 054ba7f24..b7034085b 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TebexExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TebexExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TitleExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TitleExample.java
index 87075107c..eaf61babc 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TitleExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TitleExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TntCountdownExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TntCountdownExample.java
index 0243c61e3..052cf6887 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TntCountdownExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TntCountdownExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TransferExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TransferExample.java
index 47a82be7a..a3de16fbd 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TransferExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/TransferExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/VignetteExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/VignetteExample.java
index 159f335e7..bf61b15aa 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/VignetteExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/VignetteExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/WaypointExample.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/WaypointExample.java
index 8d41b5462..86ae902e1 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/WaypointExample.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/module/impl/WaypointExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/util/ItemUtil.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/util/ItemUtil.java
index 485ff85aa..3c7db0bf8 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/util/ItemUtil.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/util/ItemUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/util/ServerUtil.java b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/util/ServerUtil.java
index dc91a5c42..f96c85686 100644
--- a/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/util/ServerUtil.java
+++ b/example/bukkit/common/src/main/java/com/lunarclient/apollo/example/util/ServerUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/ApolloJsonExamplePlatform.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/ApolloJsonExamplePlatform.java
index 5820f9466..196b6f81a 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/ApolloJsonExamplePlatform.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/ApolloJsonExamplePlatform.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -43,6 +43,7 @@
import com.lunarclient.apollo.example.json.module.NotificationJsonExample;
import com.lunarclient.apollo.example.json.module.PayNowJsonExample;
import com.lunarclient.apollo.example.json.module.RichPresenceJsonExample;
+import com.lunarclient.apollo.example.json.module.ServerLinkJsonExample;
import com.lunarclient.apollo.example.json.module.ServerRuleJsonExample;
import com.lunarclient.apollo.example.json.module.StaffModJsonExample;
import com.lunarclient.apollo.example.json.module.StopwatchJsonExample;
@@ -85,6 +86,7 @@ public void registerModuleExamples() {
this.setNotificationExample(new NotificationJsonExample());
this.setPayNowExample(new PayNowJsonExample());
this.setRichPresenceExample(new RichPresenceJsonExample());
+ this.setServerLinkExample(new ServerLinkJsonExample());
this.setServerRuleExample(new ServerRuleJsonExample());
this.setStaffModExample(new StaffModJsonExample());
this.setStopwatchExample(new StopwatchJsonExample());
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloPacketReceiveJsonListener.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloPacketReceiveJsonListener.java
new file mode 100644
index 000000000..1d8e46561
--- /dev/null
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloPacketReceiveJsonListener.java
@@ -0,0 +1,162 @@
+/*
+ * 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.example.json.listener;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.lunarclient.apollo.example.ApolloExamplePlugin;
+import com.lunarclient.apollo.example.json.util.JsonUtil;
+import java.nio.charset.StandardCharsets;
+import java.util.UUID;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.messaging.PluginMessageListener;
+import org.jspecify.annotations.NonNull;
+
+public class ApolloPacketReceiveJsonListener implements PluginMessageListener {
+
+ private static final String TYPE_PREFIX = "type.googleapis.com/";
+ private static final JsonParser JSON_PARSER = new JsonParser();
+
+ public ApolloPacketReceiveJsonListener(ApolloExamplePlugin plugin) {
+ }
+
+ @Override
+ public void onPluginMessageReceived(@NonNull String channel, @NonNull Player player, byte[] bytes) {
+ JsonObject payload;
+ try {
+ payload = JSON_PARSER.parse(new String(bytes, StandardCharsets.UTF_8)).getAsJsonObject();
+ } catch (Exception e) {
+ return;
+ }
+
+ if (!payload.has("@type")) {
+ return;
+ }
+
+ String type = payload.get("@type").getAsString();
+ if (type.startsWith(TYPE_PREFIX)) {
+ type = type.substring(TYPE_PREFIX.length());
+ }
+
+ if ("lunarclient.apollo.player.v1.PlayerHandshakeMessage".equals(type)) {
+ this.onPlayerHandshake(payload);
+ }
+
+ // Packet Enrichment Module
+ if ("lunarclient.apollo.packetenrichment.v1.PlayerAttackMessage".equals(type)) {
+ this.onPlayerAttack(payload);
+ } else if ("lunarclient.apollo.packetenrichment.v1.PlayerChatOpenMessage".equals(type)) {
+ this.onPlayerChatOpen(payload);
+ } else if ("lunarclient.apollo.packetenrichment.v1.PlayerChatCloseMessage".equals(type)) {
+ this.onPlayerChatClose(payload);
+ } else if ("lunarclient.apollo.packetenrichment.v1.PlayerUseItemMessage".equals(type)) {
+ this.onPlayerUseItem(payload);
+ } else if ("lunarclient.apollo.packetenrichment.v1.PlayerUseItemBucketMessage".equals(type)) {
+ this.onPlayerUseItemBucket(payload);
+ }
+ }
+
+ private void onPlayerHandshake(JsonObject message) {
+ String checkoutSupport = message.get("embedded_checkout_support").getAsString();
+
+ JsonObject minecraftVersion = message.getAsJsonObject("minecraft_version");
+ String version = minecraftVersion.get("enum").getAsString();
+
+ JsonObject lunarClientVersion = message.getAsJsonObject("lunar_client_version");
+ String gitBranch = lunarClientVersion.get("git_branch").getAsString();
+ String gitCommit = lunarClientVersion.get("git_commit").getAsString();
+ String semVer = lunarClientVersion.get("semver").getAsString();
+
+ for (JsonElement element : message.getAsJsonArray("installed_mods")) {
+ JsonObject mod = element.getAsJsonObject();
+
+ String modId = mod.get("id").getAsString();
+ String displayName = mod.get("name").getAsString();
+ String modVersion = mod.get("version").getAsString();
+ String modType = mod.get("type").getAsString();
+ }
+ }
+
+ private void onPlayerAttack(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+
+ JsonObject targetInfo = message.getAsJsonObject("target_info");
+ JsonObject attackerInfo = message.getAsJsonObject("attacker_info");
+
+ this.onPlayerInfo(targetInfo);
+ this.onPlayerInfo(attackerInfo);
+ }
+
+ private void onPlayerChatOpen(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+ this.onPlayerInfo(message.getAsJsonObject("player_info"));
+ }
+
+ private void onPlayerChatClose(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+ this.onPlayerInfo(message.getAsJsonObject("player_info"));
+ }
+
+ private void onPlayerUseItem(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+ this.onPlayerInfo(message.getAsJsonObject("player_info"));
+
+ boolean mainHand = message.get("main_hand").getAsBoolean();
+ }
+
+ private void onPlayerUseItemBucket(JsonObject message) {
+ long instantiationTimeMs = JsonUtil.toJavaTimestamp(message);
+ this.onPlayerInfo(message.getAsJsonObject("player_info"));
+
+ JsonObject rayTraceResult = message.getAsJsonObject("ray_trace_result");
+
+ if (rayTraceResult.has("block")) {
+ JsonObject blockHit = rayTraceResult.getAsJsonObject("block");
+
+ JsonObject hitLocation = blockHit.getAsJsonObject("hit_location");
+ JsonObject blockLocation = blockHit.getAsJsonObject("block_location");
+ String directionStr = blockHit.get("direction").getAsString();
+ } else if (rayTraceResult.has("entity")) {
+ JsonObject entityHit = rayTraceResult.getAsJsonObject("entity");
+
+ JsonObject hitLocation = entityHit.getAsJsonObject("hit_location");
+ String entityId = entityHit.get("entity_id").getAsString();
+ } else {
+ // MISS
+ }
+ }
+
+ private void onPlayerInfo(JsonObject info) {
+ UUID uuid = JsonUtil.toJavaUuid(info.getAsJsonObject("player_uuid"));
+ Location location = JsonUtil.toBukkitPlayerLocation(info.getAsJsonObject("location"));
+ boolean sneaking = info.get("sneaking").getAsBoolean();
+ boolean sprinting = info.get("sprinting").getAsBoolean();
+ boolean jumping = info.get("jumping").getAsBoolean();
+ float forwardSpeed = info.get("forward_speed").getAsFloat();
+ float strafeSpeed = info.get("strafe_speed").getAsFloat();
+ }
+
+}
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloPlayerJsonListener.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloPlayerJsonListener.java
index 3de23bfa1..6c0984d56 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloPlayerJsonListener.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloPlayerJsonListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -42,21 +42,22 @@ public class ApolloPlayerJsonListener implements Listener {
private final ApolloExamplePlugin plugin;
- private final Set playersRunningApollo = new HashSet<>();
+ private static final Set PLAYERS_RUNNING_APOLLO = new HashSet<>();
public ApolloPlayerJsonListener(ApolloExamplePlugin plugin) {
this.plugin = plugin;
Messenger messenger = Bukkit.getServer().getMessenger();
messenger.registerIncomingPluginChannel(plugin, "lunar:apollo", (s, player, bytes) -> { });
- messenger.registerIncomingPluginChannel(plugin, "apollo:json", (s, player, bytes) -> { });
+ messenger.registerIncomingPluginChannel(plugin, "apollo:json", new ApolloRoundtripJsonListener(plugin));
+ messenger.registerIncomingPluginChannel(plugin, "apollo:json", new ApolloPacketReceiveJsonListener(plugin));
messenger.registerOutgoingPluginChannel(plugin, "apollo:json");
Bukkit.getPluginManager().registerEvents(this, plugin);
}
public void disable() {
- this.playersRunningApollo.clear();
+ PLAYERS_RUNNING_APOLLO.clear();
Messenger messenger = Bukkit.getServer().getMessenger();
messenger.unregisterIncomingPluginChannel(this.plugin, "lunar:apollo");
@@ -78,7 +79,7 @@ private void onRegisterChannel(PlayerRegisterChannelEvent event) {
// Sending the player's world name to the client is required for some modules
JsonPacketUtil.sendPacket(player, this.createUpdatePlayerWorldMessage(player));
- this.playersRunningApollo.add(player.getUniqueId());
+ PLAYERS_RUNNING_APOLLO.add(player.getUniqueId());
player.sendMessage("You are using LunarClient!");
}
@@ -97,8 +98,8 @@ private JsonObject createUpdatePlayerWorldMessage(Player player) {
return message;
}
- private boolean isPlayerRunningApollo(Player player) {
- return this.playersRunningApollo.contains(player.getUniqueId());
+ public static boolean isPlayerRunningApollo(Player player) {
+ return PLAYERS_RUNNING_APOLLO.contains(player.getUniqueId());
}
}
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloRoundtripJsonListener.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloRoundtripJsonListener.java
new file mode 100644
index 000000000..c9ad3813d
--- /dev/null
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/listener/ApolloRoundtripJsonListener.java
@@ -0,0 +1,117 @@
+/*
+ * 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.example.json.listener;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.lunarclient.apollo.example.ApolloExamplePlugin;
+import com.lunarclient.apollo.example.json.util.JsonPacketUtil;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import lombok.Getter;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.messaging.PluginMessageListener;
+import org.jspecify.annotations.NonNull;
+
+public class ApolloRoundtripJsonListener implements PluginMessageListener {
+
+ private static final String TYPE_PREFIX = "type.googleapis.com/";
+ private static final JsonParser JSON_PARSER = new JsonParser();
+
+ @Getter
+ private static ApolloRoundtripJsonListener instance;
+
+ private final Map>> roundTripPacketFutures = new ConcurrentHashMap<>();
+ private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
+
+ public ApolloRoundtripJsonListener(ApolloExamplePlugin plugin) {
+ instance = this;
+ }
+
+ @Override
+ public void onPluginMessageReceived(@NonNull String channel, @NonNull Player player, byte[] bytes) {
+ JsonObject payload;
+ try {
+ payload = JSON_PARSER.parse(new String(bytes, StandardCharsets.UTF_8)).getAsJsonObject();
+ } catch (Exception e) {
+ return;
+ }
+
+ if (!payload.has("@type")) {
+ return;
+ }
+
+ String type = payload.get("@type").getAsString();
+ if (type.startsWith(TYPE_PREFIX)) {
+ type = type.substring(TYPE_PREFIX.length());
+ }
+
+ if ("lunarclient.apollo.transfer.v1.PingResponse".equals(type)
+ || "lunarclient.apollo.transfer.v1.TransferResponse".equals(type)) {
+ UUID requestId = UUID.fromString(payload.get("request_id").getAsString().replace("+", "-"));
+ this.handleResponse(player, requestId, payload);
+ }
+ }
+
+ public CompletableFuture sendRequest(Player player, UUID requestId, JsonObject request, String requestType) {
+ request.addProperty("@type", TYPE_PREFIX + requestType);
+ request.addProperty("request_id", requestId.toString());
+ JsonPacketUtil.sendPacket(player, request);
+
+ CompletableFuture future = new CompletableFuture<>();
+
+ this.roundTripPacketFutures
+ .computeIfAbsent(player.getUniqueId(), k -> new ConcurrentHashMap<>())
+ .put(requestId, future);
+
+ ScheduledFuture> timeoutTask = this.executorService.schedule(() ->
+ future.completeExceptionally(new TimeoutException("Response timed out")),
+ 10, TimeUnit.SECONDS
+ );
+
+ future.whenComplete((result, throwable) -> timeoutTask.cancel(false));
+ return future;
+ }
+
+ private void handleResponse(Player player, UUID requestId, JsonObject message) {
+ Map> futures = this.roundTripPacketFutures.get(player.getUniqueId());
+ if (futures == null) {
+ return;
+ }
+
+ CompletableFuture future = futures.remove(requestId);
+ if (future != null) {
+ future.complete(message);
+ }
+ }
+
+}
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/AutoTextHotkeyJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/AutoTextHotkeyJsonExample.java
index e1bd38f95..34948fed1 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/AutoTextHotkeyJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/AutoTextHotkeyJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/BeamJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/BeamJsonExample.java
index d67010e0c..f8c2dd6b6 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/BeamJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/BeamJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/BorderJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/BorderJsonExample.java
index 922935105..a00553a0f 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/BorderJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/BorderJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ChatJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ChatJsonExample.java
index b43359bc5..9c7128f1b 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ChatJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ChatJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ColoredFireJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ColoredFireJsonExample.java
index 3c1461398..19ecf7624 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ColoredFireJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ColoredFireJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/CombatJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/CombatJsonExample.java
index 31559640a..1fb53ba08 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/CombatJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/CombatJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/CooldownJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/CooldownJsonExample.java
index 96393e8b5..a254be03f 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/CooldownJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/CooldownJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -27,6 +27,7 @@
import com.lunarclient.apollo.example.json.util.JsonPacketUtil;
import com.lunarclient.apollo.example.json.util.JsonUtil;
import com.lunarclient.apollo.example.module.impl.CooldownExample;
+import java.awt.Color;
import java.time.Duration;
import org.bukkit.entity.Player;
@@ -43,13 +44,31 @@ public void displayCooldownItemExample(Player viewer) {
JsonPacketUtil.sendPacket(viewer, message);
}
+ @Override
+ public void displayCooldownWithStyleExample(Player viewer) {
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.cooldown.v1.DisplayCooldownMessage");
+ message.addProperty("name", "book-cooldown");
+ message.addProperty("duration", JsonUtil.createDurationObject(Duration.ofSeconds(30)));
+ message.add("icon", JsonUtil.createItemStackIconObject("BOOK", 0, 0));
+
+ JsonObject style = new JsonObject();
+ style.add("circle_start_color", JsonUtil.createColorObject(new Color(255, 85, 85))); // ApolloColors.RED
+ style.add("circle_end_color", JsonUtil.createColorObject(new Color(85, 255, 85))); // ApolloColors.GREEN
+ style.add("circle_edge_color", JsonUtil.createColorObject(new Color(85, 85, 85))); // ApolloColors.DAR_GRAY
+ style.add("text_color", JsonUtil.createColorObject(new Color(255, 85, 255))); // ApolloColors.LIGHT_PURPLE
+ message.add("style", style);
+
+ JsonPacketUtil.sendPacket(viewer, message);
+ }
+
@Override
public void displayCooldownResourceExample(Player viewer) {
JsonObject message = new JsonObject();
message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.cooldown.v1.DisplayCooldownMessage");
message.addProperty("name", "lunar-cooldown");
message.addProperty("duration", JsonUtil.createDurationObject(Duration.ofSeconds(15)));
- message.add("icon", JsonUtil.createSimpleResourceLocationIconObject("lunar:logo/logo-200x182.svg", 12));
+ message.add("icon", JsonUtil.createSimpleResourceLocationIconObject("lunar:logo/logo-64x64.png", 24));
JsonPacketUtil.sendPacket(viewer, message);
}
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/EntityJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/EntityJsonExample.java
index c1f6c3d53..6c328bfa7 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/EntityJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/EntityJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/GlowJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/GlowJsonExample.java
index dd1b8786c..33cf7a3bb 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/GlowJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/GlowJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/HologramJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/HologramJsonExample.java
index c66928451..fdf5a524f 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/HologramJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/HologramJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/LimbJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/LimbJsonExample.java
index 33ec2f5c5..26ae3578c 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/LimbJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/LimbJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ModSettingsJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ModSettingsJsonExample.java
index fc3b577bd..bb245df13 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ModSettingsJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ModSettingsJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NametagJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NametagJsonExample.java
index c994179c2..0b2f1de79 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NametagJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NametagJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NickHiderJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NickHiderJsonExample.java
index 0b1dfd626..5ffe11380 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NickHiderJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NickHiderJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NotificationJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NotificationJsonExample.java
index 9a587a498..70c4b1bdc 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NotificationJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/NotificationJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -51,7 +51,7 @@ public void displayNotificationExample(Player viewer) {
));
message.addProperty("display_time", JsonUtil.createDurationObject(Duration.ofSeconds(5)));
- message.addProperty("resource_location", "icons/golden_apple.png");
+ message.addProperty("resource_location", "textures/items/apple_golden.png");
JsonPacketUtil.sendPacket(viewer, message);
}
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/PayNowJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/PayNowJsonExample.java
index b7e6069d5..ee86295ff 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/PayNowJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/PayNowJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/RichPresenceJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/RichPresenceJsonExample.java
index b238fa470..0d6b7ca2c 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/RichPresenceJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/RichPresenceJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ServerLinkJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ServerLinkJsonExample.java
new file mode 100644
index 000000000..6cd6f7cd4
--- /dev/null
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ServerLinkJsonExample.java
@@ -0,0 +1,99 @@
+/*
+ * 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.example.json.module;
+
+import com.google.common.collect.Lists;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.lunarclient.apollo.example.json.util.AdventureUtil;
+import com.lunarclient.apollo.example.json.util.JsonPacketUtil;
+import com.lunarclient.apollo.example.json.util.JsonUtil;
+import com.lunarclient.apollo.example.module.impl.ServerLinkExample;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
+import org.bukkit.entity.Player;
+
+public class ServerLinkJsonExample extends ServerLinkExample {
+
+ @Override
+ public void overrideServerLinkResourceExample(Player viewer) {
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.OverrideServerLinkResourceMessage");
+ message.add("icon", JsonUtil.createResourceLocationIconObject("lunar:logo/logo-100x100.png"));
+
+ JsonPacketUtil.sendPacket(viewer, message);
+ }
+
+ @Override
+ public void resetServerLinkResourceExample(Player viewer) {
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.ResetServerLinkResourceMessage");
+
+ JsonPacketUtil.sendPacket(viewer, message);
+ }
+
+ @Override
+ public void addServerLinkExample(Player viewer) {
+ JsonArray serverLinks = Lists.newArrayList(
+ this.createServerLinkObject("website", Component.text("Website", NamedTextColor.LIGHT_PURPLE), "https://www.lunarclient.com/"),
+ this.createServerLinkObject("support", Component.text("Support", NamedTextColor.AQUA), "https://support.lunarclient.com/"),
+ this.createServerLinkObject("status", Component.text("Status", NamedTextColor.RED), "https://status.lunarclient.com/")
+ ).stream().collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
+
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.AddServerLinkMessage");
+ message.add("server_links", serverLinks);
+
+ JsonPacketUtil.sendPacket(viewer, message);
+ }
+
+ private JsonObject createServerLinkObject(String id, Component displayName, String url) {
+ JsonObject serverLinkObject = new JsonObject();
+ serverLinkObject.addProperty("id", id);
+ serverLinkObject.addProperty("display_name_adventure_json_lines", AdventureUtil.toJson(displayName));
+ serverLinkObject.addProperty("url", url);
+ return serverLinkObject;
+ }
+
+ @Override
+ public void removeServerLinkExample(Player viewer) {
+ JsonArray serverLinkIds = Lists.newArrayList("website", "support", "status")
+ .stream().collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
+
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.RemoveServerLinkMessage");
+ message.add("server_link_ids", serverLinkIds);
+
+ JsonPacketUtil.sendPacket(viewer, message);
+ }
+
+ @Override
+ public void resetServerLinksExample(Player viewer) {
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.serverlink.v1.ResetServerLinksMessage");
+
+ JsonPacketUtil.sendPacket(viewer, message);
+ }
+
+}
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ServerRuleJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ServerRuleJsonExample.java
index e4b38ddb2..f965dfff6 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ServerRuleJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/ServerRuleJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/StaffModJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/StaffModJsonExample.java
index 73600ae5d..9967db00d 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/StaffModJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/StaffModJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/StopwatchJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/StopwatchJsonExample.java
index 64b7f3327..96a972cac 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/StopwatchJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/StopwatchJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TeamJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TeamJsonExample.java
index 8683030d2..47f010b1d 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TeamJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TeamJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -23,10 +23,10 @@
*/
package com.lunarclient.apollo.example.json.module;
-import com.google.common.collect.Maps;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.lunarclient.apollo.example.ApolloExamplePlugin;
+import com.lunarclient.apollo.example.json.listener.ApolloPlayerJsonListener;
import com.lunarclient.apollo.example.json.util.AdventureUtil;
import com.lunarclient.apollo.example.json.util.JsonPacketUtil;
import com.lunarclient.apollo.example.json.util.JsonUtil;
@@ -34,10 +34,10 @@
import com.lunarclient.apollo.example.util.ServerUtil;
import java.awt.Color;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
@@ -49,8 +49,8 @@
public class TeamJsonExample extends TeamExample implements Listener {
- private final Map teamsByTeamId = Maps.newHashMap();
- private final Map teamsByPlayerUuid = Maps.newHashMap();
+ private final Map teamsByTeamId = new ConcurrentHashMap<>();
+ private final Map teamsByPlayerUuid = new ConcurrentHashMap<>();
public TeamJsonExample() {
if (ServerUtil.isFolia()) {
@@ -113,7 +113,7 @@ public class Team {
public Team() {
this.teamId = UUID.randomUUID();
- this.members = new HashMap<>();
+ this.members = new ConcurrentHashMap<>();
}
public void addMember(Player player) {
@@ -131,33 +131,75 @@ public void removeMember(Player player) {
JsonPacketUtil.sendPacket(player, message);
}
- private JsonObject createTeamMember(Player member) {
+ private JsonObject createTeamMember(Player player, boolean withinPlayerTrackingRange) {
JsonObject message = new JsonObject();
- message.add("player_uuid", JsonUtil.createUuidObject(member.getUniqueId()));
- message.addProperty("adventure_json_player_name", AdventureUtil.toJson(
- Component.text()
- .content(member.getName())
- .color(NamedTextColor.WHITE)
- .build()
- ));
+ message.add("player_uuid", JsonUtil.createUuidObject(player.getUniqueId()));
message.add("marker_color", JsonUtil.createColorObject(Color.WHITE));
- message.add("location", JsonUtil.createLocationObject(member.getLocation()));
+
+ if (!withinPlayerTrackingRange) {
+ message.add("location", JsonUtil.createLocationObject(player.getLocation()));
+
+ message.addProperty("adventure_json_player_name", AdventureUtil.toJson(
+ Component.text()
+ .content(player.getName())
+ .color(NamedTextColor.WHITE)
+ .build()
+ ));
+ }
return message;
}
// The refresh method used for updating members locations
public void refresh() {
- JsonArray teammates = this.members.values()
- .stream().filter(Player::isOnline)
- .map(this::createTeamMember)
- .collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
+ for (Player viewer : this.members.values()) {
+ if (!ApolloPlayerJsonListener.isPlayerRunningApollo(viewer)) {
+ continue;
+ }
- JsonObject message = new JsonObject();
- message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.team.v1.UpdateTeamMembersMessage");
- message.add("members", teammates);
+ JsonArray teammates = new JsonArray();
+
+ for (Player member : this.members.values()) {
+ if (viewer == member) {
+ continue;
+ }
+
+ if (!viewer.canSee(member)) {
+ continue;
+ }
+
+ if (!viewer.getWorld().getName().equals(member.getWorld().getName())) {
+ continue;
+ }
+
+ boolean withinPlayerTrackingRange = this.isWithinPlayerTrackingRange(viewer, member);
+ teammates.add(this.createTeamMember(member, withinPlayerTrackingRange));
+ }
+
+ JsonObject message = new JsonObject();
+ message.addProperty("@type", "type.googleapis.com/lunarclient.apollo.team.v1.UpdateTeamMembersMessage");
+ message.add("members", teammates);
+
+ JsonPacketUtil.sendPacket(viewer, message);
+ }
+ }
- this.members.values().forEach(member -> JsonPacketUtil.sendPacket(member, message));
+ /**
+ * This uses a simple distance check based on Paper/Spigot defaults
+ * (96 blocks for players). Ideally, this could be checked directly through
+ * the server's internal entity tracker for exact tracking behavior, but that
+ * is not exposed in the Bukkit API.
+ *
+ * @param viewer the viewer
+ * @param member the member
+ * @return whether within player tracking range
+ */
+ private boolean isWithinPlayerTrackingRange(Player viewer, Player member) {
+ double maxDistance = 96;
+ double dx = viewer.getLocation().getX() - member.getLocation().getX();
+ double dz = viewer.getLocation().getZ() - member.getLocation().getZ();
+
+ return (dx * dx + dz * dz) <= (maxDistance * maxDistance);
}
public UUID getTeamId() {
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TebexJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TebexJsonExample.java
index a3a8920c9..b3542ca20 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TebexJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TebexJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TitleJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TitleJsonExample.java
index a7d138d4b..a03aca206 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TitleJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TitleJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TntCountdownJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TntCountdownJsonExample.java
index 90483853d..334944ef3 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TntCountdownJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TntCountdownJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TransferJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TransferJsonExample.java
index 340a4b7b1..1c08bd0cb 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TransferJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/TransferJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -23,19 +23,88 @@
*/
package com.lunarclient.apollo.example.json.module;
+import com.google.common.collect.Lists;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.lunarclient.apollo.example.json.listener.ApolloRoundtripJsonListener;
import com.lunarclient.apollo.example.module.impl.TransferExample;
+import java.util.UUID;
import org.bukkit.entity.Player;
public class TransferJsonExample extends TransferExample {
@Override
public void transferExample(Player player) {
- this.sendNotImplemented(player);
+ UUID requestId = UUID.randomUUID();
+
+ JsonObject transferRequestMessage = new JsonObject();
+ transferRequestMessage.addProperty("server_ip", "mc.hypixel.net");
+
+ ApolloRoundtripJsonListener.getInstance()
+ .sendRequest(player, requestId, transferRequestMessage, "lunarclient.apollo.transfer.v1.TransferRequest")
+ .thenAccept(response -> {
+ String message = "";
+ String status = response.get("status").getAsString();
+
+ switch (status) {
+ case "STATUS_ACCEPTED": {
+ message = "Transfer accepted! Goodbye!";
+ break;
+ }
+
+ case "STATUS_REJECTED": {
+ message = "Transfer rejected by client!";
+ break;
+ }
+ }
+
+ player.sendMessage(message);
+ }).exceptionally(throwable -> {
+ player.sendMessage("Failed to receive a response in time.");
+ return null;
+ });
}
@Override
public void pingExample(Player player) {
- this.sendNotImplemented(player);
+ UUID requestId = UUID.randomUUID();
+
+ JsonObject pingRequestMessage = new JsonObject();
+ JsonArray serverIps = Lists.newArrayList("mc.hypixel.net", "minehut.com")
+ .stream().collect(JsonArray::new, JsonArray::add, JsonArray::addAll);
+ pingRequestMessage.add("server_ips", serverIps);
+
+ ApolloRoundtripJsonListener.getInstance()
+ .sendRequest(player, requestId, pingRequestMessage, "lunarclient.apollo.transfer.v1.PingRequest")
+ .thenAccept(response -> {
+ JsonArray pingDataList = response.getAsJsonArray("ping_data");
+
+ for (JsonElement element : pingDataList) {
+ JsonObject pingData = element.getAsJsonObject();
+ String message = "";
+
+ String status = pingData.get("status").getAsString();
+ switch (status) {
+ // Displays successful ping request to display the server IP and the players ping to that server.
+ case "STATUS_SUCCESS": {
+ message = String.format("Ping to %s is %d ms.", pingData.get("server_ip").getAsString(), pingData.get("ping").getAsInt());
+ break;
+ }
+
+ // If the ping request times-out
+ case "STATUS_TIMED_OUT": {
+ message = String.format("Failed to ping %s", pingData.get("server_ip").getAsString());
+ break;
+ }
+ }
+
+ player.sendMessage(message);
+ }
+ }).exceptionally(throwable -> {
+ player.sendMessage("Failed to receive a response in time.");
+ return null;
+ });
}
}
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/VignetteJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/VignetteJsonExample.java
index d6720c4ab..25a79c80f 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/VignetteJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/VignetteJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/WaypointJsonExample.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/WaypointJsonExample.java
index 8907f3bbd..a0a2f64ce 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/WaypointJsonExample.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/module/WaypointJsonExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/AdventureUtil.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/AdventureUtil.java
index 2efd4938c..3e8d0c670 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/AdventureUtil.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/AdventureUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/JsonPacketUtil.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/JsonPacketUtil.java
index 7b862ef50..3e1b97502 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/JsonPacketUtil.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/JsonPacketUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -40,18 +40,23 @@
public final class JsonPacketUtil {
- private static final List APOLLO_MODULES = Arrays.asList("limb", "beam", "border", "chat", "colored_fire", "combat", "cooldown",
- "entity", "glow", "hologram", "mod_setting", "nametag", "nick_hider", "notification", "packet_enrichment", "rich_presence",
- "server_rule", "staff_mod", "stopwatch", "team", "title", "tnt_countdown", "transfer", "vignette", "waypoint"
+ private static final List APOLLO_MODULES = Arrays.asList("auto_text_hotkey", "beam", "border", "chat", "colored_fire", "combat", "cooldown",
+ "entity", "glint", "glow", "hologram", "inventory", "limb", "mod_setting", "nametag", "nick_hider", "notification", "pay_now", "packet_enrichment",
+ "rich_presence", "saturation", "server_rule", "staff_mod", "stopwatch", "team", "tebex", "title", "tnt_countdown", "transfer", "vignette", "waypoint"
);
// Module Id -> Option key -> Object
private static final Table CONFIG_MODULE_PROPERTIES = HashBasedTable.create();
static {
- // Module Options that the client needs to notified about, these properties are sent with the enable module packet
+ // Module Options the client needs to be notified about. These properties are sent with the enable module packet.
// While using the Apollo plugin this would be equivalent to modifying the config.yml
CONFIG_MODULE_PROPERTIES.put("combat", "disable-miss-penalty", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-attack.send-packet", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-chat-open.send-packet", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-chat-close.send-packet", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-use-item.send-packet", false);
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-use-item-bucket.send-packet", false);
CONFIG_MODULE_PROPERTIES.put("server_rule", "competitive-game", false);
CONFIG_MODULE_PROPERTIES.put("server_rule", "competitive-commands", Arrays.asList("/server", "/servers", "/hub"));
CONFIG_MODULE_PROPERTIES.put("server_rule", "disable-shaders", false);
diff --git a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/JsonUtil.java b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/JsonUtil.java
index 189665675..841a96943 100644
--- a/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/JsonUtil.java
+++ b/example/bukkit/json/src/main/java/com/lunarclient/apollo/example/json/util/JsonUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -26,8 +26,10 @@
import com.google.gson.JsonObject;
import java.awt.Color;
import java.time.Duration;
+import java.time.Instant;
import java.util.Map;
import java.util.UUID;
+import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.jetbrains.annotations.NotNull;
@@ -35,6 +37,18 @@
public final class JsonUtil {
+ public static UUID toJavaUuid(JsonObject obj) {
+ long high = Long.parseUnsignedLong(obj.get("high64").getAsString());
+ long low = Long.parseUnsignedLong(obj.get("low64").getAsString());
+ return new UUID(high, low);
+ }
+
+ public static long toJavaTimestamp(JsonObject timestampObject) {
+ JsonObject packetInfo = timestampObject.getAsJsonObject("packet_info");
+ String iso = packetInfo.get("instantiation_time").getAsString();
+ return Instant.parse(iso).toEpochMilli();
+ }
+
public static JsonObject createEnableModuleObjectWithType(@NotNull String module, Map properties) {
JsonObject enableModuleObject = JsonPacketUtil.createEnableModuleObject(module, properties);
enableModuleObject.addProperty("@type", "type.googleapis.com/lunarclient.apollo.configurable.v1.ConfigurableSettings");
@@ -105,6 +119,22 @@ public static JsonObject createBlockLocationObject(@NotNull Location location) {
return locationObject;
}
+ public static Location toBukkitLocation(JsonObject message) {
+ return new Location(
+ Bukkit.getWorld(message.get("world").getAsString()),
+ message.get("x").getAsDouble(),
+ message.get("y").getAsDouble(),
+ message.get("z").getAsDouble()
+ );
+ }
+
+ public static Location toBukkitPlayerLocation(JsonObject message) {
+ Location location = JsonUtil.toBukkitLocation(message.getAsJsonObject("location"));
+ location.setYaw(message.get("yaw").getAsFloat());
+ location.setPitch(message.get("pitch").getAsFloat());
+ return location;
+ }
+
public static JsonObject createItemStackIconObject(@Nullable String itemName, int itemId, int customModelData) {
JsonObject itemIconObject = new JsonObject();
if (itemName != null) {
@@ -120,6 +150,16 @@ public static JsonObject createItemStackIconObject(@Nullable String itemName, in
return iconObject;
}
+ public static JsonObject createResourceLocationIconObject(@NotNull String resourceLocation) {
+ JsonObject resourceIconObject = new JsonObject();
+ resourceIconObject.addProperty("resource_location", resourceLocation);
+
+ JsonObject iconObject = new JsonObject();
+ iconObject.add("resource_location", resourceIconObject);
+
+ return iconObject;
+ }
+
public static JsonObject createSimpleResourceLocationIconObject(@NotNull String resourceLocation, int size) {
JsonObject simpleIconObject = new JsonObject();
simpleIconObject.addProperty("resource_location", resourceLocation);
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/ApolloProtoExamplePlatform.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/ApolloProtoExamplePlatform.java
index 75b62a397..f02c1bfd3 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/ApolloProtoExamplePlatform.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/ApolloProtoExamplePlatform.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -43,6 +43,7 @@
import com.lunarclient.apollo.example.proto.module.NotificationProtoExample;
import com.lunarclient.apollo.example.proto.module.PayNowProtoExample;
import com.lunarclient.apollo.example.proto.module.RichPresenceProtoExample;
+import com.lunarclient.apollo.example.proto.module.ServerLinkProtoExample;
import com.lunarclient.apollo.example.proto.module.ServerRuleProtoExample;
import com.lunarclient.apollo.example.proto.module.StaffModProtoExample;
import com.lunarclient.apollo.example.proto.module.StopwatchProtoExample;
@@ -85,6 +86,7 @@ public void registerModuleExamples() {
this.setNotificationExample(new NotificationProtoExample());
this.setPayNowExample(new PayNowProtoExample());
this.setRichPresenceExample(new RichPresenceProtoExample());
+ this.setServerLinkExample(new ServerLinkProtoExample());
this.setServerRuleExample(new ServerRuleProtoExample());
this.setStaffModExample(new StaffModProtoExample());
this.setStopwatchExample(new StopwatchProtoExample());
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloPacketReceiveProtoListener.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloPacketReceiveProtoListener.java
index 4fb6e2d7f..63933bd75 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloPacketReceiveProtoListener.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloPacketReceiveProtoListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -25,23 +25,31 @@
import com.google.protobuf.Any;
import com.google.protobuf.InvalidProtocolBufferException;
+import com.lunarclient.apollo.common.v1.BlockLocation;
+import com.lunarclient.apollo.common.v1.EntityId;
+import com.lunarclient.apollo.common.v1.Location;
import com.lunarclient.apollo.common.v1.LunarClientVersion;
import com.lunarclient.apollo.common.v1.MinecraftVersion;
import com.lunarclient.apollo.example.ApolloExamplePlugin;
import com.lunarclient.apollo.example.proto.util.ProtobufUtil;
+import com.lunarclient.apollo.packetenrichment.v1.BlockHit;
+import com.lunarclient.apollo.packetenrichment.v1.Direction;
+import com.lunarclient.apollo.packetenrichment.v1.EntityHit;
import com.lunarclient.apollo.packetenrichment.v1.PlayerAttackMessage;
import com.lunarclient.apollo.packetenrichment.v1.PlayerChatCloseMessage;
import com.lunarclient.apollo.packetenrichment.v1.PlayerChatOpenMessage;
import com.lunarclient.apollo.packetenrichment.v1.PlayerInfo;
+import com.lunarclient.apollo.packetenrichment.v1.PlayerUseItemBucketMessage;
import com.lunarclient.apollo.packetenrichment.v1.PlayerUseItemMessage;
+import com.lunarclient.apollo.packetenrichment.v1.RayTraceResult;
import com.lunarclient.apollo.player.v1.EmbeddedCheckoutSupport;
import com.lunarclient.apollo.player.v1.ModMessage;
import com.lunarclient.apollo.player.v1.PlayerHandshakeMessage;
import java.util.List;
import java.util.UUID;
-import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.plugin.messaging.PluginMessageListener;
+import org.jspecify.annotations.NonNull;
public class ApolloPacketReceiveProtoListener implements PluginMessageListener {
@@ -50,7 +58,7 @@ public ApolloPacketReceiveProtoListener(ApolloExamplePlugin plugin) {
}
@Override
- public void onPluginMessageReceived(String s, Player player, byte[] bytes) {
+ public void onPluginMessageReceived(@NonNull String channel, @NonNull Player player, byte[] bytes) {
try {
Any any = Any.parseFrom(bytes);
@@ -67,6 +75,8 @@ public void onPluginMessageReceived(String s, Player player, byte[] bytes) {
this.onPlayerChatClose(any.unpack(PlayerChatCloseMessage.class));
} else if (any.is(PlayerUseItemMessage.class)) {
this.onPlayerUseItem(any.unpack(PlayerUseItemMessage.class));
+ } else if (any.is(PlayerUseItemBucketMessage.class)) {
+ this.onPlayerUseItemBucket(any.unpack(PlayerUseItemBucketMessage.class));
}
} catch (InvalidProtocolBufferException e) {
throw new RuntimeException(e);
@@ -74,10 +84,10 @@ public void onPluginMessageReceived(String s, Player player, byte[] bytes) {
}
private void onPlayerHandshake(PlayerHandshakeMessage message) {
+ EmbeddedCheckoutSupport checkoutSupport = message.getEmbeddedCheckoutSupport();
MinecraftVersion minecraftVersion = message.getMinecraftVersion();
LunarClientVersion lunarClientVersion = message.getLunarClientVersion();
- EmbeddedCheckoutSupport checkoutSupport = message.getEmbeddedCheckoutSupport();
String gitBranch = lunarClientVersion.getGitBranch();
String gitCommit = lunarClientVersion.getGitCommit();
String semVer = lunarClientVersion.getSemver();
@@ -124,9 +134,32 @@ private void onPlayerUseItem(PlayerUseItemMessage message) {
boolean mainHand = message.getMainHand();
}
+ private void onPlayerUseItemBucket(PlayerUseItemBucketMessage message) {
+ long instantiationTimeMs = ProtobufUtil.toJavaTimestamp(message.getPacketInfo().getInstantiationTime());
+
+ PlayerInfo playerInfo = message.getPlayerInfo();
+ this.onPlayerInfo(playerInfo);
+
+ RayTraceResult rayTraceResult = message.getRayTraceResult();
+
+ if (rayTraceResult.hasBlock()) {
+ BlockHit blockHit = rayTraceResult.getBlock();
+
+ Location hitLocation = blockHit.getHitLocation();
+ BlockLocation blockLocation = blockHit.getBlockLocation();
+ Direction direction = blockHit.getDirection();
+ } else if (rayTraceResult.hasEntity()) {
+ EntityHit entityHit = rayTraceResult.getEntity();
+ Location hitLocation = entityHit.getHitLocation();
+ EntityId entityId = entityHit.getEntityId();
+ } else {
+ // Miss
+ }
+ }
+
private void onPlayerInfo(PlayerInfo info) {
UUID uuid = ProtobufUtil.toJavaUuid(info.getPlayerUuid());
- Location location = ProtobufUtil.toBukkitLocation(info.getLocation());
+ org.bukkit.Location location = ProtobufUtil.toBukkitLocation(info.getLocation());
boolean sneaking = info.getSneaking();
boolean sprinting = info.getSprinting();
boolean jumping = info.getJumping();
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloPlayerProtoListener.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloPlayerProtoListener.java
index efcbcbe9e..a9aee6324 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloPlayerProtoListener.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloPlayerProtoListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -42,7 +42,7 @@ public class ApolloPlayerProtoListener implements Listener {
private final ApolloExamplePlugin plugin;
- private final Set playersRunningApollo = new HashSet<>();
+ private static final Set PLAYERS_RUNNING_APOLLO = new HashSet<>();
public ApolloPlayerProtoListener(ApolloExamplePlugin plugin) {
this.plugin = plugin;
@@ -56,7 +56,7 @@ public ApolloPlayerProtoListener(ApolloExamplePlugin plugin) {
}
public void disable() {
- this.playersRunningApollo.clear();
+ PLAYERS_RUNNING_APOLLO.clear();
Messenger messenger = Bukkit.getServer().getMessenger();
messenger.unregisterOutgoingPluginChannel(this.plugin, "lunar:apollo");
@@ -77,7 +77,7 @@ private void onRegisterChannel(PlayerRegisterChannelEvent event) {
// Sending the player's world name to the client is required for some modules
ProtobufPacketUtil.sendPacket(player, this.createUpdatePlayerWorldMessage(player));
- this.playersRunningApollo.add(player.getUniqueId());
+ PLAYERS_RUNNING_APOLLO.add(player.getUniqueId());
player.sendMessage("You are using LunarClient!");
}
@@ -95,8 +95,8 @@ private UpdatePlayerWorldMessage createUpdatePlayerWorldMessage(Player player) {
.build();
}
- private boolean isPlayerRunningApollo(Player player) {
- return this.playersRunningApollo.contains(player.getUniqueId());
+ public static boolean isPlayerRunningApollo(Player player) {
+ return PLAYERS_RUNNING_APOLLO.contains(player.getUniqueId());
}
}
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloRoundtripProtoListener.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloRoundtripProtoListener.java
index 66738d56d..97a4e1e48 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloRoundtripProtoListener.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/listener/ApolloRoundtripProtoListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -42,6 +42,7 @@
import lombok.Getter;
import org.bukkit.entity.Player;
import org.bukkit.plugin.messaging.PluginMessageListener;
+import org.jspecify.annotations.NonNull;
public class ApolloRoundtripProtoListener implements PluginMessageListener {
@@ -56,7 +57,7 @@ public ApolloRoundtripProtoListener(ApolloExamplePlugin plugin) {
}
@Override
- public void onPluginMessageReceived(String s, Player player, byte[] bytes) {
+ public void onPluginMessageReceived(@NonNull String channel, @NonNull Player player, byte[] bytes) {
try {
Any any = Any.parseFrom(bytes);
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/AutoTextHotkeyProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/AutoTextHotkeyProtoExample.java
index 56776538b..b83fb827d 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/AutoTextHotkeyProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/AutoTextHotkeyProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/BeamProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/BeamProtoExample.java
index 21c4fe2ff..4c8c7c558 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/BeamProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/BeamProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/BorderProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/BorderProtoExample.java
index 66809131a..15f6d2176 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/BorderProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/BorderProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ChatProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ChatProtoExample.java
index 687783509..48ca34384 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ChatProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ChatProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ColoredFireProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ColoredFireProtoExample.java
index b3f98da1f..a288c228c 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ColoredFireProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ColoredFireProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/CombatProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/CombatProtoExample.java
index ae4ce94d9..732e8ba2b 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/CombatProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/CombatProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/CooldownProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/CooldownProtoExample.java
index 91d150695..1834aab5d 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/CooldownProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/CooldownProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -23,12 +23,15 @@
*/
package com.lunarclient.apollo.example.proto.module;
+import com.lunarclient.apollo.common.v1.Icon;
+import com.lunarclient.apollo.cooldown.v1.CooldownStyle;
import com.lunarclient.apollo.cooldown.v1.DisplayCooldownMessage;
import com.lunarclient.apollo.cooldown.v1.RemoveCooldownMessage;
import com.lunarclient.apollo.cooldown.v1.ResetCooldownsMessage;
import com.lunarclient.apollo.example.module.impl.CooldownExample;
import com.lunarclient.apollo.example.proto.util.ProtobufPacketUtil;
import com.lunarclient.apollo.example.proto.util.ProtobufUtil;
+import java.awt.Color;
import java.time.Duration;
import org.bukkit.entity.Player;
@@ -39,7 +42,28 @@ public void displayCooldownItemExample(Player viewer) {
DisplayCooldownMessage message = DisplayCooldownMessage.newBuilder()
.setName("enderpearl-cooldown")
.setDuration(ProtobufUtil.createDurationProto(Duration.ofSeconds(15)))
- .setIcon(ProtobufUtil.createItemStackIconProto("ENDER_PEARL", 0, 0))
+ .setIcon(Icon.newBuilder()
+ .setItemStack(ProtobufUtil.createItemStackIconProto("ENDER_PEARL", 0, 0))
+ .build())
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+ }
+
+ @Override
+ public void displayCooldownWithStyleExample(Player viewer) {
+ DisplayCooldownMessage message = DisplayCooldownMessage.newBuilder()
+ .setName("book-cooldown")
+ .setDuration(ProtobufUtil.createDurationProto(Duration.ofSeconds(30)))
+ .setIcon(Icon.newBuilder()
+ .setItemStack(ProtobufUtil.createItemStackIconProto("BOOK", 0, 0))
+ .build())
+ .setStyle(CooldownStyle.newBuilder()
+ .setCircleStartColor(ProtobufUtil.createColorProto(new Color(255, 85, 85))) // ApolloColors.RED
+ .setCircleEndColor(ProtobufUtil.createColorProto(new Color(85, 255, 85))) // ApolloColors.GREEN
+ .setCircleEdgeColor(ProtobufUtil.createColorProto(new Color(85, 85, 85))) // ApolloColors.DAR_GRAY
+ .setTextColor(ProtobufUtil.createColorProto(new Color(255, 85, 255))) // ApolloColors.LIGHT_PURPLE
+ .build())
.build();
ProtobufPacketUtil.sendPacket(viewer, message);
@@ -50,7 +74,9 @@ public void displayCooldownResourceExample(Player viewer) {
DisplayCooldownMessage message = DisplayCooldownMessage.newBuilder()
.setName("lunar-cooldown")
.setDuration(ProtobufUtil.createDurationProto(Duration.ofSeconds(15)))
- .setIcon(ProtobufUtil.createSimpleResourceLocationIconProto("lunar:logo/logo-200x182.svg", 12))
+ .setIcon(Icon.newBuilder()
+ .setSimpleResourceLocation(ProtobufUtil.createSimpleResourceLocationIconProto("lunar:logo/logo-64x64.png", 24))
+ .build())
.build();
ProtobufPacketUtil.sendPacket(viewer, message);
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/EntityProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/EntityProtoExample.java
index d07b3a4ea..1bf406bcf 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/EntityProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/EntityProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/GlowProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/GlowProtoExample.java
index 19fa1a43a..c6943ee7b 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/GlowProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/GlowProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/HologramProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/HologramProtoExample.java
index f9735318a..c453945e2 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/HologramProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/HologramProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/LimbProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/LimbProtoExample.java
index 4664a4925..3d88507aa 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/LimbProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/LimbProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ModSettingsProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ModSettingsProtoExample.java
index 86265bcb5..c3ebf501d 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ModSettingsProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ModSettingsProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NametagProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NametagProtoExample.java
index e553bf5d2..07e5dbebe 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NametagProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NametagProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NickHiderProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NickHiderProtoExample.java
index 0e2df4c6b..84e025d96 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NickHiderProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NickHiderProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NotificationProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NotificationProtoExample.java
index 92f5c5edd..0853dca56 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NotificationProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/NotificationProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -50,7 +50,7 @@ public void displayNotificationExample(Player viewer) {
.append(Component.text("Good luck!", NamedTextColor.GOLD))
)
)
- .setResourceLocation("icons/golden_apple.png") // This field is optional
+ .setResourceLocation("textures/items/apple_golden.png") // This field is optional
.setDisplayTime(ProtobufUtil.createDurationProto(Duration.ofSeconds(5)))
.build();
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/PayNowProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/PayNowProtoExample.java
index 9e47fe27d..b5eb6ab84 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/PayNowProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/PayNowProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/RichPresenceProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/RichPresenceProtoExample.java
index 338dbcbbe..0d7c3fb21 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/RichPresenceProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/RichPresenceProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ServerLinkProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ServerLinkProtoExample.java
new file mode 100644
index 000000000..c39e53cc2
--- /dev/null
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ServerLinkProtoExample.java
@@ -0,0 +1,106 @@
+/*
+ * 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.example.proto.module;
+
+import com.google.common.collect.Lists;
+import com.lunarclient.apollo.example.module.impl.ServerLinkExample;
+import com.lunarclient.apollo.example.proto.util.AdventureUtil;
+import com.lunarclient.apollo.example.proto.util.ProtobufPacketUtil;
+import com.lunarclient.apollo.example.proto.util.ProtobufUtil;
+import com.lunarclient.apollo.serverlink.v1.AddServerLinkMessage;
+import com.lunarclient.apollo.serverlink.v1.OverrideServerLinkResourceMessage;
+import com.lunarclient.apollo.serverlink.v1.RemoveServerLinkMessage;
+import com.lunarclient.apollo.serverlink.v1.ResetServerLinkResourceMessage;
+import com.lunarclient.apollo.serverlink.v1.ResetServerLinksMessage;
+import com.lunarclient.apollo.serverlink.v1.ServerLink;
+import java.util.List;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
+import org.bukkit.entity.Player;
+
+public class ServerLinkProtoExample extends ServerLinkExample {
+
+ @Override
+ public void overrideServerLinkResourceExample(Player viewer) {
+ OverrideServerLinkResourceMessage message = OverrideServerLinkResourceMessage.newBuilder()
+ .setIcon(ProtobufUtil.createResourceLocationIconProto("lunar:logo/logo-100x100.png"))
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+ }
+
+ @Override
+ public void resetServerLinkResourceExample(Player viewer) {
+ ResetServerLinkResourceMessage message = ResetServerLinkResourceMessage.getDefaultInstance();
+ ProtobufPacketUtil.sendPacket(viewer, message);
+ }
+
+ @Override
+ public void addServerLinkExample(Player viewer) {
+ List serverLinks = Lists.newArrayList(
+ ServerLink.newBuilder()
+ .setId("website")
+ .setDisplayNameAdventureJsonLines(AdventureUtil.toJson(
+ Component.text("Website", NamedTextColor.LIGHT_PURPLE)))
+ .setUrl("https://www.lunarclient.com/")
+ .build(),
+ ServerLink.newBuilder()
+ .setId("support")
+ .setDisplayNameAdventureJsonLines(AdventureUtil.toJson(
+ Component.text("Support", NamedTextColor.AQUA)))
+ .setUrl("https://support.lunarclient.com/")
+ .build(),
+ ServerLink.newBuilder()
+ .setId("status")
+ .setDisplayNameAdventureJsonLines(AdventureUtil.toJson(
+ Component.text("Status", NamedTextColor.RED)))
+ .setUrl("https://status.lunarclient.com/")
+ .build()
+ );
+
+ AddServerLinkMessage message = AddServerLinkMessage.newBuilder()
+ .addAllServerLinks(serverLinks)
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+ }
+
+ @Override
+ public void removeServerLinkExample(Player viewer) {
+ List serverLinkIds = Lists.newArrayList("website", "support", "status");
+
+ RemoveServerLinkMessage message = RemoveServerLinkMessage.newBuilder()
+ .addAllServerLinkIds(serverLinkIds)
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+ }
+
+ @Override
+ public void resetServerLinksExample(Player viewer) {
+ ResetServerLinksMessage message = ResetServerLinksMessage.getDefaultInstance();
+ ProtobufPacketUtil.sendPacket(viewer, message);
+ }
+
+}
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ServerRuleProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ServerRuleProtoExample.java
index c6c39c7d2..a53de5653 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ServerRuleProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/ServerRuleProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/StaffModProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/StaffModProtoExample.java
index d3047d41d..baabe174b 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/StaffModProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/StaffModProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/StopwatchProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/StopwatchProtoExample.java
index 53c3e829c..5f8960b52 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/StopwatchProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/StopwatchProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TeamProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TeamProtoExample.java
index 35726ceae..f2931c66e 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TeamProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TeamProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -23,9 +23,9 @@
*/
package com.lunarclient.apollo.example.proto.module;
-import com.google.common.collect.Maps;
import com.lunarclient.apollo.example.ApolloExamplePlugin;
import com.lunarclient.apollo.example.module.impl.TeamExample;
+import com.lunarclient.apollo.example.proto.listener.ApolloPlayerProtoListener;
import com.lunarclient.apollo.example.proto.util.AdventureUtil;
import com.lunarclient.apollo.example.proto.util.ProtobufPacketUtil;
import com.lunarclient.apollo.example.proto.util.ProtobufUtil;
@@ -34,14 +34,14 @@
import com.lunarclient.apollo.team.v1.TeamMember;
import com.lunarclient.apollo.team.v1.UpdateTeamMembersMessage;
import java.awt.Color;
+import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
@@ -52,8 +52,8 @@
public class TeamProtoExample extends TeamExample implements Listener {
- private final Map teamsByTeamId = Maps.newHashMap();
- private final Map teamsByPlayerUuid = Maps.newHashMap();
+ private final Map teamsByTeamId = new ConcurrentHashMap<>();
+ private final Map teamsByPlayerUuid = new ConcurrentHashMap<>();
public TeamProtoExample() {
if (ServerUtil.isFolia()) {
@@ -116,7 +116,7 @@ public class Team {
public Team() {
this.teamId = UUID.randomUUID();
- this.members = new HashMap<>();
+ this.members = new ConcurrentHashMap<>();
}
public void addMember(Player player) {
@@ -132,31 +132,74 @@ public void removeMember(Player player) {
ProtobufPacketUtil.sendPacket(player, message);
}
- private TeamMember createTeamMember(Player member) {
- return TeamMember.newBuilder()
- .setPlayerUuid(ProtobufUtil.createUuidProto(member.getUniqueId()))
- .setAdventureJsonPlayerName(AdventureUtil.toJson(
+ private TeamMember createTeamMember(Player player, boolean withinPlayerTrackingRange) {
+ TeamMember.Builder builder = TeamMember.newBuilder()
+ .setPlayerUuid(ProtobufUtil.createUuidProto(player.getUniqueId()))
+ .setMarkerColor(ProtobufUtil.createColorProto(Color.WHITE));
+
+ if (!withinPlayerTrackingRange) {
+ builder.setLocation(ProtobufUtil.createLocationProto(player.getLocation()));
+
+ builder.setAdventureJsonPlayerName(AdventureUtil.toJson(
Component.text()
- .content(member.getName())
+ .content(player.getName())
.color(NamedTextColor.WHITE)
.build()
- ))
- .setMarkerColor(ProtobufUtil.createColorProto(Color.WHITE))
- .setLocation(ProtobufUtil.createLocationProto(member.getLocation()))
- .build();
+ ));
+ }
+
+ return builder.build();
}
// The refresh method used for updating members locations
public void refresh() {
- List teammates = this.members.values().stream().filter(Player::isOnline)
- .map(this::createTeamMember)
- .collect(Collectors.toList());
+ for (Player viewer : this.members.values()) {
+ if (!ApolloPlayerProtoListener.isPlayerRunningApollo(viewer)) {
+ continue;
+ }
+
+ List teammates = new ArrayList<>();
+
+ for (Player member : this.members.values()) {
+ if (viewer == member) {
+ continue;
+ }
- UpdateTeamMembersMessage message = UpdateTeamMembersMessage.newBuilder()
- .addAllMembers(teammates)
- .build();
+ if (!viewer.canSee(member)) {
+ continue;
+ }
+
+ if (!viewer.getWorld().getName().equals(member.getWorld().getName())) {
+ continue;
+ }
+
+ boolean withinPlayerTrackingRange = this.isWithinPlayerTrackingRange(viewer, member);
+ teammates.add(this.createTeamMember(member, withinPlayerTrackingRange));
+ }
+
+ UpdateTeamMembersMessage message = UpdateTeamMembersMessage.newBuilder()
+ .addAllMembers(teammates)
+ .build();
+
+ ProtobufPacketUtil.sendPacket(viewer, message);
+ }
+ }
- this.members.values().forEach(member -> ProtobufPacketUtil.sendPacket(member, message));
+ /**
+ * Check if player is within 48 blocks. Ideally, this could be checked directly
+ * through the server's internal entity tracker for exact tracking behavior,
+ * but that is not exposed in the Bukkit API.
+ *
+ * @param viewer the viewer
+ * @param member the member
+ * @return whether within player tracking range
+ */
+ private boolean isWithinPlayerTrackingRange(Player viewer, Player member) {
+ double maxDistance = 48;
+ double dx = viewer.getLocation().getX() - member.getLocation().getX();
+ double dz = viewer.getLocation().getZ() - member.getLocation().getZ();
+
+ return (dx * dx + dz * dz) <= (maxDistance * maxDistance);
}
public UUID getTeamId() {
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TebexProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TebexProtoExample.java
index bb3ab2ece..7ddf1ffc3 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TebexProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TebexProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TitleProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TitleProtoExample.java
index 6488314dc..81b9d66ad 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TitleProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TitleProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TntCountdownProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TntCountdownProtoExample.java
index d68b2c5f1..abd7f2cd6 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TntCountdownProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TntCountdownProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TransferProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TransferProtoExample.java
index 5e2b8c204..a978b6bf5 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TransferProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/TransferProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/VignetteProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/VignetteProtoExample.java
index 6fb59896a..4d6165fca 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/VignetteProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/VignetteProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/WaypointProtoExample.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/WaypointProtoExample.java
index 523f81c75..af0ad9e74 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/WaypointProtoExample.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/module/WaypointProtoExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/AdventureUtil.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/AdventureUtil.java
index ad4ec611a..d0321af4e 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/AdventureUtil.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/AdventureUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/ProtobufPacketUtil.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/ProtobufPacketUtil.java
index a9be9f648..e2130a6b4 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/ProtobufPacketUtil.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/ProtobufPacketUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -41,18 +41,23 @@
public final class ProtobufPacketUtil {
- private static final List APOLLO_MODULES = Arrays.asList("limb", "beam", "border", "chat", "colored_fire", "combat", "cooldown",
- "entity", "glow", "hologram", "mod_setting", "nametag", "nick_hider", "notification", "packet_enrichment", "rich_presence",
- "server_rule", "staff_mod", "stopwatch", "team", "title", "tnt_countdown", "transfer", "vignette", "waypoint"
+ private static final List APOLLO_MODULES = Arrays.asList("auto_text_hotkey", "beam", "border", "chat", "colored_fire", "combat", "cooldown",
+ "entity", "glint", "glow", "hologram", "inventory", "limb", "mod_setting", "nametag", "nick_hider", "notification", "pay_now", "packet_enrichment",
+ "rich_presence", "saturation", "server_rule", "staff_mod", "stopwatch", "team", "tebex", "title", "tnt_countdown", "transfer", "vignette", "waypoint"
);
// Module Id -> Option key -> Value
private static final Table CONFIG_MODULE_PROPERTIES = HashBasedTable.create();
static {
- // Module Options that the client needs to notified about, these properties are sent with the enable module packet
+ // Module Options the client needs to be notified about. These properties are sent with the enable module packet.
// While using the Apollo plugin this would be equivalent to modifying the config.yml
CONFIG_MODULE_PROPERTIES.put("combat", "disable-miss-penalty", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-attack.send-packet", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-chat-open.send-packet", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-chat-close.send-packet", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-use-item.send-packet", Value.newBuilder().setBoolValue(false).build());
+ CONFIG_MODULE_PROPERTIES.put("packet_enrichment", "player-use-item-bucket.send-packet", Value.newBuilder().setBoolValue(false).build());
CONFIG_MODULE_PROPERTIES.put("server_rule", "competitive-game", Value.newBuilder().setBoolValue(false).build());
CONFIG_MODULE_PROPERTIES.put("server_rule", "competitive-commands", Value.newBuilder().setListValue(
ListValue.newBuilder().addAllValues(Arrays.asList(
diff --git a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/ProtobufUtil.java b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/ProtobufUtil.java
index ff985cea9..2c35b3c34 100644
--- a/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/ProtobufUtil.java
+++ b/example/bukkit/proto/src/main/java/com/lunarclient/apollo/example/proto/util/ProtobufUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -28,8 +28,8 @@
import com.lunarclient.apollo.common.v1.BlockLocation;
import com.lunarclient.apollo.common.v1.Cuboid2D;
import com.lunarclient.apollo.common.v1.EntityId;
-import com.lunarclient.apollo.common.v1.Icon;
import com.lunarclient.apollo.common.v1.ItemStackIcon;
+import com.lunarclient.apollo.common.v1.ResourceLocationIcon;
import com.lunarclient.apollo.common.v1.SimpleResourceLocationIcon;
import com.lunarclient.apollo.common.v1.Uuid;
import java.awt.Color;
@@ -114,7 +114,7 @@ public static Location toBukkitLocation(com.lunarclient.apollo.common.v1.PlayerL
return location;
}
- public static Icon createItemStackIconProto(@Nullable String itemName, int itemId, int customModelData) {
+ public static ItemStackIcon createItemStackIconProto(@Nullable String itemName, int itemId, int customModelData) {
ItemStackIcon.Builder iconBuilder = ItemStackIcon.newBuilder()
.setItemId(itemId)
.setCustomModelData(customModelData);
@@ -123,21 +123,25 @@ public static Icon createItemStackIconProto(@Nullable String itemName, int itemI
iconBuilder.setItemName(itemName);
}
- return Icon.newBuilder().setItemStack(iconBuilder.build()).build();
+ return iconBuilder.build();
}
- public static Icon createSimpleResourceLocationIconProto(String resourceLocation, int size) {
- SimpleResourceLocationIcon icon = SimpleResourceLocationIcon.newBuilder()
+ public static ResourceLocationIcon createResourceLocationIconProto(String resourceLocation) {
+ return ResourceLocationIcon.newBuilder()
.setResourceLocation(resourceLocation)
- .setSize(size)
.build();
+ }
- return Icon.newBuilder().setSimpleResourceLocation(icon).build();
+ public static SimpleResourceLocationIcon createSimpleResourceLocationIconProto(String resourceLocation, int size) {
+ return SimpleResourceLocationIcon.newBuilder()
+ .setResourceLocation(resourceLocation)
+ .setSize(size)
+ .build();
}
- public static Icon createAdvancedResourceLocationIconProto(String resourceLocation, float width, float height,
+ public static AdvancedResourceLocationIcon createAdvancedResourceLocationIconProto(String resourceLocation, float width, float height,
float minU, float maxU, float minV, float maxV) {
- AdvancedResourceLocationIcon icon = AdvancedResourceLocationIcon.newBuilder()
+ return AdvancedResourceLocationIcon.newBuilder()
.setResourceLocation(resourceLocation)
.setWidth(width)
.setHeight(height)
@@ -146,8 +150,6 @@ public static Icon createAdvancedResourceLocationIconProto(String resourceLocati
.setMinV(minV)
.setMaxV(maxV)
.build();
-
- return Icon.newBuilder().setAdvancedResourceLocation(icon).build();
}
private ProtobufUtil() {
diff --git a/example/minestom/api/src/main/java/com/lunarclient/apollo/example/ApolloMinestomExample.java b/example/minestom/api/src/main/java/com/lunarclient/apollo/example/ApolloMinestomExample.java
index abb0407d7..9e71a9168 100644
--- a/example/minestom/api/src/main/java/com/lunarclient/apollo/example/ApolloMinestomExample.java
+++ b/example/minestom/api/src/main/java/com/lunarclient/apollo/example/ApolloMinestomExample.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/extra/adventure4/src/main/java/com/lunarclient/apollo/common/ApolloComponent.java b/extra/adventure4/src/main/java/com/lunarclient/apollo/common/ApolloComponent.java
index 4bec54601..93c11e7a8 100644
--- a/extra/adventure4/src/main/java/com/lunarclient/apollo/common/ApolloComponent.java
+++ b/extra/adventure4/src/main/java/com/lunarclient/apollo/common/ApolloComponent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicAgent.java b/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicAgent.java
index 6445f1aa9..9c6d79624 100644
--- a/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicAgent.java
+++ b/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicAgent.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicDependencies.java b/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicDependencies.java
index 9f0070239..dbc8374a9 100644
--- a/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicDependencies.java
+++ b/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicDependencies.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicLoader.java b/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicLoader.java
index 0a1dcb12d..a17332845 100644
--- a/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicLoader.java
+++ b/extra/loader/src/main/java/com/lunarclient/apollo/loader/DynamicLoader.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/extra/loader/src/main/java/com/lunarclient/apollo/loader/PlatformPlugin.java b/extra/loader/src/main/java/com/lunarclient/apollo/loader/PlatformPlugin.java
index a66a93f6e..c6c04c377 100644
--- a/extra/loader/src/main/java/com/lunarclient/apollo/loader/PlatformPlugin.java
+++ b/extra/loader/src/main/java/com/lunarclient/apollo/loader/PlatformPlugin.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/gradle.properties b/gradle.properties
index 0507e51fe..91f229d99 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,5 +1,5 @@
group=com.lunarclient
-version=1.2.4
+version=1.2.5-SNAPSHOT
description=The API for interacting with Lunar Client players.
org.gradle.parallel=true
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1a56e5582..13049556f 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -11,7 +11,7 @@ geantyref = "1.3.11"
idea = "1.1.7"
jetbrains = "24.0.1"
lombok = "1.18.38"
-protobuf = "0.0.6"
+protobuf = "0.0.9"
gson = "2.10.1"
shadow = "8.1.1"
spotless = "6.13.0"
diff --git a/license.txt b/license.txt
index 5afe15c8f..b05c8272e 100644
--- a/license.txt
+++ b/license.txt
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2023 Moonsworth
+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
diff --git a/license_header.txt b/license_header.txt
index 8d5211789..99eaefc0f 100644
--- a/license_header.txt
+++ b/license_header.txt
@@ -1,6 +1,6 @@
This file is part of Apollo, licensed under the MIT License.
-Copyright (c) 2023 Moonsworth
+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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/ApolloBukkitPlatform.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/ApolloBukkitPlatform.java
index ee036ee47..8965682cf 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/ApolloBukkitPlatform.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/ApolloBukkitPlatform.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -68,6 +68,8 @@
import com.lunarclient.apollo.module.richpresence.RichPresenceModule;
import com.lunarclient.apollo.module.richpresence.RichPresenceModuleImpl;
import com.lunarclient.apollo.module.saturation.SaturationModule;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModule;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModuleImpl;
import com.lunarclient.apollo.module.serverrule.ServerRuleModule;
import com.lunarclient.apollo.module.staffmod.StaffModModule;
import com.lunarclient.apollo.module.staffmod.StaffModModuleImpl;
@@ -152,6 +154,7 @@ public void onEnable() {
.addModule(PacketEnrichmentModule.class, new PacketEnrichmentImpl())
.addModule(PayNowModule.class, new PayNowModuleImpl())
.addModule(RichPresenceModule.class, new RichPresenceModuleImpl())
+ .addModule(ServerLinkModule.class, new ServerLinkModuleImpl())
.addModule(SaturationModule.class)
.addModule(ServerRuleModule.class)
.addModule(StaffModModule.class, new StaffModModuleImpl())
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/command/BukkitApolloCommand.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/command/BukkitApolloCommand.java
index fadd27eab..042dd4794 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/command/BukkitApolloCommand.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/command/BukkitApolloCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/command/BukkitLunarClientCommand.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/command/BukkitLunarClientCommand.java
index b33e03dde..c61c43559 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/command/BukkitLunarClientCommand.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/command/BukkitLunarClientCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
index ecd497dfa..725a97e0a 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
index 69997978e..2041681ad 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java
index 16498ec19..bffb69063 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/metadata/BukkitMetadata.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/metadata/BukkitMetadata.java
index 1880dfa8a..376e8fb0a 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/metadata/BukkitMetadata.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/metadata/BukkitMetadata.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/metadata/BukkitMetadataManager.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/metadata/BukkitMetadataManager.java
index 9e6d350aa..06067114d 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/metadata/BukkitMetadataManager.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/metadata/BukkitMetadataManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
index 67a03b803..3b79b5dae 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloPlayer.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloPlayer.java
index 5e7b08a17..34d24e4ae 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloPlayer.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloPlayer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloStats.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloStats.java
index a78cbe602..8a430e593 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloStats.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloStats.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloWorld.java b/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloWorld.java
index e70403ce2..48c8dc015 100644
--- a/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloWorld.java
+++ b/platform/bukkit/src/main/java/com/lunarclient/apollo/wrapper/BukkitApolloWorld.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bukkit/src/platform-loader/java/com/lunarclient/apollo/loader/BukkitPlatformLoader.java b/platform/bukkit/src/platform-loader/java/com/lunarclient/apollo/loader/BukkitPlatformLoader.java
index 42faa457c..f9798ef9b 100644
--- a/platform/bukkit/src/platform-loader/java/com/lunarclient/apollo/loader/BukkitPlatformLoader.java
+++ b/platform/bukkit/src/platform-loader/java/com/lunarclient/apollo/loader/BukkitPlatformLoader.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/ApolloBungeePlatform.java b/platform/bungee/src/main/java/com/lunarclient/apollo/ApolloBungeePlatform.java
index 088c4b9fa..7e958dc05 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/ApolloBungeePlatform.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/ApolloBungeePlatform.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -58,6 +58,8 @@
import com.lunarclient.apollo.module.paynow.PayNowModuleImpl;
import com.lunarclient.apollo.module.richpresence.RichPresenceModule;
import com.lunarclient.apollo.module.richpresence.RichPresenceModuleImpl;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModule;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModuleImpl;
import com.lunarclient.apollo.module.serverrule.ServerRuleModule;
import com.lunarclient.apollo.module.staffmod.StaffModModule;
import com.lunarclient.apollo.module.staffmod.StaffModModuleImpl;
@@ -131,6 +133,7 @@ public void onEnable() {
.addModule(NotificationModule.class, new NotificationModuleImpl())
.addModule(PayNowModule.class, new PayNowModuleImpl())
.addModule(RichPresenceModule.class, new RichPresenceModuleImpl())
+ .addModule(ServerLinkModule.class, new ServerLinkModuleImpl())
.addModule(ServerRuleModule.class)
.addModule(StaffModModule.class, new StaffModModuleImpl())
.addModule(StopwatchModule.class, new StopwatchModuleImpl())
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/command/BungeeApolloCommand.java b/platform/bungee/src/main/java/com/lunarclient/apollo/command/BungeeApolloCommand.java
index 7e0c9d177..9a49e51ba 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/command/BungeeApolloCommand.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/command/BungeeApolloCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/command/BungeeLunarClientCommand.java b/platform/bungee/src/main/java/com/lunarclient/apollo/command/BungeeLunarClientCommand.java
index 1471edab3..6cd246714 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/command/BungeeLunarClientCommand.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/command/BungeeLunarClientCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java b/platform/bungee/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
index 7fca15957..f81147938 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java b/platform/bungee/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
index 4a8fe2a7c..05cb23af1 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/metadata/BungeeMetadata.java b/platform/bungee/src/main/java/com/lunarclient/apollo/metadata/BungeeMetadata.java
index 0a7e5bd65..57816963f 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/metadata/BungeeMetadata.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/metadata/BungeeMetadata.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/metadata/BungeeMetadataManager.java b/platform/bungee/src/main/java/com/lunarclient/apollo/metadata/BungeeMetadataManager.java
index 5043e4932..ce4ba1e97 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/metadata/BungeeMetadataManager.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/metadata/BungeeMetadataManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java b/platform/bungee/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
index 67a03b803..3b79b5dae 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/wrapper/BungeeApolloPlayer.java b/platform/bungee/src/main/java/com/lunarclient/apollo/wrapper/BungeeApolloPlayer.java
index 54b338a6d..f8245f2e6 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/wrapper/BungeeApolloPlayer.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/wrapper/BungeeApolloPlayer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/main/java/com/lunarclient/apollo/wrapper/BungeeApolloStats.java b/platform/bungee/src/main/java/com/lunarclient/apollo/wrapper/BungeeApolloStats.java
index d575ba2eb..ad4d3073d 100644
--- a/platform/bungee/src/main/java/com/lunarclient/apollo/wrapper/BungeeApolloStats.java
+++ b/platform/bungee/src/main/java/com/lunarclient/apollo/wrapper/BungeeApolloStats.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/bungee/src/platform-loader/java/com/lunarclient/apollo/loader/BungeePlatformLoader.java b/platform/bungee/src/platform-loader/java/com/lunarclient/apollo/loader/BungeePlatformLoader.java
index 1bc6fcf70..d7213cd74 100644
--- a/platform/bungee/src/platform-loader/java/com/lunarclient/apollo/loader/BungeePlatformLoader.java
+++ b/platform/bungee/src/platform-loader/java/com/lunarclient/apollo/loader/BungeePlatformLoader.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/ApolloFoliaPlatform.java b/platform/folia/src/main/java/com/lunarclient/apollo/ApolloFoliaPlatform.java
index 1ca080e6c..e28530da7 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/ApolloFoliaPlatform.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/ApolloFoliaPlatform.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -64,6 +64,8 @@
import com.lunarclient.apollo.module.paynow.PayNowModuleImpl;
import com.lunarclient.apollo.module.richpresence.RichPresenceModule;
import com.lunarclient.apollo.module.richpresence.RichPresenceModuleImpl;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModule;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModuleImpl;
import com.lunarclient.apollo.module.serverrule.ServerRuleModule;
import com.lunarclient.apollo.module.staffmod.StaffModModule;
import com.lunarclient.apollo.module.staffmod.StaffModModuleImpl;
@@ -140,6 +142,7 @@ public void onEnable() {
.addModule(PacketEnrichmentModule.class, new PacketEnrichmentImpl())
.addModule(PayNowModule.class, new PayNowModuleImpl())
.addModule(RichPresenceModule.class, new RichPresenceModuleImpl())
+ .addModule(ServerLinkModule.class, new ServerLinkModuleImpl())
.addModule(ServerRuleModule.class)
.addModule(StaffModModule.class, new StaffModModuleImpl())
.addModule(StopwatchModule.class, new StopwatchModuleImpl())
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/command/FoliaApolloCommand.java b/platform/folia/src/main/java/com/lunarclient/apollo/command/FoliaApolloCommand.java
index b4fd4b571..a42dd0075 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/command/FoliaApolloCommand.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/command/FoliaApolloCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/command/FoliaLunarClientCommand.java b/platform/folia/src/main/java/com/lunarclient/apollo/command/FoliaLunarClientCommand.java
index f44da0cf8..cb3cfebd7 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/command/FoliaLunarClientCommand.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/command/FoliaLunarClientCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java b/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
index 6843fc559..5280f416e 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java b/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
index c25f6db99..f10ae6e6d 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java b/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java
index 3d79ca33e..ed6a7ac8a 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/metadata/FoliaMetadata.java b/platform/folia/src/main/java/com/lunarclient/apollo/metadata/FoliaMetadata.java
index c84dc27e0..5ba3c4676 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/metadata/FoliaMetadata.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/metadata/FoliaMetadata.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/metadata/FoliaMetadataManager.java b/platform/folia/src/main/java/com/lunarclient/apollo/metadata/FoliaMetadataManager.java
index 7299364e4..938ca1b7c 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/metadata/FoliaMetadataManager.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/metadata/FoliaMetadataManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloPlayer.java b/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloPlayer.java
index e1ed0b0d2..caa4a5df6 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloPlayer.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloPlayer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloStats.java b/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloStats.java
index a0f9c14b9..21275bf62 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloStats.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloStats.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloWorld.java b/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloWorld.java
index 074f73299..7d07d92aa 100644
--- a/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloWorld.java
+++ b/platform/folia/src/main/java/com/lunarclient/apollo/wrapper/FoliaApolloWorld.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/ApolloMinestomPlatform.java b/platform/minestom/src/main/java/com/lunarclient/apollo/ApolloMinestomPlatform.java
index 0a32651b8..559d4e5c4 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/ApolloMinestomPlatform.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/ApolloMinestomPlatform.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -67,6 +67,8 @@
import com.lunarclient.apollo.module.richpresence.RichPresenceModule;
import com.lunarclient.apollo.module.richpresence.RichPresenceModuleImpl;
import com.lunarclient.apollo.module.saturation.SaturationModule;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModule;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModuleImpl;
import com.lunarclient.apollo.module.serverrule.ServerRuleModule;
import com.lunarclient.apollo.module.staffmod.StaffModModule;
import com.lunarclient.apollo.module.staffmod.StaffModModuleImpl;
@@ -174,6 +176,7 @@ public static void init(ApolloMinestomProperties properties) {
.addModule(PacketEnrichmentModule.class, new PacketEnrichmentImpl())
.addModule(PayNowModule.class, new PayNowModuleImpl())
.addModule(RichPresenceModule.class, new RichPresenceModuleImpl())
+ .addModule(ServerLinkModule.class, new ServerLinkModuleImpl())
.addModule(SaturationModule.class)
.addModule(ServerRuleModule.class)
.addModule(StaffModModule.class, new StaffModModuleImpl())
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/ApolloMinestomProperties.java b/platform/minestom/src/main/java/com/lunarclient/apollo/ApolloMinestomProperties.java
index 54e11913d..bb10f8a78 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/ApolloMinestomProperties.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/ApolloMinestomProperties.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/command/MinestomApolloCommand.java b/platform/minestom/src/main/java/com/lunarclient/apollo/command/MinestomApolloCommand.java
index fd396aca7..1392f0835 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/command/MinestomApolloCommand.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/command/MinestomApolloCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/command/MinestomLunarClientCommand.java b/platform/minestom/src/main/java/com/lunarclient/apollo/command/MinestomLunarClientCommand.java
index f652484e6..082631ea8 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/command/MinestomLunarClientCommand.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/command/MinestomLunarClientCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java b/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
index bfdb8fed4..740fb78da 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java b/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
index 52dafce7d..a216d378c 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java b/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java
index 8bb625d0b..316fc49fb 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/listener/ApolloWorldListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/metadata/MinestomMetadata.java b/platform/minestom/src/main/java/com/lunarclient/apollo/metadata/MinestomMetadata.java
index 5976ec5a5..575a8b59b 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/metadata/MinestomMetadata.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/metadata/MinestomMetadata.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/metadata/MinestomMetadataManager.java b/platform/minestom/src/main/java/com/lunarclient/apollo/metadata/MinestomMetadataManager.java
index f6579147b..b79efcf8c 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/metadata/MinestomMetadataManager.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/metadata/MinestomMetadataManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java b/platform/minestom/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
index fa4b09acb..47571e448 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloPlayer.java b/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloPlayer.java
index ae2d8e413..6573d15dd 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloPlayer.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloPlayer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloStats.java b/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloStats.java
index c447123fb..1887d8075 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloStats.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloStats.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloWorld.java b/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloWorld.java
index ed53112d2..a4c30f4c6 100644
--- a/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloWorld.java
+++ b/platform/minestom/src/main/java/com/lunarclient/apollo/wrapper/MinestomApolloWorld.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/ApolloVelocityPlatform.java b/platform/velocity/src/main/java/com/lunarclient/apollo/ApolloVelocityPlatform.java
index 53f3d53c4..1b8501ed5 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/ApolloVelocityPlatform.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/ApolloVelocityPlatform.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
@@ -58,6 +58,8 @@
import com.lunarclient.apollo.module.paynow.PayNowModuleImpl;
import com.lunarclient.apollo.module.richpresence.RichPresenceModule;
import com.lunarclient.apollo.module.richpresence.RichPresenceModuleImpl;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModule;
+import com.lunarclient.apollo.module.serverlink.ServerLinkModuleImpl;
import com.lunarclient.apollo.module.serverrule.ServerRuleModule;
import com.lunarclient.apollo.module.staffmod.StaffModModule;
import com.lunarclient.apollo.module.staffmod.StaffModModuleImpl;
@@ -196,6 +198,7 @@ public void onProxyInitialization(ProxyInitializeEvent event) {
.addModule(NotificationModule.class, new NotificationModuleImpl())
.addModule(PayNowModule.class, new PayNowModuleImpl())
.addModule(RichPresenceModule.class, new RichPresenceModuleImpl())
+ .addModule(ServerLinkModule.class, new ServerLinkModuleImpl())
.addModule(ServerRuleModule.class)
.addModule(StaffModModule.class, new StaffModModuleImpl())
.addModule(StopwatchModule.class, new StopwatchModuleImpl())
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/command/VelocityApolloCommand.java b/platform/velocity/src/main/java/com/lunarclient/apollo/command/VelocityApolloCommand.java
index b482a150d..507ec93cc 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/command/VelocityApolloCommand.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/command/VelocityApolloCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/command/VelocityLunarClientCommand.java b/platform/velocity/src/main/java/com/lunarclient/apollo/command/VelocityLunarClientCommand.java
index 6013ebf33..3c9a25a37 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/command/VelocityLunarClientCommand.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/command/VelocityLunarClientCommand.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java b/platform/velocity/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
index c81e04ac4..233eba93f 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/listener/ApolloMetadataListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java b/platform/velocity/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
index 68848fae5..d5a4906f7 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/listener/ApolloPlayerListener.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/metadata/VelocityMetadata.java b/platform/velocity/src/main/java/com/lunarclient/apollo/metadata/VelocityMetadata.java
index fb613463b..76ff1fd6c 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/metadata/VelocityMetadata.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/metadata/VelocityMetadata.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/metadata/VelocityMetadataManager.java b/platform/velocity/src/main/java/com/lunarclient/apollo/metadata/VelocityMetadataManager.java
index adce0c0ed..339c8e506 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/metadata/VelocityMetadataManager.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/metadata/VelocityMetadataManager.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java b/platform/velocity/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
index 67a03b803..3b79b5dae 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/util/ByteBufUtil.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/wrapper/VelocityApolloPlayer.java b/platform/velocity/src/main/java/com/lunarclient/apollo/wrapper/VelocityApolloPlayer.java
index e24ed63c3..bc1c7214c 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/wrapper/VelocityApolloPlayer.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/wrapper/VelocityApolloPlayer.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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
diff --git a/platform/velocity/src/main/java/com/lunarclient/apollo/wrapper/VelocityApolloStats.java b/platform/velocity/src/main/java/com/lunarclient/apollo/wrapper/VelocityApolloStats.java
index b11d1e8cc..16d713ecf 100644
--- a/platform/velocity/src/main/java/com/lunarclient/apollo/wrapper/VelocityApolloStats.java
+++ b/platform/velocity/src/main/java/com/lunarclient/apollo/wrapper/VelocityApolloStats.java
@@ -1,7 +1,7 @@
/*
* This file is part of Apollo, licensed under the MIT License.
*
- * Copyright (c) 2023 Moonsworth
+ * 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