Код: Выделить всё
@Retention(RUNTIME)
@Target({FIELD, METHOD})
@Inherited
public @interface BindTickrate {
public float Float() default 0;
}
< /code>
и 2 классы < /p>
public MouseFollower{
@BindTickrate(Float = 960)
protected float speed;
public void onTick(){
//look at the mouse
//move to the mouse with speed;
}
public MouseFollower2 extends MouseFollower{
@BindTickrate(Float = 480)
protected float speed;
}
< /code>
Идея в том, что у меня есть метод OntickChange () для расчета переменных @bindtickrate < /p>
public void onTickchange(){
//tickrate seted
System.out.println("Set tickrate: "+tickrate);
System.out.println(this.getClass().getName());
for(Field field: this.getClass().getDeclaredFields()){
BindTickrate annotation = null;
if((annotation = field.getAnnotation(BindTickrate.class)) != null) {
System.out.println("Found "+field)
field.setAccessible(true);
switch(field.getType().getName()) {
case "float" -> {field.setFloat(this, annotation.Float() / tickrate);}
}
}
System.out.println("Seted "+field.getFloat(this));
}
}
< /code>
Mousefollower реализует класс с помощью метода OntickChange. И я получаю выход так: < /p>
Set tickrate: 100
MouseFollower
Found protected float MouseFollower.speed
Seted 9.6
Set tickrate: 100
MouseFollower2
Found protected float MouseFollower2.speed
Seted 4.8
< /code>
Но MouseFollower2 не имеет скорости, потому что этот метод устанавливает MouseFollower2.Speed на 4.8, но в методе наследника OnTick () он использует MouseFollower.Speed, который равен 0, потому что не установлен.
Если я установите мышиный цвет. и MouseFollower2.speed. Установите 2, но используя 1.
Если я не объявляю MouseFollower2.speed, то как изменить полю @bindtickrate float < /code>? Перейдите на мышь без какого -либо мамбо Jumbo в подклассах, но @Override Подробнее здесь: https://stackoverflow.com/questions/794 ... nheritance