Skip to content

Commit

Permalink
Merge pull request #18 from MrEAlderson/master
Browse files Browse the repository at this point in the history
Minor changes
  • Loading branch information
MetallicGoat authored Sep 2, 2023
2 parents 4c0599b + 7657e85 commit e1795b1
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 30 deletions.
11 changes: 6 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,19 @@
<scope>system</scope>
<systemPath>${basedir}/libs/public/HotbarManager-1.0-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>de.marcely.bedwars</groupId>
<artifactId>API</artifactId>
<version>5.2.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>me.harsh</groupId>
<artifactId>PrestigesAddon</artifactId>
<version>1.1.0</version>
<scope>system</scope>
<systemPath>${basedir}/libs/private/prestiges.jar</systemPath>
</dependency>
<dependency>
<groupId>de.marcely.bedwars</groupId>
<artifactId>API</artifactId>
<version>5.2.3</version>
</dependency>
<!-- USED FOR BETA TESTING
<dependency>
<groupId>de.marcely.bedwars</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,41 @@
import de.marcely.bedwars.api.BedwarsAPI;
import de.marcely.bedwars.api.arena.Arena;
import de.marcely.bedwars.api.arena.ArenaStatus;
import de.marcely.bedwars.api.event.arena.ArenaStatusChangeEvent;
import de.marcely.bedwars.api.event.player.PlayerJoinArenaEvent;
import de.marcely.bedwars.api.event.player.PlayerQuitArenaEvent;
import de.marcely.bedwars.api.message.Message;
import de.marcely.bedwars.tools.Helper;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import me.metallicgoat.tweaksaddon.MBedwarsTweaksPlugin;
import me.metallicgoat.tweaksaddon.config.MainConfig;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.scheduler.BukkitTask;

public class PlaceholderUpdating implements Listener {

private BukkitTask asyncUpdatingTask = null;
private final Map<Arena, BukkitTask> tickingArenas = new ConcurrentHashMap<>();

// TODO: NOTE: Updates every tick
private void startUpdatingTime() {
asyncUpdatingTask = Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(MBedwarsTweaksPlugin.getInstance(), () -> {
for (Arena arena : BedwarsAPI.getGameAPI().getArenas()) {
private BukkitTask createScheduler(Arena arena) {
long delay = 0;

if ((arena.getStatus() == ArenaStatus.RUNNING && MainConfig.scoreboard_updating_enabled_in_game))
switch (arena.getStatus()) {
case LOBBY:
case END_LOBBY:
delay = (int) Math.max(0, (arena.getLobbyTimeRemaining()%1)*20D);
break;
case RUNNING:
delay = (System.currentTimeMillis() - arena.getRoundStartTime())/50;
break;
}

return Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(MBedwarsTweaksPlugin.getInstance(), () -> {
if (arena.getStatus() == ArenaStatus.RUNNING && MainConfig.scoreboard_updating_enabled_in_game)
arena.updateScoreboard();
else if (arena.getStatus() == ArenaStatus.LOBBY && MainConfig.scoreboard_updating_enabled_in_lobby)
arena.updateScoreboard();
Expand All @@ -35,31 +48,52 @@ else if (arena.getStatus() == ArenaStatus.LOBBY && MainConfig.scoreboard_updatin
for (Player player : arena.getPlayers())
BedwarsAPI.getNMSHelper().showActionbar(player, Message.build(Helper.get().replacePAPIPlaceholders(MainConfig.custom_action_bar_message, player)).done());
}
}
}, 0L, 20L);
}, delay, 20L);
}

private void startScheduler(Arena arena) {
this.tickingArenas.computeIfAbsent(arena, this::createScheduler);
}

private void stopScheduler(Arena arena) {
final BukkitTask task = this.tickingArenas.remove(arena);

if (task != null)
task.cancel();
}

@EventHandler
public void onPlayerJoin(PlayerJoinArenaEvent event) {
if (asyncUpdatingTask == null)
startUpdatingTime();
final Arena arena = event.getArena();

if (arena.getPlayers().size() >= 2) // already added
return;

startScheduler(arena);
}

@EventHandler
public void onPlayerLeave(PlayerQuitArenaEvent event) {
if (notUsed() && asyncUpdatingTask != null){
asyncUpdatingTask.cancel();
asyncUpdatingTask = null;
}
final Arena arena = event.getArena();

if (!arena.getPlayers().isEmpty()) // not empty yet
return;

stopScheduler(arena);
}

private boolean notUsed() {
// Dont kill task if players are playing
for (Arena arena : BedwarsAPI.getGameAPI().getArenas())
if (!arena.getPlayers().isEmpty())
return false;
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onArenaStatusChange(ArenaStatusChangeEvent event) {
// resync scheduler
final Arena arena = event.getArena();
final ArenaStatus newStatus = event.getNewStatus();

if (newStatus != ArenaStatus.RUNNING && newStatus != ArenaStatus.END_LOBBY)
return;

// Kill task
return true;
Bukkit.getScheduler().runTaskLaterAsynchronously(MBedwarsTweaksPlugin.getInstance(), () -> {
stopScheduler(arena);
startScheduler(arena);
}, 1);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import de.marcely.bedwars.api.event.arena.RoundEndEvent;
import de.marcely.bedwars.api.event.player.PlayerIngameRespawnEvent;
import me.harsh.prestigesaddon.storage.PlayerData;
import de.marcely.bedwars.tools.Helper;
import java.util.function.Consumer;
import me.harsh.prestigesaddon.PrestigeAddon;
import me.harsh.prestigesaddon.api.PrestigePlayer;
import me.metallicgoat.tweaksaddon.DependType;
import me.metallicgoat.tweaksaddon.config.MainConfig;
import me.metallicgoat.tweaksaddon.DependManager;
Expand Down Expand Up @@ -34,9 +37,25 @@ private void setPlayerLevel(Player player) {
if (!DependManager.isPresent(DependType.PRESTIGE_ADDON))
return;

final PlayerData data = PlayerData.from(player);
getPrestigePlayer(player, data -> {
player.setLevel(data.getStars());
player.setExp(data.getProgress() /* It goes from 0 - 100 */ / 100F);
});
}

private static void getPrestigePlayer(Player player, Consumer<PrestigePlayer> callback) {
{
final PrestigePlayer cached = PrestigeAddon.getInstance().getPlayer(player);

if (cached != null) {
callback.accept(cached);
return;
}
}

player.setLevel(data.getStars());
player.setExp((float) data.getProgressDouble());
PrestigeAddon.getInstance().getFromStorage(
player.getUniqueId(),
player.getName(),
data -> Helper.get().synchronize(() -> callback.accept(data)));
}
}

0 comments on commit e1795b1

Please sign in to comment.