fuck... pages doesn't needed to save these...
(have some errors)
This commit is contained in:
parent
904313d269
commit
bea5ce8088
@ -17,6 +17,7 @@ public class APIManager {
|
||||
this.plugin = plugin;
|
||||
|
||||
this.inventoryManager = new InventoryManager(
|
||||
plugin.getCacheManager(),
|
||||
ConfigPaths.getWithColor(config, ConfigPaths.GUINAME, "GiftAPI Menu"),
|
||||
ConfigPaths.getWithColor(config, ConfigPaths.GUIRIGHT, "<<right"),
|
||||
ConfigPaths.getWithColor(config, ConfigPaths.GUILEFT, "left>>"),
|
||||
|
@ -66,4 +66,6 @@ public class Main extends JavaPlugin implements Listener
|
||||
apiManager.openInventory(player);
|
||||
});
|
||||
}
|
||||
|
||||
public CacheManager getCacheManager() { return this.cacheManager; }
|
||||
}
|
@ -2,14 +2,12 @@ package tokarotik.giftapi.NBT.cache;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.EntityPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import tokarotik.giftapi.NBT.page.PageManager;
|
||||
import tokarotik.giftapi.NBT.pages.PagesManager;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class CacheManager
|
||||
{
|
||||
|
||||
private final CacheUtil cacheUtil;
|
||||
|
||||
public CacheManager(int max_stack)
|
||||
@ -17,9 +15,9 @@ public class CacheManager
|
||||
cacheUtil = new CacheUtil(max_stack);
|
||||
}
|
||||
|
||||
public synchronized PageManager load(Player player) {
|
||||
public synchronized PagesManager load(Player player) {
|
||||
String playerWorld = player.getWorld().getName();
|
||||
Map<Player, PageManager> worldMap = cacheUtil.getWorlMap(playerWorld);
|
||||
Map<Player, PagesManager> worldMap = cacheUtil.getWorlMap(playerWorld);
|
||||
EntityPlayer entityPlayer = BasicNBT.getPlayer(player);
|
||||
|
||||
// Return cached PageManager if already loaded
|
||||
@ -39,12 +37,17 @@ public class CacheManager
|
||||
}
|
||||
|
||||
// Fallback to new empty PageManager
|
||||
PageManager defaultPages = new PageManager(this.cacheUtil.max_stack);
|
||||
PagesManager defaultPages = new PagesManager(this.cacheUtil.max_stack);
|
||||
worldMap.put(player, defaultPages);
|
||||
return defaultPages;
|
||||
}
|
||||
|
||||
public synchronized void save(Player player, PagesManager pagesManager)
|
||||
{
|
||||
Map<Player, PagesManager> map = this.cacheUtil.getWorlMap(player.getWorld().getName());
|
||||
|
||||
map.put(player, pagesManager);
|
||||
}
|
||||
|
||||
public synchronized void disable()
|
||||
{
|
||||
|
@ -6,16 +6,16 @@ import net.minecraft.server.v1_6_R3.NBTTagList;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import tokarotik.giftapi.NBT.page.PageManager;
|
||||
import tokarotik.giftapi.NBT.pages.PagesManager;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class CacheUtil
|
||||
{
|
||||
public final Map<Player, PageManager> world_map = new HashMap<>();
|
||||
public final Map<Player, PageManager> nether_map = new HashMap<>();
|
||||
public final Map<Player, PageManager> end_map = new HashMap<>();
|
||||
public final Map<Player, PagesManager> world_map = new HashMap<>();
|
||||
public final Map<Player, PagesManager> nether_map = new HashMap<>();
|
||||
public final Map<Player, PagesManager> end_map = new HashMap<>();
|
||||
|
||||
public final int max_stack;
|
||||
|
||||
@ -29,11 +29,11 @@ public class CacheUtil
|
||||
for (World world : Bukkit.getWorlds())
|
||||
{
|
||||
String nameWorld = world.getName();
|
||||
Map<Player, PageManager> map = this.getWorlMap(nameWorld);
|
||||
Map<Player, PagesManager> map = this.getWorlMap(nameWorld);
|
||||
|
||||
if (map == null) { continue; }
|
||||
|
||||
PageManager pages = map.get(player);
|
||||
PagesManager pages = map.get(player);
|
||||
|
||||
if (pages == null) { continue; }
|
||||
|
||||
@ -56,7 +56,7 @@ public class CacheUtil
|
||||
}
|
||||
}
|
||||
|
||||
public Map<Player, PageManager> getWorlMap(String worldName)
|
||||
public Map<Player, PagesManager> getWorlMap(String worldName)
|
||||
{
|
||||
switch(worldName)
|
||||
{
|
||||
@ -68,12 +68,12 @@ public class CacheUtil
|
||||
return null;
|
||||
}
|
||||
|
||||
public synchronized PageManager loadAndCachePageManager(Player player, String world, EntityPlayer entityPlayer, Map<Player, PageManager> worldMap) {
|
||||
public synchronized PagesManager loadAndCachePageManager(Player player, String world, EntityPlayer entityPlayer, Map<Player, PagesManager> worldMap) {
|
||||
NBTTagCompound compound = new BasicNBT(world).readPlayerNBT(entityPlayer);
|
||||
NBTTagList giftList = compound.getList("giftapi");
|
||||
|
||||
PageManager pageManager = new PageManager(giftList, this.max_stack);
|
||||
worldMap.put(player, pageManager);
|
||||
return pageManager;
|
||||
PagesManager pagesManager = new PagesManager(giftList, this.max_stack);
|
||||
worldMap.put(player, pagesManager);
|
||||
return pagesManager;
|
||||
}
|
||||
}
|
||||
|
@ -1,115 +0,0 @@
|
||||
package tokarotik.giftapi.NBT.page;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.NBTTagList;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import tokarotik.giftapi.NBT.page.page.Page;
|
||||
|
||||
public class PageManager
|
||||
{
|
||||
|
||||
private NBTTagList tag;
|
||||
private final int max_stack;
|
||||
|
||||
public PageManager(NBTTagList tag, int max_stack)
|
||||
{
|
||||
this.tag = tag;
|
||||
this.max_stack = max_stack;
|
||||
}
|
||||
|
||||
public PageManager(int max_stack)
|
||||
{
|
||||
|
||||
this.max_stack = max_stack;
|
||||
this.tag = new NBTTagList("giftapi");
|
||||
}
|
||||
|
||||
public NBTTagList getTag()
|
||||
{
|
||||
return this.tag;
|
||||
}
|
||||
|
||||
public void setTag(NBTTagList tag)
|
||||
{
|
||||
this.tag = tag;
|
||||
}
|
||||
|
||||
public boolean add(ItemStack item)
|
||||
{
|
||||
Page page = getPageWithEmptySlots();
|
||||
|
||||
boolean is_added = page.add(item);
|
||||
boolean is_updated = updateTag(page);
|
||||
|
||||
return is_added && is_updated;
|
||||
}
|
||||
|
||||
public boolean remove(ItemStack item)
|
||||
{
|
||||
Page page = getPageWithEmptySlots();
|
||||
|
||||
boolean is_removed = page.remove(item);
|
||||
boolean is_updated = updateTag(page);
|
||||
|
||||
return is_removed && is_updated;
|
||||
}
|
||||
|
||||
public Page getPage(int number)
|
||||
{
|
||||
if (number > 0 && number < this.tag.size())
|
||||
{
|
||||
NBTTagList tag = (NBTTagList) this.tag.get(number);
|
||||
|
||||
return new Page(tag, this.max_stack, number);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public Page getPageWithEmptySlots()
|
||||
{
|
||||
for (int i = 0; i < tag.size(); i++)
|
||||
{
|
||||
|
||||
Page page = new Page( (NBTTagList) tag.get(i), this.max_stack, i);
|
||||
|
||||
if (!page.isOverStacked())
|
||||
{
|
||||
return page;
|
||||
}
|
||||
}
|
||||
|
||||
Page page = new Page(this.max_stack);
|
||||
page.setNumber(tag.size());
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
public boolean updateTag(Page page)
|
||||
{
|
||||
Integer page_number = page.getNumber();
|
||||
|
||||
if (page_number == null) { return false; }
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
this.tag = new_tag;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
package tokarotik.giftapi.NBT.page;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PagesSaver
|
||||
{
|
||||
final PageManager pageManager;
|
||||
final Player player;
|
||||
//final BasicNBT basicNBT;
|
||||
|
||||
public PagesSaver(Player player, int max_stack)
|
||||
{
|
||||
this.pageManager = new PageManager(max_stack);
|
||||
this.player = player;
|
||||
//this.basicNBT = new BasicNBT();
|
||||
}
|
||||
|
||||
public void loadNBT()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
60
src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java
Normal file
60
src/main/java/tokarotik/giftapi/NBT/pages/PagesManager.java
Normal file
@ -0,0 +1,60 @@
|
||||
package tokarotik.giftapi.NBT.pages;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.NBTTagList;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import tokarotik.giftapi.NBT.pages.page.Page;
|
||||
|
||||
public class PagesManager
|
||||
{
|
||||
|
||||
private final int max_stack;
|
||||
|
||||
private NBTTagList tag;
|
||||
|
||||
private int current_page = 0;
|
||||
|
||||
public PagesManager(NBTTagList tag, int max_stack)
|
||||
{
|
||||
this.tag = tag;
|
||||
this.max_stack = max_stack;
|
||||
}
|
||||
|
||||
public PagesManager(int max_stack)
|
||||
{
|
||||
this.max_stack = max_stack;
|
||||
this.tag = new NBTTagList("giftapi");
|
||||
}
|
||||
|
||||
public boolean add(ItemStack item)
|
||||
{
|
||||
return PagesUtil.add(item, this.tag, this.max_stack);
|
||||
}
|
||||
|
||||
public boolean remove(ItemStack item)
|
||||
{
|
||||
return PagesUtil.remove(item, this.tag, this.max_stack);
|
||||
}
|
||||
|
||||
public NBTTagList getTag() { return this.tag; }
|
||||
|
||||
public void setTag(NBTTagList tag)
|
||||
{
|
||||
this.tag = tag;
|
||||
}
|
||||
|
||||
public int getIntCurrentPage() { return this.current_page; }
|
||||
|
||||
public void setIntCurrentPage(int current_page) { this.current_page = current_page; }
|
||||
|
||||
public Page getPage(int number)
|
||||
{
|
||||
if (number > 0 && number < this.tag.size())
|
||||
{
|
||||
NBTTagList tag = (NBTTagList) this.tag.get(number);
|
||||
|
||||
return new Page(tag, this.max_stack, number);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
74
src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java
Normal file
74
src/main/java/tokarotik/giftapi/NBT/pages/PagesUtil.java
Normal file
@ -0,0 +1,74 @@
|
||||
package tokarotik.giftapi.NBT.pages;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.NBTTagList;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import tokarotik.giftapi.NBT.pages.page.Page;
|
||||
|
||||
public class PagesUtil
|
||||
{
|
||||
public static boolean add(ItemStack item, NBTTagList tag, int max_stack)
|
||||
{
|
||||
Page page = getPageWithEmptySlots(tag, max_stack);
|
||||
|
||||
boolean is_added = page.add(item);
|
||||
if (!is_added) { return false; } // if adding is failed, when false. why need to update when function finished without result?
|
||||
|
||||
NBTTagList new_tag = updateTag(page, tag);
|
||||
return isUpdatedTag( tag, new_tag );
|
||||
}
|
||||
|
||||
public static boolean remove(ItemStack item, NBTTagList tag, int max_stack)
|
||||
{
|
||||
Page page = getPageWithEmptySlots(tag, max_stack);
|
||||
|
||||
boolean is_added = page.remove(item);
|
||||
if (!is_added) { return false; } // if removing is failed, when false.
|
||||
|
||||
NBTTagList new_tag = updateTag(page, tag);
|
||||
return isUpdatedTag( tag, new_tag );
|
||||
}
|
||||
|
||||
public static Page getPageWithEmptySlots(NBTTagList tag, int max_stack)
|
||||
{
|
||||
for (int i = 0; i < tag.size(); i++)
|
||||
{
|
||||
|
||||
Page page = new Page( (NBTTagList) tag.get(i), max_stack, i);
|
||||
|
||||
if (!page.isOverStacked())
|
||||
{
|
||||
return page;
|
||||
}
|
||||
}
|
||||
|
||||
Page page = new Page(max_stack);
|
||||
page.setNumber(tag.size());
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
public static boolean isUpdatedTag(NBTTagList tag, NBTTagList new_tag)
|
||||
{
|
||||
if (!new_tag.equals(tag)) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
public static NBTTagList updateTag(Page page, NBTTagList tag)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package tokarotik.giftapi.NBT.page.page;
|
||||
package tokarotik.giftapi.NBT.pages.page;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagList;
|
@ -1,4 +1,4 @@
|
||||
package tokarotik.giftapi.NBT.page.page;
|
||||
package tokarotik.giftapi.NBT.pages.page;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagList;
|
@ -9,99 +9,49 @@ import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import tokarotik.giftapi.NBT.cache.CacheManager;
|
||||
|
||||
|
||||
public class InventoryManager implements Listener {
|
||||
|
||||
public final int countSlots = 54;
|
||||
|
||||
private final int countSlots = 54;
|
||||
private final String nameGUI;
|
||||
private final String nameArrowRight;
|
||||
private final String nameArrowLeft;
|
||||
private final String nameExit;
|
||||
private final CacheManager cacheManager;
|
||||
private final InventoryUtil inventoryUtil;
|
||||
|
||||
public InventoryManager(String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit)
|
||||
|
||||
public InventoryManager(CacheManager cacheManager, String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit)
|
||||
{
|
||||
this.nameGUI = nameGUI;
|
||||
this.nameArrowRight = nameArrowRight;
|
||||
this.nameArrowLeft = nameArrowLeft;
|
||||
this.nameExit = nameExit;
|
||||
this.cacheManager = cacheManager;
|
||||
inventoryUtil = new InventoryUtil(nameGUI, nameArrowRight, nameArrowLeft, nameExit);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent event)
|
||||
{
|
||||
this.inventoryUtil.onInventoryClick(event);
|
||||
}
|
||||
|
||||
public synchronized boolean add(Player player, ItemStack item)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public synchronized boolean remove(Player player, ItemStack item)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public synchronized void openCustomInventory(Player player)
|
||||
{
|
||||
Inventory inventory = Bukkit.createInventory(null, countSlots, this.nameGUI);
|
||||
Inventory inventory = Bukkit.createInventory(null, this.countSlots, this.nameGUI);
|
||||
|
||||
updateInventory(inventory);
|
||||
this.inventoryUtil.updateInventory(inventory);
|
||||
|
||||
player.openInventory(inventory);
|
||||
}
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
Inventory inventory = event.getInventory();
|
||||
|
||||
if (inventory.getTitle().equals(this.nameGUI)) {
|
||||
event.setCancelled(true);
|
||||
|
||||
ItemStack currentItem = event.getCurrentItem();
|
||||
String nameCurrentItem = currentItem.getItemMeta().getDisplayName();
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
if (nameCurrentItem.equals(this.nameArrowRight))
|
||||
{
|
||||
player.sendMessage("Right!");
|
||||
}
|
||||
|
||||
if (nameCurrentItem.equals(this.nameArrowLeft))
|
||||
{
|
||||
player.sendMessage("Left!");
|
||||
}
|
||||
|
||||
if (nameCurrentItem.equals(this.nameExit))
|
||||
{
|
||||
player.closeInventory();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateInventory(Inventory inventory)
|
||||
{
|
||||
setUI(inventory);
|
||||
}
|
||||
|
||||
private void setUI(Inventory inventory)
|
||||
{
|
||||
// arrow right
|
||||
setArrow(inventory, this.nameArrowRight, 8, 6);
|
||||
// arrow left
|
||||
setArrow(inventory, this.nameArrowLeft, 0, 6);
|
||||
// exit
|
||||
setItem(inventory, Material.REDSTONE, this.nameExit, 4, 6);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void setItem(Inventory inventory, Material material, String name, int x, int y)
|
||||
{
|
||||
ItemStack item = new ItemStack(material, 1);
|
||||
ItemMeta meta_item = item.getItemMeta();
|
||||
|
||||
meta_item.setDisplayName(name);
|
||||
item.setItemMeta(meta_item);
|
||||
|
||||
inventory.setItem(
|
||||
getCordinates(x, y),
|
||||
item
|
||||
);
|
||||
}
|
||||
|
||||
private void setArrow(Inventory inventory, String name, int x, int y)
|
||||
{
|
||||
setItem(inventory, Material.ARROW, name, x, y);
|
||||
}
|
||||
|
||||
public int getCordinates(int x, int y)
|
||||
{
|
||||
if (y == 0) {y++;}
|
||||
return ((y - 1) * 9 + x) % 64;
|
||||
}
|
||||
}
|
||||
|
95
src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java
Normal file
95
src/main/java/tokarotik/giftapi/inventory/InventoryUtil.java
Normal file
@ -0,0 +1,95 @@
|
||||
package tokarotik.giftapi.inventory;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public class InventoryUtil
|
||||
{
|
||||
|
||||
private final String nameGUI;
|
||||
private final String nameArrowRight;
|
||||
private final String nameArrowLeft;
|
||||
private final String nameExit;
|
||||
|
||||
public InventoryUtil(String nameGUI, String nameArrowRight, String nameArrowLeft, String nameExit)
|
||||
{
|
||||
this.nameGUI = nameGUI;
|
||||
this.nameArrowRight = nameArrowRight;
|
||||
this.nameArrowLeft = nameArrowLeft;
|
||||
this.nameExit = nameExit;
|
||||
}
|
||||
|
||||
public void onInventoryClick(InventoryClickEvent event)
|
||||
{
|
||||
Inventory inventory = event.getInventory();
|
||||
|
||||
if (inventory.getTitle().equals(this.nameGUI)) {
|
||||
event.setCancelled(true);
|
||||
|
||||
ItemStack currentItem = event.getCurrentItem();
|
||||
String nameCurrentItem = currentItem.getItemMeta().getDisplayName();
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
if (nameCurrentItem.equals(this.nameArrowRight))
|
||||
{
|
||||
player.sendMessage("Right!");
|
||||
}
|
||||
|
||||
if (nameCurrentItem.equals(this.nameArrowLeft))
|
||||
{
|
||||
player.sendMessage("Left!");
|
||||
}
|
||||
|
||||
if (nameCurrentItem.equals(this.nameExit))
|
||||
{
|
||||
player.closeInventory();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updateInventory(Inventory inventory)
|
||||
{
|
||||
setUI(inventory);
|
||||
}
|
||||
|
||||
private void setUI(Inventory inventory)
|
||||
{
|
||||
// arrow right
|
||||
setArrow(inventory, this.nameArrowRight, 8, 6);
|
||||
// arrow left
|
||||
setArrow(inventory, this.nameArrowLeft, 0, 6);
|
||||
// exit
|
||||
setItem(inventory, Material.REDSTONE, this.nameExit, 4, 6);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void setItem(Inventory inventory, Material material, String name, int x, int y)
|
||||
{
|
||||
ItemStack item = new ItemStack(material, 1);
|
||||
ItemMeta meta_item = item.getItemMeta();
|
||||
|
||||
meta_item.setDisplayName(name);
|
||||
item.setItemMeta(meta_item);
|
||||
|
||||
inventory.setItem(
|
||||
getCordinates(x, y),
|
||||
item
|
||||
);
|
||||
}
|
||||
|
||||
private void setArrow(Inventory inventory, String name, int x, int y)
|
||||
{
|
||||
setItem(inventory, Material.ARROW, name, x, y);
|
||||
}
|
||||
|
||||
public int getCordinates(int x, int y)
|
||||
{
|
||||
if (y == 0) {y++;}
|
||||
return ((y - 1) * 9 + x) % 64;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user