diff options
Diffstat (limited to 'Spigot-API-Patches-Unmapped/0194-Add-Player-Client-Options-API.patch')
-rw-r--r-- | Spigot-API-Patches-Unmapped/0194-Add-Player-Client-Options-API.patch | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/Spigot-API-Patches-Unmapped/0194-Add-Player-Client-Options-API.patch b/Spigot-API-Patches-Unmapped/0194-Add-Player-Client-Options-API.patch new file mode 100644 index 0000000000..19f52fdf39 --- /dev/null +++ b/Spigot-API-Patches-Unmapped/0194-Add-Player-Client-Options-API.patch @@ -0,0 +1,202 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MiniDigger <[email protected]> +Date: Mon, 20 Jan 2020 21:38:34 +0100 +Subject: [PATCH] Add Player Client Options API + + +diff --git a/src/main/java/com/destroystokyo/paper/ClientOption.java b/src/main/java/com/destroystokyo/paper/ClientOption.java +new file mode 100644 +index 0000000000000000000000000000000000000000..9dad814cf51bc59ec5dfbf14474fea6557de38aa +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/ClientOption.java +@@ -0,0 +1,33 @@ ++package com.destroystokyo.paper; ++ ++import org.jetbrains.annotations.NotNull; ++ ++import org.bukkit.inventory.MainHand; ++ ++public final class ClientOption<T> { ++ ++ public static final ClientOption<SkinParts> SKIN_PARTS = new ClientOption<>(SkinParts.class); ++ public static final ClientOption<Boolean> CHAT_COLORS_ENABLED = new ClientOption<>(Boolean.class); ++ public static final ClientOption<ChatVisibility> CHAT_VISIBILITY = new ClientOption<>(ChatVisibility.class); ++ public static final ClientOption<String> LOCALE = new ClientOption<>(String.class); ++ public static final ClientOption<MainHand> MAIN_HAND = new ClientOption<>(MainHand.class); ++ public static final ClientOption<Integer> VIEW_DISTANCE = new ClientOption<>(Integer.class); ++ ++ private final Class<T> type; ++ ++ private ClientOption(@NotNull Class<T> type) { ++ this.type = type; ++ } ++ ++ @NotNull ++ public Class<T> getType() { ++ return type; ++ } ++ ++ public enum ChatVisibility { ++ FULL, ++ SYSTEM, ++ HIDDEN, ++ UNKNOWN ++ } ++} +diff --git a/src/main/java/com/destroystokyo/paper/SkinParts.java b/src/main/java/com/destroystokyo/paper/SkinParts.java +new file mode 100644 +index 0000000000000000000000000000000000000000..4a0c39405d4fbed457787e3c6ded4cc6591bc8c2 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/SkinParts.java +@@ -0,0 +1,20 @@ ++package com.destroystokyo.paper; ++ ++public interface SkinParts { ++ ++ boolean hasCapeEnabled(); ++ ++ boolean hasJacketEnabled(); ++ ++ boolean hasLeftSleeveEnabled(); ++ ++ boolean hasRightSleeveEnabled(); ++ ++ boolean hasLeftPantsEnabled(); ++ ++ boolean hasRightPantsEnabled(); ++ ++ boolean hasHatsEnabled(); ++ ++ int getRaw(); ++} +diff --git a/src/main/java/com/destroystokyo/paper/event/player/PlayerClientOptionsChangeEvent.java b/src/main/java/com/destroystokyo/paper/event/player/PlayerClientOptionsChangeEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..f7f171c4ee0b8339b2f8fbe82442d65f17202f28 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/player/PlayerClientOptionsChangeEvent.java +@@ -0,0 +1,100 @@ ++package com.destroystokyo.paper.event.player; ++ ++import com.destroystokyo.paper.ClientOption; ++import com.destroystokyo.paper.ClientOption.ChatVisibility; ++import com.destroystokyo.paper.SkinParts; ++ ++import org.jetbrains.annotations.NotNull; ++ ++import org.bukkit.entity.Player; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.bukkit.inventory.MainHand; ++ ++/** ++ * Called when the player changes his client settings ++ */ ++public class PlayerClientOptionsChangeEvent extends PlayerEvent { ++ ++ private static final HandlerList handlers = new HandlerList(); ++ ++ private final String locale; ++ private final int viewDistance; ++ private final ChatVisibility chatVisibility; ++ private final boolean chatColors; ++ private final SkinParts skinparts; ++ private final MainHand mainHand; ++ ++ public PlayerClientOptionsChangeEvent(@NotNull Player player, @NotNull String locale, int viewDistance, @NotNull ChatVisibility chatVisibility, boolean chatColors, @NotNull SkinParts skinParts, @NotNull MainHand mainHand) { ++ super(player); ++ this.locale = locale; ++ this.viewDistance = viewDistance; ++ this.chatVisibility = chatVisibility; ++ this.chatColors = chatColors; ++ this.skinparts = skinParts; ++ this.mainHand = mainHand; ++ } ++ ++ @NotNull ++ public String getLocale() { ++ return locale; ++ } ++ ++ public boolean hasLocaleChanged() { ++ return !locale.equals(player.getClientOption(ClientOption.LOCALE)); ++ } ++ ++ public int getViewDistance() { ++ return viewDistance; ++ } ++ ++ public boolean hasViewDistanceChanged() { ++ return viewDistance != player.getClientOption(ClientOption.VIEW_DISTANCE); ++ } ++ ++ @NotNull ++ public ChatVisibility getChatVisibility() { ++ return chatVisibility; ++ } ++ ++ public boolean hasChatVisibilityChanged() { ++ return chatVisibility != player.getClientOption(ClientOption.CHAT_VISIBILITY); ++ } ++ ++ public boolean hasChatColorsEnabled() { ++ return chatColors; ++ } ++ ++ public boolean hasChatColorsEnabledChanged() { ++ return chatColors != player.getClientOption(ClientOption.CHAT_COLORS_ENABLED); ++ } ++ ++ @NotNull ++ public SkinParts getSkinParts() { ++ return skinparts; ++ } ++ ++ public boolean hasSkinPartsChanged() { ++ return skinparts.getRaw() != player.getClientOption(ClientOption.SKIN_PARTS).getRaw(); ++ } ++ ++ @NotNull ++ public MainHand getMainHand() { ++ return mainHand; ++ } ++ ++ public boolean hasMainHandChanged() { ++ return mainHand != player.getClientOption(ClientOption.MAIN_HAND); ++ } ++ ++ @Override ++ @NotNull ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++} +diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java +index 6253b43490cac138edbb59ce0647d3f37314e435..e6b5969df34f096cec84ebb46061cb956eba4bab 100644 +--- a/src/main/java/org/bukkit/entity/Player.java ++++ b/src/main/java/org/bukkit/entity/Player.java +@@ -2,6 +2,7 @@ package org.bukkit.entity; + + import java.net.InetSocketAddress; + import java.util.UUID; ++import com.destroystokyo.paper.ClientOption; // Paper + import com.destroystokyo.paper.Title; // Paper + import net.kyori.adventure.text.Component; + import com.destroystokyo.paper.profile.PlayerProfile; // Paper +@@ -1894,6 +1895,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM + * Reset the cooldown counter to 0, effectively starting the cooldown period. + */ + void resetCooldown(); ++ ++ /** ++ * @return the client option value of the player ++ */ ++ @NotNull ++ <T> T getClientOption(@NotNull ClientOption<T> option); + // Paper end + + // Spigot start |