Initial work for custom disguises
This commit is contained in:
		| @@ -45,7 +45,8 @@ public class GrabSkinCommand implements CommandExecutor { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         String[] args = DisguiseUtilities.split(StringUtils.join(strings, " ")); |         String[] args = DisguiseUtilities.split(StringUtils.join(strings, " ")); | ||||||
|         String tName = args.length > 1 ? args[1] : null; |         String tName = args.length > 1 ? args[0] : null; | ||||||
|  |         String skin = args.length > 1 ? args[1] : args[0]; | ||||||
|  |  | ||||||
|         String usable = SkinUtils.getUsableStatus(); |         String usable = SkinUtils.getUsableStatus(); | ||||||
|  |  | ||||||
| @@ -54,8 +55,8 @@ public class GrabSkinCommand implements CommandExecutor { | |||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (tName == null && args[0].matches("(.*\\/)?[a-zA-Z0-9_-]{3,20}\\.png")) { |         if (tName == null && skin.matches("(.*\\/)?[a-zA-Z0-9_-]{3,20}\\.png")) { | ||||||
|             tName = args[0].substring(args[0].lastIndexOf("/") + 1, args[0].lastIndexOf(".")); |             tName = skin.substring(skin.lastIndexOf("/") + 1, skin.lastIndexOf(".")); | ||||||
|  |  | ||||||
|             if (DisguiseUtilities.hasGameProfile(tName)) { |             if (DisguiseUtilities.hasGameProfile(tName)) { | ||||||
|                 tName = null; |                 tName = null; | ||||||
| @@ -146,7 +147,7 @@ public class GrabSkinCommand implements CommandExecutor { | |||||||
|             } |             } | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         SkinUtils.grabSkin(args[0], callback); |         SkinUtils.grabSkin(skin, callback); | ||||||
|  |  | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -35,6 +35,8 @@ public enum DisguiseType { | |||||||
|  |  | ||||||
|     CREEPER, |     CREEPER, | ||||||
|  |  | ||||||
|  |     CUSTOM, | ||||||
|  |  | ||||||
|     DOLPHIN, |     DOLPHIN, | ||||||
|  |  | ||||||
|     DONKEY, |     DONKEY, | ||||||
| @@ -261,7 +263,11 @@ public enum DisguiseType { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             setEntityType(EntityType.valueOf(name())); |             if (name().equalsIgnoreCase("CUSTOM")) { | ||||||
|  |                 setEntityType(EntityType.UNKNOWN); | ||||||
|  |             } else { | ||||||
|  |                 setEntityType(EntityType.valueOf(name())); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         catch (Exception ex) { |         catch (Exception ex) { | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -9,6 +9,8 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent; | |||||||
| import com.comphenix.protocol.wrappers.WrappedDataWatcher; | import com.comphenix.protocol.wrappers.WrappedDataWatcher; | ||||||
| import com.comphenix.protocol.wrappers.WrappedWatchableObject; | import com.comphenix.protocol.wrappers.WrappedWatchableObject; | ||||||
| import com.google.common.base.Strings; | import com.google.common.base.Strings; | ||||||
|  | import lombok.AccessLevel; | ||||||
|  | import lombok.Getter; | ||||||
| import me.libraryaddict.disguise.DisguiseAPI; | import me.libraryaddict.disguise.DisguiseAPI; | ||||||
| import me.libraryaddict.disguise.DisguiseConfig; | import me.libraryaddict.disguise.DisguiseConfig; | ||||||
| import me.libraryaddict.disguise.LibsDisguises; | import me.libraryaddict.disguise.LibsDisguises; | ||||||
| @@ -33,8 +35,13 @@ public class FlagWatcher { | |||||||
|     /** |     /** | ||||||
|      * These are the entity values I need to add else it could crash them.. |      * These are the entity values I need to add else it could crash them.. | ||||||
|      */ |      */ | ||||||
|  |     @Getter(value = AccessLevel.PROTECTED) | ||||||
|     private HashMap<Integer, Object> backupEntityValues = new HashMap<>(); |     private HashMap<Integer, Object> backupEntityValues = new HashMap<>(); | ||||||
|     private transient TargetedDisguise disguise; |     private transient TargetedDisguise disguise; | ||||||
|  |     /** | ||||||
|  |      * Disguise set data | ||||||
|  |      */ | ||||||
|  |     @Getter(value = AccessLevel.PROTECTED) | ||||||
|     private HashMap<Integer, Object> entityValues = new HashMap<>(); |     private HashMap<Integer, Object> entityValues = new HashMap<>(); | ||||||
|     private LibsEquipment equipment; |     private LibsEquipment equipment; | ||||||
|     private boolean hasDied; |     private boolean hasDied; | ||||||
|   | |||||||
| @@ -1,9 +1,6 @@ | |||||||
| package me.libraryaddict.disguise.disguisetypes; | package me.libraryaddict.disguise.disguisetypes; | ||||||
|  |  | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.DroppedItemWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.*; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.FallingBlockWatcher; |  | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.PaintingWatcher; |  | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.SplashPotionWatcher; |  | ||||||
| import org.bukkit.Art; | import org.bukkit.Art; | ||||||
| import org.bukkit.Material; | import org.bukkit.Material; | ||||||
| import org.bukkit.entity.Entity; | import org.bukkit.entity.Entity; | ||||||
| @@ -147,6 +144,8 @@ public class MiscDisguise extends TargetedDisguise { | |||||||
|     public int getId() { |     public int getId() { | ||||||
|         if (getType() == DisguiseType.FALLING_BLOCK) { |         if (getType() == DisguiseType.FALLING_BLOCK) { | ||||||
|             return ((FallingBlockWatcher) getWatcher()).getBlock().getType().ordinal(); |             return ((FallingBlockWatcher) getWatcher()).getBlock().getType().ordinal(); | ||||||
|  |         } else if (getType() == DisguiseType.CUSTOM) { | ||||||
|  |             return ((CustomWatcher) getWatcher()).getTypeId(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return id; |         return id; | ||||||
|   | |||||||
| @@ -0,0 +1,39 @@ | |||||||
|  | package me.libraryaddict.disguise.disguisetypes.watchers; | ||||||
|  |  | ||||||
|  | import lombok.Getter; | ||||||
|  | import lombok.Setter; | ||||||
|  | import me.libraryaddict.disguise.disguisetypes.Disguise; | ||||||
|  | import me.libraryaddict.disguise.disguisetypes.DisguiseType; | ||||||
|  | import me.libraryaddict.disguise.disguisetypes.FlagWatcher; | ||||||
|  | import me.libraryaddict.disguise.disguisetypes.MetaIndex; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Created by libraryaddict on 13/04/2020. | ||||||
|  |  */ | ||||||
|  | public class CustomWatcher extends FlagWatcher { | ||||||
|  |     @Getter | ||||||
|  |     private DisguiseType inherits; | ||||||
|  |     @Getter | ||||||
|  |     @Setter | ||||||
|  |     private int typeId; | ||||||
|  |  | ||||||
|  |     public CustomWatcher(Disguise disguise) { | ||||||
|  |         super(disguise); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setInherits(DisguiseType toClone) { | ||||||
|  |         this.inherits = toClone; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @param index | ||||||
|  |      * @param object | ||||||
|  |      */ | ||||||
|  |     public void setMetadata(int index, Object object) { | ||||||
|  |         getEntityValues().put(index, object); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public Object getMetadata(int index) { | ||||||
|  |         return getEntityValues().get(index); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -9,6 +9,7 @@ import com.comphenix.protocol.wrappers.WrappedDataWatcher; | |||||||
| import com.comphenix.protocol.wrappers.WrappedGameProfile; | import com.comphenix.protocol.wrappers.WrappedGameProfile; | ||||||
| import me.libraryaddict.disguise.DisguiseConfig; | import me.libraryaddict.disguise.DisguiseConfig; | ||||||
| import me.libraryaddict.disguise.disguisetypes.*; | import me.libraryaddict.disguise.disguisetypes.*; | ||||||
|  | import me.libraryaddict.disguise.disguisetypes.watchers.CustomWatcher; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.FallingBlockWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.FallingBlockWatcher; | ||||||
| import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; | import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher; | ||||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||||
| @@ -221,7 +222,7 @@ public class PacketHandlerSpawn implements IPacketHandler { | |||||||
|             } else { |             } else { | ||||||
|                 spawnPlayer.getDataWatcherModifier().write(0, newWatcher); |                 spawnPlayer.getDataWatcherModifier().write(0, newWatcher); | ||||||
|             } |             } | ||||||
|         } else if (disguise.getType().isMob() || disguise.getType() == DisguiseType.ARMOR_STAND) { |         } else if (disguise.isMobDisguise() || disguise.getType() == DisguiseType.ARMOR_STAND) { | ||||||
|             Vector vec = disguisedEntity.getVelocity(); |             Vector vec = disguisedEntity.getVelocity(); | ||||||
|  |  | ||||||
|             PacketContainer spawnEntity = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_LIVING); |             PacketContainer spawnEntity = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_LIVING); | ||||||
| @@ -231,7 +232,12 @@ public class PacketHandlerSpawn implements IPacketHandler { | |||||||
|  |  | ||||||
|             mods.write(0, disguisedEntity.getEntityId()); |             mods.write(0, disguisedEntity.getEntityId()); | ||||||
|             mods.write(1, disguisedEntity.getUniqueId()); |             mods.write(1, disguisedEntity.getUniqueId()); | ||||||
|             mods.write(2, disguise.getType().getTypeId()); |  | ||||||
|  |             if (disguise.getType() != DisguiseType.CUSTOM) { | ||||||
|  |                 mods.write(2, disguise.getType().getTypeId()); | ||||||
|  |             } else { | ||||||
|  |                 mods.write(2, ((CustomWatcher) disguise.getWatcher()).getTypeId()); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             // region Vector calculations |             // region Vector calculations | ||||||
|             double d1 = 3.9D; |             double d1 = 3.9D; | ||||||
|   | |||||||
| @@ -231,9 +231,9 @@ public enum LibsMsg { | |||||||
|     GRAB_DISG_HELP_1(ChatColor.GREEN + |     GRAB_DISG_HELP_1(ChatColor.GREEN + | ||||||
|             "You can choose a name to save the skins under, the names will be usable as if it was an actual player " + |             "You can choose a name to save the skins under, the names will be usable as if it was an actual player " + | ||||||
|             "skin"), |             "skin"), | ||||||
|     GRAB_DISG_HELP_2(ChatColor.DARK_GREEN + "/grabskin https://somesite.com/myskin.png <Optional Name>"), |     GRAB_DISG_HELP_2(ChatColor.DARK_GREEN + "/grabskin <Optional Name> https://somesite.com/myskin.png"), | ||||||
|     GRAB_DISG_HELP_3(ChatColor.DARK_GREEN + "/grabskin myskin.png <Optional Name> - Skins must be in the folder!"), |     GRAB_DISG_HELP_3(ChatColor.DARK_GREEN + "/grabskin <Optional Name> myskin.png - Skins must be in the folder!"), | ||||||
|     GRAB_DISG_HELP_4(ChatColor.DARK_GREEN + "/grabskin <Player name or UUID> <Optional Name>"), |     GRAB_DISG_HELP_4(ChatColor.DARK_GREEN + "/grabskin <Optional Name> <Player name or UUID>"), | ||||||
|     GRAB_DISG_HELP_5(ChatColor.GREEN + "If you want the slim Alex version of the skin, append :slim. So 'myskin.png:slim'"), |     GRAB_DISG_HELP_5(ChatColor.GREEN + "If you want the slim Alex version of the skin, append :slim. So 'myskin.png:slim'"), | ||||||
|     GRAB_DISG_HELP_6( |     GRAB_DISG_HELP_6( | ||||||
|             ChatColor.GREEN + "You will be sent the skin data, but you can also use the saved names in disguises"), |             ChatColor.GREEN + "You will be sent the skin data, but you can also use the saved names in disguises"), | ||||||
|   | |||||||
| @@ -14,6 +14,8 @@ public class DisguiseTypesTest { | |||||||
|         for (EntityType entityType : EntityType.values()) { |         for (EntityType entityType : EntityType.values()) { | ||||||
|             if (entityType == EntityType.LIGHTNING) { |             if (entityType == EntityType.LIGHTNING) { | ||||||
|                 continue; |                 continue; | ||||||
|  |             } else if (entityType == EntityType.UNKNOWN) { | ||||||
|  |                 continue; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             DisguiseType disguiseType = DisguiseType.getType(entityType); |             DisguiseType disguiseType = DisguiseType.getType(entityType); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user