Compare commits
	
		
			2 Commits
		
	
	
		
			ad7ed2b2ab
			...
			42c25d7095
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						42c25d7095
	
				 | 
					
					
						|||
| 
						
						
							
						
						762ab5f926
	
				 | 
					
					
						
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -10,3 +10,4 @@ bin/
 | 
			
		||||
.idea/
 | 
			
		||||
.settings/
 | 
			
		||||
.project
 | 
			
		||||
.classpath
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,124 @@
 | 
			
		||||
package ovh.herisson.thevoidroad.Commands;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.WorldBorder;
 | 
			
		||||
import org.bukkit.command.Command;
 | 
			
		||||
import org.bukkit.command.CommandExecutor;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.bukkit.command.TabCompleter;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import ovh.herisson.thevoidroad.TheVoidRoad;
 | 
			
		||||
import ovh.herisson.thevoidroad.Voids;
 | 
			
		||||
 | 
			
		||||
public class VoidCommands implements CommandExecutor, TabCompleter{
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
 | 
			
		||||
		for (int i = 0; i < args.length; i++) {
 | 
			
		||||
			args[i] = args[i].toLowerCase();
 | 
			
		||||
		}
 | 
			
		||||
		if(args.length < 1){
 | 
			
		||||
			if(sender instanceof Player ply){
 | 
			
		||||
				sender.sendMessage("You got: "+Voids.get(ply) + TheVoidRoad.CoinGlyph);
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		switch (args[0]) {
 | 
			
		||||
			case "score":
 | 
			
		||||
				Voids.scoreboard().forEach((p, a) -> {
 | 
			
		||||
					sender.sendMessage(p + " : " + a);
 | 
			
		||||
				});
 | 
			
		||||
				return true;
 | 
			
		||||
			case "give": 
 | 
			
		||||
				//TODO(Balance): Give to a player
 | 
			
		||||
				return true;
 | 
			
		||||
			case "event": 
 | 
			
		||||
				//TODO(event) manage event 
 | 
			
		||||
				return true;
 | 
			
		||||
			case "manage": 
 | 
			
		||||
				if(!sender.hasPermission("void.manage") || args.length < 2) return false;
 | 
			
		||||
				switch (args[1]) {
 | 
			
		||||
					case "setspawn": 
 | 
			
		||||
						return setspawn(sender);
 | 
			
		||||
					case "init":
 | 
			
		||||
						return init();
 | 
			
		||||
					case "reset":
 | 
			
		||||
						return reset();
 | 
			
		||||
					case "skip":
 | 
			
		||||
						//TODO(Merchand): Skip trade
 | 
			
		||||
					case "balance":
 | 
			
		||||
						if(args.length < 5) return false;
 | 
			
		||||
						switch (args[2]) {
 | 
			
		||||
							case "set": 
 | 
			
		||||
								Player target = Bukkit.getPlayer(args[3]);
 | 
			
		||||
								Voids.set(target, Integer.parseInt(args[4]));
 | 
			
		||||
								return true;
 | 
			
		||||
							case "add":
 | 
			
		||||
							case "sub": 
 | 
			
		||||
								sender.sendMessage("TODO"); //TODO
 | 
			
		||||
						}
 | 
			
		||||
						return false;
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	private boolean setspawn(CommandSender sender){
 | 
			
		||||
		if(sender instanceof Player ply){
 | 
			
		||||
			Location loc = ply.getLocation();
 | 
			
		||||
			WorldBorder border = ply.getWorld().getWorldBorder();
 | 
			
		||||
			
 | 
			
		||||
			ply.getWorld().setSpawnLocation(loc);
 | 
			
		||||
			border.setCenter(loc);
 | 
			
		||||
			border.setSize(750);
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private boolean init(){
 | 
			
		||||
		//TODO(merchand): init the game
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private boolean reset(){
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
 | 
			
		||||
		ArrayList<String> list = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
		if(args.length == 1){
 | 
			
		||||
			list.addAll(List.of("give","event", "score"));
 | 
			
		||||
			if(sender.hasPermission("void.manage")){
 | 
			
		||||
				list.add("manage");
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if(args.length >= 2){
 | 
			
		||||
			switch (args[0]) {
 | 
			
		||||
				case "give": 
 | 
			
		||||
					return null;
 | 
			
		||||
				case "event":
 | 
			
		||||
					return list;
 | 
			
		||||
				case "manage":
 | 
			
		||||
					if(sender.hasPermission("void.manage")){
 | 
			
		||||
						if(args[1] == "balance"){
 | 
			
		||||
							list.addAll(List.of("set", "add", "sub"));
 | 
			
		||||
							return list;
 | 
			
		||||
						}
 | 
			
		||||
						list.addAll(List.of("setspawn", "init", "skip", "reset", "balance")); //TODO: should add balance management
 | 
			
		||||
					}
 | 
			
		||||
					return list;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return list;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,130 @@
 | 
			
		||||
package ovh.herisson.thevoidroad;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.sql.Connection;
 | 
			
		||||
import java.sql.DriverManager;
 | 
			
		||||
import java.sql.PreparedStatement;
 | 
			
		||||
import java.sql.ResultSet;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
import java.sql.Statement;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
public class DatabaseManager {
 | 
			
		||||
 | 
			
		||||
	private static DatabaseManager instance;
 | 
			
		||||
 | 
			
		||||
	public static DatabaseManager getInstance(){
 | 
			
		||||
		if (instance == null){
 | 
			
		||||
			try {
 | 
			
		||||
			   	instance = new DatabaseManager();
 | 
			
		||||
			} catch(SQLException e) {
 | 
			
		||||
			   	Bukkit.getLogger().warning("Could not Initiate database : " + e);
 | 
			
		||||
		   	}
 | 
			
		||||
		}
 | 
			
		||||
		return instance;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private Connection con;
 | 
			
		||||
 | 
			
		||||
	private DatabaseManager() throws SQLException{
 | 
			
		||||
		new File("plugins/TheVoidRoad").mkdirs();
 | 
			
		||||
		con = DriverManager.getConnection("jdbc:sqlite:plugins/TheVoidRoad/voids.db");
 | 
			
		||||
		InitVoids();
 | 
			
		||||
		InitConfig();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Voids table and methods
 | 
			
		||||
	private void InitVoids() throws SQLException{
 | 
			
		||||
		String query = "CREATE TABLE IF NOT EXISTS voids (\n"
 | 
			
		||||
			+ "id integer PRIMARY KEY,\n"
 | 
			
		||||
			+ "uuid text NOT NULL,\n"
 | 
			
		||||
			+ "amount INTEGER DEFAULT 0)";
 | 
			
		||||
 | 
			
		||||
		Statement st = con.createStatement();
 | 
			
		||||
		st.execute(query);
 | 
			
		||||
		st.close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public int getVoids(UUID uuid) throws SQLException{
 | 
			
		||||
		Statement st = con.createStatement();
 | 
			
		||||
		String query = "SELECT amount FROM voids WHERE uuid = ? LIMIT 1";
 | 
			
		||||
		PreparedStatement p = con.prepareStatement(query);
 | 
			
		||||
		p.setString(1, uuid.toString());
 | 
			
		||||
		ResultSet rs = p.executeQuery();
 | 
			
		||||
		int value = rs.getInt(1);
 | 
			
		||||
		st.close();
 | 
			
		||||
		return value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setVoids(UUID uuid, int amount) throws SQLException{
 | 
			
		||||
		Statement st = con.createStatement();
 | 
			
		||||
		String query = "INSERT OR REPLACE INTO voids (uuid, amount) VALUES (?, ?)";
 | 
			
		||||
		PreparedStatement p = con.prepareStatement(query);
 | 
			
		||||
		p.setString(1, uuid.toString());
 | 
			
		||||
		p.setInt(2, amount);
 | 
			
		||||
		p.execute();
 | 
			
		||||
		st.close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    public HashMap<UUID, Integer> getVoidsScoreboard() throws SQLException{
 | 
			
		||||
		HashMap<UUID, Integer> ret = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
		Statement st = con.createStatement();
 | 
			
		||||
		String query = "SELECT uuid, amount FROM voids";
 | 
			
		||||
		Statement p = con.createStatement();
 | 
			
		||||
		ResultSet rs = p.executeQuery(query);
 | 
			
		||||
		do{
 | 
			
		||||
			ret.put(UUID.fromString(rs.getString(1)), rs.getInt(2));
 | 
			
		||||
		}while(rs.next());
 | 
			
		||||
 | 
			
		||||
		st.close();
 | 
			
		||||
		return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	// Config table and methods
 | 
			
		||||
	private void InitConfig() throws SQLException{
 | 
			
		||||
		String query = "CREATE TABLE IF NOT EXISTS config (\n"
 | 
			
		||||
			+ "id integer PRIMARY KEY,\n"
 | 
			
		||||
			+ "name text NOT NULL UNIQUE,\n"
 | 
			
		||||
			+ "value text default NULL)";
 | 
			
		||||
 | 
			
		||||
		Statement st = con.createStatement();
 | 
			
		||||
		st.execute(query);
 | 
			
		||||
		st.close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getConfig(String name) throws SQLException{
 | 
			
		||||
		Statement st = con.createStatement();
 | 
			
		||||
		String query = "SELECT value FROM config WHERE name = ? LIMIT 1";
 | 
			
		||||
		PreparedStatement p = con.prepareStatement(query);
 | 
			
		||||
		p.setString(1, name);
 | 
			
		||||
		ResultSet rs = p.executeQuery();
 | 
			
		||||
		String value = rs.getString(1);
 | 
			
		||||
		st.close();
 | 
			
		||||
		return value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setConfig(String name, @Nullable String value) throws SQLException{
 | 
			
		||||
		Statement st = con.createStatement();
 | 
			
		||||
		String query = "INSERT OR REPLACE INTO config (name, value) VALUES (?, ?)";
 | 
			
		||||
		PreparedStatement p = con.prepareStatement(query);
 | 
			
		||||
		p.setString(1, name);
 | 
			
		||||
		p.setString(2, value);
 | 
			
		||||
		p.execute();
 | 
			
		||||
		st.close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public void close(){
 | 
			
		||||
		try {
 | 
			
		||||
			con.close();
 | 
			
		||||
		} catch(Exception e){
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,60 @@
 | 
			
		||||
package ovh.herisson.thevoidroad.Entity;
 | 
			
		||||
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.entity.EntityType;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.entity.Villager;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.world.EntitiesUnloadEvent;
 | 
			
		||||
 | 
			
		||||
import ovh.herisson.thevoidroad.Event.HourEvent;
 | 
			
		||||
 | 
			
		||||
//Unique, so singleton patern
 | 
			
		||||
public class Merchand implements Listener{
 | 
			
		||||
	private static Merchand instance;
 | 
			
		||||
 | 
			
		||||
	public static Merchand getInstance(){
 | 
			
		||||
		if(instance != null)
 | 
			
		||||
			return instance;
 | 
			
		||||
		return new Merchand();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private Villager m ;
 | 
			
		||||
	private Merchand() {
 | 
			
		||||
		generate();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void generate(){
 | 
			
		||||
		int x = new Random().nextInt(750 * 2) - 750, z = new Random().nextInt(750 * 2) - 750;
 | 
			
		||||
		m = (Villager) Bukkit.getWorld("world").spawnEntity(new Location(Bukkit.getWorld("world"), x, 300, z), EntityType.VILLAGER);
 | 
			
		||||
		m.setGlowing(true);
 | 
			
		||||
		m.setInvulnerable(true);
 | 
			
		||||
		Bukkit.getServer().forEachAudience((a) -> {
 | 
			
		||||
			if(a instanceof Player ply){
 | 
			
		||||
				ply.setCompassTarget(m.getLocation());
 | 
			
		||||
			}
 | 
			
		||||
		}); //Temporary
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void regenerate(){
 | 
			
		||||
		if(m != null){ m.remove(); }
 | 
			
		||||
		generate();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@EventHandler
 | 
			
		||||
	public void onHour(HourEvent e){
 | 
			
		||||
		regenerate();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@EventHandler //TODO(Merchand): Check if can't do using ticket chunk
 | 
			
		||||
	public void onUnload(EntitiesUnloadEvent e){
 | 
			
		||||
		if(e.getEntities().contains(m)){
 | 
			
		||||
			m.getChunk().load();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,34 @@
 | 
			
		||||
package ovh.herisson.thevoidroad.Event;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalTime;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.event.Event;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
 | 
			
		||||
import com.destroystokyo.paper.event.server.ServerTickStartEvent;
 | 
			
		||||
 | 
			
		||||
public class HourEvent extends Event implements Listener{
 | 
			
		||||
	private static final HandlerList handlerList = new HandlerList();
 | 
			
		||||
	public int hour = LocalTime.now().getHour();
 | 
			
		||||
 | 
			
		||||
	public static HandlerList getHandlerList(){
 | 
			
		||||
		return handlerList;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
		return handlerList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	@EventHandler
 | 
			
		||||
	public void onHour(ServerTickStartEvent e){
 | 
			
		||||
		if(LocalTime.now().getHour() != hour){
 | 
			
		||||
			hour = LocalTime.now().getHour();
 | 
			
		||||
			Bukkit.getPluginManager().callEvent(this);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,17 +1,30 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This Java source file was generated by the Gradle 'init' task.
 | 
			
		||||
 */
 | 
			
		||||
package ovh.herisson.thevoidroad;
 | 
			
		||||
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
			
		||||
 | 
			
		||||
public class TheVoidRoad extends JavaPlugin{
 | 
			
		||||
	
 | 
			
		||||
import ovh.herisson.thevoidroad.Commands.VoidCommands;
 | 
			
		||||
import ovh.herisson.thevoidroad.Event.HourEvent;
 | 
			
		||||
 | 
			
		||||
public class TheVoidRoad extends JavaPlugin implements Listener{
 | 
			
		||||
 | 
			
		||||
	public static String CoinGlyph = "Ⓥ"; // Ɣ, √, ▼, Ṿ, ṿ
 | 
			
		||||
	public static final DatabaseManager db = DatabaseManager.getInstance();
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void onEnable(){
 | 
			
		||||
		Bukkit.getLogger().log(Level.INFO, "Hello World!");
 | 
			
		||||
 | 
			
		||||
		//Commands
 | 
			
		||||
		getCommand("void").setExecutor(new VoidCommands());
 | 
			
		||||
		getCommand("void").setTabCompleter(new VoidCommands());
 | 
			
		||||
 | 
			
		||||
		//Events
 | 
			
		||||
		getServer().getPluginManager().registerEvents(new HourEvent(), this); //For HourEvent
 | 
			
		||||
		getServer().getPluginManager().registerEvents(this, this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void onDisable(){
 | 
			
		||||
		db.close();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,72 @@
 | 
			
		||||
package ovh.herisson.thevoidroad;
 | 
			
		||||
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
public final class Voids{	
 | 
			
		||||
 | 
			
		||||
	private Voids(){} // Prohib the instantiation 
 | 
			
		||||
 | 
			
		||||
	public static int get(Player ply){
 | 
			
		||||
		try {
 | 
			
		||||
			return TheVoidRoad.db.getVoids(ply.getUniqueId());
 | 
			
		||||
		} catch(SQLException e){
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void set(Player ply, int amount){
 | 
			
		||||
		try {
 | 
			
		||||
			TheVoidRoad.db.setVoids(ply.getUniqueId(), amount);
 | 
			
		||||
 | 
			
		||||
		} catch(SQLException e){
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void add(Player ply, int amount){
 | 
			
		||||
		try {
 | 
			
		||||
			int curr = TheVoidRoad.db.getVoids(ply.getUniqueId());
 | 
			
		||||
			TheVoidRoad.db.setVoids(ply.getUniqueId(), curr + amount);
 | 
			
		||||
		} catch(SQLException e){
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	} 
 | 
			
		||||
	
 | 
			
		||||
	public static boolean subtract(Player ply, int amount, boolean force){
 | 
			
		||||
		try {
 | 
			
		||||
			int curr = TheVoidRoad.db.getVoids(ply.getUniqueId());
 | 
			
		||||
			if(curr - amount < 0 && !force) return false;
 | 
			
		||||
			TheVoidRoad.db.setVoids(ply.getUniqueId(), curr - amount);
 | 
			
		||||
		} catch(SQLException e){
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
	} 
 | 
			
		||||
 | 
			
		||||
	public static boolean give(Player giver, Player receiver, int amount){
 | 
			
		||||
		if(subtract(giver, amount, false)){
 | 
			
		||||
			add(receiver, amount);
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static HashMap<Player, Integer> scoreboard(){
 | 
			
		||||
		HashMap<Player, Integer> ret = new HashMap<>();
 | 
			
		||||
		try {
 | 
			
		||||
			HashMap<UUID, Integer> scores_uuid = TheVoidRoad.db.getVoidsScoreboard();
 | 
			
		||||
			scores_uuid.forEach((u, a) -> {
 | 
			
		||||
				ret.put(Bukkit.getPlayer(u), a);
 | 
			
		||||
			});
 | 
			
		||||
		} catch(SQLException e){
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -5,3 +5,20 @@ description: This is a plugin for the void road's server
 | 
			
		||||
author: Tonitch
 | 
			
		||||
website: herisson.ovh
 | 
			
		||||
api-version: '1.20'
 | 
			
		||||
commands:
 | 
			
		||||
  void:
 | 
			
		||||
    description: Interact with the void road plugin
 | 
			
		||||
    usage: "/void [give|event]"
 | 
			
		||||
    # permission: void.balance
 | 
			
		||||
    # permission-message: "you are disliked :/" 
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  void.manage:
 | 
			
		||||
    description: "GameMaster's command"
 | 
			
		||||
    default: op
 | 
			
		||||
  void.balance:
 | 
			
		||||
    description: "User of thevoidroad"
 | 
			
		||||
    default: not op
 | 
			
		||||
  void.event:
 | 
			
		||||
    description: "Create event"
 | 
			
		||||
    default: op
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user