From e35145f8ed68ffd348915a5f92990d5a38335e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sat, 31 Aug 2024 19:58:57 +0200 Subject: [PATCH] changed pixelblock item and added item to recipe book --- build.gradle | 9 +++++- .../minecraft/pixelblocks/PixelBlockItem.java | 25 ++++++++-------- .../pixelblocks/PixelBlocksPlugin.java | 29 ++++++++++--------- .../listeners/DiscoverRecipesListener.java | 26 +++++++++++++++++ .../minecraft/pixelblocks/utils/HeadUtil.java | 22 ++++++++++++++ 5 files changed, 84 insertions(+), 27 deletions(-) create mode 100644 src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/DiscoverRecipesListener.java create mode 100644 src/main/java/eu/mhsl/minecraft/pixelblocks/utils/HeadUtil.java diff --git a/build.gradle b/build.gradle index 7fd0ad0..ecb55f6 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ repositories { } dependencies { -compileOnly "io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT" + compileOnly "io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT" } def targetJavaVersion = 21 @@ -47,3 +47,10 @@ processResources { expand props } } + +tasks.register('copyJarToTestServer', Exec) { + dependsOn jar + mustRunAfter jar + + commandLine 'cp', 'build/libs/PixelBlocks-1.0-SNAPSHOT.jar', '/home/elias/Dokumente/mcTestServer/plugins/pixelblocks.jar' +} diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java index a4e59d1..7f52d37 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlockItem.java @@ -1,6 +1,7 @@ package eu.mhsl.minecraft.pixelblocks; import eu.mhsl.minecraft.pixelblocks.pixelblock.PixelBlock; +import eu.mhsl.minecraft.pixelblocks.utils.HeadUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -18,14 +19,13 @@ import java.util.UUID; public class PixelBlockItem { public static UUID unusedBlockID = UUID.fromString("98fdf0ae-c3ab-4ef7-ae25-efd518d600de"); + public static final String itemTexture = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzE5NGU5ZTc3NTdkMDZkNmY1ZTViZTg0NTQ4YTdjYjUyMTczZDY4Y2NmODAyZDIxMTI3NWQzMWNkYmEwYTA2ZSJ9fX0="; + public static final NamespacedKey recipeKey = new NamespacedKey(PixelBlocksPlugin.plugin, "pixelblock"); public static @NotNull ItemStack getBlockAsItem(@NotNull PixelBlock block) { - return PixelBlockItem.updateBlockAsItem(block, ItemStack.of(Material.GRAY_STAINED_GLASS)); - } - - public static @NotNull ItemStack updateBlockAsItem(@NotNull PixelBlock block, @NotNull ItemStack itemStack) { String ownerName = Optional.ofNullable(Bukkit.getOfflinePlayer(block.ownerUUID).getName()).orElseGet(() -> block.ownerUUID.toString()); + ItemStack itemStack = HeadUtil.getCustomTextureHead(itemTexture); ItemMeta meta = itemStack.getItemMeta(); meta.itemName(Component.text(block.blockUUID.toString())); meta.displayName(Component.text("Pixelblock von " + ownerName)); @@ -41,11 +41,11 @@ public class PixelBlockItem { } public static @NotNull ItemStack getEmptyPixelBlock() { - ItemStack item = ItemStack.of(Material.GRAY_STAINED_GLASS); + ItemStack item = HeadUtil.getCustomTextureHead(itemTexture); ItemMeta meta = item.getItemMeta(); meta.displayName(Component.text("Leerer Pixelblock")); meta.lore(List.of( - Component.text("Der erste Spieler, welcher den Block platziert wird der Besitzer des Blocks."), + Component.text("Der erste Spieler, der den Block platziert wird zum Besitzer des Blocks."), Component.text("Klicke auf den gesetzten Block, um diesen zu bearbeiten!") )); meta.setEnchantmentGlintOverride(true); @@ -55,12 +55,13 @@ public class PixelBlockItem { } public static @NotNull Recipe getRecipe() { - NamespacedKey key = new NamespacedKey(PixelBlocksPlugin.plugin, "pixelblock"); - ShapedRecipe recipe = new ShapedRecipe(key, getEmptyPixelBlock()); - recipe.shape("ABA", "BCB", "ABA"); - recipe.setIngredient('A', Material.DIAMOND_BLOCK); - recipe.setIngredient('B', Material.EMERALD_BLOCK); - recipe.setIngredient('C', Material.GRAY_STAINED_GLASS); + ShapedRecipe recipe = new ShapedRecipe(recipeKey, getEmptyPixelBlock()); + recipe.shape("AEA", "BCB", "DDD"); + recipe.setIngredient('A', Material.GLASS); + recipe.setIngredient('B', Material.DIAMOND_BLOCK); + recipe.setIngredient('C', Material.HEART_OF_THE_SEA); + recipe.setIngredient('D', Material.GRASS_BLOCK); + recipe.setIngredient('E', Material.GLOW_BERRIES); return recipe; } } diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocksPlugin.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocksPlugin.java index bd335b4..ef0c9bb 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocksPlugin.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocksPlugin.java @@ -46,20 +46,21 @@ public final class PixelBlocksPlugin extends JavaPlugin { database.loadPixelBlocks(); Listener[] listeners = { - new EnterPixelBlockListener(), - new FallOutOfPixelBlockListener(), - new BreakPixelListener(), - new PlacePixelBlockListener(), - new PreventInventorysListener(), - new ExitPixelWorldListener(), - new CraftPixelBlockListener(), - new PreventIllegalBlocksListener(), - new BreakPixelBlockListener(), - new PlacePixelListener(), - new PreventHopperActionsListener(), - new PreventLiquidsFlowListener(), - new PreventPistonsListener(), - new PreventEntityPlacementListener() + new EnterPixelBlockListener(), + new FallOutOfPixelBlockListener(), + new BreakPixelListener(), + new PlacePixelBlockListener(), + new PreventInventorysListener(), + new ExitPixelWorldListener(), + new CraftPixelBlockListener(), + new PreventIllegalBlocksListener(), + new BreakPixelBlockListener(), + new PlacePixelListener(), + new PreventHopperActionsListener(), + new PreventLiquidsFlowListener(), + new PreventPistonsListener(), + new PreventEntityPlacementListener(), + new DiscoverRecipesListener() }; for (Listener listener : listeners) { diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/DiscoverRecipesListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/DiscoverRecipesListener.java new file mode 100644 index 0000000..6efb61c --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/DiscoverRecipesListener.java @@ -0,0 +1,26 @@ +package eu.mhsl.minecraft.pixelblocks.listeners; + +import eu.mhsl.minecraft.pixelblocks.PixelBlockItem; +import eu.mhsl.minecraft.pixelblocks.PixelBlocksPlugin; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.*; +import org.bukkit.inventory.ItemStack; + +import java.util.List; +import java.util.logging.Level; + +public class DiscoverRecipesListener implements Listener { + @EventHandler + public void shouldDiscover(InventoryClickEvent event) { + ItemStack clickedItem = event.getCurrentItem(); + if(clickedItem == null) return; + if(!List.of(Material.HEART_OF_THE_SEA, Material.GLOW_BERRIES).contains(clickedItem.getType())) return; + if(!(event.getWhoClicked() instanceof Player player)) return; + if(player.hasDiscoveredRecipe(PixelBlockItem.recipeKey)) return; + PixelBlocksPlugin.plugin.getLogger().log(Level.INFO, String.format("%s unlocked tne PixelBlock recipe!", player.getName())); + player.discoverRecipe(PixelBlockItem.recipeKey); + } +} diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/utils/HeadUtil.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/utils/HeadUtil.java new file mode 100644 index 0000000..0d817c5 --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/utils/HeadUtil.java @@ -0,0 +1,22 @@ +package eu.mhsl.minecraft.pixelblocks.utils; + +import com.destroystokyo.paper.profile.PlayerProfile; +import com.destroystokyo.paper.profile.ProfileProperty; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; + +import java.util.UUID; + +public class HeadUtil { + public static ItemStack getCustomTextureHead(String base64) { + ItemStack head = new ItemStack(Material.PLAYER_HEAD); + SkullMeta meta = (SkullMeta) head.getItemMeta(); + PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID(), ""); + profile.setProperty(new ProfileProperty("textures", base64)); + meta.setPlayerProfile(profile); + head.setItemMeta(meta); + return head; + } +}