From 63cdc7a72ecd4594883a0299223ead0395d1967f Mon Sep 17 00:00:00 2001 From: SquidDev Date: Sun, 14 May 2017 17:00:14 +0100 Subject: [PATCH] Replace reflection with access transformers This makes the code slightly neater and allows us to catch places where the variable/function has been renamed between versions. --- build.gradle | 6 +++ .../shared/common/BlockGeneric.java | 2 +- .../shared/media/items/RecordMedia.java | 3 +- .../shared/proxy/CCTurtleProxyCommon.java | 41 +++---------------- .../proxy/ComputerCraftProxyCommon.java | 4 +- .../turtle/core/TurtleCompareCommand.java | 19 +-------- .../resources/META-INF/computercraft_at.cfg | 6 +++ 7 files changed, 22 insertions(+), 59 deletions(-) create mode 100644 src/main/resources/META-INF/computercraft_at.cfg diff --git a/build.gradle b/build.gradle index a31b6f92f..af92f70e0 100644 --- a/build.gradle +++ b/build.gradle @@ -63,6 +63,12 @@ } +jar { + manifest { + attributes('FMLAT': 'computercraft_at.cfg') + } +} + processResources { // this will ensure that this task is redone when the versions change. diff --git a/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java b/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java index dabbe3c81..c533ab917 100644 --- a/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java +++ b/src/main/java/dan200/computercraft/shared/common/BlockGeneric.java @@ -134,7 +134,7 @@ public final ItemStack getPickBlock( @Nonnull IBlockState state, RayTraceResult } @Override - protected final ItemStack createStackedBlock( @Nonnull IBlockState state ) + public final ItemStack createStackedBlock( @Nonnull IBlockState state ) { return null; } diff --git a/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java b/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java index a458bc6c1..1ef2f7a8c 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java +++ b/src/main/java/dan200/computercraft/shared/media/items/RecordMedia.java @@ -13,7 +13,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.SoundEvent; import net.minecraft.world.World; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import javax.annotation.Nonnull; @@ -46,7 +45,7 @@ public String getAudioTitle( @Nonnull ItemStack stack ) public SoundEvent getAudio( @Nonnull ItemStack stack ) { ItemRecord itemRecord = (ItemRecord)stack.getItem(); - return ObfuscationReflectionHelper.getPrivateValue(ItemRecord.class, itemRecord, "field_185076_b"); + return itemRecord.sound; } @Override diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index a2661d834..e0aa4820c 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -38,7 +38,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDropsEvent; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.EntityRegistry; @@ -180,26 +179,12 @@ public void setEntityDropConsumer( Entity entity, IEntityDropConsumer consumer ) { if( !m_dropConsumers.containsKey( entity ) ) { - boolean captured = ObfuscationReflectionHelper.getPrivateValue( - Entity.class, - entity, - "captureDrops" - ); + boolean captured = entity.captureDrops; if( !captured ) { - ObfuscationReflectionHelper.setPrivateValue( - Entity.class, - entity, - Boolean.TRUE, - "captureDrops" - ); - - ArrayList items = ObfuscationReflectionHelper.getPrivateValue( - Entity.class, - entity, - "capturedDrops" - ); + entity.captureDrops = true; + ArrayList items = entity.capturedDrops; if( items == null || items.size() == 0 ) { @@ -214,26 +199,12 @@ public void clearEntityDropConsumer( Entity entity ) { if( m_dropConsumers.containsKey( entity ) ) { - boolean captured = ObfuscationReflectionHelper.getPrivateValue( - Entity.class, - entity, - "captureDrops" - ); + boolean captured = entity.captureDrops; if( captured ) { - ObfuscationReflectionHelper.setPrivateValue( - Entity.class, - entity, - Boolean.FALSE, - "captureDrops" - ); - - ArrayList items = ObfuscationReflectionHelper.getPrivateValue( - Entity.class, - entity, - "capturedDrops" - ); + entity.captureDrops = false; + ArrayList items = entity.capturedDrops; if( items != null ) { diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index 749abf8e8..1b3b4dbb7 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -73,7 +73,6 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -130,8 +129,7 @@ public String getRecordInfo( ItemStack recordStack ) if (item instanceof ItemRecord) { ItemRecord record = (ItemRecord) item; - String key = ObfuscationReflectionHelper.getPrivateValue( ItemRecord.class, record, "field_185077_c" ); - return StringUtil.translateToLocal( key ); + return StringUtil.translateToLocal( record.displayName ); } return null; } diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java index f075a8354..84d5bec88 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCompareCommand.java @@ -17,10 +17,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.ReflectionHelper; import javax.annotation.Nonnull; -import java.lang.reflect.Method; public class TurtleCompareCommand implements ITurtleCommand { @@ -58,22 +56,7 @@ public TurtleCommandResult execute( @Nonnull ITurtleAccess turtle ) // Try createStackedBlock first if( !lookAtBlock.hasTileEntity( lookAtState ) ) { - try - { - Method method = ReflectionHelper.findMethod( - Block.class, lookAtBlock, - new String[]{ "func_149644_j", "j", "createStackedBlock" }, - IBlockState.class - ); - if( method != null ) - { - lookAtStack = (ItemStack)method.invoke( lookAtBlock, lookAtState ); - } - } - catch( Exception e ) - { - // ??? - } + lookAtStack = lookAtBlock.createStackedBlock( lookAtState ); } // See if the block drops anything with the same ID as itself diff --git a/src/main/resources/META-INF/computercraft_at.cfg b/src/main/resources/META-INF/computercraft_at.cfg new file mode 100644 index 000000000..78a9879da --- /dev/null +++ b/src/main/resources/META-INF/computercraft_at.cfg @@ -0,0 +1,6 @@ +# RecordMedia (and related methods) +public net.minecraft.item.ItemRecord field_185076_b # sound +public net.minecraft.item.ItemRecord field_185077_c # displayName + +# TurtleCompareCommand +public net.minecraft.block.Block func_180643_i(Lnet/minecraft/block/state/IBlockState;)Lnet/minecraft/item/ItemStack; # createStackedBlock