aboutsummaryrefslogtreecommitdiff
path: root/features/cosmetics/cosmetic/dragon/dragonWings.js
diff options
context:
space:
mode:
Diffstat (limited to 'features/cosmetics/cosmetic/dragon/dragonWings.js')
-rw-r--r--features/cosmetics/cosmetic/dragon/dragonWings.js316
1 files changed, 316 insertions, 0 deletions
diff --git a/features/cosmetics/cosmetic/dragon/dragonWings.js b/features/cosmetics/cosmetic/dragon/dragonWings.js
new file mode 100644
index 0000000..8638b93
--- /dev/null
+++ b/features/cosmetics/cosmetic/dragon/dragonWings.js
@@ -0,0 +1,316 @@
+import Cosmetic from "../../cosmetic.js";
+
+const ModelDragon = Java.type("net.minecraft.client.model.ModelDragon")
+
+const GlStateManager = Java.type("net.minecraft.client.renderer.GlStateManager");
+const Essential = Java.type("gg.essential.Essential")
+const EssentialCosmeticSlot = Java.type("gg.essential.cosmetics.CosmeticSlot")
+
+const FACING = Java.type("net.minecraft.block.BlockDirectional").field_176387_N
+let dragon = new ModelDragon(0) //too lazy to make my own model so i just yoink it from modelDragon lmfao
+let textures = {
+ classic: new Image(javax.imageio.ImageIO.read(new java.io.File("./config/ChatTriggers/modules/SoopyV2/features/cosmetics/textures/dragon/classic.png"))),
+ purple: new Image(javax.imageio.ImageIO.read(new java.io.File("./config/ChatTriggers/modules/SoopyV2/features/cosmetics/textures/dragon/purple.png")))
+}
+let wing = getField(dragon, "field_78225_k")
+let wingTip = getField(dragon, "field_78222_l")
+const GL11 = Java.type("org.lwjgl.opengl.GL11");
+
+class DragonWings extends Cosmetic {
+ constructor(player, parent) {
+ super(player, parent);
+
+ this.settings = this.parent.getPlayerCosmeticSettings(this.player, "dragon_wings")
+
+ this.animOffset = Math.random()*20*Math.PI
+ this.lastRender = Date.now()
+
+ this.lastFlapSound = this.animOffset
+ }
+ onRender(ticks){
+
+ if(this.player.getPlayer().func_98034_c(Player.getPlayer())){
+ return
+ }
+
+ if(!this.parent.firstPersonVisable.getValue() && this.player === Player && Client.getMinecraft().field_71474_y.field_74320_O === 0){
+ return
+ }
+
+ // return;
+ // wing.func_78785_a(1)
+
+ let timeSince = (Date.now()-this.lastRender)/1000
+ this.lastRender = Date.now()
+
+ let rotation = this.player.getPlayer().field_70761_aq+(this.player.getPlayer().field_70761_aq-this.player.getPlayer().field_70760_ar)*ticks
+
+ let horisontalSpeed = Math.sqrt((this.player.getPlayer().field_70165_t-this.player.getPlayer().field_70142_S)**2+(this.player.getPlayer().field_70161_v-this.player.getPlayer().field_70136_U)**2)
+
+ let verticleSpeed = this.player.getPlayer().field_70163_u-this.player.getPlayer().field_70137_T
+
+ this.animOffset += Math.min(1, horisontalSpeed)*10*timeSince+1*timeSince
+
+ let flapAmountMultiplyerNoEnd = 1
+ let flapAmountMultiplyer = 1
+
+ let wingEndOffsetThing = 0
+
+ flapAmountMultiplyerNoEnd += Math.min(5, (horisontalSpeed*5))
+ let flapMainOffsetThing = 0
+
+ let wingBackAmount = 0
+
+ if(this.player.getPlayer().field_70172_ad > 0){ //damage tick
+ this.animOffset += 5*timeSince
+ }
+
+
+ // if((this.player === Player &&this.player.getPlayer().field_71075_bZ.field_75100_b) || (this.player !== Player && Math.abs(verticleSpeed)<0.2 && !this.player.getPlayer().field_70122_E)){//playerCapabilities.isFlying
+ if((verticleSpeed>-0.2) && !this.player.getPlayer().field_70122_E){ //flying
+
+ if(this.animOffset-this.lastFlapSound > 2*Math.PI){
+
+ let dist = Math.sqrt((Player.getX()-this.player.getX())**2+(Player.getY()-this.player.getY())**2+(Player.getZ()-this.player.getZ())**2)+1
+
+ World.playSound("mob.enderdragon.wings", (this.settings.scale*15)*Math.min(1, 50/(dist*dist)), 1)
+ this.lastFlapSound = this.animOffset-this.animOffset%(Math.PI*2)
+ }
+
+ this.animOffset += 5*timeSince //flap in mid air
+
+ flapAmountMultiplyer *= 1.75 //flap harder
+
+ if(this.player === Player && Client.getMinecraft().field_71474_y.field_74320_O === 0){
+ if(!this.parent.lessFirstPersonVisable.getValue()){
+ flapAmountMultiplyerNoEnd += 0.4
+ flapMainOffsetThing = 0.3
+ }
+ }else{
+ flapAmountMultiplyer *= 1.25
+ flapAmountMultiplyer *= 0.9
+ flapMainOffsetThing = 0.1
+ wingEndOffsetThing+= -0.1
+ }
+
+ wingEndOffsetThing += -0.75
+
+ if(verticleSpeed > 0){
+ this.animOffset += verticleSpeed*25*timeSince //flap when flying upwards
+ }
+ }else{
+ if(this.lastFlapSound < this.animOffset-this.animOffset%(Math.PI*2)){
+ this.lastFlapSound = this.animOffset-this.animOffset%(Math.PI*2)
+ }
+ }
+ if(verticleSpeed < -0.5){
+ wingBackAmount = Math.min(1, (verticleSpeed+0.5)*-1.5) //lift wings back further ur falling
+
+ this.animOffset += (verticleSpeed+0.5)*-3*timeSince
+ }
+
+ GlStateManager.func_179094_E(); // pushMatrix
+ Tessellator.colorize(this.settings.color.r, this.settings.color.g, this.settings.color.b);
+
+ if(this.player !== Player){
+ Tessellator.translate(
+ (this.player.getPlayer().field_70142_S + (this.player.getPlayer().field_70165_t-this.player.getPlayer().field_70142_S) * ticks) - (Player.getPlayer().field_70142_S + (Player.getPlayer().field_70165_t-Player.getPlayer().field_70142_S) * ticks),
+ (this.player.getPlayer().field_70137_T + (this.player.getPlayer().field_70163_u-this.player.getPlayer().field_70137_T) * ticks) - (Player.getPlayer().field_70137_T + (Player.getPlayer().field_70163_u-Player.getPlayer().field_70137_T) * ticks),
+ (this.player.getPlayer().field_70136_U + (this.player.getPlayer().field_70161_v-this.player.getPlayer().field_70136_U) * ticks) - (Player.getPlayer().field_70136_U + (Player.getPlayer().field_70161_v-Player.getPlayer().field_70136_U) * ticks))
+ }
+
+ if(textures[this.settings.texture || "classic"]){
+ Tessellator.bindTexture(textures[this.settings.texture || "classic"]) //bind texture
+ }else{
+ Tessellator.bindTexture(textures.classic) //bind texture
+ }
+
+ if(this.player.getPlayer().field_70154_o){
+ rotation = this.player.getPlayer().field_70759_as+(this.player.getPlayer().field_70759_as-this.player.getPlayer().field_70758_at)*ticks
+ }
+ if(!this.player.getPlayer().func_70608_bn()){ //dont rotate when in bed
+ Tessellator.rotate((180-rotation),0,1,0)
+
+ Tessellator.translate(0,1.2,0.1)
+
+ if(this.player.getPlayer().func_70093_af()){ //isSneaking
+ Tessellator.translate(0, -0.125,0)
+ Tessellator.rotate(-20, 1,0,0)
+ if(this.player === Player && Client.getMinecraft().field_71474_y.field_74320_O === 0){}else{
+ Tessellator.translate(0, -0.125,0)
+ }
+ }
+
+ if(this.player === Player && Client.getMinecraft().field_71474_y.field_74320_O === 0){
+ //Make wings less scuffed when in first person looking down/up
+ Tessellator.translate(0, 0.25, 0.003*(this.player.getPitch()))
+ }
+ }
+
+
+ //Higher = more elytra like
+ wing.field_78796_g = 0.25; //rotateAngleY
+
+ let shouldStandingStillWingThing = false
+
+ let changeStandingStillWingThing = 0
+
+ if(horisontalSpeed < 0.01){
+ if(!((verticleSpeed>-0.2) && !this.player.getPlayer().field_70122_E)){ //not flying
+ let amt = (this.animOffset+Math.PI/2)%(20*Math.PI)
+ if(amt < 1*Math.PI){
+ if(amt > 0.65*Math.PI && (2*Math.PI+this.animOffset)-this.lastFlapSound > 2*Math.PI){
+
+ let dist = Math.sqrt((Player.getX()-this.player.getX())**2+(Player.getY()-this.player.getY())**2+(Player.getZ()-this.player.getZ())**2)+1
+
+ World.playSound("mob.enderdragon.wings", (Math.max(0.005,this.settings.scale-0.005)*25)*Math.min(1, 50/Math.min(1,dist*dist))/50, 1-(Math.max(0.005,this.settings.scale-0.005)*25))
+ this.lastFlapSound = 2*Math.PI+(this.animOffset)-this.animOffset%(Math.PI*2)
+ }
+ this.animOffset += 2*timeSince*Math.min(1,(amt/(1*Math.PI))*2)
+
+ flapAmountMultiplyer += (amt/(1*Math.PI))/2
+ }else if(amt < 2*Math.PI){
+ this.animOffset += 2*timeSince*Math.min(1,(1-(amt/(1*Math.PI)-1))*2)
+
+ flapAmountMultiplyer += (1-(amt/(1*Math.PI)-1))/2
+ }
+ }
+ if(this.player.getPlayer().func_70093_af()){ //isSneaking
+ if(this.player.getPlayer().field_70125_A > 20){
+ shouldStandingStillWingThing = true
+ Tessellator.translate(0, 0,0.1)
+ changeStandingStillWingThing = Math.max(0,this.player.getPlayer().field_70125_A/600)
+ }
+ }
+ }
+
+ if(shouldStandingStillWingThing){
+ wing.field_78796_g = 0.25+(changeStandingStillWingThing)*3
+ }
+
+ if(this.player.getPlayer().func_70608_bn()){ //player in bed
+
+ try{ //try catch incase no bed at that location
+ let facing = World.getWorld().func_180495_p(this.player.getPlayer().field_71081_bT).func_177229_b(FACING).func_176736_b() //0-3 is S-W-N-E
+
+ let rotation = 0
+ switch(facing){
+ case 0:
+ rotation = 180
+ Tessellator.translate(0, 0,-0.5)
+ break
+ case 1:
+ rotation = 90
+ Tessellator.translate(0.5, 0,0)
+ break
+ case 2:
+ rotation = 0
+ Tessellator.translate(0, 0,0.5)
+ break
+ case 3:
+ rotation = 270
+ Tessellator.translate(-0.5, 0,0)
+ break
+ }
+ // console.log(rotation)
+ // console.log(World.getBlockAt(this.player.getX(), this.player.getY(), this.player.getZ()).getState().func_177229_b(FACING))
+ Tessellator.translate(0, 0.75-this.settings.scale*100,0)
+ Tessellator.rotate(rotation, 0, 1, 0)
+
+ wing.field_78795_f = 0; //rotateAngleX
+
+ wing.field_78808_h = (-0.5+Math.sin(this.animOffset/5)*0.1)*this.settings.scale*100; //rotateAngleZ
+
+
+ wingTip.field_78808_h = -2.20+Math.sin(this.animOffset/5)*0.1
+ }catch(e){}
+ }else if(wingBackAmount === 0){
+ //tilt
+ let wing_tilt_offset = -Math.min(0.8, horisontalSpeed*3) //When go faster tilt wing back so its in direction of wind
+
+
+ if(shouldStandingStillWingThing){
+ wing_tilt_offset += (changeStandingStillWingThing)*4
+ }
+
+ wing.field_78795_f = 0.75 - Math.cos(this.animOffset) * 0.2+wing_tilt_offset; //rotateAngleX
+
+
+ let wing_goback_amount = 0.15/(Math.min(1, horisontalSpeed)*3+0.25)
+ let temp_wing_thing = 1
+
+ if(shouldStandingStillWingThing){
+ wing_goback_amount /= 1+(changeStandingStillWingThing)/50
+ flapAmountMultiplyer /= 1+(changeStandingStillWingThing)/50
+
+ temp_wing_thing += changeStandingStillWingThing*50
+ }
+
+ let temp_horis_wingthing = 0
+ if(shouldStandingStillWingThing){
+ temp_horis_wingthing = -(changeStandingStillWingThing)*0.75
+ }
+
+ wing.field_78808_h = (Math.sin(this.animOffset)/temp_wing_thing + 0.125) * wing_goback_amount*(1+(flapAmountMultiplyer-1)*1)*flapAmountMultiplyerNoEnd -0.4-wing_tilt_offset/3+temp_horis_wingthing+flapMainOffsetThing; //rotateAngleZ
+
+
+ wingTip.field_78808_h = -((Math.sin((this.animOffset+1.5+(1-temp_wing_thing)/8.5))/(1+(temp_wing_thing-1)/3) + 0.5)) * 0.75*(1+(flapAmountMultiplyer-1)*1)/(1+temp_horis_wingthing) - (1-flapAmountMultiplyer)*2-(1-temp_wing_thing)/10+wingEndOffsetThing; //rotateAngleZ
+ }else{
+ //tilt
+ let wing_tilt_offset = -Math.min(0.8, horisontalSpeed*3) //When go faster tilt wing back so its in direction of wind
+ wing.field_78795_f = 0.75 - Math.cos(this.animOffset) * 0.2+wing_tilt_offset-wingBackAmount/2; //rotateAngleX
+
+
+ wing.field_78808_h = -wingBackAmount; //rotateAngleZ
+
+
+ wingTip.field_78808_h = -((Math.sin((this.animOffset))*0.5 + 0.3))
+ }
+
+ GL11.glDisable(GL11.GL_CULL_FACE)
+
+ let wing_center_dist = ((0-Math.log(1000*this.settings.scale+0.01)-2)-100000*this.settings.scale*this.settings.scale)/1000
+
+ Tessellator.translate(-wing_center_dist, 0, 0)
+ Tessellator.scale(this.settings.scale, this.settings.scale, this.settings.scale)
+ wing.func_78791_b(1) //render left wing
+
+ Tessellator.translate(2*wing_center_dist/this.settings.scale, 0, 0)
+ Tessellator.scale(-1, 1, 1)
+ wing.func_78791_b(1) //render right wing
+
+ GL11.glEnable(GL11.GL_CULL_FACE)
+
+ GlStateManager.func_179121_F(); // popMatrix
+ }
+
+ onTick(){
+ if(!this.player.getPlayer().getEssentialCosmetics()) return
+
+ let wingCosmetic = this.player.getPlayer().getEssentialCosmetics().get(EssentialCosmeticSlot.WINGS)
+ if(wingCosmetic !== null){
+ this.player.getPlayer().getEssentialCosmeticModels().get(Essential.instance.getConnectionManager().getCosmeticsManager().getCosmetic(wingCosmetic)).getModel().getModel().boneList.forEach(b=>{
+ b.isHidden = true
+ })
+ }else{
+ let fullBodyCosmetic = this.player.getPlayer().getEssentialCosmetics().get(EssentialCosmeticSlot.FULL_BODY)
+ if(fullBodyCosmetic === "DRAGON_ONESIE_2"){
+ this.player.getPlayer().getEssentialCosmeticModels().get(Essential.instance.getConnectionManager().getCosmeticsManager().getCosmetic(fullBodyCosmetic)).getModel().getModel().boneList.forEach(b=>{
+ if(b.boxName === "wing_left_1" || b.boxName === "wing_right_1")b.isHidden = true
+ })
+ }
+ }
+ }
+}
+
+export default DragonWings;
+
+
+function getField(e, field){
+
+ let field2 = e.class.getDeclaredField(field);
+
+ field2.setAccessible(true)
+
+ return field2.get(e)
+} \ No newline at end of file