Compare commits

...

2 Commits

Author SHA1 Message Date
ScriptCat
22e5982e9e testing render items in inventory 2025-07-28 22:14:52 +03:00
ScriptCat
02d73bb7c5 coming to render items in menu 2025-07-28 18:27:58 +03:00
15 changed files with 254 additions and 114 deletions

View File

@ -3,23 +3,24 @@ package tokarotik.giftapi;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import tokarotik.giftapi.NBT.cache.CacheManager;
import tokarotik.giftapi.NBT.pages.PagesManager;
import tokarotik.giftapi.inventory.InventoryManager; import tokarotik.giftapi.inventory.InventoryManager;
public class APIManager { public class APIManager implements Listener {
public final Main plugin; public final Main plugin;
private final InventoryManager inventoryManager; private final InventoryManager inventoryManager;
public APIManager(Main plugin, FileConfiguration config) public APIManager(Main plugin, FileConfiguration config, int inventory_slots)
{ {
this.plugin = plugin; this.plugin = plugin;
this.inventoryManager = new InventoryManager( this.inventoryManager = new InventoryManager(
plugin.getCacheManager(), plugin.getCacheManager(),
inventory_slots,
ConfigPaths.getWithColor(config, ConfigPaths.GUINAME, "GiftAPI Menu"), ConfigPaths.getWithColor(config, ConfigPaths.GUINAME, "GiftAPI Menu"),
ConfigPaths.getWithColor(config, ConfigPaths.GUIRIGHT, "<<right"), ConfigPaths.getWithColor(config, ConfigPaths.GUIRIGHT, "<<right"),
ConfigPaths.getWithColor(config, ConfigPaths.GUILEFT, "left>>"), ConfigPaths.getWithColor(config, ConfigPaths.GUILEFT, "left>>"),
@ -29,25 +30,15 @@ public class APIManager {
Bukkit.getPluginManager().registerEvents(this.inventoryManager, this.plugin); Bukkit.getPluginManager().registerEvents(this.inventoryManager, this.plugin);
} }
public synchronized boolean add(Player player, ItemStack item) public synchronized void add(Player player, ItemStack item) { this.inventoryManager.add(player, item); }
{
CacheManager cache = plugin.getCacheManager();
PagesManager pages = cache.load(player);
pages.add(item); public synchronized void remove(Player player, ItemStack item) { this.inventoryManager.remove(player, item); }
cache.save(player, pages);
return false;
}
public synchronized boolean remove(Player player, ItemStack item)
{
return false;
}
public synchronized void openInventory(Player player) public synchronized void openInventory(Player player)
{ {
this.inventoryManager.openCustomInventory(player); this.inventoryManager.openCustomInventory(player);
} }
@EventHandler
public void onInventoryClick(InventoryClickEvent event) { this.inventoryManager.onInventoryClick(event); }
} }

View File

@ -8,25 +8,26 @@ import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import tokarotik.giftapi.NBT.cache.CacheManager; import tokarotik.giftapi.cache.CacheManager;
import tokarotik.giftapi.dev.AddCommand;
import tokarotik.giftapi.dev.GiftCommand; import tokarotik.giftapi.dev.GiftCommand;
import java.util.concurrent.CompletableFuture;
public class Main extends JavaPlugin implements Listener public class Main extends JavaPlugin implements Listener
{ {
private CacheManager cacheManager; private CacheManager cacheManager;
private APIManager apiManager; private APIManager apiManager;
private final int inventory_slots = 54;
@Override @Override
public void onEnable() public void onEnable()
{ {
saveDefaultConfig(); saveDefaultConfig();
cacheManager = new CacheManager(54); cacheManager = new CacheManager(inventory_slots);
apiManager = new APIManager(this, getConfig()); apiManager = new APIManager(this, getConfig(), inventory_slots);
this.getCommand("gift").setExecutor(new GiftCommand(apiManager, this)); // DELETE FOR RELEASE this.getCommand("gift").setExecutor(new GiftCommand(apiManager, this)); // DELETE FOR RELEASE
this.getCommand("add").setExecutor(new AddCommand(apiManager, this)); // DELETE FOR RELEASE
getServer().getPluginManager().registerEvents(this, this); // bullshit getServer().getPluginManager().registerEvents(this, this); // bullshit
@ -38,7 +39,6 @@ public class Main extends JavaPlugin implements Listener
{ {
getLogger().info("Saving GiftApi..."); getLogger().info("Saving GiftApi...");
cacheManager.disable(); cacheManager.disable();
//Bukkit.getScheduler().runTaskAsynchronously(this, () -> cacheManager.disable());
getLogger().info("GiftAPI disabled!"); getLogger().info("GiftAPI disabled!");
} }
@ -51,17 +51,22 @@ public class Main extends JavaPlugin implements Listener
// if failed to add, return false // if failed to add, return false
// if successfully added, return true // if successfully added, return true
public CompletableFuture<Boolean> addAsync(Player player, ItemStack item) { public void add(Player player, ItemStack item) {
return CompletableFuture.supplyAsync(() -> apiManager.add(player, item)); Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
apiManager.add(player, item);
});
} }
// if failed to remove item, return false // if failed to remove item, return false
// if successfully removed item, return true // if successfully removed item, return true
public CompletableFuture<Boolean> removeAsync(Player player, ItemStack item) { public void remove(Player player, ItemStack item)
return CompletableFuture.supplyAsync(() -> apiManager.remove(player, item)); {
Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
apiManager.remove(player, item);
});
} }
// will open inventory GiftAPI // will open inventory GiftAPI
public void openGUIAsync(Player player) public void openGUI(Player player)
{ {
Bukkit.getScheduler().runTaskAsynchronously(this, () -> { Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
apiManager.openInventory(player); apiManager.openInventory(player);

View File

@ -1,4 +1,4 @@
package tokarotik.giftapi.NBT.cache; package tokarotik.giftapi.NBT.nbt;
import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.EntityPlayer;
import net.minecraft.server.v1_6_R3.NBTCompressedStreamTools; import net.minecraft.server.v1_6_R3.NBTCompressedStreamTools;

View File

@ -1,4 +1,4 @@
package tokarotik.giftapi.NBT.cache; package tokarotik.giftapi.NBT.nbt;
import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.EntityPlayer;
import net.minecraft.server.v1_6_R3.NBTTagCompound; import net.minecraft.server.v1_6_R3.NBTTagCompound;

View File

@ -6,27 +6,32 @@ import org.bukkit.inventory.ItemStack;
public class PagesManager public class PagesManager
{ {
private NBTTagList tag; private NBTTagList tag;
private int current_page = 0; private int current_page = 0;
private int count_pages = 0;
public PagesManager(NBTTagList tag) private final int items_slots;
public PagesManager(NBTTagList tag, int items_slots)
{ {
this.items_slots = items_slots;
this.tag = tag; this.tag = tag;
setCountPages();
} }
public PagesManager() public PagesManager(int items_slots)
{ {
this.items_slots = items_slots;
this.tag = new NBTTagList("giftapi"); this.tag = new NBTTagList("giftapi");
} }
public void add(ItemStack item) public void add(ItemStack item)
{ {
PagesUtil.add(item, this.tag); PagesUtil.add(item, this.tag);
setCountPages();
} }
public void remove(ItemStack item) public void remove(ItemStack item)
{ {
PagesUtil.remove(item, this.tag); this.tag = PagesUtil.remove(item, this.tag);
setCountPages();
} }
public NBTTagList getTag() { return this.tag; } public NBTTagList getTag() { return this.tag; }
@ -34,10 +39,22 @@ public class PagesManager
public void setTag(NBTTagList tag) public void setTag(NBTTagList tag)
{ {
this.tag = tag; this.tag = tag;
setCountPages();
} }
public int getIntCurrentPage() { return this.current_page; } public ItemStack[] getList() { return PagesUtil.reverse( PagesUtil.getRawList(this.tag) ); }
public void setIntCurrentPage(int current_page) { this.current_page = current_page; } public int getCurrentPage() { return this.current_page; }
public void setCurrentPage(int current_page) { this.current_page = current_page; }
public int getCountPages() { return this.count_pages; }
private void setCountPages() {
int tag_size = this.tag.size();
if (tag_size == 0) { this.count_pages = 0; }
this.count_pages = Math.floorDiv(tag_size, this.items_slots);
}
} }

View File

@ -5,7 +5,10 @@ import net.minecraft.server.v1_6_R3.NBTTagList;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import tokarotik.giftapi.NBT.item.ItemLoad; import tokarotik.giftapi.NBT.item.ItemLoad;
import tokarotik.giftapi.NBT.item.ItemNBT; import tokarotik.giftapi.NBT.item.ItemNBT;
import tokarotik.giftapi.NBT.pages.page.Page;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class PagesUtil public class PagesUtil
{ {
@ -19,9 +22,7 @@ public class PagesUtil
public static NBTTagList remove(ItemStack item, NBTTagList tag) public static NBTTagList remove(ItemStack item, NBTTagList tag)
{ {
ItemStack[] new_list = addAllExtraOne(tag, item); ItemStack[] new_list = addAllExtraOne(tag, item);
NBTTagList list = itemStackListToNBTList(new_list); return itemStackListToNBTList(new_list);
return list;
} }
public static ItemStack[] addAllExtraOne(NBTTagList tag, ItemStack item) public static ItemStack[] addAllExtraOne(NBTTagList tag, ItemStack item)
@ -69,28 +70,11 @@ public class PagesUtil
return list; return list;
} }
public static boolean isUpdatedTag(NBTTagList tag, NBTTagList new_tag) public static ItemStack[] reverse(ItemStack[] list)
{ {
if (!new_tag.equals(tag)) { return false; } List<ItemStack> array = Arrays.asList(list);
return true; Collections.reverse(array);
}
public static NBTTagList updateTag(Page page, NBTTagList tag) return (ItemStack[]) array.toArray();
{
Integer page_number = page.getNumber();
if (page_number == null) { return tag; }
NBTTagList new_tag = new NBTTagList();
for (int i = 0; i < tag.size(); i++)
{
NBTTagList pageNBT = (NBTTagList) tag.get(i);
if (page_number == i) { pageNBT = page.getTag(); }
new_tag.add(pageNBT);
}
return new_tag;
} }
} }

View File

@ -1,7 +1,9 @@
package tokarotik.giftapi.NBT.cache; package tokarotik.giftapi.cache;
import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.EntityPlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import tokarotik.giftapi.NBT.nbt.BasicNBT;
import tokarotik.giftapi.NBT.nbt.WorldNBTSynchronizer;
import tokarotik.giftapi.NBT.pages.PagesManager; import tokarotik.giftapi.NBT.pages.PagesManager;
import java.util.Map; import java.util.Map;
@ -9,10 +11,12 @@ import java.util.Map;
public class CacheManager public class CacheManager
{ {
private final CacheUtil cacheUtil; private final CacheUtil cacheUtil;
private final int inventory_slots;
public CacheManager(int max_stack) public CacheManager(int inventory_slots)
{ {
cacheUtil = new CacheUtil(max_stack); this.inventory_slots = inventory_slots;
cacheUtil = new CacheUtil(inventory_slots);
} }
public synchronized PagesManager load(Player player) { public synchronized PagesManager load(Player player) {
@ -40,7 +44,7 @@ public class CacheManager
} }
// Fallback to new empty PageManager // Fallback to new empty PageManager
PagesManager defaultPages = new PagesManager(); PagesManager defaultPages = new PagesManager(this.inventory_slots);
worldMap.put(player, defaultPages); worldMap.put(player, defaultPages);
System.out.print("New empty PageManager"); System.out.print("New empty PageManager");

View File

@ -1,4 +1,4 @@
package tokarotik.giftapi.NBT.cache; package tokarotik.giftapi.cache;
import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.EntityPlayer;
import net.minecraft.server.v1_6_R3.NBTTagCompound; import net.minecraft.server.v1_6_R3.NBTTagCompound;
@ -6,6 +6,7 @@ import net.minecraft.server.v1_6_R3.NBTTagList;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import tokarotik.giftapi.NBT.nbt.BasicNBT;
import tokarotik.giftapi.NBT.pages.PagesManager; import tokarotik.giftapi.NBT.pages.PagesManager;
import java.util.HashMap; import java.util.HashMap;
@ -17,11 +18,11 @@ public class CacheUtil
public final Map<Player, PagesManager> nether_map = new HashMap<>(); public final Map<Player, PagesManager> nether_map = new HashMap<>();
public final Map<Player, PagesManager> end_map = new HashMap<>(); public final Map<Player, PagesManager> end_map = new HashMap<>();
public final int max_stack; public final int inventory_slots;
public CacheUtil(int max_stack) public CacheUtil(int inventory_slots)
{ {
this.max_stack = max_stack; this.inventory_slots = inventory_slots;
} }
public synchronized void saveHard(Player player) public synchronized void saveHard(Player player)
@ -31,8 +32,6 @@ public class CacheUtil
String nameWorld = world.getName(); String nameWorld = world.getName();
Map<Player, PagesManager> map = this.getWorlMap(nameWorld); Map<Player, PagesManager> map = this.getWorlMap(nameWorld);
System.out.println("Map " + map.toString() + ". World: " + nameWorld);
if (map == null) { continue; } if (map == null) { continue; }
PagesManager pages = map.get(player); PagesManager pages = map.get(player);
@ -74,7 +73,7 @@ public class CacheUtil
NBTTagCompound compound = new BasicNBT(world).readPlayerNBT(entityPlayer); NBTTagCompound compound = new BasicNBT(world).readPlayerNBT(entityPlayer);
NBTTagList giftList = compound.getList("giftapi"); NBTTagList giftList = compound.getList("giftapi");
PagesManager pagesManager = new PagesManager(giftList); PagesManager pagesManager = new PagesManager(giftList, this.inventory_slots);
worldMap.put(player, pagesManager); worldMap.put(player, pagesManager);
return pagesManager; return pagesManager;
} }

View File

@ -0,0 +1,44 @@
package tokarotik.giftapi.dev;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import tokarotik.giftapi.APIManager;
import tokarotik.giftapi.Main;
import java.util.Random;
public class AddCommand implements CommandExecutor {
private final APIManager apiManager;
private final Main plugin;
public AddCommand(APIManager APIManager, Main plugin) {
this.apiManager = APIManager;
this.plugin = plugin;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) {
Player player;
if (!(sender instanceof Player)) {
sender.sendMessage("This command can use only player!");
player = Bukkit.getOnlinePlayers()[0];
return true;
} else {
player = (Player) sender;
}
Random rand = new Random();
ItemStack item = new ItemStack(rand.nextInt(420) + 1);
this.plugin.add(player, item);
return true;
}
}

View File

@ -1,13 +1,11 @@
package tokarotik.giftapi.dev; package tokarotik.giftapi.dev;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import tokarotik.giftapi.APIManager; import tokarotik.giftapi.APIManager;
import tokarotik.giftapi.Main; import tokarotik.giftapi.Main;
@ -25,20 +23,25 @@ public class GiftCommand implements CommandExecutor {
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) { public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) {
Player player;
if (!(sender instanceof Player)) if (!(sender instanceof Player))
{ {
sender.sendMessage("This command can use only player!"); sender.sendMessage("This command can use only player!");
player = Bukkit.getOnlinePlayers()[0];
return true; return true;
} }
ItemStack item = new ItemStack(Material.BRICK, 1); else
{
player = (Player) sender;
}
Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> { System.out.println( plugin.getCacheManager().load(player).getTag() );
plugin.getCacheManager().load((Player) sender);
apiManager.add((Player) sender, item); this.plugin.openGUI(player);
apiManager.openInventory((Player) sender);
});
return true; return true;
} }

View File

@ -1,57 +1,61 @@
package tokarotik.giftapi.inventory; package tokarotik.giftapi.inventory;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
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 tokarotik.giftapi.cache.CacheManager;
import tokarotik.giftapi.NBT.cache.CacheManager; import tokarotik.giftapi.NBT.pages.PagesManager;
public class InventoryManager implements Listener { public class InventoryManager implements Listener
{
private final int countSlots = 54;
private final String nameGUI; private final String nameGUI;
private final int inventory_slots;
private final int items_slots;
private final CacheManager cacheManager; private final CacheManager cacheManager;
private final InventoryUtil inventoryUtil; private final InventoryUtil inventoryUtil;
public InventoryManager(CacheManager cacheManager, String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit) public InventoryManager(CacheManager cacheManager, int inventory_slots, String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit)
{ {
this.nameGUI = nameGUI; this.nameGUI = nameGUI;
this.inventory_slots = inventory_slots;
this.items_slots = inventory_slots - 9;
this.cacheManager = cacheManager; this.cacheManager = cacheManager;
inventoryUtil = new InventoryUtil(nameGUI, nameArrowRight, nameArrowLeft, nameExit); inventoryUtil = new InventoryUtil(cacheManager, nameGUI, nameArrowRight, nameArrowLeft, nameExit, this.items_slots);
} }
@EventHandler @EventHandler
public void onInventoryClick(InventoryClickEvent event) public synchronized void onInventoryClick(InventoryClickEvent event)
{ {
this.inventoryUtil.onInventoryClick(event); this.inventoryUtil.onInventoryClick(event);
} }
public synchronized boolean add(Player player, ItemStack item) public synchronized void add(Player player, ItemStack item)
{ {
return false; PagesManager pages = this.cacheManager.load(player);
pages.add(item);
} }
public synchronized boolean remove(Player player, ItemStack item) public synchronized void remove(Player player, ItemStack item)
{ {
return false; PagesManager pages = this.cacheManager.load(player);
pages.remove(item);
} }
public synchronized void openCustomInventory(Player player) public synchronized void openCustomInventory(Player player)
{ {
Inventory inventory = Bukkit.createInventory(null, this.countSlots, this.nameGUI); Inventory inventory = Bukkit.createInventory(null, this.inventory_slots, this.nameGUI);
this.inventoryUtil.updateInventory(inventory);
this.inventoryUtil.updateInventory(inventory, player);
player.openInventory(inventory); player.openInventory(inventory);
} }
public int getItemsSlots() { return this.items_slots; }
} }

View File

@ -6,21 +6,29 @@ 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 org.bukkit.inventory.meta.ItemMeta;
import tokarotik.giftapi.cache.CacheManager;
import tokarotik.giftapi.NBT.pages.PagesManager;
import tokarotik.giftapi.inventory.inventoryitems.InventoryItems;
public class InventoryUtil public class InventoryUtil
{ {
private final CacheManager cacheManager;
private final InventoryItems inventoryItems;
private final String nameGUI; private final String nameGUI;
private final String nameArrowRight; private final String nameArrowRight;
private final String nameArrowLeft; private final String nameArrowLeft;
private final String nameExit; private final String nameExit;
private final int inventory_slots;
public InventoryUtil(String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit) public InventoryUtil(CacheManager cacheManager, String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit, int inventory_slots)
{ {
this.cacheManager = cacheManager;
this.nameGUI = nameGUI; this.nameGUI = nameGUI;
this.nameArrowRight = nameArrowRight; this.nameArrowRight = nameArrowRight;
this.nameArrowLeft = nameArrowLeft; this.nameArrowLeft = nameArrowLeft;
this.nameExit = nameExit; this.nameExit = nameExit;
this.inventory_slots = inventory_slots;
this.inventoryItems = new InventoryItems(inventory_slots);
} }
public void onInventoryClick(InventoryClickEvent event) public void onInventoryClick(InventoryClickEvent event)
@ -51,24 +59,36 @@ public class InventoryUtil
} }
} }
public void updateInventory(Inventory inventory) public synchronized void updateInventory(Inventory inventory, Player player)
{ {
setUI(inventory); PagesManager pagesManager = this.cacheManager.load(player);
setUI(inventory, pagesManager);
this.inventoryItems.renderPage(pagesManager, inventory);
} }
private void setUI(Inventory inventory) private synchronized void setUI(Inventory inventory, PagesManager pagesManager)
{ {
// arrow right
setArrow(inventory, this.nameArrowRight, 8, 6);
// arrow left
setArrow(inventory, this.nameArrowLeft, 0, 6);
// exit // exit
setItem(inventory, Material.REDSTONE, this.nameExit, 4, 6); setItem(inventory, Material.REDSTONE, this.nameExit, 4, 6);
if (pagesManager.getCountPages() == 0) { return; }
if (pagesManager.getCurrentPage() != pagesManager.getCountPages())
{
// arrow right
setArrow(inventory, this.nameArrowRight, 8, 6);
}
if (pagesManager.getCurrentPage() != 0)
{
// arrow left
setArrow(inventory, this.nameArrowLeft, 0, 6);
}
} }
private void setItem(Inventory inventory, Material material, String name, int x, int y) private synchronized void setItem(Inventory inventory, Material material, String name, int x, int y)
{ {
ItemStack item = new ItemStack(material, 1); ItemStack item = new ItemStack(material, 1);
ItemMeta meta_item = item.getItemMeta(); ItemMeta meta_item = item.getItemMeta();
@ -82,14 +102,14 @@ public class InventoryUtil
); );
} }
private void setArrow(Inventory inventory, String name, int x, int y) private synchronized void setArrow(Inventory inventory, String name, int x, int y)
{ {
setItem(inventory, Material.ARROW, name, x, y); setItem(inventory, Material.ARROW, name, x, y);
} }
public int getCordinates(int x, int y) public synchronized int getCordinates(int x, int y)
{ {
if (y == 0) {y++;} if (y == 0) {y++;}
return ((y - 1) * 9 + x) % 64; return ((y - 1) * 9 + x) % this.inventory_slots;
} }
} }

View File

@ -0,0 +1,20 @@
package tokarotik.giftapi.inventory.inventoryitems;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import tokarotik.giftapi.NBT.pages.PagesManager;
import java.util.List;
public class InventoryItems
{
private final int items_slots;
public InventoryItems(int items_slots) { this.items_slots = items_slots; }
public void renderPage(PagesManager pagesManager, Inventory inventory)
{
List<ItemStack> array = InventoryItemsUtil.getArrayToRender(pagesManager, items_slots);
InventoryItemsUtil.renderList(array, inventory);
}
}

View File

@ -0,0 +1,46 @@
package tokarotik.giftapi.inventory.inventoryitems;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import tokarotik.giftapi.NBT.pages.PagesManager;
import java.util.Arrays;
import java.util.List;
public class InventoryItemsUtil
{
public static List<ItemStack> getArrayToRender(PagesManager pagesManager, int items_slots)
{
ItemStack[] items = pagesManager.getList();
int items_count = items.length;
int current_page = pagesManager.getCurrentPage();
int start_item = getStartItemIndex(current_page, items_slots);
int end_item = getEndItemIndex(current_page, items_slots, items_count);
return Arrays.asList(items).subList(start_item, end_item);
}
public static void renderList(List<ItemStack> array, Inventory inventory)
{
for (ItemStack item : (ItemStack[]) array.toArray())
{
inventory.addItem(item);
}
}
private static int getStartItemIndex(int current_page, int items_slots)
{
return current_page * items_slots;
}
private static int getEndItemIndex(int current_page, int items_slots, int items_count)
{
int literly_end_page = current_page * (items_slots * 2);
if (literly_end_page < items_count) { return literly_end_page; }
return literly_end_page - (items_count - literly_end_page);
}
}

View File

@ -4,5 +4,8 @@ main: tokarotik.giftapi.Main
commands: commands:
gift: gift:
description: for test
usage: /<command>
add:
description: for test description: for test
usage: /<command> usage: /<command>