Stable release ready? I think
This commit is contained in:
parent
0ace331ef3
commit
1cd57b7246
5 changed files with 117 additions and 5 deletions
89
README.md
89
README.md
|
@ -1,2 +1,89 @@
|
|||
# EntityLib
|
||||
A PacketEvents based utility library for generating and working with EntityMeta and other Entity features
|
||||
EntityLib is a PacketEvents addon that provides an abstraction over raw entity data and packets to make it easier to work with entities as a whole.
|
||||
|
||||
|
||||
## Features
|
||||
- Full EntityMeta support
|
||||
- Creation of WrapperEntities
|
||||
- Keeping track of entities.
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
For more realistic examples, please take a look at the `test-plugin` module. It has an example `Bukkit` plugin that uses EntityLib.
|
||||
|
||||
### Using the EntityMeta api
|
||||
|
||||
```java
|
||||
import java.sql.Wrapper;
|
||||
|
||||
class Example {
|
||||
|
||||
public static void main(String[] args) {
|
||||
PacketEventsAPI api = ;// create PacketEventsAPI instance
|
||||
EntityLib.init(api); // If failed, it will throw an exception.
|
||||
|
||||
// Making a random entity using packet events raw, i strongly recommend using the EntityLib#createEntity method instead
|
||||
int entityID = 1;
|
||||
WrapperPlayServerSpawnEntity packet = new WrapperPlayServerSpawnEntity(constructor args);
|
||||
EntityMeta meta = EntityLib.createMeta(entityId, EntityType);
|
||||
// You can cast the meta to the correct type depending on the entity type
|
||||
PigMeta pigMeta = (PigMeta) meta;
|
||||
|
||||
// Once you're done modifying the meta accordingly, you can convert it to a packet, and send it to whoever you want for them to see the changes.
|
||||
WrapperPlayServerEntityMetadata metaPacket = meta.createPacket();
|
||||
User.sendPacket(metaPacket);;
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### Creating a WrapperEntity
|
||||
|
||||
```java
|
||||
import javax.xml.stream.Location;
|
||||
|
||||
class Example {
|
||||
|
||||
public static void main(String[] args) {
|
||||
PacketEventsAPI api = ;// create PacketEventsAPI instance
|
||||
EntityLib.init(api); // If failed, it will throw an exception.
|
||||
|
||||
WrapperEntity entity = EntityLib.createEntity(UUID, EntityType);
|
||||
// You can keep track of the entity yourself or store its entityId or uuid and fetch it using EntityLib#getEntity
|
||||
|
||||
// Handling entity interactions if needed
|
||||
// By default EntityLib will ignore interaction packets and not handle them. You can enable this if needed
|
||||
EntityLib.enableEntityInteractions(); // Now we need to create an interaction handler
|
||||
EntityLib.setInteractionProcessor(EntityInteractionProcessor);
|
||||
|
||||
|
||||
// Entities also have access to the EntityMeta api, the EntityMeta api can be used seperately from wrapper entities but also can be used together
|
||||
EntityMeta meta = entity.getEntityMeta();
|
||||
// Depending on the entity type, you can safely cast the meta to the correct type
|
||||
PigMeta meta1 = (PigMeta) meta; // If the entity type is EntityTypes.PIG
|
||||
|
||||
// adding a viewer to the entity can be done before or after spawn, doesnt matter
|
||||
entity.addViewer(User); // UUID also applicable
|
||||
entity.removeViewer(User); // UUID also applicable
|
||||
|
||||
entity.spawn(Location); // Spawns the entity at the given location
|
||||
entity.remove(); // Removes the entity from the world
|
||||
entity.rotateHead(float yaw, float pitch); // Rotates the head of the entity
|
||||
entity.teleport(Location); // Teleports the entity to the given location.
|
||||
|
||||
// If the entityId provider for WrapperEntities is not working for you or needs changing, you can get it from WrapperEntity#ID_PROVIDER
|
||||
// You can also set it to a custom provider if needed
|
||||
WrapperEntity.ID_PROVIDER = new EntityIdProvider() {
|
||||
@Override
|
||||
public int getEntityId() {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
// You can also create the EntityLib default provider by calling EntityIdProvider.simple();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
```
|
|
@ -36,6 +36,6 @@ allprojects {
|
|||
|
||||
|
||||
dependencies {
|
||||
compileOnlyApi("com.github.retrooper.packetevents:spigot:2.0.2")
|
||||
compileOnlyApi("com.github.retrooper.packetevents:spigot:2.1.0")
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package me.tofaa.entitylib;
|
||||
package me.tofaa.entitylib.entity;
|
||||
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
@ -5,9 +5,9 @@ import com.github.retrooper.packetevents.protocol.player.User;
|
|||
import com.github.retrooper.packetevents.protocol.world.Location;
|
||||
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
|
||||
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerDestroyEntities;
|
||||
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityRotation;
|
||||
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityTeleport;
|
||||
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnEntity;
|
||||
import me.tofaa.entitylib.EntityIdProvider;
|
||||
import me.tofaa.entitylib.EntityLib;
|
||||
import me.tofaa.entitylib.meta.EntityMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -28,6 +28,7 @@ public class WrapperEntity {
|
|||
private final Set<UUID> viewers = new HashSet<>();
|
||||
|
||||
private Location location;
|
||||
private boolean onGround;
|
||||
private boolean spawned;
|
||||
|
||||
public WrapperEntity(@NotNull UUID uuid, EntityType entityType, EntityMeta meta) {
|
||||
|
@ -57,6 +58,21 @@ public class WrapperEntity {
|
|||
return true;
|
||||
}
|
||||
|
||||
public void rotateHead(float yaw, float pitch) {
|
||||
sendPacketToViewers(
|
||||
new WrapperPlayServerEntityRotation(entityId, yaw, pitch, onGround)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private static double distance(Location to, Location from) {
|
||||
double x = to.getX() - from.getX();
|
||||
double y = to.getY() - from.getY();
|
||||
double z = to.getZ() - from.getZ();
|
||||
return Math.sqrt(x * x + y * y + z * z);
|
||||
}
|
||||
|
||||
|
||||
public void remove() {
|
||||
if (!spawned) return;
|
||||
spawned = false;
|
||||
|
@ -65,6 +81,7 @@ public class WrapperEntity {
|
|||
|
||||
public void teleport(Location location, boolean onGround) {
|
||||
this.location = location;
|
||||
this.onGround = onGround;
|
||||
sendPacketToViewers(
|
||||
new WrapperPlayServerEntityTeleport(entityId, location, onGround)
|
||||
);
|
||||
|
|
|
@ -2,7 +2,9 @@ package me.tofaa.entitylib.meta;
|
|||
|
||||
import com.github.retrooper.packetevents.manager.server.ServerVersion;
|
||||
import com.github.retrooper.packetevents.manager.server.VersionComparison;
|
||||
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
|
||||
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
|
||||
import com.github.retrooper.packetevents.protocol.entity.data.EntityMetadataProvider;
|
||||
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
|
||||
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityMetadata;
|
||||
import me.tofaa.entitylib.EntityLib;
|
||||
|
@ -10,7 +12,9 @@ import me.tofaa.entitylib.exception.InvalidVersionException;
|
|||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||
|
||||
public class EntityMeta {
|
||||
import java.util.List;
|
||||
|
||||
public class EntityMeta implements EntityMetadataProvider {
|
||||
|
||||
public static final byte OFFSET = 0;
|
||||
public static final byte MAX_OFFSET = OFFSET + 8;
|
||||
|
@ -193,4 +197,8 @@ public class EntityMeta {
|
|||
setMask((byte)index, mask);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<EntityData> entityData() {
|
||||
return metadata.getEntries();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue