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 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(); | ||||
|  | ||||
| @@ -54,8 +55,8 @@ public class GrabSkinCommand implements CommandExecutor { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|         if (tName == null && args[0].matches("(.*\\/)?[a-zA-Z0-9_-]{3,20}\\.png")) { | ||||
|             tName = args[0].substring(args[0].lastIndexOf("/") + 1, args[0].lastIndexOf(".")); | ||||
|         if (tName == null && skin.matches("(.*\\/)?[a-zA-Z0-9_-]{3,20}\\.png")) { | ||||
|             tName = skin.substring(skin.lastIndexOf("/") + 1, skin.lastIndexOf(".")); | ||||
|  | ||||
|             if (DisguiseUtilities.hasGameProfile(tName)) { | ||||
|                 tName = null; | ||||
| @@ -146,7 +147,7 @@ public class GrabSkinCommand implements CommandExecutor { | ||||
|             } | ||||
|         }; | ||||
|  | ||||
|         SkinUtils.grabSkin(args[0], callback); | ||||
|         SkinUtils.grabSkin(skin, callback); | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|   | ||||
| @@ -35,6 +35,8 @@ public enum DisguiseType { | ||||
|  | ||||
|     CREEPER, | ||||
|  | ||||
|     CUSTOM, | ||||
|  | ||||
|     DOLPHIN, | ||||
|  | ||||
|     DONKEY, | ||||
| @@ -261,7 +263,11 @@ public enum DisguiseType { | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             setEntityType(EntityType.valueOf(name())); | ||||
|             if (name().equalsIgnoreCase("CUSTOM")) { | ||||
|                 setEntityType(EntityType.UNKNOWN); | ||||
|             } else { | ||||
|                 setEntityType(EntityType.valueOf(name())); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception ex) { | ||||
|         } | ||||
|   | ||||
| @@ -9,6 +9,8 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent; | ||||
| import com.comphenix.protocol.wrappers.WrappedDataWatcher; | ||||
| import com.comphenix.protocol.wrappers.WrappedWatchableObject; | ||||
| import com.google.common.base.Strings; | ||||
| import lombok.AccessLevel; | ||||
| import lombok.Getter; | ||||
| import me.libraryaddict.disguise.DisguiseAPI; | ||||
| import me.libraryaddict.disguise.DisguiseConfig; | ||||
| 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.. | ||||
|      */ | ||||
|     @Getter(value = AccessLevel.PROTECTED) | ||||
|     private HashMap<Integer, Object> backupEntityValues = new HashMap<>(); | ||||
|     private transient TargetedDisguise disguise; | ||||
|     /** | ||||
|      * Disguise set data | ||||
|      */ | ||||
|     @Getter(value = AccessLevel.PROTECTED) | ||||
|     private HashMap<Integer, Object> entityValues = new HashMap<>(); | ||||
|     private LibsEquipment equipment; | ||||
|     private boolean hasDied; | ||||
|   | ||||
| @@ -1,9 +1,6 @@ | ||||
| package me.libraryaddict.disguise.disguisetypes; | ||||
|  | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.DroppedItemWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.FallingBlockWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.PaintingWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.SplashPotionWatcher; | ||||
| import me.libraryaddict.disguise.disguisetypes.watchers.*; | ||||
| import org.bukkit.Art; | ||||
| import org.bukkit.Material; | ||||
| import org.bukkit.entity.Entity; | ||||
| @@ -147,6 +144,8 @@ public class MiscDisguise extends TargetedDisguise { | ||||
|     public int getId() { | ||||
|         if (getType() == DisguiseType.FALLING_BLOCK) { | ||||
|             return ((FallingBlockWatcher) getWatcher()).getBlock().getType().ordinal(); | ||||
|         } else if (getType() == DisguiseType.CUSTOM) { | ||||
|             return ((CustomWatcher) getWatcher()).getTypeId(); | ||||
|         } | ||||
|  | ||||
|         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 me.libraryaddict.disguise.DisguiseConfig; | ||||
| 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.LivingWatcher; | ||||
| import me.libraryaddict.disguise.utilities.DisguiseUtilities; | ||||
| @@ -221,7 +222,7 @@ public class PacketHandlerSpawn implements IPacketHandler { | ||||
|             } else { | ||||
|                 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(); | ||||
|  | ||||
|             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(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 | ||||
|             double d1 = 3.9D; | ||||
|   | ||||
| @@ -231,9 +231,9 @@ public enum LibsMsg { | ||||
|     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 " + | ||||
|             "skin"), | ||||
|     GRAB_DISG_HELP_2(ChatColor.DARK_GREEN + "/grabskin https://somesite.com/myskin.png <Optional Name>"), | ||||
|     GRAB_DISG_HELP_3(ChatColor.DARK_GREEN + "/grabskin myskin.png <Optional Name> - Skins must be in the folder!"), | ||||
|     GRAB_DISG_HELP_4(ChatColor.DARK_GREEN + "/grabskin <Player name or UUID> <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 <Optional Name> myskin.png - Skins must be in the folder!"), | ||||
|     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_6( | ||||
|             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()) { | ||||
|             if (entityType == EntityType.LIGHTNING) { | ||||
|                 continue; | ||||
|             } else if (entityType == EntityType.UNKNOWN) { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             DisguiseType disguiseType = DisguiseType.getType(entityType); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user