fix up some discovery code, and make regular runtime _mostly_ work.

Still WIP and doesn't quite get to main screen yet.
This commit is contained in:
cpw 2019-01-01 16:50:04 -05:00
parent 440649bb95
commit e9580877b4
14 changed files with 528 additions and 38 deletions

View File

@ -195,7 +195,7 @@ project(':forge') {
MANIFESTS = [
'/': [
'Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
'GitCommit': grgit.head().getAbbreviatedId(8),
'GitCommit': grgit.head().abbreviatedId,
'Git-Branch': grgit.branch.current().getName()
] as LinkedHashMap,
'net/minecraftforge/versions/forge/': [
@ -221,6 +221,14 @@ project(':forge') {
'Implementation-Title': 'FML Java Mod',
'Implementation-Version': SPEC_VERSION,
'Implementation-Vendor': 'Forge'
] as LinkedHashMap,
'net/minecraftforge/fml/loading/': [
'Specification-Title': 'Launcher',
'Specification-Vendor': 'Forge Development LLC',
'Specification-Version': '1',
'Implementation-Title': 'FML Launcher',
'Implementation-Version': SPEC_VERSION,
'Implementation-Vendor': 'Forge'
] as LinkedHashMap
]
}
@ -449,7 +457,7 @@ project(':forge') {
]
],
arguments: [
game: ['--launchTarget', 'fmlclient']
game: ['--launchTarget', 'fmlclient', '--fml.forgeVersion', "${project.version.substring(MC_VERSION.length() + 1)}", '--fml.mcVersion', "${MC_VERSION}", '--fml.forgeGroup', "${project.group}", '--fml.mcpVersion', "${MCP_VERSION}"]
],
libraries: [
[

View File

@ -36,7 +36,7 @@ import java.util.Objects;
public class DefaultModInfos
{
static {
FileConfig minecraftmod; FileConfig forgemod;
FileConfig minecraftmod;
try
{
final URI jarFileURI = DefaultModInfos.class.getClassLoader().getResource("minecraftmod.toml").toURI();
@ -49,10 +49,9 @@ public class DefaultModInfos
}
catch (IOException | URISyntaxException | NullPointerException e)
{
throw new RuntimeException("Missing toml configs for minecraft and forge!", e);
throw new RuntimeException("Missing toml config for minecraft!", e);
}
minecraftModInfo = new ModInfo(null, minecraftmod);
}
public static final IModInfo minecraftModInfo;

View File

@ -30,7 +30,8 @@ import org.apache.logging.log4j.Logger;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
@ -61,8 +62,19 @@ public class FMLClientLaunchProvider extends FMLCommonLaunchHandler implements I
};
}
@SuppressWarnings("unchecked")
@Override
public void setup(final IEnvironment environment, final Map<String, ?> arguments) {
final List<String> mavenRoots = new ArrayList<>((List<String>) arguments.get("mavenRoots"));
final List<String> mods = new ArrayList<>((List<String>) arguments.get("mods"));
mavenRoots.add(LibraryFinder.findLibsPath().toString());
final String forgeVersion = (String) arguments.get("forgeVersion");
final String mcVersion = (String) arguments.get("mcVersion");
final String forgeGroup = (String) arguments.get("forgeGroup");
mods.add(forgeGroup+":forge::universal:"+mcVersion+"-"+forgeVersion);
// generics are gross yea?
((Map)arguments).put("mavenRoots", mavenRoots);
((Map)arguments).put("mods", mods);
}
@Override

View File

@ -19,18 +19,21 @@
package net.minecraftforge.fml.loading;
import com.google.common.collect.ObjectArrays;
import cpw.mods.modlauncher.api.IEnvironment;
import cpw.mods.modlauncher.api.ITransformingClassLoader;
import net.minecraftforge.api.distmarker.Dist;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Stream;
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
public abstract class FMLCommonLaunchHandler
{
@ -48,12 +51,12 @@ public abstract class FMLCommonLaunchHandler
return cn -> SKIPPACKAGES.stream().noneMatch(cn::startsWith);
}
public Path getForgePath(final String mcVersion, final String forgeVersion) {
return LibraryFinder.getForgeLibraryPath(mcVersion, forgeVersion);
public Path getForgePath(final String mcVersion, final String forgeVersion, final String forgeGroup) {
return LibraryFinder.getForgeLibraryPath(mcVersion, forgeVersion, forgeGroup);
}
public Path[] getMCPaths(final String mcVersion, final String forgeVersion) {
return LibraryFinder.getMCPaths(mcVersion, forgeVersion, getDist().isClient() ? "client" : "server");
public Path[] getMCPaths(final String mcVersion, final String mcpVersion, final String forgeVersion, final String forgeGroup) {
return LibraryFinder.getMCPaths(mcVersion, mcpVersion, forgeVersion, forgeGroup, getDist().isClient() ? "client" : "server");
}
public void setup(final IEnvironment environment, final Map<String, ?> arguments)
@ -67,4 +70,19 @@ public abstract class FMLCommonLaunchHandler
{
FMLLoader.beforeStart(launchClassLoader);
}
protected void validatePaths(final Path forgePath, final Path[] mcPaths, String forgeVersion, String mcVersion, String mcpVersion) {
if (!Files.exists(forgePath)) {
LOGGER.fatal(CORE, "Failed to find forge version {} for MC {} at {}", forgeVersion, mcVersion, forgePath);
throw new RuntimeException("Missing forge!");
}
Stream.of(mcPaths).forEach(p->{
if (!Files.exists(p)) {
LOGGER.fatal(CORE, "Failed to find Minecraft resource version {} at {}", mcVersion+"-"+mcpVersion, p);
throw new RuntimeException("Missing minecraft resource!");
}
});
}
}

View File

@ -53,13 +53,13 @@ public class FMLDevClientLaunchProvider extends FMLCommonLaunchHandler implement
return LibraryFinder.commonLibPaths(new Path[] {FMLLoader.getForgePath()});
}
public Path getForgePath(final String mcVersion, final String forgeVersion) {
public Path getForgePath(final String mcVersion, final String forgeVersion, final String forgeGroup) {
// In forge dev, we just find the path for ForgeVersion for everything
compiledClasses = LibraryFinder.findJarPathFor("net/minecraftforge/versions/forge/ForgeVersion.class", "forge");
return compiledClasses;
}
public Path[] getMCPaths(final String mcVersion, final String forgeVersion) {
public Path[] getMCPaths(final String mcVersion, final String forgeVersion, final String forgeGroup) {
// In forge dev, we just find the path for ForgeVersion for everything
return new Path[] { compiledClasses, compiledClasses };
}
@ -92,4 +92,8 @@ public class FMLDevClientLaunchProvider extends FMLCommonLaunchHandler implement
{
return Dist.CLIENT;
}
@Override
protected void validatePaths(final Path forgePath, final Path[] mcPaths, final String forgeVersion, final String mcVersion, final String mcpVersion) {
}
}

View File

@ -41,6 +41,7 @@ import java.nio.file.Paths;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
import static net.minecraftforge.fml.loading.LogMarkers.SCAN;
@ -60,8 +61,10 @@ public class FMLLoader
private static Path gamePath;
private static Path forgePath;
private static Path[] mcPaths;
static String forgeVersion;
static String mcVersion;
private static String mcpVersion;
static String forgeVersion;
private static String forgeGroup;
private static Predicate<String> classLoaderExclusions;
static void onInitialLoad(IEnvironment environment, Set<String> otherServices) throws IncompatibleEnvironmentException
@ -134,26 +137,19 @@ public class FMLLoader
dist = commonLaunchHandler.getDist();
mcVersion = (String) arguments.get("mcVersion");
mcpVersion = (String) arguments.get("mcpVersion");
forgeVersion = (String) arguments.get("forgeVersion");
forgePath = commonLaunchHandler.getForgePath(mcVersion, forgeVersion);
mcPaths = commonLaunchHandler.getMCPaths(mcVersion, forgeVersion);
forgeGroup = (String) arguments.get("forgeGroup");
if (!Files.exists(forgePath)) {
LOGGER.fatal(CORE, "Failed to find forge version {} for MC {} at {}", forgeVersion, mcVersion, forgePath);
throw new RuntimeException("Missing forge!");
}
if (!Files.exists(mcPaths[0])) {
LOGGER.fatal(CORE, "Failed to find deobfuscated Minecraft version {} at {}", mcVersion, mcPaths[0]);
throw new RuntimeException("Missing deobfuscated minecraft!");
}
if (!Files.exists(mcPaths[1])) {
LOGGER.fatal(CORE, "Failed to find forge patches for Minecraft version {} at {}", mcVersion, mcPaths[1]);
throw new RuntimeException("Missing forge patches!");
}
LOGGER.fatal("Received command line version data : MC Version: '{}' MCP Version: '{}' Forge Version: '{}' Forge group: '{}'", mcVersion, mcpVersion, forgeVersion, forgeGroup);
forgePath = commonLaunchHandler.getForgePath(mcVersion, forgeVersion, forgeGroup);
mcPaths = commonLaunchHandler.getMCPaths(mcVersion, mcpVersion, forgeVersion, forgeGroup);
commonLaunchHandler.validatePaths(forgePath, mcPaths, forgeVersion, mcVersion, mcpVersion);
commonLaunchHandler.setup(environment, arguments);
classLoaderExclusions = commonLaunchHandler.getPackagePredicate();
languageLoadingProvider = new LanguageLoadingProvider();
languageLoadingProvider.addForgeLanguage(forgePath);
runtimeDistCleaner.getExtension().accept(dist);
}
@ -180,6 +176,7 @@ public class FMLLoader
public static void loadAccessTransformer()
{
/*
final URL resource = FMLLoader.class.getClassLoader().getResource("forge_at.cfg");
if (resource == null) {
throw new RuntimeException("Missing forge_at.cfg file");
@ -194,6 +191,7 @@ public class FMLLoader
LOGGER.error("Error loading forge_at.cfg file", e);
throw new RuntimeException(e);
}
*/
}
public static void addAccessTransformer(Path atPath, ModFile modName)

View File

@ -43,11 +43,15 @@ public class FMLServiceProvider implements ITransformationService
private ArgumentAcceptingOptionSpec<String> mavenRootsOption;
private ArgumentAcceptingOptionSpec<String> forgeOption;
private ArgumentAcceptingOptionSpec<String> mcOption;
private ArgumentAcceptingOptionSpec<String> forgeGroupOption;
private ArgumentAcceptingOptionSpec<String> mcpOption;
private List<String> modsArgumentList;
private List<String> modListsArgumentList;
private List<String> mavenRootsArgumentList;
private String targetForgeVersion;
private String targetMcVersion;
private String targetMcpVersion;
private String targetForgeGroup;
@Override
public String name()
@ -67,7 +71,9 @@ public class FMLServiceProvider implements ITransformationService
arguments.put("mods", modsArgumentList);
arguments.put("mavenRoots", mavenRootsArgumentList);
arguments.put("forgeVersion", targetForgeVersion);
arguments.put("forgeGroup", targetForgeGroup);
arguments.put("mcVersion", targetMcVersion);
arguments.put("mcpVersion", targetMcpVersion);
LOGGER.debug(CORE, "Preparing launch handler");
FMLLoader.setupLaunchHandler(environment, arguments);
LOGGER.debug(CORE,"Initiating mod scan");
@ -86,7 +92,9 @@ public class FMLServiceProvider implements ITransformationService
public void arguments(BiFunction<String, String, OptionSpecBuilder> argumentBuilder)
{
forgeOption = argumentBuilder.apply("forgeVersion", "Forge Version number").withRequiredArg().ofType(String.class).required();
forgeGroupOption = argumentBuilder.apply("forgeGroup", "Forge Group (for testing)").withRequiredArg().ofType(String.class).defaultsTo("net.minecraftforge");
mcOption = argumentBuilder.apply("mcVersion", "Minecraft Version number").withRequiredArg().ofType(String.class).required();
mcpOption = argumentBuilder.apply("mcpVersion", "MCP Version number").withRequiredArg().ofType(String.class).required();
modsOption = argumentBuilder.apply("mods", "List of mods to add").withRequiredArg().ofType(String.class).withValuesSeparatedBy(",");
modListsOption = argumentBuilder.apply("modLists", "JSON modlists").withRequiredArg().ofType(String.class).withValuesSeparatedBy(",");
mavenRootsOption = argumentBuilder.apply("mavenRoots", "Maven root directories").withRequiredArg().ofType(String.class).withValuesSeparatedBy(",");
@ -99,7 +107,9 @@ public class FMLServiceProvider implements ITransformationService
modListsArgumentList = option.values(modListsOption);
mavenRootsArgumentList = option.values(mavenRootsOption);
targetForgeVersion = option.value(forgeOption);
targetForgeGroup = option.value(forgeGroupOption);
targetMcVersion = option.value(mcOption);
targetMcpVersion = option.value(mcpOption);
}
@Nonnull

View File

@ -19,6 +19,7 @@
package net.minecraftforge.fml.loading;
import cpw.mods.modlauncher.ServiceLoaderStreamUtils;
import net.minecraftforge.fml.language.IModLanguageProvider;
import net.minecraftforge.fml.loading.moddiscovery.ExplodedDirectoryLocator;
import net.minecraftforge.fml.loading.moddiscovery.ModFile;
@ -28,8 +29,11 @@ import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.artifact.versioning.VersionRange;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -37,11 +41,13 @@ import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Stream;
import static cpw.mods.modlauncher.api.LamdbaExceptionUtils.rethrowFunction;
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
public class LanguageLoadingProvider
{
private static final Logger LOGGER = LogManager.getLogger();
private final LanguageClassLoader languageClassLoader;
private final List<IModLanguageProvider> languageProviders = new ArrayList<>();
private final ServiceLoader<IModLanguageProvider> serviceLoader;
private final Map<String, ModLanguageWrapper> languageProviderMap = new HashMap<>();
@ -52,9 +58,9 @@ public class LanguageLoadingProvider
}
private static class ModLanguageWrapper {
private final IModLanguageProvider modLanguageProvider;
private final ArtifactVersion version;
public ModLanguageWrapper(IModLanguageProvider modLanguageProvider, ArtifactVersion version)
{
this.modLanguageProvider = modLanguageProvider;
@ -70,9 +76,29 @@ public class LanguageLoadingProvider
{
return modLanguageProvider;
}
}
private static class LanguageClassLoader extends URLClassLoader
{
public LanguageClassLoader() {
super(new URL[0]);
}
@Override
public void addURL(final URL url) {
LOGGER.debug(CORE, "Adding {} to languageloader classloader", url);
super.addURL(url);
}
}
LanguageLoadingProvider() {
serviceLoader = ServiceLoader.load(IModLanguageProvider.class);
languageClassLoader = new LanguageClassLoader();
serviceLoader = ServiceLoader.load(IModLanguageProvider.class, languageClassLoader);
loadLanguageProviders();
}
private void loadLanguageProviders() {
LOGGER.debug(CORE, "Found {} language providers", ServiceLoaderStreamUtils.toList(serviceLoader).size());
serviceLoader.forEach(languageProviders::add);
languageProviders.forEach(lp -> {
@ -88,16 +114,35 @@ public class LanguageLoadingProvider
LOGGER.fatal(CORE, "Found unversioned system classpath language provider {}", lp.name());
throw new RuntimeException("Failed to find implementation version for language provider "+ lp.name());
}
LOGGER.debug(CORE, "Found system classpath language provider {}, version {}", lp.name(), impl);
LOGGER.debug(CORE, "Found language provider {}, version {}", lp.name(), impl);
languageProviderMap.put(lp.name(), new ModLanguageWrapper(lp, new DefaultArtifactVersion(impl)));
});
}
void addForgeLanguage(final Path forgePath) {
if (!languageProviderMap.containsKey("javafml")) {
LOGGER.debug(CORE,"Adding forge as a language from {}", forgePath.toString());
addLanguagePaths(Stream.of(forgePath));
serviceLoader.reload();
loadLanguageProviders();
} else {
LOGGER.debug(CORE, "Skipping adding forge jar - javafml is already present");
}
}
private void addLanguagePaths(final Stream<Path> langPaths) {
languageProviders.clear();
languageProviderMap.clear();
langPaths.map(Path::toFile).map(File::toURI).map(rethrowFunction(URI::toURL)).forEach(languageClassLoader::addURL);
}
public void addAdditionalLanguages(List<ModFile> modFiles)
{
if (modFiles==null) return;
Stream<Path> langPaths = modFiles.stream().map(ModFile::getFilePath);
addLanguagePaths(langPaths);
serviceLoader.reload();
loadLanguageProviders();
}
public IModLanguageProvider findLanguage(ModFile mf, String modLoader, VersionRange modLoaderVersion) {

View File

@ -69,8 +69,8 @@ public class LibraryFinder {
return ObjectArrays.concat(extras, realms);
}
static Path getForgeLibraryPath(final String mcVersion, final String forgeVersion) {
Path forgePath = findLibsPath().resolve(MavenCoordinateResolver.get("net.minecraftforge", "forge", "", "", mcVersion+"-"+forgeVersion));
static Path getForgeLibraryPath(final String mcVersion, final String forgeVersion, final String forgeGroup) {
Path forgePath = findLibsPath().resolve(MavenCoordinateResolver.get(forgeGroup, "forge", "", "universal", mcVersion+"-"+forgeVersion));
LOGGER.debug(CORE, "Found forge path {} is {}", forgePath, pathStatus(forgePath));
return forgePath;
}
@ -78,11 +78,16 @@ public class LibraryFinder {
static String pathStatus(final Path path) {
return Files.exists(path) ? "present" : "missing";
}
static Path[] getMCPaths(final String mcVersion, final String forgeVersion, final String type) {
Path srgMcPath = findLibsPath().resolve(MavenCoordinateResolver.get("net.minecraft", type, "", "srg", mcVersion));
Path patchedBinariesPath = findLibsPath().resolve(MavenCoordinateResolver.get("net.minecraftforge", "forge", "", type, mcVersion+"-"+forgeVersion));
static Path[] getMCPaths(final String mcVersion, final String mcpVersion, final String forgeVersion, final String forgeGroup, final String type) {
Path srgMcPath = findLibsPath().resolve(MavenCoordinateResolver.get("net.minecraft", type, "", "srg", mcVersion+"-"+mcpVersion));
Path mcDataPath = findLibsPath().resolve(MavenCoordinateResolver.get("net.minecraft", type, "", "data", mcVersion));
Path mcExtrasPath = findLibsPath().resolve(MavenCoordinateResolver.get("net.minecraft", type, "", "extra", mcVersion));
Path patchedBinariesPath = findLibsPath().resolve(MavenCoordinateResolver.get(forgeGroup, "forge", "", type, mcVersion+"-"+forgeVersion));
LOGGER.info("SRG MC at {} is {}", srgMcPath.toString(), pathStatus(srgMcPath));
LOGGER.info("MC Data at {} is {}", mcDataPath.toString(), pathStatus(mcDataPath));
LOGGER.info("MC Extras at {} is {}", mcExtrasPath.toString(), pathStatus(mcExtrasPath));
LOGGER.info("Forge patches at {} is {}", patchedBinariesPath.toString(), pathStatus(patchedBinariesPath));
return new Path[] { srgMcPath, patchedBinariesPath };
return new Path[] { patchedBinariesPath, mcDataPath, mcExtrasPath, srgMcPath };
}
}

View File

@ -108,6 +108,8 @@ public class ExplodedDirectoryLocator implements IModLocator {
@Override
public void initArguments(final Map<String, ?> arguments) {
final List<Pair<Path, Path>> explodedTargets = ((Map<String, List<Pair<Path, Path>>>) arguments).get("explodedTargets");
rootDirs.addAll(explodedTargets);
if (explodedTargets != null && !explodedTargets.isEmpty()) {
rootDirs.addAll(explodedTargets);
}
}
}

View File

@ -70,6 +70,7 @@ public class LaunchTesting
"--assetsDir", assets,
"--userProperties", "{}",
"--fml.forgeVersion", "24.0.0",
"--fml.mcpVersion", "2018.11.30",
"--fml.mcVersion", "1.13");
} else if (Objects.equals(target, "fmldevserver")) {
String[] launchargs = ObjectArrays.concat(new String[] {"--launchTarget", target,

View File

@ -0,0 +1,388 @@
#Main Forge Access Transformer configuration file
# SoundManager
public net.minecraft.client.audio.SoundManager field_148622_c #sndHandler
# Block
public net.minecraft.block.Block <init>(Lnet/minecraft/block/material/Material;)V
public net.minecraft.block.Block func_149752_b(F)Lnet.minecraft.block.Block; #setResistance
public net.minecraft.block.Block func_149711_c(F)Lnet.minecraft.block.Block; #setHardness
public net.minecraft.block.Block func_149713_g(I)Lnet.minecraft.block.Block; #setLightOpacity
public net.minecraft.block.Block func_149715_a(F)Lnet.minecraft.block.Block; #setLightValue
public net.minecraft.block.Block func_149722_s()Lnet.minecraft.block.Block; #setBlockUnbreakable
public net.minecraft.block.Block func_149675_a(Z)Lnet.minecraft.block.Block; #setTickRandomly
public net.minecraft.block.Block func_180637_b(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;I)V # dropXpOnBlockBreak
# BlockFire
public net.minecraft.block.BlockFire func_176532_c(Lnet/minecraft/block/Block;)I # getFireSpreadSpeed
public net.minecraft.block.BlockFire func_176534_d(Lnet/minecraft/block/Block;)I # getFireSpreadSpeed
# Item
public net.minecraft.item.Item func_77656_e(I)Lnet.minecraft.item.Item; #setMaxDamage
public net.minecraft.item.Item func_77627_a(Z)Lnet.minecraft.item.Item; #setHasSubtypes
public net.minecraft.item.Item field_185051_m # properties
# Fluid
public net.minecraft.fluid.Fluid func_180664_k()Lnet/minecraft/util/BlockRenderLayer; # getRenderLayer
# Entity
public net.minecraft.entity.Entity func_70022_Q()Ljava/lang/String; # getEntityString
# EntityPlayer
public net.minecraft.entity.player.EntityPlayer func_71053_j()V #closeScreen
# EntityTrackerEntry
public net.minecraft.entity.EntityTrackerEntry field_73134_o # trackingPlayers
# Save Location
public net.minecraft.world.chunk.storage.AnvilChunkLoader field_75825_d # chunkSaveLocation
public net.minecraft.world.gen.ChunkProviderServer field_73247_e # currentChunkLoader
# World
public-f net.minecraft.world.World field_72982_D #villageCollectionObj
# Biome
public net.minecraft.world.biome.Biome *() #Everything protected->public
public net.minecraft.world.biome.BiomeForest *()
public net.minecraft.world.biome.BiomeHills *()
public net.minecraft.world.biome.BiomeMesa *()
public net.minecraft.world.biome.BiomePlains *()
public net.minecraft.world.biome.BiomeSavanna *()
public net.minecraft.world.biome.BiomeSnow *()
public net.minecraft.world.biome.BiomeTaiga *()
public net.minecraft.world.biome.Biome$BiomeProperties *()
# Map Gen Biome Lists
public+f net.minecraft.world.gen.structure.MapGenStronghold field_151546_e
# MapGenVillage
public-f net.minecraft.world.gen.structure.MapGenVillage field_75055_e #villageSpawnBiomes
# LayerUtil
public net.minecraft.world.gen.layer.LayerUtil func_202829_a(JLnet/minecraft/world/gen/layer/traits/IAreaTransformer1;Lnet/minecraft/world/gen/area/IAreaFactory;ILjava/util/function/LongFunction;)Lnet/minecraft/world/gen/area/IAreaFactory; # repeat
# ShapedRecipes
public+f net.minecraft.item.crafting.ShapedRecipes field_77574_d #recipeItems
public+f net.minecraft.item.crafting.ShapedRecipes field_77576_b #recipeWidth
public+f net.minecraft.item.crafting.ShapedRecipes field_77577_c #recipeHeight
# ShapelessRecipes
public net.minecraft.item.crafting.ShapelessRecipes field_77579_b #recipeItems
# ContainerRepair
public net.minecraft.inventory.ContainerRepair field_82856_l #ContainerRepair/stackSizeToBeUsedInRepair
# BiomeDecorator
public net.minecraft.world.biome.BiomeDecorator *
# CreativeTabs
public-f net.minecraft.creativetab.CreativeTabs field_78032_a # creativeTabArray non-final
# World stuff
public net.minecraft.world.World field_73003_n #prevRainingStrength
public net.minecraft.world.World field_73004_o #rainingStrength
public net.minecraft.world.World field_73017_q #thunderingStrength
public net.minecraft.world.World field_73018_p #prevThunderingStrength
public net.minecraft.world.World func_72923_a(Lnet/minecraft/entity/Entity;)V #onEntityAdded
public net.minecraft.world.World func_72847_b(Lnet/minecraft/entity/Entity;)V #onEntityRemoved
public net.minecraft.world.WorldServer func_72923_a(Lnet/minecraft/entity/Entity;)V #onEntityAdded
public net.minecraft.world.WorldServer func_72847_b(Lnet/minecraft/entity/Entity;)V #onEntityRemoved
public net.minecraft.client.multiplayer.WorldClient func_72923_a(Lnet/minecraft/entity/Entity;)V #onEntityAdded
public net.minecraft.client.multiplayer.WorldClient func_72847_b(Lnet/minecraft/entity/Entity;)V #onEntityRemoved
public net.minecraft.world.World func_175701_a(Lnet/minecraft/util/math/BlockPos;)Z # isValid
public net.minecraft.world.World func_189509_E(Lnet/minecraft/util/math/BlockPos;)Z # isOutsideBuildHeight
# GuiIngame
protected net.minecraft.client.gui.GuiIngame *
protected net.minecraft.client.gui.GuiIngame func_194798_c(F)V
protected net.minecraft.client.gui.GuiIngame func_194800_d(F)V
protected net.minecraft.client.gui.GuiIngame func_194805_e(F)V
protected net.minecraft.client.gui.GuiIngame func_194808_p()V
protected net.minecraft.client.gui.GuiIngame func_194802_a(Lnet/minecraft/scoreboard/ScoreObjective;)V
# ItemStack
default net.minecraft.item.ItemStack field_77991_e
# MapGenStructureIO
public net.minecraft.world.gen.structure.MapGenStructureIO func_143034_b(Ljava/lang/Class;Ljava/lang/String;)V # registerStart
public net.minecraft.world.gen.structure.MapGenStructureIO func_143031_a(Ljava/lang/Class;Ljava/lang/String;)V # registerPiece
# Stronghold
public net.minecraft.world.gen.structure.StructureStrongholdPieces$Stronghold
# Packets
public net.minecraft.network.play.server.SPacketBlockChange field_148883_d # blockState
# WorldType
public-f net.minecraft.world.WorldType field_77139_a #worldTypes
# DamageSource
public net.minecraft.util.DamageSource *() #All methods public, most are already
# EntityAITasks
public net.minecraft.entity.ai.EntityAITasks field_75782_a # taskEntries
# EntityXPOrb
public net.minecraft.entity.item.EntityXPOrb field_70530_e # xpValue
# Village
public net.minecraft.world.gen.structure.StructureVillagePieces$Village
# RenderPlayer
#public net.minecraft.client.renderer.entity.RenderBiped field_77071_a #modelBipedMain
# ChunkProviderServer
public net.minecraft.world.gen.ChunkProviderServer field_186029_c # chunkGenerator
public net.minecraft.world.gen.ChunkProviderServer field_73244_f # loadedChunkHashMap
#public net.minecraft.world.gen.ChunkProviderServer field_73245_g # loadedChunks
public net.minecraft.world.gen.ChunkProviderServer field_73251_h # worldObj
# RenderEntityItem
protected net.minecraft.client.renderer.entity.RenderEntityItem func_177078_a(Lnet/minecraft/item/ItemStack;)I # getMiniItemCount
public net.minecraft.item.crafting.RecipeTippedArrow
public net.minecraft.item.crafting.ShieldRecipes$Decoration
public net.minecraft.item.crafting.RecipesBanners$RecipeAddPattern
public net.minecraft.item.crafting.RecipesBanners$RecipeDuplicatePattern
public net.minecraft.block.state.BlockStateContainer$StateImplementation
protected net.minecraft.block.state.BlockStateContainer$StateImplementation <init>(Lnet/minecraft/block/Block;Lcom/google/common/collect/ImmutableMap;)V
protected net.minecraft.block.state.BlockStateContainer$StateImplementation field_177238_c # propertyValueTable
# ModelBlock
public net.minecraft.client.renderer.block.model.ModelBlock field_178318_c # textures
public net.minecraft.client.renderer.block.model.ModelBlock field_178315_d # parent
public net.minecraft.client.renderer.block.model.ModelBlock field_178322_i # ambientOcclusion
public net.minecraft.client.renderer.block.model.ModelBlock func_209568_a(Lnet/minecraft/client/renderer/block/model/ModelBlock;Ljava/util/function/Function;Ljava/util/function/Function;)Lnet/minecraft/client/renderer/block/model/ItemOverrideList; # getOverrides
public net.minecraft.client.renderer.block.model.ModelBlock func_187966_f()Ljava/util/List; # getOverrides
# ModelBakery
public net.minecraft.client.renderer.block.model.ModelBakery field_177604_a # MODEL_MISSING
protected net.minecraft.client.renderer.block.model.ModelBakery field_177602_b # LOCATIONS_BUILTIN_TEXTURES
protected net.minecraft.client.renderer.block.model.ModelBakery field_177598_f # resourceManager
protected net.minecraft.client.renderer.block.model.ModelBakery field_177599_g # sprites
protected net.minecraft.client.renderer.block.model.ModelBakery field_177609_j # textureMap
protected net.minecraft.client.renderer.block.model.ModelBakery field_177610_k # blockModelShapes
protected net.minecraft.client.renderer.block.model.ModelBakery field_177605_n # bakedRegistry
protected net.minecraft.client.renderer.block.model.ModelBakery field_177606_o # MODEL_GENERATED
#protected net.minecraft.client.renderer.block.model.ModelBakery field_177618_p # MODEL_COMPASS
#protected net.minecraft.client.renderer.block.model.ModelBakery field_177617_q # MODEL_CLOCK
protected net.minecraft.client.renderer.block.model.ModelBakery field_177616_r # MODEL_ENTITY
#protected net.minecraft.client.renderer.block.model.ModelBakery func_177591_a(Ljava/util/Collection;)V # loadVariants
protected net.minecraft.client.renderer.block.model.ModelBakery func_177569_a(Lnet/minecraft/client/renderer/block/model/ModelBlockDefinition;Lnet/minecraft/client/renderer/block/model/ModelResourceLocation;)V # registerVariant
protected net.minecraft.client.renderer.block.model.ModelBakery func_177586_a(Lnet/minecraft/util/ResourceLocation;)Lnet/minecraft/client/renderer/block/model/ModelBlockDefinition; # getModelBlockDefinition
protected net.minecraft.client.renderer.block.model.ModelBakery func_177594_c(Lnet/minecraft/util/ResourceLocation;)Lnet/minecraft/client/renderer/block/model/ModelBlock; # loadModel
protected net.minecraft.client.renderer.block.model.ModelBakery func_177592_e()V # registerVariantNames
protected net.minecraft.client.renderer.block.model.ModelBakery func_177596_a(Lnet/minecraft/item/Item;)Ljava/util/List; # getVariantNames
protected net.minecraft.client.renderer.block.model.ModelBakery func_177583_a(Ljava/lang/String;)Lnet/minecraft/util/ResourceLocation; # getItemLocation
protected net.minecraft.client.renderer.block.model.ModelBakery func_177585_a(Lnet/minecraft/client/renderer/block/model/ModelBlock;)Ljava/util/Set; # getTextureLocations
protected net.minecraft.client.renderer.block.model.ModelBakery func_177581_b(Lnet/minecraft/client/renderer/block/model/ModelBlock;)Z # hasItemModel
protected net.minecraft.client.renderer.block.model.ModelBakery func_177587_c(Lnet/minecraft/client/renderer/block/model/ModelBlock;)Z # isCustomRenderer
protected net.minecraft.client.renderer.block.model.ModelBakery func_177582_d(Lnet/minecraft/client/renderer/block/model/ModelBlock;)Lnet/minecraft/client/renderer/block/model/ModelBlock; # makeItemModel
protected net.minecraft.client.renderer.block.model.ModelBakery func_177580_d(Lnet/minecraft/util/ResourceLocation;)Lnet/minecraft/util/ResourceLocation; # getModelLocation
protected net.minecraft.client.renderer.block.model.ModelBakery func_188640_b()V # loadBlocks
protected net.minecraft.client.renderer.block.model.ModelBakery func_177577_b()V # loadVariantItemModels
protected net.minecraft.client.renderer.block.model.ModelBakery func_177590_d()V # loadItemModels
protected net.minecraft.client.renderer.block.model.ModelBakery func_177595_c()V # loadVariantModels
protected net.minecraft.client.renderer.block.model.ModelBakery func_188637_e()V # loadMultipartVariantModels
protected net.minecraft.client.renderer.block.model.ModelBakery func_188638_a(Lnet/minecraft/client/renderer/block/model/ModelResourceLocation;Lnet/minecraft/client/renderer/block/model/VariantList;)V # loadVariantList
#public net.minecraft.client.renderer.block.model.WeightedBakedModel field_177565_b # models
# ItemModelMesher
# This field is public and uses int IDs, so we hide it and expose ItemModelMesherForge methods instead
private net.minecraft.client.renderer.ItemModelMesher field_199313_a
# ItemOverrideList
protected net.minecraft.client.renderer.block.model.ItemOverrideList <init>()V
# EnumFacing
public net.minecraft.util.EnumFacing field_82609_l # VALUES
public net.minecraft.util.EnumFacing field_176754_o # HORIZONTALS
public net.minecraft.client.renderer.BufferBuilder func_78909_a(I)I # getColorIndex
public net.minecraft.client.renderer.BufferBuilder func_178972_a(IIII)V # putColorRGB -- Add A?
# ModelBlock Constructor
#public net.minecraft.client.renderer.block.model.ModelBlock <init>(Lnet/minecraft/util/ResourceLocation;Ljava/util/List;Ljava/util/Map;ZZLnet/minecraft/client/renderer/block/model/ItemCameraTransforms;)V
# RenderLivingEntity
#public net.minecraft.client.renderer.entity.RenderLivingBase func_177094_a(Lnet/minecraft/client/renderer/entity/layers/LayerRenderer;)Z # addLayer
# S00PacketServerInfo
public net.minecraft.network.status.server.SPacketServerInfo field_149297_a # GSON
# Resource Packs
public net.minecraft.resources.FallbackResourceManager field_199023_a # resourcePacks
public net.minecraft.resources.AbstractResourcePack field_195771_a # file
#Main FML Access Transformer configuration file
# EntityList addMappings
#public net.minecraft.entity.EntityList func_75618_a(Ljava/lang/Class;Ljava/lang/String;I)V
#public net.minecraft.entity.EntityList func_75614_a(Ljava/lang/Class;Ljava/lang/String;III)V
#public net.minecraft.entity.EntityList field_75625_b #nameToClassMap
#public net.minecraft.entity.EntityList field_75626_c #classToNameMap
#public net.minecraft.entity.EntityList field_75623_d #idToClassMap
## RenderManager
public net.minecraft.client.renderer.entity.RenderManager field_78729_o #renderers
## TileEntityRendererDispatcher
public net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher field_147559_m
public net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher field_147557_n # fontRenderer - needed for rendering text in TESR items before entering world
## EntityRenderer
public net.minecraft.client.renderer.EntityRenderer func_175069_a(Lnet/minecraft/util/ResourceLocation;)V #loadShader
## WeightedRandomItem
public net.minecraft.util.WeightedRandom$Item field_76292_a #probability
# EntityPlayer
public net.minecraft.entity.player.EntityPlayer func_184816_a(Lnet/minecraft/entity/item/EntityItem;)Lnet/minecraft/item/ItemStack; # dropItemAndGetStack
protected net.minecraft.entity.player.EntityPlayer field_71077_c # spawnPos
protected net.minecraft.entity.player.EntityPlayer field_82248_d # spawnForced
# EntityPlayerSP
public net.minecraft.client.entity.EntityPlayerSP func_184816_a(Lnet/minecraft/entity/item/EntityItem;)Lnet/minecraft/item/ItemStack; # dropItemAndGetStack
## EntityPlayerMP getNextWindowId
public net.minecraft.entity.player.EntityPlayerMP func_71117_bO()V
public net.minecraft.entity.player.EntityPlayerMP field_71139_cq
## EntityAITaskEntry
public net.minecraft.entity.ai.EntityAITasks$EntityAITaskEntry
## EntityLiving
public net.minecraft.entity.EntityLiving field_70714_bg #tasks
public net.minecraft.entity.EntityLiving field_70715_bh #targetTasks
## EntityMinecartContainer
public net.minecraft.entity.item.EntityMinecartContainer field_94112_b #dropContentsWhenDead
# GuiScreen
public net.minecraft.client.gui.GuiScreen field_146297_k # minecraft instance - public because gui's outside access it
# Minecraft
public net.minecraft.client.Minecraft field_71446_o # textureManager
public net.minecraft.client.Minecraft field_110450_ap # mcDefaultResourcePack
public net.minecraft.client.Minecraft func_71370_a(II)V # resize
public net.minecraft.client.Minecraft func_180510_a(Lnet/minecraft/client/renderer/texture/TextureManager;)V # drawSplashScreen
public net.minecraft.client.Minecraft func_184119_a(Lnet/minecraft/item/ItemStack;Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/item/ItemStack; # storeTEInStack
# MinecraftServer
protected net.minecraft.server.MinecraftServer field_211151_aa # serverTime
## DedicatedServer
public net.minecraft.server.dedicated.DedicatedServer field_71341_l # pendingCommandList
## SaveFormatOld
public net.minecraft.world.storage.SaveFormatOld field_75808_a # savesDirectory
protected net.minecraft.util.ObjectIntIdentityMap field_148749_a # internal map
protected net.minecraft.util.ObjectIntIdentityMap field_148748_b # internal index list
#protected-f net.minecraft.util.RegistryNamespaced field_148759_a # identitymap
# GuiButton
public net.minecraft.client.gui.GuiButton field_146120_f # width - needed for config GUI stuff
public net.minecraft.client.gui.GuiButton field_146121_g # height - needed for config GUI stuff
# GuiTextField
public-f net.minecraft.client.gui.GuiTextField field_146218_h # width - needed for config GUI stuff
public-f net.minecraft.client.gui.GuiTextField field_146219_i # height - needed for config GUI stuff
# GuiSlot
public net.minecraft.client.gui.GuiSlot field_148149_f # slotHeight - needed for config GUI stuff
public net.minecraft.client.gui.GuiSlot field_148151_d # right - needed for config GUI stuff
public net.minecraft.client.gui.GuiSlot field_148152_e # left - needed for config GUI stuff
public net.minecraft.client.gui.GuiSlot field_148153_b # top - needed for config GUI stuff
public net.minecraft.client.gui.GuiSlot field_148154_c # bottom - needed for config GUI stuff
public net.minecraft.client.gui.GuiSlot field_148155_a # width - needed for config GUI stuff
public net.minecraft.client.gui.GuiSlot field_148158_l # height - needed for config GUI stuff
public net.minecraft.client.gui.GuiSlot field_148160_j # headerPadding - needed for config GUI stuff
# Villager Traid Classes
public net.minecraft.entity.passive.EntityVillager$EmeraldForItems
public net.minecraft.entity.passive.EntityVillager$ITradeList
public net.minecraft.entity.passive.EntityVillager$ItemAndEmeraldToItem
public net.minecraft.entity.passive.EntityVillager$ListEnchantedBookForEmeralds
public net.minecraft.entity.passive.EntityVillager$ListEnchantedItemForEmeralds
public net.minecraft.entity.passive.EntityVillager$ListItemForEmeralds
public net.minecraft.entity.passive.EntityVillager$PriceInfo
# Font renderer
protected net.minecraft.client.gui.FontRenderer field_78286_d # charWidth
protected net.minecraft.client.gui.FontRenderer field_78287_e # glyphWidth
protected net.minecraft.client.gui.FontRenderer field_111273_g # locationFontTexture
protected net.minecraft.client.gui.FontRenderer field_78295_j # posX
protected net.minecraft.client.gui.FontRenderer field_78296_k # posY
protected net.minecraft.client.gui.FontRenderer func_78266_a(IZ)F # renderDefaultChar
protected net.minecraft.client.gui.FontRenderer func_78277_a(CZ)F # renderUnicodeChar
# ChunkGeneratorEnd
private-f net.minecraft.world.gen.ChunkGeneratorEnd field_185969_i #lperlin1
private-f net.minecraft.world.gen.ChunkGeneratorEnd field_185970_j #lperlin2
private-f net.minecraft.world.gen.ChunkGeneratorEnd field_185971_k #perlin
private-f net.minecraft.world.gen.ChunkGeneratorEnd field_185973_o #island
private-f net.minecraft.world.gen.ChunkGeneratorEnd field_185972_n #endCityGen
# ChunkGeneratorOverworld
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_185991_j #lperlin1
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_185992_k #lperlin2
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_185993_l #perlin
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_185994_m #surface
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_185979_A #ravineGenerator
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_185980_B #oceanMonumentGenerator
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_186003_v #caveGenerator
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_186004_w #strongholdGenerator
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_186005_x #villageGenerator
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_186006_y #mineshaftGenerator
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_186007_z #scatteredFeatureGenerator
private-f net.minecraft.world.gen.ChunkGeneratorOverworld field_191060_C #woodlandMansionGenerator
# ChunkGeneratorHell
private-f net.minecraft.world.gen.ChunkGeneratorHell field_185957_u #lperlin1
private-f net.minecraft.world.gen.ChunkGeneratorHell field_185958_v #lperlin2
private-f net.minecraft.world.gen.ChunkGeneratorHell field_185959_w #perlin
private-f net.minecraft.world.gen.ChunkGeneratorHell field_73177_m #perlin2
private-f net.minecraft.world.gen.ChunkGeneratorHell field_73174_n #perlin3
public-f net.minecraft.world.gen.ChunkGeneratorHell field_185946_g #scale
public-f net.minecraft.world.gen.ChunkGeneratorHell field_185947_h #depth
private-f net.minecraft.world.gen.ChunkGeneratorHell field_185939_I #netherCaveGenerator
private-f net.minecraft.world.gen.ChunkGeneratorHell field_73172_c #netherBridgeGenerator
# PlayerManager
private-f net.minecraft.server.management.PlayerChunkMapEntry field_187285_e # field_187285_e
# RenderLivingBase
public net.minecraft.client.renderer.entity.RenderLivingBase func_177094_a(Lnet/minecraft/client/renderer/entity/layers/LayerRenderer;)Z # addLayer
#public net.minecraft.client.renderer.entity.RenderLivingBase func_177089_b(Lnet/minecraft/client/renderer/entity/layers/LayerRenderer;)Z # removeLayer
# LootTable Stuff
private-f net.minecraft.world.storage.loot.LootPool field_186455_c # rolls
private-f net.minecraft.world.storage.loot.LootPool field_186456_d # bonusRolls
#NBTPrimitive
public net.minecraft.nbt.NBTPrimitive
#GuiOverlayDebug
public net.minecraft.client.gui.GuiOverlayDebug func_181554_e()V # renderLagometer
protected net.minecraft.client.gui.GuiOverlayDebug field_211537_g # rayTraceBlock
protected net.minecraft.client.gui.GuiOverlayDebug field_211538_h # rayTraceFluid
# Expose vanilla brewing recipe system
public net.minecraft.potion.PotionHelper$MixPredicate
public net.minecraft.potion.PotionHelper func_193355_a(Lnet/minecraft/item/ItemPotion;Lnet/minecraft/item/Item;Lnet/minecraft/item/ItemPotion;)V # registerPotionItemConversion
public net.minecraft.potion.PotionHelper func_193354_a(Lnet/minecraft/item/ItemPotion;)V # registerPotionItem
public net.minecraft.potion.PotionHelper func_193357_a(Lnet/minecraft/potion/PotionType;Lnet/minecraft/item/Item;Lnet/minecraft/potion/PotionType;)V # registerPotionTypeConversion
public net.minecraft.potion.PotionHelper func_193356_a(Lnet/minecraft/potion/PotionType;Lnet/minecraft/item/crafting/Ingredient;Lnet/minecraft/potion/PotionType;)V # registerPotionTypeConversion
# TileEntity
public net.minecraft.tileentity.TileEntity func_190560_a(Ljava/lang/String;Ljava/lang/Class;)V # register
# TileEntityHopper
public net.minecraft.tileentity.TileEntityHopper func_174914_o()Z # mayTransfer
public net.minecraft.tileentity.TileEntityHopper func_145896_c(I)V # setTransferCooldown
protected net.minecraft.tileentity.TileEntityHopper func_145887_i()Z # updateHopper
# DataFixer
public net.minecraft.util.datafix.DataFixer field_188262_d # version
# AbstractSkeleton
protected net.minecraft.entity.monster.AbstractSkeleton func_190727_o()Lnet/minecraft/util/SoundEvent; # getStepSound - make AbstractSkeleton implementable
# EntityWitherSkeleton
protected net.minecraft.entity.monster.EntityWitherSkeleton func_190727_o()Lnet/minecraft/util/SoundEvent; # getStepSound - make AbstractSkeleton implementable
# EntityStray
protected net.minecraft.entity.monster.EntityStray func_190727_o()Lnet/minecraft/util/SoundEvent; # getStepSound - make AbstractSkeleton implementable
# EntitySkeleton
protected net.minecraft.entity.monster.EntitySkeleton func_190727_o()Lnet/minecraft/util/SoundEvent; # getStepSound - make AbstractSkeleton implementable
# EntitySelector
public net.minecraft.command.EntitySelector func_190826_c(Ljava/lang/String;)Ljava/lang/String; # addArgument
# Teleporter
protected net.minecraft.world.Teleporter field_85192_a # world
protected net.minecraft.world.Teleporter field_77187_a # random
protected net.minecraft.world.Teleporter field_85191_c # destinationCoordinateCache
public net.minecraft.util.ResourceLocation func_177516_a(Ljava/lang/String;)[Ljava/lang/String; # splitObjectName
# Ingredient
public-f net.minecraft.item.crafting.Ingredient
protected net.minecraft.item.crafting.Ingredient <init>(Ljava/util/stream/Stream;)V
public net.minecraft.item.crafting.Ingredient func_209357_a(Ljava/util/stream/Stream;)Lnet/minecraft/item/crafting/Ingredient;
public+f net.minecraft.item.crafting.Ingredient func_199564_a(Lnet/minecraft/network/PacketBuffer;)V
public net.minecraft.item.crafting.Ingredient$IItemList
public net.minecraft.item.crafting.Ingredient$SingleItemList
public net.minecraft.item.crafting.Ingredient$SingleItemList <init>(Lnet/minecraft/item/ItemStack;)V
public net.minecraft.item.crafting.Ingredient$TagList
public net.minecraft.item.crafting.Ingredient$TagList <init>(Lnet/minecraft/tags/Tag;)V
# Crafting
public net.minecraft.client.Minecraft func_193986_ar()V # populateSearchTreeManager
# Advancements
public net.minecraft.advancements.AdvancementManager func_195439_b(Lnet/minecraft/resources/IResourceManager;)Ljava/util/Map; # loadCustomAdvancements
public net.minecraft.advancements.CriteriaTriggers func_192118_a(Lnet/minecraft/advancements/ICriterionTrigger;)Lnet/minecraft/advancements/ICriterionTrigger; # register
# BiomeProvider
public net.minecraft.world.biome.provider.BiomeProvider field_201540_a # BIOMES_TO_SPAWN_IN
# BlockTags.Wrapper
public net.minecraft.tags.BlockTags$Wrapper
#SaveHandler
public net.minecraft.world.storage.SaveHandler field_75771_c # playersDirectory
#BlockItemUseContext
public net.minecraft.item.BlockItemUseContext <init>(Lnet/minecraft/world/World;Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/item/ItemStack;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/EnumFacing;FFF)V
#EntitySpawnPlacementRegistry
public net.minecraft.entity.EntitySpawnPlacementRegistry func_209346_a(Lnet/minecraft/entity/EntityType;Lnet/minecraft/entity/EntitySpawnPlacementRegistry$SpawnPlacementType;Lnet/minecraft/world/gen/Heightmap$Type;Lnet/minecraft/tags/Tag;)V # register