Add Disguise Clone command to clone a entity to look like them
This commit is contained in:
		| @@ -30,8 +30,9 @@ import org.bukkit.scheduler.BukkitRunnable; | ||||
| public class DisguiseListener implements Listener { | ||||
|  | ||||
|     private String currentVersion; | ||||
|     private HashMap<String, Boolean[]> disguiseClone = new HashMap<String, Boolean[]>(); | ||||
|     private HashMap<String, Disguise> disguiseEntity = new HashMap<String, Disguise>(); | ||||
|     private HashMap<String, BukkitRunnable> disguiseRunnable = new HashMap<String, BukkitRunnable>(); | ||||
|     private HashMap<String, Disguise> disguiseSlap = new HashMap<String, Disguise>(); | ||||
|     private String latestVersion; | ||||
|     private LibsDisguises plugin; | ||||
|     private String updateMessage = ChatColor.RED + "[LibsDisguises] " + ChatColor.DARK_RED | ||||
| @@ -120,10 +121,9 @@ public class DisguiseListener implements Listener { | ||||
|  | ||||
|     @EventHandler | ||||
|     public void onRightClick(PlayerInteractEntityEvent event) { | ||||
|         if (disguiseSlap.containsKey(event.getPlayer().getName())) { | ||||
|         if (disguiseEntity.containsKey(event.getPlayer().getName()) || disguiseClone.containsKey(event.getPlayer().getName())) { | ||||
|             Player p = event.getPlayer(); | ||||
|             event.setCancelled(true); | ||||
|             Disguise disguise = disguiseSlap.remove(p.getName()); | ||||
|             disguiseRunnable.remove(p.getName()).cancel(); | ||||
|             Entity entity = event.getRightClicked(); | ||||
|             String entityName = ""; | ||||
| @@ -138,21 +138,36 @@ public class DisguiseListener implements Listener { | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             Disguise disguise = null; | ||||
|             Entity disguiseTarget = null; | ||||
|             if (disguiseClone.containsKey(p.getName())) { | ||||
|                 Boolean[] options = disguiseClone.remove(p.getName()); | ||||
|                 disguiseTarget = p; | ||||
|                 disguise = DisguiseAPI.getDisguise(p, entity); | ||||
|                 if (disguise == null) { | ||||
|                     disguise = DisguiseAPI.constructDisguise(entity, options[0], options[1], options[2]); | ||||
|                 } else { | ||||
|                     disguise = disguise.clone(); | ||||
|                 } | ||||
|             } else if (disguiseEntity.containsKey(p.getName())) { | ||||
|                 disguiseTarget = entity; | ||||
|                 disguise = disguiseEntity.remove(p.getName()); | ||||
|             } | ||||
|             if (disguise != null) { | ||||
|                 if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled() | ||||
|                         && entity instanceof LivingEntity) { | ||||
|                         && disguiseTarget instanceof LivingEntity) { | ||||
|                     p.sendMessage(ChatColor.RED | ||||
|                             + "Can't disguise a living entity as a misc disguise. This has been disabled in the config!"); | ||||
|                 } else { | ||||
|                     if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) { | ||||
|                     if (disguiseTarget instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) { | ||||
|                         if (disguise.getWatcher() instanceof LivingWatcher) { | ||||
|                             ((LivingWatcher) disguise.getWatcher()).setCustomName(((Player) entity).getDisplayName()); | ||||
|                             ((LivingWatcher) disguise.getWatcher()).setCustomName(((Player) disguiseTarget).getDisplayName()); | ||||
|                             if (DisguiseConfig.isNameAboveHeadAlwaysVisible()) { | ||||
|                                 ((LivingWatcher) disguise.getWatcher()).setCustomNameVisible(true); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                     DisguiseAPI.disguiseToAll(entity, disguise); | ||||
|                     DisguiseAPI.disguiseToAll(disguiseTarget, disguise); | ||||
|                     String disguiseName = "a "; | ||||
|                     if (disguise instanceof PlayerDisguise) { | ||||
|                         disguiseName = "the player " + ((PlayerDisguise) disguise).getName(); | ||||
| @@ -165,8 +180,13 @@ public class DisguiseListener implements Listener { | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                     p.sendMessage(ChatColor.RED + "Disguised " + (entity instanceof Player ? "" : "the ") + entityName + " as " | ||||
|                             + disguiseName + "!"); | ||||
|                     if (disguiseTarget == p) { | ||||
|                         p.sendMessage(ChatColor.RED + "Disguised yourself" + " as " + (entity instanceof Player ? "" : "a ") | ||||
|                                 + entityName + "!"); | ||||
|                     } else { | ||||
|                         p.sendMessage(ChatColor.RED + "Disguised " + (entity instanceof Player ? "" : "the ") + entityName | ||||
|                                 + " as " + disguiseName + "!"); | ||||
|                     } | ||||
|                 } | ||||
|             } else { | ||||
|                 if (DisguiseAPI.isDisguised(entity)) { | ||||
| @@ -222,20 +242,38 @@ public class DisguiseListener implements Listener { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setSlap(final String player, Disguise disguise) { | ||||
|         if (disguiseSlap.containsKey(player)) { | ||||
|             disguiseSlap.remove(player); | ||||
|             disguiseRunnable.remove(player).cancel(); | ||||
|     public void setDisguiseClone(final String player, Boolean[] options) { | ||||
|         if (disguiseRunnable.containsKey(player)) { | ||||
|             BukkitRunnable run = disguiseRunnable.remove(player); | ||||
|             run.cancel(); | ||||
|             run.run(); | ||||
|         } | ||||
|         BukkitRunnable runnable = new BukkitRunnable() { | ||||
|             public void run() { | ||||
|                 disguiseSlap.remove(player); | ||||
|                 disguiseClone.remove(player); | ||||
|                 disguiseRunnable.remove(player); | ||||
|             } | ||||
|         }; | ||||
|         runnable.runTaskLater(plugin, 20 * 10); | ||||
|         disguiseRunnable.put(player, runnable); | ||||
|         disguiseSlap.put(player, disguise); | ||||
|         disguiseClone.put(player, options); | ||||
|     } | ||||
|  | ||||
|     public void setDisguiseEntity(final String player, Disguise disguise) { | ||||
|         if (disguiseRunnable.containsKey(player)) { | ||||
|             BukkitRunnable run = disguiseRunnable.remove(player); | ||||
|             run.cancel(); | ||||
|             run.run(); | ||||
|         } | ||||
|         BukkitRunnable runnable = new BukkitRunnable() { | ||||
|             public void run() { | ||||
|                 disguiseEntity.remove(player); | ||||
|                 disguiseRunnable.remove(player); | ||||
|             } | ||||
|         }; | ||||
|         runnable.runTaskLater(plugin, 20 * 10); | ||||
|         disguiseRunnable.put(player, runnable); | ||||
|         disguiseEntity.put(player, disguise); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -138,6 +138,7 @@ public class LibsDisguises extends JavaPlugin { | ||||
|         getCommand("disguiseradius").setExecutor(new DisguiseRadiusCommand(getConfig().getInt("DisguiseRadiusMax"))); | ||||
|         getCommand("undisguiseradius").setExecutor(new UndisguiseRadiusCommand(getConfig().getInt("UndisguiseRadiusMax"))); | ||||
|         getCommand("disguisehelp").setExecutor(new DisguiseHelpCommand()); | ||||
|         getCommand("disguiseclone").setExecutor(new DisguiseCloneCommand(listener)); | ||||
|         getCommand("libsdisguises").setExecutor(new LibsDisguisesCommand()); | ||||
|         registerValues(); | ||||
|     } | ||||
|   | ||||
| @@ -0,0 +1,64 @@ | ||||
| package me.libraryaddict.disguise.commands; | ||||
|  | ||||
| import me.libraryaddict.disguise.DisguiseListener; | ||||
| import me.libraryaddict.disguise.utilities.BaseDisguiseCommand; | ||||
|  | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| import org.bukkit.ChatColor; | ||||
| import org.bukkit.command.Command; | ||||
| import org.bukkit.command.CommandSender; | ||||
|  | ||||
| public class DisguiseCloneCommand extends BaseDisguiseCommand { | ||||
|  | ||||
|     private DisguiseListener listener; | ||||
|  | ||||
|     public DisguiseCloneCommand(DisguiseListener listener) { | ||||
|         this.listener = listener; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { | ||||
|         if (sender.getName().equals("CONSOLE")) { | ||||
|             sender.sendMessage(ChatColor.RED + "You may not use this command from the console!"); | ||||
|             return true; | ||||
|         } | ||||
|         if (sender.hasPermission("libsdisguises.disguise.disguiseclone")) { | ||||
|             boolean doEnquipment = true; | ||||
|             boolean doSneak = false; | ||||
|             boolean doSprint = false; | ||||
|             for (String option : args) { | ||||
|                 if (StringUtils.startsWithIgnoreCase(option, "ignoreEnquip")) { | ||||
|                     doEnquipment = false; | ||||
|                 } else if (option.equalsIgnoreCase("doSneakSprint")) { | ||||
|                     doSneak = true; | ||||
|                     doSprint = true; | ||||
|                 } else if (option.equalsIgnoreCase("doSneak")) { | ||||
|                     doSneak = true; | ||||
|                 } else if (option.equalsIgnoreCase("doSprint")) { | ||||
|                     doSprint = true; | ||||
|                 } else { | ||||
|                     sender.sendMessage(ChatColor.DARK_RED + "Unknown option '" + option | ||||
|                             + "' - Valid options are 'IgnoreEnquipment' 'DoSneakSprint' 'DoSneak' 'DoSprint'"); | ||||
|                     return true; | ||||
|                 } | ||||
|             } | ||||
|             listener.setDisguiseClone(sender.getName(), new Boolean[] { doEnquipment, doSneak, doSprint }); | ||||
|             sender.sendMessage(ChatColor.RED + "Right click a entity in the next 10 seconds to disguise as it!"); | ||||
|         } else { | ||||
|             sender.sendMessage(ChatColor.RED + "There was once a curious little boy," | ||||
|                     + " he liked to try out these strange sounding commands." | ||||
|                     + " One day, that curious little boy tried out the wrong command and was set on fire!" + " Aka."); | ||||
|             sender.sendMessage(ChatColor.DARK_RED + "You are forbidden to use this command."); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Send the player the information | ||||
|      */ | ||||
|     protected void sendCommandUsage(CommandSender sender) { | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "Disguise as the entity you right click! Or as their disguise!"); | ||||
|         sender.sendMessage(ChatColor.DARK_GREEN + "/disguiseclone IgnoreEnquipment" + ChatColor.DARK_GREEN + "(" | ||||
|                 + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")"); | ||||
|     } | ||||
| } | ||||
| @@ -35,7 +35,7 @@ public class DisguiseEntityCommand extends BaseDisguiseCommand { | ||||
|             } | ||||
|             return true; | ||||
|         } | ||||
|         listener.setSlap(sender.getName(), disguise); | ||||
|         listener.setDisguiseEntity(sender.getName(), disguise); | ||||
|         sender.sendMessage(ChatColor.RED + "Right click a entity in the next 10 seconds to disguise it as a " | ||||
|                 + disguise.getType().toReadable() + "!"); | ||||
|         return true; | ||||
|   | ||||
| @@ -21,10 +21,10 @@ public class UndisguiseEntityCommand implements CommandExecutor { | ||||
|             return true; | ||||
|         } | ||||
|         if (sender.hasPermission("libsdisguises.undisguiseentity")) { | ||||
|             listener.setSlap(sender.getName(), null); | ||||
|             listener.setDisguiseEntity(sender.getName(), null); | ||||
|             sender.sendMessage(ChatColor.RED + "Right click a disguised entity to undisguise them!"); | ||||
|         } else | ||||
|             sender.sendMessage(ChatColor.RED + "You are forbidden to use this command!"); | ||||
|             sender.sendMessage(ChatColor.RED + "You are forbidden to use this command."); | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user