Skip to content

Commit

Permalink
1.12.2-1.2: Fixed Issue #42
Browse files Browse the repository at this point in the history
  • Loading branch information
WanionCane committed Nov 5, 2017
1 parent 2a61f39 commit 608c0bf
Show file tree
Hide file tree
Showing 10 changed files with 161 additions and 10 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ apply plugin: 'net.minecraftforge.gradle.forge'
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.


version = "1.12.2-1.1b"
version = "1.12.2-1.2"
group = "wanion.unidict" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "UniDict"

Expand Down
Binary file removed libs/WanionLib-1.12.2-1.1-dev.jar
Binary file not shown.
12 changes: 11 additions & 1 deletion src/main/java/wanion/unidict/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import gnu.trove.map.TObjectIntMap;
import gnu.trove.map.hash.THashMap;
import gnu.trove.map.hash.TObjectIntHashMap;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.config.Configuration;
import wanion.unidict.common.Reference;

Expand Down Expand Up @@ -47,8 +48,10 @@ public final class Config implements UniDict.IDependency
public final Set<String> metalsToUnify;
public final Set<String> childrenOfMetals;
public final List<String> resourceBlackList;
public final Set<ResourceLocation> recipesToIgnore;
public final Map<String, Set<String>> customUnifiedResources;
// userRegisteredOreDictEntries
// userEntries
public final List<String> userRemovedOreDictEntries;
public final List<String> userRegisteredOreDictEntries;
// modules
public final boolean integrationModule;
Expand Down Expand Up @@ -91,8 +94,15 @@ private Config()
metalsToUnify = Collections.unmodifiableSet(Sets.newLinkedHashSet(Arrays.asList(config.getStringList("metalsToUnify", resources, new String[]{"Iron", "Gold", "Copper", "Tin", "Silver", "Lead", "Nickel", "Platinum", "Zinc", "Aluminium", "Aluminum", "Alumina", "Chromium", "Chrome", "Uranium", "Iridium", "Osmium", "Bronze", "Steel", "Brass", "Invar", "Electrum", "Cupronickel", "Constantan"}, "list of things to do unifying things.\n"))));
childrenOfMetals = Collections.unmodifiableSet(Sets.newLinkedHashSet(Arrays.asList(config.getStringList("childrenOfMetals", resources, new String[]{"ore", "dustTiny", "dustSmall", "chunk", "dust", "nugget", "ingot", "block", "plate", "gear", "rod"}, "what kind of child do you want to make a standard?\n"))));
resourceBlackList = Arrays.asList(config.getStringList("resourceBlackList", resources, new String[]{"Aluminum", "Alumina", "Chrome", "Constantan"}, "resources to be black-listed.\nthis exists to avoid duplicates.\nthis affect the API."));
recipesToIgnore = new HashSet<>();
for (final String recipeToIgnore : config.getStringList("recipeToIgnoreList", resources, new String[]{"minecraft:iron_nugget", "minecraft:iron_block", "minecraft:iron_ingot_from_block", "minecraft:iron_ingot_from_nuggets", "minecraft:gold_nugget", "minecraft:gold_ingot_from_block", "minecraft:gold_ingot_from_nuggets", "minecraft:gold_block"}, "add here recipes (names) that you don't want the Crafting Integration to mess with.")) {
final int separator = recipeToIgnore.indexOf(':');
if (separator > 0)
recipesToIgnore.add(new ResourceLocation(recipeToIgnore.substring(0, separator), recipeToIgnore.substring(separator + 1, recipeToIgnore.length())));
}
customUnifiedResources = Collections.unmodifiableMap(getCustomUnifiedResourcesMap());
// userRegisteredOreDictEntries
userRemovedOreDictEntries = Arrays.asList(config.getStringList("userRemovedOreDictEntries", general, new String[]{}, "This allows to the user remove entries before the Unification happen.\nthis is mainly useful to avoid trying to unify certain things.\n\nFormat:\nironIngot-minecraft:iron_ingot#0\nThe example above will remove Iron Ingot from ironIngot."));
userRegisteredOreDictEntries = Arrays.asList(config.getStringList("userRegisteredOreDictEntries", general, new String[]{}, "This allows to the user register their own ore entries before the Unification happen.\nthis is mainly useful when the user is trying to unify things that aren't registered previously in the Ore Dictionary.\n\nFormat:\nweirdStone+minecraft:stone#1\nThe example above will register Granite as weirdStone."));
// modules
integrationModule = config.getBoolean("integration", "modules", true, "Integration Module.\nif false all the Integrations will be disabled.\n");
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/wanion/unidict/UniDict.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*/

import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.discovery.ASMDataTable;
import net.minecraftforge.fml.common.event.*;
import net.minecraftforge.fml.common.network.NetworkCheckHandler;
Expand All @@ -21,6 +22,7 @@
import wanion.unidict.common.SpecificEntryItemStackComparator;
import wanion.unidict.common.SpecificKindItemStackComparator;
import wanion.unidict.integration.IntegrationModule;
import wanion.unidict.proxy.CommonProxy;
import wanion.unidict.resource.ResourceHandler;
import wanion.unidict.resource.UniResourceHandler;

Expand Down Expand Up @@ -75,6 +77,14 @@ public static UniDictAPI getAPI()
return dependencies.get(UniDictAPI.class);
}

public static ModuleHandler getModuleHandler()
{
return instance.moduleHandler;
}

@SidedProxy(clientSide = CLIENT_PROXY, serverSide = SERVER_PROXY)
public static CommonProxy proxy;

@Mod.EventHandler
public void preInit(final FMLPreInitializationEvent event)
{
Expand All @@ -93,6 +103,12 @@ public void postInit(final FMLPostInitializationEvent event)
{
uniResourceHandler.postInit();
moduleHandler.startModules(event);
proxy.postInit();
clean();
}

private void clean()
{
uniResourceHandler = null;
moduleHandler = null;
dependencies = null;
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/wanion/unidict/common/Reference.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ public final class Reference
{
public static final String MOD_ID = "unidict";
public static final String MOD_NAME = "UniDict";
public static final String MOD_VERSION = "1.12.2-1.1b";
public static final String DEPENDENCIES = "required-after:wanionlib@[1.12.2-1.1,);after:*";
public static final String MOD_VERSION = "1.12.2-1.2";
public static final String DEPENDENCIES = "required-after:wanionlib@[1.12.2-1.2,);after:*";
public static final char SLASH = separatorChar;
public static final String MC_VERSION = "[1.12,]";
public static final String CLIENT_PROXY = "wanion.unidict.proxy.ClientProxy";
public static final String SERVER_PROXY = "wanion.unidict.proxy.CommonProxy";

private Reference() {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import java.lang.reflect.Method;
import java.util.*;

final class CraftingIntegration extends AbstractIntegrationThread
public final class CraftingIntegration extends AbstractIntegrationThread
{
private final Set<Map.Entry<ResourceLocation, IRecipe>> recipes = RegistryManager.ACTIVE.<IRecipe>getRegistry(GameData.RECIPES).getEntries();
private final Map<Class<? extends IRecipe>, IRecipeResearcher<? extends IRecipe, ? extends IRecipe>> shapedResearcherMap = new IdentityHashMap<>();
Expand Down Expand Up @@ -76,7 +76,6 @@ public String call()
reCreateTheRecipes();
} catch (Exception e) {
UniDict.getLogger().error(threadName + e);
e.printStackTrace();
}
return threadName + "Why so many recipes? I had to deal with " + totalRecipesReCreated + " recipes.";
}
Expand All @@ -88,7 +87,7 @@ private void doTheResearch()
for (final Map.Entry<ResourceLocation, IRecipe> entry : recipes) {
final IRecipe recipe = entry.getValue();
boolean isShapeless = false;
if ((recipe == null || recipe.getRecipeOutput() == ItemStack.EMPTY || (bufferContainer = resourceHandler.getContainer(entry.getValue().getRecipeOutput())) == null || !(shapedResearcherMap.containsKey(recipe.getClass()) || (isShapeless = shapelessResearcherMap.containsKey(recipe.getClass())))))
if (config.recipesToIgnore.contains(entry.getKey()) || (recipe == null || recipe.getRecipeOutput() == ItemStack.EMPTY || (bufferContainer = resourceHandler.getContainer(entry.getValue().getRecipeOutput())) == null || !(shapedResearcherMap.containsKey(recipe.getClass()) || (isShapeless = shapelessResearcherMap.containsKey(recipe.getClass())))))
continue;
try {
final int recipeKey;
Expand Down
85 changes: 85 additions & 0 deletions src/main/java/wanion/unidict/proxy/ClientProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package wanion.unidict.proxy;

/*
* Created by WanionCane(https://github.com/WanionCane).
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import net.minecraft.client.gui.recipebook.RecipeList;
import net.minecraft.client.util.RecipeBookClient;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
import wanion.lib.common.Util;
import wanion.lib.module.AbstractModule;
import wanion.unidict.UniDict;
import wanion.unidict.integration.CraftingIntegration;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ClientProxy extends CommonProxy
{
private final Map<CreativeTabs, List<RecipeList>> RECIPES_BY_TAB = Util.getField(RecipeBookClient.class, "RECIPES_BY_TAB", "field_194086_e", null, Map.class);
private final List<RecipeList> ALL_RECIPES = Util.getField(RecipeBookClient.class, "ALL_RECIPES", "field_194087_f", null, List.class);

@Override
public void postInit()
{
final AbstractModule integrationModule = UniDict.getModuleHandler().getModule("Integration");
if (integrationModule == null || !integrationModule.getManager().containsInstance(CraftingIntegration.class))
return;

RECIPES_BY_TAB.clear();
ALL_RECIPES.clear();

final Table<CreativeTabs, String, RecipeList> table = HashBasedTable.create();

for (IRecipe irecipe : CraftingManager.REGISTRY) {
if (!irecipe.isDynamic()) {
CreativeTabs creativetabs = getItemStackTab(irecipe.getRecipeOutput());
String s = irecipe.getGroup();
RecipeList recipelist1;

if (s.isEmpty()) {
recipelist1 = newRecipeList(creativetabs);
} else {
recipelist1 = table.get(creativetabs, s);

if (recipelist1 == null) {
recipelist1 = newRecipeList(creativetabs);
table.put(creativetabs, s, recipelist1);
}
}

recipelist1.add(irecipe);
}
}
}

private RecipeList newRecipeList(CreativeTabs creativeTabs)
{
final RecipeList recipelist = new RecipeList();
ALL_RECIPES.add(recipelist);
(RECIPES_BY_TAB.computeIfAbsent(creativeTabs, (p_194085_0_) -> new ArrayList<>())).add(recipelist);
(RECIPES_BY_TAB.computeIfAbsent(CreativeTabs.SEARCH, (p_194083_0_) -> new ArrayList<>())).add(recipelist);
return recipelist;
}

private CreativeTabs getItemStackTab(ItemStack itemStack)
{
CreativeTabs creativetabs = itemStack.getItem().getCreativeTab();
if (creativetabs != CreativeTabs.BUILDING_BLOCKS && creativetabs != CreativeTabs.TOOLS && creativetabs != CreativeTabs.REDSTONE) {
return creativetabs == CreativeTabs.COMBAT ? CreativeTabs.TOOLS : CreativeTabs.MISC;
} else {
return creativetabs;
}
}
}
14 changes: 14 additions & 0 deletions src/main/java/wanion/unidict/proxy/CommonProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package wanion.unidict.proxy;

/*
* Created by WanionCane(https://github.com/WanionCane).
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

public class CommonProxy
{
public void postInit() {}
}
29 changes: 27 additions & 2 deletions src/main/java/wanion/unidict/resource/UniResourceHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import net.minecraftforge.oredict.OreDictionary;
import org.apache.commons.lang3.text.WordUtils;
import wanion.lib.common.Dependencies;
import wanion.lib.common.MetaItem;
import wanion.unidict.Config;
import wanion.unidict.UniDict;
import wanion.unidict.UniOreDictionary;
Expand Down Expand Up @@ -92,11 +91,38 @@ static Set<String> getEntryJEIBlackSet()

public void init()
{
removeEntries();
registerCustomEntries();
gatherResources();
createAdditionalFiles();
}

private void removeEntries()
{
config.userRemovedOreDictEntries.forEach(customEntries -> {
final int plusSeparator = customEntries.indexOf('-');
if (plusSeparator != -1 && plusSeparator > 0) {
final String oreName = customEntries.substring(0, plusSeparator);
final List<ItemStack> oreList = UniOreDictionary.get(oreName);
if (oreList == null)
UniDict.getLogger().warn("UniDict couldn't find the entry: " + oreName);
else {
final String itemName = customEntries.substring(plusSeparator + 1, customEntries.length());
final int separatorChar = itemName.indexOf('#');
final Item item = Item.REGISTRY.getObject(new ResourceLocation(separatorChar == -1 ? itemName : itemName.substring(0, separatorChar)));
if (item != null) {
final int metaData = separatorChar == -1 ? 0 : Integer.parseInt(itemName.substring(separatorChar + 1, itemName.length()));
final ItemStack itemStack = new ItemStack(item, 1, metaData);
boolean found = false;
for (final Iterator<ItemStack> itemStackIterator = oreList.iterator(); !found && itemStackIterator.hasNext(); )
if (found = itemStack.isItemEqual(itemStackIterator.next()))
itemStackIterator.remove();
}
}
}
});
}

private void registerCustomEntries()
{
config.userRegisteredOreDictEntries.forEach(customEntries -> {
Expand All @@ -117,7 +143,6 @@ private void registerCustomEntries()
});
}


private void gatherResources()
{
final List<String> allTheResourceNames = Collections.synchronizedList(new ArrayList<>());
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/mcmod.info
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"modId": "unidict",
"name": "UniDict",
"description": "a mod about unifying all the things.",
"version": "1.12.2-1.1b",
"version": "1.12.2-1.2",
"mcversion": "${mcversion}",
"url": "http://minecraft.curseforge.com/projects/unidict",
"updateUrl": "",
Expand Down

0 comments on commit 608c0bf

Please sign in to comment.