1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 03:35:51 +00:00

Finish up

This commit is contained in:
Daniel Walsh 2021-01-11 07:38:26 +00:00
parent c280ec26a0
commit 116642fcec
No known key found for this signature in database
GPG Key ID: 91C6D8D7C4011D82
5 changed files with 151 additions and 16 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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());
}
}

View File

@ -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());
}

View File

@ -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;