md-5 / SpecialSource

Automatic generator and renamer of jar obfuscation mappings.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

AbrarSyed opened this issue · comments

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.

commented

? But you said SS works

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

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.

commented

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

commented

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.

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.

commented

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

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

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