====== Аксессоры(Получение доступа) ======
Аксессоры Миксина позволяют вам получать доступ к полям и методам, которые не являются видимыми (частными) или финальными.
===== @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);