From d3df0895aaaf944ea87026f4eaaaadd411c0c4a4 Mon Sep 17 00:00:00 2001 From: Zeshan Aslam Date: Tue, 25 Jul 2017 13:24:12 -0400 Subject: [PATCH] Added option to limit health style symbols and more - Added option to limit health style symbols - Using reflection for latest version --- config.yml | 4 +-- .../zeshanaslam/actionhealth/HealthUtil.class | Bin 9176 -> 9178 bytes .../zeshanaslam/actionhealth/PreAction.class | Bin 1762 -> 3002 bytes .../actionhealth/SettingsManager.class | Bin 6101 -> 6256 bytes .../zeshanaslam/actionhealth/HealthUtil.java | 20 +++++------ .../zeshanaslam/actionhealth/PreAction.java | 33 ++++++++++++++---- .../actionhealth/SettingsManager.java | 9 +++++ 7 files changed, 47 insertions(+), 19 deletions(-) diff --git a/config.yml b/config.yml index d4f23f3..3e911d8 100644 --- a/config.yml +++ b/config.yml @@ -54,8 +54,8 @@ Disabled regions: # Disable ActionHealth in regions where PvP is denied. Region PvP: true -# When set to true and style health is enabled this will limit the health symbols to 10. -Limit Health: true +# Limits the health style to a certain amount of symbols. +Limit Health: 10 # Saves players /actionhealth toggle state. Remember Toggle: false diff --git a/out/production/ActionHealth/com/zeshanaslam/actionhealth/HealthUtil.class b/out/production/ActionHealth/com/zeshanaslam/actionhealth/HealthUtil.class index 606bc1e506cc2d64e773c2e66dc13c3d2287f4b0..e7c75be38ac62bd5fdd04f162138f7c2d727d7ba 100644 GIT binary patch delta 2766 zcmbtWeNa?Y6#t#~-tPO@x9qYA@+1&tk`Y-ED`Gb?ElaWl4UNcB5kVmq{6I7{Un**f zU-T*jE1N!Knz0YV7RYLJYI3GO`-6WeHRcVJwJ873m9kkn|J+xP)$D9gd zcIiIe1?{I!l@6G6kPfMI*rX%Wr4mnf=n0jkoAe|-rBabe-E_A}N2!N!qjNkx*ZIb< ze7&^Lq+?V@$ahY8^ZSc^Ii4I}b7QQrt-QXrxor(0(9qc2T)&Ek>)Y*UzBE)ila*z!S0n$868A3WC;>}MvdJO*l;!K6? zoHLkKGl0UVUT_-nX(*==E-^B_$UdRoyXR51oi z1w+4_!CzFH|IrEj4!<#sD)_IY;1J2O%r^dk((FkWc&mTl8tDQg(GSB9^@=$nt@#je zB#}d&7kTkiKJ%HuDTRZ$alu$zl-i+49A*!KXArHKRycs0s{7<*_LPRo;<&k&+LALu zv*IY|rIjOz7rKQ5H2IYWq1oJU1P)?OMR-~qw?>sw?rm3a?YU#*sQ2o$+mkHy>a07G zEbZ#7c}bRT*_!eW%4_6MZdDw2GM--}7c#snYFJ*6`^nO)YLqu{w;-^D36{YU&mb1K zL{B(WAu}_M%BausSqcy4$FVSKT4o%JLifZ`74=(wFwW1TfU%h2rCE`;UUx#dQiY%CE+aUqRLp3 zt+JFj>W45vVunXK**E;Ld@@next+|p4t&B__osXbe~yWcnwM5AF6#nO)VN-q#4C*0 zmeD%M=vBPNTb#(X_H~?MTemrPzvh2?rde%Mk5K;rh0AYKsSRRILunl6-! mH)VX}<)C9AQCV3wn5e9bhTO_3;VoCk8LZ~sU@csn#P3fI7*($T delta 2799 zcmcImYj6}*7XD86%=BY=9vSkOhOi*Pq(~-)0gR^Q5fynvh(H94FAPb@gCT(sLIh0{ z65dgQt%ihhS6z$z&{Z*U2qG4iT2@)*AOEbimQ}j7{<4Z)cgxyZ3yJ6U;rJYFo`B6<2(vbD6y+4)PMhwy%<+j{H$X(uBjMR2`Z6}GLm?3;*`0% zjC6(kIvEtuC`cilhp-BEqm0sYiqJInh0;~LEF>8^W#aEDUQsDarKn1#O4AjZq2p1f zmx`!%=rY|cIWs*=haUH2$^jb(3?yj2fkte1I+bPA>3pa>LJ4Q4T21Xvr@HZe5V9Jp z+Nz2YRZVq86|F4|O?CI|X-L%6wir}HwFYfNyFqod*r0lW8pO~@#R_dVC_y_6YNBR? zcB0+M(TXDp^b(Y|_?A1jY=|4Qi&~uRn&sO~tp@FJUf0_1Yoon{@TAQLwl>yQw<^TT zK1ur&+HcTPc+Q|F=xKvG$X4ipL7jBapf2h*=nx%N=!jFVm)?Gqw?@b4xI!lk>Y-;8 zde)$m)T_`bgPtQtq1z04o?cL>$e1`Q0&@|Ss?W8sn+p=}L` zL~YHg+Nze;)z!^Sd{V8=sbDyl!#P7&!cAVgp3?#xFG++`WCG&^cJSE5vlT3t_^Icg zhm>FNF647OlhDj#5HgSH@E`*kGO?3qnJG4Qp@nCx=dMb;+HSO_)}&f^*$Qwre;Bg! zRpuZyJ6&0uZK1!46L2~V>_Ho|N-=E=^|Nd*+F8bW6RV%alguMmwh#MV+h_3@YnSkU=Q%Y?EBNP(q=^C$%)EPq%0Q>BayNmSkgk_Av>r^H8{>ZA6}-<-E>#c;l#7k z?Gv(s9tF=Rc$QT&rWIX71!GR|o>8dK6ij9C8~3jV_#XoLD3&5{BL>N`%s%~ur3FP- zd22r*U%CoOJV&{5l?ff&H7pErxf4#JH&sjC*VuR(AM%25Zfpc4YbO%Hirkfi(U0&& zEUqkwoyU^RgR*bR>!nF78=%%HlF}sd2Wab9dPnY_Qb9H>o<;6SrR)gqEiWucV!7oR zC*L=PoZ_yS;99<$vsO;Bl$*0w*^@N&=Csw5EX`CsmrzzIM`l+faX;fVm2!;XT1z*5 zUiX!$RaAQ3LAfBXgbAk367L8eaEac+$U2#sNvyXmzv(wUJX@2*2FoywBq|~gCb7{9 zm;o`{WChKj5N=M{H5FcCy%jP;W-w*l^s;2b=0WNj-@()f|8{`wc;x>Z;fE$eccTE? z!zurM9pOmjlo+q)z-p%M#+^eszQ>1o;TZo%9!XgcF%X&K|BX}dUv~<2>KH`eCr^PR zKXD2id@P5EiX*sv2$EUiabw_;Zg1c;!+(zE{}iW%6=6l{>-!2 z_^WEk>?5>u=#$wwlr?s<$_w1S#pTQBEPtkq-qK7RPV<}@o5a2S1z&mMu6!s}V2^(a zul&Xs=F-`c#1s6eS{u87t%UNz3#caaBcDMH;WBD1&qQf%Gd)SvIp54l=ZpHsIeBq$ zQRj=!#U8$azc6A$>XeKwxSdkMd(4$^5e@v*c@^$G;`a;d&tQK5 diff --git a/out/production/ActionHealth/com/zeshanaslam/actionhealth/PreAction.class b/out/production/ActionHealth/com/zeshanaslam/actionhealth/PreAction.class index 8353b9f0ca0d10cf530591487dc9653c6ff20b64..4d72b874038889ec71f5e49e4da119b2ce8ea882 100644 GIT binary patch literal 3002 zcma)8TXz#x6#k}3Gt)5iGEkt%wOrb!mnf(}L8L7ds%=_GEmlyRrl(D4G7~0~LcO7Q z#Vg*$yS})VPq>x_mM(qq%_rB=2mLeZcV^ONN&$JuoSl94<=gvwXV3ih&yT+VxEo(b zQIFv$MsQS0$D&w{WE7)#NW++h<5AS&Vfh%ZK?feua3ad}q>4vXJSL4#sdzjJ6B8Oz z8YZPmL@|YF4QUM-4ZEf4bQCklYS^P8r@>NTtH`T3qry>9h{8ot#cUK?F|6UNT+hkJ zob-J{#gkFQq{UMTYV&4l#+(*o!YO2IOMx+X+MG4xS<{-1CtW9FP486@*_W|0?tTUF z)Chi;rZ@IpOSG>ex1>Alzq93I%n88A~LJxe4KnniE-Sj6pkP zX2(n?Bmb9`4XL#0_Sw0-Z87+$IOi@#G(2%yq+BAZlZHd0P$2fvxjf@F$V!AO!3-DO zK5i?hnHKI5)0&j|>hm7VKHIVw!mCxGx-|g%n3&4Sy;(7w7mg{74xLMhycC!-?4~mX z>5;N?@h3zfZCYj_Yv$sn7cVW$tecLHIHJeG-(%|l<3dMhSx51qDxXrM;zx>Jgeh5T+s16UeNI( zUQ+S0j#qF|fzriahmKeAnvU1;hK^29)gX^@5hZl=<1i^uA!@lP^%afZ5*=^iEgpSE z?-NMHB^__$9R`un7xAd(aL>@8Qv-?qVIA+{Jr(ck_y8Xg$jDNH83WS4*DQzyggQRL zWfdRm_ynJ_B?Vzk`kv&&ys)W)XuvACCNI)rx+w^nWV2%0%=V;GB+A0UDQK@maeV5= z2dr6MD@oW<(;;I5)*CC<2|HO#rH6!@wkt$Xu;F@({*1_03`j#ApW(cM)fGd((Y?h? zc2YPB8ZF^=<#^XqjydIa6@)V@oGu-o;|m>M;-ZePTW9twaQu55Qx<4jW~aVB)uwFTx(nK9{Xz2USp%n6kI`*N>WcL?*$Fy(Q{b& zQ7R^7HH{jUC^;JBrRSwouyRr0g~_Zsf-@#XgM-0qN>(~aai%D&ln4&yMfxDpg@DzC zd^W?;*%Ay_-fcS(sBOWcR#tD5#ZEEh+T_5_)}Wo=gJ7VAg(n_TQwg&lHmZDVT1Mr)0D9V)7%PfU7qiK*LxR@Iv%+qWGIiV{{TB{X)2 zW5y~fsy*|Vv6^ynoJwgWeYrv3PU@P%GC+5AJ5w8LLUbshshw+m32VC}O%bWTgK?$Q z*sV4ZQOH>51Bn^y{eVqPst>2Bn&H+S{{~v3vxF_*p&HHj9e-d$dEHoEH|iT)K<86O7*X!j;sEM!luf*V23%$vzr{+%Tg`}#_!Fz}7uH}WJx-#AwwL&2dJiKV z#d+LIDNMfvc2TOP_b%+F6k&|**h5KWgfP0XmmWL>?8ALrrL-US^N6H$fX7ya9?Gjw z^)J(gRP?IoQ*jWAibG-U@+HkD50tO>Dlb;-Cu|+RifzXB5?W&4Bg(~K16$bUmJ(X8 zq3z00M+xo96)#USw(vvM?|?x}z&dKy^GkLET1g{W;U?~H_3$2H7SMhkZwv!Osdy+O TP*N%$z=O1?!XULno|O0xbs;-W literal 1762 zcmb7FYflqF6g^WaOPA#-KEM|i#1<_}@l92P%1g^5Vodl%rrWVy+3q&GQz96Di@!l* zz-VIp?2j_u**0ogY_&~yIyd*;bMLulX21XV{1w1WZ0H!kn1*p35sY==idrYSa8<1d z9Z5`TxE8~8q;$kErNPu;U^<30W^~-ZO%1m++-B&!Z@ad9$Y3UNo?kTc)!kiNn!=T~ z+&4EJzAyYt?iJtTro-K$xg~wuEoPE07@}FPAQ<{`wky`F<-G8p^Sncr!JKDt=LPp| zwXYkavSbGgiJaw?%>xmXxXS~FmrZU-+jC2TJF;YM`eHuZXQ;GFh|Vzb_sSTwvIqiR z3}KtfWazN+7Q;-=71AtIp_b2IN;44tp771R^iFza=ULiZ&6c=a;DN|`<%;K0_k=%C z;nuE@ii3@+R2~fJHiy9}wo?#31;2?) z@mj`bN8<+W;vPdJ{?@=OG8!Hjc!YTxUF+tWYSOS^AdANee38icW9}h6bq)Mtr!I!9 zqOPV014~%euwq~pPc%F=ki#0o#J|m!q5pTk8~InlB4#@hN>iP@QW0)}A(c2rbWNr@ zO+<2+^lH*%7)m6Y9Eq)UhPl>6HLGA;O?^v{kRAI#jia~GV63{X@UspN0zvX-oMGwM z(*GBldP=p9QKhWa#Q%K1LfVQg&#x`+tgbI@kS5v)wIP_$3W+u$&Gcm2L^Oh^3CD^; zu5h=Y4#N~ps&$Wx;XPEph8QOQ-J3*KyFaoXO(?um7^d66)qs9S5G_-!AsZv;#0Dhb z+L>cWwj;IX7~ZGTt&y7P$7S@>dq90id32ah(sPJ*?-0caS|3avfqg+_`v@I_(LDTjh~8oH?R!rNA~;3Q(_yl1N@`#fJxHM! z_t8go^)3p5a0X{-N01oC2$iA!ox^#`Fp3NGy@(Eq>&GS9N6C7bJR*o=j#i!gla%ox GVm|@>S^Rha diff --git a/out/production/ActionHealth/com/zeshanaslam/actionhealth/SettingsManager.class b/out/production/ActionHealth/com/zeshanaslam/actionhealth/SettingsManager.class index cfc81b2dea05686c245ae6e3ffe71c0b66129a9a..c0183f8a9b25ad372aae8fde1fb8e34b7ec700f0 100644 GIT binary patch delta 2271 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 X2QtUJ^mrovA-ej$AwK`an|SLZXB)Yt diff --git a/src/com/zeshanaslam/actionhealth/HealthUtil.java b/src/com/zeshanaslam/actionhealth/HealthUtil.java index c7ef896..738512e 100644 --- a/src/com/zeshanaslam/actionhealth/HealthUtil.java +++ b/src/com/zeshanaslam/actionhealth/HealthUtil.java @@ -108,18 +108,18 @@ public class HealthUtil { } if (output.contains("{usestyle}")) { - String style = ""; - int left = 10; - double heart = maxHealth / 10; + StringBuilder style = new StringBuilder(); + int left = plugin.settingsManager.limitHealth; + double heart = maxHealth / plugin.settingsManager.limitHealth; double halfHeart = heart / 2; double tempHealth = health; if (maxHealth != health && health >= 0 && !entity.isDead()) { - for (int i = 0; i < 10; i++) { + for (int i = 0; i < plugin.settingsManager.limitHealth; i++) { if (tempHealth - heart > 0) { tempHealth = tempHealth - heart; - style = style + plugin.settingsManager.filledHeartIcon; + style.append(plugin.settingsManager.filledHeartIcon); left--; } else { break; @@ -127,25 +127,25 @@ public class HealthUtil { } if (tempHealth > halfHeart) { - style = style + plugin.settingsManager.filledHeartIcon; + style.append(plugin.settingsManager.filledHeartIcon); left--; } else if (tempHealth > 0 && tempHealth <= halfHeart) { - style = style + plugin.settingsManager.halfHeartIcon; + style.append(plugin.settingsManager.halfHeartIcon); left--; } } if (maxHealth != health) { for (int i = 0; i < left; i++) { - style = style + plugin.settingsManager.emptyHeartIcon; + style.append(plugin.settingsManager.emptyHeartIcon); } } else { for (int i = 0; i < left; i++) { - style = style + plugin.settingsManager.filledHeartIcon; + style.append(plugin.settingsManager.filledHeartIcon); } } - output = output.replace("{usestyle}", style); + output = output.replace("{usestyle}", style.toString()); } if (plugin.settingsManager.placeholderAPI) { diff --git a/src/com/zeshanaslam/actionhealth/PreAction.java b/src/com/zeshanaslam/actionhealth/PreAction.java index 2cb8747..e662af0 100644 --- a/src/com/zeshanaslam/actionhealth/PreAction.java +++ b/src/com/zeshanaslam/actionhealth/PreAction.java @@ -1,16 +1,35 @@ package com.zeshanaslam.actionhealth; -import net.minecraft.server.v1_12_R1.ChatMessageType; -import net.minecraft.server.v1_12_R1.IChatBaseComponent; -import net.minecraft.server.v1_12_R1.PacketPlayOutChat; -import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import java.lang.reflect.InvocationTargetException; + public class PreAction { + private final String packageVersion = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; + public PreAction(Player player, String message) { - IChatBaseComponent cbc = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + message + "\"}"); - PacketPlayOutChat packetPlayOutChat = new PacketPlayOutChat(cbc, ChatMessageType.GAME_INFO); - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutChat); + try { + Object chatComponentText = getNMSClass("ChatComponentText").getConstructor(new Class[]{String.class}).newInstance(message); + Object chatMessageType = getNMSClass("ChatMessageType").getField("GAME_INFO").get(null); + Object packetPlayOutChat = getNMSClass("PacketPlayOutChat").getConstructor(new Class[]{getNMSClass("IChatBaseComponent"), getNMSClass("ChatMessageType")}).newInstance(chatComponentText, chatMessageType); + Object getHandle = player.getClass().getMethod("getHandle", new Class[0]).invoke(player); + Object playerConnection = getHandle.getClass().getField("playerConnection").get(getHandle); + + playerConnection.getClass().getMethod("sendPacket", new Class[]{getNMSClass("Packet")}).invoke(playerConnection, packetPlayOutChat); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | NoSuchFieldException e) { + e.printStackTrace(); + } + } + + private Class getNMSClass(String nmsClassName) { + try { + return Class.forName("net.minecraft.server." + packageVersion + "." + nmsClassName); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + return null; } } diff --git a/src/com/zeshanaslam/actionhealth/SettingsManager.java b/src/com/zeshanaslam/actionhealth/SettingsManager.java index 76960e1..0164af3 100644 --- a/src/com/zeshanaslam/actionhealth/SettingsManager.java +++ b/src/com/zeshanaslam/actionhealth/SettingsManager.java @@ -37,6 +37,7 @@ public class SettingsManager { public String enableMessage; public String disableMessage; public boolean placeholderAPI; + public int limitHealth; public SettingsManager(Main plugin) { // Clear settings for reloads @@ -136,5 +137,13 @@ public class SettingsManager { } else { spectatorMode = true; } + + if (plugin.getConfig().contains("Limit Health")) { + if (plugin.getConfig().isBoolean("Limit Health")) { + limitHealth = 10; + } else { + limitHealth = plugin.getConfig().getInt("Limit Health"); + } + } } }