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