fuck... pages doesn't needed to save these...

(have some errors)
This commit is contained in:
ScriptCat 2025-07-27 22:11:53 +03:00
parent 904313d269
commit bea5ce8088
12 changed files with 283 additions and 235 deletions

View File

@ -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>>"),

View File

@ -66,4 +66,6 @@ public class Main extends JavaPlugin implements Listener
apiManager.openInventory(player);
});
}
public CacheManager getCacheManager() { return this.cacheManager; }
}

View File

@ -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()
{

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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()
{
}
}

View 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;
}
}

View 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;
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}

View 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;
}
}