Finish up containers
This commit is contained in:
parent
767bcc065d
commit
82d9ef2879
12 changed files with 215 additions and 45 deletions
|
@ -5,7 +5,16 @@
|
|||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<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$/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>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<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.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/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/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" />
|
||||
|
@ -380,6 +392,11 @@
|
|||
<workItem from="1716926795264" duration="1000" />
|
||||
<workItem from="1718023888535" duration="2457000" />
|
||||
<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>
|
||||
<servers />
|
||||
</component>
|
||||
|
|
|
@ -58,9 +58,4 @@ public interface EntityLibAPI<T> {
|
|||
@NotNull
|
||||
EntityContainer getDefaultContainer();
|
||||
|
||||
void addContainer(EntityContainer container);
|
||||
|
||||
void removeContainer(EntityContainer container);
|
||||
|
||||
@NotNull Collection<EntityContainer> getEntityContainers();
|
||||
}
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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() {}
|
||||
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
32
api/src/main/java/me/tofaa/entitylib/utils/VersionUtil.java
Normal file
32
api/src/main/java/me/tofaa/entitylib/utils/VersionUtil.java
Normal 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);
|
||||
}
|
||||
|
||||
}
|
|
@ -96,7 +96,7 @@ public class WrapperEntity implements Tickable, TrackedEntity {
|
|||
return 0;
|
||||
}
|
||||
|
||||
protected Optional<Vector3d> createVeloPacket() {
|
||||
public Optional<Vector3d> createVeloPacket() {
|
||||
Optional<Vector3d> velocity;
|
||||
double veloX = 0, veloY = 0, veloZ = 0;
|
||||
if (entityMeta instanceof ObjectData) {
|
||||
|
|
|
@ -1,28 +1,17 @@
|
|||
package me.tofaa.entitylib.common;
|
||||
|
||||
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.EntityLib;
|
||||
import me.tofaa.entitylib.EntityLibAPI;
|
||||
import me.tofaa.entitylib.Platform;
|
||||
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.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.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
|
||||
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 APIConfig settings;
|
||||
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 AbstractEntityLibAPI(Platform<P> platform, APIConfig settings) {
|
||||
|
@ -46,27 +30,18 @@ public abstract class AbstractEntityLibAPI<P, T> implements EntityLibAPI<T> {
|
|||
|
||||
@Override
|
||||
public @Nullable WrapperEntity getEntity(int id) {
|
||||
return entitiesById.get(id);
|
||||
return defaultEntityContainer.getEntity(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable WrapperEntity getEntity(@NotNull UUID uuid) {
|
||||
return entities.get(uuid);
|
||||
return defaultEntityContainer.getEntity(uuid);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Collection<WrapperEntity> getAllEntities() {
|
||||
return Collections.unmodifiableCollection(entities.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addContainer(EntityContainer container) {
|
||||
entityContainers.add(container);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeContainer(EntityContainer container) {
|
||||
entityContainers.remove(container);
|
||||
return defaultEntityContainer.getEntities();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -74,12 +49,6 @@ public abstract class AbstractEntityLibAPI<P, T> implements EntityLibAPI<T> {
|
|||
return defaultEntityContainer;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Set<EntityContainer> getEntityContainers() {
|
||||
return entityContainers;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public APIConfig getSettings() {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package me.tofaa.entitylib.spigot;
|
||||
|
||||
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 me.tofaa.entitylib.APIConfig;
|
||||
import me.tofaa.entitylib.EntityLib;
|
||||
|
@ -16,7 +15,6 @@ import me.tofaa.entitylib.wrapper.WrapperLivingEntity;
|
|||
import me.tofaa.entitylib.wrapper.WrapperPlayer;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
|
@ -23,7 +23,7 @@ import java.util.stream.Stream;
|
|||
public class SpigotEntityLibPlatform extends AbstractPlatform<JavaPlugin> {
|
||||
|
||||
private SpigotEntityLibAPI api;
|
||||
private Map<Integer, Entity> platformEntities = new ConcurrentWeakIdentityHashMap<>();
|
||||
private final Map<Integer, Entity> platformEntities = new ConcurrentWeakIdentityHashMap<>();
|
||||
|
||||
public SpigotEntityLibPlatform(@NotNull JavaPlugin plugin) {
|
||||
super(plugin);
|
||||
|
|
Loading…
Reference in a new issue