diff --git a/config.yml b/config.yml index 5a624696..d6798a8c 100644 --- a/config.yml +++ b/config.yml @@ -1,47 +1,64 @@ # Shall I notify people of a LibsDisguises update? NotifyUpdate: true + +# Should the plugin use scoreboards to disable pushing? Please note that disabling this effectively means that self disguises will push the disguiser around +# Alternatively when this is enabled this will remove the player from any scoreboard team he is in +DisablePushing: true + # Whats the permission to get the notification? Permission: 'libsdisguises.update' + # Whats the max size allowed for command disguiseradius DisguiseRadiusMax: 50 + # Whats the max size allowed for command undisguiseradius UndisguiseRadiusMax: 50 + # Shall the players view their disguises? # Best used when viewing yourself in 3rd person ViewSelfDisguises: true + # Shall I disguise the sounds? # This turns your damage sound into a MOOOO DisguiseSounds: true + # Shall the disguised hear their disguise sounds or their damage sounds. # I disable this as it can be a little confusing when not used with self disguises HearSelfDisguise: true + # Shall I send the velocity packets? I REALLY recommend you don't disable. # This is the only thing allowing the mobs to fly without glitching out. SendVelocity: true + # For self disguises, they need to have the armor and the held item removed # Else they see floating armor, floating held items. # This turns the items invisible in the disguised players inventory. It does not actually remove them! RemoveArmor: true RemoveHeldItem: false + # If you set a disguise to burning, it will no longer be able to be shown as sneaking or invisible. # Set this to true if you want the disguise to get the animations of the disguised entity. Such as invisible, on fire, sprinting, sneaking, blocking # This is only valid if you set a animation on the disguise itself. Because the entitys animations are applied otherwise. AddEntityAnimations: true + # When a sheep or wolf is right clicked with dye. The client automatically assumes it was successful and displays the sheeps wool or the wolfs collar as dyed. # This is a option that either prevents that happening, or it changes their color officially in the plugin so that everyone sees it changed. # Its currently set to false which means that the color is not changed and will refresh itself to the player. # Please note that this will not remove the dye from their hands. This also does not check if the disguised entity is actually a sheep/wolf and wants a say in its color. DyeableSheep: false DyeableWolf: false + # This is only called into action when the disguise is constructed using the commands. # And when the disguise supports that. This will not be used at all for plugins constructing the disguises for instance. # Such as prophunt. Its also false because its kind of a retarded feature. # This is pretty simple. It shows the players displayname (Name as it appears in chat) above their head. # This also overrides any custom name they have set in their disguise options. ShowNamesAboveDisguises: false + # This supports the above option. # If this is true, then the name shown above the head appears regardless of if you are looking at the disguise directly or not. NameAboveHeadAlwaysVisible: true + # This modifys the bounding box, This is stuff like can a arrow hit them. # If you turn this to true, arrows will act like they hit the disguise in the right place! # So someone disguised as a enderdragon will easily get shot down by arrows! @@ -49,10 +66,12 @@ NameAboveHeadAlwaysVisible: true # This shouldn't really be enabled for players as it also interferes with their movement because the server thinks the player is larger than he really is. # That makes the player unable to approach this building because the server thinks he is trying to glitch inside blocks. ModifyBoundingBox: false + # This prevents disguised players from being targeted by monsters. # This doesn't prevent their targeting you if already targeting when disguised # They will just ignore you unless provoked. MonstersIgnoreDisguises: false + # Sigh. People are going to want this. # So lets make your disguise blown if you are attacked.. # Works only for disguised players when attacked by a entity (arrow, monster. etc) diff --git a/src/me/libraryaddict/disguise/DisguiseConfig.java b/src/me/libraryaddict/disguise/DisguiseConfig.java index 1c9521e7..20868b5b 100644 --- a/src/me/libraryaddict/disguise/DisguiseConfig.java +++ b/src/me/libraryaddict/disguise/DisguiseConfig.java @@ -56,6 +56,7 @@ public class DisguiseConfig { private static String updateNotificationPermission; private static boolean viewSelfDisguise; private static boolean witherSkullEnabled; + private static boolean disablePushing; public static Entry getCustomDisguise(String disguise) { for (Entry entry : customDisguises.entrySet()) { @@ -68,6 +69,10 @@ public class DisguiseConfig { return null; } + public static boolean isPushingDisabled() { + return disablePushing; + } + public static HashMap getCustomDisguises() { return customDisguises; } @@ -136,6 +141,7 @@ public class DisguiseConfig { setHideDisguisedPlayers(config.getBoolean("HideDisguisedPlayersFromTab")); setShowDisguisedPlayersInTab(config.getBoolean("ShowPlayerDisguisesInTab")); setDisabledInvisibility(config.getBoolean("DisableInvisibility")); + disablePushing = config.getBoolean("DisablePushing"); customDisguises.clear(); diff --git a/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java b/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java index e80a2cfe..e012c57b 100644 --- a/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java +++ b/src/me/libraryaddict/disguise/utilities/DisguiseUtilities.java @@ -988,12 +988,14 @@ public class DisguiseUtilities { ex.printStackTrace(); } - // Code to stop player pushing in 1.9 - Scoreboard scoreboard = player.getScoreboard(); - Team t; + if (DisguiseConfig.isPushingDisabled()) { + // Code to stop player pushing in 1.9 + Scoreboard scoreboard = player.getScoreboard(); + Team t; - if ((t = scoreboard.getTeam("LDPushing")) != null) { - t.removeEntry(player.getName()); + if ((t = scoreboard.getTeam("LDPushing")) != null) { + t.removeEntry(player.getName()); + } } // player.spigot().setCollidesWithEntities(true); @@ -1071,22 +1073,24 @@ public class DisguiseUtilities { return; } - // Code to stop player pushing - Scoreboard scoreboard = player.getScoreboard(); - Team t; + if (DisguiseConfig.isPushingDisabled()) { + // Code to stop player pushing + Scoreboard scoreboard = player.getScoreboard(); + Team t; - if ((t = scoreboard.getTeam("LDPushing")) == null) { - t = scoreboard.registerNewTeam("LDPushing"); + if ((t = scoreboard.getTeam("LDPushing")) == null) { + t = scoreboard.registerNewTeam("LDPushing"); + } + + if (t.getOption(Option.COLLISION_RULE) != OptionStatus.NEVER) { + t.setOption(Option.COLLISION_RULE, OptionStatus.NEVER); + t.setCanSeeFriendlyInvisibles(false); + } + + if (!t.hasEntry(player.getName())) + t.addEntry(player.getName()); } - if (t.getOption(Option.COLLISION_RULE) != OptionStatus.NEVER) { - t.setOption(Option.COLLISION_RULE, OptionStatus.NEVER); - t.setCanSeeFriendlyInvisibles(false); - } - - if (!t.hasEntry(player.getName())) - t.addEntry(player.getName()); - // Add himself to his own entity tracker Object trackedPlayersObj = ReflectionManager.getNmsField("EntityTrackerEntry", "trackedPlayers") .get(entityTrackerEntry);