mirror of
https://github.com/zDevelopers/ImageOnMap.git
synced 2024-11-25 11:35:35 +01:00
Keep working on the GUI API.
* NEW: The manage command now opens the MapList GUI. * NEW: MapListGui: First actual implementation. * NEW: MapManager/PlayerMapStore: Added the getMaps() method. * BUG: GuiUtils: The hideAttributes() method does not crash anymore if the ItemFlags API is not available. * OPT: ExplorerGui: Inventory variables are now computed only on data update.
This commit is contained in:
parent
586644e486
commit
0ad44db92b
@ -20,10 +20,8 @@ package fr.moribus.imageonmap.commands.maptool;
|
||||
|
||||
|
||||
import fr.moribus.imageonmap.commands.*;
|
||||
import fr.moribus.imageonmap.gui.core.*;
|
||||
import fr.moribus.imageonmap.gui.list.*;
|
||||
import fr.moribus.imageonmap.guiproko.list.MapListGui;
|
||||
import fr.moribus.imageonmap.guiproko.core.Gui;
|
||||
import fr.moribus.imageonmap.guiproko.list.MaterialGui;
|
||||
|
||||
|
||||
@CommandInfo(name = "manage")
|
||||
@ -38,6 +36,6 @@ public class ManageCommand extends Command
|
||||
protected void run() throws CommandException
|
||||
{
|
||||
//GuiManager.openGui(playerSender(), new MapListGui());
|
||||
Gui.open(playerSender(), new MaterialGui());
|
||||
Gui.open(playerSender(), new MapListGui());
|
||||
}
|
||||
}
|
||||
|
@ -34,8 +34,9 @@ abstract public class ExplorerGui<T> extends ActionGui
|
||||
|
||||
private int currentPageX = 0;
|
||||
|
||||
private int pageCountX = 0;
|
||||
private int pageCountY = 0;
|
||||
private int pageCountX;
|
||||
private int pageCountY;
|
||||
|
||||
private int inventoryViewSize;
|
||||
|
||||
private Mode mode = Mode.CREATIVE;
|
||||
@ -81,23 +82,15 @@ abstract public class ExplorerGui<T> extends ActionGui
|
||||
if(hasActions()) super.populate(inventory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update()
|
||||
{
|
||||
//TODO: Make inventory fit to content
|
||||
setSize(MAX_INVENTORY_SIZE);
|
||||
|
||||
super.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onClick(InventoryClickEvent event)
|
||||
{
|
||||
int slot = event.getRawSlot();
|
||||
|
||||
//Clicked in the action bar
|
||||
if(slot > MAX_INVENTORY_SIZE - INVENTORY_ROW_SIZE
|
||||
&& slot < MAX_INVENTORY_SIZE)
|
||||
if(hasActions() &&
|
||||
slot >= MAX_INVENTORY_SIZE - INVENTORY_ROW_SIZE
|
||||
&& slot < MAX_INVENTORY_SIZE)
|
||||
{
|
||||
super.onClick(event);
|
||||
return;
|
||||
@ -127,13 +120,6 @@ abstract public class ExplorerGui<T> extends ActionGui
|
||||
}
|
||||
}
|
||||
|
||||
private int getDataIndex(int slot)
|
||||
{
|
||||
int inventorySize = MAX_INVENTORY_SIZE;
|
||||
if(getPageCount() > 1) inventorySize -= INVENTORY_ROW_SIZE;
|
||||
return currentPageX * inventorySize + slot;
|
||||
}
|
||||
|
||||
private void onActionPickup(InventoryClickEvent event)
|
||||
{
|
||||
if(mode.equals(Mode.READONLY))
|
||||
@ -141,13 +127,19 @@ abstract public class ExplorerGui<T> extends ActionGui
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
int dataIndex = getDataIndex(event.getSlot());
|
||||
int dataIndex = currentPageX * inventoryViewSize + event.getSlot();
|
||||
if(dataIndex < 0 || dataIndex >= data.length)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
event.setCurrentItem(getPickedUpItem(data[dataIndex]));
|
||||
ItemStack pickedUpItem = getPickedUpItem(data[dataIndex]);
|
||||
if(pickedUpItem == null)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
event.setCurrentItem(pickedUpItem);
|
||||
GuiUtils.setItemLater(this, event.getSlot(), getViewItem(data[dataIndex]));
|
||||
}
|
||||
|
||||
@ -170,7 +162,31 @@ abstract public class ExplorerGui<T> extends ActionGui
|
||||
@Override
|
||||
protected void onAfterUpdate()
|
||||
{
|
||||
if(getPageCount() > 1)
|
||||
inventoryViewSize = MAX_INVENTORY_SIZE;
|
||||
|
||||
//Calculating page count
|
||||
if(data.length <= 0)
|
||||
{
|
||||
pageCountX = 1;
|
||||
pageCountY = 1;
|
||||
}
|
||||
else if(viewWidth <= 0)
|
||||
{
|
||||
if(hasActions() || data.length > MAX_INVENTORY_SIZE)
|
||||
inventoryViewSize -= INVENTORY_ROW_SIZE;
|
||||
pageCountX = (int)Math.ceil(data.length / inventoryViewSize);
|
||||
pageCountY = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO: NYI
|
||||
}
|
||||
|
||||
|
||||
//TODO: Make inventory fit to content
|
||||
setSize(MAX_INVENTORY_SIZE);
|
||||
|
||||
if(pageCountX > 1)
|
||||
{
|
||||
action("previous", MAX_INVENTORY_SIZE - INVENTORY_ROW_SIZE);
|
||||
action("next", MAX_INVENTORY_SIZE - 1);
|
||||
@ -208,7 +224,7 @@ abstract public class ExplorerGui<T> extends ActionGui
|
||||
|
||||
public boolean canGoNext()
|
||||
{
|
||||
return currentPageX < getPageCount();
|
||||
return currentPageX < pageCountX;
|
||||
}
|
||||
|
||||
public boolean canGoPrevious()
|
||||
@ -218,22 +234,12 @@ abstract public class ExplorerGui<T> extends ActionGui
|
||||
|
||||
public int getPageCount()
|
||||
{
|
||||
if(data.length == 0) return 0;
|
||||
|
||||
if(viewWidth > 0)
|
||||
{
|
||||
if(viewWidth > INVENTORY_ROW_SIZE) return 1;
|
||||
return (int)Math.ceil(viewWidth / (INVENTORY_ROW_SIZE - 1));
|
||||
}
|
||||
|
||||
return (int)Math.ceil(data.length / (MAX_INVENTORY_SIZE - (hasActions() ? INVENTORY_ROW_SIZE : 0)));
|
||||
return pageCountX;
|
||||
}
|
||||
|
||||
public int getVerticalPageCount()
|
||||
{
|
||||
if(viewWidth <= 0) return 0;
|
||||
|
||||
return (int)Math.ceil(data.length / (MAX_INVENTORY_COLUMN_SIZE - (hasActions() ? 0 : 1)));
|
||||
return pageCountY;
|
||||
}
|
||||
|
||||
protected Mode getMode() {return mode;}
|
||||
|
@ -63,6 +63,7 @@ abstract public class GuiUtils
|
||||
|
||||
static public void hideItemAttributes(ItemMeta meta)
|
||||
{
|
||||
if(addItemFlagsMethod == null) return;
|
||||
try
|
||||
{
|
||||
addItemFlagsMethod.invoke(meta, itemFlagValues);
|
||||
@ -113,6 +114,7 @@ abstract public class GuiUtils
|
||||
meta.setLore(loreLines);
|
||||
if(itemStack.getType().equals(Material.MAP))
|
||||
hideItemAttributes(meta);
|
||||
itemStack.setItemMeta(meta);
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
|
@ -19,33 +19,49 @@
|
||||
package fr.moribus.imageonmap.guiproko.list;
|
||||
|
||||
import fr.moribus.imageonmap.guiproko.core.ExplorerGui;
|
||||
import fr.moribus.imageonmap.guiproko.core.GuiUtils;
|
||||
import fr.moribus.imageonmap.map.ImageMap;
|
||||
import fr.moribus.imageonmap.map.MapManager;
|
||||
import java.util.List;
|
||||
import fr.moribus.imageonmap.map.PosterMap;
|
||||
import fr.moribus.imageonmap.map.SingleMap;
|
||||
import fr.moribus.imageonmap.ui.MapItemManager;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class MapListGui extends ExplorerGui<ImageMap>
|
||||
{
|
||||
private ImageMap[] maps;
|
||||
|
||||
@Override
|
||||
protected ItemStack getViewItem(ImageMap data)
|
||||
{
|
||||
if(data instanceof SingleMap)
|
||||
{
|
||||
return GuiUtils.makeItem(Material.EMPTY_MAP, data.getName(), "Single map", "#" + data.getId());
|
||||
}
|
||||
PosterMap map = (PosterMap) data;
|
||||
return GuiUtils.makeItem(Material.MAP, data.getName(),
|
||||
"Poster map ("+map.getColumnCount()+"x"+map.getRowCount()+")", "#" + data.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemStack getPickedUpItem(ImageMap map)
|
||||
{
|
||||
if(map instanceof SingleMap)
|
||||
{
|
||||
return MapItemManager.createMapItem(map.getMapsIDs()[0], map.getName());
|
||||
}
|
||||
|
||||
MapItemManager.give((Player) getPlayer(), map);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onUpdate()
|
||||
{
|
||||
List<ImageMap> listMaps = MapManager.getMapList(getPlayer().getUniqueId());
|
||||
maps = new ImageMap[listMaps.size()];
|
||||
|
||||
for(int i = listMaps.size(); i --> 0;)
|
||||
{
|
||||
maps[i] = listMaps.get(i);
|
||||
}
|
||||
|
||||
ImageMap[] maps = MapManager.getMaps(getPlayer().getUniqueId());
|
||||
setData(maps);
|
||||
setTitle("Your maps (" + maps.length + " total)");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -138,6 +138,11 @@ abstract public class MapManager
|
||||
{
|
||||
return getPlayerMapStore(playerUUID).getMapList();
|
||||
}
|
||||
|
||||
static public ImageMap[] getMaps(UUID playerUUID)
|
||||
{
|
||||
return getPlayerMapStore(playerUUID).getMaps();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of minecraft maps used by the images rendered by the given player.
|
||||
|
@ -127,6 +127,11 @@ public class PlayerMapStore implements ConfigurationSerializable
|
||||
return new ArrayList(mapList);
|
||||
}
|
||||
|
||||
public synchronized ImageMap[] getMaps()
|
||||
{
|
||||
return mapList.toArray(new ImageMap[mapList.size()]);
|
||||
}
|
||||
|
||||
public synchronized ImageMap getMap(String mapId)
|
||||
{
|
||||
for(ImageMap map : mapList)
|
||||
|
Loading…
Reference in New Issue
Block a user