Access Transformers

Access Transformers

Нет прав для скачивания
2,505
81
397
Dahaka добавил(а) новый ресурс:

Access Transformers - Доступ к приватным полям и методам без рефлексии

Во время написания мода иногда возникают ситуации, когда хочется использовать приватные методы и поля данных, но, к сожалению, IDE нам не позволяет это сделать. Первое, что приходит в голову, это использовать возможности рефлексии (преимущественно ReflectionHelper). И, естественно, это плохое решение проблемы, начиная с того, что падает производительность, заканчивая уродованием кода.

Но решение есть - трансформеры доступа (Access Transformers - AT). Смысл в том, что они...

Узнать больше об этом ресурсе...
 

CMTV

Основатель
Администратор
1,304
4
601
Отлично. Даже придраться особо не получается)
 

CMTV

Основатель
Администратор
1,304
4
601
В какой раздел учебника лучше поместить статью? В "Основы Forge" или в "Дополнительно"?
Вообще часто приходится заниматься подобным с полями/методами майна?
 
1,200
37
237
Вот несколько полей, с которыми не работает трансформатор:
FishingHooks#fish FishingHooks#junk FishingHooks#treasure
Возможно, что и все остальные поля/методы класса.

П. С. А возможно, чтго в этот раз у меня не получилось ¯\_(ツ)_/¯
 
2,505
81
397
Для полей можно спокойно использовать *. Например, если взять мой пример с ItemStack *, то сразу видно, что с форжевской капы инкапсуляция не снимается. А так на самом деле, у меня порядка 50 строк в файле и все, что мне нужно было - работает. Могу скинуть свой файл, если интересно.
 

CMTV

Основатель
Администратор
1,304
4
601
Скинь сюда. Его тоже стоит добавить как пример)
 

CMTV

Основатель
Администратор
1,304
4
601
И еще. Выполнение gradlew clean setupDecompWorkspace --refresh-dependencies никак не повлияет на файлы самого мода?
 
2,505
81
397
Нет, никак не повлияет.

Код:
public net.minecraft.entity.Entity *
public net.minecraft.entity.Entity func_145775_I()V #doBlockCollisions
public-f net.minecraft.entity.EntityLivingBase *
public net.minecraft.entity.projectile.EntityArrow *
public net.minecraft.entity.player.EntityPlayer *
public net.minecraft.entity.player.InventoryPlayer *
public net.minecraft.entity.player.InventoryPlayer *()
public net.minecraft.entity.EntityTrackerEntry *
public net.minecraft.entity.EntityTrackerEntry *()

public net.minecraft.entity.player.EntityPlayerMP func_70695_b(Lnet/minecraft/potion/PotionEffect;Z)V #onChangedPotionEffect
public net.minecraft.entity.EntityLivingBase func_70695_b(Lnet/minecraft/potion/PotionEffect;Z)V #onChangedPotionEffect
public net.minecraft.entity.player.EntityPlayerMP func_70670_a(Lnet/minecraft/potion/PotionEffect;)V #onNewPotionEffect
public net.minecraft.entity.EntityLivingBase func_70670_a(Lnet/minecraft/potion/PotionEffect;)V #onNewPotionEffect
public net.minecraft.entity.EntityLivingBase func_110146_f(FF)F #func_110146_f
public net.minecraft.entity.EntityLiving func_110146_f(FF)F #func_110146_f

public net.minecraft.inventory.Container func_75146_a(Lnet/minecraft/inventory/Slot;)Lnet/minecraft/inventory/Slot; #addSlotToContainer
public net.minecraft.inventory.Container func_75135_a(Lnet/minecraft/item/ItemStack;IIZ)Z #mergeItemStack
public net.minecraft.inventory.ContainerChest *
public net.minecraft.inventory.Slot *
public-f net.minecraft.potion.Potion *
public net.minecraft.potion.PotionEffect *
public net.minecraft.nbt.NBTTagCompound *
public net.minecraft.nbt.NBTTagList *
public-f net.minecraft.util.ChatComponentTranslation *
public-f net.minecraft.util.ChatComponentText *
public net.minecraft.util.AxisAlignedBB *()
public net.minecraft.util.Vec3 *()
public net.minecraft.network.NetHandlerPlayServer *

public net.minecraft.client.gui.Gui *
public net.minecraft.client.gui.GuiScreen *
public net.minecraft.client.gui.inventory.GuiContainer *
public net.minecraft.client.gui.inventory.GuiContainer func_146977_a(Lnet/minecraft/inventory/Slot;)V #drawSlot
public net.minecraft.client.gui.inventory.GuiContainer func_146981_a(Lnet/minecraft/inventory/Slot;II)Z #isMouseOverSlot
public net.minecraft.client.gui.inventory.GuiContainer func_146982_a(Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V #drawItemStack
public net.minecraft.client.gui.inventory.GuiContainer func_146980_g()V #updateDragSplitting
public net.minecraft.client.gui.inventory.GuiContainer func_146975_c(II)Lnet/minecraft/inventory/Slot; #getSlotAtPosition
public net.minecraft.client.gui.GuiNewChat *
public net.minecraft.client.gui.GuiNewChat *()
public net.minecraft.client.gui.GuiChat *
public net.minecraft.client.gui.FontRenderer *
public net.minecraft.client.gui.FontRenderer *()

public net.minecraft.client.audio.SoundHandler *
public net.minecraft.client.audio.SoundManager *
public net.minecraft.client.shader.ShaderGroup *
public net.minecraft.client.renderer.RenderGlobal *
public net.minecraft.client.renderer.EntityRenderer *
public net.minecraft.client.renderer.EntityRenderer *()
public net.minecraft.client.renderer.entity.Render *
public net.minecraft.client.renderer.ImageBufferDownload *
public-f net.minecraft.client.renderer.texture.TextureUtil *
public net.minecraft.client.renderer.Tessellator *
public net.minecraft.client.renderer.culling.Frustrum *

public net.minecraft.client.network.NetHandlerPlayClient field_147300_g #clientWorldController
 

Icosider

Kotliner
Администратор
3,603
99
664
Дахака, для изменения конструктора ещё добавь:
Java:
public net.minecraft.client.audio.SoundEventAccessor <init>(Lnet/minecraft/client/audio/SoundPoolEntry;I)V
 
608
5
15
А случайно нельзя прописать net.* что-бы всё что только можно стало публичным?
 
476
9
39
Добавь про вложенные классы.(важно!)
class$subclass
Позже скину полную строку.
И про главный пример не забудь (forge_at.cfg)
Там как раз субклассы есть.
 
476
9
39
А да, чего-то не заметил :|
На волне гайдов было бы круто если бы про java модельки на 1.11+ был туториал, хотя возможно что-нибудь и сам напишу, но это не точно. Ибо оптифайн бракует модельки
 

Icosider

Kotliner
Администратор
3,603
99
664
А да, чего-то не заметил :|
На волне гайдов было бы круто если бы про java модельки на 1.11+ был туториал, хотя возможно что-нибудь и сам напишу, но это не точно. Ибо оптифайн бракует модельки
Гайд уже был, а чтобы делать такие модельки юзай tabula или т.п. моды.
 
2,505
81
397
Дак там же есть json модельки. Зачем возвращаться к старому? А нужна анимация - используешь скелетку.
 

Icosider

Kotliner
Администратор
3,603
99
664
Дак там же есть json модельки. Зачем возвращаться к старому? А нужна анимация - используешь скелетку.
Броню на сколько я знаю проблемотично через джсон делать, так что полюбэ старый способ. А скелетку они вряд ли сделают.
 
Сверху