disco floor size limit, stained glass floor, fixes

This commit is contained in:
Charlie 2014-07-31 22:24:10 -04:00
parent ad787729ba
commit 487a735264
3 changed files with 19 additions and 139 deletions

View File

@ -28,12 +28,12 @@ import org.bukkit.util.Vector;
public class DiscoParty { public class DiscoParty {
// Static properties
static int defaultDuration = 300; // ticks for entire party static int defaultDuration = 300; // ticks for entire party
static int defaultPeriod = 10; // ticks per state change static int defaultPeriod = 10; // ticks per state change
static int defaultRadius = 5; static int defaultRadius = 5;
static int defaultSheep = 10; static int defaultSheep = 10;
static float defaultSheepJump = 0.35f; static float defaultSheepJump = 0.35f;
static int maxFloorSize = 5;
static int maxDuration = 2400; // 120 seconds static int maxDuration = 2400; // 120 seconds
static int maxSheep = 100; static int maxSheep = 100;
static int maxRadius = 100; static int maxRadius = 100;
@ -304,12 +304,12 @@ public class DiscoParty {
void spawnFloor(World world, Location loc) { void spawnFloor(World world, Location loc) {
// First we'll save the floor state // First we'll save the floor state
for (int x = loc.getBlockX() - this.radius; x < loc.getX() + this.radius; ++x) { for (int x = loc.getBlockX() - Math.min(this.radius, DiscoParty.maxFloorSize); x < loc.getX() + Math.min(this.radius, DiscoParty.maxFloorSize); ++x) {
for (int z = loc.getBlockZ() - this.radius; z < loc.getZ() + this.radius; ++z) { for (int z = loc.getBlockZ() - Math.min(this.radius, DiscoParty.maxFloorSize); z < loc.getZ() + Math.min(this.radius, DiscoParty.maxFloorSize); ++z) {
Block block = world.getBlockAt(x, loc.getBlockY(), z); Block block = world.getBlockAt(x, loc.getBlockY(), z);
if (block.getType() != Material.WOOL) { if (block.getType() != Material.STAINED_GLASS) {
this.getFloorCache().add(block.getState()); this.getFloorCache().add(block.getState());
block.setType(Material.WOOL); block.setType(Material.STAINED_GLASS);
this.getFloorBlocks().add(block); this.getFloorBlocks().add(block);
} }
} }

View File

@ -24,7 +24,7 @@ public final class DiscoSheep extends JavaPlugin {
private static DiscoSheep instance; private static DiscoSheep instance;
static boolean partyOnJoin = false; boolean partyOnJoin = true;
Map<String, DiscoParty> parties = new HashMap<String, DiscoParty>(); Map<String, DiscoParty> parties = new HashMap<String, DiscoParty>();
private CommandsManager<CommandSender> commands; private CommandsManager<CommandSender> commands;
@ -92,6 +92,7 @@ public final class DiscoSheep extends JavaPlugin {
getConfig().addDefault("default.radius", DiscoParty.defaultRadius); getConfig().addDefault("default.radius", DiscoParty.defaultRadius);
getConfig().addDefault("default.duration", toSeconds_i(DiscoParty.defaultDuration)); getConfig().addDefault("default.duration", toSeconds_i(DiscoParty.defaultDuration));
getConfig().addDefault("default.period-ticks", DiscoParty.defaultPeriod); getConfig().addDefault("default.period-ticks", DiscoParty.defaultPeriod);
getConfig().addDefault("max.floor_size", DiscoParty.maxFloorSize);
/* /*
* Iterate through all live entities and create default configuration values for them * Iterate through all live entities and create default configuration values for them
@ -123,6 +124,7 @@ public final class DiscoSheep extends JavaPlugin {
DiscoParty.defaultRadius = getConfig().getInt("default.radius"); DiscoParty.defaultRadius = getConfig().getInt("default.radius");
DiscoParty.defaultDuration = toTicks(getConfig().getInt("default.duration")); DiscoParty.defaultDuration = toTicks(getConfig().getInt("default.duration"));
DiscoParty.defaultPeriod = getConfig().getInt("default.period-ticks"); DiscoParty.defaultPeriod = getConfig().getInt("default.period-ticks");
DiscoParty.maxFloorSize = getConfig().getInt("max.floor_size");
for (String key : getConfig().getConfigurationSection("default.guests").getKeys(false)) { for (String key : getConfig().getConfigurationSection("default.guests").getKeys(false)) {
DiscoParty.getDefaultGuestNumbers().put(key, getConfig().getInt("default.guests." + key)); DiscoParty.getDefaultGuestNumbers().put(key, getConfig().getInt("default.guests." + key));
@ -199,8 +201,8 @@ public final class DiscoSheep extends JavaPlugin {
} }
public boolean toggleOnJoin() { public boolean toggleOnJoin() {
DiscoSheep.partyOnJoin = !DiscoSheep.partyOnJoin; partyOnJoin = !partyOnJoin;
return DiscoSheep.partyOnJoin; return partyOnJoin;
} }
public void removeParty(String name) { public void removeParty(String name) {
@ -209,135 +211,6 @@ public final class DiscoSheep extends JavaPlugin {
} }
} }
/*-- Actual commands begin here --*/
/*boolean helpCommand(CommandSender sender) {
sender.sendMessage(ChatColor.YELLOW
+ "DiscoSheep Help\n"
+ ChatColor.GRAY
+ " Subcommands\n"
+ ChatColor.WHITE + "me, stop, all, stopall, save, reload, togglejoin\n"
+ "other <players>: start a party for the space-delimited list of players\n"
+ "defaults: Change the default settings for parties (takes normal arguments)\n"
+ ChatColor.GRAY + " Arguments\n"
+ ChatColor.WHITE + "-n <integer>: set the number of sheep per player that spawn\n"
+ "-t <integer>: set the party duration in seconds\n"
+ "-p <ticks>: set the number of ticks between each disco beat\n"
+ "-r <integer>: set radius of the area in which sheep can spawn\n"
//+ "-g <mob> <number>: set spawns for other mobs\n"
+ "-l: enables lightning\n"
+ "-fw: enables fireworks");
return true;
}
boolean stopMeCommand(CommandSender sender) {
stopParty(sender.getName());
return true;
}
boolean stopAllCommand(CommandSender sender) {
if (sender.hasPermission(PERMISSION_STOPALL)) {
stopAllParties();
return true;
} else {
return noPermsMessage(sender, PERMISSION_STOPALL);
}
}
boolean partyCommand(Player player, DiscoParty party) {
if (player.hasPermission(PERMISSION_PARTY)) {
if (!hasParty(player.getName())) {
party.setPlayer(player);
party.startDisco();
} else {
player.sendMessage(ChatColor.RED + "You already have a party. Are you underground?");
}
return true;
} else {
return noPermsMessage(player, PERMISSION_PARTY);
}
}
boolean reloadCommand(CommandSender sender) {
if (sender.hasPermission(PERMISSION_RELOAD)) {
reloadConfigFromDisk();
sender.sendMessage(ChatColor.GREEN + "DiscoSheep config reloaded from disk");
return true;
} else {
return noPermsMessage(sender, PERMISSION_RELOAD);
}
}
@SuppressWarnings("deprecation")
// UUIDs not necessary since DiscoSheep only lasts for one session at most
// and permissions will handle onJoin DiscoSheep
boolean partyOtherCommand(String[] players, CommandSender sender, DiscoParty party) {
if (sender.hasPermission(PERMISSION_OTHER)) {
Player p;
for (String playerName : players) {
p = Bukkit.getServer().getPlayer(playerName);
if (p != null) {
if (!hasParty(p.getName())) {
DiscoParty individualParty = party.clone(p);
individualParty.startDisco();
}
} else {
sender.sendMessage("Invalid player: " + playerName);
}
}
return true;
} else {
return noPermsMessage(sender, PERMISSION_OTHER);
}
}
boolean partyAllCommand(CommandSender sender, DiscoParty party) {
if (sender.hasPermission(PERMISSION_ALL)) {
for (Player p : Bukkit.getServer().getOnlinePlayers()) {
if (!hasParty(p.getName())) {
DiscoParty individualParty = party.clone(p);
individualParty.startDisco();
p.sendMessage(ChatColor.RED + "LET'S DISCO!!");
}
}
return true;
} else {
return noPermsMessage(sender, PERMISSION_ALL);
}
}
boolean togglePartyOnJoinCommand(CommandSender sender) {
if (!sender.hasPermission(PERMISSION_TOGGLEPARTYONJOIN)) {
return noPermsMessage(sender, PERMISSION_TOGGLEPARTYONJOIN);
}
partyOnJoin = !partyOnJoin;
if (partyOnJoin) {
sender.sendMessage(ChatColor.GREEN + "DiscoSheep party on join functionality enabled.");
} else {
sender.sendMessage(ChatColor.GREEN + "DiscoSheep party on join functionality disabled.");
}
return true;
}
boolean setDefaultsCommand(CommandSender sender, DiscoParty party) {
if (sender.hasPermission(PERMISSION_CHANGEDEFAULTS)) {
party.setDefaultsFromCurrent();
sender.sendMessage(ChatColor.GREEN + "DiscoSheep configured with new defaults (not saved to disk yet)");
return true;
} else {
return noPermsMessage(sender, PERMISSION_CHANGEDEFAULTS);
}
}
boolean saveConfigCommand(CommandSender sender) {
if (sender.hasPermission(PERMISSION_SAVECONFIG)) {
saveConfigToDisk();
sender.sendMessage(ChatColor.GREEN + "DiscoSheep config saved to disk");
return true;
} else {
return noPermsMessage(sender, PERMISSION_SAVECONFIG);
}
}*/
void partyOnJoin(Player player) { void partyOnJoin(Player player) {
if (!partyOnJoin) { if (!partyOnJoin) {
return; return;

View File

@ -4,6 +4,7 @@ import org.bukkit.entity.Sheep;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPortalEvent; import org.bukkit.event.entity.EntityPortalEvent;
import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityTargetEvent;
@ -78,5 +79,11 @@ public class PartyEvents implements Listener {
e.setCancelled(true); e.setCancelled(true);
} }
} }
// prevent disco floor breaking
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockBreakEvent(BlockBreakEvent e) {
if (party.getFloorBlocks().contains(e.getBlock())) {
e.setCancelled(true);
}
}
} }