ru:tutorial:mixin_accessors
Table of Contents
Аксессоры(Получение доступа)
Аксессоры Миксина позволяют вам получать доступ к полям и методам, которые не являются видимыми (частными) или финальными.
@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<RegistryKey<Biome>> getBiomes() { throw new AssertionError(); } }
Использование:
List<RegistryKey<Biome>> biomes = VanillaLayeredBiomeSourceAccessor.getBiomes();
Установка значения в поле
@Mixin(VanillaLayeredBiomeSource.class) public interface VanillaLayeredBiomeSourceAccessor { @Accessor("BIOMES") public static void setBiomes(List<RegistryKey<Biome>> 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);
ru/tutorial/mixin_accessors.txt · Last modified: 2022/03/12 16:04 by 127.0.0.1