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
3 changes: 3 additions & 0 deletions game/src/main/java/net/onelitefeather/cygnus/Cygnus.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,13 @@
import net.onelitefeather.cygnus.common.util.Helper;
import net.onelitefeather.cygnus.event.GameFinishEvent;
import net.onelitefeather.cygnus.event.SlenderReviveEvent;
import net.onelitefeather.cygnus.event.StaminaStateChangeEvent;
import net.onelitefeather.cygnus.listener.PlayerChatListener;
import net.onelitefeather.cygnus.listener.PlayerDeathListener;
import net.onelitefeather.cygnus.listener.PlayerLoginListener;
import net.onelitefeather.cygnus.listener.PlayerQuitListener;
import net.onelitefeather.cygnus.listener.PlayerSpawnListener;
import net.onelitefeather.cygnus.listener.StaminaStateChangeListener;
import net.onelitefeather.cygnus.listener.game.GameFinishListener;
import net.onelitefeather.cygnus.listener.game.GamePageListener;
import net.onelitefeather.cygnus.listener.game.GamePreLaunchListener;
Expand Down Expand Up @@ -152,6 +154,7 @@ private void registerGameListener() {
manager.addListener(
SlenderReviveEvent.class, new GameReviveListener(((GameMapProvider) this.mapProvider).getGameMap(), this.staminaService));
manager.addListener(GamePreLaunchEvent.class, new GamePreLaunchListener(this.pageProvider::setMaxPageAmount));
manager.addListener(StaminaStateChangeEvent.class, new StaminaStateChangeListener());
MinecraftServer.getPacketListenerManager().setPlayListener(ClientEntityActionPacket.class, CygnusEntityActionListener::listener);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package net.onelitefeather.cygnus.event;

import net.minestom.server.entity.Player;
import net.minestom.server.event.trait.PlayerEvent;
import net.onelitefeather.cygnus.stamina.StaminaBar;

/**
* Called when the state of a StaminaBar changes.
*
* @author Joltra
* @version 1.0.0
* @since 1.0.0
**/
@SuppressWarnings("java:S6206")
public final class StaminaStateChangeEvent implements PlayerEvent {

private final Player player;
private final StaminaBar.State state;

/**
* Creates a new instance of the {@link StaminaStateChangeEvent}.
*
* @param player the player whose stamina state changed
* @param state the new state
*/
public StaminaStateChangeEvent(Player player, StaminaBar.State state) {
this.player = player;
this.state = state;
}

/**
* {@inheritDoc}
*/
@Override
public Player getPlayer() {
return this.player;
}

/**
* Returns the new state of the stamina bar.
*
* @return the state
*/
public StaminaBar.State getState() {
return state;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package net.onelitefeather.cygnus.listener;

import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Player;
import net.minestom.server.utils.PacketSendingUtils;
import net.onelitefeather.cygnus.event.StaminaStateChangeEvent;
import net.onelitefeather.cygnus.stamina.StaminaBar;

import java.util.function.Consumer;

/**
* Listener for stamina state changes to handle packet broadcasting.
*
* @author Joltra
* @version 1.0.0
* @since 1.0.0
**/
public final class StaminaStateChangeListener implements Consumer<StaminaStateChangeEvent> {

@Override
public void accept(StaminaStateChangeEvent event) {
Player player = event.getPlayer();
StaminaBar.State state = event.getState();

if (state == StaminaBar.State.DRAINING) {
PacketSendingUtils.broadcastPlayPacket(player.getMetadataPacket());
MinecraftServer.getConnectionManager().getOnlinePlayers()
.stream().filter(p -> !p.getUuid().equals(player.getUuid())).forEach(player::updateNewViewer);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick: You can use Predicate#not()

PacketSendingUtils.broadcastPlayPacket(player.getMetadataPacket());
return;
}

if (state == StaminaBar.State.REGENERATING) {
PacketSendingUtils.broadcastPlayPacket(player.getMetadataPacket());
MinecraftServer.getConnectionManager().getOnlinePlayers()
.stream().filter(p -> !p.getUuid().equals(player.getUuid())).forEach(player::updateOldViewer);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick: You can use Predicate#not()

PacketSendingUtils.broadcastPlayPacket(player.getMetadataPacket());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
package net.onelitefeather.cygnus.stamina;

import net.kyori.adventure.sound.Sound;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.Player;
import net.minestom.server.entity.attribute.Attribute;
import net.minestom.server.event.EventDispatcher;
import net.minestom.server.instance.Instance;
import net.minestom.server.sound.SoundEvent;
import net.onelitefeather.cygnus.common.Tags;
import net.onelitefeather.cygnus.common.util.Helper;
import net.onelitefeather.cygnus.event.StaminaStateChangeEvent;
import net.onelitefeather.cygnus.player.CygnusPlayer;
import org.jetbrains.annotations.Nullable;

import java.time.temporal.ChronoUnit;
import java.util.function.BiConsumer;

/**
* @author theEvilReaper
Expand All @@ -29,7 +27,6 @@ public non-sealed class SlenderBar extends StaminaBar implements SlenderBarHelpe
private static final float TIME_STEP = 0.5f;
private final String tileChar;
private final int time;
private @Nullable BiConsumer<Player, State> accept;
private double currentTime;
private StaminaColors colorState;

Expand All @@ -41,10 +38,6 @@ public non-sealed class SlenderBar extends StaminaBar implements SlenderBarHelpe
this.colorState = StaminaColors.DRAINING;
}

public void setAccept(BiConsumer<Player, State> accept) {
this.accept = accept;
}

@Override
protected void onStart() {
this.state = State.READY;
Expand Down Expand Up @@ -72,7 +65,7 @@ private void handleDraining() {
state = State.REGENERATING;
colorState = StaminaColors.REGENERATING;
player.setTag(Tags.HIDDEN, Helper.ONE_ID);
this.accept.accept(player, state);
EventDispatcher.call(new StaminaStateChangeEvent(player, state));
this.applyNightVision(player);
player.getAttribute(Attribute.MOVEMENT_SPEED).setBaseValue(0.1f);
player.sendSpringPackets();
Expand Down Expand Up @@ -104,7 +97,7 @@ public boolean changeStatus() {
player.sendSpringPackets();
player.setSprinting(false);
player.setBlockedSprinting(true);
this.accept.accept(player, State.DRAINING);
EventDispatcher.call(new StaminaStateChangeEvent(player, state));
}
case REGENERATING -> {
state = State.DRAINING;
Expand All @@ -116,7 +109,7 @@ public boolean changeStatus() {
player.sendSpringPackets();
player.setSprinting(false);
player.setBlockedSprinting(true);
this.accept.accept(player, State.DRAINING);
EventDispatcher.call(new StaminaStateChangeEvent(player, state));
}
case DRAINING -> {
state = State.REGENERATING;
Expand All @@ -127,7 +120,7 @@ public boolean changeStatus() {
player.getAttribute(Attribute.MOVEMENT_SPEED).setBaseValue(0.1f);
player.sendSpringPackets();
player.setBlockedSprinting(false);
this.accept.accept(player, State.REGENERATING);
EventDispatcher.call(new StaminaStateChangeEvent(player, state));
}
}
return true;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package net.onelitefeather.cygnus.stamina;

import net.minestom.server.utils.PacketSendingUtils;
import net.theevilreaper.xerus.api.team.Team;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Player;
import net.minestom.server.utils.validate.Check;
import net.onelitefeather.cygnus.player.CygnusPlayer;
Expand Down Expand Up @@ -64,22 +62,6 @@ public void setSlenderBar(Player player, boolean forceStart) {
public void createStaminaBars(Team team) {
Check.argCondition(!staminaBars.isEmpty(), "Unable to load stamina bars twice");
Check.argCondition(team.getPlayers().isEmpty(), "Can't add players from a team without teams");
((SlenderBar) this.slenderBar).setAccept((player, state) -> {
if (state == StaminaBar.State.DRAINING) {
PacketSendingUtils.broadcastPlayPacket(player.getMetadataPacket());
MinecraftServer.getConnectionManager().getOnlinePlayers()
.stream().filter(p -> !p.getUuid().equals(player.getUuid())).forEach(player::updateNewViewer);
PacketSendingUtils.broadcastPlayPacket(player.getMetadataPacket());
return;
}

if (state == StaminaBar.State.REGENERATING) {
PacketSendingUtils.broadcastPlayPacket(player.getMetadataPacket());
MinecraftServer.getConnectionManager().getOnlinePlayers()
.stream().filter(p -> !p.getUuid().equals(player.getUuid())).forEach(player::updateOldViewer);
PacketSendingUtils.broadcastPlayPacket(player.getMetadataPacket());
}
});
for (Player player : team.getPlayers()) {
this.staminaBars.put(player.getUuid(), StaminaFactory.createFoodStamina((CygnusPlayer) player));
}
Expand Down