diff --git a/commons/src/main/java/net/swofty/commons/CustomWorlds.java b/commons/src/main/java/net/swofty/commons/CustomWorlds.java index 8efdeae25..4570f32b7 100644 --- a/commons/src/main/java/net/swofty/commons/CustomWorlds.java +++ b/commons/src/main/java/net/swofty/commons/CustomWorlds.java @@ -5,9 +5,13 @@ public enum CustomWorlds { SKYBLOCK_HUB("hypixel_skyblock_hub"), SKYBLOCK_SPIDERS_DEN("hypixel_skyblock_spiders_den"), SKYBLOCK_THE_END("hypixel_skyblock_the_end"), + SKYBLOCK_CRIMSON_ISLE("hypixel_skyblock_crimson_isle"), SKYBLOCK_GOLD_MINE("hypixel_skyblock_gold_mine"), SKYBLOCK_DEEP_CAVERNS("hypixel_skyblock_deep_caverns"), SKYBLOCK_DWARVEN_MINES("hypixel_skyblock_dwarven_mines"), + SKYBLOCK_THE_PARK("hypixel_skyblock_the_park"), + SKYBLOCK_GALATEA("hypixel_skyblock_galatea"), + SKYBLOCK_BACKWATER_BAYOU("hypixel_skyblock_backwater_bayou"), SKYBLOCK_DUNGEON_HUB("hypixel_skyblock_dungeon_hub"), PROTOTYPE_LOBBY("hypixel_prototype_lobby"), BEDWARS_LOBBY("hypixel_bedwars_lobby"), diff --git a/commons/src/main/java/net/swofty/commons/ServerType.java b/commons/src/main/java/net/swofty/commons/ServerType.java index 3bde5890d..8ce903925 100644 --- a/commons/src/main/java/net/swofty/commons/ServerType.java +++ b/commons/src/main/java/net/swofty/commons/ServerType.java @@ -8,11 +8,15 @@ public enum ServerType { SKYBLOCK_HUB(true), SKYBLOCK_SPIDERS_DEN(true), SKYBLOCK_THE_END(true), + SKYBLOCK_CRIMSON_ISLE(true), SKYBLOCK_DUNGEON_HUB(true), SKYBLOCK_THE_FARMING_ISLANDS(true), SKYBLOCK_GOLD_MINE(true), SKYBLOCK_DEEP_CAVERNS(true), SKYBLOCK_DWARVEN_MINES(true), + SKYBLOCK_THE_PARK(true), + SKYBLOCK_GALATEA(true), + SKYBLOCK_BACKWATER_BAYOU(true), PROTOTYPE_LOBBY(false), BEDWARS_LOBBY(false), BEDWARS_GAME(false), diff --git a/loader/build.gradle.kts b/loader/build.gradle.kts index f0177567e..e00edd477 100644 --- a/loader/build.gradle.kts +++ b/loader/build.gradle.kts @@ -29,9 +29,13 @@ dependencies { implementation(project(":type.thefarmingislands")) implementation(project(":type.spidersden")) implementation(project(":type.theend")) + implementation(project(":type.crimsonisle")) implementation(project(":type.goldmine")) implementation(project(":type.deepcaverns")) implementation(project(":type.dwarvenmines")) + implementation(project(":type.thepark")) + implementation(project(":type.galatea")) + implementation(project(":type.backwaterbayou")) implementation(project(":type.dungeonhub")) implementation(project(":type.skyblockgeneric")) implementation(project(":type.prototypelobby")) diff --git a/settings.gradle.kts b/settings.gradle.kts index 5ec6f3e14..8b6f466b2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -18,9 +18,13 @@ include(":type.prototypelobby") include(":type.thefarmingislands") include("type.spidersden") include("type.theend") +include("type.crimsonisle") include(":type.goldmine") include(":type.deepcaverns") include(":type.dwarvenmines") +include("type.thepark") +include("type.galatea") +include("type.backwaterbayou") include(":type.island") include(":type.hub") include(":type.dungeonhub") diff --git a/type.backwaterbayou/build.gradle.kts b/type.backwaterbayou/build.gradle.kts new file mode 100644 index 000000000..ebbf60364 --- /dev/null +++ b/type.backwaterbayou/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java +} + +group = "net.swofty" +version = "3.0" + +java { + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 + toolchain { + languageVersion.set(JavaLanguageVersion.of(25)) + } +} + +dependencies { + implementation(project(":type.skyblockgeneric")) + implementation(project(":type.generic")) + implementation(project(":commons")) + implementation(project(":proxy.api")) + compileOnly("net.minestom:minestom:2025.12.20c-1.21.11") { + exclude(group = "org.jboss.shrinkwrap.resolver", module = "shrinkwrap-resolver-depchain") + } + implementation("org.tinylog:tinylog-api:2.7.0") + implementation("org.tinylog:tinylog-impl:2.7.0") + implementation("org.joml:joml:1.10.8") +} \ No newline at end of file diff --git a/type.backwaterbayou/src/main/java/net/swofty/type/backwaterbayou/TypeBackwaterBayouLoader.java b/type.backwaterbayou/src/main/java/net/swofty/type/backwaterbayou/TypeBackwaterBayouLoader.java new file mode 100644 index 000000000..d4905f1ff --- /dev/null +++ b/type.backwaterbayou/src/main/java/net/swofty/type/backwaterbayou/TypeBackwaterBayouLoader.java @@ -0,0 +1,106 @@ +package net.swofty.type.backwaterbayou; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.coordinate.Pos; +import net.swofty.commons.CustomWorlds; +import net.swofty.commons.ServerType; +import net.swofty.commons.ServiceType; +import net.swofty.proxyapi.redis.ProxyToClient; +import net.swofty.proxyapi.redis.ServiceToClient; +import net.swofty.type.backwaterbayou.tab.BackwaterBayouServerModule; +import net.swofty.type.generic.SkyBlockTypeLoader; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.event.HypixelEventClass; +import net.swofty.type.generic.tab.TablistManager; +import net.swofty.type.generic.tab.TablistModule; +import net.swofty.type.skyblockgeneric.SkyBlockGenericLoader; +import net.swofty.type.skyblockgeneric.tabmodules.AccountInformationModule; +import net.swofty.type.skyblockgeneric.tabmodules.SkyBlockPlayersOnlineModule; +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class TypeBackwaterBayouLoader implements SkyBlockTypeLoader { + @Override + public ServerType getType() { + return ServerType.SKYBLOCK_BACKWATER_BAYOU; + } + + @Override + public void onInitialize(MinecraftServer server) { + Logger.info("TypeBackwaterBayouLoader initialized!"); + } + + @Override + public void afterInitialize(MinecraftServer server) { + + } + + @Override + public LoaderValues getLoaderValues() { + return new LoaderValues( + (type) -> switch (type) { + default -> new Pos(-12.5, 74, -10.5, -55, 0); + }, // Spawn position + true // Announce death messages + ); + } + + public TablistManager getTablistManager() { + return new TablistManager() { + @Override + public List getModules() { + return new ArrayList<>(List.of( + new SkyBlockPlayersOnlineModule(1), + new SkyBlockPlayersOnlineModule(2), + new BackwaterBayouServerModule(), + new AccountInformationModule() + )); + } + }; + } + + @Override + public List getTraditionalEvents() { + return SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.backwaterbayou.events", + HypixelEventClass.class + ).collect(Collectors.toList()); + } + + @Override + public List getCustomEvents() { + return new ArrayList<>(); + } + + @Override + public List getNPCs() { + return new ArrayList<>(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.backwaterbayou.npcs", + HypixelNPC.class + ).toList()); + } + + @Override + public List getServiceRedisListeners() { + return List.of(); + } + + @Override + public List getProxyRedisListeners() { + return List.of(); + } + + @Override + public List getRequiredServices() { + return new ArrayList<>(List.of(ServiceType.DATA_MUTEX)); + } + + @Override + public @Nullable CustomWorlds getMainInstance() { + return CustomWorlds.SKYBLOCK_BACKWATER_BAYOU; + } +} diff --git a/type.backwaterbayou/src/main/java/net/swofty/type/backwaterbayou/events/ActionPlayerJoin.java b/type.backwaterbayou/src/main/java/net/swofty/type/backwaterbayou/events/ActionPlayerJoin.java new file mode 100644 index 000000000..173ba7c29 --- /dev/null +++ b/type.backwaterbayou/src/main/java/net/swofty/type/backwaterbayou/events/ActionPlayerJoin.java @@ -0,0 +1,26 @@ +package net.swofty.type.backwaterbayou.events; + +import lombok.SneakyThrows; +import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; +import net.swofty.type.generic.HypixelConst; +import net.swofty.type.generic.event.EventNodes; +import net.swofty.type.generic.event.HypixelEvent; +import net.swofty.type.generic.event.HypixelEventClass; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class ActionPlayerJoin implements HypixelEventClass { + + @SneakyThrows + @HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = false) + public void run(AsyncPlayerConfigurationEvent event) { + + final SkyBlockPlayer player = (SkyBlockPlayer) event.getPlayer(); + + event.setSpawningInstance(HypixelConst.getInstanceContainer()); + player.setRespawnPoint(HypixelConst.getTypeLoader() + .getLoaderValues() + .spawnPosition() + .apply(player.getOriginServer()) + ); + } +} diff --git a/type.backwaterbayou/src/main/java/net/swofty/type/backwaterbayou/tab/BackwaterBayouServerModule.java b/type.backwaterbayou/src/main/java/net/swofty/type/backwaterbayou/tab/BackwaterBayouServerModule.java new file mode 100644 index 000000000..25d17fc46 --- /dev/null +++ b/type.backwaterbayou/src/main/java/net/swofty/type/backwaterbayou/tab/BackwaterBayouServerModule.java @@ -0,0 +1,25 @@ +package net.swofty.type.backwaterbayou.tab; + +import net.swofty.type.generic.HypixelConst; +import net.swofty.type.generic.tab.TablistModule; +import net.swofty.type.generic.tab.TablistSkinRegistry; +import net.swofty.type.generic.user.HypixelPlayer; + +import java.util.ArrayList; +import java.util.List; + +public class BackwaterBayouServerModule extends TablistModule { + @Override + public List getEntries(HypixelPlayer player) { + ArrayList entries = new ArrayList<>(List.of( + new TablistEntry(getCentered("§3§lServer Info"), TablistSkinRegistry.CYAN) + )); + + entries.add(new TablistEntry("§b§lArea: §7Backwater Bayou", TablistSkinRegistry.GRAY)); + entries.add(new TablistEntry(" Server: §8" + HypixelConst.getServerName(), TablistSkinRegistry.GRAY)); + + fillRestWithGray(entries); + + return entries; + } +} diff --git a/type.crimsonisle/build.gradle.kts b/type.crimsonisle/build.gradle.kts new file mode 100644 index 000000000..ebbf60364 --- /dev/null +++ b/type.crimsonisle/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java +} + +group = "net.swofty" +version = "3.0" + +java { + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 + toolchain { + languageVersion.set(JavaLanguageVersion.of(25)) + } +} + +dependencies { + implementation(project(":type.skyblockgeneric")) + implementation(project(":type.generic")) + implementation(project(":commons")) + implementation(project(":proxy.api")) + compileOnly("net.minestom:minestom:2025.12.20c-1.21.11") { + exclude(group = "org.jboss.shrinkwrap.resolver", module = "shrinkwrap-resolver-depchain") + } + implementation("org.tinylog:tinylog-api:2.7.0") + implementation("org.tinylog:tinylog-impl:2.7.0") + implementation("org.joml:joml:1.10.8") +} \ No newline at end of file diff --git a/type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/TypeCrimsonIsleLoader.java b/type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/TypeCrimsonIsleLoader.java new file mode 100644 index 000000000..272e68144 --- /dev/null +++ b/type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/TypeCrimsonIsleLoader.java @@ -0,0 +1,106 @@ +package net.swofty.type.crimsonisle; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.coordinate.Pos; +import net.swofty.commons.CustomWorlds; +import net.swofty.commons.ServerType; +import net.swofty.commons.ServiceType; +import net.swofty.proxyapi.redis.ProxyToClient; +import net.swofty.proxyapi.redis.ServiceToClient; +import net.swofty.type.crimsonisle.tab.CrimsonIsleServerModule; +import net.swofty.type.generic.SkyBlockTypeLoader; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.event.HypixelEventClass; +import net.swofty.type.generic.tab.TablistManager; +import net.swofty.type.generic.tab.TablistModule; +import net.swofty.type.skyblockgeneric.SkyBlockGenericLoader; +import net.swofty.type.skyblockgeneric.tabmodules.AccountInformationModule; +import net.swofty.type.skyblockgeneric.tabmodules.SkyBlockPlayersOnlineModule; +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class TypeCrimsonIsleLoader implements SkyBlockTypeLoader { + @Override + public ServerType getType() { + return ServerType.SKYBLOCK_CRIMSON_ISLE; + } + + @Override + public void onInitialize(MinecraftServer server) { + Logger.info("TypeCrimsonIsleLoader initialized!"); + } + + @Override + public void afterInitialize(MinecraftServer server) { + + } + + @Override + public LoaderValues getLoaderValues() { + return new LoaderValues( + (type) -> switch (type) { + default -> new Pos(-360.5, 80, -430.5, -180, 0); + }, // Spawn position + true // Announce death messages + ); + } + + public TablistManager getTablistManager() { + return new TablistManager() { + @Override + public List getModules() { + return new ArrayList<>(List.of( + new SkyBlockPlayersOnlineModule(1), + new SkyBlockPlayersOnlineModule(2), + new CrimsonIsleServerModule(), + new AccountInformationModule() + )); + } + }; + } + + @Override + public List getTraditionalEvents() { + return SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.crimsonisle.events", + HypixelEventClass.class + ).collect(Collectors.toList()); + } + + @Override + public List getCustomEvents() { + return new ArrayList<>(); + } + + @Override + public List getNPCs() { + return new ArrayList<>(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.crimsonisle.npcs", + HypixelNPC.class + ).toList()); + } + + @Override + public List getServiceRedisListeners() { + return List.of(); + } + + @Override + public List getProxyRedisListeners() { + return List.of(); + } + + @Override + public List getRequiredServices() { + return new ArrayList<>(List.of(ServiceType.DATA_MUTEX)); + } + + @Override + public @Nullable CustomWorlds getMainInstance() { + return CustomWorlds.SKYBLOCK_CRIMSON_ISLE; + } +} diff --git a/type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/events/ActionPlayerJoin.java b/type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/events/ActionPlayerJoin.java new file mode 100644 index 000000000..2f950e709 --- /dev/null +++ b/type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/events/ActionPlayerJoin.java @@ -0,0 +1,26 @@ +package net.swofty.type.crimsonisle.events; + +import lombok.SneakyThrows; +import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; +import net.swofty.type.generic.HypixelConst; +import net.swofty.type.generic.event.EventNodes; +import net.swofty.type.generic.event.HypixelEvent; +import net.swofty.type.generic.event.HypixelEventClass; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class ActionPlayerJoin implements HypixelEventClass { + + @SneakyThrows + @HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = false) + public void run(AsyncPlayerConfigurationEvent event) { + + final SkyBlockPlayer player = (SkyBlockPlayer) event.getPlayer(); + + event.setSpawningInstance(HypixelConst.getInstanceContainer()); + player.setRespawnPoint(HypixelConst.getTypeLoader() + .getLoaderValues() + .spawnPosition() + .apply(player.getOriginServer()) + ); + } +} diff --git a/type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/tab/CrimsonIsleServerModule.java b/type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/tab/CrimsonIsleServerModule.java new file mode 100644 index 000000000..b002ab2ce --- /dev/null +++ b/type.crimsonisle/src/main/java/net/swofty/type/crimsonisle/tab/CrimsonIsleServerModule.java @@ -0,0 +1,25 @@ +package net.swofty.type.crimsonisle.tab; + +import net.swofty.type.generic.HypixelConst; +import net.swofty.type.generic.tab.TablistModule; +import net.swofty.type.generic.tab.TablistSkinRegistry; +import net.swofty.type.generic.user.HypixelPlayer; + +import java.util.ArrayList; +import java.util.List; + +public class CrimsonIsleServerModule extends TablistModule { + @Override + public List getEntries(HypixelPlayer player) { + ArrayList entries = new ArrayList<>(List.of( + new TablistEntry(getCentered("§3§lServer Info"), TablistSkinRegistry.CYAN) + )); + + entries.add(new TablistEntry("§b§lArea: §7Crimson Isle", TablistSkinRegistry.GRAY)); + entries.add(new TablistEntry(" Server: §8" + HypixelConst.getServerName(), TablistSkinRegistry.GRAY)); + + fillRestWithGray(entries); + + return entries; + } +} diff --git a/type.galatea/build.gradle.kts b/type.galatea/build.gradle.kts new file mode 100644 index 000000000..ebbf60364 --- /dev/null +++ b/type.galatea/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java +} + +group = "net.swofty" +version = "3.0" + +java { + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 + toolchain { + languageVersion.set(JavaLanguageVersion.of(25)) + } +} + +dependencies { + implementation(project(":type.skyblockgeneric")) + implementation(project(":type.generic")) + implementation(project(":commons")) + implementation(project(":proxy.api")) + compileOnly("net.minestom:minestom:2025.12.20c-1.21.11") { + exclude(group = "org.jboss.shrinkwrap.resolver", module = "shrinkwrap-resolver-depchain") + } + implementation("org.tinylog:tinylog-api:2.7.0") + implementation("org.tinylog:tinylog-impl:2.7.0") + implementation("org.joml:joml:1.10.8") +} \ No newline at end of file diff --git a/type.galatea/src/main/java/net/swofty/type/galatea/TypeGalateaLoader.java b/type.galatea/src/main/java/net/swofty/type/galatea/TypeGalateaLoader.java new file mode 100644 index 000000000..934470259 --- /dev/null +++ b/type.galatea/src/main/java/net/swofty/type/galatea/TypeGalateaLoader.java @@ -0,0 +1,106 @@ +package net.swofty.type.galatea; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.coordinate.Pos; +import net.swofty.commons.CustomWorlds; +import net.swofty.commons.ServerType; +import net.swofty.commons.ServiceType; +import net.swofty.proxyapi.redis.ProxyToClient; +import net.swofty.proxyapi.redis.ServiceToClient; +import net.swofty.type.galatea.tab.GalateaServerModule; +import net.swofty.type.generic.SkyBlockTypeLoader; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.event.HypixelEventClass; +import net.swofty.type.generic.tab.TablistManager; +import net.swofty.type.generic.tab.TablistModule; +import net.swofty.type.skyblockgeneric.SkyBlockGenericLoader; +import net.swofty.type.skyblockgeneric.tabmodules.AccountInformationModule; +import net.swofty.type.skyblockgeneric.tabmodules.SkyBlockPlayersOnlineModule; +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class TypeGalateaLoader implements SkyBlockTypeLoader { + @Override + public ServerType getType() { + return ServerType.SKYBLOCK_GALATEA; + } + + @Override + public void onInitialize(MinecraftServer server) { + Logger.info("TypeGalateaLoader initialized!"); + } + + @Override + public void afterInitialize(MinecraftServer server) { + + } + + @Override + public LoaderValues getLoaderValues() { + return new LoaderValues( + (type) -> switch (type) { + default -> new Pos(-542.5, 108, -26.5, 45, 0); + }, // Spawn position + true // Announce death messages + ); + } + + public TablistManager getTablistManager() { + return new TablistManager() { + @Override + public List getModules() { + return new ArrayList<>(List.of( + new SkyBlockPlayersOnlineModule(1), + new SkyBlockPlayersOnlineModule(2), + new GalateaServerModule(), + new AccountInformationModule() + )); + } + }; + } + + @Override + public List getTraditionalEvents() { + return SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.galatea.events", + HypixelEventClass.class + ).collect(Collectors.toList()); + } + + @Override + public List getCustomEvents() { + return new ArrayList<>(); + } + + @Override + public List getNPCs() { + return new ArrayList<>(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.galatea.npcs", + HypixelNPC.class + ).toList()); + } + + @Override + public List getServiceRedisListeners() { + return List.of(); + } + + @Override + public List getProxyRedisListeners() { + return List.of(); + } + + @Override + public List getRequiredServices() { + return new ArrayList<>(List.of(ServiceType.DATA_MUTEX)); + } + + @Override + public @Nullable CustomWorlds getMainInstance() { + return CustomWorlds.SKYBLOCK_GALATEA; + } +} diff --git a/type.galatea/src/main/java/net/swofty/type/galatea/events/ActionPlayerJoin.java b/type.galatea/src/main/java/net/swofty/type/galatea/events/ActionPlayerJoin.java new file mode 100644 index 000000000..322539e91 --- /dev/null +++ b/type.galatea/src/main/java/net/swofty/type/galatea/events/ActionPlayerJoin.java @@ -0,0 +1,26 @@ +package net.swofty.type.galatea.events; + +import lombok.SneakyThrows; +import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; +import net.swofty.type.generic.HypixelConst; +import net.swofty.type.generic.event.EventNodes; +import net.swofty.type.generic.event.HypixelEvent; +import net.swofty.type.generic.event.HypixelEventClass; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class ActionPlayerJoin implements HypixelEventClass { + + @SneakyThrows + @HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = false) + public void run(AsyncPlayerConfigurationEvent event) { + + final SkyBlockPlayer player = (SkyBlockPlayer) event.getPlayer(); + + event.setSpawningInstance(HypixelConst.getInstanceContainer()); + player.setRespawnPoint(HypixelConst.getTypeLoader() + .getLoaderValues() + .spawnPosition() + .apply(player.getOriginServer()) + ); + } +} diff --git a/type.galatea/src/main/java/net/swofty/type/galatea/tab/GalateaServerModule.java b/type.galatea/src/main/java/net/swofty/type/galatea/tab/GalateaServerModule.java new file mode 100644 index 000000000..1cf88e36d --- /dev/null +++ b/type.galatea/src/main/java/net/swofty/type/galatea/tab/GalateaServerModule.java @@ -0,0 +1,25 @@ +package net.swofty.type.galatea.tab; + +import net.swofty.type.generic.HypixelConst; +import net.swofty.type.generic.tab.TablistModule; +import net.swofty.type.generic.tab.TablistSkinRegistry; +import net.swofty.type.generic.user.HypixelPlayer; + +import java.util.ArrayList; +import java.util.List; + +public class GalateaServerModule extends TablistModule { + @Override + public List getEntries(HypixelPlayer player) { + ArrayList entries = new ArrayList<>(List.of( + new TablistEntry(getCentered("§3§lServer Info"), TablistSkinRegistry.CYAN) + )); + + entries.add(new TablistEntry("§b§lArea: §7Galatea", TablistSkinRegistry.GRAY)); + entries.add(new TablistEntry(" Server: §8" + HypixelConst.getServerName(), TablistSkinRegistry.GRAY)); + + fillRestWithGray(entries); + + return entries; + } +} diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/player/ActionPlayerLaunchPads.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/player/ActionPlayerLaunchPads.java index 79dd12409..787dd7568 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/player/ActionPlayerLaunchPads.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/player/ActionPlayerLaunchPads.java @@ -121,21 +121,24 @@ public void run(PlayerMoveEvent event) { notifiedPlayers.remove(player.getUuid()); // Execute the after finished callback - player.sendMessage("Done"); pad.getAfterFinished().accept(player); // Check after a delay if player is still on this server (transfer failed) - scheduler.schedule(() -> { - // If player is still on the same server and instance, teleport them back - if (player.getInstance() != null && player.getInstance().equals(armorStand.getInstance())) { - player.teleport(originalPosition); - player.sendMessage("§cFailed to connect to the server. You have been teleported back."); - } - try { - armorStand.remove(); - } catch (Exception e) { - } - }, 2, TimeUnit.SECONDS); + if (pad.getServerType() != pad.getTargetServerType()) { + scheduler.schedule(() -> { + // If player is still on the same server and instance, teleport them back + if (player.getInstance() != null && player.getInstance().equals(armorStand.getInstance())) { + player.teleport(originalPosition); + player.sendMessage("§cFailed to connect to the server. You have been teleported back."); + } + try { + armorStand.remove(); + } catch (Exception e) { + } + }, 2, TimeUnit.SECONDS); + } else { + armorStand.remove(); + } return; } diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/user/fairysouls/FairySoulZone.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/user/fairysouls/FairySoulZone.java index e88e63b5c..f1e6b3745 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/user/fairysouls/FairySoulZone.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/user/fairysouls/FairySoulZone.java @@ -8,6 +8,7 @@ public enum FairySoulZone { DWARVEN_MINES, THE_FARMING_ISLANDS, THE_PARK, + GALATEA, SPIDERS_DEN, THE_END, CRIMSON_ISLE, diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/utility/LaunchPads.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/utility/LaunchPads.java index 42fc408e5..c19fba477 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/utility/LaunchPads.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/utility/LaunchPads.java @@ -77,13 +77,13 @@ public enum LaunchPads { boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.COMBAT) >= 1; if (!hasRequirement) { return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-162.5, 75, -161.5)) + .pos(new Pos(-162.5, 73.5, -161.5)) .player(player) .text(new String[]{"§bTravel to:", "§aSpider's Den", "§cRequires Combat Level 1"}) .build(); } else { return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-162.5, 75, -161.5)) + .pos(new Pos(-162.5, 73.5, -161.5)) .player(player) .text(new String[]{"§bTravel to:", "§aSpider's Den"}) .build(); @@ -100,7 +100,7 @@ public enum LaunchPads { (player) -> true, "", (player) -> PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-197.5, 83, -228.5)) + .pos(new Pos(-197.5, 84, -228.5)) .player(player) .text(new String[]{"§bTravel to:", "§aHub Island"}) .build() @@ -118,13 +118,13 @@ public enum LaunchPads { boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.COMBAT) >= 12; if (!hasRequirement) { return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-383, 120, -261)) + .pos(new Pos(-383, 119.5, -261)) .player(player) .text(new String[]{"§bTravel to:", "§aThe End", "§cRequires Combat Level 12"}) .build(); } else { return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-383, 120, -261)) + .pos(new Pos(-383, 119.5, -261)) .player(player) .text(new String[]{"§bTravel to:", "§aThe End"}) .build(); @@ -141,7 +141,48 @@ public enum LaunchPads { (player) -> true, "", (player) -> PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-495, 102, -275)) + .pos(new Pos(-495, 101.7, -275)) + .player(player) + .text(new String[]{"§bTravel to:", "§aSpider's Den"}) + .build() + ), + + SPIDERS_DEN_TO_CRIMSON_ISLE( + getSlimeBlocksNear(new Pos(-356, 87, -352)), + ServerType.SKYBLOCK_SPIDERS_DEN, + ServerType.SKYBLOCK_CRIMSON_ISLE, + new Pos(-361, 80, -425), + (player) -> player.sendTo(ServerType.SKYBLOCK_CRIMSON_ISLE), + (player) -> player.getSkills().getCurrentLevel(SkillCategories.COMBAT) >= 22, + "§cYou must be at least Combat Level XXII to join this island!", + (player) -> { + boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.COMBAT) >= 22; + if (!hasRequirement) { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-356, 87, -353)) + .player(player) + .text(new String[]{"§bTravel to:", "§aCrimson Isle", "§cRequires Combat Level 22"}) + .build(); + } else { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-356, 87, -353)) + .player(player) + .text(new String[]{"§bTravel to:", "§aCrimson Isle"}) + .build(); + } + } + ), + + CRIMSON_ISLE_TO_SPIDERS_DEN( + getSlimeBlocksNear(new Pos(-360, 80, -420)), + ServerType.SKYBLOCK_CRIMSON_ISLE, + ServerType.SKYBLOCK_SPIDERS_DEN, + new Pos(-355, 87, -347), + (player) -> player.sendTo(ServerType.SKYBLOCK_SPIDERS_DEN), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-360.5, 80, -420)) .player(player) .text(new String[]{"§bTravel to:", "§aSpider's Den"}) .build() @@ -216,7 +257,210 @@ public enum LaunchPads { .player(player) .text(new String[]{"§bTravel to:", "§aGold Mine"}) .build() - ); + ), + + FOREST_TO_BIRCH_PARK( + getSlimeBlocksNear(new Pos(-224.5, 73, -15.5)), + ServerType.SKYBLOCK_HUB, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-265.5, 79, -17.5), + (player) -> player.sendTo(ServerType.SKYBLOCK_THE_PARK), + (player) -> player.getSkills().getCurrentLevel(SkillCategories.FORAGING) >= 1, + "§cYou must be at least Foraging Level I to join this island!", + (player) -> { + boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.FORAGING) >= 1; + if (!hasRequirement) { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-224.5, 73.5, -15.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aThe Park", "§cRequires Foraging Level 1"}) + .build(); + } else { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-224.5, 73.5, -15.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aThe Park"}) + .build(); + } + } + ), + + BIRCH_PARK_TO_FOREST( + getSlimeBlocksNear(new Pos(-261.5, 79, -17.5)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_HUB, + new Pos(-221.5, 73, -15.5), + (player) -> player.sendTo(ServerType.SKYBLOCK_HUB), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-261.5, 79.5, -17.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aHub Island"}) + .build() + ), + + BIRCH_PARK_TO_SPRUCE_WOODS( + getSlimeBlocksNear(new Pos(-314.5, 81, -9.5)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-348.5, 90, -4.5), + (player) -> player.teleport(new Pos(-348.5, 90, -4.5)), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-314.5, 81.5, -9.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aSpruce Woods"}) + .build() + ), + + SPRUCE_WOODS_TO_BIRCH_PARK( + getSlimeBlocksNear(new Pos(-343.5, 90, -4.5)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-306.5, 81, -5.5), + (player) -> player.teleport(new Pos(-306.5, 81, -5.5)), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-343.5, 90.5, -4.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aBirch Park"}) + .build() + ), + + SPRUCE_WOODS_TO_DARK_THICKET( + getSlimeBlocksNear(new Pos(-364.5, 90, -18.5)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-380.5, 98, -38.5), + (player) -> player.teleport(new Pos(-380.5, 98, -38.5)), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-364.5, 90.5, -18.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aDark Thicket"}) + .build() + ), + + DARK_THICKET_TO_SPRUCE_WOODS( + getSlimeBlocksNear(new Pos(-376.5, 97, -32.5)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-361.5, 90, -13.5), + (player) -> player.teleport(new Pos(-361.5, 90, -13.5)), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-376.5, 97.5, -32.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aSpruce Woods"}) + .build() + ), + + DARK_THICKET_TO_SAVANNA_WOODLAND( + getSlimeBlocksNear(new Pos(-400.5, 98, -33.5)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-418.5, 110, -12.5), + (player) -> player.teleport(new Pos(-418.5, 110, -12.5)), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-400.5, 98.5, -33.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aSavanna Woodland"}) + .build() + ), + + SAVANNA_WOODLAND_TO_DARK_THICKET( + getSlimeBlocksNear(new Pos(-415.5, 109, -16.5)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-397.5, 98, -37.5), + (player) -> player.teleport(new Pos(-397.5, 98, -37.5)), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-415.5, 109.5, -16.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aDark Thicket"}) + .build() + ), + + SAVANNA_WOODLAND_TO_JUNGLE_ISLAND( + getSlimeBlocksNear(new Pos(-439.5, 111, -17.5)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-462.5, 121, -32.5), + (player) -> player.teleport(new Pos(-462.5, 121, -32.5)), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-439.5, 111.5, -17.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aJungle Island"}) + .build() + ), + + JUNGLE_ISLAND_TO_SAVANNA_WOODLAND( + getSlimeBlocksNear(new Pos(-461.5, 121, -28.5)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-434.5, 110, -13.5), + (player) -> player.teleport(new Pos(-434.5, 110, -13.5)), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-461.5, 121.5, -28.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aSavanna Woodland"}) + .build() + ), + + JUNGLE_ISLAND_TO_GALATEA( + getSlimeBlocksNear(new Pos(-488.5, 116, -40)), + ServerType.SKYBLOCK_THE_PARK, + ServerType.SKYBLOCK_GALATEA, + new Pos(-542.5, 108, -26.5), + (player) -> player.sendTo(ServerType.SKYBLOCK_GALATEA), + (player) -> player.getSkills().getCurrentLevel(SkillCategories.FORAGING) >= 12, + "§cYou must be at least Foraging Level XII to join this island!", + (player) -> { + boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.FORAGING) >= 12; + if (!hasRequirement) { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-489.5, 116.5, -40)) + .player(player) + .text(new String[]{"§bTravel to:", "§aGalatea", "§cRequires Foraging Level 12"}) + .build(); + } else { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-489.5, 116.5, -40)) + .player(player) + .text(new String[]{"§bTravel to:", "§aGalatea"}) + .build(); + } + } + ), + + GALATEA_TO_JUNGLE_ISLAND( + getSlimeBlocksNear(new Pos(-538.5, 108, -29)), + ServerType.SKYBLOCK_GALATEA, + ServerType.SKYBLOCK_THE_PARK, + new Pos(-483.5, 117, -41.5), + (player) -> player.sendTo(ServerType.SKYBLOCK_THE_PARK), + (player) -> true, + "", + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-538.5, 108.5, -28.5)) + .player(player) + .text(new String[]{"§bTravel to:", "§aThe Park"}) + .build() + ), + ; private static final List launchPads = new ArrayList<>(); diff --git a/type.spidersden/src/main/java/net/swofty/type/spidersden/TypeSpidersDenLoader.java b/type.spidersden/src/main/java/net/swofty/type/spidersden/TypeSpidersDenLoader.java index 191fea8ff..6da9e59f9 100644 --- a/type.spidersden/src/main/java/net/swofty/type/spidersden/TypeSpidersDenLoader.java +++ b/type.spidersden/src/main/java/net/swofty/type/spidersden/TypeSpidersDenLoader.java @@ -44,6 +44,7 @@ public LoaderValues getLoaderValues() { return new LoaderValues( (type) -> switch (type) { case SKYBLOCK_THE_END -> new Pos(-378, 118.5, -261, -90, 0); + case SKYBLOCK_CRIMSON_ISLE -> new Pos(-355, 87, -347, -20, 0); default -> new Pos(-202.5, 83, -233.5, 135, 0); }, // Spawn position true // Announce death messages diff --git a/type.thepark/build.gradle.kts b/type.thepark/build.gradle.kts new file mode 100644 index 000000000..ebbf60364 --- /dev/null +++ b/type.thepark/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java +} + +group = "net.swofty" +version = "3.0" + +java { + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 + toolchain { + languageVersion.set(JavaLanguageVersion.of(25)) + } +} + +dependencies { + implementation(project(":type.skyblockgeneric")) + implementation(project(":type.generic")) + implementation(project(":commons")) + implementation(project(":proxy.api")) + compileOnly("net.minestom:minestom:2025.12.20c-1.21.11") { + exclude(group = "org.jboss.shrinkwrap.resolver", module = "shrinkwrap-resolver-depchain") + } + implementation("org.tinylog:tinylog-api:2.7.0") + implementation("org.tinylog:tinylog-impl:2.7.0") + implementation("org.joml:joml:1.10.8") +} \ No newline at end of file diff --git a/type.thepark/src/main/java/net/swofty/type/thepark/TypeTheParkLoader.java b/type.thepark/src/main/java/net/swofty/type/thepark/TypeTheParkLoader.java new file mode 100644 index 000000000..2bb505443 --- /dev/null +++ b/type.thepark/src/main/java/net/swofty/type/thepark/TypeTheParkLoader.java @@ -0,0 +1,107 @@ +package net.swofty.type.thepark; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.coordinate.Pos; +import net.swofty.commons.CustomWorlds; +import net.swofty.commons.ServerType; +import net.swofty.commons.ServiceType; +import net.swofty.proxyapi.redis.ProxyToClient; +import net.swofty.proxyapi.redis.ServiceToClient; +import net.swofty.type.generic.SkyBlockTypeLoader; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.event.HypixelEventClass; +import net.swofty.type.generic.tab.TablistManager; +import net.swofty.type.generic.tab.TablistModule; +import net.swofty.type.skyblockgeneric.SkyBlockGenericLoader; +import net.swofty.type.skyblockgeneric.tabmodules.AccountInformationModule; +import net.swofty.type.skyblockgeneric.tabmodules.SkyBlockPlayersOnlineModule; +import net.swofty.type.thepark.tab.TheParkServerModule; +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class TypeTheParkLoader implements SkyBlockTypeLoader { + @Override + public ServerType getType() { + return ServerType.SKYBLOCK_THE_PARK; + } + + @Override + public void onInitialize(MinecraftServer server) { + Logger.info("TypeTheParkLoader initialized!"); + } + + @Override + public void afterInitialize(MinecraftServer server) { + + } + + @Override + public LoaderValues getLoaderValues() { + return new LoaderValues( + (type) -> switch (type) { + case SKYBLOCK_GALATEA -> new Pos(-483.5, 117, -41.5, -120, 0); + default -> new Pos(-265.5, 79, -17.5, 90, 0); + }, // Spawn position + true // Announce death messages + ); + } + + public TablistManager getTablistManager() { + return new TablistManager() { + @Override + public List getModules() { + return new ArrayList<>(List.of( + new SkyBlockPlayersOnlineModule(1), + new SkyBlockPlayersOnlineModule(2), + new TheParkServerModule(), + new AccountInformationModule() + )); + } + }; + } + + @Override + public List getTraditionalEvents() { + return SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.thepark.events", + HypixelEventClass.class + ).collect(Collectors.toList()); + } + + @Override + public List getCustomEvents() { + return new ArrayList<>(); + } + + @Override + public List getNPCs() { + return new ArrayList<>(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.thepark.npcs", + HypixelNPC.class + ).toList()); + } + + @Override + public List getServiceRedisListeners() { + return List.of(); + } + + @Override + public List getProxyRedisListeners() { + return List.of(); + } + + @Override + public List getRequiredServices() { + return new ArrayList<>(List.of(ServiceType.DATA_MUTEX)); + } + + @Override + public @Nullable CustomWorlds getMainInstance() { + return CustomWorlds.SKYBLOCK_THE_PARK; + } +} diff --git a/type.thepark/src/main/java/net/swofty/type/thepark/events/ActionPlayerJoin.java b/type.thepark/src/main/java/net/swofty/type/thepark/events/ActionPlayerJoin.java new file mode 100644 index 000000000..32737e368 --- /dev/null +++ b/type.thepark/src/main/java/net/swofty/type/thepark/events/ActionPlayerJoin.java @@ -0,0 +1,26 @@ +package net.swofty.type.thepark.events; + +import lombok.SneakyThrows; +import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; +import net.swofty.type.generic.HypixelConst; +import net.swofty.type.generic.event.EventNodes; +import net.swofty.type.generic.event.HypixelEvent; +import net.swofty.type.generic.event.HypixelEventClass; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class ActionPlayerJoin implements HypixelEventClass { + + @SneakyThrows + @HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = false) + public void run(AsyncPlayerConfigurationEvent event) { + + final SkyBlockPlayer player = (SkyBlockPlayer) event.getPlayer(); + + event.setSpawningInstance(HypixelConst.getInstanceContainer()); + player.setRespawnPoint(HypixelConst.getTypeLoader() + .getLoaderValues() + .spawnPosition() + .apply(player.getOriginServer()) + ); + } +} diff --git a/type.thepark/src/main/java/net/swofty/type/thepark/tab/TheParkServerModule.java b/type.thepark/src/main/java/net/swofty/type/thepark/tab/TheParkServerModule.java new file mode 100644 index 000000000..60dca2e30 --- /dev/null +++ b/type.thepark/src/main/java/net/swofty/type/thepark/tab/TheParkServerModule.java @@ -0,0 +1,25 @@ +package net.swofty.type.thepark.tab; + +import net.swofty.type.generic.HypixelConst; +import net.swofty.type.generic.tab.TablistModule; +import net.swofty.type.generic.tab.TablistSkinRegistry; +import net.swofty.type.generic.user.HypixelPlayer; + +import java.util.ArrayList; +import java.util.List; + +public class TheParkServerModule extends TablistModule { + @Override + public List getEntries(HypixelPlayer player) { + ArrayList entries = new ArrayList<>(List.of( + new TablistEntry(getCentered("§3§lServer Info"), TablistSkinRegistry.CYAN) + )); + + entries.add(new TablistEntry("§b§lArea: §7The Park", TablistSkinRegistry.GRAY)); + entries.add(new TablistEntry(" Server: §8" + HypixelConst.getServerName(), TablistSkinRegistry.GRAY)); + + fillRestWithGray(entries); + + return entries; + } +} diff --git a/velocity.extension/src/main/java/net/swofty/velocity/gamemanager/BalanceConfigurations.java b/velocity.extension/src/main/java/net/swofty/velocity/gamemanager/BalanceConfigurations.java index 6bf3a9a59..0c46d6998 100644 --- a/velocity.extension/src/main/java/net/swofty/velocity/gamemanager/BalanceConfigurations.java +++ b/velocity.extension/src/main/java/net/swofty/velocity/gamemanager/BalanceConfigurations.java @@ -14,10 +14,11 @@ public class BalanceConfigurations { public static HashMap> configurations = new HashMap<>(Map.ofEntries( - Map.entry(ServerType.SKYBLOCK_HUB, List.of( + Map.entry(ServerType.SKYBLOCK_ISLAND, List.of( + new IslandCheck(), new LowestPlayerCount() )), - Map.entry(ServerType.PROTOTYPE_LOBBY, List.of( + Map.entry(ServerType.SKYBLOCK_HUB, List.of( new LowestPlayerCount() )), Map.entry(ServerType.SKYBLOCK_DUNGEON_HUB, List.of( @@ -32,13 +33,7 @@ public class BalanceConfigurations { Map.entry(ServerType.SKYBLOCK_THE_END, List.of( new LowestPlayerCount() )), - Map.entry(ServerType.BEDWARS_LOBBY, List.of( - new LowestPlayerCount() - )), - Map.entry(ServerType.BEDWARS_GAME, List.of( - new ReadyGames() - )), - Map.entry(ServerType.BEDWARS_CONFIGURATOR, List.of( + Map.entry(ServerType.SKYBLOCK_CRIMSON_ISLE, List.of( new LowestPlayerCount() )), Map.entry(ServerType.SKYBLOCK_GOLD_MINE, List.of( @@ -50,8 +45,25 @@ public class BalanceConfigurations { Map.entry(ServerType.SKYBLOCK_DWARVEN_MINES, List.of( new LowestPlayerCount() )), - Map.entry(ServerType.SKYBLOCK_ISLAND, List.of( - new IslandCheck(), + Map.entry(ServerType.SKYBLOCK_THE_PARK, List.of( + new LowestPlayerCount() + )), + Map.entry(ServerType.SKYBLOCK_GALATEA, List.of( + new LowestPlayerCount() + )), + Map.entry(ServerType.SKYBLOCK_BACKWATER_BAYOU, List.of( + new LowestPlayerCount() + )), + Map.entry(ServerType.PROTOTYPE_LOBBY, List.of( + new LowestPlayerCount() + )), + Map.entry(ServerType.BEDWARS_LOBBY, List.of( + new LowestPlayerCount() + )), + Map.entry(ServerType.BEDWARS_GAME, List.of( + new ReadyGames() + )), + Map.entry(ServerType.BEDWARS_CONFIGURATOR, List.of( new LowestPlayerCount() )) ));