added arguments for period, duration, number, and radius
This commit is contained in:
parent
1a5e5050dc
commit
0a7bd06579
@ -25,11 +25,17 @@ public class DiscoParty {
|
||||
private DiscoSheep ds;
|
||||
private Player player;
|
||||
private ArrayList<Sheep> sheepList = new ArrayList<Sheep>();
|
||||
private int duration, frequency = 20, numSheep = 5;
|
||||
static final int defaultDuration = 300; // ticks for entire party
|
||||
static final int defaultFrequency = 10; // ticks per state change
|
||||
static final int defaultSheepSpawnRadius = 5;
|
||||
static final int defaultSheepAmount = 10;
|
||||
private int duration, frequency = 20;
|
||||
private int numSheep = 5;
|
||||
static int defaultDuration = 300; // ticks for entire party
|
||||
static int defaultPeriod = 10; // ticks per state change
|
||||
static int defaultRadius = 5;
|
||||
static int defaultSheep = 10;
|
||||
static int maxDuration = 2400; // 120 seconds
|
||||
static int maxSheep = 100;
|
||||
static int maxRadius = 100;
|
||||
static int minPeriod = 5; // 0.25 seconds
|
||||
static int maxPeriod = 40; // 2.0 seconds
|
||||
private boolean doFireworks = false;
|
||||
private int state = 0;
|
||||
private DiscoUpdater updater;
|
||||
@ -223,13 +229,13 @@ public class DiscoParty {
|
||||
updater.runTaskLater(ds, this.frequency);
|
||||
}
|
||||
|
||||
void startDisco(int duration, int sheepAmount, int radius, boolean fireworks) {
|
||||
void startDisco(int duration, int sheepAmount, int radius, int frequency, boolean fireworks) {
|
||||
if (this.duration > 0) {
|
||||
stopDisco();
|
||||
}
|
||||
this.doFireworks = fireworks;
|
||||
this.spawnSheep(sheepAmount, radius);
|
||||
this.frequency = this.defaultFrequency;
|
||||
this.frequency = frequency;
|
||||
this.duration = duration;
|
||||
this.scheduleUpdate();
|
||||
ds.getPartyMap().put(this.player.getName(), this);
|
||||
|
@ -4,6 +4,8 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.bukkit.configuration.MemoryConfiguration;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
@ -16,6 +18,31 @@ public final class DiscoSheep extends JavaPlugin {
|
||||
public void onEnable() {
|
||||
getCommand("ds").setExecutor(new DiscoSheepCommandExecutor(this));
|
||||
getServer().getPluginManager().registerEvents(blockEvents, this);
|
||||
|
||||
FileConfiguration config = this.getConfig();
|
||||
|
||||
config.addDefault("max.sheep", DiscoParty.maxSheep);
|
||||
config.addDefault("max.radius", DiscoParty.maxRadius);
|
||||
config.addDefault("max.duration", DiscoParty.maxDuration);
|
||||
config.addDefault("max.period", DiscoParty.maxPeriod);
|
||||
config.addDefault("min.period", DiscoParty.minPeriod);
|
||||
config.addDefault("default.sheep", DiscoParty.defaultSheep);
|
||||
config.addDefault("default.radius", DiscoParty.defaultRadius);
|
||||
config.addDefault("default.duration", DiscoParty.defaultDuration);
|
||||
config.addDefault("default.period", DiscoParty.defaultPeriod);
|
||||
config.options().copyDefaults(true);
|
||||
|
||||
saveConfig();
|
||||
|
||||
DiscoParty.maxSheep = getConfig().getInt("max.sheep");
|
||||
DiscoParty.maxRadius = getConfig().getInt("max.radius");
|
||||
DiscoParty.maxDuration = getConfig().getInt("max.duration");
|
||||
DiscoParty.maxPeriod = getConfig().getInt("max.period");
|
||||
DiscoParty.minPeriod = getConfig().getInt("min.period");
|
||||
DiscoParty.defaultSheep = getConfig().getInt("default.sheep");
|
||||
DiscoParty.defaultRadius = getConfig().getInt("default.radius");
|
||||
DiscoParty.defaultDuration = getConfig().getInt("default.duration");
|
||||
DiscoParty.defaultPeriod = getConfig().getInt("default.period");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -23,6 +50,14 @@ public final class DiscoSheep extends JavaPlugin {
|
||||
this.stopAllParties();
|
||||
}
|
||||
|
||||
int toTicks(double seconds) {
|
||||
return (int) Math.round(seconds * 20.0);
|
||||
}
|
||||
|
||||
double toSeconds(int ticks) {
|
||||
return (double) Math.round(ticks / 20.0);
|
||||
}
|
||||
|
||||
public synchronized Map<String, DiscoParty> getPartyMap() {
|
||||
return this.parties;
|
||||
}
|
||||
@ -57,12 +92,9 @@ public final class DiscoSheep extends JavaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
public void startParty(Player player, int duration, int sheepAmount, int radius, boolean fireworksEnabled) {
|
||||
public void startParty(Player player, int duration, int sheepAmount, int radius, int period, boolean fireworksEnabled) {
|
||||
if (!hasParty(player.getName())) {
|
||||
new DiscoParty(this, player).startDisco(duration, sheepAmount, radius, fireworksEnabled);
|
||||
} else {
|
||||
player.sendMessage("You has party");
|
||||
new DiscoParty(this, player).startDisco(duration, sheepAmount, radius, period, fireworksEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -42,14 +42,22 @@ public class DiscoSheepCommandExecutor implements CommandExecutor {
|
||||
return -1;
|
||||
}
|
||||
|
||||
private Double parseNextDoubleArg(String[] args, int i) {
|
||||
if (i < args.length - 1) {
|
||||
return Double.parseDouble(args[i + 1]);
|
||||
}
|
||||
return -1.0d;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
Player player = null;
|
||||
boolean isPlayer = false;
|
||||
boolean fireworks = false;
|
||||
int sheepNumber = DiscoParty.defaultSheepAmount;
|
||||
int radius = DiscoParty.defaultSheepSpawnRadius;
|
||||
int sheepNumber = DiscoParty.defaultSheep;
|
||||
int radius = DiscoParty.defaultRadius;
|
||||
int duration = DiscoParty.defaultDuration;
|
||||
int period = DiscoParty.defaultPeriod;
|
||||
|
||||
if (sender instanceof Player) {
|
||||
player = (Player) sender;
|
||||
@ -71,15 +79,36 @@ public class DiscoSheepCommandExecutor implements CommandExecutor {
|
||||
} else if (args[i].equalsIgnoreCase("-r")) {
|
||||
radius = parseNextIntArg(args, i);
|
||||
|
||||
if (radius < 1 || radius > 100) {
|
||||
sender.sendMessage("Radius must be an integer within the range [1, 100]");
|
||||
if (radius < 1 || radius > DiscoParty.maxRadius) {
|
||||
sender.sendMessage("Radius must be an integer within the range [1, "
|
||||
+ DiscoParty.maxRadius + "]");
|
||||
return true;
|
||||
}
|
||||
} else if (args[i].equalsIgnoreCase("-n")) {
|
||||
sheepNumber = parseNextIntArg(args, i);
|
||||
|
||||
if (sheepNumber < 1 || sheepNumber > 100) {
|
||||
sender.sendMessage("The number of sheep must be an integer within the range [1, 100]");
|
||||
if (sheepNumber < 1 || sheepNumber > DiscoParty.maxSheep) {
|
||||
sender.sendMessage("The number of sheep must be an integer within the range [1, "
|
||||
+ DiscoParty.maxSheep + "]");
|
||||
return true;
|
||||
}
|
||||
} else if (args[i].equalsIgnoreCase("-t")) {
|
||||
duration = parseNextIntArg(args, i);
|
||||
|
||||
if (duration < 1 || duration > parent.toSeconds(DiscoParty.maxDuration)) {
|
||||
sender.sendMessage("The duration in ticks must be an integer within the range [1, "
|
||||
+ parent.toSeconds(DiscoParty.maxDuration) + "]");
|
||||
return true;
|
||||
}
|
||||
} else if (args[i].equalsIgnoreCase("-p")) {
|
||||
period = parseNextIntArg(args, i);
|
||||
|
||||
if (period < DiscoParty.minPeriod || period > DiscoParty.maxPeriod) {
|
||||
sender.sendMessage(
|
||||
"The period in ticks must be within the range ["
|
||||
+ DiscoParty.minPeriod + ", "
|
||||
+ DiscoParty.maxPeriod + "]");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -89,7 +118,7 @@ public class DiscoSheepCommandExecutor implements CommandExecutor {
|
||||
if (args[0].equalsIgnoreCase("all")) {
|
||||
if (senderHasPerm(sender, PERMISSION_ALL)) {
|
||||
for (Player p : Bukkit.getServer().getOnlinePlayers()) {
|
||||
parent.startParty(p, duration, sheepNumber, radius, fireworks);
|
||||
parent.startParty(p, duration, sheepNumber, radius, period, fireworks);
|
||||
p.sendMessage(ChatColor.RED + "LET'S DISCO!");
|
||||
}
|
||||
} else {
|
||||
@ -105,7 +134,7 @@ public class DiscoSheepCommandExecutor implements CommandExecutor {
|
||||
return true;
|
||||
} else if (args[0].equalsIgnoreCase("me")) {
|
||||
if (isPlayer) {
|
||||
parent.startParty(player, duration, sheepNumber, radius, fireworks);
|
||||
parent.startParty(player, duration, sheepNumber, radius, period, fireworks);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user