Compare commits

...

3 Commits
2.4.0 ... 2.4.1

Author SHA1 Message Date
Jikoo
eeb28b4210 Reduce duplicate saves and fix for owner coming online for all versions 2016-04-11 18:12:21 -04:00
Jikoo
0ebe6fe132 Properly update PlayerInventory owner when they come online
Closes #5
2016-04-11 17:59:28 -04:00
Jikoo
e39ab10797 Don't load from player.dat for online players
Fixes lishid#40 and #5
2016-04-11 15:44:25 -04:00
37 changed files with 271 additions and 205 deletions

View File

@@ -165,15 +165,6 @@ public class OpenInv extends JavaPlugin {
return getConfig().getBoolean("NotifyAnyChest", true);
}
public boolean getPlayerItemOpenInvStatus(OfflinePlayer player) {
return getConfig().getBoolean("ItemOpenInv." + getPlayerLoader().getPlayerDataID(player) + ".toggle", false);
}
public void setPlayerItemOpenInvStatus(OfflinePlayer player, boolean status) {
getConfig().set("ItemOpenInv." + getPlayerLoader().getPlayerDataID(player) + ".toggle", status);
saveConfig();
}
public boolean getPlayerSilentChestStatus(OfflinePlayer player) {
return getConfig().getBoolean("SilentChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", false);
}

View File

@@ -27,6 +27,7 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scheduler.BukkitRunnable;
import com.lishid.openinv.internal.ISpecialEnderChest;
import com.lishid.openinv.internal.ISpecialPlayerInventory;
@@ -39,19 +40,25 @@ public class OpenInvPlayerListener implements Listener {
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerJoin(PlayerJoinEvent event) {
ISpecialPlayerInventory inventory = plugin.getInventoryFor(event.getPlayer());
if (inventory != null) {
inventory.setPlayerOnline(event.getPlayer());
}
ISpecialEnderChest chest = plugin.getEnderChestFor(event.getPlayer());
if (chest != null) {
chest.setPlayerOnline(event.getPlayer());
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(final PlayerJoinEvent event) {
new BukkitRunnable() {
@Override
public void run() {
if (!event.getPlayer().isOnline()) {
return;
}
ISpecialPlayerInventory inventory = plugin.getInventoryFor(event.getPlayer());
if (inventory != null) {
inventory.setPlayerOnline(event.getPlayer());
event.getPlayer().updateInventory();
}
ISpecialEnderChest chest = plugin.getEnderChestFor(event.getPlayer());
if (chest != null) {
chest.setPlayerOnline(event.getPlayer());
}
}
}.runTask(plugin);
}
@EventHandler(priority = EventPriority.MONITOR)

View File

@@ -19,8 +19,15 @@ package com.lishid.openinv.internal;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
public interface IPlayerDataManager {
public Player loadPlayer(OfflinePlayer offline);
public abstract class IPlayerDataManager {
public final Player loadPlayer(OfflinePlayer offline) {
if (offline.isOnline()) {
return offline.getPlayer();
}
return this.loadOfflinePlayer(offline);
}
public String getPlayerDataID(OfflinePlayer player);
protected abstract Player loadOfflinePlayer(OfflinePlayer offline);
public abstract String getPlayerDataID(OfflinePlayer player);
}

View File

@@ -23,7 +23,7 @@ public interface ISpecialPlayerInventory {
public Inventory getBukkitInventory();
public boolean inventoryRemovalCheck();
public boolean inventoryRemovalCheck(boolean save);
public void setPlayerOnline(Player player);

View File

@@ -29,10 +29,10 @@ import net.minecraft.server.v1_4_5.MinecraftServer;
import org.bukkit.craftbukkit.v1_4_5.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -29,10 +29,10 @@ import net.minecraft.server.v1_4_6.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_4_6.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -30,10 +30,10 @@ import net.minecraft.server.v1_4_R1.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_4_R1.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -29,10 +29,10 @@ import net.minecraft.server.v1_5_R2.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_5_R2.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -29,10 +29,10 @@ import net.minecraft.server.v1_5_R3.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_5_R3.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -29,10 +29,10 @@ import net.minecraft.server.v1_6_R1.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_6_R1.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data

View File

@@ -51,18 +51,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -70,13 +73,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -29,10 +29,10 @@ import net.minecraft.server.v1_6_R2.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_6_R2.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -29,10 +29,10 @@ import net.minecraft.server.v1_6_R3.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_6_R3.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -30,10 +30,10 @@ import net.minecraft.util.com.mojang.authlib.GameProfile;
import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
GameProfile profile = new GameProfile(null, offline.getName());

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -30,10 +30,10 @@ import net.minecraft.util.com.mojang.authlib.GameProfile;
import org.bukkit.craftbukkit.v1_7_R2.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
GameProfile profile = new GameProfile(null, offline.getName());

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -30,10 +30,10 @@ import net.minecraft.util.com.mojang.authlib.GameProfile;
import org.bukkit.craftbukkit.v1_7_R3.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName());

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -30,10 +30,10 @@ import net.minecraft.util.com.mojang.authlib.GameProfile;
import org.bukkit.craftbukkit.v1_7_R4.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName());

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -30,10 +30,10 @@ import net.minecraft.server.v1_8_R1.PlayerInteractManager;
//Volatile
import org.bukkit.craftbukkit.v1_8_R1.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName());
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
// Create an entity to load the player data

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -30,10 +30,10 @@ import net.minecraft.server.v1_8_R2.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_8_R2.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName());

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -30,10 +30,10 @@ import net.minecraft.server.v1_8_R3.PlayerInteractManager;
//Volatile
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
GameProfile profile = new GameProfile(offline.getUniqueId(), offline.getName());

View File

@@ -50,18 +50,21 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
p.getHandle().inventory.items = this.items;
p.getHandle().inventory.armor = this.armor;
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
this.player.inventory.items = this.items;
this.player.inventory.armor = this.armor;
playerOnline = true;
}
}
@@ -69,13 +72,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

@@ -30,10 +30,10 @@ import net.minecraft.server.v1_9_R1.PlayerInteractManager;
import org.bukkit.craftbukkit.v1_9_R1.CraftServer;
public class PlayerDataManager implements IPlayerDataManager {
public class PlayerDataManager extends IPlayerDataManager {
@Override
public Player loadPlayer(OfflinePlayer offline) {
public Player loadOfflinePlayer(OfflinePlayer offline) {
if (offline == null || !offline.hasPlayedBefore()) {
return null;
}

View File

@@ -49,17 +49,30 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
private void setItemArrays(PlayerInventory inventory, ItemStack[] items, ItemStack[] armor,
ItemStack[] extraSlots) {
try {
Field field = inventory.getClass().getField("items");
// Prepare to remove final modifier
Field modifiers = Field.class.getDeclaredField("modifiers");
modifiers.setAccessible(true);
// Access and replace main inventory array
Field field = PlayerInventory.class.getField("items");
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(inventory, items);
field = inventory.getClass().getField("armor");
// Access and replace armor inventory array
field = PlayerInventory.class.getField("armor");
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(inventory, armor);
field = inventory.getClass().getField("extraSlots");
// Access and replace offhand inventory array
field = PlayerInventory.class.getField("extraSlots");
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(inventory, extraSlots);
// Access and replace array containing all inventory arrays
field = PlayerInventory.class.getDeclaredField("g");
field.setAccessible(true);
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(inventory, new ItemStack[][] { items, armor, extraSlots });
} catch (NoSuchFieldException e) {
// Unable to set final fields to item arrays, we're screwed. Noisily fail.
e.printStackTrace();
@@ -76,17 +89,20 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
}
@Override
public boolean inventoryRemovalCheck() {
owner.saveData();
return transaction.isEmpty() && !playerOnline;
public boolean inventoryRemovalCheck(boolean save) {
boolean offline = transaction.isEmpty() && !playerOnline;
if (offline && save) {
owner.saveData();
}
return offline;
}
@Override
public void setPlayerOnline(Player player) {
if (!playerOnline) {
CraftPlayer p = (CraftPlayer) player;
setItemArrays(p.getHandle().inventory, items, armor, extraSlots);
p.saveData();
owner = (CraftPlayer) player;
this.player = owner.getHandle();
setItemArrays(this.player.inventory, items, armor, extraSlots);
playerOnline = true;
}
}
@@ -94,13 +110,13 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
@Override
public boolean setPlayerOffline() {
playerOnline = false;
return this.inventoryRemovalCheck();
return this.inventoryRemovalCheck(false);
}
@Override
public void onClose(CraftHumanEntity who) {
super.onClose(who);
this.inventoryRemovalCheck();
this.inventoryRemovalCheck(true);
}
@Override

View File

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