Initial commit
This commit is contained in:
commit
b4212d57fe
87
.gitignore
vendored
Executable file
87
.gitignore
vendored
Executable 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
54
pom.xml
Normal 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>
|
62
src/main/java/ovh/toms/flyfeather/FlyFeather.java
Normal file
62
src/main/java/ovh/toms/flyfeather/FlyFeather.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
33
src/main/java/ovh/toms/flyfeather/api/FlyFeatherAPI.java
Normal file
33
src/main/java/ovh/toms/flyfeather/api/FlyFeatherAPI.java
Normal 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());
|
||||
}
|
||||
}
|
@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
23
src/main/java/ovh/toms/flyfeather/misc/ConfigManager.java
Normal file
23
src/main/java/ovh/toms/flyfeather/misc/ConfigManager.java
Normal 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();
|
||||
}
|
||||
};
|
||||
|
||||
}
|
34
src/main/java/ovh/toms/flyfeather/misc/Variables.java
Normal file
34
src/main/java/ovh/toms/flyfeather/misc/Variables.java
Normal 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;
|
||||
}
|
||||
}
|
98
src/main/java/ovh/toms/flyfeather/util/RegisterUtil.java
Normal file
98
src/main/java/ovh/toms/flyfeather/util/RegisterUtil.java
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
90
src/main/java/ovh/toms/flyfeather/util/SimpleConfig.java
Normal file
90
src/main/java/ovh/toms/flyfeather/util/SimpleConfig.java
Normal 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;
|
||||
}
|
||||
}
|
4
src/main/resources/plugin.yml
Normal file
4
src/main/resources/plugin.yml
Normal file
@ -0,0 +1,4 @@
|
||||
name: FlyFeather
|
||||
version: 1.0
|
||||
author: TomS
|
||||
main: ovh.toms.flyfeather.FlyFeather
|
Loading…
x
Reference in New Issue
Block a user