From b4212d57fe65ded698da289f764ed5c19b2e0a91 Mon Sep 17 00:00:00 2001 From: Tom S Date: Sat, 16 Dec 2017 15:28:40 +0100 Subject: [PATCH] Initial commit --- .gitignore | 87 ++++++++++++++++ pom.xml | 54 ++++++++++ .../java/ovh/toms/flyfeather/FlyFeather.java | 62 ++++++++++++ .../toms/flyfeather/api/FlyFeatherAPI.java | 33 +++++++ .../listener/PlayerInteractListener.java | 53 ++++++++++ .../listener/PlayerJoinListener.java | 25 +++++ .../listener/PlayerQuitListener.java | 22 +++++ .../toms/flyfeather/misc/ConfigManager.java | 23 +++++ .../ovh/toms/flyfeather/misc/Variables.java | 34 +++++++ .../toms/flyfeather/util/RegisterUtil.java | 98 +++++++++++++++++++ .../toms/flyfeather/util/SimpleConfig.java | 90 +++++++++++++++++ src/main/resources/plugin.yml | 4 + 12 files changed, 585 insertions(+) create mode 100755 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/ovh/toms/flyfeather/FlyFeather.java create mode 100644 src/main/java/ovh/toms/flyfeather/api/FlyFeatherAPI.java create mode 100644 src/main/java/ovh/toms/flyfeather/listener/PlayerInteractListener.java create mode 100644 src/main/java/ovh/toms/flyfeather/listener/PlayerJoinListener.java create mode 100644 src/main/java/ovh/toms/flyfeather/listener/PlayerQuitListener.java create mode 100644 src/main/java/ovh/toms/flyfeather/misc/ConfigManager.java create mode 100644 src/main/java/ovh/toms/flyfeather/misc/Variables.java create mode 100644 src/main/java/ovh/toms/flyfeather/util/RegisterUtil.java create mode 100644 src/main/java/ovh/toms/flyfeather/util/SimpleConfig.java create mode 100644 src/main/resources/plugin.yml diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..22cf9e3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,87 @@ +# Created by .ignore support plugin (hsz.mobi) +### Eclipse template + +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# Eclipse Core +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# 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/ +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +*.iml + +# Sensitive or high-churn files: +.idea/ +dependency-reduced-pom.xml +*/target/ + + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +/target diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..718d58b --- /dev/null +++ b/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + + ovh.toms + flyfeather + 1.0 + + + + org.spigotmc + spigot + 1.8.8 + provided + + + org.projectlombok + lombok + 1.16.18 + provided + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + org.apache.maven.plugins + maven-shade-plugin + 2.3 + + + package + + shade + + + + + + + + + 1.8 + 1.8 + + + \ No newline at end of file diff --git a/src/main/java/ovh/toms/flyfeather/FlyFeather.java b/src/main/java/ovh/toms/flyfeather/FlyFeather.java new file mode 100644 index 0000000..a9cceb3 --- /dev/null +++ b/src/main/java/ovh/toms/flyfeather/FlyFeather.java @@ -0,0 +1,62 @@ +package ovh.toms.flyfeather; + +import com.google.common.reflect.ClassPath; +import lombok.AccessLevel; +import lombok.Getter; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; +import ovh.toms.flyfeather.misc.ConfigManager; +import ovh.toms.flyfeather.misc.Variables; +import ovh.toms.flyfeather.util.RegisterUtil; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Created by Tom S. on 15.12.17 + * This code is property of Tysox.de Development + * (c) 2015-2017 + */ +@Getter(AccessLevel.PUBLIC) +public class FlyFeather extends JavaPlugin { + + @Getter + private static FlyFeather instance; + + @Getter + private ConfigManager configManager; + + private List enabledFly = new ArrayList<>(); + + private RegisterUtil registerUtil; + + @Override + public void onLoad() { + instance = this; + } + + @Override + public void onEnable() { + registerUtil = new RegisterUtil<>(this); + configManager = new ConfigManager(); + Variables.initialize(); + registerListener(); + } + + private void registerListener() { + try { + for (ClassPath.ClassInfo classInfo : ClassPath.from(getClassLoader()).getTopLevelClasses("ovh.toms.flyfeather.listener")) { + Class clazz = Class.forName(classInfo.getName()); + if (Listener.class.isAssignableFrom(clazz)) { + registerUtil.registerEvents(clazz); + } + } + } catch (IOException | ClassNotFoundException exception) { + Logger.getLogger(RegisterUtil.class.getName()).log(Level.SEVERE, null, exception); + } + } +} diff --git a/src/main/java/ovh/toms/flyfeather/api/FlyFeatherAPI.java b/src/main/java/ovh/toms/flyfeather/api/FlyFeatherAPI.java new file mode 100644 index 0000000..d8938d5 --- /dev/null +++ b/src/main/java/ovh/toms/flyfeather/api/FlyFeatherAPI.java @@ -0,0 +1,33 @@ +package ovh.toms.flyfeather.api; + +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import ovh.toms.flyfeather.FlyFeather; +import ovh.toms.flyfeather.misc.Variables; + +/** + * Created by Tom S. on 15.12.17 + * This code is property of Tysox.de Development + * (c) 2015-2017 + */ +public class FlyFeatherAPI { + + public static ItemStack getEnabledFeatherItemStack() { + return Variables.getEnabledFeather(); + } + + public static ItemStack getDisabledFeatherItemStack() { + return Variables.getDisabledFeather(); + } + + public static void setPlayerItem(Player player) { + if (FlyFeather.getInstance().getEnabledFly().contains(player)) + player.getInventory().setItem( + FlyFeather.getInstance().getConfigManager().getSettings().getConfiguration().getInt("slot") - 1, + Variables.getEnabledFeather()); + else + player.getInventory().setItem( + FlyFeather.getInstance().getConfigManager().getSettings().getConfiguration().getInt("slot") - 1, + Variables.getDisabledFeather()); + } +} diff --git a/src/main/java/ovh/toms/flyfeather/listener/PlayerInteractListener.java b/src/main/java/ovh/toms/flyfeather/listener/PlayerInteractListener.java new file mode 100644 index 0000000..c3b098e --- /dev/null +++ b/src/main/java/ovh/toms/flyfeather/listener/PlayerInteractListener.java @@ -0,0 +1,53 @@ +package ovh.toms.flyfeather.listener; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.util.Vector; +import ovh.toms.flyfeather.FlyFeather; +import ovh.toms.flyfeather.misc.Variables; + +/** + * Created by Tom S. on 15.12.17 + * This code is property of Tysox.de Development + * (c) 2015-2017 + */ +public class PlayerInteractListener implements Listener { + + @EventHandler + public void onFeatherInteract(PlayerInteractEvent event) { + Player player = event.getPlayer(); + if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (event.getItem().getType() == Material.FEATHER && event.getItem().getItemMeta().getDisplayName().equals("§6Fliegen §aaktiviert")) { + if (player.hasPermission(FlyFeather.getInstance().getConfigManager().getSettings().getConfiguration().getString("Permission"))) { + player.setAllowFlight(false); + player.setFlying(false); + player.getInventory().setItem( + FlyFeather.getInstance().getConfigManager().getSettings().getConfiguration().getInt("slot") -1, + Variables.getDisabledFeather()); + player.playSound(player.getLocation(), Sound.FIREWORK_BLAST2, 1, 1); + FlyFeather.getInstance().getEnabledFly().remove(player); + player.sendMessage("§cDu darfst nun nicht mehr fliegen."); + } + } else if (event.getItem().getType() == Material.FEATHER && event.getItem().getItemMeta().getDisplayName().equals("§6Fliegen §cdeaktiviert")) { + if (player.hasPermission(FlyFeather.getInstance().getConfigManager().getSettings().getConfiguration().getString("Permission"))) { + Bukkit.getScheduler().runTaskLaterAsynchronously(FlyFeather.getInstance(), () -> player.setVelocity(new Vector(0, 2, 0)), 5); + player.setAllowFlight(true); + Bukkit.getScheduler().runTaskLater(FlyFeather.getInstance(), () -> player.setFlying(true), 20); + player.getInventory().setItem( + FlyFeather.getInstance().getConfigManager().getSettings().getConfiguration().getInt("slot") -1, + Variables.getEnabledFeather()); + player.playSound(player.getLocation(), Sound.FIREWORK_BLAST, 1, 1); + FlyFeather.getInstance().getEnabledFly().add(player); + player.sendMessage("§aDu darfst nun fliegen."); + } + } + } + } + +} diff --git a/src/main/java/ovh/toms/flyfeather/listener/PlayerJoinListener.java b/src/main/java/ovh/toms/flyfeather/listener/PlayerJoinListener.java new file mode 100644 index 0000000..5230415 --- /dev/null +++ b/src/main/java/ovh/toms/flyfeather/listener/PlayerJoinListener.java @@ -0,0 +1,25 @@ +package ovh.toms.flyfeather.listener; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import ovh.toms.flyfeather.FlyFeather; +import ovh.toms.flyfeather.misc.Variables; + +/** + * Created by Tom S. on 15.12.17 + * This code is property of Tysox.de Development + * (c) 2015-2017 + */ +public class PlayerJoinListener implements Listener { + + @EventHandler + public void onJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + player.getInventory().setItem( + FlyFeather.getInstance().getConfigManager().getSettings().getConfiguration().getInt("slot") -1, + Variables.getDisabledFeather()); + } + +} diff --git a/src/main/java/ovh/toms/flyfeather/listener/PlayerQuitListener.java b/src/main/java/ovh/toms/flyfeather/listener/PlayerQuitListener.java new file mode 100644 index 0000000..854b374 --- /dev/null +++ b/src/main/java/ovh/toms/flyfeather/listener/PlayerQuitListener.java @@ -0,0 +1,22 @@ +package ovh.toms.flyfeather.listener; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; +import ovh.toms.flyfeather.FlyFeather; + +/** + * Created by Tom S. on 15.12.17 + * This code is property of Tysox.de Development + * (c) 2015-2017 + */ +public class PlayerQuitListener implements Listener { + + @EventHandler + public void onQuit(PlayerQuitEvent event) { + event.getPlayer().setAllowFlight(false); + if (FlyFeather.getInstance().getEnabledFly().contains(event.getPlayer())) { + FlyFeather.getInstance().getEnabledFly().remove(event.getPlayer()); + } + } +} diff --git a/src/main/java/ovh/toms/flyfeather/misc/ConfigManager.java b/src/main/java/ovh/toms/flyfeather/misc/ConfigManager.java new file mode 100644 index 0000000..a425e7e --- /dev/null +++ b/src/main/java/ovh/toms/flyfeather/misc/ConfigManager.java @@ -0,0 +1,23 @@ +package ovh.toms.flyfeather.misc; + +import lombok.Getter; +import ovh.toms.flyfeather.util.SimpleConfig; + +/** + * Created by Tom S. on 15.12.17 + * This code is property of Tysox.de Development + * (c) 2015-2017 + */ +public class ConfigManager { + + @Getter + private SimpleConfig settings = new SimpleConfig("settings") { + @Override + public void initConfig() { + getConfiguration().set("Permission", "fly.use"); + getConfiguration().set("slot", 5); + reload(); + } + }; + +} diff --git a/src/main/java/ovh/toms/flyfeather/misc/Variables.java b/src/main/java/ovh/toms/flyfeather/misc/Variables.java new file mode 100644 index 0000000..cbfef13 --- /dev/null +++ b/src/main/java/ovh/toms/flyfeather/misc/Variables.java @@ -0,0 +1,34 @@ +package ovh.toms.flyfeather.misc; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +/** + * Created by Tom S. on 15.12.17 + * This code is property of Tysox.de Development + * (c) 2015-2017 + */ +public class Variables { + + private static ItemStack itemStackDisabled = new ItemStack(Material.FEATHER, 1); + private static ItemMeta itemMetaDisabled = itemStackDisabled.getItemMeta(); + + private static ItemStack itemStackEnabled = new ItemStack(Material.FEATHER, 1); + private static ItemMeta itemMetaEnabled = itemStackEnabled.getItemMeta(); + + public static void initialize() { + itemMetaDisabled.setDisplayName("§6Fliegen §cdeaktiviert"); + itemStackDisabled.setItemMeta(itemMetaDisabled); + itemMetaEnabled.setDisplayName("§6Fliegen §aaktiviert"); + itemStackEnabled.setItemMeta(itemMetaEnabled); + } + + public static ItemStack getEnabledFeather() { + return itemStackEnabled; + } + + public static ItemStack getDisabledFeather() { + return itemStackDisabled; + } +} diff --git a/src/main/java/ovh/toms/flyfeather/util/RegisterUtil.java b/src/main/java/ovh/toms/flyfeather/util/RegisterUtil.java new file mode 100644 index 0000000..9b1ab07 --- /dev/null +++ b/src/main/java/ovh/toms/flyfeather/util/RegisterUtil.java @@ -0,0 +1,98 @@ +package ovh.toms.flyfeather.util; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandMap; +import org.bukkit.command.CommandSender; +import org.bukkit.event.Listener; +import org.bukkit.plugin.Plugin; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.logging.Level; +import java.util.logging.Logger; + + +/** + * Created by Tom S. on 15.12.17 + * This code is property of Tysox.de Development + * (c) 2015-2017 + */ +public class RegisterUtil

{ + + private static final String VERSION; + private static CommandMap commandMap = null; + + static{ + String path = Bukkit.getServer().getClass().getPackage().getName(); + VERSION = path.substring(path.lastIndexOf(".") + 1, path.length()); + try { + Class craftServerClass = Class.forName("org.bukkit.craftbukkit." + VERSION + ".CraftServer"); + Field commandMapField = craftServerClass.getDeclaredField("commandMap"); + commandMapField.setAccessible(true); + commandMap = (CommandMap) commandMapField.get(Bukkit.getServer()); + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + private P plugin; + + public RegisterUtil(P plugin) { + this.plugin = plugin; + } + + public void registerEvents(Class... listeners) { + for (Class clazz : listeners) { + boolean isConstructor; + try { + clazz.getConstructor(plugin.getClass()); + isConstructor = true; + } catch (NoSuchMethodException ex1) { + isConstructor = false; + } + + try { + Listener listener; + if (isConstructor) { + Constructor cww = clazz.getConstructor(plugin.getClass()); + listener = (Listener) cww.newInstance(plugin); + } else { + listener = (Listener) clazz.newInstance(); + } + Bukkit.getPluginManager().registerEvents(listener, plugin); + } catch (Exception ex) { + Logger.getLogger(RegisterUtil.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + + public void registerCommand(String name, String description, CommandExecutor commandExecutor, String... aliases) { + try { + DynCommand dynCmd = new DynCommand(name, description, commandExecutor, aliases); + commandMap.register(plugin.getName(), dynCmd); + } catch (Exception ex) { + Logger.getLogger(RegisterUtil.class.getName()).log(Level.SEVERE, null, ex); + } + } + + private class DynCommand extends Command { + private CommandExecutor exec; + + protected DynCommand(String name, String description, CommandExecutor exec, String... aliases) { + super(name); + this.exec = exec; + super.setDescription(description); + super.setAliases(Arrays.asList(aliases)); + } + + @Override + public boolean execute(CommandSender cs, String label, String[] args) { + exec.onCommand(cs, this, label, args); + return false; + } + } + +} diff --git a/src/main/java/ovh/toms/flyfeather/util/SimpleConfig.java b/src/main/java/ovh/toms/flyfeather/util/SimpleConfig.java new file mode 100644 index 0000000..fdb7627 --- /dev/null +++ b/src/main/java/ovh/toms/flyfeather/util/SimpleConfig.java @@ -0,0 +1,90 @@ +package ovh.toms.flyfeather.util; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import lombok.Getter; +import org.apache.commons.lang.Validate; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.*; + +@Getter +public abstract class SimpleConfig { + + private File file = null; + private YamlConfiguration configuration = null; + + /** + * @param fileName + */ + public SimpleConfig(String fileName) { + this.file = new File("plugins/FlyFeather", fileName + ".yml"); + this.configuration = YamlConfiguration.loadConfiguration(file); + if (!this.file.exists()) { + try { + this.file.createNewFile(); + this.load(); + } catch (IOException e) { + System.err.println("Es ist ein Fehler beim erstellen der Config aufgetreten"); + } + this.initConfig(); + } + + } + + public abstract void initConfig(); + + public void load() { + try { + if (!this.file.exists()) { + this.file.createNewFile(); + this.initConfig(); + } else { + this.configuration.load(new InputStreamReader(new FileInputStream(this.file), Charsets.UTF_8)); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void save() { + try { + Validate.notNull(this.file, "File cannot be null"); + Files.createParentDirs(this.file); + String data = this.configuration.saveToString(); + Writer writer = new OutputStreamWriter(new FileOutputStream(this.file), Charsets.UTF_8); + try { + writer.write(data); + } finally { + writer.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void reload() { + this.save(); + this.load(); + } + + /** + * @param path + * @return the highest number + */ + public int getHighest(String path) { + int highest = 0; + try { + for (String sign : configuration.getConfigurationSection(path).getKeys(false)) { + int i = Integer.parseInt(sign); + + if (i > highest) { + highest = i; + } + } + } catch (Exception e) { + highest = 0; + } + return highest; + } +} \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..cee57d2 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: FlyFeather +version: 1.0 +author: TomS +main: ovh.toms.flyfeather.FlyFeather \ No newline at end of file