diff --git a/TwosideKeeper.jar b/TwosideKeeper.jar index 43b2ff6..d50e577 100644 Binary files a/TwosideKeeper.jar and b/TwosideKeeper.jar differ diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/InventoryUtils.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/InventoryUtils.java index b23900e..cbd6742 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/InventoryUtils.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/InventoryUtils.java @@ -7,6 +7,7 @@ import java.util.List; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; @@ -284,8 +285,14 @@ public class InventoryUtils { } public static int getInventoryNumberHash(Inventory destination) { - String hash = "-"+(Math.signum(destination.getLocation().getBlockX()+destination.getLocation().getBlockZ())>0?1:0)+Integer.toString(Math.abs(destination.getLocation().getBlockX())%1000)+Integer.toString(Math.abs(destination.getLocation().getBlockY())%1000)+Integer.toString(Math.abs(destination.getLocation().getBlockZ())%1000); - return Integer.parseInt(hash); + Location loc = destination.getLocation(); + int id=-99; + if (loc!=null) { + String hash = "-"+(Math.signum(destination.getLocation().getBlockX()+destination.getLocation().getBlockZ())>0?1:0)+Integer.toString(Math.abs(destination.getLocation().getBlockX())%1000)+Integer.toString(Math.abs(destination.getLocation().getBlockY())%1000)+Integer.toString(Math.abs(destination.getLocation().getBlockZ())%1000); + id = Integer.parseInt(hash); + TwosideKeeper.itemCubeGraph.addVertex(id); + } + return id; } public static ItemStack[] RemoveAllNullItems(ItemStack[] contents) { diff --git a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/ItemCubeUtils.java b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/ItemCubeUtils.java index efe122d..690471d 100644 --- a/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/ItemCubeUtils.java +++ b/src/sig/plugin/TwosideKeeper/HelperStructures/Utils/ItemCubeUtils.java @@ -439,6 +439,32 @@ public class ItemCubeUtils { TwosideKeeper.log(" "+edge.toString(), 0); } } + + public static void setupGraphForChest(Inventory inventory) { + if (inventory!=null && inventory.getHolder() instanceof Player && + (PlayerStructure.GetPlayerStructure(((Player)inventory.getHolder())).isViewingItemCube || + PlayerStructure.GetPlayerStructure(((Player)inventory.getHolder())).opened_another_cube)&& + inventory.getTitle()!=null && inventory.getTitle().contains("Item Cube #")) { + return; //This is an item cube, don't setup a graph for it. + } + UndirectedGraph graph = TwosideKeeper.itemCubeGraph; + + graph.addVertex(InventoryUtils.getInventoryNumberHash(inventory)); //Root Vertex. + + for (ItemStack it : inventory.getContents()) { + if (ItemUtils.isValidItem(it) && isItemCube(it)) { + int id = getItemCubeID(it); + graph.addVertex(id); + graph.addEdge(InventoryUtils.getInventoryNumberHash(inventory), id); + IterateAndAddToGraph(id,graph); + } + } + + for (DefaultEdge edge : graph.edgeSet()) { + TwosideKeeper.log(" "+edge.toString(), 0); + } + } + public static void IterateAndAddToGraph(int id, UndirectedGraph graph) { List contents = getItemCubeContents(id); for (ItemStack it : contents) { @@ -582,10 +608,4 @@ public class ItemCubeUtils { } return false; } - /*public static void setupGraphForChest(Inventory inv) { - if (inv.getType()==InventoryType.CHEST || - inv.getType()==InventoryType.) { - - } - }*/ } diff --git a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java index f8b87be..1b4115b 100644 --- a/src/sig/plugin/TwosideKeeper/TwosideKeeper.java +++ b/src/sig/plugin/TwosideKeeper/TwosideKeeper.java @@ -4882,17 +4882,53 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } if (ItemCubeUtils.isItemCube(ev.getItemDrop().getItemStack())) { - ItemCubeUtils.removeAndUpdateAllEdgesDroppedItem(ItemCubeUtils.getItemCubeID(ev.getItemDrop().getItemStack()),ev.getPlayer()); - + //ItemCubeUtils.removeAndUpdateAllEdgesDroppedItem(ItemCubeUtils.getItemCubeID(ev.getItemDrop().getItemStack()),ev.getPlayer()); + //ItemCubeUtils.DestroyAllTargetEdges(ItemCubeUtils.getItemCubeID(ev.getItemDrop().getItemStack()), TwosideKeeper.itemCubeGraph); + int cubeid = ItemCubeUtils.getItemCubeID(ev.getItemDrop().getItemStack()); if (ev.getPlayer().getOpenInventory()!=null && ev.getPlayer().getOpenInventory().getTitle()!=null && ev.getPlayer().getOpenInventory().getTitle().contains("Item Cube #") && PlayerStructure.GetPlayerStructure(ev.getPlayer()).isViewingItemCube) { //We are viewing an item cube. Update it. int id = Integer.parseInt(ev.getPlayer().getOpenInventory().getTitle().split("#")[1]); - ItemCubeUtils.removeAndUpdateAllEdges(id,ev.getPlayer()); + //ItemCubeUtils.removeAndUpdateAllEdges(id,ev.getPlayer()); + DefaultEdge edge = TwosideKeeper.itemCubeGraph.removeEdge(id, cubeid); + if (edge!=null) { + TwosideKeeper.log("Removed edge "+edge, TwosideKeeper.GRAPH_DEBUG); + } else + edge = TwosideKeeper.itemCubeGraph.removeEdge(PlayerStructure.getPlayerNegativeHash(ev.getPlayer()), cubeid); + if (edge!=null) { + TwosideKeeper.log("Removed edge "+edge, TwosideKeeper.GRAPH_DEBUG); + } + } else { + int id = InventoryUtils.getInventoryNumberHash(ev.getPlayer().getOpenInventory().getTopInventory()); + DefaultEdge edge = TwosideKeeper.itemCubeGraph.removeEdge(id, cubeid); + if (edge!=null) { + TwosideKeeper.log("Removed edge "+edge, TwosideKeeper.GRAPH_DEBUG); + } else + edge = TwosideKeeper.itemCubeGraph.removeEdge(PlayerStructure.getPlayerNegativeHash(ev.getPlayer()), cubeid); + if (edge!=null) { + TwosideKeeper.log("Removed edge "+edge, TwosideKeeper.GRAPH_DEBUG); + } } + + /* else { + ItemCubeUtils.removeAndUpdateAllEdges(InventoryUtils.getInventoryNumberHash(ev.getPlayer().getOpenInventory().getTopInventory()),ev.getPlayer()); + }*/ } + /*if (ItemCubeUtils.isItemCube(ev.getItemDrop().getItemStack())) { + if (ev.getPlayer().getOpenInventory()!=null && + ev.getPlayer().getOpenInventory().getTitle()!=null && + ev.getPlayer().getOpenInventory().getTitle().contains("Item Cube #") && + PlayerStructure.GetPlayerStructure(ev.getPlayer()).isViewingItemCube) { + int id = Integer.parseInt(ev.getPlayer().getOpenInventory().getTitle().split("#")[1]); + int cubeid = ItemCubeUtils.getItemCubeID(ev.getItemDrop().getItemStack()); + DefaultEdge edge = TwosideKeeper.itemCubeGraph.removeEdge(id, cubeid); + TwosideKeeper.log("Removed edge "+edge, TwosideKeeper.GRAPH_DEBUG); + } else { + + } + }*/ return; } @@ -4904,7 +4940,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener { //GenericFunctions.updateSetItemsInInventory(ev.getInventory()); GenericFunctions.updateSetItemsInInventory(ev.getView().getBottomInventory()); GenericFunctions.updateSetItemsInInventory(ev.getView().getTopInventory()); - //ItemCubeUtils.setupGraphForChest(ev.getInventory()); + ItemCubeUtils.setupGraphForChest(ev.getInventory()); } @EventHandler(priority=EventPriority.LOW,ignoreCancelled = true) @@ -5618,6 +5654,11 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (result.size()>0) { ev.setCursor((ItemStack)result.get(0)); } else { + if (ItemCubeUtils.isItemCube(ev.getCursor())) { + int id = ItemCubeUtils.getItemCubeID(ev.getCursor()); + DefaultEdge edge = TwosideKeeper.itemCubeGraph.addEdge(idnumb, id); + TwosideKeeper.log("Added edge "+edge, 0); + } ev.setCursor(new ItemStack(Material.AIR)); log("Cursor should be air.",5); } @@ -5654,6 +5695,11 @@ public class TwosideKeeper extends JavaPlugin implements Listener { if (result.size()>0) { ev.setCursor((ItemStack)result.get(0)); } else { + if (ItemCubeUtils.isItemCube(ev.getCursor())) { + int id = ItemCubeUtils.getItemCubeID(ev.getCursor()); + DefaultEdge edge = TwosideKeeper.itemCubeGraph.addEdge(idnumb, id); + TwosideKeeper.log("Added edge "+edge, 0); + } ev.setCursor(new ItemStack(Material.AIR)); } List itemslist = new ArrayList(); @@ -5768,57 +5814,80 @@ public class TwosideKeeper extends JavaPlugin implements Listener { } } - if (ev.getClickedInventory()!=null) { + if (ev.getClickedInventory()!=null && + ev.getInventory().getType()!=InventoryType.CRAFTING) { Player p = (Player)ev.getWhoClicked(); - if (ev.getAction()==InventoryAction.HOTBAR_SWAP || ev.getAction()==InventoryAction.HOTBAR_MOVE_AND_READD) { + if ((ev.getAction()==InventoryAction.HOTBAR_SWAP || ev.getAction()==InventoryAction.HOTBAR_MOVE_AND_READD)) { Inventory clickedinv = p.getOpenInventory().getTopInventory(); - ItemStack item1 = p.getInventory().getItem(ev.getHotbarButton()); //Bottom to Top - ItemStack item2 = p.getOpenInventory().getItem(ev.getRawSlot()); //Top to Bottom - if (clickedinv!=null && clickedinv.getTitle()!=null && clickedinv.getTitle().contains("Item Cube #") && - ev.getRawSlot()=clickedinv.getSize()) { + if (ev.getInventory()!=null && ev.getInventory().getType()!=InventoryType.CRAFTING) { + for (Integer i : ev.getNewItems().keySet()) { + ItemStack item = ev.getNewItems().get(i); + if (ItemCubeUtils.isItemCube(item)) { + Player p = (Player)ev.getWhoClicked(); + PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); + Inventory clickedinv = ev.getInventory(); + Integer clickedslot = ev.getRawSlots().iterator().next(); + TwosideKeeper.log("Size is "+clickedinv.getSize(), 0); + if (pd.isViewingItemCube && clickedinv.getTitle()!=null && + clickedinv.getTitle().contains("Item Cube #") && + clickedslot=clickedinv.getSize()) { + int clickedid = ItemCubeUtils.getItemCubeID(item); + try { + DefaultEdge edge = TwosideKeeper.itemCubeGraph.addEdge(PlayerStructure.getPlayerNegativeHash(p), clickedid); + TwosideKeeper.log("Added edge "+edge, TwosideKeeper.GRAPH_DEBUG); + } catch (IllegalArgumentException ex) { + ev.setCancelled(true); + ev.setCursor(ev.getCursor()); + return; + } + } else { + int clickedid = ItemCubeUtils.getItemCubeID(item); + try { + DefaultEdge edge = TwosideKeeper.itemCubeGraph.addEdge(InventoryUtils.getInventoryNumberHash(clickedinv), clickedid); + TwosideKeeper.log("Added edge "+edge, TwosideKeeper.GRAPH_DEBUG); + } catch (IllegalArgumentException ex) { + ev.setCancelled(true); + ev.setCursor(ev.getCursor()); + return; + } + } } - } - } + } + } } }