====== Аксессоры(Получение доступа) ====== Аксессоры Миксина позволяют вам получать доступ к полям и методам, которые не являются видимыми (частными) или финальными. ===== @Accessor ===== ''@Accessor'' позволяет вам получать доступ к полям. Предположим, мы хотим получить доступ к полю ''itemUseCooldown'' класса ''MinecraftClient''. ==== Получение значения из поля ==== @Mixin(MinecraftClient.class) public interface MinecraftClientAccessor { @Accessor int getItemUseCooldown(); } Использование: int itemUseCooldown = ((MinecraftClientAccessor) MinecraftClient.getInstance()).getItemUseCooldown(); ==== Установка значения в поле ==== @Mixin(MinecraftClient.class) public interface MinecraftClientAccessor { @Accessor("itemUseCooldown") public void setItemUseCooldown(int itemUseCooldown); } Использование: ((MinecraftClientAccessor) MinecraftClient.getInstance()).setItemUseCooldown(100); ===== Аксессоры для статических полей ===== Предположим, мы хотим получить доступ к полю ''BIOMES'' класса ''VanillaLayeredBiomeSource''. ====Получение значения из поля ==== @Mixin(VanillaLayeredBiomeSource.class) public interface VanillaLayeredBiomeSourceAccessor { @Accessor("BIOMES") public static List> getBiomes() { throw new AssertionError(); } } Использование: List> biomes = VanillaLayeredBiomeSourceAccessor.getBiomes(); ==== Установка значения в поле ==== @Mixin(VanillaLayeredBiomeSource.class) public interface VanillaLayeredBiomeSourceAccessor { @Accessor("BIOMES") public static void setBiomes(List> biomes) { throw new AssertionError(); } } Использование: VanillaLayeredBiomeSourceAccessor.setBiomes(biomes); ===== Инвокеры(Вызыватели) ===== ''@Invoker'' позволяет вам получать доступ к методам. Предположим, мы хотим вызвать метод ''teleportTo'' класса ''EndermanEntity''. @Mixin(EndermanEntity.class) public interface EndermanEntityInvoker { @Invoker("teleportTo") public boolean invokeTeleportTo(double x, double y, double z); } Использование: EndermanEntity enderman = ...; ((EndermanEntityInvoker) enderman).invokeTeleportTo(0.0D, 70.0D, 0.0D); ===== Инвокеры для статических методов ===== Предположим, мы хотим вызвать метод ''registerPotionType'' класса ''BrewingRecipeRegistry''. @Mixin(BrewingRecipeRegistry.class) public interface BrewingRecipeRegistryInvoker { @Invoker("registerPotionType") public static void invokeRegisterPotionType(Item item) { throw new AssertionError(); } } Использование: BrewingRecipeRegistryInvoker.invokeRegisterPotionType(item);