Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.MCComplex.Trivia.Events;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.concurrent.TimeUnit;
- import java.util.function.Consumer;
- import org.spongepowered.api.Sponge;
- import org.spongepowered.api.entity.living.player.Player;
- import org.spongepowered.api.scheduler.Task;
- import org.spongepowered.api.text.Text;
- import org.spongepowered.api.text.action.TextActions;
- import org.spongepowered.api.text.format.TextColors;
- import org.spongepowered.api.text.serializer.TextSerializers;
- import com.MCComplex.Trivia.FileManager;
- import com.MCComplex.Trivia.Main;
- import ninja.leaping.configurate.ConfigurationNode;
- public class Event extends Main {
- Task.Builder taskBuilder = Task.builder();
- public static Utils u = new Utils();
- private List<Player> players;
- public ConfigurationNode config = new FileManager().getConfig();
- private int timeLeft;
- private static Event e;
- private static List<Event> currentEvent = new ArrayList<Event>();
- boolean hasStarted;
- private String eventName;
- private Question q;
- private int questionNumber;
- private Player eventStarter;
- private HashMap<Player, Integer> points = new HashMap<Player, Integer>();
- public Event(String eventName, Player player) {
- if (getEvent() == null) {
- currentEvent.add(this);
- this.eventStarter = player;
- System.out.println("New event starting.");
- this.eventName = eventName;
- players = new ArrayList<Player>();
- taskBuilder.execute(new Broadcast()).interval(1, TimeUnit.SECONDS).delay(1, TimeUnit.SECONDS)
- .submit(getPlugin());
- timeLeft = 30;
- e = this;
- hasStarted = false;
- } else {
- System.out.println("Event cannot start, one is already in progress.");
- u.sendMessage(player,
- "&7(&dComplex&fTrivia&7) &cError: There is already an event running! You cannot have more than one event at once!");
- }
- }
- public static Event getEvent() {
- if (currentEvent.size() != 0) {
- System.out.println("Event != null returning event");
- return currentEvent.get(0);
- } else {
- System.out.println("Event == null, returning null");
- return null;
- }
- }
- public String getEventName() {
- return eventName;
- }
- public void stopEventOverride(String reason) {
- e = null;
- Sponge.getGame().getServer().getBroadcastChannel().send(u.deserialize(
- "&7(&dComplex&fTrivia&7) &aThe trivia event in process has been cancelled due to " + reason));
- }
- public void stopEvent() {
- if (Event.getEvent() != null) {
- currentEvent.clear();
- Player first = null;
- Player second = null;
- Player third = null;
- for (Player p : points.keySet()) {
- if (first == null) {
- first = p;
- } else if (points.get(p) > points.get(first)) {
- if (second != null) {
- third = second;
- }
- second = first;
- first = p;
- } else if (points.get(p) > points.get(second)) {
- third = second;
- second = p;
- } else if (points.get(p) > points.get(third)) {
- third = p;
- }
- }
- dispatchRewards(first, second, third);
- }
- }
- public void dispatchRewards(Player first, Player second, Player third) {
- System.out.println("debug: dispatching rewards initiating");
- List<String> firstPlaceRewards = config.getNode("Events", e.getEventName(), "Rewards", "FirstPlace")
- .<String>getList(u.stringTransformer);
- List<String> secondPlaceRewards = config.getNode("Events", e.getEventName(), "Rewards", "SecondPlace")
- .<String>getList(u.stringTransformer);
- List<String> thirdPlaceRewards = config.getNode("Events", e.getEventName(), "Rewards", "ThirdPlace")
- .<String>getList(u.stringTransformer);
- for (String s : firstPlaceRewards) {
- System.out.println(s);
- Sponge.getCommandManager().process(Sponge.getServer().getConsole(), s.replace("%player%", first.getName()));
- }
- if (second != null) {
- for (String s : secondPlaceRewards) {
- System.out.println(s);
- Sponge.getCommandManager().process(Sponge.getServer().getConsole(),
- s.replace("%player%", second.getName()));
- }
- }
- if (third != null) {
- for (String s : thirdPlaceRewards) {
- System.out.println(s);
- Sponge.getCommandManager().process(Sponge.getServer().getConsole(),
- s.replace("%player%", third.getName()));
- }
- }
- }
- public void addPoints(Player p, int j) {
- if (getEvent() == null) {
- return;
- }
- System.out.println("Adding " + j + " points to " + p.getName());
- int i = j;
- if (points.containsKey(p)) {
- i = points.get(p) + j;
- points.remove(p);
- }
- System.out.println("New balance of points for player = " + i);
- points.put(p, i);
- }
- public int getPoints(Player p){
- if (points.containsKey(p)){
- return points.get(p);
- } else {
- return 0;
- }
- }
- public Question getQuestion() {
- if (q != null) {
- System.out.println("Returning question " + q);
- return q;
- } else {
- System.out.println("q == null, returning null.");
- return null;
- }
- }
- public void startEvent() {
- if (getEvent() == null) {
- return;
- }
- System.out.println("Event starting, initiating question 1.");
- hasStarted = true;
- questionNumber = 1;
- q = new Question(questionNumber);
- }
- public void nextQuestion() {
- if (getEvent() == null){
- return;
- }
- System.out.println("Initiating next question.");
- questionNumber++;
- q.cancelRemoval(true);
- q = new Question(questionNumber);
- }
- public boolean hasStarted() {
- System.out.println("Event has started: " + hasStarted);
- return hasStarted;
- }
- public void removeFromEvent(Player player) {
- while (players.contains(player)) {
- players.remove(player);
- }
- }
- public Text message(String s) {
- return TextSerializers.FORMATTING_CODE.deserialize(s);
- }
- private class Broadcast implements Consumer<Task> {
- @Override
- public void accept(Task task) {
- if (getEvent() == null) {
- task.cancel();
- return;
- }
- if (timeLeft < 1) {
- startEvent();
- task.cancel();
- return;
- }
- if (timeLeft % 30 == 0) {
- Text message = Text.builder("Click here").color(TextColors.AQUA)
- .onClick(TextActions.runCommand("/trivia join"))
- .append(Text.builder(" or type /Trivia Join to participate!").color(TextColors.GREEN).build())
- .build();
- getGame().getServer().getBroadcastChannel()
- .send(Text.of(message("&7(&dComplex&fTrivia&7) &aA Server Trivia Event has been initiated by &d"
- + eventStarter.getName() + " &aand will start in &d" + getTimeUntilStart())));
- getGame().getServer().getBroadcastChannel().send(Text.of(message));
- }
- if (timeLeft <= 5) {
- sendEventMessage("&7(&dComplex&fTrivia&7) &aThe event will begin in &d" + getTimeUntilStart());
- }
- timeLeft--;
- }
- }
- public List<Player> getPlayers() {
- return players;
- }
- public void addToEvent(Player player) {
- players.add(player);
- }
- public boolean isInEvent(Player player) {
- if (getPlayers().contains(player)) {
- return true;
- } else {
- return false;
- }
- }
- public String getTimeUntilStart() {
- String s;
- double time = (timeLeft / (double) 60);
- double timeRemainder = (timeLeft % (double) 60);
- double roundedTime = Math.floor(time);
- if (time > 1) {
- if (timeRemainder != 0) {
- s = (int) roundedTime + " minutes and " + (int) timeRemainder + " seconds!";
- } else {
- s = (int) roundedTime + " minutes!";
- }
- } else {
- s = timeLeft + " seconds!";
- }
- return s;
- }
- public void sendEventMessage(String s) {
- for (Player p : getPlayers()) {
- p.sendMessage(TextSerializers.FORMATTING_CODE.deserialize(s));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement