diff --git a/plugin/plugin-core/src/main/java/com/lishid/openinv/OpenInv.java b/plugin/plugin-core/src/main/java/com/lishid/openinv/OpenInv.java index c7a02f4..6f33692 100644 --- a/plugin/plugin-core/src/main/java/com/lishid/openinv/OpenInv.java +++ b/plugin/plugin-core/src/main/java/com/lishid/openinv/OpenInv.java @@ -19,7 +19,6 @@ package com.lishid.openinv; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.lishid.openinv.commands.AnyChestPluginCommand; -import com.lishid.openinv.commands.OpenEnderPluginCommand; import com.lishid.openinv.commands.OpenInvPluginCommand; import com.lishid.openinv.commands.SearchEnchantPluginCommand; import com.lishid.openinv.commands.SearchInvPluginCommand; @@ -53,6 +52,8 @@ import java.util.concurrent.Future; import javax.annotation.Nullable; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; import org.bukkit.command.PluginCommand; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; @@ -489,6 +490,10 @@ public class OpenInv extends JavaPlugin implements IOpenInv { @Override public void onEnable() { + + // Save default configuration if not present. + this.saveDefaultConfig(); + // Get plugin manager PluginManager pm = this.getServer().getPluginManager(); @@ -502,7 +507,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv { return; } - this.saveDefaultConfig(); + // Update existing configuration. May require internal access. new ConfigUpdater(this).checkForUpdates(); // Register listeners @@ -514,8 +519,9 @@ public class OpenInv extends JavaPlugin implements IOpenInv { pm.registerEvents(new InventoryDragListener(this), this); // Register commands to their executors - this.getCommand("openinv").setExecutor(new OpenInvPluginCommand(this)); - this.getCommand("openender").setExecutor(new OpenEnderPluginCommand(this)); + OpenInvPluginCommand openInv = new OpenInvPluginCommand(this); + this.getCommand("openinv").setExecutor(openInv); + this.getCommand("openender").setExecutor(openInv); SearchInvPluginCommand searchInv = new SearchInvPluginCommand(this); this.getCommand("searchinv").setExecutor(searchInv); this.getCommand("searchender").setExecutor(searchInv); diff --git a/plugin/plugin-core/src/main/java/com/lishid/openinv/commands/OpenEnderPluginCommand.java b/plugin/plugin-core/src/main/java/com/lishid/openinv/commands/OpenEnderPluginCommand.java deleted file mode 100644 index 581f153..0000000 --- a/plugin/plugin-core/src/main/java/com/lishid/openinv/commands/OpenEnderPluginCommand.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2011-2018 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 . - */ - -package com.lishid.openinv.commands; - -import com.lishid.openinv.OpenInv; -import com.lishid.openinv.internal.ISpecialEnderChest; -import com.lishid.openinv.util.Permissions; -import java.util.HashMap; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -public class OpenEnderPluginCommand implements CommandExecutor { - - private final OpenInv plugin; - private final HashMap openEnderHistory = new HashMap(); - - public OpenEnderPluginCommand(final OpenInv plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) { - if (!(sender instanceof Player)) { - sender.sendMessage(ChatColor.RED + "You can't use this from the console."); - return true; - } - - if (args.length > 0 && args[0].equalsIgnoreCase("?")) { - this.plugin.showHelp((Player) sender); - return true; - } - - final Player player = (Player) sender; - - // History management - String history = this.openEnderHistory.get(player); - - if (history == null || history.isEmpty()) { - history = player.getName(); - this.openEnderHistory.put(player, history); - } - - final String name; - - // Read from history if target is not named - if (args.length < 1) { - name = history; - } else { - name = args[0]; - } - - new BukkitRunnable() { - @Override - public void run() { - final OfflinePlayer offlinePlayer = OpenEnderPluginCommand.this.plugin.matchPlayer(name); - - if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline()) { - player.sendMessage(ChatColor.RED + "Player not found!"); - return; - } - - new BukkitRunnable() { - @Override - public void run() { - if (!player.isOnline()) { - return; - } - OpenEnderPluginCommand.this.openInventory(player, offlinePlayer); - } - }.runTask(OpenEnderPluginCommand.this.plugin); - - } - }.runTaskAsynchronously(this.plugin); - - return true; - } - - private void openInventory(final Player player, final OfflinePlayer target) { - - Player onlineTarget; - boolean online = target.isOnline(); - - if (!online) { - // Try loading the player's data - onlineTarget = this.plugin.loadPlayer(target); - - if (onlineTarget == null) { - player.sendMessage(ChatColor.RED + "Player not found!"); - return; - } - } else { - onlineTarget = target.getPlayer(); - } - - if (!onlineTarget.equals(player)) { - if (!Permissions.ENDERCHEST_ALL.hasPermission(player)) { - player.sendMessage(ChatColor.RED + "You do not have permission to access other players' enderchests."); - return; - } - if (!Permissions.CROSSWORLD.hasPermission(player) - && !player.getWorld().equals(onlineTarget.getWorld())) { - player.sendMessage(ChatColor.RED + onlineTarget.getDisplayName() + " is not in your world!"); - return; - } - if (!Permissions.OVERRIDE.hasPermission(player) - && Permissions.EXEMPT.hasPermission(onlineTarget)) { - player.sendMessage(ChatColor.RED + onlineTarget.getDisplayName() + "'s inventory is protected!"); - return; - } - } - - // Record the target - this.openEnderHistory.put(player, this.plugin.getPlayerID(target)); - - // Create the inventory - final ISpecialEnderChest chest; - try { - chest = this.plugin.getSpecialEnderChest(onlineTarget, online); - } catch (Exception e) { - player.sendMessage(ChatColor.RED + "An error occurred creating " + onlineTarget.getDisplayName() + "'s inventory!"); - e.printStackTrace(); - return; - } - - // Open the inventory - plugin.openInventory(player, chest); - } - -} diff --git a/plugin/plugin-core/src/main/java/com/lishid/openinv/commands/OpenInvPluginCommand.java b/plugin/plugin-core/src/main/java/com/lishid/openinv/commands/OpenInvPluginCommand.java index af46725..2423636 100644 --- a/plugin/plugin-core/src/main/java/com/lishid/openinv/commands/OpenInvPluginCommand.java +++ b/plugin/plugin-core/src/main/java/com/lishid/openinv/commands/OpenInvPluginCommand.java @@ -17,7 +17,7 @@ package com.lishid.openinv.commands; import com.lishid.openinv.OpenInv; -import com.lishid.openinv.internal.ISpecialPlayerInventory; +import com.lishid.openinv.internal.ISpecialInventory; import com.lishid.openinv.util.Permissions; import java.util.HashMap; import org.bukkit.ChatColor; @@ -32,6 +32,7 @@ public class OpenInvPluginCommand implements CommandExecutor { private final OpenInv plugin; private final HashMap openInvHistory = new HashMap(); + private final HashMap openEnderHistory = new HashMap(); public OpenInvPluginCommand(final OpenInv plugin) { this.plugin = plugin; @@ -50,13 +51,14 @@ public class OpenInvPluginCommand implements CommandExecutor { } final Player player = (Player) sender; + final boolean openinv = command.getName().equals("openinv"); // History management - String history = this.openInvHistory.get(player); + String history = (openinv ? this.openInvHistory : this.openEnderHistory).get(player); if (history == null || history.isEmpty()) { history = player.getName(); - this.openInvHistory.put(player, history); + (openinv ? this.openInvHistory : this.openEnderHistory).put(player, history); } final String name; @@ -84,7 +86,7 @@ public class OpenInvPluginCommand implements CommandExecutor { if (!player.isOnline()) { return; } - OpenInvPluginCommand.this.openInventory(player, offlinePlayer); + OpenInvPluginCommand.this.openInventory(player, offlinePlayer, openinv); } }.runTask(OpenInvPluginCommand.this.plugin); @@ -94,7 +96,7 @@ public class OpenInvPluginCommand implements CommandExecutor { return true; } - private void openInventory(final Player player, final OfflinePlayer target) { + private void openInventory(final Player player, final OfflinePlayer target, boolean openinv) { Player onlineTarget; @@ -114,12 +116,18 @@ public class OpenInvPluginCommand implements CommandExecutor { // Permissions checks if (onlineTarget.equals(player)) { - // Self-open check - if (!Permissions.OPENSELF.hasPermission(player)) { - player.sendMessage(ChatColor.RED + "You're not allowed to openinv yourself."); + // Inventory: Additional permission required to open own inventory + if (openinv && !Permissions.OPENSELF.hasPermission(player)) { + player.sendMessage(ChatColor.RED + "You're not allowed to open your own inventory!"); return; } } else { + // Enderchest: Additional permission required to open others' ender chests + if (!openinv && !Permissions.ENDERCHEST_ALL.hasPermission(player)) { + player.sendMessage(ChatColor.RED + "You do not have permission to access other players' ender chests."); + return; + } + // Protected check if (!Permissions.OVERRIDE.hasPermission(player) && Permissions.EXEMPT.hasPermission(onlineTarget)) { @@ -129,7 +137,6 @@ public class OpenInvPluginCommand implements CommandExecutor { // Crossworld check if (!Permissions.CROSSWORLD.hasPermission(player) - && !Permissions.OVERRIDE.hasPermission(player) && !onlineTarget.getWorld().equals(player.getWorld())) { player.sendMessage( ChatColor.RED + onlineTarget.getDisplayName() + " is not in your world!"); @@ -138,12 +145,12 @@ public class OpenInvPluginCommand implements CommandExecutor { } // Record the target - this.openInvHistory.put(player, this.plugin.getPlayerID(target)); + (openinv ? this.openInvHistory : this.openEnderHistory).put(player, this.plugin.getPlayerID(target)); // Create the inventory - final ISpecialPlayerInventory inv; + final ISpecialInventory inv; try { - inv = this.plugin.getSpecialInventory(onlineTarget, online); + inv = openinv ? this.plugin.getSpecialInventory(onlineTarget, online) : this.plugin.getSpecialEnderChest(onlineTarget, online); } catch (Exception e) { player.sendMessage(ChatColor.RED + "An error occurred creating " + onlineTarget.getDisplayName() + "'s inventory!"); e.printStackTrace();