From b4cdf0e9cde8abfdd9e4e3bd97e2fc9d363d524a Mon Sep 17 00:00:00 2001 From: Tofaa <82680183+Tofaa2@users.noreply.github.com> Date: Fri, 19 Jan 2024 08:14:14 +0300 Subject: [PATCH] fix ItemDisplayMeta --- .idea/workspace.xml | 6 +- .../meta/display/ItemDisplayMeta.java | 13 +++- .../me/tofaa/entitylib/EntityLibPlugin.java | 6 +- .../tofaa/entitylib/TestDisplayCommand.java | 60 ++++++++++++++++++- 4 files changed, 77 insertions(+), 8 deletions(-) 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 @@ - + + + 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; } }