ModEntityPlayerMP.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package me.km.overrides;
  2. import com.mojang.authlib.GameProfile;
  3. import java.util.HashMap;
  4. import me.hammerle.snuviscript.code.ISnuviScheduler;
  5. import me.km.Server;
  6. import net.minecraft.entity.player.ServerPlayerEntity;
  7. import net.minecraft.network.play.server.SPlayerListItemPacket;
  8. import net.minecraft.server.MinecraftServer;
  9. import net.minecraft.server.management.PlayerInteractionManager;
  10. import net.minecraft.util.text.ITextComponent;
  11. import net.minecraft.util.text.StringTextComponent;
  12. import net.minecraft.world.server.ServerWorld;
  13. public class ModEntityPlayerMP extends ServerPlayerEntity
  14. {
  15. private final PlayerScoreboard board;
  16. private int id = -1;
  17. private final HashMap<String, Integer> timedData;
  18. private final HashMap<String, Object> data;
  19. private StringTextComponent tabDisplayName = null;
  20. private boolean isIterating = false;
  21. public ModEntityPlayerMP(MinecraftServer ms, ServerWorld w, GameProfile gp, PlayerInteractionManager pim)
  22. {
  23. super(ms, w, gp, pim);
  24. this.board = new PlayerScoreboard();
  25. this.timedData = new HashMap();
  26. this.data = new HashMap();
  27. }
  28. public PlayerScoreboard getScoreboard()
  29. {
  30. return board;
  31. }
  32. public ModEntityPlayerMP(MinecraftServer ms, ServerWorld w, GameProfile gp, PlayerInteractionManager pim, ModEntityPlayerMP old)
  33. {
  34. super(ms, w, gp, pim);
  35. this.board = old.board;
  36. this.timedData = old.timedData;
  37. this.data = old.data;
  38. this.id = old.id;
  39. }
  40. @Override
  41. public void tick()
  42. {
  43. super.tick();
  44. board.update(this);
  45. tickData();
  46. }
  47. public void setTabListDisplayName(String name)
  48. {
  49. tabDisplayName = new StringTextComponent(name);
  50. server.getPlayerList().sendPacketToAllPlayers(
  51. new SPlayerListItemPacket(SPlayerListItemPacket.Action.UPDATE_DISPLAY_NAME, this));
  52. }
  53. @Override
  54. public ITextComponent getTabListDisplayName()
  55. {
  56. return tabDisplayName;
  57. }
  58. public void setId(int id)
  59. {
  60. this.id = id;
  61. }
  62. public int getId()
  63. {
  64. return id;
  65. }
  66. private void tickData()
  67. {
  68. isIterating = true;
  69. timedData.entrySet().removeIf(entry ->
  70. {
  71. int time = entry.getValue() - 1;
  72. if(time <= 0)
  73. {
  74. if(time == 0)
  75. {
  76. Server.scriptEvents.onPlayerDataTick(this, entry.getKey());
  77. }
  78. return true;
  79. }
  80. entry.setValue(time);
  81. return false;
  82. });
  83. isIterating = false;
  84. }
  85. public void setVar(String varname, Object value)
  86. {
  87. data.put(varname, value);
  88. }
  89. public Object getVar(String varname)
  90. {
  91. return data.get(varname);
  92. }
  93. public void setTimer(String varname, int time, ISnuviScheduler scheduler)
  94. {
  95. if(isIterating)
  96. {
  97. scheduler.scheduleTask(() -> timedData.put(varname, time));
  98. }
  99. else
  100. {
  101. timedData.put(varname, time);
  102. }
  103. }
  104. public int getTimer(String varname)
  105. {
  106. return timedData.getOrDefault(varname, -1);
  107. }
  108. public void clearData(ISnuviScheduler scheduler)
  109. {
  110. if(isIterating)
  111. {
  112. scheduler.scheduleTask(() -> timedData.clear());
  113. }
  114. else
  115. {
  116. timedData.clear();
  117. }
  118. data.clear();
  119. }
  120. @Override
  121. protected int getPermissionLevel()
  122. {
  123. return 999;
  124. }
  125. }