Fix memmory leaks

This commit is contained in:
cswhite2000 2017-07-16 22:04:25 -07:00
parent 416c555e0d
commit a3ddeaac9a
23 changed files with 107 additions and 242 deletions

View File

@ -11,7 +11,7 @@ import java.util.List;
public class Interface {
private Player player;
protected Player player;
private List<Button> buttons = new ArrayList<>();
private List<Object> data = new ArrayList<>();
@ -19,6 +19,7 @@ public class Interface {
setData(data);
setPlayer(viewer);
setButtons(buttons);
InterfaceManager.cleanUp(this);
}
public void setData(Object... data) {
@ -72,4 +73,10 @@ public class Interface {
return null;
}
public void cleanUp() {
player = null;
buttons = null;
data = null;
}
}

View File

@ -1,5 +1,6 @@
package tc.oc.commons.bukkit.gui;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.InventoryView;
@ -65,4 +66,22 @@ public class InterfaceManager {
return null;
}
public static void cleanUp(Interface inventory) {
for (Interface inv: inventories) {
if (inv != inventory && inv.getPlayer() == inventory.getPlayer()) {
inv.cleanUp();
inventories.remove(inv);
}
}
}
public static void cleanUp(Player player) {
for (Interface inventory: inventories) {
if (inventory.getPlayer() == player) {
inventory.cleanUp();
inventories.remove(inventory);
}
}
}
}

View File

@ -1,68 +0,0 @@
package tc.oc.commons.bukkit.gui.buttons.lastPage;
import tc.oc.commons.bukkit.gui.Interface;
import tc.oc.commons.bukkit.gui.InterfaceManager;
import tc.oc.commons.bukkit.gui.buttons.Button;
import tc.oc.commons.bukkit.gui.interfaces.ChestInterface;
import tc.oc.commons.bukkit.gui.interfaces.SinglePageInterface;
import tc.oc.commons.bukkit.util.Constants;
import tc.oc.commons.bukkit.util.ItemCreator;
import org.bukkit.Material;
import org.bukkit.entity.Player;
public class LastPageButton extends Button {
private SinglePageInterface page;
public LastPageButton(int slot) {
super(null, slot);
}
public LastPageButton(SinglePageInterface gui, int slot) {
super(null, slot);
this.page = gui;
this.setIcon(new ItemCreator(Material.BARRIER)
.setName(Constants.PREFIX + "Previous"));
}
public SinglePageInterface getPage() {
return this.page;
}
public Interface getLastPage(ChestInterface gui) {
if (this.page == null) {
return gui.getParent();
}
try {
int page = this.page.page;
Interface previousInterface = getPage().getParent() != null ? getPage().getParent() : gui;
try {
Interface gui1 = /*page != 0 ? new SinglePageInterface(this.page.rawButtons, this.page.getSize(), this.page.rawTitle, this.page.getParent(), this.page.page - 1) :*/ previousInterface;
if (gui1 instanceof SinglePageInterface) {
// ((SinglePageInterface)gui1).updateButtons();
}
return gui1;
} catch (Exception e) {
return previousInterface;
}
} catch (Exception e) {
return gui;
}
}
@Override
public void function(Player player) {
Interface currentInterface = InterfaceManager.getInterface(player.getOpenInventory());
//Interface lastPage = getLastPage((ChestInterface)currentInterface);
//player.openInventory(lastPage.getInventory());
if (currentInterface instanceof SinglePageInterface) {
((SinglePageInterface)currentInterface).openLastPage(player);
} else {
Interface parent = ((ChestInterface) currentInterface).getParent();
player.openInventory(parent.getInventory());
//parent.updateButtons();
}
}
}

View File

@ -10,9 +10,6 @@ import tc.oc.commons.bukkit.util.ItemCreator;
import org.bukkit.Material;
import org.bukkit.entity.Player;
/**
* Created by ShinyDialga45 on 4/10/2015.
*/
public class NextPageButton extends Button {
private SinglePageInterface page;
@ -33,7 +30,7 @@ public class NextPageButton extends Button {
nextPage.update();
return nextPage != null ? nextPage : chestInterface;
}
SinglePageInterface nextPage = new SinglePageInterface(this.page.getPlayer(), this.page.rawButtons, this.page.getSize(), this.page.rawTitle, this.page, this.page.page + 1);
SinglePageInterface nextPage = new SinglePageInterface(this.page.getPlayer(), this.page.rawButtons, this.page.getSize(), this.page.rawTitle, this.page.page + 1);
nextPage.update();
return nextPage != null ? nextPage : chestInterface;
} catch (Exception e) {

View File

@ -12,15 +12,13 @@ import java.util.List;
public class ChestInterface extends Interface {
private int size;
public Interface parent;
private Inventory inventory;
private String title;
public ChestInterface(Player player, List<Button> buttons, int size, String title, Interface parent) {
public ChestInterface(Player player, List<Button> buttons, int size, String title) {
super(player, buttons);
setSize(size);
setTitle(title);
setParent(parent);
this.inventory = Bukkit.createInventory(new SimpleInterfaceHolder(inventory, this, player.getWorld()), getSize(), getTitle());
//setInventory(new InterfaceInventory(this, inventory));
}
@ -47,17 +45,15 @@ public class ChestInterface extends Interface {
return this.title;
}
public void setParent(Interface parent) {
this.parent = parent;
}
public Interface getParent() {
return this.parent;
}
@Override
public Inventory getInventory() {
return this.inventory;
}
@Override
public void cleanUp() {
super.cleanUp();
inventory = null;
}
}

View File

@ -35,7 +35,7 @@ public class ChestOptionsPageInterface extends SinglePageInterface {
}
public ChestOptionsPageInterface(Player player, List<Button> buttons, int size, String title, Interface parent, int i, Object... data) {
super(player, buttons, size, title + (i > 1 ? " - " + i : ""), parent, 1, data);
super(player, buttons, size, title + (i > 1 ? " - " + i : ""), 1, data);
}
@Override
@ -78,9 +78,7 @@ public class ChestOptionsPageInterface extends SinglePageInterface {
if (buttons.size() != 0) {
ArrayList<Button> currentButtons = new ArrayList<>();
for (Button button : getDefaultButtons()) {
if (button.equals(this.lastPageButton)) {
button.setIcon(button.getIcon().setSize(page - 1));
} else if (button.equals(this.nextPageButton)) {
if (button.equals(this.nextPageButton)) {
button.setIcon(button.getIcon().setSize(page + 1));
}
button.setSlot(button.getSlot());
@ -139,7 +137,6 @@ public class ChestOptionsPageInterface extends SinglePageInterface {
EmptyButton button = new EmptyButton(integer);
defaultButtons.add(button);
}
defaultButtons.add(this.lastPageButton);
defaultButtons.add(this.nextPageButton);
}

View File

@ -31,8 +31,8 @@ public class ChestPageInterface extends ChestInterface {
this(null, buttons, size, title, parent);
}
public ChestPageInterface(Player player, List<Button> buttons, int size, String title, Interface parent, Object... data) {
super(player, buttons, size, title, parent);
public ChestPageInterface(Player player, List<Button> buttons, int size, String title, Object... data) {
super(player, buttons, size, title);
/*
MultiPageInterfaces must be contain necessary default items, if it cannot contain the next page item
(currently has the highest slot value of a necessary default item), it won't allow proper navagation.
@ -58,7 +58,7 @@ public class ChestPageInterface extends ChestInterface {
if (empty.getSlot() < getSize()) {
buttons.add(empty);
}
pages.add(new ChestInterface(null, buttons, getSize(), getTitle(), getParent()));
pages.add(new ChestInterface(null, buttons, getSize(), getTitle()));
return;
}
int allButtons = getDefaultButtons().size() + getButtons().size();
@ -98,7 +98,7 @@ public class ChestPageInterface extends ChestInterface {
// currentButtons.remove(this.nextPageButton);
}
String suffix = i > 1 ? " - " + i : "";
ChestInterface gui = new ChestInterface(null, currentButtons, getSize(), getTitle() + suffix, getParent());
ChestInterface gui = new ChestInterface(null, currentButtons, getSize(), getTitle() + suffix);
gui.updateInventory();
pages.add(gui);
}

View File

@ -13,14 +13,12 @@ import java.util.List;
public class HopperInterface extends Interface {
private int size;
private Interface parent;
private Inventory inventory;
private String title;
public HopperInterface(Player player, List<Button> buttons, String title, Interface parent) {
super(player, buttons);
setTitle(title);
setParent(parent);
this.inventory = Bukkit.createInventory(new SimpleInterfaceHolder(inventory, this, player.getWorld()), InventoryType.HOPPER, getTitle());
/*//this.inventory = player.getInventory();
//inventory = Bukkit.createInventory(new SimpleInterfaceHolder(inventory, this), InventoryType.valueOf(args), getTitle());
@ -38,17 +36,15 @@ public class HopperInterface extends Interface {
return this.title;
}
public void setParent(Interface parent) {
this.parent = parent;
}
public Interface getParent() {
return this.parent;
}
@Override
public Inventory getInventory() {
return this.inventory;
}
@Override
public void cleanUp() {
super.cleanUp();
inventory = null;
}
}

View File

@ -1,25 +0,0 @@
package tc.oc.commons.bukkit.gui.interfaces;
import org.bukkit.inventory.Inventory;
import tc.oc.commons.bukkit.gui.Interface;
public class InterfaceInventory {
private Interface gui;
private Inventory inventory;
public InterfaceInventory(Interface gui, Inventory inventory) {
//InterfaceManager.registerInventory(this);
this.gui = gui;
this.inventory = inventory;
}
public Interface getInterface() {
return this.gui;
}
public Inventory getInventory() {
return this.inventory;
}
}

View File

@ -3,7 +3,6 @@ package tc.oc.commons.bukkit.gui.interfaces;
import tc.oc.commons.bukkit.gui.Interface;
import tc.oc.commons.bukkit.gui.buttons.Button;
import tc.oc.commons.bukkit.gui.buttons.empty.EmptyButton;
import tc.oc.commons.bukkit.gui.buttons.lastPage.LastPageButton;
import tc.oc.commons.bukkit.gui.buttons.nextPage.NextPageButton;
import tc.oc.commons.bukkit.util.Constants;
import tc.oc.commons.bukkit.util.ItemCreator;
@ -28,15 +27,14 @@ public class SinglePageInterface extends ChestInterface {
public String rawTitle;
public List<Button> rawButtons = new ArrayList<>();
public final LastPageButton lastPageButton = new LastPageButton(this, 0);
public final NextPageButton nextPageButton = new NextPageButton(this, 8);
public SinglePageInterface(Player player, List<Button> buttons, int size, String title, Interface parent) {
this(player, buttons, size, title, parent, 1);
public SinglePageInterface(Player player, List<Button> buttons, int size, String title) {
this(player, buttons, size, title, 1);
}
public SinglePageInterface(Player player, List<Button> buttons, int size, String title, Interface parent, int page, Object... data) {
super(player, buttons, size, title + (page > 1 ? " - " + page : ""), parent);
public SinglePageInterface(Player player, List<Button> buttons, int size, String title, int page, Object... data) {
super(player, buttons, size, title + (page > 1 ? " - " + page : ""));
this.rawTitle = title;
this.rawButtons = buttons;
/*
@ -53,7 +51,7 @@ public class SinglePageInterface extends ChestInterface {
if (page > 0) {
update();
} else {
player.openInventory(getParent().getInventory());
player.openInventory(getInventory());
//getParent().updateButtons();
}
}
@ -155,7 +153,6 @@ public class SinglePageInterface extends ChestInterface {
public void setDefaultButtons() {
defaultButtons.clear();
defaultButtons.add(this.lastPageButton);
defaultButtons.add(this.nextPageButton);
for (Integer integer : new Integer[]{1, 2, 3, 4, 5, 6, 7, 9, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}) {
if (integer > getSize()) {
@ -198,4 +195,10 @@ public class SinglePageInterface extends ChestInterface {
return this.defaultButtons;
}
@Override
public void cleanUp() {
super.cleanUp();
defaultButtons = null;
rawButtons = null;
}
}

View File

@ -16,8 +16,8 @@ public class ChestRenderInterface extends ChestInterface {
private Coordinate origin;
public ChestRenderInterface(Player player, List<Button> buttons, int size, String title, Interface parent) {
super(player, buttons, size, title, parent);
public ChestRenderInterface(Player player, List<Button> buttons, int size, String title) {
super(player, buttons, size, title);
this.origin = new Coordinate(0, 0);
}

View File

@ -16,8 +16,8 @@ public class GridTextRenderInterface extends ChestRenderInterface {
private String text;
public GridTextRenderInterface(Player player, List<Button> buttons, int size, String title, Interface parent, String text) {
super(player, buttons, size, title, parent);
public GridTextRenderInterface(Player player, List<Button> buttons, int size, String title, String text) {
super(player, buttons, size, title);
this.text = text;
}

View File

@ -1,24 +1,19 @@
package tc.oc.pgm.listeners;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.event.EventBus;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import org.bukkit.event.player.PlayerQuitEvent;
import tc.oc.commons.bukkit.event.InterfaceOpenEvent;
import tc.oc.commons.bukkit.gui.Interface;
import tc.oc.commons.bukkit.gui.InterfaceManager;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import tc.oc.commons.bukkit.gui.buttons.Button;
import tc.oc.commons.core.plugin.PluginFacet;
import tc.oc.pgm.events.ObserverInteractEvent;
import tc.oc.pgm.tokens.gui.MainTokenButton;
import javax.inject.Inject;
import javax.inject.Singleton;
@ -83,4 +78,9 @@ public class InterfaceListener implements Listener, PluginFacet {
}
}
@EventHandler
public void onPlayerleave(PlayerQuitEvent event) {
InterfaceManager.cleanUp(event.getPlayer());
}
}

View File

@ -1,33 +1,20 @@
package tc.oc.pgm.menu;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import tc.oc.commons.bukkit.event.ObserverKitApplyEvent;
import tc.oc.commons.bukkit.raindrops.RaindropConstants;
import tc.oc.commons.bukkit.tokens.TokenUtil;
import tc.oc.commons.core.util.Comparables;
import tc.oc.pgm.events.MatchEndEvent;
import tc.oc.pgm.events.ObserverInteractEvent;
import tc.oc.pgm.match.Match;
import tc.oc.pgm.match.MatchPlayer;
import tc.oc.pgm.menu.gui.MainMenuButton;
import tc.oc.pgm.teams.Team;
import tc.oc.pgm.tokens.gui.MainTokenButton;
import java.time.Duration;
public class MenuListener implements Listener {
@EventHandler
public void onObserverInteract(ObserverInteractEvent event) {
if (event.getClickType() == ClickType.RIGHT) {
MainMenuButton button = new MainMenuButton(event.getPlayer().getBukkit());
MainMenuButton button = new MainMenuButton();
ItemStack main = button.getIcon().create();
//isSimilar so that stacks of the item will still open the menu
if (event.getPlayer().getBukkit().getItemInHand().isSimilar(main)) {
@ -39,7 +26,7 @@ public class MenuListener implements Listener {
@EventHandler
public void giveKitToObservers(ObserverKitApplyEvent event) {
Player player = event.getPlayer();
ItemStack main = new MainMenuButton(player).getIcon().create();
ItemStack main = new MainMenuButton().getIcon().create();
player.getInventory().setItem(5, main);
}
}

View File

@ -9,7 +9,7 @@ import tc.oc.pgm.tokens.gui.MainTokenMenu;
public class MainMenuButton extends Button {
public MainMenuButton(Player player) {
public MainMenuButton() {
super(new ItemCreator(Material.ENCHANTED_BOOK)
.setName(Constants.PREFIX + "Main Menu")
.addLore(Constants.SUBTEXT + "Open the Main Menu",

View File

@ -21,29 +21,20 @@ import java.util.HashMap;
import java.util.List;
public class MainMenuInterface extends ChestInterface {
private static MainMenuInterface instance;
public MainMenuInterface(Player player) {
super(player, new ArrayList<>(), 27, "Main Menu", getInstance());
super(player, new ArrayList<>(), 27, "Main Menu");
updateButtons();
instance = this;
}
@Override
public ChestInterface getParent() {
return getInstance();
}
public static MainMenuInterface getInstance() {
return instance;
}
@Override
public void updateButtons() {
List<Button> buttons = new ArrayList<>();
MainTokenButton.getInstance().setSlot(11);
buttons.add(MainTokenButton.getInstance());
MainTokenButton button = new MainTokenButton();
button.setSlot(11);
buttons.add(button);
HashMap<String, Double> stats = StatsUtil.getStats(getPlayer());

View File

@ -32,7 +32,7 @@ import java.util.*;
public class SettingsInterface extends SinglePageInterface {
public SettingsInterface(Player player) {
super(player, new ArrayList<>(), 54, "Settings", MainMenuInterface.getInstance());
super(player, new ArrayList<>(), 54, "Settings");
update();
}
@ -80,11 +80,14 @@ public class SettingsInterface extends SinglePageInterface {
@Override
public void setDefaultButtons() {
defaultButtons.clear();
defaultButtons.add(this.lastPageButton);
this.lastPageButton.setSlot(49);
this.lastPageButton.setIcon(new ItemCreator(Material.WOOL)
.setData(14)
.setName(ChatColor.GREEN + "Go Back"));
defaultButtons.add(new Button(new ItemCreator(Material.WOOL)
.setData(14)
.setName(ChatColor.GREEN + "Go Back"), 49) {
@Override
public void function(Player player) {
player.openInventory(new MainMenuInterface(player).getInventory());
}
});
for (Integer integer : new Integer[]{
0, 1, 2, 3, 4, 5, 6, 7, 8,
9, 17,

View File

@ -33,10 +33,11 @@ public class TokenListener implements Listener {
@EventHandler
public void onObserverInteract(ObserverInteractEvent event) {
if (event.getClickType() == ClickType.RIGHT) {
ItemStack main = MainTokenButton.getInstance().getIcon().create();
MainTokenButton button = new MainTokenButton();
ItemStack main = button.getIcon().create();
//isSimilar so that stacks of the item will still open the menu
if (event.getPlayer().getBukkit().getItemInHand().isSimilar(main)) {
MainTokenButton.getInstance().function(event.getPlayer().getBukkit());
button.function(event.getPlayer().getBukkit());
}
}
}

View File

@ -7,15 +7,9 @@ import org.bukkit.Material;
import org.bukkit.entity.Player;
public class MainTokenButton extends Button {
private static MainTokenButton instance;
public MainTokenButton() {
super(13);
instance = this;
}
public static MainTokenButton getInstance() {
return instance;
}
@Override

View File

@ -14,24 +14,10 @@ import java.util.ArrayList;
import java.util.List;
public class MainTokenMenu extends ChestInterface {
private static MainTokenMenu instance;
private Player player;
public MainTokenMenu(Player player) {
super(player, new ArrayList<Button>(), 36, "Token Menu", getInstance());
this.player = player;
super(player, new ArrayList<Button>(), 36, "Token Menu");
updateButtons();
instance = this;
}
@Override
public ChestInterface getParent() {
return getInstance();
}
public static MainTokenMenu getInstance() {
return instance;
}
@Override

View File

@ -19,28 +19,14 @@ import java.util.ArrayList;
import java.util.List;
public class MutationConfirmInterface extends ChestInterface {
private static MutationConfirmInterface instance;
private Player player;
private Mutation mutation;
public MutationConfirmInterface(Player player, Mutation mutation) {
super(player, new ArrayList<Button>(), 27, "Confirmation Menu", getInstance());
this.player = player;
super(player, new ArrayList<Button>(), 27, "Confirmation Menu");
updateButtons();
instance = this;
this.mutation = mutation;
}
@Override
public ChestInterface getParent() {
return getInstance();
}
public static MutationConfirmInterface getInstance() {
return instance;
}
@Override
public void updateButtons() {
List<Button> buttons = new ArrayList<>();

View File

@ -12,6 +12,7 @@ import tc.oc.commons.bukkit.util.Constants;
import tc.oc.commons.bukkit.util.ItemCreator;
import tc.oc.pgm.PGM;
import tc.oc.pgm.PGMTranslations;
import tc.oc.pgm.menu.gui.MainMenuInterface;
import tc.oc.pgm.mutation.Mutation;
import tc.oc.pgm.mutation.MutationMatchModule;
import tc.oc.pgm.mutation.command.MutationCommands;
@ -22,7 +23,7 @@ import java.util.List;
public class MutationTokenInterface extends SinglePageInterface {
public MutationTokenInterface(Player player) {
super(player, new ArrayList<>(), 54, "Token Menu - Mutations", new MainTokenMenu(player));
super(player, new ArrayList<>(), 54, "Token Menu - Mutations");
update();
}
@ -86,11 +87,14 @@ public class MutationTokenInterface extends SinglePageInterface {
@Override
public void setDefaultButtons() {
defaultButtons.clear();
defaultButtons.add(this.lastPageButton);
this.lastPageButton.setSlot(49);
this.lastPageButton.setIcon(new ItemCreator(Material.WOOL)
.setData(14)
.setName(ChatColor.GREEN + "Go Back"));
defaultButtons.add(new Button(new ItemCreator(Material.WOOL)
.setData(14)
.setName(ChatColor.GREEN + "Go Back"), 49) {
@Override
public void function(Player player) {
player.openInventory(new MainTokenMenu(player).getInventory());
}
});
for (Integer integer : new Integer[]{
0, 1, 2, 3, 4, 5, 6, 7, 8,
9, 17,

View File

@ -15,24 +15,9 @@ import java.util.List;
public class TokenPurchaseInterface extends ChestInterface {
private static TokenPurchaseInterface instance;
private Player player;
public TokenPurchaseInterface(Player player) {
super(player, new ArrayList<Button>(), 36, "Purchase Tokens", getInstance());
this.player = player;
super(player, new ArrayList<Button>(), 36, "Purchase Tokens");
updateButtons();
instance = this;
}
@Override
public ChestInterface getParent() {
return getInstance();
}
public static TokenPurchaseInterface getInstance() {
return instance;
}
@Override
@ -108,4 +93,10 @@ public class TokenPurchaseInterface extends ChestInterface {
};
}
@Override
public void cleanUp() {
super.cleanUp();
player = null;
}
}