damage.txt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. event.load("animal_tame");
  2. event.load("living_hurt");
  3. event.load("living_heal");
  4. event.load("entity_join");
  5. entities_list = list.new();
  6. permanent_name = set.new();
  7. set.add(permanent_name, "villager");
  8. set.add(permanent_name, "wandering_trader");
  9. permanent_tamed_name = set.new();
  10. set.add(permanent_tamed_name, "wolf");
  11. set.add(permanent_tamed_name, "cat");
  12. set.add(permanent_tamed_name, "horse");
  13. set.add(permanent_tamed_name, "donkey");
  14. set.add(permanent_tamed_name, "mule");
  15. set.add(permanent_tamed_name, "skeleton_horse");
  16. set.add(permanent_tamed_name, "zombie_horse");
  17. set.add(permanent_tamed_name, "parrot");
  18. msg("dev", "§bDamage §rloaded.");
  19. @wait
  20. wait();
  21. ignoreGoto(event);
  22. goto("wait");
  23. @animal_tame
  24. if(isLiving(animal) && !isPlayer(animal)) {
  25. if(list.getSize(entities_list) == 0) {
  26. sgoto(1, "sgoto_updateEntityName");
  27. }
  28. list.add(entities_list, animal);
  29. }
  30. goto("wait");
  31. @entity_join
  32. if(isLiving(entity) && !isPlayer(entity)) {
  33. updateEntityName(entity);
  34. }
  35. goto("wait");
  36. @living_heal
  37. cancel = true;
  38. if(heal_amount <= 0) {
  39. goto("wait");
  40. }
  41. health = living.getHealth(living_entity);
  42. if(health <= 0) {
  43. goto("wait");
  44. }
  45. new_health = health + heal_amount;
  46. living.setHealth(living_entity, new_health);
  47. if(isLiving(living_entity) && !isPlayer(living_entity)) {
  48. updateEntityName(living_entity);
  49. }
  50. goto("wait");
  51. @living_hurt
  52. if(isPlayer(living_entity) || !isLiving(living_entity)) {
  53. goto("wait");
  54. }
  55. if(list.getSize(entities_list) == 0) {
  56. sgoto(1, "sgoto_updateEntityName");
  57. }
  58. list.add(entities_list, living_entity);
  59. goto("wait");
  60. @sgoto_updateEntityName
  61. iter = list.iterator(entities_list);
  62. while(hasNext(iter)) {
  63. updateEntityName(next(iter));
  64. }
  65. list.clear(entities_list);
  66. goto("wait");
  67. function updateEntityName(living_entity) {
  68. if(!isLiving(living_entity)) {
  69. return;
  70. }
  71. entity_type = entity.getType(living_entity);
  72. if(entity_type == "nobody" || entity_type == "armor_stand" || entity_type == "human") {
  73. return;
  74. }
  75. entity_name = entity.getName(living_entity);
  76. max_health = living.getMaxHealth(living_entity);
  77. health = text.number(math.round(living.getHealth(living_entity)));
  78. max_health = text.number(math.roundComma(max_health, 1));
  79. heart_index = text.indexOf(entity_name, "❤", 0);
  80. if(heart_index == -1) {
  81. //Kein Herz gefunden
  82. setEntityName(living_entity, health, max_health, entity_name);
  83. return;
  84. }
  85. next_new_line = text.indexOf(entity_name, "\n", heart_index);
  86. if(next_new_line == -1) {
  87. //Rechts vom Herz keine New-Line gefunden
  88. setEntityName(living_entity, health, max_health, null);
  89. return;
  90. }
  91. entity_name = text.subString(entity_name, next_new_line + 1, text.length(entity_name));
  92. setEntityName(living_entity, health, max_health, entity_name);
  93. }
  94. function setEntityName(living_entity, health, max_health, entity_name) {
  95. entity_type = entity.getType(living_entity);
  96. permanent = false;
  97. if(set.contains($permanent_name, entity_type)) {
  98. permanent = true;
  99. } elseif(set.contains($permanent_tamed_name, entity_type)) {
  100. if(pet.isTamed(living_entity)) {
  101. permanent = true;
  102. }
  103. }
  104. if(entity_name == null) {
  105. entity.setName(living_entity, concat(health, "/", max_health, " §c❤"), permanent);
  106. return;
  107. }
  108. entity.setName(living_entity, concat(health, "/", max_health, " §c❤\n", entity_name), permanent);
  109. }