sounds are now global, added dance floor flag
This commit is contained in:
parent
f64a5f85b7
commit
1d1d6d9868
@ -4,7 +4,7 @@ annotation.processing.processors.list=
|
|||||||
annotation.processing.run.all.processors=true
|
annotation.processing.run.all.processors=true
|
||||||
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
|
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
|
||||||
application.title=DiscoSheep
|
application.title=DiscoSheep
|
||||||
application.vendor=Charlie
|
application.vendor=
|
||||||
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
|
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
|
||||||
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4
|
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4
|
||||||
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4
|
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4
|
||||||
|
@ -30,9 +30,9 @@ public class DiscoCommands {
|
|||||||
static final String PERMISSION_SPAWNGUESTS = "discosheep.party.spawnguests";
|
static final String PERMISSION_SPAWNGUESTS = "discosheep.party.spawnguests";
|
||||||
static final String PERMISSION_TOGGLEPARTYONJOIN = "discosheep.admin.toggleonjoin";
|
static final String PERMISSION_TOGGLEPARTYONJOIN = "discosheep.admin.toggleonjoin";
|
||||||
static final String PERMISSION_LIGHTNING = "discosheep.party.lightning";
|
static final String PERMISSION_LIGHTNING = "discosheep.party.lightning";
|
||||||
static final String PERMISSION_SHARED = "discosheep.party.shared";
|
static final String PERMISSION_DANCEFLOOR = "discosheep.party.dancefloor";
|
||||||
|
|
||||||
static final String FLAGS = "n:t:p:r:lfg";
|
static final String FLAGS = "n:t:p:r:lfgd";
|
||||||
|
|
||||||
private static final DiscoSheep plugin = DiscoSheep.getInstance();
|
private static final DiscoSheep plugin = DiscoSheep.getInstance();
|
||||||
|
|
||||||
@ -84,6 +84,10 @@ public class DiscoCommands {
|
|||||||
party.setPeriod(args.getFlagInteger('p', DiscoParty.defaultPeriod));
|
party.setPeriod(args.getFlagInteger('p', DiscoParty.defaultPeriod));
|
||||||
party.setSheep(args.getFlagInteger('n', DiscoParty.defaultSheep));
|
party.setSheep(args.getFlagInteger('n', DiscoParty.defaultSheep));
|
||||||
|
|
||||||
|
if (sender.hasPermission(PERMISSION_DANCEFLOOR)) {
|
||||||
|
party.setDoFloor(args.hasFlag('d'));
|
||||||
|
}
|
||||||
|
|
||||||
// handle special case of duration conversion ugh
|
// handle special case of duration conversion ugh
|
||||||
if (args.hasFlag('t')) {
|
if (args.hasFlag('t')) {
|
||||||
int duration = args.getFlagInteger('t');
|
int duration = args.getFlagInteger('t');
|
||||||
@ -141,7 +145,6 @@ public class DiscoCommands {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-- Actual commands begin here --*/
|
/*-- Actual commands begin here --*/
|
||||||
@ -206,32 +209,6 @@ public class DiscoCommands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command(
|
|
||||||
aliases = {"shared"},
|
|
||||||
desc = "Start your own shared DiscoParty (other players can see the party)",
|
|
||||||
usage = "[optional flags]",
|
|
||||||
min = 0,
|
|
||||||
max = -1,
|
|
||||||
flags = FLAGS
|
|
||||||
)
|
|
||||||
@CommandPermissions(value = PERMISSION_SHARED)
|
|
||||||
public static void partySharedCommand(final CommandContext args, CommandSender sender) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("You must be a player to have a party");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = (Player) sender;
|
|
||||||
if (!plugin.hasParty(player.getName())) {
|
|
||||||
DiscoParty party = new DiscoParty();
|
|
||||||
party.setMainPlayer(player);
|
|
||||||
parsePartyFlags(party, args, sender);
|
|
||||||
party.getPlayers().addAll(plugin.getPlayersWithin(player, party.getRadius()));
|
|
||||||
party.startDisco();
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.RED + "You already have a party.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
// UUIDs not necessary since DiscoSheep only lasts for one session at most
|
// UUIDs not necessary since DiscoSheep only lasts for one session at most
|
||||||
// and permissions will handle onJoin DiscoSheep
|
// and permissions will handle onJoin DiscoSheep
|
||||||
|
@ -9,7 +9,6 @@ import java.util.Random;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
import org.bukkit.Material;
|
|
||||||
import static org.bukkit.EntityEffect.*;
|
import static org.bukkit.EntityEffect.*;
|
||||||
import org.bukkit.FireworkEffect;
|
import org.bukkit.FireworkEffect;
|
||||||
import org.bukkit.FireworkEffect.Builder;
|
import org.bukkit.FireworkEffect.Builder;
|
||||||
@ -23,6 +22,7 @@ import org.bukkit.block.BlockState;
|
|||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Firework;
|
import org.bukkit.entity.Firework;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Sheep;
|
import org.bukkit.entity.Sheep;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
@ -86,27 +86,29 @@ public class DiscoParty {
|
|||||||
// Instance properties
|
// Instance properties
|
||||||
private Random r = new Random();
|
private Random r = new Random();
|
||||||
private PartyEvents partyEvents;
|
private PartyEvents partyEvents;
|
||||||
private final DiscoSheep parent = DiscoSheep.getInstance();
|
private final DiscoSheep plugin = DiscoSheep.getInstance();
|
||||||
private ArrayList<Player> players = new ArrayList<Player>();
|
private Player player;
|
||||||
private Player mainPlayer;
|
private final ArrayList<Sheep> sheepList = new ArrayList<Sheep>();
|
||||||
private ArrayList<Sheep> sheepList = new ArrayList<Sheep>();
|
private final HashSet<Sheep> sheepSet = new HashSet<Sheep>();
|
||||||
private HashSet<Sheep> sheepSet = new HashSet<Sheep>();
|
private final ArrayList<Entity> guestList = new ArrayList<Entity>();
|
||||||
private ArrayList<Entity> guestList = new ArrayList<Entity>();
|
private final HashSet<Entity> guestSet = new HashSet<Entity>();
|
||||||
private HashSet<Entity> guestSet = new HashSet<Entity>();
|
private final ArrayList<BlockState> floorBlockCache = new ArrayList<BlockState>();
|
||||||
private ArrayList<BlockState> floorBlockCache = new ArrayList<BlockState>();
|
private final ArrayList<Block> floorBlocks = new ArrayList<Block>();
|
||||||
private ArrayList<Block> floorBlocks = new ArrayList<Block>();
|
|
||||||
private HashMap<String, Integer> guestNumbers = new HashMap<String, Integer>();
|
private HashMap<String, Integer> guestNumbers = new HashMap<String, Integer>();
|
||||||
private boolean doFireworks = false;
|
private boolean doFireworks = false;
|
||||||
private boolean doJump = true;
|
private final boolean doJump = true;
|
||||||
private boolean doLightning = false;
|
private boolean doLightning = false;
|
||||||
|
private boolean doFloor = false;
|
||||||
private int duration, period, radius, sheep;
|
private int duration, period, radius, sheep;
|
||||||
private int state = 0; // basically our own tick system
|
private int state = 0; // basically our own tick system
|
||||||
|
private float volumeMultiplier;
|
||||||
|
private Location partyLocation;
|
||||||
private DiscoUpdater updater;
|
private DiscoUpdater updater;
|
||||||
|
|
||||||
public DiscoParty(Player player) {
|
public DiscoParty(Player player) {
|
||||||
this();
|
this();
|
||||||
this.mainPlayer = player;
|
this.player = player;
|
||||||
this.players.add(player);
|
this.partyLocation = player.getLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
public DiscoParty() {
|
public DiscoParty() {
|
||||||
@ -177,15 +179,12 @@ public class DiscoParty {
|
|||||||
return this.sheep;
|
return this.sheep;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DiscoParty setMainPlayer(Player player) {
|
public DiscoParty setPlayer(Player player) {
|
||||||
this.mainPlayer = player;
|
this.player = player;
|
||||||
|
this.partyLocation = player.getLocation();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<Player> getPlayers() {
|
|
||||||
return players;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DiscoParty setDuration(int duration) throws IllegalArgumentException {
|
public DiscoParty setDuration(int duration) throws IllegalArgumentException {
|
||||||
if (duration <= DiscoParty.maxDuration && duration > 0) {
|
if (duration <= DiscoParty.maxDuration && duration > 0) {
|
||||||
this.duration = duration;
|
this.duration = duration;
|
||||||
@ -245,6 +244,10 @@ public class DiscoParty {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDoFloor(boolean doFloor) {
|
||||||
|
this.doFloor = doFloor;
|
||||||
|
}
|
||||||
|
|
||||||
public DiscoParty setGuestNumber(String key, int n) throws IllegalArgumentException {
|
public DiscoParty setGuestNumber(String key, int n) throws IllegalArgumentException {
|
||||||
if (getMaxGuestNumbers().containsKey(key.toUpperCase())) {
|
if (getMaxGuestNumbers().containsKey(key.toUpperCase())) {
|
||||||
if (n <= getMaxGuestNumbers().get(key.toUpperCase()) && n >= 0) { // so that /ds defaults can take 0 as arg
|
if (n <= getMaxGuestNumbers().get(key.toUpperCase()) && n >= 0) { // so that /ds defaults can take 0 as arg
|
||||||
@ -278,7 +281,7 @@ public class DiscoParty {
|
|||||||
double azimuth = r.nextDouble() * 2 * Math.PI; // radians
|
double azimuth = r.nextDouble() * 2 * Math.PI; // radians
|
||||||
x += rand * Math.cos(azimuth);
|
x += rand * Math.cos(azimuth);
|
||||||
z += rand * Math.sin(azimuth);
|
z += rand * Math.sin(azimuth);
|
||||||
y = this.mainPlayer.getLocation().getY();
|
y = partyLocation.getY();
|
||||||
|
|
||||||
loc = new Location(world, x, y, z);
|
loc = new Location(world, x, y, z);
|
||||||
loc.setPitch(r.nextFloat() * 360 - 180);
|
loc.setPitch(r.nextFloat() * 360 - 180);
|
||||||
@ -290,10 +293,10 @@ public class DiscoParty {
|
|||||||
// Spawn some number of guests next to given player
|
// Spawn some number of guests next to given player
|
||||||
void spawnAll(int sheep, int spawnRadius) {
|
void spawnAll(int sheep, int spawnRadius) {
|
||||||
Location loc;
|
Location loc;
|
||||||
World world = mainPlayer.getWorld();
|
World world = player.getWorld();
|
||||||
|
|
||||||
double x = mainPlayer.getLocation().getX();
|
double x = partyLocation.getX();
|
||||||
double z = mainPlayer.getLocation().getZ();
|
double z = partyLocation.getZ();
|
||||||
for (int i = 0; i < sheep; i++) {
|
for (int i = 0; i < sheep; i++) {
|
||||||
loc = getRandomSpawnLocation(x, z, world, spawnRadius);
|
loc = getRandomSpawnLocation(x, z, world, spawnRadius);
|
||||||
spawnSheep(world, loc);
|
spawnSheep(world, loc);
|
||||||
@ -310,16 +313,16 @@ public class DiscoParty {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loc = mainPlayer.getLocation();
|
if (doFloor) {
|
||||||
this.spawnFloor(world, new Location(world, loc.getBlockX(), loc.getBlockY() - 1, loc.getBlockZ()));
|
this.spawnFloor(world, new Location(world, partyLocation.getBlockX(), partyLocation.getBlockY() - 1, partyLocation.getBlockZ()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void spawnSheep(World world, Location loc) {
|
void spawnSheep(World world, Location loc) {
|
||||||
Sheep newSheep = (Sheep) world.spawnEntity(loc, EntityType.SHEEP);
|
Sheep newSheep = (Sheep) world.spawnEntity(loc, EntityType.SHEEP);
|
||||||
//newSheep.setColor(discoColours[(r.nextInt(discoColours.length))]);
|
//newSheep.setColor(discoColours[(r.nextInt(discoColours.length))]);
|
||||||
newSheep.setBreed(false); // this prevents breeding - no event listener required
|
newSheep.setBreed(false); // this prevents breeding - no event listener required
|
||||||
newSheep.teleport(loc); // teleport is needed to set orientation
|
newSheep.teleport(loc); // teleport is needed to set orientation
|
||||||
newSheep.setTarget(this.mainPlayer);
|
|
||||||
getSheepList().add(newSheep);
|
getSheepList().add(newSheep);
|
||||||
getSheepSet().add(newSheep);
|
getSheepSet().add(newSheep);
|
||||||
if (doLightning) {
|
if (doLightning) {
|
||||||
@ -331,7 +334,8 @@ public class DiscoParty {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void spawnGuest(World world, Location loc, EntityType type) {
|
void spawnGuest(World world, Location loc, EntityType type) {
|
||||||
Entity newGuest = loc.getWorld().spawnEntity(loc, type);
|
LivingEntity newGuest = (LivingEntity) loc.getWorld().spawnEntity(loc, type);
|
||||||
|
newGuest.setRemoveWhenFarAway(false);
|
||||||
getGuestList().add(newGuest);
|
getGuestList().add(newGuest);
|
||||||
getGuestSet().add(newGuest);
|
getGuestSet().add(newGuest);
|
||||||
if (doLightning) {
|
if (doLightning) {
|
||||||
@ -485,16 +489,28 @@ public class DiscoParty {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void playSounds() {
|
void playSounds() {
|
||||||
for (Player p : players) {
|
|
||||||
p.playSound(p.getLocation(), Sound.NOTE_BASS_DRUM, 0.75f, 1.0f);
|
|
||||||
if (this.state % 2 == 0) {
|
|
||||||
p.playSound(p.getLocation(), Sound.NOTE_SNARE_DRUM, 0.8f, 1.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((this.state + 1) % 8 == 0) {
|
/*for (Sheep sheep : this.getSheepList()) {
|
||||||
p.playSound(p.getLocation(), Sound.NOTE_STICKS, 1.0f, 1.0f);
|
sheep.getWorld().playSound(sheep.getLocation(), Sound.NOTE_BASS_DRUM, 0.75f, 1.0f);
|
||||||
}
|
|
||||||
|
if (this.state % 2 == 0) {
|
||||||
|
sheep.getWorld().playSound(sheep.getLocation(), Sound.NOTE_SNARE_DRUM, 0.8f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((this.state + 1) % 8 == 0) {
|
||||||
|
sheep.getWorld().playSound(sheep.getLocation(), Sound.NOTE_STICKS, 1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
}*/
|
||||||
|
partyLocation.getWorld().playSound(partyLocation, Sound.NOTE_BASS_DRUM, volumeMultiplier * 0.75f, 1.0f);
|
||||||
|
if (this.state % 2 == 0) {
|
||||||
|
partyLocation.getWorld().playSound(partyLocation, Sound.NOTE_SNARE_DRUM, volumeMultiplier * 0.8f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((this.state + 1) % 8 == 0) {
|
||||||
|
partyLocation.getWorld().playSound(partyLocation, Sound.NOTE_STICKS, volumeMultiplier * 1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void randomizeFirework(Firework firework) {
|
void randomizeFirework(Firework firework) {
|
||||||
@ -541,16 +557,17 @@ public class DiscoParty {
|
|||||||
|
|
||||||
void scheduleUpdate() {
|
void scheduleUpdate() {
|
||||||
updater = new DiscoUpdater();
|
updater = new DiscoUpdater();
|
||||||
updater.runTaskLater(parent, this.period);
|
updater.runTaskLater(plugin, this.period);
|
||||||
}
|
}
|
||||||
|
|
||||||
void startDisco() {
|
void startDisco() {
|
||||||
|
this.volumeMultiplier = Math.max(this.radius / 10, 1.0f);
|
||||||
this.spawnAll(sheep, radius);
|
this.spawnAll(sheep, radius);
|
||||||
this.scheduleUpdate();
|
this.scheduleUpdate();
|
||||||
parent.getPartyMap().put(this.mainPlayer.getName(), this);
|
plugin.getPartyMap().put(this.player.getName(), this);
|
||||||
// start listening
|
// start listening
|
||||||
this.partyEvents = new PartyEvents(this);
|
this.partyEvents = new PartyEvents(this);
|
||||||
parent.getServer().getPluginManager().registerEvents(this.partyEvents, this.parent);
|
plugin.getServer().getPluginManager().registerEvents(this.partyEvents, this.plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void stopDisco() {
|
void stopDisco() {
|
||||||
@ -560,7 +577,7 @@ public class DiscoParty {
|
|||||||
updater.cancel();
|
updater.cancel();
|
||||||
}
|
}
|
||||||
updater = null;
|
updater = null;
|
||||||
parent.getPartyMap().remove(this.mainPlayer.getName());
|
plugin.getPartyMap().remove(this.player.getName());
|
||||||
// stop listening
|
// stop listening
|
||||||
HandlerList.unregisterAll(this.partyEvents);
|
HandlerList.unregisterAll(this.partyEvents);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
name: DiscoSheep
|
name: DiscoSheep
|
||||||
main: ca.gibstick.discosheep.DiscoSheep
|
main: ca.gibstick.discosheep.DiscoSheep
|
||||||
authors: [Gibstick, RangerMauve]
|
authors: [Gibstick, RangerMauve]
|
||||||
version: 1.1.2
|
version: 1.2
|
||||||
commands:
|
commands:
|
||||||
#ds:
|
#ds:
|
||||||
#description: "Main DiscoSheep command"
|
#description: "Main DiscoSheep command"
|
||||||
@ -28,6 +28,7 @@ permissions:
|
|||||||
discosheep.party.changeperiod: true
|
discosheep.party.changeperiod: true
|
||||||
discosheep.party.spawnguests: true
|
discosheep.party.spawnguests: true
|
||||||
discosheep.party.lightning: true
|
discosheep.party.lightning: true
|
||||||
|
discosheep.party.dancefloor: true
|
||||||
discosheep.admin.*:
|
discosheep.admin.*:
|
||||||
description: Suggested permissions for administrators
|
description: Suggested permissions for administrators
|
||||||
default: op
|
default: op
|
||||||
@ -78,6 +79,9 @@ permissions:
|
|||||||
discosheep.party.lightning:
|
discosheep.party.lightning:
|
||||||
description: Allow a player to use lightning for parties
|
description: Allow a player to use lightning for parties
|
||||||
default: op
|
default: op
|
||||||
|
discosheep.party.dancefloor:
|
||||||
|
description: Allow a player to spawn a dance floor
|
||||||
|
default: op
|
||||||
# FOR BACKWARDS COMPAT FROM 1.1 TO 1.1.1
|
# FOR BACKWARDS COMPAT FROM 1.1 TO 1.1.1
|
||||||
discosheep.party:
|
discosheep.party:
|
||||||
children:
|
children:
|
||||||
|
Loading…
Reference in New Issue
Block a user