26734e83b0
* Updated Upstream (Bukkit/CraftBukkit/Spigot) Upstream has released updates that appear 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: 8085edde SPIGOT-6918: Add SpawnCategory API and configurations for Axolotls 04c7e13c PR-719: Add Player Profile API 71564210 SPIGOT-6910: Add BlockDamageAbortEvent CraftBukkit Changes: febaa1c6 SPIGOT-6918: Add SpawnCategory API and configurations for Axolotls 9dafd109 Don't send updates over large distances bdac46b0 SPIGOT-6782: EntityPortalEvent should not destroy entity when setTo() uses same world as getFrom() 8f361ece PR-1002: Add Player Profile API 911875d4 Increase outdated build delay e5f8a767 SPIGOT-6917: Use main scoreboard for /trigger a672a531 Clean up callBlockDamageEvent 8e1bdeef SPIGOT-6910: Add BlockDamageAbortEvent Spigot Changes: 6edb62f3 Rebuild patches 7fbc6a1e Rebuild patches * Updated Upstream (CraftBukkit) Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: de951355 SPIGOT-6927: Fix default value of spawn-limits in Worlds
220 Zeilen
7.1 KiB
Diff
220 Zeilen
7.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MiniDigger <admin@benndorf.dev>
|
|
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..cedb51f9f3a9150035c2b44970a096448c441dd9
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/ClientOption.java
|
|
@@ -0,0 +1,50 @@
|
|
+package com.destroystokyo.paper;
|
|
+
|
|
+import net.kyori.adventure.translation.Translatable;
|
|
+import net.kyori.adventure.util.Index;
|
|
+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 implements Translatable {
|
|
+ FULL("full"),
|
|
+ SYSTEM("system"),
|
|
+ HIDDEN("hidden"),
|
|
+ UNKNOWN("unknown");
|
|
+
|
|
+ public static Index<String, ChatVisibility> NAMES = Index.create(ChatVisibility.class, chatVisibility -> chatVisibility.name);
|
|
+ private final String name;
|
|
+
|
|
+ ChatVisibility(String name) {
|
|
+ this.name = name;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public @NotNull String translationKey() {
|
|
+ if (this == UNKNOWN) {
|
|
+ throw new UnsupportedOperationException(this.name + " doesn't have a translation key");
|
|
+ }
|
|
+ return "options.chat.visibility." + this.name;
|
|
+ }
|
|
+ }
|
|
+}
|
|
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 11e85e664fdd875c2a6e84b158b78d4784999932..385846a2011ec07d4f37c98f38d3369199780418 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 org.bukkit.DyeColor;
|
|
@@ -2425,6 +2426,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
|