GUI. getNearbyPlayers. Stuff

This commit is contained in:
Olof Larsson 2016-06-15 17:20:38 +02:00
parent fdc7935d44
commit 9d85db13b1
No known key found for this signature in database
GPG Key ID: BBEF14F97DA52474
5 changed files with 132 additions and 13 deletions

View File

@ -80,14 +80,26 @@ public class ChestGui
public List<Runnable> getRunnablesClose() { return this.runnablesClose; } public List<Runnable> getRunnablesClose() { return this.runnablesClose; }
// -------------------------------------------- // // -------------------------------------------- //
// SOUND // SOUNDS
// -------------------------------------------- // // -------------------------------------------- //
// The click sound you should hear when clicking an action slot. // This section contains all kinds of sounds.
// You can disable it by setting null. // You can disable a sound by setting it to null.
private SoundEffect soundEffect = MassiveCoreMConf.get().clickSound; // The sound you should hear when clicking an action slot.
public SoundEffect getSoundEffect() { return this.soundEffect; } private SoundEffect soundClick = MassiveCoreMConf.get().clickSound;
public ChestGui setSoundEffect(SoundEffect soundEffect) { this.soundEffect = soundEffect; return this; } public SoundEffect getSoundClick() { return this.soundClick; }
public ChestGui setSoundClick(SoundEffect soundClick) { this.soundClick = soundClick; return this; }
// The sound you should hear when opening the GUI.
private SoundEffect soundOpen = SoundEffect.valueOf("CHEST_OPEN", 0.75f, 1.0f);
public SoundEffect getSoundOpen() { return this.soundOpen; }
public ChestGui setSoundOpen(SoundEffect soundOpen) { this.soundOpen = soundOpen; return this; }
// The sound you should hear when closing the GUI.
// This sound will be skipped if another inventory was opened by the GUI action.
private SoundEffect soundClose = SoundEffect.valueOf("CHEST_CLOSE", 0.75f, 1.0f);
public SoundEffect getSoundClose() { return this.soundClose; }
public ChestGui setSoundClose(SoundEffect soundClose) { this.soundClose= soundClose; return this; }
// -------------------------------------------- // // -------------------------------------------- //
// AUTOCLOSING // AUTOCLOSING

View File

@ -1,12 +1,15 @@
package com.massivecraft.massivecore.engine; package com.massivecraft.massivecore.engine;
import org.bukkit.event.Event.Result; import org.bukkit.event.Event.Result;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import com.massivecraft.massivecore.Engine; import com.massivecraft.massivecore.Engine;
import com.massivecraft.massivecore.SoundEffect; import com.massivecraft.massivecore.SoundEffect;
@ -60,9 +63,9 @@ public class EngineMassiveCoreChestGui extends Engine
// ... set last action ... // ... set last action ...
gui.setLastAction(action); gui.setLastAction(action);
// ... then play the sound ... // ... then play click sound ...
SoundEffect soundEffect = gui.getSoundEffect(); SoundEffect sound = gui.getSoundClick();
if (soundEffect != null) soundEffect.run(event.getWhoClicked()); if (sound != null) sound.run(event.getWhoClicked());
// ... close the GUI ... // ... close the GUI ...
if (gui.isAutoclosing()) event.getView().close(); if (gui.isAutoclosing()) event.getView().close();
@ -80,12 +83,21 @@ public class EngineMassiveCoreChestGui extends Engine
final ChestGui gui = ChestGui.get(inventory); final ChestGui gui = ChestGui.get(inventory);
if (gui == null) return; if (gui == null) return;
// Runnables // Sound
SoundEffect sound = gui.getSoundOpen();
if (sound != null)
{
HumanEntity human = event.getPlayer();
sound.run(human);
}
// Later
Bukkit.getScheduler().runTask(getPlugin(), new Runnable() Bukkit.getScheduler().runTask(getPlugin(), new Runnable()
{ {
@Override @Override
public void run() public void run()
{ {
// Runnables
for (Runnable runnable : gui.getRunnablesOpen()) for (Runnable runnable : gui.getRunnablesOpen())
{ {
runnable.run(); runnable.run();
@ -94,8 +106,6 @@ public class EngineMassiveCoreChestGui extends Engine
}); });
} }
// NOTE:
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onClose(InventoryCloseEvent event) public void onClose(InventoryCloseEvent event)
{ {
@ -105,16 +115,27 @@ public class EngineMassiveCoreChestGui extends Engine
final ChestGui gui = ChestGui.get(inventory); final ChestGui gui = ChestGui.get(inventory);
if (gui == null) return; if (gui == null) return;
// Runnables // Human
final HumanEntity human = event.getPlayer();
// Later
Bukkit.getScheduler().runTask(getPlugin(), new Runnable() Bukkit.getScheduler().runTask(getPlugin(), new Runnable()
{ {
@Override @Override
public void run() public void run()
{ {
// Runnables
for (Runnable runnable : gui.getRunnablesClose()) for (Runnable runnable : gui.getRunnablesClose())
{ {
runnable.run(); runnable.run();
} }
// Sound
SoundEffect sound = gui.getSoundClose();
if (sound != null && human.getOpenInventory().getTopInventory().getType() == InventoryType.CRAFTING)
{
sound.run(human);
}
} }
}); });

View File

@ -0,0 +1,41 @@
package com.massivecraft.massivecore.event;
import org.bukkit.event.HandlerList;
// "Aknowledge" is in our mind the opposite of "Ignore".
// The purpose of this event is to decide if a unit of communication should be received or ignored.
// A unit of communication can for example be a chat message or a sound effect.
public class EventMassiveCoreAknowledge extends EventMassiveCore
{
// -------------------------------------------- //
// REQUIRED EVENT CODE
// -------------------------------------------- //
private static final HandlerList handlers = new HandlerList();
@Override public HandlerList getHandlers() { return handlers; }
public static HandlerList getHandlerList() { return handlers; }
// -------------------------------------------- //
// FIELDS
// -------------------------------------------- //
private final Object sender;
public Object getSender() { return this.sender; }
private final Object sendee;
public Object getSendee() { return this.sendee; }
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public EventMassiveCoreAknowledge(Object sender, Object sendee)
{
if (sender == null) throw new NullPointerException("sender");
if (sendee == null) throw new NullPointerException("sendee");
this.sender = sender;
this.sendee = sendee;
}
}

View File

@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
import com.google.common.base.Objects; import com.google.common.base.Objects;
import com.massivecraft.massivecore.Named; import com.massivecraft.massivecore.Named;
import com.massivecraft.massivecore.event.EventMassiveCoreAknowledge;
import com.massivecraft.massivecore.mixin.MixinDisplayName; import com.massivecraft.massivecore.mixin.MixinDisplayName;
import com.massivecraft.massivecore.mixin.MixinMessage; import com.massivecraft.massivecore.mixin.MixinMessage;
import com.massivecraft.massivecore.mixin.MixinPlayed; import com.massivecraft.massivecore.mixin.MixinPlayed;
@ -184,6 +185,17 @@ public abstract class SenderEntity<E extends SenderEntity<E>> extends Entity<E>
return MixinDisplayName.get().getDisplayNameMson(this.getId(), watcherObject); return MixinDisplayName.get().getDisplayNameMson(this.getId(), watcherObject);
} }
// -------------------------------------------- //
// AKNOWLEDGE
// -------------------------------------------- //
public boolean isAcknowledging(Object sender)
{
EventMassiveCoreAknowledge event = new EventMassiveCoreAknowledge(sender, this);
event.run();
return ! event.isCancelled();
}
// -------------------------------------------- // // -------------------------------------------- //
// MSG / MESSAGE // MSG / MESSAGE
// -------------------------------------------- // // -------------------------------------------- //

View File

@ -177,6 +177,39 @@ public class MUtil
} }
} }
// -------------------------------------------- //
// GET NEARBY PLAYERS
// -------------------------------------------- //
public static Set<Player> getNearbyPlayers(Entity entity, double raidus, boolean includeSelf)
{
Set<Player> ret = getNearbyPlayers(entity.getLocation(), raidus);
if (isPlayer(entity) && !includeSelf) ret.remove(entity);
return ret;
}
public static Set<Player> getNearbyPlayers(Location location, double radius)
{
// Create
Set<Player> ret = new MassiveSet<>();
// Fill
final World world = location.getWorld();
final double radiusSquared = radius * radius;
for (Player player : MUtil.getOnlinePlayers())
{
Location playerLocation = player.getLocation();
World playerWorld = playerLocation.getWorld();
if ( ! world.equals(playerWorld)) continue;
double distanceSquared = location.distanceSquared(playerLocation);
if (distanceSquared > radiusSquared) continue;
ret.add(player);
}
// Return
return ret;
}
// -------------------------------------------- // // -------------------------------------------- //
// IS SYNCHRONOUS // IS SYNCHRONOUS
// -------------------------------------------- // // -------------------------------------------- //