mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-09 06:50:32 +08:00
c0d07c1b67
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: f009c3dd SPIGOT-5810, SPIGOT-5835: 'Better' handling of Player.isOnGround e677c370 Update ECJ version 5058a35d SPIGOT-5860: Item.setItemStack should be NotNull CraftBukkit Changes:d77f4d9b
SPIGOT-5810, SPIGOT-5835: 'Better' handling of Player.isOnGround53c95627
SPIGOT-5865: Piglin does not trigger EntityPickupItemEvent2ab04d24
Update ECJ version7884e079
SPIGOT-5868: Blocks do not tick in custom nether / end2a848286
SPIGOT-5863: Don't check colour in scoreboard length validationf2cbce30
SPIGOT-5866: Beehive unknown TargetReason Spigot Changes: ad703da0 SPIGOT-5870: /plugins "website" field shows "version" 1a27cfd8 #98: Improve output of /plugins command using text components 732d5bab Disable checkstyle in Spigot blocks 0199a9a6 #97: Add Memory Usage to Ticks Per Second Command. 33ea98fc SPIGOT-5858: NPE: Joining the server with an invalid dimension
203 lines
6.4 KiB
Diff
203 lines
6.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MiniDigger <admin@minidigger.me>
|
|
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 dec87413b5c22c95524a1b1f70fdd1ef016a6791..2eb3121386e3bc5ccdd74726a7c4b5f832ec5aea 100644
|
|
--- a/src/main/java/org/bukkit/entity/Player.java
|
|
+++ b/src/main/java/org/bukkit/entity/Player.java
|
|
@@ -1,6 +1,7 @@
|
|
package org.bukkit.entity;
|
|
|
|
import java.net.InetSocketAddress;
|
|
+import com.destroystokyo.paper.ClientOption; // Paper
|
|
import com.destroystokyo.paper.Title; // Paper
|
|
import com.destroystokyo.paper.profile.PlayerProfile; // Paper
|
|
import java.util.Date; // Paper
|
|
@@ -1763,6 +1764,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
|