diff --git a/pom.xml b/pom.xml
index dca1ca1..15809dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,12 +12,13 @@
Letterbox
- 1.8
+ 21
UTF-8
-
+ ${project.name}
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -58,13 +59,23 @@
sonatype
https://oss.sonatype.org/content/groups/public/
+
+ brokkonaut
+ https://www.iani.de/nexus/content/groups/public
+
io.papermc.paper
paper-api
- 1.20.4-R0.1-SNAPSHOT
+ 1.20.6-R0.1-SNAPSHOT
+ provided
+
+
+ de.lunarakai
+ LunarUtils
+ 0.0.2
provided
diff --git a/src/main/java/de/lunarakai/letterbox/Letterbox.java b/src/main/java/de/lunarakai/letterbox/Letterbox.java
index f5caa15..2a119e1 100644
--- a/src/main/java/de/lunarakai/letterbox/Letterbox.java
+++ b/src/main/java/de/lunarakai/letterbox/Letterbox.java
@@ -1,5 +1,7 @@
package de.lunarakai.letterbox;
+import de.iani.cubesideutils.bukkit.commands.CommandRouter;
+import de.lunarakai.letterbox.commands.LetterboxGiveCommand;
import org.bukkit.plugin.java.JavaPlugin;
public final class Letterbox extends JavaPlugin {
@@ -7,6 +9,10 @@ public final class Letterbox extends JavaPlugin {
@Override
public void onEnable() {
// Plugin startup logic
+ getServer().getPluginManager().registerEvents(new LetterboxListener(this), this);
+
+ CommandRouter commandRouter = new CommandRouter(getCommand("letterbox"));
+ commandRouter.addCommandMapping(new LetterboxGiveCommand(this), "give");
}
diff --git a/src/main/java/de/lunarakai/letterbox/LetterboxItem.java b/src/main/java/de/lunarakai/letterbox/LetterboxItem.java
new file mode 100644
index 0000000..055f297
--- /dev/null
+++ b/src/main/java/de/lunarakai/letterbox/LetterboxItem.java
@@ -0,0 +1,81 @@
+package de.lunarakai.letterbox;
+
+import java.util.UUID;
+import java.util.logging.Level;
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
+import org.bukkit.block.Skull;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.inventory.meta.SkullMeta;
+import org.bukkit.persistence.PersistentDataContainer;
+import org.bukkit.persistence.PersistentDataType;
+
+public class LetterboxItem {
+ private Letterbox plugin;
+
+ private boolean isLetterbox;
+ private UUID owner;
+
+ private final NamespacedKey isLetterboxKey;
+ private final NamespacedKey ownerKey;
+
+ public LetterboxItem(Letterbox plugin) {
+ this.plugin = plugin;
+
+ isLetterboxKey = new NamespacedKey(plugin, "isLetterbox");
+ ownerKey = new NamespacedKey(plugin, "ownerPlayer");
+ }
+
+ public ItemStack createLetterboxItem(UUID owner) {
+
+ ItemStack letterboxItem = new ItemStack(Material.PLAYER_HEAD);
+ SkullMeta skullMeta = (SkullMeta) letterboxItem.getItemMeta();
+ ItemMeta meta = letterboxItem.getItemMeta();
+
+ PersistentDataContainer dataContainer = meta.getPersistentDataContainer();
+ dataContainer.set(getIsLetterboxKey(), PersistentDataType.BOOLEAN, true);
+ dataContainer.set(getOwnerKey(), PersistentDataType.STRING, owner.toString());
+
+ letterboxItem.setItemMeta(skullMeta);
+
+ return letterboxItem;
+ }
+
+ public NamespacedKey getIsLetterboxKey() {
+ return isLetterboxKey;
+ }
+
+ public NamespacedKey getOwnerKey() {
+ return ownerKey;
+ }
+
+ public boolean isLetterbox(BlockData blockData) {
+ boolean isLetterbox = false;
+ if(!(blockData instanceof Skull)) return false;
+ SkullMeta skullMeta = (SkullMeta) blockData;
+ try {
+ isLetterbox = Boolean.TRUE.equals(skullMeta.getPersistentDataContainer().get(getIsLetterboxKey(), PersistentDataType.BOOLEAN));
+ } catch (NullPointerException e) {
+ plugin.getLogger().log(Level.SEVERE, "Could not get isLetterbox item", e);
+ }
+ return isLetterbox;
+ }
+
+ public UUID getOwnerUUID(ItemStack letterboxItem) {
+ String uuidString = letterboxItem.getItemMeta().getPersistentDataContainer().get(getOwnerKey(), PersistentDataType.STRING);
+ UUID uuid = null;
+ if(uuidString != null) {
+ try {
+ uuid = UUID.fromString(uuidString);
+ } catch (IllegalArgumentException e) {
+ plugin.getLogger().log(Level.SEVERE, "Could not convert UUIDString to UUID", e);
+ }
+ }
+ return uuid;
+ }
+
+
+
+}
diff --git a/src/main/java/de/lunarakai/letterbox/LetterboxListener.java b/src/main/java/de/lunarakai/letterbox/LetterboxListener.java
new file mode 100644
index 0000000..3f3629e
--- /dev/null
+++ b/src/main/java/de/lunarakai/letterbox/LetterboxListener.java
@@ -0,0 +1,30 @@
+package de.lunarakai.letterbox;
+
+import org.bukkit.block.data.BlockData;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerInteractEvent;
+
+public class LetterboxListener implements Listener {
+ protected Letterbox plugin;
+
+ public LetterboxListener(Letterbox plugin) {
+ this.plugin = plugin;
+ }
+
+ @EventHandler
+ public void onPlayerInteract(PlayerInteractEvent event) {
+ if(event.getClickedBlock() == null) return;
+ if (!event.getAction().isRightClick()) return;
+ if(event.getClickedBlock() == null) return;
+
+ Player player = event.getPlayer();
+
+ LetterboxItem letterbox = new LetterboxItem(plugin);
+ BlockData data = event.getClickedBlock().getBlockData();
+ if(!letterbox.isLetterbox(data)) return;
+
+ player.sendMessage("Item is a Letterbox :3");
+ }
+}
diff --git a/src/main/java/de/lunarakai/letterbox/commands/LetterboxGiveCommand.java b/src/main/java/de/lunarakai/letterbox/commands/LetterboxGiveCommand.java
new file mode 100644
index 0000000..ff46837
--- /dev/null
+++ b/src/main/java/de/lunarakai/letterbox/commands/LetterboxGiveCommand.java
@@ -0,0 +1,37 @@
+package de.lunarakai.letterbox.commands;
+
+import de.iani.cubesideutils.bukkit.commands.SubCommand;
+import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException;
+import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException;
+import de.iani.cubesideutils.bukkit.commands.exceptions.InternalCommandException;
+import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException;
+import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException;
+import de.iani.cubesideutils.commands.ArgsParser;
+import de.lunarakai.letterbox.Letterbox;
+import de.lunarakai.letterbox.LetterboxItem;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+public class LetterboxGiveCommand extends SubCommand {
+ private Letterbox plugin;
+
+ public LetterboxGiveCommand(Letterbox plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public boolean requiresPlayer() {
+ return true;
+ }
+
+ @Override
+ public boolean onCommand(CommandSender commandSender, Command command, String s, String s1, ArgsParser argsParser) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException {
+ Player player = (Player) commandSender;
+ LetterboxItem letterboxItem = new LetterboxItem(plugin);
+ ItemStack itemStack = letterboxItem.createLetterboxItem(player.getUniqueId());
+ player.getInventory().addItem(itemStack);
+ return true;
+ }
+}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index bc47b5c..73561d8 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -2,3 +2,6 @@ name: Letterbox
version: '${project.version}'
main: de.lunarakai.letterbox.Letterbox
api-version: '1.20'
+commands:
+ letterbox:
+ description: Letterbox main command