aboutsummaryrefslogtreecommitdiff
path: root/src/Java
diff options
context:
space:
mode:
authorJordan Byrne <draknyte1@hotmail.com>2017-12-11 17:10:49 +1000
committerJordan Byrne <draknyte1@hotmail.com>2017-12-11 17:10:49 +1000
commit95ab6ec8e84f6d1bb507d563b991307fb63f65d6 (patch)
tree7ef51e8e9a7623043d817da4d45916b74160156e /src/Java
parent59a92cdfe5f339051eda0f092ed4020a7d164566 (diff)
downloadGT5-Unofficial-95ab6ec8e84f6d1bb507d563b991307fb63f65d6.tar.gz
GT5-Unofficial-95ab6ec8e84f6d1bb507d563b991307fb63f65d6.tar.bz2
GT5-Unofficial-95ab6ec8e84f6d1bb507d563b991307fb63f65d6.zip
$ More work on Segment Analytics.
+ Added functions to identify myself as a player. % Updated Segment 2.1.0 Bundled Library.
Diffstat (limited to 'src/Java')
-rw-r--r--src/Java/gtPlusPlus/GTplusplus.java17
-rw-r--r--src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java143
-rw-r--r--src/Java/gtPlusPlus/core/config/ConfigHandler.java3
-rw-r--r--src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java11
-rw-r--r--src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java21
-rw-r--r--src/Java/gtPlusPlus/core/lib/CORE.java3
-rw-r--r--src/Java/gtPlusPlus/core/util/player/PlayerUtils.java13
7 files changed, 167 insertions, 44 deletions
diff --git a/src/Java/gtPlusPlus/GTplusplus.java b/src/Java/gtPlusPlus/GTplusplus.java
index 5b0ce82689..21ba73c1cb 100644
--- a/src/Java/gtPlusPlus/GTplusplus.java
+++ b/src/Java/gtPlusPlus/GTplusplus.java
@@ -17,6 +17,7 @@ import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gregtech.api.util.Recipe_GT.Gregtech_Recipe_Map;
import gtPlusPlus.api.analytics.SegmentAnalytics;
+import gtPlusPlus.api.analytics.SegmentHelper;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.core.commands.CommandMath;
import gtPlusPlus.core.common.CommonProxy;
@@ -30,6 +31,7 @@ import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.geo.GeoUtils;
import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.core.util.networking.NetworkUtils;
+import gtPlusPlus.core.util.player.PlayerUtils;
import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtTools;
@@ -84,7 +86,7 @@ public class GTplusplus implements ActionListener {
CORE.USER_COUNTRY = GeoUtils.determineUsersCountry();
// Handle GT++ Config
- ConfigHandler.handleConfigFile(event);
+ ConfigHandler.handleConfigFile(event);
//Check for Dev
CORE.DEVENV = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment");
@@ -149,10 +151,14 @@ public class GTplusplus implements ActionListener {
public void serverStopping(final FMLServerStoppingEvent event) {
//Flush all data to Server at the end of the day.
if (SegmentAnalytics.sAnalyticsMasterList.size() > 0){
+ int i=0;
for (SegmentAnalytics sa : SegmentAnalytics.sAnalyticsMasterList.values()){
- sa.flushAllData();
+ sa.flushDataFinal();
+ SegmentAnalytics.LOG("Cleaned up Analytics Data for player "+sa.mLocalName+".");
+ i++;
}
}
+
}
@Override
@@ -177,6 +183,11 @@ public class GTplusplus implements ActionListener {
private static final void initAnalytics(){
-
+ SegmentAnalytics.isEnabled = CORE.ConfigSwitches.enableUpdateChecker;
+ if (PlayerUtils.isPlayerAlkalus()){
+ SegmentAnalytics.isEnabled = true;
+ }
+
+ new SegmentHelper();
}
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java b/src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java
index 18b53fabe7..90381bc5cb 100644
--- a/src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java
+++ b/src/Java/gtPlusPlus/api/analytics/SegmentAnalytics.java
@@ -2,12 +2,19 @@ package gtPlusPlus.api.analytics;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Phaser;
import com.mojang.authlib.GameProfile;
import com.segment.analytics.Analytics;
+import com.segment.analytics.Callback;
+import com.segment.analytics.Log;
+import com.segment.analytics.MessageInterceptor;
import com.segment.analytics.messages.IdentifyMessage;
+import com.segment.analytics.messages.Message;
import com.segment.analytics.messages.TrackMessage;
import gtPlusPlus.core.lib.CORE;
@@ -37,40 +44,66 @@ public class SegmentAnalytics {
final Analytics mAnalytics;
final UUIDGenerator mUuidGenerator;
- final GameProfile mLocalProfile;
- final String aLocalName;
- final UUID aUUID;
- final String aUserName;
- final String anonymousId;
+ public final GameProfile mLocalProfile;
+ public final String mLocalName;
+ public final UUID mUUID;
+ public final String mUserName;
+ public final String mAnonymousId;
+ final protected Phaser mPhaser;
//Build a new instance of this class
public SegmentAnalytics(EntityPlayer mPlayer){
LOG("Generating a new instance of Segment Analytics Handler 2.1.0 for "+mPlayer.getDisplayName());
+ //Give this Object an ID
int currentID = sAnalyticsMapID;
sAnalyticsMapID++;
+ //Map this Object to it's ID and a Player UUID.
sAnalyticsMasterList.put(currentID, this);
- sAnalyticsToPlayermap.put(mPlayer.getUniqueID(), currentID);
+ sAnalyticsToPlayermap.put(mPlayer.getUniqueID(), currentID);
+ //Create a Phaser
+ this.mPhaser = new Phaser(1);
+
+ //Set vars for player
this.mLocalProfile = mPlayer.getGameProfile();
- this.aLocalName = mLocalProfile.getName();
- this.aUUID = PlayerUtils.getPlayersUUIDByName(aLocalName);
- this.aUserName = aUUID.toString();
- this.anonymousId = getStringForm(generateIdForSession());
+ this.mLocalName = mLocalProfile.getName();
+ this.mUUID = PlayerUtils.getPlayersUUIDByName(mLocalName);
+ this.mUserName = mUUID.toString();
+ this.mAnonymousId = getStringForm(generateIdForSession());
//Create a new UUID generator.
this.mUuidGenerator = new UUIDGenerator();
//Use Segment Analytics instead of plain Google Analytics.
this.mBlockingFlush = BlockingFlush.create();
- this.mAnalytics = Analytics.builder("API_KEY_GOES_HERE") //
+ this.mAnalytics = Analytics.builder("API_KEY_GOES_HERE")
+ .log(Log.NONE) //Try enable http logging?
.plugin(mBlockingFlush.plugin())
.plugin(new AnalyticsLoggingPlugin())
+ .callback(new Callback() {
+ @Override
+ public void success(Message message) {
+ mPhaser.arrive();
+ }
+
+ @Override
+ public void failure(Message message, Throwable throwable) {
+ mPhaser.arrive();
+ }
+ })
+ .messageInterceptor(new MessageInterceptor() {
+ @Override
+ public Message intercept(Message message) {
+ mPhaser.register();
+ return message;
+ }
+ })
.build();
- //Let us submit a doorknock to Segment to let them know who this is.
- submitInitData(mPlayer);
+
+ initTimer(mPlayer);
}
//Sets vars and stops Analytics running if the player profile is invalid.
@@ -79,11 +112,11 @@ public class SegmentAnalytics {
if (mLocalProfile == null || !isEnabled){
return false;
}
- if (aLocalName == null || aUUID == null || aUserName == null || anonymousId == null){
+ if (mLocalName == null || mUUID == null || mUserName == null || mAnonymousId == null){
//LOG("One player var remained null, returning false.");
return false;
}
- if (aLocalName != null && aUUID != null && aUserName != null && anonymousId != null){
+ if (mLocalName != null && mUUID != null && mUserName != null && mAnonymousId != null){
//LOG("All player vars are ok, returning true.");
return true;
}
@@ -97,7 +130,7 @@ public class SegmentAnalytics {
return;
}
Map<String, Object> properties = new LinkedHashMap<>();
- properties.put("username", aLocalName);
+ properties.put("username", mLocalName);
properties.put("gt_version", Utils.getGregtechVersionAsString());
if (LoadedMods.IndustrialCraft2){
properties.put("ic2_version", IC2.VERSION);
@@ -107,30 +140,57 @@ public class SegmentAnalytics {
LOG("Created new Data packet, queued for submission.");
mAnalytics.enqueue(IdentifyMessage.builder()
- .userId(aUserName) //Save Username as UUID, for future sessions to attach to.
- .anonymousId(anonymousId) //Save Random Session UUID
- .traits(properties));
+ .userId(mUserName) //Save Username as UUID, for future sessions to attach to.
+ .traits(properties)
+ //.anonymousId(mAnonymousId) //Save Random Session UUID
+ );
- flushAllData();
+ flushData();
}
public void submitTrackingData(String aActionPerformed){
+ submitTrackingData(aActionPerformed, null);
+ }
+
+ public void submitTrackingData(String aActionPerformed, Object aObject){
if (!canProcess()){
return;
}
- LOG("Queued submission of data for event "+aActionPerformed+".");
- mAnalytics.enqueue(TrackMessage.builder(aActionPerformed) //
- //.properties(properties) //Save Stats
- .anonymousId(anonymousId) //Save Random Session UUID
- .userId(aUserName)); // Save Username as UUID, for future sessions to attach to.
- flushAllData();
+ Map<String, Object> properties = new LinkedHashMap<>();
+ properties.put("blockType", aObject);
+ String mObjectAsString = "Unknown";
+
+ if (aObject != null){
+ mObjectAsString = aObject.toString();
+ }
+
+ LOG("Queued submission of data for event "+aActionPerformed+". This was performed on "+mObjectAsString+".");
+ mAnalytics.enqueue(TrackMessage.builder(aActionPerformed) //
+ .userId(mUserName) // Save Username as UUID, for future sessions to attach to.
+ .properties(properties) //Save Stats
+ //.anonymousId(mAnonymousId) //Save Random Session UUID
+ );
+
+ flushData();
}
-
- public void flushAllData(){
+
+ public void flushData(){
+ mAnalytics.flush();
+ }
+
+ public void flushDataFinal(){
LOG("Flushing all data from Queue to Segment Analytics database.");
- this.flushAllData();
mAnalytics.flush();
+ mBlockingFlush.block();
+ mPhaser.arriveAndAwaitAdvance();
+ mAnalytics.shutdown();
+ /*try {
+ this.finalize();
+ }
+ catch (Throwable e) {
+ Utils.LOG_INFO("Could not finalize Analytics Object.");
+ }*/
}
public UUID generateIdForSession(){
@@ -191,4 +251,29 @@ public class SegmentAnalytics {
return null;
}
+ public final Analytics getAnalyticObject() {
+ return mAnalytics;
+ }
+
+
+ public Timer initTimer(EntityPlayer mPlayer) {
+ Timer timer;
+ timer = new Timer();
+ timer.schedule(new initPlayer(mPlayer), 5 * 1000);
+ return timer;
+ }
+
+ //Timer Task for notifying the player.
+ class initPlayer extends TimerTask {
+ final EntityPlayer aPlayer;
+ public initPlayer(EntityPlayer mPlayer) {
+ this.aPlayer = mPlayer;
+ }
+ @Override
+ public void run() {
+ //Let us submit a doorknock to Segment to let them know who this is.
+ submitInitData(aPlayer);
+ }
+ }
+
}
diff --git a/src/Java/gtPlusPlus/core/config/ConfigHandler.java b/src/Java/gtPlusPlus/core/config/ConfigHandler.java
index b2f3caec7d..c86b12b51b 100644
--- a/src/Java/gtPlusPlus/core/config/ConfigHandler.java
+++ b/src/Java/gtPlusPlus/core/config/ConfigHandler.java
@@ -9,7 +9,6 @@ import static gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GT_Met
import java.io.File;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
-import gtPlusPlus.core.lib.CORE.ConfigSwitches;
import net.minecraftforge.common.config.Configuration;
public class ConfigHandler {
@@ -19,7 +18,7 @@ public class ConfigHandler {
new File(event.getModConfigurationDirectory(), "GTplusplus/GTplusplus.cfg"));
config.load();
- ConfigSwitches.enableUpdateChecker = config.getBoolean("enableUpdateChecker", "debug", true,
+ enableUpdateChecker = config.getBoolean("enableUpdateChecker", "debug", true,
"Stops mod checking for updates.");
// Debug
diff --git a/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java b/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java
index 1876c1ef26..b8acf1a704 100644
--- a/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java
@@ -4,10 +4,13 @@ import static gtPlusPlus.core.lib.CORE.ConfigSwitches.chanceToDropDrainedShard;
import static gtPlusPlus.core.lib.CORE.ConfigSwitches.chanceToDropFluoriteOre;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.Map;
import java.util.Random;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import gtPlusPlus.api.analytics.SegmentAnalytics;
+import gtPlusPlus.api.analytics.SegmentHelper;
import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.LoadedMods;
@@ -162,8 +165,12 @@ public class BlockEventHandler {
}
//Try submit some data for this event.
- SegmentAnalytics.getAnalyticsForPlayer(event.harvester).submitTrackingData("Action_Block_Broken");
-
+ //SegmentAnalytics.getAnalyticsForPlayer(event.harvester).submitTrackingData("Action_Block_Broken", event.block.getLocalizedName());
+ Map<String, Object> properties = new LinkedHashMap<>();
+ properties.put("blockType", event.block.getLocalizedName());
+ SegmentHelper.getInstance().trackUser(event.harvester.getUniqueID().toString(), "Action_Block_Broken", properties);
+
+
}
catch (Throwable r){
Utils.LOG_INFO("Block Event Handler Failed. Please Report this to Alkalus.");
diff --git a/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java b/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java
index 52e3845bde..33ee16a91a 100644
--- a/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java
@@ -5,11 +5,14 @@ import java.util.*;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent;
import gtPlusPlus.api.analytics.SegmentAnalytics;
+import gtPlusPlus.api.analytics.SegmentHelper;
import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.proxy.ClientProxy;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.player.PlayerCache;
import gtPlusPlus.core.util.player.PlayerUtils;
+import ic2.core.IC2;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
@@ -32,14 +35,22 @@ public class LoginEventHandler {
}
try {
- new SegmentAnalytics(event.player);
+ //new SegmentAnalytics(event.player);
+
+
+ Map<String, Object> properties = new LinkedHashMap<>();
+ properties.put("username", this.localPlayersName);
+ properties.put("gt_version", Utils.getGregtechVersionAsString());
+ if (LoadedMods.IndustrialCraft2){
+ properties.put("ic2_version", IC2.VERSION);
+ }
+ properties.put("country_code", CORE.USER_COUNTRY);
+ properties.put("gtnh", CORE.GTNH);
+ SegmentHelper.getInstance().addUser(this.localPlayersUUID.toString(), properties);
+
}
catch (Throwable t){
- t.printStackTrace();
- SegmentAnalytics.LOG("====================================================.");
SegmentAnalytics.LOG("Failed to create Analytics submission during log in process.");
- SegmentAnalytics.LOG("Disabling.");
- SegmentAnalytics.isEnabled = false;
}
try {
diff --git a/src/Java/gtPlusPlus/core/lib/CORE.java b/src/Java/gtPlusPlus/core/lib/CORE.java
index 6efb7faaac..9c1133f1c9 100644
--- a/src/Java/gtPlusPlus/core/lib/CORE.java
+++ b/src/Java/gtPlusPlus/core/lib/CORE.java
@@ -11,7 +11,6 @@ import java.util.concurrent.ConcurrentHashMap;
import com.mojang.authlib.GameProfile;
import gregtech.api.GregTech_API;
-import gtPlusPlus.api.analytics.SegmentAnalytics;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.geo.GeoUtils;
@@ -31,8 +30,6 @@ public class CORE {
//import cpw.mods.fml.common.Optional;
-
-
//Analytics handler
//public static SegmentAnalytics mAnalytics;
diff --git a/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java b/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java
index e566a41849..82de626976 100644
--- a/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java
+++ b/src/Java/gtPlusPlus/core/util/player/PlayerUtils.java
@@ -156,5 +156,18 @@ public class PlayerUtils {
}
return null;
}
+
+ public static final boolean isPlayerAlkalus(){
+ return isPlayerAlkalus(Minecraft.getMinecraft().thePlayer);
+ }
+
+ public static final boolean isPlayerAlkalus(EntityPlayer player){
+ if (player != null){
+ if (player.getDisplayName().toLowerCase().equals("draknyte1") || player.getDisplayName().toLowerCase().equals("alkalus")){
+ return true;
+ }
+ }
+ return false;
+ }
}