mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Added pagination to Machine Recipes (Resolves #1005)
This commit is contained in:
parent
a31a30b6af
commit
28a4205e8c
@ -1,11 +1,14 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -13,6 +16,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
|
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||||
@ -20,11 +24,13 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenu
|
|||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
|
||||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||||
@ -33,7 +39,7 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
|||||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
||||||
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
||||||
|
|
||||||
public abstract class AGenerator extends SlimefunItem {
|
public abstract class AGenerator extends SlimefunItem implements RecipeDisplayItem {
|
||||||
|
|
||||||
public static Map<Location, MachineFuel> processing = new HashMap<>();
|
public static Map<Location, MachineFuel> processing = new HashMap<>();
|
||||||
public static Map<Location, Integer> progress = new HashMap<>();
|
public static Map<Location, Integer> progress = new HashMap<>();
|
||||||
@ -250,5 +256,40 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
BlockStorage.getInventory(l).replaceExistingItem(slot, inv.getItem(slot));
|
BlockStorage.getInventory(l).replaceExistingItem(slot, inv.getItem(slot));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRecipeSectionLabel() {
|
||||||
|
return "&7\u21E9 Available Types of Fuel \u21E9";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ItemStack> getDisplayRecipes() {
|
||||||
|
List<ItemStack> list = new ArrayList<>();
|
||||||
|
|
||||||
|
for (MachineFuel fuel: recipes) {
|
||||||
|
ItemStack item = fuel.getInput().clone();
|
||||||
|
ItemMeta im = item.getItemMeta();
|
||||||
|
List<String> lore = new ArrayList<>();
|
||||||
|
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &7Lasts " + getTimeLeft(fuel.getTicks() / 2)));
|
||||||
|
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &e\u26A1 &7" + getEnergyProduction() * 2) + " J/s");
|
||||||
|
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &e\u26A1 &7" + DoubleHandler.getFancyDouble((double) fuel.getTicks() * getEnergyProduction()) + " J in total"));
|
||||||
|
im.setLore(lore);
|
||||||
|
item.setItemMeta(im);
|
||||||
|
list.add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (list.size() % 2 != 0) list.add(null);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getTimeLeft(int seconds) {
|
||||||
|
String timeleft = "";
|
||||||
|
final int minutes = (int) (seconds / 60L);
|
||||||
|
if (minutes > 0) {
|
||||||
|
timeleft += minutes + "m ";
|
||||||
|
}
|
||||||
|
seconds -= minutes * 60;
|
||||||
|
return "&7" + timeleft + seconds + "s";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
@ -9,6 +11,7 @@ import java.util.Set;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -16,17 +19,20 @@ import org.bukkit.block.BlockFace;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
|
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
|
||||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
@ -38,7 +44,7 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
|||||||
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
||||||
import me.mrCookieSlime.Slimefun.holograms.ReactorHologram;
|
import me.mrCookieSlime.Slimefun.holograms.ReactorHologram;
|
||||||
|
|
||||||
public abstract class AReactor extends SlimefunItem {
|
public abstract class AReactor extends SlimefunItem implements RecipeDisplayItem {
|
||||||
|
|
||||||
public static Map<Location, MachineFuel> processing = new HashMap<>();
|
public static Map<Location, MachineFuel> processing = new HashMap<>();
|
||||||
public static Map<Location, Integer> progress = new HashMap<>();
|
public static Map<Location, Integer> progress = new HashMap<>();
|
||||||
@ -442,5 +448,40 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
if (BlockStorage.check(portL, "REACTOR_ACCESS_PORT")) return BlockStorage.getInventory(portL);
|
if (BlockStorage.check(portL, "REACTOR_ACCESS_PORT")) return BlockStorage.getInventory(portL);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRecipeSectionLabel() {
|
||||||
|
return "&7\u21E9 Available Types of Fuel \u21E9";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ItemStack> getDisplayRecipes() {
|
||||||
|
List<ItemStack> list = new ArrayList<>();
|
||||||
|
|
||||||
|
for (MachineFuel fuel: recipes) {
|
||||||
|
ItemStack item = fuel.getInput().clone();
|
||||||
|
ItemMeta im = item.getItemMeta();
|
||||||
|
List<String> lore = new ArrayList<>();
|
||||||
|
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &7Lasts " + getTimeLeft(fuel.getTicks() / 2)));
|
||||||
|
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &e\u26A1 &7" + getEnergyProduction() * 2) + " J/s");
|
||||||
|
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &e\u26A1 &7" + DoubleHandler.getFancyDouble((double) fuel.getTicks() * getEnergyProduction()) + " J in total"));
|
||||||
|
im.setLore(lore);
|
||||||
|
item.setItemMeta(im);
|
||||||
|
list.add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (list.size() % 2 != 0) list.add(null);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getTimeLeft(int seconds) {
|
||||||
|
String timeleft = "";
|
||||||
|
final int minutes = (int) (seconds / 60L);
|
||||||
|
if (minutes > 0) {
|
||||||
|
timeleft += minutes + "m ";
|
||||||
|
}
|
||||||
|
seconds -= minutes * 60;
|
||||||
|
return "&7" + timeleft + seconds + "s";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,5 +8,9 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
public interface RecipeDisplayItem {
|
public interface RecipeDisplayItem {
|
||||||
|
|
||||||
List<ItemStack> getDisplayRecipes();
|
List<ItemStack> getDisplayRecipes();
|
||||||
|
|
||||||
|
default String getRecipeSectionLabel() {
|
||||||
|
return "&7\u21E9 Recipes made in this Machine \u21E9";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.bukkit.inventory.Recipe;
|
import org.bukkit.inventory.Recipe;
|
||||||
import org.bukkit.inventory.ShapedRecipe;
|
import org.bukkit.inventory.ShapedRecipe;
|
||||||
import org.bukkit.inventory.ShapelessRecipe;
|
import org.bukkit.inventory.ShapelessRecipe;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
import org.bukkit.inventory.meta.SkullMeta;
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.PlayerRunnable;
|
import me.mrCookieSlime.CSCoreLibPlugin.PlayerRunnable;
|
||||||
@ -39,10 +38,6 @@ import me.mrCookieSlime.Slimefun.Objects.LockedCategory;
|
|||||||
import me.mrCookieSlime.Slimefun.Objects.Research;
|
import me.mrCookieSlime.Slimefun.Objects.Research;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory;
|
import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
import me.mrCookieSlime.Slimefun.api.GuideHandler;
|
import me.mrCookieSlime.Slimefun.api.GuideHandler;
|
||||||
@ -947,79 +942,73 @@ public final class SlimefunGuide {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (sfItem != null) {
|
if (sfItem instanceof RecipeDisplayItem) {
|
||||||
if (sfItem instanceof RecipeDisplayItem && !((RecipeDisplayItem) sfItem).getDisplayRecipes().isEmpty()) {
|
displayRecipes(menu, (RecipeDisplayItem) sfItem, 0);
|
||||||
for (int i = 27; i < 36; i++) {
|
|
||||||
menu.addItem(i, new CustomItem(Material.LIME_STAINED_GLASS_PANE, SlimefunItem.getByItem(item) instanceof SlimefunMachine ? "&7\u21E9 Recipes made in this Machine \u21E9": " "));
|
|
||||||
menu.addMenuClickHandler(i,
|
|
||||||
(pl, slot, itemstack, action) -> false
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<ItemStack> recipes = ((RecipeDisplayItem) SlimefunItem.getByItem(item)).getDisplayRecipes();
|
|
||||||
int recipeSize = recipes.size();
|
|
||||||
if (recipeSize > 18) recipeSize = 18;
|
|
||||||
int inputs = -1;
|
|
||||||
int outputs = -1;
|
|
||||||
|
|
||||||
for (int i = 0; i < recipeSize; i++) {
|
|
||||||
int slot = 36;
|
|
||||||
if (i % 2 == 1) {
|
|
||||||
slot = slot + 9;
|
|
||||||
outputs++;
|
|
||||||
}
|
|
||||||
else inputs++;
|
|
||||||
|
|
||||||
int addition = (i % 2 == 0 ? inputs: outputs);
|
|
||||||
|
|
||||||
menu.addItem(slot + addition, recipes.get(i).clone());
|
|
||||||
menu.addMenuClickHandler(slot + addition, (pl, slotn, itemstack, action) -> {
|
|
||||||
displayItem(pl, itemstack, true, book, 0);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (sfItem instanceof AGenerator) {
|
|
||||||
int slot = 27;
|
|
||||||
for (MachineFuel fuel: ((AGenerator) sfItem).getFuelTypes()) {
|
|
||||||
if (slot >= 54) break;
|
|
||||||
ItemStack fItem = fuel.getInput().clone();
|
|
||||||
ItemMeta im = fItem.getItemMeta();
|
|
||||||
List<String> lore = new ArrayList<>();
|
|
||||||
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &7Lasts " + getTimeLeft(fuel.getTicks() / 2)));
|
|
||||||
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &e\u26A1 &7" + (((AGenerator) sfItem).getEnergyProduction() * 2) + " J/s"));
|
|
||||||
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &e\u26A1 &7" + DoubleHandler.getFancyDouble((double) fuel.getTicks() * ((AGenerator) sfItem).getEnergyProduction()) + " J in total"));
|
|
||||||
im.setLore(lore);
|
|
||||||
fItem.setItemMeta(im);
|
|
||||||
menu.addItem(slot, fItem);
|
|
||||||
menu.addMenuClickHandler(slot,
|
|
||||||
(pl, slotn, itemstack, action) -> false
|
|
||||||
);
|
|
||||||
slot++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (sfItem instanceof AReactor) {
|
|
||||||
int slot = 27;
|
|
||||||
for (MachineFuel fuel: ((AReactor) sfItem).getFuelTypes()) {
|
|
||||||
if (slot >= 54) break;
|
|
||||||
ItemStack fItem = fuel.getInput().clone();
|
|
||||||
ItemMeta im = fItem.getItemMeta();
|
|
||||||
List<String> lore = new ArrayList<>();
|
|
||||||
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &7Lasts " + getTimeLeft(fuel.getTicks() / 2)));
|
|
||||||
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &e\u26A1 &7" + (((AReactor) sfItem).getEnergyProduction() * 2) + " J/s"));
|
|
||||||
lore.add(ChatColor.translateAlternateColorCodes('&', "&8\u21E8 &e\u26A1 &7" + DoubleHandler.getFancyDouble((double) fuel.getTicks() * ((AReactor) sfItem).getEnergyProduction()) + " J in total"));
|
|
||||||
im.setLore(lore);
|
|
||||||
fItem.setItemMeta(im);
|
|
||||||
menu.addItem(slot, fItem);
|
|
||||||
menu.addMenuClickHandler(slot, (pl, slotn, itemstack, action) -> false);
|
|
||||||
slot++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.open(p);
|
menu.open(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void displayRecipes(ChestMenu menu, RecipeDisplayItem sfItem, int page) {
|
||||||
|
List<ItemStack> recipes = sfItem.getDisplayRecipes();
|
||||||
|
|
||||||
|
if (!recipes.isEmpty()) {
|
||||||
|
menu.addItem(53, null);
|
||||||
|
|
||||||
|
if (page == 0) {
|
||||||
|
for (int i = 27; i < 36; i++) {
|
||||||
|
menu.replaceExistingItem(i, new CustomItem(Material.GRAY_STAINED_GLASS_PANE, sfItem.getRecipeSectionLabel()));
|
||||||
|
menu.addMenuClickHandler(i, (pl, slot, itemstack, action) -> false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
menu.replaceExistingItem(28, new CustomItem(Material.LIME_STAINED_GLASS_PANE, "&a\u21E6 Previous Page"));
|
||||||
|
menu.addMenuClickHandler(28, (pl, slot, itemstack, action) -> {
|
||||||
|
displayRecipes(menu, sfItem, page - 1);
|
||||||
|
pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recipes.size() > (18 * (page + 1))) {
|
||||||
|
menu.replaceExistingItem(34, new CustomItem(Material.LIME_STAINED_GLASS_PANE, "&aNext Page \u21E8"));
|
||||||
|
menu.addMenuClickHandler(34, (pl, slot, itemstack, action) -> {
|
||||||
|
displayRecipes(menu, sfItem, page + 1);
|
||||||
|
pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
menu.replaceExistingItem(34, new CustomItem(Material.GRAY_STAINED_GLASS_PANE, sfItem.getRecipeSectionLabel()));
|
||||||
|
menu.addMenuClickHandler(34, (pl, slot, itemstack, action) -> false);
|
||||||
|
}
|
||||||
|
|
||||||
|
int inputs = 36;
|
||||||
|
int outputs = 45;
|
||||||
|
|
||||||
|
for (int i = 0; i < 18; i++) {
|
||||||
|
int slot = i % 2 == 0 ? inputs++: outputs++;
|
||||||
|
|
||||||
|
if ((i + (page * 18)) < recipes.size()) {
|
||||||
|
if (page == 0) {
|
||||||
|
menu.replaceExistingItem(slot, recipes.get(i + (page * 18)));
|
||||||
|
menu.addMenuClickHandler(slot, (pl, s, itemstack, action) -> {
|
||||||
|
displayItem(pl, itemstack, true, false, 0);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
menu.replaceExistingItem(slot, recipes.get(i + (page * 18)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
menu.replaceExistingItem(slot, null);
|
||||||
|
menu.addMenuClickHandler(slot, (pl, s, itemstack, action) -> false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static Map<UUID, LinkedList<Object>> getHistory() {
|
private static Map<UUID, LinkedList<Object>> getHistory() {
|
||||||
return SlimefunPlugin.getUtilities().guideHistory;
|
return SlimefunPlugin.getUtilities().guideHistory;
|
||||||
}
|
}
|
||||||
@ -1027,14 +1016,4 @@ public final class SlimefunGuide {
|
|||||||
public static void clearHistory(UUID uuid) {
|
public static void clearHistory(UUID uuid) {
|
||||||
getHistory().remove(uuid);
|
getHistory().remove(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getTimeLeft(int seconds) {
|
|
||||||
String timeleft = "";
|
|
||||||
final int minutes = (int) (seconds / 60L);
|
|
||||||
if (minutes > 0) {
|
|
||||||
timeleft += minutes + "m ";
|
|
||||||
}
|
|
||||||
seconds -= minutes * 60;
|
|
||||||
return "&7" + timeleft + seconds + "s";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user