Skip to content

Commit

Permalink
Merge pull request #4 from tarna/master
Browse files Browse the repository at this point in the history
Switch to using Player instead of UUID
  • Loading branch information
Kooperlol authored May 7, 2024
2 parents 9100370 + a03fe8e commit 9430f92
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import org.bukkit.event.player.PlayerQuitEvent;

import java.util.List;
import java.util.UUID;

public class StageBoundListener implements Listener {

Expand All @@ -31,7 +30,7 @@ public class StageBoundListener implements Listener {
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player.getUniqueId());
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player);
for (Stage stage : stages) {
if (stage.isLocationWithin(event.getTo())) {
new PlayerEnterStageEvent(stage, player).callEvent();
Expand All @@ -53,7 +52,7 @@ public void onPlayerMove(PlayerMoveEvent event) {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player.getUniqueId());
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player);
for (Stage stage : stages) {
if (stage.isLocationWithin(player.getLocation())) {
new PlayerEnterStageEvent(stage, player).callEvent();
Expand All @@ -72,7 +71,7 @@ public void onPlayerJoin(PlayerJoinEvent event) {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer();
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player.getUniqueId());
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player);
for (Stage stage : stages) {
new PlayerExitStageEvent(stage, player).callEvent();
}
Expand Down Expand Up @@ -119,8 +118,7 @@ public void onPlayerStageLeave(PlayerLeaveStageEvent event) {
@EventHandler
public void onPlayerEnterStage(PlayerEnterStageEvent event) {
if (!event.getStage().getAudience().isArePlayersHidden()) return;
for (UUID uuid : event.getStage().getAudience().getPlayers()) {
Player player = Blockify.getInstance().getServer().getPlayer(uuid);
for (Player player : event.getStage().getAudience().getPlayers()) {
if (player == null) continue;
player.hidePlayer(Blockify.getInstance(), event.getPlayer());
if (!event.getStage().isLocationWithin(player.getLocation())) continue;
Expand All @@ -139,8 +137,7 @@ public void onPlayerEnterStage(PlayerEnterStageEvent event) {
@EventHandler
public void onPlayerExitStage(PlayerExitStageEvent event) {
if (!event.getStage().getAudience().isArePlayersHidden()) return;
for (UUID uuid : event.getStage().getAudience().getPlayers()) {
Player player = Blockify.getInstance().getServer().getPlayer(uuid);
for (Player player : event.getStage().getAudience().getPlayers()) {
if (player == null) continue;
player.showPlayer(Blockify.getInstance(), event.getPlayer());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
@Getter
public class BlockChangeManager {

private final ConcurrentHashMap<UUID, BukkitTask> blockChangeTasks;
private final ConcurrentHashMap<UUID, Vector<Long>> chunksBeingSent;
private final ConcurrentHashMap<Player, BukkitTask> blockChangeTasks;
private final ConcurrentHashMap<Player, Vector<Long>> chunksBeingSent;
private final ConcurrentHashMap<BlockData, Integer> blockDataToId;

public BlockChangeManager() {
Expand Down Expand Up @@ -66,8 +66,7 @@ public void sendBlockChanges(Stage stage, Audience audience, ConcurrentHashMap<B

// If there is only one block change, send it to the player directly
if (blockChanges.size() == 1) {
for (UUID uuid : audience.getPlayers()) {
Player onlinePlayer = Bukkit.getPlayer(uuid);
for (Player onlinePlayer : audience.getPlayers()) {
if (onlinePlayer != null) {
for (Map.Entry<BlockifyChunk, ConcurrentHashMap<BlockifyPosition, BlockData>> entry : blockChanges.entrySet()) {
BlockifyPosition position = entry.getValue().keySet().iterator().next();
Expand All @@ -80,8 +79,7 @@ public void sendBlockChanges(Stage stage, Audience audience, ConcurrentHashMap<B
}

// Send multiple block changes to the players
for (UUID uuid : audience.getPlayers()) {
Player onlinePlayer = Bukkit.getPlayer(uuid);
for (Player onlinePlayer : audience.getPlayers()) {
if (onlinePlayer == null) continue;
Location playerLocation = onlinePlayer.getLocation();

Expand All @@ -107,13 +105,13 @@ public void sendBlockChanges(Stage stage, Audience audience, ConcurrentHashMap<B
});

// Create a task to send a chunk to the player every tick
blockChangeTasks.put(uuid, Bukkit.getScheduler().runTaskTimer(Blockify.getInstance(), () -> {
blockChangeTasks.put(onlinePlayer, Bukkit.getScheduler().runTaskTimer(Blockify.getInstance(), () -> {
// Loop through chunks per tick
for (int i = 0; i < stage.getChunksPerTick(); i++) {
// If the chunk index is greater than the chunks to send length
if (chunkIndex.get() >= chunksToSend.size()) {
// Safely cancel the task and remove it from the map
blockChangeTasks.computeIfPresent(uuid, (key, task) -> {
blockChangeTasks.computeIfPresent(onlinePlayer, (key, task) -> {
task.cancel();
return null; // Remove the task
});
Expand Down Expand Up @@ -147,9 +145,9 @@ public void sendChunkPacket(Stage stage, Player player, BlockifyChunk chunk, Con
User user = PacketEvents.getAPI().getPlayerManager().getUser(player);

// Initialize the chunksBeingSent map for this player if not present
chunksBeingSent.computeIfAbsent(player.getUniqueId(), k -> new Vector<>());
chunksBeingSent.computeIfAbsent(player, k -> new Vector<>());

Vector<Long> playerChunksBeingSent = chunksBeingSent.get(player.getUniqueId());
Vector<Long> playerChunksBeingSent = chunksBeingSent.get(player);

// Ensure the chunk isn't already being sent
if (playerChunksBeingSent.contains(chunk.getChunkKey())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
import codes.kooper.blockify.events.DeleteStageEvent;
import codes.kooper.blockify.models.Stage;
import lombok.Getter;
import org.bukkit.entity.Player;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Getter
public class StageManager {
Expand Down Expand Up @@ -59,7 +59,7 @@ public boolean hasStage(String name) {
* Get all stages
* @return List of stages
*/
public List<Stage> getStages(UUID player) {
public List<Stage> getStages(Player player) {
return stages.values().stream().filter(stage -> stage.getAudience().getPlayers().contains(player)).toList();
}
}
25 changes: 12 additions & 13 deletions src/main/java/codes/kooper/blockify/models/Audience.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,31 @@
import codes.kooper.blockify.Blockify;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.entity.Player;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

@Setter
@Getter
public class Audience {
private boolean arePlayersHidden = false;
private final Set<UUID> players;
private final Map<UUID, Float> miningSpeeds;
private boolean arePlayersHidden;
private final Set<Player> players;
private final Map<Player, Float> miningSpeeds;

/**
* @param players The players to show the block to
*/
public Audience(Set<UUID> players) {
this.players = players;
this.miningSpeeds = new HashMap<>();
public Audience(Set<Player> players) {
this(players, false);
}

/**
* @param players The players to show the block to
* @param arePlayersHidden Whether the players should be hidden
*/
public Audience(Set<UUID> players, boolean arePlayersHidden) {
public Audience(Set<Player> players, boolean arePlayersHidden) {
this.players = players;
this.arePlayersHidden = arePlayersHidden;
this.miningSpeeds = new HashMap<>();
Expand All @@ -38,7 +37,7 @@ public Audience(Set<UUID> players, boolean arePlayersHidden) {
* @param player The player to add
* @return The set of players
*/
public Set<UUID> addPlayer(UUID player) {
public Set<Player> addPlayer(Player player) {
players.add(player);
return players;
}
Expand All @@ -47,7 +46,7 @@ public Set<UUID> addPlayer(UUID player) {
* @param player The player to remove
* @return The set of players
*/
public Set<UUID> removePlayer(UUID player) {
public Set<Player> removePlayer(Player player) {
players.remove(player);
return players;
}
Expand All @@ -57,7 +56,7 @@ public Set<UUID> removePlayer(UUID player) {
* @param player The player
* @param speed The speed
*/
public void setMiningSpeed(UUID player, float speed) {
public void setMiningSpeed(Player player, float speed) {
if (speed <= 0 || speed == 1) {
Blockify.getInstance().getLogger().warning("Invalid mining speed for player " + player + ": " + speed);
return;
Expand All @@ -69,7 +68,7 @@ public void setMiningSpeed(UUID player, float speed) {
* Resets the mining speed for a player
* @param player The player
*/
public void resetMiningSpeed(UUID player) {
public void resetMiningSpeed(Player player) {
miningSpeeds.remove(player);
}

Expand All @@ -78,7 +77,7 @@ public void resetMiningSpeed(UUID player) {
* @param player The player
* @return The mining speed
*/
public float getMiningSpeed(UUID player) {
public float getMiningSpeed(Player player) {
return miningSpeeds.getOrDefault(player, 1f);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public void onPacketPlayReceive(PacketPlayReceiveEvent event) {
BlockifyPosition position = new BlockifyPosition(wrapper.getBlockPosition().getX(), wrapper.getBlockPosition().getY(), wrapper.getBlockPosition().getZ());

// Get stages the player is in. If the player is not in any stages, return.
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player.getUniqueId());
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player);
if (stages == null || stages.isEmpty()) {
return;
}
Expand All @@ -57,7 +57,7 @@ public void onPacketPlayReceive(PacketPlayReceiveEvent event) {
}

// Check if player has custom mining speed, if so, handle custom digging, else handle normal digging
if (view.getStage().getAudience().getMiningSpeed(player.getUniqueId()) != 1) {
if (view.getStage().getAudience().getMiningSpeed(player) != 1) {
Blockify.getInstance().getMiningUtils().handleCustomDigging(player, view, actionType, blockData, position);
} else {
Blockify.getInstance().getMiningUtils().handleNormalDigging(player, view, actionType, blockData, position);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public void onPacketPlayReceive(PacketPlayReceiveEvent event) {
Player player = (Player) event.getPlayer();

// Get the stages the player is in. If the player is not in any stages, return.
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player.getUniqueId());
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player);
if (stages == null || stages.isEmpty()) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public void onPacketPlaySend(PacketPlaySendEvent event) {
int chunkZ = chunkData.getColumn().getZ();

// Get the stages the player is in. If the player is not in any stages, return.
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player.getUniqueId());
List<Stage> stages = Blockify.getInstance().getStageManager().getStages(player);
if (stages == null || stages.isEmpty()) {
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/codes/kooper/blockify/utils/MiningUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ public void updateBlockStage(Player player, BlockifyPosition position, BlockData
return;
}
// If the time difference between the last updated time and the current time is greater than a 1/9th of the mining time, update the block stage
if (System.currentTimeMillis() - blockStage.getLastUpdated() > (calculateMiningTimeInMilliseconds(blockData, player) / 9) * view.getStage().getAudience().getMiningSpeed(player.getUniqueId())) {
if (System.currentTimeMillis() - blockStage.getLastUpdated() > (calculateMiningTimeInMilliseconds(blockData, player) / 9) * view.getStage().getAudience().getMiningSpeed(player)) {
// Increment block stage
blockStage.setStage((byte) (blockStage.getStage() + 1));
// Update last updated time to current time
Expand Down

0 comments on commit 9430f92

Please sign in to comment.