勉强能用的依赖加载系统做好了
This commit is contained in:
		
							
								
								
									
										13
									
								
								.idea/libraries/Maven__com_ilummc_eagletdl_EagletCore_1_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.idea/libraries/Maven__com_ilummc_eagletdl_EagletCore_1_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.ilummc.eagletdl:EagletCore:1.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/ilummc/eagletdl/EagletCore/1.0/EagletCore-1.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/ilummc/eagletdl/EagletCore/1.0/EagletCore-1.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/ilummc/eagletdl/EagletCore/1.0/EagletCore-1.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								.idea/libraries/Maven__org_ow2_asm_asm_5_2.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13
									
								
								.idea/libraries/Maven__org_ow2_asm_asm_5_2.xml
									
									
									
										generated
									
									
									
								
							@@ -1,13 +0,0 @@
 | 
				
			|||||||
<component name="libraryTable">
 | 
					 | 
				
			||||||
  <library name="Maven: org.ow2.asm:asm:5.2">
 | 
					 | 
				
			||||||
    <CLASSES>
 | 
					 | 
				
			||||||
      <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.2/asm-5.2.jar!/" />
 | 
					 | 
				
			||||||
    </CLASSES>
 | 
					 | 
				
			||||||
    <JAVADOC>
 | 
					 | 
				
			||||||
      <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.2/asm-5.2-javadoc.jar!/" />
 | 
					 | 
				
			||||||
    </JAVADOC>
 | 
					 | 
				
			||||||
    <SOURCES>
 | 
					 | 
				
			||||||
      <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.2/asm-5.2-sources.jar!/" />
 | 
					 | 
				
			||||||
    </SOURCES>
 | 
					 | 
				
			||||||
  </library>
 | 
					 | 
				
			||||||
</component>
 | 
					 | 
				
			||||||
							
								
								
									
										13
									
								
								.idea/libraries/Maven__org_ow2_asm_asm_6_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.idea/libraries/Maven__org_ow2_asm_asm_6_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.ow2.asm:asm:6.1.1">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/6.1.1/asm-6.1.1.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/6.1.1/asm-6.1.1-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/6.1.1/asm-6.1.1-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								.idea/libraries/Maven__org_projectlombok_lombok_1_16_20.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.idea/libraries/Maven__org_projectlombok_lombok_1_16_20.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.projectlombok:lombok:1.16.20">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.16.20/lombok-1.16.20.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.16.20/lombok-1.16.20-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.16.20/lombok-1.16.20-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										31
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								pom.xml
									
									
									
									
									
								
							@@ -41,7 +41,7 @@
 | 
				
			|||||||
                        <configuration>
 | 
					                        <configuration>
 | 
				
			||||||
                            <artifactSet>
 | 
					                            <artifactSet>
 | 
				
			||||||
                                <includes>
 | 
					                                <includes>
 | 
				
			||||||
                                    <include>org.ow2.asm</include>
 | 
					                                    <include>com.ilummc.eagletdl</include>
 | 
				
			||||||
                                </includes>
 | 
					                                </includes>
 | 
				
			||||||
                            </artifactSet>
 | 
					                            </artifactSet>
 | 
				
			||||||
                            <createDependencyReducedPom>false</createDependencyReducedPom>
 | 
					                            <createDependencyReducedPom>false</createDependencyReducedPom>
 | 
				
			||||||
@@ -58,10 +58,20 @@
 | 
				
			|||||||
        </repository>
 | 
					        </repository>
 | 
				
			||||||
    </repositories>
 | 
					    </repositories>
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>com.ilummc.eagletdl</groupId>
 | 
				
			||||||
 | 
					            <artifactId>EagletCore</artifactId>
 | 
				
			||||||
 | 
					            <version>1.0</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.ow2.asm</groupId>
 | 
					            <groupId>org.ow2.asm</groupId>
 | 
				
			||||||
            <artifactId>asm</artifactId>
 | 
					            <artifactId>asm</artifactId>
 | 
				
			||||||
            <version>5.2</version>
 | 
					            <version>6.1.1</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.projectlombok</groupId>
 | 
				
			||||||
 | 
					            <artifactId>lombok</artifactId>
 | 
				
			||||||
 | 
					            <version>1.16.20</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>bukkit</groupId>
 | 
					            <groupId>bukkit</groupId>
 | 
				
			||||||
@@ -70,6 +80,11 @@
 | 
				
			|||||||
            <scope>system</scope>
 | 
					            <scope>system</scope>
 | 
				
			||||||
            <systemPath>${basedir}/libs/1_12_R1.jar</systemPath>
 | 
					            <systemPath>${basedir}/libs/1_12_R1.jar</systemPath>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>net.milkbowl.vault</groupId>
 | 
				
			||||||
 | 
					            <artifactId>VaultAPI</artifactId>
 | 
				
			||||||
 | 
					            <version>1.6</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>bukkit</groupId>
 | 
					            <groupId>bukkit</groupId>
 | 
				
			||||||
            <artifactId>bukkit1_8</artifactId>
 | 
					            <artifactId>bukkit1_8</artifactId>
 | 
				
			||||||
@@ -105,13 +120,6 @@
 | 
				
			|||||||
            <scope>system</scope>
 | 
					            <scope>system</scope>
 | 
				
			||||||
            <systemPath>${basedir}/libs/com.sun.tools.jar</systemPath>
 | 
					            <systemPath>${basedir}/libs/com.sun.tools.jar</systemPath>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					 | 
				
			||||||
            <groupId>lombok</groupId>
 | 
					 | 
				
			||||||
            <artifactId>lombok</artifactId>
 | 
					 | 
				
			||||||
            <version>1</version>
 | 
					 | 
				
			||||||
            <scope>system</scope>
 | 
					 | 
				
			||||||
            <systemPath>${basedir}/libs/lombok.jar</systemPath>
 | 
					 | 
				
			||||||
        </dependency>
 | 
					 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>placeholder</groupId>
 | 
					            <groupId>placeholder</groupId>
 | 
				
			||||||
            <artifactId>placeholder</artifactId>
 | 
					            <artifactId>placeholder</artifactId>
 | 
				
			||||||
@@ -140,11 +148,6 @@
 | 
				
			|||||||
            <scope>system</scope>
 | 
					            <scope>system</scope>
 | 
				
			||||||
            <systemPath>${basedir}/libs/TabooCode5.jar</systemPath>
 | 
					            <systemPath>${basedir}/libs/TabooCode5.jar</systemPath>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					 | 
				
			||||||
            <groupId>net.milkbowl.vault</groupId>
 | 
					 | 
				
			||||||
            <artifactId>VaultAPI</artifactId>
 | 
					 | 
				
			||||||
            <version>1.6</version>
 | 
					 | 
				
			||||||
        </dependency>
 | 
					 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>wg</groupId>
 | 
					            <groupId>wg</groupId>
 | 
				
			||||||
            <artifactId>wg</artifactId>
 | 
					            <artifactId>wg</artifactId>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ package com.ilummc.tlib;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.ilummc.tlib.annotations.Config;
 | 
					import com.ilummc.tlib.annotations.Config;
 | 
				
			||||||
import com.ilummc.tlib.annotations.ConfigNode;
 | 
					import com.ilummc.tlib.annotations.ConfigNode;
 | 
				
			||||||
import com.ilummc.tlib.bean.BooleanProperty;
 | 
					import com.ilummc.tlib.bean.Property;
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
					import org.bukkit.plugin.java.JavaPlugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10,7 +10,7 @@ import org.bukkit.plugin.java.JavaPlugin;
 | 
				
			|||||||
public class ExampleMain extends JavaPlugin {
 | 
					public class ExampleMain extends JavaPlugin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @ConfigNode("enableUpdate")
 | 
					    @ConfigNode("enableUpdate")
 | 
				
			||||||
    private BooleanProperty update = new BooleanProperty(true);
 | 
					    private Property<Boolean> update = Property.of(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onEnable() {
 | 
					    public void onEnable() {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								src/main/java/com/ilummc/tlib/TLib.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/main/java/com/ilummc/tlib/TLib.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					package com.ilummc.tlib;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.ilummc.tlib.inject.TLibPluginManager;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.Main;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.message.MsgUtils;
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.lang.reflect.Field;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TLib {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @SuppressWarnings({"unchecked"})
 | 
				
			||||||
 | 
					    public static void init() {
 | 
				
			||||||
 | 
					        // 注入 PluginLoader 用于加载依赖
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            Field field = Bukkit.getServer().getClass().getDeclaredField("pluginManager");
 | 
				
			||||||
 | 
					            field.setAccessible(true);
 | 
				
			||||||
 | 
					            field.set(Bukkit.getServer(), new TLibPluginManager());
 | 
				
			||||||
 | 
					            MsgUtils.send("注入成功");
 | 
				
			||||||
 | 
					        } catch (NoSuchFieldException | IllegalAccessException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					            MsgUtils.warn("注入失败");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        new File(Main.getInst().getDataFolder(), "/libs").mkdirs();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
package com.ilummc.tlib;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class TabooLib {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void init() {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +1,12 @@
 | 
				
			|||||||
package com.ilummc.tlib.annotations;
 | 
					package com.ilummc.tlib.annotations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.annotation.ElementType;
 | 
				
			||||||
 | 
					import java.lang.annotation.Retention;
 | 
				
			||||||
 | 
					import java.lang.annotation.RetentionPolicy;
 | 
				
			||||||
 | 
					import java.lang.annotation.Target;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Target(ElementType.TYPE)
 | 
				
			||||||
 | 
					@Retention(RetentionPolicy.RUNTIME)
 | 
				
			||||||
public @interface Config {
 | 
					public @interface Config {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String name() default "config.yml";
 | 
					    String name() default "config.yml";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,12 @@
 | 
				
			|||||||
package com.ilummc.tlib.annotations;
 | 
					package com.ilummc.tlib.annotations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.annotation.ElementType;
 | 
				
			||||||
 | 
					import java.lang.annotation.Retention;
 | 
				
			||||||
 | 
					import java.lang.annotation.RetentionPolicy;
 | 
				
			||||||
 | 
					import java.lang.annotation.Target;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Target(ElementType.FIELD)
 | 
				
			||||||
 | 
					@Retention(RetentionPolicy.RUNTIME)
 | 
				
			||||||
public @interface ConfigNode {
 | 
					public @interface ConfigNode {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String value();
 | 
					    String value();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,14 @@
 | 
				
			|||||||
package com.ilummc.tlib.annotations;
 | 
					package com.ilummc.tlib.annotations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.annotation.ElementType;
 | 
				
			||||||
 | 
					import java.lang.annotation.Retention;
 | 
				
			||||||
 | 
					import java.lang.annotation.RetentionPolicy;
 | 
				
			||||||
 | 
					import java.lang.annotation.Target;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Target(ElementType.TYPE)
 | 
				
			||||||
 | 
					@Retention(RetentionPolicy.RUNTIME)
 | 
				
			||||||
public @interface Dependencies {
 | 
					public @interface Dependencies {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String[] value();
 | 
					    Dependency[] value();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								src/main/java/com/ilummc/tlib/annotations/Dependency.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/main/java/com/ilummc/tlib/annotations/Dependency.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					package com.ilummc.tlib.annotations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.annotation.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Target(ElementType.TYPE)
 | 
				
			||||||
 | 
					@Retention(RetentionPolicy.RUNTIME)
 | 
				
			||||||
 | 
					@Repeatable(Dependencies.class)
 | 
				
			||||||
 | 
					public @interface Dependency {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    enum Type {PLUGIN, LIBRARY}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Type type();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String[] args();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										18
									
								
								src/main/java/com/ilummc/tlib/annotations/Logger.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/main/java/com/ilummc/tlib/annotations/Logger.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					package com.ilummc.tlib.annotations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.ilummc.tlib.util.TLogger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.annotation.ElementType;
 | 
				
			||||||
 | 
					import java.lang.annotation.Retention;
 | 
				
			||||||
 | 
					import java.lang.annotation.RetentionPolicy;
 | 
				
			||||||
 | 
					import java.lang.annotation.Target;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Target(ElementType.FIELD)
 | 
				
			||||||
 | 
					@Retention(RetentionPolicy.RUNTIME)
 | 
				
			||||||
 | 
					public @interface Logger {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String value() default "[{0}] {1}";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int level() default TLogger.INFO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,5 +1,12 @@
 | 
				
			|||||||
package com.ilummc.tlib.annotations;
 | 
					package com.ilummc.tlib.annotations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.annotation.ElementType;
 | 
				
			||||||
 | 
					import java.lang.annotation.Retention;
 | 
				
			||||||
 | 
					import java.lang.annotation.RetentionPolicy;
 | 
				
			||||||
 | 
					import java.lang.annotation.Target;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Target(ElementType.FIELD)
 | 
				
			||||||
 | 
					@Retention(RetentionPolicy.RUNTIME)
 | 
				
			||||||
public @interface PluginInstance {
 | 
					public @interface PluginInstance {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String value();
 | 
					    String value();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,12 @@
 | 
				
			|||||||
package com.ilummc.tlib.annotations.db;
 | 
					package com.ilummc.tlib.annotations.db;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.annotation.ElementType;
 | 
				
			||||||
 | 
					import java.lang.annotation.Retention;
 | 
				
			||||||
 | 
					import java.lang.annotation.RetentionPolicy;
 | 
				
			||||||
 | 
					import java.lang.annotation.Target;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Target(ElementType.TYPE)
 | 
				
			||||||
 | 
					@Retention(RetentionPolicy.RUNTIME)
 | 
				
			||||||
public @interface SQLTable {
 | 
					public @interface SQLTable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String value();
 | 
					    String value();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,17 +0,0 @@
 | 
				
			|||||||
package com.ilummc.tlib.bean;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.function.BiConsumer;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class BooleanProperty {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private boolean property;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public BooleanProperty(boolean property) {
 | 
					 | 
				
			||||||
        this.property = property;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void addListener(BiConsumer<Boolean, Boolean> consumer) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,4 +1,41 @@
 | 
				
			|||||||
package com.ilummc.tlib.bean;
 | 
					package com.ilummc.tlib.bean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Property {
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.function.BiConsumer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Property<T> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Property(T value) {
 | 
				
			||||||
 | 
					        this.value = value;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private List<BiConsumer<T, T>> consumers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private T value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void set(T value) {
 | 
				
			||||||
 | 
					        if (value != this.value) {
 | 
				
			||||||
 | 
					            if (consumers != null)
 | 
				
			||||||
 | 
					                for (BiConsumer<T, T> consumer : consumers) {
 | 
				
			||||||
 | 
					                    consumer.accept(this.value, value);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            this.value = value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public T get() {
 | 
				
			||||||
 | 
					        return value;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void addListener(BiConsumer<T, T> consumer) {
 | 
				
			||||||
 | 
					        if (consumers == null)
 | 
				
			||||||
 | 
					            consumers = new ArrayList<>();
 | 
				
			||||||
 | 
					        consumers.add(consumer);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static <T> Property<T> of(T value) {
 | 
				
			||||||
 | 
					        return new Property<>(value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										77
									
								
								src/main/java/com/ilummc/tlib/dependency/TDependency.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								src/main/java/com/ilummc/tlib/dependency/TDependency.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					package com.ilummc.tlib.dependency;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.ilummc.eagletdl.EagletTask;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.Main;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.message.MsgUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.util.concurrent.atomic.AtomicBoolean;
 | 
				
			||||||
 | 
					import java.util.concurrent.locks.ReentrantLock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TDependency {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static final String MAVEN_REPO = "http://repo.maven.apache.org/maven2";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 请求一个插件作为依赖,这个插件将会在所有已经添加的 Jenkins 仓库、Maven 仓库寻找
 | 
				
			||||||
 | 
					     * <p>
 | 
				
			||||||
 | 
					     * 阻塞线程进行下载/加载
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param args 插件名称,下载地址(可选)
 | 
				
			||||||
 | 
					     * @return 是否成功加载了依赖
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static boolean requestPlugin(String... args) {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 请求一个库作为依赖,这个库将会在 Maven Central、oss.sonatype 以及自定义的 Maven 仓库寻找
 | 
				
			||||||
 | 
					     * <p>
 | 
				
			||||||
 | 
					     * 阻塞线程进行下载/加载
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param args 依赖名,格式为 groupId:artifactId:version
 | 
				
			||||||
 | 
					     * @return 是否成功加载库,如果加载成功,插件将可以任意调用使用的类
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static boolean requestLib(String... args) {
 | 
				
			||||||
 | 
					        if (args[0].matches(".*:.*:.*")) {
 | 
				
			||||||
 | 
					            String[] arr = args[0].split(":");
 | 
				
			||||||
 | 
					            File file = new File(Main.getInst().getDataFolder(), "/libs/" + String.join("-", arr) + ".jar");
 | 
				
			||||||
 | 
					            if (file.exists()) {
 | 
				
			||||||
 | 
					                TDependencyLoader.addToPath(Main.getInst(), file);
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            } else if (downloadMaven(MAVEN_REPO, arr[0], arr[1], arr[2], file)) {
 | 
				
			||||||
 | 
					                TDependencyLoader.addToPath(Main.getInst(), file);
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            } else return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static boolean downloadMaven(String url, String groupId, String artifactId, String version, File target) {
 | 
				
			||||||
 | 
					        ReentrantLock lock = new ReentrantLock();
 | 
				
			||||||
 | 
					        AtomicBoolean failed = new AtomicBoolean(false);
 | 
				
			||||||
 | 
					        new EagletTask()
 | 
				
			||||||
 | 
					                .url(url + "/" + groupId.replace('.', '/') + "/" + artifactId + "/" + version + "/" + artifactId + "-" + version + ".jar")
 | 
				
			||||||
 | 
					                .file(target)
 | 
				
			||||||
 | 
					                .setThreads(8)
 | 
				
			||||||
 | 
					                .setOnStart(event -> lock.lock())
 | 
				
			||||||
 | 
					                .setOnProgress(event -> MsgUtils.send("    下载速度 " + event.getSpeedFormatted()))
 | 
				
			||||||
 | 
					                .setOnConnected(event -> MsgUtils.send("  正在下载 " + String.join(":", new String[]{groupId, artifactId, version}) +
 | 
				
			||||||
 | 
					                        " 大小 " + event.getContentLength()))
 | 
				
			||||||
 | 
					                .setOnError(event -> failed.set(true))
 | 
				
			||||||
 | 
					                .setOnComplete(event -> {
 | 
				
			||||||
 | 
					                    lock.unlock();
 | 
				
			||||||
 | 
					                    MsgUtils.send("  下载 " + String.join(":", new String[]{groupId, artifactId, version}) + " 完成");
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					                .start();
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            while (lock.tryLock()) lock.unlock();
 | 
				
			||||||
 | 
					        } catch (Exception ignored) {
 | 
				
			||||||
 | 
					        } finally {
 | 
				
			||||||
 | 
					            lock.lock();
 | 
				
			||||||
 | 
					            lock.unlock();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return !failed.get();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					package com.ilummc.tlib.dependency;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.plugin.Plugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.lang.reflect.InvocationTargetException;
 | 
				
			||||||
 | 
					import java.lang.reflect.Method;
 | 
				
			||||||
 | 
					import java.net.MalformedURLException;
 | 
				
			||||||
 | 
					import java.net.URL;
 | 
				
			||||||
 | 
					import java.net.URLClassLoader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TDependencyLoader {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static synchronized void addToPath(Plugin plugin, URL url) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
 | 
				
			||||||
 | 
					            method.setAccessible(true);
 | 
				
			||||||
 | 
					            method.invoke(plugin.getClass().getClassLoader(), url);
 | 
				
			||||||
 | 
					        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static synchronized void addToPath(Plugin plugin, File file) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            addToPath(plugin, file.toURI().toURL());
 | 
				
			||||||
 | 
					        } catch (MalformedURLException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										99
									
								
								src/main/java/com/ilummc/tlib/inject/DependencyInjector.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								src/main/java/com/ilummc/tlib/inject/DependencyInjector.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
				
			|||||||
 | 
					package com.ilummc.tlib.inject;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.ilummc.tlib.annotations.Dependencies;
 | 
				
			||||||
 | 
					import com.ilummc.tlib.annotations.Dependency;
 | 
				
			||||||
 | 
					import com.ilummc.tlib.annotations.Logger;
 | 
				
			||||||
 | 
					import com.ilummc.tlib.annotations.PluginInstance;
 | 
				
			||||||
 | 
					import com.ilummc.tlib.dependency.TDependency;
 | 
				
			||||||
 | 
					import com.ilummc.tlib.util.TLogger;
 | 
				
			||||||
 | 
					import me.skymc.taboolib.message.MsgUtils;
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.plugin.Plugin;
 | 
				
			||||||
 | 
					import org.bukkit.plugin.java.JavaPlugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.reflect.Field;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class DependencyInjector {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void inject(Plugin plugin, Object o) {
 | 
				
			||||||
 | 
					        injectLogger(plugin, o);
 | 
				
			||||||
 | 
					        injectPluginInstance(plugin, o);
 | 
				
			||||||
 | 
					        injectDependencies(plugin, o);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static void injectOnEnable(Plugin plugin) {
 | 
				
			||||||
 | 
					        inject(plugin, plugin);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static void onDisable(Plugin plugin) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static void injectLogger(Plugin plugin, Object o) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            for (Field field : o.getClass().getDeclaredFields()) {
 | 
				
			||||||
 | 
					                Logger logger;
 | 
				
			||||||
 | 
					                if ((logger = field.getAnnotation(Logger.class)) != null) {
 | 
				
			||||||
 | 
					                    field.getType().asSubclass(TLogger.class);
 | 
				
			||||||
 | 
					                    TLogger tLogger = new TLogger(logger.value(), plugin, logger.level());
 | 
				
			||||||
 | 
					                    if (!field.isAccessible())
 | 
				
			||||||
 | 
					                        field.setAccessible(true);
 | 
				
			||||||
 | 
					                    field.set(o, tLogger);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (Exception ignored) {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static void injectPluginInstance(Plugin plugin, Object o) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            for (Field field : o.getClass().getDeclaredFields()) {
 | 
				
			||||||
 | 
					                PluginInstance instance;
 | 
				
			||||||
 | 
					                if ((instance = field.getAnnotation(PluginInstance.class)) != null) {
 | 
				
			||||||
 | 
					                    if (!field.isAccessible())
 | 
				
			||||||
 | 
					                        field.setAccessible(true);
 | 
				
			||||||
 | 
					                    field.getType().asSubclass(JavaPlugin.class);
 | 
				
			||||||
 | 
					                    Plugin pl;
 | 
				
			||||||
 | 
					                    if ((pl = Bukkit.getPluginManager().getPlugin(instance.value())) == null) {
 | 
				
			||||||
 | 
					                        if (!TDependency.requestPlugin(instance.value())) {
 | 
				
			||||||
 | 
					                            MsgUtils.warn(plugin.getName() + " 所需的依赖插件 " + instance.value() + " 自动加载失败");
 | 
				
			||||||
 | 
					                            return;
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            pl = Bukkit.getPluginManager().getPlugin(instance.value());
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if (pl != null)
 | 
				
			||||||
 | 
					                        field.set(o, pl);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (Exception ignored) {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static void injectDependencies(Plugin plugin, Object o) {
 | 
				
			||||||
 | 
					        Dependency[] dependencies = new Dependency[0];
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Dependencies d = o.getClass().getAnnotation(Dependencies.class);
 | 
				
			||||||
 | 
					            if (d != null) dependencies = d.value();
 | 
				
			||||||
 | 
					            Dependency d2 = o.getClass().getAnnotation(Dependency.class);
 | 
				
			||||||
 | 
					            if (d2 != null) dependencies = new Dependency[]{d2};
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (dependencies.length != 0) {
 | 
				
			||||||
 | 
					            MsgUtils.send("正在加载 " + plugin.getName() + " 插件所需的依赖");
 | 
				
			||||||
 | 
					            for (Dependency dependency : dependencies) {
 | 
				
			||||||
 | 
					                if (dependency.type() == Dependency.Type.PLUGIN)
 | 
				
			||||||
 | 
					                    if (TDependency.requestPlugin(dependency.args()))
 | 
				
			||||||
 | 
					                        MsgUtils.send(plugin.getName() + " 请求的插件 " + dependency.args()[0] + " 加载成功。");
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        MsgUtils.warn(plugin.getName() + " 请求的插件 " + dependency.args()[0] + " 加载失败。");
 | 
				
			||||||
 | 
					                if (dependency.type() == Dependency.Type.LIBRARY)
 | 
				
			||||||
 | 
					                    if (TDependency.requestLib(dependency.args()))
 | 
				
			||||||
 | 
					                        MsgUtils.send(plugin.getName() + " 请求的库文件 " + String.join(":", dependency.args()) + " 加载成功。");
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        MsgUtils.send(plugin.getName() + " 请求的库文件 " + String.join(":", dependency.args()) + " 加载失败。");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            MsgUtils.send("依赖加载完成");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										168
									
								
								src/main/java/com/ilummc/tlib/inject/TLibPluginManager.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								src/main/java/com/ilummc/tlib/inject/TLibPluginManager.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,168 @@
 | 
				
			|||||||
 | 
					package com.ilummc.tlib.inject;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.event.Event;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
 | 
					import org.bukkit.event.Listener;
 | 
				
			||||||
 | 
					import org.bukkit.permissions.Permissible;
 | 
				
			||||||
 | 
					import org.bukkit.permissions.Permission;
 | 
				
			||||||
 | 
					import org.bukkit.plugin.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TLibPluginManager implements PluginManager {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final PluginManager instance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public TLibPluginManager() {
 | 
				
			||||||
 | 
					        instance = Bukkit.getPluginManager();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void registerInterface(Class<? extends PluginLoader> aClass) throws IllegalArgumentException {
 | 
				
			||||||
 | 
					        instance.registerInterface(aClass);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Plugin getPlugin(String s) {
 | 
				
			||||||
 | 
					        return instance.getPlugin(s);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Plugin[] getPlugins() {
 | 
				
			||||||
 | 
					        return instance.getPlugins();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean isPluginEnabled(String s) {
 | 
				
			||||||
 | 
					        return instance.isPluginEnabled(s);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean isPluginEnabled(Plugin plugin) {
 | 
				
			||||||
 | 
					        return instance.isPluginEnabled(plugin);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Plugin loadPlugin(File file) throws InvalidPluginException, InvalidDescriptionException, UnknownDependencyException {
 | 
				
			||||||
 | 
					        return instance.loadPlugin(file);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Plugin[] loadPlugins(File file) {
 | 
				
			||||||
 | 
					        return instance.loadPlugins(file);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void disablePlugins() {
 | 
				
			||||||
 | 
					        instance.disablePlugins();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void clearPlugins() {
 | 
				
			||||||
 | 
					        instance.clearPlugins();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void callEvent(Event event) throws IllegalStateException {
 | 
				
			||||||
 | 
					        instance.callEvent(event);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void registerEvents(Listener listener, Plugin plugin) {
 | 
				
			||||||
 | 
					        instance.registerEvents(listener, plugin);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void registerEvent(Class<? extends Event> aClass, Listener listener, EventPriority eventPriority, EventExecutor eventExecutor, Plugin plugin) {
 | 
				
			||||||
 | 
					        instance.registerEvent(aClass, listener, eventPriority, eventExecutor, plugin);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void registerEvent(Class<? extends Event> aClass, Listener listener, EventPriority eventPriority, EventExecutor eventExecutor, Plugin plugin, boolean b) {
 | 
				
			||||||
 | 
					        instance.registerEvent(aClass, listener, eventPriority, eventExecutor, plugin, b);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void enablePlugin(Plugin plugin) {
 | 
				
			||||||
 | 
					        DependencyInjector.injectOnEnable(plugin);
 | 
				
			||||||
 | 
					        instance.enablePlugin(plugin);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void disablePlugin(Plugin plugin) {
 | 
				
			||||||
 | 
					        DependencyInjector.onDisable(plugin);
 | 
				
			||||||
 | 
					        instance.disablePlugin(plugin);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Permission getPermission(String s) {
 | 
				
			||||||
 | 
					        return instance.getPermission(s);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void addPermission(Permission permission) {
 | 
				
			||||||
 | 
					        instance.addPermission(permission);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void removePermission(Permission permission) {
 | 
				
			||||||
 | 
					        instance.removePermission(permission);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void removePermission(String s) {
 | 
				
			||||||
 | 
					        instance.removePermission(s);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Set<Permission> getDefaultPermissions(boolean b) {
 | 
				
			||||||
 | 
					        return instance.getDefaultPermissions(b);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void recalculatePermissionDefaults(Permission permission) {
 | 
				
			||||||
 | 
					        instance.recalculatePermissionDefaults(permission);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void subscribeToPermission(String s, Permissible permissible) {
 | 
				
			||||||
 | 
					        instance.subscribeToPermission(s, permissible);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void unsubscribeFromPermission(String s, Permissible permissible) {
 | 
				
			||||||
 | 
					        instance.unsubscribeFromPermission(s, permissible);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Set<Permissible> getPermissionSubscriptions(String s) {
 | 
				
			||||||
 | 
					        return instance.getPermissionSubscriptions(s);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void subscribeToDefaultPerms(boolean b, Permissible permissible) {
 | 
				
			||||||
 | 
					        instance.subscribeToDefaultPerms(b, permissible);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void unsubscribeFromDefaultPerms(boolean b, Permissible permissible) {
 | 
				
			||||||
 | 
					        instance.unsubscribeFromDefaultPerms(b, permissible);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Set<Permissible> getDefaultPermSubscriptions(boolean b) {
 | 
				
			||||||
 | 
					        return instance.getDefaultPermSubscriptions(b);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Set<Permission> getPermissions() {
 | 
				
			||||||
 | 
					        return instance.getPermissions();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean useTimings() {
 | 
				
			||||||
 | 
					        return instance.useTimings();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								src/main/java/com/ilummc/tlib/util/Strings.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/main/java/com/ilummc/tlib/util/Strings.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					package com.ilummc.tlib.util;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Strings {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 优化过的 String#replace,比默认快了大概 5 倍
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param template 模板替换文件
 | 
				
			||||||
 | 
					     * @param args     替换的参数
 | 
				
			||||||
 | 
					     * @return 替换好的字符串
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static String replaceWithOrder(String template, String... args) {
 | 
				
			||||||
 | 
					        char[] arr = template.toCharArray();
 | 
				
			||||||
 | 
					        StringBuilder stringBuilder = new StringBuilder(template.length());
 | 
				
			||||||
 | 
					        for (int i = 0; i < arr.length; i++) {
 | 
				
			||||||
 | 
					            if (arr[i] == '{' && Character.isDigit(arr[Math.min(i + 1, arr.length - 1)])
 | 
				
			||||||
 | 
					                    && arr[Math.min(i + 1, arr.length - 1)] - '0' < args.length
 | 
				
			||||||
 | 
					                    && arr[Math.min(i + 2, arr.length - 1)] == '}') {
 | 
				
			||||||
 | 
					                stringBuilder.append(args[arr[i + 1] - '0']);
 | 
				
			||||||
 | 
					                i += 2;
 | 
				
			||||||
 | 
					            } else
 | 
				
			||||||
 | 
					                stringBuilder.append(arr[i]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return stringBuilder.toString();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										63
									
								
								src/main/java/com/ilummc/tlib/util/TLogger.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/main/java/com/ilummc/tlib/util/TLogger.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					package com.ilummc.tlib.util;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					import lombok.Setter;
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.plugin.Plugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TLogger {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static final int VERBOSE = 0, FINEST = 1, FINE = 2, INFO = 3, WARN = 4, ERROR = 5, FATAL = 6;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Getter
 | 
				
			||||||
 | 
					    private final String pattern;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Getter
 | 
				
			||||||
 | 
					    private Plugin plugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Getter
 | 
				
			||||||
 | 
					    @Setter
 | 
				
			||||||
 | 
					    private int level;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public TLogger(String pattern, Plugin plugin, int level) {
 | 
				
			||||||
 | 
					        this.pattern = pattern;
 | 
				
			||||||
 | 
					        this.plugin = plugin;
 | 
				
			||||||
 | 
					        this.level = level;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void verbose(String msg) {
 | 
				
			||||||
 | 
					        if (level >= VERBOSE)
 | 
				
			||||||
 | 
					            Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), msg));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void finest(String msg) {
 | 
				
			||||||
 | 
					        if (level >= FINEST)
 | 
				
			||||||
 | 
					            Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), msg));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void fine(String msg) {
 | 
				
			||||||
 | 
					        if (level >= FINE)
 | 
				
			||||||
 | 
					            Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), msg));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void info(String msg) {
 | 
				
			||||||
 | 
					        if (level >= INFO)
 | 
				
			||||||
 | 
					            Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), msg));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void warn(String msg) {
 | 
				
			||||||
 | 
					        if (level >= WARN)
 | 
				
			||||||
 | 
					            Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), msg));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void error(String msg) {
 | 
				
			||||||
 | 
					        if (level >= ERROR)
 | 
				
			||||||
 | 
					            Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), msg));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void fatal(String msg) {
 | 
				
			||||||
 | 
					        if (level >= FATAL)
 | 
				
			||||||
 | 
					            Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, plugin.getName(), msg));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
package me.skymc.taboolib;
 | 
					package me.skymc.taboolib;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.ilummc.tlib.TLib;
 | 
				
			||||||
 | 
					import com.ilummc.tlib.annotations.Dependency;
 | 
				
			||||||
import lombok.Getter;
 | 
					import lombok.Getter;
 | 
				
			||||||
import lombok.Setter;
 | 
					import lombok.Setter;
 | 
				
			||||||
import me.skymc.taboolib.anvil.AnvilContainerAPI;
 | 
					import me.skymc.taboolib.anvil.AnvilContainerAPI;
 | 
				
			||||||
@@ -104,6 +106,8 @@ public class Main extends JavaPlugin implements Listener {
 | 
				
			|||||||
    public void onLoad() {
 | 
					    public void onLoad() {
 | 
				
			||||||
    	inst = this; disable = false;
 | 
					    	inst = this; disable = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        TLib.init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    	// 启动监控
 | 
					    	// 启动监控
 | 
				
			||||||
    	new Metrics(this);
 | 
					    	new Metrics(this);
 | 
				
			||||||
    	
 | 
					    	
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user