aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/util')
-rw-r--r--src/main/java/gregtech/api/util/AveragePerTickCounter.java139
-rw-r--r--src/main/java/gregtech/api/util/ColorsMetadataSection.java63
-rw-r--r--src/main/java/gregtech/api/util/ColorsMetadataSectionSerializer.java81
-rw-r--r--src/main/java/gregtech/api/util/ExternalMaterials.java14
-rw-r--r--src/main/java/gregtech/api/util/FieldsAreNonnullByDefault.java18
-rw-r--r--src/main/java/gregtech/api/util/GT_ApiaryModifier.java24
-rw-r--r--src/main/java/gregtech/api/util/GT_ApiaryUpgrade.java225
-rw-r--r--src/main/java/gregtech/api/util/GT_AssemblyLineUtils.java557
-rw-r--r--src/main/java/gregtech/api/util/GT_Assemblyline_Server.java297
-rw-r--r--src/main/java/gregtech/api/util/GT_BaseCrop.java311
-rw-r--r--src/main/java/gregtech/api/util/GT_BlockMap.java134
-rw-r--r--src/main/java/gregtech/api/util/GT_BlockSet.java39
-rw-r--r--src/main/java/gregtech/api/util/GT_CLS_Compat.java157
-rw-r--r--src/main/java/gregtech/api/util/GT_ChunkAssociatedData.java494
-rw-r--r--src/main/java/gregtech/api/util/GT_CircuitryBehavior.java212
-rw-r--r--src/main/java/gregtech/api/util/GT_ClientPreference.java41
-rw-r--r--src/main/java/gregtech/api/util/GT_Config.java160
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehavior.java411
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java856
-rw-r--r--src/main/java/gregtech/api/util/GT_CreativeTab.java26
-rw-r--r--src/main/java/gregtech/api/util/GT_ExoticEnergyInputHelper.java114
-rw-r--r--src/main/java/gregtech/api/util/GT_FoodStat.java122
-rw-r--r--src/main/java/gregtech/api/util/GT_Forestry_Compat.java195
-rw-r--r--src/main/java/gregtech/api/util/GT_GC_Compat.java52
-rw-r--r--src/main/java/gregtech/api/util/GT_HatchElementBuilder.java524
-rw-r--r--src/main/java/gregtech/api/util/GT_IBoxableWrapper.java13
-rw-r--r--src/main/java/gregtech/api/util/GT_ItsNotMyFaultException.java18
-rw-r--r--src/main/java/gregtech/api/util/GT_JubilanceMegaApiary.java23
-rw-r--r--src/main/java/gregtech/api/util/GT_LanguageManager.java600
-rw-r--r--src/main/java/gregtech/api/util/GT_Log.java45
-rw-r--r--src/main/java/gregtech/api/util/GT_ModHandler.java2551
-rw-r--r--src/main/java/gregtech/api/util/GT_Multiblock_Tooltip_Builder.java720
-rw-r--r--src/main/java/gregtech/api/util/GT_OreDictUnificator.java570
-rw-r--r--src/main/java/gregtech/api/util/GT_OverclockCalculator.java631
-rw-r--r--src/main/java/gregtech/api/util/GT_PCBFactoryManager.java25
-rw-r--r--src/main/java/gregtech/api/util/GT_ParallelHelper.java717
-rw-r--r--src/main/java/gregtech/api/util/GT_PlayedSound.java42
-rw-r--r--src/main/java/gregtech/api/util/GT_ProcessingArray_Manager.java51
-rw-r--r--src/main/java/gregtech/api/util/GT_Recipe.java1271
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeBuilder.java933
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeConstants.java332
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeMapUtil.java226
-rw-r--r--src/main/java/gregtech/api/util/GT_RecipeRegistrator.java868
-rw-r--r--src/main/java/gregtech/api/util/GT_RenderingWorld.java195
-rw-r--r--src/main/java/gregtech/api/util/GT_Shaped_Recipe.java100
-rw-r--r--src/main/java/gregtech/api/util/GT_Shapeless_Recipe.java100
-rw-r--r--src/main/java/gregtech/api/util/GT_SpawnEventHandler.java81
-rw-r--r--src/main/java/gregtech/api/util/GT_StreamUtil.java44
-rw-r--r--src/main/java/gregtech/api/util/GT_StructureUtility.java512
-rw-r--r--src/main/java/gregtech/api/util/GT_StructureUtilityMuTE.java271
-rw-r--r--src/main/java/gregtech/api/util/GT_ToolHarvestHelper.java71
-rw-r--r--src/main/java/gregtech/api/util/GT_TooltipDataCache.java105
-rw-r--r--src/main/java/gregtech/api/util/GT_Util.java202
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java4982
-rw-r--r--src/main/java/gregtech/api/util/GT_UtilityClient.java52
-rw-r--r--src/main/java/gregtech/api/util/GT_Waila.java23
-rw-r--r--src/main/java/gregtech/api/util/IGT_HatchAdder.java28
-rw-r--r--src/main/java/gregtech/api/util/ISerializableObject.java159
-rw-r--r--src/main/java/gregtech/api/util/LightingHelper.java1434
-rw-r--r--src/main/java/gregtech/api/util/MethodsReturnNonnullByDefault.java22
-rw-r--r--src/main/java/gregtech/api/util/OutputHatchWrapper.java65
-rw-r--r--src/main/java/gregtech/api/util/ValidationResult.java24
-rw-r--r--src/main/java/gregtech/api/util/ValidationType.java6
-rw-r--r--src/main/java/gregtech/api/util/VoidProtectionHelper.java485
-rw-r--r--src/main/java/gregtech/api/util/WorldSpawnedEventBuilder.java678
-rw-r--r--src/main/java/gregtech/api/util/extensions/ArrayExt.java81
-rw-r--r--src/main/java/gregtech/api/util/extensions/IteratorExt.java13
-rw-r--r--src/main/java/gregtech/api/util/item/ItemHolder.java79
-rw-r--r--src/main/java/gregtech/api/util/recipe/RecipeInputRequirements.java77
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ReasonOutOfFluid.java63
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ReasonOutOfItem.java62
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ReasonOutOfStuff.java61
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ShutDownReason.java41
-rw-r--r--src/main/java/gregtech/api/util/shutdown/ShutDownReasonRegistry.java118
-rw-r--r--src/main/java/gregtech/api/util/shutdown/SimpleShutDownReason.java79
75 files changed, 25215 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/util/AveragePerTickCounter.java b/src/main/java/gregtech/api/util/AveragePerTickCounter.java
new file mode 100644
index 0000000000..c9b1275deb
--- /dev/null
+++ b/src/main/java/gregtech/api/util/AveragePerTickCounter.java
@@ -0,0 +1,139 @@
+package gregtech.api.util;
+
+import java.security.InvalidParameterException;
+import java.util.ArrayDeque;
+
+import net.minecraft.server.MinecraftServer;
+
+public class AveragePerTickCounter {
+
+ /**
+ * Averages a value over a certain amount of ticks
+ *
+ * @param period amount of ticks to average (20 for 1 second)
+ *
+ */
+ public AveragePerTickCounter(int period) throws InvalidParameterException {
+
+ if (period <= 0) throw new InvalidParameterException("period should be a positive non-zero number");
+
+ this.period = period;
+ values = new ArrayDeque<>(period);
+ }
+
+ public void addValue(long value) {
+
+ if (value == 0) return;
+
+ final int currTick = getWorldTimeInTicks();
+
+ if (values.isEmpty()) {
+ values.addLast(new Measurement(currTick, value));
+ isCachedAverageValid = false;
+ return;
+ }
+
+ Measurement lastMeasurement = values.peekLast();
+ final int lastMeasurementTick = lastMeasurement.TimestampInWorldTicks;
+
+ /// sums up values added in the same tick
+ /// for example a cable had an amp running through it multiple times in the same tick
+ if (currTick == lastMeasurementTick) {
+ lastMeasurement.Value = lastMeasurement.Value + value;
+ isCachedAverageValid = false;
+ return;
+ }
+
+ if (currTick > lastMeasurementTick) {
+ trimIrrelevantData(currTick);
+
+ values.addLast(new Measurement(currTick, value));
+ isCachedAverageValid = false;
+ return;
+ }
+ }
+
+ public double getAverage() {
+
+ if (values.isEmpty()) return 0;
+
+ final int currTick = getWorldTimeInTicks();
+
+ Measurement lastMeasurement = values.peekLast();
+ final int lastMeasurementTick = lastMeasurement.TimestampInWorldTicks;
+
+ if (currTick < lastMeasurementTick) return 0;
+
+ if (currTick > lastMeasurementTick) {
+ trimIrrelevantData(currTick);
+ }
+
+ if (isCachedAverageValid) return cachedAverage;
+
+ return calculateAverage();
+ }
+
+ public long getLast() {
+
+ if (values.isEmpty()) return 0;
+
+ final int currTick = getWorldTimeInTicks();
+
+ Measurement lastMeasurement = values.peekLast();
+ final int lastMeasurementTick = lastMeasurement.TimestampInWorldTicks;
+
+ if (currTick == lastMeasurementTick) return values.getLast().Value;
+
+ return 0;
+ }
+
+ private double calculateAverage() {
+
+ isCachedAverageValid = true;
+ long sum = 0;
+
+ for (Measurement measurement : values) {
+ sum += measurement.Value;
+ }
+
+ return sum / (double) period;
+ }
+
+ private void trimIrrelevantData(int currWorldTimeInTicks) {
+
+ if (values.isEmpty()) return;
+
+ int firstMeasurementTick = values.peekFirst().TimestampInWorldTicks;
+
+ while (currWorldTimeInTicks - firstMeasurementTick >= period) {
+ values.removeFirst();
+ isCachedAverageValid = false;
+
+ if (values.isEmpty()) return;
+
+ firstMeasurementTick = values.peekFirst().TimestampInWorldTicks;
+ }
+ }
+
+ private int getWorldTimeInTicks() {
+ return MinecraftServer.getServer()
+ .getTickCounter();
+ }
+
+ private ArrayDeque<Measurement> values;
+ private int period;
+
+ private double cachedAverage = 0;
+ private boolean isCachedAverageValid = true;
+
+ private class Measurement {
+
+ public int TimestampInWorldTicks;
+ public long Value;
+
+ public Measurement(int timestampInWorldTicks, long value) {
+ this.TimestampInWorldTicks = timestampInWorldTicks;
+ this.Value = value;
+ }
+ }
+}
diff --git a/src/main/java/gregtech/api/util/ColorsMetadataSection.java b/src/main/java/gregtech/api/util/ColorsMetadataSection.java
new file mode 100644
index 0000000000..fb9cc6dd56
--- /dev/null
+++ b/src/main/java/gregtech/api/util/ColorsMetadataSection.java
@@ -0,0 +1,63 @@
+package gregtech.api.util;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import net.minecraft.client.resources.data.IMetadataSection;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+@SideOnly(Side.CLIENT)
+public class ColorsMetadataSection implements IMetadataSection {
+
+ private final Map<String, Integer> textColors;
+ private final Map<String, String> hexTextColors;
+ private final Map<String, Integer> guiTints;
+ private final Map<String, String> hexGuiTints;
+ private final boolean guiTintEnabled;
+
+ public ColorsMetadataSection(Map<String, String> hexTextColorMap, Map<String, String> hexGuiTintMap,
+ boolean guiTintEnabled) {
+ this.hexTextColors = hexTextColorMap;
+ this.textColors = convertHexMapToIntMap(hexTextColorMap);
+
+ this.hexGuiTints = hexGuiTintMap;
+ this.guiTints = convertHexMapToIntMap(hexGuiTintMap);
+
+ this.guiTintEnabled = guiTintEnabled;
+ }
+
+ private Map<String, Integer> convertHexMapToIntMap(Map<String, String> hexMap) {
+ Map<String, Integer> intMap = new HashMap<>();
+
+ for (String key : hexMap.keySet()) {
+ int colorValue = -1;
+ String hex = hexMap.get(key);
+ try {
+ if (!hex.isEmpty()) colorValue = Integer.parseUnsignedInt(hex, 16);
+ } catch (final NumberFormatException e) {
+ GT_Log.err.println("Couldn't format color correctly of " + key + " -> " + hex);
+ }
+ intMap.put(key, colorValue);
+ }
+ return intMap;
+ }
+
+ public int getTextColorOrDefault(String key, int defaultColor) {
+ return isColorInMap(key, this.hexTextColors) ? this.textColors.get(key) : defaultColor;
+ }
+
+ public int getGuiTintOrDefault(String key, int defaultColor) {
+ return isColorInMap(key, this.hexGuiTints) ? this.guiTints.get(key) : defaultColor;
+ }
+
+ private boolean isColorInMap(String key, Map<String, String> hexMap) {
+ return hexMap.containsKey(key) && !hexMap.get(key)
+ .isEmpty();
+ }
+
+ public boolean sGuiTintingEnabled() {
+ return this.guiTintEnabled;
+ }
+}
diff --git a/src/main/java/gregtech/api/util/ColorsMetadataSectionSerializer.java b/src/main/java/gregtech/api/util/ColorsMetadataSectionSerializer.java
new file mode 100644
index 0000000000..389662d041
--- /dev/null
+++ b/src/main/java/gregtech/api/util/ColorsMetadataSectionSerializer.java
@@ -0,0 +1,81 @@
+package gregtech.api.util;
+
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.minecraft.client.resources.data.BaseMetadataSectionSerializer;
+import net.minecraft.util.JsonUtils;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.GT_Mod;
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.Dyes;
+
+@SideOnly(Side.CLIENT)
+public class ColorsMetadataSectionSerializer extends BaseMetadataSectionSerializer {
+
+ public ColorsMetadataSection deserialize(JsonElement metadataColors, Type type,
+ JsonDeserializationContext context) {
+ // Default values
+ boolean enableGuiTint = GregTech_API.sColoredGUI;
+ Map<String, String> hexGuiTintMap = new HashMap<>();
+ Map<String, String> hexTextColorMap = new HashMap<>();
+
+ JsonObject jsonObject = JsonUtils.getJsonElementAsJsonObject(metadataColors, "metadata section");
+ if (jsonObject.has("textColor")) {
+ JsonObject textColors = JsonUtils.func_152754_s(jsonObject, "textColor");
+ for (Map.Entry<String, JsonElement> entry : textColors.entrySet()) {
+ if (entry.getValue()
+ .isJsonPrimitive()) {
+ hexTextColorMap.put(
+ entry.getKey(),
+ entry.getValue()
+ .getAsString());
+ } else {
+ GT_Mod.GT_FML_LOGGER.warn("ColorOverride expects primitive value for key `textColor`");
+ }
+ }
+ }
+
+ if (jsonObject.has("guiTint")) {
+ JsonObject guiTints = JsonUtils.func_152754_s(jsonObject, "guiTint");
+ enableGuiTint = JsonUtils
+ .getJsonObjectBooleanFieldValueOrDefault(guiTints, "enableGuiTintWhenPainted", true);
+
+ for (Dyes dye : Dyes.values()) {
+ hexGuiTintMap.put(dye.mName, GT_Util.toHexString(dye.getRGBA()));
+ }
+
+ for (String key : hexGuiTintMap.keySet()) {
+ if (enableGuiTint) {
+ hexGuiTintMap.replace(
+ key,
+ JsonUtils.getJsonObjectStringFieldValueOrDefault(guiTints, key, hexGuiTintMap.get(key)));
+ } else {
+ hexGuiTintMap.replace(key, GT_Util.toHexString(Dyes.dyeWhite.getRGBA()));
+ }
+ }
+ }
+
+ return new ColorsMetadataSection(hexTextColorMap, hexGuiTintMap, enableGuiTint);
+ }
+
+ public JsonElement serialize(ColorsMetadataSection colorsMetaSection, Type type, JsonSerializationContext context) {
+ return new JsonObject();
+ }
+
+ public String getSectionName() {
+ return "colors";
+ }
+
+ public JsonElement serialize(Object object, Type type, JsonSerializationContext context) {
+ return this.serialize((ColorsMetadataSection) object, type, context);
+ }
+}
diff --git a/src/main/java/gregtech/api/util/ExternalMaterials.java b/src/main/java/gregtech/api/util/ExternalMaterials.java
new file mode 100644
index 0000000000..29564db2fd
--- /dev/null
+++ b/src/main/java/gregtech/api/util/ExternalMaterials.java
@@ -0,0 +1,14 @@
+package gregtech.api.util;
+
+import gregtech.api.enums.Materials;
+
+public class ExternalMaterials {
+
+ public static Materials getRhodiumPlatedPalladium() {
+ return Materials.getWithFallback("Rhodium-PlatedPalladium", Materials.Chrome);
+ }
+
+ public static Materials getRuridit() {
+ return Materials.getWithFallback("Ruridit", Materials.Osmiridium);
+ }
+}
diff --git a/src/main/java/gregtech/api/util/FieldsAreNonnullByDefault.java b/src/main/java/gregtech/api/util/FieldsAreNonnullByDefault.java
new file mode 100644
index 0000000000..1f51aa39a7
--- /dev/null
+++ b/src/main/java/gregtech/api/util/FieldsAreNonnullByDefault.java
@@ -0,0 +1,18 @@
+package gregtech.api.util;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;