1
0

Initial commit

This commit is contained in:
Tom S 2017-12-16 15:28:40 +01:00
commit b4212d57fe
12 changed files with 585 additions and 0 deletions

87
.gitignore vendored Executable file
View File

@ -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

54
pom.xml Normal file
View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<groupId>ovh.toms</groupId>
<artifactId>flyfeather</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.8.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>

View File

@ -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<Player> enabledFly = new ArrayList<>();
private RegisterUtil<FlyFeather> 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);
}
}
}

View File

@ -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());
}
}

View File

@ -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.");
}
}
}
}
}

View File

@ -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());
}
}

View File

@ -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());
}
}
}

View File

@ -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();
}
};
}

View File

@ -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;
}
}

View File

@ -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<P extends Plugin> {
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;
}
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1,4 @@
name: FlyFeather
version: 1.0
author: TomS
main: ovh.toms.flyfeather.FlyFeather