aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/bartworks/system/oredict
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bartworks/system/oredict')
-rw-r--r--src/main/java/bartworks/system/oredict/OreDictAdder.java42
-rw-r--r--src/main/java/bartworks/system/oredict/OreDictHandler.java94
2 files changed, 136 insertions, 0 deletions
diff --git a/src/main/java/bartworks/system/oredict/OreDictAdder.java b/src/main/java/bartworks/system/oredict/OreDictAdder.java
new file mode 100644
index 0000000000..7c07dbb274
--- /dev/null
+++ b/src/main/java/bartworks/system/oredict/OreDictAdder.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following
+ * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial
+ * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+package bartworks.system.oredict;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import net.minecraft.item.ItemStack;
+
+import bartworks.util.Pair;
+import gregtech.api.util.GTOreDictUnificator;
+
+public class OreDictAdder {
+
+ private static final ConcurrentHashMap<String, ItemStack> toAddMap = new ConcurrentHashMap<>();
+
+ public static synchronized void addToMap(Pair<String, ItemStack> element) {
+ OreDictAdder.toAddMap.put(element.getKey(), element.getValue());
+ }
+
+ @SafeVarargs
+ public static synchronized void addToMap(Pair<String, ItemStack>... elements) {
+ for (Pair<String, ItemStack> p : elements) OreDictAdder.toAddMap.put(p.getKey(), p.getValue());
+ }
+
+ public static void addToOreDict() {
+ for (Map.Entry<String, ItemStack> entry : OreDictAdder.toAddMap.entrySet()) {
+ GTOreDictUnificator.registerOre(entry.getKey(), entry.getValue());
+ }
+ }
+}
diff --git a/src/main/java/bartworks/system/oredict/OreDictHandler.java b/src/main/java/bartworks/system/oredict/OreDictHandler.java
new file mode 100644
index 0000000000..5faa23f0b2
--- /dev/null
+++ b/src/main/java/bartworks/system/oredict/OreDictHandler.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following
+ * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial
+ * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+package bartworks.system.oredict;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.oredict.OreDictionary;
+
+import bartworks.MainMod;
+import bartworks.util.Pair;
+import bwcrossmod.BartWorksCrossmod;
+import cpw.mods.fml.common.registry.GameRegistry;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GTOreDictUnificator;
+
+public class OreDictHandler {
+
+ private static final HashMap<String, Pair<Integer, Short>> cache = new HashMap<>();
+ private static final HashSet<Pair<Integer, Short>> cacheNonBW = new HashSet<>();
+
+ public static HashMap<String, Pair<Integer, Short>> getCache() {
+ return OreDictHandler.cache;
+ }
+
+ public static HashSet<Pair<Integer, Short>> getNonBWCache() {
+ return OreDictHandler.cacheNonBW;
+ }
+
+ public static void adaptCacheForWorld() {
+ Set<String> used = new HashSet<>(OreDictHandler.cache.keySet());
+ OreDictHandler.cache.clear();
+ OreDictHandler.cacheNonBW.clear();
+ for (String s : used) {
+ if (!OreDictionary.getOres(s)
+ .isEmpty()) {
+ ItemStack tmpstack = OreDictionary.getOres(s)
+ .get(0)
+ .copy();
+ Pair<Integer, Short> p = new Pair<>(
+ Item.getIdFromItem(tmpstack.getItem()),
+ (short) tmpstack.getItemDamage());
+ OreDictHandler.cache.put(s, p);
+ for (ItemStack tmp : OreDictionary.getOres(s)) {
+ Pair<Integer, Short> p2 = new Pair<>(
+ Item.getIdFromItem(tmp.getItem()),
+ (short) tmp.getItemDamage());
+ GameRegistry.UniqueIdentifier UI = GameRegistry.findUniqueIdentifierFor(tmp.getItem());
+ if (UI == null) UI = GameRegistry.findUniqueIdentifierFor(Block.getBlockFromItem(tmp.getItem()));
+ if (!MainMod.MOD_ID.equals(UI.modId) && !BartWorksCrossmod.MOD_ID.equals(UI.modId)
+ && !"BWCore".equals(UI.modId)) {
+ OreDictHandler.cacheNonBW.add(p2);
+ }
+ }
+ }
+ }
+ }
+
+ public static ItemStack getItemStack(String elementName, OrePrefixes prefixes, int amount) {
+ if (OreDictHandler.cache.get(prefixes + elementName.replace(" ", "")) != null) {
+ Pair<Integer, Short> p = OreDictHandler.cache.get(prefixes + elementName.replace(" ", ""));
+ return new ItemStack(Item.getItemById(p.getKey()), amount, p.getValue());
+ }
+ if (!OreDictionary.getOres(prefixes + elementName.replace(" ", ""))
+ .isEmpty()) {
+ ItemStack tmp = GTOreDictUnificator.get(
+ OreDictionary.getOres(prefixes + elementName.replace(" ", ""))
+ .get(0)
+ .copy())
+ .copy();
+ OreDictHandler.cache.put(
+ prefixes + elementName.replace(" ", ""),
+ new Pair<>(Item.getIdFromItem(tmp.getItem()), (short) tmp.getItemDamage()));
+ tmp.stackSize = amount;
+ return tmp;
+ }
+ return null;
+ }
+}