Compare commits

...

2 Commits
2.4.1 ... 2.4.3

Author SHA1 Message Date
Jikoo
7256494df3 Fix inventories of players on their first login not being openable
Closes #7
2016-04-18 13:05:56 -04:00
Jikoo
1fbaa5b2a9 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.
2016-04-11 18:45:23 -04:00
20 changed files with 203 additions and 149 deletions

View File

@@ -40,6 +40,7 @@ public class OpenEnderPluginCommand implements CommandExecutor {
this.plugin = plugin; this.plugin = plugin;
} }
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "You can't use this from the console."); sender.sendMessage(ChatColor.RED + "You can't use this from the console.");
@@ -72,6 +73,7 @@ public class OpenEnderPluginCommand implements CommandExecutor {
} }
new BukkitRunnable() { new BukkitRunnable() {
@Override
public void run() { public void run() {
List<Player> matches = Bukkit.matchPlayer(name); List<Player> matches = Bukkit.matchPlayer(name);
final OfflinePlayer offlinePlayer; final OfflinePlayer offlinePlayer;
@@ -83,11 +85,12 @@ public class OpenEnderPluginCommand implements CommandExecutor {
if (!player.isOnline()) { if (!player.isOnline()) {
return; return;
} }
if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore()) { if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline()) {
player.sendMessage(ChatColor.RED + "Player not found!"); player.sendMessage(ChatColor.RED + "Player not found!");
return; return;
} }
new BukkitRunnable() { new BukkitRunnable() {
@Override
public void run() { public void run() {
if (!player.isOnline()) { if (!player.isOnline()) {
return; return;

View File

@@ -40,6 +40,7 @@ public class OpenInvPluginCommand implements CommandExecutor {
this.plugin = plugin; this.plugin = plugin;
} }
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "You can't use this from the console."); sender.sendMessage(ChatColor.RED + "You can't use this from the console.");
@@ -72,6 +73,7 @@ public class OpenInvPluginCommand implements CommandExecutor {
} }
new BukkitRunnable() { new BukkitRunnable() {
@Override
public void run() { public void run() {
List<Player> matches = Bukkit.matchPlayer(name); List<Player> matches = Bukkit.matchPlayer(name);
final OfflinePlayer offlinePlayer; final OfflinePlayer offlinePlayer;
@@ -83,11 +85,12 @@ public class OpenInvPluginCommand implements CommandExecutor {
if (!player.isOnline()) { if (!player.isOnline()) {
return; return;
} }
if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore()) { if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline()) {
player.sendMessage(ChatColor.RED + "Player not found!"); player.sendMessage(ChatColor.RED + "Player not found!");
return; return;
} }
new BukkitRunnable() { new BukkitRunnable() {
@Override
public void run() { public void run() {
if (!player.isOnline()) { if (!player.isOnline()) {
return; return;

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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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) {
owner.saveData(); boolean offline = transaction.isEmpty() && !playerOnline;
return transaction.isEmpty() && !playerOnline; if (offline && save) {
owner.saveData();
}
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

@@ -1,6 +1,6 @@
name: OpenInv name: OpenInv
main: com.lishid.openinv.OpenInv main: com.lishid.openinv.OpenInv
version: 2.4.1 version: 2.4.3
author: lishid author: lishid
authors: [Jikoo] authors: [Jikoo]
description: > description: >