9
0
mirror of https://github.com/WiIIiam278/HuskSync.git synced 2025-12-23 08:39:19 +00:00

feat: Move flight status into its own data type, use lombok for data class (#273)

* refactor: use lombok, separate flight, close #191

* refactor: suppress some warnings

* refactor: suppress unused `from` warnings

* refactor: correct bad null-annotations on Items

* refactor: fix null annotation on `getStack`

* refactor: override methods for getting flight status

* docs: add deprecation docs for flight in gamemode data
This commit is contained in:
William
2024-04-10 14:34:19 +01:00
committed by GitHub
parent be5d1128de
commit a35e83a424
16 changed files with 204 additions and 378 deletions

View File

@@ -51,8 +51,8 @@ public interface Data {
*/
interface Items extends Data {
@NotNull
Stack[] getStack();
@Nullable
Stack @NotNull [] getStack();
default int getSlotCount() {
return getStack().length;
@@ -76,6 +76,9 @@ public interface Data {
*/
interface Inventory extends Items {
String ITEMS_TAG = "items";
String HELD_ITEM_SLOT_TAG = "held_item_slot";
int getHeldItemSlot();
void setHeldItemSlot(int heldItemSlot) throws IllegalArgumentException;
@@ -341,12 +344,7 @@ public interface Data {
}
/**
* A data container holding data for:
* <ul>
* <li>Game mode</li>
* <li>Allow flight</li>
* <li>Is flying</li>
* </ul>
* Data container holding data for the player's current game mode
*/
interface GameMode extends Data {
@@ -355,13 +353,65 @@ public interface Data {
void setGameMode(@NotNull String gameMode);
boolean getAllowFlight();
/**
* Get if the player can fly.
*
* @return {@code false} since v3.5
* @deprecated Moved to its own data type. This will always return {@code false}.
* Use {@link FlightStatus#isAllowFlight()} instead
*/
@Deprecated(forRemoval = true, since = "3.5")
default boolean getAllowFlight() {
return false;
}
/**
* Set if the player can fly.
*
* @deprecated Moved to its own data type.
* Use {@link FlightStatus#setAllowFlight(boolean)} instead
*/
@Deprecated(forRemoval = true, since = "3.5")
default void setAllowFlight(boolean allowFlight) {
}
/**
* Get if the player is flying.
*
* @return {@code false} since v3.5
* @deprecated Moved to its own data type. This will always return {@code false}.
* Use {@link FlightStatus#isFlying()} instead
*/
@Deprecated(forRemoval = true, since = "3.5")
default boolean getIsFlying() {
return false;
}
/**
* Set if the player is flying.
*
* @deprecated Moved to its own data type.
* Use {@link FlightStatus#setFlying(boolean)} instead
*/
@Deprecated(forRemoval = true, since = "3.5")
default void setIsFlying(boolean isFlying) {
}
}
/**
* Data container holding data for the player's flight status
*
* @since 3.5
*/
interface FlightStatus extends Data {
boolean isAllowFlight();
void setAllowFlight(boolean allowFlight);
boolean getIsFlying();
boolean isFlying();
void setIsFlying(boolean isFlying);
void setFlying(boolean isFlying);
}

View File

@@ -128,6 +128,15 @@ public interface DataHolder {
getData().put(Identifier.GAME_MODE, gameMode);
}
@NotNull
default Optional<Data.FlightStatus> getFlightStatus() {
return Optional.ofNullable((Data.FlightStatus) getData().get(Identifier.FLIGHT_STATUS));
}
default void setFlightStatus(@NotNull Data.FlightStatus flightStatus) {
getData().put(Identifier.FLIGHT_STATUS, flightStatus);
}
@NotNull
default Optional<Data.PersistentData> getPersistentData() {
return Optional.ofNullable((Data.PersistentData) getData().get(Identifier.PERSISTENT_DATA));

View File

@@ -47,6 +47,7 @@ import java.util.stream.Collectors;
*
* @since 3.0
*/
@SuppressWarnings({"LombokSetterMayBeUsed", "LombokGetterMayBeUsed"})
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class DataSnapshot {
@@ -688,6 +689,21 @@ public class DataSnapshot {
return data(Identifier.GAME_MODE, gameMode);
}
/**
* Set the flight status of the snapshot
* <p>
* Equivalent to {@code data(Identifier.FLIGHT_STATUS, flightStatus)}
* </p>
*
* @param flightStatus The flight status
* @return The builder
* @since 3.5
*/
@NotNull
public Builder flightStatus(@NotNull Data.FlightStatus flightStatus) {
return data(Identifier.FLIGHT_STATUS, flightStatus);
}
/**
* Set the persistent data container of the snapshot
* <p>

View File

@@ -43,6 +43,7 @@ public class Identifier {
public static Identifier HUNGER = huskSync("hunger", true);
public static Identifier EXPERIENCE = huskSync("experience", true);
public static Identifier GAME_MODE = huskSync("game_mode", true);
public static Identifier FLIGHT_STATUS = huskSync("flight_status", true);
public static Identifier PERSISTENT_DATA = huskSync("persistent_data", true);
private final Key key;
@@ -114,7 +115,7 @@ public class Identifier {
public static Map<String, Boolean> getConfigMap() {
return Map.ofEntries(Stream.of(
INVENTORY, ENDER_CHEST, POTION_EFFECTS, ADVANCEMENTS, LOCATION,
STATISTICS, HEALTH, HUNGER, EXPERIENCE, GAME_MODE, PERSISTENT_DATA
STATISTICS, HEALTH, HUNGER, EXPERIENCE, GAME_MODE, FLIGHT_STATUS, PERSISTENT_DATA
)
.map(Identifier::getConfigEntry)
.toArray(Map.Entry[]::new));

View File

@@ -171,6 +171,11 @@ public interface UserDataHolder extends DataHolder {
this.setData(Identifier.GAME_MODE, gameMode);
}
@Override
default void setFlightStatus(@NotNull Data.FlightStatus flightStatus) {
this.setData(Identifier.FLIGHT_STATUS, flightStatus);
}
@Override
default void setPersistentData(@NotNull Data.PersistentData persistentData) {
this.setData(Identifier.PERSISTENT_DATA, persistentData);

View File

@@ -28,7 +28,6 @@ import net.william278.husksync.user.User;
import org.jetbrains.annotations.Blocking;
import org.jetbrains.annotations.NotNull;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.sql.*;
import java.time.OffsetDateTime;