From 50a991c87cbf1dfd36fa525404c0128c31586502 Mon Sep 17 00:00:00 2001 From: Jonathan Snyder Date: Fri, 13 Feb 2026 23:15:08 -0500 Subject: [PATCH 1/3] Initial fixes to make it compatible with 1.21.11 --- Cameras/pom.xml | 81 +++++++++++++------- Cameras/src/water/of/cup/cameras/Camera.java | 13 +++- Cameras/src/water/of/cup/cameras/Utils.java | 4 +- 3 files changed, 64 insertions(+), 34 deletions(-) diff --git a/Cameras/pom.xml b/Cameras/pom.xml index 2d1ab3e..dbfb39b 100644 --- a/Cameras/pom.xml +++ b/Cameras/pom.xml @@ -1,30 +1,55 @@ - 4.0.0 - Achoowy - CameraPlugin - 0.0.1-SNAPSHOT - Cameras - Hand held cameras in minecraft - - src - - - maven-compiler-plugin - 3.8.0 - - 1.8 - 1.8 - - - - - - - - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + +4.0.0 + +Achoowy +CameraPlugin +2.0 +Cameras +Hand held cameras + + + src + + + maven-compiler-plugin + 3.11.0 + + 17 + 17 + + + + + + + + papermc + https://repo.papermc.io/repository/maven-public/ + + + + mojang + https://libraries.minecraft.net/ + + + + + + io.papermc.paper + paper-api + 1.21.1-R0.1-SNAPSHOT + provided + + + + com.mojang + authlib + 3.17.30 + provided + + + \ No newline at end of file diff --git a/Cameras/src/water/of/cup/cameras/Camera.java b/Cameras/src/water/of/cup/cameras/Camera.java index 7fd3e04..84ed5dd 100644 --- a/Cameras/src/water/of/cup/cameras/Camera.java +++ b/Cameras/src/water/of/cup/cameras/Camera.java @@ -23,6 +23,7 @@ import org.bukkit.map.MapRenderer; import org.bukkit.map.MapView; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.block.Block; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; @@ -51,7 +52,7 @@ public void onEnable() { this.resourcePackManager.initialize(); // Resource pack manager test - File grassFile = this.resourcePackManager.getTextureByMaterial(Material.GRASS); + File grassFile = this.resourcePackManager.getTextureByMaterial(Material.GRASS_BLOCK); if(grassFile != null) Bukkit.getLogger().info("Loaded grass texture " + grassFile.getName()); @@ -97,16 +98,20 @@ public void render(MapView mapViewNew, MapCanvas mapCanvas, Player player) { } - while(skipsLeft != 0) { + while (skipsLeft != 0) { + + Block block = Bukkit.getWorld("world").getBlockAt(x, y, 0); + colorByte = Utils.colorFromType(block, new double[]{1.0, 1.0, 1.0}); + mapCanvas.setPixel(x, y, colorByte); y++; - if(y == 128) { + if (y == 128) { y = 0; x++; } - skipsLeft -= 1; + skipsLeft--; } } } diff --git a/Cameras/src/water/of/cup/cameras/Utils.java b/Cameras/src/water/of/cup/cameras/Utils.java index 1847210..d20ab6d 100644 --- a/Cameras/src/water/of/cup/cameras/Utils.java +++ b/Cameras/src/water/of/cup/cameras/Utils.java @@ -16,7 +16,7 @@ public class Utils { public static void loadColors() { // Materials we don't want to use minecraft images for (could be because the // image provides a poor color) - blocksMap.put(Material.GRASS, new Color(49, 101, 25)); + blocksMap.put(Material.SHORT_GRASS, new Color(49, 101, 25)); blocksMap.put(Material.TALL_GRASS, new Color(49, 101, 25)); blocksMap.put(Material.LARGE_FERN, new Color(49, 101, 25)); blocksMap.put(Material.FERN, new Color(49, 101, 25)); @@ -55,7 +55,7 @@ public static void loadColors() { blocksMap.put(Material.JUNGLE_LEAVES, new Color(60, 141, 24)); blocksMap.put(Material.OAK_LEAVES, new Color(49, 111, 21)); blocksMap.put(Material.SPRUCE_LEAVES, new Color(55, 91, 56)); - blocksMap.put(Material.GRASS_PATH, new Color(170, 148, 89)); + blocksMap.put(Material.DIRT_PATH, new Color(170, 148, 89)); blocksMap.put(Material.COARSE_DIRT, new Color(104, 75, 51)); blocksMap.put(Material.ANDESITE, new Color(136, 136, 138)); blocksMap.put(Material.DIORITE, new Color(181, 181, 181)); From f1ce82928e311ea153a483129fc006cace150ab5 Mon Sep 17 00:00:00 2001 From: Jonathan Snyder Date: Fri, 13 Feb 2026 23:48:19 -0500 Subject: [PATCH 2/3] adding plugin support and sorting out some issues with the server. --- Cameras/pom.xml | 7 + Cameras/src/main/resources/plugin.yml | 10 + Cameras/src/water/of/cup/cameras/Camera.java | 415 +++++++++---------- 3 files changed, 219 insertions(+), 213 deletions(-) create mode 100644 Cameras/src/main/resources/plugin.yml diff --git a/Cameras/pom.xml b/Cameras/pom.xml index dbfb39b..6e0fff3 100644 --- a/Cameras/pom.xml +++ b/Cameras/pom.xml @@ -11,6 +11,11 @@ Hand held cameras + + + src/main/resources + + src @@ -24,6 +29,8 @@ + + papermc diff --git a/Cameras/src/main/resources/plugin.yml b/Cameras/src/main/resources/plugin.yml new file mode 100644 index 0000000..c24bc63 --- /dev/null +++ b/Cameras/src/main/resources/plugin.yml @@ -0,0 +1,10 @@ +name: CameraPlugin +version: 2.0 +main: water.of.cup.cameras.Camera +api-version: 1.21 +author: CupOfCode +description: A custom camera plugin for Paper. +commands: + takePicture: + description: Take a picture with the camera + usage: /takepicture \ No newline at end of file diff --git a/Cameras/src/water/of/cup/cameras/Camera.java b/Cameras/src/water/of/cup/cameras/Camera.java index 84ed5dd..6e70743 100644 --- a/Cameras/src/water/of/cup/cameras/Camera.java +++ b/Cameras/src/water/of/cup/cameras/Camera.java @@ -8,22 +8,24 @@ import java.util.*; import java.util.regex.Pattern; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.inventory.ShapedRecipe; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; +import org.bukkit.block.Block; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.map.MapCanvas; import org.bukkit.map.MapRenderer; import org.bukkit.map.MapView; import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.block.Block; +import org.bukkit.profile.PlayerProfile; +import org.bukkit.profile.ProfileProperty; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; @@ -37,232 +39,219 @@ public class Camera extends JavaPlugin { - private static Camera instance; - List mapIDsNotToRender = new ArrayList<>(); - ResourcePackManager resourcePackManager = new ResourcePackManager(); - private File configFile; - private FileConfiguration config; - - @Override - public void onEnable() { - instance = this; - - loadConfig(); - - this.resourcePackManager.initialize(); - - // Resource pack manager test - File grassFile = this.resourcePackManager.getTextureByMaterial(Material.GRASS_BLOCK); - if(grassFile != null) - Bukkit.getLogger().info("Loaded grass texture " + grassFile.getName()); - - File folder = new File(getDataFolder() + "/maps"); - File[] listOfFiles = folder.listFiles(); - - for (File file : listOfFiles) { - if (file.isFile()) { - int mapId = Integer.parseInt(file.getName().split("_")[1].split(Pattern.quote("."))[0]); - try { - BufferedReader br = new BufferedReader(new FileReader(file)); - String encodedData = br.readLine(); - - MapView mapView = Bukkit.getMap(Integer.valueOf(mapId)); - - mapView.setTrackingPosition(false); - for(MapRenderer renderer : mapView.getRenderers()) - mapView.removeRenderer(renderer); - - mapView.addRenderer(new MapRenderer() { - @Override - public void render(MapView mapViewNew, MapCanvas mapCanvas, Player player) { - if(!mapIDsNotToRender.contains(mapId)) { - mapIDsNotToRender.add(mapId); - - int x = 0; - int y = 0; - int skipsLeft = 0; - byte colorByte = 0; - for(int index = 0; index < encodedData.length(); index++) { - if(skipsLeft == 0) { - int end = index; - - while(encodedData.charAt(end) != ',') - end++; - - String str = encodedData.substring(index, end); - index = end; - - colorByte = Byte.parseByte(str.substring(0, str.indexOf('_'))); - - skipsLeft = Integer.parseInt(str.substring(str.indexOf('_') + 1)); - - } - - while (skipsLeft != 0) { - - Block block = Bukkit.getWorld("world").getBlockAt(x, y, 0); - colorByte = Utils.colorFromType(block, new double[]{1.0, 1.0, 1.0}); - - mapCanvas.setPixel(x, y, colorByte); - - y++; - if (y == 128) { - y = 0; - x++; - } - - skipsLeft--; - } - } - } - } - }); - - } catch (Exception e) { - e.printStackTrace(); - } - - } - } - - Utils.loadColors(); - getCommand("takePicture").setExecutor(new CameraCommands()); - registerListeners(new CameraClick(), new CameraPlace(), new PlayerJoin(), new PrepareItemCraft()); - - if(config.getBoolean("settings.camera.recipe.enabled")) - addCameraRecipe(); - - // Add bStats - Metrics metrics = new Metrics(this, 9671); - Bukkit.getLogger().info("[Cameras] bStats: " + metrics.isEnabled() + " plugin ver: " + getDescription().getVersion()); - - metrics.addCustomChart(new Metrics.SimplePie("plugin_version", () -> getDescription().getVersion())); - } - - @Override - public void onDisable() { - /* Disable all current async tasks */ - Bukkit.getScheduler().cancelTasks(this); - } - - private void registerListeners(Listener... listeners) { - Arrays.stream(listeners).forEach(listener -> getServer().getPluginManager().registerEvents(listener, this)); - } - - public static Camera getInstance() { - return instance; - } - - public void addCameraRecipe() { + private static Camera instance; + private List mapIDsNotToRender = new ArrayList<>(); + private ResourcePackManager resourcePackManager = new ResourcePackManager(); + private File configFile; + private FileConfiguration config; + + @Override + public void onEnable() { + instance = this; + + loadConfig(); + + this.resourcePackManager.initialize(); + + // Resource pack manager test + File grassFile = this.resourcePackManager.getTextureByMaterial(Material.GRASS_BLOCK); + if (grassFile != null) + Bukkit.getLogger().info("Loaded grass texture " + grassFile.getName()); + + File folder = new File(getDataFolder() + "/maps"); + File[] listOfFiles = folder.listFiles(); + + if (listOfFiles != null) { + for (File file : listOfFiles) { + if (file.isFile()) { + int mapId = Integer.parseInt(file.getName().split("_")[1].split(Pattern.quote("."))[0]); + try (BufferedReader br = new BufferedReader(new FileReader(file))) { + String encodedData = br.readLine(); + + MapView mapView = Bukkit.getMap(mapId); + mapView.setTrackingPosition(false); + + for (MapRenderer renderer : mapView.getRenderers()) + mapView.removeRenderer(renderer); + + mapView.addRenderer(new MapRenderer() { + @Override + public void render(MapView mapViewNew, MapCanvas mapCanvas, Player player) { + if (!mapIDsNotToRender.contains(mapId)) { + mapIDsNotToRender.add(mapId); + + int x = 0; + int y = 0; + int skipsLeft = 0; + byte colorByte = 0; + + for (int index = 0; index < encodedData.length(); index++) { + if (skipsLeft == 0) { + int end = index; + while (encodedData.charAt(end) != ',') end++; + + String str = encodedData.substring(index, end); + index = end; + + colorByte = Byte.parseByte(str.substring(0, str.indexOf('_'))); + skipsLeft = Integer.parseInt(str.substring(str.indexOf('_') + 1)); + } + + while (skipsLeft != 0) { + Block block = Bukkit.getWorld("world").getBlockAt(x, y, 0); + colorByte = Utils.colorFromType(block, new double[]{1.0, 1.0, 1.0}); + + mapCanvas.setPixel(x, y, colorByte); + + y++; + if (y == 128) { + y = 0; + x++; + } + + skipsLeft--; + } + } + } + } + }); + + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + Utils.loadColors(); + getCommand("takePicture").setExecutor(new CameraCommands()); + registerListeners(new CameraClick(), new CameraPlace(), new PlayerJoin(), new PrepareItemCraft()); + + if (config.getBoolean("settings.camera.recipe.enabled")) + addCameraRecipe(); + + // Add bStats + Metrics metrics = new Metrics(this, 9671); + Bukkit.getLogger().info("[Cameras] bStats: " + metrics.isEnabled() + " plugin ver: " + getDescription().getVersion()); + metrics.addCustomChart(new Metrics.SimplePie("plugin_version", () -> getDescription().getVersion())); + } + + @Override + public void onDisable() { + Bukkit.getScheduler().cancelTasks(this); + } + + private void registerListeners(Listener... listeners) { + Arrays.stream(listeners).forEach(listener -> getServer().getPluginManager().registerEvents(listener, this)); + } + + public static Camera getInstance() { + return instance; + } + + public void addCameraRecipe() { ItemStack camera = new ItemStack(Material.PLAYER_HEAD); SkullMeta cameraMeta = (SkullMeta) camera.getItemMeta(); - GameProfile profile = new GameProfile(UUID.randomUUID(), ""); - profile.getProperties().put("textures", new Property("textures", - "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmZiNWVlZTQwYzNkZDY2ODNjZWM4ZGQxYzZjM2ZjMWIxZjAxMzcxNzg2NjNkNzYxMDljZmUxMmVkN2JmMjc4ZSJ9fX0==")); - Field profileField = null; cameraMeta.setDisplayName(ChatColor.DARK_BLUE + "Camera"); + + // Create GameProfile and set textures via reflection + GameProfile profile = new GameProfile(UUID.randomUUID(), ""); + Property property = new Property("textures", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmZiNWVlZTQwYzNkZDY2ODNjZWM4ZGQxYzZjM2ZjMWIxZjAxMzcxNzg2NjNkNzYxMDljZmUxMmVkN2JmMjc4ZSJ9fX0=="); + profile.getProperties().put("textures", property); + try { - profileField = cameraMeta.getClass().getDeclaredField("profile"); + Field profileField = cameraMeta.getClass().getDeclaredField("profile"); profileField.setAccessible(true); profileField.set(cameraMeta, profile); - } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { + } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } + camera.setItemMeta(cameraMeta); + // Create the shaped recipe NamespacedKey key = new NamespacedKey(this, "camera"); ShapedRecipe recipe = new ShapedRecipe(key, camera); ArrayList shapeArr = (ArrayList) config.get("settings.camera.recipe.shape"); - recipe.shape(shapeArr.toArray(new String[shapeArr.size()])); + recipe.shape(shapeArr.toArray(new String[0])); - for(String ingredientKey : config.getConfigurationSection("settings.camera.recipe.ingredients").getKeys(false)){ - recipe.setIngredient(ingredientKey.charAt(0), Material.valueOf((String) config.get("settings.camera.recipe.ingredients." + ingredientKey))); + for (String ingredientKey : config.getConfigurationSection("settings.camera.recipe.ingredients").getKeys(false)) { + recipe.setIngredient(ingredientKey.charAt(0), + Material.valueOf((String) config.get("settings.camera.recipe.ingredients." + ingredientKey))); } Bukkit.addRecipe(recipe); } - private void loadConfig() { - if (!getDataFolder().exists()) { - getDataFolder().mkdir(); - } - - configFile = new File(getDataFolder(), "config.yml"); - if (!configFile.exists()) { - try { - configFile.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - config = YamlConfiguration.loadConfiguration(configFile); - - HashMap defaultConfig = new HashMap<>(); - - defaultConfig.put("settings.messages.notready", "&cCameras is still loading, please wait."); - defaultConfig.put("settings.messages.delay", "&cPlease wait before taking another picture."); - defaultConfig.put("settings.messages.invfull", "&cYou can not take a picture with a full inventory."); - defaultConfig.put("settings.messages.nopaper", "&cYou must have paper in order to take a picture."); - defaultConfig.put("settings.messages.enabled", true); - defaultConfig.put("settings.delay.amount", 1000); - defaultConfig.put("settings.delay.enabled", true); - defaultConfig.put("settings.camera.transparentWater", true); - defaultConfig.put("settings.camera.shadows", true); - defaultConfig.put("settings.camera.permissions", true); - - HashMap defaultRecipe = new HashMap<>(); - defaultRecipe.put("I", Material.IRON_INGOT.toString()); - defaultRecipe.put("G", Material.GLASS_PANE.toString()); - defaultRecipe.put("T", Material.GLOWSTONE_DUST.toString()); - defaultRecipe.put("R", Material.REDSTONE.toString()); - - defaultConfig.put("settings.camera.recipe.enabled", true); - defaultConfig.put("settings.camera.recipe.shape", new ArrayList() { - { - add("IGI"); - add("ITI"); - add("IRI"); - } - }); - - - if(!config.contains("settings.camera.recipe.ingredients")) { - for (String key : defaultRecipe.keySet()) { - defaultConfig.put("settings.camera.recipe.ingredients." + key, defaultRecipe.get(key)); - } - } - - for (String key : defaultConfig.keySet()) { - if(!config.contains(key)) { - config.set(key, defaultConfig.get(key)); - } - } - - File mapDir = new File(getDataFolder(), "maps"); - if (!mapDir.exists()) { - mapDir.mkdir(); - } - - this.saveConfig(); - } - - public ResourcePackManager getResourcePackManager() { - return this.resourcePackManager; - } - - @Override - public void saveConfig() { - try { - config.save(configFile); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public FileConfiguration getConfig() { - return config; - } -} + private void loadConfig() { + if (!getDataFolder().exists()) getDataFolder().mkdir(); + + configFile = new File(getDataFolder(), "config.yml"); + if (!configFile.exists()) { + try { + configFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + config = YamlConfiguration.loadConfiguration(configFile); + + HashMap defaultConfig = new HashMap<>(); + + defaultConfig.put("settings.messages.notready", "&cCameras is still loading, please wait."); + defaultConfig.put("settings.messages.delay", "&cPlease wait before taking another picture."); + defaultConfig.put("settings.messages.invfull", "&cYou can not take a picture with a full inventory."); + defaultConfig.put("settings.messages.nopaper", "&cYou must have paper in order to take a picture."); + defaultConfig.put("settings.messages.enabled", true); + defaultConfig.put("settings.delay.amount", 1000); + defaultConfig.put("settings.delay.enabled", true); + defaultConfig.put("settings.camera.transparentWater", true); + defaultConfig.put("settings.camera.shadows", true); + defaultConfig.put("settings.camera.permissions", true); + + HashMap defaultRecipe = new HashMap<>(); + defaultRecipe.put("I", Material.IRON_INGOT.toString()); + defaultRecipe.put("G", Material.GLASS_PANE.toString()); + defaultRecipe.put("T", Material.GLOWSTONE_DUST.toString()); + defaultRecipe.put("R", Material.REDSTONE.toString()); + + defaultConfig.put("settings.camera.recipe.enabled", true); + defaultConfig.put("settings.camera.recipe.shape", Arrays.asList("IGI", "ITI", "IRI")); + + if (!config.contains("settings.camera.recipe.ingredients")) { + for (String key : defaultRecipe.keySet()) { + defaultConfig.put("settings.camera.recipe.ingredients." + key, defaultRecipe.get(key)); + } + } + + for (String key : defaultConfig.keySet()) { + if (!config.contains(key)) config.set(key, defaultConfig.get(key)); + } + + File mapDir = new File(getDataFolder(), "maps"); + if (!mapDir.exists()) mapDir.mkdir(); + + saveConfig(); + } + + public ResourcePackManager getResourcePackManager() { + return this.resourcePackManager; + } + + @Override + public void saveConfig() { + try { + config.save(configFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public FileConfiguration getConfig() { + return config; + } +} \ No newline at end of file From aea3c39f8c3700bf9b368a8d74e262089985d76f Mon Sep 17 00:00:00 2001 From: Jonathan Snyder Date: Sat, 14 Feb 2026 13:06:51 -0500 Subject: [PATCH 3/3] restructured and finalized api calls. --- Cameras/pom.xml | 5 +- .../java}/water/of/cup/cameras/Camera.java | 73 ++++++++++--------- .../water/of/cup/cameras/MapStorage.java | 0 .../java}/water/of/cup/cameras/Picture.java | 0 .../java}/water/of/cup/cameras/Renderer.java | 0 .../of/cup/cameras/ResourcePackManager.java | 0 .../java}/water/of/cup/cameras/Utils.java | 0 .../java}/water/of/cup/cameras/ZipUtils.java | 0 .../water/of/cup/cameras/bstats/Metrics.java | 0 .../cup/cameras/commands/CameraCommands.java | 0 .../of/cup/cameras/listeners/CameraClick.java | 0 .../of/cup/cameras/listeners/CameraPlace.java | 0 .../of/cup/cameras/listeners/PlayerJoin.java | 0 .../cameras/listeners/PrepareItemCraft.java | 0 Cameras/src/main/resources/plugin.yml | 2 +- Cameras/src/plugin.yml | 9 --- 16 files changed, 40 insertions(+), 49 deletions(-) rename Cameras/src/{ => main/java}/water/of/cup/cameras/Camera.java (85%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/MapStorage.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/Picture.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/Renderer.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/ResourcePackManager.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/Utils.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/ZipUtils.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/bstats/Metrics.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/commands/CameraCommands.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/listeners/CameraClick.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/listeners/CameraPlace.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/listeners/PlayerJoin.java (100%) rename Cameras/src/{ => main/java}/water/of/cup/cameras/listeners/PrepareItemCraft.java (100%) delete mode 100644 Cameras/src/plugin.yml diff --git a/Cameras/pom.xml b/Cameras/pom.xml index 6e0fff3..72869fa 100644 --- a/Cameras/pom.xml +++ b/Cameras/pom.xml @@ -16,7 +16,6 @@ src/main/resources - src maven-compiler-plugin @@ -29,8 +28,6 @@ - - papermc @@ -47,7 +44,7 @@ io.papermc.paper paper-api - 1.21.1-R0.1-SNAPSHOT + 1.20.4-R0.1-SNAPSHOT provided diff --git a/Cameras/src/water/of/cup/cameras/Camera.java b/Cameras/src/main/java/water/of/cup/cameras/Camera.java similarity index 85% rename from Cameras/src/water/of/cup/cameras/Camera.java rename to Cameras/src/main/java/water/of/cup/cameras/Camera.java index 6e70743..eb7bb90 100644 --- a/Cameras/src/water/of/cup/cameras/Camera.java +++ b/Cameras/src/main/java/water/of/cup/cameras/Camera.java @@ -25,7 +25,6 @@ import org.bukkit.map.MapView; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.profile.PlayerProfile; -import org.bukkit.profile.ProfileProperty; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; @@ -150,40 +149,44 @@ public static Camera getInstance() { } public void addCameraRecipe() { - ItemStack camera = new ItemStack(Material.PLAYER_HEAD); - SkullMeta cameraMeta = (SkullMeta) camera.getItemMeta(); - cameraMeta.setDisplayName(ChatColor.DARK_BLUE + "Camera"); - - // Create GameProfile and set textures via reflection - GameProfile profile = new GameProfile(UUID.randomUUID(), ""); - Property property = new Property("textures", - "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmZiNWVlZTQwYzNkZDY2ODNjZWM4ZGQxYzZjM2ZjMWIxZjAxMzcxNzg2NjNkNzYxMDljZmUxMmVkN2JmMjc4ZSJ9fX0=="); - profile.getProperties().put("textures", property); - - try { - Field profileField = cameraMeta.getClass().getDeclaredField("profile"); - profileField.setAccessible(true); - profileField.set(cameraMeta, profile); - } catch (NoSuchFieldException | IllegalAccessException e) { - e.printStackTrace(); - } - - camera.setItemMeta(cameraMeta); - - // Create the shaped recipe - NamespacedKey key = new NamespacedKey(this, "camera"); - ShapedRecipe recipe = new ShapedRecipe(key, camera); - - ArrayList shapeArr = (ArrayList) config.get("settings.camera.recipe.shape"); - recipe.shape(shapeArr.toArray(new String[0])); - - for (String ingredientKey : config.getConfigurationSection("settings.camera.recipe.ingredients").getKeys(false)) { - recipe.setIngredient(ingredientKey.charAt(0), - Material.valueOf((String) config.get("settings.camera.recipe.ingredients." + ingredientKey))); - } - - Bukkit.addRecipe(recipe); - } + ItemStack camera = new ItemStack(Material.PLAYER_HEAD); + SkullMeta meta = (SkullMeta) camera.getItemMeta(); + + if (meta == null) return; + + meta.setDisplayName(ChatColor.DARK_BLUE + "Camera"); + + PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID(), null); + + try { + profile.getTextures().setSkin( + new java.net.URL("http://textures.minecraft.net/texture/6fb5eee40c3dd6683cec8dd1c6c3fc1b1f0137178663d76109cfe12ed7bf278e") + ); + } catch (java.net.MalformedURLException e) { + e.printStackTrace(); + } + + meta.setOwnerProfile(profile); + camera.setItemMeta(meta); + + NamespacedKey key = new NamespacedKey(this, "camera"); + ShapedRecipe recipe = new ShapedRecipe(key, camera); + + java.util.List shape = config.getStringList("settings.camera.recipe.shape"); + recipe.shape(shape.toArray(new String[0])); + + var section = config.getConfigurationSection("settings.camera.recipe.ingredients"); + if (section != null) { + for (String k : section.getKeys(false)) { + Material mat = Material.matchMaterial(section.getString(k)); + if (mat != null) { + recipe.setIngredient(k.charAt(0), mat); + } + } + } + + Bukkit.addRecipe(recipe); + } private void loadConfig() { if (!getDataFolder().exists()) getDataFolder().mkdir(); diff --git a/Cameras/src/water/of/cup/cameras/MapStorage.java b/Cameras/src/main/java/water/of/cup/cameras/MapStorage.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/MapStorage.java rename to Cameras/src/main/java/water/of/cup/cameras/MapStorage.java diff --git a/Cameras/src/water/of/cup/cameras/Picture.java b/Cameras/src/main/java/water/of/cup/cameras/Picture.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/Picture.java rename to Cameras/src/main/java/water/of/cup/cameras/Picture.java diff --git a/Cameras/src/water/of/cup/cameras/Renderer.java b/Cameras/src/main/java/water/of/cup/cameras/Renderer.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/Renderer.java rename to Cameras/src/main/java/water/of/cup/cameras/Renderer.java diff --git a/Cameras/src/water/of/cup/cameras/ResourcePackManager.java b/Cameras/src/main/java/water/of/cup/cameras/ResourcePackManager.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/ResourcePackManager.java rename to Cameras/src/main/java/water/of/cup/cameras/ResourcePackManager.java diff --git a/Cameras/src/water/of/cup/cameras/Utils.java b/Cameras/src/main/java/water/of/cup/cameras/Utils.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/Utils.java rename to Cameras/src/main/java/water/of/cup/cameras/Utils.java diff --git a/Cameras/src/water/of/cup/cameras/ZipUtils.java b/Cameras/src/main/java/water/of/cup/cameras/ZipUtils.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/ZipUtils.java rename to Cameras/src/main/java/water/of/cup/cameras/ZipUtils.java diff --git a/Cameras/src/water/of/cup/cameras/bstats/Metrics.java b/Cameras/src/main/java/water/of/cup/cameras/bstats/Metrics.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/bstats/Metrics.java rename to Cameras/src/main/java/water/of/cup/cameras/bstats/Metrics.java diff --git a/Cameras/src/water/of/cup/cameras/commands/CameraCommands.java b/Cameras/src/main/java/water/of/cup/cameras/commands/CameraCommands.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/commands/CameraCommands.java rename to Cameras/src/main/java/water/of/cup/cameras/commands/CameraCommands.java diff --git a/Cameras/src/water/of/cup/cameras/listeners/CameraClick.java b/Cameras/src/main/java/water/of/cup/cameras/listeners/CameraClick.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/listeners/CameraClick.java rename to Cameras/src/main/java/water/of/cup/cameras/listeners/CameraClick.java diff --git a/Cameras/src/water/of/cup/cameras/listeners/CameraPlace.java b/Cameras/src/main/java/water/of/cup/cameras/listeners/CameraPlace.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/listeners/CameraPlace.java rename to Cameras/src/main/java/water/of/cup/cameras/listeners/CameraPlace.java diff --git a/Cameras/src/water/of/cup/cameras/listeners/PlayerJoin.java b/Cameras/src/main/java/water/of/cup/cameras/listeners/PlayerJoin.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/listeners/PlayerJoin.java rename to Cameras/src/main/java/water/of/cup/cameras/listeners/PlayerJoin.java diff --git a/Cameras/src/water/of/cup/cameras/listeners/PrepareItemCraft.java b/Cameras/src/main/java/water/of/cup/cameras/listeners/PrepareItemCraft.java similarity index 100% rename from Cameras/src/water/of/cup/cameras/listeners/PrepareItemCraft.java rename to Cameras/src/main/java/water/of/cup/cameras/listeners/PrepareItemCraft.java diff --git a/Cameras/src/main/resources/plugin.yml b/Cameras/src/main/resources/plugin.yml index c24bc63..70c20d9 100644 --- a/Cameras/src/main/resources/plugin.yml +++ b/Cameras/src/main/resources/plugin.yml @@ -2,7 +2,7 @@ name: CameraPlugin version: 2.0 main: water.of.cup.cameras.Camera api-version: 1.21 -author: CupOfCode +author: Nicholas Kopiwoda description: A custom camera plugin for Paper. commands: takePicture: diff --git a/Cameras/src/plugin.yml b/Cameras/src/plugin.yml deleted file mode 100644 index 2f4d012..0000000 --- a/Cameras/src/plugin.yml +++ /dev/null @@ -1,9 +0,0 @@ -main: water.of.cup.cameras.Camera -name: Cameras -version: '1.05' -description: Take Pictures. -author: Nicholas Kopiwoda -api-version: 1.14 -commands: - takepicture: - description: take a picture \ No newline at end of file