Improve title API
Uses title objects instead of individual update methods
This commit is contained in:
parent
c04cff4f82
commit
dcad4c6ea7
2 changed files with 469 additions and 25 deletions
|
@ -1,14 +1,24 @@
|
||||||
From 42577385d23a22d17b6f80787db0bf27f8e970d7 Mon Sep 17 00:00:00 2001
|
From 9da88eae7c63d03c2303ddfa86cededaf1244d70 Mon Sep 17 00:00:00 2001
|
||||||
From: Jedediah Smith <jedediah@silencegreys.com>
|
From: Techcable <Techcable@outlook.com>
|
||||||
Date: Tue, 16 Feb 2016 19:51:11 -0600
|
Date: Tue, 16 Feb 2016 19:51:11 -0600
|
||||||
Subject: [PATCH] Player Tab List and Title APIs
|
Subject: [PATCH] Player Tab List and Title APIs
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
|
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
|
||||||
index 9ebfa47..78fd6dc 100644
|
index 9ebfa47..d02fe56 100644
|
||||||
--- a/src/main/java/org/bukkit/entity/Player.java
|
--- a/src/main/java/org/bukkit/entity/Player.java
|
||||||
+++ b/src/main/java/org/bukkit/entity/Player.java
|
+++ b/src/main/java/org/bukkit/entity/Player.java
|
||||||
@@ -344,6 +344,78 @@ public interface Player extends HumanEntity, Conversable, CommandSender, Offline
|
@@ -19,6 +19,9 @@ import org.bukkit.conversations.Conversable;
|
||||||
|
import org.bukkit.map.MapView;
|
||||||
|
import org.bukkit.plugin.messaging.PluginMessageRecipient;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
+// PaperSpigot start
|
||||||
|
+import org.github.paperspigot.Title;
|
||||||
|
+// PaperSpigot end
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a player, connected or not
|
||||||
|
@@ -344,6 +347,112 @@ public interface Player extends HumanEntity, Conversable, CommandSender, Offline
|
||||||
* @param components the components to send
|
* @param components the components to send
|
||||||
*/
|
*/
|
||||||
public void sendMessage(net.md_5.bungee.api.chat.BaseComponent... components);
|
public void sendMessage(net.md_5.bungee.api.chat.BaseComponent... components);
|
||||||
|
@ -30,32 +40,42 @@ index 9ebfa47..78fd6dc 100644
|
||||||
+ public void setPlayerListHeaderFooter(net.md_5.bungee.api.chat.BaseComponent header, net.md_5.bungee.api.chat.BaseComponent footer);
|
+ public void setPlayerListHeaderFooter(net.md_5.bungee.api.chat.BaseComponent header, net.md_5.bungee.api.chat.BaseComponent footer);
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
+ * Set the times for titles displayed to the player
|
+ * Update the times for titles displayed to the player
|
||||||
+ *
|
+ *
|
||||||
+ * @param fadeInTicks ticks to fade-in
|
+ * @param fadeInTicks ticks to fade-in
|
||||||
+ * @param stayTicks ticks to stay visible
|
+ * @param stayTicks ticks to stay visible
|
||||||
+ * @param fadeOutTicks ticks to fade-out
|
+ * @param fadeOutTicks ticks to fade-out
|
||||||
|
+ * @deprecated Use {@link #updateTitle(Title)}
|
||||||
+ */
|
+ */
|
||||||
|
+ @Deprecated
|
||||||
+ public void setTitleTimes(int fadeInTicks, int stayTicks, int fadeOutTicks);
|
+ public void setTitleTimes(int fadeInTicks, int stayTicks, int fadeOutTicks);
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
+ * Set the subtitle of titles displayed to the player
|
+ * Update the subtitle of titles displayed to the player
|
||||||
|
+ * @deprecated Use {@link #updateTitle(Title)}
|
||||||
+ */
|
+ */
|
||||||
|
+ @Deprecated
|
||||||
+ public void setSubtitle(net.md_5.bungee.api.chat.BaseComponent[] subtitle);
|
+ public void setSubtitle(net.md_5.bungee.api.chat.BaseComponent[] subtitle);
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
+ * Set the subtitle of titles displayed to the player
|
+ * Update the subtitle of titles displayed to the player
|
||||||
|
+ * @deprecated Use {@link #updateTitle(Title)}
|
||||||
+ */
|
+ */
|
||||||
|
+ @Deprecated
|
||||||
+ public void setSubtitle(net.md_5.bungee.api.chat.BaseComponent subtitle);
|
+ public void setSubtitle(net.md_5.bungee.api.chat.BaseComponent subtitle);
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
+ * Show the given title to the player, along with the last subtitle set, using the last set times
|
+ * Show the given title to the player, along with the last subtitle set, using the last set times
|
||||||
|
+ * @deprecated Use {@link #sendTitle(Title)} or {@link #updateTitle(Title)}
|
||||||
+ */
|
+ */
|
||||||
|
+ @Deprecated
|
||||||
+ public void showTitle(net.md_5.bungee.api.chat.BaseComponent[] title);
|
+ public void showTitle(net.md_5.bungee.api.chat.BaseComponent[] title);
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
+ * Show the given title to the player, along with the last subtitle set, using the last set times
|
+ * Show the given title to the player, along with the last subtitle set, using the last set times
|
||||||
|
+ * @deprecated Use {@link #sendTitle(Title)} or {@link #updateTitle(Title)}
|
||||||
+ */
|
+ */
|
||||||
|
+ @Deprecated
|
||||||
+ public void showTitle(net.md_5.bungee.api.chat.BaseComponent title);
|
+ public void showTitle(net.md_5.bungee.api.chat.BaseComponent title);
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
|
@ -66,7 +86,9 @@ index 9ebfa47..78fd6dc 100644
|
||||||
+ * @param fadeInTicks ticks to fade-in
|
+ * @param fadeInTicks ticks to fade-in
|
||||||
+ * @param stayTicks ticks to stay visible
|
+ * @param stayTicks ticks to stay visible
|
||||||
+ * @param fadeOutTicks ticks to fade-out
|
+ * @param fadeOutTicks ticks to fade-out
|
||||||
|
+ * @deprecated Use {@link #sendTitle(Title)} or {@link #updateTitle(Title)}
|
||||||
+ */
|
+ */
|
||||||
|
+ @Deprecated
|
||||||
+ public void showTitle(net.md_5.bungee.api.chat.BaseComponent[] title, net.md_5.bungee.api.chat.BaseComponent[] subtitle, int fadeInTicks, int stayTicks, int fadeOutTicks);
|
+ public void showTitle(net.md_5.bungee.api.chat.BaseComponent[] title, net.md_5.bungee.api.chat.BaseComponent[] subtitle, int fadeInTicks, int stayTicks, int fadeOutTicks);
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
|
@ -77,17 +99,39 @@ index 9ebfa47..78fd6dc 100644
|
||||||
+ * @param fadeInTicks ticks to fade-in
|
+ * @param fadeInTicks ticks to fade-in
|
||||||
+ * @param stayTicks ticks to stay visible
|
+ * @param stayTicks ticks to stay visible
|
||||||
+ * @param fadeOutTicks ticks to fade-out
|
+ * @param fadeOutTicks ticks to fade-out
|
||||||
|
+ * @deprecated Use {@link #sendTitle(Title)} or {@link #updateTitle(Title)}
|
||||||
+ */
|
+ */
|
||||||
|
+ @Deprecated
|
||||||
+ public void showTitle(net.md_5.bungee.api.chat.BaseComponent title, net.md_5.bungee.api.chat.BaseComponent subtitle, int fadeInTicks, int stayTicks, int fadeOutTicks);
|
+ public void showTitle(net.md_5.bungee.api.chat.BaseComponent title, net.md_5.bungee.api.chat.BaseComponent subtitle, int fadeInTicks, int stayTicks, int fadeOutTicks);
|
||||||
+
|
+
|
||||||
+ /**
|
+ /**
|
||||||
|
+ * Show the title to the player, overriding any previously displayed title.
|
||||||
|
+ *
|
||||||
|
+ * <p>This method overrides any previous title, use {@link #updateTitle(Title)} to change the existing one.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the title to send
|
||||||
|
+ * @throws NullPointerException if the title is null
|
||||||
|
+ */
|
||||||
|
+ void sendTitle(Title title);
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Show the title to the player, overriding any previously displayed title.
|
||||||
|
+ *
|
||||||
|
+ * <p>This method doesn't override previous titles, but changes their values.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the title to send
|
||||||
|
+ * @throws NullPointerException if title is null
|
||||||
|
+ */
|
||||||
|
+ void updateTitle(Title title);
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
+ * Hide any title that is currently visible to the player
|
+ * Hide any title that is currently visible to the player
|
||||||
+ */
|
+ */
|
||||||
+ public void hideTitle();
|
+ public void hideTitle();
|
||||||
// Paper end
|
// Paper end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1086,9 +1158,8 @@ public interface Player extends HumanEntity, Conversable, CommandSender, Offline
|
@@ -1086,9 +1195,8 @@ public interface Player extends HumanEntity, Conversable, CommandSender, Offline
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resets the title displayed to the player.
|
* Resets the title displayed to the player.
|
||||||
|
@ -98,6 +142,371 @@ index 9ebfa47..78fd6dc 100644
|
||||||
public void resetTitle();
|
public void resetTitle();
|
||||||
|
|
||||||
// Spigot start
|
// Spigot start
|
||||||
|
diff --git a/src/main/java/org/github/paperspigot/Title.java b/src/main/java/org/github/paperspigot/Title.java
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..27f9bc2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/java/org/github/paperspigot/Title.java
|
||||||
|
@@ -0,0 +1,358 @@
|
||||||
|
+package org.github.paperspigot;
|
||||||
|
+
|
||||||
|
+import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
+import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
+
|
||||||
|
+import org.bukkit.entity.Player;
|
||||||
|
+
|
||||||
|
+import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
+import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
+import static com.google.common.base.Preconditions.checkState;
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Represents a title to may be sent to a {@link Player}.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>A title can be sent without subtitle text.</p>
|
||||||
|
+ */
|
||||||
|
+public final class Title {
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * The default number of ticks for the title to fade in.
|
||||||
|
+ */
|
||||||
|
+ public static final int DEFAULT_FADE_IN = 20;
|
||||||
|
+ /**
|
||||||
|
+ * The default number of ticks for the title to stay.
|
||||||
|
+ */
|
||||||
|
+ public static final int DEFAULT_STAY = 200;
|
||||||
|
+ /**
|
||||||
|
+ * The default number of ticks for the title to fade out.
|
||||||
|
+ */
|
||||||
|
+ public static final int DEFAULT_FADE_OUT = 20;
|
||||||
|
+
|
||||||
|
+ private final BaseComponent[] title;
|
||||||
|
+ private final BaseComponent[] subtitle;
|
||||||
|
+ private final int fadeIn;
|
||||||
|
+ private final int stay;
|
||||||
|
+ private final int fadeOut;
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Create a title with the default time values and no subtitle.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>Times use default values.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the main text of the title
|
||||||
|
+ * @throws NullPointerException if the title is null
|
||||||
|
+ */
|
||||||
|
+ public Title(BaseComponent title) {
|
||||||
|
+ this(title, null);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Create a title with the default time values and no subtitle.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>Times use default values.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the main text of the title
|
||||||
|
+ * @throws NullPointerException if the title is null
|
||||||
|
+ */
|
||||||
|
+ public Title(BaseComponent[] title) {
|
||||||
|
+ this(title, null);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Create a title with the default time values and no subtitle.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>Times use default values.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the main text of the title
|
||||||
|
+ * @throws NullPointerException if the title is null
|
||||||
|
+ */
|
||||||
|
+ public Title(String title) {
|
||||||
|
+ this(title, null);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Create a title with the default time values.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>Times use default values.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the main text of the title
|
||||||
|
+ * @param subtitle the secondary text of the title
|
||||||
|
+ */
|
||||||
|
+ public Title(BaseComponent title, BaseComponent subtitle) {
|
||||||
|
+ this(title, subtitle, DEFAULT_FADE_IN, DEFAULT_STAY, DEFAULT_FADE_OUT);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Create a title with the default time values.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>Times use default values.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the main text of the title
|
||||||
|
+ * @param subtitle the secondary text of the title
|
||||||
|
+ */
|
||||||
|
+ public Title(BaseComponent[] title, BaseComponent[] subtitle) {
|
||||||
|
+ this(title, subtitle, DEFAULT_FADE_IN, DEFAULT_STAY, DEFAULT_FADE_OUT);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Create a title with the default time values.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>Times use default values.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the main text of the title
|
||||||
|
+ * @param subtitle the secondary text of the title
|
||||||
|
+ */
|
||||||
|
+ public Title(String title, String subtitle) {
|
||||||
|
+ this(title, subtitle, DEFAULT_FADE_IN, DEFAULT_STAY, DEFAULT_FADE_OUT);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Creates a new title.
|
||||||
|
+ *
|
||||||
|
+ * @param title the main text of the title
|
||||||
|
+ * @param subtitle the secondary text of the title
|
||||||
|
+ * @param fadeIn the number of ticks for the title to fade in
|
||||||
|
+ * @param stay the number of ticks for the title to stay on screen
|
||||||
|
+ * @param fadeOut the number of ticks for the title to fade out
|
||||||
|
+ * @throws IllegalArgumentException if any of the times are negative
|
||||||
|
+ */
|
||||||
|
+ public Title(BaseComponent title, BaseComponent subtitle, int fadeIn, int stay, int fadeOut) {
|
||||||
|
+ this(
|
||||||
|
+ new BaseComponent[]{checkNotNull(title, "title")},
|
||||||
|
+ subtitle == null ? null : new BaseComponent[]{subtitle},
|
||||||
|
+ fadeIn,
|
||||||
|
+ stay,
|
||||||
|
+ fadeOut
|
||||||
|
+ );
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Creates a new title.
|
||||||
|
+ *
|
||||||
|
+ * @param title the main text of the title
|
||||||
|
+ * @param subtitle the secondary text of the title
|
||||||
|
+ * @param fadeIn the number of ticks for the title to fade in
|
||||||
|
+ * @param stay the number of ticks for the title to stay on screen
|
||||||
|
+ * @param fadeOut the number of ticks for the title to fade out
|
||||||
|
+ * @throws IllegalArgumentException if any of the times are negative
|
||||||
|
+ */
|
||||||
|
+ public Title(BaseComponent[] title, BaseComponent[] subtitle, int fadeIn, int stay, int fadeOut) {
|
||||||
|
+ checkArgument(fadeIn >= 0, "Negative fadeIn: %s", fadeIn);
|
||||||
|
+ checkArgument(stay >= 0, "Negative stay: %s", stay);
|
||||||
|
+ checkArgument(fadeOut >= 0, "Negative fadeOut: %s", fadeOut);
|
||||||
|
+ this.title = checkNotNull(title, "title");
|
||||||
|
+ this.subtitle = subtitle;
|
||||||
|
+ this.fadeIn = fadeIn;
|
||||||
|
+ this.stay = stay;
|
||||||
|
+ this.fadeOut = fadeOut;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Creates a new title.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>It is recommended to the {@link BaseComponent} constrctors.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the main text of the title
|
||||||
|
+ * @param subtitle the secondary text of the title
|
||||||
|
+ * @param fadeIn the number of ticks for the title to fade in
|
||||||
|
+ * @param stay the number of ticks for the title to stay on screen
|
||||||
|
+ * @param fadeOut the number of ticks for the title to fade out
|
||||||
|
+ */
|
||||||
|
+ public Title(String title, String subtitle, int fadeIn, int stay, int fadeOut) {
|
||||||
|
+ this(
|
||||||
|
+ TextComponent.fromLegacyText(checkNotNull(title, "title")),
|
||||||
|
+ subtitle == null ? null : TextComponent.fromLegacyText(subtitle),
|
||||||
|
+ fadeIn,
|
||||||
|
+ stay,
|
||||||
|
+ fadeOut
|
||||||
|
+ );
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Gets the text of this title
|
||||||
|
+ *
|
||||||
|
+ * @return the text
|
||||||
|
+ */
|
||||||
|
+ public BaseComponent[] getTitle() {
|
||||||
|
+ return this.title;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Gets the text of this title's subtitle
|
||||||
|
+ *
|
||||||
|
+ * @return the text
|
||||||
|
+ */
|
||||||
|
+ public BaseComponent[] getSubtitle() {
|
||||||
|
+ return this.subtitle;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Gets the number of ticks to fade in.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>The returned value is never negative.</p>
|
||||||
|
+ *
|
||||||
|
+ * @return the number of ticks to fade in
|
||||||
|
+ */
|
||||||
|
+ public int getFadeIn() {
|
||||||
|
+ return this.fadeIn;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Gets the number of ticks to stay.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>The returned value is never negative.</p>
|
||||||
|
+ *
|
||||||
|
+ * @return the number of ticks to stay
|
||||||
|
+ */
|
||||||
|
+ public int getStay() {
|
||||||
|
+ return this.stay;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Gets the number of ticks to fade out.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>The returned value is never negative.</p>
|
||||||
|
+ *
|
||||||
|
+ * @return the number of ticks to fade out
|
||||||
|
+ */
|
||||||
|
+ public int getFadeOut() {
|
||||||
|
+ return this.fadeOut;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static Builder builder() {
|
||||||
|
+ return new Builder();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * A builder for creating titles
|
||||||
|
+ */
|
||||||
|
+ public static final class Builder {
|
||||||
|
+
|
||||||
|
+ private BaseComponent[] title;
|
||||||
|
+ private BaseComponent[] subtitle;
|
||||||
|
+ private int fadeIn = DEFAULT_FADE_IN;
|
||||||
|
+ private int stay = DEFAULT_STAY;
|
||||||
|
+ private int fadeOut = DEFAULT_FADE_OUT;
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the title to the given text.
|
||||||
|
+ *
|
||||||
|
+ * @param title the title text
|
||||||
|
+ * @return this builder instance
|
||||||
|
+ * @throws NullPointerException if the title is null
|
||||||
|
+ */
|
||||||
|
+ public Builder title(BaseComponent title) {
|
||||||
|
+ return this.title(new BaseComponent[]{checkNotNull(title, "title")});
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the title to the given text.
|
||||||
|
+ *
|
||||||
|
+ * @param title the title text
|
||||||
|
+ * @return this builder instance
|
||||||
|
+ * @throws NullPointerException if the title is null
|
||||||
|
+ */
|
||||||
|
+ public Builder title(BaseComponent[] title) {
|
||||||
|
+ this.title = checkNotNull(title, "title");
|
||||||
|
+ return this;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the title to the given text.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>It is recommended to the {@link BaseComponent} methods.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param title the title text
|
||||||
|
+ * @return this builder instance
|
||||||
|
+ * @throws NullPointerException if the title is null
|
||||||
|
+ */
|
||||||
|
+ public Builder title(String title) {
|
||||||
|
+ return this.title(TextComponent.fromLegacyText(checkNotNull(title, "title")));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the subtitle to the given text.
|
||||||
|
+ *
|
||||||
|
+ * @param subtitle the title text
|
||||||
|
+ * @return this builder instance
|
||||||
|
+ */
|
||||||
|
+ public Builder subtitle(BaseComponent subtitle) {
|
||||||
|
+ return this.subtitle(subtitle == null ? null : new BaseComponent[]{subtitle});
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the subtitle to the given text.
|
||||||
|
+ *
|
||||||
|
+ * @param subtitle the title text
|
||||||
|
+ * @return this builder instance
|
||||||
|
+ */
|
||||||
|
+ public Builder subtitle(BaseComponent[] subtitle) {
|
||||||
|
+ this.subtitle = subtitle;
|
||||||
|
+ return this;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the subtitle to the given text.
|
||||||
|
+ * <p>
|
||||||
|
+ * <p>It is recommended to the {@link BaseComponent} methods.</p>
|
||||||
|
+ *
|
||||||
|
+ * @param subtitle the title text
|
||||||
|
+ * @return this builder instance
|
||||||
|
+ */
|
||||||
|
+ public Builder subtitle(String subtitle) {
|
||||||
|
+ return this.subtitle(subtitle == null ? null : TextComponent.fromLegacyText(subtitle));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the number of ticks for the title to fade in
|
||||||
|
+ *
|
||||||
|
+ * @param fadeIn the number of ticks to fade in
|
||||||
|
+ * @return this builder instance
|
||||||
|
+ * @throws IllegalArgumentException if it is negative
|
||||||
|
+ */
|
||||||
|
+ public Builder fadeIn(int fadeIn) {
|
||||||
|
+ checkArgument(fadeIn >= 0, "Negative fadeIn: %s", fadeIn);
|
||||||
|
+ this.fadeIn = fadeIn;
|
||||||
|
+ return this;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the number of ticks for the title to stay.
|
||||||
|
+ *
|
||||||
|
+ * @param stay the number of ticks to stay
|
||||||
|
+ * @return this builder instance
|
||||||
|
+ * @throws IllegalArgumentException if it is negative
|
||||||
|
+ */
|
||||||
|
+ public Builder stay(int stay) {
|
||||||
|
+ checkArgument(stay >= 0, "Negative stay: %s", stay);
|
||||||
|
+ this.stay = stay;
|
||||||
|
+ return this;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Sets the number of ticks for the title to fade out.
|
||||||
|
+ *
|
||||||
|
+ * @param fadeOut the number of ticks to fade out
|
||||||
|
+ * @return this builder instance
|
||||||
|
+ * @throws IllegalArgumentException if it is negative
|
||||||
|
+ */
|
||||||
|
+ public Builder fadeOut(int fadeOut) {
|
||||||
|
+ checkArgument(fadeOut >= 0, "Negative fadeOut: %s", fadeOut);
|
||||||
|
+ this.fadeOut = fadeOut;
|
||||||
|
+ return this;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Create a title based on the values in the builder.
|
||||||
|
+ *
|
||||||
|
+ * @return a title from the values in this builder
|
||||||
|
+ * @throws IllegalStateException if title isn't specified
|
||||||
|
+ */
|
||||||
|
+ public Title build() {
|
||||||
|
+ checkState(title != null, "Title not specified");
|
||||||
|
+ return new Title(this.title, this.subtitle, this.fadeIn, this.stay, this.fadeOut);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
\ No newline at end of file
|
||||||
--
|
--
|
||||||
2.7.1
|
2.7.1
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
From c27a95f1caa97ff1b026429367c16abd20e46ed2 Mon Sep 17 00:00:00 2001
|
From 88944a9edb0263524b98a1f1731831a360de0bd9 Mon Sep 17 00:00:00 2001
|
||||||
From: Jedediah Smith <jedediah@silencegreys.com>
|
From: Techcable <Techcable@outlook.com>
|
||||||
Date: Tue, 16 Feb 2016 19:45:55 -0600
|
Date: Tue, 16 Feb 2016 19:45:55 -0600
|
||||||
Subject: [PATCH] Player Tab List and Title APIs
|
Subject: [PATCH] Player Tab List and Title APIs
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java b/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java b/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java
|
||||||
index 1606d6d..89a5056 100644
|
index 1606d6d..795e70a 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java
|
||||||
@@ -4,6 +4,8 @@ import java.io.IOException;
|
@@ -4,6 +4,8 @@ import java.io.IOException;
|
||||||
|
@ -17,7 +17,7 @@ index 1606d6d..89a5056 100644
|
||||||
private IChatBaseComponent a;
|
private IChatBaseComponent a;
|
||||||
private IChatBaseComponent b;
|
private IChatBaseComponent b;
|
||||||
|
|
||||||
@@ -19,15 +21,22 @@ public class PacketPlayOutPlayerListHeaderFooter implements Packet<PacketListene
|
@@ -19,15 +21,30 @@ public class PacketPlayOutPlayerListHeaderFooter implements Packet<PacketListene
|
||||||
}
|
}
|
||||||
|
|
||||||
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||||||
|
@ -41,13 +41,17 @@ index 1606d6d..89a5056 100644
|
||||||
public void a(PacketListenerPlayOut packetlistenerplayout) {
|
public void a(PacketListenerPlayOut packetlistenerplayout) {
|
||||||
packetlistenerplayout.a(this);
|
packetlistenerplayout.a(this);
|
||||||
}
|
}
|
||||||
-
|
|
||||||
- public void a(PacketListener packetlistener) {
|
+ // PaperSpigot start - fix compile error
|
||||||
- this.a((PacketListenerPlayOut) packetlistener);
|
+ /*
|
||||||
- }
|
public void a(PacketListener packetlistener) {
|
||||||
|
this.a((PacketListenerPlayOut) packetlistener);
|
||||||
|
}
|
||||||
|
+ */
|
||||||
|
+ // PaperSpigot end
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutTitle.java b/src/main/java/net/minecraft/server/PacketPlayOutTitle.java
|
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutTitle.java b/src/main/java/net/minecraft/server/PacketPlayOutTitle.java
|
||||||
index 2711298..071215e 100644
|
index 2711298..20016b5 100644
|
||||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutTitle.java
|
--- a/src/main/java/net/minecraft/server/PacketPlayOutTitle.java
|
||||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutTitle.java
|
+++ b/src/main/java/net/minecraft/server/PacketPlayOutTitle.java
|
||||||
@@ -10,6 +10,18 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
@@ -10,6 +10,18 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||||
|
@ -84,22 +88,35 @@ index 2711298..071215e 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.a == EnumTitleAction.TIMES) {
|
if (this.a == EnumTitleAction.TIMES) {
|
||||||
@@ -60,10 +78,6 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
@@ -60,9 +78,13 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||||
packetlistenerplayout.a(this);
|
packetlistenerplayout.a(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
- public void a(PacketListener packetlistener) {
|
+ // PaperSpigot start - fix compile error
|
||||||
- this.a((PacketListenerPlayOut) packetlistener);
|
+ /*
|
||||||
- }
|
public void a(PacketListener packetlistener) {
|
||||||
-
|
this.a((PacketListenerPlayOut) packetlistener);
|
||||||
|
}
|
||||||
|
+ */
|
||||||
|
+ // PaperSpigot end
|
||||||
|
|
||||||
public static enum EnumTitleAction {
|
public static enum EnumTitleAction {
|
||||||
|
|
||||||
TITLE, SUBTITLE, TIMES, CLEAR, RESET;
|
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||||
index dba0520..cabef35 100644
|
index dba0520..3075076 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||||
@@ -176,6 +176,65 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
@@ -64,6 +64,9 @@ import org.bukkit.metadata.MetadataValue;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
import org.bukkit.plugin.messaging.StandardMessenger;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
+// PaperSpigot start
|
||||||
|
+import org.github.paperspigot.Title;
|
||||||
|
+// PaperSpigot end
|
||||||
|
|
||||||
|
@DelegateDeserialization(CraftOfflinePlayer.class)
|
||||||
|
public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
|
@@ -176,6 +179,83 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
packet.components = components;
|
packet.components = components;
|
||||||
getHandle().playerConnection.sendPacket(packet);
|
getHandle().playerConnection.sendPacket(packet);
|
||||||
}
|
}
|
||||||
|
@ -159,6 +176,24 @@ index dba0520..cabef35 100644
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
|
+ public void sendTitle(Title title) {
|
||||||
|
+ Preconditions.checkNotNull(title, "Title is null");
|
||||||
|
+ setTitleTimes(title.getFadeIn(), title.getStay(), title.getFadeOut());
|
||||||
|
+ setSubtitle(title.getSubtitle() == null ? new BaseComponent[0] : title.getSubtitle());
|
||||||
|
+ showTitle(title.getTitle());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void updateTitle(Title title) {
|
||||||
|
+ Preconditions.checkNotNull(title, "Title is null");
|
||||||
|
+ setTitleTimes(title.getFadeIn(), title.getStay(), title.getFadeOut());
|
||||||
|
+ if (title.getSubtitle() != null) {
|
||||||
|
+ setSubtitle(title.getSubtitle());
|
||||||
|
+ }
|
||||||
|
+ showTitle(title.getTitle());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
+ public void hideTitle() {
|
+ public void hideTitle() {
|
||||||
+ getHandle().playerConnection.sendPacket(new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.CLEAR, (BaseComponent[]) null, 0, 0, 0));
|
+ getHandle().playerConnection.sendPacket(new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.CLEAR, (BaseComponent[]) null, 0, 0, 0));
|
||||||
+ }
|
+ }
|
||||||
|
|
Loading…
Reference in a new issue