Files
Paper/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServerLinks.java
Riley Park 66779f5c86 Adventure
== AT ==
public net.minecraft.network.chat.HoverEvent$ItemStackInfo item
public net.minecraft.network.chat.HoverEvent$ItemStackInfo count
public net.minecraft.network.chat.HoverEvent$ItemStackInfo components
public net.minecraft.network.chat.contents.TranslatableContents filterAllowedArguments(Ljava/lang/Object;)Lcom/mojang/serialization/DataResult;

Co-authored-by: zml <zml@stellardrift.ca>
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
2021-01-29 17:54:03 +01:00

163 lines
5.4 KiB
Java

package org.bukkit.craftbukkit;
import com.google.common.base.Preconditions;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.server.dedicated.DedicatedServer;
import org.bukkit.ServerLinks;
import org.bukkit.craftbukkit.util.CraftChatMessage;
public class CraftServerLinks implements ServerLinks {
private final DedicatedServer server;
private net.minecraft.server.ServerLinks serverLinks;
public CraftServerLinks(DedicatedServer server) {
this(server, null);
}
public CraftServerLinks(net.minecraft.server.ServerLinks serverLinks) {
this(null, serverLinks);
}
private CraftServerLinks(DedicatedServer server, net.minecraft.server.ServerLinks serverLinks) {
this.server = server;
this.serverLinks = serverLinks;
}
@Override
public ServerLink getLink(Type type) {
Preconditions.checkArgument(type != null, "type cannot be null");
return this.getServerLinks().findKnownType(CraftServerLinks.fromBukkit(type)).map(CraftServerLink::new).orElse(null);
}
@Override
public List<ServerLink> getLinks() {
return this.getServerLinks().entries().stream().map(nms -> (ServerLink) new CraftServerLink(nms)).toList();
}
@Override
public ServerLink setLink(Type type, URI url) {
Preconditions.checkArgument(type != null, "type cannot be null");
Preconditions.checkArgument(url != null, "url cannot be null");
ServerLink existing = this.getLink(type);
if (existing != null) {
this.removeLink(existing);
}
return this.addLink(type, url);
}
@Override
public ServerLink addLink(Type type, URI url) {
Preconditions.checkArgument(type != null, "type cannot be null");
Preconditions.checkArgument(url != null, "url cannot be null");
CraftServerLink link = new CraftServerLink(net.minecraft.server.ServerLinks.Entry.knownType(CraftServerLinks.fromBukkit(type), url));
this.addLink(link);
return link;
}
// Paper start - Adventure
@Override
public ServerLink addLink(net.kyori.adventure.text.Component displayName, URI url) {
Preconditions.checkArgument(displayName != null, "displayName cannot be null");
Preconditions.checkArgument(url != null, "url cannot be null");
CraftServerLink link = new CraftServerLink(net.minecraft.server.ServerLinks.Entry.custom(io.papermc.paper.adventure.PaperAdventure.asVanilla(displayName), url));
this.addLink(link);
return link;
}
// Paper end - Adventure
@Override
public ServerLink addLink(String displayName, URI url) {
Preconditions.checkArgument(displayName != null, "displayName cannot be null");
Preconditions.checkArgument(url != null, "url cannot be null");
CraftServerLink link = new CraftServerLink(net.minecraft.server.ServerLinks.Entry.custom(CraftChatMessage.fromStringOrNull(displayName), url));
this.addLink(link);
return link;
}
private void addLink(CraftServerLink link) {
List<net.minecraft.server.ServerLinks.Entry> lst = new ArrayList<>(this.getServerLinks().entries());
lst.add(link.handle);
this.setLinks(new net.minecraft.server.ServerLinks(lst));
}
@Override
public boolean removeLink(ServerLink link) {
Preconditions.checkArgument(link != null, "link cannot be null");
List<net.minecraft.server.ServerLinks.Entry> lst = new ArrayList<>(this.getServerLinks().entries());
boolean result = lst.remove(((CraftServerLink) link).handle);
this.setLinks(new net.minecraft.server.ServerLinks(lst));
return result;
}
@Override
public ServerLinks copy() {
return new CraftServerLinks(this.getServerLinks());
}
public net.minecraft.server.ServerLinks getServerLinks() {
return (this.server != null) ? this.server.serverLinks() : this.serverLinks;
}
private void setLinks(net.minecraft.server.ServerLinks links) {
if (this.server != null) {
this.server.serverLinks = links;
} else {
this.serverLinks = links;
}
}
private static net.minecraft.server.ServerLinks.KnownLinkType fromBukkit(Type type) {
return net.minecraft.server.ServerLinks.KnownLinkType.values()[type.ordinal()];
}
private static ServerLinks.Type fromNMS(net.minecraft.server.ServerLinks.KnownLinkType nms) {
return ServerLinks.Type.values()[nms.ordinal()];
}
public static class CraftServerLink implements ServerLink {
private final net.minecraft.server.ServerLinks.Entry handle;
public CraftServerLink(net.minecraft.server.ServerLinks.Entry handle) {
this.handle = handle;
}
@Override
public Type getType() {
return this.handle.type().left().map(CraftServerLinks::fromNMS).orElse(null);
}
@Override
public String getDisplayName() {
return CraftChatMessage.fromComponent(this.handle.displayName());
}
// Paper start - Adventure
@Override
public net.kyori.adventure.text.Component displayName() {
return io.papermc.paper.adventure.PaperAdventure.asAdventure(this.handle.displayName());
}
// Paper end - Adventure
@Override
public URI getUrl() {
return this.handle.link();
}
}
}