From 204cb16bc45e7f60a87aac2cdaa49816bb0e7d12 Mon Sep 17 00:00:00 2001 From: cpw Date: Thu, 25 Jun 2015 14:41:45 -0400 Subject: [PATCH 1/5] ObjectHolder works great, but it should be a lot less spammy about failed lookups. They're usually mod options. --- .../main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fml/src/main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java b/fml/src/main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java index c072d3a525..a6e8383037 100644 --- a/fml/src/main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java +++ b/fml/src/main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java @@ -116,7 +116,7 @@ class ObjectHolderRef { if (thing == null) { - FMLLog.warning("Unable to lookup %s for %s. Is there something wrong with the registry?", injectedObject, field); + FMLLog.getLogger().log(Level.DEBUG, "Unable to lookup {} for {}. This means the object wasn't registered. It's likely just mod options.", injectedObject, field); return; } try From 50677ad87a09fa41a6022cd0b2c4bec1095feb61 Mon Sep 17 00:00:00 2001 From: cpw Date: Thu, 9 Jul 2015 16:40:51 -0400 Subject: [PATCH 2/5] Actually rebuild the fluidNames each rebuild, don't just try and force changes in. Should fix #1973 --- src/main/java/net/minecraftforge/fluids/FluidRegistry.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/minecraftforge/fluids/FluidRegistry.java b/src/main/java/net/minecraftforge/fluids/FluidRegistry.java index bc01a98488..beadb22b62 100644 --- a/src/main/java/net/minecraftforge/fluids/FluidRegistry.java +++ b/src/main/java/net/minecraftforge/fluids/FluidRegistry.java @@ -112,7 +112,7 @@ public abstract class FluidRegistry Integer id = localFluidIDs.remove(oldFluid); localFluidIDs.put(fluid, id); } - BiMap localFluidNames = fluidNames; + BiMap localFluidNames = HashBiMap.create(); for (Entry e : localFluidIDs.entrySet()) { localFluidNames.put(e.getValue(), e.getKey().getName()); } From 8636eb18838725162fc1d267d187d7d0a1d3888a Mon Sep 17 00:00:00 2001 From: cpw Date: Thu, 9 Jul 2015 16:53:31 -0400 Subject: [PATCH 3/5] Wake up the FluidRegistry before any mods start loading. Should stop mods claiming to own water or lava (depending on who accessed FluidRegistry first) --- src/main/java/net/minecraftforge/common/MinecraftForge.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/net/minecraftforge/common/MinecraftForge.java b/src/main/java/net/minecraftforge/common/MinecraftForge.java index d820f4c295..4eb72a4eba 100644 --- a/src/main/java/net/minecraftforge/common/MinecraftForge.java +++ b/src/main/java/net/minecraftforge/common/MinecraftForge.java @@ -12,6 +12,7 @@ import cpw.mods.fml.relauncher.Side; import net.minecraft.crash.CrashReport; import net.minecraft.item.ItemStack; import net.minecraftforge.common.ForgeHooks.SeedEntry; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.oredict.OreDictionary; public class MinecraftForge @@ -156,6 +157,8 @@ public class MinecraftForge } UsernameCache.load(); + // Load before all the mods, so MC owns the MC fluids + FluidRegistry.validateFluidRegistry(); } From 0f456b4684a4bafd06f9d615ae8eb5040e56d469 Mon Sep 17 00:00:00 2001 From: cpw Date: Thu, 9 Jul 2015 17:05:20 -0400 Subject: [PATCH 4/5] Be a little bit more helpful when the ObjectHolder misses. Should help figure out what is going in in #2006 --- .../main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fml/src/main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java b/fml/src/main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java index a6e8383037..f69e6d2a2c 100644 --- a/fml/src/main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java +++ b/fml/src/main/java/cpw/mods/fml/common/registry/ObjectHolderRef.java @@ -61,7 +61,7 @@ class ObjectHolderRef { if (this.injectedObject == null || !isValid()) { - throw new IllegalStateException("The ObjectHolder annotation cannot apply to a field that is not an Item or Block"); + throw new IllegalStateException(String.format("The ObjectHolder annotation cannot apply to a field that is not an Item or Block (found : %s at %s.%s)", field.getType().getName(), field.getClass().getName(), field.getName())); } makeWritable(field); } From c308a47124394f025bc2ba553646ecf8b6c31ba2 Mon Sep 17 00:00:00 2001 From: cpw Date: Sat, 18 Jul 2015 12:47:31 -0400 Subject: [PATCH 5/5] Cherry pick some changes from 1.8 for inner class discovery, also fix the negativecache. Closes #1872 --- .../cpw/mods/fml/common/discovery/DirectoryDiscoverer.java | 2 +- .../java/cpw/mods/fml/common/discovery/ITypeDiscoverer.java | 5 +++-- .../java/cpw/mods/fml/common/discovery/ModCandidate.java | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/fml/src/main/java/cpw/mods/fml/common/discovery/DirectoryDiscoverer.java b/fml/src/main/java/cpw/mods/fml/common/discovery/DirectoryDiscoverer.java index 199ec600fd..9aa7218d02 100644 --- a/fml/src/main/java/cpw/mods/fml/common/discovery/DirectoryDiscoverer.java +++ b/fml/src/main/java/cpw/mods/fml/common/discovery/DirectoryDiscoverer.java @@ -38,7 +38,7 @@ public class DirectoryDiscoverer implements ITypeDiscoverer @Override public boolean accept(File file) { - return (file.isFile() && classFile.matcher(file.getName()).find()) || file.isDirectory(); + return (file.isFile() && classFile.matcher(file.getName()).matches()) || file.isDirectory(); } } diff --git a/fml/src/main/java/cpw/mods/fml/common/discovery/ITypeDiscoverer.java b/fml/src/main/java/cpw/mods/fml/common/discovery/ITypeDiscoverer.java index e194469534..efb0b2f53b 100644 --- a/fml/src/main/java/cpw/mods/fml/common/discovery/ITypeDiscoverer.java +++ b/fml/src/main/java/cpw/mods/fml/common/discovery/ITypeDiscoverer.java @@ -5,7 +5,7 @@ * are made available under the terms of the GNU Lesser Public License v2.1 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html - * + * * Contributors: * cpw - implementation */ @@ -19,7 +19,8 @@ import cpw.mods.fml.common.ModContainer; public interface ITypeDiscoverer { - public static Pattern classFile = Pattern.compile("([^\\s$]+).class$"); + // main class part, followed by an optional $ and an "inner class" part. $ cannot be last, otherwise scala breaks + public static Pattern classFile = Pattern.compile("[^\\s\\$]+(\\$[^\\s]+)?\\.class$"); public List discover(ModCandidate candidate, ASMDataTable table); } diff --git a/fml/src/main/java/cpw/mods/fml/common/discovery/ModCandidate.java b/fml/src/main/java/cpw/mods/fml/common/discovery/ModCandidate.java index 7581f67ca5..746185f9f6 100644 --- a/fml/src/main/java/cpw/mods/fml/common/discovery/ModCandidate.java +++ b/fml/src/main/java/cpw/mods/fml/common/discovery/ModCandidate.java @@ -80,7 +80,7 @@ public class ModCandidate public void addClassEntry(String name) { String className = name.substring(0, name.lastIndexOf('.')); // strip the .class - foundClasses.add(className.replace('.', '/')); + foundClasses.add(className); className = className.replace('/','.'); int pkgIdx = className.lastIndexOf('.'); if (pkgIdx > -1)