Core/src/main/java/eu/univento/core/api/items/ScrollingInventory.java

120 lines
3.7 KiB
Java

package eu.univento.core.api.items;
import eu.univento.core.Core;
import eu.univento.core.api.player.CustomPlayer;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.util.ArrayList;
public class ScrollingInventory implements Listener{
private final Inventory inv;
private final ArrayList<ItemStack> items = new ArrayList<>();
private ItemStack next;
private ItemStack back;
private int side = 0;
private int rows = 4;
private final CustomPlayer player;
public ScrollingInventory(CustomPlayer player, String name){
this.player = player;
int var = 1;
for(int i = 0; i > 27 * 9; i = i + 9)
var++;
inv = Bukkit.createInventory(player, var * 9 + 9, name);
Bukkit.getPluginManager().registerEvents(this, Core.getInstance());
this.rows = 27;
side = 0;
}
public void addItem(ItemStack item){
items.add(item);
}
public void removeItem(ItemStack item){
items.remove(item);
}
private void clearItems(){
for(ItemStack is : inv.getContents()){
inv.remove(is);
}
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent e){
if(e.getInventory().equals(inv)){
if(inv.getViewers().size() == 0)
HandlerList.unregisterAll(this);
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e){
if(e.getInventory().equals(inv)){
e.setCancelled(true);
if(e.getCurrentItem() != null){
if(e.getCurrentItem().equals(back)) {
setDisplaySide(side - 1);
}
else if(e.getCurrentItem().equals(next)) {
setDisplaySide(side + 1);
}
}
}
}
private void setDisplaySide(int i) {
clearItems();
if(items.size() - side * rows > (side + 1) * rows)
setNext();
if(side > 0)
setBack();
int from = side * rows;
int to = (side + 1) * rows;
int a = 0;
for(ItemStack is : items.subList(from, (to > items.size() ? items.size() : to))){
inv.setItem(a, is);
a++;
}
}
private void setNext(){
if(next == null){
next = new ItemStack(Material.TIPPED_ARROW);
PotionMeta nextMeta = (PotionMeta) next.getItemMeta();
nextMeta.addCustomEffect(new PotionEffect(PotionEffectType.LUCK, 5 * 20, 1), true);
nextMeta.setDisplayName("§aVor");
next.setItemMeta(nextMeta);
}
inv.setItem(inv.getSize()-2, next);
}
private void setBack(){
if(back == null){
back = new ItemStack(Material.TIPPED_ARROW);
PotionMeta backMeta = (PotionMeta) back.getItemMeta();
backMeta.addCustomEffect(new PotionEffect(PotionEffectType.HEAL, 5 * 20, 1), true);
backMeta.setDisplayName("§cZurück");
back.setItemMeta(backMeta);
}
inv.setItem(inv.getSize()-8, next);
}
public void openInventory(){
setDisplaySide(0);
player.openInventory(inv);
}
public void setNextItem(ItemStack item){
next = item;
setNext();
}
public void setBackItem(ItemStack item){
back = item;
setBack();
}
}