diff options
Diffstat (limited to 'src/main/java/bartworks/system/oredict')
| -rw-r--r-- | src/main/java/bartworks/system/oredict/OreDictAdder.java | 42 | ||||
| -rw-r--r-- | src/main/java/bartworks/system/oredict/OreDictHandler.java | 94 |
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; + } +} |
