From ab29145328504efbc0762524522953cfef2cf21d Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 29 Jun 2020 19:33:30 -0700 Subject: [PATCH] Re-write checkATs function and automate making Items/Blocks public. --- build.gradle | 249 +++++++++++++++--- mdk/build.gradle | 1 + .../net/minecraft/block/BushBlock.java.patch | 2 +- .../minecraft/block/DeadBushBlock.java.patch | 2 +- .../block/FlowingFluidBlock.java.patch | 2 +- .../block/PoweredRailBlock.java.patch | 2 +- .../minecraft/block/SeaGrassBlock.java.patch | 2 +- .../minecraft/block/StairsBlock.java.patch | 2 +- .../minecraft/block/TallGrassBlock.java.patch | 2 +- .../minecraft/item/MusicDiscItem.java.patch | 2 +- .../resources/META-INF/accesstransformer.cfg | 167 ++++++++++-- 11 files changed, 364 insertions(+), 69 deletions(-) diff --git a/build.gradle b/build.gradle index 275c799ca..3efd96642 100644 --- a/build.gradle +++ b/build.gradle @@ -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('')) + 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('')) + 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 (''.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('')) { + 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 { diff --git a/mdk/build.gradle b/mdk/build.gradle index 9b0d65070..321d61e58 100644 --- a/mdk/build.gradle +++ b/mdk/build.gradle @@ -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. diff --git a/patches/minecraft/net/minecraft/block/BushBlock.java.patch b/patches/minecraft/net/minecraft/block/BushBlock.java.patch index e426c8f86..180530b11 100644 --- a/patches/minecraft/net/minecraft/block/BushBlock.java.patch +++ b/patches/minecraft/net/minecraft/block/BushBlock.java.patch @@ -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 @@ diff --git a/patches/minecraft/net/minecraft/block/DeadBushBlock.java.patch b/patches/minecraft/net/minecraft/block/DeadBushBlock.java.patch index 9b39dcdd2..0e82c93b5 100644 --- a/patches/minecraft/net/minecraft/block/DeadBushBlock.java.patch +++ b/patches/minecraft/net/minecraft/block/DeadBushBlock.java.patch @@ -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_) { diff --git a/patches/minecraft/net/minecraft/block/FlowingFluidBlock.java.patch b/patches/minecraft/net/minecraft/block/FlowingFluidBlock.java.patch index 56579e483..67ac9b896 100644 --- a/patches/minecraft/net/minecraft/block/FlowingFluidBlock.java.patch +++ b/patches/minecraft/net/minecraft/block/FlowingFluidBlock.java.patch @@ -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 @@ diff --git a/patches/minecraft/net/minecraft/block/PoweredRailBlock.java.patch b/patches/minecraft/net/minecraft/block/PoweredRailBlock.java.patch index 08d65a9a4..e5a223659 100644 --- a/patches/minecraft/net/minecraft/block/PoweredRailBlock.java.patch +++ b/patches/minecraft/net/minecraft/block/PoweredRailBlock.java.patch @@ -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); + } diff --git a/patches/minecraft/net/minecraft/block/SeaGrassBlock.java.patch b/patches/minecraft/net/minecraft/block/SeaGrassBlock.java.patch index 5f44f841c..30881bb25 100644 --- a/patches/minecraft/net/minecraft/block/SeaGrassBlock.java.patch +++ b/patches/minecraft/net/minecraft/block/SeaGrassBlock.java.patch @@ -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_) { diff --git a/patches/minecraft/net/minecraft/block/StairsBlock.java.patch b/patches/minecraft/net/minecraft/block/StairsBlock.java.patch index 1ac6dd5f3..82b8795ce 100644 --- a/patches/minecraft/net/minecraft/block/StairsBlock.java.patch +++ b/patches/minecraft/net/minecraft/block/StairsBlock.java.patch @@ -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(); diff --git a/patches/minecraft/net/minecraft/block/TallGrassBlock.java.patch b/patches/minecraft/net/minecraft/block/TallGrassBlock.java.patch index 040fa5474..6fc2322b1 100644 --- a/patches/minecraft/net/minecraft/block/TallGrassBlock.java.patch +++ b/patches/minecraft/net/minecraft/block/TallGrassBlock.java.patch @@ -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_) { diff --git a/patches/minecraft/net/minecraft/item/MusicDiscItem.java.patch b/patches/minecraft/net/minecraft/item/MusicDiscItem.java.patch index de34a7e02..6ad83191b 100644 --- a/patches/minecraft/net/minecraft/item/MusicDiscItem.java.patch +++ b/patches/minecraft/net/minecraft/item/MusicDiscItem.java.patch @@ -12,7 +12,7 @@ + private final java.util.function.Supplier 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_; diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 2796d1c9a..e526b0b1a 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -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 +public net.minecraft.block.AbstractCoralPlantBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.AirBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.AttachedStemBlock (Lnet/minecraft/block/StemGrownBlock;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.BarrierBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.BlastFurnaceBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.BreakableBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.BushBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CactusBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CakeBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CarpetBlock (Lnet/minecraft/item/DyeColor;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CartographyTableBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CarvedPumpkinBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.ChestBlock (Lnet/minecraft/block/AbstractBlock$Properties;Ljava/util/function/Supplier;)V +public net.minecraft.block.ChorusFlowerBlock (Lnet/minecraft/block/ChorusPlantBlock;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.ChorusPlantBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CoralFanBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CoralFinBlock (Lnet/minecraft/block/Block;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CoralPlantBlock (Lnet/minecraft/block/Block;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CoralWallFanBlock (Lnet/minecraft/block/Block;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CraftingTableBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.CropsBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.DeadBushBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.DeadCoralPlantBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.DeadCoralWallFanBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.DispenserBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.DoorBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.EnchantingTableBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.EndGatewayBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.EndPortalBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.EndRodBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.EnderChestBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.FarmlandBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.FletchingTableBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.FlowingFluidBlock (Lnet/minecraft/fluid/FlowingFluid;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.FourWayBlock (FFFFFLnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.FungusBlock (Lnet/minecraft/block/AbstractBlock$Properties;Ljava/util/function/Supplier;)V +public net.minecraft.block.FurnaceBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.GrassPathBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.GrindstoneBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.HorizontalFaceBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.JigsawBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.JukeboxBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.KelpBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.KelpTopBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.LadderBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.LecternBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.LeverBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.LilyPadBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.LoomBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.MelonBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.NetherRootsBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.NetherWartBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.NyliumBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.PaneBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.PoweredRailBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.PressurePlateBlock (Lnet/minecraft/block/PressurePlateBlock$Sensitivity;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.PumpkinBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.RailBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.RedstoneTorchBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.RedstoneWallTorchBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.RepeaterBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SaplingBlock (Lnet/minecraft/block/trees/Tree;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.ScaffoldingBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SeaGrassBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SeaPickleBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SixWayBlock (FLnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SkullBlock (Lnet/minecraft/block/SkullBlock$ISkullType;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SkullPlayerBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SkullWallPlayerBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SmithingTableBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SmokerBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SnowBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SnowyDirtBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SpawnerBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SpongeBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.StairsBlock (Lnet/minecraft/block/BlockState;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.StemBlock (Lnet/minecraft/block/StemGrownBlock;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.StoneButtonBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.StructureBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.StructureVoidBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.SugarCaneBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.TallGrassBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.TorchBlock (Lnet/minecraft/block/AbstractBlock$Properties;Lnet/minecraft/particles/IParticleData;)V +public net.minecraft.block.TrapDoorBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.WallSkullBlock (Lnet/minecraft/block/SkullBlock$ISkullType;Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.WallTorchBlock (Lnet/minecraft/block/AbstractBlock$Properties;Lnet/minecraft/particles/IParticleData;)V +public net.minecraft.block.WeightedPressurePlateBlock (ILnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.WetSpongeBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.WitherSkeletonSkullBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.WitherSkeletonWallSkullBlock (Lnet/minecraft/block/AbstractBlock$Properties;)V +public net.minecraft.block.WoodButtonBlock (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 ()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 ()V public net.minecraft.client.renderer.model.BlockPartFace$Deserializer ()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 (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 public net.minecraft.item.AxeItem (Lnet/minecraft/item/IItemTier;FFLnet/minecraft/item/Item$Properties;)V +public net.minecraft.item.HoeItem (Lnet/minecraft/item/IItemTier;IFLnet/minecraft/item/Item$Properties;)V +public net.minecraft.item.MusicDiscItem (ILnet/minecraft/util/SoundEvent;Lnet/minecraft/item/Item$Properties;)V +public net.minecraft.item.PickaxeItem (Lnet/minecraft/item/IItemTier;IFLnet/minecraft/item/Item$Properties;)V +public net.minecraft.item.ToolItem (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 (Lnet/minecraft/item/IItemTier;IFLnet/minecraft/item/Item$Properties;)V public-f net.minecraft.item.crafting.Ingredient protected net.minecraft.item.crafting.Ingredient (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 (Lnet/minecraft/item/ItemStack;)V public net.minecraft.item.crafting.Ingredient$TagList public net.minecraft.item.crafting.Ingredient$TagList (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 (Z)V public net.minecraft.particles.ParticleType (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 (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 (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 \ No newline at end of file +public net.minecraft.world.storage.FolderName (Ljava/lang/String;)V # constructor \ No newline at end of file