Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java b/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
- index 9284459..aeb4628 100644
- --- a/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
- +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
- @@ -82,6 +82,7 @@
- import net.sf.l2j.gameserver.instancemanager.SevenSigns;
- import net.sf.l2j.gameserver.instancemanager.SevenSignsFestival;
- import net.sf.l2j.gameserver.instancemanager.ZoneManager;
- +import net.sf.l2j.gameserver.integrations.TwitchRewardManager;
- import net.sf.l2j.gameserver.model.World;
- import net.sf.l2j.gameserver.model.entity.Hero;
- import net.sf.l2j.gameserver.model.olympiad.Olympiad;
- @@ -273,8 +274,8 @@ public GameServer() throws Exception
- LotteryManager.getInstance();
- AchievementsManager.INSTANCE.initialise();
- + TwitchRewardManager.INSTANCE.initialise();
- FakePlayerManager.INSTANCE.initialise();
- if (Config.ALLOW_WEDDING)
- CoupleManager.getInstance();
- diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardManager.java b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardManager.java
- index 6988a51..6b69162 100644
- --- a/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardManager.java
- +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardManager.java
- +package net.sf.l2j.gameserver.integrations;
- +
- +import com.google.gson.JsonElement;
- +import com.google.gson.JsonObject;
- +import com.google.gson.JsonParser;
- +
- +import java.io.BufferedReader;
- +import java.io.IOException;
- +import java.io.InputStreamReader;
- +import java.net.HttpURLConnection;
- +import java.net.URL;
- +
- +import net.sf.l2j.commons.concurrent.ThreadPool;
- +
- +/**
- + * @author Elfocrash
- + *
- + */
- +public enum TwitchRewardManager
- +{
- + INSTANCE;
- +
- + private final String apiRootUrl = "https://api.twitch.tv/";
- + private final String krakenApiUrl = apiRootUrl + "kraken/";
- + private final String streamsApiUrl = krakenApiUrl + "streams/";
- + private final String apiClientId = "";
- + private final int rewardTaskIntervalms = 120000;
- + private final int reminderTaskIntervalms = 60000;
- + private final int viewersForReward = 200;
- + private final int rewardId = 57;
- + private final int rewardCount = 10000;
- + private final String streamerUsername = "riotgames";
- +
- + public void initialise()
- + {
- + startReminderTask();
- + startRewardTask();
- + }
- +
- + private void startRewardTask()
- + {
- + ThreadPool.scheduleAtFixedRate(new TwitchRewardTask(streamerUsername), rewardTaskIntervalms, rewardTaskIntervalms);
- + }
- +
- + private void startReminderTask()
- + {
- + ThreadPool.scheduleAtFixedRate(new TwitchRewardReminderTask(streamerUsername), reminderTaskIntervalms, reminderTaskIntervalms);
- + }
- +
- + public boolean isStreaming(String apiResponse)
- + {
- + if(apiResponse.length() == 0)
- + return false;
- +
- + JsonObject streamObject = getStreamObjectFromApiResponse(apiResponse);
- +
- + return streamObject != null;
- + }
- +
- + public int getViewerCount(String apiResponse)
- + {
- + if(apiResponse.length() == 0)
- + return 0;
- +
- + JsonObject streamObject = getStreamObjectFromApiResponse(apiResponse);
- +
- + if(streamObject == null)
- + return 0;
- +
- + int viewCount = streamObject.get("viewers").getAsInt();
- + return viewCount;
- + }
- +
- + public String getChannelName(String apiResponse)
- + {
- + JsonObject channelObject = getChannelObject(apiResponse);
- + return channelObject.get("display_name").getAsString();
- + }
- +
- + public String getChannelUrl(String apiResponse)
- + {
- + JsonObject channelObject = getChannelObject(apiResponse);
- + return channelObject.get("url").getAsString();
- + }
- +
- + private JsonObject getChannelObject(String apiResponse)
- + {
- + if(apiResponse.length() == 0)
- + return null;
- +
- + JsonObject streamObject = getStreamObjectFromApiResponse(apiResponse);
- +
- + if(streamObject == null)
- + return null;
- +
- + if(!streamObject.get("channel").isJsonObject())
- + return null;
- +
- + JsonObject channelObject = streamObject.get("channel").getAsJsonObject();
- +
- + return channelObject;
- + }
- +
- + public String getStreamForUser(String username)
- + {
- + try
- + {
- + return getApiResponseFromGET(getStreamUrlForUser(username));
- + }
- + catch (IOException e)
- + {
- + e.printStackTrace();
- + }
- + return "";
- + }
- +
- + public int getViewersForReward()
- + {
- + return viewersForReward;
- + }
- +
- + public int getRewardId()
- + {
- + return rewardId;
- + }
- +
- + public int getRewardCount()
- + {
- + return rewardCount;
- + }
- +
- + private String getApiResponseFromGET(String url) throws IOException
- + {
- + URL obj = new URL(url);
- + HttpURLConnection con = (HttpURLConnection) obj.openConnection();
- + con.setRequestMethod("GET");
- + con.setRequestProperty("Client-ID", apiClientId);
- + int responseCode = con.getResponseCode();
- + if (responseCode == HttpURLConnection.HTTP_OK) {
- + BufferedReader in = new BufferedReader(new InputStreamReader(
- + con.getInputStream()));
- + String inputLine;
- + StringBuffer response = new StringBuffer();
- +
- + while ((inputLine = in.readLine()) != null) {
- + response.append(inputLine);
- + }
- + in.close();
- +
- + return response.toString();
- + }
- + return "";
- + }
- +
- + private String getStreamUrlForUser(String username)
- + {
- + return streamsApiUrl + username;
- + }
- +
- + private JsonObject getStreamObjectFromApiResponse(String apiResponse)
- + {
- + JsonElement jelement = new JsonParser().parse(apiResponse);
- + JsonObject jobject = jelement.getAsJsonObject();
- +
- + if(jobject.get("stream").isJsonObject()) {
- + JsonObject streamObject = jobject.get("stream").getAsJsonObject();
- + return streamObject;
- + }
- + return null;
- + }
- +}
- diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardReminderTask.java b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardReminderTask.java
- new file mode 100644
- index 0000000..572ee7b
- --- /dev/null
- +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardReminderTask.java
- @@ -0,0 +1,37 @@
- +package net.sf.l2j.gameserver.integrations;
- +
- +import net.sf.l2j.gameserver.util.Broadcast;
- +
- +/**
- + * @author Elfocrash
- + *
- + */
- +public class TwitchRewardReminderTask implements Runnable
- +{
- + private final String _username;
- + private final String reminderTemplate = "Our streamer %s is currently live with %s viewers. Go at %s to see him.";
- + private final String rewardReminderTemplate = "We are rewarding every online player when more than %s viewers are watching.";
- +
- + public TwitchRewardReminderTask(String username)
- + {
- + _username = username;
- + }
- +
- + @Override
- + public void run()
- + {
- + String apiResponse = TwitchRewardManager.INSTANCE.getStreamForUser(_username);
- + boolean streaming = TwitchRewardManager.INSTANCE.isStreaming(apiResponse);
- +
- + if(!streaming)
- + return;
- +
- + String streamUrl = TwitchRewardManager.INSTANCE.getChannelUrl(apiResponse);
- + String channelName = TwitchRewardManager.INSTANCE.getChannelName(apiResponse);
- + int viewerCount = TwitchRewardManager.INSTANCE.getViewerCount(apiResponse);
- +
- + Broadcast.announceToOnlinePlayers(String.format(reminderTemplate, channelName, viewerCount, streamUrl), false);
- + Broadcast.announceToOnlinePlayers(String.format(rewardReminderTemplate, TwitchRewardManager.INSTANCE.getViewersForReward()), false);
- + }
- +
- +}
- diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardTask.java b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardTask.java
- new file mode 100644
- index 0000000..a82c229
- --- /dev/null
- +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/integrations/TwitchRewardTask.java
- @@ -0,0 +1,45 @@
- +package net.sf.l2j.gameserver.integrations;
- +
- +import net.sf.l2j.gameserver.data.ItemTable;
- +import net.sf.l2j.gameserver.model.World;
- +import net.sf.l2j.gameserver.util.Broadcast;
- +
- +/**
- + * @author Elfocrash
- + *
- + */
- +public class TwitchRewardTask implements Runnable
- +{
- + private final String _username;
- + private final String successRewardTemplate = "Thanks for watching our streamer. Online players rewarded with %s %s(s).";
- + private final String failureRewardTemplate = "Unfortunately not enought viewers were watching the stream. Current viewers %s. Needed viewers %s.";
- +
- + public TwitchRewardTask(String username)
- + {
- + _username = username;
- + }
- +
- + @Override
- + public void run()
- + {
- + String apiResponse = TwitchRewardManager.INSTANCE.getStreamForUser(_username);
- + boolean streaming = TwitchRewardManager.INSTANCE.isStreaming(apiResponse);
- +
- + if(!streaming)
- + return;
- +
- + int currentViewers = TwitchRewardManager.INSTANCE.getViewerCount(apiResponse);
- + int neededViewers = TwitchRewardManager.INSTANCE.getViewersForReward();
- +
- + int rewardId = TwitchRewardManager.INSTANCE.getRewardId();
- + int rewardCount = TwitchRewardManager.INSTANCE.getRewardCount();
- +
- + if(currentViewers >= neededViewers) {
- + World.getInstance().getPlayers().stream().forEach(x->x.addItem("reward", rewardId, rewardCount, x, true));
- + Broadcast.announceToOnlinePlayers(String.format(successRewardTemplate, rewardCount, ItemTable.getInstance().getTemplate(rewardId).getName()), false);
- + } else {
- + Broadcast.announceToOnlinePlayers(String.format(failureRewardTemplate, currentViewers, neededViewers), false);
- + }
- +
- + }
- +}
- diff --git a/aCis_gameserver/lib/gson-2.6.2.jar b/aCis_gameserver/lib/gson-2.6.2.jar
- new file mode 100644
- index 0000000..9d78626
- Binary files /dev/null and b/aCis_gameserver/lib/gson-2.6.2.jar differ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement