Fix blockstate id map calculation. (#5279)

This commit is contained in:
David Quintana 2019-01-11 23:52:30 +01:00 committed by LexManos
parent 3765d912a5
commit e98951ee65
11 changed files with 261 additions and 459 deletions

View file

@ -181,7 +181,15 @@
func_196254_a("dropper", new BlockDropper(Block.Builder.func_200945_a(Material.field_151576_e).func_200943_b(3.5F)));
func_196254_a("white_terracotta", new Block(Block.Builder.func_200949_a(Material.field_151576_e, MapColor.field_193561_M).func_200948_a(1.25F, 4.2F)));
func_196254_a("orange_terracotta", new Block(Block.Builder.func_200949_a(Material.field_151576_e, MapColor.field_193562_N).func_200948_a(1.25F, 4.2F)));
@@ -1604,4 +1620,83 @@
@@ -1464,6 +1480,7 @@
func_196254_a("structure_block", new BlockStructure(Block.Builder.func_200949_a(Material.field_151573_f, MapColor.field_197656_x).func_200948_a(-1.0F, 3600000.0F)));
field_149771_c.func_177776_a();
+ if(false) // Processed in GameData.BlockCallbacks#onBake
for(Block block80 : field_149771_c) {
for(IBlockState iblockstate : block80.func_176194_O().func_177619_a()) {
field_176229_d.func_195867_b(iblockstate);
@@ -1604,4 +1621,83 @@
return Objects.hash(this.field_212164_a, this.field_212165_b, this.field_212166_c);
}
}

View file

@ -78,6 +78,7 @@ public class ForgeRegistry<V extends IForgeRegistryEntry<V>> implements IForgeRe
private final AddCallback<V> add;
private final ClearCallback<V> clear;
private final ValidateCallback<V> validate;
private final BakeCallback<V> bake;
private final MissingFactory<V> missing;
private final BitSet availabilityMap;
private final Set<ResourceLocation> dummies = Sets.newHashSet();
@ -94,23 +95,27 @@ public class ForgeRegistry<V extends IForgeRegistryEntry<V>> implements IForgeRe
private V defaultValue = null;
boolean isFrozen = false;
ForgeRegistry(Class<V> superType, ResourceLocation defaultKey, int min, int max, @Nullable CreateCallback<V> create, @Nullable AddCallback<V> add, @Nullable ClearCallback<V> clear, @Nullable ValidateCallback<V> validate, RegistryManager stage, boolean allowOverrides, boolean isModifiable, @Nullable DummyFactory<V> dummyFactory, @Nullable MissingFactory<V> missing)
private final RegistryBuilder<V> builder;
ForgeRegistry(RegistryManager stage, RegistryBuilder<V> builder)
{
this.builder = builder;
this.stage = stage;
this.superType = superType;
this.defaultKey = defaultKey;
this.min = min;
this.max = max;
this.superType = builder.getType();
this.defaultKey = builder.getDefault();
this.min = builder.getMinId();
this.max = builder.getMaxId();
this.availabilityMap = new BitSet(Math.min(max + 1, 0x0FFF));
this.create = create;
this.add = add;
this.clear = clear;
this.validate = validate;
this.missing = missing;
this.create = builder.getCreate();
this.add = builder.getAdd();
this.clear = builder.getClear();
this.validate = builder.getValidate();
this.bake = builder.getBake();
this.missing = builder.getMissingFactory();
this.dummyFactory = builder.getDummyFactory();
this.isDelegated = ForgeRegistryEntry.class.isAssignableFrom(superType); //TODO: Make this IDelegatedRegistryEntry?
this.allowOverrides = allowOverrides;
this.isModifiable = isModifiable;
this.dummyFactory = dummyFactory;
this.allowOverrides = builder.getAllowOverrides();
this.isModifiable = builder.getAllowModifications();
if (this.create != null)
this.create.onCreate(this, stage);
}
@ -268,7 +273,7 @@ public class ForgeRegistry<V extends IForgeRegistryEntry<V>> implements IForgeRe
ForgeRegistry<V> copy(RegistryManager stage)
{
return new ForgeRegistry<V>(superType, defaultKey, min, max, create, add, clear, validate, stage, allowOverrides, isModifiable, dummyFactory, missing);
return new ForgeRegistry<>(stage, builder);
}
int add(int id, V value)
@ -465,6 +470,12 @@ public class ForgeRegistry<V extends IForgeRegistryEntry<V>> implements IForgeRe
}
}
public void bake()
{
if (this.bake != null)
this.bake.onBake(this, this.stage);
}
void sync(ResourceLocation name, ForgeRegistry<V> from)
{
LOGGER.debug(REGISTRIES,"Registry {} Sync: {} -> {}", this.superType.getSimpleName(), this.stage.getName(), from.stage.getName());

View file

@ -19,10 +19,7 @@
package net.minecraftforge.registries;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.*;
import net.minecraft.block.Block;
import net.minecraft.block.BlockAir;
import net.minecraft.block.material.Material;
@ -33,6 +30,7 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionType;
import net.minecraft.state.StateContainer;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.ObjectIntIdentityMap;
import net.minecraft.util.ResourceLocation;
@ -43,14 +41,18 @@ import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.RegistryEvent.MissingMappings;
import net.minecraftforge.fml.common.EnhancedRuntimeException;
import net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession;
import net.minecraftforge.fml.ModThreadContext;
import net.minecraftforge.fml.StartupQuery;
import net.minecraftforge.fml.common.EnhancedRuntimeException;
import net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession;
import net.minecraftforge.fml.common.thread.EffectiveSide;
import org.apache.commons.lang3.Validate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import javax.annotation.Nullable;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Collections;
@ -62,17 +64,6 @@ import java.util.function.BiConsumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import net.minecraftforge.fml.common.thread.EffectiveSide;
import org.apache.commons.lang3.Validate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;
import net.minecraftforge.fml.common.EnhancedRuntimeException.WrappedPrintStream;
/**
* INTERNAL ONLY
* MODDERS SHOULD HAVE NO REASON TO USE THIS CLASS
@ -226,7 +217,10 @@ public class GameData
reg.validateContent(name);
reg.freeze();
});
RegistryManager.ACTIVE.registries.forEach((name, reg) -> reg.freeze());
RegistryManager.ACTIVE.registries.forEach((name, reg) -> {
reg.freeze();
reg.bake();
});
// the id mapping is finalized, no ids actually changed but this is a good place to tell everyone to 'bake' their stuff.
//Loader.instance().fireRemapEvent(ImmutableMap.of(), true);
@ -250,6 +244,7 @@ public class GameData
final Class<? extends IForgeRegistryEntry> clazz = RegistryManager.ACTIVE.getSuperType(r.getKey());
loadRegistry(r.getKey(), RegistryManager.FROZEN, RegistryManager.ACTIVE, clazz, true);
}
RegistryManager.ACTIVE.registries.forEach((name, reg) -> reg.bake());
// the id mapping has reverted, fire remap events for those that care about id changes
//Loader.instance().fireRemapEvent(ImmutableMap.of(), true);
@ -273,23 +268,47 @@ public class GameData
{
this.identityMap.clear();
this.objectList.clear();
this.nextId = 0;
}
}
private static class BlockCallbacks implements IForgeRegistry.AddCallback<Block>, IForgeRegistry.ClearCallback<Block>, IForgeRegistry.CreateCallback<Block>, IForgeRegistry.DummyFactory<Block>
private static class BlockCallbacks implements IForgeRegistry.AddCallback<Block>, IForgeRegistry.ClearCallback<Block>, IForgeRegistry.BakeCallback<Block>, IForgeRegistry.CreateCallback<Block>, IForgeRegistry.DummyFactory<Block>
{
static final BlockCallbacks INSTANCE = new BlockCallbacks();
@Override
public void onAdd(IForgeRegistryInternal<Block> owner, RegistryManager stage, int id, Block block, @Nullable Block oldBlock)
{
@SuppressWarnings("unchecked")
ClearableObjectIntIdentityMap<IBlockState> blockstateMap = owner.getSlaveMap(BLOCKSTATE_TO_ID, ClearableObjectIntIdentityMap.class);
if (oldBlock != null)
{
StateContainer<Block, IBlockState> oldContainer = oldBlock.getStateContainer();
StateContainer<Block, IBlockState> newContainer = block.getStateContainer();
ImmutableList<IBlockState> oldValidStates = oldContainer.getValidStates();
ImmutableList<IBlockState> newValidStates = newContainer.getValidStates();
int offset = 0;
for (IBlockState state : block.getStateContainer().getValidStates())
blockstateMap.put(state, id + offset++);
// Test vanilla blockstates, if the number matches, make sure they also match in their string representations
if (block.getRegistryName().getNamespace().equals("minecraft") && (
oldValidStates.size() != newValidStates.size() ||
!Streams.zip(oldValidStates.stream().map(Object::toString),
newValidStates.stream().map(Object::toString),
String::equals).allMatch(v -> v)))
{
String oldSequence = oldContainer.getProperties().stream()
.map(s -> String.format("%s={%s}", s.getName(),
s.getAllowedValues().stream().map(Object::toString).collect(Collectors.joining( "," ))))
.collect(Collectors.joining(";"));
String newSequence = newContainer.getProperties().stream()
.map(s -> String.format("%s={%s}", s.getName(),
s.getAllowedValues().stream().map(Object::toString).collect(Collectors.joining( "," ))))
.collect(Collectors.joining(";"));
LOGGER.error("Registry replacements for vanilla block '{}' must not change the number or order of blockstates.\n"+
"\tOld: {}\n"+
"\tNew: {}", block.getRegistryName(), oldSequence, newSequence);
throw new RuntimeException("Invalid vanilla replacement. See log for details.");
}
}
/*
if ("minecraft:tripwire".equals(block.getRegistryName().toString())) //Tripwire is crap so we have to special case whee!
@ -362,6 +381,22 @@ public class GameData
GameData.forceRegistryName(ret, key);
return ret;
}
@Override
public void onBake(IForgeRegistryInternal<Block> owner, RegistryManager stage)
{
@SuppressWarnings("unchecked")
ClearableObjectIntIdentityMap<IBlockState> blockstateMap = owner.getSlaveMap(BLOCKSTATE_TO_ID, ClearableObjectIntIdentityMap.class);
for (Block block : owner)
{
for (IBlockState state : block.getStateContainer().getValidStates())
{
blockstateMap.add(state);
}
}
}
private static class BlockDummyAir extends BlockAir //A named class so DummyBlockReplacementTest can detect if its a dummy
{
private BlockDummyAir(Block.Builder builder)
@ -688,8 +723,12 @@ public class GameData
loadRegistry(key, STAGING, RegistryManager.ACTIVE, registrySuperType, true);
});
RegistryManager.ACTIVE.registries.forEach((name, reg) -> {
reg.bake();
// Dump the active registry
RegistryManager.ACTIVE.registries.forEach((name, reg) -> reg.dump(name));
reg.dump(name);
});
// Tell mods that the ids have changed
//Loader.instance().fireRemapEvent(remaps, false);

View file

@ -95,6 +95,14 @@ public interface IForgeRegistry<V extends IForgeRegistryEntry<V>> extends Iterab
void onValidate(IForgeRegistryInternal<V> owner, RegistryManager stage, int id, ResourceLocation key, V obj);
}
/**
* Callback fired when the registry is done processing. Used to calculate state ID maps.
*/
interface BakeCallback<V extends IForgeRegistryEntry<V>>
{
void onBake(IForgeRegistryInternal<V> owner, RegistryManager stage);
}
/**
* Factory for creating dummy entries, allowing worlds to be loaded and keep the missing block references.
*/

View file

@ -41,6 +41,7 @@ public class RegistryBuilder<T extends IForgeRegistryEntry<T>>
private List<ClearCallback<T>> clearCallback = Lists.newArrayList();
private List<CreateCallback<T>> createCallback = Lists.newArrayList();
private List<ValidateCallback<T>> validateCallback = Lists.newArrayList();
private List<BakeCallback<T>> bakeCallback = Lists.newArrayList();
private boolean saveToDisc = true;
private boolean allowOverrides = true;
private boolean allowModifications = false;
@ -88,6 +89,8 @@ public class RegistryBuilder<T extends IForgeRegistryEntry<T>>
this.add((CreateCallback<T>)inst);
if (inst instanceof ValidateCallback)
this.add((ValidateCallback<T>)inst);
if (inst instanceof BakeCallback)
this.add((BakeCallback<T>)inst);
if (inst instanceof DummyFactory)
this.set((DummyFactory<T>)inst);
if (inst instanceof MissingFactory)
@ -119,6 +122,12 @@ public class RegistryBuilder<T extends IForgeRegistryEntry<T>>
return this;
}
public RegistryBuilder<T> add(BakeCallback<T> bake)
{
this.bakeCallback.add(bake);
return this;
}
public RegistryBuilder<T> set(DummyFactory<T> factory)
{
this.dummyFactory = factory;
@ -151,12 +160,11 @@ public class RegistryBuilder<T extends IForgeRegistryEntry<T>>
public IForgeRegistry<T> create()
{
return RegistryManager.ACTIVE.createRegistry(registryName, registryType, optionalDefaultKey, minId, maxId,
getAdd(), getClear(), getCreate(), getValidate(), saveToDisc, allowOverrides, allowModifications, dummyFactory, missingFactory);
return RegistryManager.ACTIVE.createRegistry(registryName, this);
}
@Nullable
private AddCallback<T> getAdd()
public AddCallback<T> getAdd()
{
if (addCallback.isEmpty())
return null;
@ -171,7 +179,7 @@ public class RegistryBuilder<T extends IForgeRegistryEntry<T>>
}
@Nullable
private ClearCallback<T> getClear()
public ClearCallback<T> getClear()
{
if (clearCallback.isEmpty())
return null;
@ -186,7 +194,7 @@ public class RegistryBuilder<T extends IForgeRegistryEntry<T>>
}
@Nullable
private CreateCallback<T> getCreate()
public CreateCallback<T> getCreate()
{
if (createCallback.isEmpty())
return null;
@ -201,7 +209,7 @@ public class RegistryBuilder<T extends IForgeRegistryEntry<T>>
}
@Nullable
private ValidateCallback<T> getValidate()
public ValidateCallback<T> getValidate()
{
if (validateCallback.isEmpty())
return null;
@ -214,4 +222,67 @@ public class RegistryBuilder<T extends IForgeRegistryEntry<T>>
cb.onValidate(owner, stage, id, key, obj);
};
}
@Nullable
public BakeCallback<T> getBake()
{
if (bakeCallback.isEmpty())
return null;
if (bakeCallback.size() == 1)
return bakeCallback.get(0);
return (owner, stage) ->
{
for (BakeCallback<T> cb : this.bakeCallback)
cb.onBake(owner, stage);
};
}
public Class<T> getType()
{
return registryType;
}
@Nullable
public ResourceLocation getDefault()
{
return this.optionalDefaultKey;
}
public int getMinId()
{
return minId;
}
public int getMaxId()
{
return maxId;
}
public boolean getAllowOverrides()
{
return allowOverrides;
}
public boolean getAllowModifications()
{
return allowModifications;
}
@Nullable
public DummyFactory<T> getDummyFactory()
{
return dummyFactory;
}
@Nullable
public MissingFactory<T> getMissingFactory()
{
return missingFactory;
}
public boolean getSaveToDisc()
{
return saveToDisc;
}
}

View file

@ -25,8 +25,6 @@ import java.util.Set;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Maps;
@ -37,7 +35,6 @@ import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.network.FMLHandshakeMessages;
import net.minecraftforge.fml.network.NetworkEvent;
import net.minecraftforge.registries.ForgeRegistry.Snapshot;
import net.minecraftforge.registries.IForgeRegistry.*;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -101,23 +98,22 @@ public class RegistryManager
return getRegistry(key);
}
<V extends IForgeRegistryEntry<V>> ForgeRegistry<V> createRegistry(ResourceLocation name, Class<V> type, ResourceLocation defaultKey, int min, int max,
@Nullable AddCallback<V> add, @Nullable ClearCallback<V> clear, @Nullable CreateCallback<V> create, @Nullable ValidateCallback<V> validate,
boolean persisted, boolean allowOverrides, boolean isModifiable, @Nullable DummyFactory<V> dummyFactory, @Nullable MissingFactory<V> missing)
<V extends IForgeRegistryEntry<V>> ForgeRegistry<V> createRegistry(ResourceLocation name, RegistryBuilder<V> builder)
{
Set<Class<?>> parents = Sets.newHashSet();
findSuperTypes(type, parents);
findSuperTypes(builder.getType(), parents);
SetView<Class<?>> overlappedTypes = Sets.intersection(parents, superTypes.keySet());
if (!overlappedTypes.isEmpty())
{
Class<?> foundType = overlappedTypes.iterator().next();
LOGGER.error("Found existing registry of type {} named {}, you cannot create a new registry ({}) with type {}, as {} has a parent of that type", foundType, superTypes.get(foundType), name, type, type);
LOGGER.error("Found existing registry of type {} named {}, you cannot create a new registry ({}) with type {}, as {} has a parent of that type",
foundType, superTypes.get(foundType), name, builder.getType(), builder.getType());
throw new IllegalArgumentException("Duplicate registry parent type found - you can only have one registry for a particular super type");
}
ForgeRegistry<V> reg = new ForgeRegistry<V>(type, defaultKey, min, max, create, add, clear, validate, this, allowOverrides, isModifiable, dummyFactory, missing);
ForgeRegistry<V> reg = new ForgeRegistry<V>(this, builder);
registries.put(name, reg);
superTypes.put(type, name);
if (persisted)
superTypes.put(builder.getType(), name);
if (builder.getSaveToDisc())
this.persisted.add(name);
return getRegistry(name);
}

View file

@ -227,6 +227,7 @@ 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 net.minecraft.util.ObjectIntIdentityMap field_195868_a # nextId
#protected-f net.minecraft.util.RegistryNamespaced field_148759_a # identitymap
# GuiButton
@ -386,3 +387,10 @@ public net.minecraft.item.BlockItemUseContext <init>(Lnet/minecraft/world/World;
#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
# Block$Builder
public net.minecraft.block.Block$Builder func_200947_a(Lnet/minecraft/block/SoundType;)Lnet/minecraft/block/Block$Builder; # sound
public net.minecraft.block.Block$Builder func_200951_a(I)Lnet/minecraft/block/Block$Builder; # lightValue
public net.minecraft.block.Block$Builder func_200944_c()Lnet/minecraft/block/Block$Builder; # needsRandomTick
public net.minecraft.block.Block$Builder func_208770_d()Lnet/minecraft/block/Block$Builder; # variableOpacity
public net.minecraft.block.Block$Builder func_200943_b(F)Lnet/minecraft/block/Block$Builder; # hardnessAndResistance

View file

@ -1,396 +0,0 @@
#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
# Block$Builder
public net.minecraft.block.Block$Builder func_200947_a(Lnet/minecraft/block/SoundType;)Lnet/minecraft/block/Block$Builder; # sound
public net.minecraft.block.Block$Builder func_200951_a(I)Lnet/minecraft/block/Block$Builder; # lightValue
public net.minecraft.block.Block$Builder func_200944_c()Lnet/minecraft/block/Block$Builder; # needsRandomTick
public net.minecraft.block.Block$Builder func_208770_d()Lnet/minecraft/block/Block$Builder; # variableOpacity
public net.minecraft.block.Block$Builder func_200943_b(F)Lnet/minecraft/block/Block$Builder; # hardnessAndResistance

View file

@ -1,3 +1,22 @@
/*
* Minecraft Forge
* Copyright (c) 2016-2018.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation version 2.1
* of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraftforge.userdev;
import cpw.mods.modlauncher.api.ILaunchHandlerService;

View file

@ -1,3 +1,22 @@
/*
* Minecraft Forge
* Copyright (c) 2016-2018.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation version 2.1
* of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraftforge.userdev;
import cpw.mods.modlauncher.api.IEnvironment;

View file

@ -1,3 +1,22 @@
/*
* Minecraft Forge
* Copyright (c) 2016-2018.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation version 2.1
* of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraftforge.userdev;
import cpw.mods.modlauncher.api.ILaunchHandlerService;