Skip to content

Commit

Permalink
1.6
Browse files Browse the repository at this point in the history
  • Loading branch information
CyR1en committed Mar 7, 2019
1 parent 9d852ad commit 245ea31
Show file tree
Hide file tree
Showing 7 changed files with 152 additions and 69 deletions.
16 changes: 15 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
plugins {
id 'java'
id 'maven'
id 'org.jetbrains.kotlin.jvm' version '1.2.71'
}

group 'com.cyr1en'
version '1.3'
version '1.6'

sourceCompatibility = 1.8

Expand All @@ -18,6 +19,19 @@ repositories {
dependencies {
compile group: 'org.jsoup', name: 'jsoup', version: '1.11.3'
compile group: 'commons-io', name: 'commons-io', version: '2.5'
compile 'com.google.auto.service:auto-service:1.0-rc4'

compileOnly 'org.bukkit:bukkit:1.12.2-R0.1-SNAPSHOT'
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}

compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandMap;
import org.bukkit.command.CommandSender;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.entity.Player;
import org.bukkit.plugin.SimplePluginManager;

Expand Down Expand Up @@ -167,7 +168,8 @@ private static CommandMap getCommandMap() {
try {
Field field = SimplePluginManager.class.getDeclaredField("commandMap");
field.setAccessible(true);

SimpleCommandMap smap = (SimpleCommandMap) field.get(Bukkit.getServer().getPluginManager());
smap.reg
map = (CommandMap) field.get(Bukkit.getServer().getPluginManager());
} catch (NoSuchFieldException | IllegalAccessException e) {
Logger.err("Problem getting the command map!");
Expand Down
25 changes: 15 additions & 10 deletions src/main/java/com/cyr1en/mcutils/logger/Logger.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,31 +12,36 @@ public class Logger {
public static final String ANSI_RED_FOREGROUND = "\033[31m";

private static String prefix = "";
private static String plainPrefix = "";
private static boolean debugMode = false;

public static void init(String prefix){
Logger.plainPrefix = prefix;
Logger.prefix = String.format("[%s]", prefix);
}
public static void log(Level level, String msg) {
String pre = debugMode ? "[" + prefix + "-Debug] " : getPrefix();

public static void log(Level level, String msg, String... args) {
String pre = debugMode ? "[" + plainPrefix + "-Debug] " : getPrefix();
if(msg.contains("%s"))
msg = String.format(msg, (Object[]) args);
Bukkit.getLogger().log(level, pre + msg);
}

public static void info(String msg) {
log(Level.INFO, msg);
public static void info(String msg, String... args) {
log(Level.INFO, msg, args);
}

public static void warn(String msg) {
log(Level.WARNING, ANSI_GOLD_FOREGROUND + msg + ANSI_RESET);
public static void warn(String msg, String... args) {
log(Level.WARNING, ANSI_GOLD_FOREGROUND + msg + ANSI_RESET, args);
}

public static void err(String msg) {
log(Level.SEVERE, ANSI_RED_FOREGROUND + msg + ANSI_RESET);
public static void err(String msg, String... args) {
log(Level.SEVERE, ANSI_RED_FOREGROUND + msg + ANSI_RESET, args);
}

public static void debug(String msg) {
public static void debug(String msg, String... args) {
if (debugMode)
log(Level.INFO, ANSI_GOLD_FOREGROUND + msg + ANSI_RESET);
log(Level.INFO, ANSI_GOLD_FOREGROUND + msg + ANSI_RESET, args);
}

public static void setDebugMode(boolean b) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.cyr1en.mcutils.utils.reflection;

import java.util.Comparator;

public class NegativeComparator {

public static Comparator<Integer> atEnd(final Comparator<Integer> comparator) {
return (o1, o2) -> compare(o1, o2, comparator, true);
}

public static Comparator<Integer> atBeginning(final Comparator<Integer> comparator) {
return (o1, o2) -> compare(o1, o2, comparator, false);
}

private static int compare(Integer o1, Integer o2, final Comparator<Integer> comparator, boolean end) {
if (o1 < 0)
return end ? 1 : -1;
if (o2 < 0)
return end ? -1 : 1;
return comparator.compare(o1, o2);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.cyr1en.mcutils.utils.reflection.annotation;

import org.bukkit.Bukkit;
import org.bukkit.Server;

import java.util.function.Predicate;

public enum Condition {
VERSION((server -> {
String dirName = server.getClass().getPackage().getName();
String versionString = dirName.substring(dirName.indexOf(46) + 1)
.replaceAll("(_)([A-Z])\\w*", "").replaceAll("v", "")
.replaceAll("_", ".");
double parsed = Double.valueOf(versionString);
return parsed >= 1.12;
})),
IGNORE(server -> false);

Predicate<? super Server> predicate;

Condition(Predicate<? super Server> predicate) {
this.predicate = predicate;
}

public boolean check() {
return predicate.test(Bukkit.getServer());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@

@Retention(RetentionPolicy.RUNTIME)
public @interface Initialize {
int priority();
int priority() default -1;
//Condition conditional() default Condition.IGNORE;
}
Original file line number Diff line number Diff line change
@@ -1,83 +1,94 @@
package com.cyr1en.mcutils.utils.reflection.annotation.process;

import com.cyr1en.mcutils.logger.Logger;
import com.cyr1en.mcutils.utils.reflection.NegativeComparator;
import com.cyr1en.mcutils.utils.reflection.Initializable;
import com.cyr1en.mcutils.utils.reflection.annotation.Ignore;
import com.cyr1en.mcutils.utils.reflection.annotation.Initialize;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;


public class Initializer {

private static boolean interrupted = false;
private static boolean finished = false;
private static boolean interrupted = false;
private static boolean finished = false;

public static void initAll(Initializable clazz) {
initFields(clazz);
initMethods(clazz);
finished = true;
}
public static void initAll(Initializable clazz) {
initFields(clazz);
initMethods(clazz);
finished = true;
}

public static void interrupt() {
interrupted = true;
}
public static void interrupt() {
interrupted = true;
}

public static boolean finished() {
return finished;
}

public static boolean finished() {
return finished;
public static void initFields(Initializable clazz) {
try {
Field[] fields = clazz.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Ignore.class))
continue;
field.setAccessible(true);
Class type = field.getType();
Object v = field.get(clazz);
if (!interrupted && v == null) {
if (type.equals(boolean.class))
field.set(clazz, false);
else if (type.isPrimitive())
field.set(clazz, 0);
else if (!type.isPrimitive())
field.set(clazz, null);
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}

public static void initFields(Initializable clazz) {
public static void initMethods(Initializable clazz) {
TreeMap<Integer, Method> methods = prioritizedMethods(clazz.getClass().getDeclaredMethods());
methods.forEach((priority, method) -> {
if (!interrupted)
try {
Field[] fields = clazz.getClass().getDeclaredFields();
for (Field field : fields) {
if(field.isAnnotationPresent(Ignore.class))
continue;
field.setAccessible(true);
Class type = field.getType();
Object v = field.get(clazz);
if (!interrupted && v == null) {
if (type.equals(boolean.class))
field.set(clazz, false);
else if (type.isPrimitive())
field.set(clazz, 0);
else if (!type.isPrimitive())
field.set(clazz, null);
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
method.setAccessible(true);
Logger.debug("Invoking " + method.getName() + "...");
method.invoke(clazz);
} catch (IllegalAccessException | InvocationTargetException e) {
Logger.debug("Failed to invoke " + method.getName());
e.printStackTrace();
}
}

public static void initMethods(Initializable clazz) {
TreeMap<Integer, Method> methods = prioritizedMethods(clazz.getClass().getDeclaredMethods());
methods.forEach((priority, method) -> {
if (!interrupted)
try {
method.setAccessible(true);
Logger.debug("Invoking " + method.getName() + "...");
method.invoke(clazz);
} catch (IllegalAccessException | InvocationTargetException e) {
Logger.debug("Failed to invoke " + method.getName());
e.printStackTrace();
}
});
}

private static TreeMap<Integer, Method> prioritizedMethods(Method[] methods) {
AtomicReference<HashMap<Integer, Method>> atomicMap = new AtomicReference<>(new HashMap<>());
AtomicInteger atomicPriority = new AtomicInteger(0);
Arrays.asList(methods).forEach(method -> {
if (method.isAnnotationPresent(Initialize.class)) {
Initialize meta = method.getAnnotation(Initialize.class);
//if (!meta.conditional().check())
if (meta.priority() < 0) atomicMap.get().put(atomicPriority.addAndGet(-1), method);
else atomicMap.get().put(meta.priority(), method);
}
});
TreeMap<Integer, Method> sorted = new TreeMap<>(NegativeComparator.atEnd(Integer::compare));
sorted.putAll(atomicMap.get());
return sorted;
}

});
}

private static TreeMap<Integer, Method> prioritizedMethods(Method[] methods) {
HashMap<Integer, Method> taggedMethods = new HashMap<>();
for (Method method : methods) {
if (method.isAnnotationPresent(Initialize.class)) {
Initialize meta = method.getAnnotation(Initialize.class);
taggedMethods.put(meta.priority(), method);
}
}
return new TreeMap<>(taggedMethods);
}
}

0 comments on commit 245ea31

Please sign in to comment.