From a8876f2b5e5d37c94384841a1d82c3ebb9a70197 Mon Sep 17 00:00:00 2001 From: WanionCane Date: Wed, 13 Jul 2016 13:47:43 -0300 Subject: [PATCH] fix more things... --- build.gradle | 2 +- src/main/java/wanion/unidict/Config.java | 17 ++--- .../java/wanion/unidict/UniJEIPlugin.java | 3 +- .../java/wanion/unidict/common/Reference.java | 2 +- .../SpecificKindItemStackComparator.java | 5 +- .../wanion/unidict/helper/RecipeHelper.java | 3 +- .../wanion/unidict/resource/Resource.java | 32 --------- .../resource/UniResourceContainer.java | 69 ++++++++++++------- .../unidict/resource/UniResourceHandler.java | 30 ++++---- src/main/resources/mcmod.info | 2 +- 10 files changed, 75 insertions(+), 90 deletions(-) diff --git a/build.gradle b/build.gradle index 159367d..5f55374 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ plugins { id "net.minecraftforge.gradle.forge" version "2.0.2" } */ -version = "1.10.2-1.2c" +version = "1.10.2-1.2d" group= "wanion.unidict" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "UniDict" diff --git a/src/main/java/wanion/unidict/Config.java b/src/main/java/wanion/unidict/Config.java index c4287f4..035ce7b 100644 --- a/src/main/java/wanion/unidict/Config.java +++ b/src/main/java/wanion/unidict/Config.java @@ -27,9 +27,7 @@ public final class Config { - private Config() - { - } + private Config() {} // config private static final Configuration config = new Configuration(new File("." + SLASH + "config" + SLASH + Reference.MOD_NAME + ".cfg"), Reference.MOD_VERSION); @@ -37,6 +35,7 @@ private Config() // general configs private static final String general = Configuration.CATEGORY_GENERAL; public static final boolean keepOneEntry = config.getBoolean("keepOneEntry", general, false, "keep only one entry per ore dict entry?"); + public static boolean autoHideInJEI; public static final Set hideInJEIBlackSet = Collections.unmodifiableSet(Sets.newLinkedHashSet(Arrays.asList(config.getStringList("autoHideInJEIBlackList", general, new String[]{"ore"}, "put here things that you don't want to hide in JEI.\nonly works if keepOneEntry is false.")))); // resource related stuff private static final String resources = "resources"; @@ -54,10 +53,7 @@ private Config() public static final boolean craftingIntegration = config.getBoolean("craftingIntegration", vanillaIntegrations, true, "Crafting Integration"); public static final boolean furnaceIntegration = config.getBoolean("furnaceIntegration", vanillaIntegrations, true, "Furnace Integration"); // ensure mod loaded - public static boolean foundry; public static boolean ic2; - public static boolean tinkersConstruct; - public static boolean autoHideInJEI; // integration public static boolean abyssalCraft; public static boolean baseMetalsIntegration; @@ -75,11 +71,8 @@ static void init() if (!config.getDefinedConfigVersion().equals(config.getLoadedConfigVersion())) deleted = config.getConfigFile().delete(); - // ensure mod loaded - foundry = isModLoaded("foundry"); //forestry = isModLoaded("forestry"); ic2 = isModLoaded("IC2"); - tinkersConstruct = isModLoaded("tconstruct"); // general configs autoHideInJEI = config.getBoolean("autoHideInJEI", general, true, "auto hide items in JEI?") && isModLoaded("JEI"); @@ -91,7 +84,7 @@ static void init() //botaniaIntegration = config.getBoolean("botania", integrations, true, "Botania Integration.") && isModLoaded("Botania"); enderIOIntegration = config.getBoolean("enderIO", integrations, true, "Ender IO Integration.") && isModLoaded("EnderIO"); //forestryIntegration = config.getBoolean("forestry", integrations, true, "Forestry Integration.") && forestry; - foundryIntegration = config.getBoolean("foundry", integrations, true, "Foundry Integration.") && foundry; + foundryIntegration = config.getBoolean("foundry", integrations, true, "Foundry Integration.") && isModLoaded("foundry"); ic2Integration = config.getBoolean("industrialCraft2", integrations, true, "Industrial Craft 2 Integration.") && ic2; techRebornIntegration = config.getBoolean("techReborn", integrations, true, "TechReborn Integration.") && isModLoaded("techreborn"); techyIntegration = config.getBoolean("techy", integrations, true, "Techy Integration.") && isModLoaded("Techy"); @@ -111,7 +104,7 @@ public static void saveIfHasChanged() public static TObjectLongMap getOwnerOfEveryKindMap(final long kind) { final String kindName = WordUtils.capitalize(Resource.getNameOfKind(kind)); - final String[] ownerOfEveryKind = config.getStringList("ownerOfEvery" + kindName, resources, new String[]{"substratum", "minecraft", "IC2", "techreborn"}, "entries of kind \"" + kindName + "\" will be sorted according to the modID list below\nmust be the exact modID.\n"); + final String[] ownerOfEveryKind = config.getStringList("ownerOfEvery" + kindName, resources, new String[]{"substratum", "minecraft", "ic2", "techreborn"}, "entries of kind \"" + kindName + "\" will be sorted according to the modID list below\nmust be the exact modID.\n"); final TObjectLongMap ownerOfEveryThingMap = new TObjectLongHashMap<>(10, 1, Long.MAX_VALUE); for (int i = 0; i < ownerOfEveryKind.length; i++) ownerOfEveryThingMap.put(ownerOfEveryKind[i], i); @@ -131,7 +124,7 @@ private static Map> getCustomUnifiedResourcesMap() { Map> customUnifiedResources = new THashMap<>(); Pattern splitPattern = Pattern.compile("\\|"); - for (String customUnifiedResource : config.getStringList("customUnifiedResources", resources, new String[]{"Obsidian:dustTiny|dust"}, "Here you can put a list to custom unify them.\nmay break some recipes.\nmust be in this format \"ResourceName:kind1|kind2|...\".\nif you put gems here, be aware that it will include the \"block\" of that gem too.")) { + for (String customUnifiedResource : config.getStringList("customUnifiedResources", resources, new String[]{"Obsidian:dustTiny|dust"}, "Here you can put a list to custom unify them.\nmust be in this format \"ResourceName:kind1|kind2|...\".")) { int baseSeparatorIndex; Set kindSet; if ((baseSeparatorIndex = customUnifiedResource.indexOf(':')) != -1 && !(kindSet = Sets.newLinkedHashSet(Arrays.asList(splitPattern.split(customUnifiedResource.substring(baseSeparatorIndex + 1, customUnifiedResource.length()))))).isEmpty()) diff --git a/src/main/java/wanion/unidict/UniJEIPlugin.java b/src/main/java/wanion/unidict/UniJEIPlugin.java index 2a9a8ff..67349f7 100644 --- a/src/main/java/wanion/unidict/UniJEIPlugin.java +++ b/src/main/java/wanion/unidict/UniJEIPlugin.java @@ -13,12 +13,13 @@ import javax.annotation.Nonnull; import java.util.ArrayList; +import java.util.Collections; import java.util.List; @JEIPlugin public class UniJEIPlugin implements IModPlugin { - private static final List stacksToHideList = new ArrayList<>(); + private static final List stacksToHideList = Collections.synchronizedList(new ArrayList<>()); private IItemBlacklist itemBlackList; public static void hide(final ItemStack itemStack) diff --git a/src/main/java/wanion/unidict/common/Reference.java b/src/main/java/wanion/unidict/common/Reference.java index f136866..f5b0a01 100644 --- a/src/main/java/wanion/unidict/common/Reference.java +++ b/src/main/java/wanion/unidict/common/Reference.java @@ -14,7 +14,7 @@ public final class Reference { public static final String MOD_ID = "UniDict"; public static final String MOD_NAME = MOD_ID; - public static final String MOD_VERSION = "1.10.2-1.2c"; + public static final String MOD_VERSION = "1.10.2-1.2d"; public static final char SLASH = separatorChar; public static final String MC_VERSION = "[1.10.2]"; diff --git a/src/main/java/wanion/unidict/common/SpecificKindItemStackComparator.java b/src/main/java/wanion/unidict/common/SpecificKindItemStackComparator.java index ceacf73..f46837d 100644 --- a/src/main/java/wanion/unidict/common/SpecificKindItemStackComparator.java +++ b/src/main/java/wanion/unidict/common/SpecificKindItemStackComparator.java @@ -25,15 +25,16 @@ public final class SpecificKindItemStackComparator implements Comparator kindSpecificComparators = new TLongObjectHashMap<>(); private final TObjectLongMap ownerOfKind; - public SpecificKindItemStackComparator(final long kind) + private SpecificKindItemStackComparator(final long kind) { if ((ownerOfKind = Config.getOwnerOfEveryKindMap(kind)) == null) throw new RuntimeException("this exception should be called: ThisShouldNeverHappenException."); - kindSpecificComparators.put(kind, this); } public static SpecificKindItemStackComparator getComparatorFor(final long kind) { + if (!kindSpecificComparators.containsKey(kind)) + kindSpecificComparators.put(kind, new SpecificKindItemStackComparator(kind)); return kindSpecificComparators.get(kind); } diff --git a/src/main/java/wanion/unidict/helper/RecipeHelper.java b/src/main/java/wanion/unidict/helper/RecipeHelper.java index 54fed0b..d209c0e 100644 --- a/src/main/java/wanion/unidict/helper/RecipeHelper.java +++ b/src/main/java/wanion/unidict/helper/RecipeHelper.java @@ -30,7 +30,6 @@ public final class RecipeHelper { public static final List recipes = CraftingManager.getInstance().getRecipeList(); private static final char[] DEFAULT_RECIPE_CHARS = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'}; - private static final char[][] SHAPE = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}}; private RecipeHelper() {} @@ -38,7 +37,7 @@ private RecipeHelper() {} public static Object[] rawShapeToShape(@Nonnull final Object[] objects) { int f = 0; - final char[][] almostTheShape = new char[][]{Arrays.copyOf(SHAPE[0], 3), Arrays.copyOf(SHAPE[1], 3), Arrays.copyOf(SHAPE[2], 3)}; + final char[][] almostTheShape = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}}; final TObjectCharMap thingToCharMap = new TObjectCharHashMap<>(); final Map keyStackMap = new THashMap<>(); boolean done = false; diff --git a/src/main/java/wanion/unidict/resource/Resource.java b/src/main/java/wanion/unidict/resource/Resource.java index 17999bc..4feaf76 100644 --- a/src/main/java/wanion/unidict/resource/Resource.java +++ b/src/main/java/wanion/unidict/resource/Resource.java @@ -14,9 +14,6 @@ import gnu.trove.map.TObjectLongMap; import gnu.trove.map.hash.TLongObjectHashMap; import gnu.trove.map.hash.TObjectLongHashMap; -import gnu.trove.set.TLongSet; -import gnu.trove.set.hash.TLongHashSet; -import wanion.unidict.Config; import javax.annotation.Nonnull; import java.util.ArrayList; @@ -101,7 +98,6 @@ public void updateEntries() children &= ~kindId; childrenIterator.remove(); } - cleanEverything(); } @Override @@ -129,34 +125,6 @@ Resource setSortOfChildren(final boolean sort) return this; } - private void cleanEverything() - { - hideInNEI(); - keepOneEntry(); - } - - private void hideInNEI() - { - if (!Config.autoHideInJEI) - return; - if (!Config.keepOneEntry) { - TLongSet blackSet = new TLongHashSet(); - for (String blackThing : Config.hideInJEIBlackSet) - blackSet.add(Resource.getKindOfName(blackThing)); - for (long kind : childrenMap.keys()) - if (!blackSet.contains(kind)) - childrenMap.get(kind).removeBadEntriesFromNEI(); - } else - childrenMap.valueCollection().forEach(UniResourceContainer::removeBadEntriesFromNEI); - } - - private void keepOneEntry() - { - if (!Config.keepOneEntry) - return; - childrenMap.valueCollection().forEach(UniResourceContainer::keepOneEntry); - } - public static List getResources(@Nonnull final Collection resources, final String... kinds) { long kindsId = 0; diff --git a/src/main/java/wanion/unidict/resource/UniResourceContainer.java b/src/main/java/wanion/unidict/resource/UniResourceContainer.java index 7d349b5..cc6b067 100644 --- a/src/main/java/wanion/unidict/resource/UniResourceContainer.java +++ b/src/main/java/wanion/unidict/resource/UniResourceContainer.java @@ -10,6 +10,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import wanion.unidict.Config; import wanion.unidict.UniJEIPlugin; import wanion.unidict.UniOreDictionary; import wanion.unidict.common.SpecificKindItemStackComparator; @@ -17,7 +18,7 @@ import java.util.*; -import static wanion.unidict.Config.enableSpecificKindSort; +import static wanion.unidict.Config.*; public final class UniResourceContainer { @@ -27,32 +28,57 @@ public final class UniResourceContainer private final List entries; private final int initialSize; private boolean sort = false; + private boolean updated = false; private Item mainEntryItem; private int mainEntryMeta; - public UniResourceContainer(String name, long kind) { + public UniResourceContainer(String name, long kind) + { if ((entries = UniOreDictionary.get(this.id = UniOreDictionary.getId(this.name = name))) == null) throw new RuntimeException("Something may have broken the Ore Dictionary!"); this.kind = kind; initialSize = entries.size(); } - public ItemStack getMainEntry() { + public ItemStack getMainEntry() + { return new ItemStack(mainEntryItem, 1, mainEntryMeta); } - public ItemStack getMainEntry(int size) { + public ItemStack getMainEntry(int size) + { return new ItemStack(mainEntryItem, size, mainEntryMeta); } - public List getEntries() { + public List getEntries() + { return UniOreDictionary.getUn(id); } - void keepOneEntry() { - if (!sort || entries.size() == 1) + boolean updateEntries() + { + if (entries.isEmpty()) + return false; + if (updated) + return true; + if (sort && initialSize != entries.size()) + sort(); + ItemStack mainEntry = entries.get(0); + mainEntryMeta = (mainEntryItem = mainEntry.getItem()).getDamage(mainEntry); + if (sort) { + if (autoHideInJEI) + removeBadEntriesFromNEI(); + if (keepOneEntry) + keepOneEntry(); + } + return updated = true; + } + + private void keepOneEntry() + { + if (entries.size() == 1) return; - Set keepOneEntryBlackSet = ResourceHandler.keepOneEntryBlackSet; + final Set keepOneEntryBlackSet = ResourceHandler.keepOneEntryBlackSet; if (!keepOneEntryBlackSet.isEmpty()) { for (Iterator keepOneEntryIterator = entries.subList(1, entries.size()).iterator(); keepOneEntryIterator.hasNext(); ) if (!keepOneEntryBlackSet.contains(keepOneEntryIterator.next())) @@ -60,24 +86,17 @@ void keepOneEntry() { } else entries.subList(1, entries.size()).clear(); } - void removeBadEntriesFromNEI() + private void removeBadEntriesFromNEI() { - if (sort) - if (entries.size() > 1) + if (entries.size() > 1) + if (Config.keepOneEntry) + entries.subList(1, entries.size()).forEach(UniJEIPlugin::hide); + else if (!UniResourceHandler.getKindBlackSet().contains(kind)) entries.subList(1, entries.size()).forEach(UniJEIPlugin::hide); } - boolean updateEntries() { - if (entries.isEmpty()) - return false; - if (sort && initialSize != entries.size()) - sort(); - ItemStack mainEntry = entries.get(0); - mainEntryMeta = (mainEntryItem = mainEntry.getItem()).getDamage(mainEntry); - return true; - } - - public Comparator getComparator() { + public Comparator getComparator() + { return (enableSpecificKindSort) ? SpecificKindItemStackComparator.getComparatorFor(kind) : Util.itemStackComparatorByModName; } @@ -94,14 +113,16 @@ void setSort(final boolean sort) sort(); } - public void sort() { + public void sort() + { final Comparator itemStackComparator = getComparator(); if (itemStackComparator != null) Collections.sort(entries, itemStackComparator); } @Override - public String toString() { + public String toString() + { return name; } } \ No newline at end of file diff --git a/src/main/java/wanion/unidict/resource/UniResourceHandler.java b/src/main/java/wanion/unidict/resource/UniResourceHandler.java index 271977e..7c33678 100644 --- a/src/main/java/wanion/unidict/resource/UniResourceHandler.java +++ b/src/main/java/wanion/unidict/resource/UniResourceHandler.java @@ -12,6 +12,8 @@ import gnu.trove.map.TLongObjectMap; import gnu.trove.map.hash.THashMap; import gnu.trove.map.hash.TLongObjectHashMap; +import gnu.trove.set.TLongSet; +import gnu.trove.set.hash.TLongHashSet; import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.text.WordUtils; import wanion.unidict.Config; @@ -19,7 +21,6 @@ import wanion.unidict.UniOreDictionary; import wanion.unidict.api.UniDictAPI; import wanion.unidict.common.Dependencies; -import wanion.unidict.common.SpecificKindItemStackComparator; import javax.annotation.Nonnull; import java.util.*; @@ -27,6 +28,7 @@ public final class UniResourceHandler { + private static final TLongSet kindBlackSet = new TLongHashSet(); private static boolean hasInit; private final Map apiResourceMap = new THashMap<>(); private final Map resourceMap = new THashMap<>(); @@ -75,9 +77,9 @@ public void init() private void createResources() { - final List allTheResourceNames = new ArrayList<>(); + final List allTheResourceNames = Collections.synchronizedList(new ArrayList<>()); final Pattern resourceBlackTagsPattern = Pattern.compile(".*(?i)(Dense|Nether|Dye|Glass|Tiny|Small).*"); - UniOreDictionary.getThoseThatMatches("^ingot").stream().filter(matcher -> !resourceBlackTagsPattern.matcher(matcher.replaceFirst("")).find()).forEach(matcher -> allTheResourceNames.add(WordUtils.capitalize(matcher.replaceFirst("")))); + UniOreDictionary.getThoseThatMatches("^ingot").parallelStream().filter(matcher -> !resourceBlackTagsPattern.matcher(matcher.replaceFirst("")).find()).parallel().forEach(matcher -> allTheResourceNames.add(WordUtils.capitalize(matcher.replaceFirst("")))); final StringBuilder patternBuilder = new StringBuilder("("); for (final Iterator allTheResourceNamesIterator = allTheResourceNames.iterator(); allTheResourceNamesIterator.hasNext(); ) patternBuilder.append(allTheResourceNamesIterator.next()).append(allTheResourceNamesIterator.hasNext() ? "|" : ")$"); @@ -95,8 +97,6 @@ private void createResources() } }); allTheKinds.forEach(Resource::register); - if (Config.enableSpecificKindSort) - Config.childrenOfMetals.forEach(child -> new SpecificKindItemStackComparator(Resource.registerAndGet(child))); basicResourceMap.forEach((resourceName, kinds) -> { final TLongObjectMap kindMap = new TLongObjectHashMap<>(); kinds.forEach(kindName -> { @@ -120,13 +120,7 @@ private void createResources() kinds.forEach(kindName -> { final String oreDictName = kindName + resourceName; if (OreDictionary.doesOreNameExist(oreDictName)) { - final long kind; - if (!Resource.kindExists(kindName)) - if (Config.enableSpecificKindSort) - new SpecificKindItemStackComparator(kind = Resource.registerAndGet(kindName)); - else kind = Resource.registerAndGet(kindName); - else - kind = Resource.getKindOfName(kindName); + final long kind = Resource.registerAndGet(kindName); if (resourceMap.containsKey(resourceName)) childrenOfCustomResource.put(kind, new UniResourceContainer(oreDictName, kind).setSortAndGet(true)); if (!childrenOfCustomResource.isEmpty()) @@ -142,13 +136,13 @@ private void createResources() public void postInit() { updateEverything(); - ResourceHandler resourceHandler = dependencies.get(ResourceHandler.class); Resource customResource; for (String customEntry : Config.customUnifiedResources.keySet()) if ((customResource = resourceMap.get(customEntry)) != null) customResource.updateEntries(); if (Config.keepOneEntry) OreDictionary.rebakeMap(); + final ResourceHandler resourceHandler = dependencies.get(ResourceHandler.class); resourceHandler.populateIndividualStackAttributes(); for (String blackListedResource : Config.resourceBlackList) { resourceMap.remove(blackListedResource); @@ -158,6 +152,14 @@ public void postInit() private void updateEverything() { - apiResourceMap.values().forEach(Resource::updateEntries); + apiResourceMap.values().parallelStream().forEach(Resource::updateEntries); + resourceMap.values().parallelStream().forEach(Resource::updateEntries); + } + + static TLongSet getKindBlackSet() + { + if (kindBlackSet.isEmpty()) + Config.hideInJEIBlackSet.forEach(blackKind -> kindBlackSet.add(Resource.getKindOfName(blackKind))); + return kindBlackSet; } } \ No newline at end of file diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 33a1592..2fa5ef9 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "UniDict", "name": "UniDict", "description": "a mod about unifying all the things.", - "version": "1.2c", + "version": "1.2d", "mcversion": "${mcversion}", "url": "http://minecraft.curseforge.com/projects/unidict", "updateUrl": "",