From 39c5deb3ba29bf65aff8fff450af9dbbf2ade30a Mon Sep 17 00:00:00 2001 From: Tjeu Foolen <12643433+tjeufoolen@users.noreply.github.com> Date: Tue, 6 Aug 2019 19:08:36 +0200 Subject: [PATCH] Initital commit --- .classpath | 38 ++++++++++++ .gitignore | 61 +++++++++++++++++++ .project | 23 +++++++ README.md | 12 ++++ pom.xml | 42 +++++++++++++ .../silkablespawners/SilkableSpawners.java | 17 ++++++ .../silkablespawners/events/EventHandler.java | 17 ++++++ .../events/listeners/OnBlockBreakEvent.java | 49 +++++++++++++++ .../events/listeners/OnBlockPlaceEvent.java | 40 ++++++++++++ src/main/resources/plugin.yml | 18 ++++++ 10 files changed, 317 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/dev/foolen/silkablespawners/SilkableSpawners.java create mode 100644 src/main/java/dev/foolen/silkablespawners/events/EventHandler.java create mode 100644 src/main/java/dev/foolen/silkablespawners/events/listeners/OnBlockBreakEvent.java create mode 100644 src/main/java/dev/foolen/silkablespawners/events/listeners/OnBlockPlaceEvent.java create mode 100644 src/main/resources/plugin.yml diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..002ad57 --- /dev/null +++ b/.classpath @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e6ca798 --- /dev/null +++ b/.gitignore @@ -0,0 +1,61 @@ +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Target +target/ + +# Mac OSX +.DS_Store \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..39257cb --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + SilkableSpawners + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..71e224c --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# SilkableSpawners +###### Mine mob spawners with a diamond silktouch pickaxe + +## Permissions +| Permission | Description | +|--------------------------|---------------------------------------------------------------| +| `silkablespawners.*` | Gives access to all SilkableSpawners commands | +| `silkablespawners.break` | Allows you to mine a spawner with a diamond silktouch pickaxe | +| `silkablespawners.place` | Allows you to place a mined spawner | + +## Authors +- [Tjeu Foolen]("https://www.github.com/tjeufoolen") \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0283a2d --- /dev/null +++ b/pom.xml @@ -0,0 +1,42 @@ + + 4.0.0 + dev.foolen.silkablespawners + SilkableSpawners + 1.0 + + + 1.8 + 1.8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + org.spigotmc + spigot-api + 1.14.2-R0.1-SNAPSHOT + provided + + + \ No newline at end of file diff --git a/src/main/java/dev/foolen/silkablespawners/SilkableSpawners.java b/src/main/java/dev/foolen/silkablespawners/SilkableSpawners.java new file mode 100644 index 0000000..cc72792 --- /dev/null +++ b/src/main/java/dev/foolen/silkablespawners/SilkableSpawners.java @@ -0,0 +1,17 @@ +package dev.foolen.silkablespawners; + +import org.bukkit.ChatColor; +import org.bukkit.plugin.java.JavaPlugin; + +import dev.foolen.silkablespawners.events.EventHandler; + +public class SilkableSpawners extends JavaPlugin { + + public static final String PREFIX = ChatColor.BLUE + "[SilkableSpawners] " + ChatColor.GRAY; + + @Override + public void onEnable() { + // Events + new EventHandler(this); + } +} diff --git a/src/main/java/dev/foolen/silkablespawners/events/EventHandler.java b/src/main/java/dev/foolen/silkablespawners/events/EventHandler.java new file mode 100644 index 0000000..ef159c8 --- /dev/null +++ b/src/main/java/dev/foolen/silkablespawners/events/EventHandler.java @@ -0,0 +1,17 @@ +package dev.foolen.silkablespawners.events; + +import org.bukkit.plugin.PluginManager; + +import dev.foolen.silkablespawners.SilkableSpawners; +import dev.foolen.silkablespawners.events.listeners.OnBlockBreakEvent; +import dev.foolen.silkablespawners.events.listeners.OnBlockPlaceEvent; + +public class EventHandler { + + public EventHandler(SilkableSpawners plugin) { + PluginManager pm = plugin.getServer().getPluginManager(); + + pm.registerEvents(new OnBlockBreakEvent(), plugin); + pm.registerEvents(new OnBlockPlaceEvent(), plugin); + } +} diff --git a/src/main/java/dev/foolen/silkablespawners/events/listeners/OnBlockBreakEvent.java b/src/main/java/dev/foolen/silkablespawners/events/listeners/OnBlockBreakEvent.java new file mode 100644 index 0000000..9f7bd50 --- /dev/null +++ b/src/main/java/dev/foolen/silkablespawners/events/listeners/OnBlockBreakEvent.java @@ -0,0 +1,49 @@ +package dev.foolen.silkablespawners.events.listeners; + +import java.util.Arrays; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import dev.foolen.silkablespawners.SilkableSpawners; + +public class OnBlockBreakEvent implements Listener { + + @EventHandler + public void onBlockBreakEvent(BlockBreakEvent e) { + Player player = e.getPlayer(); + + // Check if player has permission + if (player.hasPermission("silkablespawners.break")) { + // Check if broken block is a spawner + if (e.getBlock().getType() == Material.SPAWNER) { + // Check if block is broken by a diamond pickaxe with silktouch + if (player.getInventory().getItemInMainHand().getType() == Material.DIAMOND_PICKAXE && player + .getInventory().getItemInMainHand().getEnchantments().containsKey(Enchantment.SILK_TOUCH)) { + + // get spawner meta data + CreatureSpawner creatureSpawner = (CreatureSpawner) e.getBlock().getState(); + ItemStack spawnerItem = new ItemStack(e.getBlock().getType(), 1); + ItemMeta spawnerMeta = spawnerItem.getItemMeta(); + + // Set item meta + spawnerMeta.setDisplayName(ChatColor.BLUE + "" + ChatColor.BOLD + "" + + creatureSpawner.getSpawnedType().toString() + " Spawner"); + spawnerMeta.setLore(Arrays.asList(ChatColor.GRAY + "Obtained by " + player.getName() + ".")); + spawnerItem.setItemMeta(spawnerMeta); + + e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(), spawnerItem); + player.sendMessage(SilkableSpawners.PREFIX + "You've mined a spawner with silk touch."); + } + } + } + } +} diff --git a/src/main/java/dev/foolen/silkablespawners/events/listeners/OnBlockPlaceEvent.java b/src/main/java/dev/foolen/silkablespawners/events/listeners/OnBlockPlaceEvent.java new file mode 100644 index 0000000..a151a40 --- /dev/null +++ b/src/main/java/dev/foolen/silkablespawners/events/listeners/OnBlockPlaceEvent.java @@ -0,0 +1,40 @@ +package dev.foolen.silkablespawners.events.listeners; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; + +import dev.foolen.silkablespawners.SilkableSpawners; + +public class OnBlockPlaceEvent implements Listener { + + @EventHandler + public void onBlockPlaceEvent(BlockPlaceEvent e) { + Player player = e.getPlayer(); + + // Check if player has permission + if (player.hasPermission("silkablespawners.place")) { + // Check if placed block is spawner + if (e.getBlock().getType() == Material.SPAWNER) { + // Check if spawner has custom name + if (e.getItemInHand().getItemMeta().getLore() != null) { + + String entityName = ChatColor.stripColor(e.getItemInHand().getItemMeta().getDisplayName()) + .split(" ")[0]; + EntityType entity = EntityType.valueOf(entityName); + + CreatureSpawner spawner = (CreatureSpawner) e.getBlockPlaced().getState(); + spawner.setSpawnedType(entity); + spawner.update(); + e.getPlayer().sendMessage( + SilkableSpawners.PREFIX + "Your " + entityName.toLowerCase() + " spawner has been placed!"); + } + } + } + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..e54e38c --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,18 @@ +name: SilkableSpawners +main: dev.foolen.silkablespawners.SilkableSpawners +version: 1.0 +author: Tjeu Foolen +api-version: 1.13 + +permissions: + silkablespawners.*: + description: Gives access to all SilkableSpawners commands + children: + silkablespawners.break: true + silkablespawners.place: true + silkablespawners.break: + description: Allows you to mine a spawner with a diamond silktouch pickaxe + default: op + silkablespawners.place: + description: Allows you to place a mined spawner + default: op \ No newline at end of file