Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3549431fbc | ||
|
17b0cb6efe | ||
|
2d7522554c | ||
|
131f874329 | ||
|
a623af5119 |
@@ -31,7 +31,6 @@ import com.lishid.openinv.commands.OpenEnderPluginCommand;
|
|||||||
import com.lishid.openinv.commands.OpenInvPluginCommand;
|
import com.lishid.openinv.commands.OpenInvPluginCommand;
|
||||||
import com.lishid.openinv.commands.SearchInvPluginCommand;
|
import com.lishid.openinv.commands.SearchInvPluginCommand;
|
||||||
import com.lishid.openinv.commands.SilentChestPluginCommand;
|
import com.lishid.openinv.commands.SilentChestPluginCommand;
|
||||||
import com.lishid.openinv.commands.ToggleOpenInvPluginCommand;
|
|
||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
import com.lishid.openinv.internal.IAnySilentChest;
|
||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
import com.lishid.openinv.internal.IInventoryAccess;
|
||||||
import com.lishid.openinv.internal.IPlayerDataManager;
|
import com.lishid.openinv.internal.IPlayerDataManager;
|
||||||
@@ -79,21 +78,16 @@ public class OpenInv extends JavaPlugin {
|
|||||||
FileConfiguration config = getConfig();
|
FileConfiguration config = getConfig();
|
||||||
config.set("NotifySilentChest", config.getBoolean("NotifySilentChest", true));
|
config.set("NotifySilentChest", config.getBoolean("NotifySilentChest", true));
|
||||||
config.set("NotifyAnyChest", config.getBoolean("NotifyAnyChest", true));
|
config.set("NotifyAnyChest", config.getBoolean("NotifyAnyChest", true));
|
||||||
config.set("ItemOpenInvItemID", config.getInt("ItemOpenInvItemID", 280));
|
|
||||||
config.addDefault("ItemOpenInvItemID", 280);
|
|
||||||
config.addDefault("CheckForUpdates", true);
|
|
||||||
config.addDefault("NotifySilentChest", true);
|
config.addDefault("NotifySilentChest", true);
|
||||||
config.addDefault("NotifyAnyChest", true);
|
config.addDefault("NotifyAnyChest", true);
|
||||||
config.options().copyDefaults(true);
|
config.options().copyDefaults(true);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
|
|
||||||
pm.registerEvents(new OpenInvPlayerListener(), this);
|
pm.registerEvents(new OpenInvPlayerListener(), this);
|
||||||
pm.registerEvents(new OpenInvEntityListener(), this);
|
|
||||||
pm.registerEvents(new OpenInvInventoryListener(), this);
|
pm.registerEvents(new OpenInvInventoryListener(), this);
|
||||||
|
|
||||||
getCommand("openinv").setExecutor(new OpenInvPluginCommand(this));
|
getCommand("openinv").setExecutor(new OpenInvPluginCommand(this));
|
||||||
getCommand("searchinv").setExecutor(new SearchInvPluginCommand());
|
getCommand("searchinv").setExecutor(new SearchInvPluginCommand());
|
||||||
getCommand("toggleopeninv").setExecutor(new ToggleOpenInvPluginCommand());
|
|
||||||
getCommand("silentchest").setExecutor(new SilentChestPluginCommand(this));
|
getCommand("silentchest").setExecutor(new SilentChestPluginCommand(this));
|
||||||
getCommand("anychest").setExecutor(new AnyChestPluginCommand(this));
|
getCommand("anychest").setExecutor(new AnyChestPluginCommand(this));
|
||||||
getCommand("openender").setExecutor(new OpenEnderPluginCommand(this));
|
getCommand("openender").setExecutor(new OpenEnderPluginCommand(this));
|
||||||
|
@@ -1,52 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
|
|
||||||
public class OpenInvEntityListener implements Listener {
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
|
||||||
public void onEntityDamage(EntityDamageEvent event) {
|
|
||||||
if (event instanceof EntityDamageByEntityEvent) {
|
|
||||||
EntityDamageByEntityEvent evt = (EntityDamageByEntityEvent) event;
|
|
||||||
Entity attacker = evt.getDamager();
|
|
||||||
Entity defender = evt.getEntity();
|
|
||||||
|
|
||||||
if (!(attacker instanceof Player) || !(defender instanceof Player)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) attacker;
|
|
||||||
|
|
||||||
if (!(player.getItemInHand().getType().getId() == OpenInv.GetItemOpenInvItem()) || (!OpenInv.GetPlayerItemOpenInvStatus(player.getName())) || !OpenInv.hasPermission(player, "OpenInv.openinv")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player target = (Player) defender;
|
|
||||||
player.performCommand("openinv " + target.getName());
|
|
||||||
|
|
||||||
evt.setDamage(0);
|
|
||||||
evt.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -20,6 +20,7 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||||
|
|
||||||
public class OpenInvInventoryListener implements Listener {
|
public class OpenInvInventoryListener implements Listener {
|
||||||
@EventHandler(priority = EventPriority.NORMAL)
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
@@ -32,4 +33,11 @@ public class OpenInvInventoryListener implements Listener {
|
|||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
|
public void onInventoryDrag(InventoryDragEvent event) {
|
||||||
|
if (!OpenInv.inventoryAccess.check(event.getInventory(), event.getWhoClicked())) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@@ -121,13 +121,5 @@ public class OpenInvPlayerListener implements Listener {
|
|||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
|
||||||
if (!(player.getItemInHand().getType().getId() == OpenInv.GetItemOpenInvItem()) || (!OpenInv.GetPlayerItemOpenInvStatus(player.getName())) || !OpenInv.hasPermission(player, Permissions.PERM_OPENINV)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
player.performCommand("openinv");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011-2014 lishid. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, version 3.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.lishid.openinv.commands;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.lishid.openinv.OpenInv;
|
|
||||||
|
|
||||||
public class ToggleOpenInvPluginCommand implements CommandExecutor {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "You can't use this from the console.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
if (args.length > 0) {
|
|
||||||
if (args[0].equalsIgnoreCase("check")) {
|
|
||||||
if (OpenInv.GetPlayerItemOpenInvStatus(player.getName()))
|
|
||||||
player.sendMessage("OpenInv with " + Material.getMaterial(OpenInv.GetItemOpenInvItem()).toString() + " is ON.");
|
|
||||||
else
|
|
||||||
player.sendMessage("OpenInv with " + Material.getMaterial(OpenInv.GetItemOpenInvItem()).toString() + " is OFF.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (OpenInv.GetPlayerItemOpenInvStatus(player.getName())) {
|
|
||||||
OpenInv.SetPlayerItemOpenInvStatus(player.getName(), false);
|
|
||||||
player.sendMessage("OpenInv with " + Material.getMaterial(OpenInv.GetItemOpenInvItem()).toString() + " is OFF.");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
OpenInv.SetPlayerItemOpenInvStatus(player.getName(), true);
|
|
||||||
player.sendMessage("OpenInv with " + Material.getMaterial(OpenInv.GetItemOpenInvItem()).toString() + " is ON.");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -14,7 +14,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_8_R3;
|
package com.lishid.openinv.internal.v1_9_R1;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -23,17 +23,20 @@ import com.lishid.openinv.OpenInv;
|
|||||||
import com.lishid.openinv.internal.IAnySilentChest;
|
import com.lishid.openinv.internal.IAnySilentChest;
|
||||||
|
|
||||||
//Volatile
|
//Volatile
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
|
||||||
|
|
||||||
import net.minecraft.server.v1_8_R3.Block;
|
import net.minecraft.server.v1_9_R1.AxisAlignedBB;
|
||||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
import net.minecraft.server.v1_9_R1.Block;
|
||||||
import net.minecraft.server.v1_8_R3.EntityPlayer;
|
import net.minecraft.server.v1_9_R1.BlockPosition;
|
||||||
import net.minecraft.server.v1_8_R3.IInventory;
|
import net.minecraft.server.v1_9_R1.Entity;
|
||||||
import net.minecraft.server.v1_8_R3.ITileInventory;
|
import net.minecraft.server.v1_9_R1.EntityOcelot;
|
||||||
import net.minecraft.server.v1_8_R3.InventoryLargeChest;
|
import net.minecraft.server.v1_9_R1.EntityPlayer;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_9_R1.IInventory;
|
||||||
import net.minecraft.server.v1_8_R3.TileEntityChest;
|
import net.minecraft.server.v1_9_R1.ITileInventory;
|
||||||
import net.minecraft.server.v1_8_R3.World;
|
import net.minecraft.server.v1_9_R1.InventoryLargeChest;
|
||||||
|
import net.minecraft.server.v1_9_R1.PacketPlayOutOpenWindow;
|
||||||
|
import net.minecraft.server.v1_9_R1.TileEntityChest;
|
||||||
|
import net.minecraft.server.v1_9_R1.World;
|
||||||
|
|
||||||
public class AnySilentChest implements IAnySilentChest {
|
public class AnySilentChest implements IAnySilentChest {
|
||||||
@Override
|
@Override
|
||||||
@@ -41,25 +44,50 @@ public class AnySilentChest implements IAnySilentChest {
|
|||||||
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
// FOR REFERENCE, LOOK AT net.minecraft.server.BlockChest
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
||||||
World world = player.world;
|
World world = player.world;
|
||||||
// If block on top
|
// If block or ocelot on top
|
||||||
if (world.getType(new BlockPosition(x, y + 1, z)).getBlock().c())
|
if (world.getType(new BlockPosition(x, y + 1, z)).l() || hasOcelotOnTop(world, x, y, z))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
int id = Block.getId(world.getType(new BlockPosition(x, y, z)).getBlock());
|
int id = Block.getId(world.getType(new BlockPosition(x, y, z)).getBlock());
|
||||||
|
|
||||||
// If block next to chest is chest and has a block on top
|
// If block next to chest is chest and has a block or ocelot on top
|
||||||
if ((Block.getId(world.getType(new BlockPosition(x - 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x - 1, y + 1, z)).getBlock().c()))
|
if (isBlockedChest(world, id, x - 1, y, z))
|
||||||
return true;
|
return true;
|
||||||
if ((Block.getId(world.getType(new BlockPosition(x + 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x + 1, y + 1, z)).getBlock().c()))
|
if (isBlockedChest(world, id, x + 1, y, z))
|
||||||
return true;
|
return true;
|
||||||
if ((Block.getId(world.getType(new BlockPosition(x, y, z - 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z - 1)).getBlock().c()))
|
if (isBlockedChest(world, id, x, y, z - 1))
|
||||||
return true;
|
return true;
|
||||||
if ((Block.getId(world.getType(new BlockPosition(x, y, z + 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z + 1)).getBlock().c()))
|
if (isBlockedChest(world, id, x, y, z + 1))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isBlockedChest(World world, int id, int x, int y, int z) {
|
||||||
|
BlockPosition position = new BlockPosition(x, y, z);
|
||||||
|
if (Block.getId(world.getType(position).getBlock()) != id) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (world.getType(position).l()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return hasOcelotOnTop(world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasOcelotOnTop(World world, int x, int y, int z) {
|
||||||
|
for (Entity localEntity : world.a(EntityOcelot.class,
|
||||||
|
new AxisAlignedBB(x, y + 1, z, x + 1, y + 2, z + 1))) {
|
||||||
|
EntityOcelot localEntityOcelot = (EntityOcelot) localEntity;
|
||||||
|
if (localEntityOcelot.isSitting()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean ActivateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
public boolean ActivateChest(Player p, boolean anychest, boolean silentchest, int x, int y, int z) {
|
||||||
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
EntityPlayer player = ((CraftPlayer) p).getHandle();
|
||||||
@@ -71,15 +99,15 @@ public class AnySilentChest implements IAnySilentChest {
|
|||||||
int id = Block.getId(world.getType(new BlockPosition(x, y, z)).getBlock());
|
int id = Block.getId(world.getType(new BlockPosition(x, y, z)).getBlock());
|
||||||
|
|
||||||
if (!anychest) {
|
if (!anychest) {
|
||||||
if (world.getType(new BlockPosition(x, y + 1, z)).getBlock().c())
|
if (world.getType(new BlockPosition(x, y + 1, z)).l())
|
||||||
return true;
|
return true;
|
||||||
if ((Block.getId(world.getType(new BlockPosition(x - 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x - 1, y + 1, z)).getBlock().c()))
|
if ((Block.getId(world.getType(new BlockPosition(x - 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x - 1, y + 1, z)).l()))
|
||||||
return true;
|
return true;
|
||||||
if ((Block.getId(world.getType(new BlockPosition(x + 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x + 1, y + 1, z)).getBlock().c()))
|
if ((Block.getId(world.getType(new BlockPosition(x + 1, y, z)).getBlock()) == id) && (world.getType(new BlockPosition(x + 1, y + 1, z)).l()))
|
||||||
return true;
|
return true;
|
||||||
if ((Block.getId(world.getType(new BlockPosition(x, y, z - 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z - 1)).getBlock().c()))
|
if ((Block.getId(world.getType(new BlockPosition(x, y, z - 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z - 1)).l()))
|
||||||
return true;
|
return true;
|
||||||
if ((Block.getId(world.getType(new BlockPosition(x, y, z + 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z + 1)).getBlock().c()))
|
if ((Block.getId(world.getType(new BlockPosition(x, y, z + 1)).getBlock()) == id) && (world.getType(new BlockPosition(x, y + 1, z + 1)).l()))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@@ -14,7 +14,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_8_R3;
|
package com.lishid.openinv.internal.v1_9_R1;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
@@ -26,9 +26,9 @@ import com.lishid.openinv.Permissions;
|
|||||||
import com.lishid.openinv.internal.IInventoryAccess;
|
import com.lishid.openinv.internal.IInventoryAccess;
|
||||||
|
|
||||||
//Volatile
|
//Volatile
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory;
|
import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventory;
|
||||||
|
|
||||||
import net.minecraft.server.v1_8_R3.IInventory;
|
import net.minecraft.server.v1_9_R1.IInventory;
|
||||||
|
|
||||||
public class InventoryAccess implements IInventoryAccess {
|
public class InventoryAccess implements IInventoryAccess {
|
||||||
@Override
|
@Override
|
@@ -14,7 +14,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_8_R3;
|
package com.lishid.openinv.internal.v1_9_R1;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -28,11 +28,11 @@ import com.lishid.openinv.internal.IPlayerDataManager;
|
|||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
//Volatile
|
//Volatile
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
import org.bukkit.craftbukkit.v1_9_R1.CraftServer;
|
||||||
|
|
||||||
import net.minecraft.server.v1_8_R3.EntityPlayer;
|
import net.minecraft.server.v1_9_R1.EntityPlayer;
|
||||||
import net.minecraft.server.v1_8_R3.MinecraftServer;
|
import net.minecraft.server.v1_9_R1.MinecraftServer;
|
||||||
import net.minecraft.server.v1_8_R3.PlayerInteractManager;
|
import net.minecraft.server.v1_9_R1.PlayerInteractManager;
|
||||||
|
|
||||||
public class PlayerDataManager implements IPlayerDataManager {
|
public class PlayerDataManager implements IPlayerDataManager {
|
||||||
@Override
|
@Override
|
@@ -14,12 +14,12 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_8_R3;
|
package com.lishid.openinv.internal.v1_9_R1;
|
||||||
|
|
||||||
//Volatile
|
//Volatile
|
||||||
import net.minecraft.server.v1_8_R3.ContainerChest;
|
import net.minecraft.server.v1_9_R1.ContainerChest;
|
||||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
import net.minecraft.server.v1_9_R1.EntityHuman;
|
||||||
import net.minecraft.server.v1_8_R3.IInventory;
|
import net.minecraft.server.v1_9_R1.IInventory;
|
||||||
|
|
||||||
public class SilentContainerChest extends ContainerChest {
|
public class SilentContainerChest extends ContainerChest {
|
||||||
public IInventory inv;
|
public IInventory inv;
|
@@ -14,7 +14,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_8_R3;
|
package com.lishid.openinv.internal.v1_9_R1;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -29,15 +29,15 @@ import com.lishid.openinv.OpenInv;
|
|||||||
import com.lishid.openinv.internal.ISpecialEnderChest;
|
import com.lishid.openinv.internal.ISpecialEnderChest;
|
||||||
|
|
||||||
//Volatile
|
//Volatile
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHumanEntity;
|
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftHumanEntity;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory;
|
import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventory;
|
||||||
|
|
||||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
import net.minecraft.server.v1_9_R1.EntityHuman;
|
||||||
import net.minecraft.server.v1_8_R3.IInventory;
|
import net.minecraft.server.v1_9_R1.IInventory;
|
||||||
import net.minecraft.server.v1_8_R3.InventoryEnderChest;
|
import net.minecraft.server.v1_9_R1.InventoryEnderChest;
|
||||||
import net.minecraft.server.v1_8_R3.InventorySubcontainer;
|
import net.minecraft.server.v1_9_R1.InventorySubcontainer;
|
||||||
import net.minecraft.server.v1_8_R3.ItemStack;
|
import net.minecraft.server.v1_9_R1.ItemStack;
|
||||||
|
|
||||||
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>();
|
@@ -14,7 +14,10 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.lishid.openinv.internal.v1_8_R3;
|
package com.lishid.openinv.internal.v1_9_R1;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
@@ -23,13 +26,13 @@ import com.lishid.openinv.OpenInv;
|
|||||||
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
import com.lishid.openinv.internal.ISpecialPlayerInventory;
|
||||||
|
|
||||||
//Volatile
|
//Volatile
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHumanEntity;
|
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftHumanEntity;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventory;
|
import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventory;
|
||||||
|
|
||||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
import net.minecraft.server.v1_9_R1.EntityHuman;
|
||||||
import net.minecraft.server.v1_8_R3.ItemStack;
|
import net.minecraft.server.v1_9_R1.ItemStack;
|
||||||
import net.minecraft.server.v1_8_R3.PlayerInventory;
|
import net.minecraft.server.v1_9_R1.PlayerInventory;
|
||||||
|
|
||||||
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
public class SpecialPlayerInventory extends PlayerInventory implements ISpecialPlayerInventory {
|
||||||
CraftPlayer owner;
|
CraftPlayer owner;
|
||||||
@@ -41,11 +44,30 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
super(((CraftPlayer) p).getHandle());
|
super(((CraftPlayer) p).getHandle());
|
||||||
this.owner = ((CraftPlayer) p);
|
this.owner = ((CraftPlayer) p);
|
||||||
this.playerOnline = online;
|
this.playerOnline = online;
|
||||||
this.items = player.inventory.items;
|
setItemArrays(this, player.inventory.items, player.inventory.armor, player.inventory.extraSlots);
|
||||||
this.armor = player.inventory.armor;
|
|
||||||
OpenInv.inventories.put(owner.getName().toLowerCase(), this);
|
OpenInv.inventories.put(owner.getName().toLowerCase(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setItemArrays(PlayerInventory inventory, ItemStack[] items, ItemStack[] armor,
|
||||||
|
ItemStack[] extraSlots) {
|
||||||
|
try {
|
||||||
|
Field field = inventory.getClass().getField("items");
|
||||||
|
Field modifiers = Field.class.getDeclaredField("modifiers");
|
||||||
|
modifiers.setAccessible(true);
|
||||||
|
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||||
|
field.set(inventory, items);
|
||||||
|
field = inventory.getClass().getField("armor");
|
||||||
|
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||||
|
field.set(inventory, armor);
|
||||||
|
field = inventory.getClass().getField("extraSlots");
|
||||||
|
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
|
||||||
|
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException
|
||||||
|
| IllegalAccessException e) {
|
||||||
|
// Unable to set final fields to item arrays, we're screwed. Noisily fail.
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getBukkitInventory() {
|
public Inventory getBukkitInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
@@ -63,8 +85,7 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
public void PlayerGoOnline(Player player) {
|
public void PlayerGoOnline(Player player) {
|
||||||
if (!playerOnline) {
|
if (!playerOnline) {
|
||||||
CraftPlayer p = (CraftPlayer) player;
|
CraftPlayer p = (CraftPlayer) player;
|
||||||
p.getHandle().inventory.items = this.items;
|
setItemArrays(p.getHandle().inventory, items, armor, extraSlots);
|
||||||
p.getHandle().inventory.armor = this.armor;
|
|
||||||
p.saveData();
|
p.saveData();
|
||||||
playerOnline = true;
|
playerOnline = true;
|
||||||
}
|
}
|
||||||
@@ -109,12 +130,19 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
|
|
||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.extra;
|
is = this.extraSlots;
|
||||||
}
|
}
|
||||||
else if (is == this.armor) {
|
else if (is == this.armor) {
|
||||||
i = getReversedArmorSlotNum(i);
|
i = getReversedArmorSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i >= is.length) {
|
||||||
|
i -= is.length;
|
||||||
|
is = this.extra;
|
||||||
|
}
|
||||||
|
|
||||||
|
// extraSlots is, for now, just an array with length 1. No need for special handling.
|
||||||
|
|
||||||
return is[i];
|
return is[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,12 +160,17 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
|
|
||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.extra;
|
is = this.extraSlots;
|
||||||
}
|
}
|
||||||
else if (is == this.armor) {
|
else if (is == this.armor) {
|
||||||
i = getReversedArmorSlotNum(i);
|
i = getReversedArmorSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i >= is.length) {
|
||||||
|
i -= is.length;
|
||||||
|
is = this.extra;
|
||||||
|
}
|
||||||
|
|
||||||
if (is[i] != null) {
|
if (is[i] != null) {
|
||||||
ItemStack itemstack;
|
ItemStack itemstack;
|
||||||
|
|
||||||
@@ -174,12 +207,17 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
|
|
||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.extra;
|
is = this.extraSlots;
|
||||||
}
|
}
|
||||||
else if (is == this.armor) {
|
else if (is == this.armor) {
|
||||||
i = getReversedArmorSlotNum(i);
|
i = getReversedArmorSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i >= is.length) {
|
||||||
|
i -= is.length;
|
||||||
|
is = this.extra;
|
||||||
|
}
|
||||||
|
|
||||||
if (is[i] != null) {
|
if (is[i] != null) {
|
||||||
ItemStack itemstack = is[i];
|
ItemStack itemstack = is[i];
|
||||||
|
|
||||||
@@ -205,12 +243,17 @@ public class SpecialPlayerInventory extends PlayerInventory implements ISpecialP
|
|||||||
|
|
||||||
if (i >= is.length) {
|
if (i >= is.length) {
|
||||||
i -= is.length;
|
i -= is.length;
|
||||||
is = this.extra;
|
is = this.extraSlots;
|
||||||
}
|
}
|
||||||
else if (is == this.armor) {
|
else if (is == this.armor) {
|
||||||
i = getReversedArmorSlotNum(i);
|
i = getReversedArmorSlotNum(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i >= is.length) {
|
||||||
|
i -= is.length;
|
||||||
|
is = this.extra;
|
||||||
|
}
|
||||||
|
|
||||||
// Effects
|
// Effects
|
||||||
if (is == this.extra) {
|
if (is == this.extra) {
|
||||||
owner.getHandle().drop(itemstack, true);
|
owner.getHandle().drop(itemstack, true);
|
@@ -1,6 +1,6 @@
|
|||||||
name: OpenInv
|
name: OpenInv
|
||||||
main: com.lishid.openinv.OpenInv
|
main: com.lishid.openinv.OpenInv
|
||||||
version: 2.2.9
|
version: 2.3.0
|
||||||
author: lishid
|
author: lishid
|
||||||
authors: [Jikoo]
|
authors: [Jikoo]
|
||||||
description: >
|
description: >
|
||||||
@@ -25,12 +25,6 @@ commands:
|
|||||||
permission: OpenInv.search
|
permission: OpenInv.search
|
||||||
usage: |
|
usage: |
|
||||||
/<command> <Item> [MinAmount] - Item can be the Item ID or the CraftBukkit Item Name, MinAmount is the minimum amount to be considered.
|
/<command> <Item> [MinAmount] - Item can be the Item ID or the CraftBukkit Item Name, MinAmount is the minimum amount to be considered.
|
||||||
toggleopeninv:
|
|
||||||
aliases: [toi, toggleoi, toggleinv]
|
|
||||||
description: Toggle item openinv function
|
|
||||||
permission: OpenInv.openinv
|
|
||||||
usage: |
|
|
||||||
/<command> [Check] - Checks whether item openinv is enabled
|
|
||||||
silentchest:
|
silentchest:
|
||||||
aliases: [sc, silent]
|
aliases: [sc, silent]
|
||||||
description: Toggle silent chest function, which hides the animation of a chest when opened or closed, and suppresses the sound.
|
description: Toggle silent chest function, which hides the animation of a chest when opened or closed, and suppresses the sound.
|
||||||
|
Reference in New Issue
Block a user