is ready to release
This commit is contained in:
parent
4d222bae85
commit
f61620e96c
@ -23,10 +23,10 @@ public class Main extends JavaPlugin implements Listener
|
||||
{
|
||||
saveDefaultConfig();
|
||||
|
||||
cacheManager = new CacheManager(inventory_slots);
|
||||
cacheManager = new CacheManager(inventory_slots - 9);
|
||||
apiManager = new APIManager(this, getConfig(), inventory_slots);
|
||||
|
||||
this.getCommand("gift").setExecutor(new GiftCommand(apiManager, this)); // DELETE FOR RELEASE
|
||||
this.getCommand("gift").setExecutor(new GiftCommand(this)); // DELETE FOR RELEASE
|
||||
this.getCommand("add").setExecutor(new AddCommand(this)); // DELETE FOR RELEASE
|
||||
|
||||
getServer().getPluginManager().registerEvents(this, this); // bullshit
|
||||
@ -52,25 +52,19 @@ public class Main extends JavaPlugin implements Listener
|
||||
// if failed to add, return false
|
||||
// if successfully added, return true
|
||||
public void add(Player player, ItemStack item) {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
|
||||
apiManager.add(player, item);
|
||||
});
|
||||
Bukkit.getScheduler().runTaskAsynchronously(this, () -> apiManager.add(player, item));
|
||||
}
|
||||
// if failed to remove item, return false
|
||||
// if successfully removed item, return true
|
||||
public void remove(Player player, ItemStack item)
|
||||
{
|
||||
Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
|
||||
apiManager.remove(player, item);
|
||||
});
|
||||
Bukkit.getScheduler().runTaskAsynchronously(this, () -> apiManager.remove(player, item));
|
||||
}
|
||||
|
||||
// will open inventory GiftAPI
|
||||
public void openGUI(Player player)
|
||||
{
|
||||
Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
|
||||
apiManager.openInventory(player);
|
||||
});
|
||||
Bukkit.getScheduler().runTaskAsynchronously(this, () -> apiManager.openInventory(player));
|
||||
}
|
||||
|
||||
public CacheManager getCacheManager() { return this.cacheManager; }
|
||||
|
@ -2,8 +2,9 @@ package tokarotik.giftapi.NBT.item;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.NBTTagList;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagString;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagCompound;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.Arrays;
|
||||
@ -11,8 +12,6 @@ import java.util.List;
|
||||
|
||||
public class ItemLoad
|
||||
{
|
||||
|
||||
|
||||
public static ItemStack getItem(NBTTagCompound tag)
|
||||
{
|
||||
|
||||
|
@ -3,6 +3,7 @@ package tokarotik.giftapi.NBT.item;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagList;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagString;
|
||||
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
@ -1,19 +1,18 @@
|
||||
package tokarotik.giftapi.NBT.pages;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.NBTTagList;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class PagesManager
|
||||
{
|
||||
private NBTTagList tag;
|
||||
private int current_page = 0;
|
||||
private int count_pages = 0;
|
||||
private final int items_slots;
|
||||
public PagesManager(NBTTagList tag, int items_slots)
|
||||
{
|
||||
this.items_slots = items_slots;
|
||||
this.tag = tag;
|
||||
setCountPages();
|
||||
}
|
||||
|
||||
public PagesManager(int items_slots)
|
||||
@ -25,13 +24,11 @@ public class PagesManager
|
||||
public synchronized void add(ItemStack item)
|
||||
{
|
||||
PagesUtil.add(item, this.tag);
|
||||
setCountPages();
|
||||
}
|
||||
|
||||
public synchronized void remove(ItemStack item)
|
||||
{
|
||||
this.tag = PagesUtil.remove(item, this.tag);
|
||||
setCountPages();
|
||||
}
|
||||
|
||||
public synchronized NBTTagList getTag() { return this.tag; }
|
||||
@ -39,8 +36,8 @@ public class PagesManager
|
||||
public synchronized ItemStack[] getList() { return PagesUtil.getRawList(this.tag); }
|
||||
|
||||
public synchronized int getCurrentPage() { return this.current_page; }
|
||||
|
||||
public synchronized int getCountPages() { return this.count_pages; }
|
||||
public synchronized void setCurrentPage(int current_page) { this.current_page = current_page; }
|
||||
public int getCountPages() { return this.tag.size() / (this.items_slots + 1); }
|
||||
public synchronized void nextPage()
|
||||
{
|
||||
if (getCountPages() > getCurrentPage())
|
||||
@ -56,12 +53,4 @@ public class PagesManager
|
||||
this.current_page -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,7 +2,9 @@ package tokarotik.giftapi.NBT.pages;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagList;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import tokarotik.giftapi.NBT.item.ItemLoad;
|
||||
import tokarotik.giftapi.NBT.item.ItemNBT;
|
||||
|
||||
|
@ -1,8 +1,9 @@
|
||||
package tokarotik.giftapi.NBT.nbt;
|
||||
package tokarotik.giftapi.NBT.savers;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.EntityPlayer;
|
||||
import net.minecraft.server.v1_6_R3.NBTCompressedStreamTools;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagCompound;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -50,11 +51,21 @@ public class BasicNBT {
|
||||
|
||||
return compound;
|
||||
}
|
||||
catch(Exception e)
|
||||
catch(Exception ignored)
|
||||
{
|
||||
Bukkit.getLogger().warning(e.toString());
|
||||
try
|
||||
{
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
entityPlayer.e(compound);
|
||||
|
||||
return null;
|
||||
return compound;
|
||||
}
|
||||
|
||||
catch (Exception e)
|
||||
{
|
||||
Bukkit.getLogger().warning(e.toString());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
package tokarotik.giftapi.NBT.nbt;
|
||||
package tokarotik.giftapi.NBT.savers;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.EntityPlayer;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagCompound;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -9,11 +10,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class WorldNBTSynchronizer
|
||||
{
|
||||
public static boolean isPlayerEmpty(EntityPlayer entityPlayer)
|
||||
{
|
||||
return getWorldWhatHasPlayer(entityPlayer) == null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String getWorldWhatHasPlayer(EntityPlayer entityPlayer)
|
||||
{
|
||||
@ -56,6 +52,8 @@ public class WorldNBTSynchronizer
|
||||
|
||||
NBTTagCompound tag = basicNBT.readPlayerNBT(entityPlayer);
|
||||
|
||||
if (tag == null) { return false; }
|
||||
|
||||
if (tag.hasKey("giftapi")) // if exists giftapi tag in player
|
||||
{
|
||||
try
|
@ -1,9 +1,11 @@
|
||||
package tokarotik.giftapi.cache;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.EntityPlayer;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import tokarotik.giftapi.NBT.nbt.BasicNBT;
|
||||
import tokarotik.giftapi.NBT.nbt.WorldNBTSynchronizer;
|
||||
|
||||
import tokarotik.giftapi.NBT.savers.BasicNBT;
|
||||
import tokarotik.giftapi.NBT.savers.WorldNBTSynchronizer;
|
||||
import tokarotik.giftapi.NBT.pages.PagesManager;
|
||||
|
||||
import java.util.Map;
|
||||
@ -26,20 +28,17 @@ public class CacheManager
|
||||
|
||||
// Return cached PageManager if already loaded
|
||||
if (worldMap.containsKey(player)) {
|
||||
System.out.print("Is already loaded");
|
||||
return worldMap.get(player);
|
||||
}
|
||||
|
||||
// Attempt to load from current world
|
||||
if (WorldNBTSynchronizer.hasAll(entityPlayer, playerWorld)) {
|
||||
System.out.print("Load from current world");
|
||||
return this.cacheUtil.loadAndCachePageManager(player, playerWorld, entityPlayer, worldMap);
|
||||
}
|
||||
|
||||
// Attempt to load from another world if present
|
||||
String alternateWorld = WorldNBTSynchronizer.getWorldWhatHasPlayer(entityPlayer);
|
||||
if (alternateWorld != null) {
|
||||
System.out.print("Load from another world");
|
||||
return this.cacheUtil.loadAndCachePageManager(player, alternateWorld, entityPlayer, worldMap);
|
||||
}
|
||||
|
||||
@ -47,18 +46,9 @@ public class CacheManager
|
||||
PagesManager defaultPages = new PagesManager(this.inventory_slots);
|
||||
worldMap.put(player, defaultPages);
|
||||
|
||||
System.out.print("New empty PageManager");
|
||||
|
||||
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()
|
||||
{
|
||||
cacheUtil.saveAllHard();
|
||||
|
@ -3,10 +3,12 @@ package tokarotik.giftapi.cache;
|
||||
import net.minecraft.server.v1_6_R3.EntityPlayer;
|
||||
import net.minecraft.server.v1_6_R3.NBTTagCompound;
|
||||
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.nbt.BasicNBT;
|
||||
|
||||
import tokarotik.giftapi.NBT.savers.BasicNBT;
|
||||
import tokarotik.giftapi.NBT.pages.PagesManager;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
@ -7,8 +7,10 @@ import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import tokarotik.giftapi.Main;
|
||||
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
|
||||
@ -33,11 +35,19 @@ public class AddCommand implements CommandExecutor {
|
||||
player = (Player) sender;
|
||||
}
|
||||
|
||||
Material[] values = Material.values();
|
||||
int id = values[ThreadLocalRandom.current().nextInt(values.length)].getId();
|
||||
ItemStack item = new ItemStack(id);
|
||||
int count = 1;
|
||||
if (strings.length > 0)
|
||||
{
|
||||
count = Integer.parseInt(strings[0]);
|
||||
}
|
||||
|
||||
this.plugin.add(player, item);
|
||||
for (int i = 0; i < count; i++) {
|
||||
Material[] values = Material.values();
|
||||
int id = values[ThreadLocalRandom.current().nextInt(values.length)].getId();
|
||||
ItemStack item = new ItemStack(id);
|
||||
|
||||
this.plugin.add(player, item);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -11,13 +11,11 @@ import tokarotik.giftapi.Main;
|
||||
|
||||
public class GiftCommand implements CommandExecutor {
|
||||
|
||||
private final APIManager apiManager;
|
||||
private final Main plugin;
|
||||
|
||||
public GiftCommand(APIManager APIManager, Main plugin)
|
||||
public GiftCommand(Main plugin)
|
||||
{
|
||||
|
||||
this.apiManager = APIManager;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@ -29,8 +27,6 @@ public class GiftCommand implements CommandExecutor {
|
||||
{
|
||||
sender.sendMessage("This command can use only player!");
|
||||
player = Bukkit.getOnlinePlayers()[0];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
else
|
||||
@ -38,8 +34,6 @@ public class GiftCommand implements CommandExecutor {
|
||||
player = (Player) sender;
|
||||
}
|
||||
|
||||
System.out.println( plugin.getCacheManager().load(player).getTag() );
|
||||
|
||||
this.plugin.openGUI(player);
|
||||
|
||||
|
||||
|
@ -7,16 +7,15 @@ import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import tokarotik.giftapi.cache.CacheManager;
|
||||
import tokarotik.giftapi.NBT.pages.PagesManager;
|
||||
|
||||
|
||||
public class InventoryManager implements Listener
|
||||
{
|
||||
|
||||
private final String nameGUI;
|
||||
private final int inventory_slots;
|
||||
private final int items_slots;
|
||||
private final CacheManager cacheManager;
|
||||
private final InventoryUtil inventoryUtil;
|
||||
|
||||
@ -25,9 +24,9 @@ public class InventoryManager implements Listener
|
||||
{
|
||||
this.nameGUI = nameGUI;
|
||||
this.inventory_slots = inventory_slots;
|
||||
this.items_slots = inventory_slots - 9;
|
||||
this.cacheManager = cacheManager;
|
||||
inventoryUtil = new InventoryUtil(cacheManager, nameGUI, nameArrowRight, nameArrowLeft, nameExit, this.items_slots);
|
||||
int items_slots = inventory_slots - 9;
|
||||
inventoryUtil = new InventoryUtil(cacheManager, nameGUI, nameArrowRight, nameArrowLeft, nameExit, items_slots);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -50,12 +49,11 @@ public class InventoryManager implements Listener
|
||||
|
||||
public synchronized void openCustomInventory(Player player)
|
||||
{
|
||||
this.cacheManager.load(player).setCurrentPage(0);
|
||||
Inventory inventory = Bukkit.createInventory(null, this.inventory_slots, this.nameGUI);
|
||||
|
||||
this.inventoryUtil.updateInventory(inventory, player);
|
||||
|
||||
player.openInventory(inventory);
|
||||
}
|
||||
|
||||
public int getItemsSlots() { return this.items_slots; }
|
||||
|
||||
}
|
||||
|
@ -6,9 +6,11 @@ import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import tokarotik.giftapi.cache.CacheManager;
|
||||
import tokarotik.giftapi.NBT.pages.PagesManager;
|
||||
import tokarotik.giftapi.inventory.inventoryitems.InventoryItems;
|
||||
import tokarotik.giftapi.inventory.inventoryitems.InventoryItemsUtil;
|
||||
|
||||
public class InventoryUtil
|
||||
{
|
||||
@ -81,33 +83,40 @@ public class InventoryUtil
|
||||
|
||||
public synchronized void updateInventory(Inventory inventory, Player player)
|
||||
{
|
||||
inventory.clear();
|
||||
PagesManager pagesManager = this.cacheManager.load(player);
|
||||
|
||||
setUI(inventory, pagesManager);
|
||||
this.inventoryItems.renderPage(pagesManager, inventory);
|
||||
setUI(inventory, pagesManager);
|
||||
}
|
||||
|
||||
private synchronized void setUI(Inventory inventory, PagesManager pagesManager)
|
||||
{
|
||||
int height = (this.inventory_slots / 9) + 1;
|
||||
int height = (this.inventory_slots / 9);
|
||||
|
||||
// exit
|
||||
setItem(inventory, Material.REDSTONE, this.nameExit, 4, height);
|
||||
if (pagesManager.getCountPages() == 0) { return; }
|
||||
|
||||
if (pagesManager.getCurrentPage() != pagesManager.getCountPages())
|
||||
int count = pagesManager.getCountPages();
|
||||
|
||||
if (count == 0) { return; }
|
||||
|
||||
if (pagesManager.getCurrentPage() < count)
|
||||
{
|
||||
// arrow right
|
||||
setArrow(inventory, this.nameArrowRight, 8, height);
|
||||
}
|
||||
|
||||
if (pagesManager.getCurrentPage() != 0)
|
||||
if (pagesManager.getCurrentPage() > 0)
|
||||
{
|
||||
// arrow left
|
||||
setArrow(inventory, this.nameArrowLeft, 0, height);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private synchronized void setArrow(Inventory inventory, String name, int x, int y)
|
||||
{
|
||||
setItem(inventory, Material.ARROW, name, x, y);
|
||||
}
|
||||
|
||||
private synchronized void setItem(Inventory inventory, Material material, String name, int x, int y)
|
||||
@ -119,19 +128,8 @@ public class InventoryUtil
|
||||
item.setItemMeta(meta_item);
|
||||
|
||||
inventory.setItem(
|
||||
getCordinates(x, y),
|
||||
InventoryItemsUtil.getCordinates(this.inventory_slots, x, y),
|
||||
item
|
||||
);
|
||||
}
|
||||
|
||||
private synchronized void setArrow(Inventory inventory, String name, int x, int y)
|
||||
{
|
||||
setItem(inventory, Material.ARROW, name, x, y);
|
||||
}
|
||||
|
||||
public synchronized int getCordinates(int x, int y)
|
||||
{
|
||||
if (y == 0) {y++;}
|
||||
return ((y - 1) * 9 + x) % (this.inventory_slots + 9);
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ 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;
|
||||
|
@ -2,6 +2,7 @@ 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;
|
||||
@ -24,9 +25,24 @@ public class InventoryItemsUtil
|
||||
|
||||
public synchronized static void renderList(List<ItemStack> array, Inventory inventory, int items_slots)
|
||||
{
|
||||
short x = 0;
|
||||
short y = 0;
|
||||
|
||||
for (ItemStack item : array) {
|
||||
inventory.addItem(item);
|
||||
for (ItemStack itemStack : array) {
|
||||
|
||||
if (x >= 10) {
|
||||
x = 0;
|
||||
y++;
|
||||
}
|
||||
int slot = getCordinates(items_slots + 9, x, y);
|
||||
|
||||
if (slot > items_slots - 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
inventory.setItem(slot, itemStack);
|
||||
|
||||
x++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,12 +53,16 @@ public class InventoryItemsUtil
|
||||
|
||||
private synchronized static int getEndItemIndex(int current_page, int items_slots, int items_count)
|
||||
{
|
||||
items_slots += 4;
|
||||
int literly_end_page = (current_page + 1) * items_slots;
|
||||
|
||||
System.out.println("Cur page " + current_page + " Items Slots " + items_slots + " Items Count " + items_count + " Lit End Page " + literly_end_page);
|
||||
|
||||
if (literly_end_page < items_count) { return literly_end_page; }
|
||||
|
||||
if (literly_end_page <= items_count) { return literly_end_page; }
|
||||
return literly_end_page - (literly_end_page - items_count);
|
||||
}
|
||||
|
||||
public static synchronized int getCordinates(int inventory_slots, int x, int y)
|
||||
{
|
||||
if (y > 0 && y != inventory_slots / 9) { x += y; }
|
||||
return ((y * 9) + x) % (inventory_slots + 9);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user