Skip to content

Commit

Permalink
feat: SkinOverlays and OptionsUtil changes
Browse files Browse the repository at this point in the history
Added OptionsUtil enums for the overlays.
Added SkinOverlays class to reduce duplicate code
  • Loading branch information
GeorgeV220 committed Feb 11, 2023
1 parent 644de26 commit cae60d7
Show file tree
Hide file tree
Showing 16 changed files with 164 additions and 175 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.georgev22.library.scheduler.SchedulerManager;
import com.georgev22.library.utilities.Utils;
import com.georgev22.skinoverlay.handler.SkinHandler.SkinHandler_;
import com.georgev22.skinoverlay.utilities.SkinOverlays;
import com.georgev22.skinoverlay.utilities.player.PlayerObject;
import com.google.common.collect.ImmutableList;
import com.google.common.hash.Hashing;
Expand Down Expand Up @@ -80,7 +81,7 @@ public SkinHandler_Legacy() {
}

@Override
public void updateSkin(@NotNull PlayerObject playerObject, boolean reset, @NotNull String skinName, Utils.@NotNull Callback<Boolean> callback) {
public void updateSkin(@NotNull PlayerObject playerObject, @NotNull String skinName, Utils.@NotNull Callback<Boolean> callback) {
try {
Player player = (Player) playerObject.player();
final Object entityPlayer = getHandleMethod.invoke(player);
Expand Down Expand Up @@ -240,29 +241,12 @@ public void updateSkin(@NotNull PlayerObject playerObject, boolean reset, @NotNu

//send new metadata

if (reset | skinName.equalsIgnoreCase("default")) {
fetchMethodAndInvoke(
dataWatcher.getClass(),
"set",
dataWatcher,
new Object[]{dataWatcherObject, (byte) (0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40)},
new Class[]{dataWatcherObject.getClass(), Object.class});
} else {
fetchMethodAndInvoke(
dataWatcher.getClass(),
"set",
dataWatcher,
new Object[]{dataWatcherObject, (byte)
((skinOverlay.getConfig().getBoolean("Options.overlays." + skinName + ".cape", false) ? 0x01 : 0x0) |
(skinOverlay.getConfig().getBoolean("Options.overlays." + skinName + ".jacket", false) ? 0x02 : 0x0) |
(skinOverlay.getConfig().getBoolean("Options.overlays." + skinName + ".left_sleeve", false) ? 0x04 : 0x0) |
(skinOverlay.getConfig().getBoolean("Options.overlays." + skinName + ".right_sleeve", false) ? 0x08 : 0x0) |
(skinOverlay.getConfig().getBoolean("Options.overlays." + skinName + ".left_pants", false) ? 0x10 : 0x0) |
(skinOverlay.getConfig().getBoolean("Options.overlays." + skinName + ".right_pants", false) ? 0x20 : 0x0) |
(skinOverlay.getConfig().getBoolean("Options.overlays." + skinName + ".hat", false) ? 0x40 : 0x0))},
new Class[]{dataWatcherObject.getClass(), Object.class}
);
}
fetchMethodAndInvoke(
dataWatcher.getClass(),
"set",
dataWatcher,
new Object[]{dataWatcherObject, SkinOverlays.getFlags(skinName)},
new Class[]{dataWatcherObject.getClass(), Object.class});

try {
sendPacket(playerConnection, invokeConstructor(getNMSClass("PacketPlayOutEntityMetadata"), player.getEntityId(), dataWatcher, false));
Expand Down Expand Up @@ -298,8 +282,8 @@ public void updateSkin(@NotNull PlayerObject playerObject, boolean reset, @NotNu
}

@Override
public void updateSkin(@NotNull PlayerObject playerObject, boolean reset, @NotNull String skinName, Property property, Utils.@NotNull Callback<Boolean> callback) {
updateSkin(playerObject, reset, skinName, callback);
public void updateSkin(@NotNull PlayerObject playerObject, @NotNull String skinName, Property property, Utils.@NotNull Callback<Boolean> callback) {
updateSkin(playerObject, skinName, callback);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ public void onEnable() {
getProxy().getScheduler().schedule(this, () -> SchedulerManager.getScheduler().mainThreadHeartbeat(tick++), 0, 50L, TimeUnit.MILLISECONDS);
SkinOverlay.getInstance().setSkinHandler(new SkinHandler() {
@Override
public void updateSkin(@NotNull PlayerObject playerObject, boolean reset, @NotNull String skinName, Utils.@NotNull Callback<Boolean> callback) {
if (reset) {
public void updateSkin(@NotNull PlayerObject playerObject, @NotNull String skinName, Utils.@NotNull Callback<Boolean> callback) {
if (skinName.equalsIgnoreCase("default")) {
new BungeeCordPluginMessageUtils().sendDataTooAllServers("reset", playerObject.playerUUID().toString(), "default");
} else {
new BungeeCordPluginMessageUtils().sendDataTooAllServers("change", playerObject.playerUUID().toString(), skinName);
Expand All @@ -73,8 +73,8 @@ public void updateSkin(@NotNull PlayerObject playerObject, boolean reset, @NotNu
}

@Override
public void updateSkin(@NotNull PlayerObject playerObject, boolean reset, @NotNull String skinName, Property property, Utils.@NotNull Callback<Boolean> callback) {
if (reset) {
public void updateSkin(@NotNull PlayerObject playerObject, @NotNull String skinName, Property property, Utils.@NotNull Callback<Boolean> callback) {
if (skinName.equalsIgnoreCase("default")) {
new BungeeCordPluginMessageUtils().sendDataTooAllServers("resetWithProperties", playerObject.playerUUID().toString(), "default", property.getName(), property.getValue(), property.getSignature());
} else {
new BungeeCordPluginMessageUtils().sendDataTooAllServers("changeWithProperties", playerObject.playerUUID().toString(), skinName, property.getName(), property.getValue(), property.getSignature());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public Boolean onSuccess() {
@Override
public Boolean onSuccess() {
atomicBoolean.set(true);
Utilities.updateSkin(user.getPlayer().orElseThrow(), true, false);
Utilities.updateSkin(user.getPlayer().orElseThrow(), true);
UserData.getLoadedUsers().append(userData, userData.user());
return atomicBoolean.get();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,23 @@ public abstract class SkinHandler {
* Update the skin for the specified {@link PlayerObject}
*
* @param playerObject Player's {@link PlayerObject} object.
* @param reset Default skin.
* @param skinName Skin name (eg default or allay)
* @param callback Callback
*/
public abstract void updateSkin(
@NotNull final PlayerObject playerObject,
final boolean reset,
@NotNull final String skinName,
@NotNull final Utils.Callback<Boolean> callback);

/**
* Update the skin for the specified {@link PlayerObject} and {@link Property}
*
* @param playerObject Player's {@link PlayerObject} object.
* @param reset Default skin.
* @param skinName Skin name (eg default or allay)
* @param property {@link Property} to set
* @param callback Callback
*/
public abstract void updateSkin(@NotNull final PlayerObject playerObject,
final boolean reset,
@NotNull final String skinName,
final Property property,
@NotNull final Utils.Callback<Boolean> callback);
Expand Down Expand Up @@ -272,13 +268,13 @@ public Property getSkin(@NotNull final PlayerObject playerObject) throws IOExcep
public static class SkinHandler_ extends SkinHandler {

@Override
public void updateSkin(@NotNull PlayerObject playerObject, boolean reset, @NotNull String skinName, final Utils.@NotNull Callback<Boolean> callback) {
public void updateSkin(@NotNull PlayerObject playerObject, @NotNull String skinName, final Utils.@NotNull Callback<Boolean> callback) {
throw new UnsupportedOperationException("[SkinHandler]: updateSkin(); Unsupported Minecraft Version");
}

@Override
public void updateSkin(@NotNull PlayerObject playerObject, boolean reset, @NotNull String skinName, Property property, final Utils.@NotNull Callback<Boolean> callback) {
updateSkin(playerObject, reset, skinName, callback);
public void updateSkin(@NotNull PlayerObject playerObject, @NotNull String skinName, Property property, final Utils.@NotNull Callback<Boolean> callback) {
updateSkin(playerObject, skinName, callback);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,20 @@ public enum OptionsUtil {
DISCORD("discord", false, Optional.empty()),

UPDATER("updater.enabled", true, Optional.empty()),

OVERLAY_CAPE("overlays.%s.cape", false, Optional.empty()),

OVERLAY_JACKET("overlays.%s.jacket", false, Optional.empty()),

OVERLAY_LEFT_SLEEVE("overlays.%s.left_sleeve", false, Optional.empty()),

OVERLAY_RIGHT_SLEEVE("overlays.%s.right_sleeve", false, Optional.empty()),

OVERLAY_LEFT_PANTS("overlays.%s.left_pants", false, Optional.empty()),

OVERLAY_RIGHT_PANTS("overlays.%s.right_pants", false, Optional.empty()),

OVERLAY_HAT("overlays.%s.hat", false, Optional.empty()),
;
private static final SkinOverlay mainPlugin = SkinOverlay.getInstance();
private final String pathName;
Expand Down Expand Up @@ -100,6 +114,43 @@ public String getStringValue() {
return getStringList().stream().map(Color::from).collect(Collectors.toList());
}

public boolean getBooleanValue(String arg) {
return mainPlugin.getConfig().getBoolean(String.format(getPath(), arg), Boolean.parseBoolean(String.valueOf(getDefaultValue())));
}

public Object getObjectValue(String arg) {
return mainPlugin.getConfig().get(getPath(), getDefaultValue());
}

public String getStringValue(String arg) {
return mainPlugin.getConfig().getString(getPath(), String.valueOf(getDefaultValue()));
}

public @NotNull Long getLongValue(String arg) {
return mainPlugin.getConfig().getLong(getPath(), Long.parseLong(String.valueOf(getDefaultValue())));
}

public @NotNull Integer getIntValue(String arg) {
return mainPlugin.getConfig().getInt(getPath(), Integer.parseInt(String.valueOf(getDefaultValue())));
}

public @NotNull Double getDoubleValue(String arg) {
return mainPlugin.getConfig().getDouble(getPath(), Double.parseDouble(String.valueOf(getDefaultValue())));
}

public @NotNull List<String> getStringList(String arg) {
return mainPlugin.getConfig().getStringList(getPath());
}

/**
* Converts and return a String List of color codes to a List of Color classes that represent the colors.
*
* @return a List of Color classes that represent the colors.
*/
public @NotNull List<Color> getColors(String arg) {
return getStringList().stream().map(Color::from).collect(Collectors.toList());
}

/**
* Returns the path.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.georgev22.skinoverlay.utilities;

import com.georgev22.skinoverlay.SkinOverlay;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.jetbrains.annotations.NotNull;


public class SkinOverlays {

public static byte getFlags(@NotNull String skinName) {
SkinOverlay.getInstance().getLogger().info(OptionsUtil.OVERLAY_JACKET.getBooleanValue(skinName) + " " + String.format(OptionsUtil.OVERLAY_JACKET.getPath(), skinName));
return skinName.equalsIgnoreCase("default") ?
(byte) (Overlays.CAPE.flag | Overlays.JACKET.flag | Overlays.LEFT_SLEEVE.flag | Overlays.RIGHT_SLEEVE.flag | Overlays.LEFT_PANTS.flag | Overlays.RIGHT_PANTS.flag | Overlays.HEAD.flag) :
(byte) ((OptionsUtil.OVERLAY_CAPE.getBooleanValue(skinName) ? Overlays.CAPE.flag : Overlays.NOTHING.flag) |
(OptionsUtil.OVERLAY_JACKET.getBooleanValue(skinName) ? Overlays.JACKET.flag : Overlays.NOTHING.flag) |
(OptionsUtil.OVERLAY_LEFT_SLEEVE.getBooleanValue(skinName) ? Overlays.LEFT_SLEEVE.flag : Overlays.NOTHING.flag) |
(OptionsUtil.OVERLAY_RIGHT_SLEEVE.getBooleanValue(skinName) ? Overlays.RIGHT_SLEEVE.flag : Overlays.NOTHING.flag) |
(OptionsUtil.OVERLAY_LEFT_PANTS.getBooleanValue(skinName) ? Overlays.LEFT_PANTS.flag : Overlays.NOTHING.flag) |
(OptionsUtil.OVERLAY_RIGHT_PANTS.getBooleanValue(skinName) ? Overlays.RIGHT_PANTS.flag : Overlays.NOTHING.flag) |
(OptionsUtil.OVERLAY_HAT.getBooleanValue(skinName) ? Overlays.HEAD.flag : Overlays.NOTHING.flag));
}

@AllArgsConstructor
@Getter
public enum Overlays {
NOTHING((byte) 0x00),
CAPE((byte) 0x01),
JACKET((byte) 0x02),
LEFT_SLEEVE((byte) 0x04),
RIGHT_SLEEVE((byte) 0x08),
LEFT_PANTS((byte) 0x10),
RIGHT_PANTS((byte) 0x20),
HEAD((byte) 0x40);

private final byte flag;

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public static void setSkin(String skinName, @NotNull PlayerObject playerObject,
UserData userData = UserData.getUser(playerObject);
userData.setSkinName(skinName);
userData.setProperty(new Property(properties[0], properties[1], properties[2]));
updateSkin(playerObject, true, false);
updateSkin(playerObject, true);
}

public static void setSkin(ImageSupplier imageSupplier, String skinName, PlayerObject playerObject, @Nullable CommandIssuer commandIssuer) {
Expand All @@ -67,7 +67,7 @@ public static void setSkin(ImageSupplier imageSupplier, String skinName, PlayerO
pm.put("textures", new Property("textures", object.getAsJsonObject().get("value").getAsString(), object.getAsJsonObject().get("signature").getAsString()));
userData.setSkinName(skinName);
userData.setProperty(new Property("textures", object.getAsJsonObject().get("value").getAsString(), object.getAsJsonObject().get("signature").getAsString()));
Utilities.updateSkin(playerObject, true, true);
Utilities.updateSkin(playerObject, true);
if (commandIssuer == null) {
MessagesUtil.RESET.msgConsole(new HashObjectMap<String, String>().append("%player%", playerObject.playerName()), true);
} else {
Expand Down Expand Up @@ -107,7 +107,7 @@ public static void setSkin(ImageSupplier imageSupplier, String skinName, PlayerO
String texturesSignature = texture.get("signature").getAsString();
userData.setSkinName(skinName);
userData.setProperty(new Property("textures", texturesValue, texturesSignature));
Utilities.updateSkin(playerObject, true, false);
Utilities.updateSkin(playerObject, true);
if (commandIssuer == null) {
MessagesUtil.DONE.msgConsole(new HashObjectMap<String, String>().append("%player%", playerObject.playerName()).append("%url%", texture.get("url").getAsString()), true);
} else {
Expand All @@ -125,7 +125,7 @@ public static void setSkin(ImageSupplier imageSupplier, String skinName, PlayerO
});
}

public static void updateSkin(@NotNull PlayerObject playerObject, boolean forOthers, boolean reset) {
public static void updateSkin(@NotNull PlayerObject playerObject, boolean forOthers) {
SchedulerManager.getScheduler().runTaskLater(skinOverlay.getClass(), () -> {
UserData userData = UserData.getUser(playerObject);
GameProfile gameProfile = playerObject.gameProfile();
Expand All @@ -138,7 +138,7 @@ public static void updateSkin(@NotNull PlayerObject playerObject, boolean forOth
org.bukkit.entity.Player player = (org.bukkit.entity.Player) playerObject.player();
player.hidePlayer((org.bukkit.plugin.Plugin) skinOverlay.getSkinOverlay().plugin(), player);
player.showPlayer((org.bukkit.plugin.Plugin) skinOverlay.getSkinOverlay().plugin(), player);
skinOverlay.getSkinHandler().updateSkin(playerObject, reset, userData.getSkinName(), new Utils.Callback<>() {
skinOverlay.getSkinHandler().updateSkin(playerObject, userData.getSkinName(), new Utils.Callback<>() {
@Override
public Boolean onSuccess() {
if (forOthers) {
Expand All @@ -158,7 +158,7 @@ public Boolean onFailure() {
});
}, 20L);
} else {
skinOverlay.getSkinHandler().updateSkin(playerObject, reset, userData.getSkinName(), userData.getSkinProperty(), new Utils.Callback<>() {
skinOverlay.getSkinHandler().updateSkin(playerObject, userData.getSkinName(), userData.getSkinProperty(), new Utils.Callback<>() {
@Override
public Boolean onSuccess() {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ public void updateSkin() {
if (userData.getSkinName().equals("default")) {
return;
}
Utilities.updateSkin(playerObject(), true, false);
Utilities.updateSkin(playerObject(), true);
}


Expand Down

0 comments on commit cae60d7

Please sign in to comment.