@@ -165,15 +165,6 @@ public class OpenInv extends JavaPlugin {
|
|||||||
return getConfig().getBoolean("NotifyAnyChest", true);
|
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) {
|
public boolean getPlayerSilentChestStatus(OfflinePlayer player) {
|
||||||
return getConfig().getBoolean("SilentChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", false);
|
return getConfig().getBoolean("SilentChest." + getPlayerLoader().getPlayerDataID(player) + ".toggle", false);
|
||||||
}
|
}
|
||||||
|
@@ -27,6 +27,7 @@ import org.bukkit.event.block.Action;
|
|||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
import com.lishid.openinv.internal.ISpecialEnderChest;
|
||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
||||||
@@ -39,19 +40,25 @@ public class OpenInvPlayerListener implements Listener {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(final PlayerJoinEvent event) {
|
||||||
ISpecialPlayerInventory inventory = plugin.getInventoryFor(event.getPlayer());
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
if (inventory != null) {
|
public void run() {
|
||||||
inventory.setPlayerOnline(event.getPlayer());
|
if (!event.getPlayer().isOnline()) {
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
ISpecialEnderChest chest = plugin.getEnderChestFor(event.getPlayer());
|
ISpecialPlayerInventory inventory = plugin.getInventoryFor(event.getPlayer());
|
||||||
|
if (inventory != null) {
|
||||||
if (chest != null) {
|
inventory.setPlayerOnline(event.getPlayer());
|
||||||
chest.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)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
@@ -49,17 +49,30 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
private void setItemArrays(PlayerInventory inventory, ItemStack[] items, ItemStack[] armor,
|
private void setItemArrays(PlayerInventory inventory, ItemStack[] items, ItemStack[] armor,
|
||||||
ItemStack[] extraSlots) {
|
ItemStack[] extraSlots) {
|
||||||
try {
|
try {
|
||||||
Field field = inventory.getClass().getField("items");
|
// Prepare to remove final modifier
|
||||||
Field modifiers = Field.class.getDeclaredField("modifiers");
|
Field modifiers = Field.class.getDeclaredField("modifiers");
|
||||||
modifiers.setAccessible(true);
|
modifiers.setAccessible(true);
|
||||||
|
|
||||||
|
// Access and replace main inventory array
|
||||||
|
Field field = PlayerInventory.class.getField("items");
|
||||||
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||||
field.set(inventory, items);
|
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);
|
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||||
field.set(inventory, armor);
|
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);
|
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||||
field.set(inventory, extraSlots);
|
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) {
|
} catch (NoSuchFieldException e) {
|
||||||
// Unable to set final fields to item arrays, we're screwed. Noisily fail.
|
// Unable to set final fields to item arrays, we're screwed. Noisily fail.
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -84,9 +97,10 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
@Override
|
@Override
|
||||||
public void setPlayerOnline(Player player) {
|
public void setPlayerOnline(Player player) {
|
||||||
if (!playerOnline) {
|
if (!playerOnline) {
|
||||||
CraftPlayer p = (CraftPlayer) player;
|
owner = (CraftPlayer) player;
|
||||||
setItemArrays(p.getHandle().inventory, items, armor, extraSlots);
|
this.player = owner.getHandle();
|
||||||
p.saveData();
|
setItemArrays(this.player.inventory, items, armor, extraSlots);
|
||||||
|
owner.saveData();
|
||||||
playerOnline = true;
|
playerOnline = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user