md-5 / SpecialSource

Automatic generator and renamer of jar obfuscation mappings.
Other
206 stars 50 forks source link

AT works with SS, but does not work in FML at runtime #22

Open AbrarSyed opened 10 years ago

AbrarSyed commented 10 years ago

This works with the AT loader in SS, but does not work in FML at runtime. protected net.minecraft.entity.monster.EntityCreeper.field_70833_d #timeSinceIgnited

This is what FML loads, and this is how its supposed to be. protected net.minecraft.entity.monster.EntityCreeper field_70833_d #timeSinceIgnited

The only difference is that the period between the className and the field/method name has been changed to a space.

md-5 commented 10 years ago

? But you said SS works

AbrarSyed commented 10 years ago

Yes, it works when it shouldn't. Causing people to have issues using their AT at runtime when it works at dev.

ReikaKalseki commented 10 years ago

Basically, the issue is an inconsistency in behavior; there is no good reason for a file to work in the development environment when it fails to do so at runtime. This leads to needless hours - or in my case, WEEKS - spent searching for other bugs.

md-5 commented 10 years ago

Our code is basically just a copy pasta from FML, so this must be something that was fixed in FML. Should be as trivial as checking there are 3 parts to the AT.

OR

FML should be more permissive like we are since its a correctable error :p

cpw commented 10 years ago

Don't care. You might have been a copy some years ago, you're probably not now @md-5. The period was removed. No, I'm not gonna add it back, it's a pain enough as it is handling parsing that file.

LexManos commented 10 years ago

Note: As far as I can remember FML has never supported a . there. We have always used the space to split the different segments as it makes it really easy to determine if the modifier is targeting a class {no spaces} field {one space} or method {two spaces}

SS is more permissive in the format, it should not be.

md-5 commented 10 years ago

@AbrarSyed can I please have some more sample ATs using method descriptors too. Not sure where they are in the FML repos

ReikaKalseki commented 10 years ago

Here are some (in the incorrect dot format).

protected net.minecraft.client.gui.inventory.GuiContainer.func_146977_a(Lnet/minecraft/inventory/Slot;)V #drawSlotInventory

public net.minecraft.client.audio.SoundEventAccessor.(Lnet/minecraft/client/audio/SoundPoolEntry;I)V #constructor

AbrarSyed commented 10 years ago

taken from the forge AT, these lines work in both dev and runtime.

fields

public net.minecraft.world.gen.structure.StructureMineshaftPieces field_78818_a
public net.minecraft.world.gen.structure.ComponentScatteredFeaturePieces$DesertPyramid field_74941_i
public net.minecraft.world.gen.structure.ComponentScatteredFeaturePieces$JunglePyramid field_74943_l
public net.minecraft.world.gen.structure.ComponentScatteredFeaturePieces$JunglePyramid field_74944_m

methods

public net.minecraft.item.Item func_77656_e(I)Lnet.minecraft.item.Item; #setMaxDamage
public-f net.minecraft.item.Item func_77650_f(Lnet.minecraft.item.ItemStack;)Lnet.minecraft.util.IIcon; #getIcon is Final for unknown reason
public net.minecraft.item.Item func_77627_a(Z)Lnet.minecraft.item.Item; #setHasSubtypes
public net.minecraft.item.Item func_77631_c(Ljava.lang.String;)Lnet.minecraft.item.Item; #setPotionEffect
public net.minecraft.item.Item func_111206_d(Ljava.lang.String;)Lnet.minecraft.item.Item; #setTextureName