aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/core
diff options
context:
space:
mode:
authorJordan Byrne <draknyte1@hotmail.com>2018-02-21 14:38:10 +1000
committerJordan Byrne <draknyte1@hotmail.com>2018-02-21 14:38:10 +1000
commit5d15dce9293f7c37089be3adfe0768de425838e2 (patch)
tree85e8146541b0ca71133c0b78fc36f657b5133f19 /src/Java/gtPlusPlus/core
parented93e5e83a08a2312452366f646cb3dd86fa039e (diff)
downloadGT5-Unofficial-5d15dce9293f7c37089be3adfe0768de425838e2.tar.gz
GT5-Unofficial-5d15dce9293f7c37089be3adfe0768de425838e2.tar.bz2
GT5-Unofficial-5d15dce9293f7c37089be3adfe0768de425838e2.zip
$ Tree Farmer Work.
% Package cleanup. - Removed /Bed command.
Diffstat (limited to 'src/Java/gtPlusPlus/core')
-rw-r--r--src/Java/gtPlusPlus/core/block/general/BlockTankXpConverter.java2
-rw-r--r--src/Java/gtPlusPlus/core/block/general/HellFire.java2
-rw-r--r--src/Java/gtPlusPlus/core/client/renderer/RenderPlasmaBolt.java2
-rw-r--r--src/Java/gtPlusPlus/core/commands/CommandMath.java110
-rw-r--r--src/Java/gtPlusPlus/core/common/CommonProxy.java2
-rw-r--r--src/Java/gtPlusPlus/core/entity/EntityTeslaTowerLightning.java2
-rw-r--r--src/Java/gtPlusPlus/core/entity/projectile/EntityHydrofluoricAcidPotion.java2
-rw-r--r--src/Java/gtPlusPlus/core/entity/projectile/EntitySulfuricAcidPotion.java2
-rw-r--r--src/Java/gtPlusPlus/core/handler/BurnableFuelHandler.java2
-rw-r--r--src/Java/gtPlusPlus/core/handler/analytics/AnalyticsLoggingPlugin.java39
-rw-r--r--src/Java/gtPlusPlus/core/handler/analytics/BlockingFlush.java67
-rw-r--r--src/Java/gtPlusPlus/core/handler/analytics/SegmentAnalytics.java271
-rw-r--r--src/Java/gtPlusPlus/core/handler/analytics/SegmentHelper.java81
-rw-r--r--src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java4
-rw-r--r--src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java4
-rw-r--r--src/Java/gtPlusPlus/core/handler/events/ZombieBackupSpawnEventHandler.java2
-rw-r--r--src/Java/gtPlusPlus/core/item/base/BaseEuItem.java2
-rw-r--r--src/Java/gtPlusPlus/core/item/base/BaseItemBurnable.java2
-rw-r--r--src/Java/gtPlusPlus/core/item/general/ItemAreaClear.java2
-rw-r--r--src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java2
-rw-r--r--src/Java/gtPlusPlus/core/item/tool/staballoy/MultiPickaxeBase.java2
-rw-r--r--src/Java/gtPlusPlus/core/lib/CORE.java6
-rw-r--r--src/Java/gtPlusPlus/core/material/Material.java4
-rw-r--r--src/Java/gtPlusPlus/core/slots/SlotModularBaubleUpgrades.java2
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/base/TilePoweredGT.java2
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/machines/TileEntityModularityTable.java2
-rw-r--r--src/Java/gtPlusPlus/core/util/Utils.java2
-rw-r--r--src/Java/gtPlusPlus/core/util/array/AutoMap.java77
-rw-r--r--src/Java/gtPlusPlus/core/util/array/BlockPos.java28
-rw-r--r--src/Java/gtPlusPlus/core/util/array/Pair.java27
-rw-r--r--src/Java/gtPlusPlus/core/util/array/Quad.java33
-rw-r--r--src/Java/gtPlusPlus/core/util/array/Triplet.java27
-rw-r--r--src/Java/gtPlusPlus/core/util/entity/EntityUtils.java2
-rw-r--r--src/Java/gtPlusPlus/core/util/item/ItemUtils.java2
-rw-r--r--src/Java/gtPlusPlus/core/util/math/MathUtils.java2
-rw-r--r--src/Java/gtPlusPlus/core/util/nbt/ModularArmourUtils.java2
-rw-r--r--src/Java/gtPlusPlus/core/util/uuid/UUIDGenerator.java2
-rw-r--r--src/Java/gtPlusPlus/core/world/damage/BaseCustomDamageSource.java22
-rw-r--r--src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_GT_Base.java2
-rw-r--r--src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_Ores.java4
-rw-r--r--src/Java/gtPlusPlus/core/world/darkworld/object/BoxedQuad.java2
-rw-r--r--src/Java/gtPlusPlus/core/world/explosions/MiningExplosion.java2
42 files changed, 581 insertions, 275 deletions
diff --git a/src/Java/gtPlusPlus/core/block/general/BlockTankXpConverter.java b/src/Java/gtPlusPlus/core/block/general/BlockTankXpConverter.java
index ea55a9177d..56ba60a5f3 100644
--- a/src/Java/gtPlusPlus/core/block/general/BlockTankXpConverter.java
+++ b/src/Java/gtPlusPlus/core/block/general/BlockTankXpConverter.java
@@ -9,12 +9,12 @@ import cpw.mods.fml.common.registry.LanguageRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.common.items.GT_MetaGenerated_Tool_01;
+import gtPlusPlus.api.objects.data.Triplet;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.item.base.itemblock.ItemBlockEntityBase;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.tileentities.general.TileEntityXpConverter;
import gtPlusPlus.core.util.Utils;
-import gtPlusPlus.core.util.array.Triplet;
import gtPlusPlus.core.util.enchanting.EnchantingUtils;
import gtPlusPlus.core.util.player.PlayerUtils;
import net.minecraft.block.BlockContainer;
diff --git a/src/Java/gtPlusPlus/core/block/general/HellFire.java b/src/Java/gtPlusPlus/core/block/general/HellFire.java
index a682a0d98d..ef15f373ae 100644
--- a/src/Java/gtPlusPlus/core/block/general/HellFire.java
+++ b/src/Java/gtPlusPlus/core/block/general/HellFire.java
@@ -17,7 +17,7 @@ import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
-import gtPlusPlus.api.objects.XSTR;
+import gtPlusPlus.api.objects.random.XSTR;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.math.MathUtils;
diff --git a/src/Java/gtPlusPlus/core/client/renderer/RenderPlasmaBolt.java b/src/Java/gtPlusPlus/core/client/renderer/RenderPlasmaBolt.java
index f505824bc9..cb17793c59 100644
--- a/src/Java/gtPlusPlus/core/client/renderer/RenderPlasmaBolt.java
+++ b/src/Java/gtPlusPlus/core/client/renderer/RenderPlasmaBolt.java
@@ -3,7 +3,7 @@ package gtPlusPlus.core.client.renderer;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.api.objects.XSTR;
+import gtPlusPlus.api.objects.random.XSTR;
import gtPlusPlus.core.entity.EntityTeslaTowerLightning;
import java.util.Random;
diff --git a/src/Java/gtPlusPlus/core/commands/CommandMath.java b/src/Java/gtPlusPlus/core/commands/CommandMath.java
index 27c963bf81..8e8dfbc36c 100644
--- a/src/Java/gtPlusPlus/core/commands/CommandMath.java
+++ b/src/Java/gtPlusPlus/core/commands/CommandMath.java
@@ -4,10 +4,13 @@ import java.util.ArrayList;
import java.util.List;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.core.util.player.PlayerUtils;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.Entity;
+import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChunkCoordinates;
@@ -21,61 +24,82 @@ public class CommandMath implements ICommand
protected String fullEntityName;
protected Entity conjuredEntity;
- public CommandMath()
- {
+ public CommandMath(){
this.aliases = new ArrayList<>();
-
- this.aliases.add("hometele");
-
- this.aliases.add("warphome");
-
+ //this.aliases.add("hometele");
+ //this.aliases.add("warphome");
}
@Override
- public int compareTo(final Object o)
- {
+ public int compareTo(final Object o){
return 0;
}
@Override
- public String getCommandName()
- {
- return "bed";
+ public String getCommandName(){
+ return "alkalus";
}
@Override
- public String getCommandUsage(final ICommandSender var1)
- {
- return "/bed [Teleports you to your bed for XP]";
+ public String getCommandUsage(final ICommandSender var1){
+ return "/alkalus [Dev Command]";
}
@Override
- public List<String> getCommandAliases()
- {
+ public List<String> getCommandAliases(){
return this.aliases;
}
@Override
- public void processCommand(final ICommandSender S, final String[] argString)
- {
+ public void processCommand(final ICommandSender S, final String[] argString){
final World W = S.getEntityWorld();
- final CommandUtils C = new CommandUtils();
- final EntityPlayer P = C.getPlayer(S);
- //System.out.println(P.getCommandSenderName());
- //System.out.println(P.getDisplayName());
- if (W.isRemote)
-
- {
-
- System.out.println("Not processing on Client side");
-
+ final EntityPlayer P = CommandUtils.getPlayer(S);
+ if (!W.isRemote){
+ if (P.getDisplayName().toLowerCase().equals("draknyte1") || P.getCommandSenderName().toLowerCase().equals("draknyte1")) {
+ String[] prefixes = new String[] {
+ "ingot",
+ "plate",
+ "dust",
+ "gearGt",
+ "block",
+ "ore"
+ };
+ String[] loots = new String[] {
+ "Iron",
+ "Iron",
+ "Iron",
+ "Copper",
+ "Copper",
+ "Copper",
+ "Tin",
+ "Mica",
+ "Steel",
+ "Steel",
+ "Steel",
+ "Invar",
+ "Titanium",
+ "Gold",
+ "Silver",
+ "Lead",
+ "Aluminium"
+ };
+ AutoMap<EntityItem> itemEntities = new AutoMap<EntityItem>();
+ for (String g : prefixes) {
+ for (String s : loots) {
+ itemEntities.put(new EntityItem(W, P.posX, P.posY, P.posZ, ItemUtils.getItemStackOfAmountFromOreDictNoBroken(g+s, 64)));
+ }}
+ for (EntityItem e : itemEntities.values()) {
+ e.lifespan = 30000;
+ }
+
+ }
}
- else
+ /*else
{
@@ -167,36 +191,30 @@ public class CommandMath implements ICommand
gregtech.api.util.GT_Utility.sendChatToPlayer(P, "You don't feel you're able to do this yet.");
}
- }
+ }*/
}
@Override
- public boolean canCommandSenderUseCommand(final ICommandSender var1)
- {
- return true;
-
+ public boolean canCommandSenderUseCommand(final ICommandSender var1){
+ final EntityPlayer P = CommandUtils.getPlayer(var1);
+ if (P.getDisplayName().toLowerCase().equals("draknyte1") || P.getCommandSenderName().toLowerCase().equals("draknyte1")) {
+ return true;
+ }
+ return false;
}
@Override
- public List<?> addTabCompletionOptions(final ICommandSender var1, final String[] var2)
- {
- // TODO Auto-generated method stub
-
+ public List<?> addTabCompletionOptions(final ICommandSender var1, final String[] var2){
return null;
-
}
@Override
- public boolean isUsernameIndex(final String[] var1, final int var2)
- {
+ public boolean isUsernameIndex(final String[] var1, final int var2){
// TODO Auto-generated method stub
-
return false;
-
}
- public boolean playerUsesCommand(final World W, final EntityPlayer P, final int cost)
- {
+ public boolean playerUsesCommand(final World W, final EntityPlayer P, final int cost){
return true;
diff --git a/src/Java/gtPlusPlus/core/common/CommonProxy.java b/src/Java/gtPlusPlus/core/common/CommonProxy.java
index d5f4d95aef..421a522945 100644
--- a/src/Java/gtPlusPlus/core/common/CommonProxy.java
+++ b/src/Java/gtPlusPlus/core/common/CommonProxy.java
@@ -5,8 +5,8 @@ import static gtPlusPlus.core.lib.CORE.DEBUG;
import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.registry.GameRegistry;
import gtPlusPlus.GTplusplus;
-import gtPlusPlus.api.objects.ChunkManager;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.minecraft.ChunkManager;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.entity.InternalEntityRegistry;
diff --git a/src/Java/gtPlusPlus/core/entity/EntityTeslaTowerLightning.java b/src/Java/gtPlusPlus/core/entity/EntityTeslaTowerLightning.java
index 0cd5bd85bf..d1528747a1 100644
--- a/src/Java/gtPlusPlus/core/entity/EntityTeslaTowerLightning.java
+++ b/src/Java/gtPlusPlus/core/entity/EntityTeslaTowerLightning.java
@@ -5,7 +5,7 @@ import java.util.UUID;
import gtPlusPlus.api.damage.DamageTeslaTower;
import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.api.objects.XSTR;
+import gtPlusPlus.api.objects.random.XSTR;
import gtPlusPlus.core.util.entity.EntityUtils;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
diff --git a/src/Java/gtPlusPlus/core/entity/projectile/EntityHydrofluoricAcidPotion.java b/src/Java/gtPlusPlus/core/entity/projectile/EntityHydrofluoricAcidPotion.java
index c935409650..7517011673 100644
--- a/src/Java/gtPlusPlus/core/entity/projectile/EntityHydrofluoricAcidPotion.java
+++ b/src/Java/gtPlusPlus/core/entity/projectile/EntityHydrofluoricAcidPotion.java
@@ -1,7 +1,7 @@
package gtPlusPlus.core.entity.projectile;
import gregtech.api.util.GT_Utility;
-import gtPlusPlus.core.util.array.BlockPos;
+import gtPlusPlus.api.objects.minecraft.BlockPos;
import gtPlusPlus.core.util.entity.EntityUtils;
import gtPlusPlus.core.util.math.MathUtils;
import net.minecraft.block.Block;
diff --git a/src/Java/gtPlusPlus/core/entity/projectile/EntitySulfuricAcidPotion.java b/src/Java/gtPlusPlus/core/entity/projectile/EntitySulfuricAcidPotion.java
index cd4bec52bf..dfab6fa8ec 100644
--- a/src/Java/gtPlusPlus/core/entity/projectile/EntitySulfuricAcidPotion.java
+++ b/src/Java/gtPlusPlus/core/entity/projectile/EntitySulfuricAcidPotion.java
@@ -1,7 +1,7 @@
package gtPlusPlus.core.entity.projectile;
import gregtech.api.util.GT_Utility;
-import gtPlusPlus.core.util.array.BlockPos;
+import gtPlusPlus.api.objects.minecraft.BlockPos;
import gtPlusPlus.core.util.entity.EntityUtils;
import gtPlusPlus.core.util.math.MathUtils;
import net.minecraft.block.Block;
diff --git a/src/Java/gtPlusPlus/core/handler/BurnableFuelHandler.java b/src/Java/gtPlusPlus/core/handler/BurnableFuelHandler.java
index 79ca0ad174..8bcdaca6a8 100644
--- a/src/Java/gtPlusPlus/core/handler/BurnableFuelHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/BurnableFuelHandler.java
@@ -1,8 +1,8 @@
package gtPlusPlus.core.handler;
import cpw.mods.fml.common.IFuelHandler;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.lib.CORE;
-import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.item.ItemUtils;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
diff --git a/src/Java/gtPlusPlus/core/handler/analytics/AnalyticsLoggingPlugin.java b/src/Java/gtPlusPlus/core/handler/analytics/AnalyticsLoggingPlugin.java
new file mode 100644
index 0000000000..808c62d7aa
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/handler/analytics/AnalyticsLoggingPlugin.java
@@ -0,0 +1,39 @@
+package gtPlusPlus.core.handler.analytics;
+
+import com.segment.analytics.Analytics;
+import com.segment.analytics.Callback;
+import com.segment.analytics.Log;
+import com.segment.analytics.Plugin;
+import com.segment.analytics.messages.Message;
+
+import gtPlusPlus.api.objects.Logger;
+
+/**
+ * A {@link Plugin} implementation that redirects client logs to standard output and logs callback
+ * events.
+ */
+public class AnalyticsLoggingPlugin implements Plugin {
+ @Override public void configure(Analytics.Builder builder) {
+ builder.log(new Log() {
+ @Override public void print(Level level, String format, Object... args) {
+ Logger.WARNING(level + ":\t" + String.format(format, args));
+ }
+
+ @Override public void print(Level level, Throwable error, String format, Object... args) {
+ Logger.WARNING(level + ":\t" + String.format(format, args));
+ //Utils.LOG_WARNING(error);
+ }
+ });
+
+ builder.callback(new Callback() {
+ @Override public void success(Message message) {
+ Logger.WARNING("Uploaded " + message);
+ }
+
+ @Override public void failure(Message message, Throwable throwable) {
+ Logger.WARNING("Could not upload " + message);
+ //Utils.LOG_WARNING(throwable);
+ }
+ });
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/handler/analytics/BlockingFlush.java b/src/Java/gtPlusPlus/core/handler/analytics/BlockingFlush.java
new file mode 100644
index 0000000000..09d1cd5104
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/handler/analytics/BlockingFlush.java
@@ -0,0 +1,67 @@
+package gtPlusPlus.core.handler.analytics;
+
+import com.segment.analytics.Analytics;
+import com.segment.analytics.Callback;
+import com.segment.analytics.MessageTransformer;
+import com.segment.analytics.Plugin;
+import com.segment.analytics.messages.Message;
+import com.segment.analytics.messages.MessageBuilder;
+import java.util.concurrent.Phaser;
+
+/**
+ * The {@link Analytics} class doesn't come with a blocking {@link Analytics#flush()} implementation
+ * out of the box. It's trivial to build one using a {@link Phaser} that monitors requests and is
+ * able to block until they're uploaded.
+ *
+ * <pre><code>
+ * BlockingFlush mBlockingFlush = BlockingFlush.create();
+ * Analytics mHelper = Analytics.builder(writeKey)
+ * .plugin(mBlockingFlush)
+ * .build();
+ *
+ * // Do some work.
+ *
+ * mHelper.flush(); // Trigger a flush.
+ * mBlockingFlush.block(); // Block until the flush completes.
+ * mHelper.shutdown(); // Shut down after the flush is complete.
+ * </code></pre>
+ */
+public class BlockingFlush {
+
+ public static BlockingFlush create() {
+ return new BlockingFlush();
+ }
+
+ BlockingFlush() {
+ this.phaser = new Phaser(1);
+ }
+
+ final Phaser phaser;
+
+ public Plugin plugin() {
+ return new Plugin() {
+ @Override public void configure(Analytics.Builder builder) {
+ builder.messageTransformer(new MessageTransformer() {
+ @Override public boolean transform(MessageBuilder builder) {
+ phaser.register();
+ return true;
+ }
+ });
+
+ builder.callback(new Callback() {
+ @Override public void success(Message message) {
+ phaser.arrive();
+ }
+
+ @Override public void failure(Message message, Throwable throwable) {
+ phaser.arrive();
+ }
+ });
+ }
+ };
+ }
+
+ public void block() {
+ phaser.arriveAndAwaitAdvance();
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/handler/analytics/SegmentAnalytics.java b/src/Java/gtPlusPlus/core/handler/analytics/SegmentAnalytics.java
new file mode 100644
index 0000000000..a217f896cf
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/handler/analytics/SegmentAnalytics.java
@@ -0,0 +1,271 @@
+package gtPlusPlus.core.handler.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 gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.lib.LoadedMods;
+import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.core.util.player.PlayerUtils;
+import gtPlusPlus.core.util.uuid.UUIDGenerator;
+import gtPlusPlus.core.util.uuid.UUIDUtils;
+import ic2.core.IC2;
+import net.minecraft.entity.player.EntityPlayer;
+
+public class SegmentAnalytics {
+
+ //Globally Enabled
+ public static boolean isEnabled = true;
+
+ //Analytics Map with IDs
+ public static final Map<Integer, SegmentAnalytics> sAnalyticsMasterList = new ConcurrentHashMap<Integer, SegmentAnalytics>();
+ //ID count
+ private static int sAnalyticsMapID = 0;
+
+ //Analytics Player Mapping
+ public static final Map<UUID, Integer> sAnalyticsToPlayermap = new ConcurrentHashMap<UUID, Integer>();
+
+ //Set some Vars
+ final BlockingFlush mBlockingFlush;
+ final SegmentHelper mHelper;
+ final UUIDGenerator mUuidGenerator;
+
+ public final GameProfile mLocalProfile;
+ public final String mLocalName;
+ public final UUID mUUID;
+ public final String mUserName;
+ public final String mAnonymousId;
+ protected Map<String, Object> mProperties = new LinkedHashMap<>();
+ final protected Phaser mPhaser;
+
+ //Build a new instance of this class
+ public SegmentAnalytics(EntityPlayer mPlayer){
+ LOG("Initializing Segment 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);
+
+ //Create a Phaser
+ this.mPhaser = new Phaser(1);
+
+ //Set vars for player
+ this.mLocalProfile = mPlayer.getGameProfile();
+ 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.mHelper = SegmentHelper.getInstance();
+ initTimer(mPlayer);
+ }
+
+ //Sets vars and stops Analytics running if the player profile is invalid.
+ private boolean canProcess(){
+ //Invalid Player Profile
+ if (mLocalProfile == null || !isEnabled){
+ return false;
+ }
+ if (mLocalName == null || mUUID == null || mUserName == null || mAnonymousId == null){
+ //LOG("One player var remained null, returning false.");
+ return false;
+ }
+ if (mLocalName != null && mUUID != null && mUserName != null && mAnonymousId != null){
+ //LOG("All player vars are ok, returning true.");
+ return true;
+ }
+ LOG("Something went wrong, returning false.");
+ return false;
+ }
+
+
+ public void submitInitData(EntityPlayer mPlayer){
+ if (!canProcess()){
+ return;
+ }
+ mProperties = new LinkedHashMap<>();
+ mProperties.put("username", mLocalName);
+ mProperties.put("gt_version", Utils.getGregtechVersionAsString());
+ if (LoadedMods.IndustrialCraft2){
+ mProperties.put("ic2_version", IC2.VERSION);
+ }
+ mProperties.put("country_code", CORE.USER_COUNTRY);
+ mProperties.put("gtnh", CORE.GTNH);
+
+ LOG("Created new Data packet, queued for submission.");
+
+ //Old Code, now passed to Helper Class
+ /*mHelper.enqueue(IdentifyMessage.builder()
+ .userId(mUserName) //Save Username as UUID, for future sessions to attach to.
+ .traits(mProperties)
+ //.anonymousId(mAnonymousId) //Save Random Session UUID
+ );*/
+
+ mHelper.addUser(this.mUserName, mProperties);
+
+ if (CORE.GTNH){
+ mHelper.groupUser("GT:NewHorizons", this.mUserName);
+ }
+ else {
+ mHelper.groupUser("GT:Vanilla", this.mUserName);
+ }
+
+ }
+
+ public void submitTrackingData(String aActionPerformed){
+ submitTrackingData(aActionPerformed, null);
+ }
+
+ public void submitTrackingData(String aActionPerformed, Object aObject){
+ if (!canProcess()){
+ return;
+ }
+
+ 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+".");
+
+ mHelper.trackUser(this.mUserName, aActionPerformed, properties);
+
+ //Old Code, now passed to Helper Class
+ /*mHelper.enqueue(TrackMessage.builder(aActionPerformed) //
+ .userId(mUserName) // Save Username as UUID, for future sessions to attach to.
+ .properties(mProperties) //Save Stats
+ //.anonymousId(mAnonymousId) //Save Random Session UUID
+ );
+ flushData();
+ */
+ }
+
+ public void flushData(){
+ getAnalyticObject().flush();
+ }
+
+ public void flushDataFinal(){
+ LOG("Flushing all data from Queue to Segment Analytics database.");
+ getAnalyticObject().flush();
+ mBlockingFlush.block();
+ mPhaser.arriveAndAwaitAdvance();
+ getAnalyticObject().shutdown();
+ /*try {
+ this.finalize();
+ }
+ catch (Throwable e) {
+ Utils.LOG_INFO("Could not finalize Analytics Object.");
+ }*/
+ }
+
+ public UUID generateIdForSession(){
+ return UUIDUtils.getUUIDFromBytes(generateUUID());
+ }
+
+ private final byte[] generateUUID(){
+ byte[] mUUID;
+
+ if (this.mUuidGenerator != null){
+ try {
+ if ((mUUID = mUuidGenerator.next(4)) != null){
+ LOG("Generated Type 4 UUID for Session ID.");
+ return mUUID;
+ }
+ else if ((mUUID = mUuidGenerator.next(1)) != null){
+ LOG("Generated Type 1 UUID for Session ID.");
+ return mUUID;
+ }
+ }
+ catch (Throwable t){
+ t.printStackTrace();
+ }
+ }
+
+ LOG("Generated Type 3 UUID for Session ID.");
+ return UUIDUtils.getBytesFromUUID(UUID.randomUUID());
+
+ }
+
+ public final String getStringForm(UUID mID){
+ return mID.toString();
+ }
+
+ // Non-Dev Comments
+ public static void LOG(final String s) {
+ if (CORE.DEBUG){
+ Logger.getLogger().info("[Analytics] "+s);
+ }
+ }
+
+ public static SegmentAnalytics getAnalyticsForPlayer(EntityPlayer mPlayer){
+ try {
+ if (mPlayer != null){
+ if (SegmentAnalytics.sAnalyticsToPlayermap.containsKey(mPlayer.getUniqueID())){
+ int ID = sAnalyticsToPlayermap.get(mPlayer.getUniqueID());
+ return SegmentAnalytics.sAnalyticsMasterList.get(ID);
+ }
+ else {
+ LOG("Map does not contain Player.");
+ }
+ }
+ else {
+ LOG("Invalid Player.");
+ }
+ }
+ catch (Throwable t){
+ t.printStackTrace();
+ }
+ return null;
+ }
+
+ public final Analytics getAnalyticObject() {
+ return mHelper.getAnalyticsClient();
+ }
+
+ public final Map<String, Object> getPlayerProperties(){
+ return this.mProperties;
+ }
+
+
+ public Timer initTimer(EntityPlayer mPlayer) {
+ Timer timer;
+ timer = new Timer();
+ timer.schedule(new initPlayer(mPlayer), 2 * 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/handler/analytics/SegmentHelper.java b/src/Java/gtPlusPlus/core/handler/analytics/SegmentHelper.java
new file mode 100644
index 0000000000..79b95eda24
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/handler/analytics/SegmentHelper.java
@@ -0,0 +1,81 @@
+package gtPlusPlus.core.handler.analytics;
+
+import com.segment.analytics.Analytics;
+import com.segment.analytics.Callback;
+import com.segment.analytics.messages.Message;
+import com.segment.analytics.messages.TrackMessage;
+import com.segment.analytics.messages.*;
+import java.util.Map;
+
+public class SegmentHelper implements Callback {
+
+ /**
+ * Credits to Author: FLAMINSAGANAKI/Theodore Mavrakis
+ * http://domisydev.com/2015/11/05/using-segment-analytics-in-your-java-servlet/
+ */
+
+ private static final String writeKey = "EDOWl9peleGlUqe1ZwTqKDyuTMFhyT4k";
+ private static volatile SegmentHelper segment = new SegmentHelper();
+ private Analytics analytics;
+
+ public SegmentHelper(){
+ try{
+ this.analytics = Analytics.builder(writeKey).callback(this).build();
+ }catch(Exception e){
+ SegmentAnalytics.LOG("exception while creating Analytics : " + e);
+ }
+ }
+
+ public static SegmentHelper getInstance(){
+ return segment;
+ }
+
+ public Analytics getAnalyticsClient(){
+ return segment.analytics;
+ }
+
+ public void success(Message message) {
+ SegmentAnalytics.LOG("Successfully uploaded " + message);
+ }
+
+ public void failure(Message message, Throwable throwable) {
+ SegmentAnalytics.LOG("Could not upload " + message);
+ }
+
+ public void addUser(String user_id, Map<String, Object> properties) {
+ try {
+ this.analytics.enqueue(IdentifyMessage.builder().userId(user_id).traits(properties));
+ //trackUser(user_id, "Logged In", properties);
+ } catch (Exception e) {
+ SegmentAnalytics.LOG("Exception in addUser() - " + e);
+ }
+ }
+
+ public void trackUser(String user_id, String description, Map<String, Object> properties) {
+ try {
+ this.analytics.enqueue(TrackMessage.builder(description).userId(user_id).properties(properties));
+ } catch (Exception e) {
+ SegmentAnalytics.LOG("Exception in trackUser() - " + e);
+ }
+ }
+
+ public void trackUser(String user_id, String description) {
+ try {
+ this.analytics.enqueue(TrackMessage.builder(description).userId(user_id));
+ } catch (Exception e) {
+ SegmentAnalytics.LOG("Exception in trackUser() - " + e);
+ }
+ }
+
+ public void groupUser(String group_id, String user_id) {
+ try {
+ this.analytics.enqueue(GroupMessage.builder(group_id).userId(user_id));
+ } catch (Exception e) {
+ SegmentAnalytics.LOG("Exception in groupUser() - " + e);
+ }
+ }
+
+ public static void main(String[] args){
+
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java b/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java
index cd79cf7fe6..0c6e798edd 100644
--- a/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/events/BlockEventHandler.java
@@ -9,9 +9,9 @@ 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.api.objects.Logger;
+import gtPlusPlus.core.handler.analytics.SegmentAnalytics;
+import gtPlusPlus.core.handler.analytics.SegmentHelper;
import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.LoadedMods;
diff --git a/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java b/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java
index 09365e3caf..c8c6a23bca 100644
--- a/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/events/LoginEventHandler.java
@@ -4,9 +4,9 @@ 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.api.objects.Logger;
+import gtPlusPlus.core.handler.analytics.SegmentAnalytics;
+import gtPlusPlus.core.handler.analytics.SegmentHelper;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.proxy.ClientProxy;
diff --git a/src/Java/gtPlusPlus/core/handler/events/ZombieBackupSpawnEventHandler.java b/src/Java/gtPlusPlus/core/handler/events/ZombieBackupSpawnEventHandler.java
index 877b0c6ced..572f52124f 100644
--- a/src/Java/gtPlusPlus/core/handler/events/ZombieBackupSpawnEventHandler.java
+++ b/src/Java/gtPlusPlus/core/handler/events/ZombieBackupSpawnEventHandler.java
@@ -7,8 +7,8 @@ import org.apache.commons.lang3.reflect.FieldUtils;
import cpw.mods.fml.common.eventhandler.Event.Result;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
-import gtPlusPlus.api.analytics.SegmentHelper;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.handler.analytics.SegmentHelper;
import net.minecraftforge.event.entity.living.ZombieEvent;
public class ZombieBackupSpawnEventHandler {
diff --git a/src/Java/gtPlusPlus/core/item/base/BaseEuItem.java b/src/Java/gtPlusPlus/core/item/base/BaseEuItem.java
index 8f8d0eed72..a32ff20353 100644
--- a/src/Java/gtPlusPlus/core/item/base/BaseEuItem.java
+++ b/src/Java/gtPlusPlus/core/item/base/BaseEuItem.java
@@ -16,9 +16,9 @@ import gregtech.api.interfaces.IItemBehaviour;
import gregtech.api.interfaces.IItemContainer;
import gregtech.api.objects.ItemData;
import gregtech.api.util.*;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.lib.CORE;
-import gtPlusPlus.core.util.array.Pair;
import ic2.api.item.*;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
diff --git a/src/Java/gtPlusPlus/core/item/base/BaseItemBurnable.java b/src/Java/gtPlusPlus/core/item/base/BaseItemBurnable.java
index 42aadfa91d..76d66069f5 100644
--- a/src/Java/gtPlusPlus/core/item/base/BaseItemBurnable.java
+++ b/src/Java/gtPlusPlus/core/item/base/BaseItemBurnable.java
@@ -1,7 +1,7 @@
package gtPlusPlus.core.item.base;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.lib.CORE;
-import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.item.ItemUtils;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
diff --git a/src/Java/gtPlusPlus/core/item/general/ItemAreaClear.java b/src/Java/gtPlusPlus/core/item/general/ItemAreaClear.java
index fc92d5d82c..a3f7b78888 100644
--- a/src/Java/gtPlusPlus/core/item/general/ItemAreaClear.java
+++ b/src/Java/gtPlusPlus/core/item/general/ItemAreaClear.java
@@ -3,11 +3,11 @@ package gtPlusPlus.core.item.general;
import java.util.List;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.minecraft.BlockPos;
import gtPlusPlus.core.block.base.BlockBaseOre;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.item.base.CoreItem;
import gtPlusPlus.core.lib.CORE;
-import gtPlusPlus.core.util.array.BlockPos;
import gtPlusPlus.core.util.entity.EntityUtils;
import gtPlusPlus.core.util.math.MathUtils;
import net.minecraft.client.renderer.texture.IIconRegister;
diff --git a/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java b/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java
index 1b8ab947e5..64f1c4e139 100644
--- a/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java
+++ b/src/Java/gtPlusPlus/core/item/general/capture/ItemEntityCatcher.java
@@ -6,10 +6,10 @@ import java.util.UUID;
import cpw.mods.fml.common.registry.GameRegistry;
import gtPlusPlus.api.interfaces.IEntityCatcher;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.minecraft.BlockPos;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.Utils;
-import gtPlusPlus.core.util.array.BlockPos;
import gtPlusPlus.core.util.nbt.NBTUtils;
import gtPlusPlus.core.util.player.PlayerUtils;
import net.minecraft.entity.*;
diff --git a/src/Java/gtPlusPlus/core/item/tool/staballoy/MultiPickaxeBase.java b/src/Java/gtPlusPlus/core/item/tool/staballoy/MultiPickaxeBase.java
index 45e0bd8fe6..66b4d87511 100644
--- a/src/Java/gtPlusPlus/core/item/tool/staballoy/MultiPickaxeBase.java
+++ b/src/Java/gtPlusPlus/core/item/tool/staballoy/MultiPickaxeBase.java
@@ -6,10 +6,10 @@ import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.Utils;
-import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.core.util.math.MathUtils;
import gtPlusPlus.core.util.recipe.RecipeUtils;
diff --git a/src/Java/gtPlusPlus/core/lib/CORE.java b/src/Java/gtPlusPlus/core/lib/CORE.java
index 4cff84d646..ce2f4f4432 100644
--- a/src/Java/gtPlusPlus/core/lib/CORE.java
+++ b/src/Java/gtPlusPlus/core/lib/CORE.java
@@ -6,10 +6,10 @@ import java.util.concurrent.ConcurrentHashMap;
import com.mojang.authlib.GameProfile;
import gregtech.api.GregTech_API;
-import gtPlusPlus.api.objects.CSPRNG_DO_NOT_USE;
-import gtPlusPlus.api.objects.XSTR;
+import gtPlusPlus.api.objects.data.Pair;
+import gtPlusPlus.api.objects.random.CSPRNG_DO_NOT_USE;
+import gtPlusPlus.api.objects.random.XSTR;
import gtPlusPlus.core.util.Utils;
-import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.geo.GeoUtils;
import gtPlusPlus.core.util.gregtech.recipehandlers.GregtechRecipe;
import gtPlusPlus.core.util.networking.NetworkUtils;
diff --git a/src/Java/gtPlusPlus/core/material/Material.java b/src/Java/gtPlusPlus/core/material/Material.java
index eca3c595ec..22c65c5a2b 100644
--- a/src/Java/gtPlusPlus/core/material/Material.java
+++ b/src/Java/gtPlusPlus/core/material/Material.java
@@ -7,13 +7,13 @@ import java.util.Map.Entry;
import gregtech.api.enums.*;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.item.base.cell.BaseItemCell;
import gtPlusPlus.core.material.state.MaterialState;
import gtPlusPlus.core.util.StringUtils;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.array.ArrayUtils;
-import gtPlusPlus.core.util.array.AutoMap;
-import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.fluid.FluidUtils;
import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.core.util.materials.MaterialUtils;
diff --git a/src/Java/gtPlusPlus/core/slots/SlotModularBaubleUpgrades.java b/src/Java/gtPlusPlus/core/slots/SlotModularBaubleUpgrades.java
index 85de0df60e..b6930dfe27 100644
--- a/src/Java/gtPlusPlus/core/slots/SlotModularBaubleUpgrades.java
+++ b/src/Java/gtPlusPlus/core/slots/SlotModularBaubleUpgrades.java
@@ -7,7 +7,7 @@ import java.util.Iterator;
import java.util.Map.Entry;
import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.core.util.array.Pair;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.util.nbt.ModularArmourUtils.BT;
import gtPlusPlus.core.util.nbt.ModularArmourUtils.Modifiers;
import net.minecraft.inventory.IInventory;
diff --git a/src/Java/gtPlusPlus/core/tileentities/base/TilePoweredGT.java b/src/Java/gtPlusPlus/core/tileentities/base/TilePoweredGT.java
index 72153964e9..8b789f922f 100644
--- a/src/Java/gtPlusPlus/core/tileentities/base/TilePoweredGT.java
+++ b/src/Java/gtPlusPlus/core/tileentities/base/TilePoweredGT.java
@@ -10,9 +10,9 @@ import gregtech.api.net.GT_Packet_TileEntity;
import gregtech.api.net.IGT_NetworkHandler;
import gregtech.api.util.GT_Utility;
import gtPlusPlus.api.interfaces.IGregtechPower;
+import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.Utils;
-import gtPlusPlus.core.util.array.AutoMap;
import ic2.api.info.Info;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFire;
diff --git a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityModularityTable.java b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityModularityTable.java
index 252b92984e..abff5fd755 100644
--- a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityModularityTable.java
+++ b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityModularityTable.java
@@ -5,12 +5,12 @@ import java.util.Map.Entry;
import gregtech.api.enums.ItemList;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.container.Container_ModularityTable;
import gtPlusPlus.core.inventories.modulartable.InventoryModularMain;
import gtPlusPlus.core.inventories.modulartable.InventoryModularOutput;
import gtPlusPlus.core.item.bauble.ModularBauble;
import gtPlusPlus.core.tileentities.base.TileEntityBase;
-import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.core.util.nbt.ModularArmourUtils;
import gtPlusPlus.core.util.nbt.ModularArmourUtils.BT;
diff --git a/src/Java/gtPlusPlus/core/util/Utils.java b/src/Java/gtPlusPlus/core/util/Utils.java
index 0909e4bf2d..e15f8ba202 100644
--- a/src/Java/gtPlusPlus/core/util/Utils.java
+++ b/src/Java/gtPlusPlus/core/util/Utils.java
@@ -34,10 +34,10 @@ import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_Utility;
import gtPlusPlus.GTplusplus;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.material.Material;
-import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.fluid.FluidUtils;
import gtPlusPlus.core.util.item.ItemUtils;
import gtPlusPlus.core.util.math.MathUtils;
diff --git a/src/Java/gtPlusPlus/core/util/array/AutoMap.java b/src/Java/gtPlusPlus/core/util/array/AutoMap.java
deleted file mode 100644
index ea5e1dd25e..0000000000
--- a/src/Java/gtPlusPlus/core/util/array/AutoMap.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package gtPlusPlus.core.util.array;
-
-import java.io.Serializable;
-import java.util.*;
-
-public class AutoMap<V> implements Iterable<V>, Cloneable, Serializable {
-
- /**
- * The Internal Map
- */
- private Map<Integer, V> mInternalMap = new HashMap<Integer, V>();
-
- /**
- * The Internal ID
- */
- private int mInternalID = 0;
- private static final long serialVersionUID = 3771412318075131790L;
-
- @Override
- public Iterator<V> iterator() {
- return values().iterator();
- }
-
- public synchronized boolean setValue(V object){
- int mOriginalID = this.mInternalID;
- put(object);
- if (this.mInternalMap.get(mOriginalID).equals(object) || mOriginalID > this.mInternalID){
- return true;
- }
- else {
- return false;
- }
- }
-
- public synchronized V put(V object){
- return set(object);
- }
-
- public synchronized V set(V object){
- return mInternalMap.put(mInternalID++, object);
- }
-
- public synchronized V get(int id){
- return mInternalMap.get(id);
- }
-
- public synchronized Collection<V> values(){
- return mInternalMap.values();
- }
-
- public synchronized int size(){
- return mInternalMap.size();
- }
-
- public synchronized int hashcode(){
- return mInternalMap.hashCode();
- }
-
- public synchronized boolean containsKey(int key){
- return mInternalMap.containsKey(key);
- }
-
- public synchronized boolean containsValue(V value){
- return mInternalMap.containsValue(value);
- }
-
- public synchronized boolean isEmpty(){
- return mInternalMap.isEmpty();
- }
-
- public synchronized boolean clear(){
- this.mInternalID = 0;
- this.mInternalMap.clear();
- return true;
- }
-
-}
diff --git a/src/Java/gtPlusPlus/core/util/array/BlockPos.java b/src/Java/gtPlusPlus/core/util/array/BlockPos.java
deleted file mode 100644
index fbf7676627..0000000000
--- a/src/Java/gtPlusPlus/core/util/array/BlockPos.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package gtPlusPlus.core.util.array;
-
-import java.io.Serializable;
-
-public class BlockPos implements Serializable{
-
- private static final long serialVersionUID = -7271947491316682006L;
- public final int xPos;
- public final int yPos;
- public final int zPos;
- public final int dim;
-
- public BlockPos(int x, int y, int z){
- this(x, y, z, 0);
- }
-
- public BlockPos(int x, int y, int z, int dim){
- this.xPos = x;
- this.yPos = y;
- this.zPos = z;
- this.dim = dim;
- }
-
- public String getLocationString() {
- return "[X: "+this.xPos+"][Y: "+this.yPos+"][Z: "+this.zPos+"]";
- }
-
-}
diff --git a/src/Java/gtPlusPlus/core/util/array/Pair.java b/src/Java/gtPlusPlus/core/util/array/Pair.java
deleted file mode 100644
index 1d2c0ef7cb..0000000000
--- a/src/Java/gtPlusPlus/core/util/array/Pair.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package gtPlusPlus.core.util.array;
-
-import java.io.Serializable;
-
-public class Pair<K,V> implements Serializable {
-
- /**
- * SVUID
- */
- private static final long serialVersionUID = 1250550491092812443L;
- private final K key;
- private final V value;
-
- public Pair(final K key, final V value){
- this.key = key;
- this.value = value;
- }
-
- final public K getKey(){
- return this.key;
- }
-
- final public V getValue(){
- return this.value;
- }
-
-} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/util/array/Quad.java b/src/Java/gtPlusPlus/core/util/array/Quad.java
deleted file mode 100644
index 417c3b6ebc..0000000000
--- a/src/Java/gtPlusPlus/core/util/array/Quad.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package gtPlusPlus.core.util.array;
-
-public class Quad<K,V,C,R> {
-
- private final K key;
- private final V value;
- private final C value2;
- private final R value3;
-
- public Quad(final K key, final V value, final C value2, final R value3){
- this.key = key;
- this.value = value;
- this.value2 = value2;
- this.value3 = value3;
- }
-
- final public K getKey(){
- return this.key;
- }
-
- final public V getValue_1(){
- return this.value;
- }
-
- final public C getValue_2(){
- return this.value2;
- }
-
- final public R getValue_3(){
- return this.value3;
- }
-
-} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/util/array/Triplet.java b/src/Java/gtPlusPlus/core/util/array/Triplet.java
deleted file mode 100644
index 01f836ae72..0000000000
--- a/src/Java/gtPlusPlus/core/util/array/Triplet.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package gtPlusPlus.core.util.array;
-
-public class Triplet<K,V,C> {
-
- private final K key;
- private final V value;
- private final C count;
-
- public Triplet(final K key, final V value, final C value2){
- this.key = key;
- this.value = value;
- this.count = value2;
- }
-
- final public K getValue_1(){
- return this.key;
- }
-
- final public V getValue_2(){
- return this.value;
- }
-
- final public C getValue_3(){
- return this.count;
- }
-
-} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/util/entity/EntityUtils.java b/src/Java/gtPlusPlus/core/util/entity/EntityUtils.java
index 79c643a95d..27412d647f 100644
--- a/src/Java/gtPlusPlus/core/util/entity/EntityUtils.java
+++ b/src/Java/gtPlusPlus/core/util/entity/EntityUtils.java
@@ -5,7 +5,7 @@ import java.lang.reflect.Method;
import cpw.mods.fml.common.registry.EntityRegistry;
import gregtech.api.util.GT_Utility;
-import gtPlusPlus.core.util.array.BlockPos;
+import gtPlusPlus.api.objects.minecraft.BlockPos;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import ic2.core.IC2Potion;
import ic2.core.item.armor.ItemArmorHazmat;
diff --git a/src/Java/gtPlusPlus/core/util/item/ItemUtils.java b/src/Java/gtPlusPlus/core/util/item/ItemUtils.java
index 367539b49d..d5caad9dee 100644
--- a/src/Java/gtPlusPlus/core/util/item/ItemUtils.java
+++ b/src/Java/gtPlusPlus/core/util/item/ItemUtils.java
@@ -10,6 +10,7 @@ import gregtech.api.enums.OrePrefixes;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.item.base.BasicSpawnEgg;
import gtPlusPlus.core.item.base.dusts.BaseItemDust;
@@ -23,7 +24,6 @@ import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.material.Material;
import gtPlusPlus.core.util.Utils;
-import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.materials.MaterialUtils;
import gtPlusPlus.core.util.reflect.ReflectionUtils;
import gtPlusPlus.core.util.wrapper.var;
diff --git a/src/Java/gtPlusPlus/core/util/math/MathUtils.java b/src/Java/gtPlusPlus/core/util/math/MathUtils.java
index 313d1059ca..6d61335fe8 100644
--- a/src/Java/gtPlusPlus/core/util/math/MathUtils.java
+++ b/src/Java/gtPlusPlus/core/util/math/MathUtils.java
@@ -4,8 +4,8 @@ import java.util.Map;
import java.util.Random;
import gregtech.api.enums.GT_Values;
-import gtPlusPlus.api.objects.CSPRNG_DO_NOT_USE;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.random.CSPRNG_DO_NOT_USE;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.Utils;
diff --git a/src/Java/gtPlusPlus/core/util/nbt/ModularArmourUtils.java b/src/Java/gtPlusPlus/core/util/nbt/ModularArmourUtils.java
index 2e8e29c372..c9ac557fee 100644
--- a/src/Java/gtPlusPlus/core/util/nbt/ModularArmourUtils.java
+++ b/src/Java/gtPlusPlus/core/util/nbt/ModularArmourUtils.java
@@ -3,7 +3,7 @@ package gtPlusPlus.core.util.nbt;
import baubles.api.BaubleType;
import gregtech.api.util.GT_Utility;
import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.core.util.array.Pair;
+import gtPlusPlus.api.objects.data.Pair;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
diff --git a/src/Java/gtPlusPlus/core/util/uuid/UUIDGenerator.java b/src/Java/gtPlusPlus/core/util/uuid/UUIDGenerator.java
index 0fd2d8c6a5..bf0ac3d1f5 100644
--- a/src/Java/gtPlusPlus/core/util/uuid/UUIDGenerator.java
+++ b/src/Java/gtPlusPlus/core/util/uuid/UUIDGenerator.java
@@ -5,7 +5,7 @@ import java.net.InetAddress;
import java.util.Random;
import java.util.UUID;
-import gtPlusPlus.api.objects.CSPRNG_DO_NOT_USE;
+import gtPlusPlus.api.objects.random.CSPRNG_DO_NOT_USE;
/**
*
diff --git a/src/Java/gtPlusPlus/core/world/damage/BaseCustomDamageSource.java b/src/Java/gtPlusPlus/core/world/damage/BaseCustomDamageSource.java
new file mode 100644
index 0000000000..3778beacfb
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/world/damage/BaseCustomDamageSource.java
@@ -0,0 +1,22 @@
+package gtPlusPlus.core.world.damage;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.util.EntityDamageSourceIndirect;
+
+public class BaseCustomDamageSource extends EntityDamageSourceIndirect {
+
+ public BaseCustomDamageSource(String name, Entity transmitter, Entity indirectSource) {
+ super(name, transmitter, indirectSource);
+ this.setDifficultyScaled();
+ }
+
+ /**
+ * Return whether this damage source will have its damage amount scaled based on the current difficulty.
+ */
+ public boolean isDifficultyScaled()
+ {
+ return true;
+ }
+
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_GT_Base.java b/src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_GT_Base.java
index 6be899e5de..301a2154c2 100644
--- a/src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_GT_Base.java
+++ b/src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_GT_Base.java
@@ -6,7 +6,7 @@ import cpw.mods.fml.common.IWorldGenerator;
import cpw.mods.fml.common.registry.GameRegistry;
import gregtech.api.util.GT_Log;
import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.api.objects.XSTR;
+import gtPlusPlus.api.objects.random.XSTR;
import gtPlusPlus.core.material.ELEMENT;
import gtPlusPlus.core.world.darkworld.Dimension_DarkWorld;
import gtPlusPlus.xmod.gregtech.HANDLER_GT;
diff --git a/src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_Ores.java b/src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_Ores.java
index 4b099ee4cf..8b28e2d4e8 100644
--- a/src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_Ores.java
+++ b/src/Java/gtPlusPlus/core/world/darkworld/gen/gt/WorldGen_Ores.java
@@ -4,12 +4,12 @@ import java.util.Hashtable;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
-import gtPlusPlus.api.objects.MaterialHelper;
+import gtPlusPlus.api.helpers.MaterialHelper;
+import gtPlusPlus.api.objects.data.Pair;
import gtPlusPlus.core.material.ELEMENT;
import gtPlusPlus.core.material.Material;
import gtPlusPlus.core.material.ORES;
import gtPlusPlus.core.material.nuclear.FLUORIDES;
-import gtPlusPlus.core.util.array.Pair;
import gtPlusPlus.core.util.materials.MaterialUtils;
import gtPlusPlus.core.world.darkworld.object.BoxedQuad;
import net.minecraft.block.Block;
diff --git a/src/Java/gtPlusPlus/core/world/darkworld/object/BoxedQuad.java b/src/Java/gtPlusPlus/core/world/darkworld/object/BoxedQuad.java
index d3c400896b..fd3d734e08 100644
--- a/src/Java/gtPlusPlus/core/world/darkworld/object/BoxedQuad.java
+++ b/src/Java/gtPlusPlus/core/world/darkworld/object/BoxedQuad.java
@@ -1,6 +1,6 @@
package gtPlusPlus.core.world.darkworld.object;
-import gtPlusPlus.core.util.array.Pair;
+import gtPlusPlus.api.objects.data.Pair;
import net.minecraft.block.Block;
public class BoxedQuad<K,V,C,R> {
diff --git a/src/Java/gtPlusPlus/core/world/explosions/MiningExplosion.java b/src/Java/gtPlusPlus/core/world/explosions/MiningExplosion.java
index 50fa08f55f..bcbb16a3b6 100644
--- a/src/Java/gtPlusPlus/core/world/explosions/MiningExplosion.java
+++ b/src/Java/gtPlusPlus/core/world/explosions/MiningExplosion.java
@@ -2,7 +2,7 @@ package gtPlusPlus.core.world.explosions;
import java.util.*;
-import gtPlusPlus.api.objects.XSTR;
+import gtPlusPlus.api.objects.random.XSTR;
import gtPlusPlus.core.entity.EntityPrimedMiningExplosive;
import gtPlusPlus.core.util.math.MathUtils;
import net.minecraft.block.Block;