Add Disguise Clone command to clone a entity to look like them
This commit is contained in:
parent
fb1f7a698c
commit
4262221133
@ -22,4 +22,6 @@ commands:
|
|||||||
undisguiseplayer:
|
undisguiseplayer:
|
||||||
aliases: [undisplayer, undplayer]
|
aliases: [undisplayer, undplayer]
|
||||||
undisguiseradius:
|
undisguiseradius:
|
||||||
aliases: [undisradius, undradius]
|
aliases: [undisradius, undradius]
|
||||||
|
disguiseclone:
|
||||||
|
aliases: [disguisec, disc, disclone, dclone, clonedisguise, clonedis, cdisguise, cdis]
|
@ -30,8 +30,9 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||||||
public class DisguiseListener implements Listener {
|
public class DisguiseListener implements Listener {
|
||||||
|
|
||||||
private String currentVersion;
|
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, BukkitRunnable> disguiseRunnable = new HashMap<String, BukkitRunnable>();
|
||||||
private HashMap<String, Disguise> disguiseSlap = new HashMap<String, Disguise>();
|
|
||||||
private String latestVersion;
|
private String latestVersion;
|
||||||
private LibsDisguises plugin;
|
private LibsDisguises plugin;
|
||||||
private String updateMessage = ChatColor.RED + "[LibsDisguises] " + ChatColor.DARK_RED
|
private String updateMessage = ChatColor.RED + "[LibsDisguises] " + ChatColor.DARK_RED
|
||||||
@ -120,10 +121,9 @@ public class DisguiseListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onRightClick(PlayerInteractEntityEvent event) {
|
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();
|
Player p = event.getPlayer();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
Disguise disguise = disguiseSlap.remove(p.getName());
|
|
||||||
disguiseRunnable.remove(p.getName()).cancel();
|
disguiseRunnable.remove(p.getName()).cancel();
|
||||||
Entity entity = event.getRightClicked();
|
Entity entity = event.getRightClicked();
|
||||||
String entityName = "";
|
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 != null) {
|
||||||
if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled()
|
if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled()
|
||||||
&& entity instanceof LivingEntity) {
|
&& disguiseTarget instanceof LivingEntity) {
|
||||||
p.sendMessage(ChatColor.RED
|
p.sendMessage(ChatColor.RED
|
||||||
+ "Can't disguise a living entity as a misc disguise. This has been disabled in the config!");
|
+ "Can't disguise a living entity as a misc disguise. This has been disabled in the config!");
|
||||||
} else {
|
} else {
|
||||||
if (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
|
if (disguiseTarget instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise()) {
|
||||||
if (disguise.getWatcher() instanceof LivingWatcher) {
|
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||||
((LivingWatcher) disguise.getWatcher()).setCustomName(((Player) entity).getDisplayName());
|
((LivingWatcher) disguise.getWatcher()).setCustomName(((Player) disguiseTarget).getDisplayName());
|
||||||
if (DisguiseConfig.isNameAboveHeadAlwaysVisible()) {
|
if (DisguiseConfig.isNameAboveHeadAlwaysVisible()) {
|
||||||
((LivingWatcher) disguise.getWatcher()).setCustomNameVisible(true);
|
((LivingWatcher) disguise.getWatcher()).setCustomNameVisible(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DisguiseAPI.disguiseToAll(entity, disguise);
|
DisguiseAPI.disguiseToAll(disguiseTarget, disguise);
|
||||||
String disguiseName = "a ";
|
String disguiseName = "a ";
|
||||||
if (disguise instanceof PlayerDisguise) {
|
if (disguise instanceof PlayerDisguise) {
|
||||||
disguiseName = "the player " + ((PlayerDisguise) disguise).getName();
|
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 "
|
if (disguiseTarget == p) {
|
||||||
+ disguiseName + "!");
|
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 {
|
} else {
|
||||||
if (DisguiseAPI.isDisguised(entity)) {
|
if (DisguiseAPI.isDisguised(entity)) {
|
||||||
@ -222,20 +242,38 @@ public class DisguiseListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSlap(final String player, Disguise disguise) {
|
public void setDisguiseClone(final String player, Boolean[] options) {
|
||||||
if (disguiseSlap.containsKey(player)) {
|
if (disguiseRunnable.containsKey(player)) {
|
||||||
disguiseSlap.remove(player);
|
BukkitRunnable run = disguiseRunnable.remove(player);
|
||||||
disguiseRunnable.remove(player).cancel();
|
run.cancel();
|
||||||
|
run.run();
|
||||||
}
|
}
|
||||||
BukkitRunnable runnable = new BukkitRunnable() {
|
BukkitRunnable runnable = new BukkitRunnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
disguiseSlap.remove(player);
|
disguiseClone.remove(player);
|
||||||
disguiseRunnable.remove(player);
|
disguiseRunnable.remove(player);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
runnable.runTaskLater(plugin, 20 * 10);
|
runnable.runTaskLater(plugin, 20 * 10);
|
||||||
disguiseRunnable.put(player, runnable);
|
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("disguiseradius").setExecutor(new DisguiseRadiusCommand(getConfig().getInt("DisguiseRadiusMax")));
|
||||||
getCommand("undisguiseradius").setExecutor(new UndisguiseRadiusCommand(getConfig().getInt("UndisguiseRadiusMax")));
|
getCommand("undisguiseradius").setExecutor(new UndisguiseRadiusCommand(getConfig().getInt("UndisguiseRadiusMax")));
|
||||||
getCommand("disguisehelp").setExecutor(new DisguiseHelpCommand());
|
getCommand("disguisehelp").setExecutor(new DisguiseHelpCommand());
|
||||||
|
getCommand("disguiseclone").setExecutor(new DisguiseCloneCommand(listener));
|
||||||
getCommand("libsdisguises").setExecutor(new LibsDisguisesCommand());
|
getCommand("libsdisguises").setExecutor(new LibsDisguisesCommand());
|
||||||
registerValues();
|
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;
|
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 "
|
sender.sendMessage(ChatColor.RED + "Right click a entity in the next 10 seconds to disguise it as a "
|
||||||
+ disguise.getType().toReadable() + "!");
|
+ disguise.getType().toReadable() + "!");
|
||||||
return true;
|
return true;
|
||||||
|
@ -21,10 +21,10 @@ public class UndisguiseEntityCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (sender.hasPermission("libsdisguises.undisguiseentity")) {
|
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!");
|
sender.sendMessage(ChatColor.RED + "Right click a disguised entity to undisguise them!");
|
||||||
} else
|
} 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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user