From f9fcd6b9f8b5fc16721763fca5d66893d29557ea Mon Sep 17 00:00:00 2001 From: "Luis C.M" Date: Mon, 16 May 2022 23:27:11 -0500 Subject: [PATCH] Added alpha, size, scale, and speed attributes to player skin overlays. --- src/main/java/noppes/npcs/client/Client.java | 3 ++ .../java/noppes/npcs/client/NoppesUtil.java | 7 +++- .../client/renderer/RenderCNPCPlayer.java | 34 +++++++++++++---- .../controllers/data/SkinOverlayData.java | 14 ++++++- .../npcs/scripted/ScriptSkinOverlay.java | 37 +++++++++++++++++++ .../npcs/scripted/entity/ScriptPlayer.java | 5 +++ .../scripted/interfaces/ISkinOverlay.java | 14 +++++++ 7 files changed, 105 insertions(+), 9 deletions(-) diff --git a/src/main/java/noppes/npcs/client/Client.java b/src/main/java/noppes/npcs/client/Client.java index 0e801c6b9..48451bb6c 100644 --- a/src/main/java/noppes/npcs/client/Client.java +++ b/src/main/java/noppes/npcs/client/Client.java @@ -17,7 +17,10 @@ import noppes.npcs.controllers.data.SkinOverlayData; public class Client { public static HashMap customOverlays = new HashMap<>(); + public static HashMap> skinOverlays = new HashMap<>(); + public static HashMap fpSkinOverlayTicks = new HashMap<>(); + public static HashMap entitySkinOverlayTicks = new HashMap<>(); public static void sendData(EnumPacketServer enu, Object... obs) { ByteBuf buffer = Unpooled.buffer(); diff --git a/src/main/java/noppes/npcs/client/NoppesUtil.java b/src/main/java/noppes/npcs/client/NoppesUtil.java index 3e22578a3..094ec7d7f 100644 --- a/src/main/java/noppes/npcs/client/NoppesUtil.java +++ b/src/main/java/noppes/npcs/client/NoppesUtil.java @@ -81,8 +81,13 @@ public class NoppesUtil { String tagString = skinOverlayList.getCompoundTagAt(i).getString("SkinOverlayTexture"); boolean glow = skinOverlayList.getCompoundTagAt(i).getBoolean("SkinOverlayGlow"); float alpha = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlayAlpha"); + float size = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlaySize"); + float speedX = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlaySpeedX"); + float speedY = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlaySpeedY"); + float scaleX = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlayScaleX"); + float scaleY = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlayScaleY"); - skinOverlays.put(tagID,new SkinOverlayData(new ResourceLocation(tagString),glow,alpha)); + skinOverlays.put(tagID,new SkinOverlayData(new ResourceLocation(tagString),glow,alpha,size,speedX,speedY,scaleX,scaleY)); } Client.skinOverlays.put(player.getUniqueID(), skinOverlays); } diff --git a/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java b/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java index ed0cd10f6..81c8342e4 100644 --- a/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java +++ b/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java @@ -1,6 +1,6 @@ package noppes.npcs.client.renderer; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -11,16 +11,23 @@ import noppes.npcs.controllers.data.SkinOverlayData; import org.lwjgl.opengl.GL11; public class RenderCNPCPlayer extends RenderPlayer { - public RenderCNPCPlayer() { } - private boolean preRenderOverlay(EntityPlayer player, ResourceLocation overlayLocation, boolean glow, float alpha) { + private boolean preRenderOverlay(boolean firstPerson, EntityPlayer player, ResourceLocation overlayLocation, boolean glow, float alpha, float size, float speedX, float speedY, float scaleX, float scaleY) { try { this.bindTexture(overlayLocation); } catch (Exception exception) { return false; } + + float renderTicks; + if (firstPerson) { + renderTicks = Client.fpSkinOverlayTicks.get(player.getUniqueID()); + } else { + renderTicks = Client.entitySkinOverlayTicks.get(player.getUniqueID());; + } + // Overlay & Glow if (glow) { GL11.glDepthFunc(GL11.GL_LEQUAL); @@ -37,10 +44,11 @@ public class RenderCNPCPlayer extends RenderPlayer { GL11.glPushMatrix(); GL11.glMatrixMode(GL11.GL_TEXTURE); GL11.glLoadIdentity(); - GL11.glScalef(1.0F, 1.0F, 1.0F); + GL11.glTranslatef(renderTicks * 0.001F * speedX, renderTicks * 0.001F * speedY, 0.0F); + GL11.glScalef(scaleX, scaleY, 1.0F); GL11.glMatrixMode(GL11.GL_MODELVIEW); - float scale = 1.005f; + float scale = 1.005f * size; GL11.glScalef(scale, scale, scale); return true; @@ -69,8 +77,14 @@ public class RenderCNPCPlayer extends RenderPlayer { this.mainModel.render(p_77036_1_, p_77036_2_, p_77036_3_, p_77036_4_, p_77036_5_, p_77036_6_, p_77036_7_); if (Client.skinOverlays.containsKey(player.getUniqueID())) { + if (!Client.entitySkinOverlayTicks.containsKey(player.getUniqueID())) { + Client.entitySkinOverlayTicks.put(player.getUniqueID(), 1L); + } else { + long ticks = Client.entitySkinOverlayTicks.get(player.getUniqueID()); + Client.entitySkinOverlayTicks.put(player.getUniqueID(), ticks + 1); + } for (SkinOverlayData overlayData : Client.skinOverlays.get(player.getUniqueID()).values()) { - if (!preRenderOverlay(player, overlayData.location, overlayData.glow, overlayData.alpha)) + if (!preRenderOverlay(false, player, overlayData.location, overlayData.glow, overlayData.alpha, overlayData.size, overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY)) return; this.mainModel.render(p_77036_1_, p_77036_2_, p_77036_3_, p_77036_4_, p_77036_5_, p_77036_6_, p_77036_7_); postRenderOverlay(player); @@ -108,8 +122,14 @@ public class RenderCNPCPlayer extends RenderPlayer { this.modelBipedMain.bipedRightArm.render(0.0625F); if (Client.skinOverlays.containsKey(player.getUniqueID())) { + if (!Client.fpSkinOverlayTicks.containsKey(player.getUniqueID())) { + Client.fpSkinOverlayTicks.put(player.getUniqueID(), 1L); + } else { + long ticks = Client.fpSkinOverlayTicks.get(player.getUniqueID()); + Client.fpSkinOverlayTicks.put(player.getUniqueID(), ticks + 1); + } for (SkinOverlayData overlayData : Client.skinOverlays.get(player.getUniqueID()).values()) { - if (!preRenderOverlay(player, overlayData.location, overlayData.glow, overlayData.alpha)) + if (!preRenderOverlay(true, player, overlayData.location, overlayData.glow, overlayData.alpha, overlayData.size, overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY)) return; this.modelBipedMain.onGround = 0.0F; this.modelBipedMain.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, player); diff --git a/src/main/java/noppes/npcs/controllers/data/SkinOverlayData.java b/src/main/java/noppes/npcs/controllers/data/SkinOverlayData.java index 21fbe6b88..7d8873bc3 100644 --- a/src/main/java/noppes/npcs/controllers/data/SkinOverlayData.java +++ b/src/main/java/noppes/npcs/controllers/data/SkinOverlayData.java @@ -6,10 +6,22 @@ public class SkinOverlayData { public ResourceLocation location; public boolean glow; public float alpha = 1.0F; + public float size = 1.0F; - public SkinOverlayData(ResourceLocation location, boolean glow, float alpha) { + public float speedX = 0.0F; + public float speedY = 0.0F; + + public float scaleX = 1.0F; + public float scaleY = 1.0F; + + public SkinOverlayData(ResourceLocation location, boolean glow, float alpha, float size, float speedX, float speedY, float scaleX, float scaleY) { this.location = location; this.glow = glow; this.alpha = alpha; + this.size = size; + this.speedX = speedX; + this.speedY = speedY; + this.scaleX = scaleX; + this.scaleY = scaleY; } } diff --git a/src/main/java/noppes/npcs/scripted/ScriptSkinOverlay.java b/src/main/java/noppes/npcs/scripted/ScriptSkinOverlay.java index bd45ad216..48de9516b 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptSkinOverlay.java +++ b/src/main/java/noppes/npcs/scripted/ScriptSkinOverlay.java @@ -6,6 +6,13 @@ public class ScriptSkinOverlay implements ISkinOverlay { public String texture; public boolean glow; public float alpha = 1.0F; + public float size = 1.0F; + + public float speedX = 0.0F; + public float speedY = 0.0F; + + public float scaleX = 1.0F; + public float scaleY = 1.0F; public ScriptSkinOverlay(String texture) { this.texture = texture; @@ -31,4 +38,34 @@ public class ScriptSkinOverlay implements ISkinOverlay { public float getAlpha() { return alpha; } + + public void setSize(float size) { + this.size = size; + } + public float getSize() { + return size; + } + + public void setScale(float scaleX, float scaleY) { + this.scaleX = scaleX; + this.scaleY = scaleY; + } + public float getScaleX() { + return scaleX; + } + public float getScaleY() { + return scaleY; + } + + public void setSpeed(float speedX, float speedY) { + this.speedX = speedX; + this.speedY = speedY; + } + public float getSpeedX() { + return speedX; + } + public float getSpeedY() { + return speedY; + } + } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java index 65d243adf..ed8cc7b16 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java @@ -536,6 +536,11 @@ public class ScriptPlayer extends ScriptLivingBase compound.setString("SkinOverlayTexture", overlay.getTexture()); compound.setBoolean("SkinOverlayGlow", overlay.getGlow()); compound.setFloat("SkinOverlayAlpha", overlay.getAlpha()); + compound.setFloat("SkinOverlaySize", overlay.getSize()); + compound.setFloat("SkinOverlaySpeedX", overlay.getSpeedX()); + compound.setFloat("SkinOverlaySpeedY", overlay.getSpeedY()); + compound.setFloat("SkinOverlayScaleX", overlay.getScaleX()); + compound.setFloat("SkinOverlayScaleY", overlay.getScaleY()); if (!player.getEntityData().hasKey("SkinOverlayData")) { NBTTagList tagList = new NBTTagList(); diff --git a/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java b/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java index 9ea1d1886..b3ef3d442 100644 --- a/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java +++ b/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java @@ -8,4 +8,18 @@ public interface ISkinOverlay { void setGlow(boolean glow); boolean getGlow(); + + void setAlpha(float alpha); + float getAlpha(); + + void setSize(float size); + float getSize(); + + void setScale(float scaleX, float scaleY); + float getScaleX(); + float getScaleY(); + + void setSpeed(float speedX, float speedY); + float getSpeedX(); + float getSpeedY(); }