Advertisement
Guest User

Untitled

a guest
Apr 19th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.53 KB | None | 0 0
  1. package com.MCComplex.Trivia.Events;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.concurrent.TimeUnit;
  7. import java.util.function.Consumer;
  8.  
  9. import org.spongepowered.api.Sponge;
  10. import org.spongepowered.api.entity.living.player.Player;
  11. import org.spongepowered.api.scheduler.Task;
  12. import org.spongepowered.api.text.Text;
  13. import org.spongepowered.api.text.action.TextActions;
  14. import org.spongepowered.api.text.format.TextColors;
  15. import org.spongepowered.api.text.serializer.TextSerializers;
  16.  
  17. import com.MCComplex.Trivia.FileManager;
  18. import com.MCComplex.Trivia.Main;
  19.  
  20. import ninja.leaping.configurate.ConfigurationNode;
  21.  
  22. public class Event extends Main {
  23. Task.Builder taskBuilder = Task.builder();
  24. public static Utils u = new Utils();
  25.  
  26. private List<Player> players;
  27. public ConfigurationNode config = new FileManager().getConfig();
  28. private int timeLeft;
  29. private static Event e;
  30. private static List<Event> currentEvent = new ArrayList<Event>();
  31. boolean hasStarted;
  32. private String eventName;
  33. private Question q;
  34. private int questionNumber;
  35. private Player eventStarter;
  36. private HashMap<Player, Integer> points = new HashMap<Player, Integer>();
  37.  
  38. public Event(String eventName, Player player) {
  39. if (getEvent() == null) {
  40. currentEvent.add(this);
  41. this.eventStarter = player;
  42. System.out.println("New event starting.");
  43. this.eventName = eventName;
  44. players = new ArrayList<Player>();
  45. taskBuilder.execute(new Broadcast()).interval(1, TimeUnit.SECONDS).delay(1, TimeUnit.SECONDS)
  46. .submit(getPlugin());
  47. timeLeft = 30;
  48. e = this;
  49. hasStarted = false;
  50. } else {
  51. System.out.println("Event cannot start, one is already in progress.");
  52. u.sendMessage(player,
  53. "&7(&dComplex&fTrivia&7) &cError: There is already an event running! You cannot have more than one event at once!");
  54. }
  55. }
  56.  
  57. public static Event getEvent() {
  58. if (currentEvent.size() != 0) {
  59. System.out.println("Event != null returning event");
  60. return currentEvent.get(0);
  61. } else {
  62. System.out.println("Event == null, returning null");
  63. return null;
  64. }
  65. }
  66.  
  67. public String getEventName() {
  68. return eventName;
  69. }
  70.  
  71. public void stopEventOverride(String reason) {
  72. e = null;
  73. Sponge.getGame().getServer().getBroadcastChannel().send(u.deserialize(
  74. "&7(&dComplex&fTrivia&7) &aThe trivia event in process has been cancelled due to " + reason));
  75. }
  76.  
  77. public void stopEvent() {
  78. if (Event.getEvent() != null) {
  79. currentEvent.clear();
  80. Player first = null;
  81. Player second = null;
  82. Player third = null;
  83. for (Player p : points.keySet()) {
  84. if (first == null) {
  85. first = p;
  86. } else if (points.get(p) > points.get(first)) {
  87. if (second != null) {
  88. third = second;
  89. }
  90. second = first;
  91. first = p;
  92. } else if (points.get(p) > points.get(second)) {
  93. third = second;
  94. second = p;
  95. } else if (points.get(p) > points.get(third)) {
  96. third = p;
  97. }
  98. }
  99. dispatchRewards(first, second, third);
  100. }
  101. }
  102.  
  103. public void dispatchRewards(Player first, Player second, Player third) {
  104. System.out.println("debug: dispatching rewards initiating");
  105. List<String> firstPlaceRewards = config.getNode("Events", e.getEventName(), "Rewards", "FirstPlace")
  106. .<String>getList(u.stringTransformer);
  107. List<String> secondPlaceRewards = config.getNode("Events", e.getEventName(), "Rewards", "SecondPlace")
  108. .<String>getList(u.stringTransformer);
  109. List<String> thirdPlaceRewards = config.getNode("Events", e.getEventName(), "Rewards", "ThirdPlace")
  110. .<String>getList(u.stringTransformer);
  111. for (String s : firstPlaceRewards) {
  112. System.out.println(s);
  113. Sponge.getCommandManager().process(Sponge.getServer().getConsole(), s.replace("%player%", first.getName()));
  114. }
  115. if (second != null) {
  116. for (String s : secondPlaceRewards) {
  117. System.out.println(s);
  118. Sponge.getCommandManager().process(Sponge.getServer().getConsole(),
  119. s.replace("%player%", second.getName()));
  120. }
  121. }
  122. if (third != null) {
  123. for (String s : thirdPlaceRewards) {
  124. System.out.println(s);
  125. Sponge.getCommandManager().process(Sponge.getServer().getConsole(),
  126. s.replace("%player%", third.getName()));
  127. }
  128. }
  129. }
  130.  
  131. public void addPoints(Player p, int j) {
  132. if (getEvent() == null) {
  133. return;
  134. }
  135. System.out.println("Adding " + j + " points to " + p.getName());
  136. int i = j;
  137. if (points.containsKey(p)) {
  138. i = points.get(p) + j;
  139. points.remove(p);
  140. }
  141. System.out.println("New balance of points for player = " + i);
  142. points.put(p, i);
  143. }
  144.  
  145. public int getPoints(Player p){
  146. if (points.containsKey(p)){
  147. return points.get(p);
  148. } else {
  149. return 0;
  150. }
  151. }
  152.  
  153. public Question getQuestion() {
  154. if (q != null) {
  155. System.out.println("Returning question " + q);
  156. return q;
  157. } else {
  158. System.out.println("q == null, returning null.");
  159. return null;
  160. }
  161. }
  162.  
  163. public void startEvent() {
  164. if (getEvent() == null) {
  165. return;
  166. }
  167. System.out.println("Event starting, initiating question 1.");
  168. hasStarted = true;
  169. questionNumber = 1;
  170. q = new Question(questionNumber);
  171. }
  172.  
  173. public void nextQuestion() {
  174. if (getEvent() == null){
  175. return;
  176. }
  177. System.out.println("Initiating next question.");
  178. questionNumber++;
  179. q.cancelRemoval(true);
  180. q = new Question(questionNumber);
  181. }
  182.  
  183. public boolean hasStarted() {
  184. System.out.println("Event has started: " + hasStarted);
  185. return hasStarted;
  186. }
  187.  
  188. public void removeFromEvent(Player player) {
  189. while (players.contains(player)) {
  190. players.remove(player);
  191. }
  192. }
  193.  
  194. public Text message(String s) {
  195. return TextSerializers.FORMATTING_CODE.deserialize(s);
  196. }
  197.  
  198. private class Broadcast implements Consumer<Task> {
  199. @Override
  200. public void accept(Task task) {
  201. if (getEvent() == null) {
  202. task.cancel();
  203. return;
  204. }
  205. if (timeLeft < 1) {
  206. startEvent();
  207. task.cancel();
  208. return;
  209. }
  210. if (timeLeft % 30 == 0) {
  211. Text message = Text.builder("Click here").color(TextColors.AQUA)
  212. .onClick(TextActions.runCommand("/trivia join"))
  213. .append(Text.builder(" or type /Trivia Join to participate!").color(TextColors.GREEN).build())
  214. .build();
  215. getGame().getServer().getBroadcastChannel()
  216. .send(Text.of(message("&7(&dComplex&fTrivia&7) &aA Server Trivia Event has been initiated by &d"
  217. + eventStarter.getName() + " &aand will start in &d" + getTimeUntilStart())));
  218. getGame().getServer().getBroadcastChannel().send(Text.of(message));
  219. }
  220. if (timeLeft <= 5) {
  221. sendEventMessage("&7(&dComplex&fTrivia&7) &aThe event will begin in &d" + getTimeUntilStart());
  222. }
  223. timeLeft--;
  224. }
  225. }
  226.  
  227. public List<Player> getPlayers() {
  228. return players;
  229. }
  230.  
  231. public void addToEvent(Player player) {
  232. players.add(player);
  233. }
  234.  
  235. public boolean isInEvent(Player player) {
  236. if (getPlayers().contains(player)) {
  237. return true;
  238. } else {
  239. return false;
  240. }
  241. }
  242.  
  243. public String getTimeUntilStart() {
  244. String s;
  245. double time = (timeLeft / (double) 60);
  246. double timeRemainder = (timeLeft % (double) 60);
  247. double roundedTime = Math.floor(time);
  248. if (time > 1) {
  249. if (timeRemainder != 0) {
  250. s = (int) roundedTime + " minutes and " + (int) timeRemainder + " seconds!";
  251. } else {
  252. s = (int) roundedTime + " minutes!";
  253. }
  254. } else {
  255. s = timeLeft + " seconds!";
  256. }
  257. return s;
  258. }
  259.  
  260. public void sendEventMessage(String s) {
  261. for (Player p : getPlayers()) {
  262. p.sendMessage(TextSerializers.FORMATTING_CODE.deserialize(s));
  263. }
  264. }
  265.  
  266. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement