Implement destroy command.
This commit is contained in:
		| @@ -15,10 +15,10 @@ | |||||||
| package com.gmail.bleedobsidian.itemcase; | package com.gmail.bleedobsidian.itemcase; | ||||||
|  |  | ||||||
| import com.gmail.bleedobsidian.itemcase.commands.CreateCommand; | import com.gmail.bleedobsidian.itemcase.commands.CreateCommand; | ||||||
|  | import com.gmail.bleedobsidian.itemcase.commands.DestroyCommand; | ||||||
| import org.bukkit.command.Command; | import org.bukkit.command.Command; | ||||||
| import org.bukkit.command.CommandExecutor; | import org.bukkit.command.CommandExecutor; | ||||||
| import org.bukkit.command.CommandSender; | import org.bukkit.command.CommandSender; | ||||||
| import org.bukkit.command.ConsoleCommandSender; |  | ||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -48,6 +48,9 @@ public final class CommandHandler implements CommandExecutor { | |||||||
|             case "create": |             case "create": | ||||||
|                 new CreateCommand().execute(sender, label, args); |                 new CreateCommand().execute(sender, label, args); | ||||||
|                 break; |                 break; | ||||||
|  |             case "destroy": | ||||||
|  |                 new DestroyCommand().execute(sender, label, args); | ||||||
|  |                 break; | ||||||
|             default: |             default: | ||||||
|                 this.showHelp(sender, label); |                 this.showHelp(sender, label); | ||||||
|                 break; |                 break; | ||||||
|   | |||||||
| @@ -0,0 +1,109 @@ | |||||||
|  | /* | ||||||
|  |  * ItemCase 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, either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * 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/gpl.html>. | ||||||
|  |  */ | ||||||
|  | package com.gmail.bleedobsidian.itemcase.commands; | ||||||
|  |  | ||||||
|  | import com.gmail.bleedobsidian.itemcase.ChatLogger; | ||||||
|  | import com.gmail.bleedobsidian.itemcase.ItemCaseCore; | ||||||
|  | import com.gmail.bleedobsidian.itemcase.Itemcase; | ||||||
|  | import com.gmail.bleedobsidian.itemcase.managers.ItemcaseManager; | ||||||
|  | import org.bukkit.Location; | ||||||
|  | import org.bukkit.OfflinePlayer; | ||||||
|  | import org.bukkit.command.CommandSender; | ||||||
|  | import org.bukkit.entity.Player; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * A command handler for the 'create' command. | ||||||
|  |  *  | ||||||
|  |  * @author Jesse Prescott (BleedObsidian) | ||||||
|  |  */ | ||||||
|  | public final class DestroyCommand implements Command { | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void execute(CommandSender sender, String label, | ||||||
|  |             String[] args) { | ||||||
|  |          | ||||||
|  |         // If sender is not a player. | ||||||
|  |         if(!(sender instanceof Player)) { | ||||||
|  |              | ||||||
|  |             // Send message. | ||||||
|  |             ItemCaseCore.instance.getGenericLogger().message( | ||||||
|  |                     sender, "command.not-player"); | ||||||
|  |              | ||||||
|  |             // Exit. | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          // Get chat logger. | ||||||
|  |         ChatLogger chatLogger = ItemCaseCore.instance.getChatLogger(); | ||||||
|  |          | ||||||
|  |         // Cast sender to player. | ||||||
|  |         Player player = (Player) sender; | ||||||
|  |          | ||||||
|  |         // Check if player has permission. | ||||||
|  |         if(!player.hasPermission("itemcase.destroy")) { | ||||||
|  |              | ||||||
|  |             // Send message. | ||||||
|  |             chatLogger.message(player, "command.permission"); | ||||||
|  |              | ||||||
|  |             // Exit. | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         // The target location. | ||||||
|  |         Location target = null; | ||||||
|  |          | ||||||
|  |         // Get ItemcaseManager. | ||||||
|  |         ItemcaseManager manager = ItemCaseCore.instance.getItemcaseManager(); | ||||||
|  |  | ||||||
|  |         // Get the players target block. | ||||||
|  |         target = player.getTargetBlock(null, 3).getLocation(); | ||||||
|  |          | ||||||
|  |         // Check this target is an itemcase. | ||||||
|  |         if(!manager.isItemcase(target)) { | ||||||
|  |              | ||||||
|  |             // Show message. | ||||||
|  |             chatLogger.message(player, "command.destroy.invalid-location"); | ||||||
|  |              | ||||||
|  |             // Exit. | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         // Get itemcase. | ||||||
|  |         Itemcase itemcase = manager.getItemcase(target); | ||||||
|  |          | ||||||
|  |         // Get owner. | ||||||
|  |         OfflinePlayer owner = itemcase.getOwner(); | ||||||
|  |          | ||||||
|  |         // Check if this player owns this itemcase. | ||||||
|  |         if(!owner.equals(player)) { | ||||||
|  |              | ||||||
|  |             // Check if player is allowed to destroy other peoples itemcases. | ||||||
|  |             if(!player.hasPermission("itemcase.destroy.other")) { | ||||||
|  |                  | ||||||
|  |                 // Show message. | ||||||
|  |                 chatLogger.message(player, "command.destroy.not-owner"); | ||||||
|  |                  | ||||||
|  |                 // Exit. | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         // Destroy itemcase. | ||||||
|  |         manager.destroyItemcase(itemcase); | ||||||
|  |          | ||||||
|  |         // Show message. | ||||||
|  |         chatLogger.message(player, "command.destroy.success"); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -82,6 +82,29 @@ public class WorldFile extends ConfigurationFile { | |||||||
|         this.save(ItemCaseCore.instance); |         this.save(ItemCaseCore.instance); | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     /** | ||||||
|  |      * Deletes the given Itemcase from config. | ||||||
|  |      *  | ||||||
|  |      * @param itemcase Itemcase. | ||||||
|  |      * @throws IOException | ||||||
|  |      */ | ||||||
|  |     public void deleteItemcase(Itemcase itemcase) throws IOException { | ||||||
|  |          | ||||||
|  |         // Get block coordinates of Itemcase. | ||||||
|  |         int blockX = itemcase.getLocation().getBlockX(); | ||||||
|  |         int blockY = itemcase.getLocation().getBlockY(); | ||||||
|  |         int blockZ = itemcase.getLocation().getBlockZ(); | ||||||
|  |          | ||||||
|  |         // Create a unique key for this itemcase based on location. | ||||||
|  |         String key = "itemcases." + blockX + "/" + blockY + "/" + blockZ; | ||||||
|  |          | ||||||
|  |         // Delete itemcase. | ||||||
|  |         this.file.set(key, null); | ||||||
|  |          | ||||||
|  |         // Attempt to save to file. | ||||||
|  |         this.save(ItemCaseCore.instance); | ||||||
|  |     } | ||||||
|  |      | ||||||
|     /** |     /** | ||||||
|      * Attempts to load all itemcases from the config. |      * Attempts to load all itemcases from the config. | ||||||
|      *  |      *  | ||||||
|   | |||||||
| @@ -134,6 +134,36 @@ public final class ItemcaseManager { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     /** | ||||||
|  |      * Destroy given Itemcase. | ||||||
|  |      *  | ||||||
|  |      * @param itemcase Itemcase. | ||||||
|  |      */ | ||||||
|  |     public void destroyItemcase(Itemcase itemcase) { | ||||||
|  |          | ||||||
|  |         // Despawn Itemcase's item. | ||||||
|  |         itemcase.despawnItem(); | ||||||
|  |          | ||||||
|  |         // Remove itemcase from list. | ||||||
|  |         this.itemcases.remove(itemcase); | ||||||
|  |          | ||||||
|  |         // Get config file for itemcase's world. | ||||||
|  |         WorldFile file = this.worldFiles.get(itemcase.getLocation().getWorld()); | ||||||
|  |          | ||||||
|  |          // Attempt to delete itemcase. | ||||||
|  |         try { | ||||||
|  |              | ||||||
|  |             // Delete itemcase. | ||||||
|  |             file.deleteItemcase(itemcase); | ||||||
|  |              | ||||||
|  |         } catch (IOException e) { | ||||||
|  |              | ||||||
|  |              // Log error. | ||||||
|  |             ItemCaseCore.instance.getConsoleLogger().severe( | ||||||
|  |                         "Failed to delete itemcase from config.", e); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |      | ||||||
|     /** |     /** | ||||||
|      * Unload all currently loaded Itemcases. |      * Unload all currently loaded Itemcases. | ||||||
|      */ |      */ | ||||||
| @@ -183,6 +213,29 @@ public final class ItemcaseManager { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     /** | ||||||
|  |      * Attempt to get the itemcase at the given location. | ||||||
|  |      *  | ||||||
|  |      * @param location Location. | ||||||
|  |      * @return ItemCase. | ||||||
|  |      */ | ||||||
|  |     public Itemcase getItemcase(Location location) { | ||||||
|  |          | ||||||
|  |         // For every itemcase. | ||||||
|  |         for(Itemcase itemcase : this.itemcases) { | ||||||
|  |              | ||||||
|  |             // Check if location matches. | ||||||
|  |             if(itemcase.getLocation().equals(location)) { | ||||||
|  |                  | ||||||
|  |                 // Return itemcase. | ||||||
|  |                 return itemcase; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         // No itemcase found. | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  |      | ||||||
|     /** |     /** | ||||||
|      * @return A list of all active Itemcase instances. |      * @return A list of all active Itemcase instances. | ||||||
|      */ |      */ | ||||||
|   | |||||||
| @@ -52,3 +52,17 @@ command: | |||||||
|          |          | ||||||
|         # Shown to the player upon successful creation. |         # Shown to the player upon successful creation. | ||||||
|         success: "ItemCase created." |         success: "ItemCase created." | ||||||
|  |      | ||||||
|  |     # Messages shown when using the 'destroy' command. | ||||||
|  |     destroy: | ||||||
|  |          | ||||||
|  |         # Shown when a player uses the destroy command but is not looking at | ||||||
|  |         # an itemcase. | ||||||
|  |         invalid-location: "This block is not an ItemCase." | ||||||
|  |          | ||||||
|  |         # Shown when a player tries to destroy another persons itemcase when | ||||||
|  |         # they do not have permission itemcase.destroy.other. | ||||||
|  |         not-owner: "You do not own this ItemCase." | ||||||
|  |          | ||||||
|  |         # Shown to the player upon successful deletion. | ||||||
|  |         success: "ItemCase destroyed." | ||||||
		Reference in New Issue
	
	Block a user
	 Jesse Prescott
					Jesse Prescott