Initial work for custom disguises
This commit is contained in:
parent
80cf5cef27
commit
3c40a27c8f
@ -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,8 +263,12 @@ public enum DisguiseType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (name().equalsIgnoreCase("CUSTOM")) {
|
||||||
|
setEntityType(EntityType.UNKNOWN);
|
||||||
|
} else {
|
||||||
setEntityType(EntityType.valueOf(name()));
|
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());
|
||||||
|
|
||||||
|
if (disguise.getType() != DisguiseType.CUSTOM) {
|
||||||
mods.write(2, disguise.getType().getTypeId());
|
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user