From 1c1c6a479e781b872f0448d03c591d0e330beec6 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 14 Nov 2024 01:01:37 +0200 Subject: [PATCH] Major: Tracker system removal --- .../java/me/tofaa/entitylib/APIConfig.java | 25 +---- .../java/me/tofaa/entitylib/Platform.java | 15 --- .../me/tofaa/entitylib/TrackedEntity.java | 13 --- .../event/types/GeneralTrackingEvent.java | 26 ----- .../types/UserStopTrackingEntityEvent.java | 17 --- .../event/types/UserTrackingEntityEvent.java | 14 --- .../me/tofaa/entitylib/ve/ViewerEngine.java | 24 ++++ .../entitylib/wrapper/WrapperEntity.java | 3 +- .../entitylib/common/AbstractPlatform.java | 10 -- .../common/AbstractTrackedEntity.java | 19 ---- .../spigot/InternalRegistryListener.java | 106 ------------------ .../tofaa/entitylib/spigot/SpigotEntity.java | 24 ---- .../spigot/SpigotEntityLibPlatform.java | 35 ------ test-plugin/build.gradle.kts | 2 +- .../testentitylib/TestEntityLibPlugin.java | 13 --- 15 files changed, 31 insertions(+), 315 deletions(-) delete mode 100644 api/src/main/java/me/tofaa/entitylib/TrackedEntity.java delete mode 100644 api/src/main/java/me/tofaa/entitylib/event/types/GeneralTrackingEvent.java delete mode 100644 api/src/main/java/me/tofaa/entitylib/event/types/UserStopTrackingEntityEvent.java delete mode 100644 api/src/main/java/me/tofaa/entitylib/event/types/UserTrackingEntityEvent.java delete mode 100644 common/src/main/java/me/tofaa/entitylib/common/AbstractTrackedEntity.java delete mode 100644 platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/InternalRegistryListener.java delete mode 100644 platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntity.java diff --git a/api/src/main/java/me/tofaa/entitylib/APIConfig.java b/api/src/main/java/me/tofaa/entitylib/APIConfig.java index 3cba64a..37cfad1 100644 --- a/api/src/main/java/me/tofaa/entitylib/APIConfig.java +++ b/api/src/main/java/me/tofaa/entitylib/APIConfig.java @@ -10,9 +10,7 @@ public final class APIConfig { private boolean checkForUpdates = false; private boolean tickTickables = false; private boolean platformLogger = false; - private boolean defaultCommands = false; - private boolean platformTracking = false; - private boolean bstats = false; + private boolean bstats = true; public APIConfig(PacketEventsAPI packetEvents) { this.packetEvents = packetEvents; @@ -23,13 +21,13 @@ public final class APIConfig { return this; } - public @NotNull APIConfig usePlatformLogger() { - this.platformLogger = true; + public @NotNull APIConfig disableBStats() { + this.bstats = false; return this; } - public @NotNull APIConfig trackPlatformEntities() { - this.platformTracking = true; + public @NotNull APIConfig usePlatformLogger() { + this.platformLogger = true; return this; } @@ -48,15 +46,6 @@ public final class APIConfig { return this; } - public @NotNull APIConfig registerDefaultCommands() { - this.defaultCommands = true; - return this; - } - - public boolean shouldRegisterDefaultCommands() { - return defaultCommands; - } - public boolean isDebugMode() { return debugMode; } @@ -77,10 +66,6 @@ public final class APIConfig { return platformLogger; } - public boolean shouldTrackPlatformEntities() { - return platformTracking; - } - public boolean shouldUseBstats() { return bstats; } diff --git a/api/src/main/java/me/tofaa/entitylib/Platform.java b/api/src/main/java/me/tofaa/entitylib/Platform.java index 8238335..62accad 100644 --- a/api/src/main/java/me/tofaa/entitylib/Platform.java +++ b/api/src/main/java/me/tofaa/entitylib/Platform.java @@ -14,21 +14,6 @@ import java.util.stream.Stream; public interface Platform

{ - /** - * Queries a stream of platform specific entities if the platform supports - * @throws UnsupportedOperationException if the platform does not support querying entities. - * @return a stream of platform specific entities. The stream is not guaranteed to be synchronized. - */ - @NotNull Stream queryPlatformEntities(); - - /** - * Finds a platform specific entity by its entityId. - * @param entityId the entityId of the entity. - * @return a future that completes with the entity if found, or null if not found. - * @throws UnsupportedOperationException if the platform does not support querying entities. - */ - @Nullable TrackedEntity findPlatformEntity(int entityId); - /** * Gets the entityId integer provider. This can be provided by a platform if needed. * @return the entityId integer provider. diff --git a/api/src/main/java/me/tofaa/entitylib/TrackedEntity.java b/api/src/main/java/me/tofaa/entitylib/TrackedEntity.java deleted file mode 100644 index 3db9a9e..0000000 --- a/api/src/main/java/me/tofaa/entitylib/TrackedEntity.java +++ /dev/null @@ -1,13 +0,0 @@ -package me.tofaa.entitylib; - -import org.jetbrains.annotations.NotNull; - -import java.util.UUID; - -public interface TrackedEntity { - - int getEntityId(); - - @NotNull UUID getUuid(); - -} diff --git a/api/src/main/java/me/tofaa/entitylib/event/types/GeneralTrackingEvent.java b/api/src/main/java/me/tofaa/entitylib/event/types/GeneralTrackingEvent.java deleted file mode 100644 index cb082b6..0000000 --- a/api/src/main/java/me/tofaa/entitylib/event/types/GeneralTrackingEvent.java +++ /dev/null @@ -1,26 +0,0 @@ -package me.tofaa.entitylib.event.types; - -import com.github.retrooper.packetevents.protocol.player.User; -import me.tofaa.entitylib.TrackedEntity; -import me.tofaa.entitylib.event.EntityLibEvent; -import org.jetbrains.annotations.NotNull; - -public class GeneralTrackingEvent implements EntityLibEvent { - - private final User user; - private final TrackedEntity entity; - - public GeneralTrackingEvent(@NotNull User user, @NotNull TrackedEntity entity) { - this.user = user; - this.entity = entity; - } - - public User getUser() { - return user; - } - - public TrackedEntity getEntity() { - return entity; - } - -} diff --git a/api/src/main/java/me/tofaa/entitylib/event/types/UserStopTrackingEntityEvent.java b/api/src/main/java/me/tofaa/entitylib/event/types/UserStopTrackingEntityEvent.java deleted file mode 100644 index 5e550ef..0000000 --- a/api/src/main/java/me/tofaa/entitylib/event/types/UserStopTrackingEntityEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package me.tofaa.entitylib.event.types; - -import com.github.retrooper.packetevents.protocol.player.User; -import me.tofaa.entitylib.TrackedEntity; - -import me.tofaa.entitylib.event.EntityLibEvent; -import org.jetbrains.annotations.NotNull; - -public class UserStopTrackingEntityEvent extends GeneralTrackingEvent implements EntityLibEvent { - - - public UserStopTrackingEntityEvent(@NotNull User user, @NotNull TrackedEntity entity) { - super(user, entity); - } - - -} diff --git a/api/src/main/java/me/tofaa/entitylib/event/types/UserTrackingEntityEvent.java b/api/src/main/java/me/tofaa/entitylib/event/types/UserTrackingEntityEvent.java deleted file mode 100644 index 59b6ada..0000000 --- a/api/src/main/java/me/tofaa/entitylib/event/types/UserTrackingEntityEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package me.tofaa.entitylib.event.types; - -import com.github.retrooper.packetevents.protocol.player.User; -import me.tofaa.entitylib.TrackedEntity; -import me.tofaa.entitylib.event.EntityLibEvent; -import org.jetbrains.annotations.NotNull; - -public final class UserTrackingEntityEvent extends GeneralTrackingEvent implements EntityLibEvent { - - - public UserTrackingEntityEvent(@NotNull User user, @NotNull TrackedEntity entity) { - super(user, entity); - } -} diff --git a/api/src/main/java/me/tofaa/entitylib/ve/ViewerEngine.java b/api/src/main/java/me/tofaa/entitylib/ve/ViewerEngine.java index 93ee2e2..b81beaa 100644 --- a/api/src/main/java/me/tofaa/entitylib/ve/ViewerEngine.java +++ b/api/src/main/java/me/tofaa/entitylib/ve/ViewerEngine.java @@ -4,6 +4,7 @@ package me.tofaa.entitylib.ve; import com.github.retrooper.packetevents.protocol.player.User; import me.tofaa.entitylib.EntityLib; import me.tofaa.entitylib.wrapper.WrapperEntity; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnmodifiableView; @@ -13,6 +14,11 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +/** + * A basic viewer manipulation engine. + * Allows for a set of rules to be applied as to show and hide an entity from viewers. + */ +@ApiStatus.Experimental public class ViewerEngine { private final List globalRules; @@ -34,6 +40,16 @@ public class ViewerEngine { EntityLib.getApi().getPacketEvents().getEventManager().unregisterListener(listener); } + public void refresh() { + getTracked0().forEach(entity -> { + for (UUID viewer : entity.getViewers()) { + if (!canSpawnFor(viewer, entity)) { + entity.removeViewer(viewer); + } + } + }); + } + public Executor getExecutor() { return executor; } @@ -55,6 +71,14 @@ public class ViewerEngine { return globalRules.stream().anyMatch(rule -> rule.shouldSee(user)); } + public boolean canSpawnFor(UUID userId, WrapperEntity entity) { + User user = EntityLib.getApi().getPacketEvents().getProtocolManager().getUser( + EntityLib.getApi().getPacketEvents().getProtocolManager().getChannel(userId) + ); + if (user == null) return false; + return canSpawnFor(user, entity); + } + public @UnmodifiableView Collection getTracked() { return Collections.unmodifiableCollection(tracked); } diff --git a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java index 206f594..c779e7b 100644 --- a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java +++ b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java @@ -7,7 +7,6 @@ import com.github.retrooper.packetevents.util.Vector3d; import com.github.retrooper.packetevents.wrapper.PacketWrapper; import com.github.retrooper.packetevents.wrapper.play.server.*; import me.tofaa.entitylib.EntityLib; -import me.tofaa.entitylib.TrackedEntity; import me.tofaa.entitylib.container.EntityContainer; import me.tofaa.entitylib.meta.EntityMeta; import me.tofaa.entitylib.meta.types.ObjectData; @@ -23,7 +22,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Consumer; -public class WrapperEntity implements Tickable, TrackedEntity { +public class WrapperEntity implements Tickable { private final UUID uuid; private final int entityId; diff --git a/common/src/main/java/me/tofaa/entitylib/common/AbstractPlatform.java b/common/src/main/java/me/tofaa/entitylib/common/AbstractPlatform.java index 4cdfca4..6bb5109 100644 --- a/common/src/main/java/me/tofaa/entitylib/common/AbstractPlatform.java +++ b/common/src/main/java/me/tofaa/entitylib/common/AbstractPlatform.java @@ -23,16 +23,6 @@ public abstract class AbstractPlatform

implements Platform

{ this.entityUuidProvider = new EntityUuidProvider.DefaultEntityUuidProvider(); } - @Override - public @NotNull Stream queryPlatformEntities() { - throw new UnsupportedOperationException("Platform does not support querying entities."); - } - - @Override - public @Nullable TrackedEntity findPlatformEntity(int entityId) { - throw new UnsupportedOperationException("Platform does not support querying entities."); - } - @Override public void setupApi(@NotNull APIConfig settings) { this.eventHandler = EventHandler.create(); diff --git a/common/src/main/java/me/tofaa/entitylib/common/AbstractTrackedEntity.java b/common/src/main/java/me/tofaa/entitylib/common/AbstractTrackedEntity.java deleted file mode 100644 index c58bfe1..0000000 --- a/common/src/main/java/me/tofaa/entitylib/common/AbstractTrackedEntity.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.tofaa.entitylib.common; - -import me.tofaa.entitylib.TrackedEntity; -import org.jetbrains.annotations.NotNull; - -public abstract class AbstractTrackedEntity implements TrackedEntity { - - private final E platformEntity; - - protected AbstractTrackedEntity(@NotNull E platformEntity) { - this.platformEntity = platformEntity; - } - - @NotNull - public E getPlatformEntity() { - return platformEntity; - } - -} diff --git a/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/InternalRegistryListener.java b/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/InternalRegistryListener.java deleted file mode 100644 index 8334b97..0000000 --- a/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/InternalRegistryListener.java +++ /dev/null @@ -1,106 +0,0 @@ -package me.tofaa.entitylib.spigot; - -import com.github.retrooper.packetevents.event.PacketListenerAbstract; -import com.github.retrooper.packetevents.event.PacketSendEvent; -import com.github.retrooper.packetevents.protocol.packettype.PacketType; -import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon; -import com.github.retrooper.packetevents.protocol.player.User; -import com.github.retrooper.packetevents.wrapper.play.server.*; -import me.tofaa.entitylib.TrackedEntity; -import me.tofaa.entitylib.event.types.UserStopTrackingEntityEvent; -import me.tofaa.entitylib.event.types.UserTrackingEntityEvent; -import org.bukkit.Bukkit; -import org.bukkit.entity.Entity; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntitySpawnEvent; - -final class InternalRegistryListener extends PacketListenerAbstract implements Listener { - - private SpigotEntityLibPlatform platform; - - InternalRegistryListener(SpigotEntityLibPlatform platform) { - this.platform = platform; - } - - - @Override - public void onPacketSend(PacketSendEvent event) { - final User user = event.getUser(); - final PacketTypeCommon type = event.getPacketType(); - - if (type == PacketType.Play.Server.DESTROY_ENTITIES) { - WrapperPlayServerDestroyEntities packet = new WrapperPlayServerDestroyEntities(event); - int[] ids = packet.getEntityIds(); - Bukkit.getScheduler().runTaskLater(platform.getHandle(), () -> { - for (int id : ids) { - TrackedEntity tracked = findTracker(id); - if (tracked == null) { - continue; - } - platform.getEventHandler().callEvent(UserStopTrackingEntityEvent.class, new UserStopTrackingEntityEvent(user, tracked)); - } - }, 2L); - } - else if (type == PacketType.Play.Server.SPAWN_ENTITY) { - WrapperPlayServerSpawnEntity packet = new WrapperPlayServerSpawnEntity(event); - int id = packet.getEntityId(); - trackEntity(user, id); - } - else if (type == PacketType.Play.Server.SPAWN_EXPERIENCE_ORB) { - WrapperPlayServerSpawnExperienceOrb packet = new WrapperPlayServerSpawnExperienceOrb(event); - int id = packet.getEntityId(); - trackEntity(user, id); - } - else if (type == PacketType.Play.Server.SPAWN_LIVING_ENTITY) { - WrapperPlayServerSpawnLivingEntity packet = new WrapperPlayServerSpawnLivingEntity(event); - int id = packet.getEntityId(); - trackEntity(user, id); - } - else if (type == PacketType.Play.Server.SPAWN_PLAYER) { - WrapperPlayServerSpawnPlayer packet = new WrapperPlayServerSpawnPlayer(event); - int id = packet.getEntityId(); - trackEntity(user, id); - } - else if (type == PacketType.Play.Server.SPAWN_WEATHER_ENTITY) { - WrapperPlayServerSpawnWeatherEntity packet = new WrapperPlayServerSpawnWeatherEntity(event); - int id = packet.getEntityId(); - trackEntity(user, id); - } - else if (type == PacketType.Play.Server.SPAWN_PAINTING) { - WrapperPlayServerSpawnPainting packet = new WrapperPlayServerSpawnPainting(event); - int id = packet.getEntityId(); - trackEntity(user, id); - } - } - - private void trackEntity(User user, int id) { - Bukkit.getScheduler().runTaskLater(platform.getHandle(), () -> { - TrackedEntity entity = findTracker(id); - if (entity == null) { - return; - } - platform.getEventHandler().callEvent(UserTrackingEntityEvent.class, new UserTrackingEntityEvent(user, entity)); - }, 2L); - } - - private TrackedEntity findTracker(int id) { - TrackedEntity entity = platform.findPlatformEntity(id); - if (entity == null) { - entity = platform.getAPI().getEntity(id); - } - if (entity == null) { - if (platform.getAPI().getSettings().isDebugMode()) { - platform.getLogger().warning("Failed to find entity with id " + id); - } - } - return entity; - } - - @EventHandler - public void onEntitySpawn(EntitySpawnEvent event) { - Entity e = event.getEntity(); - platform.getPlatformEntities().put(e.getEntityId(), e); - } - -} diff --git a/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntity.java b/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntity.java deleted file mode 100644 index f6a2602..0000000 --- a/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntity.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.tofaa.entitylib.spigot; - -import me.tofaa.entitylib.common.AbstractTrackedEntity; -import org.bukkit.entity.Entity; -import org.jetbrains.annotations.NotNull; - -import java.util.UUID; - -public class SpigotEntity extends AbstractTrackedEntity { - - public SpigotEntity(@NotNull Entity platformEntity) { - super(platformEntity); - } - - @Override - public int getEntityId() { - return getPlatformEntity().getEntityId(); - } - - @Override - public @NotNull UUID getUuid() { - return getPlatformEntity().getUniqueId(); - } -} diff --git a/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntityLibPlatform.java b/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntityLibPlatform.java index 3213e22..04d9b63 100644 --- a/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntityLibPlatform.java +++ b/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotEntityLibPlatform.java @@ -5,7 +5,6 @@ import io.github.retrooper.packetevents.bstats.bukkit.Metrics; import io.github.retrooper.packetevents.bstats.charts.SimplePie; import me.tofaa.entitylib.APIConfig; import me.tofaa.entitylib.EntityLib; -import me.tofaa.entitylib.TrackedEntity; import me.tofaa.entitylib.common.AbstractPlatform; import me.tofaa.entitylib.utils.ConcurrentWeakIdentityHashMap; import org.bukkit.Bukkit; @@ -23,7 +22,6 @@ import java.util.stream.Stream; public class SpigotEntityLibPlatform extends AbstractPlatform { private SpigotEntityLibAPI api; - private final Map platformEntities = new ConcurrentWeakIdentityHashMap<>(); public SpigotEntityLibPlatform(@NotNull JavaPlugin plugin) { super(plugin); @@ -36,12 +34,6 @@ public class SpigotEntityLibPlatform extends AbstractPlatform { this.api = new SpigotEntityLibAPI(this, settings); this.api.onLoad(); this.api.onEnable(); - - if (settings.shouldTrackPlatformEntities()) { - InternalRegistryListener listener = new InternalRegistryListener(this); - handle.getServer().getPluginManager().registerEvents(listener, handle); - api.getPacketEvents().getEventManager().registerListener(listener); - } if (settings.shouldUseBstats()) { PacketEventsAPI pe = (PacketEventsAPI)api.getPacketEvents(); Metrics metrics = new Metrics(pe.getPlugin(), 21916); @@ -50,33 +42,6 @@ public class SpigotEntityLibPlatform extends AbstractPlatform { } - - Map getPlatformEntities() { - return platformEntities; - } - - @Override - public @NotNull Stream queryPlatformEntities() { - if (!api.getSettings().shouldTrackPlatformEntities()) return Stream.of(); - return platformEntities.values().stream().map(SpigotEntity::new); - } - - @Override - public @Nullable TrackedEntity findPlatformEntity(final int entityId) { - if (!api.getSettings().shouldTrackPlatformEntities()) return null; - - for (World world : Bukkit.getWorlds()) { - Entity e = world.getEntities().stream().filter(entity -> entity.getEntityId() == entityId).findFirst().orElse(null); - if (e != null) { - return new SpigotEntity(e); - } - } - return null; -// Entity e = platformEntities.get(entityId); -// if (e == null) return null; -// return new SpigotEntity(e); - } - @Override public SpigotEntityLibAPI getAPI() { return api; diff --git a/test-plugin/build.gradle.kts b/test-plugin/build.gradle.kts index f82fc1f..da66ed9 100644 --- a/test-plugin/build.gradle.kts +++ b/test-plugin/build.gradle.kts @@ -29,7 +29,7 @@ tasks { ) val sharedBukkitPlugins = runPaper.downloadPluginsSpec { - modrinth("packetevents", "MfD5eOYA") + modrinth("packetevents", "3Jr8ovul") } runServer { diff --git a/test-plugin/src/main/java/me/tofaa/testentitylib/TestEntityLibPlugin.java b/test-plugin/src/main/java/me/tofaa/testentitylib/TestEntityLibPlugin.java index 28b3f90..a70b9c6 100644 --- a/test-plugin/src/main/java/me/tofaa/testentitylib/TestEntityLibPlugin.java +++ b/test-plugin/src/main/java/me/tofaa/testentitylib/TestEntityLibPlugin.java @@ -1,26 +1,14 @@ package me.tofaa.testentitylib; import com.github.retrooper.packetevents.PacketEvents; -import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes; -import com.github.retrooper.packetevents.protocol.player.UserProfile; -import io.github.retrooper.packetevents.util.SpigotConversionUtil; import me.tofaa.entitylib.APIConfig; import me.tofaa.entitylib.EntityLib; -import me.tofaa.entitylib.event.types.UserTrackingEntityEvent; -import me.tofaa.entitylib.spigot.SpigotEntityLibAPI; import me.tofaa.entitylib.spigot.SpigotEntityLibPlatform; -import me.tofaa.entitylib.wrapper.WrapperPlayer; import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandMap; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import org.jetbrains.annotations.NotNull; import java.lang.reflect.InvocationTargetException; -import java.util.UUID; public class TestEntityLibPlugin extends JavaPlugin { @@ -32,7 +20,6 @@ public class TestEntityLibPlugin extends JavaPlugin { .debugMode() .checkForUpdates() .tickTickables() - .trackPlatformEntities() .useBstats() .usePlatformLogger();