Reduce redundant saves for ender chests as well

While they don't suffer the same owner-related issues that player inventories did, there's no need to save so many times.
This commit is contained in:
Jikoo
2016-04-11 18:45:23 -04:00
parent eeb28b4210
commit 1fbaa5b2a9
17 changed files with 194 additions and 146 deletions

View File

@@ -23,9 +23,9 @@ public interface ISpecialEnderChest {
public Inventory getBukkitInventory(); public Inventory getBukkitInventory();
public boolean inventoryRemovalCheck(); public boolean inventoryRemovalCheck(boolean save);
public void setPlayerOnline(Player p); public void setPlayerOnline(Player player);
/** /**
* Sets the Player associated with this ISpecialEnderChest offline. * Sets the Player associated with this ISpecialEnderChest offline.

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_4_5.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return this.inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_4_6.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_4_R1.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_5_R2.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_6_R2.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_6_R3.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return this.inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventory;
public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest { public class SpecialEnderChest extends InventorySubcontainer implements IInventory, ISpecialEnderChest {
public List<HumanEntity> transaction = new ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new ArrayList<HumanEntity>();
public boolean playerOnline = false; public boolean playerOnline = false;
private final CraftPlayer owner; private CraftPlayer owner;
private final InventoryEnderChest enderChest; private final InventoryEnderChest enderChest;
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
private final CraftInventory inventory = new CraftInventory(this); private final CraftInventory inventory = new CraftInventory(this);
@@ -60,22 +60,25 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
} }
@Override @Override
public boolean inventoryRemovalCheck() { public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData(); owner.saveData();
return transaction.isEmpty() && !playerOnline; }
return offline;
} }
@Override @Override
public void setPlayerOnline(Player p) { public void setPlayerOnline(Player player) {
if (!playerOnline) { if (!playerOnline) {
try { try {
InventoryEnderChest playerEnderChest = ((CraftPlayer) p).getHandle().getEnderChest(); owner = (CraftPlayer) player;
InventoryEnderChest playerEnderChest = owner.getHandle().getEnderChest();
Field field = playerEnderChest.getClass().getField("items"); Field field = playerEnderChest.getClass().getField("items");
field.setAccessible(true); field.setAccessible(true);
field.set(playerEnderChest, this.items); field.set(playerEnderChest, this.items);
} }
catch (Exception e) {} catch (Exception e) {}
p.saveData();
playerOnline = true; playerOnline = true;
} }
} }
@@ -83,7 +86,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public boolean setPlayerOffline() { public boolean setPlayerOffline() {
playerOnline = false; playerOnline = false;
return inventoryRemovalCheck(); return inventoryRemovalCheck(false);
} }
@Override @Override
@@ -99,7 +102,7 @@ public class SpecialEnderChest extends InventorySubcontainer implements IInvento
@Override @Override
public void onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
this.inventoryRemovalCheck(); this.inventoryRemovalCheck(true);
} }
@Override @Override