move party-related listeners to new class, and only listen during parties
This commit is contained in:
parent
7fb34e92d6
commit
12cbf80d55
@ -16,6 +16,7 @@ import org.bukkit.entity.Sheep;
|
|||||||
import org.bukkit.FireworkEffect;
|
import org.bukkit.FireworkEffect;
|
||||||
import org.bukkit.FireworkEffect.Builder;
|
import org.bukkit.FireworkEffect.Builder;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.inventory.meta.FireworkMeta;
|
import org.bukkit.inventory.meta.FireworkMeta;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@ -25,7 +26,7 @@ import org.bukkit.util.Vector;
|
|||||||
*/
|
*/
|
||||||
public class DiscoParty {
|
public class DiscoParty {
|
||||||
|
|
||||||
private DiscoSheep ds;
|
private DiscoSheep parent;
|
||||||
private Player player;
|
private Player player;
|
||||||
private ArrayList<Sheep> sheepList = new ArrayList<Sheep>();
|
private ArrayList<Sheep> sheepList = new ArrayList<Sheep>();
|
||||||
private ArrayList<LivingEntity> guestList = new ArrayList<LivingEntity>();
|
private ArrayList<LivingEntity> guestList = new ArrayList<LivingEntity>();
|
||||||
@ -42,6 +43,7 @@ public class DiscoParty {
|
|||||||
private HashMap<String, Integer> guestNumbers = new HashMap<String, Integer>();
|
private HashMap<String, Integer> guestNumbers = new HashMap<String, Integer>();
|
||||||
private static HashMap<String, Integer> defaultGuestNumbers = new HashMap<String, Integer>();
|
private static HashMap<String, Integer> defaultGuestNumbers = new HashMap<String, Integer>();
|
||||||
private static HashMap<String, Integer> maxGuestNumbers = new HashMap<String, Integer>();
|
private static HashMap<String, Integer> maxGuestNumbers = new HashMap<String, Integer>();
|
||||||
|
static boolean partyOnJoin = true;
|
||||||
private boolean doFireworks = false;
|
private boolean doFireworks = false;
|
||||||
private boolean doJump = true;
|
private boolean doJump = true;
|
||||||
private int duration, period, radius, sheep;
|
private int duration, period, radius, sheep;
|
||||||
@ -63,9 +65,10 @@ public class DiscoParty {
|
|||||||
DyeColor.WHITE
|
DyeColor.WHITE
|
||||||
};
|
};
|
||||||
private Random r;
|
private Random r;
|
||||||
|
private PartyEvents partyEvents;
|
||||||
|
|
||||||
public DiscoParty(DiscoSheep parent, Player player) {
|
public DiscoParty(DiscoSheep parent, Player player) {
|
||||||
this.ds = parent;
|
this.parent = parent;
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.duration = DiscoParty.defaultDuration;
|
this.duration = DiscoParty.defaultDuration;
|
||||||
this.period = DiscoParty.defaultPeriod;
|
this.period = DiscoParty.defaultPeriod;
|
||||||
@ -76,7 +79,7 @@ public class DiscoParty {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public DiscoParty(DiscoSheep parent) {
|
public DiscoParty(DiscoSheep parent) {
|
||||||
this.ds = parent;
|
this.parent = parent;
|
||||||
this.duration = DiscoParty.defaultDuration;
|
this.duration = DiscoParty.defaultDuration;
|
||||||
this.period = DiscoParty.defaultPeriod;
|
this.period = DiscoParty.defaultPeriod;
|
||||||
this.radius = DiscoParty.defaultRadius;
|
this.radius = DiscoParty.defaultRadius;
|
||||||
@ -88,7 +91,8 @@ public class DiscoParty {
|
|||||||
// copy but with new player
|
// copy but with new player
|
||||||
// used for /ds other and /ds all
|
// used for /ds other and /ds all
|
||||||
public DiscoParty DiscoParty(Player player) {
|
public DiscoParty DiscoParty(Player player) {
|
||||||
DiscoParty newParty = new DiscoParty(this.ds, player);
|
DiscoParty newParty;
|
||||||
|
newParty = new DiscoParty(this.parent, player);
|
||||||
newParty.doFireworks = this.doFireworks;
|
newParty.doFireworks = this.doFireworks;
|
||||||
newParty.duration = this.duration;
|
newParty.duration = this.duration;
|
||||||
newParty.period = this.period;
|
newParty.period = this.period;
|
||||||
@ -435,7 +439,7 @@ public class DiscoParty {
|
|||||||
|
|
||||||
void scheduleUpdate() {
|
void scheduleUpdate() {
|
||||||
updater = new DiscoUpdater(this);
|
updater = new DiscoUpdater(this);
|
||||||
updater.runTaskLater(ds, this.period);
|
updater.runTaskLater(parent, this.period);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@ -448,13 +452,16 @@ public class DiscoParty {
|
|||||||
this.period = period;
|
this.period = period;
|
||||||
this.duration = duration;
|
this.duration = duration;
|
||||||
this.scheduleUpdate();
|
this.scheduleUpdate();
|
||||||
ds.getPartyMap().put(this.player.getName(), this);
|
parent.getPartyMap().put(this.player.getName(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void startDisco() {
|
void startDisco() {
|
||||||
this.spawnAll(sheep, radius);
|
this.spawnAll(sheep, radius);
|
||||||
this.scheduleUpdate();
|
this.scheduleUpdate();
|
||||||
ds.getPartyMap().put(this.player.getName(), this);
|
parent.getPartyMap().put(this.player.getName(), this);
|
||||||
|
// start listening
|
||||||
|
this.partyEvents = new PartyEvents(this.parent);
|
||||||
|
parent.getServer().getPluginManager().registerEvents(this.partyEvents, this.parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void stopDisco() {
|
void stopDisco() {
|
||||||
@ -464,6 +471,8 @@ public class DiscoParty {
|
|||||||
updater.cancel();
|
updater.cancel();
|
||||||
}
|
}
|
||||||
updater = null;
|
updater = null;
|
||||||
ds.getPartyMap().remove(this.player.getName());
|
parent.getPartyMap().remove(this.player.getName());
|
||||||
|
// stop listening
|
||||||
|
HandlerList.unregisterAll(this.partyEvents);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,13 +24,14 @@ public final class DiscoSheep extends JavaPlugin {
|
|||||||
static final String PERMISSION_ONJOIN = "discosheep.onjoin";
|
static final String PERMISSION_ONJOIN = "discosheep.onjoin";
|
||||||
static final String PERMISSION_SPAWNGUESTS = "discosheep.spawnguests";
|
static final String PERMISSION_SPAWNGUESTS = "discosheep.spawnguests";
|
||||||
Map<String, DiscoParty> parties = new HashMap<String, DiscoParty>();
|
Map<String, DiscoParty> parties = new HashMap<String, DiscoParty>();
|
||||||
private BaaBaaBlockSheepEvents blockEvents = new BaaBaaBlockSheepEvents(this);
|
private GlobalEvents globalEvents = new GlobalEvents(this);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
getCommand("ds").setExecutor(new DiscoSheepCommandExecutor(this));
|
getCommand("ds").setExecutor(new DiscoSheepCommandExecutor(this));
|
||||||
getServer().getPluginManager().registerEvents(blockEvents, this);
|
getServer().getPluginManager().registerEvents(globalEvents, this);
|
||||||
|
|
||||||
|
getConfig().addDefault("party-on-join.enabled", DiscoParty.partyOnJoin);
|
||||||
getConfig().addDefault("max.sheep", DiscoParty.maxSheep);
|
getConfig().addDefault("max.sheep", DiscoParty.maxSheep);
|
||||||
getConfig().addDefault("max.radius", DiscoParty.maxRadius);
|
getConfig().addDefault("max.radius", DiscoParty.maxRadius);
|
||||||
getConfig().addDefault("max.duration", toSeconds_i(DiscoParty.maxDuration));
|
getConfig().addDefault("max.duration", toSeconds_i(DiscoParty.maxDuration));
|
||||||
@ -65,6 +66,7 @@ public final class DiscoSheep extends JavaPlugin {
|
|||||||
getConfig().options().copyDefaults(true);
|
getConfig().options().copyDefaults(true);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
|
|
||||||
|
DiscoParty.partyOnJoin = getConfig().getBoolean("party-on-join.enabled");
|
||||||
DiscoParty.maxSheep = getConfig().getInt("max.sheep");
|
DiscoParty.maxSheep = getConfig().getInt("max.sheep");
|
||||||
DiscoParty.maxRadius = getConfig().getInt("max.radius");
|
DiscoParty.maxRadius = getConfig().getInt("max.radius");
|
||||||
DiscoParty.maxDuration = toTicks(getConfig().getInt("max.duration"));
|
DiscoParty.maxDuration = toTicks(getConfig().getInt("max.duration"));
|
||||||
|
40
src/ca/gibstick/discosheep/GlobalEvents.java
Normal file
40
src/ca/gibstick/discosheep/GlobalEvents.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* BaaBaaBlockSheep have you any wool?
|
||||||
|
* Nope, event got cancelled.
|
||||||
|
* Also listens to other events, not just sheep events
|
||||||
|
*/
|
||||||
|
package ca.gibstick.discosheep;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Mauve
|
||||||
|
*/
|
||||||
|
public class GlobalEvents implements Listener {
|
||||||
|
|
||||||
|
DiscoSheep parent;
|
||||||
|
|
||||||
|
public GlobalEvents(DiscoSheep parent) {
|
||||||
|
this.parent = parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler (priority = EventPriority.MONITOR)
|
||||||
|
public void onPlayerQuitEvent(PlayerQuitEvent e) {
|
||||||
|
String name = e.getPlayer().getName();
|
||||||
|
parent.stopParty(name);
|
||||||
|
// stop party on player quit or else it will CONTINUE FOR ETERNITY
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler (priority = EventPriority.MONITOR)
|
||||||
|
public void onPlayerJoinEvent(PlayerJoinEvent e) {
|
||||||
|
Player player = e.getPlayer();
|
||||||
|
parent.partyOnJoin(player);
|
||||||
|
}
|
||||||
|
}
|
70
src/ca/gibstick/discosheep/PartyEvents.java
Normal file
70
src/ca/gibstick/discosheep/PartyEvents.java
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package ca.gibstick.discosheep;
|
||||||
|
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Sheep;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
|
import org.bukkit.event.entity.EntityTargetEvent;
|
||||||
|
import org.bukkit.event.player.PlayerShearEntityEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Charlie
|
||||||
|
*/
|
||||||
|
public class PartyEvents implements Listener {
|
||||||
|
|
||||||
|
DiscoSheep parent;
|
||||||
|
|
||||||
|
public PartyEvents(DiscoSheep parent) {
|
||||||
|
this.parent = parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
// prevent sheep shearing
|
||||||
|
@EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onPlayerShear(PlayerShearEntityEvent e) {
|
||||||
|
if (e.getEntity() instanceof Sheep) {
|
||||||
|
for (DiscoParty party : parent.getParties()) {
|
||||||
|
if (party.getSheepList().contains((Sheep) e.getEntity())) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// actually make sheep and other guests invincible
|
||||||
|
@EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onLivingEntityDamageEvent(EntityDamageEvent e) {
|
||||||
|
if (e.getEntity() instanceof Sheep) {
|
||||||
|
for (DiscoParty party : parent.getParties()) {
|
||||||
|
if (party.getSheepList().contains((Sheep) e.getEntity())) {
|
||||||
|
{
|
||||||
|
party.jump((LivingEntity) e.getEntity()); // for kicks
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (DiscoParty party : parent.getParties()) {
|
||||||
|
if (party.getGuestList().contains(e.getEntity())) {
|
||||||
|
party.jump((LivingEntity) e.getEntity());
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
parent.getLogger().log(Level.INFO, "Debug: EVENT TRIGGERED");
|
||||||
|
}
|
||||||
|
|
||||||
|
// prevent uninvited guests from targetting players
|
||||||
|
@EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onEntityTargetLivingEntityEvent(EntityTargetEvent e) {
|
||||||
|
for (DiscoParty party : parent.getParties()) {
|
||||||
|
if (party.getGuestList().contains(e.getEntity())) { // safe; event is only triggered by LivingEntity targetting LivingEntity
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user