private final Component title;
private final Map<Integer, ItemStack> content;
private static final Set<Integer> CITY_SLOTS = Set.of(0, 1, 2, 3, 9, 10, 11, 12, 18, 19, 20, 21, 27, 28, 29, 30, 36, 37, 38, 39, 45, 46, 47, 48);
private static final Set<Integer> QUEST_SLOTS = Set.of(4, 5, 6, 7, 8, 13, 14, 15, 16, 17, 22, 23, 24, 25, 26);
private static final Set<Integer> MILESTONES_SLOTS = Set.of(31, 32, 33, 34, 35, 40, 41, 42, 43, 44, 49, 50, 51, 52, 53);
private static final Set<Integer> CONTEST_SLOTS = Set.of(54, 55, 56, 57, 58);
private static final Set<Integer> SHOP_SLOTS = Set.of(63, 64, 65, 66, 67);
private static final Set<Integer> HOME_SLOTS = Set.of(72, 73, 74, 75, 76);
private static final Set<Integer> PROFILE_SLOTS = Set.of(59, 60, 61, 62, 68, 69, 70, 71, 77, 78, 79, 80);
private static final int LEFT_ARROW_SLOT = 81; // Not used in this menu, but in Page2
private static final int RIGHT_ARROW_SLOT = 89;
private static final Set<Integer> SETTINGS_SLOTS = Set.of(82, 83, 84);
private static final Set<Integer> MAILBOX_SLOTS = Set.of(85, 86, 87);
private static final int ADVANCEMENTS_SLOT = 88;
private final AdminShopManager adminShopManager;
private final WeeklyEventsManager weeklyEventsManager;
private final ContestManager contestManager;
public Page1(Player player) {
this.adminShopManager = OMCRegistry.FEATURES.ADMIN_SHOP.get();
this.contestManager = OMCRegistry.FEATURES.CONTEST.get();
this.weeklyEventsManager = OMCRegistry.FEATURES.WEEKLY_EVENTS.get();
City playerCity = City.ofPlayer(player.getUniqueId());
ItemStack cityItem = new ItemStack(Material.PAPER);
cityItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.city.lore")
.color(NamedTextColor.DARK_GRAY)));
});
if (playerCity != null) {
title = Component.text(FontImageWrapper.replaceFontImages(":offset_-26::omc_main_menu_page_1:"));
Component cityName = Component.text(playerCity.getName()).color(NamedTextColor.YELLOW);
cityItem.editMeta(meta -> meta.itemName(TranslationManager.translation("feature.mainmenu.item.city.name", cityName)
.color(NamedTextColor.YELLOW)));
} else {
title = Component.text(FontImageWrapper.replaceFontImages(":offset_-26::omc_main_menu_page_1_sans_ville:"));
cityItem.editMeta(meta -> meta.itemName(TranslationManager.translation("feature.mainmenu.item.city.no_city")
.color(NamedTextColor.GRAY)));
}
content = new HashMap<>();
ItemStack advancementsItem = new ItemStack(Material.PAPER);
advancementsItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.advancements.name")
.color(NamedTextColor.YELLOW));
});
content.put(ADVANCEMENTS_SLOT, advancementsItem);
CITY_SLOTS.forEach(slot -> content.put(slot, cityItem));
ItemStack questsItem = new ItemStack(Material.PAPER);
questsItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.quests.name")
.color(NamedTextColor.YELLOW));
meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.quests.lore")
.color(NamedTextColor.DARK_GRAY)));
});
QUEST_SLOTS.forEach(slot -> content.put(slot, questsItem));
ItemStack milestonesItem = new ItemStack(Material.PAPER);
milestonesItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.milestones.name")
.color(NamedTextColor.YELLOW));
meta.lore(List.of(
TranslationManager.translation("feature.mainmenu.item.milestones.lore")
.color(NamedTextColor.WHITE),
TranslationManager.translation("feature.mainmenu.item.milestones.command")
.color(NamedTextColor.DARK_GRAY)
));
});
MILESTONES_SLOTS.forEach(slot -> content.put(slot, milestonesItem));
ItemStack contestItem = new ItemStack(Material.PAPER);
ContestData data = contestManager.getData();
if (weeklyEventsManager.getCurrentEvent() instanceof Contest && weeklyEventsManager.getCurrentPhase() != ContestPhase.END_PHASE.getPhase()) {
contestItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(data.getCampVSComponent());
Component timeComponent = Component.text(DateUtils.getTimeUntilNextDay(DayOfWeek.MONDAY))
.color(NamedTextColor.RED);
meta.lore(List.of(
TranslationManager.translation("feature.mainmenu.item.contest.ends_in", timeComponent)
.color(NamedTextColor.RED),
TranslationManager.translation("feature.mainmenu.item.contest.command")
.color(NamedTextColor.DARK_GRAY)
)
);
});
} else {
contestItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.contest.name")
.color(NamedTextColor.YELLOW));
meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.contest.command")
.color(NamedTextColor.DARK_GRAY)));
});
}
CONTEST_SLOTS.forEach(slot -> content.put(slot, contestItem));
ItemStack shopItem = new ItemStack(Material.PAPER);
shopItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.shop.name")
.color(NamedTextColor.YELLOW));
meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.shop.command")
.color(NamedTextColor.DARK_GRAY)));
});
SHOP_SLOTS.forEach(slot -> content.put(slot, shopItem));
ItemStack homeItem = new ItemStack(Material.PAPER);
homeItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.home.name")
.color(NamedTextColor.YELLOW));
meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.home.command")
.color(NamedTextColor.DARK_GRAY)));
});
HOME_SLOTS.forEach(slot -> content.put(slot, homeItem));
ItemStack profilItem = new ItemStack(Material.PAPER);
profilItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.profile.name")
.color(NamedTextColor.YELLOW));
meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.profile.lore")
.color(NamedTextColor.RED)));
});
PROFILE_SLOTS.forEach(slot -> {
if (slot != 78)
content.put(slot, profilItem);
});
ItemStack playerHeadProfileItem = CustomStack.getInstance("omc_main_menu:player_head").getItemStack();
playerHeadProfileItem.editMeta(meta -> {
meta.customName(TranslationManager.translation("feature.mainmenu.item.profile.name")
.color(NamedTextColor.YELLOW)
.decoration(TextDecoration.ITALIC, false));
meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.profile.lore")
.color(NamedTextColor.RED)));
if (meta instanceof SkullMeta skullMeta) {
skullMeta.setOwningPlayer(player);
}
});
content.put(78, playerHeadProfileItem);
ItemStack rightArrowItem = new ItemStack(Material.PAPER);
rightArrowItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.next_page")
.color(NamedTextColor.YELLOW));
});
content.put(RIGHT_ARROW_SLOT, rightArrowItem);
ItemStack settingsItem = new ItemStack(Material.PAPER);
settingsItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.settings.name")
.color(NamedTextColor.YELLOW));
meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.settings.command")
.color(NamedTextColor.DARK_GRAY)));
});
SETTINGS_SLOTS.forEach(slot -> content.put(slot, settingsItem));
ItemStack mailboxItem = new ItemStack(Material.PAPER);
mailboxItem.editMeta(meta -> {
meta.setItemModel(NamespacedKey.minecraft("air"));
meta.itemName(TranslationManager.translation("feature.mainmenu.item.mailbox.name")
.color(NamedTextColor.YELLOW));
meta.lore(List.of(TranslationManager.translation("feature.mainmenu.item.mailbox.command")
.color(NamedTextColor.DARK_GRAY)));
});
MAILBOX_SLOTS.forEach(slot -> content.put(slot, mailboxItem));
}
@Override
public Component getTitle() {
return title;
}
@Override
public InventoryType getInventoryType() {
return InventoryType.GENERIC_9X6;
}
@Override
public Map<Integer, ItemStack> getContent() {
return content;
}
@Override
public void onInventoryClick(InventoryClickEvent event) {
Player player = event.player();
OMCPlayer omcPlayer = OMCPlayer.of(player);
if (event.clickType() == ClickType.CLICK_OUTSIDE) {
PacketMenuLib.closeMenu(player);
return;
}
if (event.clickType() != ClickType.LEFT_CLICK) {
return;
}
if (DreamUtils.isInDreamWorld(player)) {
PacketMenuLib.closeMenu(player);
MessagesManager.sendMessage(player,
TranslationManager.translation("feature.mainmenu.message.dream_world")
.color(NamedTextColor.RED),
Prefix.OPENMC, MessageType.ERROR, true);
return;
}
int slot = event.slot();
// todo: arreter ce carnage
if (CITY_SLOTS.contains(slot)) {
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> CityCommands.mainCommand(player));
} else if (QUEST_SLOTS.contains(slot)) {
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> QuestCommand.onQuest(player));
} else if (MILESTONES_SLOTS.contains(slot)) {
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> new MainMilestonesMenu(player).open());
} else if (CONTEST_SLOTS.contains(slot)) {
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> ContestCommand.mainCommand(player));
} else if (SHOP_SLOTS.contains(slot)) {
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> adminShopManager.openMainMenu(player));
} else if (HOME_SLOTS.contains(slot)) {
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> TpHomeCommand.home(omcPlayer, null));
} else if (PROFILE_SLOTS.contains(slot)) {
PacketMenuLib.closeMenu(player);
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> new ProfileMenu(player).open());
} else if (RIGHT_ARROW_SLOT == slot) {
PacketMenuLib.openMenu(new Page2(), player);
} else if (SETTINGS_SLOTS.contains(slot)) {
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> SettingsCommand.settings(player));
} else if (MAILBOX_SLOTS.contains(slot)) {
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> MailboxCommand.homeMailbox(player));
} else if (ADVANCEMENTS_SLOT == slot) {
PacketMenuLib.closeMenu(player);
Bukkit.getScheduler().runTask(OMCPlugin.getInstance(), () -> {
ServerPlayer nmsPlayer = ((CraftPlayer) player).getHandle();
ClientboundUpdateAdvancementsPacket packet = MainMenuListener.getAdvancementPackets().get(nmsPlayer.getUUID());
if (packet == null)
return;
nmsPlayer.connection.send(packet);
MainMenuListener.getEnabledAdvancements().add(nmsPlayer.getUUID());
Component message = TranslationManager.translation(
"feature.mainmenu.message.advancements_hint",
Component.keybind("key.advancements").color(NamedTextColor.YELLOW)
).color(NamedTextColor.GREEN);
player.sendActionBar(message);
});
}
}
@Override
public void onInventoryClose(InventoryCloseEvent event) {
}
@Override
public boolean isCursorItemEnabled() {
return false;
}
Comprenez moi que ça devient insupportable de voir ce genre de code xD.
Systeme pas a rewrite, or les méthodes et l'automatisation (car les Page1 et Page2 sont vrm sales)
public class Page1 implements Menu {
}
Comprenez moi que ça devient insupportable de voir ce genre de code xD.
Systeme pas a rewrite, or les méthodes et l'automatisation (car les Page1 et Page2 sont vrm sales)