Initial commit
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
package de.princep.lobbysystem;
|
||||
|
||||
import de.princep.lobbysystem.annotations.AnnotationManager;
|
||||
import de.princep.lobbysystem.apis.HiderAPI;
|
||||
import de.princep.lobbysystem.apis.MySQL;
|
||||
import de.princep.lobbysystem.apis.CoinAPI;
|
||||
import de.princep.lobbysystem.apis.WingAPI;
|
||||
import de.princep.lobbysystem.join.JoinListener;
|
||||
import de.princep.lobbysystem.utils.LocationManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class LobbySystem extends JavaPlugin {
|
||||
|
||||
public static LocationManager locationManager;
|
||||
|
||||
//Config
|
||||
public static File file;
|
||||
public static FileConfiguration cfg;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
locationManager = new LocationManager();
|
||||
|
||||
//Config
|
||||
saveDefaultConfig();
|
||||
LobbySystem.file = new File("plugins/Hub", "config.yml");
|
||||
LobbySystem.cfg = YamlConfiguration.loadConfiguration(LobbySystem.file);
|
||||
|
||||
AnnotationManager am = new AnnotationManager();
|
||||
am.addApiObject(new CoinAPI());
|
||||
am.addApiObject(new MySQL("localhost", 3306, "princep", "princep", "Fs427SX9TrAWFFx"));
|
||||
am.addApiObject(new HiderAPI());
|
||||
am.addApiObject(new WingAPI());
|
||||
|
||||
PluginManager pm = Bukkit.getPluginManager();
|
||||
pm.registerEvents(am.addObject(new JoinListener()), this);
|
||||
|
||||
am.initialiseFields();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
super.onDisable();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package de.princep.lobbysystem.annotations;
|
||||
|
||||
public interface AnnotationAPI {
|
||||
void initialise();
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package de.princep.lobbysystem.annotations;
|
||||
|
||||
import io.github.classgraph.*;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class AnnotationManager {
|
||||
|
||||
private final Map<Class<?>, Object> objects = new HashMap<>();
|
||||
private final Map<Class<? extends AnnotationAPI>, AnnotationAPI> apiObjects = new HashMap<>();
|
||||
|
||||
public void addApiObject(AnnotationAPI o) {
|
||||
apiObjects.put(o.getClass(), o);
|
||||
objects.put(o.getClass(), o);
|
||||
}
|
||||
|
||||
public AnnotationAPI getApiObject(Class<?> clazz) {
|
||||
return apiObjects.get(clazz);
|
||||
}
|
||||
|
||||
public <T> T addObject(T o) {
|
||||
objects.put(o.getClass(), o);
|
||||
return o;
|
||||
}
|
||||
|
||||
public Object getObject(Class<?> clazz) {
|
||||
return objects.get(clazz);
|
||||
}
|
||||
|
||||
public void initialiseFields() {
|
||||
try (ScanResult result = new ClassGraph()
|
||||
.enableAllInfo()
|
||||
.acceptPackages("de.princep.lobbysystem")
|
||||
.scan()) {
|
||||
ClassInfoList classInfos = result.getAllClasses();
|
||||
for (ClassInfo classInfo : classInfos) {
|
||||
FieldInfoList fieldInfos = classInfo.getFieldInfo();
|
||||
for (FieldInfo fieldInfo : fieldInfos) {
|
||||
if (fieldInfo.hasAnnotation(GetAPI.class.getName())) {
|
||||
Field field = fieldInfo.loadClassAndGetField();
|
||||
AnnotationAPI apiInstance = getApiObject(field.getType());
|
||||
boolean isStatic = Modifier.isStatic(field.getModifiers());
|
||||
field.set(isStatic ? null : getObject(field.getDeclaringClass()), apiInstance);
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch (Exception e) { e.printStackTrace(); }
|
||||
for (AnnotationAPI api : apiObjects.values()) {
|
||||
api.initialise();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package de.princep.lobbysystem.annotations;
|
||||
|
||||
public @interface GetAPI {
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package de.princep.lobbysystem.apis;
|
||||
|
||||
import de.princep.lobbysystem.annotations.AnnotationAPI;
|
||||
import de.princep.lobbysystem.annotations.GetAPI;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.util.*;
|
||||
|
||||
public class CoinAPI implements AnnotationAPI {
|
||||
@GetAPI
|
||||
public MySQL sql;
|
||||
private int startCoins = 0;
|
||||
|
||||
public void initialise() {
|
||||
sql.insert("CREATE TABLE IF NOT EXISTS Coins (UUID VARCHAR(20), Coins INT(20))");
|
||||
}
|
||||
|
||||
public void loadUser(UUID user) {
|
||||
if (getCoins(user) == -1) setCoins(user, startCoins);
|
||||
}
|
||||
|
||||
public void setStartCoins(int startCoins) { this.startCoins = startCoins; }
|
||||
|
||||
public void setCoins(UUID user, int coins) {
|
||||
sql.insert("DELETE FROM Coins WHERE UUID = \"" + user + "\"");
|
||||
if (coins < 0) coins *= -1;
|
||||
sql.insert("INSERT INTO Coins VALUES (\"" + user + "\", " + coins + ")");
|
||||
}
|
||||
|
||||
public int getCoins(UUID user) {
|
||||
try {
|
||||
ResultSet rs = sql.getData("SELECT Coins FROM Coins WHERE UUID = \"" + user + "\"");
|
||||
if (rs.next()) {
|
||||
return rs.getInt("Coins");
|
||||
}
|
||||
}catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public void addCoins(UUID user, int coins) {
|
||||
if (coins < 0) coins *= -1;
|
||||
setCoins(user, getCoins(user) + coins);
|
||||
}
|
||||
|
||||
public void removeCoins(UUID user, int coins) {
|
||||
if (coins > 0) coins *= -1;
|
||||
coins = getCoins(user) - coins;
|
||||
if (coins < 0) coins = 0;
|
||||
setCoins(user, coins);
|
||||
}
|
||||
|
||||
public boolean compare(UUID user, int coins) {
|
||||
return getCoins(user) >= coins;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package de.princep.lobbysystem.apis;
|
||||
|
||||
import de.princep.lobbysystem.annotations.AnnotationAPI;
|
||||
import de.princep.lobbysystem.annotations.GetAPI;
|
||||
import de.princep.lobbysystem.utils.Promissions;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class HiderAPI implements AnnotationAPI {
|
||||
@GetAPI
|
||||
public MySQL sql;
|
||||
|
||||
@Override
|
||||
public void initialise() {
|
||||
sql.insert("CREATE TABLE IF NOT EXISTS Hider (UUID VARCHAR(100), ID INT(10))");
|
||||
}
|
||||
|
||||
private interface Executable { void execute(Player p, Player all); }
|
||||
|
||||
public enum State {
|
||||
HIDE_ALL(0, Material.SULPHUR, "§cKein Spieler sichtbar §7(Rechtsklick)", Player::hidePlayer),
|
||||
ONLY_VIP(1, Material.REDSTONE, "§5Nur VIPs §7(Rechtsklick)", (p, all) -> { if (all.hasPermission(Promissions.VIP)) p.showPlayer(all); else p.hidePlayer(all); }),
|
||||
SHOW_ALL(2, Material.GLOWSTONE_DUST, "§aAlle Spieler sichtbar §7(Rechtsklick)", Player::showPlayer);
|
||||
|
||||
private final int id;
|
||||
private final Material material;
|
||||
private final String name;
|
||||
private final Executable exe;
|
||||
|
||||
State(int id, Material material, String name, Executable exe) {
|
||||
this.material = material;
|
||||
this.name = name;
|
||||
this.id = id;
|
||||
this.exe = exe;
|
||||
}
|
||||
|
||||
public int getID() { return id; }
|
||||
public ItemStack getItem() {
|
||||
ItemStack item = new ItemStack(material);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(name);
|
||||
item.setItemMeta(meta);
|
||||
return item;
|
||||
}
|
||||
public void manageHiding(Player p) { for (Player all : Bukkit.getOnlinePlayers()) exe.execute(p, all); }
|
||||
|
||||
public static State getByID(int id) {
|
||||
for (State state : values())
|
||||
if (state.getID() == id) return state;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public State getState(Player p) {
|
||||
try {
|
||||
ResultSet rs = sql.getData("SELECT ID FROM Hider WHERE UUID = \"" + p.getUniqueId() + "\"");
|
||||
if (rs == null || !rs.next()) {
|
||||
setState(p, State.SHOW_ALL);
|
||||
return State.SHOW_ALL;
|
||||
}
|
||||
int id = rs.getInt("ID");
|
||||
return State.getByID(id);
|
||||
}catch (Exception e) { e.printStackTrace(); }
|
||||
return State.SHOW_ALL;
|
||||
}
|
||||
|
||||
public void setState(Player p, State state) {
|
||||
sql.insert("DELETE FROM Hider WHERE UUID = \"" + p.getUniqueId() + "\"");
|
||||
sql.insert("INSERT INTO Hider (UUID, ID) VALUES (\"" + p.getUniqueId() + "\", " + state.getID() + ")");
|
||||
}
|
||||
|
||||
private final HashMap<Player, Long> cooldowns = new HashMap<>();
|
||||
private final long cooldownInMilliseconds = 3000;
|
||||
public boolean checkCooldown(Player p) {
|
||||
if (!cooldowns.containsKey(p)) return true;
|
||||
long lastTime = cooldowns.get(p);
|
||||
long difference = System.currentTimeMillis() - lastTime;
|
||||
return difference >= cooldownInMilliseconds;
|
||||
}
|
||||
public void updateCooldown(Player p) {
|
||||
cooldowns.remove(p);
|
||||
cooldowns.put(p, System.currentTimeMillis());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package de.princep.lobbysystem.apis;
|
||||
|
||||
import de.princep.lobbysystem.annotations.AnnotationAPI;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
|
||||
public class MySQL implements AnnotationAPI {
|
||||
protected String server;
|
||||
protected int port;
|
||||
protected String database;
|
||||
protected String username;
|
||||
protected String password;
|
||||
protected Connection con;
|
||||
|
||||
public MySQL(String server, int port, String database, String username, String password) {
|
||||
this.server = server;
|
||||
this.port = port;
|
||||
this.database = database;
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public MySQL(String server, String database, String username, String password) { this(server, 3306, database, username, password); }
|
||||
|
||||
public void connect() {
|
||||
if (isConnected()) return;
|
||||
try {
|
||||
con = DriverManager.getConnection("jdbc:mysql://" + server + ":" + port + "/" + database, username, password);
|
||||
}catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void disconnect() {
|
||||
if (!isConnected()) return;
|
||||
try {
|
||||
con.close();
|
||||
con = null;
|
||||
}catch (Exception e) { e.printStackTrace(); }
|
||||
}
|
||||
|
||||
public boolean isConnected() { return con != null; }
|
||||
|
||||
public void insert(String qry) {
|
||||
if (!isConnected()) throw new NullPointerException("MySQL not connected");
|
||||
try {
|
||||
con.prepareStatement(qry).executeUpdate();
|
||||
}catch (Exception e) { e.printStackTrace(); }
|
||||
}
|
||||
|
||||
public ResultSet getData(String qry) {
|
||||
if (!isConnected()) throw new NullPointerException("MySQL not connected");
|
||||
try {
|
||||
return con.prepareStatement(qry).executeQuery();
|
||||
}catch (Exception e) { e.printStackTrace(); }
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialise() { connect(); }
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
package de.princep.lobbysystem.apis;
|
||||
|
||||
import de.princep.lobbysystem.annotations.AnnotationAPI;
|
||||
import de.princep.lobbysystem.annotations.GetAPI;
|
||||
import de.princep.lobbysystem.particlesystem.Particle;
|
||||
import de.princep.lobbysystem.particlesystem.ParticleEffect;
|
||||
import de.princep.lobbysystem.particlesystem.WingPattern;
|
||||
import de.princep.lobbysystem.utils.Promissions;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class WingAPI implements AnnotationAPI {
|
||||
public enum Wings {
|
||||
|
||||
NORMAL(0, WingPattern.NORMAL, WingPattern.NORMAL_DISTANCE, ParticleEffect.REDSTONE, ParticleEffect.FLAME, WingPattern.NORMAL_OFFSET),
|
||||
ADVANCED(1, WingPattern.ADVANCED, WingPattern.ADVANCED_DISTANCE, ParticleEffect.REDSTONE, ParticleEffect.FLAME, WingPattern.ADVANCED_OFFSET);
|
||||
|
||||
private final String[] pattern;
|
||||
private final float space;
|
||||
private final ParticleEffect smallPar;
|
||||
private final ParticleEffect largePar;
|
||||
private final float yOffset;
|
||||
private final int id;
|
||||
|
||||
Wings(int id, String[] pattern, float space, ParticleEffect smallPar, ParticleEffect largePar, float yOffset) {
|
||||
this.id = id;
|
||||
this.pattern = pattern;
|
||||
this.space = space;
|
||||
this.smallPar = smallPar;
|
||||
this.largePar = largePar;
|
||||
this.yOffset = yOffset;
|
||||
}
|
||||
|
||||
public String[] getPattern() { return pattern; }
|
||||
public float getSpace() { return space; }
|
||||
public ParticleEffect getSmallPar() { return smallPar; }
|
||||
public ParticleEffect getLargePar() { return largePar; }
|
||||
public float getYOffset() { return yOffset; }
|
||||
public int getId() { return id; }
|
||||
|
||||
public static Wings getById(int id) { return id == 0 ? NORMAL : ADVANCED; }
|
||||
}
|
||||
private enum WingSite {
|
||||
LEFT(0, 0.5f),
|
||||
RIGHT(180, 0.5f);
|
||||
|
||||
private final int rot;
|
||||
private final float xOffset;
|
||||
WingSite(int rot, float xOffset) { this.rot = rot; this.xOffset = xOffset; }
|
||||
public int getRot() { return rot; }
|
||||
public float getXOffset() { return xOffset; }
|
||||
}
|
||||
|
||||
@GetAPI
|
||||
public HiderAPI hider;
|
||||
@GetAPI
|
||||
public MySQL sql;
|
||||
|
||||
@Override
|
||||
public void initialise() {
|
||||
sql.insert("CREATE TABLE IF NOT EXISTS Wings (UUID VARCHAR(50), id INT(1))");
|
||||
}
|
||||
|
||||
private final HashMap<Player, Wings> activatedPlayerWings = new HashMap<>();
|
||||
|
||||
private Location getParticleLoc(Location orig, float x, float y, WingSite side, int animationState) {
|
||||
Location particleLoc = orig.clone();
|
||||
float yaw = particleLoc.getYaw();
|
||||
|
||||
int state = side.getRot() + animationState;
|
||||
|
||||
if (side == WingSite.LEFT)
|
||||
yaw -= state;
|
||||
else
|
||||
yaw += state;
|
||||
|
||||
double yawRad = Math.toRadians(yaw);
|
||||
Vector vector = new Vector(Math.cos(yawRad) * x, y, Math.sin(yawRad) * x);
|
||||
particleLoc.add(vector);
|
||||
particleLoc.setYaw(yaw);
|
||||
return particleLoc;
|
||||
}
|
||||
|
||||
private Particle[][] getParticlePositions(String[] pattern, float space, Location orig, ParticleEffect bigParticle, ParticleEffect smallParticle, WingSite site, float yOffset) {
|
||||
orig.setY(orig.getY() + yOffset);
|
||||
Particle[][] particles = new Particle[pattern.length][pattern[0].length()];
|
||||
|
||||
if (pattern == WingPattern.NORMAL) {
|
||||
for (int x = pattern.length - 1; x >= 0; x--)
|
||||
for (int y = 0; y < pattern[x].length(); y++) {
|
||||
float xp = space * (pattern[x].length() - x);
|
||||
float yp = space * (pattern[x].length() - y);
|
||||
Location parLoc = getParticleLoc(orig, xp + site.getXOffset(), yp, site, 20);
|
||||
char c = pattern[x].toCharArray()[y];
|
||||
if (c == '-') continue;
|
||||
if (c == '+')
|
||||
particles[x][y] = new Particle(parLoc, smallParticle);
|
||||
if (c == 'x')
|
||||
particles[x][y] = new Particle(parLoc, bigParticle);
|
||||
}
|
||||
return particles;
|
||||
}
|
||||
|
||||
for (int x = 0; x < pattern.length; x++)
|
||||
for (int y = 0; y < pattern[x].length(); y++) {
|
||||
float xp = space * (pattern[x].length() - x);
|
||||
float yp = space * (pattern[x].length() - y);
|
||||
Location parLoc = getParticleLoc(orig, xp + site.getXOffset(), yp, site, 20);
|
||||
char c = pattern[x].toCharArray()[y];
|
||||
if (c == '-') continue;
|
||||
if (c == '+')
|
||||
particles[x][y] = new Particle(parLoc, smallParticle);
|
||||
if (c == 'x')
|
||||
particles[x][y] = new Particle(parLoc, bigParticle);
|
||||
}
|
||||
return particles;
|
||||
}
|
||||
private void spawnParticles(Player[] players, Particle[][] particles) {
|
||||
for (Particle[] parX : particles)
|
||||
for (Particle particle : parX) {
|
||||
if (particle == null) continue;
|
||||
particle.effect.display(0, 0, 0, 0, 1, particle.location, players);
|
||||
}
|
||||
}
|
||||
private void showWings(Wings wings, Player p) {
|
||||
ArrayList<Player> players = new ArrayList<>();
|
||||
players.add(p);
|
||||
for (Player all : Bukkit.getOnlinePlayers()) {
|
||||
if (all == p) continue;
|
||||
if (!all.canSee(p)) continue;
|
||||
HiderAPI.State state = hider.getState(all);
|
||||
if (state == HiderAPI.State.SHOW_ALL || (p.hasPermission(Promissions.VIP) && state == HiderAPI.State.ONLY_VIP))
|
||||
players.add(all);
|
||||
}
|
||||
Particle[][] left = getParticlePositions(wings.getPattern(), wings.getSpace(), p.getLocation().clone(), wings.getLargePar(), wings.getSmallPar(), WingSite.LEFT, wings.getYOffset());
|
||||
Particle[][] right = getParticlePositions(wings.getPattern(), wings.getSpace(), p.getLocation().clone(), wings.getLargePar(), wings.getSmallPar(), WingSite.RIGHT, wings.getYOffset());
|
||||
spawnParticles(players.toArray(new Player[0]), left);
|
||||
spawnParticles(players.toArray(new Player[0]), right);
|
||||
}
|
||||
|
||||
public void activateWings(Player p, Wings wings) {
|
||||
deactivateWings(p); activatedPlayerWings.put(p, wings);
|
||||
}
|
||||
public void deactivateWings(Player p) { activatedPlayerWings.remove(p); }
|
||||
public Map<Player, Wings> getActivatedPlayerWings() { return activatedPlayerWings; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package de.princep.lobbysystem.gui;
|
||||
|
||||
import de.princep.lobbysystem.utils.ItemBuilder;
|
||||
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.inventory.Inventory;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class PlayerInvGUI implements Listener {
|
||||
|
||||
public static void addPlayerInv(Player player) {
|
||||
player.getInventory().clear();
|
||||
Inventory inventory = player.getInventory();
|
||||
|
||||
inventory.setItem(0, new ItemBuilder(Material.CHEST).setName("§6Inventar").build());
|
||||
inventory.setItem(1, new ItemBuilder(Material.NETHER_STAR).setName("§eShop").build());
|
||||
inventory.setItem(4, new ItemBuilder(Material.COMPASS).setName("§c§lNavigator").build());
|
||||
|
||||
//inventory.setItem(7, Hider.getState(player).getItem());
|
||||
|
||||
inventory.setItem(8, new ItemBuilder(player).setName("§b§l" + player.getName()).build());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInteract(PlayerInteractEvent event) {
|
||||
if (event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
|
||||
Player player = event.getPlayer();
|
||||
//if (Main.buildMode.contains(player)) return;
|
||||
event.setCancelled(true);
|
||||
|
||||
if (event.getItem() == null) return;
|
||||
switch (event.getItem().getType()) {
|
||||
case CHEST:
|
||||
//InventoryGUI.openInventory(player);
|
||||
break;
|
||||
|
||||
case NETHER_STAR:
|
||||
//ShopGUI
|
||||
break;
|
||||
|
||||
case COMPASS:
|
||||
//NavigationGUI.openNav(player);
|
||||
//TempNavGUI.openTemNav(player);
|
||||
break;
|
||||
|
||||
case SKULL_ITEM:
|
||||
//FRIENDGUI
|
||||
break;
|
||||
}
|
||||
/*if (event.getItem().getType() == Hider.getState(player).getItem().getType()) {
|
||||
if (!Hider.checkCooldown(player)) {
|
||||
//Send message
|
||||
Title.sendActionBar(player, Title.prefix + "§cRUHIG BRUDER! §7wir haben ja Zeit");
|
||||
player.playSound(player.getLocation(), Sound.NOTE_PLING, 1, 1);
|
||||
return;
|
||||
}
|
||||
|
||||
int id = Hider.getState(player).getID() + 1;
|
||||
if (id > Hider.State.values().length - 1) id = 0;
|
||||
Hider.setState(player, Objects.requireNonNull(Hider.State.getByID(id)));
|
||||
player.getInventory().setItem(7, Objects.requireNonNull(Hider.State.getByID(id)).getItem());
|
||||
Objects.requireNonNull(Hider.State.getByID(id)).manageHiding(player);
|
||||
Hider.updateCooldown(player);
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package de.princep.lobbysystem.join;
|
||||
|
||||
import de.princep.lobbysystem.LobbySystem;
|
||||
import de.princep.lobbysystem.annotations.GetAPI;
|
||||
import de.princep.lobbysystem.apis.CoinAPI;
|
||||
import de.princep.lobbysystem.gui.PlayerInvGUI;
|
||||
import de.princep.lobbysystem.utils.Title;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
public class JoinListener implements Listener {
|
||||
@GetAPI
|
||||
public CoinAPI coinAPI;
|
||||
|
||||
@EventHandler
|
||||
public void onJoin(PlayerJoinEvent event) {
|
||||
coinAPI.loadUser(event.getPlayer().getUniqueId());
|
||||
System.out.println(coinAPI.getCoins(event.getPlayer().getUniqueId()));
|
||||
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
//Msg
|
||||
event.setJoinMessage(null);
|
||||
|
||||
//Gamemode
|
||||
player.setGameMode(GameMode.SURVIVAL);
|
||||
|
||||
//XP
|
||||
player.setLevel(2021);
|
||||
|
||||
//Inv
|
||||
PlayerInvGUI.addPlayerInv(player);
|
||||
|
||||
//spawn loc
|
||||
Location l = null;
|
||||
try {
|
||||
l = LobbySystem.locationManager.getLocation();
|
||||
} catch (Exception ignored) { }
|
||||
if (!(l == null)) {
|
||||
player.teleport(LobbySystem.locationManager.getLocation());
|
||||
player.playSound(player.getLocation(), Sound.LEVEL_UP, 1, 2);
|
||||
} else {
|
||||
player.playSound(player.getLocation(), Sound.ANVIL_BREAK, 1, 1);
|
||||
player.sendMessage("§8»");
|
||||
player.sendMessage(Title.prefix + "§7Der Spawn wurde noch nicht gesetzt.");
|
||||
player.sendMessage(Title.prefix + "§7Bitte wende dich an einen Serveradministrator.");
|
||||
player.sendMessage("§8»");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package de.princep.lobbysystem.particlesystem;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class Particle {
|
||||
public Location location;
|
||||
public ParticleEffect effect;
|
||||
|
||||
public Particle(Location loc, ParticleEffect e) { location = loc; effect = e; }
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,602 @@
|
||||
package de.princep.lobbysystem.particlesystem;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
/**
|
||||
* <b>ReflectionUtils</b>
|
||||
* <p>
|
||||
* This class provides useful methods which makes dealing with reflection much easier, especially when working with Bukkit
|
||||
* <p>
|
||||
* You are welcome to use it, modify it and redistribute it under the following conditions:
|
||||
* <ul>
|
||||
* <li>Don't claim this class as your own
|
||||
* <li>Don't remove this disclaimer
|
||||
* </ul>
|
||||
* <p>
|
||||
* <i>It would be nice if you provide credit to me if you use this class in a published project</i>
|
||||
*
|
||||
* @author DarkBlade12
|
||||
* @version 1.1
|
||||
*/
|
||||
public final class ReflectionUtils {
|
||||
// Prevent accidental construction
|
||||
private ReflectionUtils() {}
|
||||
|
||||
/**
|
||||
* Returns the constructor of a given class with the given parameter types
|
||||
*
|
||||
* @param clazz Target class
|
||||
* @param parameterTypes Parameter types of the desired constructor
|
||||
* @return The constructor of the target class with the specified parameter types
|
||||
* @throws NoSuchMethodException If the desired constructor with the specified parameter types cannot be found
|
||||
* @see DataType
|
||||
* @see DataType#getPrimitive(Class[])
|
||||
* @see DataType#compare(Class[], Class[])
|
||||
*/
|
||||
public static Constructor<?> getConstructor(Class<?> clazz, Class<?>... parameterTypes) throws NoSuchMethodException {
|
||||
Class<?>[] primitiveTypes = DataType.getPrimitive(parameterTypes);
|
||||
for (Constructor<?> constructor : clazz.getConstructors()) {
|
||||
if (!DataType.compare(DataType.getPrimitive(constructor.getParameterTypes()), primitiveTypes)) {
|
||||
continue;
|
||||
}
|
||||
return constructor;
|
||||
}
|
||||
throw new NoSuchMethodException("There is no such constructor in this class with the specified parameter types");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the constructor of a desired class with the given parameter types
|
||||
*
|
||||
* @param className Name of the desired target class
|
||||
* @param packageType Package where the desired target class is located
|
||||
* @param parameterTypes Parameter types of the desired constructor
|
||||
* @return The constructor of the desired target class with the specified parameter types
|
||||
* @throws NoSuchMethodException If the desired constructor with the specified parameter types cannot be found
|
||||
* @throws ClassNotFoundException ClassNotFoundException If the desired target class with the specified name and package cannot be found
|
||||
* @see #getConstructor(Class, Class...)
|
||||
*/
|
||||
public static Constructor<?> getConstructor(String className, PackageType packageType, Class<?>... parameterTypes) throws NoSuchMethodException, ClassNotFoundException {
|
||||
return getConstructor(packageType.getClass(className), parameterTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an instance of a class with the given arguments
|
||||
*
|
||||
* @param clazz Target class
|
||||
* @param arguments Arguments which are used to construct an object of the target class
|
||||
* @return The instance of the target class with the specified arguments
|
||||
* @throws InstantiationException If you cannot create an instance of the target class due to certain circumstances
|
||||
* @throws IllegalAccessException If the desired constructor cannot be accessed due to certain circumstances
|
||||
* @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the constructor (this should not occur since it searches for a constructor with the types of the arguments)
|
||||
* @throws InvocationTargetException If the desired constructor cannot be invoked
|
||||
* @throws NoSuchMethodException If the desired constructor with the specified arguments cannot be found
|
||||
*/
|
||||
public static Object instantiateObject(Class<?> clazz, Object... arguments) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
|
||||
return getConstructor(clazz, DataType.getPrimitive(arguments)).newInstance(arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an instance of a desired class with the given arguments
|
||||
*
|
||||
* @param className Name of the desired target class
|
||||
* @param packageType Package where the desired target class is located
|
||||
* @param arguments Arguments which are used to construct an object of the desired target class
|
||||
* @return The instance of the desired target class with the specified arguments
|
||||
* @throws InstantiationException If you cannot create an instance of the desired target class due to certain circumstances
|
||||
* @throws IllegalAccessException If the desired constructor cannot be accessed due to certain circumstances
|
||||
* @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the constructor (this should not occur since it searches for a constructor with the types of the arguments)
|
||||
* @throws InvocationTargetException If the desired constructor cannot be invoked
|
||||
* @throws NoSuchMethodException If the desired constructor with the specified arguments cannot be found
|
||||
* @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found
|
||||
* @see #instantiateObject(Class, Object...)
|
||||
*/
|
||||
public static Object instantiateObject(String className, PackageType packageType, Object... arguments) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException {
|
||||
return instantiateObject(packageType.getClass(className), arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a method of a class with the given parameter types
|
||||
*
|
||||
* @param clazz Target class
|
||||
* @param methodName Name of the desired method
|
||||
* @param parameterTypes Parameter types of the desired method
|
||||
* @return The method of the target class with the specified name and parameter types
|
||||
* @throws NoSuchMethodException If the desired method of the target class with the specified name and parameter types cannot be found
|
||||
* @see DataType#getPrimitive(Class[])
|
||||
* @see DataType#compare(Class[], Class[])
|
||||
*/
|
||||
public static Method getMethod(Class<?> clazz, String methodName, Class<?>... parameterTypes) throws NoSuchMethodException {
|
||||
Class<?>[] primitiveTypes = DataType.getPrimitive(parameterTypes);
|
||||
for (Method method : clazz.getMethods()) {
|
||||
if (!method.getName().equals(methodName) || !DataType.compare(DataType.getPrimitive(method.getParameterTypes()), primitiveTypes)) {
|
||||
continue;
|
||||
}
|
||||
return method;
|
||||
}
|
||||
throw new NoSuchMethodException("There is no such method in this class with the specified name and parameter types");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a method of a desired class with the given parameter types
|
||||
*
|
||||
* @param className Name of the desired target class
|
||||
* @param packageType Package where the desired target class is located
|
||||
* @param methodName Name of the desired method
|
||||
* @param parameterTypes Parameter types of the desired method
|
||||
* @return The method of the desired target class with the specified name and parameter types
|
||||
* @throws NoSuchMethodException If the desired method of the desired target class with the specified name and parameter types cannot be found
|
||||
* @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found
|
||||
* @see #getMethod(Class, String, Class...)
|
||||
*/
|
||||
public static Method getMethod(String className, PackageType packageType, String methodName, Class<?>... parameterTypes) throws NoSuchMethodException, ClassNotFoundException {
|
||||
return getMethod(packageType.getClass(className), methodName, parameterTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes a method on an object with the given arguments
|
||||
*
|
||||
* @param instance Target object
|
||||
* @param methodName Name of the desired method
|
||||
* @param arguments Arguments which are used to invoke the desired method
|
||||
* @return The result of invoking the desired method on the target object
|
||||
* @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances
|
||||
* @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments)
|
||||
* @throws InvocationTargetException If the desired method cannot be invoked on the target object
|
||||
* @throws NoSuchMethodException If the desired method of the class of the target object with the specified name and arguments cannot be found
|
||||
* @see #getMethod(Class, String, Class...)
|
||||
* @see DataType#getPrimitive(Object[])
|
||||
*/
|
||||
public static Object invokeMethod(Object instance, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
|
||||
return getMethod(instance.getClass(), methodName, DataType.getPrimitive(arguments)).invoke(instance, arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes a method of the target class on an object with the given arguments
|
||||
*
|
||||
* @param instance Target object
|
||||
* @param clazz Target class
|
||||
* @param methodName Name of the desired method
|
||||
* @param arguments Arguments which are used to invoke the desired method
|
||||
* @return The result of invoking the desired method on the target object
|
||||
* @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances
|
||||
* @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments)
|
||||
* @throws InvocationTargetException If the desired method cannot be invoked on the target object
|
||||
* @throws NoSuchMethodException If the desired method of the target class with the specified name and arguments cannot be found
|
||||
* @see #getMethod(Class, String, Class...)
|
||||
* @see DataType#getPrimitive(Object[])
|
||||
*/
|
||||
public static Object invokeMethod(Object instance, Class<?> clazz, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
|
||||
return getMethod(clazz, methodName, DataType.getPrimitive(arguments)).invoke(instance, arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes a method of a desired class on an object with the given arguments
|
||||
*
|
||||
* @param instance Target object
|
||||
* @param className Name of the desired target class
|
||||
* @param packageType Package where the desired target class is located
|
||||
* @param methodName Name of the desired method
|
||||
* @param arguments Arguments which are used to invoke the desired method
|
||||
* @return The result of invoking the desired method on the target object
|
||||
* @throws IllegalAccessException If the desired method cannot be accessed due to certain circumstances
|
||||
* @throws IllegalArgumentException If the types of the arguments do not match the parameter types of the method (this should not occur since it searches for a method with the types of the arguments)
|
||||
* @throws InvocationTargetException If the desired method cannot be invoked on the target object
|
||||
* @throws NoSuchMethodException If the desired method of the desired target class with the specified name and arguments cannot be found
|
||||
* @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found
|
||||
* @see #invokeMethod(Object, Class, String, Object...)
|
||||
*/
|
||||
public static Object invokeMethod(Object instance, String className, PackageType packageType, String methodName, Object... arguments) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException {
|
||||
return invokeMethod(instance, packageType.getClass(className), methodName, arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a field of the target class with the given name
|
||||
*
|
||||
* @param clazz Target class
|
||||
* @param declared Whether the desired field is declared or not
|
||||
* @param fieldName Name of the desired field
|
||||
* @return The field of the target class with the specified name
|
||||
* @throws NoSuchFieldException If the desired field of the given class cannot be found
|
||||
* @throws SecurityException If the desired field cannot be made accessible
|
||||
*/
|
||||
public static Field getField(Class<?> clazz, boolean declared, String fieldName) throws NoSuchFieldException, SecurityException {
|
||||
Field field = declared ? clazz.getDeclaredField(fieldName) : clazz.getField(fieldName);
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a field of a desired class with the given name
|
||||
*
|
||||
* @param className Name of the desired target class
|
||||
* @param packageType Package where the desired target class is located
|
||||
* @param declared Whether the desired field is declared or not
|
||||
* @param fieldName Name of the desired field
|
||||
* @return The field of the desired target class with the specified name
|
||||
* @throws NoSuchFieldException If the desired field of the desired class cannot be found
|
||||
* @throws SecurityException If the desired field cannot be made accessible
|
||||
* @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found
|
||||
* @see #getField(Class, boolean, String)
|
||||
*/
|
||||
public static Field getField(String className, PackageType packageType, boolean declared, String fieldName) throws NoSuchFieldException, SecurityException, ClassNotFoundException {
|
||||
return getField(packageType.getClass(className), declared, fieldName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a field of the given class of an object
|
||||
*
|
||||
* @param instance Target object
|
||||
* @param clazz Target class
|
||||
* @param declared Whether the desired field is declared or not
|
||||
* @param fieldName Name of the desired field
|
||||
* @return The value of field of the target object
|
||||
* @throws IllegalArgumentException If the target object does not feature the desired field
|
||||
* @throws IllegalAccessException If the desired field cannot be accessed
|
||||
* @throws NoSuchFieldException If the desired field of the target class cannot be found
|
||||
* @throws SecurityException If the desired field cannot be made accessible
|
||||
* @see #getField(Class, boolean, String)
|
||||
*/
|
||||
public static Object getValue(Object instance, Class<?> clazz, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
|
||||
return getField(clazz, declared, fieldName).get(instance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a field of a desired class of an object
|
||||
*
|
||||
* @param instance Target object
|
||||
* @param className Name of the desired target class
|
||||
* @param packageType Package where the desired target class is located
|
||||
* @param declared Whether the desired field is declared or not
|
||||
* @param fieldName Name of the desired field
|
||||
* @return The value of field of the target object
|
||||
* @throws IllegalArgumentException If the target object does not feature the desired field
|
||||
* @throws IllegalAccessException If the desired field cannot be accessed
|
||||
* @throws NoSuchFieldException If the desired field of the desired class cannot be found
|
||||
* @throws SecurityException If the desired field cannot be made accessible
|
||||
* @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found
|
||||
* @see #getValue(Object, Class, boolean, String)
|
||||
*/
|
||||
public static Object getValue(Object instance, String className, PackageType packageType, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException {
|
||||
return getValue(instance, packageType.getClass(className), declared, fieldName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a field with the given name of an object
|
||||
*
|
||||
* @param instance Target object
|
||||
* @param declared Whether the desired field is declared or not
|
||||
* @param fieldName Name of the desired field
|
||||
* @return The value of field of the target object
|
||||
* @throws IllegalArgumentException If the target object does not feature the desired field (should not occur since it searches for a field with the given name in the class of the object)
|
||||
* @throws IllegalAccessException If the desired field cannot be accessed
|
||||
* @throws NoSuchFieldException If the desired field of the target object cannot be found
|
||||
* @throws SecurityException If the desired field cannot be made accessible
|
||||
* @see #getValue(Object, Class, boolean, String)
|
||||
*/
|
||||
public static Object getValue(Object instance, boolean declared, String fieldName) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
|
||||
return getValue(instance, instance.getClass(), declared, fieldName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of a field of the given class of an object
|
||||
*
|
||||
* @param instance Target object
|
||||
* @param clazz Target class
|
||||
* @param declared Whether the desired field is declared or not
|
||||
* @param fieldName Name of the desired field
|
||||
* @param value New value
|
||||
* @throws IllegalArgumentException If the type of the value does not match the type of the desired field
|
||||
* @throws IllegalAccessException If the desired field cannot be accessed
|
||||
* @throws NoSuchFieldException If the desired field of the target class cannot be found
|
||||
* @throws SecurityException If the desired field cannot be made accessible
|
||||
* @see #getField(Class, boolean, String)
|
||||
*/
|
||||
public static void setValue(Object instance, Class<?> clazz, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
|
||||
getField(clazz, declared, fieldName).set(instance, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of a field of a desired class of an object
|
||||
*
|
||||
* @param instance Target object
|
||||
* @param className Name of the desired target class
|
||||
* @param packageType Package where the desired target class is located
|
||||
* @param declared Whether the desired field is declared or not
|
||||
* @param fieldName Name of the desired field
|
||||
* @param value New value
|
||||
* @throws IllegalArgumentException If the type of the value does not match the type of the desired field
|
||||
* @throws IllegalAccessException If the desired field cannot be accessed
|
||||
* @throws NoSuchFieldException If the desired field of the desired class cannot be found
|
||||
* @throws SecurityException If the desired field cannot be made accessible
|
||||
* @throws ClassNotFoundException If the desired target class with the specified name and package cannot be found
|
||||
* @see #setValue(Object, Class, boolean, String, Object)
|
||||
*/
|
||||
public static void setValue(Object instance, String className, PackageType packageType, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, ClassNotFoundException {
|
||||
setValue(instance, packageType.getClass(className), declared, fieldName, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of a field with the given name of an object
|
||||
*
|
||||
* @param instance Target object
|
||||
* @param declared Whether the desired field is declared or not
|
||||
* @param fieldName Name of the desired field
|
||||
* @param value New value
|
||||
* @throws IllegalArgumentException If the type of the value does not match the type of the desired field
|
||||
* @throws IllegalAccessException If the desired field cannot be accessed
|
||||
* @throws NoSuchFieldException If the desired field of the target object cannot be found
|
||||
* @throws SecurityException If the desired field cannot be made accessible
|
||||
* @see #setValue(Object, Class, boolean, String, Object)
|
||||
*/
|
||||
public static void setValue(Object instance, boolean declared, String fieldName, Object value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
|
||||
setValue(instance, instance.getClass(), declared, fieldName, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents an enumeration of dynamic packages of NMS and CraftBukkit
|
||||
* <p>
|
||||
* This class is part of the <b>ReflectionUtils</b> and follows the same usage conditions
|
||||
*
|
||||
* @author DarkBlade12
|
||||
* @since 1.0
|
||||
*/
|
||||
public enum PackageType {
|
||||
MINECRAFT_SERVER("net.minecraft.server." + getServerVersion()),
|
||||
CRAFTBUKKIT("org.bukkit.craftbukkit." + getServerVersion()),
|
||||
CRAFTBUKKIT_BLOCK(CRAFTBUKKIT, "block"),
|
||||
CRAFTBUKKIT_CHUNKIO(CRAFTBUKKIT, "chunkio"),
|
||||
CRAFTBUKKIT_COMMAND(CRAFTBUKKIT, "command"),
|
||||
CRAFTBUKKIT_CONVERSATIONS(CRAFTBUKKIT, "conversations"),
|
||||
CRAFTBUKKIT_ENCHANTMENS(CRAFTBUKKIT, "enchantments"),
|
||||
CRAFTBUKKIT_ENTITY(CRAFTBUKKIT, "entity"),
|
||||
CRAFTBUKKIT_EVENT(CRAFTBUKKIT, "event"),
|
||||
CRAFTBUKKIT_GENERATOR(CRAFTBUKKIT, "generator"),
|
||||
CRAFTBUKKIT_HELP(CRAFTBUKKIT, "help"),
|
||||
CRAFTBUKKIT_INVENTORY(CRAFTBUKKIT, "inventory"),
|
||||
CRAFTBUKKIT_MAP(CRAFTBUKKIT, "map"),
|
||||
CRAFTBUKKIT_METADATA(CRAFTBUKKIT, "metadata"),
|
||||
CRAFTBUKKIT_POTION(CRAFTBUKKIT, "potion"),
|
||||
CRAFTBUKKIT_PROJECTILES(CRAFTBUKKIT, "projectiles"),
|
||||
CRAFTBUKKIT_SCHEDULER(CRAFTBUKKIT, "scheduler"),
|
||||
CRAFTBUKKIT_SCOREBOARD(CRAFTBUKKIT, "scoreboard"),
|
||||
CRAFTBUKKIT_UPDATER(CRAFTBUKKIT, "updater"),
|
||||
CRAFTBUKKIT_UTIL(CRAFTBUKKIT, "util");
|
||||
|
||||
private final String path;
|
||||
|
||||
/**
|
||||
* Construct a new package type
|
||||
*
|
||||
* @param path Path of the package
|
||||
*/
|
||||
private PackageType(String path) {
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new package type
|
||||
*
|
||||
* @param parent Parent package of the package
|
||||
* @param path Path of the package
|
||||
*/
|
||||
private PackageType(PackageType parent, String path) {
|
||||
this(parent + "." + path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the path of this package type
|
||||
*
|
||||
* @return The path
|
||||
*/
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the class with the given name
|
||||
*
|
||||
* @param className Name of the desired class
|
||||
* @return The class with the specified name
|
||||
* @throws ClassNotFoundException If the desired class with the specified name and package cannot be found
|
||||
*/
|
||||
public Class<?> getClass(String className) throws ClassNotFoundException {
|
||||
return Class.forName(this + "." + className);
|
||||
}
|
||||
|
||||
// Override for convenience
|
||||
@Override
|
||||
public String toString() {
|
||||
return path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the version of your server
|
||||
*
|
||||
* @return The server version
|
||||
*/
|
||||
public static String getServerVersion() {
|
||||
return Bukkit.getServer().getClass().getPackage().getName().substring(23);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents an enumeration of Java data types with corresponding classes
|
||||
* <p>
|
||||
* This class is part of the <b>ReflectionUtils</b> and follows the same usage conditions
|
||||
*
|
||||
* @author DarkBlade12
|
||||
* @since 1.0
|
||||
*/
|
||||
public enum DataType {
|
||||
BYTE(byte.class, Byte.class),
|
||||
SHORT(short.class, Short.class),
|
||||
INTEGER(int.class, Integer.class),
|
||||
LONG(long.class, Long.class),
|
||||
CHARACTER(char.class, Character.class),
|
||||
FLOAT(float.class, Float.class),
|
||||
DOUBLE(double.class, Double.class),
|
||||
BOOLEAN(boolean.class, Boolean.class);
|
||||
|
||||
private static final Map<Class<?>, DataType> CLASS_MAP = new HashMap<Class<?>, DataType>();
|
||||
private final Class<?> primitive;
|
||||
private final Class<?> reference;
|
||||
|
||||
// Initialize map for quick class lookup
|
||||
static {
|
||||
for (DataType type : values()) {
|
||||
CLASS_MAP.put(type.primitive, type);
|
||||
CLASS_MAP.put(type.reference, type);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new data type
|
||||
*
|
||||
* @param primitive Primitive class of this data type
|
||||
* @param reference Reference class of this data type
|
||||
*/
|
||||
private DataType(Class<?> primitive, Class<?> reference) {
|
||||
this.primitive = primitive;
|
||||
this.reference = reference;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the primitive class of this data type
|
||||
*
|
||||
* @return The primitive class
|
||||
*/
|
||||
public Class<?> getPrimitive() {
|
||||
return primitive;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the reference class of this data type
|
||||
*
|
||||
* @return The reference class
|
||||
*/
|
||||
public Class<?> getReference() {
|
||||
return reference;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data type with the given primitive/reference class
|
||||
*
|
||||
* @param clazz Primitive/Reference class of the data type
|
||||
* @return The data type
|
||||
*/
|
||||
public static DataType fromClass(Class<?> clazz) {
|
||||
return CLASS_MAP.get(clazz);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the primitive class of the data type with the given reference class
|
||||
*
|
||||
* @param clazz Reference class of the data type
|
||||
* @return The primitive class
|
||||
*/
|
||||
public static Class<?> getPrimitive(Class<?> clazz) {
|
||||
DataType type = fromClass(clazz);
|
||||
return type == null ? clazz : type.getPrimitive();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the reference class of the data type with the given primitive class
|
||||
*
|
||||
* @param clazz Primitive class of the data type
|
||||
* @return The reference class
|
||||
*/
|
||||
public static Class<?> getReference(Class<?> clazz) {
|
||||
DataType type = fromClass(clazz);
|
||||
return type == null ? clazz : type.getReference();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the primitive class array of the given class array
|
||||
*
|
||||
* @param classes Given class array
|
||||
* @return The primitive class array
|
||||
*/
|
||||
public static Class<?>[] getPrimitive(Class<?>[] classes) {
|
||||
int length = classes == null ? 0 : classes.length;
|
||||
Class<?>[] types = new Class<?>[length];
|
||||
for (int index = 0; index < length; index++) {
|
||||
types[index] = getPrimitive(classes[index]);
|
||||
}
|
||||
return types;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the reference class array of the given class array
|
||||
*
|
||||
* @param classes Given class array
|
||||
* @return The reference class array
|
||||
*/
|
||||
public static Class<?>[] getReference(Class<?>[] classes) {
|
||||
int length = classes == null ? 0 : classes.length;
|
||||
Class<?>[] types = new Class<?>[length];
|
||||
for (int index = 0; index < length; index++) {
|
||||
types[index] = getReference(classes[index]);
|
||||
}
|
||||
return types;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the primitive class array of the given object array
|
||||
*
|
||||
* @param objects Given object array
|
||||
* @return The primitive class array
|
||||
*/
|
||||
public static Class<?>[] getPrimitive(Object[] objects) {
|
||||
int length = objects == null ? 0 : objects.length;
|
||||
Class<?>[] types = new Class<?>[length];
|
||||
for (int index = 0; index < length; index++) {
|
||||
types[index] = getPrimitive(objects[index].getClass());
|
||||
}
|
||||
return types;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the reference class array of the given object array
|
||||
*
|
||||
* @param objects Given object array
|
||||
* @return The reference class array
|
||||
*/
|
||||
public static Class<?>[] getReference(Object[] objects) {
|
||||
int length = objects == null ? 0 : objects.length;
|
||||
Class<?>[] types = new Class<?>[length];
|
||||
for (int index = 0; index < length; index++) {
|
||||
types[index] = getReference(objects[index].getClass());
|
||||
}
|
||||
return types;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares two class arrays on equivalence
|
||||
*
|
||||
* @param primary Primary class array
|
||||
* @param secondary Class array which is compared to the primary array
|
||||
* @return Whether these arrays are equal or not
|
||||
*/
|
||||
public static boolean compare(Class<?>[] primary, Class<?>[] secondary) {
|
||||
if (primary == null || secondary == null || primary.length != secondary.length) {
|
||||
return false;
|
||||
}
|
||||
for (int index = 0; index < primary.length; index++) {
|
||||
Class<?> primaryClass = primary[index];
|
||||
Class<?> secondaryClass = secondary[index];
|
||||
if (primaryClass.equals(secondaryClass) || primaryClass.isAssignableFrom(secondaryClass)) {
|
||||
continue;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package de.princep.lobbysystem.particlesystem;
|
||||
|
||||
public final class WingPattern {
|
||||
private WingPattern() {}
|
||||
|
||||
public static final String[] NORMAL = new String[] {
|
||||
"----xxx---",
|
||||
"---xxxxx--",
|
||||
"--xxxxxxx-",
|
||||
"-xxxxxxxx-",
|
||||
"xxxxxxxxxx",
|
||||
"xxxxxxxxxx",
|
||||
"xxxxxxxxxx",
|
||||
"xxxxxxxxxx",
|
||||
"--xxxxxxxx",
|
||||
"---xxxxxxx",
|
||||
"---xxxxxxx",
|
||||
"----xxxxxx",
|
||||
"----xxxxxx",
|
||||
"-----xxxx-",
|
||||
"-----xxxx-",
|
||||
"------xxx-",
|
||||
"------xxx-",
|
||||
"-------xx-",
|
||||
"--------x-"
|
||||
};
|
||||
|
||||
public static final String[] ADVANCED = new String[] {
|
||||
"-------------------x+",
|
||||
"------------------x+-",
|
||||
"-----------------x+--",
|
||||
"---------------xxx---",
|
||||
"--------------xxx+---",
|
||||
"-------------xxx+----",
|
||||
"-----------xxxx+-----",
|
||||
"----------xxx+----x+-",
|
||||
"---------xxx+---xx+--",
|
||||
"-------xxx+----xx+---",
|
||||
"------xx+----xx+-----",
|
||||
"----xxx+---xxx+------",
|
||||
"---xx+---xxx+--------",
|
||||
"--xxx--xxx+-----x+---",
|
||||
"---xxxxx+----xxx+----",
|
||||
"----xxx+--xxxx+------",
|
||||
"----xxx--xxx+--------",
|
||||
"-----xxxxx+----x+----",
|
||||
"-----xxx+---xxx+-----",
|
||||
"----xxx+---xx+-------",
|
||||
"----xxx--xx+---------",
|
||||
"---xxxxxxx+----------",
|
||||
"xxxxxxxx-------------",
|
||||
"-xx---xx-------------",
|
||||
"--xx---xx------------",
|
||||
"---xx---xx-----------",
|
||||
"----xx---------------"
|
||||
};
|
||||
|
||||
public static final float NORMAL_DISTANCE = 0.1f;
|
||||
public static final float ADVANCED_DISTANCE = 0.125f;
|
||||
|
||||
public static final float NORMAL_OFFSET = 0.5f;
|
||||
public static final float ADVANCED_OFFSET = -1;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
package de.princep.lobbysystem.utils;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class ItemBuilder {
|
||||
|
||||
public Material material;
|
||||
public String name;
|
||||
public int amount = 1;
|
||||
public short damage = 0;
|
||||
public HashMap<Enchantment, Integer> enchantments = new HashMap<>();
|
||||
public ArrayList<String> lore = new ArrayList<>();
|
||||
public boolean showEnchantments = true;
|
||||
public boolean isSkull = false;
|
||||
public OfflinePlayer player;
|
||||
|
||||
public ItemBuilder(Material mat){
|
||||
material = mat;
|
||||
}
|
||||
|
||||
public ItemBuilder(Material mat, int amount){
|
||||
material = mat;
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public ItemBuilder(Material mat, int amount, int damage){
|
||||
material = mat;
|
||||
this.amount = amount;
|
||||
this.damage = (short) damage;
|
||||
}
|
||||
|
||||
public ItemBuilder(OfflinePlayer player) {
|
||||
this.player = player;
|
||||
isSkull = true;
|
||||
}
|
||||
|
||||
public ItemBuilder(OfflinePlayer player, int amount) {
|
||||
this.player = player;
|
||||
this.amount = amount;
|
||||
isSkull = true;
|
||||
}
|
||||
|
||||
public ItemBuilder setName(String name){
|
||||
this.name = name;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder addEnchantment(Enchantment e, int level){
|
||||
enchantments.put(e, level);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder showEnchantments(boolean value) {
|
||||
showEnchantments = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder setLore(String... lore){
|
||||
this.lore.addAll(Arrays.asList(lore));
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder setGlowing(boolean value) {
|
||||
if (value) {
|
||||
enchantments.put(Enchantment.DURABILITY, 1);
|
||||
showEnchantments = false;
|
||||
}else {
|
||||
enchantments.clear();
|
||||
showEnchantments = true;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder setAmount(int amount) { this.amount = amount; return this; }
|
||||
|
||||
public ItemStack build(){
|
||||
ItemStack item;
|
||||
if (!isSkull) {
|
||||
item = new ItemStack(material, amount, damage);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
for (Enchantment e : enchantments.keySet()){
|
||||
meta.addEnchant(e, enchantments.get(e), true);
|
||||
}
|
||||
meta.setLore(lore);
|
||||
meta.setDisplayName(name);
|
||||
if (!showEnchantments) meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
item.setItemMeta(meta);
|
||||
}else {
|
||||
item = new ItemStack(Material.SKULL_ITEM, amount, (short) 3);
|
||||
SkullMeta meta = (SkullMeta) item.getItemMeta();
|
||||
meta.setOwner(player.getName());
|
||||
for (Enchantment e : enchantments.keySet()){
|
||||
meta.addEnchant(e, enchantments.get(e), true);
|
||||
}
|
||||
meta.setLore(lore);
|
||||
meta.setDisplayName(name);
|
||||
if (!showEnchantments) meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
item.setItemMeta(meta);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package de.princep.lobbysystem.utils;
|
||||
|
||||
import de.princep.lobbysystem.LobbySystem;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class LocationManager {
|
||||
|
||||
public void save() {
|
||||
try {
|
||||
LobbySystem.cfg.save(LobbySystem.file);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void setLocation(Location location) {
|
||||
LobbySystem.cfg.set("Location.Spawn.world", location.getWorld().getName());
|
||||
LobbySystem.cfg.set("Location.Spawn.x", location.getX());
|
||||
LobbySystem.cfg.set("Location.Spawn.y", location.getY());
|
||||
LobbySystem.cfg.set("Location.Spawn.z", location.getZ());
|
||||
LobbySystem.cfg.set("Location.Spawn.yaw", location.getYaw());
|
||||
LobbySystem.cfg.set("Location.Spawn.pitch", location.getPitch());
|
||||
save();
|
||||
}
|
||||
|
||||
public void setDeathBoarder(Player player) {
|
||||
LobbySystem.cfg.set("Location.Death.border", player.getLocation().getY());
|
||||
save();
|
||||
}
|
||||
|
||||
public Double getDeathBoarder() {
|
||||
return LobbySystem.cfg.getDouble("Location.Death.border");
|
||||
}
|
||||
|
||||
public Location getLocation() {
|
||||
Location location;
|
||||
World w = Bukkit.getWorld(LobbySystem.cfg.getString("Location.Spawn.world"));
|
||||
double x = LobbySystem.cfg.getDouble("Location.Spawn.x");
|
||||
double y = LobbySystem.cfg.getDouble("Location.Spawn.y");
|
||||
double z = LobbySystem.cfg.getDouble("Location.Spawn.z");
|
||||
location = new Location(w, x, y, z);
|
||||
location.setYaw(LobbySystem.cfg.getInt("Location.Spawn.yaw"));
|
||||
location.setPitch(LobbySystem.cfg.getInt("Location.Spawn.pitch"));
|
||||
return location;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void setWarp(String name, Location location) {
|
||||
LobbySystem.cfg.set("Warp." + name + ".world", location.getWorld().getName());
|
||||
LobbySystem.cfg.set("Warp." + name + ".x", location.getX());
|
||||
LobbySystem.cfg.set("Warp." + name + ".y", location.getY());
|
||||
LobbySystem.cfg.set("Warp." + name + ".z", location.getZ());
|
||||
LobbySystem.cfg.set("Warp." + name + ".yaw", location.getYaw());
|
||||
LobbySystem.cfg.set("Warp." + name + ".pitch", location.getPitch());
|
||||
save();
|
||||
}
|
||||
|
||||
public void delWarp(String name) {
|
||||
LobbySystem.cfg.set("Warp." + name + ".world", null);
|
||||
LobbySystem.cfg.set("Warp." + name + ".x", null);
|
||||
LobbySystem.cfg.set("Warp." + name + ".y", null);
|
||||
LobbySystem.cfg.set("Warp." + name + ".z", null);
|
||||
LobbySystem.cfg.set("Warp." + name + ".yaw", null);
|
||||
LobbySystem.cfg.set("Warp." + name + ".pitch", null);
|
||||
save();
|
||||
}
|
||||
|
||||
public Location getWarp(String name) {
|
||||
Location location;
|
||||
World w = Bukkit.getWorld(LobbySystem.cfg.getString("Warp." + name + ".world"));
|
||||
double x = LobbySystem.cfg.getDouble("Warp." + name + ".x");
|
||||
double y = LobbySystem.cfg.getDouble("Warp." + name + ".y");
|
||||
double z = LobbySystem.cfg.getDouble("Warp." + name + ".z");
|
||||
location = new Location(w, x, y, z);
|
||||
location.setYaw(LobbySystem.cfg.getInt("Warp." + name + ".yaw"));
|
||||
location.setPitch(LobbySystem.cfg.getInt("Warp." + name + ".pitch"));
|
||||
return location;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package de.princep.lobbysystem.utils;
|
||||
|
||||
public final class Promissions {
|
||||
|
||||
public static final String VIP = "princep.vip";
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package de.princep.lobbysystem.utils;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import net.minecraft.server.v1_8_R3.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||
|
||||
|
||||
public class Title {
|
||||
|
||||
public static String prefix = "§c§lPrincepDE §r§8» §r";
|
||||
|
||||
public static String noPerm = prefix + "§7Diesen Befehl gibt es nicht.";
|
||||
|
||||
|
||||
public static void sendActionBar(Player p, String msg) {
|
||||
IChatBaseComponent base = IChatBaseComponent.ChatSerializer.a("{\"text\": \"\"}").a(msg);
|
||||
PacketPlayOutChat chat = new PacketPlayOutChat(base, (byte) 2);
|
||||
|
||||
CraftPlayer cp = (CraftPlayer)p;
|
||||
cp.getHandle().playerConnection.sendPacket(chat);
|
||||
}
|
||||
|
||||
public static void locTP(Player player, Location location) {
|
||||
Location l = null;
|
||||
try {
|
||||
l = location;
|
||||
} catch (Exception ignored) { }
|
||||
if (!(l == null)) {
|
||||
player.teleport(location);
|
||||
} else {
|
||||
player.playSound(player.getLocation(), Sound.ANVIL_BREAK, 1, 1);
|
||||
player.sendMessage("§8»");
|
||||
player.sendMessage(Title.prefix + "§7Der Punkt wurde noch nicht gesetzt.");
|
||||
player.sendMessage(Title.prefix + "§7Bitte wende dich an einen Serveradministrator.");
|
||||
player.sendMessage("§8»");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
16
Plugins/PrincepDE/LobbySystem/src/main/resources/config.yml
Normal file
16
Plugins/PrincepDE/LobbySystem/src/main/resources/config.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
# ----------------------------------------------------------
|
||||
# Config.yml
|
||||
# ----------------------------------------------------------
|
||||
# made by marc
|
||||
#
|
||||
# warps: citybuild, freebuild
|
||||
|
||||
Location:
|
||||
Spawn:
|
||||
world:
|
||||
x:
|
||||
y:
|
||||
z:
|
||||
yaw:
|
||||
pitch:
|
||||
Deathborder:
|
||||
@@ -0,0 +1,4 @@
|
||||
name: LobbyPlugin
|
||||
author: PrincepDE
|
||||
version: 1.0
|
||||
main: de.princep.lobbysystem.LobbySystem
|
||||
Reference in New Issue
Block a user