diff --git a/README.md b/README.md index 3b89d3d..c37341b 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ Once this list is complete, i will release a stable version of the library. - [ ] WrapperEntities must seamlessly send packet updates to viewers, currently they are not. - [ ] Add support for more actions using WrapperEntities. - [ ] More javadocs. +- [ ] Make ObjectData actually useful. ### Credits - PacketEvents for providing the API and retrooper being a cool guy in general diff --git a/src/main/java/me/tofaa/entitylib/EntityLib.java b/src/main/java/me/tofaa/entitylib/EntityLib.java index 2e3b52a..8cab681 100644 --- a/src/main/java/me/tofaa/entitylib/EntityLib.java +++ b/src/main/java/me/tofaa/entitylib/EntityLib.java @@ -21,6 +21,16 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiFunction; +/** + * Base API class for EntityLib, contains all the methods to interact with the library. + *

+ * Initialization should be done before PacketEvents. After PE is initialized, call {@link EntityLib#init(PacketEventsAPI)} to initialize EntityLib. + *
+ * To enable entity interactions, call {@link EntityLib#enableEntityInteractions()}. these will help you interact with a {@link WrapperEntity} object. + *
+ * By default, EntityLib does not persistently store data, this is planned for a future feature but for now you must store your own data if you want it to persist after restart. + *

+ */ public final class EntityLib { private EntityLib() {} diff --git a/src/main/java/me/tofaa/entitylib/MetaConverterRegistry.java b/src/main/java/me/tofaa/entitylib/MetaConverterRegistry.java index 782f8e6..ce6d4be 100644 --- a/src/main/java/me/tofaa/entitylib/MetaConverterRegistry.java +++ b/src/main/java/me/tofaa/entitylib/MetaConverterRegistry.java @@ -1,6 +1,7 @@ package me.tofaa.entitylib; import com.github.retrooper.packetevents.protocol.entity.type.EntityType; +import com.sun.org.apache.bcel.internal.generic.PUTFIELD; import me.tofaa.entitylib.meta.EntityMeta; import me.tofaa.entitylib.meta.Metadata; import me.tofaa.entitylib.meta.mobs.*; @@ -22,16 +23,15 @@ import me.tofaa.entitylib.meta.mobs.monster.zombie.*; import me.tofaa.entitylib.meta.mobs.passive.*; import me.tofaa.entitylib.meta.mobs.water.*; import me.tofaa.entitylib.meta.mobs.minecart.*; -import me.tofaa.entitylib.meta.mobs.other.*; import me.tofaa.entitylib.meta.mobs.tameable.CatMeta; import me.tofaa.entitylib.meta.mobs.tameable.ParrotMeta; import me.tofaa.entitylib.meta.mobs.tameable.WolfMeta; import me.tofaa.entitylib.meta.mobs.villager.VillagerMeta; import me.tofaa.entitylib.meta.mobs.villager.WanderingTraderMeta; +import me.tofaa.entitylib.meta.other.*; import me.tofaa.entitylib.meta.projectile.*; import me.tofaa.entitylib.meta.types.PlayerMeta; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.Map; @@ -45,6 +45,10 @@ final class MetaConverterRegistry { private final Map> metaClasses = new HashMap<>(); MetaConverterRegistry() { + put(INTERACTION, InteractionMeta.class, InteractionMeta::new); + put(BLOCK_DISPLAY, BlockDisplayMeta.class, BlockDisplayMeta::new); + put(ITEM_DISPLAY, ItemDisplayMeta.class, ItemDisplayMeta::new); + put(TEXT_DISPLAY, TextDisplayMeta.class, TextDisplayMeta::new); put(AREA_EFFECT_CLOUD, AreaEffectCloudMeta.class, AreaEffectCloudMeta::new); put(ARMOR_STAND, ArmorStandMeta.class, ArmorStandMeta::new); put(BOAT, BoatMeta.class, BoatMeta::new); diff --git a/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java b/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java index b90cbe1..dfee9c4 100644 --- a/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/EntityMeta.java @@ -138,6 +138,14 @@ public class EntityMeta implements EntityMetadataProvider { this.metadata.setIndex(offset(OFFSET, 6), EntityDataTypes.ENTITY_POSE, value); } + public int getTicksFrozenInPowderedSnow() { + return this.metadata.getIndex(offset(OFFSET, 7), 0); + } + + public void setTicksFrozenInPowderedSnow(int value) { + this.metadata.setIndex(offset(OFFSET, 7), EntityDataTypes.INT, value); + } + public WrapperPlayServerEntityMetadata createPacket() { return metadata.createPacket(); } diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/AreaEffectCloudMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/AreaEffectCloudMeta.java similarity index 96% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/AreaEffectCloudMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/AreaEffectCloudMeta.java index d5e288f..19e3564 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/AreaEffectCloudMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/AreaEffectCloudMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import me.tofaa.entitylib.meta.EntityMeta; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/ArmorStandMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/ArmorStandMeta.java similarity index 98% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/ArmorStandMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/ArmorStandMeta.java index b1660bb..75520c9 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/ArmorStandMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/ArmorStandMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import com.github.retrooper.packetevents.util.Vector3f; diff --git a/src/main/java/me/tofaa/entitylib/meta/other/BlockDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/BlockDisplayMeta.java new file mode 100644 index 0000000..fa91854 --- /dev/null +++ b/src/main/java/me/tofaa/entitylib/meta/other/BlockDisplayMeta.java @@ -0,0 +1,24 @@ +package me.tofaa.entitylib.meta.other; + +import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; +import me.tofaa.entitylib.meta.Metadata; +import me.tofaa.entitylib.meta.types.DisplayMeta; + +public class BlockDisplayMeta extends DisplayMeta { + + public static final byte OFFSET = DisplayMeta.MAX_OFFSET; + public static final byte MAX_OFFSET = OFFSET + 1; + + public BlockDisplayMeta(int entityId, Metadata metadata) { + super(entityId, metadata); + } + + public int getBlockId() { + return super.metadata.getIndex(OFFSET, 0); + } + + public void setBlockId(int blockId) { + super.metadata.setIndex(OFFSET, EntityDataTypes.INT, blockId); + } + +} diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/BoatMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/BoatMeta.java similarity index 98% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/BoatMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/BoatMeta.java index e8d794f..a69efbb 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/BoatMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/BoatMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import me.tofaa.entitylib.meta.EntityMeta; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EndCrystalMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/EndCrystalMeta.java similarity index 96% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/EndCrystalMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/EndCrystalMeta.java index 3e9ee75..c7e09f1 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EndCrystalMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/EndCrystalMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import com.github.retrooper.packetevents.util.Vector3i; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EnderDragonMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/EnderDragonMeta.java similarity index 96% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/EnderDragonMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/EnderDragonMeta.java index 017c8c0..e505bb1 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EnderDragonMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/EnderDragonMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import me.tofaa.entitylib.meta.Metadata; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EvokerFangsMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/EvokerFangsMeta.java similarity index 89% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/EvokerFangsMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/EvokerFangsMeta.java index 432633c..6d09c26 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/EvokerFangsMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/EvokerFangsMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import me.tofaa.entitylib.meta.EntityMeta; import me.tofaa.entitylib.meta.Metadata; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FallingBlockMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/FallingBlockMeta.java similarity index 96% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/FallingBlockMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/FallingBlockMeta.java index 6fe0004..ff556ff 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FallingBlockMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/FallingBlockMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import com.github.retrooper.packetevents.util.Vector3i; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FireworkRocketMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/FireworkRocketMeta.java similarity index 97% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/FireworkRocketMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/FireworkRocketMeta.java index bdb6bb9..76b36a5 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FireworkRocketMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/FireworkRocketMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import com.github.retrooper.packetevents.protocol.item.ItemStack; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FishingHookMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/FishingHookMeta.java similarity index 96% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/FishingHookMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/FishingHookMeta.java index 29ea6f2..61f3242 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/FishingHookMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/FishingHookMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import me.tofaa.entitylib.meta.EntityMeta; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/GlowItemFrameMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/GlowItemFrameMeta.java similarity index 88% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/GlowItemFrameMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/GlowItemFrameMeta.java index 7b73ff9..96fc2d7 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/GlowItemFrameMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/GlowItemFrameMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import me.tofaa.entitylib.meta.Metadata; diff --git a/src/main/java/me/tofaa/entitylib/meta/other/InteractionMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/InteractionMeta.java new file mode 100644 index 0000000..77318f9 --- /dev/null +++ b/src/main/java/me/tofaa/entitylib/meta/other/InteractionMeta.java @@ -0,0 +1,41 @@ +package me.tofaa.entitylib.meta.other; + +import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; +import me.tofaa.entitylib.meta.EntityMeta; +import me.tofaa.entitylib.meta.Metadata; + +public class InteractionMeta extends EntityMeta { + + public static final byte OFFSET = EntityMeta.MAX_OFFSET; + public static final byte MAX_OFFSET = OFFSET + 3; + + public InteractionMeta(int entityId, Metadata metadata) { + super(entityId, metadata); + } + + public float getWidth() { + return super.metadata.getIndex(OFFSET, 1.0F); + } + + public void setWidth(float value) { + super.metadata.setIndex(OFFSET, EntityDataTypes.FLOAT, value); + } + + public float getHeight() { + return super.metadata.getIndex(offset(OFFSET, 1), 1.0F); + } + + public void setHeight(float value) { + super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.FLOAT, value); + } + + public boolean isResponsive() { + return super.metadata.getIndex(offset(OFFSET, 2), false); + } + + public void setResponsive(boolean value) { + super.metadata.setIndex(offset(OFFSET, 2), EntityDataTypes.BOOLEAN, value); + } + + +} diff --git a/src/main/java/me/tofaa/entitylib/meta/other/ItemDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/ItemDisplayMeta.java new file mode 100644 index 0000000..204fe7d --- /dev/null +++ b/src/main/java/me/tofaa/entitylib/meta/other/ItemDisplayMeta.java @@ -0,0 +1,39 @@ +package me.tofaa.entitylib.meta.other; + +import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; +import me.tofaa.entitylib.meta.Metadata; +import me.tofaa.entitylib.meta.types.DisplayMeta; + +public class ItemDisplayMeta extends DisplayMeta { + + public static final byte OFFSET = DisplayMeta.MAX_OFFSET; + public static final byte MAX_OFFSET = OFFSET + 1; + + + public ItemDisplayMeta(int entityId, Metadata metadata) { + super(entityId, metadata); + } + + public DisplayType getDisplayType() { + return DisplayType.VALUES[super.metadata.getIndex(OFFSET, 0)]; + } + + public void setDisplayType(DisplayType displayType) { + super.metadata.setIndex(OFFSET, EntityDataTypes.BYTE, (byte) displayType.ordinal()); + } + + public enum DisplayType { + NONE, + THIRD_PERSON_LEFT_HAND, + THIRD_PERSON_RIGHT_HAND, + FIRST_PERSON_LEFT_HAND, + FIRST_PERSON_RIGHT_HAND, + HEAD, + GUI, + GROUND, + FIXED; + + private static final DisplayType[] VALUES = values(); + } + +} diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/ItemFrameMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/ItemFrameMeta.java similarity index 97% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/ItemFrameMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/ItemFrameMeta.java index 00ec3b7..ad15d4c 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/ItemFrameMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/ItemFrameMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import com.github.retrooper.packetevents.protocol.item.ItemStack; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LeashKnotMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/LeashKnotMeta.java similarity index 88% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/LeashKnotMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/LeashKnotMeta.java index 18260a2..551bfde 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LeashKnotMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/LeashKnotMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import me.tofaa.entitylib.meta.EntityMeta; import me.tofaa.entitylib.meta.Metadata; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LightningBoltMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/LightningBoltMeta.java similarity index 89% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/LightningBoltMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/LightningBoltMeta.java index 4ec7add..36b2fdc 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LightningBoltMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/LightningBoltMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import me.tofaa.entitylib.meta.EntityMeta; import me.tofaa.entitylib.meta.Metadata; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LlamaSpitMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/LlamaSpitMeta.java similarity index 93% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/LlamaSpitMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/LlamaSpitMeta.java index ad61c8e..1f386e0 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/LlamaSpitMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/LlamaSpitMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import me.tofaa.entitylib.meta.EntityMeta; import me.tofaa.entitylib.meta.Metadata; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/MarkerMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/MarkerMeta.java similarity index 88% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/MarkerMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/MarkerMeta.java index 5bc64b5..2656e23 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/MarkerMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/MarkerMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import me.tofaa.entitylib.meta.EntityMeta; import me.tofaa.entitylib.meta.Metadata; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/PaintingMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/PaintingMeta.java similarity index 98% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/PaintingMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/PaintingMeta.java index f0f4df4..cd0e64c 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/PaintingMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/PaintingMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.world.Direction; import me.tofaa.entitylib.meta.EntityMeta; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/PrimedTntMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/PrimedTntMeta.java similarity index 93% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/PrimedTntMeta.java rename to src/main/java/me/tofaa/entitylib/meta/other/PrimedTntMeta.java index 162dee5..0f87fa0 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/PrimedTntMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/other/PrimedTntMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.other; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import me.tofaa.entitylib.meta.EntityMeta; diff --git a/src/main/java/me/tofaa/entitylib/meta/other/TextDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/other/TextDisplayMeta.java new file mode 100644 index 0000000..4c77d23 --- /dev/null +++ b/src/main/java/me/tofaa/entitylib/meta/other/TextDisplayMeta.java @@ -0,0 +1,96 @@ +package me.tofaa.entitylib.meta.other; + +import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; +import me.tofaa.entitylib.meta.Metadata; +import me.tofaa.entitylib.meta.types.DisplayMeta; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; + +public class TextDisplayMeta extends DisplayMeta { + + public static final byte OFFSET = DisplayMeta.MAX_OFFSET; + public static final byte MAX_OFFSET = OFFSET + 5; + + private static final byte SHADOW = 1; + private static final byte SEE_THROUGH = 2; + private static final byte USE_DEFAULT_BACKGROUND = 4; + private static final byte ALIGN_LEFT = 8; + private static final byte ALIGN_RIGHT = 16; + + public TextDisplayMeta(int entityId, Metadata metadata) { + super(entityId, metadata); + } + + + public Component getText() { + return metadata.getIndex(OFFSET, Component.empty()); + } + + public void setComponent(Component component) { + metadata.setIndex(OFFSET, EntityDataTypes.COMPONENT, GsonComponentSerializer.gson().serialize(component)); + } + + public int getLineWidth() { + return metadata.getIndex(offset(OFFSET, 1), 200); + } + + public void setLineWidth(int value) { + metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.INT, value); + } + + public int getBackgroundColor() { + return metadata.getIndex(offset(OFFSET, 2), 0); + } + + public void setBackgroundColor(int value) { + metadata.setIndex(offset(OFFSET, 2), EntityDataTypes.INT, value); + } + + public byte getTextOpacity() { + return metadata.getIndex(offset(OFFSET, 3), (byte) -1); + } + + public void setTextOpacity(byte value) { + metadata.setIndex(offset(OFFSET, 3), EntityDataTypes.BYTE, value); + } + + public boolean isShadow() { + return getMaskBit(offset(OFFSET, 4), SHADOW); + } + + public void setShadow(boolean value) { + setMaskBit(offset(OFFSET, 4), SHADOW, value); + } + + public boolean isSeeThrough() { + return getMaskBit(offset(OFFSET, 4), SEE_THROUGH); + } + + public void setSeeThrough(boolean value) { + setMaskBit(offset(OFFSET, 4), SEE_THROUGH, value); + } + + public boolean isUseDefaultBackground() { + return getMaskBit(offset(OFFSET, 4), USE_DEFAULT_BACKGROUND); + } + + public void setUseDefaultBackground(boolean value) { + setMaskBit(offset(OFFSET, 4), USE_DEFAULT_BACKGROUND, value); + } + + public boolean isAlignLeft() { + return getMaskBit(offset(OFFSET, 4), ALIGN_LEFT); + } + + public void setAlignLeft(boolean value) { + setMaskBit(OFFSET + 4, ALIGN_LEFT, value); + } + + public boolean isAlignRight() { + return getMaskBit(offset(OFFSET, 4), ALIGN_RIGHT); + } + + public void setAlignRight(boolean value) { + setMaskBit(offset(OFFSET, 4), ALIGN_RIGHT, value); + } +} diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/DragonFireballMeta.java b/src/main/java/me/tofaa/entitylib/meta/projectile/DragonFireballMeta.java similarity index 95% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/DragonFireballMeta.java rename to src/main/java/me/tofaa/entitylib/meta/projectile/DragonFireballMeta.java index 62b361e..19d05f9 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/DragonFireballMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/projectile/DragonFireballMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.projectile; import me.tofaa.entitylib.meta.EntityMeta; import me.tofaa.entitylib.meta.Metadata; diff --git a/src/main/java/me/tofaa/entitylib/meta/mobs/other/WitherSkullMeta.java b/src/main/java/me/tofaa/entitylib/meta/projectile/WitherSkullMeta.java similarity index 96% rename from src/main/java/me/tofaa/entitylib/meta/mobs/other/WitherSkullMeta.java rename to src/main/java/me/tofaa/entitylib/meta/projectile/WitherSkullMeta.java index c53372d..985a274 100644 --- a/src/main/java/me/tofaa/entitylib/meta/mobs/other/WitherSkullMeta.java +++ b/src/main/java/me/tofaa/entitylib/meta/projectile/WitherSkullMeta.java @@ -1,4 +1,4 @@ -package me.tofaa.entitylib.meta.mobs.other; +package me.tofaa.entitylib.meta.projectile; import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; import me.tofaa.entitylib.meta.EntityMeta; diff --git a/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java new file mode 100644 index 0000000..0f3ed1a --- /dev/null +++ b/src/main/java/me/tofaa/entitylib/meta/types/DisplayMeta.java @@ -0,0 +1,148 @@ +package me.tofaa.entitylib.meta.types; + +import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes; +import com.github.retrooper.packetevents.util.Quaternion4f; +import com.github.retrooper.packetevents.util.Vector3f; +import me.tofaa.entitylib.meta.EntityMeta; +import me.tofaa.entitylib.meta.Metadata; + +public class DisplayMeta extends EntityMeta { + + public static final byte OFFSET = EntityMeta.MAX_OFFSET; + public static final byte MAX_OFFSET = OFFSET + 13; + + public DisplayMeta(int entityId, Metadata metadata) { + super(entityId, metadata); + } + + public int getInterpolationDelay() { + return super.metadata.getIndex(OFFSET, 0); + } + + public void setInterpolationDelay(int value) { + super.metadata.setIndex(OFFSET, EntityDataTypes.INT, value); + } + + public int getTransformationInterpolationDuration() { + return super.metadata.getIndex(offset(OFFSET, 1), 0); + } + + public void setTransformationInterpolationDuration(int value) { + super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.INT, value); + } + + public int getPositionRotationInterpolationDuration() { + return super.metadata.getIndex(offset(OFFSET, 2), 0); + } + + public void setPositionRotationInterpolationDuration(int value) { + super.metadata.setIndex(offset(OFFSET, 2), EntityDataTypes.INT, value); + } + + public Vector3f getTranslation() { + return super.metadata.getIndex(offset(OFFSET, 3), Vector3f.zero()); + } + + public void setTranslation(Vector3f value) { + super.metadata.setIndex(offset(OFFSET, 3), EntityDataTypes.VECTOR3F, value); + } + + public Vector3f getScale() { + return super.metadata.getIndex(offset(OFFSET, 4), new Vector3f(1.0f, 1.0f, 1.0f)); + } + + public void setScale(Vector3f value) { + super.metadata.setIndex(offset(OFFSET, 4), EntityDataTypes.VECTOR3F, value); + } + + public Quaternion4f getLeftRotation() { + return super.metadata.getIndex(offset(OFFSET, 5), new Quaternion4f(0.0f, 0.0f, 0.0f, 1.0f)); + } + + public void setLeftRotation(Quaternion4f value) { + super.metadata.setIndex(offset(OFFSET, 5), EntityDataTypes.QUATERNION, value); + } + + public Quaternion4f getRightRotation() { + return super.metadata.getIndex(offset(OFFSET, 6), new Quaternion4f(0.0f, 0.0f, 0.0f, 1.0f)); + } + + public void setRightRotation(Quaternion4f value) { + super.metadata.setIndex(offset(OFFSET, 6), EntityDataTypes.QUATERNION, value); + } + + public BillboardConstraints getBillboardConstraints() { + return BillboardConstraints.VALUES[super.metadata.getIndex(offset(OFFSET, 7), (byte) 0)]; + } + + public void setBillboardConstraints(BillboardConstraints value) { + super.metadata.setIndex(offset(OFFSET, 7), EntityDataTypes.BYTE, (byte) value.ordinal()); + } + + //(blockLight << 4 | skyLight << 20) + public int getBrightnessOverride() { + return super.metadata.getIndex(offset(OFFSET, 8), -1); + } + + public void setBrightnessOverride(int value) { + super.metadata.setIndex(offset(OFFSET, 8), EntityDataTypes.INT, value); + } + + public float getViewRange() { + return super.metadata.getIndex(offset(OFFSET, 9), 1.0f); + } + + public void setViewRange(float value) { + super.metadata.setIndex(offset(OFFSET, 9), EntityDataTypes.FLOAT, value); + } + + public float getShadowRadius() { + return super.metadata.getIndex(offset(OFFSET, 10), 0.0f); + } + + public void setShadowRadius(float value) { + super.metadata.setIndex(offset(OFFSET, 10), EntityDataTypes.FLOAT, value); + } + + public float getShadowStrength() { + return super.metadata.getIndex(offset(OFFSET, 11), 1.0f); + } + + public void setShadowStrength(float value) { + super.metadata.setIndex(offset(OFFSET, 11), EntityDataTypes.FLOAT, value); + } + + public float getWidth() { + return super.metadata.getIndex(offset(OFFSET, 12), 0.0f); + } + + public void setWidth(float value) { + super.metadata.setIndex(offset(OFFSET, 12), EntityDataTypes.FLOAT, value); + } + + public float getHeight() { + return super.metadata.getIndex(offset(OFFSET, 13), 0.0f); + } + + public void setHeight(float value) { + super.metadata.setIndex(offset(OFFSET, 13), EntityDataTypes.FLOAT, value); + } + + public int getGlowColorOverride() { + return super.metadata.getIndex(offset(OFFSET, 14), -1); + } + + public void setGlowColorOverride(int value) { + super.metadata.setIndex(offset(OFFSET, 14), EntityDataTypes.INT, value); + } + + public enum BillboardConstraints { + FIXED, + VERTICAL, + HORIZONTAL, + CENTER; + + private static final BillboardConstraints[] VALUES = values(); + } + +} diff --git a/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java b/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java index 4803a82..5798521 100644 --- a/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java +++ b/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java @@ -1,7 +1,13 @@ package me.tofaa.entitylib; import com.github.retrooper.packetevents.PacketEvents; +import com.github.retrooper.packetevents.protocol.player.InteractionHand; +import com.github.retrooper.packetevents.protocol.player.User; +import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientInteractEntity; +import me.tofaa.entitylib.entity.EntityInteractionProcessor; +import me.tofaa.entitylib.entity.WrapperEntity; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; public final class EntityLibPlugin extends JavaPlugin { @@ -10,6 +16,8 @@ public final class EntityLibPlugin extends JavaPlugin { @Override public void onEnable() { EntityLib.init(PacketEvents.getAPI()); + EntityLib.enableEntityInteractions(); + EntityLib.setInteractionProcessor((entity, action, hand, user) -> user.sendMessage("Hello World")); getCommand("testapi").setExecutor(new TestCommand()); getCommand("testentity").setExecutor(new TestEntityCommand()); instance = this;