From 739ce9f10e25a5f52045825c39eca455f0488b10 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 18 May 2013 09:05:19 +1200 Subject: [PATCH] First commit --- .gitattributes | 22 ++ .gitignore | 215 ++++++++++++++++++ plugin.yml | 8 + pom.xml | 62 +++++ .../libraryaddict/disguise/DisguiseAPI.java | 116 ++++++++++ .../disguise/DisguiseCommand.java | 80 +++++++ .../disguise/DisguiseTypes/Disguise.java | 72 ++++++ .../disguise/DisguiseTypes/DisguiseType.java | 38 ++++ .../disguise/DisguiseTypes/MiscDisguise.java | 9 + .../disguise/DisguiseTypes/MobDisguise.java | 40 ++++ .../DisguiseTypes/PlayerDisguise.java | 17 ++ .../libraryaddict/disguise/LibsDisguises.java | 101 ++++++++ target/LibsDisguises.jar | Bin 0 -> 17664 bytes .../libraryaddict/disguise/DisguiseAPI.class | Bin 0 -> 4890 bytes .../disguise/DisguiseCommand.class | Bin 0 -> 4811 bytes .../disguise/DisguiseTypes/Disguise.class | Bin 0 -> 3814 bytes .../DisguiseType$EntityType.class | Bin 0 -> 1348 bytes .../disguise/DisguiseTypes/DisguiseType.class | Bin 0 -> 3914 bytes .../disguise/DisguiseTypes/MiscDisguise.class | Bin 0 -> 514 bytes .../disguise/DisguiseTypes/MobDisguise.class | Bin 0 -> 1629 bytes .../DisguiseTypes/PlayerDisguise.class | Bin 0 -> 932 bytes .../disguise/LibsDisguises$1.class | Bin 0 -> 4025 bytes .../disguise/LibsDisguises.class | Bin 0 -> 4423 bytes target/classes/plugin.yml | 8 + target/maven-archiver/pom.properties | 5 + 25 files changed, 793 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 plugin.yml create mode 100644 pom.xml create mode 100644 src/me/libraryaddict/disguise/DisguiseAPI.java create mode 100644 src/me/libraryaddict/disguise/DisguiseCommand.java create mode 100644 src/me/libraryaddict/disguise/DisguiseTypes/Disguise.java create mode 100644 src/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.java create mode 100644 src/me/libraryaddict/disguise/DisguiseTypes/MiscDisguise.java create mode 100644 src/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.java create mode 100644 src/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.java create mode 100644 src/me/libraryaddict/disguise/LibsDisguises.java create mode 100644 target/LibsDisguises.jar create mode 100644 target/classes/me/libraryaddict/disguise/DisguiseAPI.class create mode 100644 target/classes/me/libraryaddict/disguise/DisguiseCommand.class create mode 100644 target/classes/me/libraryaddict/disguise/DisguiseTypes/Disguise.class create mode 100644 target/classes/me/libraryaddict/disguise/DisguiseTypes/DisguiseType$EntityType.class create mode 100644 target/classes/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.class create mode 100644 target/classes/me/libraryaddict/disguise/DisguiseTypes/MiscDisguise.class create mode 100644 target/classes/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.class create mode 100644 target/classes/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.class create mode 100644 target/classes/me/libraryaddict/disguise/LibsDisguises$1.class create mode 100644 target/classes/me/libraryaddict/disguise/LibsDisguises.class create mode 100644 target/classes/plugin.yml create mode 100644 target/maven-archiver/pom.properties diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..412eeda7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..b9d6bd92 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/plugin.yml b/plugin.yml new file mode 100644 index 00000000..a4b4803a --- /dev/null +++ b/plugin.yml @@ -0,0 +1,8 @@ +name: LibsDisguises +main: me.libraryaddict.disguise.LibsDisguises +version: ${project.version} +author: libraryaddict +depend: [ProtocolLib] +commands: + disguise: + aliases: [d, dis] \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 00000000..13700f29 --- /dev/null +++ b/pom.xml @@ -0,0 +1,62 @@ + + 4.0.0 + LibsDisguises + LibsDisguises + v1.0 + + src + clean package + target + LibsDisguises + + + maven-compiler-plugin + 2.3.2 + + 1.6 + 1.6 + + + + + + . + true + ${project.basedir} + + plugin.yml + README.md + + + + + + UTF-8 + + + + + comphenix-rep + Comphenix Repository + http://repo.comphenix.net/content/groups/public + + + bukkit-repo + http://repo.bukkit.org/content/groups/public + + + + + + com.comphenix.protocol + ProtocolLib + 2.4.3 + + + org.bukkit + craftbukkit + 1.5.2-R0.1-SNAPSHOT + + + \ No newline at end of file diff --git a/src/me/libraryaddict/disguise/DisguiseAPI.java b/src/me/libraryaddict/disguise/DisguiseAPI.java new file mode 100644 index 00000000..a9bd845f --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseAPI.java @@ -0,0 +1,116 @@ +package me.libraryaddict.disguise; + +import java.util.concurrent.ConcurrentHashMap; + +import me.libraryaddict.disguise.DisguiseTypes.Disguise; +import me.libraryaddict.disguise.DisguiseTypes.MobDisguise; +import me.libraryaddict.disguise.DisguiseTypes.PlayerDisguise; +import net.minecraft.server.v1_5_R3.*; + +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer; +import org.bukkit.entity.Player; + +public class DisguiseAPI { + + private static ConcurrentHashMap disguises = new ConcurrentHashMap(); + + /** + * @param Player + * - The player to disguise + * @param Disguise + * - The disguise to wear + */ + public static void disguiseToAll(Player p, Disguise disguise) { + disguises.put(p.getName(), disguise); + for (Player player : Bukkit.getOnlinePlayers()) { + if (p.getWorld() != player.getWorld()) + continue; + player.hidePlayer(p); + player.showPlayer(p); + } + } + + /** + * @param Player + * - The player who is being disguised + * @param Player + * - The player who is watching the disguised + * @param Disguise + * - The disguise he is wearing + */ + public static void disguiseToPlayer(Player disguiser, Player observer, Disguise disguise) { + disguises.put(disguiser.getName(), disguise); + Packet29DestroyEntity destroyPacket = new Packet29DestroyEntity(new int[] { disguiser.getEntityId() }); + Packet spawnPacket = null; + if (disguise.getType().isMob()) { + + EntityLiving entityLiving = ((MobDisguise) disguise).getEntityLiving(((CraftPlayer) disguiser).getHandle().world, + disguiser.getLocation(), disguiser.getEntityId()); + spawnPacket = new Packet24MobSpawn(entityLiving); + + } else if (disguise.getType().isMisc()) { + + Entity entity = disguise.getEntity(((CraftPlayer) disguiser).getHandle().world, disguiser.getLocation(), + disguiser.getEntityId()); + spawnPacket = new Packet23VehicleSpawn(entity, 0); + + } else if (disguise.getType().isPlayer()) { + + EntityHuman entityHuman = ((CraftPlayer) disguiser).getHandle(); + spawnPacket = new Packet20NamedEntitySpawn(entityHuman); + ((Packet20NamedEntitySpawn) spawnPacket).b = ((PlayerDisguise) disguise).getName(); + + } + ((CraftPlayer) observer).getHandle().playerConnection.sendPacket(destroyPacket); + ((CraftPlayer) observer).getHandle().playerConnection.sendPacket(spawnPacket); + + } + + /** + * @param Disguiser + * @return Disguise + */ + public static Disguise getDisguise(Player p) { + return getDisguise(p.getName()); + } + + /** + * @param Disguiser + * @return Disguise + */ + public static Disguise getDisguise(String name) { + return disguises.get(name); + } + + /** + * @param Disguiser + * @return Boolean - If the disguiser is disguised + */ + public static boolean isDisguised(Player p) { + return isDisguised(p.getName()); + } + + /** + * @param Disguiser + * @return boolean - If the disguiser is disguised + */ + public static boolean isDisguised(String name) { + return disguises.containsKey(name); + } + + /** + * @param Disguiser + * - Undisguises him + */ + public static void undisguiseToAll(Player p) { + disguises.remove(p.getName()); + for (Player player : Bukkit.getOnlinePlayers()) { + if (p.getWorld() != player.getWorld()) + continue; + player.hidePlayer(p); + player.showPlayer(p); + } + } + +} \ No newline at end of file diff --git a/src/me/libraryaddict/disguise/DisguiseCommand.java b/src/me/libraryaddict/disguise/DisguiseCommand.java new file mode 100644 index 00000000..fd1a73f9 --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseCommand.java @@ -0,0 +1,80 @@ +package me.libraryaddict.disguise; + +import java.util.ArrayList; +import java.util.Collections; + +import me.libraryaddict.disguise.DisguiseTypes.Disguise; +import me.libraryaddict.disguise.DisguiseTypes.DisguiseType; +import me.libraryaddict.disguise.DisguiseTypes.MiscDisguise; +import me.libraryaddict.disguise.DisguiseTypes.MobDisguise; +import me.libraryaddict.disguise.DisguiseTypes.PlayerDisguise; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class DisguiseCommand implements CommandExecutor { + + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender.isOp()) { + Player p = (Player) sender; + if (args.length == 0) { + ArrayList names = new ArrayList(); + for (DisguiseType type : DisguiseType.values()) { + names.add(type.name().toLowerCase()); + } + Collections.sort(names); + sender.sendMessage(ChatColor.RED + "You can use the disguises: " + ChatColor.GREEN + + StringUtils.join(names, ChatColor.RED + ", " + ChatColor.GREEN)); + } else if (args[0].equalsIgnoreCase("undiguise") || args[0].equalsIgnoreCase("undis") + || args[0].equalsIgnoreCase("un")) { + if (DisguiseAPI.isDisguised(p.getName())) { + DisguiseAPI.undisguiseToAll(p); + sender.sendMessage(ChatColor.RED + "You are no longer disguised"); + } else + sender.sendMessage(ChatColor.RED + "You are not disguised!"); + } else if (args[0].equalsIgnoreCase("player")) { + if (args.length > 1) { + String name = ChatColor.translateAlternateColorCodes('&', + StringUtils.join(args, " ").substring(args[0].length() + 1)); + PlayerDisguise disguise = new PlayerDisguise(name); + DisguiseAPI.disguiseToAll(p, disguise); + sender.sendMessage(ChatColor.RED + "Now disguised as the player '" + ChatColor.GREEN + name + ChatColor.RESET + + ChatColor.RED + "'"); + } else + sender.sendMessage(ChatColor.RED + "You need to provide a player name"); + } else { + DisguiseType type; + try { + type = DisguiseType.valueOf(args[0].toUpperCase()); + } catch (Exception ex) { + sender.sendMessage(ChatColor.RED + "Failed to find disguise: " + ChatColor.GREEN + args[0] + + "\n/disguise player \n/disguise \n/disguise undisguise/un/undis"); + return true; + } + boolean adult = true; + if (args.length > 1) { + if (args[1].equalsIgnoreCase("true")) { + adult = false; + } else if (!args[1].equalsIgnoreCase("false")) { + sender.sendMessage(ChatColor.RED + "Set baby: " + ChatColor.GREEN + args[1] + ChatColor.RED + + " - Thats not true or false.."); + return true; + } + } + Disguise disguise; + if (type.isMob()) + disguise = new MobDisguise(type, adult); + else + disguise = new MiscDisguise(type); + DisguiseAPI.disguiseToAll(p, disguise); + sender.sendMessage(ChatColor.RED + "Now disguised as a " + type.name().toLowerCase() + "!"); + } + } else + sender.sendMessage(ChatColor.RED + "You do not have permission"); + return true; + } +} diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/Disguise.java b/src/me/libraryaddict/disguise/DisguiseTypes/Disguise.java new file mode 100644 index 00000000..e0950f3f --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/Disguise.java @@ -0,0 +1,72 @@ +package me.libraryaddict.disguise.DisguiseTypes; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import net.minecraft.server.v1_5_R3.DataWatcher; +import net.minecraft.server.v1_5_R3.Entity; +import net.minecraft.server.v1_5_R3.EntityCreeper; +import net.minecraft.server.v1_5_R3.EntitySkeleton; +import net.minecraft.server.v1_5_R3.World; +import org.bukkit.Location; + +public class Disguise { + protected DisguiseType disguiseType; + private Entity entity; + + protected Disguise(DisguiseType newType) { + disguiseType = newType; + } + + public Entity getEntity(World world, Location loc, int entityId) { + Entity entity = null; + try { + String name = toReadable(disguiseType.name()); + if (disguiseType == DisguiseType.WITHER_SKELETON) { + name = "Skeleton"; + } + if (disguiseType == DisguiseType.CHARGED_CREEPER) { + name = "Creeper"; + } + if (disguiseType == DisguiseType.TNT_PRIMED) { + name = "TNTPrimed"; + } + Class entityClass = Class.forName("net.minecraft.server.v1_5_R3.Entity" + name); + Constructor contructor = entityClass.getDeclaredConstructor(World.class); + entity = (Entity) contructor.newInstance(world); + if (disguiseType == DisguiseType.WITHER_SKELETON) { + ((EntitySkeleton) entity).setSkeletonType(1); + } + if (disguiseType == DisguiseType.CHARGED_CREEPER) { + ((EntityCreeper) entity).setPowered(true); + } + Field field = Entity.class.getDeclaredField("datawatcher"); + field.setAccessible(true); + } catch (Exception ex) { + ex.printStackTrace(); + } + entity.setLocation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); + entity.id = entityId; + this.entity = entity; + return entity; + } + + public DisguiseType getType() { + return disguiseType; + } + + public DataWatcher getDataWatcher() { + return entity.getDataWatcher(); + } + + public Entity getEntity() { + return entity; + } + + private String toReadable(String string) { + String[] strings = string.split("_"); + string = ""; + for (String s : strings) + string += s.substring(0, 1) + s.substring(1).toLowerCase(); + return string; + } +} \ No newline at end of file diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.java b/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.java new file mode 100644 index 00000000..fd03c128 --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.java @@ -0,0 +1,38 @@ +package me.libraryaddict.disguise.DisguiseTypes; + +public enum DisguiseType { + BAT(EntityType.MOB), BLAZE(EntityType.MOB), CAVE_SPIDER(EntityType.MOB), CHARGED_CREEPER(EntityType.MOB), CHICKEN( + EntityType.MOB), COW(EntityType.MOB), CREEPER(EntityType.MOB), ENDER_CRYSTAL(EntityType.MISC), ENDER_DRAGON( + EntityType.MOB), ENDERMAN(EntityType.MOB), GHAST(EntityType.MOB), GIANT_ZOMBIE(EntityType.MOB), IRON_GOLEM(EntityType.MOB), MAGMA_CUBE( + EntityType.MOB), MUSHROOM_COW(EntityType.MOB), OCELOT(EntityType.MOB), PIG(EntityType.MOB), PIG_ZOMBIE(EntityType.MOB), PLAYER( + EntityType.PLAYER), TNT_PRIMED(EntityType.MISC), SHEEP(EntityType.MOB), SILVERFISH(EntityType.MOB), SKELETON( + EntityType.MOB), SLIME(EntityType.MOB), SNOWMAN(EntityType.MOB), SPIDER(EntityType.MOB), SQUID(EntityType.MOB), VILLAGER( + EntityType.MOB), WITCH(EntityType.MOB), WITHER(EntityType.MOB), WITHER_SKELETON(EntityType.MOB), WOLF(EntityType.MOB), ZOMBIE( + EntityType.MOB); + + public static enum EntityType { + MISC, MOB, PLAYER; + } + + public static DisguiseType getType(org.bukkit.entity.EntityType entityType) { + return DisguiseType.valueOf(entityType.name()); + } + + private EntityType entityType; + + private DisguiseType(EntityType newType) { + entityType = newType; + } + + public boolean isMisc() { + return entityType == EntityType.MISC; + } + + public boolean isMob() { + return entityType == EntityType.MOB; + } + + public boolean isPlayer() { + return entityType == EntityType.PLAYER; + } +} \ No newline at end of file diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/MiscDisguise.java b/src/me/libraryaddict/disguise/DisguiseTypes/MiscDisguise.java new file mode 100644 index 00000000..cec66e36 --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/MiscDisguise.java @@ -0,0 +1,9 @@ +package me.libraryaddict.disguise.DisguiseTypes; + +public class MiscDisguise extends Disguise { + + public MiscDisguise(DisguiseType disguiseType) { + super(disguiseType); + } + +} \ No newline at end of file diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.java b/src/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.java new file mode 100644 index 00000000..531d3230 --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.java @@ -0,0 +1,40 @@ +package me.libraryaddict.disguise.DisguiseTypes; + +import net.minecraft.server.v1_5_R3.Entity; +import net.minecraft.server.v1_5_R3.EntityAgeable; +import net.minecraft.server.v1_5_R3.EntityLiving; +import net.minecraft.server.v1_5_R3.EntityZombie; +import net.minecraft.server.v1_5_R3.World; + +import org.bukkit.Location; + +public class MobDisguise extends Disguise { + + private boolean adult; + + public MobDisguise(DisguiseType disguiseType, boolean isAdult) { + super(disguiseType); + adult = isAdult; + } + + public EntityLiving getEntityLiving(World w, Location loc, int id) { + Entity entity = getEntity(w, loc, id); + if (!adult) { + if (entity instanceof EntityAgeable) + ((EntityAgeable) entity).setAge(-24000); + else if (entity instanceof EntityZombie) + ((EntityZombie) entity).setBaby(true); + } + if (entity instanceof EntityLiving) + return (EntityLiving) entity; + return null; + } + + public boolean isAdult() { + return adult; + } + + public void setAdult(boolean setAdult) { + adult = setAdult; + } +} \ No newline at end of file diff --git a/src/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.java b/src/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.java new file mode 100644 index 00000000..610395ee --- /dev/null +++ b/src/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.java @@ -0,0 +1,17 @@ +package me.libraryaddict.disguise.DisguiseTypes; + +public class PlayerDisguise extends Disguise { + private String playerName; + + public PlayerDisguise(String name) { + super(DisguiseType.PLAYER); + if (name.length() > 16) + name = name.substring(0, 16); + playerName = name; + } + + public String getName() { + return playerName; + } + +} \ No newline at end of file diff --git a/src/me/libraryaddict/disguise/LibsDisguises.java b/src/me/libraryaddict/disguise/LibsDisguises.java new file mode 100644 index 00000000..ad0c05b8 --- /dev/null +++ b/src/me/libraryaddict/disguise/LibsDisguises.java @@ -0,0 +1,101 @@ +package me.libraryaddict.disguise; + +import java.lang.reflect.Method; +import java.util.List; + +import me.libraryaddict.disguise.DisguiseTypes.Disguise; +import me.libraryaddict.disguise.DisguiseTypes.MiscDisguise; +import me.libraryaddict.disguise.DisguiseTypes.MobDisguise; +import me.libraryaddict.disguise.DisguiseTypes.PlayerDisguise; +import net.minecraft.server.v1_5_R3.DataWatcher; +import net.minecraft.server.v1_5_R3.Entity; +import net.minecraft.server.v1_5_R3.EntityLiving; +import net.minecraft.server.v1_5_R3.EntityPlayer; +import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +import com.comphenix.protocol.Packets; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.ConnectionSide; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.reflect.StructureModifier; + +public class LibsDisguises extends JavaPlugin { + + public void onEnable() { + getCommand("disguise").setExecutor(new DisguiseCommand()); + ProtocolLibrary.getProtocolManager().addPacketListener( + new PacketAdapter(this, ConnectionSide.SERVER_SIDE, ListenerPriority.NORMAL, Packets.Server.NAMED_ENTITY_SPAWN, + Packets.Server.ENTITY_METADATA) { + public void onPacketSending(PacketEvent event) { + StructureModifier mods = event.getPacket().getModifier(); + try { + Player observer = event.getPlayer(); + org.bukkit.entity.Entity entity = event.getPacket().getEntityModifier(observer.getWorld()).read(0); + if (entity instanceof Player) { + Player watched = (Player) entity; + if (DisguiseAPI.isDisguised(watched.getName())) { + Disguise disguise = DisguiseAPI.getDisguise(watched); + if (event.getPacketID() == Packets.Server.NAMED_ENTITY_SPAWN) { + if (disguise.getType().isMob()) { + event.setCancelled(true); + DisguiseAPI.disguiseToPlayer(watched, observer, (MobDisguise) disguise); + } else if (disguise.getType().isMisc()) { + event.setCancelled(true); + DisguiseAPI.disguiseToPlayer(watched, observer, (MiscDisguise) disguise); + } else if (disguise.getType().isPlayer()) { + String name = (String) mods.read(1); + if (!name.equals(((PlayerDisguise) disguise).getName())) { + event.setCancelled(true); + DisguiseAPI.disguiseToPlayer(watched, observer, (PlayerDisguise) disguise); + } + } + } else if (!disguise.getType().isPlayer()) { + mods.write(1, modifyDataWatcher(disguise, watched)); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + } + + private List modifyDataWatcher(Disguise disguise, Player p) { + Entity e = disguise.getEntity(); + EntityPlayer hE = ((CraftPlayer) p).getHandle(); + e.setAirTicks(hE.getAirTicks()); + e.fireTicks = p.getFireTicks(); + a(e.getDataWatcher(), 0, e.fireTicks > 0); + e.setSprinting(p.isSprinting()); + e.setSneaking(p.isSneaking()); + if (e instanceof EntityLiving) { + EntityLiving lE = (EntityLiving) e; + lE.setInvisible(hE.isInvisible()); + lE.effects = hE.effects; + lE.updateEffects = true; + try { + Method method = EntityLiving.class.getDeclaredMethod("bA"); + method.setAccessible(true); + method.invoke(lE); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + return e.getDataWatcher().b(); + } + + protected void a(DataWatcher datawatcher, int i, boolean flag) { + byte b0 = datawatcher.getByte(0); + if (flag) { + datawatcher.watch(0, Byte.valueOf((byte) (b0 | 1 << i))); + } else { + datawatcher.watch(0, Byte.valueOf((byte) (b0 & ~(1 << i)))); + } + } +} \ No newline at end of file diff --git a/target/LibsDisguises.jar b/target/LibsDisguises.jar new file mode 100644 index 0000000000000000000000000000000000000000..56fcc2e9cc1aee7b63b328114e1acad424278284 GIT binary patch literal 17664 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 F{SR7?U-tk2 literal 0 HcmV?d00001 diff --git a/target/classes/me/libraryaddict/disguise/DisguiseTypes/Disguise.class b/target/classes/me/libraryaddict/disguise/DisguiseTypes/Disguise.class new file mode 100644 index 0000000000000000000000000000000000000000..c120167bccd7d91ced7756547dbbc2965133f0fc GIT binary patch literal 3814 zcmbVO*>@XP8UKwm(n#ZR;>fWRrOlqyvb?BS8d^EHq_*6M$c~XsQl|womd4J+vPO)? zcEVbqEM&HW|#aa%*QLw0@1!qE766>-6XH{&# zIR&3k@JX@#l!8yI_zXU);9&)yQ?Uu3SMUWDQ9KgD7X`_eRD2mE z8}^c6Czke2-!+{*kVv^?g5j`PG@U^S_r(4`o!uuS$U|11RAa%U+1WbB5!2AwiF=?d?g+F60L?mOYo4S)89Y zorJKfI7h2myr>Tq^fDdWkXa#dk4T~B ztfFHt<{ZnGu)Tr6Hf9S3(>r7p%T)rB2WCy9ke3i`LOCL?NaHikO6X`HNS)0YCD$nm zSQaiz*t52GUSK5n3sz1DYZf61AW0XX4jfIajR6rukeC|wiVvvGiTU23ZB;RB3|-rx!J^% z(6gp0&*GKHyo`$y;_rc_9=uChot`+B z%A_WbkMU&a=#lLGsp09NY$`RL%CZ?)wA16+^k{0B{i2sjMv>*)_nz9ZTGP}Na;%#B z%B*FNxr2Z2O@!1YeWw^XMy{aSM!sRFOE?f~>~N2~(a|R1r7bOd@X~x5^kR7&bd^ zajcAp>5yJFu#+Es8~KgugDhsRyJORG4f5n5?gBsXh>eiK$5oAAffVn#4BsV}_I-rw z;3sS&{RV^)!QI3G2DJjR}ufkV>{|e+}K0H!gRG!^$~5g4 zXCK5dH>cN;!6FlZ?_D=p}1AnN_e;6OB@;55)dMEQ>19MHePkgCVng7jzC{#Y$6X~uXJ{sxC^p5pi zJtX@N1v&y9@_8KW>j>;m2CJppBPuuOmn&fPaK}ww1^r$rXC4Vi7jFE$M;PIEBd~=T z1GA?ve=2jggV{@QJ;v;bs2t_Z4%W)YnDZcGbT4$)o1b+sfE@ECqn&hl?nI_X>zN*f nL0W!TQO+zmd~Oc6z;}ZTK{s7l1#|pK4DEkti-gmZ;Dh-;j#JX& literal 0 HcmV?d00001 diff --git a/target/classes/me/libraryaddict/disguise/DisguiseTypes/DisguiseType$EntityType.class b/target/classes/me/libraryaddict/disguise/DisguiseTypes/DisguiseType$EntityType.class new file mode 100644 index 0000000000000000000000000000000000000000..24bfd9feb2381c3b2bdace3d34f3b66c75ce1510 GIT binary patch literal 1348 zcmb_bZEq4m5PlX84vqs_K$Nz=qXN|;we=-5720Cbgj(aZO^ETs0Vi&A9Ok%d!oO0Q zSfkPOvp>o>dnE$VPqur>&dts>?0(lQ<>h+#==#Sr2O z86OHnDTJhu%ORwMd?aIqLE72YHW`$f<#1=PH~3&MsN0rh*qf%_?;CxFYQ1X|P2RM1 zd!V=5yyX_gc z9_gklsBY!*7ZFd|?6s*6@jADRmu|Od*n4`@q!ZaowEK=>KUY80kMyFcTb-ij*xc%r z^A}J`qTXxi=7DZ=k#Uq(vh*%xPyC&ddb-9f?yNJU|G{WGe?V94yyw)Lu*N%otQb;hw#&;&FWC*m(o<-zRx%@;2cAJMr%b@~R{)Z34>f}{; z@2ETx{m-;alPOn9^eSWYq@_v*L>wSV+&xM3ftfkcF@ZoBmvIFQ8PaZ%6iXR`eTMH8 z{*R3M6BvJNR5Q-KSAgiVNX#cPl0Q!9eL2jMR0t{IK4vPJ-@r*t AT>t<8 literal 0 HcmV?d00001 diff --git a/target/classes/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.class b/target/classes/me/libraryaddict/disguise/DisguiseTypes/DisguiseType.class new file mode 100644 index 0000000000000000000000000000000000000000..e94410f2bebac4aaab3f3bb8426a6221883db0b1 GIT binary patch literal 3914 zcmb`J>3bX16~@n4+qJAX6K8ee>;Y`2K}{f}sk2y?C(@9S}`5NzuK`mlfT|d_~dy%%3RAF@LJ) z0p`yX<(aQ4nq|JGsK8uSG{?NCsK|U>(HZ6&ib~8&iq0}GD{`1u6rE%KT+ux9O+{tq zTZ$H#zfe?RzO87H`HrIV%wH;cka<;6mH8`0HRi7s)tSFh)L{NLK)(yn?==buO)zNq)6*I!*c ztTHCB1~apEI%1)|=6F06i6t>z$uJSYPhTt^u~BR&W=1B`xtU~Q%*56~GnJgk#gdkh zz#tKcB_g@#)EJ(G5>s|Ol}sjbvZp^8HLN5OcqYvlrXsE+@lRTjEEgI~BlTp;Oc>+X z(T<~jh_-2EjMNF!j-w*`q+uCpF3x9Ln26KZ6Uk|*(eGY?&ptI}B8AGBmKBL{YTvY( zjv|2{jLS7Of8?$u^iC(O6PU4bwql!ek&aB-bIpAC71)!BSW||r(V^2Fr9%$?g?zce zy>obQsN*Ew=;B-vonkqa;zVO%wpdN)XUk9ml0A7wqq_&KbNLJTa5-Noh3$IPsgy>B zIxV`-S}f$tnS9mZZCZPIEBOU%+4rCOppH_p-h5*+gVtiT6rOF&&pY*S(~)r7t#(|~ zwwve0O&@V8PW_lh)Boiv%#N<2y&Z-!8hPty9atHt6d!7yw%c|}m3+NX#l?&d{$KX+ zJGF#UE8xW&9GcN+m0iyl<`enzEf;)vyf}+j#i>n}^Gn4lejX{5TSvzllo@Zc$fz_H zj&xMm$T75U&|Yj*3&j%-ciWowuiNe1ZXx;*|HWAf(I4oK8r|8+hcQGSr#}Vg-4H!O zf9Ao%A$pYl5~2(AP>BA@;cpyD93G|5hA2%_ABNoaNwfILBe0Lz%+@hYE*94(B;M$f3%i#-YxkK~oy_UV9zc z1C5S%aye}sh;L${yjXz`>jsC~98S)jD;DbT>R@}{%ipY#wrMNhgzM|Vx`CU$uX_ zO(6^w!c!q^6~b8|%oW04AuJZcWg(0f!fPSy7Q%5MOc%m;A*>g|eIXh^h#nB44TR_f zA(}ymeh{K1gy;&~L>IR;k-nMV9E=rp(}(FJq|rw)+6D5z;4*2KsOu_uUd2eGk0JWy znFsUninQh*L_S{8vzENWSIBpjyu6_6x&@zr5^7GvEA~l@y6IE&=~jvZAg55nm&kvG z0`FblN7vRX6#p5_?c(Uv5=rU@lju55G>`%M^Tp0^S$N>v;v5r|pyjZB^>6 z%wNGAA9eMP@&Uhkqm(^2O1a~IrF`s0DML3(x##976+KR0YaZNVqI5pv`nSlN?OWwp zrk=~xdy!VlSogZ)H8Sq=x#P7mUgvkm&Gj1s?s%g--=y4ezl=BQD+{)WFrZ^aPFC;~uv>&ZdXFpIBEqeD$Q5oAVNhS?3PU0c>%Fe9SA_TJ zt6gEA2)FCHD}+UOzrMy5_KR>p?^~vjlzxW@cj{~1vm6xRE`6Q5-*yqz&VBiHqi6Y_c0)NSG?eALKq#!a~2rKo+sK&Rgw!cjEhv|GiBJ~hIFeZE(w>N=iPCc zwhqRGu(f5~{70wNuzjKvJQTG_^(|YcgY_Y&&+1i$aIs0a==v(_0)(@!ZLKLBz>$x! wL9%4FWKYmUct>{c_~ae*CY1wUa`4N_Js(?w_Zz$|CpJ9nApFtV735%V1%*10w*UYD literal 0 HcmV?d00001 diff --git a/target/classes/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.class b/target/classes/me/libraryaddict/disguise/DisguiseTypes/MobDisguise.class new file mode 100644 index 0000000000000000000000000000000000000000..ddc0ce7249568019f60d9949105d7a15e9d36dd9 GIT binary patch literal 1629 zcmcIkT~E_s6n@^VYgy@FARyl=$k+-}z7b{+R3s$BL?M`PL%OZbSGJXO-OPRpUV7t= z7nmp}UKqX9-(-yEZ8rjmSsD{>-oEGboacGYNBi^lm#+Zkv8qBvGKwftDjm9lDHRf? z72HuFV@83YU{=8#L&VHii!K8@WRUOiGI!S*){>c$WfXbVF`c@Z&-0vXm=>01zLx|@IZHGo`d8IH+w1)MCkc8NtYvzu3%@c1v3g(F_nWE)rt5|NMMN-lm zw7O?kot*WUi{ZvE&1L45Su-`nu%MwGnubLzG3YIu=nL2^SYkIcEMtWs6(Hl#E@e3- z+{Hw&gyvKif^PVw!Wd?QW;OSVVLU(;46Fb6$%!v6da<$$=Ko$++7Vf-LV<=ZC3ghB zLiPhQTgNT>*{Jjfq6HL#r<+9g7&_?eBHlV+xpb>$T`AmlKv5)H_!*9?~qQ> zH6VS1)b)1b9FceE5nlNen()ffITYb&J4IAD+RoS+L4`eO391W393|4YN7#=91~7v` ztY8@TF@i0OdXg7?2^W&LDQ?h{yp17>4GDo1KT6n9tm6h1DN*M@MTdVOp5iMV*XhA9KLsz=3dfo(yo%9g;{HP1r NGGPc*MuiH-$v>`#mAU`` literal 0 HcmV?d00001 diff --git a/target/classes/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.class b/target/classes/me/libraryaddict/disguise/DisguiseTypes/PlayerDisguise.class new file mode 100644 index 0000000000000000000000000000000000000000..b129fc934fb045a7bceb20623dfde2e3b0326488 GIT binary patch literal 932 zcmbVL+iuf95Iy5uwsGAi&{E2!fnES7kuX9Cfj~%zixkOJ6{#xmxJg#-g5yNC1IqvK z0f3-LJn#X06fnC<9-uswdZpRfnc3qrm;Lec+jjuB(W>AAF1ir7LhwVC_mJR&L0uZ`N!Rj148l1u+NvPp-$B9 zc+gepzU;;pZrGFYflReI&y2Nk$_<%B!KaoSVQwPCpOC-_a1zQDGJ z9bEI^;<~_=ha2!cG|=?0fC}O6>6jC4o%G^7Swijah7j)jFN!H6w{b6g{OZ|Drhnqf z&uJI{uKRuebT`e6lw*}d`5~d;H`;_sHtuG2zzA!8yZw(&VUx#H@DvjqQ+L)J)?F;J z^!W4+1-1b7<|oisIISZTYPI)RZ1Hx4V%ThbLFpq$6tKi{4JDR>*8*ycx6W7_jJ9lj z7711Mn6HjA9KjEQ^(yEW2Ri~Q0;_D`m%w0C5&`eTwo>ymN*`Ep?7zy^xNNb#X}}Dd JaNb6({|4Tw=}-Uw literal 0 HcmV?d00001 diff --git a/target/classes/me/libraryaddict/disguise/LibsDisguises$1.class b/target/classes/me/libraryaddict/disguise/LibsDisguises$1.class new file mode 100644 index 0000000000000000000000000000000000000000..e558591d8e3ad4320a2e47039721fe2ac4fbc7fc GIT binary patch literal 4025 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