mirror of
https://github.com/Samsuik/Sakura.git
synced 2025-12-21 15:59:26 +00:00
187 lines
7.0 KiB
Diff
187 lines
7.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Samsuik <kfian294ma4@gmail.com>
|
|
Date: Tue, 21 Sep 2021 23:55:45 +0100
|
|
Subject: [PATCH] Client Visibility Settings API
|
|
|
|
|
|
diff --git a/src/main/java/me/samsuik/sakura/player/visibility/VisibilitySettings.java b/src/main/java/me/samsuik/sakura/player/visibility/VisibilitySettings.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..50ba48ebb99fac7f42fa1db76808f84ed9e601c4
|
|
--- /dev/null
|
|
+++ b/src/main/java/me/samsuik/sakura/player/visibility/VisibilitySettings.java
|
|
@@ -0,0 +1,48 @@
|
|
+package me.samsuik.sakura.player.visibility;
|
|
+
|
|
+import org.jspecify.annotations.NullMarked;
|
|
+
|
|
+@NullMarked
|
|
+public interface VisibilitySettings {
|
|
+ default boolean isEnabled(VisibilityType type) {
|
|
+ return this.get(type) == VisibilityState.ON;
|
|
+ }
|
|
+
|
|
+ default boolean isDisabled(VisibilityType type) {
|
|
+ return this.get(type) == VisibilityState.OFF;
|
|
+ }
|
|
+
|
|
+ default boolean isToggled(VisibilityType type) {
|
|
+ return !type.isDefault(this.get(type));
|
|
+ }
|
|
+
|
|
+ default VisibilityState toggle(VisibilityType type) {
|
|
+ VisibilityState state = this.get(type);
|
|
+ return this.set(type, toggleState(state));
|
|
+ }
|
|
+
|
|
+ default VisibilityState cycle(VisibilityType type) {
|
|
+ VisibilityState state = this.get(type);
|
|
+ return this.set(type, type.cycle(state));
|
|
+ }
|
|
+
|
|
+ default void toggleAll() {
|
|
+ VisibilityState state = this.currentState();
|
|
+ VisibilityState newState = toggleState(state);
|
|
+ for (VisibilityType type : VisibilityTypes.types()) {
|
|
+ this.set(type, newState);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ VisibilityState get(VisibilityType type);
|
|
+
|
|
+ VisibilityState set(VisibilityType type, VisibilityState state);
|
|
+
|
|
+ VisibilityState currentState();
|
|
+
|
|
+ boolean playerModified();
|
|
+
|
|
+ static VisibilityState toggleState(VisibilityState state) {
|
|
+ return state != VisibilityState.OFF ? VisibilityState.OFF : VisibilityState.ON;
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/me/samsuik/sakura/player/visibility/VisibilityState.java b/src/main/java/me/samsuik/sakura/player/visibility/VisibilityState.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..d9cb2ea30f1cb1117437aa2c04a9471ece4be052
|
|
--- /dev/null
|
|
+++ b/src/main/java/me/samsuik/sakura/player/visibility/VisibilityState.java
|
|
@@ -0,0 +1,5 @@
|
|
+package me.samsuik.sakura.player.visibility;
|
|
+
|
|
+public enum VisibilityState {
|
|
+ ON, MODIFIED, MINIMAL, OFF;
|
|
+}
|
|
diff --git a/src/main/java/me/samsuik/sakura/player/visibility/VisibilityType.java b/src/main/java/me/samsuik/sakura/player/visibility/VisibilityType.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..6b6b482d1c34e2318e5ca3b7a68e628818f048f8
|
|
--- /dev/null
|
|
+++ b/src/main/java/me/samsuik/sakura/player/visibility/VisibilityType.java
|
|
@@ -0,0 +1,35 @@
|
|
+package me.samsuik.sakura.player.visibility;
|
|
+
|
|
+import com.google.common.collect.ImmutableList;
|
|
+import org.jspecify.annotations.NullMarked;
|
|
+
|
|
+@NullMarked
|
|
+public record VisibilityType(String key, ImmutableList<VisibilityState> states) {
|
|
+ public VisibilityState getDefault() {
|
|
+ return this.states.getFirst();
|
|
+ }
|
|
+
|
|
+ public boolean isDefault(VisibilityState state) {
|
|
+ return state == this.getDefault();
|
|
+ }
|
|
+
|
|
+ public VisibilityState cycle(VisibilityState state) {
|
|
+ int index = this.states.indexOf(state);
|
|
+ int next = (index + 1) % this.states.size();
|
|
+ return this.states.get(next);
|
|
+ }
|
|
+
|
|
+ public static VisibilityType from(String key, boolean minimal) {
|
|
+ return new VisibilityType(key, states(minimal));
|
|
+ }
|
|
+
|
|
+ private static ImmutableList<VisibilityState> states(boolean minimal) {
|
|
+ ImmutableList.Builder<VisibilityState> listBuilder = ImmutableList.builder();
|
|
+ listBuilder.add(VisibilityState.ON);
|
|
+ if (minimal) {
|
|
+ listBuilder.add(VisibilityState.MINIMAL);
|
|
+ }
|
|
+ listBuilder.add(VisibilityState.OFF);
|
|
+ return listBuilder.build();
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/me/samsuik/sakura/player/visibility/VisibilityTypes.java b/src/main/java/me/samsuik/sakura/player/visibility/VisibilityTypes.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..f323cfc2d7370ff8ea9020e79c5148a86e51e8c8
|
|
--- /dev/null
|
|
+++ b/src/main/java/me/samsuik/sakura/player/visibility/VisibilityTypes.java
|
|
@@ -0,0 +1,31 @@
|
|
+package me.samsuik.sakura.player.visibility;
|
|
+
|
|
+import com.google.common.collect.ImmutableList;
|
|
+import org.jspecify.annotations.NullMarked;
|
|
+
|
|
+import java.util.ArrayList;
|
|
+import java.util.List;
|
|
+
|
|
+@NullMarked
|
|
+public final class VisibilityTypes {
|
|
+ private static final List<VisibilityType> TYPES = new ArrayList<>();
|
|
+
|
|
+ public static final VisibilityType TNT = register(create("tnt", true));
|
|
+ public static final VisibilityType SAND = register(create("sand", true));
|
|
+ public static final VisibilityType EXPLOSIONS = register(create("explosions", true));
|
|
+ public static final VisibilityType SPAWNERS = register(create("spawners", false));
|
|
+ public static final VisibilityType PISTONS = register(create("pistons", false));
|
|
+
|
|
+ public static ImmutableList<VisibilityType> types() {
|
|
+ return ImmutableList.copyOf(TYPES);
|
|
+ }
|
|
+
|
|
+ private static VisibilityType create(String key, boolean minimal) {
|
|
+ return VisibilityType.from(key, minimal);
|
|
+ }
|
|
+
|
|
+ private static VisibilityType register(VisibilityType type) {
|
|
+ TYPES.add(type);
|
|
+ return type;
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
|
|
index 95f0b3186e313c7fbd5c8531d52b82a69e525f94..0560784e8b71a927db6d8cdf9d36a23e3b56ef74 100644
|
|
--- a/src/main/java/org/bukkit/entity/Player.java
|
|
+++ b/src/main/java/org/bukkit/entity/Player.java
|
|
@@ -9,6 +9,8 @@ import java.util.Date;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
import java.util.concurrent.CompletableFuture;
|
|
+
|
|
+import me.samsuik.sakura.player.visibility.VisibilitySettings;
|
|
import org.bukkit.BanEntry;
|
|
import org.bukkit.DyeColor;
|
|
import org.bukkit.Effect;
|
|
@@ -49,7 +51,6 @@ import org.bukkit.plugin.Plugin;
|
|
import org.bukkit.plugin.messaging.PluginMessageRecipient;
|
|
import org.bukkit.potion.PotionEffect;
|
|
import org.bukkit.potion.PotionEffectType;
|
|
-import org.bukkit.profile.PlayerProfile;
|
|
import org.bukkit.scoreboard.Scoreboard;
|
|
import org.jetbrains.annotations.ApiStatus;
|
|
import org.jetbrains.annotations.NotNull;
|
|
@@ -60,6 +61,15 @@ import org.jetbrains.annotations.Nullable;
|
|
*/
|
|
public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginMessageRecipient, net.kyori.adventure.identity.Identified, net.kyori.adventure.bossbar.BossBarViewer, com.destroystokyo.paper.network.NetworkClient { // Paper
|
|
|
|
+ // Sakura start
|
|
+ /**
|
|
+ * Visibility API for FPS settings.
|
|
+ *
|
|
+ * @return visibility api
|
|
+ */
|
|
+ VisibilitySettings getVisibility();
|
|
+ // Sakura end
|
|
+
|
|
// Paper start
|
|
@Override
|
|
default net.kyori.adventure.identity.@NotNull Identity identity() {
|