/* * Copyright 2015 Demigods RPG * Copyright 2015 Alexander Chauncey * Copyright 2015 Alex Bennett * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.demigodsrpg.gui; import com.demigodsrpg.DGData; import com.demigodsrpg.model.PlayerModel; import com.demigodsrpg.model.ShrineModel; import com.demigodsrpg.util.InventoryGUI; import com.demigodsrpg.util.SlotFunction; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; public class ShrineGUI implements InventoryGUI { public static final String INVENTORY_NAME = "Shrine Select"; private final List<Inventory> INVENTORY_LIST; private final ImmutableMap<Integer, String> FUNCTION_MAP; public ShrineGUI(final Player player) { // Player model PlayerModel model = DGData.PLAYER_R.fromPlayer(player); // FUNCTION MAP ImmutableMap.Builder<Integer, String> builder = ImmutableMap.builder(); for (int i = 0; i < 18; i++) { builder.put(i, SlotFunction.WARP); } builder.put(25, SlotFunction.PREVIOUS_PAGE); builder.put(26, SlotFunction.NEXT_PAGE); FUNCTION_MAP = builder.build(); // INVENTORY LIST INVENTORY_LIST = new ArrayList<>(); List<ItemStack> items = new ArrayList<>(); int count = 0, icount = 0; Iterator<ShrineModel> shrines = model.getShrineWarps().stream().map(DGData.SHRINE_R::fromId).collect(Collectors.toSet()).iterator(); while (shrines.hasNext()) { ShrineModel shrine = shrines.next(); final String name = shrine.getPersistentId(); final String type = shrine.getShrineType().name(); final String owner = DGData.PLAYER_R.fromId(shrine.getOwnerMojangId()).getLastKnownName(); items.add(count, new ItemStack(owner.equals(model.getLastKnownName()) ? Material.ENCHANTED_BOOK : Material.WRITTEN_BOOK, 1) { { ItemMeta meta = getItemMeta(); meta.setDisplayName(name); List<String> lore = Lists.newArrayList(ChatColor.AQUA + type, ChatColor.YELLOW + "Owner: " + ChatColor.LIGHT_PURPLE + owner); meta.setLore(lore); setItemMeta(meta); } }); count++; if (count % 19 == 0 || !shrines.hasNext()) { Inventory inventory = Bukkit.createInventory(player, 27, INVENTORY_NAME + " " + icount); for (int i = 0; i < items.size(); i++) { inventory.setItem(i, items.get(i)); } if (icount > 0) { inventory.setItem(25, new ItemStack(Material.PAPER, 1) { { ItemMeta meta = getItemMeta(); meta.setDisplayName(ChatColor.GOLD + "< PREV"); setItemMeta(meta); } }); } if (shrines.hasNext()) { inventory.setItem(26, new ItemStack(Material.PAPER, 1) { { ItemMeta meta = getItemMeta(); meta.setDisplayName(ChatColor.GOLD + "NEXT >"); setItemMeta(meta); } }); } items.clear(); count = 0; INVENTORY_LIST.add(inventory); icount++; } } } @Override public Inventory getInventory(Integer... inventory) { if (INVENTORY_LIST.size() < 1) { return null; } if (inventory.length == 0) { return INVENTORY_LIST.get(0); } return INVENTORY_LIST.get(inventory[0]); } @Override public String getFunction(int slot) { if (FUNCTION_MAP.containsKey(slot)) { return FUNCTION_MAP.get(slot); } return SlotFunction.NO_FUNCTION; } }