Advertisement
Guest User

Untitled

a guest
Mar 21st, 2017
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.80 KB | None | 0 0
  1. package com.mineaurion.tjk.AurionsVoteListener;
  2.  
  3.  
  4. import java.io.FilePermission;
  5. import java.io.IOException;
  6. import java.net.MalformedURLException;
  7. import java.net.URL;
  8. import java.nio.file.Files;
  9. import java.nio.file.Path;
  10. import java.sql.SQLException;
  11. import java.util.ArrayList;
  12. import java.util.Collections;
  13. import java.util.List;
  14. import java.util.Map.Entry;
  15. import java.util.concurrent.TimeUnit;
  16. import java.util.Optional;
  17. import java.util.regex.Matcher;
  18. import java.util.regex.Pattern;
  19. import java.util.stream.Collectors;
  20.  
  21. import org.slf4j.Logger;
  22.  
  23. import org.spongepowered.api.Sponge;
  24. import org.spongepowered.api.asset.Asset;
  25. import org.spongepowered.api.command.CommandException;
  26. import org.spongepowered.api.command.CommandResult;
  27. import org.spongepowered.api.command.CommandSource;
  28. import org.spongepowered.api.command.args.CommandContext;
  29. import org.spongepowered.api.command.args.GenericArguments;
  30. import org.spongepowered.api.command.spec.CommandExecutor;
  31. import org.spongepowered.api.command.spec.CommandSpec;
  32. import org.spongepowered.api.config.ConfigDir;
  33. import org.spongepowered.api.config.DefaultConfig;
  34. import org.spongepowered.api.entity.living.player.Player;
  35. import org.spongepowered.api.event.Listener;
  36. import org.spongepowered.api.event.game.state.GameInitializationEvent;
  37. import org.spongepowered.api.event.network.ClientConnectionEvent;
  38. import org.spongepowered.api.plugin.Dependency;
  39. import org.spongepowered.api.plugin.Plugin;
  40. import org.spongepowered.api.plugin.PluginContainer;
  41. import org.spongepowered.api.scheduler.Task;
  42. import org.spongepowered.api.text.Text;
  43. import org.spongepowered.api.text.action.TextActions;
  44. import org.spongepowered.api.text.channel.MessageChannel;
  45. import org.spongepowered.api.text.format.TextColors;
  46. import org.spongepowered.api.text.serializer.TextSerializers;
  47.  
  48. import com.google.inject.Inject;
  49. import com.mineaurion.tjk.AurionsVoteListener.commands.ClearqueueCmd;
  50. import com.mineaurion.tjk.AurionsVoteListener.commands.CleartotalsCmd;
  51. import com.mineaurion.tjk.AurionsVoteListener.commands.FakeVoteCommand;
  52. import com.mineaurion.tjk.AurionsVoteListener.commands.ForcequeueCmd;
  53. import com.mineaurion.tjk.AurionsVoteListener.commands.VoteCommand;
  54. import com.mineaurion.tjk.AurionsVoteListener.commands.VoteTopCmd;
  55. import com.vexsoftware.votifier.model.Vote;
  56. import com.vexsoftware.votifier.sponge.event.VotifierEvent;
  57.  
  58. import ninja.leaping.configurate.ConfigurationNode;
  59. import ninja.leaping.configurate.commented.CommentedConfigurationNode;
  60. import ninja.leaping.configurate.loader.ConfigurationLoader;
  61.  
  62. @Plugin(id =AurionsVoteListener.AURIONS_ID, name="AurionsVoteListener",version="1.0",authors = {"THEJean_Kevin"}, description = "A votifier listener for Sponge", dependencies = {@Dependency(id = "nuvotifier", optional = true)})
  63. public class AurionsVoteListener {
  64.    
  65.     @Inject Logger logger;
  66.     public Logger getLogger()
  67.     {
  68.         return logger;
  69.     }
  70.    
  71.     @Inject private PluginContainer plugin;
  72.    
  73.     @Inject
  74.     @DefaultConfig(sharedRoot = false)
  75.     private Path defaultConfig;
  76.    
  77.     @Inject
  78.     @DefaultConfig(sharedRoot = false)
  79.     private ConfigurationLoader<CommentedConfigurationNode> loader;
  80.    
  81.    
  82.     @Inject
  83.     @ConfigDir(sharedRoot = false)
  84.     private Path privateConfigDir;
  85.     public Path ConfigDir;
  86.     private CommentedConfigurationNode rootNode;
  87.     public CommentedConfigurationNode getNode(){
  88.         return this.rootNode;
  89.     }
  90.     //global
  91.     private static AurionsVoteListener instance;
  92.     public String SQLType;
  93.     public String SQLFile;
  94.     public final static String AURIONS_ID = "aurionsvotelistener";
  95.     public static final String ANSI_RED = "\u001B[31m";
  96.     public static final String ANSI_RESET = "\u001B[0m";
  97.     public Task task;
  98.    
  99.     //Settings
  100.     public boolean onlineOnly=true;
  101.     public boolean broadcastoffline=false;
  102.     public boolean votecommand=true;
  103.     public boolean joinmessage=true;
  104.     public String dbHost;
  105.     public int dbPort=3306;
  106.     public String dbUser;
  107.     public String dbPass;
  108.     public String dbName;
  109.     public String dbPrefix;
  110.     public String dbTableTotal = "ListenerTotal";
  111.     public String dbTableQueue = "ListenerQueue";
  112.     public int votetopnumber=10;
  113.     public boolean AddExtraRandom=false;
  114.     public boolean GiveChanceReward=true;
  115.     public static List<Integer> extrarandom = new ArrayList<Integer>();
  116.     public int delay = 300;
  117.    
  118.     //Message
  119.     public static List<String> voteMessage = new ArrayList<String>();
  120.     public List<String> messagejoin = new ArrayList<String>();
  121.     public List<String> annoucement = new ArrayList<String>();
  122.    
  123.     //votetop
  124.     public String votetopformat="<POSITION>. <GREEN><username> - <WHITE><TOTAL>";
  125.     public static List<String> votetopheader = new ArrayList<String>();
  126.    
  127.    
  128.  
  129.    
  130.     @Listener
  131.     public void onInitialization(GameInitializationEvent event)
  132.      {
  133.         AurionsVoteListener.instance = this;
  134.         ConfigDir = privateConfigDir;
  135.         getLogger().info("AurionsVoteListener Vote loading...");
  136.         getLogger().info("Trying To setup Config Loader");
  137.        
  138.         Asset configAsset = plugin.getAsset("aurionsvotelistener.conf").get();
  139.  
  140.  
  141.         if (Files.notExists(defaultConfig)) {
  142.             if (configAsset != null) {
  143.                 try {
  144.                     getLogger().info("Copying Default Config");
  145.                     configAsset.copyToFile(defaultConfig);
  146.                 } catch (IOException e) {
  147.                     e.printStackTrace();
  148.                     getLogger().error("Could not unpack the default config from the jar! Maybe your Minecraft server doesn't have write permissions?");
  149.                     return;
  150.                 }
  151.             } else {
  152.                 getLogger().error("Could not find the default config file in the jar! Did you open the jar and delete it?");
  153.                 return;
  154.             }
  155.         }
  156.        
  157.          
  158.         reloadConfig();
  159.        
  160.        
  161.        
  162.         CommandSpec fakeVoteCmd = CommandSpec.builder()
  163.                  .permission("listener.admin")
  164.                  .description(Text.of("send a fakevote"))
  165.                  .arguments(
  166.                 GenericArguments.player(Text.of("player")),
  167.                 GenericArguments.optional(GenericArguments.string(Text.of("service")))
  168.                 )
  169.                  .executor(new FakeVoteCommand())
  170.                  .build();
  171.    
  172.         CommandSpec clearqueueCmd = CommandSpec.builder()
  173.                  .permission("listener.admin")
  174.                  .description(Text.of("clear Queue's database"))
  175.                  .executor(new ClearqueueCmd())
  176.                  .build();
  177.          
  178.         CommandSpec cleartotalsCmd = CommandSpec.builder()
  179.                  .permission("listener.admin")
  180.                  .description(Text.of("clear total's database"))
  181.                  .executor(new CleartotalsCmd())
  182.                  .build();
  183.        
  184.         CommandSpec reloadCmd = CommandSpec.builder()
  185.                  .permission("listener.admin")
  186.                  .description(Text.of("Reload your configs"))
  187.                  .executor(new CommandExecutor(){
  188.  
  189.                    
  190.  
  191.                     @Override
  192.                     public CommandResult execute(CommandSource src, CommandContext args) throws CommandException {
  193.                         task.cancel();
  194.                         reloadConfig();
  195.                         src.sendMessage(Text.of("Reload success"));
  196.                         return CommandResult.success();
  197.                     }
  198.                      
  199.                  })
  200.                  .build();
  201.          
  202.          CommandSpec forcequeueCmd = CommandSpec.builder()
  203.                  .permission("listener.admin")
  204.                  .description(Text.of("Empty the database by executing the votes"))
  205.                  .executor(new ForcequeueCmd())
  206.                  .build();
  207.          
  208.          CommandSpec VoteCmd = CommandSpec.builder()
  209.                  .description(Text.of("Vote Command"))
  210.                  .executor(new VoteCommand())
  211.                  .build();
  212.          
  213.          CommandSpec votetopCmd = CommandSpec.builder()
  214.                  .description(Text.of("Vote Top command"))
  215.                  .executor(new VoteTopCmd())
  216.                  .build();
  217.          
  218.          CommandSpec listenerCommandSpec = CommandSpec.builder()
  219.                  .permission("listener.admin")
  220.                  .description(Text.of("Plugin management"))
  221.                  //.child(VoteCmd, "vote")
  222.                  //.child(votetopCmd,"votetop")
  223.                  .child(cleartotalsCmd,"cleartotals")
  224.                  .child(fakeVoteCmd, "fakevote")
  225.                  .child(clearqueueCmd,"clearqueue")
  226.                  .child(forcequeueCmd,"forcequeue")
  227.                  .child(reloadCmd, "reload")
  228.                  .build();
  229.          
  230.          Sponge.getCommandManager().register(this, listenerCommandSpec, "Aurions");
  231.          Sponge.getCommandManager().register(this, VoteCmd, "Vote");
  232.          Sponge.getCommandManager().register(this, votetopCmd, "Votetop");
  233.          logger.info("AurionsVoteListener Enabled");
  234.          
  235.      }
  236.    
  237.    
  238.    
  239.    
  240.    
  241.     public void GetValues(ConfigurationNode Node){
  242.         extrarandom.clear();
  243.         voteMessage.clear();
  244.         messagejoin.clear();
  245.         votetopheader.clear();
  246.         //seting
  247.         onlineOnly = Node.getNode("settings","onlineonly").getBoolean();
  248.         broadcastoffline = Node.getNode("settings","broadcastoffline").getBoolean();
  249.         votecommand = Node.getNode("settings","votecommand").getBoolean();
  250.         joinmessage = Node.getNode("settings","joinmessage").getBoolean();
  251.         SQLType = Node.getNode("settings","dbMode").getString();
  252.         dbHost= Node.getNode("settings","dbHost").getString();
  253.         dbPort= Node.getNode("settings","dbPort").getInt();
  254.         dbPrefix = Node.getNode("settings","dbPrefix").getString();
  255.         dbUser = Node.getNode("settings","dbUser").getString();
  256.         dbPass = Node.getNode("settings","dbPass").getString();
  257.         dbName = Node.getNode("settings","dbName").getString();
  258.         dbTableTotal = Node.getNode("settings","dbTableTotal").getString();
  259.         dbTableQueue = Node.getNode("settings","dbTableQueue").getString();
  260.         votetopnumber = Node.getNode("settings","votetopnumber").getInt();
  261.         SQLFile = Node.getNode("settings","dbFile").getString();
  262.         AddExtraRandom = Node.getNode("settings","AddExtraRandom").getBoolean();
  263.         GiveChanceReward = Node.getNode("settings","GiveChanceReward").getBoolean();
  264.         delay = Node.getNode("settings","AnnouncementDelay").getInt();
  265.        
  266.         for(Entry<Object, ? extends ConfigurationNode> markers : rootNode.getNode("ExtraReward").getChildrenMap().entrySet())
  267.         {
  268.             String key = (String) markers.getKey();
  269.             extrarandom.add(100-Integer.parseInt(key));
  270.         }
  271.         Collections.sort(extrarandom);
  272.        
  273.        
  274.        
  275.         //Message
  276.         voteMessage = Node.getNode("votemessage").getChildrenList().stream().map(ConfigurationNode::getString).collect(Collectors.toList());
  277.         messagejoin = Node.getNode("joinmessage").getChildrenList().stream().map(ConfigurationNode::getString).collect(Collectors.toList());
  278.         annoucement = Node.getNode("Announcement").getChildrenList().stream().map(ConfigurationNode::getString).collect(Collectors.toList());
  279.  
  280.         //topvote
  281.         votetopformat = Node.getNode("votetopformat").getString();
  282.         votetopheader = Node.getNode("votetopheader").getChildrenList().stream().map(ConfigurationNode::getString).collect(Collectors.toList());
  283.        
  284.         }
  285.    
  286.    
  287.     public void reloadConfig(){
  288.         try {
  289.             rootNode = loader.load();
  290.             rootNode.mergeValuesFrom(other);
  291.             getLogger().info("loading successfull");
  292.         } catch (IOException e) {
  293.             getLogger().error("There was an error while reloading your configs");
  294.             getLogger().error(e.toString());
  295.         }
  296.        
  297.         GetValues(rootNode);
  298.        
  299.         if((SQLType=="MySQL")&&(dbHost.isEmpty()||dbHost==null||dbUser.isEmpty()||dbUser==null||dbPass.isEmpty()||dbPass==null)){
  300.             getLogger().warn("Please config database");
  301.             Sponge.getGame().getServer().getConsole().sendMessage(TextSerializers.formattingCode('§').deserialize("[AurionsVoteListener] §c----------------------"));
  302.             Sponge.getGame().getServer().getConsole().sendMessage(TextSerializers.formattingCode('§').deserialize("[AurionsVoteListener] §cPlease config database"));
  303.             Sponge.getGame().getServer().getConsole().sendMessage(TextSerializers.formattingCode('§').deserialize("[AurionsVoteListener] §c----------------------"));
  304.         }else{
  305.             try {
  306.                 if ((SwitchSQL.connection != null)&& (!SwitchSQL.connection.isClosed())){
  307.                 SwitchSQL.Close();
  308.                 SwitchSQL.open(AurionsVoteListener.GetInstance().dbHost,AurionsVoteListener.GetInstance().dbPort,AurionsVoteListener.GetInstance().dbUser,AurionsVoteListener.GetInstance().dbPass,AurionsVoteListener.GetInstance().dbName,AurionsVoteListener.GetInstance().dbPrefix);
  309.                 }else{
  310.                     SwitchSQL.open(dbHost,dbPort,dbUser,dbPass,dbName,dbPrefix);
  311.                 }
  312.             } catch (SQLException e) {
  313.                 e.printStackTrace();
  314.             }
  315.         }
  316.        
  317.         //Runnable task
  318.        
  319.        
  320.         task = (Task) Task.builder().execute(new Runnable() {
  321.              public void run(){
  322.                  for(int i = 0;i<annoucement.size();i++){
  323.                     MessageChannel messageChannel = MessageChannel.TO_PLAYERS;
  324.                     messageChannel.send(AurionsVoteListener.GetInstance().formatmessage(annoucement.get(i), "", ""));
  325.                  }
  326.              }
  327.          }).async().delay(delay, TimeUnit.SECONDS).interval(delay, TimeUnit.SECONDS).submit(plugin);
  328.          if(delay<0){task.cancel();}
  329.        
  330.        
  331.     }
  332.    
  333.  
  334.  
  335.     public static AurionsVoteListener GetInstance(){
  336.         return AurionsVoteListener.instance;
  337.     }
  338.    
  339.    
  340.     public Text formatmessage(String message,String service,String player) {
  341.         if (message == null){
  342.         return Text.of("");
  343.         }
  344.         String serviceName = service;
  345.         String playerName = player;
  346.         int votes = 0;
  347.        
  348.        
  349.         if (message.contains("<votes>")){
  350.             votes = SwitchSQL.TotalsVote(playerName);
  351.             message = message.replace("<votes>", String.valueOf(votes));
  352.             }
  353.        
  354.        
  355.        
  356.         if (message.indexOf("/") == 0) {
  357.             message = message.substring(1);
  358.           }
  359.         message = message.replace("<servicename>", serviceName).replace("<service>", serviceName).replace("<SERVICE>", serviceName).replace("<name>", playerName).replace("(name)", playerName)
  360.                   .replace("<player>", playerName).replace("(player)", playerName).replace("<username>", playerName).replace("(username)", playerName).replace("<name>", playerName)
  361.                   .replace("<player>", playerName).replace("<username>", playerName).replace("[name]", playerName).replace("[player]", playerName).replace("[username]", playerName)
  362.                   .replace("<AQUA>", "§b").replace("<BLACK>", "§0").replace("<BLUE>", "§9")
  363.                   .replace("<DARK_AQUA>", "§3").replace("<DARK_BLUE>", "§1").replace("<DARK_GRAY>", "§8")
  364.                   .replace("<DARK_GREEN>", "§2").replace("<DARK_PURPLE>", "§5").replace("<DARK_RED>", "§4")
  365.                   .replace("<GOLD>", "§6").replace("<GRAY>", "§7").replace("<GREEN>", "§a")
  366.                   .replace("<LIGHT_PURPLE>", "§d").replace("<RED>", "§c").replace("<WHITE>", "§f")
  367.                   .replace("<YELLOW>", "§e").replace("<BOLD>", "§l").replace("<ITALIC>", "§o")
  368.                   .replace("<MAGIC>", "§k").replace("<RESET>", "§r").replace("<STRIKE>", "§m")
  369.                   .replace("<STRIKETHROUGH>", "§m").replace("<UNDERLINE>", "§n").replace("<votes>", String.valueOf(votes));
  370.        
  371.        
  372.         if(message.toLowerCase().contains("http"))
  373.         {
  374.             String url = "";
  375.             Pattern pattern = Pattern.compile("http(\\S+)\\b");
  376.             Matcher matcher = pattern.matcher(message);
  377.             if (matcher.find())
  378.             {
  379.               url = matcher.group(0);
  380.             }
  381.             Text text = null;          
  382.             try {
  383.                 text = TextSerializers.formattingCode('§').deserialize(message).toBuilder().onClick(TextActions.openUrl(new URL(url))).build();   
  384.             } catch (MalformedURLException e) {
  385.                 e.printStackTrace();
  386.                 return Text.of("Url False, contact admin");
  387.             }
  388.            
  389.             return text;
  390.         }
  391.  
  392.        
  393.         else
  394.         {
  395.             return TextSerializers.formattingCode('§').deserialize(message);
  396.         }
  397.        
  398.        
  399.        
  400.     }
  401.    
  402.     @Listener
  403.     public void onVote(VotifierEvent event){
  404.         Vote vote = event.getVote();
  405.         String player = vote.getUsername();
  406.        
  407.         if(AurionsVoteListener.GetInstance().onlineOnly){
  408.             Optional<Player> target = Sponge.getServer().getPlayer(player);
  409.             if(target.isPresent()){
  410.                 player = target.get().getName();
  411.                 RewardsTask.online(player,vote.getServiceName());
  412.             }else{
  413.                 SwitchSQL.offline(vote.getUsername(),vote.getServiceName(),vote.getTimeStamp(),vote.getAddress());
  414.                 Sponge.getServer().getConsole().sendMessage(Text.of("joueur pas connecter"));  
  415.             }
  416.         }
  417.         else{
  418.             RewardsTask.online(player, vote.getServiceName());
  419.         }
  420.     }
  421.    
  422.     @Listener
  423.     public void onPlayerJoin(ClientConnectionEvent.Join event)
  424.     {
  425.         Player player = (Player)event.getTargetEntity();
  426.         String username = player.getName();
  427.         if((AurionsVoteListener.GetInstance().SQLType=="MySQL")&&(dbHost.isEmpty()||dbHost==null||dbUser.isEmpty()||dbUser==null||dbPass.isEmpty()||dbPass==null)){
  428.             if(player.hasPermission("*")||player.hasPermission("listener.top")){
  429.                 player.sendMessage(Text.builder("<AurionsVoteListener> Please config Database.").color(TextColors.RED).build());
  430.             }
  431.         }
  432.         else{
  433.             if(SwitchSQL.QueueUsername(username)){
  434.                
  435.                 List<String> service = SwitchSQL.QueueReward(username);
  436.                  for(int i = 0; i < service.size(); i++)
  437.                     {
  438.                      RewardsTask.online(username, service.get(i));
  439.                      SwitchSQL.removeQueue(username, service.get(i));
  440.                     }
  441.             }else{
  442.             }
  443.             if(joinmessage){
  444.                 for(int i = 0; i<AurionsVoteListener.GetInstance().messagejoin.size();i++){
  445.                     player.sendMessage(formatmessage(AurionsVoteListener.GetInstance().messagejoin.get(i),"",username));
  446.                 }
  447.             }
  448.         }
  449.     }
  450. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement