diff --git a/src/main/java/noppes/npcs/client/NoppesUtil.java b/src/main/java/noppes/npcs/client/NoppesUtil.java index 094ec7d7f..c29fabf27 100644 --- a/src/main/java/noppes/npcs/client/NoppesUtil.java +++ b/src/main/java/noppes/npcs/client/NoppesUtil.java @@ -86,8 +86,11 @@ public class NoppesUtil { float speedY = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlaySpeedY"); float scaleX = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlayScaleX"); float scaleY = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlayScaleY"); + float offsetX = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlayOffsetX"); + float offsetY = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlayOffsetY"); + float offsetZ = skinOverlayList.getCompoundTagAt(i).getFloat("SkinOverlayOffsetZ"); - skinOverlays.put(tagID,new SkinOverlayData(new ResourceLocation(tagString),glow,alpha,size,speedX,speedY,scaleX,scaleY)); + skinOverlays.put(tagID,new SkinOverlayData(new ResourceLocation(tagString),glow,alpha,size,speedX,speedY,scaleX,scaleY,offsetX,offsetY,offsetZ)); } 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 81c8342e4..d15e5df01 100644 --- a/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java +++ b/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java @@ -14,7 +14,9 @@ public class RenderCNPCPlayer extends RenderPlayer { public RenderCNPCPlayer() { } - private boolean preRenderOverlay(boolean firstPerson, EntityPlayer player, ResourceLocation overlayLocation, boolean glow, float alpha, float size, float speedX, float speedY, float scaleX, float scaleY) { + private boolean preRenderOverlay(boolean firstPerson, EntityPlayer player, ResourceLocation overlayLocation, boolean glow, + float alpha, float size, float speedX, float speedY, float scaleX, float scaleY, + float offsetX, float offsetY, float offsetZ) { try { this.bindTexture(overlayLocation); } catch (Exception exception) { @@ -23,8 +25,20 @@ public class RenderCNPCPlayer extends RenderPlayer { float renderTicks; if (firstPerson) { + 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); + } renderTicks = Client.fpSkinOverlayTicks.get(player.getUniqueID()); } else { + 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); + } renderTicks = Client.entitySkinOverlayTicks.get(player.getUniqueID());; } @@ -49,6 +63,7 @@ public class RenderCNPCPlayer extends RenderPlayer { GL11.glMatrixMode(GL11.GL_MODELVIEW); float scale = 1.005f * size; + GL11.glTranslatef(offsetX, offsetY, offsetZ); GL11.glScalef(scale, scale, scale); return true; @@ -77,14 +92,11 @@ 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(false, player, overlayData.location, overlayData.glow, overlayData.alpha, overlayData.size, overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY)) + if (!preRenderOverlay(false, player, overlayData.location, overlayData.glow, overlayData.alpha, overlayData.size, + overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY, + overlayData.offsetX, overlayData.offsetY, overlayData.offsetZ + )) 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); @@ -122,14 +134,11 @@ 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(true, player, overlayData.location, overlayData.glow, overlayData.alpha, overlayData.size, overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY)) + if (!preRenderOverlay(false, player, overlayData.location, overlayData.glow, overlayData.alpha, overlayData.size, + overlayData.speedX, overlayData.speedY, overlayData.scaleX, overlayData.scaleY, + overlayData.offsetX, overlayData.offsetY, overlayData.offsetZ + )) 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 7d8873bc3..8b6f0bdc7 100644 --- a/src/main/java/noppes/npcs/controllers/data/SkinOverlayData.java +++ b/src/main/java/noppes/npcs/controllers/data/SkinOverlayData.java @@ -14,7 +14,12 @@ public class SkinOverlayData { 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) { + public float offsetX = 0.0F; + public float offsetY = 0.0F; + public float offsetZ = 0.0F; + + public SkinOverlayData(ResourceLocation location, boolean glow, float alpha, float size, float speedX, float speedY, + float scaleX, float scaleY, float offsetX, float offsetY, float offsetZ) { this.location = location; this.glow = glow; this.alpha = alpha; @@ -23,5 +28,8 @@ public class SkinOverlayData { this.speedY = speedY; this.scaleX = scaleX; this.scaleY = scaleY; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; } } diff --git a/src/main/java/noppes/npcs/scripted/ScriptSkinOverlay.java b/src/main/java/noppes/npcs/scripted/ScriptSkinOverlay.java index 48de9516b..40127d044 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptSkinOverlay.java +++ b/src/main/java/noppes/npcs/scripted/ScriptSkinOverlay.java @@ -14,6 +14,10 @@ public class ScriptSkinOverlay implements ISkinOverlay { public float scaleX = 1.0F; public float scaleY = 1.0F; + public float offsetX = 0.0F; + public float offsetY = 0.0F; + public float offsetZ = 0.0F; + public ScriptSkinOverlay(String texture) { this.texture = texture; } @@ -68,4 +72,18 @@ public class ScriptSkinOverlay implements ISkinOverlay { return speedY; } + public void setOffset(float offsetX, float offsetY, float offsetZ) { + this.offsetX = offsetX; + this.offsetY = offsetY; + this.offsetZ = offsetZ; + } + public float getOffsetX() { + return offsetX; + } + public float getOffsetY() { + return offsetY; + } + public float getOffsetZ() { + return offsetZ; + } } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java index ed8cc7b16..f787d8821 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java @@ -541,6 +541,9 @@ public class ScriptPlayer extends ScriptLivingBase compound.setFloat("SkinOverlaySpeedY", overlay.getSpeedY()); compound.setFloat("SkinOverlayScaleX", overlay.getScaleX()); compound.setFloat("SkinOverlayScaleY", overlay.getScaleY()); + compound.setFloat("SkinOverlayOffsetX", overlay.getOffsetX()); + compound.setFloat("SkinOverlayOffsetY", overlay.getOffsetY()); + compound.setFloat("SkinOverlayOffsetZ", overlay.getOffsetZ()); 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 b3ef3d442..e516cbc8c 100644 --- a/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java +++ b/src/main/java/noppes/npcs/scripted/interfaces/ISkinOverlay.java @@ -22,4 +22,9 @@ public interface ISkinOverlay { void setSpeed(float speedX, float speedY); float getSpeedX(); float getSpeedY(); + + void setOffset(float offsetX, float offsetY, float offsetZ); + float getOffsetX(); + float getOffsetY(); + float getOffsetZ(); }