mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Finish up
This commit is contained in:
parent
c280ec26a0
commit
116642fcec
@ -13,6 +13,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Server;
|
||||
|
@ -3,6 +3,8 @@ package io.github.thebusybiscuit.slimefun4.core.guide;
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@ -32,11 +34,11 @@ public final class SlimefunGuide {
|
||||
return SlimefunPlugin.getRegistry().getGuideLayout(design).getItem();
|
||||
}
|
||||
|
||||
public static void openCheatMenu(Player p) {
|
||||
public static void openCheatMenu(@Nonnull Player p) {
|
||||
openMainMenuAsync(p, SlimefunGuideLayout.CHEAT_SHEET, 1);
|
||||
}
|
||||
|
||||
public static void openGuide(Player p, ItemStack guide) {
|
||||
public static void openGuide(@Nonnull Player p, @Nonnull ItemStack guide) {
|
||||
if (SlimefunUtils.isItemSimilar(guide, getItem(SlimefunGuideLayout.CHEST), true)) {
|
||||
openGuide(p, SlimefunGuideLayout.CHEST);
|
||||
} else if (SlimefunUtils.isItemSimilar(guide, getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) {
|
||||
@ -47,7 +49,7 @@ public final class SlimefunGuide {
|
||||
}
|
||||
}
|
||||
|
||||
public static void openGuide(Player p, SlimefunGuideLayout layout) {
|
||||
public static void openGuide(@Nonnull Player p, @Nonnull SlimefunGuideLayout layout) {
|
||||
if (!SlimefunPlugin.getWorldSettingsService().isWorldEnabled(p.getWorld())) {
|
||||
return;
|
||||
}
|
||||
@ -63,17 +65,20 @@ public final class SlimefunGuide {
|
||||
}
|
||||
}
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
private static void openMainMenuAsync(Player player, SlimefunGuideLayout layout, int selectedPage) {
|
||||
if (!PlayerProfile.get(player, profile -> SlimefunPlugin.runSync(() -> openMainMenu(profile, layout, selectedPage)))) {
|
||||
SlimefunPlugin.getLocalization().sendMessage(player, "messages.opening-guide");
|
||||
}
|
||||
}
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
public static void openMainMenu(PlayerProfile profile, SlimefunGuideLayout layout, int selectedPage) {
|
||||
SlimefunPlugin.getRegistry().getGuideLayout(layout).openMainMenu(profile, selectedPage);
|
||||
}
|
||||
|
||||
public static void openCategory(PlayerProfile profile, Category category, SlimefunGuideLayout layout, int selectedPage) {
|
||||
@ParametersAreNonnullByDefault
|
||||
public static void openCategory(PlayerProfile profile, @Nullable Category category, SlimefunGuideLayout layout, int selectedPage) {
|
||||
if (category == null) {
|
||||
return;
|
||||
}
|
||||
@ -81,6 +86,7 @@ public final class SlimefunGuide {
|
||||
SlimefunPlugin.getRegistry().getGuideLayout(layout).openCategory(profile, category, selectedPage);
|
||||
}
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
public static void openSearch(PlayerProfile profile, String input, boolean survival, boolean addToHistory) {
|
||||
SlimefunGuideImplementation layout = SlimefunPlugin.getRegistry().getGuideLayout(SlimefunGuideLayout.CHEST);
|
||||
|
||||
@ -91,19 +97,28 @@ public final class SlimefunGuide {
|
||||
layout.openSearch(profile, input, addToHistory);
|
||||
}
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
public static void displayItem(PlayerProfile profile, ItemStack item, boolean addToHistory) {
|
||||
SlimefunPlugin.getRegistry().getGuideLayout(SlimefunGuideLayout.CHEST).displayItem(profile, item, 0, addToHistory);
|
||||
}
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
public static void displayItem(PlayerProfile profile, SlimefunItem item, boolean addToHistory) {
|
||||
SlimefunPlugin.getRegistry().getGuideLayout(SlimefunGuideLayout.CHEST).displayItem(profile, item, addToHistory);
|
||||
}
|
||||
|
||||
public static boolean isGuideItem(ItemStack item) {
|
||||
public static boolean isGuideItem(@Nonnull ItemStack item) {
|
||||
return SlimefunUtils.isItemSimilar(item, getItem(SlimefunGuideLayout.CHEST), true)
|
||||
|| SlimefunUtils.isItemSimilar(item, getItem(SlimefunGuideLayout.CHEAT_SHEET), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default layout for the Slimefun guide.
|
||||
* Currently this is only {@link SlimefunGuideLayout#CHEST}.
|
||||
*
|
||||
* @return The default {@link SlimefunGuideLayout}.
|
||||
*/
|
||||
@Nonnull
|
||||
public static SlimefunGuideLayout getDefaultLayout() {
|
||||
return SlimefunGuideLayout.CHEST;
|
||||
}
|
||||
|
@ -0,0 +1,116 @@
|
||||
package io.github.thebusybiscuit.slimefun4.core.guide.options;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon;
|
||||
import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuide;
|
||||
import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
|
||||
import io.github.thebusybiscuit.slimefun4.utils.ChatUtils;
|
||||
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
|
||||
|
||||
class GuideLayoutOption implements SlimefunGuideOption<SlimefunGuideLayout> {
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public SlimefunAddon getAddon() {
|
||||
return SlimefunPlugin.instance();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public NamespacedKey getKey() {
|
||||
return new NamespacedKey(SlimefunPlugin.instance(), "guide_layout");
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Optional<ItemStack> getDisplayItem(@Nonnull Player p, @Nonnull ItemStack guide) {
|
||||
Optional<SlimefunGuideLayout> current = getSelectedOption(p, guide);
|
||||
|
||||
if (current.isPresent()) {
|
||||
SlimefunGuideLayout layout = current.get();
|
||||
ItemStack item = new ItemStack(Material.AIR);
|
||||
|
||||
if (layout == SlimefunGuideLayout.CHEST) {
|
||||
item.setType(Material.CHEST);
|
||||
} else {
|
||||
item.setType(Material.COMMAND_BLOCK);
|
||||
}
|
||||
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(ChatColor.GRAY + "Slimefun Guide Design: " + ChatColor.YELLOW + ChatUtils.humanize(layout.name()));
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add("");
|
||||
lore.add((layout == SlimefunGuideLayout.CHEST ? ChatColor.GREEN : ChatColor.GRAY) + "Chest");
|
||||
|
||||
if (p.hasPermission("slimefun.cheat.items")) {
|
||||
lore.add((layout == SlimefunGuideLayout.CHEAT_SHEET ? ChatColor.GREEN : ChatColor.GRAY) + "Cheat Sheet");
|
||||
}
|
||||
|
||||
lore.add("");
|
||||
lore.add(ChatColor.GRAY + "\u21E8 " + ChatColor.YELLOW + "Click to change your layout");
|
||||
meta.setLore(lore);
|
||||
item.setItemMeta(meta);
|
||||
|
||||
return Optional.of(item);
|
||||
}
|
||||
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(@Nonnull Player p, @Nonnull ItemStack guide) {
|
||||
Optional<SlimefunGuideLayout> current = getSelectedOption(p, guide);
|
||||
|
||||
if (current.isPresent()) {
|
||||
SlimefunGuideLayout next = getNextLayout(p, current.get());
|
||||
setSelectedOption(p, guide, next);
|
||||
}
|
||||
|
||||
SlimefunGuideSettings.openSettings(p, guide);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
private SlimefunGuideLayout getNextLayout(@Nonnull Player p, @Nonnull SlimefunGuideLayout layout) {
|
||||
if (p.hasPermission("slimefun.cheat.items")) {
|
||||
if (layout == SlimefunGuideLayout.CHEST) {
|
||||
return SlimefunGuideLayout.CHEAT_SHEET;
|
||||
}
|
||||
|
||||
return SlimefunGuideLayout.CHEST;
|
||||
} else {
|
||||
return SlimefunGuideLayout.CHEST;
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Optional<SlimefunGuideLayout> getSelectedOption(@Nonnull Player p, @Nonnull ItemStack guide) {
|
||||
for (SlimefunGuideLayout layout : SlimefunGuideLayout.valuesCache) {
|
||||
if (SlimefunUtils.isItemSimilar(guide, SlimefunGuide.getItem(layout), true, false)) {
|
||||
return Optional.of(layout);
|
||||
}
|
||||
}
|
||||
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ParametersAreNonnullByDefault
|
||||
public void setSelectedOption(Player p, ItemStack guide, SlimefunGuideLayout value) {
|
||||
guide.setItemMeta(SlimefunGuide.getItem(value).getItemMeta());
|
||||
}
|
||||
|
||||
}
|
@ -39,6 +39,7 @@ public final class SlimefunGuideSettings {
|
||||
private static final List<SlimefunGuideOption<?>> options = new ArrayList<>();
|
||||
|
||||
static {
|
||||
options.add(new GuideLayoutOption());
|
||||
options.add(new FireworksOption());
|
||||
options.add(new PlayerLanguageOption());
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ public class ElevatorPlate extends SimpleSlimefunItem<BlockUseHandler> {
|
||||
* This is our key for storing the floor name.
|
||||
*/
|
||||
private static final String DATA_KEY = "floor";
|
||||
private static final int GUI_SIZE = 27;
|
||||
|
||||
/**
|
||||
* This is our {@link Set} of currently teleporting {@link Player Players}.
|
||||
@ -122,24 +123,24 @@ public class ElevatorPlate extends SimpleSlimefunItem<BlockUseHandler> {
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
private void openFloorSelector(Block b, List<Block> floors, Player p, int page) {
|
||||
ChestMenu menu = new ChestMenu("Floor Selector");
|
||||
ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocalization().getMessage(p, "machines.ELEVATOR.pick-a-floor"));
|
||||
menu.setEmptySlotsClickable(false);
|
||||
int pages = 1 + (floors.size() / 27);
|
||||
int pages = 1 + (floors.size() / GUI_SIZE);
|
||||
int idx = page == 1 ? 0 : GUI_SIZE * (page - 1);
|
||||
|
||||
for (int i = 0; i < Math.min(27, floors.size()); i++) {
|
||||
// SlimefunPlugin.getLocalization().getMessage(p, "machines.ELEVATOR.pick-a-floor"))
|
||||
Block block = floors.get(i);
|
||||
for (int i = 0; i < Math.min(GUI_SIZE, floors.size() - idx); i++) {
|
||||
Block block = floors.get(idx + i);
|
||||
String floor = ChatColors.color(BlockStorage.getLocationInfo(block.getLocation(), DATA_KEY));
|
||||
|
||||
if (block.getY() == b.getY()) {
|
||||
menu.addItem(i, new CustomItem(
|
||||
Material.END_STONE,
|
||||
Material.COMPASS,
|
||||
ChatColor.GRAY + "> " + (floors.size() - i) + ". " + ChatColor.BLACK + floor,
|
||||
SlimefunPlugin.getLocalization().getMessage(p, "machines.ELEVATOR.current-floor")
|
||||
SlimefunPlugin.getLocalization().getMessage(p, "machines.ELEVATOR.current-floor") + ' ' + ChatColor.WHITE + floor
|
||||
));
|
||||
} else {
|
||||
menu.addItem(i, new CustomItem(
|
||||
Material.END_STONE,
|
||||
Material.PAPER,
|
||||
ChatColor.GRAY + "> " + (floors.size() - i) + ". " + ChatColor.BLACK + floor,
|
||||
SlimefunPlugin.getLocalization().getMessage(p, "machines.ELEVATOR.click-to-teleport") + ' ' + ChatColor.WHITE + floor
|
||||
), (player, slot, itemStack, clickAction) -> {
|
||||
@ -149,13 +150,14 @@ public class ElevatorPlate extends SimpleSlimefunItem<BlockUseHandler> {
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 27; i < 36; i++) {
|
||||
if (i == 28 && pages > 1) {
|
||||
// 0 index so size is the first slot of the last row.
|
||||
for (int i = GUI_SIZE; i < GUI_SIZE + 9; i++) {
|
||||
if (i == GUI_SIZE + 2 && pages > 1 && page != 1) {
|
||||
menu.addItem(i, ChestMenuUtils.getPreviousButton(p, page, pages), (player, i1, itemStack, clickAction) -> {
|
||||
openFloorSelector(b, floors, p, page - 1);
|
||||
return false;
|
||||
});
|
||||
} else if (i == 34 && pages > 1) {
|
||||
} else if (i == GUI_SIZE + 6 && pages > 1 && page != pages) {
|
||||
menu.addItem(i, ChestMenuUtils.getNextButton(p, page, pages), (player, i1, itemStack, clickAction) -> {
|
||||
openFloorSelector(b, floors, p, page + 1);
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user