forked from LogBlock/LogBlock
improve Reflections.isSignWaxed
This commit is contained in:
@ -12,24 +12,49 @@ public class Reflections {
|
||||
public static boolean isSignWaxed(Sign sign) {
|
||||
try {
|
||||
if (FIELD_CraftBlockEntityState_snapshot == null) {
|
||||
FIELD_CraftBlockEntityState_snapshot = sign.getClass().getSuperclass().getDeclaredField("snapshot");
|
||||
FIELD_CraftBlockEntityState_snapshot.setAccessible(true);
|
||||
Class<?> superClass = sign.getClass().getSuperclass();
|
||||
while (superClass != null) {
|
||||
try {
|
||||
FIELD_CraftBlockEntityState_snapshot = superClass.getDeclaredField("snapshot");
|
||||
FIELD_CraftBlockEntityState_snapshot.setAccessible(true);
|
||||
break;
|
||||
} catch (NoSuchFieldException ignored) {
|
||||
}
|
||||
superClass = superClass.getSuperclass();
|
||||
}
|
||||
}
|
||||
if (FIELD_CraftBlockEntityState_snapshot == null) {
|
||||
LogBlock.getInstance().getLogger().log(Level.SEVERE, "Reflections: Sign field 'snapshot' not found");
|
||||
return false;
|
||||
}
|
||||
Object snapshot = FIELD_CraftBlockEntityState_snapshot.get(sign);
|
||||
if (snapshot == null) {
|
||||
LogBlock.getInstance().getLogger().log(Level.SEVERE, "Reflections: Sign snapshot is null?");
|
||||
return false;
|
||||
}
|
||||
if (FIELD_SignBlockEntity_isWaxed == null) {
|
||||
for (Field f : snapshot.getClass().getDeclaredFields()) {
|
||||
if (f.getType() == boolean.class) {
|
||||
FIELD_SignBlockEntity_isWaxed = f;
|
||||
FIELD_SignBlockEntity_isWaxed.setAccessible(true);
|
||||
Class<?> snapshotClass = snapshot.getClass();
|
||||
while (snapshotClass != null) {
|
||||
for (Field f : snapshotClass.getDeclaredFields()) {
|
||||
if (f.getType() == boolean.class) {
|
||||
FIELD_SignBlockEntity_isWaxed = f;
|
||||
FIELD_SignBlockEntity_isWaxed.setAccessible(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (FIELD_SignBlockEntity_isWaxed != null) {
|
||||
break;
|
||||
}
|
||||
snapshotClass = snapshotClass.getSuperclass();
|
||||
}
|
||||
}
|
||||
return FIELD_SignBlockEntity_isWaxed != null && FIELD_SignBlockEntity_isWaxed.getBoolean(snapshot);
|
||||
} catch (SecurityException | NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
|
||||
LogBlock.getInstance().getLogger().log(Level.SEVERE, "Sign.isWaxed reflection failed", e);
|
||||
if (FIELD_SignBlockEntity_isWaxed == null) {
|
||||
LogBlock.getInstance().getLogger().log(Level.SEVERE, "Reflections: Sign field 'isWaxed' not found");
|
||||
return false;
|
||||
}
|
||||
return FIELD_SignBlockEntity_isWaxed.getBoolean(snapshot);
|
||||
} catch (SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
||||
LogBlock.getInstance().getLogger().log(Level.SEVERE, "Reflections: Sign.isWaxed reflection failed", e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user