From 851b613d2e6a9e2db6ba71d19a12729888b5fe3f Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Thu, 10 Dec 2015 17:04:15 -0500 Subject: [PATCH 1/2] Now playing fix --- .../mineplex/core/noteblock/NBSReader.java | 7 +- .../mineplex/core/noteblock/NotePlayer.java | 94 +++++++++++-------- .../src/mineplex/hub/HubManager.java | 2 +- 3 files changed, 62 insertions(+), 41 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NBSReader.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NBSReader.java index 1ca887ede..e7844c9d1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NBSReader.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NBSReader.java @@ -16,10 +16,10 @@ public class NBSReader { public static NoteSong loadSong(String fileName) throws FileNotFoundException { - return loadSong(new DataInputStream(new FileInputStream(new File(fileName)))); + return loadSong(new DataInputStream(new FileInputStream(new File(fileName))), fileName); } - public static NoteSong loadSong(DataInputStream stream) + public static NoteSong loadSong(DataInputStream stream, String defaultName) { try { @@ -41,6 +41,9 @@ public class NBSReader int blocksRemoved = readInt(stream); String midiFileName = readString(stream); + if ((name == null || name.length() == 0) && defaultName != null) + name = defaultName; + HashMap layerMap = new HashMap(); // Note Block Information diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NotePlayer.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NotePlayer.java index 70e5a8c1f..941bc1dd9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NotePlayer.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NotePlayer.java @@ -1,10 +1,7 @@ package mineplex.core.noteblock; import java.util.ArrayList; -import java.util.Collection; import java.util.List; -import java.util.Objects; -import java.util.stream.Stream; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -43,38 +40,49 @@ public class NotePlayer private void startThread() { - Thread thread = new Thread(() -> { - while (!_finished) + Thread thread = new Thread(new Runnable() + { + @Override + public void run() { - _tick++; - if (_tick > _song.getLength()) + long startTime = System.currentTimeMillis(); + while (!_finished) { - if (_loop) + _tick++; + if (_tick > _song.getLength()) { - _tick = 1; + if (_loop) + { + _tick = 1; + } + else + { + _finished = true; + + _plugin.getServer().getScheduler().runTask(_plugin, new Runnable() + { + @Override + public void run() + { + SongFinishEvent event = new SongFinishEvent(_song); + _plugin.getServer().getPluginManager().callEvent(event); + } + }); + + return; + } } - else + + playTick(_tick); + + try { - _finished = true; - - _plugin.getServer().getScheduler().runTask(_plugin, () -> { - SongFinishEvent event = new SongFinishEvent(_song); - _plugin.getServer().getPluginManager().callEvent(event); - }); - - return; + Thread.sleep(_sleepMs); + } + catch (InterruptedException e) + { + e.printStackTrace(); } - } - - playTick(_tick); - - try - { - Thread.sleep(_sleepMs); - } - catch (InterruptedException e) - { - e.printStackTrace(); } } }); @@ -82,18 +90,28 @@ public class NotePlayer thread.start(); } - private void playNote(Note note, float volume, Collection players) - { - players.stream().filter(_verifier::shouldPlay).forEach((player) -> - player.playSound(player.getEyeLocation(), UtilNote.getInstrumentSound(note.getInstrument()), volume, (float) UtilNote.getPitch(note.getNote() - 33))); - } - private void playTick(int tick) { - Collection players = UtilServer.getPlayersCollection(); + Player[] playerArray = UtilServer.getPlayers(); + List players = new ArrayList<>(playerArray.length); + for (Player player : playerArray) + { + if (_verifier.shouldPlay(player)) + players.add(player); + } - float volume = _volumeMult * 1F; - _song.getLayers().stream().map(layer -> layer.getNote(tick)).filter(Objects::nonNull).forEach((note) -> playNote(note, volume, players)); + for (NoteLayer layer : _song.getLayers()) + { + Note note = layer.getNote(tick); + if (note != null) + { + float volume = _volumeMult * (layer.getVolume() / 100F); + for (Player player : players) + { + player.playSound(player.getEyeLocation(), UtilNote.getInstrumentSound(note.getInstrument()), volume, (float) UtilNote.getPitch(note.getNote() - 33)); + } + } + } } public void cancel() diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index 78bf6f694..2dd2823cb 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -261,7 +261,7 @@ public class HubManager extends MiniClientPlugin if (file.getName().endsWith(".nbs")) { System.out.println("Loading Song " + file.getPath()); - NoteSong song = NBSReader.loadSong(new DataInputStream(new FileInputStream(file))); + NoteSong song = NBSReader.loadSong(new DataInputStream(new FileInputStream(file)), file.getName().replace("_", " ").replace(".nbs", "")); if (song != null) { _songs.add(song); From 4d05bd5c50a5f82db4ad8038d32e134364331532 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Thu, 10 Dec 2015 20:53:38 -0500 Subject: [PATCH 2/2] Player count for chiss --- .../core/playerCount/PlayerCountManager.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/playerCount/PlayerCountManager.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/playerCount/PlayerCountManager.java b/Plugins/Mineplex.Core/src/mineplex/core/playerCount/PlayerCountManager.java new file mode 100644 index 000000000..c73f87d00 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/playerCount/PlayerCountManager.java @@ -0,0 +1,73 @@ +package mineplex.core.playerCount; + +import org.bukkit.event.EventHandler; +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.MiniPlugin; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.serverdata.Region; +import mineplex.serverdata.data.BungeeServer; +import mineplex.serverdata.data.DataRepository; +import mineplex.serverdata.redis.RedisDataRepository; +import mineplex.serverdata.servers.ConnectionData; +import mineplex.serverdata.servers.ServerManager; + +public class PlayerCountManager extends MiniPlugin +{ + private Region _region; + private DataRepository _repository; + private DataRepository _secondRepository; + + private volatile int _playerCount; + + public PlayerCountManager(JavaPlugin plugin) + { + super("PlayerCount", plugin); + + _region = plugin.getConfig().getBoolean("serverstatus.us") ? Region.US : Region.EU; + + _repository = new RedisDataRepository(ServerManager.getConnection(true, ServerManager.SERVER_STATUS_LABEL), ServerManager.getConnection(false, ServerManager.SERVER_STATUS_LABEL), + Region.ALL, BungeeServer.class, "bungeeServers"); + + if (_region == Region.US) + _secondRepository = new RedisDataRepository(new ConnectionData("10.81.1.156", 6379, ConnectionData.ConnectionType.MASTER, "ServerStatus"), new ConnectionData("10.81.1.156", 6377, ConnectionData.ConnectionType.SLAVE, "ServerStatus"), + Region.ALL, BungeeServer.class, "bungeeServers"); + else + _secondRepository = new RedisDataRepository(new ConnectionData("10.33.53.16", 6379, ConnectionData.ConnectionType.MASTER, "ServerStatus"), new ConnectionData("10.33.53.16", 6377, ConnectionData.ConnectionType.SLAVE, "ServerStatus"), + Region.ALL, BungeeServer.class, "bungeeServers"); + + updatePlayerCount(); + } + + private void updatePlayerCount() + { + int totalPlayers = 0; + for (BungeeServer server : _repository.getElements()) + { + totalPlayers += server.getPlayerCount(); + } + + for (BungeeServer server : _secondRepository.getElements()) + { + totalPlayers += server.getPlayerCount(); + } + + _playerCount = totalPlayers; + } + + public int getPlayerCount() + { + return _playerCount; + } + + @EventHandler + public void refresh(UpdateEvent event) + { + if (event.getType() != UpdateType.SEC) + return; + + runAsync(this::updatePlayerCount); + } + +}