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