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 c779e7b..fe79ff8 100644 --- a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java +++ b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java @@ -13,6 +13,7 @@ import me.tofaa.entitylib.meta.types.ObjectData; import me.tofaa.entitylib.tick.Tickable; import me.tofaa.entitylib.ve.ViewerRule; import net.kyori.adventure.text.Component; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnmodifiableView; @@ -94,13 +95,15 @@ public class WrapperEntity implements Tickable { return spawn(location, EntityLib.getApi().getDefaultContainer()); } - protected int getObjectData() { + @ApiStatus.Internal + public int getObjectData() { if (entityMeta instanceof ObjectData) { return ((ObjectData) entityMeta).getObjectData(); } return 0; } + @ApiStatus.Internal public Optional createVeloPacket() { Optional velocity; double veloX = 0, veloY = 0, veloZ = 0; diff --git a/api/src/main/java/me/tofaa/entitylib/wrapper/spawning/SpawnPacketProvider.java b/api/src/main/java/me/tofaa/entitylib/wrapper/spawning/SpawnPacketProvider.java new file mode 100644 index 0000000..75c6086 --- /dev/null +++ b/api/src/main/java/me/tofaa/entitylib/wrapper/spawning/SpawnPacketProvider.java @@ -0,0 +1,12 @@ +package me.tofaa.entitylib.wrapper.spawning; + +import com.github.retrooper.packetevents.protocol.player.User; +import com.github.retrooper.packetevents.wrapper.PacketWrapper; +import me.tofaa.entitylib.wrapper.WrapperEntity; + +@FunctionalInterface +public interface SpawnPacketProvider> extends SpawnPacketProviders { + + T provide(User user, WrapperEntity entity); + +} diff --git a/api/src/main/java/me/tofaa/entitylib/wrapper/spawning/SpawnPacketProviders.java b/api/src/main/java/me/tofaa/entitylib/wrapper/spawning/SpawnPacketProviders.java new file mode 100644 index 0000000..181dcde --- /dev/null +++ b/api/src/main/java/me/tofaa/entitylib/wrapper/spawning/SpawnPacketProviders.java @@ -0,0 +1,47 @@ +package me.tofaa.entitylib.wrapper.spawning; + +import com.github.retrooper.packetevents.protocol.world.Location; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnEntity; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnLivingEntity; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnWeatherEntity; +import me.tofaa.entitylib.utils.Check; +import org.jetbrains.annotations.NotNull; +import sun.reflect.generics.reflectiveObjects.NotImplementedException; + +import java.util.Optional; + +interface SpawnPacketProviders { + + @NotNull SpawnPacketProvider GENERAL = (user, entity) -> { + Location location = entity.getLocation(); + return new WrapperPlayServerSpawnEntity( + entity.getEntityId(), + Optional.of(entity.getUuid()), + entity.getEntityType(), + location.getPosition(), + location.getPitch(), + location.getYaw(), + location.getYaw(), + entity.getObjectData(), + entity.createVeloPacket() + ); + }; + + @NotNull SpawnPacketProvider WEATHER_ENTITY = (user, entity) -> { + throw new NotImplementedException(); + }; + + @NotNull SpawnPacketProvider PRE_1_19_LIVING = (user, entity) -> { + Location location = entity.getLocation(); + return new WrapperPlayServerSpawnLivingEntity( + entity.getEntityId(), + entity.getUuid(), + entity.getEntityType(), + location, + location.getPitch(), + entity.getVelocity(), + entity.getEntityMeta() + ); + }; + +}