Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import net.swofty.type.generic.tab.TablistModule;
import net.swofty.type.bedwarslobby.tab.BedWarsPlayersOnlineModule;
import net.swofty.type.lobby.LobbyTypeLoader;
import net.swofty.type.lobby.events.LobbyBlockBreak;
import net.swofty.type.lobby.events.LobbyItemEvents;
import net.swofty.type.lobby.events.LobbyLaunchPadEvents;
import net.swofty.type.lobby.events.LobbyPlayerJoinEvents;
Expand All @@ -38,6 +39,7 @@
import net.swofty.type.lobby.item.impl.ProfileItem;
import net.swofty.type.lobby.launchpad.LaunchPad;
import net.swofty.type.lobby.launchpad.LaunchPadHandler;
import net.swofty.type.lobby.parkour.LobbyParkourManager;
import org.jetbrains.annotations.Nullable;
import org.tinylog.Logger;

Expand Down Expand Up @@ -88,9 +90,7 @@ public void afterInitialize(MinecraftServer server) {
BedWarsLeaderboardAggregator.initialize();

// Schedule hologram updates every 2 seconds
MinecraftServer.getSchedulerManager().buildTask(() -> {
PlayerHolograms.updateExternalHolograms();
}).delay(TaskSchedule.seconds(5))
MinecraftServer.getSchedulerManager().buildTask(PlayerHolograms::updateExternalHolograms).delay(TaskSchedule.seconds(5))
.repeat(TaskSchedule.seconds(2))
.schedule();
}
Expand All @@ -112,6 +112,11 @@ public Map<Integer, LobbyItem> getHotbarItems() {
);
}

@Override
public LobbyParkourManager getParkourManager() {
return null;
}

@Override
public List<ServiceType> getRequiredServices() {
return List.of(ServiceType.ORCHESTRATOR);
Expand Down Expand Up @@ -150,6 +155,7 @@ public List<HypixelEventClass> getTraditionalEvents() {
events.add(new LobbyItemEvents());
events.add(new LobbyLaunchPadEvents());
events.add(new LobbyPlayerJoinEvents());
events.add(new LobbyBlockBreak());
return events;
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,8 @@ DatapointAchievementData.class, new DatapointAchievementData("achievement_data")

QUEST_DATA("quest_data",
DatapointQuestData.class, new DatapointQuestData("quest_data")),

PARKOUR_DATA("parkour_data", DatapointParkourData.class, new DatapointParkourData("parkour_data"))
;

@Getter private final String key;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package net.swofty.type.generic.data.datapoints;

import lombok.Getter;
import net.swofty.commons.protocol.JacksonSerializer;
import net.swofty.type.generic.data.Datapoint;

import java.util.HashMap;
import java.util.Map;

public class DatapointParkourData extends Datapoint<Map<DatapointParkourData.ParkourType, Long>> {
private static final JacksonSerializer<Map<ParkourType, Long>> serializer = new JacksonSerializer<>((Class) Map.class);

public DatapointParkourData(String key) {
super(key, new HashMap<>(), serializer);
}

@Getter
public enum ParkourType {
PROTOTYPE_LOBBY
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import net.swofty.type.lobby.item.LobbyItem;
import net.swofty.type.lobby.item.LobbyItemHandler;
import net.swofty.type.lobby.launchpad.LaunchPad;
import net.swofty.type.lobby.parkour.LobbyParkourManager;
import net.swofty.type.lobby.parkour.Parkour;
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.Map;
Expand All @@ -27,4 +30,10 @@ public interface LobbyTypeLoader extends HypixelTypeLoader {
* Returns Map<slot, LobbyItem> - only items in map are given to players.
*/
Map<Integer, LobbyItem> getHotbarItems();

default Parkour getParkour() {
return null;
}

@Nullable LobbyParkourManager getParkourManager();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package net.swofty.type.lobby.events;

import net.minestom.server.event.player.PlayerBlockBreakEvent;
import net.swofty.type.generic.event.EventNodes;
import net.swofty.type.generic.event.HypixelEvent;
import net.swofty.type.generic.event.HypixelEventClass;

public class LobbyBlockBreak implements HypixelEventClass {

@HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = false)
public void onBlockBreak(PlayerBlockBreakEvent event) {
event.setCancelled(true);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package net.swofty.type.lobby.events;

import net.kyori.adventure.key.Key;
import net.kyori.adventure.sound.Sound;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.event.player.PlayerDisconnectEvent;
import net.minestom.server.event.player.PlayerMoveEvent;
import net.minestom.server.event.player.PlayerSpawnEvent;
import net.swofty.type.generic.HypixelConst;
import net.swofty.type.generic.event.EventNodes;
import net.swofty.type.generic.event.HypixelEvent;
import net.swofty.type.generic.event.HypixelEventClass;
import net.swofty.type.generic.user.HypixelPlayer;
import net.swofty.type.generic.utility.MathUtility;
import net.swofty.type.lobby.LobbyTypeLoader;
import net.swofty.type.lobby.parkour.LobbyParkourManager;

import java.util.HashMap;
import java.util.UUID;

public class LobbyParkourEvents implements HypixelEventClass {

private final HashMap<UUID, Long> lastClickedTimes = new HashMap<>();

@HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = false)
public void onPlayerJoin(PlayerSpawnEvent event) {
HypixelPlayer player = (HypixelPlayer) event.getPlayer();
LobbyTypeLoader loader = (LobbyTypeLoader) HypixelConst.getTypeLoader();

LobbyParkourManager parkourManager = loader.getParkourManager();
if (parkourManager == null) return;

parkourManager.updateForPlayer(HypixelConst.getInstanceContainer(), player);
}

@HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = false)
public void onPlayerDisconnect(PlayerDisconnectEvent event) {
HypixelPlayer player = (HypixelPlayer) event.getPlayer();
lastClickedTimes.remove(player.getUuid());

LobbyTypeLoader loader = (LobbyTypeLoader) HypixelConst.getTypeLoader();
LobbyParkourManager parkourManager = loader.getParkourManager();
if (parkourManager == null) return;
if (!parkourManager.getPerPlayerStartTime().containsKey(player.getUuid())) return;
parkourManager.cancelParkour(player);
}

@HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = true)
public void run(PlayerMoveEvent event) {
LobbyTypeLoader loader = (LobbyTypeLoader) HypixelConst.getTypeLoader();
final HypixelPlayer player = (HypixelPlayer) event.getPlayer();

if (lastClickedTimes.containsKey(player.getUuid()) && lastClickedTimes.get(player.getUuid()) >= System.currentTimeMillis() - 5000) return;

LobbyParkourManager parkourManager = loader.getParkourManager();
if (parkourManager == null) return;

Pos playerPos = event.getPlayer().getPosition();

if (playerPos.samePoint(parkourManager.getParkour().getCheckpoints().getFirst(), 0.5)) {
player.playSound(Sound.sound(
Key.key("block.metal_pressure_plate.click_on"), Sound.Source.NEUTRAL,
.3f, 0.75f
));

MathUtility.delay(() -> player.playSound(Sound.sound(
Key.key("block.metal_pressure_plate.click_off"), Sound.Source.NEUTRAL,
.3f, 0.65f
)), 30);

parkourManager.startParkour(player);
lastClickedTimes.put(player.getUuid(), System.currentTimeMillis());
}

for (int i = 1; i < parkourManager.getParkour().getCheckpoints().size() - 1; i++) {
if (playerPos.samePoint(parkourManager.getParkour().getCheckpoints().get(i), 0.5)) {
player.playSound(Sound.sound(
Key.key("block.metal_pressure_plate.click_on"), Sound.Source.NEUTRAL,
.3f, 0.75f
));

MathUtility.delay(() -> player.playSound(Sound.sound(
Key.key("block.metal_pressure_plate.click_off"), Sound.Source.NEUTRAL,
.3f, 0.65f
)), 30);

parkourManager.checkpointPlayer(player, i);
lastClickedTimes.put(player.getUuid(), System.currentTimeMillis());
break;
}
}

if (playerPos.samePoint(parkourManager.getParkour().getCheckpoints().getLast(), 0.5)) {
player.playSound(Sound.sound(
Key.key("block.metal_pressure_plate.click_on"), Sound.Source.NEUTRAL,
.3f, 0.75f
));

MathUtility.delay(() -> player.playSound(Sound.sound(
Key.key("block.metal_pressure_plate.click_off"), Sound.Source.NEUTRAL,
.3f, 0.65f
)), 30);

parkourManager.finishedParkour(player);
lastClickedTimes.put(player.getUuid(), System.currentTimeMillis());
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,22 @@
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.component.CustomData;
import net.minestom.server.tag.Tag;
import net.swofty.type.lobby.item.impl.CancelParkour;
import net.swofty.type.lobby.item.impl.LastCheckpoint;
import net.swofty.type.lobby.item.impl.ResetParkour;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class LobbyItemHandler {
private final List<LobbyItem> items = new ArrayList<>();
private final List<LobbyItem> items = new ArrayList<>(
List.of(
new LastCheckpoint(),
new CancelParkour(),
new ResetParkour()
)
);

public void add(LobbyItem item) {
items.add(item);
Expand Down Expand Up @@ -70,6 +79,7 @@ public void onBlockPlace(PlayerBlockPlaceEvent event) {
ItemStack itemStack = event.getPlayer().getItemInMainHand();
if (isItem(item, itemStack)) {
item.onBlockPlace(event);
item.onItemInteract(event);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package net.swofty.type.lobby.item.impl;

import net.minestom.server.event.trait.CancellableEvent;
import net.minestom.server.event.trait.PlayerInstanceEvent;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.swofty.type.generic.HypixelConst;
import net.swofty.type.generic.gui.inventory.ItemStackCreator;
import net.swofty.type.generic.user.HypixelPlayer;
import net.swofty.type.lobby.LobbyTypeLoader;
import net.swofty.type.lobby.item.LobbyItem;
import net.swofty.type.lobby.parkour.LobbyParkourManager;

public class CancelParkour extends LobbyItem {

public CancelParkour() {
super("cancel_parkour");
}

@Override
public ItemStack getBlandItem() {
return ItemStackCreator.createNamedItemStack(Material.RED_BED, "§cCancel").build();
}

@Override
public void onItemInteract(PlayerInstanceEvent event) {
((CancellableEvent) event).setCancelled(true);
if (HypixelConst.getTypeLoader() instanceof LobbyTypeLoader lobbyLoader) {
LobbyParkourManager parkourManager = lobbyLoader.getParkourManager();
if (parkourManager == null) return;
parkourManager.cancelParkour((HypixelPlayer) event.getPlayer());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package net.swofty.type.lobby.item.impl;

import net.minestom.server.coordinate.CoordConversion;
import net.minestom.server.event.trait.CancellableEvent;
import net.minestom.server.event.trait.PlayerInstanceEvent;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.swofty.type.generic.HypixelConst;
import net.swofty.type.generic.gui.inventory.ItemStackCreator;
import net.swofty.type.lobby.LobbyTypeLoader;
import net.swofty.type.lobby.item.LobbyItem;
import net.swofty.type.lobby.parkour.LobbyParkourManager;

public class LastCheckpoint extends LobbyItem {

public LastCheckpoint() {
super("last_checkpoint");
}

@Override
public ItemStack getBlandItem() {
return ItemStackCreator.createNamedItemStack(Material.HEAVY_WEIGHTED_PRESSURE_PLATE, "§aTeleport to Last Checkpoint").build();
}

@Override
public void onItemInteract(PlayerInstanceEvent event) {
((CancellableEvent) event).setCancelled(true);
if (HypixelConst.getTypeLoader() instanceof LobbyTypeLoader lobbyLoader) {
LobbyParkourManager parkourManager = lobbyLoader.getParkourManager();
if (parkourManager == null) return;
event.getPlayer().teleport(
parkourManager.getParkour().getCheckpoints().get(parkourManager.getPerPlayerStartTime().get(event.getPlayer().getUuid()).lastCheckpointIndex()).asPos().add(0.5, 0, 0.5)
);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package net.swofty.type.lobby.item.impl;

import net.minestom.server.event.trait.CancellableEvent;
import net.minestom.server.event.trait.PlayerInstanceEvent;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.swofty.type.generic.HypixelConst;
import net.swofty.type.generic.gui.inventory.ItemStackCreator;
import net.swofty.type.lobby.LobbyTypeLoader;
import net.swofty.type.lobby.item.LobbyItem;
import net.swofty.type.lobby.parkour.LobbyParkourManager;

public class ResetParkour extends LobbyItem {

public ResetParkour() {
super("reset_parkour");
}

@Override
public ItemStack getBlandItem() {
return ItemStackCreator.createNamedItemStack(Material.OAK_DOOR, "§cReset").build();
}

@Override
public void onItemInteract(PlayerInstanceEvent event) {
((CancellableEvent) event).setCancelled(true);
if (HypixelConst.getTypeLoader() instanceof LobbyTypeLoader lobbyLoader) {
LobbyParkourManager parkourManager = lobbyLoader.getParkourManager();
if (parkourManager == null) return;
event.getPlayer().teleport(parkourManager.getParkour().getStartLocation());
}
}
}
Loading