redo event system
This commit is contained in:
		
							parent
							
								
									17fc677643
								
							
						
					
					
						commit
						1527ddda93
					
				
					 22 changed files with 213 additions and 283 deletions
				
			
		| 
						 | 
					@ -13,6 +13,7 @@
 | 
				
			||||||
            <option value="$PROJECT_DIR$/common" />
 | 
					            <option value="$PROJECT_DIR$/common" />
 | 
				
			||||||
            <option value="$PROJECT_DIR$/platforms" />
 | 
					            <option value="$PROJECT_DIR$/platforms" />
 | 
				
			||||||
            <option value="$PROJECT_DIR$/platforms/spigot" />
 | 
					            <option value="$PROJECT_DIR$/platforms/spigot" />
 | 
				
			||||||
 | 
					            <option value="$PROJECT_DIR$/test-plugin" />
 | 
				
			||||||
          </set>
 | 
					          </set>
 | 
				
			||||||
        </option>
 | 
					        </option>
 | 
				
			||||||
      </GradleProjectSettings>
 | 
					      </GradleProjectSettings>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,5 +4,5 @@
 | 
				
			||||||
  <component name="FrameworkDetectionExcludesConfiguration">
 | 
					  <component name="FrameworkDetectionExcludesConfiguration">
 | 
				
			||||||
    <file type="web" url="file://$PROJECT_DIR$" />
 | 
					    <file type="web" url="file://$PROJECT_DIR$" />
 | 
				
			||||||
  </component>
 | 
					  </component>
 | 
				
			||||||
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="temurin-1.8" project-jdk-type="JavaSDK" />
 | 
					  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK" />
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
| 
						 | 
					@ -5,25 +5,28 @@
 | 
				
			||||||
  </component>
 | 
					  </component>
 | 
				
			||||||
  <component name="ChangeListManager">
 | 
					  <component name="ChangeListManager">
 | 
				
			||||||
    <list default="true" id="9d5d9b6f-43c8-41a4-bb42-a66ffc96c9b0" name="Changes" comment="">
 | 
					    <list default="true" id="9d5d9b6f-43c8-41a4-bb42-a66ffc96c9b0" name="Changes" comment="">
 | 
				
			||||||
      <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/TrackedEntity.java" afterDir="false" />
 | 
					      <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventCallback.java" afterDir="false" />
 | 
				
			||||||
      <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/CancellableEntityLibEvent.java" afterDir="false" />
 | 
					      <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventHandler.java" afterDir="false" />
 | 
				
			||||||
      <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/tracking/GeneralTrackingEvent.java" afterDir="false" />
 | 
					      <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventHandlerImpl.java" afterDir="false" />
 | 
				
			||||||
      <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/tracking/UserStopTrackingEntityEvent.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/.idea/gradle.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/gradle.xml" afterDir="false" />
 | 
				
			||||||
      <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/tracking/UserTrackingEntityEvent.java" afterDir="false" />
 | 
					 | 
				
			||||||
      <change afterPath="$PROJECT_DIR$/common/src/main/java/me/tofaa/entitylib/common/AbstractTrackedEntity.java" afterDir="false" />
 | 
					 | 
				
			||||||
      <change afterPath="$PROJECT_DIR$/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/InternalRegistryListener.java" afterDir="false" />
 | 
					 | 
				
			||||||
      <change afterPath="$PROJECT_DIR$/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntity.java" afterDir="false" />
 | 
					 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/APIConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/APIConfig.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/APIConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/APIConfig.java" afterDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/Platform.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/Platform.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/Platform.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/Platform.java" afterDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EntityLibEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EntityLibEvent.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventBus.java" beforeDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventBus.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventBus.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventBusAsync.java" beforeDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/UserReceiveMetaUpdateEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/UserReceiveMetaUpdateEvent.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventBusSync.java" beforeDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/UserRefreshEntityEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/UserRefreshEntityEvent.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventListener.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/EventListener.java" afterDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/UserReceiveMetaUpdateEvent.java" beforeDir="false" />
 | 
				
			||||||
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/UserRefreshEntityEvent.java" beforeDir="false" />
 | 
				
			||||||
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/tracking/GeneralTrackingEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/GeneralTrackingEvent.java" afterDir="false" />
 | 
				
			||||||
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/tracking/UserStopTrackingEntityEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/UserStopTrackingEntityEvent.java" afterDir="false" />
 | 
				
			||||||
 | 
					      <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/tracking/UserTrackingEntityEvent.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/event/types/UserTrackingEntityEvent.java" afterDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/common/src/main/java/me/tofaa/entitylib/common/AbstractPlatform.java" beforeDir="false" afterPath="$PROJECT_DIR$/common/src/main/java/me/tofaa/entitylib/common/AbstractPlatform.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/common/src/main/java/me/tofaa/entitylib/common/AbstractPlatform.java" beforeDir="false" afterPath="$PROJECT_DIR$/common/src/main/java/me/tofaa/entitylib/common/AbstractPlatform.java" afterDir="false" />
 | 
				
			||||||
      <change beforePath="$PROJECT_DIR$/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntityLibPlatform.java" beforeDir="false" afterPath="$PROJECT_DIR$/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntityLibPlatform.java" afterDir="false" />
 | 
					      <change beforePath="$PROJECT_DIR$/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/InternalRegistryListener.java" beforeDir="false" afterPath="$PROJECT_DIR$/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/InternalRegistryListener.java" afterDir="false" />
 | 
				
			||||||
 | 
					      <change beforePath="$PROJECT_DIR$/settings.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/settings.gradle" afterDir="false" />
 | 
				
			||||||
 | 
					      <change beforePath="$PROJECT_DIR$/test-plugin/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/test-plugin/build.gradle" afterDir="false" />
 | 
				
			||||||
 | 
					      <change beforePath="$PROJECT_DIR$/test-plugin/src/main/java/me/tofaa/testentitylib/TestEntityLibPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/test-plugin/src/main/java/me/tofaa/testentitylib/TestEntityLibPlugin.java" afterDir="false" />
 | 
				
			||||||
    </list>
 | 
					    </list>
 | 
				
			||||||
    <option name="SHOW_DIALOG" value="false" />
 | 
					    <option name="SHOW_DIALOG" value="false" />
 | 
				
			||||||
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
 | 
					    <option name="HIGHLIGHT_CONFLICTS" value="true" />
 | 
				
			||||||
| 
						 | 
					@ -144,7 +147,7 @@
 | 
				
			||||||
      <recent name="D:\Github\EntityLib\test-plugin" />
 | 
					      <recent name="D:\Github\EntityLib\test-plugin" />
 | 
				
			||||||
    </key>
 | 
					    </key>
 | 
				
			||||||
  </component>
 | 
					  </component>
 | 
				
			||||||
  <component name="RunManager" selected="Gradle.EntityLib [publish]">
 | 
					  <component name="RunManager" selected="Gradle.EntityLib:test-plugin [runServer]">
 | 
				
			||||||
    <configuration name="Main" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
 | 
					    <configuration name="Main" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
 | 
				
			||||||
      <option name="MAIN_CLASS_NAME" value="me.tofaa.entitylib.codegen.Main" />
 | 
					      <option name="MAIN_CLASS_NAME" value="me.tofaa.entitylib.codegen.Main" />
 | 
				
			||||||
      <module name="EntityLib.code-gen.main" />
 | 
					      <module name="EntityLib.code-gen.main" />
 | 
				
			||||||
| 
						 | 
					@ -248,9 +251,9 @@
 | 
				
			||||||
    </configuration>
 | 
					    </configuration>
 | 
				
			||||||
    <recent_temporary>
 | 
					    <recent_temporary>
 | 
				
			||||||
      <list>
 | 
					      <list>
 | 
				
			||||||
 | 
					        <item itemvalue="Gradle.EntityLib:test-plugin [runServer]" />
 | 
				
			||||||
        <item itemvalue="Gradle.EntityLib [publish]" />
 | 
					        <item itemvalue="Gradle.EntityLib [publish]" />
 | 
				
			||||||
        <item itemvalue="Gradle.EntityLib:test-plugin [publish]" />
 | 
					        <item itemvalue="Gradle.EntityLib:test-plugin [publish]" />
 | 
				
			||||||
        <item itemvalue="Gradle.EntityLib:test-plugin [runServer]" />
 | 
					 | 
				
			||||||
        <item itemvalue="Gradle.EntityLib:test-plugin [shadowJar]" />
 | 
					        <item itemvalue="Gradle.EntityLib:test-plugin [shadowJar]" />
 | 
				
			||||||
        <item itemvalue="Application.Main" />
 | 
					        <item itemvalue="Application.Main" />
 | 
				
			||||||
      </list>
 | 
					      </list>
 | 
				
			||||||
| 
						 | 
					@ -319,7 +322,8 @@
 | 
				
			||||||
      <workItem from="1708264836358" duration="46000" />
 | 
					      <workItem from="1708264836358" duration="46000" />
 | 
				
			||||||
      <workItem from="1708265094998" duration="204000" />
 | 
					      <workItem from="1708265094998" duration="204000" />
 | 
				
			||||||
      <workItem from="1708265345702" duration="358000" />
 | 
					      <workItem from="1708265345702" duration="358000" />
 | 
				
			||||||
      <workItem from="1708343107313" duration="7795000" />
 | 
					      <workItem from="1708343107313" duration="8276000" />
 | 
				
			||||||
 | 
					      <workItem from="1708352150286" duration="1520000" />
 | 
				
			||||||
    </task>
 | 
					    </task>
 | 
				
			||||||
    <servers />
 | 
					    <servers />
 | 
				
			||||||
  </component>
 | 
					  </component>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,6 @@ public final class APIConfig {
 | 
				
			||||||
    private boolean checkForUpdates = false;
 | 
					    private boolean checkForUpdates = false;
 | 
				
			||||||
    private boolean tickTickables = false;
 | 
					    private boolean tickTickables = false;
 | 
				
			||||||
    private boolean platformLogger = false;
 | 
					    private boolean platformLogger = false;
 | 
				
			||||||
    private boolean useAsyncEvents = false;
 | 
					 | 
				
			||||||
    private boolean defaultCommands = false;
 | 
					    private boolean defaultCommands = false;
 | 
				
			||||||
    private boolean platformTracking = false;
 | 
					    private boolean platformTracking = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,11 +71,6 @@ public final class APIConfig {
 | 
				
			||||||
        return this;
 | 
					        return this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public @NotNull APIConfig useAsyncEvents() {
 | 
					 | 
				
			||||||
        this.useAsyncEvents = true;
 | 
					 | 
				
			||||||
        return this;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public boolean shouldRegisterDefaultCommands() {
 | 
					    public boolean shouldRegisterDefaultCommands() {
 | 
				
			||||||
        return defaultCommands;
 | 
					        return defaultCommands;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -101,10 +95,6 @@ public final class APIConfig {
 | 
				
			||||||
        return platformLogger;
 | 
					        return platformLogger;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean shouldUseAsyncEvents() {
 | 
					 | 
				
			||||||
        return useAsyncEvents;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public boolean shouldTrackPlatformEntities() {
 | 
					    public boolean shouldTrackPlatformEntities() {
 | 
				
			||||||
        return platformTracking;
 | 
					        return platformTracking;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,9 @@
 | 
				
			||||||
package me.tofaa.entitylib;
 | 
					package me.tofaa.entitylib;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import me.tofaa.entitylib.event.EventBus;
 | 
					import me.tofaa.entitylib.event.EventHandler;
 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
import org.jetbrains.annotations.Nullable;
 | 
					import org.jetbrains.annotations.Nullable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.concurrent.CompletableFuture;
 | 
					 | 
				
			||||||
import java.util.logging.Logger;
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
import java.util.stream.Stream;
 | 
					import java.util.stream.Stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,11 +60,10 @@ public interface Platform<P> {
 | 
				
			||||||
    @NotNull Logger getLogger();
 | 
					    @NotNull Logger getLogger();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Gets the event bus for the platform.
 | 
					     * Gets the event handler for the platform.
 | 
				
			||||||
     * WARNING: If you have {@link APIConfig#shouldUseAsyncEvents()} set to true, cast this to {@link EventBus.Async} when handling cancelled events.
 | 
					 | 
				
			||||||
     * @return
 | 
					     * @return
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    @NotNull EventBus getEventBus();
 | 
					    @NotNull EventHandler getEventHandler();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Sets up the API for the platform. This method should be called automatically by the platform. Don't call it yourself.
 | 
					     * Sets up the API for the platform. This method should be called automatically by the platform. Don't call it yourself.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,62 +0,0 @@
 | 
				
			||||||
package me.tofaa.entitylib.event;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.function.Consumer;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * A basic EventBus for scheduling and handling {@link EntityLibEvent}
 | 
					 | 
				
			||||||
 * Async event busses are not thread safe, and should be handled with care. This means theres no guarantee that the event will be cancelled in time.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
public interface EventBus {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static @NotNull EventBus newBus(boolean async) {
 | 
					 | 
				
			||||||
        return async ? new EventBusAsync() : new EventBusSync();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Adds a listener to the EventBus.
 | 
					 | 
				
			||||||
     * @param listener The listener object
 | 
					 | 
				
			||||||
     * @param <T> The type of {@link EntityLibEvent}
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    <T extends EntityLibEvent> void addListener(@NotNull EventListener<T> listener);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Adds a listener to the EventBus.
 | 
					 | 
				
			||||||
     * @param eventClass The events class
 | 
					 | 
				
			||||||
     * @param consumer The consumer for the event.
 | 
					 | 
				
			||||||
     * @param <T> The type of {@link EntityLibEvent}
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    <T extends EntityLibEvent> void addListener(@NotNull Class<T> eventClass, @NotNull Consumer<T> consumer);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Removes a listener from the EventBus.
 | 
					 | 
				
			||||||
     * @param listener the listener object.
 | 
					 | 
				
			||||||
     * @param <T> The type of {@link EntityLibEvent}
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    <T extends EntityLibEvent> void removeListener(@NotNull EventListener<T> listener);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Calls the event and processes all the attached {@link EventListener} for the event.
 | 
					 | 
				
			||||||
     * If your bus is async, rather than using this, use {@link Async#call(EntityLibEvent, Consumer)} to avoid any race conditions.
 | 
					 | 
				
			||||||
     * @param event the event object to process handlers for.
 | 
					 | 
				
			||||||
     * @return the same event object, but already modified.
 | 
					 | 
				
			||||||
     * @param <T> The type of {@link EntityLibEvent}
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    <T extends EntityLibEvent> @NotNull T call(@NotNull T event);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    interface Async extends EventBus {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /**
 | 
					 | 
				
			||||||
         * A safer way to handle and process an event. Does exactly what {@link EventBus#call(EntityLibEvent)} does but allows you to attach a callback, rather than working with it yourself,
 | 
					 | 
				
			||||||
         * the callback is executed on the thread this is called, and not the main thread.
 | 
					 | 
				
			||||||
         * @param event the event object to process handlers for.
 | 
					 | 
				
			||||||
         * @param completionCallback the callback handled after the event is consumed async
 | 
					 | 
				
			||||||
         * @param <T> The type of {@link EntityLibEvent}
 | 
					 | 
				
			||||||
         */
 | 
					 | 
				
			||||||
        <T extends EntityLibEvent> void call(@NotNull T event, @NotNull Consumer<T> completionCallback);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,60 +0,0 @@
 | 
				
			||||||
package me.tofaa.entitylib.event;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.HashSet;
 | 
					 | 
				
			||||||
import java.util.Map;
 | 
					 | 
				
			||||||
import java.util.concurrent.ConcurrentHashMap;
 | 
					 | 
				
			||||||
import java.util.concurrent.LinkedBlockingQueue;
 | 
					 | 
				
			||||||
import java.util.concurrent.ThreadPoolExecutor;
 | 
					 | 
				
			||||||
import java.util.concurrent.TimeUnit;
 | 
					 | 
				
			||||||
import java.util.function.Consumer;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
final class EventBusAsync implements EventBus.Async {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private final Map listeners = new ConcurrentHashMap();
 | 
					 | 
				
			||||||
    private final ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 4, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public <T extends EntityLibEvent> void addListener(@NotNull EventListener<T> listener) {
 | 
					 | 
				
			||||||
        if (listeners.containsKey(listener.getEventClass())) {
 | 
					 | 
				
			||||||
            listeners.put(listener.getEventClass(), new HashSet<>());
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        ((HashSet) listeners.get(listener.getEventClass())).add(listener);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public <T extends EntityLibEvent> void addListener(@NotNull Class<T> eventClass, @NotNull Consumer<T> consumer) {
 | 
					 | 
				
			||||||
        addListener(EventListener.generateListener(eventClass, consumer));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public <T extends EntityLibEvent> void removeListener(@NotNull EventListener<T> listener) {
 | 
					 | 
				
			||||||
        if (listeners.containsKey(listener.getEventClass())) {
 | 
					 | 
				
			||||||
            ((HashSet) listeners.get(listener.getEventClass())).remove(listener);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public <T extends EntityLibEvent> @NotNull T call(@NotNull T event) {
 | 
					 | 
				
			||||||
        executor.execute(() -> dispatchEvent(event));
 | 
					 | 
				
			||||||
        return event;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private <T extends EntityLibEvent> void dispatchEvent(T event) {
 | 
					 | 
				
			||||||
        if (!listeners.containsKey(event.getClass())) return;
 | 
					 | 
				
			||||||
        HashSet<EventListener<T>> consumers = (HashSet<EventListener<T>>) listeners.get(event.getClass());
 | 
					 | 
				
			||||||
        consumers.forEach(consumer -> consumer.handle(event));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public <T extends EntityLibEvent> void call(@NotNull T event, @NotNull Consumer<T> completionCallback) {
 | 
					 | 
				
			||||||
        executor.execute(() -> {
 | 
					 | 
				
			||||||
            dispatchEvent(event);
 | 
					 | 
				
			||||||
            completionCallback.accept(event);
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,43 +0,0 @@
 | 
				
			||||||
package me.tofaa.entitylib.event;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.HashSet;
 | 
					 | 
				
			||||||
import java.util.Map;
 | 
					 | 
				
			||||||
import java.util.concurrent.ConcurrentHashMap;
 | 
					 | 
				
			||||||
import java.util.function.Consumer;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@SuppressWarnings("unchecked")
 | 
					 | 
				
			||||||
class EventBusSync implements EventBus {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private final Map listeners = new ConcurrentHashMap();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public <T extends EntityLibEvent> void addListener(@NotNull EventListener<T> listener) {
 | 
					 | 
				
			||||||
        if (listeners.containsKey(listener.getEventClass())) {
 | 
					 | 
				
			||||||
            listeners.put(listener.getEventClass(), new HashSet<>());
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        ((HashSet) listeners.get(listener.getEventClass())).add(listener);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public <T extends EntityLibEvent> void addListener(@NotNull Class<T> eventClass, @NotNull Consumer<T> consumer) {
 | 
					 | 
				
			||||||
        addListener(EventListener.generateListener(eventClass, consumer));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public <T extends EntityLibEvent> void removeListener(@NotNull EventListener<T> listener) {
 | 
					 | 
				
			||||||
        if (listeners.containsKey(listener.getEventClass())) {
 | 
					 | 
				
			||||||
            ((HashSet) listeners.get(listener.getEventClass())).remove(listener);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public <T extends EntityLibEvent> @NotNull T call(@NotNull T event) {
 | 
					 | 
				
			||||||
        if (!listeners.containsKey(event.getClass())) return event;
 | 
					 | 
				
			||||||
        HashSet<EventListener<T>> consumers = (HashSet<EventListener<T>>) listeners.get(event.getClass());
 | 
					 | 
				
			||||||
        consumers.forEach(consumer -> consumer.handle(event));
 | 
					 | 
				
			||||||
        return event;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					package me.tofaa.entitylib.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@FunctionalInterface
 | 
				
			||||||
 | 
					public interface EventCallback<E extends EntityLibEvent> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void run(@NotNull E event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										115
									
								
								api/src/main/java/me/tofaa/entitylib/event/EventHandler.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								api/src/main/java/me/tofaa/entitylib/event/EventHandler.java
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,115 @@
 | 
				
			||||||
 | 
					package me.tofaa.entitylib.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.concurrent.CopyOnWriteArraySet;
 | 
				
			||||||
 | 
					import java.util.stream.Stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Represents an element which can have {@link EntityLibEvent} listeners assigned to it.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public interface EventHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static @NotNull EventHandler create() {
 | 
				
			||||||
 | 
					        return new EventHandlerImpl();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a {@link Map} containing all the listeners assigned to a specific {@link EntityLibEvent} type.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return a {@link Map} with all the listeners
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
 | 
					    Map<Class<? extends EntityLibEvent>, Collection<EventCallback>> getEventCallbacksMap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Adds a new event callback for the specified type {@code eventClass}.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param eventClass    the event class
 | 
				
			||||||
 | 
					     * @param eventCallback the event callback
 | 
				
			||||||
 | 
					     * @param <E>           the event type
 | 
				
			||||||
 | 
					     * @return true if the callback collection changed as a result of the call
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    default <E extends EntityLibEvent> boolean addEventCallback(@NotNull Class<E> eventClass, @NotNull EventCallback<E> eventCallback) {
 | 
				
			||||||
 | 
					        Collection<EventCallback> callbacks = getEventCallbacks(eventClass);
 | 
				
			||||||
 | 
					        return callbacks.add(eventCallback);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Removes an event callback.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param eventClass    the event class
 | 
				
			||||||
 | 
					     * @param eventCallback the event callback
 | 
				
			||||||
 | 
					     * @param <E>           the event type
 | 
				
			||||||
 | 
					     * @return true if the callback was removed as a result of this call
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    default <E extends EntityLibEvent> boolean removeEventCallback(@NotNull Class<E> eventClass, @NotNull EventCallback<E> eventCallback) {
 | 
				
			||||||
 | 
					        Collection<EventCallback> callbacks = getEventCallbacks(eventClass);
 | 
				
			||||||
 | 
					        return callbacks.remove(eventCallback);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the event callbacks of a specific event type.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param eventClass the event class
 | 
				
			||||||
 | 
					     * @param <E>        the event type
 | 
				
			||||||
 | 
					     * @return all event callbacks for the specified type {@code eventClass}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
 | 
					    default <E extends EntityLibEvent> Collection<EventCallback> getEventCallbacks(@NotNull Class<E> eventClass) {
 | 
				
			||||||
 | 
					        return getEventCallbacksMap().computeIfAbsent(eventClass, clazz -> new CopyOnWriteArraySet<>());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a {@link Stream} containing all the {@link EventCallback}, no matter to which {@link EntityLibEvent} they are linked.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return a {@link Stream} containing all the callbacks
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
 | 
					    default Stream<EventCallback> getEventCallbacks() {
 | 
				
			||||||
 | 
					        return getEventCallbacksMap().values().stream().flatMap(Collection::stream);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Calls the specified {@link EntityLibEvent} with all the assigned {@link EventCallback}.
 | 
				
			||||||
 | 
					     * <p>
 | 
				
			||||||
 | 
					     * Events are always called in the current thread.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param eventClass the event class
 | 
				
			||||||
 | 
					     * @param event      the event object
 | 
				
			||||||
 | 
					     * @param <E>        the event type
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    default <E extends EntityLibEvent> void callEvent(@NotNull Class<E> eventClass, @NotNull E event) {
 | 
				
			||||||
 | 
					        final Collection<EventCallback> eventCallbacks = getEventCallbacks(eventClass);
 | 
				
			||||||
 | 
					        runEvent(eventCallbacks, event);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Calls a {@link CancellableEntityLibEvent} and execute {@code successCallback} if the {@link EntityLibEvent} is not cancelled.
 | 
				
			||||||
 | 
					     * <p>
 | 
				
			||||||
 | 
					     * Does call {@link #callEvent(Class, EntityLibEvent)} internally.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param eventClass      the event class
 | 
				
			||||||
 | 
					     * @param event           the event object
 | 
				
			||||||
 | 
					     * @param successCallback the callback called when the event is not cancelled
 | 
				
			||||||
 | 
					     * @param <E>             the event type
 | 
				
			||||||
 | 
					     * @see #callEvent(Class, EntityLibEvent)
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    default <E extends EntityLibEvent & CancellableEntityLibEvent> void callCancellableEvent(@NotNull Class<E> eventClass,
 | 
				
			||||||
 | 
					                                                                           @NotNull E event,
 | 
				
			||||||
 | 
					                                                                           @NotNull Runnable successCallback) {
 | 
				
			||||||
 | 
					        callEvent(eventClass, event);
 | 
				
			||||||
 | 
					        if (!event.isCancelled()) {
 | 
				
			||||||
 | 
					            successCallback.run();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    default <E extends EntityLibEvent> void runEvent(@NotNull Collection<EventCallback> eventCallbacks, @NotNull E event) {
 | 
				
			||||||
 | 
					        for (EventCallback<E> eventCallback : eventCallbacks) {
 | 
				
			||||||
 | 
					            eventCallback.run(event);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					package me.tofaa.entitylib.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.concurrent.ConcurrentHashMap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					final class EventHandlerImpl implements EventHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Events
 | 
				
			||||||
 | 
					    private final Map<Class<? extends EntityLibEvent>, Collection<EventCallback>> eventCallbacks = new ConcurrentHashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    EventHandlerImpl() {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public <T extends EntityLibEvent> void  registerListener(EventListener<T> listener) {
 | 
				
			||||||
 | 
					        addEventCallback(listener.getEventClass(), EventListener.createEventCallback(listener));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Map<Class<? extends EntityLibEvent>, Collection<EventCallback>> getEventCallbacksMap() {
 | 
				
			||||||
 | 
					        return eventCallbacks;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,10 @@ public interface EventListener<E extends EntityLibEvent> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void handle(@NotNull E event);
 | 
					    void handle(@NotNull E event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static <T extends EntityLibEvent> EventCallback<T> createEventCallback(@NotNull EventListener<T> listener) {
 | 
				
			||||||
 | 
					        return listener::handle;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static <T extends EntityLibEvent> EventListener<T> generateListener(Class<T> eventClass, Consumer<T> consumer) {
 | 
					    static <T extends EntityLibEvent> EventListener<T> generateListener(Class<T> eventClass, Consumer<T> consumer) {
 | 
				
			||||||
        return new EventListener<T>() {
 | 
					        return new EventListener<T>() {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
package me.tofaa.entitylib.event.types.tracking;
 | 
					package me.tofaa.entitylib.event.types;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.github.retrooper.packetevents.protocol.player.User;
 | 
					import com.github.retrooper.packetevents.protocol.player.User;
 | 
				
			||||||
import me.tofaa.entitylib.TrackedEntity;
 | 
					import me.tofaa.entitylib.TrackedEntity;
 | 
				
			||||||
| 
						 | 
					@ -1,31 +0,0 @@
 | 
				
			||||||
package me.tofaa.entitylib.event.types;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.github.retrooper.packetevents.protocol.player.User;
 | 
					 | 
				
			||||||
import me.tofaa.entitylib.event.CancellableEntityLibEvent;
 | 
					 | 
				
			||||||
import me.tofaa.entitylib.event.EntityLibEvent;
 | 
					 | 
				
			||||||
import me.tofaa.entitylib.meta.EntityMeta;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public final class UserReceiveMetaUpdateEvent implements CancellableEntityLibEvent {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private final User user;
 | 
					 | 
				
			||||||
    private boolean cancelled;
 | 
					 | 
				
			||||||
    private EntityMeta meta;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public UserReceiveMetaUpdateEvent(User user) {
 | 
					 | 
				
			||||||
        this.user = user;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public User getUser() {
 | 
					 | 
				
			||||||
        return user;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public boolean isCancelled() {
 | 
					 | 
				
			||||||
        return cancelled;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public void setCancelled(boolean cancelled) {
 | 
					 | 
				
			||||||
        this.cancelled = cancelled;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,37 +0,0 @@
 | 
				
			||||||
package me.tofaa.entitylib.event.types;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.github.retrooper.packetevents.protocol.player.User;
 | 
					 | 
				
			||||||
import me.tofaa.entitylib.event.CancellableEntityLibEvent;
 | 
					 | 
				
			||||||
import me.tofaa.entitylib.event.EntityLibEvent;
 | 
					 | 
				
			||||||
import me.tofaa.entitylib.wrapper.WrapperEntity;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class UserRefreshEntityEvent implements CancellableEntityLibEvent {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private final User user;
 | 
					 | 
				
			||||||
    private final WrapperEntity entity;
 | 
					 | 
				
			||||||
    private boolean cancelled;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public UserRefreshEntityEvent(User user, WrapperEntity entity) {
 | 
					 | 
				
			||||||
        this.user = user;
 | 
					 | 
				
			||||||
        this.entity = entity;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public User getUser() {
 | 
					 | 
				
			||||||
        return user;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public WrapperEntity getEntity() {
 | 
					 | 
				
			||||||
        return entity;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public boolean isCancelled() {
 | 
					 | 
				
			||||||
        return cancelled;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public void setCancelled(boolean cancelled) {
 | 
					 | 
				
			||||||
        this.cancelled = cancelled;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,12 @@
 | 
				
			||||||
package me.tofaa.entitylib.event.types.tracking;
 | 
					package me.tofaa.entitylib.event.types;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.github.retrooper.packetevents.protocol.player.User;
 | 
					import com.github.retrooper.packetevents.protocol.player.User;
 | 
				
			||||||
import me.tofaa.entitylib.TrackedEntity;
 | 
					import me.tofaa.entitylib.TrackedEntity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import me.tofaa.entitylib.event.EntityLibEvent;
 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class UserStopTrackingEntityEvent extends GeneralTrackingEvent {
 | 
					public class UserStopTrackingEntityEvent extends GeneralTrackingEvent implements EntityLibEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public UserStopTrackingEntityEvent(@NotNull User user, @NotNull TrackedEntity entity) {
 | 
					    public UserStopTrackingEntityEvent(@NotNull User user, @NotNull TrackedEntity entity) {
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,11 @@
 | 
				
			||||||
package me.tofaa.entitylib.event.types.tracking;
 | 
					package me.tofaa.entitylib.event.types;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.github.retrooper.packetevents.protocol.player.User;
 | 
					import com.github.retrooper.packetevents.protocol.player.User;
 | 
				
			||||||
import me.tofaa.entitylib.TrackedEntity;
 | 
					import me.tofaa.entitylib.TrackedEntity;
 | 
				
			||||||
 | 
					import me.tofaa.entitylib.event.EntityLibEvent;
 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public final class UserTrackingEntityEvent extends GeneralTrackingEvent {
 | 
					public final class UserTrackingEntityEvent extends GeneralTrackingEvent implements EntityLibEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public UserTrackingEntityEvent(@NotNull User user, @NotNull TrackedEntity entity) {
 | 
					    public UserTrackingEntityEvent(@NotNull User user, @NotNull TrackedEntity entity) {
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,10 @@
 | 
				
			||||||
package me.tofaa.entitylib.common;
 | 
					package me.tofaa.entitylib.common;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import me.tofaa.entitylib.*;
 | 
					import me.tofaa.entitylib.*;
 | 
				
			||||||
import me.tofaa.entitylib.event.EventBus;
 | 
					import me.tofaa.entitylib.event.EventHandler;
 | 
				
			||||||
import org.jetbrains.annotations.NotNull;
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
import org.jetbrains.annotations.Nullable;
 | 
					import org.jetbrains.annotations.Nullable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.concurrent.CompletableFuture;
 | 
					 | 
				
			||||||
import java.util.logging.Logger;
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
import java.util.stream.Stream;
 | 
					import java.util.stream.Stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +13,7 @@ public abstract class AbstractPlatform<P> implements Platform<P> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected final P handle;
 | 
					    protected final P handle;
 | 
				
			||||||
    protected Logger logger;
 | 
					    protected Logger logger;
 | 
				
			||||||
    private EventBus eventBus;
 | 
					    private EventHandler eventHandler;
 | 
				
			||||||
    private EntityIdProvider entityIdProvider;
 | 
					    private EntityIdProvider entityIdProvider;
 | 
				
			||||||
    private EntityUuidProvider entityUuidProvider;
 | 
					    private EntityUuidProvider entityUuidProvider;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,11 +35,9 @@ public abstract class AbstractPlatform<P> implements Platform<P> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void setupApi(@NotNull APIConfig settings) {
 | 
					    public void setupApi(@NotNull APIConfig settings) {
 | 
				
			||||||
        this.eventBus = EventBus.newBus(settings.shouldUseAsyncEvents());
 | 
					        this.eventHandler = EventHandler.create();
 | 
				
			||||||
        this.entityIdProvider = new EntityIdProvider.DefaultEntityIdProvider();
 | 
					        this.entityIdProvider = new EntityIdProvider.DefaultEntityIdProvider();
 | 
				
			||||||
        this.entityUuidProvider = new EntityUuidProvider.DefaultEntityUuidProvider();
 | 
					        this.entityUuidProvider = new EntityUuidProvider.DefaultEntityUuidProvider();
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @NotNull
 | 
					    @NotNull
 | 
				
			||||||
| 
						 | 
					@ -73,8 +70,8 @@ public abstract class AbstractPlatform<P> implements Platform<P> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @NotNull
 | 
					    @NotNull
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public EventBus getEventBus() {
 | 
					    public EventHandler getEventHandler() {
 | 
				
			||||||
        return eventBus;
 | 
					        return eventHandler;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @NotNull
 | 
					    @NotNull
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,8 +9,8 @@ import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerDe
 | 
				
			||||||
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnEntity;
 | 
					import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnEntity;
 | 
				
			||||||
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnExperienceOrb;
 | 
					import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnExperienceOrb;
 | 
				
			||||||
import me.tofaa.entitylib.TrackedEntity;
 | 
					import me.tofaa.entitylib.TrackedEntity;
 | 
				
			||||||
import me.tofaa.entitylib.event.types.tracking.UserStopTrackingEntityEvent;
 | 
					import me.tofaa.entitylib.event.types.UserStopTrackingEntityEvent;
 | 
				
			||||||
import me.tofaa.entitylib.event.types.tracking.UserTrackingEntityEvent;
 | 
					import me.tofaa.entitylib.event.types.UserTrackingEntityEvent;
 | 
				
			||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.event.EventHandler;
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
import org.bukkit.event.Listener;
 | 
					import org.bukkit.event.Listener;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
rootProject.name = 'EntityLib'
 | 
					rootProject.name = 'EntityLib'
 | 
				
			||||||
 | 
					include 'test-plugin'
 | 
				
			||||||
include 'api'
 | 
					include 'api'
 | 
				
			||||||
include 'platforms:spigot'
 | 
					include 'platforms:spigot'
 | 
				
			||||||
findProject(':platforms:spigot')?.name = 'spigot'
 | 
					findProject(':platforms:spigot')?.name = 'spigot'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,12 @@ plugins {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
group = 'me.tofaa.peentitymeta'
 | 
					group = 'me.tofaa.peentitymeta'
 | 
				
			||||||
version = '1.0-SNAPSHOT'
 | 
					version = '1.0-SNAPSHOT'
 | 
				
			||||||
 | 
					// java 17
 | 
				
			||||||
 | 
					java {
 | 
				
			||||||
 | 
					    toolchain {
 | 
				
			||||||
 | 
					        languageVersion.set(JavaLanguageVersion.of(17))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
repositories {
 | 
					repositories {
 | 
				
			||||||
    mavenCentral()
 | 
					    mavenCentral()
 | 
				
			||||||
| 
						 | 
					@ -27,7 +33,7 @@ repositories {
 | 
				
			||||||
dependencies {
 | 
					dependencies {
 | 
				
			||||||
    compileOnly('org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT')
 | 
					    compileOnly('org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT')
 | 
				
			||||||
    compileOnly('com.github.retrooper.packetevents:spigot:2.0.2')
 | 
					    compileOnly('com.github.retrooper.packetevents:spigot:2.0.2')
 | 
				
			||||||
    implementation("com.github.Tofaa2.EntityLib:spigot:2.0.0-SNAPSHOT")
 | 
					    implementation(project(":platforms:spigot"))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tasks {
 | 
					tasks {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ import me.tofaa.entitylib.meta.mobs.passive.ChickenMeta;
 | 
				
			||||||
import me.tofaa.entitylib.spigot.SpigotEntityLibAPI;
 | 
					import me.tofaa.entitylib.spigot.SpigotEntityLibAPI;
 | 
				
			||||||
import me.tofaa.entitylib.spigot.SpigotEntityLibPlatform;
 | 
					import me.tofaa.entitylib.spigot.SpigotEntityLibPlatform;
 | 
				
			||||||
import me.tofaa.entitylib.wrapper.WrapperEntity;
 | 
					import me.tofaa.entitylib.wrapper.WrapperEntity;
 | 
				
			||||||
import org.bukkit.World;
 | 
					import me.tofaa.entitylib.event.types.*;
 | 
				
			||||||
import org.bukkit.command.Command;
 | 
					import org.bukkit.command.Command;
 | 
				
			||||||
import org.bukkit.command.CommandExecutor;
 | 
					import org.bukkit.command.CommandExecutor;
 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
| 
						 | 
					@ -35,6 +35,14 @@ public class TestEntityLibPlugin extends JavaPlugin implements CommandExecutor {
 | 
				
			||||||
        EntityLib.init(platform, settings);
 | 
					        EntityLib.init(platform, settings);
 | 
				
			||||||
        api = platform.getAPI();
 | 
					        api = platform.getAPI();
 | 
				
			||||||
        getCommand("testapi").setExecutor(this);
 | 
					        getCommand("testapi").setExecutor(this);
 | 
				
			||||||
 | 
					        platform.getEventHandler().addEventCallback(UserTrackingEntityEvent.class, event -> {
 | 
				
			||||||
 | 
					            System.out.println("Tracking: " + event.getEntity().getEntityId());
 | 
				
			||||||
 | 
					            System.out.println("Size: " + platform.queryPlatformEntities().toArray().length);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        platform.getEventHandler().addEventCallback(UserStopTrackingEntityEvent.class, event -> {
 | 
				
			||||||
 | 
					            System.out.println("Stop Tracking: " + event.getEntity().getEntityId());
 | 
				
			||||||
 | 
					            System.out.println("Size: " + platform.queryPlatformEntities().toArray().length);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue