diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 69279ed..1314bd3 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,7 +5,9 @@
-
+
+
+
@@ -210,7 +212,7 @@
-
+
diff --git a/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java b/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java
index a2de83d..79330c9 100644
--- a/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java
+++ b/src/main/java/me/tofaa/entitylib/meta/display/ItemDisplayMeta.java
@@ -1,6 +1,7 @@
package me.tofaa.entitylib.meta.display;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
+import com.github.retrooper.packetevents.protocol.item.ItemStack;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.DisplayMeta;
@@ -13,12 +14,20 @@ public class ItemDisplayMeta extends DisplayMeta {
super(entityId, metadata);
}
+ public ItemStack getItem() {
+ return super.metadata.getIndex(OFFSET, ItemStack.EMPTY);
+ }
+
+ public void setItem(ItemStack itemStack) {
+ super.metadata.setIndex(OFFSET, EntityDataTypes.ITEMSTACK, itemStack);
+ }
+
public DisplayType getDisplayType() {
- return DisplayType.VALUES[super.metadata.getIndex(OFFSET, 0)];
+ return DisplayType.VALUES[super.metadata.getIndex(offset(OFFSET, 1), 0)];
}
public void setDisplayType(DisplayType displayType) {
- super.metadata.setIndex(OFFSET, EntityDataTypes.BYTE, (byte) displayType.ordinal());
+ super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.BYTE, (byte) displayType.ordinal());
}
public enum DisplayType {
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 7a27d2f..90bdea9 100644
--- a/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java
+++ b/test-plugin/src/main/java/me/tofaa/entitylib/EntityLibPlugin.java
@@ -19,9 +19,13 @@ public final class EntityLibPlugin extends JavaPlugin {
EntityLib.init(PacketEvents.getAPI());
EntityLib.enableEntityInteractions();
EntityLib.setInteractionProcessor((entity, action, hand, user) -> user.sendMessage("Hello World"));
+
+ TestDisplayCommand testDisplayCommand = new TestDisplayCommand();
+ getCommand("testdisplay").setExecutor(testDisplayCommand);
+ getCommand("testdisplay").setTabCompleter(testDisplayCommand);
+
getCommand("testapi").setExecutor(new TestCommand());
getCommand("testentity").setExecutor(new TestEntityCommand());
- getCommand("testdisplay").setExecutor(new TestDisplayCommand());
getCommand("spawnclickablefrog").setExecutor(new SpawnClickableFrogCommand());
instance = this;
}
diff --git a/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java b/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java
index 5363f85..4bbadab 100644
--- a/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java
+++ b/test-plugin/src/main/java/me/tofaa/entitylib/TestDisplayCommand.java
@@ -1,34 +1,88 @@
package me.tofaa.entitylib;
import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes;
+import com.github.retrooper.packetevents.protocol.item.ItemStack;
+import com.github.retrooper.packetevents.protocol.item.type.ItemTypes;
import com.github.retrooper.packetevents.util.Vector3f;
import io.github.retrooper.packetevents.util.SpigotConversionUtil;
import me.tofaa.entitylib.entity.WrapperEntity;
+import me.tofaa.entitylib.meta.display.BlockDisplayMeta;
+import me.tofaa.entitylib.meta.display.ItemDisplayMeta;
import me.tofaa.entitylib.meta.display.TextDisplayMeta;
import me.tofaa.entitylib.meta.types.DisplayMeta;
import net.kyori.adventure.text.Component;
+import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
+import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import java.util.Arrays;
+import java.util.List;
import java.util.UUID;
-public class TestDisplayCommand implements CommandExecutor {
+public class TestDisplayCommand implements CommandExecutor, TabCompleter {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
+ if (strings.length == 0) return false;
+ String type = strings[0];
Player player = (Player) commandSender;
+ switch (type) {
+ case "block":
+ block(player);
+ break;
+ case "text":
+ text(player);
+ break;
+ case "item":
+ item(player);
+ break;
+ }
+ return false;
+ }
+
+
+
+ private void block(Player player) {
+ WrapperEntity e = EntityLib.createEntity(UUID.randomUUID(), EntityTypes.BLOCK_DISPLAY);
+ BlockDisplayMeta meta = (BlockDisplayMeta) e.getMeta();
+ meta.setHasGlowingEffect(true);
+ meta.setBlockId(Material.AMETHYST_BLOCK.getId());
+ meta.setBillboardConstraints(DisplayMeta.BillboardConstraints.CENTER);
+ meta.setScale(new Vector3f(2, 2, 2));
+ e.addViewer(player.getUniqueId());
+ e.spawn(SpigotConversionUtil.fromBukkitLocation(player.getLocation()));
+ }
+
+ private void text(Player player) {
WrapperEntity e = EntityLib.createEntity(UUID.randomUUID(), EntityTypes.TEXT_DISPLAY);
TextDisplayMeta meta = (TextDisplayMeta) e.getMeta();
meta.setHasGlowingEffect(true);
meta.setText(Component.text("Hello World!"));
meta.setBillboardConstraints(DisplayMeta.BillboardConstraints.CENTER);
meta.setScale(new Vector3f(2, 2, 2));
- meta.setTranslation(new Vector3f(10, 0, 0));
e.addViewer(player.getUniqueId());
e.spawn(SpigotConversionUtil.fromBukkitLocation(player.getLocation()));
- return false;
+ }
+
+ private void item(Player player) {
+ WrapperEntity e = EntityLib.createEntity(UUID.randomUUID(), EntityTypes.ITEM_DISPLAY);
+ ItemDisplayMeta meta = (ItemDisplayMeta) e.getMeta();
+ meta.setDisplayType(ItemDisplayMeta.DisplayType.FIRST_PERSON_LEFT_HAND);
+ meta.setItem(ItemStack.builder()
+ .type(ItemTypes.ACACIA_BOAT).build()
+ );
+ e.addViewer(player.getUniqueId());
+ e.spawn(SpigotConversionUtil.fromBukkitLocation(player.getLocation()));
+ }
+
+ @Nullable
+ @Override
+ public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
+ return strings.length == 1 ? Arrays.asList("block", "text", "item") : null;
}
}