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();