From a5d9241c9f44bd8f3766a7379d95bc10d5590377 Mon Sep 17 00:00:00 2001 From: Aunn Date: Mon, 8 Dec 2025 23:35:08 -0800 Subject: [PATCH 001/102] Initial Gold Mine Setup --- .gitignore | 1 + .../java/net/swofty/commons/CustomWorlds.java | 1 + .../java/net/swofty/commons/ServerType.java | 1 + loader/build.gradle.kts | 1 + .../main/java/net/swofty/loader/Hypixel.java | 9 +- settings.gradle.kts | 1 + type.goldmine/build.gradle.kts | 26 ++++ .../type/goldmine/TypeGoldMineLoader.java | 125 ++++++++++++++++++ .../goldmine/events/ActionPlayerJoin.java | 26 ++++ .../goldmine/tab/GoldMineServerModule.java | 25 ++++ .../net/swofty/type/hub/TypeHubLoader.java | 1 + .../skyblockgeneric/utility/LaunchPads.java | 35 ++++- .../gamemanager/BalanceConfigurations.java | 3 + 13 files changed, 251 insertions(+), 4 deletions(-) create mode 100644 type.goldmine/build.gradle.kts create mode 100644 type.goldmine/src/main/java/net/swofty/type/goldmine/TypeGoldMineLoader.java create mode 100644 type.goldmine/src/main/java/net/swofty/type/goldmine/events/ActionPlayerJoin.java create mode 100644 type.goldmine/src/main/java/net/swofty/type/goldmine/tab/GoldMineServerModule.java diff --git a/.gitignore b/.gitignore index 7b31b14a1..537d98c47 100644 --- a/.gitignore +++ b/.gitignore @@ -45,5 +45,6 @@ build/ ### Islands ### /configuration/skyblock/islands/hypixel_skyblock_island_template/ /configuration/skyblock/islands/hypixel_skyblock_hub/ +/configuration/skyblock/islands/hypixel_skyblock_gold_mine/ /configuration/hypixel_prototype_lobby/ .gradle/ diff --git a/commons/src/main/java/net/swofty/commons/CustomWorlds.java b/commons/src/main/java/net/swofty/commons/CustomWorlds.java index bf2ba4892..443e63f15 100644 --- a/commons/src/main/java/net/swofty/commons/CustomWorlds.java +++ b/commons/src/main/java/net/swofty/commons/CustomWorlds.java @@ -3,6 +3,7 @@ public enum CustomWorlds { SKYBLOCK_ISLAND_TEMPLATE("hypixel_skyblock_island_template"), SKYBLOCK_HUB("hypixel_skyblock_hub"), + SKYBLOCK_GOLD_MINE("hypixel_skyblock_gold_mine"), 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 6a7e44bdd..a7b4451dc 100644 --- a/commons/src/main/java/net/swofty/commons/ServerType.java +++ b/commons/src/main/java/net/swofty/commons/ServerType.java @@ -8,6 +8,7 @@ public enum ServerType { SKYBLOCK_HUB(true), SKYBLOCK_DUNGEON_HUB(true), SKYBLOCK_THE_FARMING_ISLANDS(true), + SKYBLOCK_GOLD_MINE(true), PROTOTYPE_LOBBY(false), BEDWARS_LOBBY(false), BEDWARS_GAME(false), diff --git a/loader/build.gradle.kts b/loader/build.gradle.kts index 200727f38..b40778789 100644 --- a/loader/build.gradle.kts +++ b/loader/build.gradle.kts @@ -27,6 +27,7 @@ dependencies { implementation(project(":type.island")) implementation(project(":type.hub")) implementation(project(":type.thefarmingislands")) + implementation(project(":type.goldmine")) implementation(project(":type.dungeonhub")) implementation(project(":type.skyblockgeneric")) implementation(project(":type.prototypelobby")) diff --git a/loader/src/main/java/net/swofty/loader/Hypixel.java b/loader/src/main/java/net/swofty/loader/Hypixel.java index bc5351aef..e2b4b5c8f 100644 --- a/loader/src/main/java/net/swofty/loader/Hypixel.java +++ b/loader/src/main/java/net/swofty/loader/Hypixel.java @@ -106,11 +106,14 @@ public static void main(String[] args) { ServerType type = clazz.getDeclaredConstructor().newInstance().getType(); Logger.info("Found TypeLoader: " + type.name()); return type == serverType; - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | - NoSuchMethodException e) { + } catch (Exception e) { + Logger.error("Failed to init TypeLoader " + clazz.getName(), e); return false; } - }).findFirst().orElse(null).getDeclaredConstructor().newInstance(); + }).findFirst().orElseThrow(() -> + new IllegalStateException("No TypeLoader found for server type " + serverType) + ).getDeclaredConstructor().newInstance(); + new HypixelGenericLoader(typeLoader).initialize(minecraftServer); /** diff --git a/settings.gradle.kts b/settings.gradle.kts index c9468cfb9..93849a77f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,6 +14,7 @@ include(":loader") include(":type.prototypelobby") include(":type.thefarmingislands") +include(":type.goldmine") include(":type.island") include(":type.hub") include(":type.dungeonhub") diff --git a/type.goldmine/build.gradle.kts b/type.goldmine/build.gradle.kts new file mode 100644 index 000000000..421aa6c49 --- /dev/null +++ b/type.goldmine/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + java +} + +group = "net.swofty" +version = "3.0" + +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + toolchain { + languageVersion.set(JavaLanguageVersion.of(21)) + } +} + +dependencies { + implementation(project(":type.skyblockgeneric")) + implementation(project(":type.generic")) + implementation(project(":commons")) + implementation(project(":proxy.api")) + compileOnly("net.minestom:minestom:2025.08.18-1.21.8") { + 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") +} \ No newline at end of file diff --git a/type.goldmine/src/main/java/net/swofty/type/goldmine/TypeGoldMineLoader.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/TypeGoldMineLoader.java new file mode 100644 index 000000000..e9696ac1b --- /dev/null +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/TypeGoldMineLoader.java @@ -0,0 +1,125 @@ +package net.swofty.type.goldmine; + +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.animalnpc.HypixelAnimalNPC; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.villager.HypixelVillagerNPC; +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.goldmine.tab.GoldMineServerModule; +import net.swofty.type.skyblockgeneric.tabmodules.AccountInformationModule; +import net.swofty.type.skyblockgeneric.tabmodules.SkyBlockPlayersOnlineModule; +import net.swofty.type.skyblockgeneric.SkyBlockGenericLoader; +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class TypeGoldMineLoader implements SkyBlockTypeLoader { + @Override + public ServerType getType() { + return ServerType.SKYBLOCK_GOLD_MINE; + } + + @Override + public void onInitialize(MinecraftServer server) { + Logger.info("TypeGoldMineLoader initialized!"); + } + + @Override + public void afterInitialize(MinecraftServer server) { + + } + + @Override + public LoaderValues getLoaderValues() { + return new LoaderValues( + (type) -> switch (type) { + default -> new Pos(-4, 74, -271, -180, 0); // TODO: UPDATE THIS POSITION TO PROPER LOCATION + }, // 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 GoldMineServerModule(), + new AccountInformationModule() + )); + } + }; + } + + @Override + public List getTraditionalEvents() { + return SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.goldmine.events", + HypixelEventClass.class + ).collect(Collectors.toList()); + } + + @Override + public List getCustomEvents() { + return new ArrayList<>(); + } + + @Override + public List getNPCs() { + List npcs = new ArrayList<>(); + + npcs.addAll(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.goldmine.npcs", + HypixelNPC.class + ).toList()); + + return npcs; + } + + @Override + public List getServiceRedisListeners() { + return List.of(); + } + + @Override + public List getProxyRedisListeners() { + return List.of(); + } + + @Override + public List getVillagerNPCs() { + return new ArrayList<>(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.goldmine.villagers", + HypixelVillagerNPC.class + ).toList()); + } + + @Override + public List getAnimalNPCs() { + return new ArrayList<>(); + } + + @Override + public List getRequiredServices() { + return new ArrayList<>(List.of(ServiceType.DATA_MUTEX)); + } + + @Override + public @Nullable CustomWorlds getMainInstance() { + return CustomWorlds.SKYBLOCK_GOLD_MINE; + } +} diff --git a/type.goldmine/src/main/java/net/swofty/type/goldmine/events/ActionPlayerJoin.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/events/ActionPlayerJoin.java new file mode 100644 index 000000000..83264f0ca --- /dev/null +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/events/ActionPlayerJoin.java @@ -0,0 +1,26 @@ +package net.swofty.type.goldmine.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.goldmine/src/main/java/net/swofty/type/goldmine/tab/GoldMineServerModule.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/tab/GoldMineServerModule.java new file mode 100644 index 000000000..46b7b66b4 --- /dev/null +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/tab/GoldMineServerModule.java @@ -0,0 +1,25 @@ +package net.swofty.type.goldmine.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 GoldMineServerModule 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: §7Gold Mine", TablistSkinRegistry.GRAY)); + entries.add(new TablistEntry(" Server: §8" + HypixelConst.getServerName(), TablistSkinRegistry.GRAY)); + + fillRestWithGray(entries); + + return entries; + } +} diff --git a/type.hub/src/main/java/net/swofty/type/hub/TypeHubLoader.java b/type.hub/src/main/java/net/swofty/type/hub/TypeHubLoader.java index d4de67d1f..504a1d792 100644 --- a/type.hub/src/main/java/net/swofty/type/hub/TypeHubLoader.java +++ b/type.hub/src/main/java/net/swofty/type/hub/TypeHubLoader.java @@ -103,6 +103,7 @@ public LoaderValues getLoaderValues() { return new LoaderValues( (type) -> switch (type) { case SKYBLOCK_THE_FARMING_ISLANDS -> new Pos(74, 72, -180, 35, 0); + case SKYBLOCK_GOLD_MINE -> new Pos(-9.5, 64, -228, 0, 0); // TODO: UPDATE TO PROPER POSITION case SKYBLOCK_DUNGEON_HUB -> new Pos(-44, 88, 11.5, 0, 0); default -> new Pos(-2.5, 72.5, -69.5, 180, 0); }, // Spawn position 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 1daee7e34..509839770 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 @@ -56,7 +56,40 @@ public enum LaunchPads { .player(player) .text(new String[]{"§bTravel To:", "§aThe Village"}) .build(); - }); + }), + VILLAGE_TO_GOLD_MINE(getSlimeBlocksNear(new Pos(-10, 63, -231)), ServerType.SKYBLOCK_HUB, // TODO: UPDATE TO PROPER POSITIONS AND INFO + new Pos(116.5, 74, -210.5), (player) -> { + player.sendTo(ServerType.SKYBLOCK_GOLD_MINE); + }, (player) -> player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1, + "§cYou must be at least Mining Level I to join this island!", + (player) -> { + boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.FARMING) >= 5; + if (!hasRequirement) { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-10, 63.3, -231.5)) + .player(player) + .text(new String[]{"§bTravel To:", "§aGold Mine", "§cRequires Mining Level 1"}) + .build(); + } else { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-10, 63.3, -231.5)) + .player(player) + .text(new String[]{"§bTravel To:", "§aGold Mine"}) + .build(); + } + }), + GOLD_MINE_TO_VILLAGE(getSlimeBlocksNear(new Pos(111, 71, -202)), ServerType.SKYBLOCK_GOLD_MINE, + new Pos(74, 72, -180), (player) -> { + player.sendTo(ServerType.SKYBLOCK_HUB); + }, (player) -> true, + "", + (player) -> { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(111.5, 71.7, -202.5)) + .player(player) + .text(new String[]{"§bTravel To:", "§aThe Village"}) + .build(); + }), ; private static final List launchPads = new ArrayList<>(); 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 028a74d8b..234a8c237 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 @@ -25,6 +25,9 @@ public class BalanceConfigurations { ServerType.SKYBLOCK_THE_FARMING_ISLANDS, List.of( new LowestPlayerCount() ), + ServerType.SKYBLOCK_GOLD_MINE, List.of( + new LowestPlayerCount() + ), ServerType.SKYBLOCK_ISLAND, List.of( new IslandCheck(), new LowestPlayerCount() From be3dccac5a912fe4095e12a630be906148ed93ea Mon Sep 17 00:00:00 2001 From: Aunn Date: Wed, 10 Dec 2025 21:32:10 -0800 Subject: [PATCH 002/102] Add block mining --- .../skyblockgeneric/region/RegionType.java | 2 +- .../configurations/GoldMineConfiguration.java | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/GoldMineConfiguration.java diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java index e5d413ff4..26e5e5c03 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java @@ -62,7 +62,7 @@ public enum RegionType { VOID_SEPULTURE("Void Sepulture", "§d"), DRAGONS_NEST("Dragon's Nest", "§5"), - GOLD_MINE("Gold Mine", "§6"), + GOLD_MINE("Gold Mine", "§6", GoldMineConfiguration.class), DEEP_CAVERN("Deep Caverns", "§b"), GUNPOWDER_MINES("Gunpowder Mines"), LAPIS_QUARRY("Lapis Quarry"), diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/GoldMineConfiguration.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/GoldMineConfiguration.java new file mode 100644 index 000000000..44238a905 --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/GoldMineConfiguration.java @@ -0,0 +1,48 @@ +package net.swofty.type.skyblockgeneric.region.mining.configurations; + +import net.minestom.server.coordinate.Point; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.instance.Instance; +import net.minestom.server.instance.block.Block; +import net.minestom.server.item.Material; +import net.swofty.type.skyblockgeneric.region.SkyBlockMiningConfiguration; + +import java.util.List; + +public class GoldMineConfiguration extends SkyBlockMiningConfiguration { + + @Override + public MiningTask handleStageOne(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.COBBLESTONE); + + Block regenerationBlock; + + regenerationBlock = getRandomBlock( + new RegenerationConfig(10, Block.COAL_ORE), + new RegenerationConfig(10, Block.IRON_ORE), + new RegenerationConfig(10, Block.GOLD_ORE), + new RegenerationConfig(70, Block.STONE)); + + task.setReviveBlock(regenerationBlock); + + return task; + } + + @Override + public MiningTask handleStageTwo(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.BEDROCK); + task.setReviveBlock(Block.COBBLESTONE); + + return task; + } + + @Override + public List getMineableBlocks(Instance instance, Point point) { + return List.of(Material.COAL_ORE, Material.COBBLESTONE, Material.STONE, Material.IRON_ORE, Material.GOLD_ORE); + } + + @Override + public long getRegenerationTime() { + return 3000; + } +} From fb0c9d33e77d1496393aef30de46d6c4495f6d05 Mon Sep 17 00:00:00 2001 From: Aunn Date: Thu, 11 Dec 2025 21:04:43 -0800 Subject: [PATCH 003/102] Number tweaks --- .../swofty/type/goldmine/TypeGoldMineLoader.java | 2 +- .../type/skyblockgeneric/utility/LaunchPads.java | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/type.goldmine/src/main/java/net/swofty/type/goldmine/TypeGoldMineLoader.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/TypeGoldMineLoader.java index e9696ac1b..dc356fa18 100644 --- a/type.goldmine/src/main/java/net/swofty/type/goldmine/TypeGoldMineLoader.java +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/TypeGoldMineLoader.java @@ -45,7 +45,7 @@ public void afterInitialize(MinecraftServer server) { public LoaderValues getLoaderValues() { return new LoaderValues( (type) -> switch (type) { - default -> new Pos(-4, 74, -271, -180, 0); // TODO: UPDATE THIS POSITION TO PROPER LOCATION + default -> new Pos(-5, 73, -273, -180, 0); // TODO: UPDATE THIS POSITION TO PROPER LOCATION }, // Spawn position true // Announce death messages ); 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 509839770..1e94868ff 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 @@ -57,35 +57,35 @@ public enum LaunchPads { .text(new String[]{"§bTravel To:", "§aThe Village"}) .build(); }), - VILLAGE_TO_GOLD_MINE(getSlimeBlocksNear(new Pos(-10, 63, -231)), ServerType.SKYBLOCK_HUB, // TODO: UPDATE TO PROPER POSITIONS AND INFO - new Pos(116.5, 74, -210.5), (player) -> { + VILLAGE_TO_GOLD_MINE(getSlimeBlocksNear(new Pos(-9, 63, -231)), ServerType.SKYBLOCK_HUB, // TODO: UPDATE TO PROPER POSITIONS AND INFO + new Pos(-5, 74, -268), (player) -> { player.sendTo(ServerType.SKYBLOCK_GOLD_MINE); }, (player) -> player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1, "§cYou must be at least Mining Level I to join this island!", (player) -> { - boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.FARMING) >= 5; + boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1; if (!hasRequirement) { return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-10, 63.3, -231.5)) + .pos(new Pos(-9, 63.3, -232)) .player(player) .text(new String[]{"§bTravel To:", "§aGold Mine", "§cRequires Mining Level 1"}) .build(); } else { return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-10, 63.3, -231.5)) + .pos(new Pos(-9, 63.3, -232)) .player(player) .text(new String[]{"§bTravel To:", "§aGold Mine"}) .build(); } }), - GOLD_MINE_TO_VILLAGE(getSlimeBlocksNear(new Pos(111, 71, -202)), ServerType.SKYBLOCK_GOLD_MINE, - new Pos(74, 72, -180), (player) -> { + GOLD_MINE_TO_VILLAGE(getSlimeBlocksNear(new Pos(-4, 74, -272)), ServerType.SKYBLOCK_GOLD_MINE, + new Pos(-8, 70, -238), (player) -> { player.sendTo(ServerType.SKYBLOCK_HUB); }, (player) -> true, "", (player) -> { return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(111.5, 71.7, -202.5)) + .pos(new Pos(-5, 73.3, -269)) .player(player) .text(new String[]{"§bTravel To:", "§aThe Village"}) .build(); From c6529352fc623f76c682c7ca6c34088b76c10e6e Mon Sep 17 00:00:00 2001 From: AriDev <75741608+ArikSquad@users.noreply.github.com> Date: Sat, 13 Dec 2025 00:03:13 +0200 Subject: [PATCH 004/102] feat: add hollow NPCs --- .../type/goldmine/npcs/NPCGoldForger.java | 49 +++++++++++ .../type/goldmine/npcs/NPCIronForger.java | 49 +++++++++++ .../type/goldmine/npcs/NPCLazyMiner.java | 49 +++++++++++ .../villagers/VillagerBlacksmith.java | 85 +++++++++++++++++++ .../goldmine/villagers/VillagerRusty.java | 42 +++++++++ 5 files changed, 274 insertions(+) create mode 100644 type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCGoldForger.java create mode 100644 type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCIronForger.java create mode 100644 type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCLazyMiner.java create mode 100644 type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerBlacksmith.java create mode 100644 type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerRusty.java diff --git a/type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCGoldForger.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCGoldForger.java new file mode 100644 index 000000000..1d6637cf6 --- /dev/null +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCGoldForger.java @@ -0,0 +1,49 @@ +package net.swofty.type.goldmine.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCGoldForger extends HypixelNPC { + + public NPCGoldForger() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"Gold Forger", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "LDlv2TZxU3LQIvO122hiA5sgcOr6q1uMlzpFY4g3l29+O6sjGJdJlL+IWqpSz5raBg3duW+kky8YhJgBKPsc5cLZPj9EqbSgF82URLIXaCdCEtouZNnqVBn6hb4ToserxU6O19LjyLDtO7IqzbfL07srAjWtV729awUUkhjcQa6QNeJW6d6EE37stRIlPcatkDuISB0IR7oZTmDtS3YNqNjSj7aqFPCuqKUJnExZ5OO1Mlgu0urP6AvMuS+6Uwr22ZwnW83yd55XCRMxVxN7Ehwal99wsF+EIOPcoUa0yG1hvlgoJuzjQwKpjLFQ0l9TnoAP6Gey4bn1fKyacFLARMZbuzzyn6ByUwCbuiqAbNJEx9MIOohJVQ1UR76StHpyVmywtx4q7CWucrMuwwh/315qIYB+wzxiycWLLBXVX4xdc1q6mn/K1loC787hAAconAI5s8jmK0tgfYXAnRON+oc2VWRwNtf1D2bJWTZVrsNpwCDEcAd7FuSlN2dQASEdByfF+aAc5T5zlXjZ4dtf5LZnQLqZYOznRFsaFIsWOcWbZn/qwvw975CXwY1a5GIPug29ocyiAEvQWd6jn0DhdxTW9myxFhLlhtwBXcWXM8HDhixJuy2YV99tQk32gk0HPA3sy+2SZDQZPRhDQFCf9fqdbQX/44lTnvtH0vt804g="; + } + + @Override + public String texture(HypixelPlayer player) { + return "eyJ0aW1lc3RhbXAiOjE1NTk1OTMyMDkzMzIsInByb2ZpbGVJZCI6ImEyZjgzNDU5NWM4OTRhMjdhZGQzMDQ5NzE2Y2E5MTBjIiwicHJvZmlsZU5hbWUiOiJiUHVuY2giLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzM3Y2EwZmYxNzkzNmJlMzNlYWEzMTc2MjRkYjQ3NDRmYzNmMjkyZTYxMjM1Nzg1ODQ1MzI1OGU0ZjllN2NhNzkifX19"; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(-27.5, 74, -294.5, -90, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + + } +} \ No newline at end of file diff --git a/type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCIronForger.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCIronForger.java new file mode 100644 index 000000000..93e3011f0 --- /dev/null +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCIronForger.java @@ -0,0 +1,49 @@ +package net.swofty.type.goldmine.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCIronForger extends HypixelNPC { + + public NPCIronForger() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"Iron Forger", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "Cbf/zZ46MDpeuN1bUtSfJzrQvklkf22+0TjuSNzdVY9Kg1MatTxw1XfQTcad5r3TfPMmKwEh9x/OdnyiuFK7XuxmZaSnGg9QzT8oGtRThINfEbZQh7ezUsAK/f/J2b8soAA5NXmQmG1C3JG1urUk6uIB7WgIF7X536rlxhAMZ+TnXS0PKOMhoHZCxdgtsI8QBeGnT9szkBd+2Krg+Gcm5242ygKjfXcUKzPWhvv4HLv1FNY0hBYQAtTuWb1pT9E5WRBuKVI6qZbqNaiHleQpgjE2Qad2HsUb+IHryWIB6UvMgYgG8BIge0Fjf25hAzZ5oTXZPCPpqYnY2PrP0qU6xy4cPvZ0b4UqtkSyCGr7eldb2a8P96DClPuJEbmC+7ThnUwTGwIJhbNIXrU5xIbyr0/vJux843FbaRscNhmhmmbEuUo7BJlhQQDLZFqC+EeB8n/N47hqIWDBYZWEiTF19w7uO9+sdAAar02gru58hKpN2EALRbDvyjsWl+iEn3wgqlsPcNTbccQflvD+2enxLVAF4OmS/hOI/4nX4plu/CO107ICZxZ+WLJWHAhuNTFf3xuO71+4eZvKIl99PnqEJGWlerKHmJW9dEsplB7Rlzu7737+XrlTTmCx6s/v/3GHQBFMp1AZQ0UXBsWtcU/oidv2IcAMVuVVY9fbJ64l3T0="; + } + + @Override + public String texture(HypixelPlayer player) { + return "eyJ0aW1lc3RhbXAiOjE1NTk1OTU4NzUyNDgsInByb2ZpbGVJZCI6ImEyZjgzNDU5NWM4OTRhMjdhZGQzMDQ5NzE2Y2E5MTBjIiwicHJvZmlsZU5hbWUiOiJiUHVuY2giLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzY2MWUxYTNhOTRiZjIyY2FmMjgyNWIyZjE2NzZjYWQzN2ExNjRlNDc3NGYyNzgzNzZmNzI5M2I0MzE0MzRmMTgifX19"; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(-1.5, 75, -307.5, 0, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + + } +} \ No newline at end of file diff --git a/type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCLazyMiner.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCLazyMiner.java new file mode 100644 index 000000000..4e1cd9cc5 --- /dev/null +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/npcs/NPCLazyMiner.java @@ -0,0 +1,49 @@ +package net.swofty.type.goldmine.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCLazyMiner extends HypixelNPC { + + public NPCLazyMiner() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"Lazy Miner", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "DEPpEYXbbm6SQmo0h40eZFei7e+qtBqzZXDcRrPI5L2Yb4AFHQtalJrqqR4YlOv9NtOuBg+MDIMna+KFBSldUA0fMklitAk3GRl7Y4mWpAQM9BuOGGuWnqf2wVci5hZSiMtL2pSC4ogln0urAdm5qsB224RfbfnpiEWrm8BTHFXfqaMkEZNah+dxeszTMl1TytWYePAFtolMw/MdyuTGqApSpgk9nWoPaUAgGVWEo0mlrflEdmX0DkR98BKpqeg1naN8C+SbleTBJe8ZYqKRNMqD5bIJWc6J6cjGEeb7TbR+ZMipk3cMRu43HrcRdPAlmxihezTlxeDi1RoeObDSZXNSGtMhDxEWU1bOBAgohT8qM2x9AChAGL2kphq3EJplMlw45a9KbZj+/R68QmcEPY+TNo0BPshFoj8sh+RxZPdrirjM76G6TyVYJNIScu0JQ74WqYh/hpjc75rOldORlS9Aat5IXsDnrjCYi4l37DH2bBB6C+gk5BgGqnce/1QF0VESfJWtmS9gHSPBNZHa9ave2rM0ou2hpEw1LgW27hGWqZfGg0sfU9deQvLYyiRFsAXww22L5xmNJnOmvn3L1lDdGNpT63qXknp9NvAABOCPpBV0zeSCmHlDYbAN19sEkthnnIGk1BwZhsaZizf09gGAlMdLgcGYQKzfJJTODWo="; + } + + @Override + public String texture(HypixelPlayer player) { + return "eyJ0aW1lc3RhbXAiOjE1NjAxOTM2MzQxNTQsInByb2ZpbGVJZCI6ImEyZjgzNDU5NWM4OTRhMjdhZGQzMDQ5NzE2Y2E5MTBjIiwicHJvZmlsZU5hbWUiOiJiUHVuY2giLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Q5M2Q5NjM2YWE5NTU2YWNmNGJlMmNjNThkOTNmZjBiNTMyZTY4MDk4ZjgwYTdkYzE1MWEwZjFkMTZiOGU1ZjgifX19"; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(-11.50, 78.00, -337.50, 40, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + + } +} \ No newline at end of file diff --git a/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerBlacksmith.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerBlacksmith.java new file mode 100644 index 000000000..84560a7af --- /dev/null +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerBlacksmith.java @@ -0,0 +1,85 @@ +package net.swofty.type.goldmine.villagers; + +import net.minestom.server.coordinate.Pos; +import net.minestom.server.entity.VillagerProfession; +import net.swofty.type.generic.entity.villager.NPCVillagerDialogue; +import net.swofty.type.generic.entity.villager.NPCVillagerParameters; +import net.swofty.type.skyblockgeneric.gui.inventories.GUIReforge; +import net.swofty.type.skyblockgeneric.mission.MissionData; +import net.swofty.type.skyblockgeneric.mission.missions.blacksmith.MissionMineCoal; +import net.swofty.type.skyblockgeneric.mission.missions.blacksmith.MissionTalkToBlacksmith; +import net.swofty.type.skyblockgeneric.mission.missions.blacksmith.MissionTalkToBlacksmithAgain; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +import java.util.List; + +public class VillagerBlacksmith extends NPCVillagerDialogue { + public VillagerBlacksmith() { + super(new NPCVillagerParameters() { + @Override + public String[] holograms() { + return new String[]{"Blacksmith", "§e§lCLICK"}; + } + + @Override + public Pos position() { + return new Pos(-39.50, 77.00, -299.50, -125f, 0f); + } + + @Override + public boolean looking() { + return true; + } + + @Override + public VillagerProfession profession() { + return VillagerProfession.WEAPONSMITH; + } + }); + } + + @Override + public void onClick(PlayerClickVillagerNPCEvent e) { + SkyBlockPlayer player = (SkyBlockPlayer) e.player(); + if (isInDialogue(player)) return; + MissionData data = player.getMissionData(); + + if (data.isCurrentlyActive(MissionTalkToBlacksmith.class)) { + setDialogue(player, "initial-hello").thenRun(() -> { + data.endMission(MissionTalkToBlacksmith.class); + }); + return; + } + if (!data.hasCompleted(MissionMineCoal.class)) { + player.sendMessage("§e[NPC] Blacksmith§f: Retrieve 10 coal from the Coal Mines!"); + return; + } + if (!data.hasCompleted(MissionTalkToBlacksmithAgain.class)) { + setDialogue(player, "spoke-again").thenRun(() -> { + data.endMission(MissionTalkToBlacksmithAgain.class); + }); + return; + } + + new GUIReforge().open(player); + } + + @Override + public NPCVillagerDialogue.DialogueSet[] getDialogueSets() { + return List.of( + DialogueSet.builder() + .key("initial-hello").lines(new String[]{ + "§e[NPC] Blacksmith§f: I'm the town Blacksmith! I can §areforge §fitems for you, for a price.", + "§e[NPC] Blacksmith§f: Reforging usually costs Coins, but since I'm feeling friendly I can reforge your first item for Coal §8x10.", + "§e[NPC] Blacksmith§f: Go into the Mine to collect Coal, then come back to learn how to reforge items!" + }).build(), + DialogueSet.builder() + .key("spoke-again").lines(new String[]{ + "§e[NPC] Blacksmith§f: Ahh, excellent!", + "§e[NPC] Blacksmith§f: Reforging items allows you to get the most out of your weapons, armor, and other items by applying stat modifiers to them!", + "§e[NPC] Blacksmith§f: To reforge an item, place an item in my inventory. Reforging costs Coins - the more prestigious items cost more to reforge!", + "§e[NPC] Blacksmith§f: However, this time I will reforge any item for the low price of Coal §8x10!" + }).build() + ).stream().toArray(NPCVillagerDialogue.DialogueSet[]::new); + } +} diff --git a/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerRusty.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerRusty.java new file mode 100644 index 000000000..2a2515b62 --- /dev/null +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerRusty.java @@ -0,0 +1,42 @@ +package net.swofty.type.goldmine.villagers; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.entity.VillagerProfession; +import net.swofty.type.generic.entity.villager.HypixelVillagerNPC; +import net.swofty.type.generic.entity.villager.NPCVillagerParameters; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class VillagerRusty extends HypixelVillagerNPC { + public VillagerRusty() { + super(new NPCVillagerParameters() { + @Override + public String[] holograms() { + return new String[]{"Rusty", "§e§lCLICK"}; + } + + @Override + public Pos position() { + return new Pos(-20.00, 78.00, -325.41, -50f, 0f); + } + + @Override + public boolean looking() { + return true; + } + + @Override + public VillagerProfession profession() { + return VillagerProfession.LIBRARIAN; + } + }); + } + + @Override + public void onClick(PlayerClickVillagerNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + } +} From 735730d17bb449f98cfabe4ec15a1c87a43c9dd6 Mon Sep 17 00:00:00 2001 From: AriDev <75741608+ArikSquad@users.noreply.github.com> Date: Sat, 13 Dec 2025 21:00:57 +0200 Subject: [PATCH 005/102] feat: deep caverns --- .../java/net/swofty/commons/CustomWorlds.java | 37 +- .../java/net/swofty/commons/ServerType.java | 77 +- .../net/swofty/commons/item/ItemType.java | 3016 ++++++++--------- configuration/skyblock/Minestom.regions.csv | 2 +- .../skyblock/items/miscellaneous/dungeon.yml | 4 + settings.gradle.kts | 1 + type.deepcaverns/build.gradle.kts | 26 + .../deepcaverns/TypeDeepCavernsLoader.java | 125 + .../deepcaverns/events/ActionPlayerJoin.java | 26 + .../type/deepcaverns/gui/GUILiftOperator.java | 118 + .../type/deepcaverns/gui/GUIShopWalter.java | 17 + .../deepcaverns/npcs/NPCLiftOperator.java | 46 + .../type/deepcaverns/npcs/NPCWalter.java | 79 + .../tab/DeepCavernsServerModule.java | 25 + .../villagers/VillagerBlacksmith.java | 4 +- .../net/swofty/velocity/SkyBlockVelocity.java | 528 +-- .../gamemanager/BalanceConfigurations.java | 135 +- 17 files changed, 2369 insertions(+), 1897 deletions(-) create mode 100644 type.deepcaverns/build.gradle.kts create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/TypeDeepCavernsLoader.java create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/events/ActionPlayerJoin.java create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUILiftOperator.java create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUIShopWalter.java create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/tab/DeepCavernsServerModule.java diff --git a/commons/src/main/java/net/swofty/commons/CustomWorlds.java b/commons/src/main/java/net/swofty/commons/CustomWorlds.java index 443e63f15..d84ce3d91 100644 --- a/commons/src/main/java/net/swofty/commons/CustomWorlds.java +++ b/commons/src/main/java/net/swofty/commons/CustomWorlds.java @@ -1,25 +1,26 @@ package net.swofty.commons; public enum CustomWorlds { - SKYBLOCK_ISLAND_TEMPLATE("hypixel_skyblock_island_template"), - SKYBLOCK_HUB("hypixel_skyblock_hub"), - SKYBLOCK_GOLD_MINE("hypixel_skyblock_gold_mine"), - SKYBLOCK_DUNGEON_HUB("hypixel_skyblock_dungeon_hub"), - PROTOTYPE_LOBBY("hypixel_prototype_lobby"), - BEDWARS_LOBBY("hypixel_bedwars_lobby"), - ; + SKYBLOCK_ISLAND_TEMPLATE("hypixel_skyblock_island_template"), + SKYBLOCK_HUB("hypixel_skyblock_hub"), + SKYBLOCK_GOLD_MINE("hypixel_skyblock_gold_mine"), + SKYBLOCK_DEEP_CAVERNS("hypixel_skyblock_deep_caverns"), + SKYBLOCK_DUNGEON_HUB("hypixel_skyblock_dungeon_hub"), + PROTOTYPE_LOBBY("hypixel_prototype_lobby"), + BEDWARS_LOBBY("hypixel_bedwars_lobby"), + ; - private final String folderName; + private final String folderName; - CustomWorlds(String folderName) { - this.folderName = folderName; - } + CustomWorlds(String folderName) { + this.folderName = folderName; + } - public String getFolderName() { - if (name().startsWith("SKYBLOCK_")) { - return "./configuration/skyblock/islands/" + folderName; - } else { - return "./configuration/" + folderName; - } - } + public String getFolderName() { + if (name().startsWith("SKYBLOCK_")) { + return "./configuration/skyblock/islands/" + folderName; + } else { + return "./configuration/" + folderName; + } + } } diff --git a/commons/src/main/java/net/swofty/commons/ServerType.java b/commons/src/main/java/net/swofty/commons/ServerType.java index a7b4451dc..def0d3bdb 100644 --- a/commons/src/main/java/net/swofty/commons/ServerType.java +++ b/commons/src/main/java/net/swofty/commons/ServerType.java @@ -4,42 +4,43 @@ @Getter public enum ServerType { - SKYBLOCK_ISLAND(true), - SKYBLOCK_HUB(true), - SKYBLOCK_DUNGEON_HUB(true), - SKYBLOCK_THE_FARMING_ISLANDS(true), - SKYBLOCK_GOLD_MINE(true), - PROTOTYPE_LOBBY(false), - BEDWARS_LOBBY(false), - BEDWARS_GAME(false), - ; - - private final boolean isSkyBlock; - - ServerType(boolean isSkyBlock) { - this.isSkyBlock = isSkyBlock; - } - - public static boolean isServerType(String type) { - for (ServerType a : values()) - if (type.equalsIgnoreCase(a.name())) return true; - - return false; - } - - public String formatName() { - return StringUtility.toNormalCase(name()); - } - - public static ServerType getSkyblockServer(String name) { - if (!name.startsWith("SKYBLOCK_")) { - return valueOf("SKYBLOCK_" + name.toUpperCase()); - } else { - return valueOf(name); - } - } - - public String skyblockName() { - return name().replace("SKYBLOCK_", ""); - } + SKYBLOCK_ISLAND(true), + SKYBLOCK_HUB(true), + SKYBLOCK_DUNGEON_HUB(true), + SKYBLOCK_THE_FARMING_ISLANDS(true), + SKYBLOCK_GOLD_MINE(true), + SKYBLOCK_DEEP_CAVERNS(true), + PROTOTYPE_LOBBY(false), + BEDWARS_LOBBY(false), + BEDWARS_GAME(false), + ; + + private final boolean isSkyBlock; + + ServerType(boolean isSkyBlock) { + this.isSkyBlock = isSkyBlock; + } + + public static boolean isServerType(String type) { + for (ServerType a : values()) + if (type.equalsIgnoreCase(a.name())) return true; + + return false; + } + + public static ServerType getSkyblockServer(String name) { + if (!name.startsWith("SKYBLOCK_")) { + return valueOf("SKYBLOCK_" + name.toUpperCase()); + } else { + return valueOf(name); + } + } + + public String formatName() { + return StringUtility.toNormalCase(name()); + } + + public String skyblockName() { + return name().replace("SKYBLOCK_", ""); + } } diff --git a/commons/src/main/java/net/swofty/commons/item/ItemType.java b/commons/src/main/java/net/swofty/commons/item/ItemType.java index 04db3da46..017f84044 100644 --- a/commons/src/main/java/net/swofty/commons/item/ItemType.java +++ b/commons/src/main/java/net/swofty/commons/item/ItemType.java @@ -6,366 +6,366 @@ import org.jetbrains.annotations.Nullable; public enum ItemType { - SANDBOX_ITEM(Material.BLAZE_POWDER, Rarity.COMMON), - - /** - * Miscellaneous - */ - ENCHANTED_BOOK(Material.ENCHANTED_BOOK, Rarity.UNCOMMON), - SKYBLOCK_MENU(Material.NETHER_STAR, Rarity.COMMON), - MOVE_JERRY(Material.VILLAGER_SPAWN_EGG, Rarity.COMMON), - HOT_POTATO_BOOK(Material.BOOK, Rarity.EPIC), - GAME_BREAKER(Material.TNT, Rarity.SPECIAL), - GAME_ANNIHILATOR(Material.PLAYER_HEAD, Rarity.SPECIAL), - QUALITY_MAP(Material.MAP, Rarity.SPECIAL), - DEAD_BUSH_OF_LOVE(Material.DEAD_BUSH, Rarity.SPECIAL), - - ENDSTONE_ROSE(Material.POPPY, Rarity.RARE), - BIOFUEL(Material.GREEN_DYE, Rarity.RARE), - - /** - * Accessories - */ - ZOMBIE_TALISMAN(Material.ZOMBIE_HEAD, Rarity.COMMON), - ZOMBIE_RING(Material.PLAYER_HEAD, Rarity.UNCOMMON), - ZOMBIE_ARTIFACT(Material.PLAYER_HEAD, Rarity.RARE), - SPEED_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), - SPEED_RING(Material.PLAYER_HEAD, Rarity.UNCOMMON), - SPEED_ARTIFACT(Material.PLAYER_HEAD, Rarity.RARE), - SKELETON_TALISMAN(Material.SKELETON_SKULL, Rarity.COMMON), - HASTE_RING(Material.PLAYER_HEAD, Rarity.RARE), - FARMING_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), - LAVA_TALISMAN(Material.PLAYER_HEAD, Rarity.UNCOMMON), - POTATO_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), - TALISMAN_OF_POWER(Material.PLAYER_HEAD, Rarity.COMMON), - BAT_TALISMAN(Material.PLAYER_HEAD, Rarity.RARE), - FIRE_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), - AUTO_RECOMBOBULATOR(Material.PLAYER_HEAD, Rarity.LEGENDARY), - CATACOMBS_EXPERT_RING(Material.PLAYER_HEAD, Rarity.EPIC), - WITHER_RELIC(Material.PLAYER_HEAD, Rarity.LEGENDARY), - SCARFS_GRIMOIRE(Material.PLAYER_HEAD, Rarity.LEGENDARY), - SCARFS_THESIS(Material.PLAYER_HEAD, Rarity.EPIC), - SCARFS_STUDIES(Material.PLAYER_HEAD, Rarity.RARE), - TREASURE_ARTIFACT(Material.PLAYER_HEAD, Rarity.LEGENDARY), - TREASURE_RING(Material.PLAYER_HEAD, Rarity.EPIC), - TREASURE_TALISMAN(Material.PLAYER_HEAD, Rarity.RARE), - SPIDER_TALISMAN(Material.PLAYER_HEAD, Rarity.UNCOMMON), - SPIDER_RING(Material.PLAYER_HEAD, Rarity.RARE), - SPIDER_ARTIFACT(Material.PLAYER_HEAD, Rarity.EPIC), - MINE_AFFINITY_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), - VILLAGE_AFFINITY_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), - BITS_TALISMAN(Material.PLAYER_HEAD, Rarity.RARE), - ACTUALLY_BLUE_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), - BLUE_BUT_GREEN_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), - BLUE_BUT_RED_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), - BLUE_BUT_YELLOW_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), - LIGHTER_BLUE_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), - REZAR_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), - SUMSUNG_G3_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), - SUMSUNG_GG_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), - - /** - * Community Shop Items - */ - BOOSTER_COOKIE(Material.COOKIE, Rarity.LEGENDARY), - GOD_POTION(Material.PLAYER_HEAD, Rarity.SPECIAL), - KAT_FLOWER(Material.POPPY, Rarity.SPECIAL), - KAT_BOUQUET(Material.ROSE_BUSH, Rarity.SPECIAL), - HYPER_CATALYST_UPGRADER(Material.PLAYER_HEAD, Rarity.SPECIAL), - ULTIMATE_CARROT_CANDY_UPGRADE(Material.PLAYER_HEAD, Rarity.SPECIAL), - COLOSSAL_EXPERIENCE_BOTTLE_UPGRADE(Material.PLAYER_HEAD, Rarity.SPECIAL), - MINION_STORAGE_EXPANDER(Material.PLAYER_HEAD, Rarity.SPECIAL), - MATRIARCHS_PERFUME(Material.RABBIT_STEW, Rarity.SPECIAL), - HOLOGRAM(Material.PLAYER_HEAD, Rarity.LEGENDARY), - DITTO_BLOB(Material.PLAYER_HEAD, Rarity.LEGENDARY), - BUILDERS_WAND(Material.BLAZE_ROD, Rarity.LEGENDARY), - BLOCK_ZAPPER(Material.FLINT, Rarity.EPIC), - PORTALIZER(Material.PLAYER_HEAD, Rarity.SPECIAL), - AUTOPET_RULES_2_PACK(Material.PLAYER_HEAD, Rarity.SPECIAL), - POCKET_SACK_IN_A_SACK(Material.PLAYER_HEAD, Rarity.SPECIAL), - DUNGEON_SACK(Material.PLAYER_HEAD, Rarity.LEGENDARY), - RUNE_SACK(Material.PLAYER_HEAD, Rarity.EPIC), - FLOWER_SACK(Material.PLAYER_HEAD, Rarity.EPIC), - DWARVEN_SACK(Material.PLAYER_HEAD, Rarity.EPIC), - CRYSTAL_HOLLOWS_SACK(Material.PLAYER_HEAD, Rarity.EPIC), - ABIPHONE_CONTACTS_TRIO(Material.COMPARATOR, Rarity.SPECIAL), - PURE_WHITE_DYE(Material.BONE_MEAL, Rarity.EPIC), - PURE_BLACK_DYE(Material.INK_SAC, Rarity.EPIC), - ACCESSORY_ENRICHMENT_SWAPPER(Material.COMPARATOR, Rarity.SPECIAL), - ATTACK_SPEED_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - CRITICAL_CHANCE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - CRITICAL_DAMAGE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - DEFENSE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - FEROCITY_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - HEALTH_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - INTELLIGENCE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - MAGIC_FIND_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - SEA_CREATURE_CHANCE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - SPEED_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - STRENGTH_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), - CHAMPION(Material.ENCHANTED_BOOK, Rarity.COMMON), - COMPACT(Material.ENCHANTED_BOOK, Rarity.COMMON), - CULTIVATING(Material.ENCHANTED_BOOK, Rarity.COMMON), - EXPERTISE(Material.ENCHANTED_BOOK, Rarity.COMMON), - HECATOMB(Material.ENCHANTED_BOOK, Rarity.COMMON), - INFERNO_FUEL_BLOCK(Material.PLAYER_HEAD, Rarity.RARE), - - /** - * Sacks - */ - SMALL_MINING_SACK(Material.PLAYER_HEAD, Rarity.UNCOMMON), - MEDIUM_MINING_SACK(Material.PLAYER_HEAD, Rarity.RARE), - LARGE_MINING_SACK(Material.PLAYER_HEAD, Rarity.EPIC), - - /** - * Runes - */ - BLOOD_RUNE(Material.PLAYER_HEAD, Rarity.COMMON), - - /** - * Minions - */ - COBBLESTONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - COAL_MINION(Material.PLAYER_HEAD, Rarity.RARE), - SNOW_MINION(Material.PLAYER_HEAD, Rarity.RARE), - DIAMOND_MINION(Material.PLAYER_HEAD, Rarity.RARE), - EMERALD_MINION(Material.PLAYER_HEAD, Rarity.RARE), - IRON_MINION(Material.PLAYER_HEAD, Rarity.RARE), - GOLD_MINION(Material.PLAYER_HEAD, Rarity.RARE), - LAPIS_MINION(Material.PLAYER_HEAD, Rarity.RARE), - REDSTONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - ENDSTONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - ICE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - QUARTZ_MINION(Material.PLAYER_HEAD, Rarity.RARE), - OBSIDIAN_MINION(Material.PLAYER_HEAD, Rarity.RARE), - SAND_MINION(Material.PLAYER_HEAD, Rarity.RARE), - GRAVEL_MINION(Material.PLAYER_HEAD, Rarity.RARE), - GLOWSTONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - HARD_STONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - MITHRIL_MINION(Material.PLAYER_HEAD, Rarity.RARE), - - ACACIA_MINION(Material.PLAYER_HEAD, Rarity.RARE), - BIRCH_MINION(Material.PLAYER_HEAD, Rarity.RARE), - SPRUCE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - DARK_OAK_MINION(Material.PLAYER_HEAD, Rarity.RARE), - JUNGLE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - OAK_MINION(Material.PLAYER_HEAD, Rarity.RARE), - FLOWER_MINION(Material.PLAYER_HEAD, Rarity.RARE), - - FISHING_MINION(Material.PLAYER_HEAD, Rarity.RARE), - CLAY_MINION(Material.PLAYER_HEAD, Rarity.RARE), - - WHEAT_MINION(Material.PLAYER_HEAD, Rarity.RARE), - POTATO_MINION(Material.PLAYER_HEAD, Rarity.RARE), - CACTUS_MINION(Material.PLAYER_HEAD, Rarity.RARE), - CARROT_MINION(Material.PLAYER_HEAD, Rarity.RARE), - COCOA_BEANS_MINION(Material.PLAYER_HEAD, Rarity.RARE), - MELON_MINION(Material.PLAYER_HEAD, Rarity.RARE), - MUSHROOM_MINION(Material.PLAYER_HEAD, Rarity.RARE), - NETHER_WART_MINION(Material.PLAYER_HEAD, Rarity.RARE), - PUMPKIN_MINION(Material.PLAYER_HEAD, Rarity.RARE), - SUGAR_CANE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - CHICKEN_MINION(Material.PLAYER_HEAD, Rarity.RARE), - COW_MINION(Material.PLAYER_HEAD, Rarity.RARE), - PIG_MINION(Material.PLAYER_HEAD, Rarity.RARE), - RABBIT_MINION(Material.PLAYER_HEAD, Rarity.RARE), - SHEEP_MINION(Material.PLAYER_HEAD, Rarity.RARE), - - BLAZE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - CAVE_SPIDER_MINION(Material.PLAYER_HEAD, Rarity.RARE), - CREEPER_MINION(Material.PLAYER_HEAD, Rarity.RARE), - ENDERMAN_MINION(Material.PLAYER_HEAD, Rarity.RARE), - GHAST_MINION(Material.PLAYER_HEAD, Rarity.RARE), - MAGMA_CUBE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - SKELETON_MINION(Material.PLAYER_HEAD, Rarity.RARE), - SLIME_MINION(Material.PLAYER_HEAD, Rarity.RARE), - SPIDER_MINION(Material.PLAYER_HEAD, Rarity.RARE), - ZOMBIE_MINION(Material.PLAYER_HEAD, Rarity.RARE), - - - /** - * Minion Upgrades - */ - AUTO_SMELTER(Material.FURNACE, Rarity.COMMON), - COMPACTOR(Material.DISPENSER, Rarity.UNCOMMON), - SUPER_COMPACTOR_3000(Material.DISPENSER, Rarity.RARE), - BUDGET_HOPPER(Material.HOPPER, Rarity.UNCOMMON), - ENCHANTED_HOPPER(Material.HOPPER, Rarity.RARE), - FLY_CATCHER(Material.COBWEB, Rarity.EPIC), - DIAMOND_SPREADING(Material.DIAMOND, Rarity.RARE), - MINION_EXPANDER(Material.COMMAND_BLOCK, Rarity.RARE), - MITHRIL_INFUSION(Material.PLAYER_HEAD, Rarity.UNCOMMON), - - /** - * Minion Fuels - */ - ENCHANTED_LAVA_BUCKET(Material.LAVA_BUCKET, Rarity.RARE), - MAGMA_BUCKET(Material.LAVA_BUCKET, Rarity.LEGENDARY), - PLASMA_BUCKET(Material.LAVA_BUCKET, Rarity.LEGENDARY), - EVERBURNING_FLAME(Material.PLAYER_HEAD, Rarity.EPIC), - HEAT_CORE(Material.PLAYER_HEAD, Rarity.SPECIAL), - - /** - * Minion Skins - */ - BEE_MINION_SKIN(Material.PLAYER_HEAD, Rarity.COMMON), - - /** - * Pets - */ - BEE_PET(Material.PLAYER_HEAD, Rarity.COMMON), - - /** - * Pet Items - */ - ALL_SKILLS_EXP_BOOST(Material.DIAMOND, Rarity.COMMON), - MINING_EXP_BOOST_COMMON(Material.IRON_PICKAXE, Rarity.COMMON), - MINING_EXP_BOOST_RARE(Material.IRON_PICKAXE, Rarity.RARE), - FARMING_EXP_BOOST_COMMON(Material.IRON_HOE, Rarity.COMMON), - FARMING_EXP_BOOST_RARE(Material.IRON_HOE, Rarity.RARE), - FISHING_EXP_BOOST(Material.COD, Rarity.COMMON), - FORAGING_EXP_BOOST(Material.IRON_AXE, Rarity.COMMON), - COMBAT_EXP_BOOST(Material.IRON_SWORD, Rarity.COMMON), - BIG_TEETH(Material.GHAST_TEAR, Rarity.COMMON), - IRON_CLAWS(Material.IRON_INGOT, Rarity.COMMON), - HARDENED_SCALES(Material.PRISMARINE_CRYSTALS, Rarity.UNCOMMON), - SHARPENED_CLAWS(Material.PRISMARINE_SHARD, Rarity.UNCOMMON), - BUBBLEGUM(Material.PLAYER_HEAD, Rarity.RARE), - - /** - * Backpacks - */ - SMALL_BACKPACK(Material.PLAYER_HEAD, Rarity.UNCOMMON), - MEDIUM_BACKPACK(Material.PLAYER_HEAD, Rarity.RARE), - LARGE_BACKPACK(Material.PLAYER_HEAD, Rarity.EPIC), - GREATER_BACKPACK(Material.PLAYER_HEAD, Rarity.EPIC), - JUMBO_BACKPACK(Material.PLAYER_HEAD, Rarity.LEGENDARY), - JUMBO_BACKPACK_UPGRADE(Material.PLAYER_HEAD, Rarity.SPECIAL), - - /** - * Decoration items - */ - DECORATION_ANCIENT_FRUIT(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_APPALLED_PUMPKIN(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_APPLE(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_BANANA_BUNCH(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_BEETROOT(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_BERRY(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_BERRY_BUSH(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_BLUE_CORN(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_BROWN_MUSHROOM(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_BUSH(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_CACTUS(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_CHESTO_BERRY(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_CORN(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_KIWI(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_LEMON(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_LETTUCE(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_LILAC_FRUIT(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_MELON(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_ONION(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_ORANGE(Material.PLAYER_HEAD, Rarity.COMMON), - DECORATION_PINK_BERRY(Material.PLAYER_HEAD, Rarity.COMMON), - - /** - * Power Stones - */ - LUXURIOUS_SPOOL(Material.PLAYER_HEAD, Rarity.UNCOMMON), - - - ASCENSION_ROPE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - - /** - * Farming Props - */ - ROOKIE_HOE(Material.STONE_HOE, Rarity.COMMON), - WOODEN_HOE(Material.WOODEN_HOE, Rarity.COMMON), - STONE_HOE(Material.STONE_HOE, Rarity.COMMON), - GOLDEN_HOE(Material.GOLDEN_HOE, Rarity.COMMON), - IRON_HOE(Material.IRON_HOE, Rarity.COMMON), - DIAMOND_HOE(Material.DIAMOND_HOE, Rarity.UNCOMMON), - WHEAT(Material.WHEAT, Rarity.COMMON), - WHEAT_SEEDS(Material.WHEAT_SEEDS, Rarity.COMMON), - WHEAT_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), - FLOWER_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), - CARROT_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), - POTATO_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), - PUMPKIN_AND_MELON_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), - MUTANT_NETHER_WART(Material.PLAYER_HEAD, Rarity.RARE), - POLISHED_PUMPKIN(Material.PLAYER_HEAD, Rarity.RARE), - BOX_OF_SEEDS(Material.PLAYER_HEAD, Rarity.RARE), - ENCHANTED_BOOKSHELF(Material.BOOKSHELF, Rarity.UNCOMMON), - ENCHANTED_COOKED_FISH(Material.COOKED_COD, Rarity.RARE), - ENCHANTED_RAW_FISH(Material.COD, Rarity.RARE), - ENCHANTED_IRON_INGOT(Material.IRON_INGOT, Rarity.RARE), - TIGHTLY_TIED_HAY_BALE(Material.PLAYER_HEAD, Rarity.RARE), - COMPOST(Material.PLAYER_HEAD, Rarity.UNCOMMON), - COMPOST_BUNDLE(Material.PLAYER_HEAD, Rarity.RARE), - DUNG(Material.BROWN_WOOL, Rarity.UNCOMMON), - HONEY_JAR(Material.PLAYER_HEAD, Rarity.UNCOMMON), - PLANT_MATTER(Material.OAK_LEAVES, Rarity.UNCOMMON), - - /** - * Foraging Props - */ - WOODEN_AXE(Material.WOODEN_AXE, Rarity.COMMON), - STONE_AXE(Material.STONE_AXE, Rarity.COMMON), - GOLDEN_AXE(Material.GOLDEN_AXE, Rarity.COMMON), - IRON_AXE(Material.IRON_AXE, Rarity.COMMON), - DIAMOND_AXE(Material.DIAMOND_AXE, Rarity.UNCOMMON), - ROOKIE_AXE(Material.STONE_AXE, Rarity.COMMON), - PROMISING_AXE(Material.IRON_AXE, Rarity.UNCOMMON), - SWEET_AXE(Material.IRON_AXE, Rarity.UNCOMMON), - EFFICIENT_AXE(Material.IRON_AXE, Rarity.UNCOMMON), - - /** - * Fishing Props - */ - SHARK_FIN(Material.PRISMARINE_SHARD, Rarity.RARE), - NURSE_SHARK_TOOTH(Material.GHAST_TEAR, Rarity.UNCOMMON), - BLUE_SHARK_TOOTH(Material.GHAST_TEAR, Rarity.RARE), - TIGER_SHARK_TOOTH(Material.GHAST_TEAR, Rarity.EPIC), - GREAT_WHITE_SHARK_TOOTH(Material.GHAST_TEAR, Rarity.LEGENDARY), - MAGMAFISH(Material.PLAYER_HEAD, Rarity.RARE), - SILVER_MAGMAFISH(Material.PLAYER_HEAD, Rarity.EPIC), - GOLD_MAGMAFISH(Material.PLAYER_HEAD, Rarity.LEGENDARY), - DIAMOND_MAGMAFISH(Material.PLAYER_HEAD, Rarity.MYTHIC), - FISHING_ROD(Material.FISHING_ROD, Rarity.COMMON), - - /** - * Combat Props - */ - CHILI_PEPPER(Material.PLAYER_HEAD, Rarity.UNCOMMON), - STUFFED_CHILI_PEPPER(Material.PLAYER_HEAD, Rarity.RARE), - ABSOLUTE_ENDER_PEARL(Material.PLAYER_HEAD, Rarity.RARE), - WHIPPED_MAGMA_CREAM(Material.PLAYER_HEAD, Rarity.RARE), - ZOMBIE_HEART(Material.PLAYER_HEAD, Rarity.RARE), - SOUL_STRING(Material.STRING, Rarity.RARE), - - /** - * Zombie Slayer - */ - FOUL_FLESH(Material.CHARCOAL, Rarity.RARE), - REVENANT_FLESH(Material.ROTTEN_FLESH, Rarity.UNCOMMON), - UNDEAD_CATALYST(Material.PLAYER_HEAD, Rarity.RARE), - BEHEADED_HORROR(Material.PLAYER_HEAD, Rarity.EPIC), - REVENANT_CATALYST(Material.PLAYER_HEAD, Rarity.EPIC), - SCYTHE_BLADE(Material.DIAMOND, Rarity.LEGENDARY), - SHARD_OF_THE_SHREDDED(Material.PLAYER_HEAD, Rarity.LEGENDARY), - WARDEN_HEART(Material.PLAYER_HEAD, Rarity.LEGENDARY), - REVENANT_VISCERA(Material.COOKED_PORKCHOP, Rarity.RARE), - CRYSTALLIZED_HEART(Material.PLAYER_HEAD, Rarity.RARE), - REVIVED_HEART(Material.PLAYER_HEAD, Rarity.EPIC), - REAPER_MASK(Material.PLAYER_HEAD, Rarity.LEGENDARY), - WARDEN_HELMET(Material.PLAYER_HEAD, Rarity.LEGENDARY), - REVENANT_FALCHION(Material.DIAMOND_SWORD, Rarity.RARE), - REAPER_FALCHION(Material.DIAMOND_SWORD, Rarity.EPIC), - AXE_OF_THE_SHREDDED(Material.DIAMOND_AXE, Rarity.LEGENDARY), - REAPER_SCYTHE(Material.DIAMOND_HOE, Rarity.LEGENDARY), - - /* - * Spider Slayer - */ + SANDBOX_ITEM(Material.BLAZE_POWDER, Rarity.COMMON), + + /** + * Miscellaneous + */ + ENCHANTED_BOOK(Material.ENCHANTED_BOOK, Rarity.UNCOMMON), + SKYBLOCK_MENU(Material.NETHER_STAR, Rarity.COMMON), + MOVE_JERRY(Material.VILLAGER_SPAWN_EGG, Rarity.COMMON), + HOT_POTATO_BOOK(Material.BOOK, Rarity.EPIC), + GAME_BREAKER(Material.TNT, Rarity.SPECIAL), + GAME_ANNIHILATOR(Material.PLAYER_HEAD, Rarity.SPECIAL), + QUALITY_MAP(Material.MAP, Rarity.SPECIAL), + DEAD_BUSH_OF_LOVE(Material.DEAD_BUSH, Rarity.SPECIAL), + + ENDSTONE_ROSE(Material.POPPY, Rarity.RARE), + BIOFUEL(Material.GREEN_DYE, Rarity.RARE), + + /** + * Accessories + */ + ZOMBIE_TALISMAN(Material.ZOMBIE_HEAD, Rarity.COMMON), + ZOMBIE_RING(Material.PLAYER_HEAD, Rarity.UNCOMMON), + ZOMBIE_ARTIFACT(Material.PLAYER_HEAD, Rarity.RARE), + SPEED_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), + SPEED_RING(Material.PLAYER_HEAD, Rarity.UNCOMMON), + SPEED_ARTIFACT(Material.PLAYER_HEAD, Rarity.RARE), + SKELETON_TALISMAN(Material.SKELETON_SKULL, Rarity.COMMON), + HASTE_RING(Material.PLAYER_HEAD, Rarity.RARE), + FARMING_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), + LAVA_TALISMAN(Material.PLAYER_HEAD, Rarity.UNCOMMON), + POTATO_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), + TALISMAN_OF_POWER(Material.PLAYER_HEAD, Rarity.COMMON), + BAT_TALISMAN(Material.PLAYER_HEAD, Rarity.RARE), + FIRE_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), + AUTO_RECOMBOBULATOR(Material.PLAYER_HEAD, Rarity.LEGENDARY), + CATACOMBS_EXPERT_RING(Material.PLAYER_HEAD, Rarity.EPIC), + WITHER_RELIC(Material.PLAYER_HEAD, Rarity.LEGENDARY), + SCARFS_GRIMOIRE(Material.PLAYER_HEAD, Rarity.LEGENDARY), + SCARFS_THESIS(Material.PLAYER_HEAD, Rarity.EPIC), + SCARFS_STUDIES(Material.PLAYER_HEAD, Rarity.RARE), + TREASURE_ARTIFACT(Material.PLAYER_HEAD, Rarity.LEGENDARY), + TREASURE_RING(Material.PLAYER_HEAD, Rarity.EPIC), + TREASURE_TALISMAN(Material.PLAYER_HEAD, Rarity.RARE), + SPIDER_TALISMAN(Material.PLAYER_HEAD, Rarity.UNCOMMON), + SPIDER_RING(Material.PLAYER_HEAD, Rarity.RARE), + SPIDER_ARTIFACT(Material.PLAYER_HEAD, Rarity.EPIC), + MINE_AFFINITY_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), + VILLAGE_AFFINITY_TALISMAN(Material.PLAYER_HEAD, Rarity.COMMON), + BITS_TALISMAN(Material.PLAYER_HEAD, Rarity.RARE), + ACTUALLY_BLUE_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), + BLUE_BUT_GREEN_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), + BLUE_BUT_RED_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), + BLUE_BUT_YELLOW_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), + LIGHTER_BLUE_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), + REZAR_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), + SUMSUNG_G3_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), + SUMSUNG_GG_ABICASE(Material.PLAYER_HEAD, Rarity.RARE), + + /** + * Community Shop Items + */ + BOOSTER_COOKIE(Material.COOKIE, Rarity.LEGENDARY), + GOD_POTION(Material.PLAYER_HEAD, Rarity.SPECIAL), + KAT_FLOWER(Material.POPPY, Rarity.SPECIAL), + KAT_BOUQUET(Material.ROSE_BUSH, Rarity.SPECIAL), + HYPER_CATALYST_UPGRADER(Material.PLAYER_HEAD, Rarity.SPECIAL), + ULTIMATE_CARROT_CANDY_UPGRADE(Material.PLAYER_HEAD, Rarity.SPECIAL), + COLOSSAL_EXPERIENCE_BOTTLE_UPGRADE(Material.PLAYER_HEAD, Rarity.SPECIAL), + MINION_STORAGE_EXPANDER(Material.PLAYER_HEAD, Rarity.SPECIAL), + MATRIARCHS_PERFUME(Material.RABBIT_STEW, Rarity.SPECIAL), + HOLOGRAM(Material.PLAYER_HEAD, Rarity.LEGENDARY), + DITTO_BLOB(Material.PLAYER_HEAD, Rarity.LEGENDARY), + BUILDERS_WAND(Material.BLAZE_ROD, Rarity.LEGENDARY), + BLOCK_ZAPPER(Material.FLINT, Rarity.EPIC), + PORTALIZER(Material.PLAYER_HEAD, Rarity.SPECIAL), + AUTOPET_RULES_2_PACK(Material.PLAYER_HEAD, Rarity.SPECIAL), + POCKET_SACK_IN_A_SACK(Material.PLAYER_HEAD, Rarity.SPECIAL), + DUNGEON_SACK(Material.PLAYER_HEAD, Rarity.LEGENDARY), + RUNE_SACK(Material.PLAYER_HEAD, Rarity.EPIC), + FLOWER_SACK(Material.PLAYER_HEAD, Rarity.EPIC), + DWARVEN_SACK(Material.PLAYER_HEAD, Rarity.EPIC), + CRYSTAL_HOLLOWS_SACK(Material.PLAYER_HEAD, Rarity.EPIC), + ABIPHONE_CONTACTS_TRIO(Material.COMPARATOR, Rarity.SPECIAL), + PURE_WHITE_DYE(Material.BONE_MEAL, Rarity.EPIC), + PURE_BLACK_DYE(Material.INK_SAC, Rarity.EPIC), + ACCESSORY_ENRICHMENT_SWAPPER(Material.COMPARATOR, Rarity.SPECIAL), + ATTACK_SPEED_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + CRITICAL_CHANCE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + CRITICAL_DAMAGE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + DEFENSE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + FEROCITY_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + HEALTH_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + INTELLIGENCE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + MAGIC_FIND_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + SEA_CREATURE_CHANCE_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + SPEED_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + STRENGTH_ENRICHMENT(Material.PLAYER_HEAD, Rarity.SPECIAL), + CHAMPION(Material.ENCHANTED_BOOK, Rarity.COMMON), + COMPACT(Material.ENCHANTED_BOOK, Rarity.COMMON), + CULTIVATING(Material.ENCHANTED_BOOK, Rarity.COMMON), + EXPERTISE(Material.ENCHANTED_BOOK, Rarity.COMMON), + HECATOMB(Material.ENCHANTED_BOOK, Rarity.COMMON), + INFERNO_FUEL_BLOCK(Material.PLAYER_HEAD, Rarity.RARE), + + /** + * Sacks + */ + SMALL_MINING_SACK(Material.PLAYER_HEAD, Rarity.UNCOMMON), + MEDIUM_MINING_SACK(Material.PLAYER_HEAD, Rarity.RARE), + LARGE_MINING_SACK(Material.PLAYER_HEAD, Rarity.EPIC), + + /** + * Runes + */ + BLOOD_RUNE(Material.PLAYER_HEAD, Rarity.COMMON), + + /** + * Minions + */ + COBBLESTONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + COAL_MINION(Material.PLAYER_HEAD, Rarity.RARE), + SNOW_MINION(Material.PLAYER_HEAD, Rarity.RARE), + DIAMOND_MINION(Material.PLAYER_HEAD, Rarity.RARE), + EMERALD_MINION(Material.PLAYER_HEAD, Rarity.RARE), + IRON_MINION(Material.PLAYER_HEAD, Rarity.RARE), + GOLD_MINION(Material.PLAYER_HEAD, Rarity.RARE), + LAPIS_MINION(Material.PLAYER_HEAD, Rarity.RARE), + REDSTONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + ENDSTONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + ICE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + QUARTZ_MINION(Material.PLAYER_HEAD, Rarity.RARE), + OBSIDIAN_MINION(Material.PLAYER_HEAD, Rarity.RARE), + SAND_MINION(Material.PLAYER_HEAD, Rarity.RARE), + GRAVEL_MINION(Material.PLAYER_HEAD, Rarity.RARE), + GLOWSTONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + HARD_STONE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + MITHRIL_MINION(Material.PLAYER_HEAD, Rarity.RARE), + + ACACIA_MINION(Material.PLAYER_HEAD, Rarity.RARE), + BIRCH_MINION(Material.PLAYER_HEAD, Rarity.RARE), + SPRUCE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + DARK_OAK_MINION(Material.PLAYER_HEAD, Rarity.RARE), + JUNGLE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + OAK_MINION(Material.PLAYER_HEAD, Rarity.RARE), + FLOWER_MINION(Material.PLAYER_HEAD, Rarity.RARE), + + FISHING_MINION(Material.PLAYER_HEAD, Rarity.RARE), + CLAY_MINION(Material.PLAYER_HEAD, Rarity.RARE), + + WHEAT_MINION(Material.PLAYER_HEAD, Rarity.RARE), + POTATO_MINION(Material.PLAYER_HEAD, Rarity.RARE), + CACTUS_MINION(Material.PLAYER_HEAD, Rarity.RARE), + CARROT_MINION(Material.PLAYER_HEAD, Rarity.RARE), + COCOA_BEANS_MINION(Material.PLAYER_HEAD, Rarity.RARE), + MELON_MINION(Material.PLAYER_HEAD, Rarity.RARE), + MUSHROOM_MINION(Material.PLAYER_HEAD, Rarity.RARE), + NETHER_WART_MINION(Material.PLAYER_HEAD, Rarity.RARE), + PUMPKIN_MINION(Material.PLAYER_HEAD, Rarity.RARE), + SUGAR_CANE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + CHICKEN_MINION(Material.PLAYER_HEAD, Rarity.RARE), + COW_MINION(Material.PLAYER_HEAD, Rarity.RARE), + PIG_MINION(Material.PLAYER_HEAD, Rarity.RARE), + RABBIT_MINION(Material.PLAYER_HEAD, Rarity.RARE), + SHEEP_MINION(Material.PLAYER_HEAD, Rarity.RARE), + + BLAZE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + CAVE_SPIDER_MINION(Material.PLAYER_HEAD, Rarity.RARE), + CREEPER_MINION(Material.PLAYER_HEAD, Rarity.RARE), + ENDERMAN_MINION(Material.PLAYER_HEAD, Rarity.RARE), + GHAST_MINION(Material.PLAYER_HEAD, Rarity.RARE), + MAGMA_CUBE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + SKELETON_MINION(Material.PLAYER_HEAD, Rarity.RARE), + SLIME_MINION(Material.PLAYER_HEAD, Rarity.RARE), + SPIDER_MINION(Material.PLAYER_HEAD, Rarity.RARE), + ZOMBIE_MINION(Material.PLAYER_HEAD, Rarity.RARE), + + + /** + * Minion Upgrades + */ + AUTO_SMELTER(Material.FURNACE, Rarity.COMMON), + COMPACTOR(Material.DISPENSER, Rarity.UNCOMMON), + SUPER_COMPACTOR_3000(Material.DISPENSER, Rarity.RARE), + BUDGET_HOPPER(Material.HOPPER, Rarity.UNCOMMON), + ENCHANTED_HOPPER(Material.HOPPER, Rarity.RARE), + FLY_CATCHER(Material.COBWEB, Rarity.EPIC), + DIAMOND_SPREADING(Material.DIAMOND, Rarity.RARE), + MINION_EXPANDER(Material.COMMAND_BLOCK, Rarity.RARE), + MITHRIL_INFUSION(Material.PLAYER_HEAD, Rarity.UNCOMMON), + + /** + * Minion Fuels + */ + ENCHANTED_LAVA_BUCKET(Material.LAVA_BUCKET, Rarity.RARE), + MAGMA_BUCKET(Material.LAVA_BUCKET, Rarity.LEGENDARY), + PLASMA_BUCKET(Material.LAVA_BUCKET, Rarity.LEGENDARY), + EVERBURNING_FLAME(Material.PLAYER_HEAD, Rarity.EPIC), + HEAT_CORE(Material.PLAYER_HEAD, Rarity.SPECIAL), + + /** + * Minion Skins + */ + BEE_MINION_SKIN(Material.PLAYER_HEAD, Rarity.COMMON), + + /** + * Pets + */ + BEE_PET(Material.PLAYER_HEAD, Rarity.COMMON), + + /** + * Pet Items + */ + ALL_SKILLS_EXP_BOOST(Material.DIAMOND, Rarity.COMMON), + MINING_EXP_BOOST_COMMON(Material.IRON_PICKAXE, Rarity.COMMON), + MINING_EXP_BOOST_RARE(Material.IRON_PICKAXE, Rarity.RARE), + FARMING_EXP_BOOST_COMMON(Material.IRON_HOE, Rarity.COMMON), + FARMING_EXP_BOOST_RARE(Material.IRON_HOE, Rarity.RARE), + FISHING_EXP_BOOST(Material.COD, Rarity.COMMON), + FORAGING_EXP_BOOST(Material.IRON_AXE, Rarity.COMMON), + COMBAT_EXP_BOOST(Material.IRON_SWORD, Rarity.COMMON), + BIG_TEETH(Material.GHAST_TEAR, Rarity.COMMON), + IRON_CLAWS(Material.IRON_INGOT, Rarity.COMMON), + HARDENED_SCALES(Material.PRISMARINE_CRYSTALS, Rarity.UNCOMMON), + SHARPENED_CLAWS(Material.PRISMARINE_SHARD, Rarity.UNCOMMON), + BUBBLEGUM(Material.PLAYER_HEAD, Rarity.RARE), + + /** + * Backpacks + */ + SMALL_BACKPACK(Material.PLAYER_HEAD, Rarity.UNCOMMON), + MEDIUM_BACKPACK(Material.PLAYER_HEAD, Rarity.RARE), + LARGE_BACKPACK(Material.PLAYER_HEAD, Rarity.EPIC), + GREATER_BACKPACK(Material.PLAYER_HEAD, Rarity.EPIC), + JUMBO_BACKPACK(Material.PLAYER_HEAD, Rarity.LEGENDARY), + JUMBO_BACKPACK_UPGRADE(Material.PLAYER_HEAD, Rarity.SPECIAL), + + /** + * Decoration items + */ + DECORATION_ANCIENT_FRUIT(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_APPALLED_PUMPKIN(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_APPLE(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_BANANA_BUNCH(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_BEETROOT(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_BERRY(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_BERRY_BUSH(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_BLUE_CORN(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_BROWN_MUSHROOM(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_BUSH(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_CACTUS(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_CHESTO_BERRY(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_CORN(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_KIWI(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_LEMON(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_LETTUCE(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_LILAC_FRUIT(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_MELON(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_ONION(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_ORANGE(Material.PLAYER_HEAD, Rarity.COMMON), + DECORATION_PINK_BERRY(Material.PLAYER_HEAD, Rarity.COMMON), + + /** + * Power Stones + */ + LUXURIOUS_SPOOL(Material.PLAYER_HEAD, Rarity.UNCOMMON), + + + ASCENSION_ROPE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + + /** + * Farming Props + */ + ROOKIE_HOE(Material.STONE_HOE, Rarity.COMMON), + WOODEN_HOE(Material.WOODEN_HOE, Rarity.COMMON), + STONE_HOE(Material.STONE_HOE, Rarity.COMMON), + GOLDEN_HOE(Material.GOLDEN_HOE, Rarity.COMMON), + IRON_HOE(Material.IRON_HOE, Rarity.COMMON), + DIAMOND_HOE(Material.DIAMOND_HOE, Rarity.UNCOMMON), + WHEAT(Material.WHEAT, Rarity.COMMON), + WHEAT_SEEDS(Material.WHEAT_SEEDS, Rarity.COMMON), + WHEAT_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), + FLOWER_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), + CARROT_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), + POTATO_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), + PUMPKIN_AND_MELON_CRYSTAL(Material.PLAYER_HEAD, Rarity.SPECIAL), + MUTANT_NETHER_WART(Material.PLAYER_HEAD, Rarity.RARE), + POLISHED_PUMPKIN(Material.PLAYER_HEAD, Rarity.RARE), + BOX_OF_SEEDS(Material.PLAYER_HEAD, Rarity.RARE), + ENCHANTED_BOOKSHELF(Material.BOOKSHELF, Rarity.UNCOMMON), + ENCHANTED_COOKED_FISH(Material.COOKED_COD, Rarity.RARE), + ENCHANTED_RAW_FISH(Material.COD, Rarity.RARE), + ENCHANTED_IRON_INGOT(Material.IRON_INGOT, Rarity.RARE), + TIGHTLY_TIED_HAY_BALE(Material.PLAYER_HEAD, Rarity.RARE), + COMPOST(Material.PLAYER_HEAD, Rarity.UNCOMMON), + COMPOST_BUNDLE(Material.PLAYER_HEAD, Rarity.RARE), + DUNG(Material.BROWN_WOOL, Rarity.UNCOMMON), + HONEY_JAR(Material.PLAYER_HEAD, Rarity.UNCOMMON), + PLANT_MATTER(Material.OAK_LEAVES, Rarity.UNCOMMON), + + /** + * Foraging Props + */ + WOODEN_AXE(Material.WOODEN_AXE, Rarity.COMMON), + STONE_AXE(Material.STONE_AXE, Rarity.COMMON), + GOLDEN_AXE(Material.GOLDEN_AXE, Rarity.COMMON), + IRON_AXE(Material.IRON_AXE, Rarity.COMMON), + DIAMOND_AXE(Material.DIAMOND_AXE, Rarity.UNCOMMON), + ROOKIE_AXE(Material.STONE_AXE, Rarity.COMMON), + PROMISING_AXE(Material.IRON_AXE, Rarity.UNCOMMON), + SWEET_AXE(Material.IRON_AXE, Rarity.UNCOMMON), + EFFICIENT_AXE(Material.IRON_AXE, Rarity.UNCOMMON), + + /** + * Fishing Props + */ + SHARK_FIN(Material.PRISMARINE_SHARD, Rarity.RARE), + NURSE_SHARK_TOOTH(Material.GHAST_TEAR, Rarity.UNCOMMON), + BLUE_SHARK_TOOTH(Material.GHAST_TEAR, Rarity.RARE), + TIGER_SHARK_TOOTH(Material.GHAST_TEAR, Rarity.EPIC), + GREAT_WHITE_SHARK_TOOTH(Material.GHAST_TEAR, Rarity.LEGENDARY), + MAGMAFISH(Material.PLAYER_HEAD, Rarity.RARE), + SILVER_MAGMAFISH(Material.PLAYER_HEAD, Rarity.EPIC), + GOLD_MAGMAFISH(Material.PLAYER_HEAD, Rarity.LEGENDARY), + DIAMOND_MAGMAFISH(Material.PLAYER_HEAD, Rarity.MYTHIC), + FISHING_ROD(Material.FISHING_ROD, Rarity.COMMON), + + /** + * Combat Props + */ + CHILI_PEPPER(Material.PLAYER_HEAD, Rarity.UNCOMMON), + STUFFED_CHILI_PEPPER(Material.PLAYER_HEAD, Rarity.RARE), + ABSOLUTE_ENDER_PEARL(Material.PLAYER_HEAD, Rarity.RARE), + WHIPPED_MAGMA_CREAM(Material.PLAYER_HEAD, Rarity.RARE), + ZOMBIE_HEART(Material.PLAYER_HEAD, Rarity.RARE), + SOUL_STRING(Material.STRING, Rarity.RARE), + + /** + * Zombie Slayer + */ + FOUL_FLESH(Material.CHARCOAL, Rarity.RARE), + REVENANT_FLESH(Material.ROTTEN_FLESH, Rarity.UNCOMMON), + UNDEAD_CATALYST(Material.PLAYER_HEAD, Rarity.RARE), + BEHEADED_HORROR(Material.PLAYER_HEAD, Rarity.EPIC), + REVENANT_CATALYST(Material.PLAYER_HEAD, Rarity.EPIC), + SCYTHE_BLADE(Material.DIAMOND, Rarity.LEGENDARY), + SHARD_OF_THE_SHREDDED(Material.PLAYER_HEAD, Rarity.LEGENDARY), + WARDEN_HEART(Material.PLAYER_HEAD, Rarity.LEGENDARY), + REVENANT_VISCERA(Material.COOKED_PORKCHOP, Rarity.RARE), + CRYSTALLIZED_HEART(Material.PLAYER_HEAD, Rarity.RARE), + REVIVED_HEART(Material.PLAYER_HEAD, Rarity.EPIC), + REAPER_MASK(Material.PLAYER_HEAD, Rarity.LEGENDARY), + WARDEN_HELMET(Material.PLAYER_HEAD, Rarity.LEGENDARY), + REVENANT_FALCHION(Material.DIAMOND_SWORD, Rarity.RARE), + REAPER_FALCHION(Material.DIAMOND_SWORD, Rarity.EPIC), + AXE_OF_THE_SHREDDED(Material.DIAMOND_AXE, Rarity.LEGENDARY), + REAPER_SCYTHE(Material.DIAMOND_HOE, Rarity.LEGENDARY), + + /* + * Spider Slayer + */ /* TARANTULA_WEB(Material.STRING, Rarity.UNCOMMON), @@ -380,9 +380,9 @@ public enum ItemType { SCORPION_FOIL(Material.WOODEN_SWORD, Rarity.EPIC), */ - /* - * Wolf Slayer - */ + /* + * Wolf Slayer + */ /* WOLF_TOOTH(Material.GHAST_TEAR, Rarity.UNCOMMON), @@ -397,9 +397,9 @@ public enum ItemType { WEIRD_TUBA(Material.HOPPER, Rarity.RARE), */ - /* - * Enderman Slayer - */ + /* + * Enderman Slayer + */ /* NULL_SPHERE(Material.FIREWORK_STAR, Rarity.UNCOMMON), @@ -429,9 +429,9 @@ public enum ItemType { ETHERWARP_CONDUIT(Material.PLAYER_HEAD, Rarity.EPIC), */ - /* - * Blaze Slayer - */ + /* + * Blaze Slayer + */ /* DERELICT_ASHE(Material.GUNPOWDER, Rarity.UNCOMMON), @@ -450,1143 +450,1143 @@ public enum ItemType { SUBZERO_INVERTER(Material.PLAYER_HEAD, Rarity.LEGENDARY), */ - /** - * BrewingItem - */ - - CHEAP_COFFEE(Material.PLAYER_HEAD, Rarity.COMMON), - TEPID_GREEN_TEA(Material.PLAYER_HEAD, Rarity.COMMON), - PULPOUS_ORANGE_JUICE(Material.PLAYER_HEAD, Rarity.COMMON), - BITTER_ICE_TEA(Material.PLAYER_HEAD, Rarity.COMMON), - KNOCKOFF_COLA(Material.PLAYER_HEAD, Rarity.COMMON), - DECENT_COFFEE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - WOLF_FUR_MIXIN(Material.PLAYER_HEAD, Rarity.RARE), - ZOMBIE_BRAIN_MIXIN(Material.PLAYER_HEAD, Rarity.RARE), - SPIDER_EGG_MIXIN(Material.PLAYER_HEAD, Rarity.RARE), - END_PORTAL_FUMES(Material.PLAYER_HEAD, Rarity.RARE), - GABAGOEY_MIXIN(Material.PLAYER_HEAD, Rarity.RARE), - BLACK_COFFEE(Material.PLAYER_HEAD, Rarity.RARE), - - /** - * DungeonItem - */ - ANCIENT_ROSE(Material.POPPY, Rarity.RARE), - ARCHITECTS_FIRST_DRAFT(Material.PAPER, Rarity.EPIC), - KISMET_FEATHER(Material.FEATHER, Rarity.RARE), - NECRONS_HANDLE(Material.STICK, Rarity.EPIC), - BIGFOOT_LASSO(Material.LEAD, Rarity.EPIC), - BONZO_FRAGMENT(Material.RED_MUSHROOM, Rarity.RARE), - FUMING_POTATO_BOOK(Material.BOOK, Rarity.EPIC), - - /** - * Mythological Ritual - */ - GRIFFIN_FEATHER(Material.FEATHER, Rarity.RARE), - ANCIENT_CLAW(Material.FLINT, Rarity.RARE), - ANTIQUE_REMEDIES(Material.AZURE_BLUET, Rarity.EPIC), - CROCHET_TIGER_PLUSHIE(Material.PLAYER_HEAD, Rarity.EPIC), - DWARF_TURTLE_SHELMET(Material.PLAYER_HEAD, Rarity.RARE), - DAEDALUS_STICK(Material.STICK, Rarity.LEGENDARY), - MINOS_RELIC(Material.PLAYER_HEAD, Rarity.EPIC), - CROWN_OF_GREED(Material.GOLDEN_HELMET, Rarity.LEGENDARY), - WASHED_UP_SOUVENIR(Material.PLAYER_HEAD, Rarity.LEGENDARY), - DAEDALUS_AXE(Material.GOLDEN_AXE, Rarity.LEGENDARY), - SWORD_OF_REVELATIONS(Material.WOODEN_SWORD, Rarity.EPIC), - - /** - * Spooky Festival - */ - GREEN_CANDY(Material.PLAYER_HEAD, Rarity.UNCOMMON), - PURPLE_CANDY(Material.PLAYER_HEAD, Rarity.EPIC), - WEREWOLF_SKIN(Material.ROTTEN_FLESH, Rarity.RARE), - SOUL_FRAGMENT(Material.PLAYER_HEAD, Rarity.EPIC), - ECTOPLASM(Material.PRISMARINE_CRYSTALS, Rarity.RARE), - BLAST_O_LANTERN(Material.PLAYER_HEAD, Rarity.RARE), - PUMPKIN_GUTS(Material.PUMPKIN_SEEDS, Rarity.UNCOMMON), - SPOOKY_SHARD(Material.PLAYER_HEAD, Rarity.EPIC), - HORSEMAN_CANDLE(Material.PLAYER_HEAD, Rarity.EPIC), - BAT_FIREWORK(Material.FIREWORK_ROCKET, Rarity.RARE), - - /** - * Armor Sets - */ - LEAFLET_HELMET(Material.OAK_LEAVES, Rarity.COMMON), - LEAFLET_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), - LEAFLET_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), - LEAFLET_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), - MINERS_OUTFIT_HELMET(Material.LEATHER_HELMET, Rarity.UNCOMMON), - MINERS_OUTFIT_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.UNCOMMON), - MINERS_OUTFIT_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.UNCOMMON), - MINERS_OUTFIT_BOOTS(Material.LEATHER_BOOTS, Rarity.UNCOMMON), - FARM_SUIT_HELMET(Material.LEATHER_HELMET, Rarity.COMMON), - FARM_SUIT_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), - FARM_SUIT_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), - FARM_SUIT_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), - ROSETTA_HELMET(Material.DIAMOND_HELMET, Rarity.UNCOMMON), - ROSETTA_CHESTPLATE(Material.DIAMOND_CHESTPLATE, Rarity.UNCOMMON), - ROSETTA_LEGGINGS(Material.DIAMOND_LEGGINGS, Rarity.UNCOMMON), - ROSETTA_BOOTS(Material.DIAMOND_BOOTS, Rarity.UNCOMMON), - SQUIRE_HELMET(Material.CHAINMAIL_HELMET, Rarity.UNCOMMON), - SQUIRE_CHESTPLATE(Material.IRON_CHESTPLATE, Rarity.UNCOMMON), - SQUIRE_LEGGINGS(Material.CHAINMAIL_LEGGINGS, Rarity.UNCOMMON), - SQUIRE_BOOTS(Material.LEATHER_BOOTS, Rarity.UNCOMMON), - MERCENARY_HELMET(Material.CHAINMAIL_HELMET, Rarity.RARE), - MERCENARY_CHESTPLATE(Material.IRON_CHESTPLATE, Rarity.RARE), - MERCENARY_LEGGINGS(Material.CHAINMAIL_LEGGINGS, Rarity.RARE), - MERCENARY_BOOTS(Material.LEATHER_BOOTS, Rarity.RARE), - CELESTE_HELMET(Material.LEATHER_HELMET, Rarity.UNCOMMON), - CELESTE_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.UNCOMMON), - CELESTE_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.UNCOMMON), - CELESTE_BOOTS(Material.LEATHER_BOOTS, Rarity.UNCOMMON), - STARLIGHT_HELMET(Material.GOLDEN_HELMET, Rarity.RARE), - STARLIGHT_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.RARE), - STARLIGHT_LEGGINGS(Material.GOLDEN_LEGGINGS, Rarity.RARE), - STARLIGHT_BOOTS(Material.LEATHER_BOOTS, Rarity.RARE), - CHEAP_TUXEDO_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.EPIC), - CHEAP_TUXEDO_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.EPIC), - CHEAP_TUXEDO_BOOTS(Material.LEATHER_BOOTS, Rarity.EPIC), - FANCY_TUXEDO_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.LEGENDARY), - FANCY_TUXEDO_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.LEGENDARY), - FANCY_TUXEDO_BOOTS(Material.LEATHER_BOOTS, Rarity.LEGENDARY), - ELEGANT_TUXEDO_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.LEGENDARY), - ELEGANT_TUXEDO_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.LEGENDARY), - ELEGANT_TUXEDO_BOOTS(Material.LEATHER_BOOTS, Rarity.LEGENDARY), - MUSHROOM_HELMET(Material.LEATHER_HELMET, Rarity.COMMON), - MUSHROOM_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), - MUSHROOM_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), - MUSHROOM_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), - PUMPKIN_HELMET(Material.LEATHER_HELMET, Rarity.COMMON), - PUMPKIN_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), - PUMPKIN_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), - PUMPKIN_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), - - /** - * Pickaxes - */ - PIONEERS_PICKAXE(Material.WOODEN_PICKAXE, Rarity.SPECIAL), - DIAMOND_PICKAXE(Material.DIAMOND_PICKAXE, Rarity.UNCOMMON), - IRON_PICKAXE(Material.IRON_PICKAXE, Rarity.COMMON), - STONE_PICKAXE(Material.STONE_PICKAXE, Rarity.COMMON), - WOODEN_PICKAXE(Material.WOODEN_PICKAXE, Rarity.COMMON), - GOLDEN_PICKAXE(Material.GOLDEN_PICKAXE, Rarity.COMMON), - ROOKIE_PICKAXE(Material.STONE_PICKAXE, Rarity.COMMON), - PROMISING_PICKAXE(Material.IRON_PICKAXE, Rarity.UNCOMMON), - PICKONIMBUS_2000(Material.DIAMOND_PICKAXE, Rarity.EPIC), - - /** - * Swords - */ - HYPERION(Material.IRON_SWORD, Rarity.LEGENDARY), - ROGUE_SWORD(Material.GOLDEN_SWORD, Rarity.COMMON), - DIAMOND_SWORD(Material.DIAMOND_SWORD, Rarity.UNCOMMON), - IRON_SWORD(Material.IRON_SWORD, Rarity.COMMON), - STONE_SWORD(Material.STONE_SWORD, Rarity.COMMON), - WOODEN_SWORD(Material.WOODEN_SWORD, Rarity.COMMON), - GOLDEN_SWORD(Material.GOLDEN_SWORD, Rarity.COMMON), - UNDEAD_SWORD(Material.IRON_SWORD, Rarity.COMMON), - END_SWORD(Material.DIAMOND_SWORD, Rarity.UNCOMMON), - SPIDER_SWORD(Material.IRON_SWORD, Rarity.COMMON), - ASPECT_OF_THE_JERRY(Material.WOODEN_SWORD, Rarity.COMMON), - FANCY_SWORD(Material.GOLDEN_SWORD, Rarity.COMMON), - HUNTER_KNIFE(Material.IRON_SWORD, Rarity.UNCOMMON), - PRISMARINE_BLADE(Material.PRISMARINE_SHARD, Rarity.UNCOMMON), - SILVER_FANG(Material.GHAST_TEAR, Rarity.UNCOMMON), - ASPECT_OF_THE_END(Material.DIAMOND_SWORD, Rarity.RARE), - SQUIRE_SWORD(Material.IRON_SWORD, Rarity.UNCOMMON), - MERCENARY_AXE(Material.IRON_AXE, Rarity.RARE), - - /** - * Shovels - */ - SHEARS(Material.SHEARS, Rarity.COMMON), - WOODEN_SHOVEL(Material.WOODEN_SHOVEL, Rarity.COMMON), - STONE_SHOVEL(Material.STONE_SHOVEL, Rarity.COMMON), - GOLDEN_SHOVEL(Material.GOLDEN_SHOVEL, Rarity.COMMON), - IRON_SHOVEL(Material.IRON_SHOVEL, Rarity.COMMON), - DIAMOND_SHOVEL(Material.DIAMOND_SHOVEL, Rarity.UNCOMMON), - - /** - * Bows - */ - WITHER_BOW(Material.BOW, Rarity.UNCOMMON), - ARTISANAL_SHORTBOW(Material.BOW, Rarity.RARE), - BOW(Material.BOW, Rarity.COMMON), - - /** - * Arrows - */ - FLINT_ARROW(Material.ARROW, Rarity.COMMON), - - /** - * Jerry's Workshop - */ - WHITE_GIFT(Material.PLAYER_HEAD, Rarity.COMMON), - GREEN_GIFT(Material.PLAYER_HEAD, Rarity.UNCOMMON), - RED_GIFT(Material.PLAYER_HEAD, Rarity.RARE), - GLACIAL_FRAGMENT(Material.PLAYER_HEAD, Rarity.EPIC), - - /** - * Mining Materials - */ - ROUGH_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), - ROUGH_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), - ROUGH_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), - ROUGH_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), - ROUGH_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), - ROUGH_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), - ROUGH_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), - FLAWED_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - FLAWED_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - FLAWED_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - FLAWED_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - FLAWED_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - FLAWED_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - FLAWED_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - FINE_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), - FINE_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), - FINE_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), - FINE_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), - FINE_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), - FINE_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), - FINE_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), - FLAWLESS_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), - FLAWLESS_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), - FLAWLESS_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), - FLAWLESS_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), - FLAWLESS_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), - FLAWLESS_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), - FLAWLESS_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), - PERFECT_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), - PERFECT_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), - PERFECT_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), - PERFECT_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), - PERFECT_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), - PERFECT_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), - PERFECT_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), - HARD_STONE(Material.STONE, Rarity.COMMON), - ENCHANTED_HARD_STONE(Material.STONE, Rarity.UNCOMMON), - MITHRIL(Material.PRISMARINE_CRYSTALS, Rarity.COMMON), - TITANIUM(Material.PLAYER_HEAD, Rarity.RARE), - SULPHUR(Material.GLOWSTONE_DUST, Rarity.UNCOMMON), - CONCENTRATED_STONE(Material.PLAYER_HEAD, Rarity.RARE), - - /** - * Forge Items - */ - REFINED_MITHRIL(Material.PLAYER_HEAD, Rarity.EPIC), - REFINED_TITANIUM(Material.PLAYER_HEAD, Rarity.EPIC), - - /** - * Other Mining Stuff - */ - GOBLIN_EGG(Material.EGG, Rarity.RARE), - YELLOW_GOBLIN_EGG(Material.EGG, Rarity.RARE), - RED_GOBLIN_EGG(Material.EGG, Rarity.RARE), - GREEN_GOBLIN_EGG(Material.EGG, Rarity.UNCOMMON), - BLUE_GOBLIN_EGG(Material.EGG, Rarity.RARE), - CONTROL_SWITCH(Material.PLAYER_HEAD, Rarity.RARE), - ELECTRON_TRANSMITTER(Material.PLAYER_HEAD, Rarity.RARE), - FTX_3070(Material.PLAYER_HEAD, Rarity.RARE), - ROBOTRON_REFLECTOR(Material.PLAYER_HEAD, Rarity.RARE), - SUPERLITE_MOTOR(Material.PLAYER_HEAD, Rarity.RARE), - SYNTHETIC_HEART(Material.PLAYER_HEAD, Rarity.RARE), - SLUDGE_JUICE(Material.PLAYER_HEAD, Rarity.UNCOMMON), - OIL_BARREL(Material.PLAYER_HEAD, Rarity.UNCOMMON), - TREASURITE(Material.PLAYER_HEAD, Rarity.EPIC), - JUNGLE_KEY(Material.TRIPWIRE_HOOK, Rarity.EPIC), - WISHING_COMPASS(Material.PLAYER_HEAD, Rarity.UNCOMMON), - WORM_MEMBRANE(Material.ROTTEN_FLESH, Rarity.UNCOMMON), - MAGMA_CORE(Material.MAGMA_CREAM, Rarity.RARE), - ETERNAL_FLAME_RING(Material.PLAYER_HEAD, Rarity.UNCOMMON), - HELIX(Material.PLAYER_HEAD, Rarity.LEGENDARY), - BOB_OMB(Material.PLAYER_HEAD, Rarity.RARE), - PREHISTORIC_EGG(Material.PLAYER_HEAD, Rarity.COMMON), - RECALL_POTION(Material.PLAYER_HEAD, Rarity.EPIC), - GEMSTONE_MIXTURE(Material.PLAYER_HEAD, Rarity.RARE), - DIVAN_FRAGMENT(Material.PLAYER_HEAD, Rarity.EPIC), - DIVAN_ALLOY(Material.PLAYER_HEAD, Rarity.LEGENDARY), - GLACITE_JEWEL(Material.PLAYER_HEAD, Rarity.RARE), - STARFALL(Material.NETHER_STAR, Rarity.RARE), - SORROW(Material.GHAST_TEAR, Rarity.RARE), - PLASMA(Material.PLAYER_HEAD, Rarity.RARE), - VOLTA(Material.PLAYER_HEAD, Rarity.RARE), - CORLEONITE(Material.PLAYER_HEAD, Rarity.EPIC), - - /** - * Travel Scrolls - */ - HUB_CASTLE_TRAVEL_SCROLL(Material.MAP, Rarity.EPIC), - HUB_MUSEUM_TRAVEL_SCROLL(Material.MAP, Rarity.EPIC), - HUB_CRYPTS_TRAVEL_SCROLL(Material.MAP, Rarity.EPIC), - - /** - * Crimson Isles - */ - FLAMES(Material.BLAZE_POWDER, Rarity.RARE), - - /** - * Vanilla Items - */ - AIR(Material.AIR, Rarity.COMMON), - DIRT(Material.DIRT, Rarity.COMMON), - CRAFTING_TABLE(Material.CRAFTING_TABLE, Rarity.COMMON), - ANVIL(Material.ANVIL, Rarity.COMMON), - FLOWER_POT(Material.FLOWER_POT, Rarity.COMMON), - FERN(Material.FERN, Rarity.COMMON), - DEAD_BUSH(Material.DEAD_BUSH, Rarity.COMMON), - WATER_BUCKET(Material.WATER_BUCKET, Rarity.COMMON), - LARGE_FERN(Material.LARGE_FERN, Rarity.COMMON), - STICK(Material.STICK, Rarity.COMMON), - BAKED_POTATO(Material.BAKED_POTATO, Rarity.COMMON), - BLAZE_ROD(Material.BLAZE_ROD, Rarity.COMMON), - BONE(Material.BONE, Rarity.COMMON), - BONE_MEAL(Material.BONE_MEAL, Rarity.COMMON), - BOOK(Material.BOOK, Rarity.COMMON), - BOOKSHELF(Material.BOOKSHELF, Rarity.COMMON), - BOWL(Material.BOWL, Rarity.COMMON), - BREAD(Material.BREAD, Rarity.COMMON), - CARROT(Material.CARROT, Rarity.COMMON), - CHARCOAL(Material.CHARCOAL, Rarity.COMMON), - COAL(Material.COAL, Rarity.COMMON), - COCOA_BEANS(Material.COCOA_BEANS, Rarity.COMMON), - DIAMOND(Material.DIAMOND, Rarity.COMMON), - DIAMOND_BLOCK(Material.DIAMOND_BLOCK, Rarity.COMMON), - EGG(Material.EGG, Rarity.COMMON), - EMERALD(Material.EMERALD, Rarity.COMMON), - EMERALD_BLOCK(Material.EMERALD_BLOCK, Rarity.COMMON), - ENDER_PEARL(Material.ENDER_PEARL, Rarity.COMMON), - FEATHER(Material.FEATHER, Rarity.COMMON), - FLINT(Material.FLINT, Rarity.COMMON), - GLOWSTONE_DUST(Material.GLOWSTONE_DUST, Rarity.COMMON), - GOLD_INGOT(Material.GOLD_INGOT, Rarity.COMMON), - GOLD_BLOCK(Material.GOLD_BLOCK, Rarity.COMMON), - GUNPOWDER(Material.GUNPOWDER, Rarity.COMMON), - END_STONE(Material.END_STONE, Rarity.COMMON), - EYE_OF_ENDER(Material.ENDER_EYE, Rarity.COMMON), - GHAST_TEAR(Material.GHAST_TEAR, Rarity.COMMON), - ICE(Material.ICE, Rarity.COMMON), - IRON_INGOT(Material.IRON_INGOT, Rarity.COMMON), - GRAVEL(Material.GRAVEL, Rarity.COMMON), - LAPIS_LAZULI(Material.LAPIS_LAZULI, Rarity.COMMON), - IRON_BLOCK(Material.IRON_BLOCK, Rarity.COMMON), - LEATHER(Material.LEATHER, Rarity.COMMON), - MAGMA_CREAM(Material.MAGMA_CREAM, Rarity.COMMON), - OBSIDIAN(Material.OBSIDIAN, Rarity.COMMON), - PACKED_ICE(Material.PACKED_ICE, Rarity.COMMON), - VINES(Material.VINE, Rarity.COMMON), - PAPER(Material.PAPER, Rarity.COMMON), - POTATO(Material.POTATO, Rarity.COMMON), - PUMPKIN(Material.PUMPKIN, Rarity.COMMON), - REDSTONE(Material.REDSTONE, Rarity.COMMON), - REDSTONE_BLOCK(Material.REDSTONE_BLOCK, Rarity.COMMON), - ROTTEN_FLESH(Material.ROTTEN_FLESH, Rarity.COMMON), - SLIME_BALL(Material.SLIME_BALL, Rarity.COMMON), - SPONGE(Material.SPONGE, Rarity.COMMON), - STRING(Material.STRING, Rarity.COMMON), - SUGAR_CANE(Material.SUGAR_CANE, Rarity.COMMON), - SUGAR(Material.SUGAR, Rarity.COMMON), - SNOW(Material.SNOW, Rarity.COMMON), - SNOW_BLOCK(Material.SNOW_BLOCK, Rarity.COMMON), - SNOWBALL(Material.SNOWBALL, Rarity.COMMON), - MELON_SLICE(Material.MELON_SLICE, Rarity.COMMON), - RED_MUSHROOM(Material.RED_MUSHROOM, Rarity.COMMON), - BROWN_MUSHROOM(Material.BROWN_MUSHROOM, Rarity.COMMON), - MUTTON(Material.MUTTON, Rarity.COMMON), - NETHER_WART(Material.NETHER_WART, Rarity.COMMON), - CHICKEN(Material.CHICKEN, Rarity.COMMON), - SOUL_SAND(Material.SOUL_SAND, Rarity.COMMON), - PRISMARINE(Material.PRISMARINE, Rarity.COMMON), - PRISMARINE_BRICKS(Material.PRISMARINE_BRICKS, Rarity.COMMON), - DARK_PRISMARINE(Material.DARK_PRISMARINE, Rarity.COMMON), - SEA_LANTERN(Material.SEA_LANTERN, Rarity.COMMON), - WET_SPONGE(Material.WET_SPONGE, Rarity.COMMON), - LAVA_BUCKET(Material.LAVA_BUCKET, Rarity.COMMON), - JACK_O_LANTERN(Material.JACK_O_LANTERN, Rarity.COMMON), - NETHER_BRICKS(Material.NETHER_BRICKS, Rarity.COMMON), - COARSE_DIRT(Material.COARSE_DIRT, Rarity.COMMON), - PODZOL(Material.PODZOL, Rarity.COMMON), - CRACKED_STONE_BRICKS(Material.CRACKED_STONE_BRICKS, Rarity.COMMON), - CHISELED_STONE_BRICKS(Material.CHISELED_STONE_BRICKS, Rarity.COMMON), - SMOOTH_STONE(Material.SMOOTH_STONE, Rarity.COMMON), - SMOOTH_SANDSTONE(Material.SMOOTH_SANDSTONE, Rarity.COMMON), - SMOOTH_QUARTZ(Material.SMOOTH_QUARTZ, Rarity.COMMON), - BRICKS(Material.BRICKS, Rarity.COMMON), - END_STONE_BRICKS(Material.END_STONE_BRICKS, Rarity.COMMON), - PURPUR_BLOCK(Material.PURPUR_BLOCK, Rarity.COMMON), - PURPUR_PILLAR(Material.PURPUR_PILLAR, Rarity.COMMON), - PURPUR_STAIRS(Material.PURPUR_STAIRS, Rarity.COMMON), - PURPUR_SLAB(Material.PURPUR_SLAB, Rarity.COMMON), - END_ROD(Material.END_ROD, Rarity.COMMON), - DRAGON_BREATH(Material.DRAGON_BREATH, Rarity.COMMON), - ELDER_GUARDIAN_SPAWN_EGG(Material.ELDER_GUARDIAN_SPAWN_EGG, Rarity.COMMON), - ENDER_CHEST(Material.ENDER_CHEST, Rarity.COMMON), - ENDER_EYE(Material.ENDER_EYE, Rarity.COMMON), - BRICK_STAIRS(Material.BRICK_STAIRS, Rarity.COMMON), - BRICK_SLAB(Material.BRICK_SLAB, Rarity.COMMON), - SMOOTH_RED_SANDSTONE(Material.SMOOTH_RED_SANDSTONE, Rarity.COMMON), - IRON_BARS(Material.IRON_BARS, Rarity.COMMON), - IRON_DOOR(Material.IRON_DOOR, Rarity.COMMON), - REDSTONE_LAMP(Material.REDSTONE_LAMP, Rarity.COMMON), - SANDSTONE_STAIRS(Material.SANDSTONE_STAIRS, Rarity.COMMON), - EMERALD_ORE(Material.EMERALD_ORE, Rarity.COMMON), - DIAMOND_ORE(Material.DIAMOND_ORE, Rarity.COMMON), - GOLD_ORE(Material.GOLD_ORE, Rarity.COMMON), - IRON_ORE(Material.IRON_ORE, Rarity.COMMON), - COAL_ORE(Material.COAL_ORE, Rarity.COMMON), - LAPIS_LAZULI_ORE(Material.LAPIS_ORE, Rarity.COMMON), - REDSTONE_ORE(Material.REDSTONE_ORE, Rarity.COMMON), - IRON_TRAPDOOR(Material.IRON_TRAPDOOR, Rarity.COMMON), - PORKCHOP(Material.PORKCHOP, Rarity.COMMON), - RABBIT(Material.RABBIT, Rarity.COMMON), - MYCELIUM(Material.MYCELIUM, Rarity.COMMON), - RED_SAND(Material.RED_SAND, Rarity.COMMON), - QUARTZ(Material.QUARTZ, Rarity.COMMON), - NETHER_QUARTZ_ORE(Material.NETHER_QUARTZ_ORE, Rarity.COMMON), - NETHERRACK(Material.NETHERRACK, Rarity.COMMON), - NETHER_BRICK(Material.NETHER_BRICK, Rarity.COMMON), - SAND(Material.SAND, Rarity.COMMON), - CLAY_BALL(Material.CLAY_BALL, Rarity.COMMON), - TROPICAL_FISH(Material.TROPICAL_FISH, Rarity.COMMON), - INK_SAC(Material.INK_SAC, Rarity.COMMON), - GRASS_BLOCK(Material.GRASS_BLOCK, Rarity.COMMON), - SHORT_GRASS(Material.SHORT_GRASS, Rarity.COMMON), - TALL_GRASS(Material.TALL_GRASS, Rarity.COMMON), - MELON_BLOCK(Material.MELON, Rarity.COMMON), - LILY_PAD(Material.LILY_PAD, Rarity.COMMON), - PRISMARINE_CRYSTALS(Material.PRISMARINE_CRYSTALS, Rarity.COMMON), - PRISMARINE_SHARD(Material.PRISMARINE_SHARD, Rarity.COMMON), - PUFFERFISH(Material.PUFFERFISH, Rarity.COMMON), - COD(Material.COD, Rarity.COMMON), - SALMON(Material.SALMON, Rarity.COMMON), - TORCH(Material.TORCH, Rarity.COMMON), - RAW_BEEF(Material.BEEF, Rarity.UNCOMMON), - RAW_CHICKEN(Material.CHICKEN, Rarity.UNCOMMON), - SPIDER_EYE(Material.SPIDER_EYE, Rarity.COMMON), - CACTUS_GREEN(Material.GREEN_DYE, Rarity.COMMON), - DANDELION(Material.DANDELION, Rarity.COMMON), - FERMENTED_SPIDER_EYE(Material.FERMENTED_SPIDER_EYE, Rarity.COMMON), - GLISTERING_MELON(Material.GLISTERING_MELON_SLICE, Rarity.COMMON), - GLOWSTONE(Material.GLOWSTONE, Rarity.COMMON), - HAY_BALE(Material.HAY_BLOCK, Rarity.COMMON), - POISONOUS_POTATO(Material.POISONOUS_POTATO, Rarity.COMMON), - POPPY(Material.POPPY, Rarity.COMMON), - RABBIT_FOOT(Material.RABBIT_FOOT, Rarity.COMMON), - RABBIT_HIDE(Material.RABBIT_HIDE, Rarity.COMMON), - BEEF(Material.BEEF, Rarity.COMMON), - COAL_BLOCK(Material.COAL_BLOCK, Rarity.COMMON), - LAPIS_LAZULI_BLOCK(Material.LAPIS_BLOCK, Rarity.COMMON), - BROWN_MUSHROOM_BLOCK(Material.BROWN_MUSHROOM_BLOCK, Rarity.COMMON), - RED_MUSHROOM_BLOCK(Material.RED_MUSHROOM_BLOCK, Rarity.COMMON), - BLAZE_POWDER(Material.BLAZE_POWDER, Rarity.COMMON), - GOLDEN_CARROT(Material.GOLDEN_CARROT, Rarity.COMMON), - GOLD_NUGGET(Material.GOLD_NUGGET, Rarity.COMMON), - IRON_NUGGET(Material.IRON_NUGGET, Rarity.COMMON), - WATER_BOTTLE(Material.POTION, Rarity.COMMON), - CACTUS(Material.CACTUS, Rarity.COMMON), - CHEST(Material.CHEST, Rarity.COMMON), - IRON_HELMET(Material.IRON_HELMET, Rarity.COMMON), - IRON_CHESTPLATE(Material.IRON_CHESTPLATE, Rarity.COMMON), - IRON_LEGGINGS(Material.IRON_LEGGINGS, Rarity.COMMON), - IRON_BOOTS(Material.IRON_BOOTS, Rarity.COMMON), - LEATHER_HELMET(Material.LEATHER_HELMET, Rarity.COMMON), - LEATHER_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), - LEATHER_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), - LEATHER_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), - GOLDEN_HELMET(Material.GOLDEN_HELMET, Rarity.COMMON), - GOLDEN_CHESTPLATE(Material.GOLDEN_CHESTPLATE, Rarity.COMMON), - GOLDEN_LEGGINGS(Material.GOLDEN_LEGGINGS, Rarity.COMMON), - GOLDEN_BOOTS(Material.GOLDEN_BOOTS, Rarity.COMMON), - DIAMOND_HELMET(Material.DIAMOND_HELMET, Rarity.UNCOMMON), - DIAMOND_CHESTPLATE(Material.DIAMOND_CHESTPLATE, Rarity.UNCOMMON), - DIAMOND_LEGGINGS(Material.DIAMOND_LEGGINGS, Rarity.UNCOMMON), - DIAMOND_BOOTS(Material.DIAMOND_BOOTS, Rarity.UNCOMMON), - APPLE(Material.APPLE, Rarity.COMMON), - SLIME_BLOCK(Material.SLIME_BLOCK, Rarity.COMMON), - - OAK_SAPLING(Material.OAK_SAPLING, Rarity.COMMON), - SPRUCE_SAPLING(Material.SPRUCE_SAPLING, Rarity.COMMON), - BIRCH_SAPLING(Material.BIRCH_SAPLING, Rarity.COMMON), - JUNGLE_SAPLING(Material.JUNGLE_SAPLING, Rarity.COMMON), - ACACIA_SAPLING(Material.ACACIA_SAPLING, Rarity.COMMON), - DARK_OAK_SAPLING(Material.DARK_OAK_SAPLING, Rarity.COMMON), - CHERRY_SAPLING(Material.CHERRY_SAPLING, Rarity.COMMON), - MANGROVE_PROPAGULE(Material.MANGROVE_PROPAGULE, Rarity.COMMON), - PALE_OAK_SAPLING(Material.PALE_OAK_SAPLING, Rarity.COMMON), - AZALEA(Material.AZALEA, Rarity.COMMON), - FLOWERING_AZALEA(Material.FLOWERING_AZALEA, Rarity.COMMON), - - OAK_LEAVES(Material.OAK_LEAVES, Rarity.COMMON), - SPRUCE_LEAVES(Material.SPRUCE_LEAVES, Rarity.COMMON), - BIRCH_LEAVES(Material.BIRCH_LEAVES, Rarity.COMMON), - JUNGLE_LEAVES(Material.JUNGLE_LEAVES, Rarity.COMMON), - ACACIA_LEAVES(Material.ACACIA_LEAVES, Rarity.COMMON), - DARK_OAK_LEAVES(Material.DARK_OAK_LEAVES, Rarity.COMMON), - CHERRY_LEAVES(Material.CHERRY_LEAVES, Rarity.COMMON), - MANGROVE_LEAVES(Material.MANGROVE_LEAVES, Rarity.COMMON), - PALE_OAK_LEAVES(Material.PALE_OAK_LEAVES, Rarity.COMMON), - AZALEA_LEAVES(Material.AZALEA_LEAVES, Rarity.COMMON), - FLOWERING_AZALEA_LEAVES(Material.FLOWERING_AZALEA_LEAVES, Rarity.COMMON), - - OAK_LOG(Material.OAK_LOG, Rarity.COMMON), - STRIPPED_OAK_LOG(Material.STRIPPED_OAK_LOG, Rarity.COMMON), - OAK_WOOD(Material.OAK_WOOD, Rarity.COMMON), - STRIPPED_OAK_WOOD(Material.STRIPPED_OAK_WOOD, Rarity.COMMON), - OAK_PLANKS(Material.OAK_PLANKS, Rarity.COMMON), - OAK_SLAB(Material.OAK_SLAB, Rarity.COMMON), - OAK_STAIRS(Material.OAK_STAIRS, Rarity.COMMON), - OAK_FENCE(Material.OAK_FENCE, Rarity.COMMON), - OAK_FENCE_GATE(Material.OAK_FENCE_GATE, Rarity.COMMON), - OAK_DOOR(Material.OAK_DOOR, Rarity.COMMON), - OAK_TRAPDOOR(Material.OAK_TRAPDOOR, Rarity.COMMON), - OAK_PRESSURE_PLATE(Material.OAK_PRESSURE_PLATE, Rarity.COMMON), - OAK_BUTTON(Material.OAK_BUTTON, Rarity.COMMON), - OAK_BOAT(Material.OAK_BOAT, Rarity.COMMON), - OAK_CHEST_BOAT(Material.OAK_CHEST_BOAT, Rarity.COMMON), - OAK_SIGN(Material.OAK_SIGN, Rarity.COMMON), - OAK_HANGING_SIGN(Material.OAK_HANGING_SIGN, Rarity.COMMON), - - ACACIA_LOG(Material.ACACIA_LOG, Rarity.COMMON), - STRIPPED_ACACIA_LOG(Material.STRIPPED_ACACIA_LOG, Rarity.COMMON), - ACACIA_WOOD(Material.ACACIA_WOOD, Rarity.COMMON), - STRIPPED_ACACIA_WOOD(Material.STRIPPED_ACACIA_WOOD, Rarity.COMMON), - ACACIA_PLANKS(Material.ACACIA_PLANKS, Rarity.COMMON), - ACACIA_SLAB(Material.ACACIA_SLAB, Rarity.COMMON), - ACACIA_STAIRS(Material.ACACIA_STAIRS, Rarity.COMMON), - ACACIA_FENCE(Material.ACACIA_FENCE, Rarity.COMMON), - ACACIA_FENCE_GATE(Material.ACACIA_FENCE_GATE, Rarity.COMMON), - ACACIA_DOOR(Material.ACACIA_DOOR, Rarity.COMMON), - ACACIA_TRAPDOOR(Material.ACACIA_TRAPDOOR, Rarity.COMMON), - ACACIA_PRESSURE_PLATE(Material.ACACIA_PRESSURE_PLATE, Rarity.COMMON), - ACACIA_BUTTON(Material.ACACIA_BUTTON, Rarity.COMMON), - ACACIA_BOAT(Material.ACACIA_BOAT, Rarity.COMMON), - ACACIA_CHEST_BOAT(Material.ACACIA_CHEST_BOAT, Rarity.COMMON), - ACACIA_SIGN(Material.ACACIA_SIGN, Rarity.COMMON), - ACACIA_HANGING_SIGN(Material.ACACIA_HANGING_SIGN, Rarity.COMMON), - - CHERRY_LOG(Material.CHERRY_LOG, Rarity.COMMON), - STRIPPED_CHERRY_LOG(Material.STRIPPED_CHERRY_LOG, Rarity.COMMON), - CHERRY_WOOD(Material.CHERRY_WOOD, Rarity.COMMON), - STRIPPED_CHERRY_WOOD(Material.STRIPPED_CHERRY_WOOD, Rarity.COMMON), - CHERRY_PLANKS(Material.CHERRY_PLANKS, Rarity.COMMON), - CHERRY_SLAB(Material.CHERRY_SLAB, Rarity.COMMON), - CHERRY_STAIRS(Material.CHERRY_STAIRS, Rarity.COMMON), - CHERRY_FENCE(Material.CHERRY_FENCE, Rarity.COMMON), - CHERRY_FENCE_GATE(Material.CHERRY_FENCE_GATE, Rarity.COMMON), - CHERRY_DOOR(Material.CHERRY_DOOR, Rarity.COMMON), - CHERRY_TRAPDOOR(Material.CHERRY_TRAPDOOR, Rarity.COMMON), - CHERRY_PRESSURE_PLATE(Material.CHERRY_PRESSURE_PLATE, Rarity.COMMON), - CHERRY_BUTTON(Material.CHERRY_BUTTON, Rarity.COMMON), - CHERRY_BOAT(Material.CHERRY_BOAT, Rarity.COMMON), - CHERRY_CHEST_BOAT(Material.CHERRY_CHEST_BOAT, Rarity.COMMON), - CHERRY_SIGN(Material.CHERRY_SIGN, Rarity.COMMON), - CHERRY_HANGING_SIGN(Material.CHERRY_HANGING_SIGN, Rarity.COMMON), - - MANGROVE_PLANKS(Material.MANGROVE_PLANKS, Rarity.COMMON), - MANGROVE_LOG(Material.MANGROVE_LOG, Rarity.COMMON), - STRIPPED_MANGROVE_LOG(Material.STRIPPED_MANGROVE_LOG, Rarity.COMMON), - MANGROVE_WOOD(Material.MANGROVE_WOOD, Rarity.COMMON), - STRIPPED_MANGROVE_WOOD(Material.STRIPPED_MANGROVE_WOOD, Rarity.COMMON), - MANGROVE_SLAB(Material.MANGROVE_SLAB, Rarity.COMMON), - MANGROVE_STAIRS(Material.MANGROVE_STAIRS, Rarity.COMMON), - MANGROVE_FENCE(Material.MANGROVE_FENCE, Rarity.COMMON), - MANGROVE_FENCE_GATE(Material.MANGROVE_FENCE_GATE, Rarity.COMMON), - MANGROVE_DOOR(Material.MANGROVE_DOOR, Rarity.COMMON), - MANGROVE_TRAPDOOR(Material.MANGROVE_TRAPDOOR, Rarity.COMMON), - MANGROVE_PRESSURE_PLATE(Material.MANGROVE_PRESSURE_PLATE, Rarity.COMMON), - MANGROVE_BUTTON(Material.MANGROVE_BUTTON, Rarity.COMMON), - MANGROVE_BOAT(Material.MANGROVE_BOAT, Rarity.COMMON), - MANGROVE_CHEST_BOAT(Material.MANGROVE_CHEST_BOAT, Rarity.COMMON), - MANGROVE_SIGN(Material.MANGROVE_SIGN, Rarity.COMMON), - MANGROVE_HANGING_SIGN(Material.MANGROVE_HANGING_SIGN, Rarity.COMMON), - - PALE_OAK_LOG(Material.PALE_OAK_LOG, Rarity.COMMON), - STRIPPED_PALE_OAK_LOG(Material.STRIPPED_PALE_OAK_LOG, Rarity.COMMON), - PALE_OAK_WOOD(Material.PALE_OAK_WOOD, Rarity.COMMON), - STRIPPED_PALE_OAK_WOOD(Material.STRIPPED_PALE_OAK_WOOD, Rarity.COMMON), - PALE_OAK_PLANKS(Material.PALE_OAK_PLANKS, Rarity.COMMON), - PALE_OAK_SLAB(Material.PALE_OAK_SLAB, Rarity.COMMON), - PALE_OAK_STAIRS(Material.PALE_OAK_STAIRS, Rarity.COMMON), - PALE_OAK_FENCE(Material.PALE_OAK_FENCE, Rarity.COMMON), - PALE_OAK_FENCE_GATE(Material.PALE_OAK_FENCE_GATE, Rarity.COMMON), - PALE_OAK_DOOR(Material.PALE_OAK_DOOR, Rarity.COMMON), - PALE_OAK_TRAPDOOR(Material.PALE_OAK_TRAPDOOR, Rarity.COMMON), - PALE_OAK_PRESSURE_PLATE(Material.PALE_OAK_PRESSURE_PLATE, Rarity.COMMON), - PALE_OAK_BUTTON(Material.PALE_OAK_BUTTON, Rarity.COMMON), - PALE_OAK_BOAT(Material.PALE_OAK_BOAT, Rarity.COMMON), - PALE_OAK_CHEST_BOAT(Material.PALE_OAK_CHEST_BOAT, Rarity.COMMON), - PALE_OAK_SIGN(Material.PALE_OAK_SIGN, Rarity.COMMON), - PALE_OAK_HANGING_SIGN(Material.PALE_OAK_HANGING_SIGN, Rarity.COMMON), - - BIRCH_LOG(Material.BIRCH_LOG, Rarity.COMMON), - STRIPPED_BIRCH_LOG(Material.STRIPPED_BIRCH_LOG, Rarity.COMMON), - BIRCH_WOOD(Material.BIRCH_WOOD, Rarity.COMMON), - STRIPPED_BIRCH_WOOD(Material.STRIPPED_BIRCH_WOOD, Rarity.COMMON), - BIRCH_PLANKS(Material.BIRCH_PLANKS, Rarity.COMMON), - BIRCH_SLAB(Material.BIRCH_SLAB, Rarity.COMMON), - BIRCH_STAIRS(Material.BIRCH_STAIRS, Rarity.COMMON), - BIRCH_FENCE(Material.BIRCH_FENCE, Rarity.COMMON), - BIRCH_FENCE_GATE(Material.BIRCH_FENCE_GATE, Rarity.COMMON), - BIRCH_DOOR(Material.BIRCH_DOOR, Rarity.COMMON), - BIRCH_TRAPDOOR(Material.BIRCH_TRAPDOOR, Rarity.COMMON), - BIRCH_PRESSURE_PLATE(Material.BIRCH_PRESSURE_PLATE, Rarity.COMMON), - BIRCH_BUTTON(Material.BIRCH_BUTTON, Rarity.COMMON), - BIRCH_BOAT(Material.BIRCH_BOAT, Rarity.COMMON), - BIRCH_CHEST_BOAT(Material.BIRCH_CHEST_BOAT, Rarity.COMMON), - BIRCH_SIGN(Material.BIRCH_SIGN, Rarity.COMMON), - BIRCH_HANGING_SIGN(Material.BIRCH_HANGING_SIGN, Rarity.COMMON), - - DARK_OAK_LOG(Material.DARK_OAK_LOG, Rarity.COMMON), - STRIPPED_DARK_OAK_LOG(Material.STRIPPED_DARK_OAK_LOG, Rarity.COMMON), - DARK_OAK_WOOD(Material.DARK_OAK_WOOD, Rarity.COMMON), - STRIPPED_DARK_OAK_WOOD(Material.STRIPPED_DARK_OAK_WOOD, Rarity.COMMON), - DARK_OAK_PLANKS(Material.DARK_OAK_PLANKS, Rarity.COMMON), - DARK_OAK_SLAB(Material.DARK_OAK_SLAB, Rarity.COMMON), - DARK_OAK_STAIRS(Material.DARK_OAK_STAIRS, Rarity.COMMON), - DARK_OAK_FENCE(Material.DARK_OAK_FENCE, Rarity.COMMON), - DARK_OAK_FENCE_GATE(Material.DARK_OAK_FENCE_GATE, Rarity.COMMON), - DARK_OAK_DOOR(Material.DARK_OAK_DOOR, Rarity.COMMON), - DARK_OAK_TRAPDOOR(Material.DARK_OAK_TRAPDOOR, Rarity.COMMON), - DARK_OAK_PRESSURE_PLATE(Material.DARK_OAK_PRESSURE_PLATE, Rarity.COMMON), - DARK_OAK_BUTTON(Material.DARK_OAK_BUTTON, Rarity.COMMON), - DARK_OAK_BOAT(Material.DARK_OAK_BOAT, Rarity.COMMON), - DARK_OAK_CHEST_BOAT(Material.DARK_OAK_CHEST_BOAT, Rarity.COMMON), - DARK_OAK_SIGN(Material.DARK_OAK_SIGN, Rarity.COMMON), - DARK_OAK_HANGING_SIGN(Material.DARK_OAK_HANGING_SIGN, Rarity.COMMON), - - JUNGLE_LOG(Material.JUNGLE_LOG, Rarity.COMMON), - STRIPPED_JUNGLE_LOG(Material.STRIPPED_JUNGLE_LOG, Rarity.COMMON), - JUNGLE_WOOD(Material.JUNGLE_WOOD, Rarity.COMMON), - STRIPPED_JUNGLE_WOOD(Material.STRIPPED_JUNGLE_WOOD, Rarity.COMMON), - JUNGLE_PLANKS(Material.JUNGLE_PLANKS, Rarity.COMMON), - JUNGLE_SLAB(Material.JUNGLE_SLAB, Rarity.COMMON), - JUNGLE_STAIRS(Material.JUNGLE_STAIRS, Rarity.COMMON), - JUNGLE_FENCE(Material.JUNGLE_FENCE, Rarity.COMMON), - JUNGLE_FENCE_GATE(Material.JUNGLE_FENCE_GATE, Rarity.COMMON), - JUNGLE_DOOR(Material.JUNGLE_DOOR, Rarity.COMMON), - JUNGLE_TRAPDOOR(Material.JUNGLE_TRAPDOOR, Rarity.COMMON), - JUNGLE_PRESSURE_PLATE(Material.JUNGLE_PRESSURE_PLATE, Rarity.COMMON), - JUNGLE_BUTTON(Material.JUNGLE_BUTTON, Rarity.COMMON), - JUNGLE_BOAT(Material.JUNGLE_BOAT, Rarity.COMMON), - JUNGLE_CHEST_BOAT(Material.JUNGLE_CHEST_BOAT, Rarity.COMMON), - JUNGLE_SIGN(Material.JUNGLE_SIGN, Rarity.COMMON), - JUNGLE_HANGING_SIGN(Material.JUNGLE_HANGING_SIGN, Rarity.COMMON), - - SPRUCE_LOG(Material.SPRUCE_LOG, Rarity.COMMON), - STRIPPED_SPRUCE_LOG(Material.STRIPPED_SPRUCE_LOG, Rarity.COMMON), - SPRUCE_WOOD(Material.SPRUCE_WOOD, Rarity.COMMON), - STRIPPED_SPRUCE_WOOD(Material.STRIPPED_SPRUCE_WOOD, Rarity.COMMON), - SPRUCE_PLANKS(Material.SPRUCE_PLANKS, Rarity.COMMON), - SPRUCE_SLAB(Material.SPRUCE_SLAB, Rarity.COMMON), - SPRUCE_STAIRS(Material.SPRUCE_STAIRS, Rarity.COMMON), - SPRUCE_FENCE(Material.SPRUCE_FENCE, Rarity.COMMON), - SPRUCE_FENCE_GATE(Material.SPRUCE_FENCE_GATE, Rarity.COMMON), - SPRUCE_DOOR(Material.SPRUCE_DOOR, Rarity.COMMON), - SPRUCE_TRAPDOOR(Material.SPRUCE_TRAPDOOR, Rarity.COMMON), - SPRUCE_PRESSURE_PLATE(Material.SPRUCE_PRESSURE_PLATE, Rarity.COMMON), - SPRUCE_BUTTON(Material.SPRUCE_BUTTON, Rarity.COMMON), - SPRUCE_BOAT(Material.SPRUCE_BOAT, Rarity.COMMON), - SPRUCE_CHEST_BOAT(Material.SPRUCE_CHEST_BOAT, Rarity.COMMON), - SPRUCE_SIGN(Material.SPRUCE_SIGN, Rarity.COMMON), - SPRUCE_HANGING_SIGN(Material.SPRUCE_HANGING_SIGN, Rarity.COMMON), - - BAMBOO_BLOCK(Material.BAMBOO_BLOCK, Rarity.COMMON), - STRIPPED_BAMBOO_BLOCK(Material.STRIPPED_BAMBOO_BLOCK, Rarity.COMMON), - BAMBOO_PLANKS(Material.BAMBOO_PLANKS, Rarity.COMMON), - BAMBOO_MOSAIC(Material.BAMBOO_MOSAIC, Rarity.COMMON), - BAMBOO_SLAB(Material.BAMBOO_SLAB, Rarity.COMMON), - BAMBOO_MOSAIC_SLAB(Material.BAMBOO_MOSAIC_SLAB, Rarity.COMMON), - BAMBOO_STAIRS(Material.BAMBOO_STAIRS, Rarity.COMMON), - BAMBOO_MOSAIC_STAIRS(Material.BAMBOO_MOSAIC_STAIRS, Rarity.COMMON), - BAMBOO_FENCE(Material.BAMBOO_FENCE, Rarity.COMMON), - BAMBOO_FENCE_GATE(Material.BAMBOO_FENCE_GATE, Rarity.COMMON), - BAMBOO_DOOR(Material.BAMBOO_DOOR, Rarity.COMMON), - BAMBOO_TRAPDOOR(Material.BAMBOO_TRAPDOOR, Rarity.COMMON), - BAMBOO_PRESSURE_PLATE(Material.BAMBOO_PRESSURE_PLATE, Rarity.COMMON), - BAMBOO_BUTTON(Material.BAMBOO_BUTTON, Rarity.COMMON), - BAMBOO_RAFT(Material.BAMBOO_RAFT, Rarity.COMMON), - BAMBOO_CHEST_RAFT(Material.BAMBOO_CHEST_RAFT, Rarity.COMMON), - BAMBOO_SIGN(Material.BAMBOO_SIGN, Rarity.COMMON), - BAMBOO_HANGING_SIGN(Material.BAMBOO_HANGING_SIGN, Rarity.COMMON), - - WARPED_STEM(Material.WARPED_STEM, Rarity.COMMON), - STRIPPED_WARPED_STEM(Material.STRIPPED_WARPED_STEM, Rarity.COMMON), - WARPED_HYPHAE(Material.WARPED_HYPHAE, Rarity.COMMON), - STRIPPED_WARPED_HYPHAE(Material.STRIPPED_WARPED_HYPHAE, Rarity.COMMON), - WARPED_PLANKS(Material.WARPED_PLANKS, Rarity.COMMON), - WARPED_SLAB(Material.WARPED_SLAB, Rarity.COMMON), - WARPED_STAIRS(Material.WARPED_STAIRS, Rarity.COMMON), - WARPED_FENCE(Material.WARPED_FENCE, Rarity.COMMON), - WARPED_FENCE_GATE(Material.WARPED_FENCE_GATE, Rarity.COMMON), - WARPED_DOOR(Material.WARPED_DOOR, Rarity.COMMON), - WARPED_TRAPDOOR(Material.WARPED_TRAPDOOR, Rarity.COMMON), - WARPED_PRESSURE_PLATE(Material.WARPED_PRESSURE_PLATE, Rarity.COMMON), - WARPED_BUTTON(Material.WARPED_BUTTON, Rarity.COMMON), - WARPED_SIGN(Material.WARPED_SIGN, Rarity.COMMON), - WARPED_HANGING_SIGN(Material.WARPED_HANGING_SIGN, Rarity.COMMON), - - CRIMSON_STEM(Material.CRIMSON_STEM, Rarity.COMMON), - STRIPPED_CRIMSON_STEM(Material.STRIPPED_CRIMSON_STEM, Rarity.COMMON), - CRIMSON_HYPHAE(Material.CRIMSON_HYPHAE, Rarity.COMMON), - STRIPPED_CRIMSON_HYPHAE(Material.STRIPPED_CRIMSON_HYPHAE, Rarity.COMMON), - CRIMSON_PLANKS(Material.CRIMSON_PLANKS, Rarity.COMMON), - CRIMSON_SLAB(Material.CRIMSON_SLAB, Rarity.COMMON), - CRIMSON_STAIRS(Material.CRIMSON_STAIRS, Rarity.COMMON), - CRIMSON_FENCE(Material.CRIMSON_FENCE, Rarity.COMMON), - CRIMSON_FENCE_GATE(Material.CRIMSON_FENCE_GATE, Rarity.COMMON), - CRIMSON_DOOR(Material.CRIMSON_DOOR, Rarity.COMMON), - CRIMSON_TRAPDOOR(Material.CRIMSON_TRAPDOOR, Rarity.COMMON), - CRIMSON_PRESSURE_PLATE(Material.CRIMSON_PRESSURE_PLATE, Rarity.COMMON), - CRIMSON_BUTTON(Material.CRIMSON_BUTTON, Rarity.COMMON), - CRIMSON_SIGN(Material.CRIMSON_SIGN, Rarity.COMMON), - CRIMSON_HANGING_SIGN(Material.CRIMSON_HANGING_SIGN, Rarity.COMMON), - - CHAIN(Material.CHAIN, Rarity.COMMON), - LADDER(Material.LADDER, Rarity.COMMON), - STONE(Material.STONE, Rarity.COMMON), - STONE_SLAB(Material.STONE_SLAB, Rarity.COMMON), - STONE_STAIRS(Material.STONE_STAIRS, Rarity.COMMON), - SMOOTH_STONE_SLAB(Material.SMOOTH_STONE_SLAB, Rarity.COMMON), - GRANITE(Material.GRANITE, Rarity.COMMON), - GRANITE_SLAB(Material.GRANITE_SLAB, Rarity.COMMON), - GRANITE_STAIRS(Material.GRANITE_STAIRS, Rarity.COMMON), - GRANITE_WALL(Material.GRANITE_WALL, Rarity.COMMON), - POLISHED_GRANITE(Material.POLISHED_GRANITE, Rarity.COMMON), - POLISHED_GRANITE_SLAB(Material.POLISHED_GRANITE_SLAB, Rarity.COMMON), - POLISHED_GRANITE_STAIRS(Material.POLISHED_GRANITE_STAIRS, Rarity.COMMON), - DIORITE(Material.DIORITE, Rarity.COMMON), - DIORITE_SLAB(Material.DIORITE_SLAB, Rarity.COMMON), - DIORITE_STAIRS(Material.DIORITE_STAIRS, Rarity.COMMON), - DIORITE_WALL(Material.DIORITE_WALL, Rarity.COMMON), - POLISHED_DIORITE(Material.POLISHED_DIORITE, Rarity.COMMON), - POLISHED_DIORITE_SLAB(Material.POLISHED_DIORITE_SLAB, Rarity.COMMON), - POLISHED_DIORITE_STAIRS(Material.POLISHED_DIORITE_STAIRS, Rarity.COMMON), - ANDESITE(Material.ANDESITE, Rarity.COMMON), - ANDESITE_SLAB(Material.ANDESITE_SLAB, Rarity.COMMON), - ANDESITE_STAIRS(Material.ANDESITE_STAIRS, Rarity.COMMON), - ANDESITE_WALL(Material.ANDESITE_WALL, Rarity.COMMON), - POLISHED_ANDESITE(Material.POLISHED_ANDESITE, Rarity.COMMON), - POLISHED_ANDESITE_SLAB(Material.POLISHED_ANDESITE_SLAB, Rarity.COMMON), - POLISHED_ANDESITE_STAIRS(Material.POLISHED_ANDESITE_STAIRS, Rarity.COMMON), - COBBLESTONE(Material.COBBLESTONE, Rarity.COMMON), - COBBLESTONE_SLAB(Material.COBBLESTONE_SLAB, Rarity.COMMON), - COBBLESTONE_STAIRS(Material.COBBLESTONE_STAIRS, Rarity.COMMON), - COBBLESTONE_WALL(Material.COBBLESTONE_WALL, Rarity.COMMON), - SANDSTONE(Material.SANDSTONE, Rarity.COMMON), - SANDSTONE_SLAB(Material.SANDSTONE_SLAB, Rarity.COMMON), - SANDSTONE_WALL(Material.SANDSTONE_WALL, Rarity.COMMON), - CUT_SANDSTONE(Material.CUT_SANDSTONE, Rarity.COMMON), - CUT_SANDSTONE_SLAB(Material.CUT_SANDSTONE_SLAB, Rarity.COMMON), - CHISELED_SANDSTONE(Material.CHISELED_SANDSTONE, Rarity.COMMON), - RED_SANDSTONE(Material.RED_SANDSTONE, Rarity.COMMON), - RED_SANDSTONE_SLAB(Material.RED_SANDSTONE_SLAB, Rarity.COMMON), - RED_SANDSTONE_STAIRS(Material.RED_SANDSTONE_STAIRS, Rarity.COMMON), - RED_SANDSTONE_WALL(Material.RED_SANDSTONE_WALL, Rarity.COMMON), - CUT_RED_SANDSTONE(Material.CUT_RED_SANDSTONE, Rarity.COMMON), - CUT_RED_SANDSTONE_SLAB(Material.CUT_RED_SANDSTONE_SLAB, Rarity.COMMON), - CHISELED_RED_SANDSTONE(Material.CHISELED_RED_SANDSTONE, Rarity.COMMON), - STONE_BRICKS(Material.STONE_BRICKS, Rarity.COMMON), - STONE_BRICK_SLAB(Material.STONE_BRICK_SLAB, Rarity.COMMON), - STONE_BRICK_STAIRS(Material.STONE_BRICK_STAIRS, Rarity.COMMON), - STONE_BRICK_WALL(Material.STONE_BRICK_WALL, Rarity.COMMON), - MOSSY_COBBLESTONE(Material.MOSSY_COBBLESTONE, Rarity.COMMON), - MOSSY_COBBLESTONE_SLAB(Material.MOSSY_COBBLESTONE_SLAB, Rarity.COMMON), - MOSSY_COBBLESTONE_STAIRS(Material.MOSSY_COBBLESTONE_STAIRS, Rarity.COMMON), - MOSSY_COBBLESTONE_WALL(Material.MOSSY_COBBLESTONE_WALL, Rarity.COMMON), - MOSSY_STONE_BRICKS(Material.MOSSY_STONE_BRICKS, Rarity.COMMON), - MOSSY_STONE_BRICK_SLAB(Material.MOSSY_STONE_BRICK_SLAB, Rarity.COMMON), - MOSSY_STONE_BRICK_STAIRS(Material.MOSSY_STONE_BRICK_STAIRS, Rarity.COMMON), - MOSSY_STONE_BRICK_WALL(Material.MOSSY_STONE_BRICK_WALL, Rarity.COMMON), - QUARTZ_BLOCK(Material.QUARTZ_BLOCK, Rarity.COMMON), - QUARTZ_SLAB(Material.QUARTZ_SLAB, Rarity.COMMON), - QUARTZ_STAIRS(Material.QUARTZ_STAIRS, Rarity.COMMON), - QUARTZ_PILLAR(Material.QUARTZ_PILLAR, Rarity.COMMON), - CHISELED_QUARTZ_BLOCK(Material.CHISELED_QUARTZ_BLOCK, Rarity.COMMON), - NETHER_BRICK_SLAB(Material.NETHER_BRICK_SLAB, Rarity.COMMON), - NETHER_BRICK_STAIRS(Material.NETHER_BRICK_STAIRS, Rarity.COMMON), - NETHER_BRICK_WALL(Material.NETHER_BRICK_WALL, Rarity.COMMON), - NETHER_BRICK_FENCE(Material.NETHER_BRICK_FENCE, Rarity.COMMON), - HONEYCOMB(Material.HONEYCOMB, Rarity.COMMON), - - WHITE_DYE(Material.WHITE_DYE, Rarity.COMMON), - ORANGE_DYE(Material.ORANGE_DYE, Rarity.COMMON), - MAGENTA_DYE(Material.MAGENTA_DYE, Rarity.COMMON), - LIGHT_BLUE_DYE(Material.LIGHT_BLUE_DYE, Rarity.COMMON), - YELLOW_DYE(Material.YELLOW_DYE, Rarity.COMMON), - LIME_DYE(Material.LIME_DYE, Rarity.COMMON), - PINK_DYE(Material.PINK_DYE, Rarity.COMMON), - GRAY_DYE(Material.GRAY_DYE, Rarity.COMMON), - LIGHT_GRAY_DYE(Material.LIGHT_GRAY_DYE, Rarity.COMMON), - CYAN_DYE(Material.CYAN_DYE, Rarity.COMMON), - PURPLE_DYE(Material.PURPLE_DYE, Rarity.COMMON), - BLUE_DYE(Material.BLUE_DYE, Rarity.COMMON), - BROWN_DYE(Material.BROWN_DYE, Rarity.COMMON), - RED_DYE(Material.RED_DYE, Rarity.COMMON), - BLACK_DYE(Material.BLACK_DYE, Rarity.COMMON), - GREEN_DYE(Material.GREEN_DYE, Rarity.COMMON), - - WHITE_WOOL(Material.WHITE_WOOL, Rarity.COMMON), - ORANGE_WOOL(Material.ORANGE_WOOL, Rarity.COMMON), - MAGENTA_WOOL(Material.MAGENTA_WOOL, Rarity.COMMON), - LIGHT_BLUE_WOOL(Material.LIGHT_BLUE_WOOL, Rarity.COMMON), - YELLOW_WOOL(Material.YELLOW_WOOL, Rarity.COMMON), - LIME_WOOL(Material.LIME_WOOL, Rarity.COMMON), - PINK_WOOL(Material.PINK_WOOL, Rarity.COMMON), - GRAY_WOOL(Material.GRAY_WOOL, Rarity.COMMON), - LIGHT_GRAY_WOOL(Material.LIGHT_GRAY_WOOL, Rarity.COMMON), - CYAN_WOOL(Material.CYAN_WOOL, Rarity.COMMON), - PURPLE_WOOL(Material.PURPLE_WOOL, Rarity.COMMON), - BLUE_WOOL(Material.BLUE_WOOL, Rarity.COMMON), - BROWN_WOOL(Material.BROWN_WOOL, Rarity.COMMON), - GREEN_WOOL(Material.GREEN_WOOL, Rarity.COMMON), - RED_WOOL(Material.RED_WOOL, Rarity.COMMON), - BLACK_WOOL(Material.BLACK_WOOL, Rarity.COMMON), - - WHITE_CARPET(Material.WHITE_CARPET, Rarity.COMMON), - ORANGE_CARPET(Material.ORANGE_CARPET, Rarity.COMMON), - MAGENTA_CARPET(Material.MAGENTA_CARPET, Rarity.COMMON), - LIGHT_BLUE_CARPET(Material.LIGHT_BLUE_CARPET, Rarity.COMMON), - YELLOW_CARPET(Material.YELLOW_CARPET, Rarity.COMMON), - LIME_CARPET(Material.LIME_CARPET, Rarity.COMMON), - PINK_CARPET(Material.PINK_CARPET, Rarity.COMMON), - GRAY_CARPET(Material.GRAY_CARPET, Rarity.COMMON), - LIGHT_GRAY_CARPET(Material.LIGHT_GRAY_CARPET, Rarity.COMMON), - CYAN_CARPET(Material.CYAN_CARPET, Rarity.COMMON), - PURPLE_CARPET(Material.PURPLE_CARPET, Rarity.COMMON), - BLUE_CARPET(Material.BLUE_CARPET, Rarity.COMMON), - BROWN_CARPET(Material.BROWN_CARPET, Rarity.COMMON), - GREEN_CARPET(Material.GREEN_CARPET, Rarity.COMMON), - RED_CARPET(Material.RED_CARPET, Rarity.COMMON), - BLACK_CARPET(Material.BLACK_CARPET, Rarity.COMMON), - - WHITE_BED(Material.WHITE_BED, Rarity.COMMON), - ORANGE_BED(Material.ORANGE_BED, Rarity.COMMON), - MAGENTA_BED(Material.MAGENTA_BED, Rarity.COMMON), - LIGHT_BLUE_BED(Material.LIGHT_BLUE_BED, Rarity.COMMON), - YELLOW_BED(Material.YELLOW_BED, Rarity.COMMON), - LIME_BED(Material.LIME_BED, Rarity.COMMON), - PINK_BED(Material.PINK_BED, Rarity.COMMON), - GRAY_BED(Material.GRAY_BED, Rarity.COMMON), - LIGHT_GRAY_BED(Material.LIGHT_GRAY_BED, Rarity.COMMON), - CYAN_BED(Material.CYAN_BED, Rarity.COMMON), - PURPLE_BED(Material.PURPLE_BED, Rarity.COMMON), - BLUE_BED(Material.BLUE_BED, Rarity.COMMON), - BROWN_BED(Material.BROWN_BED, Rarity.COMMON), - GREEN_BED(Material.GREEN_BED, Rarity.COMMON), - RED_BED(Material.RED_BED, Rarity.COMMON), - BLACK_BED(Material.BLACK_BED, Rarity.COMMON), - - WHITE_BANNER(Material.WHITE_BANNER, Rarity.COMMON), - ORANGE_BANNER(Material.ORANGE_BANNER, Rarity.COMMON), - MAGENTA_BANNER(Material.MAGENTA_BANNER, Rarity.COMMON), - LIGHT_BLUE_BANNER(Material.LIGHT_BLUE_BANNER, Rarity.COMMON), - YELLOW_BANNER(Material.YELLOW_BANNER, Rarity.COMMON), - LIME_BANNER(Material.LIME_BANNER, Rarity.COMMON), - PINK_BANNER(Material.PINK_BANNER, Rarity.COMMON), - GRAY_BANNER(Material.GRAY_BANNER, Rarity.COMMON), - LIGHT_GRAY_BANNER(Material.LIGHT_GRAY_BANNER, Rarity.COMMON), - CYAN_BANNER(Material.CYAN_BANNER, Rarity.COMMON), - PURPLE_BANNER(Material.PURPLE_BANNER, Rarity.COMMON), - BLUE_BANNER(Material.BLUE_BANNER, Rarity.COMMON), - BROWN_BANNER(Material.BROWN_BANNER, Rarity.COMMON), - GREEN_BANNER(Material.GREEN_BANNER, Rarity.COMMON), - RED_BANNER(Material.RED_BANNER, Rarity.COMMON), - BLACK_BANNER(Material.BLACK_BANNER, Rarity.COMMON), - - CANDLE(Material.CANDLE, Rarity.COMMON), - WHITE_CANDLE(Material.WHITE_CANDLE, Rarity.COMMON), - ORANGE_CANDLE(Material.ORANGE_CANDLE, Rarity.COMMON), - MAGENTA_CANDLE(Material.MAGENTA_CANDLE, Rarity.COMMON), - LIGHT_BLUE_CANDLE(Material.LIGHT_BLUE_CANDLE, Rarity.COMMON), - YELLOW_CANDLE(Material.YELLOW_CANDLE, Rarity.COMMON), - LIME_CANDLE(Material.LIME_CANDLE, Rarity.COMMON), - PINK_CANDLE(Material.PINK_CANDLE, Rarity.COMMON), - GRAY_CANDLE(Material.GRAY_CANDLE, Rarity.COMMON), - LIGHT_GRAY_CANDLE(Material.LIGHT_GRAY_CANDLE, Rarity.COMMON), - CYAN_CANDLE(Material.CYAN_CANDLE, Rarity.COMMON), - PURPLE_CANDLE(Material.PURPLE_CANDLE, Rarity.COMMON), - BLUE_CANDLE(Material.BLUE_CANDLE, Rarity.COMMON), - BROWN_CANDLE(Material.BROWN_CANDLE, Rarity.COMMON), - GREEN_CANDLE(Material.GREEN_CANDLE, Rarity.COMMON), - RED_CANDLE(Material.RED_CANDLE, Rarity.COMMON), - BLACK_CANDLE(Material.BLACK_CANDLE, Rarity.COMMON), - - GLASS(Material.GLASS, Rarity.COMMON), - WHITE_STAINED_GLASS(Material.WHITE_STAINED_GLASS, Rarity.COMMON), - ORANGE_STAINED_GLASS(Material.ORANGE_STAINED_GLASS, Rarity.COMMON), - MAGENTA_STAINED_GLASS(Material.MAGENTA_STAINED_GLASS, Rarity.COMMON), - LIGHT_BLUE_STAINED_GLASS(Material.LIGHT_BLUE_STAINED_GLASS, Rarity.COMMON), - YELLOW_STAINED_GLASS(Material.YELLOW_STAINED_GLASS, Rarity.COMMON), - LIME_STAINED_GLASS(Material.LIME_STAINED_GLASS, Rarity.COMMON), - PINK_STAINED_GLASS(Material.PINK_STAINED_GLASS, Rarity.COMMON), - GRAY_STAINED_GLASS(Material.GRAY_STAINED_GLASS, Rarity.COMMON), - LIGHT_GRAY_STAINED_GLASS(Material.LIGHT_GRAY_STAINED_GLASS, Rarity.COMMON), - CYAN_STAINED_GLASS(Material.CYAN_STAINED_GLASS, Rarity.COMMON), - PURPLE_STAINED_GLASS(Material.PURPLE_STAINED_GLASS, Rarity.COMMON), - BLUE_STAINED_GLASS(Material.BLUE_STAINED_GLASS, Rarity.COMMON), - BROWN_STAINED_GLASS(Material.BROWN_STAINED_GLASS, Rarity.COMMON), - GREEN_STAINED_GLASS(Material.GREEN_STAINED_GLASS, Rarity.COMMON), - RED_STAINED_GLASS(Material.RED_STAINED_GLASS, Rarity.COMMON), - BLACK_STAINED_GLASS(Material.BLACK_STAINED_GLASS, Rarity.COMMON), - - GLASS_PANE(Material.GLASS_PANE, Rarity.COMMON), - WHITE_STAINED_GLASS_PANE(Material.WHITE_STAINED_GLASS_PANE, Rarity.COMMON), - ORANGE_STAINED_GLASS_PANE(Material.ORANGE_STAINED_GLASS_PANE, Rarity.COMMON), - MAGENTA_STAINED_GLASS_PANE(Material.MAGENTA_STAINED_GLASS_PANE, Rarity.COMMON), - LIGHT_BLUE_STAINED_GLASS_PANE(Material.LIGHT_BLUE_STAINED_GLASS_PANE, Rarity.COMMON), - YELLOW_STAINED_GLASS_PANE(Material.YELLOW_STAINED_GLASS_PANE, Rarity.COMMON), - LIME_STAINED_GLASS_PANE(Material.LIME_STAINED_GLASS_PANE, Rarity.COMMON), - PINK_STAINED_GLASS_PANE(Material.PINK_STAINED_GLASS_PANE, Rarity.COMMON), - GRAY_STAINED_GLASS_PANE(Material.GRAY_STAINED_GLASS_PANE, Rarity.COMMON), - LIGHT_GRAY_STAINED_GLASS_PANE(Material.LIGHT_GRAY_STAINED_GLASS_PANE, Rarity.COMMON), - CYAN_STAINED_GLASS_PANE(Material.CYAN_STAINED_GLASS_PANE, Rarity.COMMON), - PURPLE_STAINED_GLASS_PANE(Material.PURPLE_STAINED_GLASS_PANE, Rarity.COMMON), - BLUE_STAINED_GLASS_PANE(Material.BLUE_STAINED_GLASS_PANE, Rarity.COMMON), - BROWN_STAINED_GLASS_PANE(Material.BROWN_STAINED_GLASS_PANE, Rarity.COMMON), - GREEN_STAINED_GLASS_PANE(Material.GREEN_STAINED_GLASS_PANE, Rarity.COMMON), - RED_STAINED_GLASS_PANE(Material.RED_STAINED_GLASS_PANE, Rarity.COMMON), - BLACK_STAINED_GLASS_PANE(Material.BLACK_STAINED_GLASS_PANE, Rarity.COMMON), - - TERRACOTTA(Material.TERRACOTTA, Rarity.COMMON), - WHITE_TERRACOTTA(Material.WHITE_TERRACOTTA, Rarity.COMMON), - ORANGE_TERRACOTTA(Material.ORANGE_TERRACOTTA, Rarity.COMMON), - MAGENTA_TERRACOTTA(Material.MAGENTA_TERRACOTTA, Rarity.COMMON), - LIGHT_BLUE_TERRACOTTA(Material.LIGHT_BLUE_TERRACOTTA, Rarity.COMMON), - YELLOW_TERRACOTTA(Material.YELLOW_TERRACOTTA, Rarity.COMMON), - LIME_TERRACOTTA(Material.LIME_TERRACOTTA, Rarity.COMMON), - PINK_TERRACOTTA(Material.PINK_TERRACOTTA, Rarity.COMMON), - GRAY_TERRACOTTA(Material.GRAY_TERRACOTTA, Rarity.COMMON), - LIGHT_GRAY_TERRACOTTA(Material.LIGHT_GRAY_TERRACOTTA, Rarity.COMMON), - CYAN_TERRACOTTA(Material.CYAN_TERRACOTTA, Rarity.COMMON), - PURPLE_TERRACOTTA(Material.PURPLE_TERRACOTTA, Rarity.COMMON), - BLUE_TERRACOTTA(Material.BLUE_TERRACOTTA, Rarity.COMMON), - BROWN_TERRACOTTA(Material.BROWN_TERRACOTTA, Rarity.COMMON), - GREEN_TERRACOTTA(Material.GREEN_TERRACOTTA, Rarity.COMMON), - RED_TERRACOTTA(Material.RED_TERRACOTTA, Rarity.COMMON), - BLACK_TERRACOTTA(Material.BLACK_TERRACOTTA, Rarity.COMMON), - - WHITE_GLAZED_TERRACOTTA(Material.WHITE_GLAZED_TERRACOTTA, Rarity.COMMON), - ORANGE_GLAZED_TERRACOTTA(Material.ORANGE_GLAZED_TERRACOTTA, Rarity.COMMON), - MAGENTA_GLAZED_TERRACOTTA(Material.MAGENTA_GLAZED_TERRACOTTA, Rarity.COMMON), - LIGHT_BLUE_GLAZED_TERRACOTTA(Material.LIGHT_BLUE_GLAZED_TERRACOTTA, Rarity.COMMON), - YELLOW_GLAZED_TERRACOTTA(Material.YELLOW_GLAZED_TERRACOTTA, Rarity.COMMON), - LIME_GLAZED_TERRACOTTA(Material.LIME_GLAZED_TERRACOTTA, Rarity.COMMON), - PINK_GLAZED_TERRACOTTA(Material.PINK_GLAZED_TERRACOTTA, Rarity.COMMON), - GRAY_GLAZED_TERRACOTTA(Material.GRAY_GLAZED_TERRACOTTA, Rarity.COMMON), - LIGHT_GRAY_GLAZED_TERRACOTTA(Material.LIGHT_GRAY_GLAZED_TERRACOTTA, Rarity.COMMON), - CYAN_GLAZED_TERRACOTTA(Material.CYAN_GLAZED_TERRACOTTA, Rarity.COMMON), - PURPLE_GLAZED_TERRACOTTA(Material.PURPLE_GLAZED_TERRACOTTA, Rarity.COMMON), - BLUE_GLAZED_TERRACOTTA(Material.BLUE_GLAZED_TERRACOTTA, Rarity.COMMON), - BROWN_GLAZED_TERRACOTTA(Material.BROWN_GLAZED_TERRACOTTA, Rarity.COMMON), - GREEN_GLAZED_TERRACOTTA(Material.GREEN_GLAZED_TERRACOTTA, Rarity.COMMON), - RED_GLAZED_TERRACOTTA(Material.RED_GLAZED_TERRACOTTA, Rarity.COMMON), - BLACK_GLAZED_TERRACOTTA(Material.BLACK_GLAZED_TERRACOTTA, Rarity.COMMON), - - WITHER_ROSE(Material.WITHER_ROSE, Rarity.COMMON), - CORNFLOWER(Material.CORNFLOWER, Rarity.COMMON), - LILY_OF_THE_VALLEY(Material.LILY_OF_THE_VALLEY, Rarity.COMMON), - SUNFLOWER(Material.SUNFLOWER, Rarity.COMMON), - BEETROOT(Material.BEETROOT, Rarity.COMMON), - RED_TULIP(Material.RED_TULIP, Rarity.COMMON), - ORANGE_TULIP(Material.ORANGE_TULIP, Rarity.COMMON), - PINK_TULIP(Material.PINK_TULIP, Rarity.COMMON), - WHITE_TULIP(Material.WHITE_TULIP, Rarity.COMMON), - ROSE_BUSH(Material.ROSE_BUSH, Rarity.COMMON), - TORCHFLOWER(Material.TORCHFLOWER, Rarity.COMMON), - PITCHER_PLANT(Material.PITCHER_PLANT, Rarity.COMMON), - BLUE_ORCHID(Material.BLUE_ORCHID, Rarity.COMMON), - PEONY(Material.PEONY, Rarity.COMMON), - PINK_PETALS(Material.PINK_PETALS, Rarity.COMMON), - LILAC(Material.LILAC, Rarity.COMMON), - ALLIUM(Material.ALLIUM, Rarity.COMMON), - AZURE_BLUET(Material.AZURE_BLUET, Rarity.COMMON), - OXEYE_DAISY(Material.OXEYE_DAISY, Rarity.COMMON), - - BREWING_STAND(Material.BREWING_STAND, Rarity.COMMON), - ENCHANTING_TABLE(Material.ENCHANTING_TABLE, Rarity.COMMON), - FURNACE(Material.FURNACE, Rarity.COMMON), - REDSTONE_TORCH(Material.REDSTONE_TORCH, Rarity.COMMON), - REPEATER(Material.REPEATER, Rarity.COMMON), - COMPARATOR(Material.COMPARATOR, Rarity.COMMON), - LEVER(Material.LEVER, Rarity.COMMON), - STONE_BUTTON(Material.STONE_BUTTON, Rarity.COMMON), - STONE_PRESSURE_PLATE(Material.STONE_PRESSURE_PLATE, Rarity.COMMON), - LIGHT_WEIGHTED_PRESSURE_PLATE(Material.LIGHT_WEIGHTED_PRESSURE_PLATE, Rarity.COMMON), - HEAVY_WEIGHTED_PRESSURE_PLATE(Material.HEAVY_WEIGHTED_PRESSURE_PLATE, Rarity.COMMON), - TRIPWIRE_HOOK(Material.TRIPWIRE_HOOK, Rarity.COMMON), - PISTON(Material.PISTON, Rarity.COMMON), - STICKY_PISTON(Material.STICKY_PISTON, Rarity.COMMON), - DISPENSER(Material.DISPENSER, Rarity.COMMON), - DROPPER(Material.DROPPER, Rarity.COMMON), - HOPPER(Material.HOPPER, Rarity.COMMON), - NOTE_BLOCK(Material.NOTE_BLOCK, Rarity.COMMON), - RAIL(Material.RAIL, Rarity.COMMON), - ACTIVATOR_RAIL(Material.ACTIVATOR_RAIL, Rarity.COMMON), - DETECTOR_RAIL(Material.DETECTOR_RAIL, Rarity.COMMON), - POWERED_RAIL(Material.POWERED_RAIL, Rarity.COMMON), - TNT(Material.TNT, Rarity.COMMON), - DAYLIGHT_DETECTOR(Material.DAYLIGHT_DETECTOR, Rarity.COMMON), - JUKEBOX(Material.JUKEBOX, Rarity.COMMON), - MINECART(Material.MINECART, Rarity.COMMON), - CHEST_MINECART(Material.CHEST_MINECART, Rarity.COMMON), - HOPPER_MINECART(Material.HOPPER_MINECART, Rarity.COMMON), - TNT_MINECART(Material.TNT_MINECART, Rarity.COMMON), - FURNACE_MINECART(Material.FURNACE_MINECART, Rarity.COMMON), - - /** - * Enchanted Items - */ - ENCHANTED_ACACIA_LOG(Material.ACACIA_LOG, Rarity.UNCOMMON), - ENCHANTED_BAKED_POTATO(Material.BAKED_POTATO, Rarity.UNCOMMON), - ENCHANTED_BIRCH_LOG(Material.BIRCH_LOG, Rarity.UNCOMMON), - ENCHANTED_SLIMEBALL(Material.SLIME_BALL, Rarity.UNCOMMON), - ENCHANTED_BLAZE_ROD(Material.BLAZE_ROD, Rarity.UNCOMMON), - ENCHANTED_BLAZE_POWDER(Material.BLAZE_POWDER, Rarity.UNCOMMON), - ENCHANTED_BONE(Material.BONE, Rarity.UNCOMMON), - ENCHANTED_CARROT(Material.CARROT, Rarity.UNCOMMON), - ENCHANTED_CHARCOAL(Material.CHARCOAL, Rarity.UNCOMMON), - ENCHANTED_COAL(Material.COAL, Rarity.UNCOMMON), - ENCHANTED_COBBLESTONE(Material.COBBLESTONE, Rarity.UNCOMMON), - ENCHANTED_COCOA_BEANS(Material.COCOA_BEANS, Rarity.UNCOMMON), - ENCHANTED_DARK_OAK_LOG(Material.DARK_OAK_LOG, Rarity.UNCOMMON), - ENCHANTED_DIAMOND(Material.DIAMOND, Rarity.UNCOMMON), - ENCHANTED_EGG(Material.EGG, Rarity.UNCOMMON), - SUPER_ENCHANTED_EGG(Material.POLAR_BEAR_SPAWN_EGG, Rarity.RARE), - OMEGA_ENCHANTED_EGG(Material.ENDERMITE_SPAWN_EGG, Rarity.EPIC), - ENCHANTED_EMERALD(Material.EMERALD, Rarity.UNCOMMON), - ENCHANTED_ENDER_PEARL(Material.ENDER_PEARL, Rarity.UNCOMMON), - ENCHANTED_DIAMOND_BLOCK(Material.DIAMOND_BLOCK, Rarity.RARE), - ENCHANTED_EMERALD_BLOCK(Material.EMERALD_BLOCK, Rarity.UNCOMMON), - ENCHANTED_GOLD_INGOT(Material.GOLD_INGOT, Rarity.UNCOMMON), - ENCHANTED_GOLD_BLOCK(Material.GOLD_BLOCK, Rarity.RARE), - ENCHANTED_JUNGLE_LOG(Material.JUNGLE_LOG, Rarity.UNCOMMON), - ENCHANTED_GUNPOWDER(Material.GUNPOWDER, Rarity.UNCOMMON), - ENCHANTED_IRON_BLOCK(Material.IRON_BLOCK, Rarity.RARE), - ENCHANTED_LEATHER(Material.LEATHER, Rarity.UNCOMMON), - ENCHANTED_OAK_LOG(Material.OAK_LOG, Rarity.UNCOMMON), - ENCHANTED_OBSIDIAN(Material.OBSIDIAN, Rarity.UNCOMMON), - ENCHANTED_PACKED_ICE(Material.PACKED_ICE, Rarity.UNCOMMON), - ENCHANTED_POTATO(Material.POTATO, Rarity.UNCOMMON), - ENCHANTED_PUMPKIN(Material.PUMPKIN, Rarity.UNCOMMON), - ENCHANTED_REDSTONE(Material.REDSTONE, Rarity.UNCOMMON), - ENCHANTED_REDSTONE_BLOCK(Material.REDSTONE_BLOCK, Rarity.RARE), - ENCHANTED_ROTTEN_FLESH(Material.ROTTEN_FLESH, Rarity.UNCOMMON), - ENCHANTED_SPONGE(Material.SPONGE, Rarity.UNCOMMON), - ENCHANTED_SPRUCE_LOG(Material.SPRUCE_LOG, Rarity.UNCOMMON), - ENCHANTED_STRING(Material.STRING, Rarity.UNCOMMON), - ENCHANTED_SUGAR(Material.SUGAR, Rarity.UNCOMMON), - ENCHANTED_SNOW_BLOCK(Material.SNOW_BLOCK, Rarity.UNCOMMON), - ENCHANTED_BROWN_MUSHROOM(Material.BROWN_MUSHROOM, Rarity.UNCOMMON), - ENCHANTED_RED_MUSHROOM(Material.RED_MUSHROOM, Rarity.UNCOMMON), - ENCHANTED_CACTUS_GREEN(Material.GREEN_DYE, Rarity.UNCOMMON), - ENCHANTED_CACTUS(Material.CACTUS, Rarity.RARE), - ENCHANTED_END_STONE(Material.END_STONE, Rarity.UNCOMMON), - ENCHANTED_EYE_OF_ENDER(Material.ENDER_EYE, Rarity.UNCOMMON), - ENCHANTED_ICE(Material.ICE, Rarity.UNCOMMON), - ENCHANTED_MAGMA_CREAM(Material.MAGMA_CREAM, Rarity.UNCOMMON), - ENCHANTED_BROWN_MUSHROOM_BLOCK(Material.BROWN_MUSHROOM_BLOCK, Rarity.RARE), - ENCHANTED_CLAY(Material.CLAY_BALL, Rarity.UNCOMMON), - ENCHANTED_CLOWNFISH(Material.TROPICAL_FISH, Rarity.UNCOMMON), - ENCHANTED_COD(Material.COD, Rarity.UNCOMMON), - ENCHANTED_COOKED_COD(Material.COOKED_COD, Rarity.RARE), - ENCHANTED_MUTTON(Material.MUTTON, Rarity.UNCOMMON), - ENCHANTED_COOKED_MUTTON(Material.COOKED_MUTTON, Rarity.RARE), - ENCHANTED_RAW_SALMON(Material.SALMON, Rarity.UNCOMMON), - ENCHANTED_COOKED_SALMON(Material.COOKED_SALMON, Rarity.UNCOMMON), - ENCHANTED_COOKIE(Material.COOKIE, Rarity.RARE), - ENCHANTED_DANDELION(Material.DANDELION, Rarity.UNCOMMON), - ENCHANTED_FEATHER(Material.FEATHER, Rarity.UNCOMMON), - ENCHANTED_SPIDER_EYE(Material.SPIDER_EYE, Rarity.UNCOMMON), - ENCHANTED_FERMENTED_SPIDER_EYE(Material.FERMENTED_SPIDER_EYE, Rarity.UNCOMMON), - ENCHANTED_FIREWORK_ROCKET(Material.FIREWORK_ROCKET, Rarity.RARE), - ENCHANTED_FLINT(Material.FLINT, Rarity.UNCOMMON), - ENCHANTED_GHAST_TEAR(Material.GHAST_TEAR, Rarity.UNCOMMON), - ENCHANTED_GLISTERING_MELON(Material.GLISTERING_MELON_SLICE, Rarity.RARE), - ENCHANTED_GLOWSTONE_DUST(Material.GLOWSTONE_DUST, Rarity.UNCOMMON), - ENCHANTED_GLOWSTONE(Material.GLOWSTONE, Rarity.UNCOMMON), - ENCHANTED_GOLDEN_CARROT(Material.GOLDEN_CARROT, Rarity.UNCOMMON), - ENCHANTED_PORK(Material.PORKCHOP, Rarity.UNCOMMON), - ENCHANTED_GRILLED_PORK(Material.COOKED_PORKCHOP, Rarity.RARE), - ENCHANTED_HAY_BALE(Material.HAY_BLOCK, Rarity.UNCOMMON), - ENCHANTED_ANCIENT_CLAW(Material.FLINT, Rarity.EPIC), - ENCHANTED_COAL_BLOCK(Material.COAL_BLOCK, Rarity.RARE), - ENCHANTED_BONE_BLOCK(Material.BONE_BLOCK, Rarity.RARE), - ENCHANTED_BREAD(Material.BREAD, Rarity.COMMON), - ENCHANTED_RED_MUSHROOM_BLOCK(Material.RED_MUSHROOM_BLOCK, Rarity.RARE), - ENCHANTED_INK_SAC(Material.INK_SAC, Rarity.UNCOMMON), - ENCHANTED_LAPIS_LAZULI(Material.LAPIS_LAZULI, Rarity.UNCOMMON), - ENCHANTED_LAPIS_LAZULI_BLOCK(Material.LAPIS_BLOCK, Rarity.RARE), - ENCHANTED_LILY_PAD(Material.LILY_PAD, Rarity.UNCOMMON), - ENCHANTED_MELON(Material.MELON_SLICE, Rarity.UNCOMMON), - ENCHANTED_MELON_BLOCK(Material.MELON, Rarity.RARE), - ENCHANTED_MITHRIL(Material.PRISMARINE_CRYSTALS, Rarity.RARE), - ENCHANTED_MYCELIUM(Material.MYCELIUM, Rarity.UNCOMMON), - ENCHANTED_MYCELIUM_CUBE(Material.PLAYER_HEAD, Rarity.RARE), - ENCHANTED_NETHER_WART(Material.NETHER_WART, Rarity.UNCOMMON), - ENCHANTED_NETHERRACK(Material.NETHERRACK, Rarity.UNCOMMON), - ENCHANTED_PAPER(Material.PAPER, Rarity.UNCOMMON), - ENCHANTED_POISONOUS_POTATO(Material.POISONOUS_POTATO, Rarity.UNCOMMON), - ENCHANTED_POPPY(Material.POPPY, Rarity.UNCOMMON), - ENCHANTED_PRISMARINE_CRYSTALS(Material.PRISMARINE_CRYSTALS, Rarity.UNCOMMON), - ENCHANTED_PRISMARINE_SHARD(Material.PRISMARINE_SHARD, Rarity.UNCOMMON), - ENCHANTED_PUFFERFISH(Material.PUFFERFISH, Rarity.UNCOMMON), - ENCHANTED_QUARTZ(Material.QUARTZ, Rarity.UNCOMMON), - ENCHANTED_QUARTZ_BLOCK(Material.QUARTZ_BLOCK, Rarity.RARE), - ENCHANTED_RABBIT_FOOT(Material.RABBIT_FOOT, Rarity.RARE), - ENCHANTED_RABBIT_HIDE(Material.RABBIT_HIDE, Rarity.RARE), - ENCHANTED_RAW_BEEF(Material.BEEF, Rarity.UNCOMMON), - ENCHANTED_RAW_CHICKEN(Material.CHICKEN, Rarity.UNCOMMON), - ENCHANTED_RAW_RABBIT(Material.RABBIT, Rarity.UNCOMMON), - ENCHANTED_SAND(Material.SAND, Rarity.UNCOMMON), - ENCHANTED_SEEDS(Material.WHEAT_SEEDS, Rarity.UNCOMMON), - ENCHANTED_SLIME_BLOCK(Material.SLIME_BLOCK, Rarity.RARE), - ENCHANTED_SUGAR_CANE(Material.SUGAR_CANE, Rarity.RARE), - ENCHANTED_SULPHUR(Material.GLOWSTONE_DUST, Rarity.RARE), - ENCHANTED_SULPHUR_CUBE(Material.PLAYER_HEAD, Rarity.RARE), - ENCHANTED_TITANIUM(Material.PLAYER_HEAD, Rarity.EPIC), - ENCHANTED_WET_SPONGE(Material.WET_SPONGE, Rarity.RARE), - ENCHANTED_WOOL(Material.WHITE_WOOL, Rarity.UNCOMMON), - ENCHANTED_SHARK_FIN(Material.PRISMARINE_SHARD, Rarity.EPIC), - ENCHANTED_RED_SAND(Material.RED_SAND, Rarity.UNCOMMON), - ENCHANTED_RED_SAND_CUBE(Material.PLAYER_HEAD, Rarity.RARE), - ENCHANTED_BONE_MEAL(Material.BONE_MEAL, Rarity.COMMON), - ; - - public final Material material; - public final Rarity rarity; - - ItemType(Material material, Rarity rarity) { - this.material = material; - this.rarity = rarity; - } - - @SneakyThrows - public String getDisplayName() { - return StringUtility.toNormalCase(this.name()); - } - - - public static @Nullable ItemType get(String name) { - try { - return ItemType.valueOf(name.replace("minecraft:", "").toUpperCase()); - } catch (Exception e) { - return null; - } - } - - public static boolean isVanillaReplaced(String item) { - return get(item) != null; - } - - public static @Nullable ItemType fromMaterial(Material material) { - String materialName = material.key().value(); - String formattedItemName = StringUtility.toNormalCase(materialName); - - for (ItemType itemType : ItemType.values()) { - if (itemType.material == material && - formattedItemName.equals(StringUtility.toNormalCase(itemType.getDisplayName()))) { - return itemType; - } - } - return null; - } + /** + * BrewingItem + */ + + CHEAP_COFFEE(Material.PLAYER_HEAD, Rarity.COMMON), + TEPID_GREEN_TEA(Material.PLAYER_HEAD, Rarity.COMMON), + PULPOUS_ORANGE_JUICE(Material.PLAYER_HEAD, Rarity.COMMON), + BITTER_ICE_TEA(Material.PLAYER_HEAD, Rarity.COMMON), + KNOCKOFF_COLA(Material.PLAYER_HEAD, Rarity.COMMON), + DECENT_COFFEE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + WOLF_FUR_MIXIN(Material.PLAYER_HEAD, Rarity.RARE), + ZOMBIE_BRAIN_MIXIN(Material.PLAYER_HEAD, Rarity.RARE), + SPIDER_EGG_MIXIN(Material.PLAYER_HEAD, Rarity.RARE), + END_PORTAL_FUMES(Material.PLAYER_HEAD, Rarity.RARE), + GABAGOEY_MIXIN(Material.PLAYER_HEAD, Rarity.RARE), + BLACK_COFFEE(Material.PLAYER_HEAD, Rarity.RARE), + + /** + * DungeonItem + */ + ANCIENT_ROSE(Material.POPPY, Rarity.RARE), + ARCHITECTS_FIRST_DRAFT(Material.PAPER, Rarity.EPIC), + KISMET_FEATHER(Material.FEATHER, Rarity.RARE), + NECRONS_HANDLE(Material.STICK, Rarity.EPIC), + BIGFOOT_LASSO(Material.LEAD, Rarity.EPIC), + BONZO_FRAGMENT(Material.RED_MUSHROOM, Rarity.RARE), + FUMING_POTATO_BOOK(Material.BOOK, Rarity.EPIC), + SUPERBOOM_TNT(Material.TNT, Rarity.RARE), + + /** + * Mythological Ritual + */ + GRIFFIN_FEATHER(Material.FEATHER, Rarity.RARE), + ANCIENT_CLAW(Material.FLINT, Rarity.RARE), + ANTIQUE_REMEDIES(Material.AZURE_BLUET, Rarity.EPIC), + CROCHET_TIGER_PLUSHIE(Material.PLAYER_HEAD, Rarity.EPIC), + DWARF_TURTLE_SHELMET(Material.PLAYER_HEAD, Rarity.RARE), + DAEDALUS_STICK(Material.STICK, Rarity.LEGENDARY), + MINOS_RELIC(Material.PLAYER_HEAD, Rarity.EPIC), + CROWN_OF_GREED(Material.GOLDEN_HELMET, Rarity.LEGENDARY), + WASHED_UP_SOUVENIR(Material.PLAYER_HEAD, Rarity.LEGENDARY), + DAEDALUS_AXE(Material.GOLDEN_AXE, Rarity.LEGENDARY), + SWORD_OF_REVELATIONS(Material.WOODEN_SWORD, Rarity.EPIC), + + /** + * Spooky Festival + */ + GREEN_CANDY(Material.PLAYER_HEAD, Rarity.UNCOMMON), + PURPLE_CANDY(Material.PLAYER_HEAD, Rarity.EPIC), + WEREWOLF_SKIN(Material.ROTTEN_FLESH, Rarity.RARE), + SOUL_FRAGMENT(Material.PLAYER_HEAD, Rarity.EPIC), + ECTOPLASM(Material.PRISMARINE_CRYSTALS, Rarity.RARE), + BLAST_O_LANTERN(Material.PLAYER_HEAD, Rarity.RARE), + PUMPKIN_GUTS(Material.PUMPKIN_SEEDS, Rarity.UNCOMMON), + SPOOKY_SHARD(Material.PLAYER_HEAD, Rarity.EPIC), + HORSEMAN_CANDLE(Material.PLAYER_HEAD, Rarity.EPIC), + BAT_FIREWORK(Material.FIREWORK_ROCKET, Rarity.RARE), + + /** + * Armor Sets + */ + LEAFLET_HELMET(Material.OAK_LEAVES, Rarity.COMMON), + LEAFLET_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), + LEAFLET_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), + LEAFLET_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), + MINERS_OUTFIT_HELMET(Material.LEATHER_HELMET, Rarity.UNCOMMON), + MINERS_OUTFIT_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.UNCOMMON), + MINERS_OUTFIT_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.UNCOMMON), + MINERS_OUTFIT_BOOTS(Material.LEATHER_BOOTS, Rarity.UNCOMMON), + FARM_SUIT_HELMET(Material.LEATHER_HELMET, Rarity.COMMON), + FARM_SUIT_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), + FARM_SUIT_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), + FARM_SUIT_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), + ROSETTA_HELMET(Material.DIAMOND_HELMET, Rarity.UNCOMMON), + ROSETTA_CHESTPLATE(Material.DIAMOND_CHESTPLATE, Rarity.UNCOMMON), + ROSETTA_LEGGINGS(Material.DIAMOND_LEGGINGS, Rarity.UNCOMMON), + ROSETTA_BOOTS(Material.DIAMOND_BOOTS, Rarity.UNCOMMON), + SQUIRE_HELMET(Material.CHAINMAIL_HELMET, Rarity.UNCOMMON), + SQUIRE_CHESTPLATE(Material.IRON_CHESTPLATE, Rarity.UNCOMMON), + SQUIRE_LEGGINGS(Material.CHAINMAIL_LEGGINGS, Rarity.UNCOMMON), + SQUIRE_BOOTS(Material.LEATHER_BOOTS, Rarity.UNCOMMON), + MERCENARY_HELMET(Material.CHAINMAIL_HELMET, Rarity.RARE), + MERCENARY_CHESTPLATE(Material.IRON_CHESTPLATE, Rarity.RARE), + MERCENARY_LEGGINGS(Material.CHAINMAIL_LEGGINGS, Rarity.RARE), + MERCENARY_BOOTS(Material.LEATHER_BOOTS, Rarity.RARE), + CELESTE_HELMET(Material.LEATHER_HELMET, Rarity.UNCOMMON), + CELESTE_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.UNCOMMON), + CELESTE_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.UNCOMMON), + CELESTE_BOOTS(Material.LEATHER_BOOTS, Rarity.UNCOMMON), + STARLIGHT_HELMET(Material.GOLDEN_HELMET, Rarity.RARE), + STARLIGHT_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.RARE), + STARLIGHT_LEGGINGS(Material.GOLDEN_LEGGINGS, Rarity.RARE), + STARLIGHT_BOOTS(Material.LEATHER_BOOTS, Rarity.RARE), + CHEAP_TUXEDO_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.EPIC), + CHEAP_TUXEDO_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.EPIC), + CHEAP_TUXEDO_BOOTS(Material.LEATHER_BOOTS, Rarity.EPIC), + FANCY_TUXEDO_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.LEGENDARY), + FANCY_TUXEDO_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.LEGENDARY), + FANCY_TUXEDO_BOOTS(Material.LEATHER_BOOTS, Rarity.LEGENDARY), + ELEGANT_TUXEDO_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.LEGENDARY), + ELEGANT_TUXEDO_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.LEGENDARY), + ELEGANT_TUXEDO_BOOTS(Material.LEATHER_BOOTS, Rarity.LEGENDARY), + MUSHROOM_HELMET(Material.LEATHER_HELMET, Rarity.COMMON), + MUSHROOM_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), + MUSHROOM_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), + MUSHROOM_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), + PUMPKIN_HELMET(Material.LEATHER_HELMET, Rarity.COMMON), + PUMPKIN_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), + PUMPKIN_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), + PUMPKIN_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), + + /** + * Pickaxes + */ + PIONEERS_PICKAXE(Material.WOODEN_PICKAXE, Rarity.SPECIAL), + DIAMOND_PICKAXE(Material.DIAMOND_PICKAXE, Rarity.UNCOMMON), + IRON_PICKAXE(Material.IRON_PICKAXE, Rarity.COMMON), + STONE_PICKAXE(Material.STONE_PICKAXE, Rarity.COMMON), + WOODEN_PICKAXE(Material.WOODEN_PICKAXE, Rarity.COMMON), + GOLDEN_PICKAXE(Material.GOLDEN_PICKAXE, Rarity.COMMON), + ROOKIE_PICKAXE(Material.STONE_PICKAXE, Rarity.COMMON), + PROMISING_PICKAXE(Material.IRON_PICKAXE, Rarity.UNCOMMON), + PICKONIMBUS_2000(Material.DIAMOND_PICKAXE, Rarity.EPIC), + + /** + * Swords + */ + HYPERION(Material.IRON_SWORD, Rarity.LEGENDARY), + ROGUE_SWORD(Material.GOLDEN_SWORD, Rarity.COMMON), + DIAMOND_SWORD(Material.DIAMOND_SWORD, Rarity.UNCOMMON), + IRON_SWORD(Material.IRON_SWORD, Rarity.COMMON), + STONE_SWORD(Material.STONE_SWORD, Rarity.COMMON), + WOODEN_SWORD(Material.WOODEN_SWORD, Rarity.COMMON), + GOLDEN_SWORD(Material.GOLDEN_SWORD, Rarity.COMMON), + UNDEAD_SWORD(Material.IRON_SWORD, Rarity.COMMON), + END_SWORD(Material.DIAMOND_SWORD, Rarity.UNCOMMON), + SPIDER_SWORD(Material.IRON_SWORD, Rarity.COMMON), + ASPECT_OF_THE_JERRY(Material.WOODEN_SWORD, Rarity.COMMON), + FANCY_SWORD(Material.GOLDEN_SWORD, Rarity.COMMON), + HUNTER_KNIFE(Material.IRON_SWORD, Rarity.UNCOMMON), + PRISMARINE_BLADE(Material.PRISMARINE_SHARD, Rarity.UNCOMMON), + SILVER_FANG(Material.GHAST_TEAR, Rarity.UNCOMMON), + ASPECT_OF_THE_END(Material.DIAMOND_SWORD, Rarity.RARE), + SQUIRE_SWORD(Material.IRON_SWORD, Rarity.UNCOMMON), + MERCENARY_AXE(Material.IRON_AXE, Rarity.RARE), + + /** + * Shovels + */ + SHEARS(Material.SHEARS, Rarity.COMMON), + WOODEN_SHOVEL(Material.WOODEN_SHOVEL, Rarity.COMMON), + STONE_SHOVEL(Material.STONE_SHOVEL, Rarity.COMMON), + GOLDEN_SHOVEL(Material.GOLDEN_SHOVEL, Rarity.COMMON), + IRON_SHOVEL(Material.IRON_SHOVEL, Rarity.COMMON), + DIAMOND_SHOVEL(Material.DIAMOND_SHOVEL, Rarity.UNCOMMON), + + /** + * Bows + */ + WITHER_BOW(Material.BOW, Rarity.UNCOMMON), + ARTISANAL_SHORTBOW(Material.BOW, Rarity.RARE), + BOW(Material.BOW, Rarity.COMMON), + + /** + * Arrows + */ + FLINT_ARROW(Material.ARROW, Rarity.COMMON), + + /** + * Jerry's Workshop + */ + WHITE_GIFT(Material.PLAYER_HEAD, Rarity.COMMON), + GREEN_GIFT(Material.PLAYER_HEAD, Rarity.UNCOMMON), + RED_GIFT(Material.PLAYER_HEAD, Rarity.RARE), + GLACIAL_FRAGMENT(Material.PLAYER_HEAD, Rarity.EPIC), + + /** + * Mining Materials + */ + ROUGH_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), + ROUGH_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), + ROUGH_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), + ROUGH_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), + ROUGH_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), + ROUGH_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), + ROUGH_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.COMMON), + FLAWED_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + FLAWED_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + FLAWED_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + FLAWED_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + FLAWED_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + FLAWED_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + FLAWED_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + FINE_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), + FINE_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), + FINE_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), + FINE_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), + FINE_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), + FINE_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), + FINE_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.RARE), + FLAWLESS_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), + FLAWLESS_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), + FLAWLESS_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), + FLAWLESS_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), + FLAWLESS_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), + FLAWLESS_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), + FLAWLESS_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.EPIC), + PERFECT_AMBER_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), + PERFECT_TOPAZ_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), + PERFECT_SAPPHIRE_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), + PERFECT_AMETHYST_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), + PERFECT_JASPER_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), + PERFECT_RUBY_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), + PERFECT_JADE_GEMSTONE(Material.PLAYER_HEAD, Rarity.LEGENDARY), + HARD_STONE(Material.STONE, Rarity.COMMON), + ENCHANTED_HARD_STONE(Material.STONE, Rarity.UNCOMMON), + MITHRIL(Material.PRISMARINE_CRYSTALS, Rarity.COMMON), + TITANIUM(Material.PLAYER_HEAD, Rarity.RARE), + SULPHUR(Material.GLOWSTONE_DUST, Rarity.UNCOMMON), + CONCENTRATED_STONE(Material.PLAYER_HEAD, Rarity.RARE), + + /** + * Forge Items + */ + REFINED_MITHRIL(Material.PLAYER_HEAD, Rarity.EPIC), + REFINED_TITANIUM(Material.PLAYER_HEAD, Rarity.EPIC), + + /** + * Other Mining Stuff + */ + GOBLIN_EGG(Material.EGG, Rarity.RARE), + YELLOW_GOBLIN_EGG(Material.EGG, Rarity.RARE), + RED_GOBLIN_EGG(Material.EGG, Rarity.RARE), + GREEN_GOBLIN_EGG(Material.EGG, Rarity.UNCOMMON), + BLUE_GOBLIN_EGG(Material.EGG, Rarity.RARE), + CONTROL_SWITCH(Material.PLAYER_HEAD, Rarity.RARE), + ELECTRON_TRANSMITTER(Material.PLAYER_HEAD, Rarity.RARE), + FTX_3070(Material.PLAYER_HEAD, Rarity.RARE), + ROBOTRON_REFLECTOR(Material.PLAYER_HEAD, Rarity.RARE), + SUPERLITE_MOTOR(Material.PLAYER_HEAD, Rarity.RARE), + SYNTHETIC_HEART(Material.PLAYER_HEAD, Rarity.RARE), + SLUDGE_JUICE(Material.PLAYER_HEAD, Rarity.UNCOMMON), + OIL_BARREL(Material.PLAYER_HEAD, Rarity.UNCOMMON), + TREASURITE(Material.PLAYER_HEAD, Rarity.EPIC), + JUNGLE_KEY(Material.TRIPWIRE_HOOK, Rarity.EPIC), + WISHING_COMPASS(Material.PLAYER_HEAD, Rarity.UNCOMMON), + WORM_MEMBRANE(Material.ROTTEN_FLESH, Rarity.UNCOMMON), + MAGMA_CORE(Material.MAGMA_CREAM, Rarity.RARE), + ETERNAL_FLAME_RING(Material.PLAYER_HEAD, Rarity.UNCOMMON), + HELIX(Material.PLAYER_HEAD, Rarity.LEGENDARY), + BOB_OMB(Material.PLAYER_HEAD, Rarity.RARE), + PREHISTORIC_EGG(Material.PLAYER_HEAD, Rarity.COMMON), + RECALL_POTION(Material.PLAYER_HEAD, Rarity.EPIC), + GEMSTONE_MIXTURE(Material.PLAYER_HEAD, Rarity.RARE), + DIVAN_FRAGMENT(Material.PLAYER_HEAD, Rarity.EPIC), + DIVAN_ALLOY(Material.PLAYER_HEAD, Rarity.LEGENDARY), + GLACITE_JEWEL(Material.PLAYER_HEAD, Rarity.RARE), + STARFALL(Material.NETHER_STAR, Rarity.RARE), + SORROW(Material.GHAST_TEAR, Rarity.RARE), + PLASMA(Material.PLAYER_HEAD, Rarity.RARE), + VOLTA(Material.PLAYER_HEAD, Rarity.RARE), + CORLEONITE(Material.PLAYER_HEAD, Rarity.EPIC), + + /** + * Travel Scrolls + */ + HUB_CASTLE_TRAVEL_SCROLL(Material.MAP, Rarity.EPIC), + HUB_MUSEUM_TRAVEL_SCROLL(Material.MAP, Rarity.EPIC), + HUB_CRYPTS_TRAVEL_SCROLL(Material.MAP, Rarity.EPIC), + + /** + * Crimson Isles + */ + FLAMES(Material.BLAZE_POWDER, Rarity.RARE), + + /** + * Vanilla Items + */ + AIR(Material.AIR, Rarity.COMMON), + DIRT(Material.DIRT, Rarity.COMMON), + CRAFTING_TABLE(Material.CRAFTING_TABLE, Rarity.COMMON), + ANVIL(Material.ANVIL, Rarity.COMMON), + FLOWER_POT(Material.FLOWER_POT, Rarity.COMMON), + FERN(Material.FERN, Rarity.COMMON), + DEAD_BUSH(Material.DEAD_BUSH, Rarity.COMMON), + WATER_BUCKET(Material.WATER_BUCKET, Rarity.COMMON), + LARGE_FERN(Material.LARGE_FERN, Rarity.COMMON), + STICK(Material.STICK, Rarity.COMMON), + BAKED_POTATO(Material.BAKED_POTATO, Rarity.COMMON), + BLAZE_ROD(Material.BLAZE_ROD, Rarity.COMMON), + BONE(Material.BONE, Rarity.COMMON), + BONE_MEAL(Material.BONE_MEAL, Rarity.COMMON), + BOOK(Material.BOOK, Rarity.COMMON), + BOOKSHELF(Material.BOOKSHELF, Rarity.COMMON), + BOWL(Material.BOWL, Rarity.COMMON), + BREAD(Material.BREAD, Rarity.COMMON), + CARROT(Material.CARROT, Rarity.COMMON), + CHARCOAL(Material.CHARCOAL, Rarity.COMMON), + COAL(Material.COAL, Rarity.COMMON), + COCOA_BEANS(Material.COCOA_BEANS, Rarity.COMMON), + DIAMOND(Material.DIAMOND, Rarity.COMMON), + DIAMOND_BLOCK(Material.DIAMOND_BLOCK, Rarity.COMMON), + EGG(Material.EGG, Rarity.COMMON), + EMERALD(Material.EMERALD, Rarity.COMMON), + EMERALD_BLOCK(Material.EMERALD_BLOCK, Rarity.COMMON), + ENDER_PEARL(Material.ENDER_PEARL, Rarity.COMMON), + FEATHER(Material.FEATHER, Rarity.COMMON), + FLINT(Material.FLINT, Rarity.COMMON), + GLOWSTONE_DUST(Material.GLOWSTONE_DUST, Rarity.COMMON), + GOLD_INGOT(Material.GOLD_INGOT, Rarity.COMMON), + GOLD_BLOCK(Material.GOLD_BLOCK, Rarity.COMMON), + GUNPOWDER(Material.GUNPOWDER, Rarity.COMMON), + END_STONE(Material.END_STONE, Rarity.COMMON), + EYE_OF_ENDER(Material.ENDER_EYE, Rarity.COMMON), + GHAST_TEAR(Material.GHAST_TEAR, Rarity.COMMON), + ICE(Material.ICE, Rarity.COMMON), + IRON_INGOT(Material.IRON_INGOT, Rarity.COMMON), + GRAVEL(Material.GRAVEL, Rarity.COMMON), + LAPIS_LAZULI(Material.LAPIS_LAZULI, Rarity.COMMON), + IRON_BLOCK(Material.IRON_BLOCK, Rarity.COMMON), + LEATHER(Material.LEATHER, Rarity.COMMON), + MAGMA_CREAM(Material.MAGMA_CREAM, Rarity.COMMON), + OBSIDIAN(Material.OBSIDIAN, Rarity.COMMON), + PACKED_ICE(Material.PACKED_ICE, Rarity.COMMON), + VINES(Material.VINE, Rarity.COMMON), + PAPER(Material.PAPER, Rarity.COMMON), + POTATO(Material.POTATO, Rarity.COMMON), + PUMPKIN(Material.PUMPKIN, Rarity.COMMON), + REDSTONE(Material.REDSTONE, Rarity.COMMON), + REDSTONE_BLOCK(Material.REDSTONE_BLOCK, Rarity.COMMON), + ROTTEN_FLESH(Material.ROTTEN_FLESH, Rarity.COMMON), + SLIME_BALL(Material.SLIME_BALL, Rarity.COMMON), + SPONGE(Material.SPONGE, Rarity.COMMON), + STRING(Material.STRING, Rarity.COMMON), + SUGAR_CANE(Material.SUGAR_CANE, Rarity.COMMON), + SUGAR(Material.SUGAR, Rarity.COMMON), + SNOW(Material.SNOW, Rarity.COMMON), + SNOW_BLOCK(Material.SNOW_BLOCK, Rarity.COMMON), + SNOWBALL(Material.SNOWBALL, Rarity.COMMON), + MELON_SLICE(Material.MELON_SLICE, Rarity.COMMON), + RED_MUSHROOM(Material.RED_MUSHROOM, Rarity.COMMON), + BROWN_MUSHROOM(Material.BROWN_MUSHROOM, Rarity.COMMON), + MUTTON(Material.MUTTON, Rarity.COMMON), + NETHER_WART(Material.NETHER_WART, Rarity.COMMON), + CHICKEN(Material.CHICKEN, Rarity.COMMON), + SOUL_SAND(Material.SOUL_SAND, Rarity.COMMON), + PRISMARINE(Material.PRISMARINE, Rarity.COMMON), + PRISMARINE_BRICKS(Material.PRISMARINE_BRICKS, Rarity.COMMON), + DARK_PRISMARINE(Material.DARK_PRISMARINE, Rarity.COMMON), + SEA_LANTERN(Material.SEA_LANTERN, Rarity.COMMON), + WET_SPONGE(Material.WET_SPONGE, Rarity.COMMON), + LAVA_BUCKET(Material.LAVA_BUCKET, Rarity.COMMON), + JACK_O_LANTERN(Material.JACK_O_LANTERN, Rarity.COMMON), + NETHER_BRICKS(Material.NETHER_BRICKS, Rarity.COMMON), + COARSE_DIRT(Material.COARSE_DIRT, Rarity.COMMON), + PODZOL(Material.PODZOL, Rarity.COMMON), + CRACKED_STONE_BRICKS(Material.CRACKED_STONE_BRICKS, Rarity.COMMON), + CHISELED_STONE_BRICKS(Material.CHISELED_STONE_BRICKS, Rarity.COMMON), + SMOOTH_STONE(Material.SMOOTH_STONE, Rarity.COMMON), + SMOOTH_SANDSTONE(Material.SMOOTH_SANDSTONE, Rarity.COMMON), + SMOOTH_QUARTZ(Material.SMOOTH_QUARTZ, Rarity.COMMON), + BRICKS(Material.BRICKS, Rarity.COMMON), + END_STONE_BRICKS(Material.END_STONE_BRICKS, Rarity.COMMON), + PURPUR_BLOCK(Material.PURPUR_BLOCK, Rarity.COMMON), + PURPUR_PILLAR(Material.PURPUR_PILLAR, Rarity.COMMON), + PURPUR_STAIRS(Material.PURPUR_STAIRS, Rarity.COMMON), + PURPUR_SLAB(Material.PURPUR_SLAB, Rarity.COMMON), + END_ROD(Material.END_ROD, Rarity.COMMON), + DRAGON_BREATH(Material.DRAGON_BREATH, Rarity.COMMON), + ELDER_GUARDIAN_SPAWN_EGG(Material.ELDER_GUARDIAN_SPAWN_EGG, Rarity.COMMON), + ENDER_CHEST(Material.ENDER_CHEST, Rarity.COMMON), + ENDER_EYE(Material.ENDER_EYE, Rarity.COMMON), + BRICK_STAIRS(Material.BRICK_STAIRS, Rarity.COMMON), + BRICK_SLAB(Material.BRICK_SLAB, Rarity.COMMON), + SMOOTH_RED_SANDSTONE(Material.SMOOTH_RED_SANDSTONE, Rarity.COMMON), + IRON_BARS(Material.IRON_BARS, Rarity.COMMON), + IRON_DOOR(Material.IRON_DOOR, Rarity.COMMON), + REDSTONE_LAMP(Material.REDSTONE_LAMP, Rarity.COMMON), + SANDSTONE_STAIRS(Material.SANDSTONE_STAIRS, Rarity.COMMON), + EMERALD_ORE(Material.EMERALD_ORE, Rarity.COMMON), + DIAMOND_ORE(Material.DIAMOND_ORE, Rarity.COMMON), + GOLD_ORE(Material.GOLD_ORE, Rarity.COMMON), + IRON_ORE(Material.IRON_ORE, Rarity.COMMON), + COAL_ORE(Material.COAL_ORE, Rarity.COMMON), + LAPIS_LAZULI_ORE(Material.LAPIS_ORE, Rarity.COMMON), + REDSTONE_ORE(Material.REDSTONE_ORE, Rarity.COMMON), + IRON_TRAPDOOR(Material.IRON_TRAPDOOR, Rarity.COMMON), + PORKCHOP(Material.PORKCHOP, Rarity.COMMON), + RABBIT(Material.RABBIT, Rarity.COMMON), + MYCELIUM(Material.MYCELIUM, Rarity.COMMON), + RED_SAND(Material.RED_SAND, Rarity.COMMON), + QUARTZ(Material.QUARTZ, Rarity.COMMON), + NETHER_QUARTZ_ORE(Material.NETHER_QUARTZ_ORE, Rarity.COMMON), + NETHERRACK(Material.NETHERRACK, Rarity.COMMON), + NETHER_BRICK(Material.NETHER_BRICK, Rarity.COMMON), + SAND(Material.SAND, Rarity.COMMON), + CLAY_BALL(Material.CLAY_BALL, Rarity.COMMON), + TROPICAL_FISH(Material.TROPICAL_FISH, Rarity.COMMON), + INK_SAC(Material.INK_SAC, Rarity.COMMON), + GRASS_BLOCK(Material.GRASS_BLOCK, Rarity.COMMON), + SHORT_GRASS(Material.SHORT_GRASS, Rarity.COMMON), + TALL_GRASS(Material.TALL_GRASS, Rarity.COMMON), + MELON_BLOCK(Material.MELON, Rarity.COMMON), + LILY_PAD(Material.LILY_PAD, Rarity.COMMON), + PRISMARINE_CRYSTALS(Material.PRISMARINE_CRYSTALS, Rarity.COMMON), + PRISMARINE_SHARD(Material.PRISMARINE_SHARD, Rarity.COMMON), + PUFFERFISH(Material.PUFFERFISH, Rarity.COMMON), + COD(Material.COD, Rarity.COMMON), + SALMON(Material.SALMON, Rarity.COMMON), + TORCH(Material.TORCH, Rarity.COMMON), + RAW_BEEF(Material.BEEF, Rarity.UNCOMMON), + RAW_CHICKEN(Material.CHICKEN, Rarity.UNCOMMON), + SPIDER_EYE(Material.SPIDER_EYE, Rarity.COMMON), + CACTUS_GREEN(Material.GREEN_DYE, Rarity.COMMON), + DANDELION(Material.DANDELION, Rarity.COMMON), + FERMENTED_SPIDER_EYE(Material.FERMENTED_SPIDER_EYE, Rarity.COMMON), + GLISTERING_MELON(Material.GLISTERING_MELON_SLICE, Rarity.COMMON), + GLOWSTONE(Material.GLOWSTONE, Rarity.COMMON), + HAY_BALE(Material.HAY_BLOCK, Rarity.COMMON), + POISONOUS_POTATO(Material.POISONOUS_POTATO, Rarity.COMMON), + POPPY(Material.POPPY, Rarity.COMMON), + RABBIT_FOOT(Material.RABBIT_FOOT, Rarity.COMMON), + RABBIT_HIDE(Material.RABBIT_HIDE, Rarity.COMMON), + BEEF(Material.BEEF, Rarity.COMMON), + COAL_BLOCK(Material.COAL_BLOCK, Rarity.COMMON), + LAPIS_LAZULI_BLOCK(Material.LAPIS_BLOCK, Rarity.COMMON), + BROWN_MUSHROOM_BLOCK(Material.BROWN_MUSHROOM_BLOCK, Rarity.COMMON), + RED_MUSHROOM_BLOCK(Material.RED_MUSHROOM_BLOCK, Rarity.COMMON), + BLAZE_POWDER(Material.BLAZE_POWDER, Rarity.COMMON), + GOLDEN_CARROT(Material.GOLDEN_CARROT, Rarity.COMMON), + GOLD_NUGGET(Material.GOLD_NUGGET, Rarity.COMMON), + IRON_NUGGET(Material.IRON_NUGGET, Rarity.COMMON), + WATER_BOTTLE(Material.POTION, Rarity.COMMON), + CACTUS(Material.CACTUS, Rarity.COMMON), + CHEST(Material.CHEST, Rarity.COMMON), + IRON_HELMET(Material.IRON_HELMET, Rarity.COMMON), + IRON_CHESTPLATE(Material.IRON_CHESTPLATE, Rarity.COMMON), + IRON_LEGGINGS(Material.IRON_LEGGINGS, Rarity.COMMON), + IRON_BOOTS(Material.IRON_BOOTS, Rarity.COMMON), + LEATHER_HELMET(Material.LEATHER_HELMET, Rarity.COMMON), + LEATHER_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), + LEATHER_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), + LEATHER_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), + GOLDEN_HELMET(Material.GOLDEN_HELMET, Rarity.COMMON), + GOLDEN_CHESTPLATE(Material.GOLDEN_CHESTPLATE, Rarity.COMMON), + GOLDEN_LEGGINGS(Material.GOLDEN_LEGGINGS, Rarity.COMMON), + GOLDEN_BOOTS(Material.GOLDEN_BOOTS, Rarity.COMMON), + DIAMOND_HELMET(Material.DIAMOND_HELMET, Rarity.UNCOMMON), + DIAMOND_CHESTPLATE(Material.DIAMOND_CHESTPLATE, Rarity.UNCOMMON), + DIAMOND_LEGGINGS(Material.DIAMOND_LEGGINGS, Rarity.UNCOMMON), + DIAMOND_BOOTS(Material.DIAMOND_BOOTS, Rarity.UNCOMMON), + APPLE(Material.APPLE, Rarity.COMMON), + SLIME_BLOCK(Material.SLIME_BLOCK, Rarity.COMMON), + + OAK_SAPLING(Material.OAK_SAPLING, Rarity.COMMON), + SPRUCE_SAPLING(Material.SPRUCE_SAPLING, Rarity.COMMON), + BIRCH_SAPLING(Material.BIRCH_SAPLING, Rarity.COMMON), + JUNGLE_SAPLING(Material.JUNGLE_SAPLING, Rarity.COMMON), + ACACIA_SAPLING(Material.ACACIA_SAPLING, Rarity.COMMON), + DARK_OAK_SAPLING(Material.DARK_OAK_SAPLING, Rarity.COMMON), + CHERRY_SAPLING(Material.CHERRY_SAPLING, Rarity.COMMON), + MANGROVE_PROPAGULE(Material.MANGROVE_PROPAGULE, Rarity.COMMON), + PALE_OAK_SAPLING(Material.PALE_OAK_SAPLING, Rarity.COMMON), + AZALEA(Material.AZALEA, Rarity.COMMON), + FLOWERING_AZALEA(Material.FLOWERING_AZALEA, Rarity.COMMON), + + OAK_LEAVES(Material.OAK_LEAVES, Rarity.COMMON), + SPRUCE_LEAVES(Material.SPRUCE_LEAVES, Rarity.COMMON), + BIRCH_LEAVES(Material.BIRCH_LEAVES, Rarity.COMMON), + JUNGLE_LEAVES(Material.JUNGLE_LEAVES, Rarity.COMMON), + ACACIA_LEAVES(Material.ACACIA_LEAVES, Rarity.COMMON), + DARK_OAK_LEAVES(Material.DARK_OAK_LEAVES, Rarity.COMMON), + CHERRY_LEAVES(Material.CHERRY_LEAVES, Rarity.COMMON), + MANGROVE_LEAVES(Material.MANGROVE_LEAVES, Rarity.COMMON), + PALE_OAK_LEAVES(Material.PALE_OAK_LEAVES, Rarity.COMMON), + AZALEA_LEAVES(Material.AZALEA_LEAVES, Rarity.COMMON), + FLOWERING_AZALEA_LEAVES(Material.FLOWERING_AZALEA_LEAVES, Rarity.COMMON), + + OAK_LOG(Material.OAK_LOG, Rarity.COMMON), + STRIPPED_OAK_LOG(Material.STRIPPED_OAK_LOG, Rarity.COMMON), + OAK_WOOD(Material.OAK_WOOD, Rarity.COMMON), + STRIPPED_OAK_WOOD(Material.STRIPPED_OAK_WOOD, Rarity.COMMON), + OAK_PLANKS(Material.OAK_PLANKS, Rarity.COMMON), + OAK_SLAB(Material.OAK_SLAB, Rarity.COMMON), + OAK_STAIRS(Material.OAK_STAIRS, Rarity.COMMON), + OAK_FENCE(Material.OAK_FENCE, Rarity.COMMON), + OAK_FENCE_GATE(Material.OAK_FENCE_GATE, Rarity.COMMON), + OAK_DOOR(Material.OAK_DOOR, Rarity.COMMON), + OAK_TRAPDOOR(Material.OAK_TRAPDOOR, Rarity.COMMON), + OAK_PRESSURE_PLATE(Material.OAK_PRESSURE_PLATE, Rarity.COMMON), + OAK_BUTTON(Material.OAK_BUTTON, Rarity.COMMON), + OAK_BOAT(Material.OAK_BOAT, Rarity.COMMON), + OAK_CHEST_BOAT(Material.OAK_CHEST_BOAT, Rarity.COMMON), + OAK_SIGN(Material.OAK_SIGN, Rarity.COMMON), + OAK_HANGING_SIGN(Material.OAK_HANGING_SIGN, Rarity.COMMON), + + ACACIA_LOG(Material.ACACIA_LOG, Rarity.COMMON), + STRIPPED_ACACIA_LOG(Material.STRIPPED_ACACIA_LOG, Rarity.COMMON), + ACACIA_WOOD(Material.ACACIA_WOOD, Rarity.COMMON), + STRIPPED_ACACIA_WOOD(Material.STRIPPED_ACACIA_WOOD, Rarity.COMMON), + ACACIA_PLANKS(Material.ACACIA_PLANKS, Rarity.COMMON), + ACACIA_SLAB(Material.ACACIA_SLAB, Rarity.COMMON), + ACACIA_STAIRS(Material.ACACIA_STAIRS, Rarity.COMMON), + ACACIA_FENCE(Material.ACACIA_FENCE, Rarity.COMMON), + ACACIA_FENCE_GATE(Material.ACACIA_FENCE_GATE, Rarity.COMMON), + ACACIA_DOOR(Material.ACACIA_DOOR, Rarity.COMMON), + ACACIA_TRAPDOOR(Material.ACACIA_TRAPDOOR, Rarity.COMMON), + ACACIA_PRESSURE_PLATE(Material.ACACIA_PRESSURE_PLATE, Rarity.COMMON), + ACACIA_BUTTON(Material.ACACIA_BUTTON, Rarity.COMMON), + ACACIA_BOAT(Material.ACACIA_BOAT, Rarity.COMMON), + ACACIA_CHEST_BOAT(Material.ACACIA_CHEST_BOAT, Rarity.COMMON), + ACACIA_SIGN(Material.ACACIA_SIGN, Rarity.COMMON), + ACACIA_HANGING_SIGN(Material.ACACIA_HANGING_SIGN, Rarity.COMMON), + + CHERRY_LOG(Material.CHERRY_LOG, Rarity.COMMON), + STRIPPED_CHERRY_LOG(Material.STRIPPED_CHERRY_LOG, Rarity.COMMON), + CHERRY_WOOD(Material.CHERRY_WOOD, Rarity.COMMON), + STRIPPED_CHERRY_WOOD(Material.STRIPPED_CHERRY_WOOD, Rarity.COMMON), + CHERRY_PLANKS(Material.CHERRY_PLANKS, Rarity.COMMON), + CHERRY_SLAB(Material.CHERRY_SLAB, Rarity.COMMON), + CHERRY_STAIRS(Material.CHERRY_STAIRS, Rarity.COMMON), + CHERRY_FENCE(Material.CHERRY_FENCE, Rarity.COMMON), + CHERRY_FENCE_GATE(Material.CHERRY_FENCE_GATE, Rarity.COMMON), + CHERRY_DOOR(Material.CHERRY_DOOR, Rarity.COMMON), + CHERRY_TRAPDOOR(Material.CHERRY_TRAPDOOR, Rarity.COMMON), + CHERRY_PRESSURE_PLATE(Material.CHERRY_PRESSURE_PLATE, Rarity.COMMON), + CHERRY_BUTTON(Material.CHERRY_BUTTON, Rarity.COMMON), + CHERRY_BOAT(Material.CHERRY_BOAT, Rarity.COMMON), + CHERRY_CHEST_BOAT(Material.CHERRY_CHEST_BOAT, Rarity.COMMON), + CHERRY_SIGN(Material.CHERRY_SIGN, Rarity.COMMON), + CHERRY_HANGING_SIGN(Material.CHERRY_HANGING_SIGN, Rarity.COMMON), + + MANGROVE_PLANKS(Material.MANGROVE_PLANKS, Rarity.COMMON), + MANGROVE_LOG(Material.MANGROVE_LOG, Rarity.COMMON), + STRIPPED_MANGROVE_LOG(Material.STRIPPED_MANGROVE_LOG, Rarity.COMMON), + MANGROVE_WOOD(Material.MANGROVE_WOOD, Rarity.COMMON), + STRIPPED_MANGROVE_WOOD(Material.STRIPPED_MANGROVE_WOOD, Rarity.COMMON), + MANGROVE_SLAB(Material.MANGROVE_SLAB, Rarity.COMMON), + MANGROVE_STAIRS(Material.MANGROVE_STAIRS, Rarity.COMMON), + MANGROVE_FENCE(Material.MANGROVE_FENCE, Rarity.COMMON), + MANGROVE_FENCE_GATE(Material.MANGROVE_FENCE_GATE, Rarity.COMMON), + MANGROVE_DOOR(Material.MANGROVE_DOOR, Rarity.COMMON), + MANGROVE_TRAPDOOR(Material.MANGROVE_TRAPDOOR, Rarity.COMMON), + MANGROVE_PRESSURE_PLATE(Material.MANGROVE_PRESSURE_PLATE, Rarity.COMMON), + MANGROVE_BUTTON(Material.MANGROVE_BUTTON, Rarity.COMMON), + MANGROVE_BOAT(Material.MANGROVE_BOAT, Rarity.COMMON), + MANGROVE_CHEST_BOAT(Material.MANGROVE_CHEST_BOAT, Rarity.COMMON), + MANGROVE_SIGN(Material.MANGROVE_SIGN, Rarity.COMMON), + MANGROVE_HANGING_SIGN(Material.MANGROVE_HANGING_SIGN, Rarity.COMMON), + + PALE_OAK_LOG(Material.PALE_OAK_LOG, Rarity.COMMON), + STRIPPED_PALE_OAK_LOG(Material.STRIPPED_PALE_OAK_LOG, Rarity.COMMON), + PALE_OAK_WOOD(Material.PALE_OAK_WOOD, Rarity.COMMON), + STRIPPED_PALE_OAK_WOOD(Material.STRIPPED_PALE_OAK_WOOD, Rarity.COMMON), + PALE_OAK_PLANKS(Material.PALE_OAK_PLANKS, Rarity.COMMON), + PALE_OAK_SLAB(Material.PALE_OAK_SLAB, Rarity.COMMON), + PALE_OAK_STAIRS(Material.PALE_OAK_STAIRS, Rarity.COMMON), + PALE_OAK_FENCE(Material.PALE_OAK_FENCE, Rarity.COMMON), + PALE_OAK_FENCE_GATE(Material.PALE_OAK_FENCE_GATE, Rarity.COMMON), + PALE_OAK_DOOR(Material.PALE_OAK_DOOR, Rarity.COMMON), + PALE_OAK_TRAPDOOR(Material.PALE_OAK_TRAPDOOR, Rarity.COMMON), + PALE_OAK_PRESSURE_PLATE(Material.PALE_OAK_PRESSURE_PLATE, Rarity.COMMON), + PALE_OAK_BUTTON(Material.PALE_OAK_BUTTON, Rarity.COMMON), + PALE_OAK_BOAT(Material.PALE_OAK_BOAT, Rarity.COMMON), + PALE_OAK_CHEST_BOAT(Material.PALE_OAK_CHEST_BOAT, Rarity.COMMON), + PALE_OAK_SIGN(Material.PALE_OAK_SIGN, Rarity.COMMON), + PALE_OAK_HANGING_SIGN(Material.PALE_OAK_HANGING_SIGN, Rarity.COMMON), + + BIRCH_LOG(Material.BIRCH_LOG, Rarity.COMMON), + STRIPPED_BIRCH_LOG(Material.STRIPPED_BIRCH_LOG, Rarity.COMMON), + BIRCH_WOOD(Material.BIRCH_WOOD, Rarity.COMMON), + STRIPPED_BIRCH_WOOD(Material.STRIPPED_BIRCH_WOOD, Rarity.COMMON), + BIRCH_PLANKS(Material.BIRCH_PLANKS, Rarity.COMMON), + BIRCH_SLAB(Material.BIRCH_SLAB, Rarity.COMMON), + BIRCH_STAIRS(Material.BIRCH_STAIRS, Rarity.COMMON), + BIRCH_FENCE(Material.BIRCH_FENCE, Rarity.COMMON), + BIRCH_FENCE_GATE(Material.BIRCH_FENCE_GATE, Rarity.COMMON), + BIRCH_DOOR(Material.BIRCH_DOOR, Rarity.COMMON), + BIRCH_TRAPDOOR(Material.BIRCH_TRAPDOOR, Rarity.COMMON), + BIRCH_PRESSURE_PLATE(Material.BIRCH_PRESSURE_PLATE, Rarity.COMMON), + BIRCH_BUTTON(Material.BIRCH_BUTTON, Rarity.COMMON), + BIRCH_BOAT(Material.BIRCH_BOAT, Rarity.COMMON), + BIRCH_CHEST_BOAT(Material.BIRCH_CHEST_BOAT, Rarity.COMMON), + BIRCH_SIGN(Material.BIRCH_SIGN, Rarity.COMMON), + BIRCH_HANGING_SIGN(Material.BIRCH_HANGING_SIGN, Rarity.COMMON), + + DARK_OAK_LOG(Material.DARK_OAK_LOG, Rarity.COMMON), + STRIPPED_DARK_OAK_LOG(Material.STRIPPED_DARK_OAK_LOG, Rarity.COMMON), + DARK_OAK_WOOD(Material.DARK_OAK_WOOD, Rarity.COMMON), + STRIPPED_DARK_OAK_WOOD(Material.STRIPPED_DARK_OAK_WOOD, Rarity.COMMON), + DARK_OAK_PLANKS(Material.DARK_OAK_PLANKS, Rarity.COMMON), + DARK_OAK_SLAB(Material.DARK_OAK_SLAB, Rarity.COMMON), + DARK_OAK_STAIRS(Material.DARK_OAK_STAIRS, Rarity.COMMON), + DARK_OAK_FENCE(Material.DARK_OAK_FENCE, Rarity.COMMON), + DARK_OAK_FENCE_GATE(Material.DARK_OAK_FENCE_GATE, Rarity.COMMON), + DARK_OAK_DOOR(Material.DARK_OAK_DOOR, Rarity.COMMON), + DARK_OAK_TRAPDOOR(Material.DARK_OAK_TRAPDOOR, Rarity.COMMON), + DARK_OAK_PRESSURE_PLATE(Material.DARK_OAK_PRESSURE_PLATE, Rarity.COMMON), + DARK_OAK_BUTTON(Material.DARK_OAK_BUTTON, Rarity.COMMON), + DARK_OAK_BOAT(Material.DARK_OAK_BOAT, Rarity.COMMON), + DARK_OAK_CHEST_BOAT(Material.DARK_OAK_CHEST_BOAT, Rarity.COMMON), + DARK_OAK_SIGN(Material.DARK_OAK_SIGN, Rarity.COMMON), + DARK_OAK_HANGING_SIGN(Material.DARK_OAK_HANGING_SIGN, Rarity.COMMON), + + JUNGLE_LOG(Material.JUNGLE_LOG, Rarity.COMMON), + STRIPPED_JUNGLE_LOG(Material.STRIPPED_JUNGLE_LOG, Rarity.COMMON), + JUNGLE_WOOD(Material.JUNGLE_WOOD, Rarity.COMMON), + STRIPPED_JUNGLE_WOOD(Material.STRIPPED_JUNGLE_WOOD, Rarity.COMMON), + JUNGLE_PLANKS(Material.JUNGLE_PLANKS, Rarity.COMMON), + JUNGLE_SLAB(Material.JUNGLE_SLAB, Rarity.COMMON), + JUNGLE_STAIRS(Material.JUNGLE_STAIRS, Rarity.COMMON), + JUNGLE_FENCE(Material.JUNGLE_FENCE, Rarity.COMMON), + JUNGLE_FENCE_GATE(Material.JUNGLE_FENCE_GATE, Rarity.COMMON), + JUNGLE_DOOR(Material.JUNGLE_DOOR, Rarity.COMMON), + JUNGLE_TRAPDOOR(Material.JUNGLE_TRAPDOOR, Rarity.COMMON), + JUNGLE_PRESSURE_PLATE(Material.JUNGLE_PRESSURE_PLATE, Rarity.COMMON), + JUNGLE_BUTTON(Material.JUNGLE_BUTTON, Rarity.COMMON), + JUNGLE_BOAT(Material.JUNGLE_BOAT, Rarity.COMMON), + JUNGLE_CHEST_BOAT(Material.JUNGLE_CHEST_BOAT, Rarity.COMMON), + JUNGLE_SIGN(Material.JUNGLE_SIGN, Rarity.COMMON), + JUNGLE_HANGING_SIGN(Material.JUNGLE_HANGING_SIGN, Rarity.COMMON), + + SPRUCE_LOG(Material.SPRUCE_LOG, Rarity.COMMON), + STRIPPED_SPRUCE_LOG(Material.STRIPPED_SPRUCE_LOG, Rarity.COMMON), + SPRUCE_WOOD(Material.SPRUCE_WOOD, Rarity.COMMON), + STRIPPED_SPRUCE_WOOD(Material.STRIPPED_SPRUCE_WOOD, Rarity.COMMON), + SPRUCE_PLANKS(Material.SPRUCE_PLANKS, Rarity.COMMON), + SPRUCE_SLAB(Material.SPRUCE_SLAB, Rarity.COMMON), + SPRUCE_STAIRS(Material.SPRUCE_STAIRS, Rarity.COMMON), + SPRUCE_FENCE(Material.SPRUCE_FENCE, Rarity.COMMON), + SPRUCE_FENCE_GATE(Material.SPRUCE_FENCE_GATE, Rarity.COMMON), + SPRUCE_DOOR(Material.SPRUCE_DOOR, Rarity.COMMON), + SPRUCE_TRAPDOOR(Material.SPRUCE_TRAPDOOR, Rarity.COMMON), + SPRUCE_PRESSURE_PLATE(Material.SPRUCE_PRESSURE_PLATE, Rarity.COMMON), + SPRUCE_BUTTON(Material.SPRUCE_BUTTON, Rarity.COMMON), + SPRUCE_BOAT(Material.SPRUCE_BOAT, Rarity.COMMON), + SPRUCE_CHEST_BOAT(Material.SPRUCE_CHEST_BOAT, Rarity.COMMON), + SPRUCE_SIGN(Material.SPRUCE_SIGN, Rarity.COMMON), + SPRUCE_HANGING_SIGN(Material.SPRUCE_HANGING_SIGN, Rarity.COMMON), + + BAMBOO_BLOCK(Material.BAMBOO_BLOCK, Rarity.COMMON), + STRIPPED_BAMBOO_BLOCK(Material.STRIPPED_BAMBOO_BLOCK, Rarity.COMMON), + BAMBOO_PLANKS(Material.BAMBOO_PLANKS, Rarity.COMMON), + BAMBOO_MOSAIC(Material.BAMBOO_MOSAIC, Rarity.COMMON), + BAMBOO_SLAB(Material.BAMBOO_SLAB, Rarity.COMMON), + BAMBOO_MOSAIC_SLAB(Material.BAMBOO_MOSAIC_SLAB, Rarity.COMMON), + BAMBOO_STAIRS(Material.BAMBOO_STAIRS, Rarity.COMMON), + BAMBOO_MOSAIC_STAIRS(Material.BAMBOO_MOSAIC_STAIRS, Rarity.COMMON), + BAMBOO_FENCE(Material.BAMBOO_FENCE, Rarity.COMMON), + BAMBOO_FENCE_GATE(Material.BAMBOO_FENCE_GATE, Rarity.COMMON), + BAMBOO_DOOR(Material.BAMBOO_DOOR, Rarity.COMMON), + BAMBOO_TRAPDOOR(Material.BAMBOO_TRAPDOOR, Rarity.COMMON), + BAMBOO_PRESSURE_PLATE(Material.BAMBOO_PRESSURE_PLATE, Rarity.COMMON), + BAMBOO_BUTTON(Material.BAMBOO_BUTTON, Rarity.COMMON), + BAMBOO_RAFT(Material.BAMBOO_RAFT, Rarity.COMMON), + BAMBOO_CHEST_RAFT(Material.BAMBOO_CHEST_RAFT, Rarity.COMMON), + BAMBOO_SIGN(Material.BAMBOO_SIGN, Rarity.COMMON), + BAMBOO_HANGING_SIGN(Material.BAMBOO_HANGING_SIGN, Rarity.COMMON), + + WARPED_STEM(Material.WARPED_STEM, Rarity.COMMON), + STRIPPED_WARPED_STEM(Material.STRIPPED_WARPED_STEM, Rarity.COMMON), + WARPED_HYPHAE(Material.WARPED_HYPHAE, Rarity.COMMON), + STRIPPED_WARPED_HYPHAE(Material.STRIPPED_WARPED_HYPHAE, Rarity.COMMON), + WARPED_PLANKS(Material.WARPED_PLANKS, Rarity.COMMON), + WARPED_SLAB(Material.WARPED_SLAB, Rarity.COMMON), + WARPED_STAIRS(Material.WARPED_STAIRS, Rarity.COMMON), + WARPED_FENCE(Material.WARPED_FENCE, Rarity.COMMON), + WARPED_FENCE_GATE(Material.WARPED_FENCE_GATE, Rarity.COMMON), + WARPED_DOOR(Material.WARPED_DOOR, Rarity.COMMON), + WARPED_TRAPDOOR(Material.WARPED_TRAPDOOR, Rarity.COMMON), + WARPED_PRESSURE_PLATE(Material.WARPED_PRESSURE_PLATE, Rarity.COMMON), + WARPED_BUTTON(Material.WARPED_BUTTON, Rarity.COMMON), + WARPED_SIGN(Material.WARPED_SIGN, Rarity.COMMON), + WARPED_HANGING_SIGN(Material.WARPED_HANGING_SIGN, Rarity.COMMON), + + CRIMSON_STEM(Material.CRIMSON_STEM, Rarity.COMMON), + STRIPPED_CRIMSON_STEM(Material.STRIPPED_CRIMSON_STEM, Rarity.COMMON), + CRIMSON_HYPHAE(Material.CRIMSON_HYPHAE, Rarity.COMMON), + STRIPPED_CRIMSON_HYPHAE(Material.STRIPPED_CRIMSON_HYPHAE, Rarity.COMMON), + CRIMSON_PLANKS(Material.CRIMSON_PLANKS, Rarity.COMMON), + CRIMSON_SLAB(Material.CRIMSON_SLAB, Rarity.COMMON), + CRIMSON_STAIRS(Material.CRIMSON_STAIRS, Rarity.COMMON), + CRIMSON_FENCE(Material.CRIMSON_FENCE, Rarity.COMMON), + CRIMSON_FENCE_GATE(Material.CRIMSON_FENCE_GATE, Rarity.COMMON), + CRIMSON_DOOR(Material.CRIMSON_DOOR, Rarity.COMMON), + CRIMSON_TRAPDOOR(Material.CRIMSON_TRAPDOOR, Rarity.COMMON), + CRIMSON_PRESSURE_PLATE(Material.CRIMSON_PRESSURE_PLATE, Rarity.COMMON), + CRIMSON_BUTTON(Material.CRIMSON_BUTTON, Rarity.COMMON), + CRIMSON_SIGN(Material.CRIMSON_SIGN, Rarity.COMMON), + CRIMSON_HANGING_SIGN(Material.CRIMSON_HANGING_SIGN, Rarity.COMMON), + + CHAIN(Material.CHAIN, Rarity.COMMON), + LADDER(Material.LADDER, Rarity.COMMON), + STONE(Material.STONE, Rarity.COMMON), + STONE_SLAB(Material.STONE_SLAB, Rarity.COMMON), + STONE_STAIRS(Material.STONE_STAIRS, Rarity.COMMON), + SMOOTH_STONE_SLAB(Material.SMOOTH_STONE_SLAB, Rarity.COMMON), + GRANITE(Material.GRANITE, Rarity.COMMON), + GRANITE_SLAB(Material.GRANITE_SLAB, Rarity.COMMON), + GRANITE_STAIRS(Material.GRANITE_STAIRS, Rarity.COMMON), + GRANITE_WALL(Material.GRANITE_WALL, Rarity.COMMON), + POLISHED_GRANITE(Material.POLISHED_GRANITE, Rarity.COMMON), + POLISHED_GRANITE_SLAB(Material.POLISHED_GRANITE_SLAB, Rarity.COMMON), + POLISHED_GRANITE_STAIRS(Material.POLISHED_GRANITE_STAIRS, Rarity.COMMON), + DIORITE(Material.DIORITE, Rarity.COMMON), + DIORITE_SLAB(Material.DIORITE_SLAB, Rarity.COMMON), + DIORITE_STAIRS(Material.DIORITE_STAIRS, Rarity.COMMON), + DIORITE_WALL(Material.DIORITE_WALL, Rarity.COMMON), + POLISHED_DIORITE(Material.POLISHED_DIORITE, Rarity.COMMON), + POLISHED_DIORITE_SLAB(Material.POLISHED_DIORITE_SLAB, Rarity.COMMON), + POLISHED_DIORITE_STAIRS(Material.POLISHED_DIORITE_STAIRS, Rarity.COMMON), + ANDESITE(Material.ANDESITE, Rarity.COMMON), + ANDESITE_SLAB(Material.ANDESITE_SLAB, Rarity.COMMON), + ANDESITE_STAIRS(Material.ANDESITE_STAIRS, Rarity.COMMON), + ANDESITE_WALL(Material.ANDESITE_WALL, Rarity.COMMON), + POLISHED_ANDESITE(Material.POLISHED_ANDESITE, Rarity.COMMON), + POLISHED_ANDESITE_SLAB(Material.POLISHED_ANDESITE_SLAB, Rarity.COMMON), + POLISHED_ANDESITE_STAIRS(Material.POLISHED_ANDESITE_STAIRS, Rarity.COMMON), + COBBLESTONE(Material.COBBLESTONE, Rarity.COMMON), + COBBLESTONE_SLAB(Material.COBBLESTONE_SLAB, Rarity.COMMON), + COBBLESTONE_STAIRS(Material.COBBLESTONE_STAIRS, Rarity.COMMON), + COBBLESTONE_WALL(Material.COBBLESTONE_WALL, Rarity.COMMON), + SANDSTONE(Material.SANDSTONE, Rarity.COMMON), + SANDSTONE_SLAB(Material.SANDSTONE_SLAB, Rarity.COMMON), + SANDSTONE_WALL(Material.SANDSTONE_WALL, Rarity.COMMON), + CUT_SANDSTONE(Material.CUT_SANDSTONE, Rarity.COMMON), + CUT_SANDSTONE_SLAB(Material.CUT_SANDSTONE_SLAB, Rarity.COMMON), + CHISELED_SANDSTONE(Material.CHISELED_SANDSTONE, Rarity.COMMON), + RED_SANDSTONE(Material.RED_SANDSTONE, Rarity.COMMON), + RED_SANDSTONE_SLAB(Material.RED_SANDSTONE_SLAB, Rarity.COMMON), + RED_SANDSTONE_STAIRS(Material.RED_SANDSTONE_STAIRS, Rarity.COMMON), + RED_SANDSTONE_WALL(Material.RED_SANDSTONE_WALL, Rarity.COMMON), + CUT_RED_SANDSTONE(Material.CUT_RED_SANDSTONE, Rarity.COMMON), + CUT_RED_SANDSTONE_SLAB(Material.CUT_RED_SANDSTONE_SLAB, Rarity.COMMON), + CHISELED_RED_SANDSTONE(Material.CHISELED_RED_SANDSTONE, Rarity.COMMON), + STONE_BRICKS(Material.STONE_BRICKS, Rarity.COMMON), + STONE_BRICK_SLAB(Material.STONE_BRICK_SLAB, Rarity.COMMON), + STONE_BRICK_STAIRS(Material.STONE_BRICK_STAIRS, Rarity.COMMON), + STONE_BRICK_WALL(Material.STONE_BRICK_WALL, Rarity.COMMON), + MOSSY_COBBLESTONE(Material.MOSSY_COBBLESTONE, Rarity.COMMON), + MOSSY_COBBLESTONE_SLAB(Material.MOSSY_COBBLESTONE_SLAB, Rarity.COMMON), + MOSSY_COBBLESTONE_STAIRS(Material.MOSSY_COBBLESTONE_STAIRS, Rarity.COMMON), + MOSSY_COBBLESTONE_WALL(Material.MOSSY_COBBLESTONE_WALL, Rarity.COMMON), + MOSSY_STONE_BRICKS(Material.MOSSY_STONE_BRICKS, Rarity.COMMON), + MOSSY_STONE_BRICK_SLAB(Material.MOSSY_STONE_BRICK_SLAB, Rarity.COMMON), + MOSSY_STONE_BRICK_STAIRS(Material.MOSSY_STONE_BRICK_STAIRS, Rarity.COMMON), + MOSSY_STONE_BRICK_WALL(Material.MOSSY_STONE_BRICK_WALL, Rarity.COMMON), + QUARTZ_BLOCK(Material.QUARTZ_BLOCK, Rarity.COMMON), + QUARTZ_SLAB(Material.QUARTZ_SLAB, Rarity.COMMON), + QUARTZ_STAIRS(Material.QUARTZ_STAIRS, Rarity.COMMON), + QUARTZ_PILLAR(Material.QUARTZ_PILLAR, Rarity.COMMON), + CHISELED_QUARTZ_BLOCK(Material.CHISELED_QUARTZ_BLOCK, Rarity.COMMON), + NETHER_BRICK_SLAB(Material.NETHER_BRICK_SLAB, Rarity.COMMON), + NETHER_BRICK_STAIRS(Material.NETHER_BRICK_STAIRS, Rarity.COMMON), + NETHER_BRICK_WALL(Material.NETHER_BRICK_WALL, Rarity.COMMON), + NETHER_BRICK_FENCE(Material.NETHER_BRICK_FENCE, Rarity.COMMON), + HONEYCOMB(Material.HONEYCOMB, Rarity.COMMON), + + WHITE_DYE(Material.WHITE_DYE, Rarity.COMMON), + ORANGE_DYE(Material.ORANGE_DYE, Rarity.COMMON), + MAGENTA_DYE(Material.MAGENTA_DYE, Rarity.COMMON), + LIGHT_BLUE_DYE(Material.LIGHT_BLUE_DYE, Rarity.COMMON), + YELLOW_DYE(Material.YELLOW_DYE, Rarity.COMMON), + LIME_DYE(Material.LIME_DYE, Rarity.COMMON), + PINK_DYE(Material.PINK_DYE, Rarity.COMMON), + GRAY_DYE(Material.GRAY_DYE, Rarity.COMMON), + LIGHT_GRAY_DYE(Material.LIGHT_GRAY_DYE, Rarity.COMMON), + CYAN_DYE(Material.CYAN_DYE, Rarity.COMMON), + PURPLE_DYE(Material.PURPLE_DYE, Rarity.COMMON), + BLUE_DYE(Material.BLUE_DYE, Rarity.COMMON), + BROWN_DYE(Material.BROWN_DYE, Rarity.COMMON), + RED_DYE(Material.RED_DYE, Rarity.COMMON), + BLACK_DYE(Material.BLACK_DYE, Rarity.COMMON), + GREEN_DYE(Material.GREEN_DYE, Rarity.COMMON), + + WHITE_WOOL(Material.WHITE_WOOL, Rarity.COMMON), + ORANGE_WOOL(Material.ORANGE_WOOL, Rarity.COMMON), + MAGENTA_WOOL(Material.MAGENTA_WOOL, Rarity.COMMON), + LIGHT_BLUE_WOOL(Material.LIGHT_BLUE_WOOL, Rarity.COMMON), + YELLOW_WOOL(Material.YELLOW_WOOL, Rarity.COMMON), + LIME_WOOL(Material.LIME_WOOL, Rarity.COMMON), + PINK_WOOL(Material.PINK_WOOL, Rarity.COMMON), + GRAY_WOOL(Material.GRAY_WOOL, Rarity.COMMON), + LIGHT_GRAY_WOOL(Material.LIGHT_GRAY_WOOL, Rarity.COMMON), + CYAN_WOOL(Material.CYAN_WOOL, Rarity.COMMON), + PURPLE_WOOL(Material.PURPLE_WOOL, Rarity.COMMON), + BLUE_WOOL(Material.BLUE_WOOL, Rarity.COMMON), + BROWN_WOOL(Material.BROWN_WOOL, Rarity.COMMON), + GREEN_WOOL(Material.GREEN_WOOL, Rarity.COMMON), + RED_WOOL(Material.RED_WOOL, Rarity.COMMON), + BLACK_WOOL(Material.BLACK_WOOL, Rarity.COMMON), + + WHITE_CARPET(Material.WHITE_CARPET, Rarity.COMMON), + ORANGE_CARPET(Material.ORANGE_CARPET, Rarity.COMMON), + MAGENTA_CARPET(Material.MAGENTA_CARPET, Rarity.COMMON), + LIGHT_BLUE_CARPET(Material.LIGHT_BLUE_CARPET, Rarity.COMMON), + YELLOW_CARPET(Material.YELLOW_CARPET, Rarity.COMMON), + LIME_CARPET(Material.LIME_CARPET, Rarity.COMMON), + PINK_CARPET(Material.PINK_CARPET, Rarity.COMMON), + GRAY_CARPET(Material.GRAY_CARPET, Rarity.COMMON), + LIGHT_GRAY_CARPET(Material.LIGHT_GRAY_CARPET, Rarity.COMMON), + CYAN_CARPET(Material.CYAN_CARPET, Rarity.COMMON), + PURPLE_CARPET(Material.PURPLE_CARPET, Rarity.COMMON), + BLUE_CARPET(Material.BLUE_CARPET, Rarity.COMMON), + BROWN_CARPET(Material.BROWN_CARPET, Rarity.COMMON), + GREEN_CARPET(Material.GREEN_CARPET, Rarity.COMMON), + RED_CARPET(Material.RED_CARPET, Rarity.COMMON), + BLACK_CARPET(Material.BLACK_CARPET, Rarity.COMMON), + + WHITE_BED(Material.WHITE_BED, Rarity.COMMON), + ORANGE_BED(Material.ORANGE_BED, Rarity.COMMON), + MAGENTA_BED(Material.MAGENTA_BED, Rarity.COMMON), + LIGHT_BLUE_BED(Material.LIGHT_BLUE_BED, Rarity.COMMON), + YELLOW_BED(Material.YELLOW_BED, Rarity.COMMON), + LIME_BED(Material.LIME_BED, Rarity.COMMON), + PINK_BED(Material.PINK_BED, Rarity.COMMON), + GRAY_BED(Material.GRAY_BED, Rarity.COMMON), + LIGHT_GRAY_BED(Material.LIGHT_GRAY_BED, Rarity.COMMON), + CYAN_BED(Material.CYAN_BED, Rarity.COMMON), + PURPLE_BED(Material.PURPLE_BED, Rarity.COMMON), + BLUE_BED(Material.BLUE_BED, Rarity.COMMON), + BROWN_BED(Material.BROWN_BED, Rarity.COMMON), + GREEN_BED(Material.GREEN_BED, Rarity.COMMON), + RED_BED(Material.RED_BED, Rarity.COMMON), + BLACK_BED(Material.BLACK_BED, Rarity.COMMON), + + WHITE_BANNER(Material.WHITE_BANNER, Rarity.COMMON), + ORANGE_BANNER(Material.ORANGE_BANNER, Rarity.COMMON), + MAGENTA_BANNER(Material.MAGENTA_BANNER, Rarity.COMMON), + LIGHT_BLUE_BANNER(Material.LIGHT_BLUE_BANNER, Rarity.COMMON), + YELLOW_BANNER(Material.YELLOW_BANNER, Rarity.COMMON), + LIME_BANNER(Material.LIME_BANNER, Rarity.COMMON), + PINK_BANNER(Material.PINK_BANNER, Rarity.COMMON), + GRAY_BANNER(Material.GRAY_BANNER, Rarity.COMMON), + LIGHT_GRAY_BANNER(Material.LIGHT_GRAY_BANNER, Rarity.COMMON), + CYAN_BANNER(Material.CYAN_BANNER, Rarity.COMMON), + PURPLE_BANNER(Material.PURPLE_BANNER, Rarity.COMMON), + BLUE_BANNER(Material.BLUE_BANNER, Rarity.COMMON), + BROWN_BANNER(Material.BROWN_BANNER, Rarity.COMMON), + GREEN_BANNER(Material.GREEN_BANNER, Rarity.COMMON), + RED_BANNER(Material.RED_BANNER, Rarity.COMMON), + BLACK_BANNER(Material.BLACK_BANNER, Rarity.COMMON), + + CANDLE(Material.CANDLE, Rarity.COMMON), + WHITE_CANDLE(Material.WHITE_CANDLE, Rarity.COMMON), + ORANGE_CANDLE(Material.ORANGE_CANDLE, Rarity.COMMON), + MAGENTA_CANDLE(Material.MAGENTA_CANDLE, Rarity.COMMON), + LIGHT_BLUE_CANDLE(Material.LIGHT_BLUE_CANDLE, Rarity.COMMON), + YELLOW_CANDLE(Material.YELLOW_CANDLE, Rarity.COMMON), + LIME_CANDLE(Material.LIME_CANDLE, Rarity.COMMON), + PINK_CANDLE(Material.PINK_CANDLE, Rarity.COMMON), + GRAY_CANDLE(Material.GRAY_CANDLE, Rarity.COMMON), + LIGHT_GRAY_CANDLE(Material.LIGHT_GRAY_CANDLE, Rarity.COMMON), + CYAN_CANDLE(Material.CYAN_CANDLE, Rarity.COMMON), + PURPLE_CANDLE(Material.PURPLE_CANDLE, Rarity.COMMON), + BLUE_CANDLE(Material.BLUE_CANDLE, Rarity.COMMON), + BROWN_CANDLE(Material.BROWN_CANDLE, Rarity.COMMON), + GREEN_CANDLE(Material.GREEN_CANDLE, Rarity.COMMON), + RED_CANDLE(Material.RED_CANDLE, Rarity.COMMON), + BLACK_CANDLE(Material.BLACK_CANDLE, Rarity.COMMON), + + GLASS(Material.GLASS, Rarity.COMMON), + WHITE_STAINED_GLASS(Material.WHITE_STAINED_GLASS, Rarity.COMMON), + ORANGE_STAINED_GLASS(Material.ORANGE_STAINED_GLASS, Rarity.COMMON), + MAGENTA_STAINED_GLASS(Material.MAGENTA_STAINED_GLASS, Rarity.COMMON), + LIGHT_BLUE_STAINED_GLASS(Material.LIGHT_BLUE_STAINED_GLASS, Rarity.COMMON), + YELLOW_STAINED_GLASS(Material.YELLOW_STAINED_GLASS, Rarity.COMMON), + LIME_STAINED_GLASS(Material.LIME_STAINED_GLASS, Rarity.COMMON), + PINK_STAINED_GLASS(Material.PINK_STAINED_GLASS, Rarity.COMMON), + GRAY_STAINED_GLASS(Material.GRAY_STAINED_GLASS, Rarity.COMMON), + LIGHT_GRAY_STAINED_GLASS(Material.LIGHT_GRAY_STAINED_GLASS, Rarity.COMMON), + CYAN_STAINED_GLASS(Material.CYAN_STAINED_GLASS, Rarity.COMMON), + PURPLE_STAINED_GLASS(Material.PURPLE_STAINED_GLASS, Rarity.COMMON), + BLUE_STAINED_GLASS(Material.BLUE_STAINED_GLASS, Rarity.COMMON), + BROWN_STAINED_GLASS(Material.BROWN_STAINED_GLASS, Rarity.COMMON), + GREEN_STAINED_GLASS(Material.GREEN_STAINED_GLASS, Rarity.COMMON), + RED_STAINED_GLASS(Material.RED_STAINED_GLASS, Rarity.COMMON), + BLACK_STAINED_GLASS(Material.BLACK_STAINED_GLASS, Rarity.COMMON), + + GLASS_PANE(Material.GLASS_PANE, Rarity.COMMON), + WHITE_STAINED_GLASS_PANE(Material.WHITE_STAINED_GLASS_PANE, Rarity.COMMON), + ORANGE_STAINED_GLASS_PANE(Material.ORANGE_STAINED_GLASS_PANE, Rarity.COMMON), + MAGENTA_STAINED_GLASS_PANE(Material.MAGENTA_STAINED_GLASS_PANE, Rarity.COMMON), + LIGHT_BLUE_STAINED_GLASS_PANE(Material.LIGHT_BLUE_STAINED_GLASS_PANE, Rarity.COMMON), + YELLOW_STAINED_GLASS_PANE(Material.YELLOW_STAINED_GLASS_PANE, Rarity.COMMON), + LIME_STAINED_GLASS_PANE(Material.LIME_STAINED_GLASS_PANE, Rarity.COMMON), + PINK_STAINED_GLASS_PANE(Material.PINK_STAINED_GLASS_PANE, Rarity.COMMON), + GRAY_STAINED_GLASS_PANE(Material.GRAY_STAINED_GLASS_PANE, Rarity.COMMON), + LIGHT_GRAY_STAINED_GLASS_PANE(Material.LIGHT_GRAY_STAINED_GLASS_PANE, Rarity.COMMON), + CYAN_STAINED_GLASS_PANE(Material.CYAN_STAINED_GLASS_PANE, Rarity.COMMON), + PURPLE_STAINED_GLASS_PANE(Material.PURPLE_STAINED_GLASS_PANE, Rarity.COMMON), + BLUE_STAINED_GLASS_PANE(Material.BLUE_STAINED_GLASS_PANE, Rarity.COMMON), + BROWN_STAINED_GLASS_PANE(Material.BROWN_STAINED_GLASS_PANE, Rarity.COMMON), + GREEN_STAINED_GLASS_PANE(Material.GREEN_STAINED_GLASS_PANE, Rarity.COMMON), + RED_STAINED_GLASS_PANE(Material.RED_STAINED_GLASS_PANE, Rarity.COMMON), + BLACK_STAINED_GLASS_PANE(Material.BLACK_STAINED_GLASS_PANE, Rarity.COMMON), + + TERRACOTTA(Material.TERRACOTTA, Rarity.COMMON), + WHITE_TERRACOTTA(Material.WHITE_TERRACOTTA, Rarity.COMMON), + ORANGE_TERRACOTTA(Material.ORANGE_TERRACOTTA, Rarity.COMMON), + MAGENTA_TERRACOTTA(Material.MAGENTA_TERRACOTTA, Rarity.COMMON), + LIGHT_BLUE_TERRACOTTA(Material.LIGHT_BLUE_TERRACOTTA, Rarity.COMMON), + YELLOW_TERRACOTTA(Material.YELLOW_TERRACOTTA, Rarity.COMMON), + LIME_TERRACOTTA(Material.LIME_TERRACOTTA, Rarity.COMMON), + PINK_TERRACOTTA(Material.PINK_TERRACOTTA, Rarity.COMMON), + GRAY_TERRACOTTA(Material.GRAY_TERRACOTTA, Rarity.COMMON), + LIGHT_GRAY_TERRACOTTA(Material.LIGHT_GRAY_TERRACOTTA, Rarity.COMMON), + CYAN_TERRACOTTA(Material.CYAN_TERRACOTTA, Rarity.COMMON), + PURPLE_TERRACOTTA(Material.PURPLE_TERRACOTTA, Rarity.COMMON), + BLUE_TERRACOTTA(Material.BLUE_TERRACOTTA, Rarity.COMMON), + BROWN_TERRACOTTA(Material.BROWN_TERRACOTTA, Rarity.COMMON), + GREEN_TERRACOTTA(Material.GREEN_TERRACOTTA, Rarity.COMMON), + RED_TERRACOTTA(Material.RED_TERRACOTTA, Rarity.COMMON), + BLACK_TERRACOTTA(Material.BLACK_TERRACOTTA, Rarity.COMMON), + + WHITE_GLAZED_TERRACOTTA(Material.WHITE_GLAZED_TERRACOTTA, Rarity.COMMON), + ORANGE_GLAZED_TERRACOTTA(Material.ORANGE_GLAZED_TERRACOTTA, Rarity.COMMON), + MAGENTA_GLAZED_TERRACOTTA(Material.MAGENTA_GLAZED_TERRACOTTA, Rarity.COMMON), + LIGHT_BLUE_GLAZED_TERRACOTTA(Material.LIGHT_BLUE_GLAZED_TERRACOTTA, Rarity.COMMON), + YELLOW_GLAZED_TERRACOTTA(Material.YELLOW_GLAZED_TERRACOTTA, Rarity.COMMON), + LIME_GLAZED_TERRACOTTA(Material.LIME_GLAZED_TERRACOTTA, Rarity.COMMON), + PINK_GLAZED_TERRACOTTA(Material.PINK_GLAZED_TERRACOTTA, Rarity.COMMON), + GRAY_GLAZED_TERRACOTTA(Material.GRAY_GLAZED_TERRACOTTA, Rarity.COMMON), + LIGHT_GRAY_GLAZED_TERRACOTTA(Material.LIGHT_GRAY_GLAZED_TERRACOTTA, Rarity.COMMON), + CYAN_GLAZED_TERRACOTTA(Material.CYAN_GLAZED_TERRACOTTA, Rarity.COMMON), + PURPLE_GLAZED_TERRACOTTA(Material.PURPLE_GLAZED_TERRACOTTA, Rarity.COMMON), + BLUE_GLAZED_TERRACOTTA(Material.BLUE_GLAZED_TERRACOTTA, Rarity.COMMON), + BROWN_GLAZED_TERRACOTTA(Material.BROWN_GLAZED_TERRACOTTA, Rarity.COMMON), + GREEN_GLAZED_TERRACOTTA(Material.GREEN_GLAZED_TERRACOTTA, Rarity.COMMON), + RED_GLAZED_TERRACOTTA(Material.RED_GLAZED_TERRACOTTA, Rarity.COMMON), + BLACK_GLAZED_TERRACOTTA(Material.BLACK_GLAZED_TERRACOTTA, Rarity.COMMON), + + WITHER_ROSE(Material.WITHER_ROSE, Rarity.COMMON), + CORNFLOWER(Material.CORNFLOWER, Rarity.COMMON), + LILY_OF_THE_VALLEY(Material.LILY_OF_THE_VALLEY, Rarity.COMMON), + SUNFLOWER(Material.SUNFLOWER, Rarity.COMMON), + BEETROOT(Material.BEETROOT, Rarity.COMMON), + RED_TULIP(Material.RED_TULIP, Rarity.COMMON), + ORANGE_TULIP(Material.ORANGE_TULIP, Rarity.COMMON), + PINK_TULIP(Material.PINK_TULIP, Rarity.COMMON), + WHITE_TULIP(Material.WHITE_TULIP, Rarity.COMMON), + ROSE_BUSH(Material.ROSE_BUSH, Rarity.COMMON), + TORCHFLOWER(Material.TORCHFLOWER, Rarity.COMMON), + PITCHER_PLANT(Material.PITCHER_PLANT, Rarity.COMMON), + BLUE_ORCHID(Material.BLUE_ORCHID, Rarity.COMMON), + PEONY(Material.PEONY, Rarity.COMMON), + PINK_PETALS(Material.PINK_PETALS, Rarity.COMMON), + LILAC(Material.LILAC, Rarity.COMMON), + ALLIUM(Material.ALLIUM, Rarity.COMMON), + AZURE_BLUET(Material.AZURE_BLUET, Rarity.COMMON), + OXEYE_DAISY(Material.OXEYE_DAISY, Rarity.COMMON), + + BREWING_STAND(Material.BREWING_STAND, Rarity.COMMON), + ENCHANTING_TABLE(Material.ENCHANTING_TABLE, Rarity.COMMON), + FURNACE(Material.FURNACE, Rarity.COMMON), + REDSTONE_TORCH(Material.REDSTONE_TORCH, Rarity.COMMON), + REPEATER(Material.REPEATER, Rarity.COMMON), + COMPARATOR(Material.COMPARATOR, Rarity.COMMON), + LEVER(Material.LEVER, Rarity.COMMON), + STONE_BUTTON(Material.STONE_BUTTON, Rarity.COMMON), + STONE_PRESSURE_PLATE(Material.STONE_PRESSURE_PLATE, Rarity.COMMON), + LIGHT_WEIGHTED_PRESSURE_PLATE(Material.LIGHT_WEIGHTED_PRESSURE_PLATE, Rarity.COMMON), + HEAVY_WEIGHTED_PRESSURE_PLATE(Material.HEAVY_WEIGHTED_PRESSURE_PLATE, Rarity.COMMON), + TRIPWIRE_HOOK(Material.TRIPWIRE_HOOK, Rarity.COMMON), + PISTON(Material.PISTON, Rarity.COMMON), + STICKY_PISTON(Material.STICKY_PISTON, Rarity.COMMON), + DISPENSER(Material.DISPENSER, Rarity.COMMON), + DROPPER(Material.DROPPER, Rarity.COMMON), + HOPPER(Material.HOPPER, Rarity.COMMON), + NOTE_BLOCK(Material.NOTE_BLOCK, Rarity.COMMON), + RAIL(Material.RAIL, Rarity.COMMON), + ACTIVATOR_RAIL(Material.ACTIVATOR_RAIL, Rarity.COMMON), + DETECTOR_RAIL(Material.DETECTOR_RAIL, Rarity.COMMON), + POWERED_RAIL(Material.POWERED_RAIL, Rarity.COMMON), + TNT(Material.TNT, Rarity.COMMON), + DAYLIGHT_DETECTOR(Material.DAYLIGHT_DETECTOR, Rarity.COMMON), + JUKEBOX(Material.JUKEBOX, Rarity.COMMON), + MINECART(Material.MINECART, Rarity.COMMON), + CHEST_MINECART(Material.CHEST_MINECART, Rarity.COMMON), + HOPPER_MINECART(Material.HOPPER_MINECART, Rarity.COMMON), + TNT_MINECART(Material.TNT_MINECART, Rarity.COMMON), + FURNACE_MINECART(Material.FURNACE_MINECART, Rarity.COMMON), + + /** + * Enchanted Items + */ + ENCHANTED_ACACIA_LOG(Material.ACACIA_LOG, Rarity.UNCOMMON), + ENCHANTED_BAKED_POTATO(Material.BAKED_POTATO, Rarity.UNCOMMON), + ENCHANTED_BIRCH_LOG(Material.BIRCH_LOG, Rarity.UNCOMMON), + ENCHANTED_SLIMEBALL(Material.SLIME_BALL, Rarity.UNCOMMON), + ENCHANTED_BLAZE_ROD(Material.BLAZE_ROD, Rarity.UNCOMMON), + ENCHANTED_BLAZE_POWDER(Material.BLAZE_POWDER, Rarity.UNCOMMON), + ENCHANTED_BONE(Material.BONE, Rarity.UNCOMMON), + ENCHANTED_CARROT(Material.CARROT, Rarity.UNCOMMON), + ENCHANTED_CHARCOAL(Material.CHARCOAL, Rarity.UNCOMMON), + ENCHANTED_COAL(Material.COAL, Rarity.UNCOMMON), + ENCHANTED_COBBLESTONE(Material.COBBLESTONE, Rarity.UNCOMMON), + ENCHANTED_COCOA_BEANS(Material.COCOA_BEANS, Rarity.UNCOMMON), + ENCHANTED_DARK_OAK_LOG(Material.DARK_OAK_LOG, Rarity.UNCOMMON), + ENCHANTED_DIAMOND(Material.DIAMOND, Rarity.UNCOMMON), + ENCHANTED_EGG(Material.EGG, Rarity.UNCOMMON), + SUPER_ENCHANTED_EGG(Material.POLAR_BEAR_SPAWN_EGG, Rarity.RARE), + OMEGA_ENCHANTED_EGG(Material.ENDERMITE_SPAWN_EGG, Rarity.EPIC), + ENCHANTED_EMERALD(Material.EMERALD, Rarity.UNCOMMON), + ENCHANTED_ENDER_PEARL(Material.ENDER_PEARL, Rarity.UNCOMMON), + ENCHANTED_DIAMOND_BLOCK(Material.DIAMOND_BLOCK, Rarity.RARE), + ENCHANTED_EMERALD_BLOCK(Material.EMERALD_BLOCK, Rarity.UNCOMMON), + ENCHANTED_GOLD_INGOT(Material.GOLD_INGOT, Rarity.UNCOMMON), + ENCHANTED_GOLD_BLOCK(Material.GOLD_BLOCK, Rarity.RARE), + ENCHANTED_JUNGLE_LOG(Material.JUNGLE_LOG, Rarity.UNCOMMON), + ENCHANTED_GUNPOWDER(Material.GUNPOWDER, Rarity.UNCOMMON), + ENCHANTED_IRON_BLOCK(Material.IRON_BLOCK, Rarity.RARE), + ENCHANTED_LEATHER(Material.LEATHER, Rarity.UNCOMMON), + ENCHANTED_OAK_LOG(Material.OAK_LOG, Rarity.UNCOMMON), + ENCHANTED_OBSIDIAN(Material.OBSIDIAN, Rarity.UNCOMMON), + ENCHANTED_PACKED_ICE(Material.PACKED_ICE, Rarity.UNCOMMON), + ENCHANTED_POTATO(Material.POTATO, Rarity.UNCOMMON), + ENCHANTED_PUMPKIN(Material.PUMPKIN, Rarity.UNCOMMON), + ENCHANTED_REDSTONE(Material.REDSTONE, Rarity.UNCOMMON), + ENCHANTED_REDSTONE_BLOCK(Material.REDSTONE_BLOCK, Rarity.RARE), + ENCHANTED_ROTTEN_FLESH(Material.ROTTEN_FLESH, Rarity.UNCOMMON), + ENCHANTED_SPONGE(Material.SPONGE, Rarity.UNCOMMON), + ENCHANTED_SPRUCE_LOG(Material.SPRUCE_LOG, Rarity.UNCOMMON), + ENCHANTED_STRING(Material.STRING, Rarity.UNCOMMON), + ENCHANTED_SUGAR(Material.SUGAR, Rarity.UNCOMMON), + ENCHANTED_SNOW_BLOCK(Material.SNOW_BLOCK, Rarity.UNCOMMON), + ENCHANTED_BROWN_MUSHROOM(Material.BROWN_MUSHROOM, Rarity.UNCOMMON), + ENCHANTED_RED_MUSHROOM(Material.RED_MUSHROOM, Rarity.UNCOMMON), + ENCHANTED_CACTUS_GREEN(Material.GREEN_DYE, Rarity.UNCOMMON), + ENCHANTED_CACTUS(Material.CACTUS, Rarity.RARE), + ENCHANTED_END_STONE(Material.END_STONE, Rarity.UNCOMMON), + ENCHANTED_EYE_OF_ENDER(Material.ENDER_EYE, Rarity.UNCOMMON), + ENCHANTED_ICE(Material.ICE, Rarity.UNCOMMON), + ENCHANTED_MAGMA_CREAM(Material.MAGMA_CREAM, Rarity.UNCOMMON), + ENCHANTED_BROWN_MUSHROOM_BLOCK(Material.BROWN_MUSHROOM_BLOCK, Rarity.RARE), + ENCHANTED_CLAY(Material.CLAY_BALL, Rarity.UNCOMMON), + ENCHANTED_CLOWNFISH(Material.TROPICAL_FISH, Rarity.UNCOMMON), + ENCHANTED_COD(Material.COD, Rarity.UNCOMMON), + ENCHANTED_COOKED_COD(Material.COOKED_COD, Rarity.RARE), + ENCHANTED_MUTTON(Material.MUTTON, Rarity.UNCOMMON), + ENCHANTED_COOKED_MUTTON(Material.COOKED_MUTTON, Rarity.RARE), + ENCHANTED_RAW_SALMON(Material.SALMON, Rarity.UNCOMMON), + ENCHANTED_COOKED_SALMON(Material.COOKED_SALMON, Rarity.UNCOMMON), + ENCHANTED_COOKIE(Material.COOKIE, Rarity.RARE), + ENCHANTED_DANDELION(Material.DANDELION, Rarity.UNCOMMON), + ENCHANTED_FEATHER(Material.FEATHER, Rarity.UNCOMMON), + ENCHANTED_SPIDER_EYE(Material.SPIDER_EYE, Rarity.UNCOMMON), + ENCHANTED_FERMENTED_SPIDER_EYE(Material.FERMENTED_SPIDER_EYE, Rarity.UNCOMMON), + ENCHANTED_FIREWORK_ROCKET(Material.FIREWORK_ROCKET, Rarity.RARE), + ENCHANTED_FLINT(Material.FLINT, Rarity.UNCOMMON), + ENCHANTED_GHAST_TEAR(Material.GHAST_TEAR, Rarity.UNCOMMON), + ENCHANTED_GLISTERING_MELON(Material.GLISTERING_MELON_SLICE, Rarity.RARE), + ENCHANTED_GLOWSTONE_DUST(Material.GLOWSTONE_DUST, Rarity.UNCOMMON), + ENCHANTED_GLOWSTONE(Material.GLOWSTONE, Rarity.UNCOMMON), + ENCHANTED_GOLDEN_CARROT(Material.GOLDEN_CARROT, Rarity.UNCOMMON), + ENCHANTED_PORK(Material.PORKCHOP, Rarity.UNCOMMON), + ENCHANTED_GRILLED_PORK(Material.COOKED_PORKCHOP, Rarity.RARE), + ENCHANTED_HAY_BALE(Material.HAY_BLOCK, Rarity.UNCOMMON), + ENCHANTED_ANCIENT_CLAW(Material.FLINT, Rarity.EPIC), + ENCHANTED_COAL_BLOCK(Material.COAL_BLOCK, Rarity.RARE), + ENCHANTED_BONE_BLOCK(Material.BONE_BLOCK, Rarity.RARE), + ENCHANTED_BREAD(Material.BREAD, Rarity.COMMON), + ENCHANTED_RED_MUSHROOM_BLOCK(Material.RED_MUSHROOM_BLOCK, Rarity.RARE), + ENCHANTED_INK_SAC(Material.INK_SAC, Rarity.UNCOMMON), + ENCHANTED_LAPIS_LAZULI(Material.LAPIS_LAZULI, Rarity.UNCOMMON), + ENCHANTED_LAPIS_LAZULI_BLOCK(Material.LAPIS_BLOCK, Rarity.RARE), + ENCHANTED_LILY_PAD(Material.LILY_PAD, Rarity.UNCOMMON), + ENCHANTED_MELON(Material.MELON_SLICE, Rarity.UNCOMMON), + ENCHANTED_MELON_BLOCK(Material.MELON, Rarity.RARE), + ENCHANTED_MITHRIL(Material.PRISMARINE_CRYSTALS, Rarity.RARE), + ENCHANTED_MYCELIUM(Material.MYCELIUM, Rarity.UNCOMMON), + ENCHANTED_MYCELIUM_CUBE(Material.PLAYER_HEAD, Rarity.RARE), + ENCHANTED_NETHER_WART(Material.NETHER_WART, Rarity.UNCOMMON), + ENCHANTED_NETHERRACK(Material.NETHERRACK, Rarity.UNCOMMON), + ENCHANTED_PAPER(Material.PAPER, Rarity.UNCOMMON), + ENCHANTED_POISONOUS_POTATO(Material.POISONOUS_POTATO, Rarity.UNCOMMON), + ENCHANTED_POPPY(Material.POPPY, Rarity.UNCOMMON), + ENCHANTED_PRISMARINE_CRYSTALS(Material.PRISMARINE_CRYSTALS, Rarity.UNCOMMON), + ENCHANTED_PRISMARINE_SHARD(Material.PRISMARINE_SHARD, Rarity.UNCOMMON), + ENCHANTED_PUFFERFISH(Material.PUFFERFISH, Rarity.UNCOMMON), + ENCHANTED_QUARTZ(Material.QUARTZ, Rarity.UNCOMMON), + ENCHANTED_QUARTZ_BLOCK(Material.QUARTZ_BLOCK, Rarity.RARE), + ENCHANTED_RABBIT_FOOT(Material.RABBIT_FOOT, Rarity.RARE), + ENCHANTED_RABBIT_HIDE(Material.RABBIT_HIDE, Rarity.RARE), + ENCHANTED_RAW_BEEF(Material.BEEF, Rarity.UNCOMMON), + ENCHANTED_RAW_CHICKEN(Material.CHICKEN, Rarity.UNCOMMON), + ENCHANTED_RAW_RABBIT(Material.RABBIT, Rarity.UNCOMMON), + ENCHANTED_SAND(Material.SAND, Rarity.UNCOMMON), + ENCHANTED_SEEDS(Material.WHEAT_SEEDS, Rarity.UNCOMMON), + ENCHANTED_SLIME_BLOCK(Material.SLIME_BLOCK, Rarity.RARE), + ENCHANTED_SUGAR_CANE(Material.SUGAR_CANE, Rarity.RARE), + ENCHANTED_SULPHUR(Material.GLOWSTONE_DUST, Rarity.RARE), + ENCHANTED_SULPHUR_CUBE(Material.PLAYER_HEAD, Rarity.RARE), + ENCHANTED_TITANIUM(Material.PLAYER_HEAD, Rarity.EPIC), + ENCHANTED_WET_SPONGE(Material.WET_SPONGE, Rarity.RARE), + ENCHANTED_WOOL(Material.WHITE_WOOL, Rarity.UNCOMMON), + ENCHANTED_SHARK_FIN(Material.PRISMARINE_SHARD, Rarity.EPIC), + ENCHANTED_RED_SAND(Material.RED_SAND, Rarity.UNCOMMON), + ENCHANTED_RED_SAND_CUBE(Material.PLAYER_HEAD, Rarity.RARE), + ENCHANTED_BONE_MEAL(Material.BONE_MEAL, Rarity.COMMON), + ; + + public final Material material; + public final Rarity rarity; + + ItemType(Material material, Rarity rarity) { + this.material = material; + this.rarity = rarity; + } + + public static @Nullable ItemType get(String name) { + try { + return ItemType.valueOf(name.replace("minecraft:", "").toUpperCase()); + } catch (Exception e) { + return null; + } + } + + public static boolean isVanillaReplaced(String item) { + return get(item) != null; + } + + public static @Nullable ItemType fromMaterial(Material material) { + String materialName = material.key().value(); + String formattedItemName = StringUtility.toNormalCase(materialName); + + for (ItemType itemType : ItemType.values()) { + if (itemType.material == material && + formattedItemName.equals(StringUtility.toNormalCase(itemType.getDisplayName()))) { + return itemType; + } + } + return null; + } + + @SneakyThrows + public String getDisplayName() { + return StringUtility.toNormalCase(this.name()); + } } \ No newline at end of file diff --git a/configuration/skyblock/Minestom.regions.csv b/configuration/skyblock/Minestom.regions.csv index 86ee17ce2..729720faf 100644 --- a/configuration/skyblock/Minestom.regions.csv +++ b/configuration/skyblock/Minestom.regions.csv @@ -55,7 +55,7 @@ coalmine_5,COAL_MINE,-15,75,-152,4,64,-167,HUB coalmine_6,COAL_MINE,4,64,-165,-20,73,-182,HUB coalmine_7,COAL_MINE,-7,69,-178,3,63,-165,HUB #goldmine_1,GOLD_MINE,52,136,-261,-106,14,-404, -#deepcavern_1,DEEP_CAVERN,181,235,-945,384,0,-1129, +#deepcavern_1,DEEP_CAVERNS,181,235,-945,384,0,-1129, #gunpowder,GUNPOWDER_MINES,408,160,-1015,211,143,-1119, #lapis_quarry,LAPIS_QUARRY,211,143,-1119,400,114,-980, #pigmens_den,PIGMENS_DEN,400,114,-980,223,85,-1118, diff --git a/configuration/skyblock/items/miscellaneous/dungeon.yml b/configuration/skyblock/items/miscellaneous/dungeon.yml index fbd61a3d0..bcde7170b 100644 --- a/configuration/skyblock/items/miscellaneous/dungeon.yml +++ b/configuration/skyblock/items/miscellaneous/dungeon.yml @@ -13,3 +13,7 @@ items: - id: ENCHANTED - id: RIGHT_CLICK_RECIPE recipe_item: NECRONS_HANDLE + - id: SUPERBOOM_TNT + rarity: RARE + components: + - id: ENCHANTED diff --git a/settings.gradle.kts b/settings.gradle.kts index 93849a77f..ea0d6de49 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,6 +15,7 @@ include(":loader") include(":type.prototypelobby") include(":type.thefarmingislands") include(":type.goldmine") +include(":type.deepcaverns") include(":type.island") include(":type.hub") include(":type.dungeonhub") diff --git a/type.deepcaverns/build.gradle.kts b/type.deepcaverns/build.gradle.kts new file mode 100644 index 000000000..421aa6c49 --- /dev/null +++ b/type.deepcaverns/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + java +} + +group = "net.swofty" +version = "3.0" + +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + toolchain { + languageVersion.set(JavaLanguageVersion.of(21)) + } +} + +dependencies { + implementation(project(":type.skyblockgeneric")) + implementation(project(":type.generic")) + implementation(project(":commons")) + implementation(project(":proxy.api")) + compileOnly("net.minestom:minestom:2025.08.18-1.21.8") { + 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") +} \ No newline at end of file diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/TypeDeepCavernsLoader.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/TypeDeepCavernsLoader.java new file mode 100644 index 000000000..c7c410ea7 --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/TypeDeepCavernsLoader.java @@ -0,0 +1,125 @@ +package net.swofty.type.deepcaverns; + +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.deepcaverns.tab.DeepCavernsServerModule; +import net.swofty.type.generic.SkyBlockTypeLoader; +import net.swofty.type.generic.entity.animalnpc.HypixelAnimalNPC; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.villager.HypixelVillagerNPC; +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 TypeDeepCavernsLoader implements SkyBlockTypeLoader { + @Override + public ServerType getType() { + return ServerType.SKYBLOCK_DEEP_CAVERNS; + } + + @Override + public void onInitialize(MinecraftServer server) { + Logger.info("TypeDeepCavernsLoader initialized!"); + } + + @Override + public void afterInitialize(MinecraftServer server) { + + } + + @Override + public LoaderValues getLoaderValues() { + return new LoaderValues( + (type) -> switch (type) { + default -> new Pos(4, 157, 85, -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 DeepCavernsServerModule(), + new AccountInformationModule() + )); + } + }; + } + + @Override + public List getTraditionalEvents() { + return SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.deepcaverns.events", + HypixelEventClass.class + ).collect(Collectors.toList()); + } + + @Override + public List getCustomEvents() { + return new ArrayList<>(); + } + + @Override + public List getNPCs() { + List npcs = new ArrayList<>(); + + npcs.addAll(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.deepcaverns.npcs", + HypixelNPC.class + ).toList()); + + return npcs; + } + + @Override + public List getServiceRedisListeners() { + return List.of(); + } + + @Override + public List getProxyRedisListeners() { + return List.of(); + } + + @Override + public List getVillagerNPCs() { + return new ArrayList<>(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.deepcaverns.villagers", + HypixelVillagerNPC.class + ).toList()); + } + + @Override + public List getAnimalNPCs() { + return new ArrayList<>(); + } + + @Override + public List getRequiredServices() { + return new ArrayList<>(List.of(ServiceType.DATA_MUTEX)); + } + + @Override + public @Nullable CustomWorlds getMainInstance() { + return CustomWorlds.SKYBLOCK_DEEP_CAVERNS; + } +} diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/events/ActionPlayerJoin.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/events/ActionPlayerJoin.java new file mode 100644 index 000000000..f0a580201 --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/events/ActionPlayerJoin.java @@ -0,0 +1,26 @@ +package net.swofty.type.deepcaverns.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.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUILiftOperator.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUILiftOperator.java new file mode 100644 index 000000000..550086faa --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUILiftOperator.java @@ -0,0 +1,118 @@ +package net.swofty.type.deepcaverns.gui; + +import net.minestom.server.event.inventory.InventoryPreClickEvent; +import net.minestom.server.inventory.InventoryType; +import net.minestom.server.item.ItemStack; +import net.minestom.server.item.Material; +import net.swofty.type.generic.gui.inventory.HypixelInventoryGUI; +import net.swofty.type.generic.gui.inventory.ItemStackCreator; +import net.swofty.type.generic.gui.inventory.item.GUIClickableItem; +import net.swofty.type.generic.user.HypixelPlayer; + +public class GUILiftOperator extends HypixelInventoryGUI { + public GUILiftOperator() { + super("Lift", InventoryType.CHEST_6_ROW); + } + + @Override + public boolean allowHotkeying() { + return false; + } + + @Override + public void onOpen(InventoryGUIOpenEvent event) { + fill(ItemStackCreator.createNamedItemStack(Material.BLACK_STAINED_GLASS_PANE)); + + + set(new GUIClickableItem(10) { + @Override + public ItemStack.Builder getItem(HypixelPlayer player) { + return ItemStackCreator.createNamedItemStack(Material.GOLD_INGOT); + } + + @Override + public void run(InventoryPreClickEvent event, HypixelPlayer player) { + + } + }); + + set(new GUIClickableItem(12) { + @Override + public ItemStack.Builder getItem(HypixelPlayer player) { + return ItemStackCreator.createNamedItemStack(Material.LAPIS_LAZULI); + } + + @Override + public void run(InventoryPreClickEvent event, HypixelPlayer player) { + + } + }); + + set(new GUIClickableItem(14) { + @Override + public ItemStack.Builder getItem(HypixelPlayer player) { + return ItemStackCreator.createNamedItemStack(Material.REDSTONE); + } + + @Override + public void run(InventoryPreClickEvent event, HypixelPlayer player) { + + } + }); + + set(new GUIClickableItem(16) { + @Override + public ItemStack.Builder getItem(HypixelPlayer player) { + return ItemStackCreator.createNamedItemStack(Material.EMERALD); + } + + @Override + public void run(InventoryPreClickEvent event, HypixelPlayer player) { + + } + }); + + set(new GUIClickableItem(29) { + @Override + public ItemStack.Builder getItem(HypixelPlayer player) { + return ItemStackCreator.createNamedItemStack(Material.DIAMOND); + } + + @Override + public void run(InventoryPreClickEvent event, HypixelPlayer player) { + + } + }); + + set(new GUIClickableItem(31) { + @Override + public ItemStack.Builder getItem(HypixelPlayer player) { + return ItemStackCreator.createNamedItemStack(Material.OBSIDIAN); + } + + @Override + public void run(InventoryPreClickEvent event, HypixelPlayer player) { + + } + }); + + set(new GUIClickableItem(33) { + @Override + public ItemStack.Builder getItem(HypixelPlayer player) { + return ItemStackCreator.createNamedItemStack(Material.PRISMARINE); + } + + @Override + public void run(InventoryPreClickEvent event, HypixelPlayer player) { + + } + }); + + updateItemStacks(getInventory(), getPlayer()); + } + + @Override + public void onBottomClick(InventoryPreClickEvent e) { + + } +} diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUIShopWalter.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUIShopWalter.java new file mode 100644 index 000000000..ef85ac4b4 --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUIShopWalter.java @@ -0,0 +1,17 @@ +package net.swofty.type.deepcaverns.gui; + +import net.swofty.commons.item.ItemType; +import net.swofty.type.skyblockgeneric.gui.SkyBlockShopGUI; +import net.swofty.type.skyblockgeneric.item.SkyBlockItem; +import net.swofty.type.skyblockgeneric.shop.type.CoinShopPrice; + +public class GUIShopWalter extends SkyBlockShopGUI { + public GUIShopWalter() { + super("Walter", 1, DEFAULT); + } + + @Override + public void initializeShopItems() { + attachItem(ShopItem.Stackable(new SkyBlockItem(ItemType.SUPERBOOM_TNT), 1, new CoinShopPrice(2500))); + } +} diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java new file mode 100644 index 000000000..42904d1fc --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java @@ -0,0 +1,46 @@ +package net.swofty.type.deepcaverns.npcs; + +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCLiftOperator extends HypixelNPC { + + public NPCLiftOperator() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"Lift Operator", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "W8e6ip++dGgqglbYiPyLxCEHUXpOMioWrf6bCJwMNPHmEFTJux+M0H4GZaDjs1+d7FcSHjg6rEbMWS1sZAL4TUh7Q9vCtEYlx0PfnkY42l1Qqo/tIpJvgY5J6RHZ1j1cvtfrgXfKU8AKpjZVDNNyAqc5iJWcgqAm1gj3SPH6SoVvfzZgx9avAKo3z440CRsIhLYwgwEtq8/sbkqi0y6cuwlCZ+reo7yy2Ohe5AwG0Sx7Tkkv0DIVC4wO2RYoP+4xw2MYi1SRWk9yv3ZKqjwhTP8ugB/xqK/R480vVrr7MLhCpLrbUzpuLiaAbfruF9/TmvBV2hXFSCrlqypo4EmLk1E3WSuJX5ls11+juht0M12MIUlmmYcsFjgnAux5tgJ+fQq3KWhrbYedEY4CG7swavIG71/ZZI/ugRCXz/KONOq7bXKn939CyIpPdfBBAo2RZhjk2QXG/bWODeTfJ6z5VlIivNzo65FCAdwJ54VQzmUcP86ID3/jrWQ5fE5fhPkGhpYtOlVn5S4xKdFtu6RfYYUX6cEPD6MRPcOzXB4ZvCzgD7QhKxIQDBc1S9XY35c6+ZDYHPokQa87iD053Yfft4PH/pZA21ovOcf7+Xa+AFu72wnsjbynkaZUqSrFz3mCdOl+TFynZe89SwgDX0t1mIPtGtJmtK5jbZpwFA4bqDE="; + } + + @Override + public String texture(HypixelPlayer player) { + return "eyJ0aW1lc3RhbXAiOjE1NTQ1NzE2OTkxOTAsInByb2ZpbGVJZCI6IjNmYzdmZGY5Mzk2MzRjNDE5MTE5OWJhM2Y3Y2MzZmVkIiwicHJvZmlsZU5hbWUiOiJZZWxlaGEiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzg2NTJhMDZmN2I5OWU0ODIyYjQ5NWJhOWI2MDg5ZDRkNTE1MWU4M2JlZDk1NmE3Y2NjYjg0N2VhNDZhMjU3MjUifX19"; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(45.500, 150.000, 15.500, 90f, 0f); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + + + } +} \ No newline at end of file diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java new file mode 100644 index 000000000..accbdd309 --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java @@ -0,0 +1,79 @@ +package net.swofty.type.deepcaverns.npcs; + +import net.minestom.server.coordinate.Pos; +import net.swofty.type.deepcaverns.gui.GUIShopWalter; +import net.swofty.type.generic.entity.npc.NPCDialogue; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +import java.util.List; + +public class NPCWalter extends NPCDialogue { + + public NPCWalter() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"Walter", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "pYSyVXmvIReEOZA6g7/m7dA1WCdC/GE9yj/78LN/cEwVwUf7OTYwadV9nv4DHaQSvw9qICXff25/ewa2ayer/HHhl6/9UX7nso/CZdc4nlyDkA9v6ywKu5yChgWHdpJKbYoDolIdOoYj5TFSAlN0rewNlLivEK2B+8BCugeNJbEiIcgmnq7sdovh7M2r6VH3ZXG7mvC6nq37aMsKxrT0mjkzRnTAMGgYv3Tdnu8kzcAQTBJWejdT4MsBBytcFPquQXdlt36+ng7n3ERGzB3F8nIdX2smAjft19hCfPbrbQQL4WRzQi2fyrACnYIaNACRnlhnu55+UGFYlUrdGeCEHmjLz0aFsipnmmq5xFAOyx3Vr/EAbyy5hSBN316yMeklDCgiGIqPgvjMTdpSMqglNEzgqxT/s2NCDbjpmdcTP8j44MfWd522ehAA/W+g9BIto2ERmF3AFm8NqA6LEjs1jyNOEAuL0rG7KoJ+p1bEvGW6V/2Z7zEUnF/KYAQpTmTsOWBssUFvFHUAytzoTABBuWFIv39Jb9uaLljMhWGYknwIPMmmnkw2UYzqvjbZ3VpHBoEN2FlGXGVe3K/pmSK/wrfR61vq+vQ2w7eOfmyx7GXqPTYRGdDJbuuTs0fpUDkx243Gjjt1p58zSl4l2tTAEji3yjWf4lT11y+hmBbYQqs="; + } + + @Override + public String texture(HypixelPlayer player) { + return "ewogICJ0aW1lc3RhbXAiIDogMTU5MzgyNTM2OTAzOSwKICAicHJvZmlsZUlkIiA6ICI4YzUzN2M3YWEzYjI0NWFmOGQ0ODY2YmIxZjhjMGU5YSIsCiAgInByb2ZpbGVOYW1lIiA6ICJCb0F0TmVlR2EiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDNhYzIxYjY1M2EyNzYzMmRiYzgzNzNjNmU2ZmJhNWI4Yzk3YjdlY2JmZWYyZDc5MzYzMGQxNDliMTE2YmE4MSIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(19.000, 156.000, -36.000, -25, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + if (isInDialogue(player)) return; + + setDialogue(player, "none").thenRun(() -> { + new GUIShopWalter().open(player); + }); + + } + + @Override + public NPCDialogue.DialogueSet[] getDialogueSets(HypixelPlayer player) { + return List.of( + NPCDialogue.DialogueSet.builder() + .key("none").lines(new String[]{ + "With the right tools, you can get through anything!", + }).build(), + NPCDialogue.DialogueSet.builder() + .key("abiphone").lines(new String[]{ // when clicking with an Abiphone + "✆ My abiphone is for Platinum-level donors of the Walter cause only.", + "✆ You know these superbooms don't craft themselves right?", + "You just need Sulphur Collection 7 and to then donate an Enchanted Sulphur Cube!", // then show "donate cube" option + }).build(), + NPCDialogue.DialogueSet.builder() + .key("donate_cube").lines(new String[]{ // when donating the cube with requirements met + "✆ Welcome to the Platinum club, high roller!", + "✆ Call me anytime!", + "✆ And before you ask... yes, I do try to commercialize all of my friendships.", + }).build(), + NPCDialogue.DialogueSet.builder() + .key("donate_cube_no_requirements").lines(new String[]{ // when donating the cube without requirements met + "✆ Mmh... you're missing something to become a Platinum-level donor...", + }).build() + ).stream().toArray(NPCDialogue.DialogueSet[]::new); + } +} \ No newline at end of file diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/tab/DeepCavernsServerModule.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/tab/DeepCavernsServerModule.java new file mode 100644 index 000000000..dd824e6b8 --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/tab/DeepCavernsServerModule.java @@ -0,0 +1,25 @@ +package net.swofty.type.deepcaverns.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 DeepCavernsServerModule 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: §7Deepe Caverns", TablistSkinRegistry.GRAY)); + entries.add(new TablistEntry(" Server: §8" + HypixelConst.getServerName(), TablistSkinRegistry.GRAY)); + + fillRestWithGray(entries); + + return entries; + } +} diff --git a/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerBlacksmith.java b/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerBlacksmith.java index 84560a7af..429d0edb8 100644 --- a/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerBlacksmith.java +++ b/type.goldmine/src/main/java/net/swofty/type/goldmine/villagers/VillagerBlacksmith.java @@ -65,7 +65,7 @@ public void onClick(PlayerClickVillagerNPCEvent e) { } @Override - public NPCVillagerDialogue.DialogueSet[] getDialogueSets() { + public DialogueSet[] getDialogueSets() { return List.of( DialogueSet.builder() .key("initial-hello").lines(new String[]{ @@ -80,6 +80,6 @@ public NPCVillagerDialogue.DialogueSet[] getDialogueSets() { "§e[NPC] Blacksmith§f: To reforge an item, place an item in my inventory. Reforging costs Coins - the more prestigious items cost more to reforge!", "§e[NPC] Blacksmith§f: However, this time I will reforge any item for the low price of Coal §8x10!" }).build() - ).stream().toArray(NPCVillagerDialogue.DialogueSet[]::new); + ).stream().toArray(DialogueSet[]::new); } } diff --git a/velocity.extension/src/main/java/net/swofty/velocity/SkyBlockVelocity.java b/velocity.extension/src/main/java/net/swofty/velocity/SkyBlockVelocity.java index f15c863eb..ee286ddd5 100644 --- a/velocity.extension/src/main/java/net/swofty/velocity/SkyBlockVelocity.java +++ b/velocity.extension/src/main/java/net/swofty/velocity/SkyBlockVelocity.java @@ -66,203 +66,219 @@ import java.util.stream.Stream; @Plugin( - id = "skyblock", - name = "SkyBlock", - version = "1.0", - description = "SkyBlock plugin for Velocity", - authors = {"Swofty"} + id = "skyblock", + name = "SkyBlock", + version = "1.0", + description = "SkyBlock plugin for Velocity", + authors = {"Swofty"} ) public class SkyBlockVelocity { - @Getter - private static ProxyServer server = null; - @Getter - private static SkyBlockVelocity plugin; - @Getter - private static RegisteredServer limboServer; - @Getter - private static boolean shouldAuthenticate = false; - @Getter - private static boolean supportCrossVersion = false; - @Inject - private ProxyServer proxy; - - @Inject - public SkyBlockVelocity(ProxyServer tempServer, Logger tempLogger, @DataDirectory Path dataDirectory) { - plugin = this; - server = tempServer; - - limboServer = server.registerServer(new ServerInfo("limbo", new InetSocketAddress(Configuration.get("limbo-host-name"), - Integer.parseInt(Configuration.get("limbo-port"))))); - } - - @Subscribe - public void onProxyInitialization(ProxyInitializeEvent event) { - server = proxy; - shouldAuthenticate = Configuration.getOrDefault("require-authentication", false); - supportCrossVersion = Configuration.getOrDefault("cross-version-support", false); - - /** - * initialize cross version support - */ - if (supportCrossVersion) { - ViaLoader.init(null, new SkyBlockVLLoader(), new SkyBlockViaInjector(), null, ViaBackwardsPlatformImpl::new, ViaRewindPlatformImpl::new); - } - /** - * Register packets - */ - server.getEventManager().register(this, PostLoginEvent.class, - (AwaitingEventExecutor) postLoginEvent -> EventTask.withContinuation(continuation -> { - injectPlayer(postLoginEvent.getPlayer()); - TestFlowManager.handlePlayerJoin(postLoginEvent.getPlayer().getUsername()); - continuation.resume(); - })); - server.getEventManager().register(this, PermissionsSetupEvent.class, - (AwaitingEventExecutor) permissionsEvent -> EventTask.withContinuation(continuation -> { - permissionsEvent.setProvider(permissionSubject -> PermissionFunction.ALWAYS_FALSE); - continuation.resume(); - })); - server.getEventManager().register(this, DisconnectEvent.class, PostOrder.LAST, - (AwaitingEventExecutor) disconnectEvent -> - disconnectEvent.getLoginStatus() == DisconnectEvent.LoginStatus.CONFLICTING_LOGIN - ? null - : EventTask.async(() -> { - // Handle test flow player leave - TestFlowManager.handlePlayerLeave(disconnectEvent.getPlayer().getUsername()); - removePlayer(disconnectEvent.getPlayer()); - }) - ); - - /** - * Register commands - */ - - CommandManager commandManager = proxy.getCommandManager(); - CommandMeta statusCommandMeta = commandManager.metaBuilder("serverstatus") - .aliases("status") - .plugin(this) - .build(); - - commandManager.register(statusCommandMeta, new ServerStatusCommand()); - - - /** - * Handle database - */ - new ProfilesDatabase("_placeHolder").connect(Configuration.get("mongodb")); - UserDatabase.connect(Configuration.get("mongodb")); - CoopDatabase.connect(Configuration.get("mongodb")); - - /** - * Setup Redis - */ - RedisAPI.generateInstance(Configuration.get("redis-uri")); - RedisAPI.getInstance().setFilterID("proxy"); - loopThroughPackage("net.swofty.velocity.redis.listeners", RedisListener.class) - .forEach(listener -> { - RedisAPI.getInstance().registerChannel( - listener.getClass().getAnnotation(ChannelListener.class).channel().getChannelName(), - (event2) -> { - listener.onMessage(event2.channel, event2.message); - }); - }); - for (FromProxyChannels channel : FromProxyChannels.values()) { - RedisMessage.registerProxyToServer(channel); - } - RedisAPI.getInstance().startListeners(); - - /** - * Setup GameManager - */ - GameManager.loopServers(server); - } - - @Subscribe - public void onPlayerJoin(PlayerChooseInitialServerEvent event) { - Player player = event.getPlayer(); - - if (!GameManager.hasType(ServerType.PROTOTYPE_LOBBY) || !GameManager.isAnyEmpty(ServerType.PROTOTYPE_LOBBY)) { - player.disconnect( - Component.text("§cThere are no Prototype Lobby servers available at the moment.") - ); - return; - } - - List gameServers = GameManager.getFromType(ServerType.PROTOTYPE_LOBBY); - if (TestFlowManager.isPlayerInTestFlow(player.getUsername())) { - TestFlowManager.ProxyTestFlowInstance instance = TestFlowManager.getTestFlowForPlayer(player.getUsername()); - player.sendPlainMessage("§7You are currently in test flow " + instance.getName() + "."); - player.sendPlainMessage("§7Servers involved include " + instance.getGameServers().stream().map(GameManager.GameServer::displayName).collect(Collectors.joining(", "))); - player.sendPlainMessage("§7We are expecting " + instance.getTotalExpectedServers() + " servers to instantiate."); - player.sendPlainMessage("§7Test flow has been running for " + instance.getUptime() / 1000 + " seconds."); - - gameServers.removeIf(server -> { - TestFlowManager.ProxyTestFlowInstance testFlowInstance = TestFlowManager.getFromServerUUID( - server.internalID() - ); - - return testFlowInstance == null || !instance.hasServer(server.internalID()); - }); - } else { - gameServers.removeIf(server -> { - TestFlowManager.ProxyTestFlowInstance testFlowInstance = TestFlowManager.getFromServerUUID( - server.internalID() - ); - - return testFlowInstance != null; - }); - } - - if (gameServers.isEmpty()) { - player.disconnect( - Component.text("§cThere are no servers (type=PROTOTYPE_LOBBY) servers available at the moment.") - ); - return; - } - - List configurations = BalanceConfigurations.configurations.get(ServerType.PROTOTYPE_LOBBY); - GameManager.GameServer toSendTo = gameServers.getFirst(); - - for (BalanceConfiguration configuration : configurations) { - GameManager.GameServer server = configuration.getServer(player, gameServers); - if (server != null) { - toSendTo = server; - break; - } - } - - // TODO: Force Resource Pack - event.setInitialServer(toSendTo.registeredServer()); - - if (shouldAuthenticate) { - RedisMessage.sendMessageToServer(toSendTo.internalID(), - FromProxyChannels.PROMPT_PLAYER_FOR_AUTHENTICATION, - new JSONObject().put("uuid", player.getUniqueId().toString())); - } - } - - @Subscribe - public void onServerCrash(KickedFromServerEvent event) { - // Send the player to the limbo - RegisteredServer originalServer = event.getServer(); - Component reason = event.getServerKickReason().orElse(Component.text( - "§cYour connection to the server was lost. Please try again later." - )); - ServerType serverType = GameManager.getTypeFromRegisteredServer(originalServer); - - event.setResult(KickedFromServerEvent.RedirectPlayer.create( - limboServer, - null - )); - - TransferHandler transferHandler = new TransferHandler(event.getPlayer()); - transferHandler.standardTransferTo(originalServer, serverType); - - CompletableFuture.delayedExecutor(GameManager.SLEEP_TIME + 300, TimeUnit.MILLISECONDS) - .execute(() -> { - // Determine if the registeredServer disconnect was due to a crash - // if it was, then we send the player back to another registeredServer - // of that type, otherwise we disconnect them for the same - // reason as the original + @Getter + private static ProxyServer server = null; + @Getter + private static SkyBlockVelocity plugin; + @Getter + private static RegisteredServer limboServer; + @Getter + private static boolean shouldAuthenticate = false; + @Getter + private static boolean supportCrossVersion = false; + @Inject + private ProxyServer proxy; + + @Inject + public SkyBlockVelocity(ProxyServer tempServer, Logger tempLogger, @DataDirectory Path dataDirectory) { + plugin = this; + server = tempServer; + + limboServer = server.registerServer(new ServerInfo("limbo", new InetSocketAddress(Configuration.get("limbo-host-name"), + Integer.parseInt(Configuration.get("limbo-port"))))); + } + + public static Stream loopThroughPackage(String packageName, Class clazz) { + Reflections reflections = new Reflections(packageName); + Set> subTypes = reflections.getSubTypesOf(clazz); + + return subTypes.stream() + .map(subClass -> { + try { + return clazz.cast(subClass.getDeclaredConstructor().newInstance()); + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | + InvocationTargetException e) { + return null; + } + }) + .filter(java.util.Objects::nonNull); + } + + @Subscribe + public void onProxyInitialization(ProxyInitializeEvent event) { + server = proxy; + shouldAuthenticate = Configuration.getOrDefault("require-authentication", false); + supportCrossVersion = Configuration.getOrDefault("cross-version-support", false); + + /** + * initialize cross version support + */ + if (supportCrossVersion) { + ViaLoader.init(null, new SkyBlockVLLoader(), new SkyBlockViaInjector(), null, ViaBackwardsPlatformImpl::new, ViaRewindPlatformImpl::new); + } + /** + * Register packets + */ + server.getEventManager().register(this, PostLoginEvent.class, + (AwaitingEventExecutor) postLoginEvent -> EventTask.withContinuation(continuation -> { + injectPlayer(postLoginEvent.getPlayer()); + TestFlowManager.handlePlayerJoin(postLoginEvent.getPlayer().getUsername()); + continuation.resume(); + })); + server.getEventManager().register(this, PermissionsSetupEvent.class, + (AwaitingEventExecutor) permissionsEvent -> EventTask.withContinuation(continuation -> { + permissionsEvent.setProvider(permissionSubject -> PermissionFunction.ALWAYS_FALSE); + continuation.resume(); + })); + server.getEventManager().register(this, DisconnectEvent.class, PostOrder.LAST, + (AwaitingEventExecutor) disconnectEvent -> + disconnectEvent.getLoginStatus() == DisconnectEvent.LoginStatus.CONFLICTING_LOGIN + ? null + : EventTask.async(() -> { + // Handle test flow player leave + TestFlowManager.handlePlayerLeave(disconnectEvent.getPlayer().getUsername()); + removePlayer(disconnectEvent.getPlayer()); + }) + ); + + /** + * Register commands + */ + + CommandManager commandManager = proxy.getCommandManager(); + CommandMeta statusCommandMeta = commandManager.metaBuilder("serverstatus") + .aliases("status") + .plugin(this) + .build(); + + commandManager.register(statusCommandMeta, new ServerStatusCommand()); + + + /** + * Handle database + */ + new ProfilesDatabase("_placeHolder").connect(Configuration.get("mongodb")); + UserDatabase.connect(Configuration.get("mongodb")); + CoopDatabase.connect(Configuration.get("mongodb")); + + /** + * Setup Redis + */ + RedisAPI.generateInstance(Configuration.get("redis-uri")); + RedisAPI.getInstance().setFilterID("proxy"); + loopThroughPackage("net.swofty.velocity.redis.listeners", RedisListener.class) + .forEach(listener -> { + RedisAPI.getInstance().registerChannel( + listener.getClass().getAnnotation(ChannelListener.class).channel().getChannelName(), + (event2) -> { + listener.onMessage(event2.channel, event2.message); + }); + }); + for (FromProxyChannels channel : FromProxyChannels.values()) { + RedisMessage.registerProxyToServer(channel); + } + RedisAPI.getInstance().startListeners(); + + /** + * Setup GameManager + */ + GameManager.loopServers(server); + } + + @Subscribe + public void onPlayerJoin(PlayerChooseInitialServerEvent event) { + Player player = event.getPlayer(); + + if (!GameManager.hasType(ServerType.SKYBLOCK_HUB) || !GameManager.isAnyEmpty(ServerType.SKYBLOCK_HUB)) { + player.disconnect( + Component.text("§cThere are no Prototype Lobby servers available at the moment.") + ); + return; + } + + List gameServers = GameManager.getFromType(ServerType.SKYBLOCK_HUB); + if (TestFlowManager.isPlayerInTestFlow(player.getUsername())) { + TestFlowManager.ProxyTestFlowInstance instance = TestFlowManager.getTestFlowForPlayer(player.getUsername()); + player.sendPlainMessage("§7You are currently in test flow " + instance.getName() + "."); + player.sendPlainMessage("§7Servers involved include " + instance.getGameServers().stream().map(GameManager.GameServer::displayName).collect(Collectors.joining(", "))); + player.sendPlainMessage("§7We are expecting " + instance.getTotalExpectedServers() + " servers to instantiate."); + player.sendPlainMessage("§7Test flow has been running for " + instance.getUptime() / 1000 + " seconds."); + + gameServers.removeIf(server -> { + TestFlowManager.ProxyTestFlowInstance testFlowInstance = TestFlowManager.getFromServerUUID( + server.internalID() + ); + + return testFlowInstance == null || !instance.hasServer(server.internalID()); + }); + } else { + gameServers.removeIf(server -> { + TestFlowManager.ProxyTestFlowInstance testFlowInstance = TestFlowManager.getFromServerUUID( + server.internalID() + ); + + return testFlowInstance != null; + }); + } + + if (gameServers.isEmpty()) { + player.disconnect( + Component.text("§cThere are no servers (type=PROTOTYPE_LOBBY) servers available at the moment.") + ); + return; + } + + List configurations = BalanceConfigurations.configurations.get(ServerType.PROTOTYPE_LOBBY); + GameManager.GameServer toSendTo = gameServers.getFirst(); + + for (BalanceConfiguration configuration : configurations) { + GameManager.GameServer server = configuration.getServer(player, gameServers); + if (server != null) { + toSendTo = server; + break; + } + } + + // TODO: Force Resource Pack + event.setInitialServer(toSendTo.registeredServer()); + + if (shouldAuthenticate) { + RedisMessage.sendMessageToServer(toSendTo.internalID(), + FromProxyChannels.PROMPT_PLAYER_FOR_AUTHENTICATION, + new JSONObject().put("uuid", player.getUniqueId().toString())); + } + } + + @Subscribe + public void onServerCrash(KickedFromServerEvent event) { + // Send the player to the limbo + RegisteredServer originalServer = event.getServer(); + Component reason = event.getServerKickReason().orElse(Component.text( + "§cYour connection to the server was lost. Please try again later." + )); + ServerType serverType = GameManager.getTypeFromRegisteredServer(originalServer); + + event.setResult(KickedFromServerEvent.RedirectPlayer.create( + limboServer, + null + )); + + TransferHandler transferHandler = new TransferHandler(event.getPlayer()); + transferHandler.standardTransferTo(originalServer, serverType); + + CompletableFuture.delayedExecutor(GameManager.SLEEP_TIME + 300, TimeUnit.MILLISECONDS) + .execute(() -> { + // Determine if the registeredServer disconnect was due to a crash + // if it was, then we send the player back to another registeredServer + // of that type, otherwise we disconnect them for the same + // reason as the original /*boolean isOnline = GameManager.getFromRegisteredServer(originalServer) != null; if (isOnline) { @@ -271,73 +287,57 @@ public void onServerCrash(KickedFromServerEvent event) { return; }*/ - try { - ServerType serverTypeToTry = serverType; - if (!GameManager.hasType(serverTypeToTry) || !GameManager.isAnyEmpty(serverTypeToTry)) { - serverTypeToTry = ServerType.PROTOTYPE_LOBBY; - } - - GameManager.GameServer server = BalanceConfigurations.getServerFor(event.getPlayer(), serverTypeToTry); - if (server == null) { - transferHandler.forceRemoveFromLimbo(); - event.getPlayer().disconnect(reason); - return; - } - transferHandler.noLimboTransferTo(server.registeredServer()); - - if (!serverTypeToTry.isSkyBlock()) { - event.getPlayer().sendPlainMessage("§cAn exception occurred in your connection, so you were put into the Prototype Lobby."); - } else { - event.getPlayer().sendPlainMessage("§cAn exception occurred in your connection, so you were put into another SkyBlock server."); - } - event.getPlayer().sendPlainMessage("§7Sending to server " + server.displayName() + "..."); - } catch (Exception e) { - Logger.getAnonymousLogger().log(Level.SEVERE, "An exception occurred while trying to transfer " + event.getPlayer().getUsername() + " to " + serverType, e); - transferHandler.forceRemoveFromLimbo(); - event.getPlayer().disconnect(reason); - } - }); - } - - @Subscribe - public void onPing(ProxyPingEvent event) { - event.setPing(new ServerPing( - event.getPing().getVersion(), - null, - Component.text(" §aHypixel Recreation §c[1.8-1.20]"), - event.getPing().getFavicon().orElse(null) - )); - } - - public static Stream loopThroughPackage(String packageName, Class clazz) { - Reflections reflections = new Reflections(packageName); - Set> subTypes = reflections.getSubTypesOf(clazz); - - return subTypes.stream() - .map(subClass -> { - try { - return clazz.cast(subClass.getDeclaredConstructor().newInstance()); - } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | - InvocationTargetException e) { - return null; - } - }) - .filter(java.util.Objects::nonNull); - } - - private void injectPlayer(Player player) { - final ConnectedPlayer connectedPlayer = (ConnectedPlayer) player; - Channel channel = connectedPlayer.getConnection().getChannel(); - ChannelPipeline pipeline = channel.pipeline(); - pipeline.addBefore(Connections.HANDLER, "PACKET", new PlayerChannelHandler(player)); - } - - private void removePlayer(final Player player) { - final ConnectedPlayer connectedPlayer = (ConnectedPlayer) player; - final Channel channel = connectedPlayer.getConnection().getChannel(); - - channel.eventLoop().submit(() -> { - channel.pipeline().remove("PACKET"); - }); - } + try { + ServerType serverTypeToTry = serverType; + if (!GameManager.hasType(serverTypeToTry) || !GameManager.isAnyEmpty(serverTypeToTry)) { + serverTypeToTry = ServerType.PROTOTYPE_LOBBY; + } + + GameManager.GameServer server = BalanceConfigurations.getServerFor(event.getPlayer(), serverTypeToTry); + if (server == null) { + transferHandler.forceRemoveFromLimbo(); + event.getPlayer().disconnect(reason); + return; + } + transferHandler.noLimboTransferTo(server.registeredServer()); + + if (!serverTypeToTry.isSkyBlock()) { + event.getPlayer().sendPlainMessage("§cAn exception occurred in your connection, so you were put into the Prototype Lobby."); + } else { + event.getPlayer().sendPlainMessage("§cAn exception occurred in your connection, so you were put into another SkyBlock server."); + } + event.getPlayer().sendPlainMessage("§7Sending to server " + server.displayName() + "..."); + } catch (Exception e) { + Logger.getAnonymousLogger().log(Level.SEVERE, "An exception occurred while trying to transfer " + event.getPlayer().getUsername() + " to " + serverType, e); + transferHandler.forceRemoveFromLimbo(); + event.getPlayer().disconnect(reason); + } + }); + } + + @Subscribe + public void onPing(ProxyPingEvent event) { + event.setPing(new ServerPing( + event.getPing().getVersion(), + null, + Component.text(" §aHypixel Recreation §c[1.8-1.20]"), + event.getPing().getFavicon().orElse(null) + )); + } + + private void injectPlayer(Player player) { + final ConnectedPlayer connectedPlayer = (ConnectedPlayer) player; + Channel channel = connectedPlayer.getConnection().getChannel(); + ChannelPipeline pipeline = channel.pipeline(); + pipeline.addBefore(Connections.HANDLER, "PACKET", new PlayerChannelHandler(player)); + } + + private void removePlayer(final Player player) { + final ConnectedPlayer connectedPlayer = (ConnectedPlayer) player; + final Channel channel = connectedPlayer.getConnection().getChannel(); + + channel.eventLoop().submit(() -> { + channel.pipeline().remove("PACKET"); + }); + } } 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 234a8c237..f776e635a 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 @@ -12,80 +12,83 @@ import java.util.Map; public class BalanceConfigurations { - public static HashMap> configurations = new HashMap<>(Map.of( - ServerType.SKYBLOCK_HUB, List.of( - new LowestPlayerCount() - ), - ServerType.PROTOTYPE_LOBBY, List.of( - new LowestPlayerCount() - ), - ServerType.SKYBLOCK_DUNGEON_HUB, List.of( - new LowestPlayerCount() - ), - ServerType.SKYBLOCK_THE_FARMING_ISLANDS, List.of( - new LowestPlayerCount() - ), - ServerType.SKYBLOCK_GOLD_MINE, List.of( - new LowestPlayerCount() - ), - ServerType.SKYBLOCK_ISLAND, List.of( - new IslandCheck(), - new LowestPlayerCount() - )) - ); + public static HashMap> configurations = new HashMap<>(Map.of( + ServerType.SKYBLOCK_HUB, List.of( + new LowestPlayerCount() + ), + ServerType.PROTOTYPE_LOBBY, List.of( + new LowestPlayerCount() + ), + ServerType.SKYBLOCK_DUNGEON_HUB, List.of( + new LowestPlayerCount() + ), + ServerType.SKYBLOCK_THE_FARMING_ISLANDS, List.of( + new LowestPlayerCount() + ), + ServerType.SKYBLOCK_GOLD_MINE, List.of( + new LowestPlayerCount() + ), + ServerType.SKYBLOCK_DEEP_CAVERNS, List.of( + new LowestPlayerCount() + ), + ServerType.SKYBLOCK_ISLAND, List.of( + new IslandCheck(), + new LowestPlayerCount() + )) + ); - public static @Nullable GameManager.GameServer getServerFor(Player player, ServerType type) { - if (TestFlowManager.isPlayerInTestFlow(player.getUsername())) { - player.sendPlainMessage("§eYou are currently in a network-isolated test flow, load balancing will be restricted to test flow servers!"); - player.sendPlainMessage("§8Executing test flow " + TestFlowManager.getTestFlowForPlayer(player.getUsername()).getName() + "..."); - } + public static @Nullable GameManager.GameServer getServerFor(Player player, ServerType type) { + if (TestFlowManager.isPlayerInTestFlow(player.getUsername())) { + player.sendPlainMessage("§eYou are currently in a network-isolated test flow, load balancing will be restricted to test flow servers!"); + player.sendPlainMessage("§8Executing test flow " + TestFlowManager.getTestFlowForPlayer(player.getUsername()).getName() + "..."); + } - try { - for (BalanceConfiguration configuration : configurations.get(type)) { - List serversToConsider = GameManager.getFromType(type); - if (TestFlowManager.isPlayerInTestFlow(player.getUsername())) { - serversToConsider.removeIf(server -> { - boolean remove = server.maxPlayers() <= server.registeredServer().getPlayersConnected().size(); + try { + for (BalanceConfiguration configuration : configurations.get(type)) { + List serversToConsider = GameManager.getFromType(type); + if (TestFlowManager.isPlayerInTestFlow(player.getUsername())) { + serversToConsider.removeIf(server -> { + boolean remove = server.maxPlayers() <= server.registeredServer().getPlayersConnected().size(); - if (!TestFlowManager.isServerInTestFlow(server.internalID())) { - remove = true; - } + if (!TestFlowManager.isServerInTestFlow(server.internalID())) { + remove = true; + } - TestFlowManager.ProxyTestFlowInstance testFlowInstance = TestFlowManager.getFromServerUUID( - server.internalID() - ); + TestFlowManager.ProxyTestFlowInstance testFlowInstance = TestFlowManager.getFromServerUUID( + server.internalID() + ); - if (!testFlowInstance.hasPlayer(player.getUsername())) { - remove = true; - } + if (!testFlowInstance.hasPlayer(player.getUsername())) { + remove = true; + } - return remove; - }); - } else { - serversToConsider.removeIf(server -> { - boolean remove = server.maxPlayers() <= server.registeredServer().getPlayersConnected().size(); + return remove; + }); + } else { + serversToConsider.removeIf(server -> { + boolean remove = server.maxPlayers() <= server.registeredServer().getPlayersConnected().size(); - if (TestFlowManager.isServerInTestFlow(server.internalID())) { - remove = true; - } + if (TestFlowManager.isServerInTestFlow(server.internalID())) { + remove = true; + } - return remove; - }); - } + return remove; + }); + } - GameManager.GameServer server = configuration.getServer(player, serversToConsider); + GameManager.GameServer server = configuration.getServer(player, serversToConsider); - if (server != null) { - if (TestFlowManager.isPlayerInTestFlow(player.getUsername())) { - player.sendPlainMessage("§8Done overriding the server manager for your test flow."); - } - return server; - } - } - return null; - } catch (Exception e) { - System.out.println("Error in trying to balance type " + type.name() + " for player " + player.getUsername()); - throw e; - } - } + if (server != null) { + if (TestFlowManager.isPlayerInTestFlow(player.getUsername())) { + player.sendPlainMessage("§8Done overriding the server manager for your test flow."); + } + return server; + } + } + return null; + } catch (Exception e) { + System.out.println("Error in trying to balance type " + type.name() + " for player " + player.getUsername()); + throw e; + } + } } From 2897b549a08fa702247f318cccd1036e715cc28c Mon Sep 17 00:00:00 2001 From: AriDev <75741608+ArikSquad@users.noreply.github.com> Date: Sat, 13 Dec 2025 22:01:25 +0200 Subject: [PATCH 006/102] feat: more npcs --- .gitignore | 1 + loader/build.gradle.kts | 3 + .../type/deepcaverns/npcs/NPCLapisMiner.java | 48 +++ .../deepcaverns/npcs/NPCLiftOperator.java | 33 +- .../deepcaverns/npcs/NPCRedstoneMiner.java | 48 +++ .../swofty/type/deepcaverns/npcs/NPCRhys.java | 48 +++ .../skyblockgeneric/utility/LaunchPads.java | 367 ++++++++++-------- 7 files changed, 373 insertions(+), 175 deletions(-) create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLapisMiner.java create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCRedstoneMiner.java create mode 100644 type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCRhys.java diff --git a/.gitignore b/.gitignore index 537d98c47..64124434b 100644 --- a/.gitignore +++ b/.gitignore @@ -46,5 +46,6 @@ build/ /configuration/skyblock/islands/hypixel_skyblock_island_template/ /configuration/skyblock/islands/hypixel_skyblock_hub/ /configuration/skyblock/islands/hypixel_skyblock_gold_mine/ +/configuration/skyblock/islands/* /configuration/hypixel_prototype_lobby/ .gradle/ diff --git a/loader/build.gradle.kts b/loader/build.gradle.kts index b40778789..de2c564f0 100644 --- a/loader/build.gradle.kts +++ b/loader/build.gradle.kts @@ -28,6 +28,7 @@ dependencies { implementation(project(":type.hub")) implementation(project(":type.thefarmingislands")) implementation(project(":type.goldmine")) + implementation(project(":type.deepcaverns")) implementation(project(":type.dungeonhub")) implementation(project(":type.skyblockgeneric")) implementation(project(":type.prototypelobby")) @@ -127,9 +128,11 @@ tasks.register("runWithTestFlow") { handler = trimmed.substringAfter("handler:").trim() inStartServers = false } + inStartServers && trimmed.startsWith("- ") -> { startServers.add(trimmed.substring(2).trim()) } + !trimmed.startsWith("#") && trimmed.isNotEmpty() && !trimmed.contains(":") -> { if (inStartServers) inStartServers = false } diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLapisMiner.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLapisMiner.java new file mode 100644 index 000000000..5bdfe273e --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLapisMiner.java @@ -0,0 +1,48 @@ +package net.swofty.type.deepcaverns.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCLapisMiner extends HypixelNPC { + + public NPCLapisMiner() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"Lapis Miner", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "SissRoKQWTHkTCNRnTMHimwaoqOA3OcENRzAEOAU+WZ+1NKJXqehyd6ntO3HyCzit9FlJSBigpCFKYEykR/yAhaFbyb9sbVv+HvO2OvttHkme+Nx9upGVOz7LeB+1tSiQtGEZgGqhOUxCppFsYWrVKUmGMSWf6TCnAv5TJHx1yjy0OgY5NpTaUOKW95egGKZEzbBUAvC7bi8n8Bfpv42yuYnAoMPQAQ2RvxRqNFNmTPsxy10y8x7v/GqxOIeC9gbBsklUE/UKEdyBE0I+fCn7MP80b94N0aAl5qIHH84/yzf1WMna4XRmywYoAf1MmH5Scl51RLeRwuCuwKobgGXTyViHtFkX+ELGrLOvw9SFRp98cvdr1ghoC7oyn3yaxXYC20Bz+OjOcq7LBn+Bq8NJk1yTZ4ePYVtNUZewV8kQpJL+zs6WvEiEh7raVF57BTaU+dkZ1BIW/BNv2xk3VZHR73lYxucI5oyT58mSUGZjUrsl6p9jirEXrc+iU9/pdtObV/CzWr53rMNNPZTLfMCrDYW+1a0YmRXPhYQ4KCOiZhH3utr1M58o8xNiw1Kf061ZCluA1LKV1CYyM0EffL2HADooDggpaq17Q6W6yScNqnROShL+sU6Aq3H+Sj2pa3KIni/OLRpBH+HodV/gZyh+MfTj73+uSZ9JCiC7dZkMkY="; + } + + @Override + public String texture(HypixelPlayer player) { + return "ewogICJ0aW1lc3RhbXAiIDogMTY5MzkzMDgxMjc2NCwKICAicHJvZmlsZUlkIiA6ICJmZDYwZjM2ZjU4NjE0ZjEyYjNjZDQ3YzJkODU1Mjk5YSIsCiAgInByb2ZpbGVOYW1lIiA6ICJSZWFkIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2JmYWFmNWRlMGQyNWFlMjZiMjg3YTJiYTUxOTYxYjk2OGEzYWRkOGJiYzI0NzJlOTdhNzZmZGM2OGNlNDFmNzgiCiAgICB9CiAgfQp9"; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(-10.500, 120.000, 35.500, -115, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + } +} \ No newline at end of file diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java index 42904d1fc..ff3aa3827 100644 --- a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java @@ -1,6 +1,7 @@ package net.swofty.type.deepcaverns.npcs; import net.minestom.server.coordinate.Pos; +import net.swofty.type.deepcaverns.gui.GUILiftOperator; import net.swofty.type.generic.entity.npc.HypixelNPC; import net.swofty.type.generic.entity.npc.NPCParameters; import net.swofty.type.generic.user.HypixelPlayer; @@ -27,9 +28,36 @@ public String texture(HypixelPlayer player) { @Override public Pos position(HypixelPlayer player) { - return new Pos(45.500, 150.000, 15.500, 90f, 0f); + final Pos[] positions = new Pos[]{ + new Pos(45.500, 150.000, 15.500, 90f, 0f), + new Pos(45.500, 121.000, 15.500, 90f, 0f), + new Pos(45.500, 101.000, 17.500, 90f, 0f), + new Pos(45.500, 66.000, 15.500, 90f, 0f), + new Pos(45.500, 38.000, 15.500, 90f, 0f), + new Pos(45.500, 13.0, 15.500, 90f, 0f), + }; + + final Pos playerPos = player.getPosition(); + double bestDistSq = Double.POSITIVE_INFINITY; + int closestIndex = 0; + + for (int i = 0; i < positions.length; i++) { + Pos pos = positions[i]; + double dx = playerPos.x() - pos.x(); + double dy = playerPos.y() - pos.y(); + double dz = playerPos.z() - pos.z(); + double distSq = dx * dx + dy * dy + dz * dz; + + if (distSq < bestDistSq) { + bestDistSq = distSq; + closestIndex = i; + } + } + + return positions[closestIndex]; } + @Override public boolean looking() { return true; @@ -40,7 +68,6 @@ public boolean looking() { @Override public void onClick(PlayerClickNPCEvent event) { SkyBlockPlayer player = (SkyBlockPlayer) event.player(); - - + new GUILiftOperator().open(player); } } \ No newline at end of file diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCRedstoneMiner.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCRedstoneMiner.java new file mode 100644 index 000000000..4c16f2eab --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCRedstoneMiner.java @@ -0,0 +1,48 @@ +package net.swofty.type.deepcaverns.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCRedstoneMiner extends HypixelNPC { + + public NPCRedstoneMiner() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"Redstone Miner", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "wJTZ9MCUjX/mtBuzZcey1VVlywKqV91n8hWUGyrR/37p+gCntLgGzjssYYWqKRWgVosrIPjtye5E23fYMv3lW+SEPdu3o14kjYl+ZPzXLJ/A3Kt8aJO+8TJthGzXGm2fKb3PTmvQVIvAxaoOzDwP9Q8JjXgZcUCoLtY1IGlcAlr4xWqUQNV3UsbNeWG/1W9otKgqrvX9oKBn+ScSQMPItIasG6VKRj/22S/kSlzgkS7ZdewpM6Yzk/sT2srvkKQuM561ZCX1AMq7xhr+OdJRg3zEX3G6PTVDBWk8pWPvTYvCVpkreEfh47WiFRGweWmB4lvTWITDj9dyOHwG1M08bR4w1oVOUkN+RzA7X1/4vSlwOIJIf0s/1JH+hmM1bIvGWl46ZqxitKUyq6/NfSFtWVnlXNshz1+5/eZ8DYGfKUtKiJQvxTU86mZ0kdeUiys97WB8Qs/x/nVoxgz61+LAAp9lQ3EetVgnfyUvJc8aegTnIuJwt18SoPB3w9RTZU40BE7EcXjUE/tcQ7aD/f7MTGhqNokfNmsGatLxOpi8Jg7Z9dKkXpYUIqRP2wm/5ahHfMfQYAamDVTEblpgfJcaEwMUlPlwOjHcwrlTi5a1DjA6s9V9d3SalYEtn+a+YrP51Ib4NhGMXVyE4jOQstMdzaG4JKpJYiNHmwNwU/4QY58="; + } + + @Override + public String texture(HypixelPlayer player) { + return "ewogICJ0aW1lc3RhbXAiIDogMTY5MzkzMDkxNTIyMiwKICAicHJvZmlsZUlkIiA6ICJiMGQ0YjI4YmMxZDc0ODg5YWYwZTg2NjFjZWU5NmFhYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNaW5lU2tpbl9vcmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTUwM2MwMDg5MDMyNjYwNTA2N2ZmMTZmZmZiYzJkMDUwMjI1MWIzNjgwYzFhY2MxZDY4Y2QzZDA2NGQwNTc3IgogICAgfQogIH0KfQ=="; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(25.000, 104.000, 16.500, -66, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + } +} \ No newline at end of file diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCRhys.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCRhys.java new file mode 100644 index 000000000..4bf0f7caa --- /dev/null +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCRhys.java @@ -0,0 +1,48 @@ +package net.swofty.type.deepcaverns.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCRhys extends HypixelNPC { + + public NPCRhys() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"Rhys", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "cEhw4KPnjOLHodZV5sBF0cDMUcmzFklYNbv8zR3G1+IwdkEfLxnXeSOeZRu3OrGOvxn6WwZWl/P4cZbfAxYEoVXvTYFesNM8lI0VNwuqt0QGz5sjkKMlQlEbdQilnw2Ki77SAqFqd8XHknYuUku/XpMEFCvDaS96SwTkQRwitE8EhJb5/X9AS6m/Wslu/F/AuKcZKc5UIXFr6geGV0XhJUpW8rBnWPxf4so5XKdQLXPvM8aActwAecXV4MkIPTsP1N6nOywEOeV5qs56AgoNgx44u+38Xg+0RV0wr9hzYHENPos7ZSfdVwd/tqAMTbyrKj4AGppl7MnSynEdgiBBk22qiF3g8vYgGj4O9w3h5185U9Ow7f2DihIy3mDAiFSvc77Hx/BGYkIxZ4HXWrKRj3INTxVSalB1RG7tuCHs4J/xAaDu2yI5zSedAX+L6VXeudIzpUPym5JaRc3alL1TW94ZQZ4W7QKw5fViLVORr4lve2fdDaz9KRUVkGeQx9L7Q81LaCV84E/8j0juzyHMtVdm+fmDERr+TSoa7REk6KIg0bpTqvyWiqJyygL8/sw02SuhqAupFdf3QOTLbLrh4qU8LtMvykl9V7n36uSTRZi0EVJasODGEVF2Qyt+toFSRdIvc6YUY+C2UJf3jI1C7E9hAuz42ayleKdGoezAsds="; + } + + @Override + public String texture(HypixelPlayer player) { + return "ewogICJ0aW1lc3RhbXAiIDogMTYwODMxNDY5NDY2OSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmIyMGIyM2MxYWEyYmUwMjcwZjAxNmI0YzkwZDZlZTZiODMzMGExN2NmZWY4Nzg2OWQ2YWQ2MGIyZmZiZjNiNSIKICAgIH0KICB9Cn0="; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(31.500, 12.000, 14.500, -90, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + } +} \ No newline at end of file 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 1e94868ff..9af864b31 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 @@ -12,8 +12,8 @@ import net.minestom.server.timer.TaskSchedule; import net.swofty.commons.ServerType; import net.swofty.type.generic.HypixelConst; -import net.swofty.type.skyblockgeneric.SkyBlockGenericLoader; import net.swofty.type.generic.entity.hologram.PlayerHolograms; +import net.swofty.type.skyblockgeneric.SkyBlockGenericLoader; import net.swofty.type.skyblockgeneric.skill.SkillCategories; import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; import org.jetbrains.annotations.Nullable; @@ -24,175 +24,198 @@ @Getter public enum LaunchPads { - VILLAGE_TO_FARMING(getSlimeBlocksNear(new Pos(79, 71, -185)), ServerType.SKYBLOCK_HUB, - new Pos(116.5, 74, -210.5), (player) -> { - player.sendTo(ServerType.SKYBLOCK_THE_FARMING_ISLANDS); - }, (player) -> player.getSkills().getCurrentLevel(SkillCategories.FARMING) >= 5, - "§cYou must be at least Farming Level V to join this island!", - (player) -> { - boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.FARMING) >= 5; - if (!hasRequirement) { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(80, 73.3, -184.5)) - .player(player) - .text(new String[]{"§bTravel To:", "§aThe Farming Islands", "§cRequires Farming Level 5"}) - .build(); - } else { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(80, 73.3, -184.5)) - .player(player) - .text(new String[]{"§bTravel To:", "§aThe Farming Islands"}) - .build(); - } - }), - FARMING_TO_VILLAGE(getSlimeBlocksNear(new Pos(111, 71, -202)), ServerType.SKYBLOCK_THE_FARMING_ISLANDS, - new Pos(74, 72, -180), (player) -> { - player.sendTo(ServerType.SKYBLOCK_HUB); - }, (player) -> true, - "", - (player) -> { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(111.5, 71.7, -202.5)) - .player(player) - .text(new String[]{"§bTravel To:", "§aThe Village"}) - .build(); - }), - VILLAGE_TO_GOLD_MINE(getSlimeBlocksNear(new Pos(-9, 63, -231)), ServerType.SKYBLOCK_HUB, // TODO: UPDATE TO PROPER POSITIONS AND INFO - new Pos(-5, 74, -268), (player) -> { - player.sendTo(ServerType.SKYBLOCK_GOLD_MINE); - }, (player) -> player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1, - "§cYou must be at least Mining Level I to join this island!", - (player) -> { - boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1; - if (!hasRequirement) { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-9, 63.3, -232)) - .player(player) - .text(new String[]{"§bTravel To:", "§aGold Mine", "§cRequires Mining Level 1"}) - .build(); - } else { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-9, 63.3, -232)) - .player(player) - .text(new String[]{"§bTravel To:", "§aGold Mine"}) - .build(); - } - }), - GOLD_MINE_TO_VILLAGE(getSlimeBlocksNear(new Pos(-4, 74, -272)), ServerType.SKYBLOCK_GOLD_MINE, - new Pos(-8, 70, -238), (player) -> { - player.sendTo(ServerType.SKYBLOCK_HUB); - }, (player) -> true, - "", - (player) -> { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-5, 73.3, -269)) - .player(player) - .text(new String[]{"§bTravel To:", "§aThe Village"}) - .build(); - }), - ; - - private static final List launchPads = new ArrayList<>(); - - private final List slimeBlocks; - private final ServerType serverType; - private final Pos destination; - private final Consumer afterFinished; - private final Function shouldAllow; - private final String rejectionMessage; - private final Function hologramDisplay; - - LaunchPads(List slimeBlocks, ServerType serverType, Pos destination, - Consumer<@NonNull SkyBlockPlayer> afterFinished, Function shouldAllow, String rejectionMessage, - Function<@NonNull SkyBlockPlayer, PlayerHolograms.ExternalPlayerHologram> hologramDisplay) { - this.slimeBlocks = slimeBlocks; - this.serverType = serverType; - this.destination = destination; - this.afterFinished = afterFinished; - this.shouldAllow = shouldAllow; - this.rejectionMessage = rejectionMessage; - this.hologramDisplay = hologramDisplay; - } - - public static void register(Scheduler scheduler) { - launchPads.addAll(Arrays.asList(LaunchPads.values())); - launchPads.removeIf(launchPad -> launchPad.serverType != HypixelConst.getTypeLoader().getType()); - Map hologramMap = new HashMap<>(); - - scheduler.scheduleTask(() -> { - for (LaunchPads launchPad : launchPads) { - List updated = new ArrayList<>(); - SkyBlockGenericLoader.getLoadedPlayers().forEach(player -> { - if (hologramMap.containsKey(player.getUuid())) - PlayerHolograms.removeExternalPlayerHologram(hologramMap.get(player.getUuid())); - - PlayerHolograms.ExternalPlayerHologram hologram = launchPad.hologramDisplay.apply(player); - hologramMap.put(player.getUuid(), hologram); - PlayerHolograms.addExternalPlayerHologram(hologram); - updated.add(player.getUuid()); - }); - - hologramMap.keySet().removeIf(uuid -> !updated.contains(uuid)); - } - }, TaskSchedule.seconds(2), TaskSchedule.seconds(2), ExecutionType.TICK_END); - - scheduler.scheduleTask(() -> { - for (LaunchPads launchPad : launchPads) { - for (Pos slimeBlock : launchPad.getSlimeBlocks()) { - SkyBlockGenericLoader.getLoadedPlayers().forEach(player -> { - if (slimeBlock.distance(player.getPosition()) <= 15) { - player.sendPacket(new ParticlePacket( - Particle.COMPOSTER, - false, - false, - slimeBlock.x(), - slimeBlock.y() + 1, - slimeBlock.z(), - 0.1f, - 0.1f, - 0.1f, - 0f, - 3 - )); - } - }); - } - } - }, TaskSchedule.seconds(2), TaskSchedule.tick(5), ExecutionType.TICK_END); - } - - public static @Nullable LaunchPads getLaunchPadInRange(Pos pos, double range) { - if (launchPads.isEmpty()) return null; - - for (LaunchPads launchPad : launchPads) { - for (Pos slimeBlock : launchPad.getSlimeBlocks()) { - if (slimeBlock.distance(pos) <= range) { - return launchPad; - } - } - } - return null; - } - - private static List getSlimeBlocksNear(Pos pos) { - Instance instance = HypixelConst.getInstanceContainer(); - if (instance == null) return new ArrayList<>(); - List toReturn = new ArrayList<>(); - - for (int x = -5; x <= 5; x++) { - for (int z = -5; z <= 5; z++) { - for (int y = -5; y <= 5; y++) { - Pos check = new Pos(pos.x() + x, pos.y() + y, pos.z() + z); - instance.loadChunk(check).join(); - - if (instance.getBlock(check) == Block.SLIME_BLOCK) - toReturn.add(check); - if (instance.getBlock(check) == Block.BARRIER) - instance.setBlock(check, Block.AIR); - } - } - } - - return toReturn; - } + VILLAGE_TO_FARMING(getSlimeBlocksNear(new Pos(79, 71, -185)), ServerType.SKYBLOCK_HUB, + new Pos(116.5, 74, -210.5), (player) -> { + player.sendTo(ServerType.SKYBLOCK_THE_FARMING_ISLANDS); + }, (player) -> player.getSkills().getCurrentLevel(SkillCategories.FARMING) >= 5, + "§cYou must be at least Farming Level V to join this island!", + (player) -> { + boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.FARMING) >= 5; + if (!hasRequirement) { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(80, 73.3, -184.5)) + .player(player) + .text(new String[]{"§bTravel To:", "§aThe Farming Islands", "§cRequires Farming Level 5"}) + .build(); + } else { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(80, 73.3, -184.5)) + .player(player) + .text(new String[]{"§bTravel To:", "§aThe Farming Islands"}) + .build(); + } + }), + FARMING_TO_VILLAGE(getSlimeBlocksNear(new Pos(111, 71, -202)), ServerType.SKYBLOCK_THE_FARMING_ISLANDS, + new Pos(74, 72, -180), (player) -> { + player.sendTo(ServerType.SKYBLOCK_HUB); + }, (player) -> true, + "", + (player) -> { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(111.5, 71.7, -202.5)) + .player(player) + .text(new String[]{"§bTravel To:", "§aThe Village"}) + .build(); + }), + VILLAGE_TO_GOLD_MINE(getSlimeBlocksNear(new Pos(-9, 63, -231)), ServerType.SKYBLOCK_HUB, // TODO: UPDATE TO PROPER POSITIONS AND INFO + new Pos(-5, 74, -268), (player) -> { + player.sendTo(ServerType.SKYBLOCK_GOLD_MINE); + }, (player) -> player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1, + "§cYou must be at least Mining Level I to join this island!", + (player) -> { + boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1; + if (!hasRequirement) { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-9, 63.3, -232)) + .player(player) + .text(new String[]{"§bTravel To:", "§aGold Mine", "§cRequires Mining Level 1"}) + .build(); + } else { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-9, 63.3, -232)) + .player(player) + .text(new String[]{"§bTravel To:", "§aGold Mine"}) + .build(); + } + }), + GOLD_MINE_TO_VILLAGE(getSlimeBlocksNear(new Pos(-4, 74, -272)), ServerType.SKYBLOCK_GOLD_MINE, + new Pos(-8, 70, -238), (player) -> { + player.sendTo(ServerType.SKYBLOCK_HUB); + }, (player) -> true, + "", + (player) -> { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-5, 73.3, -269)) + .player(player) + .text(new String[]{"§bTravel To:", "§aThe Village"}) + .build(); + }), + GOLD_MINE_TO_DEEP_CAVERNS(getSlimeBlocksNear(new Pos(-7, 67, -396)), ServerType.SKYBLOCK_GOLD_MINE, + new Pos(-4, 119, -491.5), (player) -> { + player.sendTo(ServerType.SKYBLOCK_DEEP_CAVERNS); + }, (player) -> true, + "", + (player) -> { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-7, 69, -396)) + .player(player) + .text(new String[]{"§bTravel To:", "§aDeep Caverns"}) + .build(); + }), + DEEP_CAVERNS_TO_GOLD_MINE(getSlimeBlocksNear(new Pos(3, 157, 85)), ServerType.SKYBLOCK_DEEP_CAVERNS, + new Pos(2, 150, 136), (player) -> { + player.sendTo(ServerType.SKYBLOCK_GOLD_MINE); + }, (player) -> true, + "", + (player) -> { + return PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(3, 159, 85)) + .player(player) + .text(new String[]{"§bTravel To:", "§aGold Mine"}) + .build(); + }); + + private static final List launchPads = new ArrayList<>(); + + private final List slimeBlocks; + private final ServerType serverType; + private final Pos destination; + private final Consumer afterFinished; + private final Function shouldAllow; + private final String rejectionMessage; + private final Function hologramDisplay; + + LaunchPads(List slimeBlocks, ServerType serverType, Pos destination, + Consumer<@NonNull SkyBlockPlayer> afterFinished, Function shouldAllow, String rejectionMessage, + Function<@NonNull SkyBlockPlayer, PlayerHolograms.ExternalPlayerHologram> hologramDisplay) { + this.slimeBlocks = slimeBlocks; + this.serverType = serverType; + this.destination = destination; + this.afterFinished = afterFinished; + this.shouldAllow = shouldAllow; + this.rejectionMessage = rejectionMessage; + this.hologramDisplay = hologramDisplay; + } + + public static void register(Scheduler scheduler) { + launchPads.addAll(Arrays.asList(LaunchPads.values())); + launchPads.removeIf(launchPad -> launchPad.serverType != HypixelConst.getTypeLoader().getType()); + Map hologramMap = new HashMap<>(); + + scheduler.scheduleTask(() -> { + for (LaunchPads launchPad : launchPads) { + List updated = new ArrayList<>(); + SkyBlockGenericLoader.getLoadedPlayers().forEach(player -> { + if (hologramMap.containsKey(player.getUuid())) + PlayerHolograms.removeExternalPlayerHologram(hologramMap.get(player.getUuid())); + + PlayerHolograms.ExternalPlayerHologram hologram = launchPad.hologramDisplay.apply(player); + hologramMap.put(player.getUuid(), hologram); + PlayerHolograms.addExternalPlayerHologram(hologram); + updated.add(player.getUuid()); + }); + + hologramMap.keySet().removeIf(uuid -> !updated.contains(uuid)); + } + }, TaskSchedule.seconds(2), TaskSchedule.seconds(2), ExecutionType.TICK_END); + + scheduler.scheduleTask(() -> { + for (LaunchPads launchPad : launchPads) { + for (Pos slimeBlock : launchPad.getSlimeBlocks()) { + SkyBlockGenericLoader.getLoadedPlayers().forEach(player -> { + if (slimeBlock.distance(player.getPosition()) <= 15) { + player.sendPacket(new ParticlePacket( + Particle.COMPOSTER, + false, + false, + slimeBlock.x(), + slimeBlock.y() + 1, + slimeBlock.z(), + 0.1f, + 0.1f, + 0.1f, + 0f, + 3 + )); + } + }); + } + } + }, TaskSchedule.seconds(2), TaskSchedule.tick(5), ExecutionType.TICK_END); + } + + public static @Nullable LaunchPads getLaunchPadInRange(Pos pos, double range) { + if (launchPads.isEmpty()) return null; + + for (LaunchPads launchPad : launchPads) { + for (Pos slimeBlock : launchPad.getSlimeBlocks()) { + if (slimeBlock.distance(pos) <= range) { + return launchPad; + } + } + } + return null; + } + + private static List getSlimeBlocksNear(Pos pos) { + Instance instance = HypixelConst.getInstanceContainer(); + if (instance == null) return new ArrayList<>(); + List toReturn = new ArrayList<>(); + + for (int x = -5; x <= 5; x++) { + for (int z = -5; z <= 5; z++) { + for (int y = -5; y <= 5; y++) { + Pos check = new Pos(pos.x() + x, pos.y() + y, pos.z() + z); + instance.loadChunk(check).join(); + + if (instance.getBlock(check) == Block.SLIME_BLOCK) + toReturn.add(check); + if (instance.getBlock(check) == Block.BARRIER) + instance.setBlock(check, Block.AIR); + } + } + } + + return toReturn; + } } From 09dc7c93928573ebb93cbe8f12ba45cc9a58b575 Mon Sep 17 00:00:00 2001 From: AriDev <75741608+ArikSquad@users.noreply.github.com> Date: Sat, 13 Dec 2025 23:40:32 +0200 Subject: [PATCH 007/102] feat: dwarven and more mining stuff --- .../java/net/swofty/commons/CustomWorlds.java | 1 + .../java/net/swofty/commons/ServerType.java | 1 + .../net/swofty/commons/StringUtility.java | 572 +-- configuration/skyblock/Minestom.regions.csv | 14 +- loader/build.gradle.kts | 1 + settings.gradle.kts | 1 + .../type/deepcaverns/gui/GUILiftOperator.java | 148 +- .../tab/DeepCavernsServerModule.java | 2 +- type.dwarvenmines/build.gradle.kts | 26 + .../dwarvenmines/TypeDwarvenMinesLoader.java | 125 + .../dwarvenmines/events/ActionPlayerJoin.java | 26 + .../dwarvenmines/npcs/NPCBankerBroadjaw.java | 44 + .../type/dwarvenmines/npcs/NPCBubu.java | 48 + .../type/dwarvenmines/npcs/NPCBulvar.java | 48 + .../dwarvenmines/npcs/NPCLiftOperator.java | 48 + .../dwarvenmines/npcs/NPCRoyalGuardOne.java | 48 + .../dwarvenmines/npcs/NPCRoyalGuardTwo.java | 48 + .../tab/DwarvenMinesServerModule.java | 25 + .../type/generic/entity/npc/HypixelNPC.java | 317 +- .../gui/inventory/ItemStackCreator.java | 492 +- .../data/monogdb/RegionDatabase.java | 163 +- .../skyblockgeneric/region/RegionType.java | 256 +- .../skill/skills/MiningSkill.java | 4404 ++++++++--------- .../utility/groups/Groups.java | 86 +- .../warps/TravelScrollIslands.java | 142 +- .../gamemanager/BalanceConfigurations.java | 3 + 26 files changed, 3794 insertions(+), 3295 deletions(-) create mode 100644 type.dwarvenmines/build.gradle.kts create mode 100644 type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/TypeDwarvenMinesLoader.java create mode 100644 type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/events/ActionPlayerJoin.java create mode 100644 type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBankerBroadjaw.java create mode 100644 type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBubu.java create mode 100644 type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBulvar.java create mode 100644 type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCLiftOperator.java create mode 100644 type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCRoyalGuardOne.java create mode 100644 type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCRoyalGuardTwo.java create mode 100644 type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/tab/DwarvenMinesServerModule.java diff --git a/commons/src/main/java/net/swofty/commons/CustomWorlds.java b/commons/src/main/java/net/swofty/commons/CustomWorlds.java index d84ce3d91..8138b5980 100644 --- a/commons/src/main/java/net/swofty/commons/CustomWorlds.java +++ b/commons/src/main/java/net/swofty/commons/CustomWorlds.java @@ -5,6 +5,7 @@ public enum CustomWorlds { SKYBLOCK_HUB("hypixel_skyblock_hub"), SKYBLOCK_GOLD_MINE("hypixel_skyblock_gold_mine"), SKYBLOCK_DEEP_CAVERNS("hypixel_skyblock_deep_caverns"), + SKYBLOCK_DWARVEN_MINES("hypixel_skyblock_dwarven_mines"), 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 def0d3bdb..8b5ba20ba 100644 --- a/commons/src/main/java/net/swofty/commons/ServerType.java +++ b/commons/src/main/java/net/swofty/commons/ServerType.java @@ -10,6 +10,7 @@ public enum ServerType { SKYBLOCK_THE_FARMING_ISLANDS(true), SKYBLOCK_GOLD_MINE(true), SKYBLOCK_DEEP_CAVERNS(true), + SKYBLOCK_DWARVEN_MINES(true), PROTOTYPE_LOBBY(false), BEDWARS_LOBBY(false), BEDWARS_GAME(false), diff --git a/commons/src/main/java/net/swofty/commons/StringUtility.java b/commons/src/main/java/net/swofty/commons/StringUtility.java index 6936e1641..5a48d61fd 100644 --- a/commons/src/main/java/net/swofty/commons/StringUtility.java +++ b/commons/src/main/java/net/swofty/commons/StringUtility.java @@ -17,284 +17,296 @@ import java.util.regex.Pattern; public class StringUtility { - public static final char[] ALPHABET = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'W', 'X', 'Y', 'Z' - }; - private static final DecimalFormat INTEGER_FORMAT = new DecimalFormat("#,###"); - private static final Pattern COLOR_PATTERN = Pattern.compile("§[0-9a-fk-or]"); - - public static String formatTimeAsAgo(long millis) { - long timeDifference = System.currentTimeMillis() - millis; - // Simplified the calculation logic by abstracting repetitive calculations - long[] timeUnits = {TimeUnit.DAYS.toMillis(1), TimeUnit.HOURS.toMillis(1), TimeUnit.MINUTES.toMillis(1)}; - String[] timeLabels = {"d ago", "h ago", "m ago"}; - for (int i = 0; i < timeUnits.length; i++) { - if (timeDifference >= timeUnits[i]) { - return (timeDifference / timeUnits[i]) + timeLabels[i]; - } - } - return "Just now"; - } - - public static String commaifyAndTh(double d) { - // "th" suffix for numbers ending in 11, 12, 13 - return switch ((int) d % 100) { - case 11, 12, 13 -> INTEGER_FORMAT.format(d) + "th"; - default -> switch ((int) d % 10) { - case 1 -> INTEGER_FORMAT.format(d) + "st"; - case 2 -> INTEGER_FORMAT.format(d) + "nd"; - case 3 -> INTEGER_FORMAT.format(d) + "rd"; - default -> INTEGER_FORMAT.format(d) + "th"; - }; - }; - } - - public static String formatTimeWentBy(long millis) { - long timeDifference = System.currentTimeMillis() - millis; - // Simplified the calculation logic by abstracting repetitive calculations - long[] timeUnits = {TimeUnit.DAYS.toMillis(1), TimeUnit.HOURS.toMillis(1), TimeUnit.MINUTES.toMillis(1)}; - String[] timeLabels = {"d", "h", "m"}; - for (int i = 0; i < timeUnits.length; i++) { - if (timeDifference >= timeUnits[i]) { - return (timeDifference / timeUnits[i]) + timeLabels[i]; - } - } - return "Just now"; - } - - public static String createLineProgressBar(int length, ChatColor progressColor, double current, double max) { - double percent = Math.min(current, max) / max; - long completed = Math.round((double) length * percent); - StringBuilder builder = new StringBuilder().append(progressColor); - for (int i = 0; i < completed; i++) - builder.append("-"); - builder.append(ChatColor.WHITE); - for (int i = 0; i < length - completed; i++) - builder.append("-"); - builder.append(" ").append(ChatColor.YELLOW).append(commaify(current)).append(ChatColor.GOLD).append("/") - .append(ChatColor.YELLOW).append(commaify(max)); - return builder.toString(); - } - - public static String createProgressText(String text, double current, double max) { - double percent; - if (max != 0) - percent = (current / max) * 100.0; - else - percent = 0.0; - percent = roundTo(percent, 1); - return ChatColor.GRAY + text + ": " + (percent < 100.0 ? ChatColor.YELLOW + commaify(percent) - + ChatColor.GOLD + "%" : ChatColor.GREEN + "100.0%"); - } - - public static double roundTo(double d, int decimalPlaces) { - return Math.round(d * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces); - } - - public static String stripColor(String s) { - // Find any '§' character followed by a color code - Matcher matcher = COLOR_PATTERN.matcher(s); - return matcher.replaceAll(""); - } - - public static String shortenNumber(double number) { - if (number < 1000) return String.valueOf((int) number); - String[] units = new String[]{"K", "M", "B"}; - for (int i = units.length - 1; i >= 0; i--) { - double unitValue = Math.pow(1000, i + 1); - if (number >= unitValue) { - return String.format("%.1f%s", number / unitValue, units[i]); - } - } - return String.valueOf(number); // Fallback, should not be reached - } - - public static String formatTimeLeft(long millis) { - StringBuilder sb = new StringBuilder(); - long days = TimeUnit.MILLISECONDS.toDays(millis); - long hours = TimeUnit.MILLISECONDS.toHours(millis % TimeUnit.DAYS.toMillis(1)); - long minutes = TimeUnit.MILLISECONDS.toMinutes(millis % TimeUnit.HOURS.toMillis(1)); - long seconds = TimeUnit.MILLISECONDS.toSeconds(millis % TimeUnit.MINUTES.toMillis(1)); - - // Eliminated redundant checks by concatenating non-zero values directly - if (days > 0) sb.append(days).append("d "); - if (hours > 0) sb.append(hours).append("h "); - if (minutes > 0) sb.append(minutes).append("m "); - if (seconds > 0 || sb.isEmpty()) sb.append(seconds).append("s"); - return sb.toString().trim(); - } - - public static String formatTimeLeftWrittenOut(long millis) { - StringBuilder sb = new StringBuilder(); - long days = TimeUnit.MILLISECONDS.toDays(millis); - long hours = TimeUnit.MILLISECONDS.toHours(millis % TimeUnit.DAYS.toMillis(1)); - long minutes = TimeUnit.MILLISECONDS.toMinutes(millis % TimeUnit.HOURS.toMillis(1)); - long seconds = TimeUnit.MILLISECONDS.toSeconds(millis % TimeUnit.MINUTES.toMillis(1)); - - // Eliminated redundant checks by concatenating non-zero values directly - if (days > 0) sb.append(days).append((days == 1) ? " day ":" days "); - if (hours > 0) sb.append(hours).append((hours == 1) ? " hour ":" hours "); - if (minutes > 0) sb.append(minutes).append((minutes == 1) ? " minute ":" minutes "); - if (seconds > 0 || sb.isEmpty()) sb.append(seconds).append((seconds == 1) ? " second ":" seconds "); - return sb.toString().trim(); - } - - public static String commaify(int i) { - return INTEGER_FORMAT.format(i); - } - - public static Material getMaterialFromBlock(Block block) { - return Material.fromKey(block.key()); - } - - public static String profileAge(long tbf) { - return formatTimeWentBy(System.currentTimeMillis() - tbf); - } - - - public static String getAsRomanNumeral(int num) { - if (num == 0) return ""; - int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; - String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; - StringBuilder roman = new StringBuilder(); - for (int i = 0; i < values.length; i++) { - while (num >= values[i]) { - num -= values[i]; - roman.append(symbols[i]); - } - } - return roman.toString(); - } - - public static String getTextFromComponent(Component component) { - if (!(component instanceof TextComponent)) - throw new IllegalArgumentException("Component must be a TextComponent"); - return PlainTextComponentSerializer.plainText().serialize(component); - } - - public static String getAuctionSetupFormattedTime(long millis) { - return formatTimeLeft(millis).replaceAll(" ", "") - .replaceAll("s$", ""); - } - - public static String formatAsDate(long millis) { - // Month as display, Day, Year - SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd, yyyy"); - return sdf.format(millis); - } - - public static String toNormalCase(String string) { - if (Acronym.isAcronym(string)) return string.toUpperCase(); - string = string.replaceAll("_", " "); - String[] spl = string.split(" "); - StringBuilder sb = new StringBuilder(); - - for (String value : spl) { - String s = value; - if (s.isEmpty()) { - continue; - } - if (s.length() == 1) { - s = s.toUpperCase(); - } else { - s = s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase(); - } - // Append the processed string to the StringBuilder - // Only add a space if it's not the first word - if (!sb.isEmpty()) { - sb.append(" "); - } - sb.append(s); - } - return sb.toString(); - } - - public static String commaify(double d) { - return d < 1 ? "0" : INTEGER_FORMAT.format(d); - } - - public static String decimalify(double d, int decimalPlaces) { - if (decimalPlaces < 1) - throw new IllegalArgumentException(); - String builder = "#." + "#".repeat(decimalPlaces); - DecimalFormat df = new DecimalFormat(builder); - df.setRoundingMode(RoundingMode.CEILING); - return df.format(d); - } - - public static List splitByWordAndLength(String string, int splitLength) { - List result = new ArrayList<>(); - String[] words = string.split(" "); - StringBuilder currentString = new StringBuilder(); - - for (String word : words) { - // Check if adding the next word exceeds the split length (considering the space) - if (currentString.length() + word.length() + (!currentString.isEmpty() ? 1 : 0) > splitLength) { - // Add the currentString to the result and reset it - result.add(currentString.toString()); - currentString = new StringBuilder(); - } - // Add a space before the word if it's not the first word in the currentString - if (!currentString.isEmpty()) { - currentString.append(" "); - } - currentString.append(word); - } - - // Add any remaining text to the result - if (!currentString.isEmpty()) { - result.add(currentString.toString()); - } - - return result; - } - - public static double random(double min, double max) { - return Math.random() * (max - min) + min; - } - - public static String zeroed(long l) { - return String.format("%02d", l); - } - - public static String commaify(long l) { - return INTEGER_FORMAT.format(l); - } - - public static String limitStringLength(String s, int charLimit) { - return s.length() <= charLimit ? s : s.substring(0, charLimit); - } - - public static String ntify(int i) { - return switch (i % 100) { - case 11, 12, 13 -> i + "th"; - default -> switch (i % 10) { - case 1 -> i + "st"; - case 2 -> i + "nd"; - case 3 -> i + "rd"; - default -> i + "th"; - }; - }; - } - - public static String getFormatedStatistic(ItemStatistic statistic) { - return statistic.getDisplayColor() + statistic.getSymbol() + " " + statistic.getDisplayName(); - } - - public static List centerLines(List lines) { - int maxLength = lines.stream() - .map(StringUtility::stripColor) - .mapToInt(String::length) - .max() - .orElse(0); - - List centered = new ArrayList<>(); - for (String line : lines) { - String stripped = stripColor(line); - int padding = Math.max(0, (maxLength - stripped.length()) / 2); - centered.add(" ".repeat(padding) + line); - } - - return centered; - } + public static final char[] ALPHABET = { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'W', 'X', 'Y', 'Z' + }; + private static final DecimalFormat INTEGER_FORMAT = new DecimalFormat("#,###"); + private static final Pattern COLOR_PATTERN = Pattern.compile("§[0-9a-fk-or]"); + + public static String formatTimeAsAgo(long millis) { + long timeDifference = System.currentTimeMillis() - millis; + // Simplified the calculation logic by abstracting repetitive calculations + long[] timeUnits = {TimeUnit.DAYS.toMillis(1), TimeUnit.HOURS.toMillis(1), TimeUnit.MINUTES.toMillis(1)}; + String[] timeLabels = {"d ago", "h ago", "m ago"}; + for (int i = 0; i < timeUnits.length; i++) { + if (timeDifference >= timeUnits[i]) { + return (timeDifference / timeUnits[i]) + timeLabels[i]; + } + } + return "Just now"; + } + + public static String commaifyAndTh(double d) { + // "th" suffix for numbers ending in 11, 12, 13 + return switch ((int) d % 100) { + case 11, 12, 13 -> INTEGER_FORMAT.format(d) + "th"; + default -> switch ((int) d % 10) { + case 1 -> INTEGER_FORMAT.format(d) + "st"; + case 2 -> INTEGER_FORMAT.format(d) + "nd"; + case 3 -> INTEGER_FORMAT.format(d) + "rd"; + default -> INTEGER_FORMAT.format(d) + "th"; + }; + }; + } + + public static String formatTimeWentBy(long millis) { + long timeDifference = System.currentTimeMillis() - millis; + // Simplified the calculation logic by abstracting repetitive calculations + long[] timeUnits = {TimeUnit.DAYS.toMillis(1), TimeUnit.HOURS.toMillis(1), TimeUnit.MINUTES.toMillis(1)}; + String[] timeLabels = {"d", "h", "m"}; + for (int i = 0; i < timeUnits.length; i++) { + if (timeDifference >= timeUnits[i]) { + return (timeDifference / timeUnits[i]) + timeLabels[i]; + } + } + return "Just now"; + } + + public static String createLineProgressBar(int length, ChatColor progressColor, double current, double max) { + double percent = Math.min(current, max) / max; + long completed = Math.round((double) length * percent); + StringBuilder builder = new StringBuilder().append(progressColor); + for (int i = 0; i < completed; i++) + builder.append("-"); + builder.append(ChatColor.WHITE); + for (int i = 0; i < length - completed; i++) + builder.append("-"); + builder.append(" ").append(ChatColor.YELLOW).append(commaify(current)).append(ChatColor.GOLD).append("/") + .append(ChatColor.YELLOW).append(commaify(max)); + return builder.toString(); + } + + public static String createProgressText(String text, double current, double max) { + double percent; + if (max != 0) + percent = (current / max) * 100.0; + else + percent = 0.0; + percent = roundTo(percent, 1); + return ChatColor.GRAY + text + ": " + (percent < 100.0 ? ChatColor.YELLOW + commaify(percent) + + ChatColor.GOLD + "%" : ChatColor.GREEN + "100.0%"); + } + + public static double roundTo(double d, int decimalPlaces) { + return Math.round(d * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces); + } + + public static String stripColor(String s) { + // Find any '§' character followed by a color code + Matcher matcher = COLOR_PATTERN.matcher(s); + return matcher.replaceAll(""); + } + + public static String shortenNumber(double number) { + if (number < 1000) return String.valueOf((int) number); + String[] units = new String[]{"K", "M", "B"}; + for (int i = units.length - 1; i >= 0; i--) { + double unitValue = Math.pow(1000, i + 1); + if (number >= unitValue) { + return String.format("%.1f%s", number / unitValue, units[i]); + } + } + return String.valueOf(number); // Fallback, should not be reached + } + + public static String formatTimeLeft(long millis) { + StringBuilder sb = new StringBuilder(); + long days = TimeUnit.MILLISECONDS.toDays(millis); + long hours = TimeUnit.MILLISECONDS.toHours(millis % TimeUnit.DAYS.toMillis(1)); + long minutes = TimeUnit.MILLISECONDS.toMinutes(millis % TimeUnit.HOURS.toMillis(1)); + long seconds = TimeUnit.MILLISECONDS.toSeconds(millis % TimeUnit.MINUTES.toMillis(1)); + + // Eliminated redundant checks by concatenating non-zero values directly + if (days > 0) sb.append(days).append("d "); + if (hours > 0) sb.append(hours).append("h "); + if (minutes > 0) sb.append(minutes).append("m "); + if (seconds > 0 || sb.isEmpty()) sb.append(seconds).append("s"); + return sb.toString().trim(); + } + + public static String formatTimeLeftWrittenOut(long millis) { + StringBuilder sb = new StringBuilder(); + long days = TimeUnit.MILLISECONDS.toDays(millis); + long hours = TimeUnit.MILLISECONDS.toHours(millis % TimeUnit.DAYS.toMillis(1)); + long minutes = TimeUnit.MILLISECONDS.toMinutes(millis % TimeUnit.HOURS.toMillis(1)); + long seconds = TimeUnit.MILLISECONDS.toSeconds(millis % TimeUnit.MINUTES.toMillis(1)); + + // Eliminated redundant checks by concatenating non-zero values directly + if (days > 0) sb.append(days).append((days == 1) ? " day " : " days "); + if (hours > 0) sb.append(hours).append((hours == 1) ? " hour " : " hours "); + if (minutes > 0) sb.append(minutes).append((minutes == 1) ? " minute " : " minutes "); + if (seconds > 0 || sb.isEmpty()) sb.append(seconds).append((seconds == 1) ? " second " : " seconds "); + return sb.toString().trim(); + } + + public static String commaify(int i) { + return INTEGER_FORMAT.format(i); + } + + public static Material getMaterialFromBlock(Block block) { + return Material.fromKey(block.key()); + } + + public static String profileAge(long tbf) { + return formatTimeWentBy(System.currentTimeMillis() - tbf); + } + + + public static String getAsRomanNumeral(int num) { + if (num == 0) return ""; + int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; + String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; + StringBuilder roman = new StringBuilder(); + for (int i = 0; i < values.length; i++) { + while (num >= values[i]) { + num -= values[i]; + roman.append(symbols[i]); + } + } + return roman.toString(); + } + + public static String getTextFromComponent(Component component) { + if (!(component instanceof TextComponent)) + throw new IllegalArgumentException("Component must be a TextComponent"); + return PlainTextComponentSerializer.plainText().serialize(component); + } + + public static String getAuctionSetupFormattedTime(long millis) { + return formatTimeLeft(millis).replaceAll(" ", "") + .replaceAll("s$", ""); + } + + public static String formatAsDate(long millis) { + // Month as display, Day, Year + SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd, yyyy"); + return sdf.format(millis); + } + + public static String toNormalCase(String string) { + if (Acronym.isAcronym(string)) return string.toUpperCase(); + string = string.replaceAll("_", " "); + String[] spl = string.split(" "); + StringBuilder sb = new StringBuilder(); + + for (String value : spl) { + String s = value; + if (s.isEmpty()) { + continue; + } + if (s.length() == 1) { + s = s.toUpperCase(); + } else { + s = s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase(); + } + // Append the processed string to the StringBuilder + // Only add a space if it's not the first word + if (!sb.isEmpty()) { + sb.append(" "); + } + sb.append(s); + } + return sb.toString(); + } + + public static String commaify(double d) { + return d < 1 ? "0" : INTEGER_FORMAT.format(d); + } + + public static String decimalify(double d, int decimalPlaces) { + if (decimalPlaces < 1) + throw new IllegalArgumentException(); + String builder = "#." + "#".repeat(decimalPlaces); + DecimalFormat df = new DecimalFormat(builder); + df.setRoundingMode(RoundingMode.CEILING); + return df.format(d); + } + + public static List splitByWordAndLength(String string, int splitLength) { + List result = new ArrayList<>(); + String[] lines = string.split("\n", -1); + for (String line : lines) { + if (line.isEmpty()) { + result.add(""); + continue; + } + + String[] words = line.split(" "); + StringBuilder currentString = new StringBuilder(); + + for (String word : words) { + if (word.isEmpty()) { + continue; // skip extra spaces + } + // Check if adding the next word exceeds the split length (considering the space) + int extraSpace = currentString.isEmpty() ? 0 : 1; + if (currentString.length() + extraSpace + word.length() > splitLength) { + // Add the currentString to the result and reset it + if (!currentString.isEmpty()) { + result.add(currentString.toString()); + currentString = new StringBuilder(); + } + } + // Add a space before the word if it's not the first word in the currentString + if (!currentString.isEmpty()) { + currentString.append(" "); + } + currentString.append(word); + } + + // Add any remaining text to the result + result.add(currentString.toString()); + } + + return result; + } + + public static double random(double min, double max) { + return Math.random() * (max - min) + min; + } + + public static String zeroed(long l) { + return String.format("%02d", l); + } + + public static String commaify(long l) { + return INTEGER_FORMAT.format(l); + } + + public static String limitStringLength(String s, int charLimit) { + return s.length() <= charLimit ? s : s.substring(0, charLimit); + } + + public static String ntify(int i) { + return switch (i % 100) { + case 11, 12, 13 -> i + "th"; + default -> switch (i % 10) { + case 1 -> i + "st"; + case 2 -> i + "nd"; + case 3 -> i + "rd"; + default -> i + "th"; + }; + }; + } + + public static String getFormatedStatistic(ItemStatistic statistic) { + return statistic.getDisplayColor() + statistic.getSymbol() + " " + statistic.getDisplayName(); + } + + public static List centerLines(List lines) { + int maxLength = lines.stream() + .map(StringUtility::stripColor) + .mapToInt(String::length) + .max() + .orElse(0); + + List centered = new ArrayList<>(); + for (String line : lines) { + String stripped = stripColor(line); + int padding = Math.max(0, (maxLength - stripped.length()) / 2); + centered.add(" ".repeat(padding) + line); + } + + return centered; + } } diff --git a/configuration/skyblock/Minestom.regions.csv b/configuration/skyblock/Minestom.regions.csv index 729720faf..6c86cd350 100644 --- a/configuration/skyblock/Minestom.regions.csv +++ b/configuration/skyblock/Minestom.regions.csv @@ -55,13 +55,13 @@ coalmine_5,COAL_MINE,-15,75,-152,4,64,-167,HUB coalmine_6,COAL_MINE,4,64,-165,-20,73,-182,HUB coalmine_7,COAL_MINE,-7,69,-178,3,63,-165,HUB #goldmine_1,GOLD_MINE,52,136,-261,-106,14,-404, -#deepcavern_1,DEEP_CAVERNS,181,235,-945,384,0,-1129, -#gunpowder,GUNPOWDER_MINES,408,160,-1015,211,143,-1119, -#lapis_quarry,LAPIS_QUARRY,211,143,-1119,400,114,-980, -#pigmens_den,PIGMENS_DEN,400,114,-980,223,85,-1118, -#slimehill,SLIMEHILL,223,85,-1118,376,52,-983, -#diamond_reserve,DIAMOND_RESERVE,376,52,-983,213,28,-1131, -#obsidian_sanctuary,OBSIDIAN_SANCTUARY,213,28,-1131,370,0,-1009, +deepcavern_1,DEEP_CAVERNS,181,235,-945,384,0,-1129,DEEP_CAVERNS +gunpowder,GUNPOWDER_MINES,408,160,-1015,211,143,-1119,DEEP_CAVERNS +lapis_quarry,LAPIS_QUARRY,211,143,-1119,400,114,-980,DEEP_CAVERNS +pigmens_den,PIGMENS_DEN,400,114,-980,223,85,-1118,DEEP_CAVERNS +slimehill,SLIMEHILL,223,85,-1118,376,52,-983,DEEP_CAVERNS +diamond_reserve,DIAMOND_RESERVE,376,52,-983,213,28,-1131,DEEP_CAVERNS +obsidian_sanctuary,OBSIDIAN_SANCTUARY,213,28,-1131,370,0,-1009,DEEP_CAVERNS #the_end_nest_1,THE_END_NEST,78,117,-87,149,0,85, #the_end_1,THE_END,150,177,146,190,23,-115, #dragons_nest_2,DRAGONS_NEST,-34,1,68,-92,68,-52, diff --git a/loader/build.gradle.kts b/loader/build.gradle.kts index de2c564f0..c014668da 100644 --- a/loader/build.gradle.kts +++ b/loader/build.gradle.kts @@ -29,6 +29,7 @@ dependencies { implementation(project(":type.thefarmingislands")) implementation(project(":type.goldmine")) implementation(project(":type.deepcaverns")) + implementation(project(":type.dwarvenmines")) implementation(project(":type.dungeonhub")) implementation(project(":type.skyblockgeneric")) implementation(project(":type.prototypelobby")) diff --git a/settings.gradle.kts b/settings.gradle.kts index ea0d6de49..0a15d73a4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,6 +16,7 @@ include(":type.prototypelobby") include(":type.thefarmingislands") include(":type.goldmine") include(":type.deepcaverns") +include(":type.dwarvenmines") include(":type.island") include(":type.hub") include(":type.dungeonhub") diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUILiftOperator.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUILiftOperator.java index 550086faa..42b9cc83d 100644 --- a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUILiftOperator.java +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/gui/GUILiftOperator.java @@ -1,13 +1,20 @@ package net.swofty.type.deepcaverns.gui; +import net.kyori.adventure.text.Component; +import net.minestom.server.coordinate.Pos; import net.minestom.server.event.inventory.InventoryPreClickEvent; import net.minestom.server.inventory.InventoryType; import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; +import net.swofty.commons.ServerType; import net.swofty.type.generic.gui.inventory.HypixelInventoryGUI; import net.swofty.type.generic.gui.inventory.ItemStackCreator; import net.swofty.type.generic.gui.inventory.item.GUIClickableItem; import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.region.SkyBlockRegion; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +import java.util.function.Consumer; public class GUILiftOperator extends HypixelInventoryGUI { public GUILiftOperator() { @@ -23,96 +30,69 @@ public boolean allowHotkeying() { public void onOpen(InventoryGUIOpenEvent event) { fill(ItemStackCreator.createNamedItemStack(Material.BLACK_STAINED_GLASS_PANE)); - - set(new GUIClickableItem(10) { - @Override - public ItemStack.Builder getItem(HypixelPlayer player) { - return ItemStackCreator.createNamedItemStack(Material.GOLD_INGOT); - } - - @Override - public void run(InventoryPreClickEvent event, HypixelPlayer player) { - - } - }); - - set(new GUIClickableItem(12) { - @Override - public ItemStack.Builder getItem(HypixelPlayer player) { - return ItemStackCreator.createNamedItemStack(Material.LAPIS_LAZULI); - } - - @Override - public void run(InventoryPreClickEvent event, HypixelPlayer player) { - - } - }); - - set(new GUIClickableItem(14) { - @Override - public ItemStack.Builder getItem(HypixelPlayer player) { - return ItemStackCreator.createNamedItemStack(Material.REDSTONE); - } - - @Override - public void run(InventoryPreClickEvent event, HypixelPlayer player) { - - } - }); - - set(new GUIClickableItem(16) { - @Override - public ItemStack.Builder getItem(HypixelPlayer player) { - return ItemStackCreator.createNamedItemStack(Material.EMERALD); - } - - @Override - public void run(InventoryPreClickEvent event, HypixelPlayer player) { - - } - }); - - set(new GUIClickableItem(29) { - @Override - public ItemStack.Builder getItem(HypixelPlayer player) { - return ItemStackCreator.createNamedItemStack(Material.DIAMOND); - } - - @Override - public void run(InventoryPreClickEvent event, HypixelPlayer player) { - - } - }); - - set(new GUIClickableItem(31) { - @Override - public ItemStack.Builder getItem(HypixelPlayer player) { - return ItemStackCreator.createNamedItemStack(Material.OBSIDIAN); - } - - @Override - public void run(InventoryPreClickEvent event, HypixelPlayer player) { - - } - }); - - set(new GUIClickableItem(33) { - @Override - public ItemStack.Builder getItem(HypixelPlayer player) { - return ItemStackCreator.createNamedItemStack(Material.PRISMARINE); - } - - @Override - public void run(InventoryPreClickEvent event, HypixelPlayer player) { - - } - }); + for (LiftLocation location : LiftLocation.values()) { + set(new GUIClickableItem(location.slot) { + @Override + public void run(InventoryPreClickEvent e, HypixelPlayer p) { + SkyBlockPlayer player = (SkyBlockPlayer) p; + SkyBlockRegion region = player.getRegion(); + if (region != null) { + if (region.getType().name().equals(location.name())) { + p.sendMessage(Component.text("§cYou are already in the " + location.prettyName() + "!")); + return; + } + } + location.consumer.accept(p); + p.closeInventory(); + } + + @Override + public ItemStack.Builder getItem(HypixelPlayer p) { + return ItemStackCreator.getSingleLoreStack("§a" + location.prettyName(), "§e", location.material, 1, "§7Click to teleport to the §b" + location.prettyName() + "§7!\n\n§eClick to travel!"); + } + }); + } updateItemStacks(getInventory(), getPlayer()); } @Override public void onBottomClick(InventoryPreClickEvent e) { + } + enum LiftLocation { + GUNPOWDER_MINES(Material.GOLD_INGOT, 10, (player) -> teleportLocation(player, new Pos(52.5, 150, 15.5, 90f, 0))), + LAPIS_QUARRY(Material.LAPIS_LAZULI, 12, (player) -> teleportLocation(player, new Pos(52.5, 121, 15.5, 90f, 0))), + PIGMENS_DEN(Material.REDSTONE, 14, (player) -> teleportLocation(player, new Pos(52.5, 101, 15.5, 90f, 0))), + SLIMEHILL(Material.EMERALD, 16, (player) -> teleportLocation(player, new Pos(52.5, 66, 15.5, 90f, 0))), + DIAMOND_RESERVE(Material.DIAMOND, 29, (player) -> teleportLocation(player, new Pos(52.5, 38, 15.5, 90f, 0))), + OBSIDIAN_SANCTUARY(Material.OBSIDIAN, 31, (player) -> teleportLocation(player, new Pos(52.5, 13, 15.5, 90f, 0))), + DWARVEN_MINES(Material.PRISMARINE, 33, (player) -> { + player.sendTo(ServerType.SKYBLOCK_DWARVEN_MINES); + }); + + private final Material material; + private final int slot; + private final Consumer consumer; + + LiftLocation(Material material, int slot, Consumer consumer) { + this.material = material; + this.slot = slot; + this.consumer = consumer; + } + + private static void teleportLocation(HypixelPlayer player, Pos pos) { + player.teleport(pos); + } + + public String prettyName() { + String lower = this.name().toLowerCase(); + String[] parts = lower.split("_"); + StringBuilder capitalized = new StringBuilder(); + for (String part : parts) { + capitalized.append(Character.toUpperCase(part.charAt(0))).append(part.substring(1)).append(" "); + } + return capitalized.toString().trim(); + } } } diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/tab/DeepCavernsServerModule.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/tab/DeepCavernsServerModule.java index dd824e6b8..d8d7e74f7 100644 --- a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/tab/DeepCavernsServerModule.java +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/tab/DeepCavernsServerModule.java @@ -15,7 +15,7 @@ public List getEntries(HypixelPlayer player) { new TablistEntry(getCentered("§3§lServer Info"), TablistSkinRegistry.CYAN) )); - entries.add(new TablistEntry("§b§lArea: §7Deepe Caverns", TablistSkinRegistry.GRAY)); + entries.add(new TablistEntry("§b§lArea: §7Deep Caverns", TablistSkinRegistry.GRAY)); entries.add(new TablistEntry(" Server: §8" + HypixelConst.getServerName(), TablistSkinRegistry.GRAY)); fillRestWithGray(entries); diff --git a/type.dwarvenmines/build.gradle.kts b/type.dwarvenmines/build.gradle.kts new file mode 100644 index 000000000..421aa6c49 --- /dev/null +++ b/type.dwarvenmines/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + java +} + +group = "net.swofty" +version = "3.0" + +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + toolchain { + languageVersion.set(JavaLanguageVersion.of(21)) + } +} + +dependencies { + implementation(project(":type.skyblockgeneric")) + implementation(project(":type.generic")) + implementation(project(":commons")) + implementation(project(":proxy.api")) + compileOnly("net.minestom:minestom:2025.08.18-1.21.8") { + 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") +} \ No newline at end of file diff --git a/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/TypeDwarvenMinesLoader.java b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/TypeDwarvenMinesLoader.java new file mode 100644 index 000000000..24143c19e --- /dev/null +++ b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/TypeDwarvenMinesLoader.java @@ -0,0 +1,125 @@ +package net.swofty.type.dwarvenmines; + +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.dwarvenmines.tab.DwarvenMinesServerModule; +import net.swofty.type.generic.SkyBlockTypeLoader; +import net.swofty.type.generic.entity.animalnpc.HypixelAnimalNPC; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.villager.HypixelVillagerNPC; +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 TypeDwarvenMinesLoader implements SkyBlockTypeLoader { + @Override + public ServerType getType() { + return ServerType.SKYBLOCK_DWARVEN_MINES; + } + + @Override + public void onInitialize(MinecraftServer server) { + Logger.info("TypeDwarvenMinesLoader initialized!"); + } + + @Override + public void afterInitialize(MinecraftServer server) { + + } + + @Override + public LoaderValues getLoaderValues() { + return new LoaderValues( + (type) -> switch (type) { + default -> new Pos(-85, 200, -123, -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 DwarvenMinesServerModule(), + new AccountInformationModule() + )); + } + }; + } + + @Override + public List getTraditionalEvents() { + return SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.dwarvenmines.events", + HypixelEventClass.class + ).collect(Collectors.toList()); + } + + @Override + public List getCustomEvents() { + return new ArrayList<>(); + } + + @Override + public List getNPCs() { + List npcs = new ArrayList<>(); + + npcs.addAll(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.dwarvenmines.npcs", + HypixelNPC.class + ).toList()); + + return npcs; + } + + @Override + public List getServiceRedisListeners() { + return List.of(); + } + + @Override + public List getProxyRedisListeners() { + return List.of(); + } + + @Override + public List getVillagerNPCs() { + return new ArrayList<>(SkyBlockGenericLoader.loopThroughPackage( + "net.swofty.type.dwarvenmines.villagers", + HypixelVillagerNPC.class + ).toList()); + } + + @Override + public List getAnimalNPCs() { + return new ArrayList<>(); + } + + @Override + public List getRequiredServices() { + return new ArrayList<>(List.of(ServiceType.DATA_MUTEX)); + } + + @Override + public @Nullable CustomWorlds getMainInstance() { + return CustomWorlds.SKYBLOCK_DWARVEN_MINES; + } +} diff --git a/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/events/ActionPlayerJoin.java b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/events/ActionPlayerJoin.java new file mode 100644 index 000000000..1a8d7d7a5 --- /dev/null +++ b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/events/ActionPlayerJoin.java @@ -0,0 +1,26 @@ +package net.swofty.type.dwarvenmines.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.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBankerBroadjaw.java b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBankerBroadjaw.java new file mode 100644 index 000000000..2b7f39f0b --- /dev/null +++ b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBankerBroadjaw.java @@ -0,0 +1,44 @@ +package net.swofty.type.dwarvenmines.npcs; + +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.gui.inventories.banker.GUIBanker; + +public class NPCBankerBroadjaw extends HypixelNPC { + + public NPCBankerBroadjaw() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"§6Banker Broadjaw", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "PaUxiTsjUMkZYK0pG/asB1a6/FALKLHWL5JbS1j1cGTW+6iTRD6JES6mQlOsJtf1/KJ0CX+ONfmvMjRN+x27s/ufQGDI4BLtem/UFnxu82OBzhVT4FDEUn792yi+YkVyb1gDFQW3UkkgMahSLBoe+I4JtFl+4OMUTBQZF8eYsWlr8ViwAs0a3gr5JbnLrtPxbhUwmgtcBrw2Hk+WipSgcWoZyhvG+17SHZ2zqIzu8tOi7k0lp92VZs1GFRs50ZpMV7/IHB3pEwp1Peh8DlMDtpIDdOOxmiNtJBZVGIyXXwoQ/wmg2ma4TUaanwBkJh+Sdd1yT0aRwdMGEzl0wAzHhEyr/L17SKSdUaK+29un+4pTV2nqTO3dLRSCnRVOmJtMnrfc+K0aoivJhCc3MRIaSB5Ib1bP86l57wNVomTeca+ywl+M4oF62Gq1QQnDmZHERB5i0TzP49DVKJy7sU/8mnfmah5+mfpIM7C5p+IB6ALWJ7nn/5QV4jqP+sUDw0+0XN/1KeXwnGGyhHn2B7ysYkqA8AUpNi/ygYhEeqUlJCDzKAP7GrkE9CktbQdH8HXb0KpS9hUmweKmL7VR9aJiqcK5LTCVctZfPA6H9fXTagIk7tPKth41GBnSjDJazj61MlUazNpYJIBQnDuErllKecr0Gft2E/jxrezWlaw+fmg="; + } + + @Override + public String texture(HypixelPlayer player) { + return "ewogICJ0aW1lc3RhbXAiIDogMTYwOTI0NTM4MDg1MCwKICAicHJvZmlsZUlkIiA6ICI3MmNiMDYyMWU1MTA0MDdjOWRlMDA1OTRmNjAxNTIyZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJNb3M5OTAiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTU5ZjhjNGRmZDFjNTgzYThhNTRmYTVjYzdmOGViNmMyNGQyNjlhZjI3Yzk5ZmQ5ZjJiMmJiZjQwZTcwZmVkMiIKICAgIH0KICB9Cn0="; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(13.500, 201.000, -148.500, 44, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + new GUIBanker().open(event.player()); + } +} \ No newline at end of file diff --git a/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBubu.java b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBubu.java new file mode 100644 index 000000000..72a9138d2 --- /dev/null +++ b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBubu.java @@ -0,0 +1,48 @@ +package net.swofty.type.dwarvenmines.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCBubu extends HypixelNPC { + + public NPCBubu() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"§5Bubu", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "Tu4M+oWlNBsaoOukmq/Zx0zbq/xnCxOFFGOsVnk6Rw38djwURcKWUp5xz4N3IBGfLGCaeZdUu3FwEwNn4qeQ58lEO+MWc0pOhphP4CI1qsMK5fx+I42PKlJSGX12gUwHTJWJtIgKtVgcXMSNpP24p3HrJqpk/K4oDIP2MO3pQ+UwMn0b0QkRcpGK1JqyPMiIM2gdDnn/dtfZswrNQ1KkvZgeGWt8mcvt/iMK8/67br6bFJV8ql7k1H5Gk+Qx5s2RQ2U2cp2u0x4CDxqr41xZqqXLIrjpzUkah8EvalSBW6yNnLnAQXgALwKsiG+X9MX1MY1xXbBbTbkKDPR8qUy4DS+FujHvt3FL4W0PP/5uhzaKxazDEqXOk0m6xhvzLLhcz/86lou6LWba67yhECJvLcSiTMLTQa87IG1PGozOg8czPX36F73WxOu/FClsLw5bLTsUA3aBAtCUG8MVWOMuqG6sCmibPSVfr/YJKIib4veZrHGa6zCEj7gl75yF1A3lj0wYWSr4NsuYR7JxzMgv7HmujeYMgrx7CimcTQWCu1ReGqTMQziF03tRCc2V2h5/1uhFOiAr0Q0FMEmF/vXPrxq6Bt4TD7XhVUsDNvYZ8piUwKL19YKtcS79hIOCzu3+SsDFk9dKXIEVO0aqBQGfVvpsAayiIVPpdCF1/JQGWUw="; + } + + @Override + public String texture(HypixelPlayer player) { + return "ewogICJ0aW1lc3RhbXAiIDogMTYwODMxMzM3MzE3MywKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjVmMzFjMWMyMTVhNTdlOTM3ZmQ3NWFiMzU3ODJmODVlYzI0MmExYjFmOTUwYTI2YTQyYmI1ZTBhYTVjYmVkYSIKICAgIH0KICB9Cn0="; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(-10.500, 201.000, -103.500, 45, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + } +} \ No newline at end of file diff --git a/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBulvar.java b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBulvar.java new file mode 100644 index 000000000..efed40448 --- /dev/null +++ b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCBulvar.java @@ -0,0 +1,48 @@ +package net.swofty.type.dwarvenmines.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCBulvar extends HypixelNPC { + + public NPCBulvar() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"§5Bulvar", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "L96mT0EgH5wKootwvD+UZjsosZYKCl0gYnCjiBqmOLWDFUfVE3izl+Va1A53sgNWn/HWyzd/yaqLnZnBQJvsRIUqUjAfySmQvbOyxN9Lp4BZJN8PFmcg4gYUjpu8Yo/Ykfp0a9X2TyMVKzdK1EpupuFsmuIUSzBuF/gwO+FjZV1WaeuW6wU/QJZD/pYuJw7ZaUlLA5JTVjD/D5ytLC5cQJST4zWez+JGkftf+OHHNidpoWEdi6SqD1CJE1dhDxV6bmwsunLV/z9ZU51k14Ccq9Pe+YsFHXMZANrIv7sCgS3BU9GHVV3t4m/roxZwOwjccDXosC14A6jEnUG8ab2ub5r1Nnfn/duTRxrkR9+e6gxa3tlf960G7jeEE/5TO1I16cklhLugfOus8n1CJDgtCUccDfu/0yOWSX6jtdsE6U7MnZkW716LIJdrDpaIzewTI2z/kuOicXiK/Gtb5yRYwryNEmTuYTKVrU3EuPsV0I3E+fWl3Dj9Z6Vtrt0vvebucy2Tpk9Xc1ATCzMyhokcGtRDaXIBTTAQDdvSKMLlJLMc3awzCRFwxN0er/lA5dCi7qafNfHoHPytIWzrrkvoiPREGXGidqRlY+QiFenUMUDgSc/6cVsUGRppHrBje70o50Frzev2U8caMkBrNaeA8kXwSxpoNeqjO4ztvBWMfK0="; + } + + @Override + public String texture(HypixelPlayer player) { + return "ewogICJ0aW1lc3RhbXAiIDogMTYwODMxMzQ0NjA5MiwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjEzY2YwY2E3OWEzNjExYjhlMDVmZTllMjY0ZmIyYmY4ZDI3ZTQ2NGRjMTJkYzZlOTVkZDBhZTBjMzM1YTU2MSIKICAgIH0KICB9Cn0="; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(-15.500, 201.000, -98.500, -135, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + } +} \ No newline at end of file diff --git a/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCLiftOperator.java b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCLiftOperator.java new file mode 100644 index 000000000..fcfa3792f --- /dev/null +++ b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCLiftOperator.java @@ -0,0 +1,48 @@ +package net.swofty.type.dwarvenmines.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCLiftOperator extends HypixelNPC { + + public NPCLiftOperator() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"Lift Operator", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "W8e6ip++dGgqglbYiPyLxCEHUXpOMioWrf6bCJwMNPHmEFTJux+M0H4GZaDjs1+d7FcSHjg6rEbMWS1sZAL4TUh7Q9vCtEYlx0PfnkY42l1Qqo/tIpJvgY5J6RHZ1j1cvtfrgXfKU8AKpjZVDNNyAqc5iJWcgqAm1gj3SPH6SoVvfzZgx9avAKo3z440CRsIhLYwgwEtq8/sbkqi0y6cuwlCZ+reo7yy2Ohe5AwG0Sx7Tkkv0DIVC4wO2RYoP+4xw2MYi1SRWk9yv3ZKqjwhTP8ugB/xqK/R480vVrr7MLhCpLrbUzpuLiaAbfruF9/TmvBV2hXFSCrlqypo4EmLk1E3WSuJX5ls11+juht0M12MIUlmmYcsFjgnAux5tgJ+fQq3KWhrbYedEY4CG7swavIG71/ZZI/ugRCXz/KONOq7bXKn939CyIpPdfBBAo2RZhjk2QXG/bWODeTfJ6z5VlIivNzo65FCAdwJ54VQzmUcP86ID3/jrWQ5fE5fhPkGhpYtOlVn5S4xKdFtu6RfYYUX6cEPD6MRPcOzXB4ZvCzgD7QhKxIQDBc1S9XY35c6+ZDYHPokQa87iD053Yfft4PH/pZA21ovOcf7+Xa+AFu72wnsjbynkaZUqSrFz3mCdOl+TFynZe89SwgDX0t1mIPtGtJmtK5jbZpwFA4bqDE="; + } + + @Override + public String texture(HypixelPlayer player) { + return "eyJ0aW1lc3RhbXAiOjE1NTQ1NzE2OTkxOTAsInByb2ZpbGVJZCI6IjNmYzdmZGY5Mzk2MzRjNDE5MTE5OWJhM2Y3Y2MzZmVkIiwicHJvZmlsZU5hbWUiOiJZZWxlaGEiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzg2NTJhMDZmN2I5OWU0ODIyYjQ5NWJhOWI2MDg5ZDRkNTE1MWU4M2JlZDk1NmE3Y2NjYjg0N2VhNDZhMjU3MjUifX19"; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(-79.500, 200, -123.500, -59, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + } +} \ No newline at end of file diff --git a/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCRoyalGuardOne.java b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCRoyalGuardOne.java new file mode 100644 index 000000000..47948b0a4 --- /dev/null +++ b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCRoyalGuardOne.java @@ -0,0 +1,48 @@ +package net.swofty.type.dwarvenmines.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCRoyalGuardOne extends HypixelNPC { + + public NPCRoyalGuardOne() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"§6Royal Guard", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "seuXIllWZjXjqV2JnR3IcWgjYKWb1wm0gK69ENtKNZZCcP0QKbqjHme1u+K/aIs+JIH0nSkdkj+5PP6/kbsRm64V789hHeDSYJ2aE8lcqamptdez63Ap//Nvv8ykDRPHTddvOlJ/zpeEOj2x2E0u4LtsyLaRlY24Ku8kkiy7L+EKZQ4Pl0mB2o2AtzZNECF1BYhhSguEzFVhu2emweFCD5yYcTcpyecnvKfedXy4uxaeTAls46rqCfGHJSLll6PatUwJ7ZcBQyN95RCR8I0+kdkkkFZ3v2nYllTLd3oJPpRD6GBkOA32uVFYEYXp4HAjN2odDZfPmw663jdVJtLvYIEc9FckQfY6uXjSt3V7/yzOrxP8iV22IMhXY1gaTjQFnoBFa/yRcVrbcJ1GIT3tJMYrB3hS8BnmR7jPQ05crUQjZHCqVzZEa74bM44eus3Db8sL6OALpYznP+u9Ss855AkjpIlwQw533qxMRZEffvnQ1wT556TeczvZDEb9zTszYqzCKt4uLG97k9aTYKpeJHIBbzCo9+xvGD0zzzTXZ7xKe4ZfpzKnFFjUrJRdqjddGRi5iV3WdHFLQ4VVcZyCqIhVNjt5bkCbObuqIdmhmCZNDvf8xmis1p890mLoTeln+Mu6/2NwgVXwuTtKgHnCGff4X7vdzepdomo0pZrgObk="; + } + + @Override + public String texture(HypixelPlayer player) { + return "ewogICJ0aW1lc3RhbXAiIDogMTYwNzQ2NDk5NDA2MSwKICAicHJvZmlsZUlkIiA6ICJhMmY4MzQ1OTVjODk0YTI3YWRkMzA0OTcxNmNhOTEwYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJiUHVuY2giLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGU3YTQ2YzI1ODI2OGY0MmM4NTlkZDVjODAwOGE5N2M3MmI4ZDM3MGU5ODFjZTJkY2MwYzNmZDQ1MTYzOGVkNyIKICAgIH0KICB9Cn0="; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(-45.500, 200.000, -124.500, 90, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + } +} \ No newline at end of file diff --git a/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCRoyalGuardTwo.java b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCRoyalGuardTwo.java new file mode 100644 index 000000000..1c8820895 --- /dev/null +++ b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/npcs/NPCRoyalGuardTwo.java @@ -0,0 +1,48 @@ +package net.swofty.type.dwarvenmines.npcs; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.minestom.server.coordinate.Pos; +import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCParameters; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +public class NPCRoyalGuardTwo extends HypixelNPC { + + public NPCRoyalGuardTwo() { + super(new NPCParameters() { + @Override + public String[] holograms(HypixelPlayer player) { + return new String[]{"§6Royal Guard", "§e§lCLICK"}; + } + + @Override + public String signature(HypixelPlayer player) { + return "Ic93JjFO3ZL10gtcVoaGbsaHXjsUvq6dWirUPihZYzieAHVSyCSzrjMYDmMVvuIJGnVE8MCgcGQuYxh+J9TbmqdFugU9vVZvJ6urPTKJwyLrHtdz3tzUW4FF7+HkDn2nOBEm3lu3Pcszis49TFstpp4xfBUsvIpdivyzfeHH0KoWPTK/NE5IDdy7JqP3NS5IJg4L4Rt/zWuA17F/Pfm5+s5Ol9l7SAvSWhS/ed/lB7AzdHFGBx9SVSR1oGr1Sx9YxRKyFT4KRjc5czTUhiNUmiaZ/dwwn4cVYqjXbRG3sPQuMffuIO/QKo4ohWLU1My1SThC0qC4b52xMdzYQg8aV4rmJwe+zNkbpvylmpHNgIysTK9GO4clG3sBc+McdNM9NFKyLtxHdpGwu/ZHOPnPO5uu2vbCqnB+sxQ6I12esos+V1HPiFV4YZnCK2YxYB4MCkMjoWTJRkZhShAIcE8IgcQ/pHi5kwlqyy4kH/4Vfwd0YFK0oPFo7zfVOjj8wZaVnPmKdcAkMbO9kpOOUMPVt5/jfLyfiroRgJJQQJITVStXpmQFIieze6+aigsKhoiL5Mej4ggVrwniP8gc3iiK3p4HMeObKK0CfoiVPPP+sN9uEs443EGZmVrpuphD51xA0Qow4UtD6YhIRWPYiLzT1SV55dJ4gYy7Qr0rbDUbm+k="; + } + + @Override + public String texture(HypixelPlayer player) { + return "ewogICJ0aW1lc3RhbXAiIDogMTYxMDU3NzM3NDY3NCwKICAicHJvZmlsZUlkIiA6ICJiMGQ0YjI4YmMxZDc0ODg5YWYwZTg2NjFjZWU5NmFhYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNaW5lU2tpbl9vcmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzk0MWM5YzZhMzhiMjU0OWMyOTViMzQxOWI5MWMwM2YzMTAzNThmOTllMWViOWVkOGI5YjU5NGJlZWRlZjEwOCIKICAgIH0KICB9Cn0="; + } + + @Override + public Pos position(HypixelPlayer player) { + return new Pos(-45.500, 200.000, -118.500, 90, 0); + } + + @Override + public boolean looking() { + return true; + } + }); + } + + @Override + public void onClick(PlayerClickNPCEvent event) { + SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + player.sendMessage(Component.text("§cThis Feature is not there yet. §aOpen a Pull request HERE to get it added quickly!") + .clickEvent(ClickEvent.openUrl("https://github.com/Swofty-Developments/HypixelSkyBlock"))); + } +} \ No newline at end of file diff --git a/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/tab/DwarvenMinesServerModule.java b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/tab/DwarvenMinesServerModule.java new file mode 100644 index 000000000..9317fd506 --- /dev/null +++ b/type.dwarvenmines/src/main/java/net/swofty/type/dwarvenmines/tab/DwarvenMinesServerModule.java @@ -0,0 +1,25 @@ +package net.swofty.type.dwarvenmines.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 DwarvenMinesServerModule 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: §7Dwarven Mines", TablistSkinRegistry.GRAY)); + entries.add(new TablistEntry(" Server: §8" + HypixelConst.getServerName(), TablistSkinRegistry.GRAY)); + + fillRestWithGray(entries); + + return entries; + } +} diff --git a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java index 1b8e35173..faa2f4886 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java +++ b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java @@ -13,160 +13,165 @@ import java.util.concurrent.ConcurrentHashMap; public abstract class HypixelNPC { - private static final int SPAWN_DISTANCE = 48; - private static final int LOOK_DISTANCE = 16; - - @Getter - private static List npcs = new ArrayList<>(); - @Getter - private static Map perPlayerNPCs = new HashMap<>(); - - @Getter - private final NPCParameters parameters; - @Getter - private final String name; - - public abstract void onClick(PlayerClickNPCEvent e); - - public HypixelNPC(NPCParameters defaultParams) { - this.parameters = defaultParams; - String className = getClass().getSimpleName().replace("NPC", ""); - this.name = className.replaceAll("(?<=.)(?=\\p{Lu})", " "); - } - - public void register() { - npcs.add(this); - } - - public void sendNPCMessage(HypixelPlayer player, String message) { - player.sendMessage("§e[NPC] " + getName() + "§f: " + message); - } - - public static HypixelNPC getFromImpl(HypixelPlayer player, NPCEntityImpl impl) { - Map npcs = perPlayerNPCs.get(player.getUuid()).getEntityImpls(); - if (npcs == null) return null; - - for (Map.Entry entry : npcs.entrySet()) { - if (entry.getValue().equals(impl)) { - return entry.getKey(); - } - } - - return null; - } - - public static void updateForPlayer(HypixelPlayer player) { - perPlayerNPCs.putIfAbsent(player.getUuid(), new PlayerNPCCache()); - - Thread.startVirtualThread(() -> { - HypixelNPC.getNpcs().forEach((npc) -> { - boolean playerHasNPC = perPlayerNPCs.containsKey(player.getUuid()) && perPlayerNPCs.get(player.getUuid()).getEntityImpls().containsKey(npc); - - if (!playerHasNPC) { - NPCEntityImpl entity = new NPCEntityImpl( - npc.getParameters().holograms(player)[npc.getParameters().holograms(player).length - 1], - npc.getParameters().texture(player), - npc.getParameters().signature(player), - npc.getParameters().holograms(player)); - Pos position = npc.getParameters().position(player); - - PlayerHolograms.ExternalPlayerHologram holo = PlayerHolograms.ExternalPlayerHologram.builder() - .pos(position.add(0, 1.1, 0)) - .text(Arrays.copyOfRange(npc.getParameters().holograms(player), 0, npc.getParameters().holograms(player).length - 1)) - .player(player) - .build(); - - entity.setAutoViewable(false); - - PlayerHolograms.addExternalPlayerHologram(holo); - entity.setInstance(HypixelConst.getInstanceContainer(), position); - entity.addViewer(player); - - PlayerNPCCache cache = perPlayerNPCs.get(player.getUuid()); - cache.add(npc, holo, entity); - perPlayerNPCs.put(player.getUuid(), cache); - return; - } - - PlayerNPCCache cache = perPlayerNPCs.get(player.getUuid()); - NPCEntityImpl entity = cache.get(npc).getValue(); - PlayerHolograms.ExternalPlayerHologram holo = cache.get(npc).getKey(); - - Pos npcPosition = npc.getParameters().position(player); - String npcTexture = npc.getParameters().texture(player); - String npcSignature = npc.getParameters().signature(player); - String[] npcHolograms = npc.getParameters().holograms(player); - - // If any of the parameters have changed, update the NPC - if (!Arrays.equals(entity.getHolograms(), npcHolograms) || - !entity.getSkinTexture().equals(npcTexture) || - !entity.getSkinSignature().equals(npcSignature) || - !entity.getPosition().equals(npcPosition)) { - entity.remove(); - PlayerHolograms.removeExternalPlayerHologram(holo); - cache.remove(npc); - return; - } - - Pos playerPosition = player.getPosition(); - List inRange = entity.getInRangeOf(); - double entityDistance = playerPosition.distance(npcPosition); - boolean isLookingNPC = npc.getParameters().looking(); - - if (entityDistance <= SPAWN_DISTANCE) { - if (!inRange.contains(player)) { - inRange.add(player); - entity.updateNewViewer(player); - } - - if (isLookingNPC && entityDistance <= LOOK_DISTANCE) { - double diffX = playerPosition.x() - npcPosition.x(); - double diffZ = playerPosition.z() - npcPosition.z(); - double theta = Math.atan2(diffZ, diffX); - double yaw = MathUtility.normalizeAngle(Math.toDegrees(theta) + 90, 360.0); - - player.sendPackets( - new EntityRotationPacket(entity.getEntityId(), (float) yaw, npcPosition.pitch(), true), - new EntityHeadLookPacket(entity.getEntityId(), (float) yaw) - ); - } - } else { - if (inRange.contains(player)) { - inRange.remove(player); - entity.updateOldViewer(player); - - player.sendPackets( - new EntityRotationPacket(entity.getEntityId(), npcPosition.yaw(), npcPosition.pitch(), true), - new EntityHeadLookPacket(entity.getEntityId(), npcPosition.yaw()) - ); - } - } - }); - }); - } - - public record PlayerClickNPCEvent(HypixelPlayer player, int entityId, HypixelNPC npc) { - } - - public static class PlayerNPCCache { - private final Map> npcs = new ConcurrentHashMap<>(); - - public void add(HypixelNPC npc, PlayerHolograms.ExternalPlayerHologram hologram, NPCEntityImpl entity) { - npcs.put(npc, Map.entry(hologram, entity)); - } - - public void remove(HypixelNPC npc) { - npcs.remove(npc); - } - - public Map getEntityImpls() { - Map entityImpls = new HashMap<>(); - npcs.forEach((npc, entry) -> entityImpls.put(npc, entry.getValue())); - return entityImpls; - } - - public Map.Entry get(HypixelNPC npc) { - return npcs.get(npc); - } - } + private static final int SPAWN_DISTANCE = 48; + private static final int LOOK_DISTANCE = 5; + + @Getter + private static List npcs = new ArrayList<>(); + @Getter + private static Map perPlayerNPCs = new HashMap<>(); + + @Getter + private final NPCParameters parameters; + @Getter + private final String name; + + public HypixelNPC(NPCParameters defaultParams) { + this.parameters = defaultParams; + String className = getClass().getSimpleName().replace("NPC", ""); + this.name = className.replaceAll("(?<=.)(?=\\p{Lu})", " "); + } + + public static HypixelNPC getFromImpl(HypixelPlayer player, NPCEntityImpl impl) { + Map npcs = perPlayerNPCs.get(player.getUuid()).getEntityImpls(); + if (npcs == null) return null; + + for (Map.Entry entry : npcs.entrySet()) { + if (entry.getValue().equals(impl)) { + return entry.getKey(); + } + } + + return null; + } + + public static void updateForPlayer(HypixelPlayer player) { + perPlayerNPCs.putIfAbsent(player.getUuid(), new PlayerNPCCache()); + + Thread.startVirtualThread(() -> { + HypixelNPC.getNpcs().forEach((npc) -> { + boolean playerHasNPC = perPlayerNPCs.containsKey(player.getUuid()) && perPlayerNPCs.get(player.getUuid()).getEntityImpls().containsKey(npc); + + if (!playerHasNPC) { + NPCEntityImpl entity = new NPCEntityImpl( + npc.getParameters().holograms(player)[npc.getParameters().holograms(player).length - 1], + npc.getParameters().texture(player), + npc.getParameters().signature(player), + npc.getParameters().holograms(player)); + Pos position = npc.getParameters().position(player); + + PlayerHolograms.ExternalPlayerHologram holo = PlayerHolograms.ExternalPlayerHologram.builder() + .pos(position.add(0, 1.1, 0)) + .text(Arrays.copyOfRange(npc.getParameters().holograms(player), 0, npc.getParameters().holograms(player).length - 1)) + .player(player) + .build(); + + entity.setAutoViewable(false); + + PlayerHolograms.addExternalPlayerHologram(holo); + entity.setInstance(HypixelConst.getInstanceContainer(), position); + entity.addViewer(player); + + PlayerNPCCache cache = perPlayerNPCs.get(player.getUuid()); + cache.add(npc, holo, entity); + perPlayerNPCs.put(player.getUuid(), cache); + return; + } + + PlayerNPCCache cache = perPlayerNPCs.get(player.getUuid()); + NPCEntityImpl entity = cache.get(npc).getValue(); + PlayerHolograms.ExternalPlayerHologram holo = cache.get(npc).getKey(); + + Pos npcPosition = npc.getParameters().position(player); + String npcTexture = npc.getParameters().texture(player); + String npcSignature = npc.getParameters().signature(player); + String[] npcHolograms = npc.getParameters().holograms(player); + + // If any of the parameters have changed, update the NPC + if (!Arrays.equals(entity.getHolograms(), npcHolograms) || + !entity.getSkinTexture().equals(npcTexture) || + !entity.getSkinSignature().equals(npcSignature) || + !entity.getPosition().equals(npcPosition)) { + entity.remove(); + PlayerHolograms.removeExternalPlayerHologram(holo); + cache.remove(npc); + return; + } + + Pos playerPosition = player.getPosition(); + List inRange = entity.getInRangeOf(); + double entityDistance = playerPosition.distance(npcPosition); + boolean isLookingNPC = npc.getParameters().looking(); + + if (entityDistance <= SPAWN_DISTANCE) { + if (!inRange.contains(player)) { + inRange.add(player); + entity.updateNewViewer(player); + } + + if (isLookingNPC && entityDistance <= LOOK_DISTANCE) { + double diffX = playerPosition.x() - npcPosition.x(); + double diffZ = playerPosition.z() - npcPosition.z(); + double theta = Math.atan2(diffZ, diffX); + double yaw = MathUtility.normalizeAngle(Math.toDegrees(theta) + 90, 360.0); + + player.sendPackets( + new EntityRotationPacket(entity.getEntityId(), (float) yaw, npcPosition.pitch(), true), + new EntityHeadLookPacket(entity.getEntityId(), (float) yaw) + ); + } else if (isLookingNPC) { + player.sendPackets( + new EntityRotationPacket(entity.getEntityId(), npcPosition.yaw(), npcPosition.pitch(), true), + new EntityHeadLookPacket(entity.getEntityId(), npcPosition.yaw()) + ); + } + } else { + if (inRange.contains(player)) { + inRange.remove(player); + entity.updateOldViewer(player); + + player.sendPackets( + new EntityRotationPacket(entity.getEntityId(), npcPosition.yaw(), npcPosition.pitch(), true), + new EntityHeadLookPacket(entity.getEntityId(), npcPosition.yaw()) + ); + } + } + }); + }); + } + + public abstract void onClick(PlayerClickNPCEvent e); + + public void register() { + npcs.add(this); + } + + public void sendNPCMessage(HypixelPlayer player, String message) { + player.sendMessage("§e[NPC] " + getName() + "§f: " + message); + } + + public record PlayerClickNPCEvent(HypixelPlayer player, int entityId, HypixelNPC npc) { + } + + public static class PlayerNPCCache { + private final Map> npcs = new ConcurrentHashMap<>(); + + public void add(HypixelNPC npc, PlayerHolograms.ExternalPlayerHologram hologram, NPCEntityImpl entity) { + npcs.put(npc, Map.entry(hologram, entity)); + } + + public void remove(HypixelNPC npc) { + npcs.remove(npc); + } + + public Map getEntityImpls() { + Map entityImpls = new HashMap<>(); + npcs.forEach((npc, entry) -> entityImpls.put(npc, entry.getValue())); + return entityImpls; + } + + public Map.Entry get(HypixelNPC npc) { + return npcs.get(npc); + } + } } diff --git a/type.generic/src/main/java/net/swofty/type/generic/gui/inventory/ItemStackCreator.java b/type.generic/src/main/java/net/swofty/type/generic/gui/inventory/ItemStackCreator.java index 4ada51c27..de0afda28 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/gui/inventory/ItemStackCreator.java +++ b/type.generic/src/main/java/net/swofty/type/generic/gui/inventory/ItemStackCreator.java @@ -10,7 +10,6 @@ import net.minestom.server.item.component.HeadProfile; import net.minestom.server.item.component.TooltipDisplay; import net.minestom.server.tag.Tag; -import net.minestom.server.utils.Unit; import net.swofty.commons.StringUtility; import org.json.JSONObject; @@ -22,274 +21,273 @@ * including item materials, names, lore, and player skins. */ public class ItemStackCreator { - private static final TooltipDisplay DEFAULT_TOOLTIP_DISPLAY = new TooltipDisplay(false, Set.of( - DataComponents.CONSUMABLE, - DataComponents.DAMAGE, - DataComponents.BASE_COLOR, - DataComponents.UNBREAKABLE - )); + private static final TooltipDisplay DEFAULT_TOOLTIP_DISPLAY = new TooltipDisplay(false, Set.of( + DataComponents.CONSUMABLE, + DataComponents.DAMAGE, + DataComponents.BASE_COLOR, + DataComponents.UNBREAKABLE + )); - /** - * Creates an {@link ItemStack.Builder} with a specified material and custom name. - * - * @param material the material of the item stack - * @param name the custom name of the item stack - * @return an {@link ItemStack.Builder} with the specified properties - */ - public static ItemStack.Builder createNamedItemStack(Material material, String name) { - return clearAttributes(ItemStack.builder(material) - .set(DataComponents.CUSTOM_NAME, Component.text(name).decoration(TextDecoration.ITALIC, false)) - .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY)); - } + /** + * Creates an {@link ItemStack.Builder} with a specified material and custom name. + * + * @param material the material of the item stack + * @param name the custom name of the item stack + * @return an {@link ItemStack.Builder} with the specified properties + */ + public static ItemStack.Builder createNamedItemStack(Material material, String name) { + return clearAttributes(ItemStack.builder(material) + .set(DataComponents.CUSTOM_NAME, Component.text(name).decoration(TextDecoration.ITALIC, false)) + .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY)); + } - /** - * Clears attribute modifiers from the given {@link ItemStack.Builder}. - * - * @param builder the {@link ItemStack.Builder} to clear attributes from - * @return the modified {@link ItemStack.Builder} - */ - public static ItemStack.Builder clearAttributes(ItemStack.Builder builder) { - builder.set(DataComponents.ATTRIBUTE_MODIFIERS, new AttributeList(List.of())); - builder.set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY); - return builder; - } + /** + * Clears attribute modifiers from the given {@link ItemStack.Builder}. + * + * @param builder the {@link ItemStack.Builder} to clear attributes from + * @return the modified {@link ItemStack.Builder} + */ + public static ItemStack.Builder clearAttributes(ItemStack.Builder builder) { + builder.set(DataComponents.ATTRIBUTE_MODIFIERS, new AttributeList(List.of())); + builder.set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY); + return builder; + } - /** - * Creates an {@link ItemStack.Builder} with a specified material and an empty custom name. - * - * @param material the material of the item stack - * @return an {@link ItemStack.Builder} with the specified material and an empty name - */ - public static ItemStack.Builder createNamedItemStack(Material material) { - return createNamedItemStack(material, ""); - } + /** + * Creates an {@link ItemStack.Builder} with a specified material and an empty custom name. + * + * @param material the material of the item stack + * @return an {@link ItemStack.Builder} with the specified material and an empty name + */ + public static ItemStack.Builder createNamedItemStack(Material material) { + return createNamedItemStack(material, ""); + } - /** - * Creates an {@link ItemStack.Builder} with a single lore line. - * - * @param name the name of the item stack - * @param color the color to apply to the lore - * @param material the material of the item stack - * @param data additional data for the item - * @param amount the amount of items in the stack - * @param lore the lore to display - * @return an {@link ItemStack.Builder} with the specified properties - */ - public static ItemStack.Builder getSingleLoreStack(String name, String color, Material material, short data, int amount, String lore) { - List l = new ArrayList<>(); - for (String line : StringUtility.splitByWordAndLength(lore, 30)) { - l.add(color + line); - } - return getStack(name, material, amount, l.toArray(new String[]{})); - } + /** + * Creates an {@link ItemStack.Builder} with a single lore line. + * + * @param name the name of the item stack + * @param color the color to apply to the lore + * @param material the material of the item stack + * @param amount the amount of items in the stack + * @param lore the lore to display + * @return an {@link ItemStack.Builder} with the specified properties + */ + public static ItemStack.Builder getSingleLoreStack(String name, String color, Material material, int amount, String lore) { + List l = new ArrayList<>(); + for (String line : StringUtility.splitByWordAndLength(lore, 30)) { + l.add(color + line); + } + return getStack(name, material, amount, l.toArray(new String[]{})); + } - /** - * Creates an {@link ItemStack.Builder} with specified name, material, amount, and lore. - * - * @param name the name of the item stack - * @param material the material of the item stack - * @param amount the amount of items in the stack - * @param lore the lore of the item stack - * @return an {@link ItemStack.Builder} with the specified properties - */ - public static ItemStack.Builder getStack(String name, Material material, int amount, String... lore) { - return getStack(name, material, amount, Arrays.asList(lore)); - } + /** + * Creates an {@link ItemStack.Builder} with specified name, material, amount, and lore. + * + * @param name the name of the item stack + * @param material the material of the item stack + * @param amount the amount of items in the stack + * @param lore the lore of the item stack + * @return an {@link ItemStack.Builder} with the specified properties + */ + public static ItemStack.Builder getStack(String name, Material material, int amount, String... lore) { + return getStack(name, material, amount, Arrays.asList(lore)); + } - /** - * Updates the lore of the given {@link ItemStack.Builder} with the specified lore lines. - * - * @param builder the {@link ItemStack.Builder} to update - * @param lore the new lore lines to set - * @return the updated {@link ItemStack.Builder} - */ - public static ItemStack.Builder updateLore(ItemStack.Builder builder, List lore) { - List copiedLore = new ArrayList<>(); - for (String s : lore) { - copiedLore.add(color(s)); - } + /** + * Updates the lore of the given {@link ItemStack.Builder} with the specified lore lines. + * + * @param builder the {@link ItemStack.Builder} to update + * @param lore the new lore lines to set + * @return the updated {@link ItemStack.Builder} + */ + public static ItemStack.Builder updateLore(ItemStack.Builder builder, List lore) { + List copiedLore = new ArrayList<>(); + for (String s : lore) { + copiedLore.add(color(s)); + } - return clearAttributes(builder.set(DataComponents.LORE, copiedLore.stream() - .map(line -> Component.text(line).decoration(TextDecoration.ITALIC, false)) - .collect(Collectors.toList())) - .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY)); - } + return clearAttributes(builder.set(DataComponents.LORE, copiedLore.stream() + .map(line -> Component.text(line).decoration(TextDecoration.ITALIC, false)) + .collect(Collectors.toList())) + .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY)); + } - /** - * Marks the given {@link ItemStack.Builder} as not editable. - * - * @param builder the {@link ItemStack.Builder} to modify - * @return the modified {@link ItemStack.Builder} - */ - public static ItemStack.Builder setNotEditable(ItemStack.Builder builder) { - return builder.set(Tag.Boolean("uneditable"), true); - } + /** + * Marks the given {@link ItemStack.Builder} as not editable. + * + * @param builder the {@link ItemStack.Builder} to modify + * @return the modified {@link ItemStack.Builder} + */ + public static ItemStack.Builder setNotEditable(ItemStack.Builder builder) { + return builder.set(Tag.Boolean("uneditable"), true); + } - /** - * Applies an enchantment glint to the given {@link ItemStack.Builder}. - * - * @param builder the {@link ItemStack.Builder} to modify - * @return the modified {@link ItemStack.Builder} - */ - public static ItemStack.Builder enchant(ItemStack.Builder builder) { - return clearAttributes(builder.set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, true) - .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY)); - } + /** + * Applies an enchantment glint to the given {@link ItemStack.Builder}. + * + * @param builder the {@link ItemStack.Builder} to modify + * @return the modified {@link ItemStack.Builder} + */ + public static ItemStack.Builder enchant(ItemStack.Builder builder) { + return clearAttributes(builder.set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, true) + .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY)); + } - /** - * Creates an {@link ItemStack.Builder} from an existing {@link ItemStack}. - * - * @param stack the original {@link ItemStack} to create a builder from - * @return an {@link ItemStack.Builder} with the properties of the original stack - */ - public static ItemStack.Builder getFromStack(ItemStack stack) { - return clearAttributes(ItemStack.builder(stack.material()) - .amount(stack.amount()) - .set(DataComponents.LORE, stack.get(DataComponents.LORE)) - .set(DataComponents.CUSTOM_NAME, stack.get(DataComponents.CUSTOM_NAME)) - .set(DataComponents.CUSTOM_DATA, stack.get(DataComponents.CUSTOM_DATA))); - } + /** + * Creates an {@link ItemStack.Builder} from an existing {@link ItemStack}. + * + * @param stack the original {@link ItemStack} to create a builder from + * @return an {@link ItemStack.Builder} with the properties of the original stack + */ + public static ItemStack.Builder getFromStack(ItemStack stack) { + return clearAttributes(ItemStack.builder(stack.material()) + .amount(stack.amount()) + .set(DataComponents.LORE, stack.get(DataComponents.LORE)) + .set(DataComponents.CUSTOM_NAME, stack.get(DataComponents.CUSTOM_NAME)) + .set(DataComponents.CUSTOM_DATA, stack.get(DataComponents.CUSTOM_DATA))); + } - /** - * Creates an {@link ItemStack.Builder} with the specified name, material, amount, and lore list. - * - * @param name the name of the item stack - * @param material the material of the item stack - * @param amount the amount of items in the stack - * @param lore the list of lore lines for the item stack - * @return an {@link ItemStack.Builder} with the specified properties - */ - public static ItemStack.Builder getStack(String name, Material material, int amount, List lore) { - List copiedLore = new ArrayList<>(); - for (String s : lore) { - copiedLore.add(color(s)); - } + /** + * Creates an {@link ItemStack.Builder} with the specified name, material, amount, and lore list. + * + * @param name the name of the item stack + * @param material the material of the item stack + * @param amount the amount of items in the stack + * @param lore the list of lore lines for the item stack + * @return an {@link ItemStack.Builder} with the specified properties + */ + public static ItemStack.Builder getStack(String name, Material material, int amount, List lore) { + List copiedLore = new ArrayList<>(); + for (String s : lore) { + copiedLore.add(color(s)); + } - return clearAttributes(ItemStack.builder(material).amount(amount).set(DataComponents.LORE, copiedLore.stream() - .map(line -> Component.text(line).decoration(TextDecoration.ITALIC, false)) - .collect(Collectors.toList())) - .set(DataComponents.CUSTOM_NAME, Component.text(name).decoration(TextDecoration.ITALIC, false)) - .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY)); - } + return clearAttributes(ItemStack.builder(material).amount(amount).set(DataComponents.LORE, copiedLore.stream() + .map(line -> Component.text(line).decoration(TextDecoration.ITALIC, false)) + .collect(Collectors.toList())) + .set(DataComponents.CUSTOM_NAME, Component.text(name).decoration(TextDecoration.ITALIC, false)) + .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY)); + } - /** - * Creates an {@link ItemStack.Builder} for a player head with the specified properties. - * - * @param name the name of the item stack - * @param texture the texture URL of the player skin - * @param amount the amount of items in the stack - * @param lore the lore of the item stack - * @return an {@link ItemStack.Builder} for a player head with the specified properties - */ - public static ItemStack.Builder getStackHead(String name, String texture, int amount, String... lore) { - return getStackHead(name, texture, amount, Arrays.asList(lore)); - } + /** + * Creates an {@link ItemStack.Builder} for a player head with the specified properties. + * + * @param name the name of the item stack + * @param texture the texture URL of the player skin + * @param amount the amount of items in the stack + * @param lore the lore of the item stack + * @return an {@link ItemStack.Builder} for a player head with the specified properties + */ + public static ItemStack.Builder getStackHead(String name, String texture, int amount, String... lore) { + return getStackHead(name, texture, amount, Arrays.asList(lore)); + } - /** - * Creates an {@link ItemStack.Builder} for a player head with the specified name and texture. - * - * @param name the name of the item stack - * @param texture the texture URL of the player skin - * @return an {@link ItemStack.Builder} for a player head - */ - public static ItemStack.Builder getStackHead(String name, String texture) { - return getStackHead(name, texture, 1, new ArrayList<>()); - } + /** + * Creates an {@link ItemStack.Builder} for a player head with the specified name and texture. + * + * @param name the name of the item stack + * @param texture the texture URL of the player skin + * @return an {@link ItemStack.Builder} for a player head + */ + public static ItemStack.Builder getStackHead(String name, String texture) { + return getStackHead(name, texture, 1, new ArrayList<>()); + } - /** - * Creates an {@link ItemStack.Builder} for a player head with the specified texture. - * - * @param texture the texture URL of the player skin - * @return an {@link ItemStack.Builder} for a player head - */ - public static ItemStack.Builder getStackHead(String texture) { - return getStackHead("", texture, 1, new ArrayList<>()); - } + /** + * Creates an {@link ItemStack.Builder} for a player head with the specified texture. + * + * @param texture the texture URL of the player skin + * @return an {@link ItemStack.Builder} for a player head + */ + public static ItemStack.Builder getStackHead(String texture) { + return getStackHead("", texture, 1, new ArrayList<>()); + } - /** - * Creates an {@link ItemStack.Builder} for a player head using a {@link PlayerSkin}. - * - * @param name the name of the item stack - * @param skin the {@link PlayerSkin} to use for the head - * @param amount the amount of items in the stack - * @param lore the lore of the item stack - * @return an {@link ItemStack.Builder} for a player head - */ - public static ItemStack.Builder getStackHead(String name, PlayerSkin skin, int amount, String... lore) { - return getStackHead(name, skin, amount, Arrays.asList(lore)); - } + /** + * Creates an {@link ItemStack.Builder} for a player head using a {@link PlayerSkin}. + * + * @param name the name of the item stack + * @param skin the {@link PlayerSkin} to use for the head + * @param amount the amount of items in the stack + * @param lore the lore of the item stack + * @return an {@link ItemStack.Builder} for a player head + */ + public static ItemStack.Builder getStackHead(String name, PlayerSkin skin, int amount, String... lore) { + return getStackHead(name, skin, amount, Arrays.asList(lore)); + } - /** - * Creates an {@link ItemStack.Builder} for a player head with a specified name, texture, amount, and lore list. - * - * @param name the name of the item stack - * @param texture the texture URL of the player skin - * @param amount the amount of items in the stack - * @param lore the list of lore lines for the item stack - * @return an {@link ItemStack.Builder} for a player head with the specified properties - */ - public static ItemStack.Builder getStackHead(String name, String texture, int amount, List lore) { - List copiedLore = new ArrayList<>(); - for (String s : lore) { - copiedLore.add(color(s)); - } + /** + * Creates an {@link ItemStack.Builder} for a player head with a specified name, texture, amount, and lore list. + * + * @param name the name of the item stack + * @param texture the texture URL of the player skin + * @param amount the amount of items in the stack + * @param lore the list of lore lines for the item stack + * @return an {@link ItemStack.Builder} for a player head with the specified properties + */ + public static ItemStack.Builder getStackHead(String name, String texture, int amount, List lore) { + List copiedLore = new ArrayList<>(); + for (String s : lore) { + copiedLore.add(color(s)); + } - JSONObject json = new JSONObject(); - json.put("isPublic", true); - json.put("signatureRequired", false); - json.put("textures", new JSONObject().put("SKIN", - new JSONObject().put("url", "http://textures.minecraft.net/texture/" + texture).put("metadata", new JSONObject().put("model", "slim")))); + JSONObject json = new JSONObject(); + json.put("isPublic", true); + json.put("signatureRequired", false); + json.put("textures", new JSONObject().put("SKIN", + new JSONObject().put("url", "http://textures.minecraft.net/texture/" + texture).put("metadata", new JSONObject().put("model", "slim")))); - String texturesEncoded = Base64.getEncoder().encodeToString(json.toString().getBytes()); + String texturesEncoded = Base64.getEncoder().encodeToString(json.toString().getBytes()); - return ItemStack.builder(Material.PLAYER_HEAD) - .set(DataComponents.LORE, copiedLore.stream() - .map(line -> Component.text(line).decoration(TextDecoration.ITALIC, false)) - .collect(Collectors.toList())) - .set(DataComponents.CUSTOM_NAME, Component.text(name).decoration(TextDecoration.ITALIC, false)) - .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY) - .set(DataComponents.PROFILE, new HeadProfile(new PlayerSkin(texturesEncoded, null))) - .amount(amount); - } + return ItemStack.builder(Material.PLAYER_HEAD) + .set(DataComponents.LORE, copiedLore.stream() + .map(line -> Component.text(line).decoration(TextDecoration.ITALIC, false)) + .collect(Collectors.toList())) + .set(DataComponents.CUSTOM_NAME, Component.text(name).decoration(TextDecoration.ITALIC, false)) + .set(DataComponents.TOOLTIP_DISPLAY, DEFAULT_TOOLTIP_DISPLAY) + .set(DataComponents.PROFILE, new HeadProfile(new PlayerSkin(texturesEncoded, null))) + .amount(amount); + } - /** - * Creates an {@link ItemStack.Builder} for a player head with a specified name, {@link PlayerSkin}, amount, and lore list. - * - * @param name the name of the item stack - * @param skin the {@link PlayerSkin} to use for the head - * @param amount the amount of items in the stack - * @param lore the list of lore lines for the item stack - * @return an {@link ItemStack.Builder} for a player head with the specified properties - */ - public static ItemStack.Builder getStackHead(String name, PlayerSkin skin, int amount, List lore) { - List copiedLore = new ArrayList<>(); - for (String s : lore) { - copiedLore.add(color(s)); - } + /** + * Creates an {@link ItemStack.Builder} for a player head with a specified name, {@link PlayerSkin}, amount, and lore list. + * + * @param name the name of the item stack + * @param skin the {@link PlayerSkin} to use for the head + * @param amount the amount of items in the stack + * @param lore the list of lore lines for the item stack + * @return an {@link ItemStack.Builder} for a player head with the specified properties + */ + public static ItemStack.Builder getStackHead(String name, PlayerSkin skin, int amount, List lore) { + List copiedLore = new ArrayList<>(); + for (String s : lore) { + copiedLore.add(color(s)); + } - return clearAttributes(ItemStack.builder(Material.PLAYER_HEAD) - .set(DataComponents.LORE, copiedLore.stream() - .map(line -> Component.text(line).decoration(TextDecoration.ITALIC, false)) - .collect(Collectors.toList())) - .set(DataComponents.CUSTOM_NAME, Component.text(name).decoration(TextDecoration.ITALIC, false)) - .set(DataComponents.TOOLTIP_DISPLAY, new TooltipDisplay(true, Set.of( - DataComponents.CONSUMABLE, - DataComponents.DAMAGE, - DataComponents.BASE_COLOR, - DataComponents.UNBREAKABLE - ))) - .set(DataComponents.PROFILE, new HeadProfile(skin)) - .amount(amount)); - } + return clearAttributes(ItemStack.builder(Material.PLAYER_HEAD) + .set(DataComponents.LORE, copiedLore.stream() + .map(line -> Component.text(line).decoration(TextDecoration.ITALIC, false)) + .collect(Collectors.toList())) + .set(DataComponents.CUSTOM_NAME, Component.text(name).decoration(TextDecoration.ITALIC, false)) + .set(DataComponents.TOOLTIP_DISPLAY, new TooltipDisplay(true, Set.of( + DataComponents.CONSUMABLE, + DataComponents.DAMAGE, + DataComponents.BASE_COLOR, + DataComponents.UNBREAKABLE + ))) + .set(DataComponents.PROFILE, new HeadProfile(skin)) + .amount(amount)); + } - /** - * Replaces color codes in the given string with Minecraft color codes. - * - * @param string the input string with color codes - * @return the string with color codes replaced - */ - public static String color(String string) { - return string.replace("&", "§"); - } + /** + * Replaces color codes in the given string with Minecraft color codes. + * + * @param string the input string with color codes + * @return the string with color codes replaced + */ + public static String color(String string) { + return string.replace("&", "§"); + } } diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/data/monogdb/RegionDatabase.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/data/monogdb/RegionDatabase.java index ee652bb28..c3d838ea0 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/data/monogdb/RegionDatabase.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/data/monogdb/RegionDatabase.java @@ -17,95 +17,100 @@ import java.util.List; public record RegionDatabase(String id) implements MongoDB { - public static MongoDatabase database; - public static MongoCollection collection; + public static MongoDatabase database; + public static MongoCollection collection; - public static void connect(MongoClient client) { - database = client.getDatabase("Minestom"); - collection = database.getCollection("regions"); - } + public static void connect(MongoClient client) { + database = client.getDatabase("Minestom"); + collection = database.getCollection("regions"); + } - @Override - public void set(String key, Object value) { - insertOrUpdate(key, value); - } + public static List getAllRegions() { + List regions = new ArrayList<>(); + for (Document doc : collection.find()) { + String name = doc.getString("_id"); + RegionType type; + try { + type = RegionType.valueOf(doc.getString("type")); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("Region " + name + " has an invalid type: " + doc.getString("type")); + } + int x1 = doc.getInteger("x1"); + int y1 = doc.getInteger("y1"); + int z1 = doc.getInteger("z1"); + int x2 = doc.getInteger("x2"); + int y2 = doc.getInteger("y2"); + int z2 = doc.getInteger("z2"); + ServerType serverType = ServerType.getSkyblockServer(doc.getOrDefault("serverType", ServerType.SKYBLOCK_HUB.name()).toString()); + SkyBlockRegion region = new SkyBlockRegion( + name, + new Pos(x1, y1, z1), + new Pos(x2, y2, z2), + type, + serverType); + regions.add(region); + } + return regions; + } - @Override - public Object get(String key, Object def) { - Document doc = collection.find(Filters.eq("_id", id)).first(); - if (doc == null) { - return def; - } - return doc.get(key); - } + @Override + public void set(String key, Object value) { + insertOrUpdate(key, value); + } - public List getAll() { - FindIterable results = collection.find(); - List list = new ArrayList<>(); - for (Document doc : results) { - list.add(doc); - } - return list; - } + @Override + public Object get(String key, Object def) { + Document doc = collection.find(Filters.eq("_id", id)).first(); + if (doc == null) { + return def; + } + return doc.get(key); + } - public Document getDocument() { - Document query = new Document("_id", id); - return collection.find(query).first(); - } + public List getAll() { + FindIterable results = collection.find(); + List list = new ArrayList<>(); + for (Document doc : results) { + list.add(doc); + } + return list; + } - @Override - public boolean remove(String id) { - Document query = new Document("_id", id); - Document found = collection.find(query).first(); + public Document getDocument() { + Document query = new Document("_id", id); + return collection.find(query).first(); + } - if (found == null) { - return false; - } + @Override + public boolean remove(String id) { + Document query = new Document("_id", id); + Document found = collection.find(query).first(); - collection.deleteOne(query); - return true; - } + if (found == null) { + return false; + } - public void insertOrUpdate(String key, Object value) { - if (exists()) { - Document query = new Document("_id", id); - Document found = collection.find(query).first(); + collection.deleteOne(query); + return true; + } - assert found != null; - collection.updateOne(found, Updates.set(key, value)); - return; - } - Document New = new Document("_id", id); - New.append(key, value); - collection.insertOne(New); - } + public void insertOrUpdate(String key, Object value) { + if (exists()) { + Document query = new Document("_id", id); + Document found = collection.find(query).first(); - public boolean exists() { - Document query = new Document("_id", id); - Document found = collection.find(query).first(); - return found != null; - } + assert found != null; + collection.updateOne(found, Updates.set(key, value)); + return; + } + Document New = new Document("_id", id); + New.append(key, value); + collection.insertOne(New); + } - public static List getAllRegions() { - List regions = new ArrayList<>(); - for (Document doc : collection.find()) { - String name = doc.getString("_id"); - RegionType type = RegionType.valueOf(doc.getString("type")); - int x1 = doc.getInteger("x1"); - int y1 = doc.getInteger("y1"); - int z1 = doc.getInteger("z1"); - int x2 = doc.getInteger("x2"); - int y2 = doc.getInteger("y2"); - int z2 = doc.getInteger("z2"); - ServerType serverType = ServerType.getSkyblockServer(doc.getOrDefault("serverType", ServerType.SKYBLOCK_HUB.name()).toString()); - SkyBlockRegion region = new SkyBlockRegion( - name, - new Pos(x1, y1, z1), - new Pos(x2, y2, z2), - type, - serverType); - regions.add(region); - } - return regions; - } + public boolean exists() { + Document query = new Document("_id", id); + Document found = collection.find(query).first(); + return found != null; + } } diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java index 26e5e5c03..9ae960f4f 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java @@ -10,132 +10,132 @@ @Getter public enum RegionType { - PRIVATE_ISLAND("Your Island", "§a"), - - VILLAGE("Village", WheatAndFlowersConfiguration.class), - BANK("Bank", "§6"), - LIBRARY("Library"), - AUCTION_HOUSE("Auction House", "§6"), - FLOWER_HOUSE("Flower House"), - BAZAAR_ALLEY("Bazaar Alley", "§e"), - COMMUNITY_CENTER("Community Center"), - BUILDERS_HOUSE("Builder's House"), - MOUNTAIN("Mountain"), - WILDERNESS("Wilderness", "§2", Songs.WILDERNESS), - RUINS("Ruins"), - COLOSSEUM("Colosseum"), - GRAVEYARD("Graveyard", "§c"), - COAL_MINE("Coal Mine", MineCoalConfiguration.class), - HIGH_LEVEL("High Level", "§4"), - ARCHERY_RANGE("Archery Range", "§9"), - BLACKSMITH("Blacksmith"), - FARM("Farm", MineWheatConfiguration.class), - DARK_AUCTION("Dark Auction", "§5"), - FOREST("Forest", MineLogsConfiguration.class), - - BIRCH_PARK("Birch Park", "§a"), - HOWLING_CAVE("Howling Cave"), - SPRUCE_WOODS("Spruce Woods", "§a"), - DARK_THICKET("Dark Thicket", "§a"), - SAVANNA_WOODLAND("Savanna Woodland", "§a"), - MELODY_PLATEAU("Melody's Plateau", "§5"), - JUNGLE_ISLAND("Jungle Island", "§a"), - - THE_BARN("The Barn", "§b", BarnConfiguration.class), - MUSHROOM_DESERT("Mushroom Desert"), - DESERT_SETTLEMENT("Desert Settlement", "§e"), - OASIS("Oasis"), - SHEPHERD_KEEP("Shepherd's Keep"), - TRAPPERS_DEN("Trapper's Den"), - JAKE_HOUSE("Jake's House"), - MUSHROOM_GORGE("Mushroom Gorge"), - OVERGROWN_MUSHROOM_CAVE("Overgrown Mushroom Cave", "§2"), - GLOWING_MUSHROOM_CAVE("Glowing Mushroom Cave", "§3"), - - SPIDERS_DEN("Spider's Den", "§4"), - SPIDERS_DEN_HIVE("Spider's Den", "§4"), - BLAZING_FORTRESS("Blazing Fortress", "§4"), - THE_END("The End", "§d"), - THE_END_NEST("The End", "§d"), - ARCHAEOLOGICAL_SITE("Archaeological Site", "§a"), - BURNING_BRIDGE("Burning Bridge", "§4"), - VOID_SEPULTURE("Void Sepulture", "§d"), - DRAGONS_NEST("Dragon's Nest", "§5"), - - GOLD_MINE("Gold Mine", "§6", GoldMineConfiguration.class), - DEEP_CAVERN("Deep Caverns", "§b"), - GUNPOWDER_MINES("Gunpowder Mines"), - LAPIS_QUARRY("Lapis Quarry"), - PIGMENS_DEN("Pigmen's Den"), - SLIMEHILL("Slimehill"), - DIAMOND_RESERVE("Diamond Reserve"), - OBSIDIAN_SANCTUARY("Obsidian Sanctuary"), - - DWARVEN_VILLAGE("Dwarven Village"), - DWARVEN_MINES("Dwarven Mines", "§2"), - GOBLIN_BURROWS("Goblin Burrows"), - THE_MIST("The Mist", "§8"), - GREAT_ICE_WALL("Great Ice Wall"), - GATES_TO_THE_MINES("Gates to the Mines"), - RAMPARTS_QUARRY("Rampart's Quarry"), - FORGE_BASIN("Forge Basin"), - THE_FORGE("The Forge"), - CLIFFSIDE_VEINS("Cliffside Veins"), - ROYAL_MINES("Royal Mines"), - DIVANS_GATEWAY("Divan's Gateway"), - FAR_RESERVE("Far Reserve"); - - private final String name; - private final String color; - private final SkyBlockMiningConfiguration miningHandler; - private final List songs; - - @SneakyThrows - RegionType(String name, String color, Class miningHandler, Songs... songs) { - this.name = name; - this.color = color; - - if (miningHandler != null) - this.miningHandler = miningHandler.newInstance(); - else - this.miningHandler = null; - this.songs = new ArrayList<>(); - } - - RegionType(String name, String color, Class miningHandler) { - this(name, color, miningHandler, new Songs[0]); - } - - RegionType(String name, Class miningHandler) { - this(name, "§b", miningHandler); - } - - RegionType(String name, String color) { - this(name, color, new Songs[0]); - } - - RegionType(String name, String color, Songs... songs) { - this.name = name; - this.color = color; - this.miningHandler = null; - this.songs = new ArrayList<>(List.of(songs)); - } - - RegionType(String name) { - this(name, "§b", new Songs[0]); - } - - @SneakyThrows - public SkyBlockMiningConfiguration getMiningHandler() { - return miningHandler; - } - - @Override - public String toString() { - return color + name; - } - - public static RegionType getByID(int id) { - return RegionType.values()[id]; - } + PRIVATE_ISLAND("Your Island", "§a"), + + VILLAGE("Village", WheatAndFlowersConfiguration.class), + BANK("Bank", "§6"), + LIBRARY("Library"), + AUCTION_HOUSE("Auction House", "§6"), + FLOWER_HOUSE("Flower House"), + BAZAAR_ALLEY("Bazaar Alley", "§e"), + COMMUNITY_CENTER("Community Center"), + BUILDERS_HOUSE("Builder's House"), + MOUNTAIN("Mountain"), + WILDERNESS("Wilderness", "§2", Songs.WILDERNESS), + RUINS("Ruins"), + COLOSSEUM("Colosseum"), + GRAVEYARD("Graveyard", "§c"), + COAL_MINE("Coal Mine", MineCoalConfiguration.class), + HIGH_LEVEL("High Level", "§4"), + ARCHERY_RANGE("Archery Range", "§9"), + BLACKSMITH("Blacksmith"), + FARM("Farm", MineWheatConfiguration.class), + DARK_AUCTION("Dark Auction", "§5"), + FOREST("Forest", MineLogsConfiguration.class), + + BIRCH_PARK("Birch Park", "§a"), + HOWLING_CAVE("Howling Cave"), + SPRUCE_WOODS("Spruce Woods", "§a"), + DARK_THICKET("Dark Thicket", "§a"), + SAVANNA_WOODLAND("Savanna Woodland", "§a"), + MELODY_PLATEAU("Melody's Plateau", "§5"), + JUNGLE_ISLAND("Jungle Island", "§a"), + + THE_BARN("The Barn", "§b", BarnConfiguration.class), + MUSHROOM_DESERT("Mushroom Desert"), + DESERT_SETTLEMENT("Desert Settlement", "§e"), + OASIS("Oasis"), + SHEPHERD_KEEP("Shepherd's Keep"), + TRAPPERS_DEN("Trapper's Den"), + JAKE_HOUSE("Jake's House"), + MUSHROOM_GORGE("Mushroom Gorge"), + OVERGROWN_MUSHROOM_CAVE("Overgrown Mushroom Cave", "§2"), + GLOWING_MUSHROOM_CAVE("Glowing Mushroom Cave", "§3"), + + SPIDERS_DEN("Spider's Den", "§4"), + SPIDERS_DEN_HIVE("Spider's Den", "§4"), + BLAZING_FORTRESS("Blazing Fortress", "§4"), + THE_END("The End", "§d"), + THE_END_NEST("The End", "§d"), + ARCHAEOLOGICAL_SITE("Archaeological Site", "§a"), + BURNING_BRIDGE("Burning Bridge", "§4"), + VOID_SEPULTURE("Void Sepulture", "§d"), + DRAGONS_NEST("Dragon's Nest", "§5"), + + GOLD_MINE("Gold Mine", "§6", GoldMineConfiguration.class), + DEEP_CAVERNS("Deep Caverns", "§b"), + GUNPOWDER_MINES("Gunpowder Mines"), + LAPIS_QUARRY("Lapis Quarry"), + PIGMENS_DEN("Pigmen's Den"), + SLIMEHILL("Slimehill"), + DIAMOND_RESERVE("Diamond Reserve"), + OBSIDIAN_SANCTUARY("Obsidian Sanctuary"), + + DWARVEN_VILLAGE("Dwarven Village"), + DWARVEN_MINES("Dwarven Mines", "§2"), + GOBLIN_BURROWS("Goblin Burrows"), + THE_MIST("The Mist", "§8"), + GREAT_ICE_WALL("Great Ice Wall"), + GATES_TO_THE_MINES("Gates to the Mines"), + RAMPARTS_QUARRY("Rampart's Quarry"), + FORGE_BASIN("Forge Basin"), + THE_FORGE("The Forge"), + CLIFFSIDE_VEINS("Cliffside Veins"), + ROYAL_MINES("Royal Mines"), + DIVANS_GATEWAY("Divan's Gateway"), + FAR_RESERVE("Far Reserve"); + + private final String name; + private final String color; + private final SkyBlockMiningConfiguration miningHandler; + private final List songs; + + @SneakyThrows + RegionType(String name, String color, Class miningHandler, Songs... songs) { + this.name = name; + this.color = color; + + if (miningHandler != null) + this.miningHandler = miningHandler.getDeclaredConstructor().newInstance(); + else + this.miningHandler = null; + this.songs = new ArrayList<>(); + } + + RegionType(String name, String color, Class miningHandler) { + this(name, color, miningHandler, new Songs[0]); + } + + RegionType(String name, Class miningHandler) { + this(name, "§b", miningHandler); + } + + RegionType(String name, String color) { + this(name, color, new Songs[0]); + } + + RegionType(String name, String color, Songs... songs) { + this.name = name; + this.color = color; + this.miningHandler = null; + this.songs = new ArrayList<>(List.of(songs)); + } + + RegionType(String name) { + this(name, "§b", new Songs[0]); + } + + public static RegionType getByID(int id) { + return RegionType.values()[id]; + } + + @SneakyThrows + public SkyBlockMiningConfiguration getMiningHandler() { + return miningHandler; + } + + @Override + public String toString() { + return color + name; + } } \ No newline at end of file diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/skill/skills/MiningSkill.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/skill/skills/MiningSkill.java index 8577009cb..4deb5f7bc 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/skill/skills/MiningSkill.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/skill/skills/MiningSkill.java @@ -8,2206 +8,2206 @@ import java.util.List; public class MiningSkill extends SkillCategory { - @Override - public Material getDisplayIcon() { - return Material.STONE_PICKAXE; - } - - @Override - public String getName() { - return "Mining"; - } - - @Override - public List getDescription() { - return List.of( - "§7Dive into deep caves and find rare", - "§7ores and valuable materials to earn", - "§7Mining XP!" - ); - } - - @Override - public SkillReward[] getRewards() { - return List.of( - new SkillReward(1, 50, - new RegionReward() { - @Override - public RegionType getRegion() { - return RegionType.GOLD_MINE; - } - }, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 100; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(2, 125, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 250; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(3, 200, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 500; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(4, 300, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 750; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(5, 500, - new RegionReward() { - @Override - public RegionType getRegion() { - return RegionType.DEEP_CAVERN; - } - }, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(6, 750, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 2000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(7, 1000, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 3000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(8, 1500, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 4000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(9, 2000, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 5000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(10, 3500, - new XPReward() { - @Override - public int getXP() { - return 5; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 7500; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(11, 5000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 10000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(12, 7500, - new RegionReward() { - @Override - public RegionType getRegion() { - return RegionType.DWARVEN_MINES; - } - }, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 15000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(13, 10000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 20000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(14, 15000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 25000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 1D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(15, 20000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 30000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(16, 30000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 40000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(17, 50000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 50000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(18, 75000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 65000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(19, 100000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 80000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(20, 200000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 100000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(21, 300000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 125000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(22, 400000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 150000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(23, 500000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 175000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(24, 600000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 200000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(25, 700000, - new XPReward() { - @Override - public int getXP() { - return 10; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 225000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(26, 800000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 250000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(27, 900000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 275000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(28, 1000000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 300000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(29, 1100000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 325000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(30, 1200000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 350000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(31, 1300000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 375000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(32, 1400000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 400000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(33, 1500000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 425000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(34, 1600000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 450000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(35, 1700000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 475000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(36, 1800000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 500000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(37, 1900000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 550000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(38, 2000000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 600000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(39, 2100000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 650000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(40, 2200000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 700000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(41, 2300000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 750000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(42, 2400000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 800000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(43, 2500000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 850000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(44, 2600000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 900000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(45, 2750000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(46, 2900000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(47, 3100000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(48, 3400000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(49, 3700000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(50, 4000000, - new XPReward() { - @Override - public int getXP() { - return 20; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(51, 4300000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(52, 4600000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(53, 4900000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(54, 5200000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(55, 5500000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(56, 5800000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(57, 6100000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(58, 6400000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(59, 6700000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ), - new SkillReward(60, 7000000, - new XPReward() { - @Override - public int getXP() { - return 30; - } - }, - new CoinReward() { - @Override - public int getCoins() { - return 1000000; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.DEFENSE; - } - - @Override - public Double amountAdded() { - return 2D; - } - }, - new BaseStatisticReward() { - @Override - public ItemStatistic getStatistic() { - return ItemStatistic.MINING_FORTUNE; - } - - @Override - public Double amountAdded() { - return 4D; - } - } - ) - ).toArray(SkillReward[]::new); - } + @Override + public Material getDisplayIcon() { + return Material.STONE_PICKAXE; + } + + @Override + public String getName() { + return "Mining"; + } + + @Override + public List getDescription() { + return List.of( + "§7Dive into deep caves and find rare", + "§7ores and valuable materials to earn", + "§7Mining XP!" + ); + } + + @Override + public SkillReward[] getRewards() { + return List.of( + new SkillReward(1, 50, + new RegionReward() { + @Override + public RegionType getRegion() { + return RegionType.GOLD_MINE; + } + }, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 100; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(2, 125, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 250; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(3, 200, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 500; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(4, 300, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 750; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(5, 500, + new RegionReward() { + @Override + public RegionType getRegion() { + return RegionType.DEEP_CAVERNS; + } + }, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(6, 750, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 2000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(7, 1000, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 3000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(8, 1500, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 4000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(9, 2000, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 5000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(10, 3500, + new XPReward() { + @Override + public int getXP() { + return 5; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 7500; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(11, 5000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 10000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(12, 7500, + new RegionReward() { + @Override + public RegionType getRegion() { + return RegionType.DWARVEN_MINES; + } + }, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 15000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(13, 10000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 20000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(14, 15000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 25000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 1D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(15, 20000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 30000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(16, 30000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 40000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(17, 50000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 50000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(18, 75000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 65000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(19, 100000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 80000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(20, 200000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 100000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(21, 300000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 125000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(22, 400000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 150000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(23, 500000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 175000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(24, 600000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 200000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(25, 700000, + new XPReward() { + @Override + public int getXP() { + return 10; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 225000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(26, 800000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 250000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(27, 900000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 275000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(28, 1000000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 300000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(29, 1100000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 325000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(30, 1200000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 350000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(31, 1300000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 375000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(32, 1400000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 400000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(33, 1500000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 425000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(34, 1600000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 450000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(35, 1700000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 475000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(36, 1800000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 500000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(37, 1900000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 550000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(38, 2000000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 600000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(39, 2100000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 650000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(40, 2200000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 700000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(41, 2300000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 750000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(42, 2400000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 800000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(43, 2500000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 850000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(44, 2600000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 900000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(45, 2750000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(46, 2900000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(47, 3100000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(48, 3400000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(49, 3700000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(50, 4000000, + new XPReward() { + @Override + public int getXP() { + return 20; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(51, 4300000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(52, 4600000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(53, 4900000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(54, 5200000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(55, 5500000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(56, 5800000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(57, 6100000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(58, 6400000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(59, 6700000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ), + new SkillReward(60, 7000000, + new XPReward() { + @Override + public int getXP() { + return 30; + } + }, + new CoinReward() { + @Override + public int getCoins() { + return 1000000; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.DEFENSE; + } + + @Override + public Double amountAdded() { + return 2D; + } + }, + new BaseStatisticReward() { + @Override + public ItemStatistic getStatistic() { + return ItemStatistic.MINING_FORTUNE; + } + + @Override + public Double amountAdded() { + return 4D; + } + } + ) + ).toArray(SkillReward[]::new); + } } diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/utility/groups/Groups.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/utility/groups/Groups.java index 16d86848c..18c2bf5bd 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/utility/groups/Groups.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/utility/groups/Groups.java @@ -7,47 +7,47 @@ import java.util.List; public final class Groups { - public static final List MINING_REGIONS = Arrays.asList( - RegionType.COAL_MINE, - RegionType.GOLD_MINE, - RegionType.DEEP_CAVERN, - RegionType.GUNPOWDER_MINES, - RegionType.LAPIS_QUARRY, - RegionType.PIGMENS_DEN, - RegionType.SLIMEHILL, - RegionType.DIAMOND_RESERVE, - RegionType.OBSIDIAN_SANCTUARY, - RegionType.THE_END, - RegionType.THE_END_NEST, - RegionType.DRAGONS_NEST, - RegionType.BLAZING_FORTRESS, - RegionType.DWARVEN_MINES, - RegionType.DWARVEN_VILLAGE, - RegionType.GOBLIN_BURROWS, - RegionType.GREAT_ICE_WALL, - RegionType.GATES_TO_THE_MINES, - RegionType.ROYAL_MINES, - RegionType.CLIFFSIDE_VEINS, - RegionType.FORGE_BASIN, - RegionType.DIVANS_GATEWAY, - RegionType.FAR_RESERVE, - RegionType.RAMPARTS_QUARRY - ); - public static final List FLOWERS = Arrays.asList( - Material.POPPY, - Material.BLUE_ORCHID, - Material.ALLIUM, - Material.AZURE_BLUET, - Material.RED_TULIP, - Material.ORANGE_TULIP, - Material.WHITE_TULIP, - Material.PINK_TULIP, - Material.OXEYE_DAISY, - Material.CORNFLOWER, - Material.LILY_OF_THE_VALLEY, - Material.DANDELION, - Material.SUNFLOWER, - Material.LILAC, - Material.PEONY - ); + public static final List MINING_REGIONS = Arrays.asList( + RegionType.COAL_MINE, + RegionType.GOLD_MINE, + RegionType.DEEP_CAVERNS, + RegionType.GUNPOWDER_MINES, + RegionType.LAPIS_QUARRY, + RegionType.PIGMENS_DEN, + RegionType.SLIMEHILL, + RegionType.DIAMOND_RESERVE, + RegionType.OBSIDIAN_SANCTUARY, + RegionType.THE_END, + RegionType.THE_END_NEST, + RegionType.DRAGONS_NEST, + RegionType.BLAZING_FORTRESS, + RegionType.DWARVEN_MINES, + RegionType.DWARVEN_VILLAGE, + RegionType.GOBLIN_BURROWS, + RegionType.GREAT_ICE_WALL, + RegionType.GATES_TO_THE_MINES, + RegionType.ROYAL_MINES, + RegionType.CLIFFSIDE_VEINS, + RegionType.FORGE_BASIN, + RegionType.DIVANS_GATEWAY, + RegionType.FAR_RESERVE, + RegionType.RAMPARTS_QUARRY + ); + public static final List FLOWERS = Arrays.asList( + Material.POPPY, + Material.BLUE_ORCHID, + Material.ALLIUM, + Material.AZURE_BLUET, + Material.RED_TULIP, + Material.ORANGE_TULIP, + Material.WHITE_TULIP, + Material.PINK_TULIP, + Material.OXEYE_DAISY, + Material.CORNFLOWER, + Material.LILY_OF_THE_VALLEY, + Material.DANDELION, + Material.SUNFLOWER, + Material.LILAC, + Material.PEONY + ); } diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/warps/TravelScrollIslands.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/warps/TravelScrollIslands.java index 063412bd5..774b9f63a 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/warps/TravelScrollIslands.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/warps/TravelScrollIslands.java @@ -12,82 +12,88 @@ @Getter public enum TravelScrollIslands { - PRIVATE_ISLAND("home", "§bPrivate Island", - "f151cffdaf303673531a7651b36637cad912ba485643158e548d59b2ead5011", - (unused) -> "Your very own chunk of SkyBlock. Nice housing for your minions.", ServerType.SKYBLOCK_ISLAND), - SKYBLOCK_HUB("hub", "§bSkyBlock Hub", "9c465a5d348c53d473f8115ed8923be416f35149f73ebaf5f2b05e13401e814f", (unused) -> "Where everything happens and anything is possible.", - ServerType.SKYBLOCK_HUB, List.of(TravelScrollType.HUB_CASTLE, TravelScrollType.HUB_MUSEUM, TravelScrollType.HUB_CRYPTS)), - ; + PRIVATE_ISLAND("home", "§bPrivate Island", + "f151cffdaf303673531a7651b36637cad912ba485643158e548d59b2ead5011", + (unused) -> "Your very own chunk of SkyBlock. Nice housing for your minions.", ServerType.SKYBLOCK_ISLAND), + SKYBLOCK_HUB("hub", "§bSkyBlock Hub", "9c465a5d348c53d473f8115ed8923be416f35149f73ebaf5f2b05e13401e814f", (unused) -> "Where everything happens and anything is possible.", + ServerType.SKYBLOCK_HUB, List.of(TravelScrollType.HUB_CASTLE, TravelScrollType.HUB_MUSEUM, TravelScrollType.HUB_CRYPTS)), + GOLD_MINE("gold", "§aGold Mine §7- §aSpawn", + "d8573ed917444316b0b28dd9927fd68e56f6625fcfa73ad80b8770d5139891b1", + (unused) -> "Your first stop for extended mining related activities and home to SkyBlock's local janitor Rusty", ServerType.SKYBLOCK_GOLD_MINE), + DEEP_CAVERNS("deep", "§bDeep Caverns §7- §aSpawn", + "74213dc6dc4b1641defd333f4a4732cc714dd677718fa10f140a6939c12aa32b", + (unused) -> "An island that gets progressively deeper and contains 6 layers of dangerous mobs and new resources.", ServerType.SKYBLOCK_DEEP_CAVERNS), + ; - private final String internalName; - private final String descriptiveName; - private final String texture; - private final Function description; - private final ServerType serverType; - private final List associatedScrolls = new ArrayList<>(); + private final String internalName; + private final String descriptiveName; + private final String texture; + private final Function description; + private final ServerType serverType; + private final List associatedScrolls = new ArrayList<>(); - private final SkillCategories associatedSkill; - private final Integer islandTier; + private final SkillCategories associatedSkill; + private final Integer islandTier; - TravelScrollIslands(String internalName, String descriptiveName, String texture, Function description, ServerType serverType, SkillCategories associatedSkill, Integer islandTier) { - this.internalName = internalName; - this.descriptiveName = descriptiveName; - this.texture = texture; - this.description = description; - this.serverType = serverType; - this.associatedSkill = associatedSkill; - this.islandTier = islandTier; - } + TravelScrollIslands(String internalName, String descriptiveName, String texture, Function description, ServerType serverType, SkillCategories associatedSkill, Integer islandTier) { + this.internalName = internalName; + this.descriptiveName = descriptiveName; + this.texture = texture; + this.description = description; + this.serverType = serverType; + this.associatedSkill = associatedSkill; + this.islandTier = islandTier; + } - TravelScrollIslands(String internalName, String descriptiveName, String texture, Function description, ServerType serverType) { - this.internalName = internalName; - this.descriptiveName = descriptiveName; - this.texture = texture; - this.description = description; - this.serverType = serverType; - this.associatedSkill = null; - this.islandTier = null; - } + TravelScrollIslands(String internalName, String descriptiveName, String texture, Function description, ServerType serverType) { + this.internalName = internalName; + this.descriptiveName = descriptiveName; + this.texture = texture; + this.description = description; + this.serverType = serverType; + this.associatedSkill = null; + this.islandTier = null; + } - TravelScrollIslands(String internalName, String descriptiveName, String texture, Function description, ServerType serverType, List associatedScrolls) { - this.internalName = internalName; - this.description = description; - this.serverType = serverType; - this.texture = texture; - this.descriptiveName = descriptiveName; - this.associatedScrolls.addAll(associatedScrolls); - this.associatedSkill = null; - this.islandTier = null; - } + TravelScrollIslands(String internalName, String descriptiveName, String texture, Function description, ServerType serverType, List associatedScrolls) { + this.internalName = internalName; + this.description = description; + this.serverType = serverType; + this.texture = texture; + this.descriptiveName = descriptiveName; + this.associatedScrolls.addAll(associatedScrolls); + this.associatedSkill = null; + this.islandTier = null; + } - public void sendPlayer(SkyBlockPlayer player) { + public static @Nullable TravelScrollIslands getFromType(ServerType type) { + for (TravelScrollIslands island : values()) { + if (island.getServerType().equals(type)) { + return island; + } + } + return null; + } - } + public static @Nullable TravelScrollIslands getFromInternalName(String internalName) { + for (TravelScrollIslands island : values()) { + if (island.getInternalName().equalsIgnoreCase(internalName)) { + return island; + } + } + return null; + } - public static @Nullable TravelScrollIslands getFromType(ServerType type) { - for (TravelScrollIslands island : values()) { - if (island.getServerType().equals(type)) { - return island; - } - } - return null; - } + public static @Nullable TravelScrollIslands getFromTravelScroll(TravelScrollType type) { + for (TravelScrollIslands island : values()) { + if (island.getAssociatedScrolls().contains(type)) { + return island; + } + } + return null; + } - public static @Nullable TravelScrollIslands getFromInternalName(String internalName) { - for (TravelScrollIslands island : values()) { - if (island.getInternalName().equalsIgnoreCase(internalName)) { - return island; - } - } - return null; - } + public void sendPlayer(SkyBlockPlayer player) { - public static @Nullable TravelScrollIslands getFromTravelScroll(TravelScrollType type) { - for (TravelScrollIslands island : values()) { - if (island.getAssociatedScrolls().contains(type)) { - return island; - } - } - return null; - } + } } 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 f776e635a..efb0cee0c 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 @@ -31,6 +31,9 @@ public class BalanceConfigurations { ServerType.SKYBLOCK_DEEP_CAVERNS, List.of( new LowestPlayerCount() ), + ServerType.SKYBLOCK_DWARVEN_MINES, List.of( + new LowestPlayerCount() + ), ServerType.SKYBLOCK_ISLAND, List.of( new IslandCheck(), new LowestPlayerCount() From f189523005c7fcdc8b7c9103f81eb41be6df6ff1 Mon Sep 17 00:00:00 2001 From: Aunn Date: Sun, 14 Dec 2025 18:11:29 -0800 Subject: [PATCH 008/102] Implement Lift Operator Mission --- .../deepcaverns/npcs/NPCLiftOperator.java | 72 ++++++++++++++++++- .../missions/MissionTalkToLiftOperator.java | 43 +++++++++++ 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/mission/missions/MissionTalkToLiftOperator.java diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java index ff3aa3827..668c34338 100644 --- a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java @@ -1,13 +1,60 @@ package net.swofty.type.deepcaverns.npcs; +import net.minestom.server.MinecraftServer; import net.minestom.server.coordinate.Pos; +import net.minestom.server.timer.Scheduler; +import net.minestom.server.timer.TaskSchedule; import net.swofty.type.deepcaverns.gui.GUILiftOperator; import net.swofty.type.generic.entity.npc.HypixelNPC; import net.swofty.type.generic.entity.npc.NPCParameters; import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.skyblockgeneric.mission.MissionData; +import net.swofty.type.skyblockgeneric.mission.missions.MissionTalkToLiftOperator; import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; -public class NPCLiftOperator extends HypixelNPC { +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +public class NPCLiftOperator extends HypixelNPC { // TODO: Honestly rewrite this entire class it sucks + + private final Map>> dialogueSets = new HashMap<>(); + + private boolean isInDialogue(HypixelPlayer player) { + return dialogueSets.containsKey(player); + } + + private CompletableFuture setDialogue(HypixelPlayer player, DialogueSet set) { + CompletableFuture future = new CompletableFuture<>(); + dialogueSets.put(player, Map.entry(set, future)); + handleLineSendingLoop(player, set); + return future; + } + + private void handleLineSendingLoop(HypixelPlayer player, DialogueSet dialogueSet) { + player.sendMessage(dialogueSet.lines[0]); + + if (dialogueSet.lines.length == 1) { + Map.Entry> entry = dialogueSets.remove(player); + if (entry != null) { + entry.getValue().complete(dialogueSet.key); + } + return; + } + + String[] remaining = new String[dialogueSet.lines.length - 1]; + System.arraycopy(dialogueSet.lines, 1, remaining, 0, remaining.length); + + Scheduler scheduler = MinecraftServer.getSchedulerManager(); + scheduler.buildTask(() -> { + handleLineSendingLoop( + player, + new DialogueSet(dialogueSet.key, remaining) + ); + }).delay(TaskSchedule.seconds(2)).schedule(); + } + + private record DialogueSet(String key, String[] lines) {} public NPCLiftOperator() { super(new NPCParameters() { @@ -68,6 +115,29 @@ public boolean looking() { @Override public void onClick(PlayerClickNPCEvent event) { SkyBlockPlayer player = (SkyBlockPlayer) event.player(); + MissionData data = player.getMissionData(); + + if (isInDialogue(player)) return; + + if (!data.hasCompleted(MissionTalkToLiftOperator.class)) { + if (!data.isCurrentlyActive(MissionTalkToLiftOperator.class)) { + data.startMission(MissionTalkToLiftOperator.class); + } + + setDialogue(player, new DialogueSet( + "intro", + new String[]{ + "§e[NPC] Lift Operator§f: Hey Feller!", + "§e[NPC] Lift Operator§f: I control this lift here behind me.", + "§e[NPC] Lift Operator§f: Once you've explored an area I can give you a safe ride back there.", + "§e[NPC] Lift Operator§f: Be careful not to fall down the shaft though, it's a long fall!", + "§e[NPC] Lift Operator§f: Good luck on your adventures." + } + )).thenRun(() -> data.endMission(MissionTalkToLiftOperator.class)); + + return; + } + new GUILiftOperator().open(player); } } \ No newline at end of file diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/mission/missions/MissionTalkToLiftOperator.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/mission/missions/MissionTalkToLiftOperator.java new file mode 100644 index 000000000..efb9b7435 --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/mission/missions/MissionTalkToLiftOperator.java @@ -0,0 +1,43 @@ +package net.swofty.type.skyblockgeneric.mission.missions; + +import net.swofty.type.skyblockgeneric.mission.MissionData; +import net.swofty.type.skyblockgeneric.mission.SkyBlockProgressMission; +import net.swofty.type.skyblockgeneric.region.RegionType; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class MissionTalkToLiftOperator extends SkyBlockProgressMission { + + @Override + public String getID() { + return "mission_talk_to_lift_operator"; + } + + @Override + public String getName() { + return "Talk to Lift Operator"; + } + + @Override + public Map onStart(SkyBlockPlayer player, MissionData.ActiveMission mission) { + return new HashMap<>(); + } + + @Override + public void onEnd(SkyBlockPlayer player, Map customData, MissionData.ActiveMission mission) { + + } + + @Override + public Set getValidRegions() { + return Set.of(RegionType.DEEP_CAVERNS); + } + + @Override + public int getMaxProgress() { + return 1; + } +} \ No newline at end of file From 96e0251af03bd6993bd40e0e8d11246660e1aa06 Mon Sep 17 00:00:00 2001 From: Aunn Date: Sun, 14 Dec 2025 18:23:07 -0800 Subject: [PATCH 009/102] Add NewZone text --- .../event/actions/custom/ActionNewZoneDisplay.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/custom/ActionNewZoneDisplay.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/custom/ActionNewZoneDisplay.java index f7954b5b0..f4c1856ff 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/custom/ActionNewZoneDisplay.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/custom/ActionNewZoneDisplay.java @@ -55,9 +55,20 @@ public void run(PlayerRegionChangeEvent event) { "Store your coins to keep them safe.", "Earn interest on your coins."); + case DEEP_CAVERNS -> onNewZone(player, RegionType.DEEP_CAVERNS, + "Talk to the Lift Operator", + "Mine valuable ores.", + "Watch out for mobs!"); + + case DWARVEN_MINES -> onNewZone(player, RegionType.DWARVEN_MINES, + "Mine rare ores."); + case GOLD_MINE -> onNewZone(player, RegionType.GOLD_MINE, "Talk to the Lazy Miner.", - "Find the hidden gold mine."); + "Mine for gold, iron, and coal.", + "Visit the Iron and Gold Forgers.", + "Visit the Blacksmith.", + "Talk to Rusty."); case COAL_MINE -> onNewZone(player, RegionType.COAL_MINE, "Mine coal.", From ac3da2438333ad62e017d9eda6b3258285c64e5d Mon Sep 17 00:00:00 2001 From: Aunn Date: Sun, 14 Dec 2025 18:58:08 -0800 Subject: [PATCH 010/102] Implement Configurations Note: All of this functions in theory, but due to region coordinates being wrong, it doesn't work. --- configuration/skyblock/Minestom.regions.csv | 2 +- .../actions/custom/ActionNewZoneDisplay.java | 33 +++++++++++++ .../skyblockgeneric/region/RegionType.java | 13 ++--- .../DiamondReserveConfiguration.java | 46 ++++++++++++++++++ .../GunpowderMinesConfiguration.java | 48 +++++++++++++++++++ .../deepmines/LapisQuarryConfiguration.java | 46 ++++++++++++++++++ .../ObsidianSanctuaryConfiguration.java | 48 +++++++++++++++++++ .../deepmines/PigmensDenConfiguration.java | 46 ++++++++++++++++++ .../deepmines/SlimehillConfiguration.java | 46 ++++++++++++++++++ 9 files changed, 321 insertions(+), 7 deletions(-) create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/DiamondReserveConfiguration.java create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/GunpowderMinesConfiguration.java create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/LapisQuarryConfiguration.java create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/ObsidianSanctuaryConfiguration.java create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/PigmensDenConfiguration.java create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/SlimehillConfiguration.java diff --git a/configuration/skyblock/Minestom.regions.csv b/configuration/skyblock/Minestom.regions.csv index 6c86cd350..7bde373d1 100644 --- a/configuration/skyblock/Minestom.regions.csv +++ b/configuration/skyblock/Minestom.regions.csv @@ -54,7 +54,7 @@ coalmine_4,COAL_MINE,-4,71,-230,-41,64,-161,HUB coalmine_5,COAL_MINE,-15,75,-152,4,64,-167,HUB coalmine_6,COAL_MINE,4,64,-165,-20,73,-182,HUB coalmine_7,COAL_MINE,-7,69,-178,3,63,-165,HUB -#goldmine_1,GOLD_MINE,52,136,-261,-106,14,-404, +goldmine_1,GOLD_MINE,52,136,-261,-106,14,-404,GOLD_MINE deepcavern_1,DEEP_CAVERNS,181,235,-945,384,0,-1129,DEEP_CAVERNS gunpowder,GUNPOWDER_MINES,408,160,-1015,211,143,-1119,DEEP_CAVERNS lapis_quarry,LAPIS_QUARRY,211,143,-1119,400,114,-980,DEEP_CAVERNS diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/custom/ActionNewZoneDisplay.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/custom/ActionNewZoneDisplay.java index f4c1856ff..6495226b5 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/custom/ActionNewZoneDisplay.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/event/actions/custom/ActionNewZoneDisplay.java @@ -63,6 +63,39 @@ public void run(PlayerRegionChangeEvent event) { case DWARVEN_MINES -> onNewZone(player, RegionType.DWARVEN_MINES, "Mine rare ores."); + case GUNPOWDER_MINES -> onNewZone(player, RegionType.GUNPOWDER_MINES, + "Talk to the Lift Operator.", + "Explore the caverns.", + "Mine Coal, Iron ore, and Gold ore."); + + case LAPIS_QUARRY -> onNewZone(player, RegionType.LAPIS_QUARRY, + "The Lift Operator will now let you travel to the §bLapis Quarry.", + "Access to Lapis Lazuli ore.", + "Talk to the Lapis Miner.", + "Watch out for the zombies!"); + + case PIGMENS_DEN -> onNewZone(player, RegionType.PIGMENS_DEN, + "The Lift Operator will now let you travel to the §bLapis Quarry.", + "Access to Lapis Lazuli ore.", + "Talk to the Lapis Miner.", + "Watch out for the zombies!"); + + case SLIMEHILL -> onNewZone(player, RegionType.SLIMEHILL, + "The Lift Operator will now let you travel to the §bSlimehill.", + "Mine Emerald ore.", + "This area is covered with slimes!"); + + case DIAMOND_RESERVE -> onNewZone(player, RegionType.DIAMOND_RESERVE, + "The Lift Operator will now let you travel to the §bDiamond Reserve.", + "Mine Diamond ore.", + "Beware of deadly monsters!"); + + case OBSIDIAN_SANCTUARY -> onNewZone(player, RegionType.OBSIDIAN_SANCTUARY, + "The Lift Operator will now let you travel to the §bObsidian Sanctuary.", + "Mine Obsidian and Diamond.", + "Beware of deadly monsters!", + "Talk to §dRhys."); + case GOLD_MINE -> onNewZone(player, RegionType.GOLD_MINE, "Talk to the Lazy Miner.", "Mine for gold, iron, and coal.", diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java index 9ae960f4f..7d0cdb9e1 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/RegionType.java @@ -4,6 +4,7 @@ import lombok.SneakyThrows; import net.swofty.commons.Songs; import net.swofty.type.skyblockgeneric.region.mining.configurations.*; +import net.swofty.type.skyblockgeneric.region.mining.configurations.deepmines.*; import java.util.ArrayList; import java.util.List; @@ -64,12 +65,12 @@ public enum RegionType { GOLD_MINE("Gold Mine", "§6", GoldMineConfiguration.class), DEEP_CAVERNS("Deep Caverns", "§b"), - GUNPOWDER_MINES("Gunpowder Mines"), - LAPIS_QUARRY("Lapis Quarry"), - PIGMENS_DEN("Pigmen's Den"), - SLIMEHILL("Slimehill"), - DIAMOND_RESERVE("Diamond Reserve"), - OBSIDIAN_SANCTUARY("Obsidian Sanctuary"), + GUNPOWDER_MINES("Gunpowder Mines", GunpowderMinesConfiguration.class), + LAPIS_QUARRY("Lapis Quarry", LapisQuarryConfiguration.class), + PIGMENS_DEN("Pigmen's Den", PigmensDenConfiguration.class), + SLIMEHILL("Slimehill", SlimehillConfiguration.class), + DIAMOND_RESERVE("Diamond Reserve", DiamondReserveConfiguration.class), + OBSIDIAN_SANCTUARY("Obsidian Sanctuary", ObsidianSanctuaryConfiguration.class), DWARVEN_VILLAGE("Dwarven Village"), DWARVEN_MINES("Dwarven Mines", "§2"), diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/DiamondReserveConfiguration.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/DiamondReserveConfiguration.java new file mode 100644 index 000000000..7f18a3776 --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/DiamondReserveConfiguration.java @@ -0,0 +1,46 @@ +package net.swofty.type.skyblockgeneric.region.mining.configurations.deepmines; + +import net.minestom.server.coordinate.Point; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.instance.Instance; +import net.minestom.server.instance.block.Block; +import net.minestom.server.item.Material; +import net.swofty.type.skyblockgeneric.region.SkyBlockMiningConfiguration; + +import java.util.List; + +public class DiamondReserveConfiguration extends SkyBlockMiningConfiguration { + + @Override + public MiningTask handleStageOne(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.COBBLESTONE); + + Block regenerationBlock; + + regenerationBlock = getRandomBlock( + new RegenerationConfig(30, Block.DIAMOND_ORE), + new RegenerationConfig(70, Block.STONE)); + + task.setReviveBlock(regenerationBlock); + + return task; + } + + @Override + public MiningTask handleStageTwo(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.BEDROCK); + task.setReviveBlock(Block.COBBLESTONE); + + return task; + } + + @Override + public List getMineableBlocks(Instance instance, Point point) { + return List.of(Material.DIAMOND_ORE, Material.COBBLESTONE, Material.STONE); + } + + @Override + public long getRegenerationTime() { + return 3000; + } +} diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/GunpowderMinesConfiguration.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/GunpowderMinesConfiguration.java new file mode 100644 index 000000000..751cf2fdd --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/GunpowderMinesConfiguration.java @@ -0,0 +1,48 @@ +package net.swofty.type.skyblockgeneric.region.mining.configurations.deepmines; + +import net.minestom.server.coordinate.Point; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.instance.Instance; +import net.minestom.server.instance.block.Block; +import net.minestom.server.item.Material; +import net.swofty.type.skyblockgeneric.region.SkyBlockMiningConfiguration; + +import java.util.List; + +public class GunpowderMinesConfiguration extends SkyBlockMiningConfiguration { + + @Override + public MiningTask handleStageOne(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.COBBLESTONE); + + Block regenerationBlock; + + regenerationBlock = getRandomBlock( + new RegenerationConfig(10, Block.COAL_ORE), + new RegenerationConfig(10, Block.IRON_ORE), + new RegenerationConfig(10, Block.GOLD_ORE), + new RegenerationConfig(70, Block.STONE)); + + task.setReviveBlock(regenerationBlock); + + return task; + } + + @Override + public MiningTask handleStageTwo(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.BEDROCK); + task.setReviveBlock(Block.COBBLESTONE); + + return task; + } + + @Override + public List getMineableBlocks(Instance instance, Point point) { + return List.of(Material.COAL_ORE, Material.COBBLESTONE, Material.STONE, Material.IRON_ORE, Material.GOLD_ORE); + } + + @Override + public long getRegenerationTime() { + return 3000; + } +} diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/LapisQuarryConfiguration.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/LapisQuarryConfiguration.java new file mode 100644 index 000000000..b0bfb6617 --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/LapisQuarryConfiguration.java @@ -0,0 +1,46 @@ +package net.swofty.type.skyblockgeneric.region.mining.configurations.deepmines; + +import net.minestom.server.coordinate.Point; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.instance.Instance; +import net.minestom.server.instance.block.Block; +import net.minestom.server.item.Material; +import net.swofty.type.skyblockgeneric.region.SkyBlockMiningConfiguration; + +import java.util.List; + +public class LapisQuarryConfiguration extends SkyBlockMiningConfiguration { + + @Override + public MiningTask handleStageOne(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.COBBLESTONE); + + Block regenerationBlock; + + regenerationBlock = getRandomBlock( + new RegenerationConfig(30, Block.LAPIS_ORE), + new RegenerationConfig(70, Block.STONE)); + + task.setReviveBlock(regenerationBlock); + + return task; + } + + @Override + public MiningTask handleStageTwo(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.BEDROCK); + task.setReviveBlock(Block.COBBLESTONE); + + return task; + } + + @Override + public List getMineableBlocks(Instance instance, Point point) { + return List.of(Material.LAPIS_LAZULI, Material.COBBLESTONE, Material.STONE); + } + + @Override + public long getRegenerationTime() { + return 3000; + } +} diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/ObsidianSanctuaryConfiguration.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/ObsidianSanctuaryConfiguration.java new file mode 100644 index 000000000..24bc8e051 --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/ObsidianSanctuaryConfiguration.java @@ -0,0 +1,48 @@ +package net.swofty.type.skyblockgeneric.region.mining.configurations.deepmines; + +import net.minestom.server.coordinate.Point; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.instance.Instance; +import net.minestom.server.instance.block.Block; +import net.minestom.server.item.Material; +import net.swofty.type.skyblockgeneric.region.SkyBlockMiningConfiguration; + +import java.util.List; + +public class ObsidianSanctuaryConfiguration extends SkyBlockMiningConfiguration { + + @Override + public MiningTask handleStageOne(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.COBBLESTONE); + + Block regenerationBlock; + + regenerationBlock = getRandomBlock( + new RegenerationConfig(10, Block.DIAMOND_ORE), + new RegenerationConfig(10, Block.DIAMOND_BLOCK), + new RegenerationConfig(10, Block.OBSIDIAN), + new RegenerationConfig(70, Block.STONE)); + + task.setReviveBlock(regenerationBlock); + + return task; + } + + @Override + public MiningTask handleStageTwo(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.BEDROCK); + task.setReviveBlock(Block.COBBLESTONE); + + return task; + } + + @Override + public List getMineableBlocks(Instance instance, Point point) { + return List.of(Material.DIAMOND_ORE, Material.COBBLESTONE, Material.STONE, Material.DIAMOND_BLOCK, Material.OBSIDIAN); + } + + @Override + public long getRegenerationTime() { + return 3000; + } +} diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/PigmensDenConfiguration.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/PigmensDenConfiguration.java new file mode 100644 index 000000000..eecdbe39b --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/PigmensDenConfiguration.java @@ -0,0 +1,46 @@ +package net.swofty.type.skyblockgeneric.region.mining.configurations.deepmines; + +import net.minestom.server.coordinate.Point; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.instance.Instance; +import net.minestom.server.instance.block.Block; +import net.minestom.server.item.Material; +import net.swofty.type.skyblockgeneric.region.SkyBlockMiningConfiguration; + +import java.util.List; + +public class PigmensDenConfiguration extends SkyBlockMiningConfiguration { + + @Override + public MiningTask handleStageOne(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.COBBLESTONE); + + Block regenerationBlock; + + regenerationBlock = getRandomBlock( + new RegenerationConfig(30, Block.REDSTONE_ORE), + new RegenerationConfig(70, Block.STONE)); + + task.setReviveBlock(regenerationBlock); + + return task; + } + + @Override + public MiningTask handleStageTwo(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.BEDROCK); + task.setReviveBlock(Block.COBBLESTONE); + + return task; + } + + @Override + public List getMineableBlocks(Instance instance, Point point) { + return List.of(Material.REDSTONE_ORE, Material.COBBLESTONE, Material.STONE); + } + + @Override + public long getRegenerationTime() { + return 3000; + } +} diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/SlimehillConfiguration.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/SlimehillConfiguration.java new file mode 100644 index 000000000..5f1aff424 --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/region/mining/configurations/deepmines/SlimehillConfiguration.java @@ -0,0 +1,46 @@ +package net.swofty.type.skyblockgeneric.region.mining.configurations.deepmines; + +import net.minestom.server.coordinate.Point; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.instance.Instance; +import net.minestom.server.instance.block.Block; +import net.minestom.server.item.Material; +import net.swofty.type.skyblockgeneric.region.SkyBlockMiningConfiguration; + +import java.util.List; + +public class SlimehillConfiguration extends SkyBlockMiningConfiguration { + + @Override + public MiningTask handleStageOne(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.COBBLESTONE); + + Block regenerationBlock; + + regenerationBlock = getRandomBlock( + new RegenerationConfig(30, Block.EMERALD_ORE), + new RegenerationConfig(70, Block.STONE)); + + task.setReviveBlock(regenerationBlock); + + return task; + } + + @Override + public MiningTask handleStageTwo(MiningTask task, Pos brokenBlock) { + task.setIntermediaryBlock(Block.BEDROCK); + task.setReviveBlock(Block.COBBLESTONE); + + return task; + } + + @Override + public List getMineableBlocks(Instance instance, Point point) { + return List.of(Material.EMERALD_ORE, Material.COBBLESTONE, Material.STONE); + } + + @Override + public long getRegenerationTime() { + return 3000; + } +} From 4a5a1df7307833ed6d743ee97a5a9b97a4702ab2 Mon Sep 17 00:00:00 2001 From: Aunn Date: Sun, 14 Dec 2025 19:04:44 -0800 Subject: [PATCH 011/102] conflict fix attempt --- .../player/ActionPlayerLaunchPads.java | 127 +++++++++------ .../skyblockgeneric/utility/LaunchPads.java | 144 +++++++++++------- 2 files changed, 170 insertions(+), 101 deletions(-) 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 449a084a6..c995aa04a 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 @@ -1,37 +1,29 @@ package net.swofty.type.skyblockgeneric.event.actions.player; import net.kyori.adventure.key.Key; +import net.swofty.commons.StringUtility; import org.tinylog.Logger; import net.kyori.adventure.sound.Sound; -import org.tinylog.Logger; import net.minestom.server.coordinate.Pos; -import org.tinylog.Logger; import net.minestom.server.coordinate.Vec; -import org.tinylog.Logger; import net.minestom.server.entity.EntityType; -import org.tinylog.Logger; import net.minestom.server.entity.LivingEntity; -import org.tinylog.Logger; import net.minestom.server.event.player.PlayerMoveEvent; -import org.tinylog.Logger; import net.minestom.server.network.packet.server.play.ParticlePacket; -import org.tinylog.Logger; import net.minestom.server.particle.Particle; -import org.tinylog.Logger; +import net.swofty.commons.ServerType; +import net.swofty.proxyapi.ProxyInformation; import net.swofty.type.generic.event.EventNodes; -import org.tinylog.Logger; import net.swofty.type.generic.event.HypixelEvent; -import org.tinylog.Logger; import net.swofty.type.generic.event.HypixelEventClass; -import org.tinylog.Logger; import net.swofty.type.generic.utility.MathUtility; -import org.tinylog.Logger; import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; -import org.tinylog.Logger; import net.swofty.type.skyblockgeneric.utility.LaunchPads; -import org.tinylog.Logger; import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; @@ -41,6 +33,7 @@ public class ActionPlayerLaunchPads implements HypixelEventClass { private static final int SEGMENTS = 30; private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private static final Set notifiedPlayers = ConcurrentHashMap.newKeySet(); @HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = true, isAsync = true) @@ -53,7 +46,12 @@ public void run(PlayerMoveEvent event) { } catch (ExceptionInInitializerError err) { return; } - if (pad == null) return; + + if (pad == null) { + notifiedPlayers.remove(player.getUuid()); + return; + } + if (player.isInLaunchpad()) return; player.setInLaunchpad(true); @@ -84,37 +82,78 @@ public void run(PlayerMoveEvent event) { player.setInLaunchpad(false); return; } - player.playSound(Sound.sound(Key.key("entity.firework_rocket.launch"), Sound.Source.PLAYER, 1, 1)); - - LivingEntity armorStand = new LivingEntity(EntityType.ARMOR_STAND); - armorStand.getEntityMeta().setInvisible(true); - armorStand.getEntityMeta().setHasNoGravity(true); - armorStand.setInstance(player.getInstance(), player.getPosition()); - armorStand.addPassenger(player); - - List curve = MathUtility.bezierCurve(player.getPosition(), pad.getDestination(), SEGMENTS); - long timeToSleep = 3000 / SEGMENTS; - - // Use ScheduledExecutorService to run the launch trajectory with delays - AtomicInteger index = new AtomicInteger(0); - ScheduledFuture[] taskHolder = new ScheduledFuture[1]; - taskHolder[0] = scheduler.scheduleAtFixedRate(() -> { - int currentIndex = index.getAndIncrement(); - if (currentIndex >= curve.size()) { - // Cancel the task - if (taskHolder[0] != null) { - taskHolder[0].cancel(false); + + // Check server availability before starting animation + ServerType targetServerType = pad.getTargetServerType(); + ProxyInformation proxyInfo = new ProxyInformation(); + proxyInfo.getServerInformation(targetServerType).thenAccept(servers -> { + if (servers == null || servers.isEmpty()) { + player.setInLaunchpad(false); + if (!notifiedPlayers.contains(player.getUuid())) { + notifiedPlayers.add(player.getUuid()); + player.sendMessage("§cThere are no " + StringUtility.toNormalCase(targetServerType.name()) + " servers available at the moment. Please try again later."); } - // Execute the after finished callback - player.sendMessage("Done"); - pad.getAfterFinished().accept(player); return; } - Pos pos = curve.get(currentIndex); - Vec toGoTo = pos.asVec(); - Vec direction = toGoTo.sub(player.getPosition().asVec()).normalize(); - armorStand.setVelocity(direction.mul(50, 5, 50)); - }, 0, timeToSleep, TimeUnit.MILLISECONDS); + notifiedPlayers.remove(player.getUuid()); + + Pos originalPosition = player.getPosition(); + player.playSound(Sound.sound(Key.key("entity.firework_rocket.launch"), Sound.Source.PLAYER, 1, 1)); + + LivingEntity armorStand = new LivingEntity(EntityType.ARMOR_STAND); + armorStand.getEntityMeta().setInvisible(true); + armorStand.getEntityMeta().setHasNoGravity(true); + armorStand.setInstance(player.getInstance(), player.getPosition()); + armorStand.addPassenger(player); + + List curve = MathUtility.bezierCurve(player.getPosition(), pad.getDestination(), SEGMENTS); + long timeToSleep = 3000 / SEGMENTS; + + // Use ScheduledExecutorService to run the launch trajectory with delays + AtomicInteger index = new AtomicInteger(0); + ScheduledFuture[] taskHolder = new ScheduledFuture[1]; + taskHolder[0] = scheduler.scheduleAtFixedRate(() -> { + int currentIndex = index.getAndIncrement(); + if (currentIndex >= curve.size()) { + // Cancel the task + if (taskHolder[0] != null) { + taskHolder[0].cancel(false); + } + + player.setInLaunchpad(false); + 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); + + return; + } + + Pos pos = curve.get(currentIndex); + Vec toGoTo = pos.asVec(); + Vec direction = toGoTo.sub(player.getPosition().asVec()).normalize(); + armorStand.setVelocity(direction.mul(50, 5, 50)); + }, 0, timeToSleep, TimeUnit.MILLISECONDS); + }).exceptionally(ex -> { + Logger.error(ex, "Error checking server availability for launch pad"); + player.setInLaunchpad(false); + player.sendMessage("§cAn error occurred while checking server availability. Please try again later."); + return null; + }); } -} +} \ No newline at end of file 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 9af864b31..4090343ee 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 @@ -24,10 +24,13 @@ @Getter public enum LaunchPads { - VILLAGE_TO_FARMING(getSlimeBlocksNear(new Pos(79, 71, -185)), ServerType.SKYBLOCK_HUB, - new Pos(116.5, 74, -210.5), (player) -> { - player.sendTo(ServerType.SKYBLOCK_THE_FARMING_ISLANDS); - }, (player) -> player.getSkills().getCurrentLevel(SkillCategories.FARMING) >= 5, + VILLAGE_TO_FARMING( + getSlimeBlocksNear(new Pos(79, 71, -185)), + ServerType.SKYBLOCK_HUB, + ServerType.SKYBLOCK_THE_FARMING_ISLANDS, + new Pos(116.5, 74, -210.5), + (player) -> player.sendTo(ServerType.SKYBLOCK_THE_FARMING_ISLANDS), + (player) -> player.getSkills().getCurrentLevel(SkillCategories.FARMING) >= 5, "§cYou must be at least Farming Level V to join this island!", (player) -> { boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.FARMING) >= 5; @@ -44,23 +47,31 @@ public enum LaunchPads { .text(new String[]{"§bTravel To:", "§aThe Farming Islands"}) .build(); } - }), - FARMING_TO_VILLAGE(getSlimeBlocksNear(new Pos(111, 71, -202)), ServerType.SKYBLOCK_THE_FARMING_ISLANDS, - new Pos(74, 72, -180), (player) -> { - player.sendTo(ServerType.SKYBLOCK_HUB); - }, (player) -> true, + } + ), + + FARMING_TO_VILLAGE( + getSlimeBlocksNear(new Pos(111, 71, -202)), + ServerType.SKYBLOCK_THE_FARMING_ISLANDS, + ServerType.SKYBLOCK_HUB, + new Pos(74, 72, -180), + (player) -> player.sendTo(ServerType.SKYBLOCK_HUB), + (player) -> true, "", - (player) -> { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(111.5, 71.7, -202.5)) - .player(player) - .text(new String[]{"§bTravel To:", "§aThe Village"}) - .build(); - }), - VILLAGE_TO_GOLD_MINE(getSlimeBlocksNear(new Pos(-9, 63, -231)), ServerType.SKYBLOCK_HUB, // TODO: UPDATE TO PROPER POSITIONS AND INFO - new Pos(-5, 74, -268), (player) -> { - player.sendTo(ServerType.SKYBLOCK_GOLD_MINE); - }, (player) -> player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1, + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(111.5, 71.7, -202.5)) + .player(player) + .text(new String[]{"§bTravel To:", "§aThe Village"}) + .build() + ), + + VILLAGE_TO_GOLD_MINE( + getSlimeBlocksNear(new Pos(-9, 63, -231)), + ServerType.SKYBLOCK_HUB, // TODO: UPDATE TO PROPER POSITIONS AND INFO + ServerType.SKYBLOCK_GOLD_MINE, + new Pos(-5, 74, -268), + (player) -> player.sendTo(ServerType.SKYBLOCK_GOLD_MINE), + (player) -> player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1, "§cYou must be at least Mining Level I to join this island!", (player) -> { boolean hasRequirement = player.getSkills().getCurrentLevel(SkillCategories.MINING) >= 1; @@ -77,59 +88,78 @@ public enum LaunchPads { .text(new String[]{"§bTravel To:", "§aGold Mine"}) .build(); } - }), - GOLD_MINE_TO_VILLAGE(getSlimeBlocksNear(new Pos(-4, 74, -272)), ServerType.SKYBLOCK_GOLD_MINE, - new Pos(-8, 70, -238), (player) -> { - player.sendTo(ServerType.SKYBLOCK_HUB); - }, (player) -> true, + } + ), + + GOLD_MINE_TO_VILLAGE( + getSlimeBlocksNear(new Pos(-4, 74, -272)), + ServerType.SKYBLOCK_GOLD_MINE, + ServerType.SKYBLOCK_HUB, + new Pos(-8, 70, -238), + (player) -> player.sendTo(ServerType.SKYBLOCK_HUB), + (player) -> true, "", - (player) -> { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-5, 73.3, -269)) - .player(player) - .text(new String[]{"§bTravel To:", "§aThe Village"}) - .build(); - }), - GOLD_MINE_TO_DEEP_CAVERNS(getSlimeBlocksNear(new Pos(-7, 67, -396)), ServerType.SKYBLOCK_GOLD_MINE, - new Pos(-4, 119, -491.5), (player) -> { - player.sendTo(ServerType.SKYBLOCK_DEEP_CAVERNS); - }, (player) -> true, + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-5, 73.3, -269)) + .player(player) + .text(new String[]{"§bTravel To:", "§aThe Village"}) + .build() + ), + + GOLD_MINE_TO_DEEP_CAVERNS( + getSlimeBlocksNear(new Pos(-7, 67, -396)), + ServerType.SKYBLOCK_GOLD_MINE, + ServerType.SKYBLOCK_DEEP_CAVERNS, + new Pos(-4, 119, -491.5), + (player) -> player.sendTo(ServerType.SKYBLOCK_DEEP_CAVERNS), + (player) -> true, "", - (player) -> { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(-7, 69, -396)) - .player(player) - .text(new String[]{"§bTravel To:", "§aDeep Caverns"}) - .build(); - }), - DEEP_CAVERNS_TO_GOLD_MINE(getSlimeBlocksNear(new Pos(3, 157, 85)), ServerType.SKYBLOCK_DEEP_CAVERNS, - new Pos(2, 150, 136), (player) -> { - player.sendTo(ServerType.SKYBLOCK_GOLD_MINE); - }, (player) -> true, + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(-7, 69, -396)) + .player(player) + .text(new String[]{"§bTravel To:", "§aDeep Caverns"}) + .build() + ), + + DEEP_CAVERNS_TO_GOLD_MINE( + getSlimeBlocksNear(new Pos(3, 157, 85)), + ServerType.SKYBLOCK_DEEP_CAVERNS, + ServerType.SKYBLOCK_GOLD_MINE, + new Pos(2, 150, 136), + (player) -> player.sendTo(ServerType.SKYBLOCK_GOLD_MINE), + (player) -> true, "", - (player) -> { - return PlayerHolograms.ExternalPlayerHologram.builder() - .pos(new Pos(3, 159, 85)) - .player(player) - .text(new String[]{"§bTravel To:", "§aGold Mine"}) - .build(); - }); + (player) -> PlayerHolograms.ExternalPlayerHologram.builder() + .pos(new Pos(3, 159, 85)) + .player(player) + .text(new String[]{"§bTravel To:", "§aGold Mine"}) + .build() + ); private static final List launchPads = new ArrayList<>(); private final List slimeBlocks; private final ServerType serverType; + private final ServerType targetServerType; private final Pos destination; private final Consumer afterFinished; private final Function shouldAllow; private final String rejectionMessage; private final Function hologramDisplay; - LaunchPads(List slimeBlocks, ServerType serverType, Pos destination, - Consumer<@NonNull SkyBlockPlayer> afterFinished, Function shouldAllow, String rejectionMessage, - Function<@NonNull SkyBlockPlayer, PlayerHolograms.ExternalPlayerHologram> hologramDisplay) { + LaunchPads( + List slimeBlocks, + ServerType serverType, + ServerType targetServerType, + Pos destination, + Consumer<@NonNull SkyBlockPlayer> afterFinished, + Function shouldAllow, + String rejectionMessage, + Function<@NonNull SkyBlockPlayer, PlayerHolograms.ExternalPlayerHologram> hologramDisplay + ) { this.slimeBlocks = slimeBlocks; this.serverType = serverType; + this.targetServerType = targetServerType; this.destination = destination; this.afterFinished = afterFinished; this.shouldAllow = shouldAllow; From bd03c1ed320b9bcb55f4ead9bc86ec3d552f61db Mon Sep 17 00:00:00 2001 From: AriDev <75741608+ArikSquad@users.noreply.github.com> Date: Mon, 15 Dec 2025 19:07:19 +0200 Subject: [PATCH 012/102] feat: more random mining stuff --- .../net/swofty/commons/item/ItemType.java | 4 + configuration/skyblock/items/armor/lapis.yml | 81 ++++++++++ configuration/skyblock/items/weapons.yml | 2 + .../deepcaverns/npcs/NPCLiftOperator.java | 80 +++------- .../type/deepcaverns/npcs/NPCWalter.java | 36 ++--- .../type/generic/entity/npc/HypixelNPC.java | 4 + .../type/generic/entity/npc/NPCDialogue.java | 125 +++++++-------- .../entity/mob/mobs/hub/MobLapisZombie.java | 143 ++++++++++++++++++ .../handlers/ability/AbilityRegistry.java | 63 +++++--- .../item/set/ArmorSetRegistry.java | 125 +++++++-------- .../item/set/sets/LapisArmorSet.java | 34 +++++ 11 files changed, 473 insertions(+), 224 deletions(-) create mode 100644 configuration/skyblock/items/armor/lapis.yml create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/entity/mob/mobs/hub/MobLapisZombie.java create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/set/sets/LapisArmorSet.java diff --git a/commons/src/main/java/net/swofty/commons/item/ItemType.java b/commons/src/main/java/net/swofty/commons/item/ItemType.java index 017f84044..b348bf8ef 100644 --- a/commons/src/main/java/net/swofty/commons/item/ItemType.java +++ b/commons/src/main/java/net/swofty/commons/item/ItemType.java @@ -560,6 +560,10 @@ public enum ItemType { PUMPKIN_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.COMMON), PUMPKIN_LEGGINGS(Material.LEATHER_LEGGINGS, Rarity.COMMON), PUMPKIN_BOOTS(Material.LEATHER_BOOTS, Rarity.COMMON), + LAPIS_ARMOR_HELMET(Material.SEA_LANTERN, Rarity.UNCOMMON), + LAPIS_ARMOR_CHESTPLATE(Material.LEATHER_CHESTPLATE, Rarity.UNCOMMON), + LAPIS_ARMOR_LEGGINGS(Material.SEA_LANTERN, Rarity.UNCOMMON), + LAPIS_ARMOR_BOOTS(Material.LEATHER_BOOTS, Rarity.UNCOMMON), /** * Pickaxes diff --git a/configuration/skyblock/items/armor/lapis.yml b/configuration/skyblock/items/armor/lapis.yml new file mode 100644 index 000000000..ab0cb7e74 --- /dev/null +++ b/configuration/skyblock/items/armor/lapis.yml @@ -0,0 +1,81 @@ +items: + - id: LAPIS_HELMET + rarity: COMMON + default_statistics: + defense: 25 + mining_speed: 20 + mining_fortune: 2 + components: + - id: CUSTOM_DISPLAY_NAME + display_name: Lapis Armor Helmet + - id: STANDARD_ITEM + standard_item_type: HELMET + - id: LEATHER_COLOR + r: '122' + g: '121' + b: '100' + - id: SELLABLE + value: 1000.0 + - id: TRACKED_UNIQUE + - id: MUSEUM + museum_category: ARMOR_SETS + - id: LAPIS_CHESTPLATE + rarity: COMMON + default_statistics: + defense: 40 + mining_speed: 20 + mining_fortune: 2 + components: + - id: CUSTOM_DISPLAY_NAME + display_name: Lapis Armor Chestplate + - id: STANDARD_ITEM + standard_item_type: CHESTPLATE + - id: LEATHER_COLOR + r: '122' + g: '121' + b: '100' + - id: SELLABLE + value: 2000.0 + - id: TRACKED_UNIQUE + - id: MUSEUM + museum_category: ARMOR_SETS + - id: LAPIS_LEGGINGS + rarity: COMMON + default_statistics: + defense: 35 + mining_speed: 20 + mining_fortune: 2 + components: + - id: CUSTOM_DISPLAY_NAME + display_name: Lapis Armor Leggings + - id: STANDARD_ITEM + standard_item_type: LEGGINGS + - id: LEATHER_COLOR + r: '122' + g: '121' + b: '100' + - id: SELLABLE + value: 1750.0 + - id: TRACKED_UNIQUE + - id: MUSEUM + museum_category: ARMOR_SETS + - id: LAPIS_BOOTS + rarity: COMMON + default_statistics: + defense: 20 + mining_speed: 20 + mining_fortune: 2 + components: + - id: CUSTOM_DISPLAY_NAME + display_name: Lapis Armor Boots + - id: STANDARD_ITEM + standard_item_type: BOOTS + - id: LEATHER_COLOR + r: '122' + g: '121' + b: '100' + - id: SELLABLE + value: 1000.0 + - id: TRACKED_UNIQUE + - id: MUSEUM + museum_category: ARMOR_SETS diff --git a/configuration/skyblock/items/weapons.yml b/configuration/skyblock/items/weapons.yml index b158ba8ff..82578fad0 100644 --- a/configuration/skyblock/items/weapons.yml +++ b/configuration/skyblock/items/weapons.yml @@ -2,6 +2,8 @@ items: - id: ASPECT_OF_THE_END material: DIAMOND_SWORD rarity: RARE + abilities: + - INSTANT_TRANSMISSION default_statistics: damage: 100 strength: 100 diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java index 668c34338..9721c7cf1 100644 --- a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCLiftOperator.java @@ -1,60 +1,17 @@ package net.swofty.type.deepcaverns.npcs; -import net.minestom.server.MinecraftServer; import net.minestom.server.coordinate.Pos; -import net.minestom.server.timer.Scheduler; -import net.minestom.server.timer.TaskSchedule; import net.swofty.type.deepcaverns.gui.GUILiftOperator; -import net.swofty.type.generic.entity.npc.HypixelNPC; +import net.swofty.type.generic.entity.npc.NPCDialogue; import net.swofty.type.generic.entity.npc.NPCParameters; import net.swofty.type.generic.user.HypixelPlayer; import net.swofty.type.skyblockgeneric.mission.MissionData; import net.swofty.type.skyblockgeneric.mission.missions.MissionTalkToLiftOperator; import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.CompletableFuture; +import java.util.stream.Stream; -public class NPCLiftOperator extends HypixelNPC { // TODO: Honestly rewrite this entire class it sucks - - private final Map>> dialogueSets = new HashMap<>(); - - private boolean isInDialogue(HypixelPlayer player) { - return dialogueSets.containsKey(player); - } - - private CompletableFuture setDialogue(HypixelPlayer player, DialogueSet set) { - CompletableFuture future = new CompletableFuture<>(); - dialogueSets.put(player, Map.entry(set, future)); - handleLineSendingLoop(player, set); - return future; - } - - private void handleLineSendingLoop(HypixelPlayer player, DialogueSet dialogueSet) { - player.sendMessage(dialogueSet.lines[0]); - - if (dialogueSet.lines.length == 1) { - Map.Entry> entry = dialogueSets.remove(player); - if (entry != null) { - entry.getValue().complete(dialogueSet.key); - } - return; - } - - String[] remaining = new String[dialogueSet.lines.length - 1]; - System.arraycopy(dialogueSet.lines, 1, remaining, 0, remaining.length); - - Scheduler scheduler = MinecraftServer.getSchedulerManager(); - scheduler.buildTask(() -> { - handleLineSendingLoop( - player, - new DialogueSet(dialogueSet.key, remaining) - ); - }).delay(TaskSchedule.seconds(2)).schedule(); - } - - private record DialogueSet(String key, String[] lines) {} +public class NPCLiftOperator extends NPCDialogue { public NPCLiftOperator() { super(new NPCParameters() { @@ -115,29 +72,32 @@ public boolean looking() { @Override public void onClick(PlayerClickNPCEvent event) { SkyBlockPlayer player = (SkyBlockPlayer) event.player(); - MissionData data = player.getMissionData(); - if (isInDialogue(player)) return; + MissionData data = player.getMissionData(); if (!data.hasCompleted(MissionTalkToLiftOperator.class)) { if (!data.isCurrentlyActive(MissionTalkToLiftOperator.class)) { data.startMission(MissionTalkToLiftOperator.class); } - setDialogue(player, new DialogueSet( - "intro", - new String[]{ - "§e[NPC] Lift Operator§f: Hey Feller!", - "§e[NPC] Lift Operator§f: I control this lift here behind me.", - "§e[NPC] Lift Operator§f: Once you've explored an area I can give you a safe ride back there.", - "§e[NPC] Lift Operator§f: Be careful not to fall down the shaft though, it's a long fall!", - "§e[NPC] Lift Operator§f: Good luck on your adventures." - } - )).thenRun(() -> data.endMission(MissionTalkToLiftOperator.class)); - + setDialogue(player, "intro").thenRun(() -> data.endMission(MissionTalkToLiftOperator.class)); return; } - + new GUILiftOperator().open(player); } + + @Override + public NPCDialogue.DialogueSet[] getDialogueSets(HypixelPlayer player) { + return Stream.of( + DialogueSet.builder() + .key("intro").lines(new String[]{ + "Hey Feller!", + "I control this lift here behind me.", + "Once you've explored an area I can give you a safe ride back there.", + "Be careful not to fall down the shaft though, it's a long fall!", + "Good luck on your adventures." + }).build() + ).toArray(NPCDialogue.DialogueSet[]::new); + } } \ No newline at end of file diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java index accbdd309..ab4afb784 100644 --- a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java @@ -5,9 +5,10 @@ import net.swofty.type.generic.entity.npc.NPCDialogue; import net.swofty.type.generic.entity.npc.NPCParameters; import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.generic.utility.MathUtility; import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; -import java.util.List; +import java.util.stream.Stream; public class NPCWalter extends NPCDialogue { @@ -46,34 +47,35 @@ public void onClick(PlayerClickNPCEvent event) { if (isInDialogue(player)) return; setDialogue(player, "none").thenRun(() -> { - new GUIShopWalter().open(player); + MathUtility.delay(() -> new GUIShopWalter().open(player), 20); + }); } @Override public NPCDialogue.DialogueSet[] getDialogueSets(HypixelPlayer player) { - return List.of( - NPCDialogue.DialogueSet.builder() + return Stream.of( + DialogueSet.builder() .key("none").lines(new String[]{ "With the right tools, you can get through anything!", }).build(), - NPCDialogue.DialogueSet.builder() + DialogueSet.builder() .key("abiphone").lines(new String[]{ // when clicking with an Abiphone - "✆ My abiphone is for Platinum-level donors of the Walter cause only.", - "✆ You know these superbooms don't craft themselves right?", + "My abiphone is for Platinum-level donors of the Walter cause only.", + "You know these superbooms don't craft themselves right?", "You just need Sulphur Collection 7 and to then donate an Enchanted Sulphur Cube!", // then show "donate cube" option - }).build(), - NPCDialogue.DialogueSet.builder() + }).abiPhone(true).build(), + DialogueSet.builder() .key("donate_cube").lines(new String[]{ // when donating the cube with requirements met - "✆ Welcome to the Platinum club, high roller!", - "✆ Call me anytime!", - "✆ And before you ask... yes, I do try to commercialize all of my friendships.", - }).build(), - NPCDialogue.DialogueSet.builder() + "Welcome to the Platinum club, high roller!", + "Call me anytime!", + "And before you ask... yes, I do try to commercialize all of my friendships.", + }).abiPhone(true).build(), + DialogueSet.builder() .key("donate_cube_no_requirements").lines(new String[]{ // when donating the cube without requirements met - "✆ Mmh... you're missing something to become a Platinum-level donor...", - }).build() - ).stream().toArray(NPCDialogue.DialogueSet[]::new); + "Mmh... you're missing something to become a Platinum-level donor...", + }).abiPhone(true).build() + ).toArray(NPCDialogue.DialogueSet[]::new); } } \ No newline at end of file diff --git a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java index faa2f4886..a833cddda 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java +++ b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java @@ -150,6 +150,10 @@ public void sendNPCMessage(HypixelPlayer player, String message) { player.sendMessage("§e[NPC] " + getName() + "§f: " + message); } + public void sendNPCAbiphoneMessage(HypixelPlayer player, String message) { + player.sendMessage("§e[NPC] " + getName() + "§f:§b✆ §f" + message); + } + public record PlayerClickNPCEvent(HypixelPlayer player, int entityId, HypixelNPC npc) { } diff --git a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCDialogue.java b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCDialogue.java index c64478d39..c7873731e 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCDialogue.java +++ b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCDialogue.java @@ -11,65 +11,70 @@ import java.util.concurrent.CompletableFuture; public abstract class NPCDialogue extends HypixelNPC { - HashMap>> dialogueSets = new HashMap<>(); - - protected NPCDialogue(NPCParameters parameters) { - super(parameters); - } - - public abstract DialogueSet[] getDialogueSets(HypixelPlayer player); - - public Boolean isInDialogue(HypixelPlayer player) { - Map.Entry> dialogueSet = dialogueSets.get(player); - return dialogueSet != null; - } - - public CompletableFuture setDialogue(HypixelPlayer player, String key) { - CompletableFuture future = new CompletableFuture<>(); - - for (DialogueSet dialogueSet : getDialogueSets(player)) { - if (dialogueSet.key().equals(key)) { - dialogueSets.put(player, Map.entry(dialogueSet, future)); - handleLineSendingLoop(player, dialogueSet); - return future; - } - } - - future.completeExceptionally(new NullPointerException("Dialogue set with key '" + key + "' not found.")); - return future; - } - - private void handleLineSendingLoop(HypixelPlayer player, DialogueSet dialogueSet) { - sendNPCMessage(player, dialogueSet.lines()[0]); - - String[] newLines = new String[dialogueSet.lines().length - 1]; - System.arraycopy(dialogueSet.lines(), 1, newLines, 0, dialogueSet.lines().length - 1); - - if (newLines.length == 0) { - dialogueSets.get(player).getValue().complete(dialogueSet.key()); - dialogueSets.remove(player); - return; - } - - Scheduler scheduler = MinecraftServer.getSchedulerManager(); - scheduler.buildTask(() -> { - handleLineSendingLoop(player, DialogueSet.builder().key(dialogueSet.key()).lines(newLines).build()); - }).delay(TaskSchedule.seconds(2)).schedule(); - } - - public static void remove(HypixelPlayer player) { - for (HypixelNPC npc : getNpcs()) { - if (npc instanceof NPCDialogue dialogue) { - if (dialogue.isInDialogue(player)) { - dialogue.dialogueSets.get(player).getValue().complete(null); - dialogue.dialogueSets.remove(player); - } - } - } - } - - @Builder - public record DialogueSet(String key, String[] lines) { - } + HashMap>> dialogueSets = new HashMap<>(); + + protected NPCDialogue(NPCParameters parameters) { + super(parameters); + } + + public static void remove(HypixelPlayer player) { + for (HypixelNPC npc : getNpcs()) { + if (npc instanceof NPCDialogue dialogue) { + if (dialogue.isInDialogue(player)) { + dialogue.dialogueSets.get(player).getValue().complete(null); + dialogue.dialogueSets.remove(player); + } + } + } + } + + public abstract DialogueSet[] getDialogueSets(HypixelPlayer player); + + public Boolean isInDialogue(HypixelPlayer player) { + Map.Entry> dialogueSet = dialogueSets.get(player); + return dialogueSet != null; + } + + public CompletableFuture setDialogue(HypixelPlayer player, String key) { + CompletableFuture future = new CompletableFuture<>(); + + for (DialogueSet dialogueSet : getDialogueSets(player)) { + if (dialogueSet.key().equals(key)) { + dialogueSets.put(player, Map.entry(dialogueSet, future)); + handleLineSendingLoop(player, dialogueSet); + return future; + } + } + + future.completeExceptionally(new NullPointerException("Dialogue set with key '" + key + "' not found.")); + return future; + } + + private void handleLineSendingLoop(HypixelPlayer player, DialogueSet dialogueSet) { + if (dialogueSet.abiPhone) { + sendNPCAbiphoneMessage(player, dialogueSet.lines()[0]); + } else { + sendNPCMessage(player, dialogueSet.lines()[0]); + } + + String[] newLines = new String[dialogueSet.lines().length - 1]; + System.arraycopy(dialogueSet.lines(), 1, newLines, 0, dialogueSet.lines().length - 1); + + if (newLines.length == 0) { + dialogueSets.get(player).getValue().complete(dialogueSet.key()); + dialogueSets.remove(player); + return; + } + + Scheduler scheduler = MinecraftServer.getSchedulerManager(); + scheduler.buildTask(() -> { + handleLineSendingLoop(player, DialogueSet.builder().key(dialogueSet.key()).lines(newLines).build()); + }).delay(TaskSchedule.seconds(2)).schedule(); + } + + @Builder + public record DialogueSet(String key, String[] lines, boolean abiPhone) { + } + } diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/entity/mob/mobs/hub/MobLapisZombie.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/entity/mob/mobs/hub/MobLapisZombie.java new file mode 100644 index 000000000..2afae5cc7 --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/entity/mob/mobs/hub/MobLapisZombie.java @@ -0,0 +1,143 @@ +package net.swofty.type.skyblockgeneric.entity.mob.mobs.hub; + +import lombok.NonNull; +import net.minestom.server.entity.EntityType; +import net.minestom.server.entity.ai.GoalSelector; +import net.minestom.server.entity.ai.TargetSelector; +import net.minestom.server.entity.ai.target.LastEntityDamagerTarget; +import net.minestom.server.item.Material; +import net.minestom.server.utils.time.TimeUnit; +import net.swofty.commons.item.ItemType; +import net.swofty.commons.statistics.ItemStatistic; +import net.swofty.commons.statistics.ItemStatistics; +import net.swofty.type.generic.gui.inventory.item.GUIMaterial; +import net.swofty.type.skyblockgeneric.entity.mob.BestiaryMob; +import net.swofty.type.skyblockgeneric.entity.mob.MobType; +import net.swofty.type.skyblockgeneric.entity.mob.ai.ClosestEntityRegionTarget; +import net.swofty.type.skyblockgeneric.entity.mob.ai.MeleeAttackWithinRegionGoal; +import net.swofty.type.skyblockgeneric.entity.mob.ai.RandomRegionStrollGoal; +import net.swofty.type.skyblockgeneric.entity.mob.impl.RegionPopulator; +import net.swofty.type.skyblockgeneric.loottable.OtherLoot; +import net.swofty.type.skyblockgeneric.loottable.SkyBlockLootTable; +import net.swofty.type.skyblockgeneric.region.RegionType; +import net.swofty.type.skyblockgeneric.skill.SkillCategories; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class MobLapisZombie extends BestiaryMob implements RegionPopulator { + + public MobLapisZombie() { + super(EntityType.ZOMBIE); + } + + @Override + public String getDisplayName() { + return "Lapis Zombie"; + } + + @Override + public Integer getLevel() { + return 1; + } + + @Override + public List getGoalSelectors() { + return List.of( + new MeleeAttackWithinRegionGoal(this, + 1.6, + 20, + TimeUnit.SERVER_TICK, + RegionType.LAPIS_QUARRY), // Attack the target + new RandomRegionStrollGoal(this, 15, RegionType.LAPIS_QUARRY) // Walk around + ); + } + + @Override + public List getTargetSelectors() { + return List.of( + new LastEntityDamagerTarget(this, 16), // First target the last entity which attacked you + new ClosestEntityRegionTarget(this, + 16, + entity -> entity instanceof SkyBlockPlayer, + RegionType.LAPIS_QUARRY) // If there is none, target the nearest player + ); + } + + @Override + public ItemStatistics getBaseStatistics() { + return ItemStatistics.builder() + .withBase(ItemStatistic.HEALTH, 200D) + .withBase(ItemStatistic.DAMAGE, 50D) + .withBase(ItemStatistic.SPEED, 100D) + .build(); + } + + @Override + public @Nullable SkyBlockLootTable getLootTable() { + return new SkyBlockLootTable() { + @Override + public @NonNull List getLootTable() { + return List.of( + new LootRecord(ItemType.ROTTEN_FLESH, 1, 100), + new LootRecord(ItemType.LAPIS_ARMOR_BOOTS, 1, 1), + new LootRecord(ItemType.LAPIS_ARMOR_LEGGINGS, 1, 1), + new LootRecord(ItemType.LAPIS_ARMOR_CHESTPLATE, 1, 1), + new LootRecord(ItemType.LAPIS_ARMOR_HELMET, 1, 1) + ); + } + + @Override + public @NotNull CalculationMode getCalculationMode() { + return CalculationMode.CALCULATE_INDIVIDUAL; + } + }; + } + + @Override + public SkillCategories getSkillCategory() { + return SkillCategories.COMBAT; + } + + @Override + public long damageCooldown() { + return 500; + } + + @Override + public OtherLoot getOtherLoot() { + return new OtherLoot(6, 1, 1); + } + + @Override + public List getMobTypes() { + return List.of(MobType.UNDEAD); + } + + @Override + public int getMaxBestiaryTier() { + return 10; + } + + @Override + public int getBestiaryBracket() { + return 1; + } + + @Override + public String getMobID() { + return "lapis_zombie"; + } + + @Override + public GUIMaterial getGuiMaterial() { + return new GUIMaterial(Material.SEA_LANTERN); + } + + @Override + public List getPopulators() { + return List.of(new Populator(RegionType.LAPIS_QUARRY, 20)); + } +} diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/handlers/ability/AbilityRegistry.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/handlers/ability/AbilityRegistry.java index 3ee6f359a..7a128ba3f 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/handlers/ability/AbilityRegistry.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/handlers/ability/AbilityRegistry.java @@ -7,29 +7,42 @@ public class AbilityRegistry { - private static final Map REGISTERED_ABILITIES = new HashMap<>(); - - static { - register(new RegisteredAbility( - "WITHER_IMPACT", - "Wither Impact", - "§7Teleports §a10 Blocks §7ahead of you. Then implode dealing §c10000 §7damage to nearby enemies. Also applies the wither shield scroll ability reducing mobdamage taken and granting an absorption shield for §e5 §7seconds.", - RegisteredAbility.AbilityActivation.RIGHT_CLICK, - 50, - new RegisteredAbility.AbilityManaCost(25), - (player, item, ignored, ignored2) -> { - player.sendMessage("Hey"); - } - )); - - register(new BuildersWandAbility()); - } - - public static void register(RegisteredAbility ability) { - REGISTERED_ABILITIES.put(ability.getId(), ability); - } - - public static RegisteredAbility getAbility(String id) { - return REGISTERED_ABILITIES.get(id); - } + private static final Map REGISTERED_ABILITIES = new HashMap<>(); + + static { + register(new RegisteredAbility( + "WITHER_IMPACT", + "Wither Impact", + "§7Teleports §a10 Blocks §7ahead of you. Then implode dealing §c10000 §7damage to nearby enemies. Also applies the wither shield scroll ability reducing mobdamage taken and granting an absorption shield for §e5 §7seconds.", + RegisteredAbility.AbilityActivation.RIGHT_CLICK, + 50, + new RegisteredAbility.AbilityManaCost(25), + (player, item, ignored, ignored2) -> { + player.sendMessage("Hey"); + } + )); + + register(new RegisteredAbility( + "INSTANT_TRANSMISSION", + "Instant Transmission", + "§7Teleports §a8 Blocks §7ahead of you and gain §a+50 §fSpeed for §a3 seconds§f.", + RegisteredAbility.AbilityActivation.RIGHT_CLICK, + 5, + new RegisteredAbility.AbilityManaCost(50), + (player, item, ignored, ignored2) -> { + player.teleport(player.getPosition().add(player.getPosition().direction().mul(8))); + // add speed too + } + )); + + register(new BuildersWandAbility()); + } + + public static void register(RegisteredAbility ability) { + REGISTERED_ABILITIES.put(ability.getId(), ability); + } + + public static RegisteredAbility getAbility(String id) { + return REGISTERED_ABILITIES.get(id); + } } \ No newline at end of file diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/set/ArmorSetRegistry.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/set/ArmorSetRegistry.java index e4f08ea1f..728620f88 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/set/ArmorSetRegistry.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/set/ArmorSetRegistry.java @@ -9,73 +9,74 @@ @Getter public enum ArmorSetRegistry { - LEAFLET(LeafletSet.class, ItemType.LEAFLET_BOOTS, ItemType.LEAFLET_LEGGINGS, ItemType.LEAFLET_CHESTPLATE, ItemType.LEAFLET_HELMET), - MINER_OUTFIT(MinerOutfitSet.class, ItemType.MINERS_OUTFIT_BOOTS, ItemType.MINERS_OUTFIT_LEGGINGS, ItemType.MINERS_OUTFIT_CHESTPLATE, ItemType.MINERS_OUTFIT_HELMET), - CHEAP_TUXEDO(CheapTuxedoSet.class, ItemType.CHEAP_TUXEDO_BOOTS, ItemType.CHEAP_TUXEDO_LEGGINGS, ItemType.CHEAP_TUXEDO_CHESTPLATE, null), - FANCY_TUXEDO(FancyTuxedoSet.class, ItemType.FANCY_TUXEDO_BOOTS, ItemType.FANCY_TUXEDO_LEGGINGS, ItemType.FANCY_TUXEDO_CHESTPLATE, null), - ELEGANT_TUXEDO(ElegantTuxedoSet.class, ItemType.ELEGANT_TUXEDO_BOOTS, ItemType.ELEGANT_TUXEDO_LEGGINGS, ItemType.ELEGANT_TUXEDO_CHESTPLATE, null), - MUSHROOM(MushroomSet.class, ItemType.MUSHROOM_BOOTS, ItemType.MUSHROOM_LEGGINGS, ItemType.MUSHROOM_CHESTPLATE, ItemType.MUSHROOM_HELMET), - PUMPKIN(PumpkinSet.class, ItemType.PUMPKIN_BOOTS, ItemType.PUMPKIN_LEGGINGS, ItemType.PUMPKIN_CHESTPLATE, ItemType.PUMPKIN_HELMET); + LEAFLET(LeafletSet.class, ItemType.LEAFLET_BOOTS, ItemType.LEAFLET_LEGGINGS, ItemType.LEAFLET_CHESTPLATE, ItemType.LEAFLET_HELMET), + MINER_OUTFIT(MinerOutfitSet.class, ItemType.MINERS_OUTFIT_BOOTS, ItemType.MINERS_OUTFIT_LEGGINGS, ItemType.MINERS_OUTFIT_CHESTPLATE, ItemType.MINERS_OUTFIT_HELMET), + CHEAP_TUXEDO(CheapTuxedoSet.class, ItemType.CHEAP_TUXEDO_BOOTS, ItemType.CHEAP_TUXEDO_LEGGINGS, ItemType.CHEAP_TUXEDO_CHESTPLATE, null), + FANCY_TUXEDO(FancyTuxedoSet.class, ItemType.FANCY_TUXEDO_BOOTS, ItemType.FANCY_TUXEDO_LEGGINGS, ItemType.FANCY_TUXEDO_CHESTPLATE, null), + ELEGANT_TUXEDO(ElegantTuxedoSet.class, ItemType.ELEGANT_TUXEDO_BOOTS, ItemType.ELEGANT_TUXEDO_LEGGINGS, ItemType.ELEGANT_TUXEDO_CHESTPLATE, null), + MUSHROOM(MushroomSet.class, ItemType.MUSHROOM_BOOTS, ItemType.MUSHROOM_LEGGINGS, ItemType.MUSHROOM_CHESTPLATE, ItemType.MUSHROOM_HELMET), + LAPIS(LapisArmorSet.class, ItemType.LAPIS_ARMOR_BOOTS, ItemType.LAPIS_ARMOR_LEGGINGS, ItemType.LAPIS_ARMOR_CHESTPLATE, ItemType.LAPIS_ARMOR_HELMET), + PUMPKIN(PumpkinSet.class, ItemType.PUMPKIN_BOOTS, ItemType.PUMPKIN_LEGGINGS, ItemType.PUMPKIN_CHESTPLATE, ItemType.PUMPKIN_HELMET); - private final Class clazz; - private final ItemType boots; - private final ItemType leggings; - private final ItemType chestplate; - private final ItemType helmet; + private final Class clazz; + private final ItemType boots; + private final ItemType leggings; + private final ItemType chestplate; + private final ItemType helmet; - ArmorSetRegistry(Class clazz, ItemType boots, ItemType legging, - ItemType chestplate, ItemType helmet) { - this.clazz = clazz; - this.boots = boots; - this.leggings = legging; - this.chestplate = chestplate; - this.helmet = helmet; - } + ArmorSetRegistry(Class clazz, ItemType boots, ItemType legging, + ItemType chestplate, ItemType helmet) { + this.clazz = clazz; + this.boots = boots; + this.leggings = legging; + this.chestplate = chestplate; + this.helmet = helmet; + } - public static ArmorSetRegistry getArmorSet(Class clazz) { - for (ArmorSetRegistry armorSetRegistry : values()) { - if (armorSetRegistry.getClazz() == clazz) { - return armorSetRegistry; - } - } - return null; - } + public static ArmorSetRegistry getArmorSet(Class clazz) { + for (ArmorSetRegistry armorSetRegistry : values()) { + if (armorSetRegistry.getClazz() == clazz) { + return armorSetRegistry; + } + } + return null; + } - public static @Nullable ArmorSetRegistry getArmorSet(@Nullable ItemType item) { - if (item == null) return null; - for (ArmorSetRegistry armorSetRegistry : values()) { - if (armorSetRegistry.getBoots() == item - || armorSetRegistry.getLeggings() == item - || armorSetRegistry.getChestplate() == item - || armorSetRegistry.getHelmet() == item) { - return armorSetRegistry; - } - } - return null; - } + public static @Nullable ArmorSetRegistry getArmorSet(@Nullable ItemType item) { + if (item == null) return null; + for (ArmorSetRegistry armorSetRegistry : values()) { + if (armorSetRegistry.getBoots() == item + || armorSetRegistry.getLeggings() == item + || armorSetRegistry.getChestplate() == item + || armorSetRegistry.getHelmet() == item) { + return armorSetRegistry; + } + } + return null; + } - public static int getPieceCount(ArmorSetRegistry armorSetRegistry) { - int count = 0; - if (armorSetRegistry.getBoots() != null) count++; - if (armorSetRegistry.getLeggings() != null) count++; - if (armorSetRegistry.getChestplate() != null) count++; - if (armorSetRegistry.getHelmet() != null) count++; - return count; - } + public static int getPieceCount(ArmorSetRegistry armorSetRegistry) { + int count = 0; + if (armorSetRegistry.getBoots() != null) count++; + if (armorSetRegistry.getLeggings() != null) count++; + if (armorSetRegistry.getChestplate() != null) count++; + if (armorSetRegistry.getHelmet() != null) count++; + return count; + } - public static ArmorSetRegistry getArmorSet(ItemType boots, ItemType leggings, ItemType chestplate, ItemType helmet) { - for (ArmorSetRegistry armorSetRegistry : values()) { - if ((armorSetRegistry.getBoots() == null || armorSetRegistry.getBoots() == boots) - && (armorSetRegistry.getLeggings() == null || armorSetRegistry.getLeggings() == leggings) - && (armorSetRegistry.getChestplate() == null || armorSetRegistry.getChestplate() == chestplate) - && (armorSetRegistry.getHelmet() == null || armorSetRegistry.getHelmet() == helmet)) { - return armorSetRegistry; - } - } - return null; - } + public static ArmorSetRegistry getArmorSet(ItemType boots, ItemType leggings, ItemType chestplate, ItemType helmet) { + for (ArmorSetRegistry armorSetRegistry : values()) { + if ((armorSetRegistry.getBoots() == null || armorSetRegistry.getBoots() == boots) + && (armorSetRegistry.getLeggings() == null || armorSetRegistry.getLeggings() == leggings) + && (armorSetRegistry.getChestplate() == null || armorSetRegistry.getChestplate() == chestplate) + && (armorSetRegistry.getHelmet() == null || armorSetRegistry.getHelmet() == helmet)) { + return armorSetRegistry; + } + } + return null; + } - public String getDisplayName() { - return StringUtility.toNormalCase(name().replace("_", " ")); - } + public String getDisplayName() { + return StringUtility.toNormalCase(name().replace("_", " ")); + } } diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/set/sets/LapisArmorSet.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/set/sets/LapisArmorSet.java new file mode 100644 index 000000000..f5bf30f75 --- /dev/null +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/item/set/sets/LapisArmorSet.java @@ -0,0 +1,34 @@ +package net.swofty.type.skyblockgeneric.item.set.sets; + +import net.swofty.type.skyblockgeneric.item.set.impl.ArmorSet; +import net.swofty.type.skyblockgeneric.item.set.impl.MuseumableSet; +import net.swofty.type.skyblockgeneric.item.set.impl.SetEvents; +import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; + +import java.util.ArrayList; +import java.util.List; + +public class LapisArmorSet implements ArmorSet, SetEvents, MuseumableSet { + + @Override + public String getName() { + return "Magnetic"; + } + + @Override + public ArrayList getDescription() { + return new ArrayList<>(List.of( + "§fEarn §a50% §fmore Exp when mining" // piece bonus + )); + } + + @Override + public void setPutOn(SkyBlockPlayer player) { + // TODO: Implement Exp boost when mining + } + + @Override + public void setTakeOff(SkyBlockPlayer player) { + + } +} From 61357946ba4d4d383b4176e9579824f399ba3527 Mon Sep 17 00:00:00 2001 From: AriDev <75741608+ArikSquad@users.noreply.github.com> Date: Mon, 15 Dec 2025 22:55:41 +0200 Subject: [PATCH 013/102] feat: npc options --- .../net/swofty/commons/item/ItemType.java | 3 + .../items/miscellaneous/abiphones.yml | 23 + .../type/deepcaverns/npcs/NPCWalter.java | 28 +- .../type/generic/entity/npc/HypixelNPC.java | 2 +- .../type/generic/entity/npc/NPCDialogue.java | 2 +- .../type/generic/entity/npc/NPCOption.java | 48 ++ .../commands/SelectNPCOptionCommand.java | 44 ++ .../skyblockgeneric/item/SkyBlockItem.java | 623 +++++++++--------- 8 files changed, 461 insertions(+), 312 deletions(-) create mode 100644 configuration/skyblock/items/miscellaneous/abiphones.yml create mode 100644 type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCOption.java create mode 100644 type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/commands/SelectNPCOptionCommand.java diff --git a/commons/src/main/java/net/swofty/commons/item/ItemType.java b/commons/src/main/java/net/swofty/commons/item/ItemType.java index b348bf8ef..ce9aee368 100644 --- a/commons/src/main/java/net/swofty/commons/item/ItemType.java +++ b/commons/src/main/java/net/swofty/commons/item/ItemType.java @@ -23,6 +23,9 @@ public enum ItemType { ENDSTONE_ROSE(Material.POPPY, Rarity.RARE), BIOFUEL(Material.GREEN_DYE, Rarity.RARE), + ABIPHONE_BASIC(Material.PLAYER_HEAD, Rarity.COMMON), + ABIPHONE_X_RED(Material.PLAYER_HEAD, Rarity.UNCOMMON), + /** * Accessories */ diff --git a/configuration/skyblock/items/miscellaneous/abiphones.yml b/configuration/skyblock/items/miscellaneous/abiphones.yml new file mode 100644 index 000000000..1480e22fd --- /dev/null +++ b/configuration/skyblock/items/miscellaneous/abiphones.yml @@ -0,0 +1,23 @@ +items: + - id: ABIPHONE_BASIC + material: PLAYER_HEAD + rarity: COMMON + lore: + - "§7A device that can be used to contact" + - "§7people! Click NPCs to add them to your contacts!" + components: + - id: SELLABLE + value: 100000.0 + - id: SKULL_HEAD + texture: e471c673a875425428d4b5ecf78a24d86ea65ae6599633e6514bbaafd7fa561f + - id: ABIPHONE_X_RED + material: PLAYER_HEAD + rarity: COMMON + lore: + - "§7A device that can be used to contact" + - "§7people! Click NPCs to add them to your contacts!" + components: + - id: SELLABLE + value: 1000000.0 + - id: SKULL_HEAD + texture: d256584eea6825150a415fc18daa532b9139cca454f969f2210355de10a15a4 diff --git a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java index ab4afb784..2a176b123 100644 --- a/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java +++ b/type.deepcaverns/src/main/java/net/swofty/type/deepcaverns/npcs/NPCWalter.java @@ -1,13 +1,19 @@ package net.swofty.type.deepcaverns.npcs; +import net.kyori.adventure.text.format.NamedTextColor; import net.minestom.server.coordinate.Pos; +import net.minestom.server.item.ItemStack; +import net.swofty.commons.item.ItemType; import net.swofty.type.deepcaverns.gui.GUIShopWalter; import net.swofty.type.generic.entity.npc.NPCDialogue; +import net.swofty.type.generic.entity.npc.NPCOption; import net.swofty.type.generic.entity.npc.NPCParameters; import net.swofty.type.generic.user.HypixelPlayer; import net.swofty.type.generic.utility.MathUtility; +import net.swofty.type.skyblockgeneric.item.SkyBlockItem; import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer; +import java.util.Collections; import java.util.stream.Stream; public class NPCWalter extends NPCDialogue { @@ -46,11 +52,27 @@ public void onClick(PlayerClickNPCEvent event) { SkyBlockPlayer player = (SkyBlockPlayer) event.player(); if (isInDialogue(player)) return; + ItemStack itemStack = player.getItemInMainHand(); + SkyBlockItem item = new SkyBlockItem(itemStack); + ItemType itemType = item.getItemType(); + + if (itemType == ItemType.ABIPHONE_BASIC) { + setDialogue(player, "abiphone").thenRun(() -> { + NPCOption.sendOption(player, "walter", Collections.singletonList(new NPCOption.Option( + "pay", // actual id from Hypixel + NamedTextColor.GREEN, + "DONATE CUBE", + (p) -> { + setDialogue(player, "donate_cube_no_requirements"); + } + ))); + }); + return; + } + setDialogue(player, "none").thenRun(() -> { MathUtility.delay(() -> new GUIShopWalter().open(player), 20); - }); - } @Override @@ -64,7 +86,7 @@ public NPCDialogue.DialogueSet[] getDialogueSets(HypixelPlayer player) { .key("abiphone").lines(new String[]{ // when clicking with an Abiphone "My abiphone is for Platinum-level donors of the Walter cause only.", "You know these superbooms don't craft themselves right?", - "You just need Sulphur Collection 7 and to then donate an Enchanted Sulphur Cube!", // then show "donate cube" option + "You just need §3Sulphur Collection 7 §fand to then donate an Enchanted Sulphur Cube!", // then show "donate cube" option }).abiPhone(true).build(), DialogueSet.builder() .key("donate_cube").lines(new String[]{ // when donating the cube with requirements met diff --git a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java index a833cddda..6dd18a696 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java +++ b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/HypixelNPC.java @@ -151,7 +151,7 @@ public void sendNPCMessage(HypixelPlayer player, String message) { } public void sendNPCAbiphoneMessage(HypixelPlayer player, String message) { - player.sendMessage("§e[NPC] " + getName() + "§f:§b✆ §f" + message); + player.sendMessage("§e[NPC] " + getName() + "§f: §b✆ §f" + message); } public record PlayerClickNPCEvent(HypixelPlayer player, int entityId, HypixelNPC npc) { diff --git a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCDialogue.java b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCDialogue.java index c7873731e..6347e0c7b 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCDialogue.java +++ b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCDialogue.java @@ -68,7 +68,7 @@ private void handleLineSendingLoop(HypixelPlayer player, DialogueSet dialogueSet Scheduler scheduler = MinecraftServer.getSchedulerManager(); scheduler.buildTask(() -> { - handleLineSendingLoop(player, DialogueSet.builder().key(dialogueSet.key()).lines(newLines).build()); + handleLineSendingLoop(player, DialogueSet.builder().key(dialogueSet.key()).lines(newLines).abiPhone(dialogueSet.abiPhone).build()); }).delay(TaskSchedule.seconds(2)).schedule(); } diff --git a/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCOption.java b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCOption.java new file mode 100644 index 000000000..b6525654f --- /dev/null +++ b/type.generic/src/main/java/net/swofty/type/generic/entity/npc/NPCOption.java @@ -0,0 +1,48 @@ +package net.swofty.type.generic.entity.npc; + +import lombok.Builder; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; +import net.swofty.type.generic.user.HypixelPlayer; +import net.swofty.type.generic.utility.MathUtility; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +public class NPCOption { + public static final Map options = new HashMap<>(); + + public static void sendOption(HypixelPlayer player, String id, List