120 lines
3.7 KiB
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();
|
|
}
|
|
} |