Re-write checkATs function and automate making Items/Blocks public.

This commit is contained in:
LexManos 2020-06-29 19:33:30 -07:00
parent 99e7fad655
commit ab29145328
11 changed files with 364 additions and 69 deletions

View file

@ -43,6 +43,7 @@ import org.apache.tools.ant.filters.ReplaceTokens
import de.undercouch.gradle.tasks.download.Download
import org.gradle.plugins.ide.eclipse.model.SourceFolder
import org.objectweb.asm.ClassReader
import org.objectweb.asm.Opcodes
plugins {
id 'net.minecrell.licenser' version '0.4'
@ -52,7 +53,7 @@ plugins {
}
apply plugin: 'eclipse'
println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version'))
println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch'))
ext {
JAR_SIGNER = null
@ -217,6 +218,7 @@ project(':forge') {
SPECIAL_SOURCE = 'net.md-5:SpecialSource:1.8.5'
VERSION_JSON = project(':mcp').file('build/mcp/downloadJson/version.json')
BINPATCH_TOOL = 'net.minecraftforge:binarypatcher:1.0.12:fatjar'
INSTALLER_TOOLS = 'net.minecraftforge:installertools:1.1.11'
}
def getVersion = {
@ -621,6 +623,7 @@ project(':forge') {
}
task extractInheritance(type: ExtractInheritance, dependsOn: [genJoinedBinPatches, downloadLibraries]) {
tool = INSTALLER_TOOLS + ':fatjar'
input { genJoinedBinPatches.cleanJar }
doFirst {
def json = new JsonSlurper().parseText(VERSION_JSON.text)
@ -634,51 +637,220 @@ project(':forge') {
}
}
}
task checkATs(dependsOn: genJoinedBinPatches) {
inputs.file { genJoinedBinPatches.cleanJar }
task checkATs(dependsOn: extractInheritance) {
inputs.file { extractInheritance.output }
inputs.files patcher.accessTransformers
doLast {
def vanilla = [:]
def zip = new java.util.zip.ZipFile(genJoinedBinPatches.cleanJar)
zip.entries().findAll { !it.directory && it.name.endsWith('.class') }.each { entry ->
new ClassReader(zip.getInputStream(entry)).accept(new org.objectweb.asm.ClassVisitor(org.objectweb.asm.Opcodes.ASM7) {
String name
void visit(int version, int access, String name, String sig, String superName, String[] interfaces) {
this.name = name
vanilla[name] = access
}
org.objectweb.asm.FieldVisitor visitField(int access, String name, String desc, String sig, Object value) {
vanilla[this.name + ' ' + name] = access
return null
}
org.objectweb.asm.MethodVisitor visitMethod(int access, String name, String desc, String sig, String[] excs) {
vanilla[this.name + ' ' + name + desc] = access
return null
}
}, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES)
def parse = { line ->
def idx = line.indexOf('#')
def comment = idx == -1 ? null : line.substring(idx)
if (idx != -1) line = line.substring(0, idx - 1)
def (modifier, cls, desc) = (line.trim() + ' ').split(' ', -1)
def key = cls + (desc.isEmpty() ? '' : ' ' + desc)
return [modifier, cls, desc, comment, key]
}
def accessLevel = { access ->
if ((access & Opcodes.ACC_PUBLIC) != 0) return 3
if ((access & Opcodes.ACC_PROTECTED) != 0) return 2
if ((access & Opcodes.ACC_PRIVATE) != 0) return 0
return 1
}
def accessStr = { access ->
if (access.endsWith('-f') || access.endsWith('+f'))
return 4
switch (access.toLowerCase()) {
case 'public': return 3
case 'protected': return 2
case 'default': return 1
case 'private': return 0
default: return -1
}
}
def json = new JsonSlurper().parseText(extractInheritance.output.text)
patcher.accessTransformers.each { f ->
TreeMap lines = [:]
f.eachLine { line ->
def idx = line.indexOf('#')
if (idx == 0 || line.isEmpty()) return
def comment = idx == -1 ? null : line.substring(idx)
if (idx != -1) line = line.substring(0, idx - 1)
def (modifier, cls, desc) = (line.trim() + ' ').split(' ', -1)
def key = cls + (desc.isEmpty() ? '' : ' ' + desc)
def access = vanilla[key.replace('.', '/')]
if (access == null) {
if ((desc.equals('*') || desc.equals('*()')) && vanilla[cls.replace('.', '/')] != null)
println('Warning: ' + line)
else {
println('Invalid: ' + line)
return
def group = null
for (def line : f.readLines()) {
if (line.isEmpty()) continue
if (line.startsWith('#group ')) {
def (modifier, cls, desc, comment, key) = parse.call(line.substring(7))
if (!desc.equals('*') && !desc.equals('*()') && !desc.equals('<init>'))
throw new IllegalStateException('Invalid group: ' + line)
group = [modifier: modifier, cls: cls, desc: desc, comment: comment,
'existing': [] as Set,
'children': [] as TreeSet,
group: true
]
if (lines.containsKey(key))
throw new IllegalStateException('Duplicate group: ' + line)
lines[key] = group
} else if (group != null) {
if (line.startsWith('#endgroup')) {
group = null
} else {
def (modifier, cls, desc, comment, key) = parse.call(line)
group['existing'].add(key)
}
} else if (line.startsWith('#endgroup')) {
throw new IllegalStateException('Invalid group ending: ' + line)
} else if (line.startsWith('#')) {
//Nom
} else {
def (modifier, cls, desc, comment, key) = parse.call(line)
if (lines.containsKey(key)) {
println('Duplicate: ' + line)
continue
}
lines[key] = [modifier: modifier, cls: cls, desc: desc, comment: comment, group: false]
}
}
// Process Groups, this will remove any entries outside the group that is covered by the group
for (def key : new ArrayList<>(lines.keySet())) {
def entry = lines.get(key)
if (entry != null && entry['group']) {
def cls = entry['cls']
def jcls = json.get(cls.replaceAll('\\.', '/'))
if (jcls == null) {
lines.remove(key)
println('Invalid Group: ' + key)
} else if ('*'.equals(entry['desc'])) {
if (!jcls.containsKey('fields')) {
lines.remove(key)
println('Invalid Group, Class has no fields: ' + key)
} else {
jcls['fields'].each { field, value ->
def fkey = cls + ' ' + field
if (accessLevel.call(value['access']) < accessStr.call(entry['modifier'])) {
if (lines.containsKey(fkey)) {
lines.remove(fkey)
} else if (!entry['existing'].contains(fkey)) {
println('Added: ' + fkey)
}
entry['children'].add(fkey)
} else if (lines.containsKey(fkey)) {
lines.remove(fkey)
println('Removed: ' + fkey)
}
}
entry['existing'].stream().findAll{ !entry['children'].contains(it) }.each{ println('Removed: ' + it) }
}
} else if ('*()'.equals(entry['desc'])) {
if (!jcls.containsKey('methods')) {
lines.remove(key)
println('Invalid Group, Class has no methods: ' + key)
} else {
jcls['methods'].each{ mtd, value ->
if (mtd.startsWith('<clinit>'))
return
key = cls + ' ' + mtd.replace(' ', '')
if (accessLevel.call(value['access']) < accessStr.call(entry['modifier'])) {
if (lines.containsKey(key)) {
lines.remove(key)
} else if (!entry['existing'].contains(key)) {
println('Added: ' + key)
}
entry['children'].add(key)
} else if (lines.containsKey(key)) {
lines.remove(key)
println('Removed: ' + key)
}
}
entry['existing'].stream().findAll{ !entry['children'].contains(it) }.each{ println('Removed: ' + it) }
}
} else if ('<init>'.equals(entry['desc'])) { //Make all public non-abstract subclasses
json.each{ tcls,value ->
if (!value.containsKey('methods') || ((value['access'] & Opcodes.ACC_ABSTRACT) != 0))
return
def parents = [] as Set
def parent = tcls
while (parent != null && json.containsKey(parent)) {
parents.add(parent)
def p = json[parent]
parent = p == null ? null : p['superName']
}
if (parents.contains(cls.replaceAll('\\.', '/'))) {
value['methods'].each{ mtd, v ->
if (mtd.startsWith('<init>')) {
def child = tcls.replaceAll('/', '\\.') + ' ' + mtd.replace(' ', '')
if (accessLevel.call(v['access']) < 3) {
if (lines.containsKey(child)) {
lines.remove(child)
} else if (!entry['existing'].contains(child)) {
println('Added: ' + child)
}
entry['children'].add(child)
} else if (lines.containsKey(child)) {
lines.remove(child)
println('Removed: ' + child)
}
}
}
}
}
entry['existing'].stream().findAll{ !entry['children'].contains(it) }.each{ println('Removed: ' + it) }
}
}
//TODO: Check access actually changes, and expand inheretence?
lines[key] = [modifier: modifier, comment: comment]
}
f.text = lines.collect{ it.value.modifier + ' ' + it.key + (it.value.comment == null ? '' : ' ' + it.value.comment) }.join('\n')
// Process normal lines, remove invalid and remove narrowing
for (def key : new ArrayList<>(lines.keySet())) {
def entry = lines.get(key)
if (entry != null && !entry['group']) {
def cls = entry['cls']
def jcls = json.get(cls.replaceAll('\\.', '/'))
if (jcls == null) {
lines.remove(key)
println('Invalid: ' + key)
} else if (entry['desc'] == '') {
if (accessLevel.call(jcls['access']) >= accessStr.call(entry['modifier']) && (entry.comment == null || !entry.comment.startsWith('#force '))) {
lines.remove(key)
println('Invalid Narrowing: ' + key)
}
} else if (!entry['desc'].contains('(')) {
if (!jcls.containsKey('fields') || !jcls['fields'].containsKey(entry['desc'])) {
lines.remove(key)
println('Invalid: ' + key)
} else {
def value = jcls['fields'][entry['desc']]
if (accessLevel.call(value['access']) >= accessStr.call(entry['modifier']) && (entry.comment == null || !entry.comment.startsWith('#force '))) {
lines.remove(key)
println('Invalid Narrowing: ' + key)
println(entry.comment)
}
}
} else {
def jdesc = entry['desc'].replace('(', ' (')
if (!jcls.containsKey('methods') || !jcls['methods'].containsKey(jdesc)) {
lines.remove(key)
println('Invalid: ' + key)
} else {
def value = jcls['methods'][jdesc]
if (accessLevel.call(value['access']) >= accessStr.call(entry['modifier']) && (entry.comment == null || !entry.comment.startsWith('#force '))) {
lines.remove(key)
println('Invalid Narrowing: ' + key)
}
}
}
}
}
def data = []
lines.each { key,value ->
if (!value.group) {
data.add(value.modifier + ' ' + key + (value.comment == null ? '' : ' ' + value.comment))
} else {
data.add('#group ' + value.modifier + ' ' + key + (value.comment == null ? '' : ' ' + value.comment))
value.children.each{ data.add(value.modifier + ' ' + it) }
data.add('#endgroup')
}
}
f.text = data.join('\n')
}
}
}
@ -779,7 +951,6 @@ project(':forge') {
task installerJson(dependsOn: [launcherJson, genClientBinPatches, applyClientBinPatches, applyServerBinPatches/*, createClientSRG, createServerSRG*/]) {
ext {
output = file('build/install_profile.json')
INSTALLER_TOOLS = 'net.minecraftforge:installertools:1.1.4'
JAR_SPLITTER = 'net.minecraftforge:jarsplitter:1.1.2'
}
doFirst {

View file

@ -19,6 +19,7 @@ archivesBaseName = 'modid'
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch'))
minecraft {
// The mappings can be changed at any time, and must be in the following format.
// snapshot_YYYYMMDD Snapshot are built nightly.

View file

@ -6,7 +6,7 @@
-public class BushBlock extends Block {
+public class BushBlock extends Block implements net.minecraftforge.common.IPlantable {
protected BushBlock(AbstractBlock.Properties p_i48437_1_) {
public BushBlock(AbstractBlock.Properties p_i48437_1_) {
super(p_i48437_1_);
}
@@ -22,6 +22,8 @@

View file

@ -8,4 +8,4 @@
+public class DeadBushBlock extends BushBlock implements net.minecraftforge.common.IForgeShearable {
protected static final VoxelShape field_196397_a = Block.func_208617_a(2.0D, 0.0D, 2.0D, 14.0D, 13.0D, 14.0D);
protected DeadBushBlock(AbstractBlock.Properties p_i48418_1_) {
public DeadBushBlock(AbstractBlock.Properties p_i48418_1_) {

View file

@ -10,7 +10,7 @@
public static final VoxelShape field_235510_c_ = Block.func_208617_a(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D);
+ @Deprecated // Forge: Use the constructor that takes a supplier
protected FlowingFluidBlock(FlowingFluid p_i49014_1_, AbstractBlock.Properties p_i49014_2_) {
public FlowingFluidBlock(FlowingFluid p_i49014_1_, AbstractBlock.Properties p_i49014_2_) {
super(p_i49014_2_);
this.field_204517_c = p_i49014_1_;
@@ -47,8 +48,21 @@

View file

@ -6,7 +6,7 @@
public static final BooleanProperty field_176569_M = BlockStateProperties.field_208194_u;
+ private final boolean isActivator; // TRUE for an Activator Rail, FALSE for Powered Rail
protected PoweredRailBlock(AbstractBlock.Properties p_i48349_1_) {
public PoweredRailBlock(AbstractBlock.Properties p_i48349_1_) {
- super(true, p_i48349_1_);
+ this(p_i48349_1_, false);
+ }

View file

@ -8,4 +8,4 @@
+public class SeaGrassBlock extends BushBlock implements IGrowable, ILiquidContainer, net.minecraftforge.common.IForgeShearable {
protected static final VoxelShape field_207798_a = Block.func_208617_a(2.0D, 0.0D, 2.0D, 14.0D, 12.0D, 14.0D);
protected SeaGrassBlock(AbstractBlock.Properties p_i48780_1_) {
public SeaGrassBlock(AbstractBlock.Properties p_i48780_1_) {

View file

@ -5,7 +5,7 @@
}
+ @Deprecated // Forge: Use the other constructor that takes a Supplier
protected StairsBlock(BlockState p_i48321_1_, AbstractBlock.Properties p_i48321_2_) {
public StairsBlock(BlockState p_i48321_1_, AbstractBlock.Properties p_i48321_2_) {
super(p_i48321_2_);
this.func_180632_j(this.field_176227_L.func_177621_b().func_206870_a(field_176309_a, Direction.NORTH).func_206870_a(field_176308_b, Half.BOTTOM).func_206870_a(field_176310_M, StairsShape.STRAIGHT).func_206870_a(field_204513_t, Boolean.valueOf(false)));
this.field_150149_b = p_i48321_1_.func_177230_c();

View file

@ -8,4 +8,4 @@
+public class TallGrassBlock extends BushBlock implements IGrowable, net.minecraftforge.common.IForgeShearable {
protected static final VoxelShape field_196389_a = Block.func_208617_a(2.0D, 0.0D, 2.0D, 14.0D, 13.0D, 14.0D);
protected TallGrassBlock(AbstractBlock.Properties p_i48310_1_) {
public TallGrassBlock(AbstractBlock.Properties p_i48310_1_) {

View file

@ -12,7 +12,7 @@
+ private final java.util.function.Supplier<SoundEvent> soundSupplier;
+ @Deprecated // Forge: Use the constructor that takes a supplier instead
protected MusicDiscItem(int p_i48475_1_, SoundEvent p_i48475_2_, Item.Properties p_i48475_3_) {
public MusicDiscItem(int p_i48475_1_, SoundEvent p_i48475_2_, Item.Properties p_i48475_3_) {
super(p_i48475_3_);
this.field_195977_c = p_i48475_1_;
this.field_185076_b = p_i48475_2_;

View file

@ -1,9 +1,97 @@
public net.minecraft.advancements.CriteriaTriggers func_192118_a(Lnet/minecraft/advancements/ICriterionTrigger;)Lnet/minecraft/advancements/ICriterionTrigger; # register
public net.minecraft.block.AbstractBlock$Properties func_200943_b(F)Lnet/minecraft/block/AbstractBlock$Properties; # hardnessAndResistance
public net.minecraft.block.AbstractBlock$Properties func_200944_c()Lnet/minecraft/block/AbstractBlock$Properties; # needsRandomTick
public net.minecraft.block.AbstractBlock$Properties func_200947_a(Lnet/minecraft/block/SoundType;)Lnet/minecraft/block/AbstractBlock$Properties; # sound
public net.minecraft.block.AbstractBlock$Properties func_208770_d()Lnet/minecraft/block/AbstractBlock$Properties; # variableOpacity
public net.minecraft.block.AbstractBlock$Properties func_222380_e()Lnet/minecraft/block/AbstractBlock$Properties; # noDrops
#group public net.minecraft.block.Block <init>
public net.minecraft.block.AbstractCoralPlantBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.AirBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.AttachedStemBlock <init>(Lnet/minecraft/block/StemGrownBlock;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.BarrierBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.BlastFurnaceBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.BreakableBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.BushBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CactusBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CakeBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CarpetBlock <init>(Lnet/minecraft/item/DyeColor;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CartographyTableBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CarvedPumpkinBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.ChestBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;Ljava/util/function/Supplier;)V
public net.minecraft.block.ChorusFlowerBlock <init>(Lnet/minecraft/block/ChorusPlantBlock;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.ChorusPlantBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CoralFanBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CoralFinBlock <init>(Lnet/minecraft/block/Block;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CoralPlantBlock <init>(Lnet/minecraft/block/Block;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CoralWallFanBlock <init>(Lnet/minecraft/block/Block;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CraftingTableBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.CropsBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.DeadBushBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.DeadCoralPlantBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.DeadCoralWallFanBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.DispenserBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.DoorBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.EnchantingTableBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.EndGatewayBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.EndPortalBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.EndRodBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.EnderChestBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.FarmlandBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.FletchingTableBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.FlowingFluidBlock <init>(Lnet/minecraft/fluid/FlowingFluid;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.FourWayBlock <init>(FFFFFLnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.FungusBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;Ljava/util/function/Supplier;)V
public net.minecraft.block.FurnaceBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.GrassPathBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.GrindstoneBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.HorizontalFaceBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.JigsawBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.JukeboxBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.KelpBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.KelpTopBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.LadderBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.LecternBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.LeverBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.LilyPadBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.LoomBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.MelonBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.NetherRootsBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.NetherWartBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.NyliumBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.PaneBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.PoweredRailBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.PressurePlateBlock <init>(Lnet/minecraft/block/PressurePlateBlock$Sensitivity;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.PumpkinBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.RailBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.RedstoneTorchBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.RedstoneWallTorchBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.RepeaterBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SaplingBlock <init>(Lnet/minecraft/block/trees/Tree;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.ScaffoldingBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SeaGrassBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SeaPickleBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SixWayBlock <init>(FLnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SkullBlock <init>(Lnet/minecraft/block/SkullBlock$ISkullType;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SkullPlayerBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SkullWallPlayerBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SmithingTableBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SmokerBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SnowBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SnowyDirtBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SpawnerBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SpongeBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.StairsBlock <init>(Lnet/minecraft/block/BlockState;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.StemBlock <init>(Lnet/minecraft/block/StemGrownBlock;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.StoneButtonBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.StructureBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.StructureVoidBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.SugarCaneBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.TallGrassBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.TorchBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;Lnet/minecraft/particles/IParticleData;)V
public net.minecraft.block.TrapDoorBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.WallSkullBlock <init>(Lnet/minecraft/block/SkullBlock$ISkullType;Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.WallTorchBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;Lnet/minecraft/particles/IParticleData;)V
public net.minecraft.block.WeightedPressurePlateBlock <init>(ILnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.WetSpongeBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.WitherSkeletonSkullBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.WitherSkeletonWallSkullBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
public net.minecraft.block.WoodButtonBlock <init>(Lnet/minecraft/block/AbstractBlock$Properties;)V
#endgroup
public net.minecraft.block.Block func_180637_b(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;I)V # dropXpOnBlockBreak
public net.minecraft.block.FireBlock func_220274_q(Lnet/minecraft/block/BlockState;)I # func_220274_q
public net.minecraft.block.FireBlock func_220275_r(Lnet/minecraft/block/BlockState;)I # func_220275_r
@ -12,7 +100,39 @@ public net.minecraft.client.Minecraft field_71446_o # textureManager
public net.minecraft.client.Minecraft func_184119_a(Lnet/minecraft/item/ItemStack;Lnet/minecraft/tileentity/TileEntity;)Lnet/minecraft/item/ItemStack; # storeTEInStack
public net.minecraft.client.Minecraft func_193986_ar()V # populateSearchTreeManager
public net.minecraft.client.audio.SoundEngine field_148622_c #sndHandler
protected net.minecraft.client.gui.IngameGui *
#group protected net.minecraft.client.gui.IngameGui *
protected net.minecraft.client.gui.IngameGui field_110328_d
protected net.minecraft.client.gui.IngameGui field_110329_b
protected net.minecraft.client.gui.IngameGui field_110330_c
protected net.minecraft.client.gui.IngameGui field_175189_D
protected net.minecraft.client.gui.IngameGui field_175190_E
protected net.minecraft.client.gui.IngameGui field_175191_F
protected net.minecraft.client.gui.IngameGui field_175192_A
protected net.minecraft.client.gui.IngameGui field_175193_B
protected net.minecraft.client.gui.IngameGui field_175194_C
protected net.minecraft.client.gui.IngameGui field_175195_w
protected net.minecraft.client.gui.IngameGui field_175196_v
protected net.minecraft.client.gui.IngameGui field_175197_u
protected net.minecraft.client.gui.IngameGui field_175198_t
protected net.minecraft.client.gui.IngameGui field_175199_z
protected net.minecraft.client.gui.IngameGui field_175200_y
protected net.minecraft.client.gui.IngameGui field_175201_x
protected net.minecraft.client.gui.IngameGui field_184049_t
protected net.minecraft.client.gui.IngameGui field_184050_w
protected net.minecraft.client.gui.IngameGui field_191743_I
protected net.minecraft.client.gui.IngameGui field_194811_H
protected net.minecraft.client.gui.IngameGui field_194812_I
protected net.minecraft.client.gui.IngameGui field_73837_f
protected net.minecraft.client.gui.IngameGui field_73838_g
protected net.minecraft.client.gui.IngameGui field_73839_d
protected net.minecraft.client.gui.IngameGui field_73840_e
protected net.minecraft.client.gui.IngameGui field_73841_b
protected net.minecraft.client.gui.IngameGui field_73842_c
protected net.minecraft.client.gui.IngameGui field_73844_j
protected net.minecraft.client.gui.IngameGui field_73845_h
protected net.minecraft.client.gui.IngameGui field_92016_l
protected net.minecraft.client.gui.IngameGui field_92017_k
#endgroup
protected net.minecraft.client.gui.IngameGui func_194805_e(F)V
protected net.minecraft.client.gui.IngameGui func_194808_p()V
protected net.minecraft.client.gui.IngameGui func_212303_b(Lnet/minecraft/entity/Entity;)V
@ -28,7 +148,7 @@ public net.minecraft.client.particle.ParticleManager func_199283_a(Lnet/minecraf
public net.minecraft.client.particle.ParticleManager func_215234_a(Lnet/minecraft/particles/ParticleType;Lnet/minecraft/client/particle/ParticleManager$IParticleMetaFactory;)V # registerFactory
public net.minecraft.client.particle.ParticleManager$IParticleMetaFactory
public net.minecraft.client.renderer.GameRenderer func_175069_a(Lnet/minecraft/util/ResourceLocation;)V #loadShader
private net.minecraft.client.renderer.ItemModelMesher field_199313_a
private net.minecraft.client.renderer.ItemModelMesher field_199313_a #force public -> private
public net.minecraft.client.renderer.ItemRenderer func_229112_a_(Lcom/mojang/blaze3d/matrix/MatrixStack;Lcom/mojang/blaze3d/vertex/IVertexBuilder;Ljava/util/List;Lnet/minecraft/item/ItemStack;II)V # renderQuads
public net.minecraft.client.renderer.entity.EntityRendererManager field_78729_o #renderers
public net.minecraft.client.renderer.entity.EntityRendererManager func_229087_a_(Lnet/minecraft/entity/EntityType;Lnet/minecraft/client/renderer/entity/EntityRenderer;)V # addRenderer
@ -38,7 +158,6 @@ public net.minecraft.client.renderer.model.BlockFaceUV$Deserializer <init>()V
public net.minecraft.client.renderer.model.BlockModel field_178315_d # parent
public net.minecraft.client.renderer.model.BlockModel field_178318_c # textures
public net.minecraft.client.renderer.model.BlockModel field_178322_i # ambientOcclusion
public net.minecraft.client.renderer.model.BlockModel func_187966_f()Ljava/util/List; # getOverrides
public net.minecraft.client.renderer.model.BlockPart func_178236_a(Lnet/minecraft/util/Direction;)[F # getFaceUvs
public net.minecraft.client.renderer.model.BlockPart$Deserializer <init>()V
public net.minecraft.client.renderer.model.BlockPartFace$Deserializer <init>()V
@ -51,9 +170,6 @@ public net.minecraft.client.renderer.model.ItemTransformVec3f$Deserializer field
public net.minecraft.client.renderer.model.ItemTransformVec3f$Deserializer field_178362_a # ROTATION_DEFAULT
protected net.minecraft.client.renderer.model.ModelBakery field_177598_f # resourceManager
protected net.minecraft.client.renderer.model.ModelBakery field_177602_b # LOCATIONS_BUILTIN_TEXTURES
public net.minecraft.client.renderer.model.ModelBakery field_177604_a # MODEL_MISSING
protected net.minecraft.client.renderer.model.ModelBakery field_177606_o # MODEL_GENERATED
protected net.minecraft.client.renderer.model.ModelBakery field_177616_r # MODEL_ENTITY
private-f net.minecraft.client.renderer.model.ModelBakery field_217853_J # field_217853_J - need to un-finalize so that we can delay initialization to after calling super() in ModelLoader
protected net.minecraft.client.renderer.model.ModelBakery func_177594_c(Lnet/minecraft/util/ResourceLocation;)Lnet/minecraft/client/renderer/model/BlockModel; # loadModel
private-f net.minecraft.client.renderer.tileentity.PistonTileEntityRenderer field_178462_c # blockRenderer - it's static so we need to un-finalize in case this class loads to early.
@ -120,10 +236,15 @@ public net.minecraft.entity.player.ServerPlayerEntity func_71117_bO()V
public net.minecraft.inventory.container.ContainerType <init>(Lnet/minecraft/inventory/container/ContainerType$IFactory;)V
public net.minecraft.inventory.container.ContainerType$IFactory
public net.minecraft.inventory.container.RepairContainer field_82856_l #RepairContainer/stackSizeToBeUsedInRepair
#group public net.minecraft.item.Item <init>
public net.minecraft.item.AxeItem <init>(Lnet/minecraft/item/IItemTier;FFLnet/minecraft/item/Item$Properties;)V
public net.minecraft.item.HoeItem <init>(Lnet/minecraft/item/IItemTier;IFLnet/minecraft/item/Item$Properties;)V
public net.minecraft.item.MusicDiscItem <init>(ILnet/minecraft/util/SoundEvent;Lnet/minecraft/item/Item$Properties;)V
public net.minecraft.item.PickaxeItem <init>(Lnet/minecraft/item/IItemTier;IFLnet/minecraft/item/Item$Properties;)V
public net.minecraft.item.ToolItem <init>(FFLnet/minecraft/item/IItemTier;Ljava/util/Set;Lnet/minecraft/item/Item$Properties;)V
#endgroup
public-f net.minecraft.item.ItemGroup field_78032_a # group array
public net.minecraft.item.ItemModelsProperties func_239418_a_(Lnet/minecraft/item/Item;Lnet/minecraft/util/ResourceLocation;Lnet/minecraft/item/IItemPropertyGetter;)V
public net.minecraft.item.PickaxeItem <init>(Lnet/minecraft/item/IItemTier;IFLnet/minecraft/item/Item$Properties;)V
public-f net.minecraft.item.crafting.Ingredient
protected net.minecraft.item.crafting.Ingredient <init>(Ljava/util/stream/Stream;)V
public+f net.minecraft.item.crafting.Ingredient func_199564_a(Lnet/minecraft/network/PacketBuffer;)V
@ -134,10 +255,8 @@ 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/ITag;)V
public net.minecraft.item.crafting.TippedArrowRecipe
private-f net.minecraft.loot.LootPool field_186455_c # rolls
private-f net.minecraft.loot.LootPool field_186456_d # bonusRolls
public net.minecraft.nbt.NumberNBT
public net.minecraft.network.status.server.SServerInfoPacket field_149297_a # GSON
public net.minecraft.particles.BasicParticleType <init>(Z)V
public net.minecraft.particles.ParticleType <init>(ZLnet/minecraft/particles/IParticleData$IDeserializer;)V
@ -149,9 +268,19 @@ public net.minecraft.tags.BlockTags func_199894_a(Ljava/lang/String;)Lnet/minecr
public net.minecraft.tags.EntityTypeTags func_232896_a_(Ljava/lang/String;)Lnet/minecraft/tags/ITag$INamedTag; # makeWrapperTag
public net.minecraft.tags.FluidTags func_206956_a(Ljava/lang/String;)Lnet/minecraft/tags/ITag$INamedTag; # makeWrapperTag
public net.minecraft.tags.ItemTags func_199901_a(Ljava/lang/String;)Lnet/minecraft/tags/ITag$INamedTag; # makeWrapperTag
protected-f net.minecraft.tags.NetworkTagManager field_199719_a # blocks
protected-f net.minecraft.tags.NetworkTagManager field_199720_b # items
protected-f net.minecraft.tags.NetworkTagManager field_205705_c # fluids
protected-f net.minecraft.tags.NetworkTagManager field_215299_d # entityTypes
public net.minecraft.tileentity.HopperTileEntity func_145896_c(I)V # setTransferCooldown
public net.minecraft.tileentity.HopperTileEntity func_174914_o()Z # mayTransfer
public net.minecraft.util.DamageSource *() #All methods public, most are already
#group public net.minecraft.util.DamageSource *() #All methods public, most are already
public net.minecraft.util.DamageSource <init>(Ljava/lang/String;)V
public net.minecraft.util.DamageSource func_151518_m()Lnet/minecraft/util/DamageSource;
public net.minecraft.util.DamageSource func_76348_h()Lnet/minecraft/util/DamageSource;
public net.minecraft.util.DamageSource func_76359_i()Lnet/minecraft/util/DamageSource;
public net.minecraft.util.DamageSource func_76361_j()Lnet/minecraft/util/DamageSource;
#endgroup
protected net.minecraft.util.ObjectIntIdentityMap field_148748_b # internal index list
protected net.minecraft.util.ObjectIntIdentityMap field_148749_a # internal map
protected net.minecraft.util.ObjectIntIdentityMap field_195868_a # nextId
@ -167,8 +296,6 @@ 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_175701_a(Lnet/minecraft/util/math/BlockPos;)Z # isValid
public net.minecraft.world.World func_189509_E(Lnet/minecraft/util/math/BlockPos;)Z # isOutsideBuildHeight
public net.minecraft.world.biome.Biome func_180626_a(Lnet/minecraft/util/math/BlockPos;)F # getTemperature
public net.minecraft.world.biome.DeepFrozenOceanBiome func_180626_a(Lnet/minecraft/util/math/BlockPos;)F # getTemperature
public net.minecraft.world.biome.FrozenOceanBiome func_180626_a(Lnet/minecraft/util/math/BlockPos;)F # getTemperature
@ -178,8 +305,4 @@ public net.minecraft.world.gen.layer.LayerUtil func_202829_a(JLnet/minecraft/wor
private-f net.minecraft.world.server.ChunkHolder field_219320_o # block update location
public net.minecraft.world.server.ServerChunkProvider field_186029_c # chunkGenerator
public net.minecraft.world.server.ServerChunkProvider field_73251_h # worldObj
public net.minecraft.world.storage.FolderName <init>(Ljava/lang/String;)V # constructor
protected-f net.minecraft.tags.NetworkTagManager field_215299_d # entityTypes
protected-f net.minecraft.tags.NetworkTagManager field_205705_c # fluids
protected-f net.minecraft.tags.NetworkTagManager field_199720_b # items
protected-f net.minecraft.tags.NetworkTagManager field_199719_a # blocks
public net.minecraft.world.storage.FolderName <init>(Ljava/lang/String;)V # constructor