99import com .github .elic0de .thejpspit .util .NoCollisionUtil ;
1010import com .github .elic0de .thejpspit .villager .VillagerNPC ;
1111import com .github .elic0de .thejpspit .villager .VillagerNPCManager ;
12+ import net .md_5 .bungee .api .ChatMessageType ;
13+ import net .md_5 .bungee .api .chat .ComponentBuilder ;
1214import org .bukkit .Bukkit ;
15+ import org .bukkit .ChatColor ;
1316import org .bukkit .GameMode ;
1417import org .bukkit .Location ;
1518import org .bukkit .Material ;
@@ -144,7 +147,6 @@ public void onDamage(EntityDamageByEntityEvent event) {
144147 event .setCancelled (true );
145148 return ;
146149 }
147- pitPlayer .showHealth (victimPitPlayer );
148150 victimPitPlayer .setLastDamager (pitPlayer );
149151 }
150152 if (event .getDamager () instanceof Arrow ) {
@@ -153,12 +155,43 @@ public void onDamage(EntityDamageByEntityEvent event) {
153155 }
154156 }
155157
158+ @ EventHandler
159+ public void onFight (EntityDamageByEntityEvent event ) {
160+ if (event .getEntity () instanceof Player vitim ) {
161+ Player damager = null ;
162+ if (event .getDamager () instanceof Player ) damager = (Player ) event .getDamager ();
163+ if (event .getDamager () instanceof Arrow arrow ) if (arrow .getShooter () instanceof Player player ) damager = player ;
164+ if (damager != null ) damager .spigot ().sendMessage (
165+ ChatMessageType .ACTION_BAR , new ComponentBuilder (vitim .getName () + " " + getHeartLevel (vitim )).create ());
166+ }
167+ }
168+
169+ private String getHeartLevel (Player player ) {
170+
171+ int currentHealth = (int ) player .getHealth () / 2 ;
172+ int maxHealth = (int ) player .getMaxHealth () / 2 ;
173+ int lostHealth = maxHealth - currentHealth ;
174+
175+ StringBuilder rHeart = new StringBuilder ();
176+ StringBuilder lHeart = new StringBuilder ();
177+
178+ for (int i = 0 ; i < currentHealth ; i ++) {
179+ rHeart .append (ChatColor .RED ).append ("❤" );
180+ }
181+ for (int i = 0 ; i < lostHealth ; i ++) {
182+ lHeart .append (ChatColor .GRAY ).append ("❤" );
183+ }
184+
185+ return rHeart + lHeart .toString ();
186+ }
187+
156188 @ EventHandler
157189 private void onEntityRegainHealth (EntityRegainHealthEvent event ) {
158- if (event .getEntity () instanceof Player ) {
190+ if (event .getEntity () instanceof Player player ) {
191+ event .setCancelled (true );
159192 if (event .getRegainReason () == EntityRegainHealthEvent .RegainReason .SATIATED ) {
160- TheJpsPit . getInstance ().getPitPreferences (). ifPresent (
161- pitPreferences -> event . setAmount ( pitPreferences .getAmountRegenHealth ()));
193+ Bukkit . getScheduler ().runTaskLater ( TheJpsPit . getInstance (),
194+ () -> TheJpsPit . getInstance (). getPitPreferences (). ifPresent ( pitPreferences -> player . setHealth ( Math . min ( 20 , player . getHealth () + pitPreferences .getAmountRegenHealth ()))), 10 * 20 );
162195 }
163196 }
164197 }
0 commit comments