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:
parent
440649bb95
commit
e9580877b4
14 changed files with 528 additions and 38 deletions
12
build.gradle
12
build.gradle
|
@ -195,7 +195,7 @@ project(':forge') {
|
||||||
MANIFESTS = [
|
MANIFESTS = [
|
||||||
'/': [
|
'/': [
|
||||||
'Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
|
'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()
|
'Git-Branch': grgit.branch.current().getName()
|
||||||
] as LinkedHashMap,
|
] as LinkedHashMap,
|
||||||
'net/minecraftforge/versions/forge/': [
|
'net/minecraftforge/versions/forge/': [
|
||||||
|
@ -221,6 +221,14 @@ project(':forge') {
|
||||||
'Implementation-Title': 'FML Java Mod',
|
'Implementation-Title': 'FML Java Mod',
|
||||||
'Implementation-Version': SPEC_VERSION,
|
'Implementation-Version': SPEC_VERSION,
|
||||||
'Implementation-Vendor': 'Forge'
|
'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
|
] as LinkedHashMap
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -449,7 +457,7 @@ project(':forge') {
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
arguments: [
|
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: [
|
libraries: [
|
||||||
[
|
[
|
||||||
|
|
|
@ -36,7 +36,7 @@ import java.util.Objects;
|
||||||
public class DefaultModInfos
|
public class DefaultModInfos
|
||||||
{
|
{
|
||||||
static {
|
static {
|
||||||
FileConfig minecraftmod; FileConfig forgemod;
|
FileConfig minecraftmod;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final URI jarFileURI = DefaultModInfos.class.getClassLoader().getResource("minecraftmod.toml").toURI();
|
final URI jarFileURI = DefaultModInfos.class.getClassLoader().getResource("minecraftmod.toml").toURI();
|
||||||
|
@ -49,10 +49,9 @@ public class DefaultModInfos
|
||||||
}
|
}
|
||||||
catch (IOException | URISyntaxException | NullPointerException e)
|
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);
|
minecraftModInfo = new ModInfo(null, minecraftmod);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final IModInfo minecraftModInfo;
|
public static final IModInfo minecraftModInfo;
|
||||||
|
|
|
@ -30,7 +30,8 @@ import org.apache.logging.log4j.Logger;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
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.Map;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
|
@ -61,8 +62,19 @@ public class FMLClientLaunchProvider extends FMLCommonLaunchHandler implements I
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public void setup(final IEnvironment environment, final Map<String, ?> arguments) {
|
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
|
@Override
|
||||||
|
|
|
@ -19,18 +19,21 @@
|
||||||
|
|
||||||
package net.minecraftforge.fml.loading;
|
package net.minecraftforge.fml.loading;
|
||||||
|
|
||||||
import com.google.common.collect.ObjectArrays;
|
|
||||||
import cpw.mods.modlauncher.api.IEnvironment;
|
import cpw.mods.modlauncher.api.IEnvironment;
|
||||||
import cpw.mods.modlauncher.api.ITransformingClassLoader;
|
import cpw.mods.modlauncher.api.ITransformingClassLoader;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
|
||||||
|
|
||||||
public abstract class FMLCommonLaunchHandler
|
public abstract class FMLCommonLaunchHandler
|
||||||
{
|
{
|
||||||
|
@ -48,12 +51,12 @@ public abstract class FMLCommonLaunchHandler
|
||||||
return cn -> SKIPPACKAGES.stream().noneMatch(cn::startsWith);
|
return cn -> SKIPPACKAGES.stream().noneMatch(cn::startsWith);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Path getForgePath(final String mcVersion, final String forgeVersion) {
|
public Path getForgePath(final String mcVersion, final String forgeVersion, final String forgeGroup) {
|
||||||
return LibraryFinder.getForgeLibraryPath(mcVersion, forgeVersion);
|
return LibraryFinder.getForgeLibraryPath(mcVersion, forgeVersion, forgeGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Path[] getMCPaths(final String mcVersion, final String forgeVersion) {
|
public Path[] getMCPaths(final String mcVersion, final String mcpVersion, final String forgeVersion, final String forgeGroup) {
|
||||||
return LibraryFinder.getMCPaths(mcVersion, forgeVersion, getDist().isClient() ? "client" : "server");
|
return LibraryFinder.getMCPaths(mcVersion, mcpVersion, forgeVersion, forgeGroup, getDist().isClient() ? "client" : "server");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setup(final IEnvironment environment, final Map<String, ?> arguments)
|
public void setup(final IEnvironment environment, final Map<String, ?> arguments)
|
||||||
|
@ -67,4 +70,19 @@ public abstract class FMLCommonLaunchHandler
|
||||||
{
|
{
|
||||||
FMLLoader.beforeStart(launchClassLoader);
|
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!");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,13 +53,13 @@ public class FMLDevClientLaunchProvider extends FMLCommonLaunchHandler implement
|
||||||
return LibraryFinder.commonLibPaths(new Path[] {FMLLoader.getForgePath()});
|
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
|
// In forge dev, we just find the path for ForgeVersion for everything
|
||||||
compiledClasses = LibraryFinder.findJarPathFor("net/minecraftforge/versions/forge/ForgeVersion.class", "forge");
|
compiledClasses = LibraryFinder.findJarPathFor("net/minecraftforge/versions/forge/ForgeVersion.class", "forge");
|
||||||
return compiledClasses;
|
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
|
// In forge dev, we just find the path for ForgeVersion for everything
|
||||||
return new Path[] { compiledClasses, compiledClasses };
|
return new Path[] { compiledClasses, compiledClasses };
|
||||||
}
|
}
|
||||||
|
@ -92,4 +92,8 @@ public class FMLDevClientLaunchProvider extends FMLCommonLaunchHandler implement
|
||||||
{
|
{
|
||||||
return Dist.CLIENT;
|
return Dist.CLIENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void validatePaths(final Path forgePath, final Path[] mcPaths, final String forgeVersion, final String mcVersion, final String mcpVersion) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ import java.nio.file.Paths;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
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.CORE;
|
||||||
import static net.minecraftforge.fml.loading.LogMarkers.SCAN;
|
import static net.minecraftforge.fml.loading.LogMarkers.SCAN;
|
||||||
|
@ -60,8 +61,10 @@ public class FMLLoader
|
||||||
private static Path gamePath;
|
private static Path gamePath;
|
||||||
private static Path forgePath;
|
private static Path forgePath;
|
||||||
private static Path[] mcPaths;
|
private static Path[] mcPaths;
|
||||||
static String forgeVersion;
|
|
||||||
static String mcVersion;
|
static String mcVersion;
|
||||||
|
private static String mcpVersion;
|
||||||
|
static String forgeVersion;
|
||||||
|
private static String forgeGroup;
|
||||||
private static Predicate<String> classLoaderExclusions;
|
private static Predicate<String> classLoaderExclusions;
|
||||||
|
|
||||||
static void onInitialLoad(IEnvironment environment, Set<String> otherServices) throws IncompatibleEnvironmentException
|
static void onInitialLoad(IEnvironment environment, Set<String> otherServices) throws IncompatibleEnvironmentException
|
||||||
|
@ -134,26 +137,19 @@ public class FMLLoader
|
||||||
dist = commonLaunchHandler.getDist();
|
dist = commonLaunchHandler.getDist();
|
||||||
|
|
||||||
mcVersion = (String) arguments.get("mcVersion");
|
mcVersion = (String) arguments.get("mcVersion");
|
||||||
|
mcpVersion = (String) arguments.get("mcpVersion");
|
||||||
forgeVersion = (String) arguments.get("forgeVersion");
|
forgeVersion = (String) arguments.get("forgeVersion");
|
||||||
forgePath = commonLaunchHandler.getForgePath(mcVersion, forgeVersion);
|
forgeGroup = (String) arguments.get("forgeGroup");
|
||||||
mcPaths = commonLaunchHandler.getMCPaths(mcVersion, forgeVersion);
|
|
||||||
|
|
||||||
if (!Files.exists(forgePath)) {
|
LOGGER.fatal("Received command line version data : MC Version: '{}' MCP Version: '{}' Forge Version: '{}' Forge group: '{}'", mcVersion, mcpVersion, forgeVersion, forgeGroup);
|
||||||
LOGGER.fatal(CORE, "Failed to find forge version {} for MC {} at {}", forgeVersion, mcVersion, forgePath);
|
forgePath = commonLaunchHandler.getForgePath(mcVersion, forgeVersion, forgeGroup);
|
||||||
throw new RuntimeException("Missing forge!");
|
mcPaths = commonLaunchHandler.getMCPaths(mcVersion, mcpVersion, forgeVersion, forgeGroup);
|
||||||
}
|
|
||||||
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!");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
commonLaunchHandler.validatePaths(forgePath, mcPaths, forgeVersion, mcVersion, mcpVersion);
|
||||||
commonLaunchHandler.setup(environment, arguments);
|
commonLaunchHandler.setup(environment, arguments);
|
||||||
classLoaderExclusions = commonLaunchHandler.getPackagePredicate();
|
classLoaderExclusions = commonLaunchHandler.getPackagePredicate();
|
||||||
languageLoadingProvider = new LanguageLoadingProvider();
|
languageLoadingProvider = new LanguageLoadingProvider();
|
||||||
|
languageLoadingProvider.addForgeLanguage(forgePath);
|
||||||
|
|
||||||
runtimeDistCleaner.getExtension().accept(dist);
|
runtimeDistCleaner.getExtension().accept(dist);
|
||||||
}
|
}
|
||||||
|
@ -180,6 +176,7 @@ public class FMLLoader
|
||||||
|
|
||||||
public static void loadAccessTransformer()
|
public static void loadAccessTransformer()
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
final URL resource = FMLLoader.class.getClassLoader().getResource("forge_at.cfg");
|
final URL resource = FMLLoader.class.getClassLoader().getResource("forge_at.cfg");
|
||||||
if (resource == null) {
|
if (resource == null) {
|
||||||
throw new RuntimeException("Missing forge_at.cfg file");
|
throw new RuntimeException("Missing forge_at.cfg file");
|
||||||
|
@ -194,6 +191,7 @@ public class FMLLoader
|
||||||
LOGGER.error("Error loading forge_at.cfg file", e);
|
LOGGER.error("Error loading forge_at.cfg file", e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addAccessTransformer(Path atPath, ModFile modName)
|
public static void addAccessTransformer(Path atPath, ModFile modName)
|
||||||
|
|
|
@ -43,11 +43,15 @@ public class FMLServiceProvider implements ITransformationService
|
||||||
private ArgumentAcceptingOptionSpec<String> mavenRootsOption;
|
private ArgumentAcceptingOptionSpec<String> mavenRootsOption;
|
||||||
private ArgumentAcceptingOptionSpec<String> forgeOption;
|
private ArgumentAcceptingOptionSpec<String> forgeOption;
|
||||||
private ArgumentAcceptingOptionSpec<String> mcOption;
|
private ArgumentAcceptingOptionSpec<String> mcOption;
|
||||||
|
private ArgumentAcceptingOptionSpec<String> forgeGroupOption;
|
||||||
|
private ArgumentAcceptingOptionSpec<String> mcpOption;
|
||||||
private List<String> modsArgumentList;
|
private List<String> modsArgumentList;
|
||||||
private List<String> modListsArgumentList;
|
private List<String> modListsArgumentList;
|
||||||
private List<String> mavenRootsArgumentList;
|
private List<String> mavenRootsArgumentList;
|
||||||
private String targetForgeVersion;
|
private String targetForgeVersion;
|
||||||
private String targetMcVersion;
|
private String targetMcVersion;
|
||||||
|
private String targetMcpVersion;
|
||||||
|
private String targetForgeGroup;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String name()
|
public String name()
|
||||||
|
@ -67,7 +71,9 @@ public class FMLServiceProvider implements ITransformationService
|
||||||
arguments.put("mods", modsArgumentList);
|
arguments.put("mods", modsArgumentList);
|
||||||
arguments.put("mavenRoots", mavenRootsArgumentList);
|
arguments.put("mavenRoots", mavenRootsArgumentList);
|
||||||
arguments.put("forgeVersion", targetForgeVersion);
|
arguments.put("forgeVersion", targetForgeVersion);
|
||||||
|
arguments.put("forgeGroup", targetForgeGroup);
|
||||||
arguments.put("mcVersion", targetMcVersion);
|
arguments.put("mcVersion", targetMcVersion);
|
||||||
|
arguments.put("mcpVersion", targetMcpVersion);
|
||||||
LOGGER.debug(CORE, "Preparing launch handler");
|
LOGGER.debug(CORE, "Preparing launch handler");
|
||||||
FMLLoader.setupLaunchHandler(environment, arguments);
|
FMLLoader.setupLaunchHandler(environment, arguments);
|
||||||
LOGGER.debug(CORE,"Initiating mod scan");
|
LOGGER.debug(CORE,"Initiating mod scan");
|
||||||
|
@ -86,7 +92,9 @@ public class FMLServiceProvider implements ITransformationService
|
||||||
public void arguments(BiFunction<String, String, OptionSpecBuilder> argumentBuilder)
|
public void arguments(BiFunction<String, String, OptionSpecBuilder> argumentBuilder)
|
||||||
{
|
{
|
||||||
forgeOption = argumentBuilder.apply("forgeVersion", "Forge Version number").withRequiredArg().ofType(String.class).required();
|
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();
|
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(",");
|
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(",");
|
modListsOption = argumentBuilder.apply("modLists", "JSON modlists").withRequiredArg().ofType(String.class).withValuesSeparatedBy(",");
|
||||||
mavenRootsOption = argumentBuilder.apply("mavenRoots", "Maven root directories").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);
|
modListsArgumentList = option.values(modListsOption);
|
||||||
mavenRootsArgumentList = option.values(mavenRootsOption);
|
mavenRootsArgumentList = option.values(mavenRootsOption);
|
||||||
targetForgeVersion = option.value(forgeOption);
|
targetForgeVersion = option.value(forgeOption);
|
||||||
|
targetForgeGroup = option.value(forgeGroupOption);
|
||||||
targetMcVersion = option.value(mcOption);
|
targetMcVersion = option.value(mcOption);
|
||||||
|
targetMcpVersion = option.value(mcpOption);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
package net.minecraftforge.fml.loading;
|
package net.minecraftforge.fml.loading;
|
||||||
|
|
||||||
|
import cpw.mods.modlauncher.ServiceLoaderStreamUtils;
|
||||||
import net.minecraftforge.fml.language.IModLanguageProvider;
|
import net.minecraftforge.fml.language.IModLanguageProvider;
|
||||||
import net.minecraftforge.fml.loading.moddiscovery.ExplodedDirectoryLocator;
|
import net.minecraftforge.fml.loading.moddiscovery.ExplodedDirectoryLocator;
|
||||||
import net.minecraftforge.fml.loading.moddiscovery.ModFile;
|
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.DefaultArtifactVersion;
|
||||||
import org.apache.maven.artifact.versioning.VersionRange;
|
import org.apache.maven.artifact.versioning.VersionRange;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
@ -37,11 +41,13 @@ import java.util.*;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static cpw.mods.modlauncher.api.LamdbaExceptionUtils.rethrowFunction;
|
||||||
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
|
import static net.minecraftforge.fml.loading.LogMarkers.CORE;
|
||||||
|
|
||||||
public class LanguageLoadingProvider
|
public class LanguageLoadingProvider
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = LogManager.getLogger();
|
private static final Logger LOGGER = LogManager.getLogger();
|
||||||
|
private final LanguageClassLoader languageClassLoader;
|
||||||
private final List<IModLanguageProvider> languageProviders = new ArrayList<>();
|
private final List<IModLanguageProvider> languageProviders = new ArrayList<>();
|
||||||
private final ServiceLoader<IModLanguageProvider> serviceLoader;
|
private final ServiceLoader<IModLanguageProvider> serviceLoader;
|
||||||
private final Map<String, ModLanguageWrapper> languageProviderMap = new HashMap<>();
|
private final Map<String, ModLanguageWrapper> languageProviderMap = new HashMap<>();
|
||||||
|
@ -52,9 +58,9 @@ public class LanguageLoadingProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ModLanguageWrapper {
|
private static class ModLanguageWrapper {
|
||||||
|
|
||||||
private final IModLanguageProvider modLanguageProvider;
|
private final IModLanguageProvider modLanguageProvider;
|
||||||
private final ArtifactVersion version;
|
private final ArtifactVersion version;
|
||||||
|
|
||||||
public ModLanguageWrapper(IModLanguageProvider modLanguageProvider, ArtifactVersion version)
|
public ModLanguageWrapper(IModLanguageProvider modLanguageProvider, ArtifactVersion version)
|
||||||
{
|
{
|
||||||
this.modLanguageProvider = modLanguageProvider;
|
this.modLanguageProvider = modLanguageProvider;
|
||||||
|
@ -70,9 +76,29 @@ public class LanguageLoadingProvider
|
||||||
{
|
{
|
||||||
return modLanguageProvider;
|
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() {
|
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);
|
serviceLoader.forEach(languageProviders::add);
|
||||||
|
|
||||||
languageProviders.forEach(lp -> {
|
languageProviders.forEach(lp -> {
|
||||||
|
@ -88,16 +114,35 @@ public class LanguageLoadingProvider
|
||||||
LOGGER.fatal(CORE, "Found unversioned system classpath language provider {}", lp.name());
|
LOGGER.fatal(CORE, "Found unversioned system classpath language provider {}", lp.name());
|
||||||
throw new RuntimeException("Failed to find implementation version for 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)));
|
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)
|
public void addAdditionalLanguages(List<ModFile> modFiles)
|
||||||
{
|
{
|
||||||
if (modFiles==null) return;
|
if (modFiles==null) return;
|
||||||
Stream<Path> langPaths = modFiles.stream().map(ModFile::getFilePath);
|
Stream<Path> langPaths = modFiles.stream().map(ModFile::getFilePath);
|
||||||
|
addLanguagePaths(langPaths);
|
||||||
serviceLoader.reload();
|
serviceLoader.reload();
|
||||||
|
loadLanguageProviders();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IModLanguageProvider findLanguage(ModFile mf, String modLoader, VersionRange modLoaderVersion) {
|
public IModLanguageProvider findLanguage(ModFile mf, String modLoader, VersionRange modLoaderVersion) {
|
||||||
|
|
|
@ -69,8 +69,8 @@ public class LibraryFinder {
|
||||||
return ObjectArrays.concat(extras, realms);
|
return ObjectArrays.concat(extras, realms);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Path getForgeLibraryPath(final String mcVersion, final String forgeVersion) {
|
static Path getForgeLibraryPath(final String mcVersion, final String forgeVersion, final String forgeGroup) {
|
||||||
Path forgePath = findLibsPath().resolve(MavenCoordinateResolver.get("net.minecraftforge", "forge", "", "", mcVersion+"-"+forgeVersion));
|
Path forgePath = findLibsPath().resolve(MavenCoordinateResolver.get(forgeGroup, "forge", "", "universal", mcVersion+"-"+forgeVersion));
|
||||||
LOGGER.debug(CORE, "Found forge path {} is {}", forgePath, pathStatus(forgePath));
|
LOGGER.debug(CORE, "Found forge path {} is {}", forgePath, pathStatus(forgePath));
|
||||||
return forgePath;
|
return forgePath;
|
||||||
}
|
}
|
||||||
|
@ -78,11 +78,16 @@ public class LibraryFinder {
|
||||||
static String pathStatus(final Path path) {
|
static String pathStatus(final Path path) {
|
||||||
return Files.exists(path) ? "present" : "missing";
|
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));
|
static Path[] getMCPaths(final String mcVersion, final String mcpVersion, final String forgeVersion, final String forgeGroup, final String type) {
|
||||||
Path patchedBinariesPath = findLibsPath().resolve(MavenCoordinateResolver.get("net.minecraftforge", "forge", "", type, mcVersion+"-"+forgeVersion));
|
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("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));
|
LOGGER.info("Forge patches at {} is {}", patchedBinariesPath.toString(), pathStatus(patchedBinariesPath));
|
||||||
return new Path[] { srgMcPath, patchedBinariesPath };
|
return new Path[] { patchedBinariesPath, mcDataPath, mcExtrasPath, srgMcPath };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,6 +108,8 @@ public class ExplodedDirectoryLocator implements IModLocator {
|
||||||
@Override
|
@Override
|
||||||
public void initArguments(final Map<String, ?> arguments) {
|
public void initArguments(final Map<String, ?> arguments) {
|
||||||
final List<Pair<Path, Path>> explodedTargets = ((Map<String, List<Pair<Path, Path>>>) arguments).get("explodedTargets");
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,6 +70,7 @@ public class LaunchTesting
|
||||||
"--assetsDir", assets,
|
"--assetsDir", assets,
|
||||||
"--userProperties", "{}",
|
"--userProperties", "{}",
|
||||||
"--fml.forgeVersion", "24.0.0",
|
"--fml.forgeVersion", "24.0.0",
|
||||||
|
"--fml.mcpVersion", "2018.11.30",
|
||||||
"--fml.mcVersion", "1.13");
|
"--fml.mcVersion", "1.13");
|
||||||
} else if (Objects.equals(target, "fmldevserver")) {
|
} else if (Objects.equals(target, "fmldevserver")) {
|
||||||
String[] launchargs = ObjectArrays.concat(new String[] {"--launchTarget", target,
|
String[] launchargs = ObjectArrays.concat(new String[] {"--launchTarget", target,
|
||||||
|
|
388
src/main/resources/META-INF/accesstransformer.cfg
Normal file
388
src/main/resources/META-INF/accesstransformer.cfg
Normal 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
|
Loading…
Reference in a new issue