Added the new /disguiseviewself command, allows for toggling the disguise model when you see yourself.

Permission is libsdisguises.viewself
Aliases are: [dviewself, dvs, disguisevs, disvs, vsd, viewselfdisguise, viewselfd]
This commit is contained in:
NavidK0 2015-07-15 05:51:38 -04:00
parent 1d54ba9997
commit b57e9931b0
8 changed files with 124 additions and 6 deletions

View File

@ -156,6 +156,9 @@ public class DisguiseAPI {
// Set the disguise's entity
disguise.setEntity(entity);
}
if (Disguise.getViewSelf().contains(disguise.getEntity().getUniqueId())) {
disguise.setViewSelfDisguise(true);
}
disguise.startDisguise();
}
@ -265,6 +268,8 @@ public class DisguiseAPI {
/**
* Get the disguise of a entity
* @param disguised
* @return
*/
public static Disguise getDisguise(Entity disguised) {
if (disguised == null)
@ -274,6 +279,9 @@ public class DisguiseAPI {
/**
* Get the disguise of a entity
* @param observer
* @param disguised
* @return
*/
public static Disguise getDisguise(Player observer, Entity disguised) {
if (disguised == null || observer == null)
@ -283,6 +291,8 @@ public class DisguiseAPI {
/**
* Get the disguises of a entity
* @param disguised
* @return
*/
public static Disguise[] getDisguises(Entity disguised) {
if (disguised == null)
@ -292,6 +302,8 @@ public class DisguiseAPI {
/**
* Get the ID of a fake disguise for a entityplayer
* @param entityId
* @return
*/
@Deprecated
public static int getFakeDisguise(UUID entityId) {
@ -304,6 +316,8 @@ public class DisguiseAPI {
/**
* Is this entity disguised
* @param disguised
* @return
*/
public static boolean isDisguised(Entity disguised) {
return getDisguise(disguised) != null;
@ -311,6 +325,9 @@ public class DisguiseAPI {
/**
* Is this entity disguised
* @param observer
* @param disguised
* @return
*/
public static boolean isDisguised(Player observer, Entity disguised) {
return getDisguise(observer, disguised) != null;
@ -324,9 +341,20 @@ public class DisguiseAPI {
return DisguiseUtilities.getSelfDisguised().contains(player.getUniqueId());
}
/**
* Returns true if the entitiy has /disguiseviewself toggled
* on.
* @param entity
* @return
*/
public static boolean isViewSelfToggled(Entity entity) {
return isDisguised(entity) ? getDisguise(entity).isSelfDisguiseVisible() : Disguise.getViewSelf().contains(entity.getUniqueId());
}
/**
* Undisguise the entity. This doesn't let you cancel the UndisguiseEvent if the entity is no longer valid. Aka removed from
* the world.
* @param entity
*/
public static void undisguiseToAll(Entity entity) {
Disguise[] disguises = getDisguises(entity);
@ -335,6 +363,25 @@ public class DisguiseAPI {
}
}
/**
* Set whether this player can see his
* own disguise or not.
* @param entity
* @param toggled
*/
public static void setViewDisguiseToggled(Entity entity, boolean toggled) {
if (isDisguised(entity)) {
Disguise disguise = getDisguise(entity);
disguise.setViewSelfDisguise(toggled);
}
if (toggled) {
if (!Disguise.getViewSelf().contains(entity.getUniqueId()))
Disguise.getViewSelf().add(entity.getUniqueId());
} else {
Disguise.getViewSelf().remove(entity.getUniqueId());
}
}
private DisguiseAPI() {
}
}

View File

@ -19,6 +19,7 @@ public class DisguiseConfig {
private static boolean entityStatusEnabled;
private static boolean equipmentEnabled;
private static boolean hearSelfDisguise;
private static boolean viewSelfDisguise;
private static boolean hidingArmor;
private static boolean hidingHeldItem;
private static boolean keepDisguiseEntityDespawn;
@ -68,7 +69,8 @@ public class DisguiseConfig {
public static void initConfig(ConfigurationSection config) {
setSoundsEnabled(config.getBoolean("DisguiseSounds"));
setVelocitySent(config.getBoolean("SendVelocity"));
setViewDisguises(config.getBoolean("ViewSelfDisguises"));
setViewDisguises(config.getBoolean("ViewSelfDisguises")); //Since we can now toggle, the view disguises listener must always be on
PacketsManager.setViewDisguisesListener(true);
setHearSelfDisguise(config.getBoolean("HearSelfDisguise"));
setHideArmorFromSelf(config.getBoolean("RemoveArmor"));
setHideHeldItemFromSelf(config.getBoolean("RemoveHeldItem"));
@ -216,6 +218,7 @@ public class DisguiseConfig {
/**
* Is the velocity packets sent
* @return
*/
public static boolean isVelocitySent() {
return sendVelocity;
@ -223,9 +226,10 @@ public class DisguiseConfig {
/**
* The default value if a player views his own disguise
* @return
*/
public static boolean isViewDisguises() {
return PacketsManager.isViewDisguisesListenerEnabled();
return viewSelfDisguise;
}
public static boolean isWitherSkullPacketsEnabled() {
@ -404,13 +408,14 @@ public class DisguiseConfig {
/**
* Disable velocity packets being sent for w/e reason. Maybe you want every ounce of performance you can get?
* @param sendVelocityPackets
*/
public static void setVelocitySent(boolean sendVelocityPackets) {
sendVelocity = sendVelocityPackets;
}
public static void setViewDisguises(boolean seeOwnDisguise) {
PacketsManager.setViewDisguisesListener(seeOwnDisguise);
viewSelfDisguise = seeOwnDisguise;
}
public static void setWitherSkullPacketsEnabled(boolean enabled) {

View File

@ -63,6 +63,7 @@ public class LibsDisguises extends JavaPlugin {
getCommand("disguisehelp").setExecutor(new DisguiseHelpCommand());
getCommand("disguiseclone").setExecutor(new DisguiseCloneCommand());
getCommand("libsdisguises").setExecutor(new LibsDisguisesCommand());
getCommand("disguiseviewself").setExecutor(new DisguiseViewSelf());
registerValues();
instance = this;
try {

View File

@ -0,0 +1,37 @@
package me.libraryaddict.disguise.commands;
import me.libraryaddict.disguise.DisguiseAPI;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
*
* @author Navid
*/
public class DisguiseViewSelf implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, 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.viewself")) {
Player player = (Player) sender;
if (DisguiseAPI.isViewSelfToggled(player)) {
DisguiseAPI.setViewDisguiseToggled(player, false);
sender.sendMessage(ChatColor.GREEN + "Toggled viewing own disguise off!");
} else {
DisguiseAPI.setViewDisguiseToggled(player, true);
sender.sendMessage(ChatColor.GREEN + "Toggled viewing own disguise on!");
}
} else {
sender.sendMessage(ChatColor.RED + "You are forbidden to use this command.");
}
return true;
}
}

View File

@ -33,6 +33,9 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.reflect.StructureModifier;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import me.libraryaddict.disguise.LibsDisguises;
public abstract class Disguise {
@ -54,11 +57,14 @@ public abstract class Disguise {
private FlagWatcher watcher;
private boolean showName = false;
private static List<UUID> viewSelf = new ArrayList<>();
@Override
public abstract Disguise clone();
/**
* Seems I do this method so I can make cleaner constructors on disguises..
* @param newType
*/
protected void createDisguise(DisguiseType newType) {
if (getWatcher() != null)
@ -408,6 +414,7 @@ public abstract class Disguise {
/**
* Can the disguised view himself as the disguise
* @return
*/
public boolean isSelfDisguiseVisible() {
return viewSelfDisguise;
@ -685,6 +692,7 @@ public abstract class Disguise {
/**
* Can the disguised view himself as the disguise
*
* @param viewSelfDisguise
* @return
*/
public Disguise setViewSelfDisguise(boolean viewSelfDisguise) {
@ -750,4 +758,13 @@ public abstract class Disguise {
public boolean stopDisguise() {
return removeDisguise();
}
/**
* Returns the list of people who have /disguiseViewSelf
* toggled on
* @return
*/
public static List<UUID> getViewSelf() {
return viewSelf;
}
}

View File

@ -6,7 +6,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.UUID;
import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.disguisetypes.AnimalColor;
import me.libraryaddict.disguise.disguisetypes.Disguise;
@ -41,7 +44,6 @@ public abstract class BaseDisguiseCommand implements CommandExecutor {
public DisguiseParseException(String string) {
super(string);
}
}
protected ArrayList<String> getAllowedDisguises(HashMap<DisguiseType, HashMap<ArrayList<String>, Boolean>> hashMap) {

View File

@ -433,6 +433,8 @@ public class DisguiseUtilities {
/**
* Get all EntityPlayers who have this entity in their Entity Tracker And they are in the targetted disguise.
* @param disguise
* @return
*/
public static ArrayList<Player> getPerverts(Disguise disguise) {
ArrayList<Player> players = new ArrayList<>();

View File

@ -1,6 +1,6 @@
name: LibsDisguises
main: me.libraryaddict.disguise.LibsDisguises
version: 8.5.2
version: 8.6
author: libraryaddict
authors: [Byteflux, Navid K.]
depend: [ProtocolLib]
@ -48,6 +48,10 @@ commands:
aliases: [disguisec, disc, disclone, dclone, clonedisguise, clonedis, cdisguise, cdis]
permission: libsdisguises.seecmd.disguiseclone
description: Copy a disguise (or entity) and use it later.
disguiseviewself:
aliases: [dviewself, dvs, disguisevs, disvs, vsd, viewselfdisguise, viewselfd]
permission: libsdisguises.seecmd.viewself
description: Toggle seeing your own disguise on or off.
permissions:
libsdisguises.seethrough:
@ -68,8 +72,11 @@ permissions:
libsdisguises.seecmd.undisguiseplayer: true
libsdisguises.seecmd.undisguiseradius: true
libsdisguises.seecmd.disguiseclone: true
libsdisguises.seecmd.disguiseviewself: true
libsdisguises.seecmd.libsdisguises:
description: See the /libsdisguises command in tab-completion
libsdisguises.seecmd.disguiseviewself:
description: See the /disguiseviewself command in tab-completion
libsdisguises.seecmd.disguise:
description: See the /disguise command in tab-completion
libsdisguises.seecmd.disguiseentity: