Finish up containers

This commit is contained in:
Tofaa2 2024-06-28 14:27:40 +04:00
parent 767bcc065d
commit 82d9ef2879
12 changed files with 215 additions and 45 deletions

View file

@ -5,7 +5,16 @@
</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/packetconversion/CommonSpawningMethods.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/packetconversion/EntitySpawningMethod.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/packetconversion/EntitySpawningPacketConversion.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/packetconversion/LegacySpawningMethods.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/packetconversion/ModernSpawningMethods.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/utils/VersionUtil.java" 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/EntityLibAPI.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/EntityLibAPI.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$/common/src/main/java/me/tofaa/entitylib/common/AbstractEntityLibAPI.java" beforeDir="false" afterPath="$PROJECT_DIR$/common/src/main/java/me/tofaa/entitylib/common/AbstractEntityLibAPI.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" />
@ -56,6 +65,9 @@
<setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.2.0/f981796d809d02eee3e485167b2476ed766be882/api-2.2.0.jar!/com/github/retrooper/packetevents/wrapper/play/server/WrapperPlayServerUpdateAttributes.class" root0="SKIP_INSPECTION" /> <setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.2.0/f981796d809d02eee3e485167b2476ed766be882/api-2.2.0.jar!/com/github/retrooper/packetevents/wrapper/play/server/WrapperPlayServerUpdateAttributes.class" root0="SKIP_INSPECTION" />
<setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.3.0/a199b900341990aa6a2899e42e396800c83601f0/api-2.3.0-default.jar!/com/github/retrooper/packetevents/protocol/attribute/Attribute.class" root0="SKIP_INSPECTION" /> <setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.3.0/a199b900341990aa6a2899e42e396800c83601f0/api-2.3.0-default.jar!/com/github/retrooper/packetevents/protocol/attribute/Attribute.class" root0="SKIP_INSPECTION" />
<setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.3.0/a199b900341990aa6a2899e42e396800c83601f0/api-2.3.0-default.jar!/com/github/retrooper/packetevents/protocol/attribute/Attributes.class" root0="SKIP_INSPECTION" /> <setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.3.0/a199b900341990aa6a2899e42e396800c83601f0/api-2.3.0-default.jar!/com/github/retrooper/packetevents/protocol/attribute/Attributes.class" root0="SKIP_INSPECTION" />
<setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.3.0/a199b900341990aa6a2899e42e396800c83601f0/api-2.3.0-default.jar!/com/github/retrooper/packetevents/wrapper/play/server/WrapperPlayServerSpawnEntity.class" root0="SKIP_INSPECTION" />
<setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.3.0/a199b900341990aa6a2899e42e396800c83601f0/api-2.3.0-default.jar!/com/github/retrooper/packetevents/wrapper/play/server/WrapperPlayServerSpawnPainting.class" root0="SKIP_INSPECTION" />
<setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.3.0/a199b900341990aa6a2899e42e396800c83601f0/api-2.3.0-default.jar!/com/github/retrooper/packetevents/wrapper/play/server/WrapperPlayServerSpawnWeatherEntity.class" root0="SKIP_INSPECTION" />
<setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.3.0/a199b900341990aa6a2899e42e396800c83601f0/api-2.3.0-default.jar!/com/github/retrooper/packetevents/wrapper/play/server/WrapperPlayServerUpdateAttributes.class" root0="SKIP_INSPECTION" /> <setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/api/2.3.0/a199b900341990aa6a2899e42e396800c83601f0/api-2.3.0-default.jar!/com/github/retrooper/packetevents/wrapper/play/server/WrapperPlayServerUpdateAttributes.class" root0="SKIP_INSPECTION" />
<setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/velocity/2.3.0/aba4fb09c29c8a071cac36acba545ed37bb80268/velocity-2.3.0-default.jar!/io/github/retrooper/packetevents/bstats/Metrics.class" root0="SKIP_INSPECTION" /> <setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/velocity/2.3.0/aba4fb09c29c8a071cac36acba545ed37bb80268/velocity-2.3.0-default.jar!/io/github/retrooper/packetevents/bstats/Metrics.class" root0="SKIP_INSPECTION" />
<setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/velocity/2.3.0/aba4fb09c29c8a071cac36acba545ed37bb80268/velocity-2.3.0-default.jar!/io/github/retrooper/packetevents/velocity/factory/VelocityPacketEventsBuilder.class" root0="SKIP_INSPECTION" /> <setting file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.retrooper.packetevents/velocity/2.3.0/aba4fb09c29c8a071cac36acba545ed37bb80268/velocity-2.3.0-default.jar!/io/github/retrooper/packetevents/velocity/factory/VelocityPacketEventsBuilder.class" root0="SKIP_INSPECTION" />
@ -380,6 +392,11 @@
<workItem from="1716926795264" duration="1000" /> <workItem from="1716926795264" duration="1000" />
<workItem from="1718023888535" duration="2457000" /> <workItem from="1718023888535" duration="2457000" />
<workItem from="1719160307151" duration="7080000" /> <workItem from="1719160307151" duration="7080000" />
<workItem from="1719172087999" duration="1867000" />
<workItem from="1719236981913" duration="33000" />
<workItem from="1719246637584" duration="6142000" />
<workItem from="1719306268310" duration="4050000" />
<workItem from="1719569161589" duration="807000" />
</task> </task>
<servers /> <servers />
</component> </component>

View file

@ -58,9 +58,4 @@ public interface EntityLibAPI<T> {
@NotNull @NotNull
EntityContainer getDefaultContainer(); EntityContainer getDefaultContainer();
void addContainer(EntityContainer container);
void removeContainer(EntityContainer container);
@NotNull Collection<EntityContainer> getEntityContainers();
} }

View file

@ -0,0 +1,26 @@
package me.tofaa.entitylib.packetconversion;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnExperienceOrb;
import me.tofaa.entitylib.wrapper.WrapperEntity;
import me.tofaa.entitylib.wrapper.WrapperExperienceOrbEntity;
final class CommonSpawningMethods {
static final class ExperienceOrb implements EntitySpawningMethod {
@Override
public PacketWrapper<?> getSpawnPacket(WrapperEntity entity) {
short experience = entity instanceof WrapperExperienceOrbEntity ? ((WrapperExperienceOrbEntity) entity).getExperience() : 0;
return new WrapperPlayServerSpawnExperienceOrb(
entity.getEntityId(),
entity.getLocation().getX(),
entity.getLocation().getY(),
entity.getLocation().getZ(),
experience
);
}
}
}

View file

@ -0,0 +1,13 @@
package me.tofaa.entitylib.packetconversion;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import me.tofaa.entitylib.wrapper.WrapperEntity;
public interface EntitySpawningMethod {
EntitySpawningMethod EXPERIENCE_ORB = new CommonSpawningMethods.ExperienceOrb();
PacketWrapper<?> getSpawnPacket(WrapperEntity entity);
}

View file

@ -0,0 +1,26 @@
package me.tofaa.entitylib.packetconversion;
import com.github.retrooper.packetevents.protocol.entity.type.EntityType;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import me.tofaa.entitylib.wrapper.WrapperEntity;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public final class EntitySpawningPacketConversion {
private static Map<EntityType, EntitySpawningMethod> methods = new ConcurrentHashMap<>();
static {
}
public PacketWrapper<?> getSpawnPacket(WrapperEntity entity) {
EntityType type = entity.getEntityType();
EntitySpawningMethod method = methods.get(type);
return method.getSpawnPacket(entity);
}
private EntitySpawningPacketConversion() {}
}

View file

@ -0,0 +1,59 @@
package me.tofaa.entitylib.packetconversion;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnLivingEntity;
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnPainting;
import me.tofaa.entitylib.meta.other.PaintingMeta;
import me.tofaa.entitylib.wrapper.WrapperEntity;
import me.tofaa.entitylib.wrapper.WrapperLivingEntity;
final class LegacySpawningMethods {
private LegacySpawningMethods() {}
static class Generic implements EntitySpawningMethod {
@Override
public PacketWrapper<?> getSpawnPacket(WrapperEntity entity) {
return null;
}
}
static class LivingEntity implements EntitySpawningMethod {
@Override
public PacketWrapper<?> getSpawnPacket(WrapperEntity entity) {
if (!(entity instanceof WrapperLivingEntity)) {
throw new IllegalArgumentException("Entity is not an instance of WrapperLivingEntity");
}
return new WrapperPlayServerSpawnLivingEntity(
entity.getEntityId(),
entity.getUuid(),
entity.getEntityType(),
entity.getLocation().getPosition(),
entity.getLocation().getYaw(),
entity.getLocation().getPitch(),
entity.getLocation().getPitch(),
entity.createVeloPacket().get(),
entity.getEntityMeta().entityData()
);
}
}
static class Painting implements EntitySpawningMethod {
@Override
public PacketWrapper<?> getSpawnPacket(WrapperEntity entity) {
if (entity.getEntityMeta() instanceof PaintingMeta) {
PaintingMeta paintingMeta = (PaintingMeta) entity.getEntityMeta();
return new WrapperPlayServerSpawnPainting(
entity.getEntityId(),
entity.getUuid(),
entity.getLocation().getPosition().toVector3i(),
paintingMeta.getDirection()
);
}
throw new IllegalArgumentException("EntityMeta is not an instance of PaintingMeta");
}
}
}

View file

@ -0,0 +1,35 @@
package me.tofaa.entitylib.packetconversion;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnEntity;
import me.tofaa.entitylib.meta.types.ObjectData;
import me.tofaa.entitylib.utils.VersionUtil;
import me.tofaa.entitylib.wrapper.WrapperEntity;
import java.util.Optional;
final class ModernSpawningMethods {
private ModernSpawningMethods() {}
static class Generic implements EntitySpawningMethod {
@Override
public PacketWrapper<?> getSpawnPacket(WrapperEntity entity) {
if (VersionUtil.isOlderThan(ServerVersion.V_1_19_3)) throw new UnsupportedOperationException("This method is not supported in this version.");
return new WrapperPlayServerSpawnEntity(
entity.getEntityId(),
Optional.of(entity.getUuid()),
entity.getEntityType(),
entity.getLocation().getPosition(),
entity.getLocation().getPitch(),
entity.getLocation().getYaw(),
entity.getLocation().getYaw(),
entity.getEntityMeta() instanceof ObjectData ? (((ObjectData) entity.getEntityMeta()).getObjectData()) : 0,
entity.createVeloPacket()
);
}
}
}

View file

@ -0,0 +1,32 @@
package me.tofaa.entitylib.utils;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.manager.server.VersionComparison;
import me.tofaa.entitylib.EntityLib;
public final class VersionUtil {
private VersionUtil () {}
public static boolean isNewerThanOrEqual(ServerVersion version) {
return EntityLib.getApi().getPacketEvents().getServerManager().getVersion().isNewerThanOrEquals(version);
}
public static boolean isNewerThan(ServerVersion version) {
return EntityLib.getApi().getPacketEvents().getServerManager().getVersion().isNewerThan(version);
}
public static boolean isOlderThanOrEqual(ServerVersion version) {
return EntityLib.getApi().getPacketEvents().getServerManager().getVersion().isOlderThanOrEquals(version);
}
public static boolean isOlderThan(ServerVersion version) {
return EntityLib.getApi().getPacketEvents().getServerManager().getVersion().isOlderThan(version);
}
public static boolean is(ServerVersion version) {
return EntityLib.getApi().getPacketEvents().getServerManager().getVersion().is(VersionComparison.EQUALS, version);
}
}

View file

@ -96,7 +96,7 @@ public class WrapperEntity implements Tickable, TrackedEntity {
return 0; return 0;
} }
protected Optional<Vector3d> createVeloPacket() { public Optional<Vector3d> createVeloPacket() {
Optional<Vector3d> velocity; Optional<Vector3d> velocity;
double veloX = 0, veloY = 0, veloZ = 0; double veloX = 0, veloY = 0, veloZ = 0;
if (entityMeta instanceof ObjectData) { if (entityMeta instanceof ObjectData) {

View file

@ -1,28 +1,17 @@
package me.tofaa.entitylib.common; package me.tofaa.entitylib.common;
import com.github.retrooper.packetevents.PacketEventsAPI; import com.github.retrooper.packetevents.PacketEventsAPI;
import com.github.retrooper.packetevents.protocol.entity.type.EntityType;
import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes;
import com.github.retrooper.packetevents.protocol.player.UserProfile;
import com.github.retrooper.packetevents.protocol.world.Location;
import me.tofaa.entitylib.APIConfig; import me.tofaa.entitylib.APIConfig;
import me.tofaa.entitylib.EntityLib;
import me.tofaa.entitylib.EntityLibAPI; import me.tofaa.entitylib.EntityLibAPI;
import me.tofaa.entitylib.Platform; import me.tofaa.entitylib.Platform;
import me.tofaa.entitylib.container.EntityContainer; import me.tofaa.entitylib.container.EntityContainer;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.projectile.ThrownExpBottleMeta;
import me.tofaa.entitylib.meta.types.LivingEntityMeta;
import me.tofaa.entitylib.tick.TickContainer; import me.tofaa.entitylib.tick.TickContainer;
import me.tofaa.entitylib.wrapper.WrapperEntity; import me.tofaa.entitylib.wrapper.WrapperEntity;
import me.tofaa.entitylib.wrapper.WrapperExperienceOrbEntity;
import me.tofaa.entitylib.wrapper.WrapperLivingEntity;
import me.tofaa.entitylib.wrapper.WrapperPlayer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public abstract class AbstractEntityLibAPI<P, T> implements EntityLibAPI<T> { public abstract class AbstractEntityLibAPI<P, T> implements EntityLibAPI<T> {
@ -30,11 +19,6 @@ public abstract class AbstractEntityLibAPI<P, T> implements EntityLibAPI<T> {
protected final PacketEventsAPI<?> packetEvents; protected final PacketEventsAPI<?> packetEvents;
protected final APIConfig settings; protected final APIConfig settings;
protected final Collection<TickContainer<?, T>> tickContainers; protected final Collection<TickContainer<?, T>> tickContainers;
protected final Map<Integer, WrapperEntity> globalEntityMap = new ConcurrentHashMap<>();
protected final Map<Integer, WrapperEntity> entitiesById = new ConcurrentHashMap<>();
protected final Map<UUID, WrapperEntity> entities = new ConcurrentHashMap<>();
protected final Set<EntityContainer> entityContainers = ConcurrentHashMap.newKeySet();
protected final EntityContainer defaultEntityContainer = EntityContainer.basic(); protected final EntityContainer defaultEntityContainer = EntityContainer.basic();
protected AbstractEntityLibAPI(Platform<P> platform, APIConfig settings) { protected AbstractEntityLibAPI(Platform<P> platform, APIConfig settings) {
@ -46,27 +30,18 @@ public abstract class AbstractEntityLibAPI<P, T> implements EntityLibAPI<T> {
@Override @Override
public @Nullable WrapperEntity getEntity(int id) { public @Nullable WrapperEntity getEntity(int id) {
return entitiesById.get(id); return defaultEntityContainer.getEntity(id);
} }
@Override @Override
public @Nullable WrapperEntity getEntity(@NotNull UUID uuid) { public @Nullable WrapperEntity getEntity(@NotNull UUID uuid) {
return entities.get(uuid); return defaultEntityContainer.getEntity(uuid);
} }
@Override @Override
public @NotNull Collection<WrapperEntity> getAllEntities() { public @NotNull Collection<WrapperEntity> getAllEntities() {
return Collections.unmodifiableCollection(entities.values()); return defaultEntityContainer.getEntities();
}
@Override
public void addContainer(EntityContainer container) {
entityContainers.add(container);
}
@Override
public void removeContainer(EntityContainer container) {
entityContainers.remove(container);
} }
@Override @Override
@ -74,12 +49,6 @@ public abstract class AbstractEntityLibAPI<P, T> implements EntityLibAPI<T> {
return defaultEntityContainer; return defaultEntityContainer;
} }
@NotNull
@Override
public Set<EntityContainer> getEntityContainers() {
return entityContainers;
}
@NotNull @NotNull
@Override @Override
public APIConfig getSettings() { public APIConfig getSettings() {

View file

@ -1,7 +1,6 @@
package me.tofaa.entitylib.spigot; package me.tofaa.entitylib.spigot;
import com.github.retrooper.packetevents.protocol.entity.type.EntityType; import com.github.retrooper.packetevents.protocol.entity.type.EntityType;
import com.github.retrooper.packetevents.protocol.world.Location;
import io.github.retrooper.packetevents.util.SpigotConversionUtil; import io.github.retrooper.packetevents.util.SpigotConversionUtil;
import me.tofaa.entitylib.APIConfig; import me.tofaa.entitylib.APIConfig;
import me.tofaa.entitylib.EntityLib; import me.tofaa.entitylib.EntityLib;
@ -16,7 +15,6 @@ import me.tofaa.entitylib.wrapper.WrapperLivingEntity;
import me.tofaa.entitylib.wrapper.WrapperPlayer; import me.tofaa.entitylib.wrapper.WrapperPlayer;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;

View file

@ -23,7 +23,7 @@ import java.util.stream.Stream;
public class SpigotEntityLibPlatform extends AbstractPlatform<JavaPlugin> { public class SpigotEntityLibPlatform extends AbstractPlatform<JavaPlugin> {
private SpigotEntityLibAPI api; private SpigotEntityLibAPI api;
private Map<Integer, Entity> platformEntities = new ConcurrentWeakIdentityHashMap<>(); private final Map<Integer, Entity> platformEntities = new ConcurrentWeakIdentityHashMap<>();
public SpigotEntityLibPlatform(@NotNull JavaPlugin plugin) { public SpigotEntityLibPlatform(@NotNull JavaPlugin plugin) {
super(plugin); super(plugin);