Now able to hide disguised players from tab, show player disguises tab
This commit is contained in:
parent
eb1733262f
commit
80b4085204
@ -98,6 +98,12 @@ UndisguiseOnWorldChange: false
|
|||||||
# Contact Mojang's servers? Disabling this option will disable player skin disguises!
|
# Contact Mojang's servers? Disabling this option will disable player skin disguises!
|
||||||
ContactMojangServers: true
|
ContactMojangServers: true
|
||||||
|
|
||||||
|
# Hide players in tab when disguised? This means a disguised player cannot be seen when you press tab! This can be toggled on/off per disguise
|
||||||
|
HideDisguisedPlayersTab: false
|
||||||
|
|
||||||
|
# Always show player disguises in tab? The names will continue to appear in tab until the disguise is removed.
|
||||||
|
ShowPlayerDisguisesTab: false
|
||||||
|
|
||||||
# This will help performance, especially with CPU
|
# This will help performance, especially with CPU
|
||||||
# Due to safety reasons, self disguises can never have their packets disabled.
|
# Due to safety reasons, self disguises can never have their packets disabled.
|
||||||
PacketsEnabled:
|
PacketsEnabled:
|
||||||
|
@ -5,8 +5,7 @@ import org.bukkit.configuration.ConfigurationSection;
|
|||||||
|
|
||||||
import me.libraryaddict.disguise.utilities.PacketsManager;
|
import me.libraryaddict.disguise.utilities.PacketsManager;
|
||||||
|
|
||||||
public class DisguiseConfig
|
public class DisguiseConfig {
|
||||||
{
|
|
||||||
|
|
||||||
private static boolean animationEnabled;
|
private static boolean animationEnabled;
|
||||||
private static boolean bedEnabled;
|
private static boolean bedEnabled;
|
||||||
@ -44,40 +43,50 @@ public class DisguiseConfig
|
|||||||
+ ", the new version is " + ChatColor.RED + "%s" + ChatColor.DARK_RED + "!";
|
+ ", the new version is " + ChatColor.RED + "%s" + ChatColor.DARK_RED + "!";
|
||||||
private static String updateNotificationPermission;
|
private static String updateNotificationPermission;
|
||||||
private static boolean witherSkullEnabled;
|
private static boolean witherSkullEnabled;
|
||||||
|
private static boolean hideDisguisedPlayers;
|
||||||
|
private static boolean displayPlayerDisguisesInTab;
|
||||||
|
|
||||||
public static String getDisguiseBlownMessage()
|
public static void setHideDisguisedPlayers(boolean hideDisguisedPlayersInTab) {
|
||||||
{
|
hideDisguisedPlayers = hideDisguisedPlayersInTab;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setShowDisguisedPlayersInTab(boolean displayPlayerDisguisesInTablist) {
|
||||||
|
displayPlayerDisguisesInTab = displayPlayerDisguisesInTablist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isHideDisguisedPlayers() {
|
||||||
|
return hideDisguisedPlayers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isShowDisguisedPlayersInTab() {
|
||||||
|
return displayPlayerDisguisesInTab;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDisguiseBlownMessage() {
|
||||||
return disguiseBlownMessage;
|
return disguiseBlownMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getDisguiseCloneExpire()
|
public static int getDisguiseCloneExpire() {
|
||||||
{
|
|
||||||
return disguiseCloneExpire;
|
return disguiseCloneExpire;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getDisguiseEntityExpire()
|
public static int getDisguiseEntityExpire() {
|
||||||
{
|
|
||||||
return disguiseEntityExpire;
|
return disguiseEntityExpire;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getMaxClonedDisguises()
|
public static int getMaxClonedDisguises() {
|
||||||
{
|
|
||||||
return maxClonedDisguises;
|
return maxClonedDisguises;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getUpdateMessage()
|
public static String getUpdateMessage() {
|
||||||
{
|
|
||||||
return updateMessage;
|
return updateMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getUpdateNotificationPermission()
|
public static String getUpdateNotificationPermission() {
|
||||||
{
|
|
||||||
return updateNotificationPermission;
|
return updateNotificationPermission;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void initConfig(ConfigurationSection config)
|
public static void initConfig(ConfigurationSection config) {
|
||||||
{
|
|
||||||
|
|
||||||
setSoundsEnabled(config.getBoolean("DisguiseSounds"));
|
setSoundsEnabled(config.getBoolean("DisguiseSounds"));
|
||||||
setVelocitySent(config.getBoolean("SendVelocity"));
|
setVelocitySent(config.getBoolean("SendVelocity"));
|
||||||
setViewDisguises(config.getBoolean("ViewSelfDisguises")); // Since we can now toggle, the view disguises listener must
|
setViewDisguises(config.getBoolean("ViewSelfDisguises")); // Since we can now toggle, the view disguises listener must
|
||||||
@ -114,134 +123,112 @@ public class DisguiseConfig
|
|||||||
setUndisguiseOnWorldChange(config.getBoolean("UndisguiseOnWorldChange"));
|
setUndisguiseOnWorldChange(config.getBoolean("UndisguiseOnWorldChange"));
|
||||||
setUpdateNotificationPermission(config.getString("Permission"));
|
setUpdateNotificationPermission(config.getString("Permission"));
|
||||||
setStopShulkerDisguisesFromMoving(config.getBoolean("StopShulkerDisguisesFromMoving", true));
|
setStopShulkerDisguisesFromMoving(config.getBoolean("StopShulkerDisguisesFromMoving", true));
|
||||||
|
setHideDisguisedPlayers(config.getBoolean("HideDisguisedPlayersFromTab"));
|
||||||
|
setShowDisguisedPlayersInTab(config.getBoolean("ShowPlayerDisguisesInTab"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isAnimationPacketsEnabled()
|
public static boolean isAnimationPacketsEnabled() {
|
||||||
{
|
|
||||||
return animationEnabled;
|
return animationEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isBedPacketsEnabled()
|
public static boolean isBedPacketsEnabled() {
|
||||||
{
|
|
||||||
return bedEnabled;
|
return bedEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCollectPacketsEnabled()
|
public static boolean isCollectPacketsEnabled() {
|
||||||
{
|
|
||||||
return collectEnabled;
|
return collectEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isDisguiseBlownOnAttack()
|
public static boolean isDisguiseBlownOnAttack() {
|
||||||
{
|
|
||||||
return blowDisguisesOnAttack;
|
return blowDisguisesOnAttack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isEntityAnimationsAdded()
|
public static boolean isEntityAnimationsAdded() {
|
||||||
{
|
|
||||||
return entityAnimationsAdded;
|
return entityAnimationsAdded;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isEntityStatusPacketsEnabled()
|
public static boolean isEntityStatusPacketsEnabled() {
|
||||||
{
|
|
||||||
return entityStatusEnabled;
|
return entityStatusEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isEquipmentPacketsEnabled()
|
public static boolean isEquipmentPacketsEnabled() {
|
||||||
{
|
|
||||||
return equipmentEnabled;
|
return equipmentEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the plugin modifying the inventory packets so that players when self disguised, do not see their armor floating around
|
* Is the plugin modifying the inventory packets so that players when self disguised, do not see their armor floating around
|
||||||
*/
|
*/
|
||||||
public static boolean isHidingArmorFromSelf()
|
public static boolean isHidingArmorFromSelf() {
|
||||||
{
|
|
||||||
return hidingArmor;
|
return hidingArmor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does the plugin appear to remove the item they are holding, to prevent a floating sword when they are viewing self disguise
|
* Does the plugin appear to remove the item they are holding, to prevent a floating sword when they are viewing self disguise
|
||||||
*/
|
*/
|
||||||
public static boolean isHidingHeldItemFromSelf()
|
public static boolean isHidingHeldItemFromSelf() {
|
||||||
{
|
|
||||||
return hidingHeldItem;
|
return hidingHeldItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isKeepDisguiseOnEntityDespawn()
|
public static boolean isKeepDisguiseOnEntityDespawn() {
|
||||||
{
|
|
||||||
return keepDisguiseEntityDespawn;
|
return keepDisguiseEntityDespawn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isKeepDisguiseOnPlayerDeath()
|
public static boolean isKeepDisguiseOnPlayerDeath() {
|
||||||
{
|
|
||||||
return keepDisguisePlayerDeath;
|
return keepDisguisePlayerDeath;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isKeepDisguiseOnPlayerLogout()
|
public static boolean isKeepDisguiseOnPlayerLogout() {
|
||||||
{
|
|
||||||
return keepDisguisePlayerLogout;
|
return keepDisguisePlayerLogout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isMaxHealthDeterminedByDisguisedEntity()
|
public static boolean isMaxHealthDeterminedByDisguisedEntity() {
|
||||||
{
|
|
||||||
return maxHealthIsDisguisedEntity;
|
return maxHealthIsDisguisedEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isMetadataPacketsEnabled()
|
public static boolean isMetadataPacketsEnabled() {
|
||||||
{
|
|
||||||
return sendsEntityMetadata;
|
return sendsEntityMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isMiscDisguisesForLivingEnabled()
|
public static boolean isMiscDisguisesForLivingEnabled() {
|
||||||
{
|
|
||||||
return miscDisguisesForLivingEnabled;
|
return miscDisguisesForLivingEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isModifyBoundingBox()
|
public static boolean isModifyBoundingBox() {
|
||||||
{
|
|
||||||
return modifyBoundingBox;
|
return modifyBoundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isMonstersIgnoreDisguises()
|
public static boolean isMonstersIgnoreDisguises() {
|
||||||
{
|
|
||||||
return targetDisguises;
|
return targetDisguises;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isMovementPacketsEnabled()
|
public static boolean isMovementPacketsEnabled() {
|
||||||
{
|
|
||||||
return movementEnabled;
|
return movementEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isNameAboveHeadAlwaysVisible()
|
public static boolean isNameAboveHeadAlwaysVisible() {
|
||||||
{
|
|
||||||
return showNameAboveHeadAlwaysVisible;
|
return showNameAboveHeadAlwaysVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isNameOfPlayerShownAboveDisguise()
|
public static boolean isNameOfPlayerShownAboveDisguise() {
|
||||||
{
|
|
||||||
return showNameAboveHead;
|
return showNameAboveHead;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSelfDisguisesSoundsReplaced()
|
public static boolean isSelfDisguisesSoundsReplaced() {
|
||||||
{
|
|
||||||
return hearSelfDisguise;
|
return hearSelfDisguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSheepDyeable()
|
public static boolean isSheepDyeable() {
|
||||||
{
|
|
||||||
return colorizeSheep;
|
return colorizeSheep;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the sound packets caught and modified
|
* Is the sound packets caught and modified
|
||||||
*/
|
*/
|
||||||
public static boolean isSoundEnabled()
|
public static boolean isSoundEnabled() {
|
||||||
{
|
|
||||||
return PacketsManager.isHearDisguisesEnabled();
|
return PacketsManager.isHearDisguisesEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isUndisguiseOnWorldChange()
|
public static boolean isUndisguiseOnWorldChange() {
|
||||||
{
|
|
||||||
return undisguiseSwitchWorlds;
|
return undisguiseSwitchWorlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,8 +237,7 @@ public class DisguiseConfig
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static boolean isVelocitySent()
|
public static boolean isVelocitySent() {
|
||||||
{
|
|
||||||
return sendVelocity;
|
return sendVelocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,90 +246,72 @@ public class DisguiseConfig
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static boolean isViewDisguises()
|
public static boolean isViewDisguises() {
|
||||||
{
|
|
||||||
return viewSelfDisguise;
|
return viewSelfDisguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isWitherSkullPacketsEnabled()
|
public static boolean isWitherSkullPacketsEnabled() {
|
||||||
{
|
|
||||||
return witherSkullEnabled;
|
return witherSkullEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isWolfDyeable()
|
public static boolean isWolfDyeable() {
|
||||||
{
|
|
||||||
return colorizeWolf;
|
return colorizeWolf;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setAddEntityAnimations(boolean isEntityAnimationsAdded)
|
public static void setAddEntityAnimations(boolean isEntityAnimationsAdded) {
|
||||||
{
|
|
||||||
entityAnimationsAdded = isEntityAnimationsAdded;
|
entityAnimationsAdded = isEntityAnimationsAdded;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setAnimationPacketsEnabled(boolean enabled)
|
public static void setAnimationPacketsEnabled(boolean enabled) {
|
||||||
{
|
if (enabled != isAnimationPacketsEnabled()) {
|
||||||
if (enabled != isAnimationPacketsEnabled())
|
|
||||||
{
|
|
||||||
animationEnabled = enabled;
|
animationEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setBedPacketsEnabled(boolean enabled)
|
public static void setBedPacketsEnabled(boolean enabled) {
|
||||||
{
|
if (enabled != isBedPacketsEnabled()) {
|
||||||
if (enabled != isBedPacketsEnabled())
|
|
||||||
{
|
|
||||||
bedEnabled = enabled;
|
bedEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setCollectPacketsEnabled(boolean enabled)
|
public static void setCollectPacketsEnabled(boolean enabled) {
|
||||||
{
|
if (enabled != isCollectPacketsEnabled()) {
|
||||||
if (enabled != isCollectPacketsEnabled())
|
|
||||||
{
|
|
||||||
collectEnabled = enabled;
|
collectEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDisguiseBlownMessage(String newMessage)
|
public static void setDisguiseBlownMessage(String newMessage) {
|
||||||
{
|
|
||||||
disguiseBlownMessage = newMessage;
|
disguiseBlownMessage = newMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDisguiseBlownOnAttack(boolean blowDisguise)
|
public static void setDisguiseBlownOnAttack(boolean blowDisguise) {
|
||||||
{
|
|
||||||
blowDisguisesOnAttack = blowDisguise;
|
blowDisguisesOnAttack = blowDisguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDisguiseCloneExpire(int newExpires)
|
public static void setDisguiseCloneExpire(int newExpires) {
|
||||||
{
|
|
||||||
disguiseCloneExpire = newExpires;
|
disguiseCloneExpire = newExpires;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setDisguiseEntityExpire(int newExpires)
|
public static void setDisguiseEntityExpire(int newExpires) {
|
||||||
{
|
|
||||||
disguiseEntityExpire = newExpires;
|
disguiseEntityExpire = newExpires;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setEntityStatusPacketsEnabled(boolean enabled)
|
public static void setEntityStatusPacketsEnabled(boolean enabled) {
|
||||||
{
|
if (enabled != isEntityStatusPacketsEnabled()) {
|
||||||
if (enabled != isEntityStatusPacketsEnabled())
|
|
||||||
{
|
|
||||||
entityStatusEnabled = enabled;
|
entityStatusEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setEquipmentPacketsEnabled(boolean enabled)
|
public static void setEquipmentPacketsEnabled(boolean enabled) {
|
||||||
{
|
if (enabled != isEquipmentPacketsEnabled()) {
|
||||||
if (enabled != isEquipmentPacketsEnabled())
|
|
||||||
{
|
|
||||||
equipmentEnabled = enabled;
|
equipmentEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
@ -353,10 +321,8 @@ public class DisguiseConfig
|
|||||||
/**
|
/**
|
||||||
* Can players hear their own disguises
|
* Can players hear their own disguises
|
||||||
*/
|
*/
|
||||||
public static void setHearSelfDisguise(boolean replaceSound)
|
public static void setHearSelfDisguise(boolean replaceSound) {
|
||||||
{
|
if (hearSelfDisguise != replaceSound) {
|
||||||
if (hearSelfDisguise != replaceSound)
|
|
||||||
{
|
|
||||||
hearSelfDisguise = replaceSound;
|
hearSelfDisguise = replaceSound;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -364,10 +330,8 @@ public class DisguiseConfig
|
|||||||
/**
|
/**
|
||||||
* Set the plugin to hide self disguises armor from theirselves
|
* Set the plugin to hide self disguises armor from theirselves
|
||||||
*/
|
*/
|
||||||
public static void setHideArmorFromSelf(boolean hideArmor)
|
public static void setHideArmorFromSelf(boolean hideArmor) {
|
||||||
{
|
if (hidingArmor != hideArmor) {
|
||||||
if (hidingArmor != hideArmor)
|
|
||||||
{
|
|
||||||
hidingArmor = hideArmor;
|
hidingArmor = hideArmor;
|
||||||
|
|
||||||
PacketsManager.setInventoryListenerEnabled(isHidingHeldItemFromSelf() || isHidingArmorFromSelf());
|
PacketsManager.setInventoryListenerEnabled(isHidingHeldItemFromSelf() || isHidingArmorFromSelf());
|
||||||
@ -377,121 +341,98 @@ public class DisguiseConfig
|
|||||||
/**
|
/**
|
||||||
* Does the plugin appear to remove the item they are holding, to prevent a floating sword when they are viewing self disguise
|
* Does the plugin appear to remove the item they are holding, to prevent a floating sword when they are viewing self disguise
|
||||||
*/
|
*/
|
||||||
public static void setHideHeldItemFromSelf(boolean hideHelditem)
|
public static void setHideHeldItemFromSelf(boolean hideHelditem) {
|
||||||
{
|
if (hidingHeldItem != hideHelditem) {
|
||||||
if (hidingHeldItem != hideHelditem)
|
|
||||||
{
|
|
||||||
hidingHeldItem = hideHelditem;
|
hidingHeldItem = hideHelditem;
|
||||||
|
|
||||||
PacketsManager.setInventoryListenerEnabled(isHidingHeldItemFromSelf() || isHidingArmorFromSelf());
|
PacketsManager.setInventoryListenerEnabled(isHidingHeldItemFromSelf() || isHidingArmorFromSelf());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setKeepDisguiseOnEntityDespawn(boolean keepDisguise)
|
public static void setKeepDisguiseOnEntityDespawn(boolean keepDisguise) {
|
||||||
{
|
|
||||||
keepDisguiseEntityDespawn = keepDisguise;
|
keepDisguiseEntityDespawn = keepDisguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setKeepDisguiseOnPlayerDeath(boolean keepDisguise)
|
public static void setKeepDisguiseOnPlayerDeath(boolean keepDisguise) {
|
||||||
{
|
|
||||||
keepDisguisePlayerDeath = keepDisguise;
|
keepDisguisePlayerDeath = keepDisguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setKeepDisguiseOnPlayerLogout(boolean keepDisguise)
|
public static void setKeepDisguiseOnPlayerLogout(boolean keepDisguise) {
|
||||||
{
|
|
||||||
keepDisguisePlayerLogout = keepDisguise;
|
keepDisguisePlayerLogout = keepDisguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setMaxClonedDisguises(int newMax)
|
public static void setMaxClonedDisguises(int newMax) {
|
||||||
{
|
|
||||||
maxClonedDisguises = newMax;
|
maxClonedDisguises = newMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setMaxHealthDeterminedByDisguisedEntity(boolean isDetermined)
|
public static void setMaxHealthDeterminedByDisguisedEntity(boolean isDetermined) {
|
||||||
{
|
|
||||||
maxHealthIsDisguisedEntity = isDetermined;
|
maxHealthIsDisguisedEntity = isDetermined;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setMetadataPacketsEnabled(boolean enabled)
|
public static void setMetadataPacketsEnabled(boolean enabled) {
|
||||||
{
|
|
||||||
sendsEntityMetadata = enabled;
|
sendsEntityMetadata = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setMiscDisguisesForLivingEnabled(boolean enabled)
|
public static void setMiscDisguisesForLivingEnabled(boolean enabled) {
|
||||||
{
|
if (enabled != isMiscDisguisesForLivingEnabled()) {
|
||||||
if (enabled != isMiscDisguisesForLivingEnabled())
|
|
||||||
{
|
|
||||||
miscDisguisesForLivingEnabled = enabled;
|
miscDisguisesForLivingEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setModifyBoundingBox(boolean modifyBounding)
|
public static void setModifyBoundingBox(boolean modifyBounding) {
|
||||||
{
|
|
||||||
modifyBoundingBox = modifyBounding;
|
modifyBoundingBox = modifyBounding;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setMonstersIgnoreDisguises(boolean ignore)
|
public static void setMonstersIgnoreDisguises(boolean ignore) {
|
||||||
{
|
|
||||||
targetDisguises = ignore;
|
targetDisguises = ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setMovementPacketsEnabled(boolean enabled)
|
public static void setMovementPacketsEnabled(boolean enabled) {
|
||||||
{
|
if (enabled != isMovementPacketsEnabled()) {
|
||||||
if (enabled != isMovementPacketsEnabled())
|
|
||||||
{
|
|
||||||
movementEnabled = enabled;
|
movementEnabled = enabled;
|
||||||
|
|
||||||
PacketsManager.setupMainPacketsListener();
|
PacketsManager.setupMainPacketsListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setNameAboveHeadAlwaysVisible(boolean alwaysVisible)
|
public static void setNameAboveHeadAlwaysVisible(boolean alwaysVisible) {
|
||||||
{
|
|
||||||
showNameAboveHeadAlwaysVisible = alwaysVisible;
|
showNameAboveHeadAlwaysVisible = alwaysVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setNameOfPlayerShownAboveDisguise(boolean showNames)
|
public static void setNameOfPlayerShownAboveDisguise(boolean showNames) {
|
||||||
{
|
|
||||||
showNameAboveHead = showNames;
|
showNameAboveHead = showNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setSheepDyeable(boolean color)
|
public static void setSheepDyeable(boolean color) {
|
||||||
{
|
|
||||||
colorizeSheep = color;
|
colorizeSheep = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set if the disguises play sounds when hurt
|
* Set if the disguises play sounds when hurt
|
||||||
*/
|
*/
|
||||||
public static void setSoundsEnabled(boolean isSoundsEnabled)
|
public static void setSoundsEnabled(boolean isSoundsEnabled) {
|
||||||
{
|
|
||||||
PacketsManager.setHearDisguisesListener(isSoundsEnabled);
|
PacketsManager.setHearDisguisesListener(isSoundsEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setUndisguiseOnWorldChange(boolean isUndisguise)
|
public static void setUndisguiseOnWorldChange(boolean isUndisguise) {
|
||||||
{
|
|
||||||
undisguiseSwitchWorlds = isUndisguise;
|
undisguiseSwitchWorlds = isUndisguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setUpdateMessage(String newMessage)
|
public static void setUpdateMessage(String newMessage) {
|
||||||
{
|
|
||||||
updateMessage = newMessage;
|
updateMessage = newMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setUpdateNotificationPermission(String newPermission)
|
public static void setUpdateNotificationPermission(String newPermission) {
|
||||||
{
|
|
||||||
updateNotificationPermission = newPermission;
|
updateNotificationPermission = newPermission;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setStopShulkerDisguisesFromMoving(boolean stopShulkerDisguisesFromMoving)
|
public static void setStopShulkerDisguisesFromMoving(boolean stopShulkerDisguisesFromMoving) {
|
||||||
{
|
|
||||||
DisguiseConfig.stopShulkerDisguisesFromMoving = stopShulkerDisguisesFromMoving;
|
DisguiseConfig.stopShulkerDisguisesFromMoving = stopShulkerDisguisesFromMoving;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isStopShulkerDisguisesFromMoving()
|
public static boolean isStopShulkerDisguisesFromMoving() {
|
||||||
{
|
|
||||||
return stopShulkerDisguisesFromMoving;
|
return stopShulkerDisguisesFromMoving;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -500,27 +441,22 @@ public class DisguiseConfig
|
|||||||
*
|
*
|
||||||
* @param sendVelocityPackets
|
* @param sendVelocityPackets
|
||||||
*/
|
*/
|
||||||
public static void setVelocitySent(boolean sendVelocityPackets)
|
public static void setVelocitySent(boolean sendVelocityPackets) {
|
||||||
{
|
|
||||||
sendVelocity = sendVelocityPackets;
|
sendVelocity = sendVelocityPackets;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setViewDisguises(boolean seeOwnDisguise)
|
public static void setViewDisguises(boolean seeOwnDisguise) {
|
||||||
{
|
|
||||||
viewSelfDisguise = seeOwnDisguise;
|
viewSelfDisguise = seeOwnDisguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setWitherSkullPacketsEnabled(boolean enabled)
|
public static void setWitherSkullPacketsEnabled(boolean enabled) {
|
||||||
{
|
|
||||||
witherSkullEnabled = enabled;
|
witherSkullEnabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setWolfDyeable(boolean color)
|
public static void setWolfDyeable(boolean color) {
|
||||||
{
|
|
||||||
colorizeWolf = color;
|
colorizeWolf = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DisguiseConfig()
|
private DisguiseConfig() {
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package me.libraryaddict.disguise;
|
package me.libraryaddict.disguise;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
@ -27,8 +28,13 @@ import org.bukkit.event.vehicle.VehicleExitEvent;
|
|||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.PacketType;
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction;
|
||||||
|
import com.comphenix.protocol.wrappers.PlayerInfoData;
|
||||||
|
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||||
|
|
||||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||||
@ -39,8 +45,7 @@ import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
|||||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||||
import me.libraryaddict.disguise.utilities.UpdateChecker;
|
import me.libraryaddict.disguise.utilities.UpdateChecker;
|
||||||
|
|
||||||
public class DisguiseListener implements Listener
|
public class DisguiseListener implements Listener {
|
||||||
{
|
|
||||||
|
|
||||||
private String currentVersion;
|
private String currentVersion;
|
||||||
private HashMap<String, Boolean[]> disguiseClone = new HashMap<>();
|
private HashMap<String, Boolean[]> disguiseClone = new HashMap<>();
|
||||||
@ -50,42 +55,32 @@ public class DisguiseListener implements Listener
|
|||||||
private LibsDisguises plugin;
|
private LibsDisguises plugin;
|
||||||
private BukkitTask updaterTask;
|
private BukkitTask updaterTask;
|
||||||
|
|
||||||
public DisguiseListener(LibsDisguises libsDisguises)
|
public DisguiseListener(LibsDisguises libsDisguises) {
|
||||||
{
|
|
||||||
plugin = libsDisguises;
|
plugin = libsDisguises;
|
||||||
|
|
||||||
if (plugin.getConfig().getBoolean("NotifyUpdate"))
|
if (plugin.getConfig().getBoolean("NotifyUpdate")) {
|
||||||
{
|
|
||||||
currentVersion = plugin.getDescription().getVersion();
|
currentVersion = plugin.getDescription().getVersion();
|
||||||
|
|
||||||
updaterTask = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, new Runnable()
|
updaterTask = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run() {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
UpdateChecker updateChecker = new UpdateChecker();
|
UpdateChecker updateChecker = new UpdateChecker();
|
||||||
updateChecker.checkUpdate("v" + currentVersion);
|
updateChecker.checkUpdate("v" + currentVersion);
|
||||||
|
|
||||||
latestVersion = updateChecker.getLatestVersion();
|
latestVersion = updateChecker.getLatestVersion();
|
||||||
|
|
||||||
if (latestVersion == null)
|
if (latestVersion == null) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
latestVersion = "v" + latestVersion;
|
latestVersion = "v" + latestVersion;
|
||||||
|
|
||||||
Bukkit.getScheduler().runTask(plugin, new Runnable()
|
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run() {
|
||||||
{
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
for (Player p : Bukkit.getOnlinePlayers())
|
if (!p.hasPermission(DisguiseConfig.getUpdateNotificationPermission())) {
|
||||||
{
|
|
||||||
if (!p.hasPermission(DisguiseConfig.getUpdateNotificationPermission()))
|
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,8 +90,7 @@ public class DisguiseListener implements Listener
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex) {
|
||||||
{
|
|
||||||
System.out.print(String.format("[LibsDisguises] Failed to check for update: %s", ex.getMessage()));
|
System.out.print(String.format("[LibsDisguises] Failed to check for update: %s", ex.getMessage()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -105,15 +99,12 @@ public class DisguiseListener implements Listener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cleanup()
|
public void cleanup() {
|
||||||
{
|
for (BukkitRunnable r : disguiseRunnable.values()) {
|
||||||
for (BukkitRunnable r : disguiseRunnable.values())
|
|
||||||
{
|
|
||||||
r.cancel();
|
r.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Disguise d : disguiseEntity.values())
|
for (Disguise d : disguiseEntity.values()) {
|
||||||
{
|
|
||||||
d.removeDisguise();
|
d.removeDisguise();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,37 +112,28 @@ public class DisguiseListener implements Listener
|
|||||||
updaterTask.cancel();
|
updaterTask.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkPlayerCanBlowDisguise(Player entity)
|
private void checkPlayerCanBlowDisguise(Player entity) {
|
||||||
{
|
|
||||||
Disguise[] disguises = DisguiseAPI.getDisguises(entity);
|
Disguise[] disguises = DisguiseAPI.getDisguises(entity);
|
||||||
|
|
||||||
if (disguises.length > 0)
|
if (disguises.length > 0) {
|
||||||
{
|
|
||||||
DisguiseAPI.undisguiseToAll(entity);
|
DisguiseAPI.undisguiseToAll(entity);
|
||||||
|
|
||||||
if (DisguiseConfig.getDisguiseBlownMessage().length() > 0)
|
if (DisguiseConfig.getDisguiseBlownMessage().length() > 0) {
|
||||||
{
|
|
||||||
entity.sendMessage(DisguiseConfig.getDisguiseBlownMessage());
|
entity.sendMessage(DisguiseConfig.getDisguiseBlownMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void chunkMove(Player player, Location newLoc, Location oldLoc)
|
private void chunkMove(Player player, Location newLoc, Location oldLoc) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
// Resend the bed chunks
|
// Resend the bed chunks
|
||||||
for (PacketContainer packet : DisguiseUtilities.getBedChunkPacket(newLoc, oldLoc))
|
for (PacketContainer packet : DisguiseUtilities.getBedChunkPacket(newLoc, oldLoc)) {
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newLoc != null)
|
if (newLoc != null) {
|
||||||
{
|
for (HashSet<TargetedDisguise> list : DisguiseUtilities.getDisguises().values()) {
|
||||||
for (HashSet<TargetedDisguise> list : DisguiseUtilities.getDisguises().values())
|
for (TargetedDisguise disguise : list) {
|
||||||
{
|
|
||||||
for (TargetedDisguise disguise : list)
|
|
||||||
{
|
|
||||||
if (disguise.getEntity() == null)
|
if (disguise.getEntity() == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -171,87 +153,120 @@ public class DisguiseListener implements Listener
|
|||||||
disguise.getEntity() == player ? newLoc : disguise.getEntity().getLocation(), newLoc,
|
disguise.getEntity() == player ? newLoc : disguise.getEntity().getLocation(), newLoc,
|
||||||
(PlayerDisguise) disguise);
|
(PlayerDisguise) disguise);
|
||||||
|
|
||||||
if (disguise.getEntity() == player)
|
if (disguise.getEntity() == player) {
|
||||||
{
|
for (PacketContainer packet : packets) {
|
||||||
for (PacketContainer packet : packets)
|
|
||||||
{
|
|
||||||
packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
|
packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (PacketContainer packet : packets)
|
for (PacketContainer packet : packets) {
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (InvocationTargetException e)
|
catch (InvocationTargetException e) {
|
||||||
{
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
public void onAttack(EntityDamageByEntityEvent event)
|
public void onAttack(EntityDamageByEntityEvent event) {
|
||||||
{
|
if (DisguiseConfig.isDisguiseBlownOnAttack()) {
|
||||||
if (DisguiseConfig.isDisguiseBlownOnAttack())
|
if (event.getEntity() instanceof Player) {
|
||||||
{
|
|
||||||
if (event.getEntity() instanceof Player)
|
|
||||||
{
|
|
||||||
checkPlayerCanBlowDisguise((Player) event.getEntity());
|
checkPlayerCanBlowDisguise((Player) event.getEntity());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getDamager() instanceof Player)
|
if (event.getDamager() instanceof Player) {
|
||||||
{
|
|
||||||
checkPlayerCanBlowDisguise((Player) event.getDamager());
|
checkPlayerCanBlowDisguise((Player) event.getDamager());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onJoin(PlayerJoinEvent event)
|
public void onJoin(PlayerJoinEvent event) {
|
||||||
{
|
|
||||||
Player p = event.getPlayer();
|
Player p = event.getPlayer();
|
||||||
|
|
||||||
if (latestVersion != null && p.hasPermission(DisguiseConfig.getUpdateNotificationPermission()))
|
if (latestVersion != null && p.hasPermission(DisguiseConfig.getUpdateNotificationPermission())) {
|
||||||
{
|
|
||||||
p.sendMessage(String.format(DisguiseConfig.getUpdateMessage(), currentVersion, latestVersion));
|
p.sendMessage(String.format(DisguiseConfig.getUpdateMessage(), currentVersion, latestVersion));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseConfig.isBedPacketsEnabled())
|
if (DisguiseConfig.isBedPacketsEnabled()) {
|
||||||
{
|
|
||||||
chunkMove(p, p.getLocation(), null);
|
chunkMove(p, p.getLocation(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (HashSet<TargetedDisguise> disguiseList : DisguiseUtilities.getDisguises().values()) {
|
||||||
|
for (TargetedDisguise targetedDisguise : disguiseList) {
|
||||||
|
if (targetedDisguise.getEntity() == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!targetedDisguise.canSee(p))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Don't need this as we have a packet listener doing that for us
|
||||||
|
/*if (targetedDisguise.isPlayerHiddenInTab() && targetedDisguise.getEntity() instanceof Player) {
|
||||||
|
try {
|
||||||
|
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
Player player = (Player) targetedDisguise.getEntity();
|
||||||
|
|
||||||
|
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.REMOVE_PLAYER);
|
||||||
|
addTab.getPlayerInfoDataLists()
|
||||||
|
.write(0,
|
||||||
|
Arrays.asList(new PlayerInfoData(ReflectionManager.getGameProfile(player), 0,
|
||||||
|
NativeGameMode.SURVIVAL,
|
||||||
|
WrappedChatComponent.fromText(player.getDisplayName()))));
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(p, addTab);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
if (!(targetedDisguise instanceof PlayerDisguise))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
PlayerDisguise disguise = (PlayerDisguise) targetedDisguise;
|
||||||
|
|
||||||
|
if (disguise.isDisplayedInTab()) {
|
||||||
|
try {
|
||||||
|
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
|
||||||
|
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.ADD_PLAYER);
|
||||||
|
addTab.getPlayerInfoDataLists().write(0, Arrays.asList(new PlayerInfoData(disguise.getGameProfile(), 0,
|
||||||
|
NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(disguise.getGameProfile().getName()))));
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(p, addTab);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Most likely faster if we don't bother doing checks if he sees a player disguise
|
* Most likely faster if we don't bother doing checks if he sees a player disguise
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onMove(PlayerMoveEvent event)
|
public void onMove(PlayerMoveEvent event) {
|
||||||
{
|
if (DisguiseConfig.isBedPacketsEnabled()) {
|
||||||
if (DisguiseConfig.isBedPacketsEnabled())
|
|
||||||
{
|
|
||||||
Location to = event.getTo();
|
Location to = event.getTo();
|
||||||
Location from = event.getFrom();
|
Location from = event.getFrom();
|
||||||
|
|
||||||
if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities.getChunkCord(from.getBlockX())
|
if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities.getChunkCord(from.getBlockX())
|
||||||
|| DisguiseUtilities.getChunkCord(to.getBlockZ()) != DisguiseUtilities.getChunkCord(from.getBlockZ()))
|
|| DisguiseUtilities.getChunkCord(to.getBlockZ()) != DisguiseUtilities.getChunkCord(from.getBlockZ())) {
|
||||||
{
|
|
||||||
chunkMove(event.getPlayer(), to, from);
|
chunkMove(event.getPlayer(), to, from);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseConfig.isStopShulkerDisguisesFromMoving())
|
if (DisguiseConfig.isStopShulkerDisguisesFromMoving()) {
|
||||||
{
|
|
||||||
Disguise disguise;
|
Disguise disguise;
|
||||||
|
|
||||||
if ((disguise = DisguiseAPI.getDisguise(event.getPlayer())) != null)
|
if ((disguise = DisguiseAPI.getDisguise(event.getPlayer())) != null) {
|
||||||
{
|
if (disguise.getType() == DisguiseType.SHULKER) { // Stop Shulker disguises from moving their coordinates
|
||||||
if (disguise.getType() == DisguiseType.SHULKER)
|
|
||||||
{ // Stop Shulker disguises from moving their coordinates
|
|
||||||
Location from = event.getFrom();
|
Location from = event.getFrom();
|
||||||
Location to = event.getTo();
|
Location to = event.getTo();
|
||||||
|
|
||||||
@ -265,35 +280,28 @@ public class DisguiseListener implements Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onQuit(PlayerQuitEvent event)
|
public void onQuit(PlayerQuitEvent event) {
|
||||||
{
|
|
||||||
ReflectionManager.removePlayer(event.getPlayer());
|
ReflectionManager.removePlayer(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onRespawn(PlayerRespawnEvent event)
|
public void onRespawn(PlayerRespawnEvent event) {
|
||||||
{
|
|
||||||
Disguise[] disguises = DisguiseAPI.getDisguises(event.getPlayer());
|
Disguise[] disguises = DisguiseAPI.getDisguises(event.getPlayer());
|
||||||
|
|
||||||
for (Disguise disguise : disguises)
|
for (Disguise disguise : disguises) {
|
||||||
{
|
if (disguise.isRemoveDisguiseOnDeath()) {
|
||||||
if (disguise.isRemoveDisguiseOnDeath())
|
|
||||||
{
|
|
||||||
disguise.removeDisguise();
|
disguise.removeDisguise();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseConfig.isBedPacketsEnabled())
|
if (DisguiseConfig.isBedPacketsEnabled()) {
|
||||||
{
|
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
|
|
||||||
chunkMove(event.getPlayer(), null, player.getLocation());
|
chunkMove(event.getPlayer(), null, player.getLocation());
|
||||||
|
|
||||||
Bukkit.getScheduler().runTask(plugin, new Runnable()
|
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run() {
|
||||||
{
|
|
||||||
chunkMove(player, player.getLocation(), null);
|
chunkMove(player, player.getLocation(), null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -301,10 +309,8 @@ public class DisguiseListener implements Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onRightClick(PlayerInteractEntityEvent event)
|
public void onRightClick(PlayerInteractEntityEvent event) {
|
||||||
{
|
if (disguiseEntity.containsKey(event.getPlayer().getName()) || disguiseClone.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);
|
||||||
@ -313,27 +319,22 @@ public class DisguiseListener implements Listener
|
|||||||
Entity entity = event.getRightClicked();
|
Entity entity = event.getRightClicked();
|
||||||
String entityName;
|
String entityName;
|
||||||
|
|
||||||
if (entity instanceof Player && !disguiseClone.containsKey(p.getName()))
|
if (entity instanceof Player && !disguiseClone.containsKey(p.getName())) {
|
||||||
{
|
|
||||||
entityName = entity.getName();
|
entityName = entity.getName();
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
entityName = DisguiseType.getType(entity).toReadable();
|
entityName = DisguiseType.getType(entity).toReadable();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disguiseClone.containsKey(p.getName()))
|
if (disguiseClone.containsKey(p.getName())) {
|
||||||
{
|
|
||||||
Boolean[] options = disguiseClone.remove(p.getName());
|
Boolean[] options = disguiseClone.remove(p.getName());
|
||||||
|
|
||||||
Disguise disguise = DisguiseAPI.getDisguise(p, entity);
|
Disguise disguise = DisguiseAPI.getDisguise(p, entity);
|
||||||
|
|
||||||
if (disguise == null)
|
if (disguise == null) {
|
||||||
{
|
|
||||||
disguise = DisguiseAPI.constructDisguise(entity, options[0], options[1], options[2]);
|
disguise = DisguiseAPI.constructDisguise(entity, options[0], options[1], options[2]);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
disguise = disguise.clone();
|
disguise = disguise.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -343,54 +344,42 @@ public class DisguiseListener implements Listener
|
|||||||
int referenceLength = Math.max(2, (int) Math.ceil((0.1D + DisguiseConfig.getMaxClonedDisguises()) / 26D));
|
int referenceLength = Math.max(2, (int) Math.ceil((0.1D + DisguiseConfig.getMaxClonedDisguises()) / 26D));
|
||||||
int attempts = 0;
|
int attempts = 0;
|
||||||
|
|
||||||
while (reference == null && attempts++ < 1000)
|
while (reference == null && attempts++ < 1000) {
|
||||||
{
|
|
||||||
reference = "@";
|
reference = "@";
|
||||||
|
|
||||||
for (int i = 0; i < referenceLength; i++)
|
for (int i = 0; i < referenceLength; i++) {
|
||||||
{
|
|
||||||
reference += alphabet[DisguiseUtilities.random.nextInt(alphabet.length)];
|
reference += alphabet[DisguiseUtilities.random.nextInt(alphabet.length)];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseUtilities.getClonedDisguise(reference) != null)
|
if (DisguiseUtilities.getClonedDisguise(reference) != null) {
|
||||||
{
|
|
||||||
reference = null;
|
reference = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reference != null && DisguiseUtilities.addClonedDisguise(reference, disguise))
|
if (reference != null && DisguiseUtilities.addClonedDisguise(reference, disguise)) {
|
||||||
{
|
|
||||||
p.sendMessage(ChatColor.RED + "Constructed a " + entityName + " disguise! Your reference is " + reference);
|
p.sendMessage(ChatColor.RED + "Constructed a " + entityName + " disguise! Your reference is " + reference);
|
||||||
p.sendMessage(ChatColor.RED + "Example usage: /disguise " + reference);
|
p.sendMessage(ChatColor.RED + "Example usage: /disguise " + reference);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
p.sendMessage(
|
p.sendMessage(
|
||||||
ChatColor.RED + "Failed to store the reference due to lack of size. Please set this in the config");
|
ChatColor.RED + "Failed to store the reference due to lack of size. Please set this in the config");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (disguiseEntity.containsKey(p.getName()))
|
else if (disguiseEntity.containsKey(p.getName())) {
|
||||||
{
|
|
||||||
Disguise disguise = disguiseEntity.remove(p.getName());
|
Disguise disguise = disguiseEntity.remove(p.getName());
|
||||||
|
|
||||||
if (disguise != null)
|
if (disguise != null) {
|
||||||
{
|
|
||||||
if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled()
|
if (disguise.isMiscDisguise() && !DisguiseConfig.isMiscDisguisesForLivingEnabled()
|
||||||
&& entity instanceof LivingEntity)
|
&& entity 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 (entity instanceof Player && DisguiseConfig.isNameOfPlayerShownAboveDisguise())
|
if (disguise.getWatcher() instanceof LivingWatcher) {
|
||||||
{
|
|
||||||
if (disguise.getWatcher() instanceof LivingWatcher)
|
|
||||||
{
|
|
||||||
disguise.getWatcher().setCustomName(((Player) entity).getDisplayName());
|
disguise.getWatcher().setCustomName(((Player) entity).getDisplayName());
|
||||||
|
|
||||||
if (DisguiseConfig.isNameAboveHeadAlwaysVisible())
|
if (DisguiseConfig.isNameAboveHeadAlwaysVisible()) {
|
||||||
{
|
|
||||||
disguise.getWatcher().setCustomNameVisible(true);
|
disguise.getWatcher().setCustomNameVisible(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -400,37 +389,30 @@ public class DisguiseListener implements Listener
|
|||||||
|
|
||||||
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();
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
disguiseName += disguise.getType().toReadable();
|
disguiseName += disguise.getType().toReadable();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disguise.isDisguiseInUse())
|
if (disguise.isDisguiseInUse()) {
|
||||||
{
|
|
||||||
p.sendMessage(ChatColor.RED + "Disguised " + (entity instanceof Player ? "" : "the ") + entityName
|
p.sendMessage(ChatColor.RED + "Disguised " + (entity instanceof Player ? "" : "the ") + entityName
|
||||||
+ " as " + disguiseName + "!");
|
+ " as " + disguiseName + "!");
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
p.sendMessage(ChatColor.RED + "Failed to disguise " + (entity instanceof Player ? "" : "the ")
|
p.sendMessage(ChatColor.RED + "Failed to disguise " + (entity instanceof Player ? "" : "the ")
|
||||||
+ entityName + " as " + disguiseName + "!");
|
+ entityName + " as " + disguiseName + "!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
if (DisguiseAPI.isDisguised(entity)) {
|
||||||
if (DisguiseAPI.isDisguised(entity))
|
|
||||||
{
|
|
||||||
DisguiseAPI.undisguiseToAll(entity);
|
DisguiseAPI.undisguiseToAll(entity);
|
||||||
|
|
||||||
p.sendMessage(ChatColor.RED + "Undisguised " + (entity instanceof Player ? "" : "the ") + entityName);
|
p.sendMessage(ChatColor.RED + "Undisguised " + (entity instanceof Player ? "" : "the ") + entityName);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
p.sendMessage(ChatColor.RED + (entity instanceof Player ? "" : "the") + entityName + " isn't disguised!");
|
p.sendMessage(ChatColor.RED + (entity instanceof Player ? "" : "the") + entityName + " isn't disguised!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -439,13 +421,10 @@ public class DisguiseListener implements Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onTarget(EntityTargetEvent event)
|
public void onTarget(EntityTargetEvent event) {
|
||||||
{
|
|
||||||
if (DisguiseConfig.isMonstersIgnoreDisguises() && event.getTarget() != null && event.getTarget() instanceof Player
|
if (DisguiseConfig.isMonstersIgnoreDisguises() && event.getTarget() != null && event.getTarget() instanceof Player
|
||||||
&& DisguiseAPI.isDisguised(event.getTarget()))
|
&& DisguiseAPI.isDisguised(event.getTarget())) {
|
||||||
{
|
switch (event.getReason()) {
|
||||||
switch (event.getReason())
|
|
||||||
{
|
|
||||||
case TARGET_ATTACKED_ENTITY:
|
case TARGET_ATTACKED_ENTITY:
|
||||||
case TARGET_ATTACKED_OWNER:
|
case TARGET_ATTACKED_OWNER:
|
||||||
case OWNER_ATTACKED_TARGET:
|
case OWNER_ATTACKED_TARGET:
|
||||||
@ -459,50 +438,40 @@ public class DisguiseListener implements Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onTeleport(PlayerTeleportEvent event)
|
public void onTeleport(PlayerTeleportEvent event) {
|
||||||
{
|
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
Location to = event.getTo();
|
Location to = event.getTo();
|
||||||
Location from = event.getFrom();
|
Location from = event.getFrom();
|
||||||
|
|
||||||
if (DisguiseConfig.isBedPacketsEnabled())
|
if (DisguiseConfig.isBedPacketsEnabled()) {
|
||||||
{
|
|
||||||
if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities.getChunkCord(from.getBlockX())
|
if (DisguiseUtilities.getChunkCord(to.getBlockX()) != DisguiseUtilities.getChunkCord(from.getBlockX())
|
||||||
|| DisguiseUtilities.getChunkCord(to.getBlockZ()) != DisguiseUtilities.getChunkCord(from.getBlockZ()))
|
|| DisguiseUtilities.getChunkCord(to.getBlockZ()) != DisguiseUtilities.getChunkCord(from.getBlockZ())) {
|
||||||
{
|
|
||||||
chunkMove(player, null, from);
|
chunkMove(player, null, from);
|
||||||
|
|
||||||
Bukkit.getScheduler().runTask(plugin, new Runnable()
|
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run() {
|
||||||
{
|
|
||||||
chunkMove(player, player.getLocation(), null);
|
chunkMove(player, player.getLocation(), null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DisguiseAPI.isDisguised(player))
|
if (!DisguiseAPI.isDisguised(player)) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseConfig.isUndisguiseOnWorldChange() && to.getWorld() != null && from.getWorld() != null
|
if (DisguiseConfig.isUndisguiseOnWorldChange() && to.getWorld() != null && from.getWorld() != null
|
||||||
&& to.getWorld() != from.getWorld())
|
&& to.getWorld() != from.getWorld()) {
|
||||||
{
|
for (Disguise disguise : DisguiseAPI.getDisguises(event.getPlayer())) {
|
||||||
for (Disguise disguise : DisguiseAPI.getDisguises(event.getPlayer()))
|
|
||||||
{
|
|
||||||
disguise.removeDisguise();
|
disguise.removeDisguise();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onVehicleEnter(VehicleEnterEvent event)
|
public void onVehicleEnter(VehicleEnterEvent event) {
|
||||||
{
|
if (event.getEntered() instanceof Player && DisguiseAPI.isDisguised((Player) event.getEntered(), event.getEntered())) {
|
||||||
if (event.getEntered() instanceof Player && DisguiseAPI.isDisguised((Player) event.getEntered(), event.getEntered()))
|
|
||||||
{
|
|
||||||
DisguiseUtilities.removeSelfDisguise((Player) event.getEntered());
|
DisguiseUtilities.removeSelfDisguise((Player) event.getEntered());
|
||||||
|
|
||||||
((Player) event.getEntered()).updateInventory();
|
((Player) event.getEntered()).updateInventory();
|
||||||
@ -510,19 +479,14 @@ public class DisguiseListener implements Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onVehicleLeave(VehicleExitEvent event)
|
public void onVehicleLeave(VehicleExitEvent event) {
|
||||||
{
|
if (event.getExited() instanceof Player) {
|
||||||
if (event.getExited() instanceof Player)
|
|
||||||
{
|
|
||||||
final Disguise disguise = DisguiseAPI.getDisguise((Player) event.getExited(), event.getExited());
|
final Disguise disguise = DisguiseAPI.getDisguise((Player) event.getExited(), event.getExited());
|
||||||
|
|
||||||
if (disguise != null)
|
if (disguise != null) {
|
||||||
{
|
Bukkit.getScheduler().runTask(plugin, new Runnable() {
|
||||||
Bukkit.getScheduler().runTask(plugin, new Runnable()
|
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run() {
|
||||||
{
|
|
||||||
DisguiseUtilities.setupFakeDisguise(disguise);
|
DisguiseUtilities.setupFakeDisguise(disguise);
|
||||||
|
|
||||||
((Player) disguise.getEntity()).updateInventory();
|
((Player) disguise.getEntity()).updateInventory();
|
||||||
@ -533,41 +497,32 @@ public class DisguiseListener implements Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onWorldSwitch(final PlayerChangedWorldEvent event)
|
public void onWorldSwitch(final PlayerChangedWorldEvent event) {
|
||||||
{
|
if (DisguiseConfig.isBedPacketsEnabled()) {
|
||||||
if (DisguiseConfig.isBedPacketsEnabled())
|
|
||||||
{
|
|
||||||
chunkMove(event.getPlayer(), event.getPlayer().getLocation(), null);
|
chunkMove(event.getPlayer(), event.getPlayer().getLocation(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DisguiseAPI.isDisguised(event.getPlayer()))
|
if (!DisguiseAPI.isDisguised(event.getPlayer())) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisguiseConfig.isUndisguiseOnWorldChange())
|
if (DisguiseConfig.isUndisguiseOnWorldChange()) {
|
||||||
{
|
for (Disguise disguise : DisguiseAPI.getDisguises(event.getPlayer())) {
|
||||||
for (Disguise disguise : DisguiseAPI.getDisguises(event.getPlayer()))
|
|
||||||
{
|
|
||||||
disguise.removeDisguise();
|
disguise.removeDisguise();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
// Stupid hack to fix worldswitch invisibility bug
|
// Stupid hack to fix worldswitch invisibility bug
|
||||||
final boolean viewSelfToggled = DisguiseAPI.isViewSelfToggled(event.getPlayer());
|
final boolean viewSelfToggled = DisguiseAPI.isViewSelfToggled(event.getPlayer());
|
||||||
|
|
||||||
if (viewSelfToggled)
|
if (viewSelfToggled) {
|
||||||
{
|
|
||||||
final Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer());
|
final Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer());
|
||||||
|
|
||||||
disguise.setViewSelfDisguise(false);
|
disguise.setViewSelfDisguise(false);
|
||||||
|
|
||||||
Bukkit.getScheduler().runTaskLater(plugin, new Runnable()
|
Bukkit.getScheduler().runTaskLater(plugin, new Runnable() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run() {
|
||||||
{
|
|
||||||
disguise.setViewSelfDisguise(true);
|
disguise.setViewSelfDisguise(true);
|
||||||
}
|
}
|
||||||
}, 20L); // I wish I could use lambdas here, so badly
|
}, 20L); // I wish I could use lambdas here, so badly
|
||||||
@ -575,20 +530,16 @@ public class DisguiseListener implements Listener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDisguiseClone(final String player, Boolean[] options)
|
public void setDisguiseClone(final String player, Boolean[] options) {
|
||||||
{
|
if (disguiseRunnable.containsKey(player)) {
|
||||||
if (disguiseRunnable.containsKey(player))
|
|
||||||
{
|
|
||||||
BukkitRunnable run = disguiseRunnable.remove(player);
|
BukkitRunnable run = disguiseRunnable.remove(player);
|
||||||
run.cancel();
|
run.cancel();
|
||||||
run.run();
|
run.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
BukkitRunnable runnable = new BukkitRunnable()
|
BukkitRunnable runnable = new BukkitRunnable() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run() {
|
||||||
{
|
|
||||||
disguiseClone.remove(player);
|
disguiseClone.remove(player);
|
||||||
disguiseRunnable.remove(player);
|
disguiseRunnable.remove(player);
|
||||||
}
|
}
|
||||||
@ -600,20 +551,16 @@ public class DisguiseListener implements Listener
|
|||||||
disguiseClone.put(player, options);
|
disguiseClone.put(player, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDisguiseEntity(final String player, Disguise disguise)
|
public void setDisguiseEntity(final String player, Disguise disguise) {
|
||||||
{
|
if (disguiseRunnable.containsKey(player)) {
|
||||||
if (disguiseRunnable.containsKey(player))
|
|
||||||
{
|
|
||||||
BukkitRunnable run = disguiseRunnable.remove(player);
|
BukkitRunnable run = disguiseRunnable.remove(player);
|
||||||
run.cancel();
|
run.cancel();
|
||||||
run.run();
|
run.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
BukkitRunnable runnable = new BukkitRunnable()
|
BukkitRunnable runnable = new BukkitRunnable() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run() {
|
||||||
{
|
|
||||||
disguiseEntity.remove(player);
|
disguiseEntity.remove(player);
|
||||||
disguiseRunnable.remove(player);
|
disguiseRunnable.remove(player);
|
||||||
}
|
}
|
||||||
|
@ -23,12 +23,12 @@ import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
|||||||
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseCloneCommand;
|
import me.libraryaddict.disguise.commands.DisguiseCloneCommand;
|
||||||
import me.libraryaddict.disguise.commands.DisguiseCommand;
|
import me.libraryaddict.disguise.commands.DisguiseCommand;
|
||||||
import me.libraryaddict.disguise.commands.DisguiseHelpCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseViewSelfCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseEntityCommand;
|
import me.libraryaddict.disguise.commands.DisguiseEntityCommand;
|
||||||
import me.libraryaddict.disguise.commands.LibsDisguisesCommand;
|
import me.libraryaddict.disguise.commands.DisguiseHelpCommand;
|
||||||
import me.libraryaddict.disguise.commands.DisguisePlayerCommand;
|
import me.libraryaddict.disguise.commands.DisguisePlayerCommand;
|
||||||
import me.libraryaddict.disguise.commands.DisguiseRadiusCommand;
|
import me.libraryaddict.disguise.commands.DisguiseRadiusCommand;
|
||||||
|
import me.libraryaddict.disguise.commands.DisguiseViewSelfCommand;
|
||||||
|
import me.libraryaddict.disguise.commands.LibsDisguisesCommand;
|
||||||
import me.libraryaddict.disguise.commands.UndisguiseCommand;
|
import me.libraryaddict.disguise.commands.UndisguiseCommand;
|
||||||
import me.libraryaddict.disguise.commands.UndisguiseEntityCommand;
|
import me.libraryaddict.disguise.commands.UndisguiseEntityCommand;
|
||||||
import me.libraryaddict.disguise.commands.UndisguisePlayerCommand;
|
import me.libraryaddict.disguise.commands.UndisguisePlayerCommand;
|
||||||
@ -73,7 +73,7 @@ public class LibsDisguises extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ReflectionManager.getNmsClass("EntityShulker").getName();
|
ReflectionManager.getNmsClass("EntityEvoker").getName();
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
System.err.println("[LibsDisguises] Lib's Disguises failed to startup, outdated server!");
|
System.err.println("[LibsDisguises] Lib's Disguises failed to startup, outdated server!");
|
||||||
|
@ -2,6 +2,7 @@ package me.libraryaddict.disguise.disguisetypes;
|
|||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -16,10 +17,15 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.PacketType;
|
||||||
import com.comphenix.protocol.PacketType.Play.Server;
|
import com.comphenix.protocol.PacketType.Play.Server;
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
import com.comphenix.protocol.reflect.StructureModifier;
|
import com.comphenix.protocol.reflect.StructureModifier;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction;
|
||||||
|
import com.comphenix.protocol.wrappers.PlayerInfoData;
|
||||||
|
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||||
|
|
||||||
import me.libraryaddict.disguise.DisguiseAPI;
|
import me.libraryaddict.disguise.DisguiseAPI;
|
||||||
import me.libraryaddict.disguise.DisguiseConfig;
|
import me.libraryaddict.disguise.DisguiseConfig;
|
||||||
@ -35,6 +41,17 @@ import me.libraryaddict.disguise.utilities.PacketsManager;
|
|||||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||||
|
|
||||||
public abstract class Disguise {
|
public abstract class Disguise {
|
||||||
|
private static List<UUID> viewSelf = new ArrayList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of people who have /disguiseViewSelf toggled on
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static List<UUID> getViewSelf() {
|
||||||
|
return viewSelf;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean disguiseInUse;
|
private boolean disguiseInUse;
|
||||||
private DisguiseType disguiseType;
|
private DisguiseType disguiseType;
|
||||||
private Entity entity;
|
private Entity entity;
|
||||||
@ -45,15 +62,14 @@ public abstract class Disguise {
|
|||||||
private boolean keepDisguisePlayerDeath = DisguiseConfig.isKeepDisguiseOnPlayerDeath();
|
private boolean keepDisguisePlayerDeath = DisguiseConfig.isKeepDisguiseOnPlayerDeath();
|
||||||
private boolean keepDisguisePlayerLogout = DisguiseConfig.isKeepDisguiseOnPlayerLogout();
|
private boolean keepDisguisePlayerLogout = DisguiseConfig.isKeepDisguiseOnPlayerLogout();
|
||||||
private boolean modifyBoundingBox = DisguiseConfig.isModifyBoundingBox();
|
private boolean modifyBoundingBox = DisguiseConfig.isModifyBoundingBox();
|
||||||
|
private boolean playerHiddenFromTab = DisguiseConfig.isHideDisguisedPlayers();
|
||||||
private boolean replaceSounds = DisguiseConfig.isSoundEnabled();
|
private boolean replaceSounds = DisguiseConfig.isSoundEnabled();
|
||||||
|
private boolean showName;
|
||||||
private BukkitTask task;
|
private BukkitTask task;
|
||||||
private Runnable velocityRunnable;
|
private Runnable velocityRunnable;
|
||||||
private boolean velocitySent = DisguiseConfig.isVelocitySent();
|
private boolean velocitySent = DisguiseConfig.isVelocitySent();
|
||||||
private boolean viewSelfDisguise = DisguiseConfig.isViewDisguises();
|
private boolean viewSelfDisguise = DisguiseConfig.isViewDisguises();
|
||||||
private FlagWatcher watcher;
|
private FlagWatcher watcher;
|
||||||
private boolean showName = false;
|
|
||||||
|
|
||||||
private static List<UUID> viewSelf = new ArrayList<>();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract Disguise clone();
|
public abstract Disguise clone();
|
||||||
@ -398,6 +414,13 @@ public abstract class Disguise {
|
|||||||
return disguiseInUse;
|
return disguiseInUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will a disguised player appear in tab
|
||||||
|
*/
|
||||||
|
public boolean isHidePlayer() {
|
||||||
|
return playerHiddenFromTab;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isHidingArmorFromSelf() {
|
public boolean isHidingArmorFromSelf() {
|
||||||
return hideArmorFromSelf;
|
return hideArmorFromSelf;
|
||||||
}
|
}
|
||||||
@ -456,14 +479,6 @@ public abstract class Disguise {
|
|||||||
return viewSelfDisguise;
|
return viewSelfDisguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSoundsReplaced() {
|
|
||||||
return replaceSounds;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isVelocitySent() {
|
|
||||||
return velocitySent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the entity's name is showing through the disguise
|
* Returns true if the entity's name is showing through the disguise
|
||||||
*
|
*
|
||||||
@ -473,6 +488,14 @@ public abstract class Disguise {
|
|||||||
return showName;
|
return showName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSoundsReplaced() {
|
||||||
|
return replaceSounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isVelocitySent() {
|
||||||
|
return velocitySent;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the disguise and undisguises the entity if its using this disguise.
|
* Removes the disguise and undisguises the entity if its using this disguise.
|
||||||
*
|
*
|
||||||
@ -496,6 +519,51 @@ public abstract class Disguise {
|
|||||||
|
|
||||||
// If this disguise has a entity set
|
// If this disguise has a entity set
|
||||||
if (getEntity() != null) {
|
if (getEntity() != null) {
|
||||||
|
if (this instanceof PlayerDisguise) {
|
||||||
|
PlayerDisguise disguise = (PlayerDisguise) this;
|
||||||
|
|
||||||
|
if (disguise.isDisplayedInTab()) {
|
||||||
|
PacketContainer deleteTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
deleteTab.getPlayerInfoAction().write(0, PlayerInfoAction.REMOVE_PLAYER);
|
||||||
|
deleteTab.getPlayerInfoDataLists().write(0,
|
||||||
|
Arrays.asList(new PlayerInfoData(disguise.getGameProfile(), 0, NativeGameMode.SURVIVAL,
|
||||||
|
WrappedChatComponent.fromText(disguise.getName()))));
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (!((TargetedDisguise) this).canSee(player))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, deleteTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isHidePlayer() && getEntity() instanceof Player) {
|
||||||
|
PacketContainer deleteTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
deleteTab.getPlayerInfoAction().write(0, PlayerInfoAction.ADD_PLAYER);
|
||||||
|
deleteTab.getPlayerInfoDataLists().write(0,
|
||||||
|
Arrays.asList(new PlayerInfoData(ReflectionManager.getGameProfile((Player) getEntity()), 0,
|
||||||
|
NativeGameMode.SURVIVAL,
|
||||||
|
WrappedChatComponent.fromText(((Player) getEntity()).getDisplayName()))));
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (!((TargetedDisguise) this).canSee(player))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, deleteTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If this disguise is active
|
// If this disguise is active
|
||||||
// Remove the disguise from the current disguises.
|
// Remove the disguise from the current disguises.
|
||||||
if (DisguiseUtilities.removeDisguise((TargetedDisguise) this)) {
|
if (DisguiseUtilities.removeDisguise((TargetedDisguise) this)) {
|
||||||
@ -546,6 +614,7 @@ public abstract class Disguise {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -556,7 +625,7 @@ public abstract class Disguise {
|
|||||||
* @return disguise
|
* @return disguise
|
||||||
*/
|
*/
|
||||||
public Disguise setEntity(Entity entity) {
|
public Disguise setEntity(Entity entity) {
|
||||||
if (this.getEntity() != null) {
|
if (getEntity() != null) {
|
||||||
if (getEntity() == entity) {
|
if (getEntity() == entity) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -576,12 +645,6 @@ public abstract class Disguise {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Disguise setShowName(boolean showName) {
|
|
||||||
this.showName = showName;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Disguise setHearSelfDisguise(boolean hearSelfDisguise) {
|
public Disguise setHearSelfDisguise(boolean hearSelfDisguise) {
|
||||||
this.hearSelfDisguise = hearSelfDisguise;
|
this.hearSelfDisguise = hearSelfDisguise;
|
||||||
|
|
||||||
@ -608,6 +671,13 @@ public abstract class Disguise {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setHidePlayer(boolean hidePlayerInTab) {
|
||||||
|
if (isDisguiseInUse())
|
||||||
|
throw new IllegalStateException("Cannot set this while disguise is in use!"); // Cos I'm lazy
|
||||||
|
|
||||||
|
playerHiddenFromTab = hidePlayerInTab;
|
||||||
|
}
|
||||||
|
|
||||||
public Disguise setKeepDisguiseOnEntityDespawn(boolean keepDisguise) {
|
public Disguise setKeepDisguiseOnEntityDespawn(boolean keepDisguise) {
|
||||||
this.keepDisguiseEntityDespawn = keepDisguise;
|
this.keepDisguiseEntityDespawn = keepDisguise;
|
||||||
|
|
||||||
@ -649,6 +719,12 @@ public abstract class Disguise {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Disguise setShowName(boolean showName) {
|
||||||
|
this.showName = showName;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up the FlagWatcher with the entityclass, it creates all the data it needs to prevent conflicts when sending the
|
* Sets up the FlagWatcher with the entityclass, it creates all the data it needs to prevent conflicts when sending the
|
||||||
* datawatcher.
|
* datawatcher.
|
||||||
@ -733,44 +809,82 @@ public abstract class Disguise {
|
|||||||
|
|
||||||
// If they cancelled this disguise event. No idea why.
|
// If they cancelled this disguise event. No idea why.
|
||||||
// Just return.
|
// Just return.
|
||||||
if (!event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
disguiseInUse = true;
|
return false;
|
||||||
|
|
||||||
task = Bukkit.getScheduler().runTaskTimer(LibsDisguises.getInstance(), velocityRunnable, 1, 1);
|
|
||||||
|
|
||||||
// Stick the disguise in the disguises bin
|
|
||||||
DisguiseUtilities.addDisguise(entity.getUniqueId(), (TargetedDisguise) this);
|
|
||||||
|
|
||||||
if (isSelfDisguiseVisible() && getEntity() instanceof Player) {
|
|
||||||
DisguiseUtilities.removeSelfDisguise((Player) getEntity());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resend the disguised entity's packet
|
|
||||||
DisguiseUtilities.refreshTrackers((TargetedDisguise) this);
|
|
||||||
|
|
||||||
// If he is a player, then self disguise himself
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
DisguiseUtilities.setupFakeDisguise(Disguise.this);
|
|
||||||
}
|
|
||||||
}, 2);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disguiseInUse = true;
|
||||||
|
|
||||||
|
task = Bukkit.getScheduler().runTaskTimer(LibsDisguises.getInstance(), velocityRunnable, 1, 1);
|
||||||
|
|
||||||
|
if (this instanceof PlayerDisguise) {
|
||||||
|
PlayerDisguise disguise = (PlayerDisguise) this;
|
||||||
|
|
||||||
|
if (disguise.isDisplayedInTab()) {
|
||||||
|
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.ADD_PLAYER);
|
||||||
|
addTab.getPlayerInfoDataLists().write(0, Arrays.asList(new PlayerInfoData(disguise.getGameProfile(), 0,
|
||||||
|
NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(disguise.getName()))));
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (!((TargetedDisguise) this).canSee(player))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, addTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stick the disguise in the disguises bin
|
||||||
|
DisguiseUtilities.addDisguise(entity.getUniqueId(), (TargetedDisguise) this);
|
||||||
|
|
||||||
|
if (isSelfDisguiseVisible() && getEntity() instanceof Player) {
|
||||||
|
DisguiseUtilities.removeSelfDisguise((Player) getEntity());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resend the disguised entity's packet
|
||||||
|
DisguiseUtilities.refreshTrackers((TargetedDisguise) this);
|
||||||
|
|
||||||
|
// If he is a player, then self disguise himself
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
DisguiseUtilities.setupFakeDisguise(Disguise.this);
|
||||||
|
}
|
||||||
|
}, 2);
|
||||||
|
|
||||||
|
if (isHidePlayer() && getEntity() instanceof Player) {
|
||||||
|
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.REMOVE_PLAYER);
|
||||||
|
addTab.getPlayerInfoDataLists().write(0,
|
||||||
|
Arrays.asList(new PlayerInfoData(ReflectionManager.getGameProfile((Player) getEntity()), 0,
|
||||||
|
NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(""))));
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (!((TargetedDisguise) this).canSee(player))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, addTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean stopDisguise() {
|
public boolean stopDisguise() {
|
||||||
return removeDisguise();
|
return removeDisguise();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the list of people who have /disguiseViewSelf toggled on
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static List<UUID> getViewSelf() {
|
|
||||||
return viewSelf;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,21 @@
|
|||||||
package me.libraryaddict.disguise.disguisetypes;
|
package me.libraryaddict.disguise.disguisetypes;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.PacketType;
|
||||||
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction;
|
||||||
|
import com.comphenix.protocol.wrappers.PlayerInfoData;
|
||||||
|
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||||
|
|
||||||
import me.libraryaddict.disguise.LibsDisguises;
|
import me.libraryaddict.disguise.LibsDisguises;
|
||||||
@ -12,58 +24,51 @@ import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
|||||||
import me.libraryaddict.disguise.utilities.LibsProfileLookup;
|
import me.libraryaddict.disguise.utilities.LibsProfileLookup;
|
||||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||||
|
|
||||||
public class PlayerDisguise extends TargetedDisguise
|
public class PlayerDisguise extends TargetedDisguise {
|
||||||
{
|
|
||||||
private LibsProfileLookup currentLookup;
|
private LibsProfileLookup currentLookup;
|
||||||
private WrappedGameProfile gameProfile;
|
private WrappedGameProfile gameProfile;
|
||||||
private String playerName;
|
private String playerName;
|
||||||
private String skinToUse;
|
private String skinToUse;
|
||||||
|
private UUID uuid = UUID.randomUUID();
|
||||||
|
|
||||||
private PlayerDisguise()
|
private PlayerDisguise() {
|
||||||
{
|
|
||||||
// Internal usage only
|
// Internal usage only
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerDisguise(Player player)
|
public PlayerDisguise(Player player) {
|
||||||
{
|
|
||||||
this(ReflectionManager.getGameProfile(player));
|
this(ReflectionManager.getGameProfile(player));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerDisguise(Player player, Player skinToUse)
|
public PlayerDisguise(Player player, Player skinToUse) {
|
||||||
{
|
|
||||||
this(ReflectionManager.getGameProfile(player), ReflectionManager.getGameProfile(skinToUse));
|
this(ReflectionManager.getGameProfile(player), ReflectionManager.getGameProfile(skinToUse));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerDisguise(String name)
|
public PlayerDisguise(String name) {
|
||||||
{
|
|
||||||
setName(name);
|
setName(name);
|
||||||
setSkin(name);
|
setSkin(name);
|
||||||
|
|
||||||
createDisguise(DisguiseType.PLAYER);
|
createDisguise(DisguiseType.PLAYER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerDisguise(String name, String skinToUse)
|
public PlayerDisguise(String name, String skinToUse) {
|
||||||
{
|
|
||||||
setName(name);
|
setName(name);
|
||||||
setSkin(skinToUse);
|
setSkin(skinToUse);
|
||||||
|
|
||||||
createDisguise(DisguiseType.PLAYER);
|
createDisguise(DisguiseType.PLAYER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerDisguise(WrappedGameProfile gameProfile)
|
public PlayerDisguise(WrappedGameProfile gameProfile) {
|
||||||
{
|
|
||||||
setName(gameProfile.getName());
|
setName(gameProfile.getName());
|
||||||
|
|
||||||
this.gameProfile = gameProfile;
|
this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, gameProfile.getName(), gameProfile);
|
||||||
|
|
||||||
createDisguise(DisguiseType.PLAYER);
|
createDisguise(DisguiseType.PLAYER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerDisguise(WrappedGameProfile gameProfile, WrappedGameProfile skinToUse)
|
public PlayerDisguise(WrappedGameProfile gameProfile, WrappedGameProfile skinToUse) {
|
||||||
{
|
|
||||||
setName(gameProfile.getName());
|
setName(gameProfile.getName());
|
||||||
|
|
||||||
this.gameProfile = gameProfile;
|
this.gameProfile = ReflectionManager.getGameProfile(uuid, gameProfile.getName());
|
||||||
|
|
||||||
setSkin(skinToUse);
|
setSkin(skinToUse);
|
||||||
|
|
||||||
@ -71,31 +76,27 @@ public class PlayerDisguise extends TargetedDisguise
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise addPlayer(Player player)
|
public PlayerDisguise addPlayer(Player player) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.addPlayer(player);
|
return (PlayerDisguise) super.addPlayer(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise addPlayer(String playername)
|
public PlayerDisguise addPlayer(String playername) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.addPlayer(playername);
|
return (PlayerDisguise) super.addPlayer(playername);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise clone()
|
public PlayerDisguise clone() {
|
||||||
{
|
|
||||||
PlayerDisguise disguise = new PlayerDisguise();
|
PlayerDisguise disguise = new PlayerDisguise();
|
||||||
|
|
||||||
disguise.playerName = getName();
|
disguise.playerName = getName();
|
||||||
|
|
||||||
if (disguise.currentLookup == null && disguise.gameProfile != null)
|
if (disguise.currentLookup == null && disguise.gameProfile != null) {
|
||||||
{
|
|
||||||
disguise.skinToUse = getSkin();
|
disguise.skinToUse = getSkin();
|
||||||
disguise.gameProfile = ReflectionManager.getClonedProfile(getGameProfile());
|
disguise.gameProfile = ReflectionManager.getGameProfileWithThisSkin(disguise.uuid, getGameProfile().getName(),
|
||||||
|
getGameProfile());
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
disguise.setSkin(getSkin());
|
disguise.setSkin(getSkin());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,8 +108,7 @@ public class PlayerDisguise extends TargetedDisguise
|
|||||||
disguise.setVelocitySent(isVelocitySent());
|
disguise.setVelocitySent(isVelocitySent());
|
||||||
disguise.setModifyBoundingBox(isModifyBoundingBox());
|
disguise.setModifyBoundingBox(isModifyBoundingBox());
|
||||||
|
|
||||||
if (getWatcher() != null)
|
if (getWatcher() != null) {
|
||||||
{
|
|
||||||
disguise.setWatcher(getWatcher().clone(disguise));
|
disguise.setWatcher(getWatcher().clone(disguise));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,17 +117,13 @@ public class PlayerDisguise extends TargetedDisguise
|
|||||||
return disguise;
|
return disguise;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WrappedGameProfile getGameProfile()
|
public WrappedGameProfile getGameProfile() {
|
||||||
{
|
if (gameProfile == null) {
|
||||||
if (gameProfile == null)
|
if (getSkin() != null) {
|
||||||
{
|
gameProfile = ReflectionManager.getGameProfile(uuid, getName());
|
||||||
if (getSkin() != null)
|
|
||||||
{
|
|
||||||
gameProfile = ReflectionManager.getGameProfile(null, getName());
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getName(),
|
||||||
gameProfile = ReflectionManager.getGameProfileWithThisSkin(null, getName(),
|
|
||||||
DisguiseUtilities.getProfileFromMojang(this));
|
DisguiseUtilities.getProfileFromMojang(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -135,103 +131,93 @@ public class PlayerDisguise extends TargetedDisguise
|
|||||||
return gameProfile;
|
return gameProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName()
|
public String getName() {
|
||||||
{
|
|
||||||
return playerName;
|
return playerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSkin()
|
public String getSkin() {
|
||||||
{
|
|
||||||
return skinToUse;
|
return skinToUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerWatcher getWatcher()
|
public PlayerWatcher getWatcher() {
|
||||||
{
|
|
||||||
return (PlayerWatcher) super.getWatcher();
|
return (PlayerWatcher) super.getWatcher();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDisplayedInTab() {
|
||||||
|
return getWatcher().isDisplayedInTab();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isPlayerDisguise()
|
public boolean isPlayerDisguise() {
|
||||||
{
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise removePlayer(Player player)
|
public PlayerDisguise removePlayer(Player player) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.removePlayer(player);
|
return (PlayerDisguise) super.removePlayer(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise removePlayer(String playername)
|
public PlayerDisguise removePlayer(String playername) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.removePlayer(playername);
|
return (PlayerDisguise) super.removePlayer(playername);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setDisguiseTarget(TargetType newTargetType)
|
public PlayerDisguise setDisguiseTarget(TargetType newTargetType) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setDisguiseTarget(newTargetType);
|
return (PlayerDisguise) super.setDisguiseTarget(newTargetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDisplayedInTab(boolean showPlayerInTab) {
|
||||||
|
getWatcher().setDisplayedInTab(showPlayerInTab);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setEntity(Entity entity)
|
public PlayerDisguise setEntity(Entity entity) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setEntity(entity);
|
return (PlayerDisguise) super.setEntity(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGameProfile(WrappedGameProfile gameProfile)
|
public void setGameProfile(WrappedGameProfile gameProfile) {
|
||||||
{
|
this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, gameProfile.getName(), gameProfile);
|
||||||
this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(null, gameProfile.getName(), gameProfile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setHearSelfDisguise(boolean hearSelfDisguise)
|
public PlayerDisguise setHearSelfDisguise(boolean hearSelfDisguise) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setHearSelfDisguise(hearSelfDisguise);
|
return (PlayerDisguise) super.setHearSelfDisguise(hearSelfDisguise);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setHideArmorFromSelf(boolean hideArmor)
|
public PlayerDisguise setHideArmorFromSelf(boolean hideArmor) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setHideArmorFromSelf(hideArmor);
|
return (PlayerDisguise) super.setHideArmorFromSelf(hideArmor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setHideHeldItemFromSelf(boolean hideHeldItem)
|
public PlayerDisguise setHideHeldItemFromSelf(boolean hideHeldItem) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setHideHeldItemFromSelf(hideHeldItem);
|
return (PlayerDisguise) super.setHideHeldItemFromSelf(hideHeldItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setKeepDisguiseOnEntityDespawn(boolean keepDisguise)
|
public PlayerDisguise setKeepDisguiseOnEntityDespawn(boolean keepDisguise) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setKeepDisguiseOnEntityDespawn(keepDisguise);
|
return (PlayerDisguise) super.setKeepDisguiseOnEntityDespawn(keepDisguise);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setKeepDisguiseOnPlayerDeath(boolean keepDisguise)
|
public PlayerDisguise setKeepDisguiseOnPlayerDeath(boolean keepDisguise) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setKeepDisguiseOnPlayerDeath(keepDisguise);
|
return (PlayerDisguise) super.setKeepDisguiseOnPlayerDeath(keepDisguise);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setKeepDisguiseOnPlayerLogout(boolean keepDisguise)
|
public PlayerDisguise setKeepDisguiseOnPlayerLogout(boolean keepDisguise) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setKeepDisguiseOnPlayerLogout(keepDisguise);
|
return (PlayerDisguise) super.setKeepDisguiseOnPlayerLogout(keepDisguise);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setModifyBoundingBox(boolean modifyBox)
|
public PlayerDisguise setModifyBoundingBox(boolean modifyBox) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setModifyBoundingBox(modifyBox);
|
return (PlayerDisguise) super.setModifyBoundingBox(modifyBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setName(String name)
|
private void setName(String name) {
|
||||||
{
|
if (name.length() > 16) {
|
||||||
if (name.length() > 16)
|
|
||||||
{
|
|
||||||
name = name.substring(0, 16);
|
name = name.substring(0, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -239,32 +225,25 @@ public class PlayerDisguise extends TargetedDisguise
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setReplaceSounds(boolean areSoundsReplaced)
|
public PlayerDisguise setReplaceSounds(boolean areSoundsReplaced) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setReplaceSounds(areSoundsReplaced);
|
return (PlayerDisguise) super.setReplaceSounds(areSoundsReplaced);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerDisguise setSkin(String newSkin)
|
public PlayerDisguise setSkin(String newSkin) {
|
||||||
{
|
|
||||||
skinToUse = newSkin;
|
skinToUse = newSkin;
|
||||||
|
|
||||||
if (newSkin == null)
|
if (newSkin == null) {
|
||||||
{
|
|
||||||
currentLookup = null;
|
currentLookup = null;
|
||||||
gameProfile = null;
|
gameProfile = null;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
if (newSkin.length() > 16) {
|
||||||
if (newSkin.length() > 16)
|
|
||||||
{
|
|
||||||
skinToUse = newSkin.substring(0, 16);
|
skinToUse = newSkin.substring(0, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
currentLookup = new LibsProfileLookup()
|
currentLookup = new LibsProfileLookup() {
|
||||||
{
|
|
||||||
@Override
|
@Override
|
||||||
public void onLookup(WrappedGameProfile gameProfile)
|
public void onLookup(WrappedGameProfile gameProfile) {
|
||||||
{
|
|
||||||
if (currentLookup != this || gameProfile == null)
|
if (currentLookup != this || gameProfile == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -277,8 +256,7 @@ public class PlayerDisguise extends TargetedDisguise
|
|||||||
WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup,
|
WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup,
|
||||||
LibsDisguises.getInstance().getConfig().getBoolean("ContactMojangServers", true));
|
LibsDisguises.getInstance().getConfig().getBoolean("ContactMojangServers", true));
|
||||||
|
|
||||||
if (gameProfile != null)
|
if (gameProfile != null) {
|
||||||
{
|
|
||||||
setSkin(gameProfile);
|
setSkin(gameProfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -293,10 +271,8 @@ public class PlayerDisguise extends TargetedDisguise
|
|||||||
* GameProfile
|
* GameProfile
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public PlayerDisguise setSkin(WrappedGameProfile gameProfile)
|
public PlayerDisguise setSkin(WrappedGameProfile gameProfile) {
|
||||||
{
|
if (gameProfile == null) {
|
||||||
if (gameProfile == null)
|
|
||||||
{
|
|
||||||
this.gameProfile = null;
|
this.gameProfile = null;
|
||||||
this.skinToUse = null;
|
this.skinToUse = null;
|
||||||
return this;
|
return this;
|
||||||
@ -307,10 +283,32 @@ public class PlayerDisguise extends TargetedDisguise
|
|||||||
currentLookup = null;
|
currentLookup = null;
|
||||||
|
|
||||||
this.skinToUse = gameProfile.getName();
|
this.skinToUse = gameProfile.getName();
|
||||||
this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(null, getName(), gameProfile);
|
this.gameProfile = ReflectionManager.getGameProfileWithThisSkin(uuid, getName(), gameProfile);
|
||||||
|
|
||||||
|
if (DisguiseUtilities.isDisguiseInUse(this)) {
|
||||||
|
if (isDisplayedInTab()) {
|
||||||
|
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.ADD_PLAYER);
|
||||||
|
addTab.getPlayerInfoDataLists().write(0, Arrays.asList(new PlayerInfoData(getGameProfile(), 0,
|
||||||
|
NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(getName()))));
|
||||||
|
|
||||||
|
PacketContainer deleteTab = addTab.shallowClone();
|
||||||
|
deleteTab.getPlayerInfoAction().write(0, PlayerInfoAction.REMOVE_PLAYER);
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (!((TargetedDisguise) this).canSee(player))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, deleteTab);
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, addTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (DisguiseUtilities.isDisguiseInUse(this))
|
|
||||||
{
|
|
||||||
DisguiseUtilities.refreshTrackers(this);
|
DisguiseUtilities.refreshTrackers(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -318,32 +316,27 @@ public class PlayerDisguise extends TargetedDisguise
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setVelocitySent(boolean sendVelocity)
|
public PlayerDisguise setVelocitySent(boolean sendVelocity) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setVelocitySent(sendVelocity);
|
return (PlayerDisguise) super.setVelocitySent(sendVelocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setViewSelfDisguise(boolean viewSelfDisguise)
|
public PlayerDisguise setViewSelfDisguise(boolean viewSelfDisguise) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setViewSelfDisguise(viewSelfDisguise);
|
return (PlayerDisguise) super.setViewSelfDisguise(viewSelfDisguise);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise setWatcher(FlagWatcher newWatcher)
|
public PlayerDisguise setWatcher(FlagWatcher newWatcher) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.setWatcher(newWatcher);
|
return (PlayerDisguise) super.setWatcher(newWatcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise silentlyAddPlayer(String playername)
|
public PlayerDisguise silentlyAddPlayer(String playername) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.silentlyAddPlayer(playername);
|
return (PlayerDisguise) super.silentlyAddPlayer(playername);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerDisguise silentlyRemovePlayer(String playername)
|
public PlayerDisguise silentlyRemovePlayer(String playername) {
|
||||||
{
|
|
||||||
return (PlayerDisguise) super.silentlyRemovePlayer(playername);
|
return (PlayerDisguise) super.silentlyRemovePlayer(playername);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,102 +1,141 @@
|
|||||||
package me.libraryaddict.disguise.disguisetypes;
|
package me.libraryaddict.disguise.disguisetypes;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.PacketType;
|
||||||
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction;
|
||||||
|
import com.comphenix.protocol.wrappers.PlayerInfoData;
|
||||||
|
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||||
|
|
||||||
import me.libraryaddict.disguise.DisguiseAPI;
|
import me.libraryaddict.disguise.DisguiseAPI;
|
||||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||||
|
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||||
|
|
||||||
public abstract class TargetedDisguise extends Disguise
|
public abstract class TargetedDisguise extends Disguise {
|
||||||
{
|
|
||||||
|
|
||||||
public enum TargetType
|
public enum TargetType {
|
||||||
{
|
|
||||||
HIDE_DISGUISE_TO_EVERYONE_BUT_THESE_PLAYERS, SHOW_TO_EVERYONE_BUT_THESE_PLAYERS
|
HIDE_DISGUISE_TO_EVERYONE_BUT_THESE_PLAYERS, SHOW_TO_EVERYONE_BUT_THESE_PLAYERS
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> disguiseViewers = new ArrayList<>();
|
private List<String> disguiseViewers = new ArrayList<>();
|
||||||
private TargetType targetType = TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS;
|
private TargetType targetType = TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS;
|
||||||
|
|
||||||
public TargetedDisguise addPlayer(Player player)
|
public TargetedDisguise addPlayer(Player player) {
|
||||||
{
|
|
||||||
addPlayer(player.getName());
|
addPlayer(player.getName());
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetedDisguise addPlayer(String playername)
|
public TargetedDisguise addPlayer(String playername) {
|
||||||
{
|
if (!disguiseViewers.contains(playername)) {
|
||||||
if (!disguiseViewers.contains(playername))
|
|
||||||
{
|
|
||||||
disguiseViewers.add(playername);
|
disguiseViewers.add(playername);
|
||||||
|
|
||||||
if (DisguiseAPI.isDisguiseInUse(this))
|
if (DisguiseAPI.isDisguiseInUse(this)) {
|
||||||
{
|
|
||||||
DisguiseUtilities.checkConflicts(this, playername);
|
DisguiseUtilities.checkConflicts(this, playername);
|
||||||
DisguiseUtilities.refreshTracker(this, playername);
|
DisguiseUtilities.refreshTracker(this, playername);
|
||||||
|
|
||||||
|
if (isHidePlayer() && getEntity() instanceof Player) {
|
||||||
|
try {
|
||||||
|
Player player = Bukkit.getPlayerExact(playername);
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
PacketContainer deleteTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
|
||||||
|
deleteTab.getPlayerInfoAction().write(0,
|
||||||
|
canSee(player) ? PlayerInfoAction.REMOVE_PLAYER : PlayerInfoAction.ADD_PLAYER);
|
||||||
|
deleteTab.getPlayerInfoDataLists().write(0,
|
||||||
|
Arrays.asList(new PlayerInfoData(ReflectionManager.getGameProfile((Player) getEntity()), 0,
|
||||||
|
NativeGameMode.SURVIVAL,
|
||||||
|
WrappedChatComponent.fromText(((Player) getEntity()).getDisplayName()))));
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, deleteTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canSee(Player player)
|
public boolean canSee(Player player) {
|
||||||
{
|
|
||||||
return canSee(player.getName());
|
return canSee(player.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canSee(String playername)
|
public boolean canSee(String playername) {
|
||||||
{
|
|
||||||
boolean hasPlayer = disguiseViewers.contains(playername);
|
boolean hasPlayer = disguiseViewers.contains(playername);
|
||||||
|
|
||||||
if (targetType == TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS)
|
if (targetType == TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS) {
|
||||||
{
|
|
||||||
return !hasPlayer;
|
return !hasPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
return hasPlayer;
|
return hasPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetType getDisguiseTarget()
|
public TargetType getDisguiseTarget() {
|
||||||
{
|
|
||||||
return targetType;
|
return targetType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getObservers()
|
public List<String> getObservers() {
|
||||||
{
|
|
||||||
return Collections.unmodifiableList(disguiseViewers);
|
return Collections.unmodifiableList(disguiseViewers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetedDisguise removePlayer(Player player)
|
public TargetedDisguise removePlayer(Player player) {
|
||||||
{
|
|
||||||
removePlayer(player.getName());
|
removePlayer(player.getName());
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetedDisguise removePlayer(String playername)
|
public TargetedDisguise removePlayer(String playername) {
|
||||||
{
|
if (disguiseViewers.contains(playername)) {
|
||||||
if (disguiseViewers.contains(playername))
|
|
||||||
{
|
|
||||||
disguiseViewers.remove(playername);
|
disguiseViewers.remove(playername);
|
||||||
|
|
||||||
if (DisguiseAPI.isDisguiseInUse(this))
|
if (DisguiseAPI.isDisguiseInUse(this)) {
|
||||||
{
|
|
||||||
DisguiseUtilities.checkConflicts(this, playername);
|
DisguiseUtilities.checkConflicts(this, playername);
|
||||||
DisguiseUtilities.refreshTracker(this, playername);
|
DisguiseUtilities.refreshTracker(this, playername);
|
||||||
|
|
||||||
|
if (isHidePlayer() && getEntity() instanceof Player) {
|
||||||
|
try {
|
||||||
|
Player player = Bukkit.getPlayerExact(playername);
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
PacketContainer deleteTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
|
||||||
|
deleteTab.getPlayerInfoAction().write(0,
|
||||||
|
canSee(player) ? PlayerInfoAction.ADD_PLAYER : PlayerInfoAction.REMOVE_PLAYER);
|
||||||
|
deleteTab.getPlayerInfoDataLists().write(0,
|
||||||
|
Arrays.asList(new PlayerInfoData(ReflectionManager.getGameProfile((Player) getEntity()), 0,
|
||||||
|
NativeGameMode.SURVIVAL,
|
||||||
|
WrappedChatComponent.fromText(((Player) getEntity()).getDisplayName()))));
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, deleteTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetedDisguise setDisguiseTarget(TargetType newTargetType)
|
public TargetedDisguise setDisguiseTarget(TargetType newTargetType) {
|
||||||
{
|
if (DisguiseUtilities.isDisguiseInUse(this)) {
|
||||||
if (DisguiseUtilities.isDisguiseInUse(this))
|
|
||||||
{
|
|
||||||
throw new RuntimeException("Cannot set the disguise target after the entity has been disguised");
|
throw new RuntimeException("Cannot set the disguise target after the entity has been disguised");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,20 +144,16 @@ public abstract class TargetedDisguise extends Disguise
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetedDisguise silentlyAddPlayer(String playername)
|
public TargetedDisguise silentlyAddPlayer(String playername) {
|
||||||
{
|
if (!disguiseViewers.contains(playername)) {
|
||||||
if (!disguiseViewers.contains(playername))
|
|
||||||
{
|
|
||||||
disguiseViewers.add(playername);
|
disguiseViewers.add(playername);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TargetedDisguise silentlyRemovePlayer(String playername)
|
public TargetedDisguise silentlyRemovePlayer(String playername) {
|
||||||
{
|
if (disguiseViewers.contains(playername)) {
|
||||||
if (disguiseViewers.contains(playername))
|
|
||||||
{
|
|
||||||
disguiseViewers.remove(playername);
|
disguiseViewers.remove(playername);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,48 +17,53 @@ import me.libraryaddict.disguise.disguisetypes.FlagType;
|
|||||||
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
|
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
|
||||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||||
|
|
||||||
public class PlayerWatcher extends LivingWatcher
|
public class PlayerWatcher extends LivingWatcher {
|
||||||
{
|
|
||||||
private boolean isInBed;
|
private boolean isInBed;
|
||||||
private BlockFace sleepingDirection;
|
private BlockFace sleepingDirection;
|
||||||
|
private boolean alwaysShowInTab = DisguiseConfig.isShowDisguisedPlayersInTab();
|
||||||
|
|
||||||
public PlayerWatcher(Disguise disguise)
|
public PlayerWatcher(Disguise disguise) {
|
||||||
{
|
|
||||||
super(disguise);
|
super(disguise);
|
||||||
|
|
||||||
setData(FlagType.PLAYER_SKIN, FlagType.PLAYER_SKIN.getDefault());
|
setData(FlagType.PLAYER_SKIN, FlagType.PLAYER_SKIN.getDefault());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDisplayedInTab() {
|
||||||
|
return alwaysShowInTab;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDisplayedInTab(boolean showPlayerInTab) {
|
||||||
|
if (getDisguise().isDisguiseInUse())
|
||||||
|
throw new IllegalStateException("Cannot set this while disguise is in use!");
|
||||||
|
|
||||||
|
alwaysShowInTab = showPlayerInTab;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PlayerWatcher clone(Disguise disguise)
|
public PlayerWatcher clone(Disguise disguise) {
|
||||||
{
|
|
||||||
PlayerWatcher watcher = (PlayerWatcher) super.clone(disguise);
|
PlayerWatcher watcher = (PlayerWatcher) super.clone(disguise);
|
||||||
watcher.isInBed = isInBed;
|
watcher.isInBed = isInBed;
|
||||||
|
watcher.sleepingDirection = sleepingDirection;
|
||||||
|
watcher.alwaysShowInTab = alwaysShowInTab;
|
||||||
return watcher;
|
return watcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMainHand(MainHand mainHand)
|
public void setMainHand(MainHand mainHand) {
|
||||||
{
|
|
||||||
setData(FlagType.PLAYER_HAND, (byte) mainHand.ordinal());
|
setData(FlagType.PLAYER_HAND, (byte) mainHand.ordinal());
|
||||||
sendData(FlagType.PLAYER_HAND);
|
sendData(FlagType.PLAYER_HAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MainHand getMainHand()
|
public MainHand getMainHand() {
|
||||||
{
|
|
||||||
return MainHand.values()[getData(FlagType.PLAYER_HAND)];
|
return MainHand.values()[getData(FlagType.PLAYER_HAND)];
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockFace getSleepingDirection()
|
public BlockFace getSleepingDirection() {
|
||||||
{
|
if (sleepingDirection == null) {
|
||||||
if (sleepingDirection == null)
|
if (this.getDisguise().getEntity() != null && isSleeping()) {
|
||||||
{
|
|
||||||
if (this.getDisguise().getEntity() != null && isSleeping())
|
|
||||||
{
|
|
||||||
this.sleepingDirection = BlockFace
|
this.sleepingDirection = BlockFace
|
||||||
.values()[Math.round(this.getDisguise().getEntity().getLocation().getYaw() / 90F) & 0x3];
|
.values()[Math.round(this.getDisguise().getEntity().getLocation().getYaw() / 90F) & 0x3];
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
return BlockFace.EAST;
|
return BlockFace.EAST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,117 +78,97 @@ public class PlayerWatcher extends LivingWatcher
|
|||||||
// Bit 5 (0x20): Right Pants Leg enabled
|
// Bit 5 (0x20): Right Pants Leg enabled
|
||||||
// Bit 6 (0x40): Hat enabled
|
// Bit 6 (0x40): Hat enabled
|
||||||
|
|
||||||
private boolean isSkinFlag(int i)
|
private boolean isSkinFlag(int i) {
|
||||||
{
|
|
||||||
return ((byte) getData(FlagType.PLAYER_SKIN) & 1 << i) != 0;
|
return ((byte) getData(FlagType.PLAYER_SKIN) & 1 << i) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isCapeEnabled()
|
public boolean isCapeEnabled() {
|
||||||
{
|
|
||||||
return isSkinFlag(1);
|
return isSkinFlag(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isJackedEnabled()
|
public boolean isJackedEnabled() {
|
||||||
{
|
|
||||||
return isSkinFlag(2);
|
return isSkinFlag(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLeftSleeveEnabled()
|
public boolean isLeftSleeveEnabled() {
|
||||||
{
|
|
||||||
return isSkinFlag(3);
|
return isSkinFlag(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isRightSleeveEnabled()
|
public boolean isRightSleeveEnabled() {
|
||||||
{
|
|
||||||
return isSkinFlag(4);
|
return isSkinFlag(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLeftPantsEnabled()
|
public boolean isLeftPantsEnabled() {
|
||||||
{
|
|
||||||
return isSkinFlag(5);
|
return isSkinFlag(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isRightPantsEnabled()
|
public boolean isRightPantsEnabled() {
|
||||||
{
|
|
||||||
return isSkinFlag(6);
|
return isSkinFlag(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHatEnabled()
|
public boolean isHatEnabled() {
|
||||||
{
|
|
||||||
return isSkinFlag(7);
|
return isSkinFlag(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCapeEnabled(boolean enabled)
|
public void setCapeEnabled(boolean enabled) {
|
||||||
{
|
|
||||||
setSkinFlags(1, enabled);
|
setSkinFlags(1, enabled);
|
||||||
|
|
||||||
sendData(FlagType.PLAYER_SKIN);
|
sendData(FlagType.PLAYER_SKIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setJackedEnabled(boolean enabled)
|
public void setJacketEnabled(boolean enabled) {
|
||||||
{
|
|
||||||
setSkinFlags(2, enabled);
|
setSkinFlags(2, enabled);
|
||||||
|
|
||||||
sendData(FlagType.PLAYER_SKIN);
|
sendData(FlagType.PLAYER_SKIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLeftSleeveEnabled(boolean enabled)
|
public void setLeftSleeveEnabled(boolean enabled) {
|
||||||
{
|
|
||||||
setSkinFlags(3, enabled);
|
setSkinFlags(3, enabled);
|
||||||
|
|
||||||
sendData(FlagType.PLAYER_SKIN);
|
sendData(FlagType.PLAYER_SKIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRightSleeveEnabled(boolean enabled)
|
public void setRightSleeveEnabled(boolean enabled) {
|
||||||
{
|
|
||||||
setSkinFlags(4, enabled);
|
setSkinFlags(4, enabled);
|
||||||
|
|
||||||
sendData(FlagType.PLAYER_SKIN);
|
sendData(FlagType.PLAYER_SKIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLeftPantsEnabled(boolean enabled)
|
public void setLeftPantsEnabled(boolean enabled) {
|
||||||
{
|
|
||||||
setSkinFlags(5, enabled);
|
setSkinFlags(5, enabled);
|
||||||
|
|
||||||
sendData(FlagType.PLAYER_SKIN);
|
sendData(FlagType.PLAYER_SKIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRightPantsEnabled(boolean enabled)
|
public void setRightPantsEnabled(boolean enabled) {
|
||||||
{
|
|
||||||
setSkinFlags(6, enabled);
|
setSkinFlags(6, enabled);
|
||||||
|
|
||||||
sendData(FlagType.PLAYER_SKIN);
|
sendData(FlagType.PLAYER_SKIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHatEnabled(boolean enabled)
|
public void setHatEnabled(boolean enabled) {
|
||||||
{
|
|
||||||
setSkinFlags(7, enabled);
|
setSkinFlags(7, enabled);
|
||||||
|
|
||||||
sendData(FlagType.PLAYER_SKIN);
|
sendData(FlagType.PLAYER_SKIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSleeping()
|
public boolean isSleeping() {
|
||||||
{
|
|
||||||
return isInBed;
|
return isInBed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSkin(String playerName)
|
public void setSkin(String playerName) {
|
||||||
{
|
|
||||||
((PlayerDisguise) getDisguise()).setSkin(playerName);
|
((PlayerDisguise) getDisguise()).setSkin(playerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSkin(WrappedGameProfile profile)
|
public void setSkin(WrappedGameProfile profile) {
|
||||||
{
|
|
||||||
((PlayerDisguise) getDisguise()).setSkin(profile);
|
((PlayerDisguise) getDisguise()).setSkin(profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSleeping(BlockFace sleepingDirection)
|
public void setSleeping(BlockFace sleepingDirection) {
|
||||||
{
|
|
||||||
setSleeping(true, sleepingDirection);
|
setSleeping(true, sleepingDirection);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSleeping(boolean sleep)
|
public void setSleeping(boolean sleep) {
|
||||||
{
|
|
||||||
setSleeping(sleep, null);
|
setSleeping(sleep, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,30 +178,22 @@ public class PlayerWatcher extends LivingWatcher
|
|||||||
* @param sleeping
|
* @param sleeping
|
||||||
* @param sleepingDirection
|
* @param sleepingDirection
|
||||||
*/
|
*/
|
||||||
public void setSleeping(boolean sleeping, BlockFace sleepingDirection)
|
public void setSleeping(boolean sleeping, BlockFace sleepingDirection) {
|
||||||
{
|
if (sleepingDirection != null) {
|
||||||
if (sleepingDirection != null)
|
|
||||||
{
|
|
||||||
this.sleepingDirection = BlockFace.values()[sleepingDirection.ordinal() % 4];
|
this.sleepingDirection = BlockFace.values()[sleepingDirection.ordinal() % 4];
|
||||||
}
|
}
|
||||||
|
|
||||||
isInBed = sleeping;
|
isInBed = sleeping;
|
||||||
|
|
||||||
if (DisguiseConfig.isBedPacketsEnabled() && DisguiseUtilities.isDisguiseInUse(getDisguise()))
|
if (DisguiseConfig.isBedPacketsEnabled() && DisguiseUtilities.isDisguiseInUse(getDisguise())) {
|
||||||
{
|
try {
|
||||||
try
|
if (isSleeping()) {
|
||||||
{
|
for (Player player : DisguiseUtilities.getPerverts(getDisguise())) {
|
||||||
if (isSleeping())
|
|
||||||
{
|
|
||||||
for (Player player : DisguiseUtilities.getPerverts(getDisguise()))
|
|
||||||
{
|
|
||||||
PacketContainer[] packets = DisguiseUtilities.getBedPackets(getDisguise().getEntity().getLocation(),
|
PacketContainer[] packets = DisguiseUtilities.getBedPackets(getDisguise().getEntity().getLocation(),
|
||||||
player.getLocation(), (PlayerDisguise) getDisguise());
|
player.getLocation(), (PlayerDisguise) getDisguise());
|
||||||
|
|
||||||
if (getDisguise().getEntity() == player)
|
if (getDisguise().getEntity() == player) {
|
||||||
{
|
for (PacketContainer packet : packets) {
|
||||||
for (PacketContainer packet : packets)
|
|
||||||
{
|
|
||||||
packet = packet.shallowClone();
|
packet = packet.shallowClone();
|
||||||
|
|
||||||
packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
|
packet.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
|
||||||
@ -224,17 +201,14 @@ public class PlayerWatcher extends LivingWatcher
|
|||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
for (PacketContainer packet : packets) {
|
||||||
for (PacketContainer packet : packets)
|
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
PacketContainer packet = new PacketContainer(Server.ANIMATION);
|
PacketContainer packet = new PacketContainer(Server.ANIMATION);
|
||||||
|
|
||||||
StructureModifier<Integer> mods = packet.getIntegers();
|
StructureModifier<Integer> mods = packet.getIntegers();
|
||||||
@ -242,29 +216,24 @@ public class PlayerWatcher extends LivingWatcher
|
|||||||
mods.write(0, getDisguise().getEntity().getEntityId());
|
mods.write(0, getDisguise().getEntity().getEntityId());
|
||||||
mods.write(1, 3);
|
mods.write(1, 3);
|
||||||
|
|
||||||
for (Player player : DisguiseUtilities.getPerverts(getDisguise()))
|
for (Player player : DisguiseUtilities.getPerverts(getDisguise())) {
|
||||||
{
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex) {
|
||||||
{
|
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSkinFlags(int i, boolean flag)
|
private void setSkinFlags(int i, boolean flag) {
|
||||||
{
|
|
||||||
byte b0 = (byte) getData(FlagType.PLAYER_SKIN);
|
byte b0 = (byte) getData(FlagType.PLAYER_SKIN);
|
||||||
|
|
||||||
if (flag)
|
if (flag) {
|
||||||
{
|
|
||||||
setData(FlagType.PLAYER_SKIN, (byte) (b0 | 1 << i));
|
setData(FlagType.PLAYER_SKIN, (byte) (b0 | 1 << i));
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
setData(FlagType.PLAYER_SKIN, (byte) (b0 & (~1 << i)));
|
setData(FlagType.PLAYER_SKIN, (byte) (b0 & (~1 << i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -278,8 +278,6 @@ public class DisguiseUtilities {
|
|||||||
// But the rest of the time.. Its going to conflict.
|
// But the rest of the time.. Its going to conflict.
|
||||||
// The below is debug output. Most people wouldn't care for it.
|
// The below is debug output. Most people wouldn't care for it.
|
||||||
|
|
||||||
// System.out.print("Cannot set more than one " + TargetType.SHOW_TO_EVERYONE_BUT_THESE_PLAYERS
|
|
||||||
// + " on a entity. Removed the old disguise.");
|
|
||||||
disguiseItel.remove();
|
disguiseItel.remove();
|
||||||
d.removeDisguise();
|
d.removeDisguise();
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,7 @@ import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerClientI
|
|||||||
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerInventory;
|
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerInventory;
|
||||||
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerMain;
|
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerMain;
|
||||||
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerSounds;
|
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerSounds;
|
||||||
|
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerTabList;
|
||||||
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerViewDisguises;
|
import me.libraryaddict.disguise.utilities.packetlisteners.PacketListenerViewDisguises;
|
||||||
|
|
||||||
public class PacketsManager {
|
public class PacketsManager {
|
||||||
@ -139,6 +140,7 @@ public class PacketsManager {
|
|||||||
private static PacketListener soundsListener;
|
private static PacketListener soundsListener;
|
||||||
private static boolean soundsListenerEnabled;
|
private static boolean soundsListenerEnabled;
|
||||||
private static PacketListener viewDisguisesListener;
|
private static PacketListener viewDisguisesListener;
|
||||||
|
private static PacketListener tabListListener;
|
||||||
private static boolean viewDisguisesListenerEnabled;
|
private static boolean viewDisguisesListenerEnabled;
|
||||||
private static HashMap<Disguise, ArrayList<UUID>> _cancelMeta = new HashMap<Disguise, ArrayList<UUID>>();
|
private static HashMap<Disguise, ArrayList<UUID>> _cancelMeta = new HashMap<Disguise, ArrayList<UUID>>();
|
||||||
|
|
||||||
@ -148,8 +150,10 @@ public class PacketsManager {
|
|||||||
// Because it kicks you for hacking.
|
// Because it kicks you for hacking.
|
||||||
|
|
||||||
clientInteractEntityListener = new PacketListenerClientInteract(libsDisguises);
|
clientInteractEntityListener = new PacketListenerClientInteract(libsDisguises);
|
||||||
|
tabListListener = new PacketListenerTabList(libsDisguises);
|
||||||
|
|
||||||
ProtocolLibrary.getProtocolManager().addPacketListener(clientInteractEntityListener);
|
ProtocolLibrary.getProtocolManager().addPacketListener(clientInteractEntityListener);
|
||||||
|
ProtocolLibrary.getProtocolManager().addPacketListener(tabListListener);
|
||||||
|
|
||||||
// Now I call this and the main listener is registered!
|
// Now I call this and the main listener is registered!
|
||||||
setupMainPacketsListener();
|
setupMainPacketsListener();
|
||||||
@ -310,7 +314,9 @@ public class PacketsManager {
|
|||||||
|
|
||||||
// Send player info along with the disguise
|
// Send player info along with the disguise
|
||||||
PacketContainer sendTab = new PacketContainer(Server.PLAYER_INFO);
|
PacketContainer sendTab = new PacketContainer(Server.PLAYER_INFO);
|
||||||
packets.addPacket(sendTab);
|
|
||||||
|
if (!((PlayerDisguise) disguise).isDisplayedInTab())
|
||||||
|
packets.addPacket(sendTab);
|
||||||
|
|
||||||
// Add player to the list, necessary to spawn them
|
// Add player to the list, necessary to spawn them
|
||||||
sendTab.getModifier().write(0, ReflectionManager.getEnumPlayerInfoAction(0));
|
sendTab.getModifier().write(0, ReflectionManager.getEnumPlayerInfoAction(0));
|
||||||
@ -405,9 +411,11 @@ public class PacketsManager {
|
|||||||
|
|
||||||
// Remove player from the list
|
// Remove player from the list
|
||||||
PacketContainer deleteTab = sendTab.shallowClone();
|
PacketContainer deleteTab = sendTab.shallowClone();
|
||||||
packets.addDelayedPacket(deleteTab, 40);
|
|
||||||
|
|
||||||
deleteTab.getModifier().write(0, ReflectionManager.getEnumPlayerInfoAction(4));
|
deleteTab.getModifier().write(0, ReflectionManager.getEnumPlayerInfoAction(4));
|
||||||
|
|
||||||
|
if (!((PlayerDisguise) disguise).isDisplayedInTab()) {
|
||||||
|
packets.addDelayedPacket(deleteTab, 40);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (disguise.getType().isMob() || disguise.getType() == DisguiseType.ARMOR_STAND) {
|
else if (disguise.getType().isMob() || disguise.getType() == DisguiseType.ARMOR_STAND) {
|
||||||
Vector vec = disguisedEntity.getVelocity();
|
Vector vec = disguisedEntity.getVelocity();
|
||||||
|
@ -225,7 +225,7 @@ public class ReflectionFlagWatchers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (String methodName : new String[] {
|
for (String methodName : new String[] {
|
||||||
"setViewSelfDisguise", "setHideHeldItemFromSelf", "setHideArmorFromSelf", "setHearSelfDisguise"
|
"setViewSelfDisguise", "setHideHeldItemFromSelf", "setHideArmorFromSelf", "setHearSelfDisguise", "setHidePlayer"
|
||||||
}) {
|
}) {
|
||||||
try {
|
try {
|
||||||
methods.add(Disguise.class.getMethod(methodName, boolean.class));
|
methods.add(Disguise.class.getMethod(methodName, boolean.class));
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
package me.libraryaddict.disguise.utilities.packetlisteners;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.PacketType;
|
||||||
|
import com.comphenix.protocol.events.ListenerPriority;
|
||||||
|
import com.comphenix.protocol.events.PacketAdapter;
|
||||||
|
import com.comphenix.protocol.events.PacketEvent;
|
||||||
|
import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction;
|
||||||
|
import com.comphenix.protocol.wrappers.PlayerInfoData;
|
||||||
|
|
||||||
|
import me.libraryaddict.disguise.DisguiseAPI;
|
||||||
|
import me.libraryaddict.disguise.LibsDisguises;
|
||||||
|
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||||
|
|
||||||
|
public class PacketListenerTabList extends PacketAdapter {
|
||||||
|
public PacketListenerTabList(LibsDisguises plugin) {
|
||||||
|
super(plugin, ListenerPriority.NORMAL, PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPacketSending(final PacketEvent event) {
|
||||||
|
if (event.isCancelled())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Player observer = event.getPlayer();
|
||||||
|
|
||||||
|
if (event.getPacket().getPlayerInfoAction().read(0) != PlayerInfoAction.ADD_PLAYER)
|
||||||
|
return;
|
||||||
|
|
||||||
|
List<PlayerInfoData> list = event.getPacket().getPlayerInfoDataLists().read(0);
|
||||||
|
Iterator<PlayerInfoData> itel = list.iterator();
|
||||||
|
|
||||||
|
while (itel.hasNext()) {
|
||||||
|
PlayerInfoData data = itel.next();
|
||||||
|
|
||||||
|
Player player = Bukkit.getPlayer(data.getProfile().getUUID());
|
||||||
|
|
||||||
|
if (player == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Disguise disguise = DisguiseAPI.getDisguise(observer, player);
|
||||||
|
|
||||||
|
if (disguise == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!disguise.isHidePlayer())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
itel.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (list.isEmpty()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
event.getPacket().getPlayerInfoDataLists().write(0, list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user