Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
2eeb609
feat: ChatPlayerList
vakiliner Jan 9, 2026
3a4e326
fix: Бел новой строки
vakiliner Jan 9, 2026
10b7210
perf: Заменить ChatMessageType на boolean
vakiliner Jan 9, 2026
1c413fa
Merge branch 'main' into feat/chat-player-list
vakiliner Jan 10, 2026
656e374
refactor: Объединить BukkitChatServer с BukkitChatPlayerList
vakiliner Jan 10, 2026
b1bd523
Merge branch 'feat/chat-player-list' of https://github.com/vakiliner/…
vakiliner Jan 10, 2026
5e1bdb6
fix: Spigot удалить лишнюю строку
vakiliner Jan 10, 2026
72955dc
feat: Функции для ChatPlayerList
vakiliner Jan 10, 2026
abe899e
Merge branch 'main' into feat/chat-player-list
vakiliner Jan 16, 2026
398b7b6
Merge branch 'main' into feat/chat-player-list
vakiliner Jan 20, 2026
c14e50d
fix: Console message for Fabric & Forge
vakiliner Jan 21, 2026
613308c
Merge branch 'main' into feat/chat-player-list
vakiliner Jan 25, 2026
c71f0b1
feat: ParseIterator & ParseCollection
vakiliner Jan 25, 2026
586973a
perf: Use ParseCollection for ChatPlayerList.getPlayers()
vakiliner Jan 25, 2026
8516896
Merge branch 'main' into feat/chat-player-list
vakiliner Feb 1, 2026
9655c57
feat: ChatPlayerList.broadcastMessage(ChatComponent)
vakiliner Feb 5, 2026
e0c0821
Merge branch 'main' into feat/chat-player-list
vakiliner Feb 6, 2026
3361025
Merge branch 'main' into feat/chat-player-list
vakiliner Feb 7, 2026
8af15c7
refactor: Override method equals
vakiliner Feb 7, 2026
56a0261
refactor: Make fields ChatServer & ChatPlayerList as protected
vakiliner Feb 7, 2026
9066c4d
Merge branch 'main' into feat/chat-player-list
vakiliner Feb 7, 2026
b07450f
Merge branch 'main' into feat/chat-player-list
vakiliner Feb 7, 2026
a5eb568
Merge branch 'main' into feat/chat-player-list
vakiliner Feb 9, 2026
5f3d9c1
feat: ChatPlayerList.getPlayer(String)
vakiliner Feb 9, 2026
c22469a
feat: ChatBanList
vakiliner Feb 10, 2026
2bc913b
feat: ChatStoredUserList.remove(K)
vakiliner Feb 10, 2026
7ca8923
refactor: Change param names
vakiliner Feb 10, 2026
d74c489
feat: ChatStoredUserList.add(Key)
vakiliner Feb 10, 2026
0246dea
feat: ChatBanList<Key>
vakiliner Feb 10, 2026
483861a
Merge branch 'main' into feat/chat-player-list
vakiliner Feb 11, 2026
4100748
fix: broadcastMessage null uuid for Fabric & Forge
vakiliner Feb 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package vakiliner.chatcomponentapi.base;

import java.util.Date;

public interface ChatBanEntry extends ChatStoredUserEntry {
String getSource();

Date getExpires();

String getReason();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package vakiliner.chatcomponentapi.base;

import java.util.Date;

public interface ChatBanList<Key> extends ChatStoredUserList<Key, ChatBanEntry> {
ChatBanEntry add(Key key, String reason, String source, Date expires);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package vakiliner.chatcomponentapi.base;

public interface ChatIpBanList extends ChatBanList<String> {
boolean isBanned(String ip);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package vakiliner.chatcomponentapi.base;

import java.util.Collection;
import java.util.UUID;
import vakiliner.chatcomponentapi.common.ChatMessageType;
import vakiliner.chatcomponentapi.component.ChatComponent;

public interface ChatPlayerList {
ChatServer getServer();

ChatIpBanList getIpBanList();

ChatUserBanList getUserBanList();

int getPlayerCount();

int getMaxPlayers();

int getViewDistance();

Collection<ChatPlayer> getPlayers();

ChatPlayer getPlayer(UUID uuid);

ChatPlayer getPlayer(String name);

default void broadcastMessage(ChatComponent component) {
this.broadcastMessage(component, ChatMessageType.SYSTEM, null);
}

void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package vakiliner.chatcomponentapi.base;

public interface ChatServer {
ChatPlayerList getPlayerList();

public void execute(IChatPlugin plugin, Runnable runnable);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package vakiliner.chatcomponentapi.base;

public interface ChatStoredUserEntry {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package vakiliner.chatcomponentapi.base;

import java.util.Collection;

public interface ChatStoredUserList<Key, Entry extends ChatStoredUserEntry> {
Entry add(Key key);

Entry get(Key key);

void remove(Key key);

Collection<Entry> getEntries();

boolean isEmpty();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package vakiliner.chatcomponentapi.base;

import com.mojang.authlib.GameProfile;

public interface ChatUserBanList extends ChatBanList<GameProfile> {
boolean isBanned(GameProfile gameProfile);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package vakiliner.chatcomponentapi.util;

import java.util.AbstractCollection;
import java.util.Collection;
import java.util.Iterator;
import java.util.function.Function;

public class ParseCollection<Output, Input> extends AbstractCollection<Output> {
protected final Collection<? extends Input> original;
protected final Function<Input, Output> i2o;

public ParseCollection(Collection<? extends Input> original, Function<Input, Output> i2o) {
this.original = original;
this.i2o = i2o;
}

public Collection<? extends Input> getImpl() {
return original;
}

public Iterator<Output> iterator() {
return new ParseIterator<>(this.original.iterator(), this.i2o);
}

public int size() {
return this.original.size();
}

public boolean isEmpty() {
return this.original.isEmpty();
}

public boolean add(Output e) {
throw new UnsupportedOperationException();
}

public void clear() {
this.original.clear();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package vakiliner.chatcomponentapi.util;

import java.util.Iterator;
import java.util.function.Function;

public class ParseIterator<Output, Input> implements Iterator<Output> {
protected final Iterator<? extends Input> original;
protected final Function<Input, Output> i2o;

public ParseIterator(Iterator<? extends Input> original, Function<Input, Output> i2o) {
this.original = original;
this.i2o = i2o;
}

public Iterator<? extends Input> getImpl() {
return this.original;
}

public boolean hasNext() {
return this.original.hasNext();
}

public Output next() {
return this.i2o.apply(this.original.next());
}

public void remove() {
this.original.remove();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package vakiliner.chatcomponentapi.craftbukkit;

import java.util.Date;
import org.bukkit.BanEntry;
import vakiliner.chatcomponentapi.base.ChatBanEntry;

public class BukkitChatBanEntry implements ChatBanEntry {
protected final BukkitParser parser;
protected final BanEntry banEntry;

public BukkitChatBanEntry(BukkitParser parser, BanEntry banEntry) {
this.parser = parser;
this.banEntry = banEntry;
}

public BanEntry getImpl() {
return this.banEntry;
}

public String getReason() {
return this.banEntry.getReason();
}

public String getSource() {
return this.banEntry.getSource();
}

public Date getExpires() {
return this.banEntry.getExpiration();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package vakiliner.chatcomponentapi.craftbukkit;

import java.util.Collection;
import java.util.Date;
import org.bukkit.BanList;
import vakiliner.chatcomponentapi.base.ChatBanEntry;
import vakiliner.chatcomponentapi.base.ChatBanList;
import vakiliner.chatcomponentapi.util.ParseCollection;

public abstract class BukkitChatBanList<K> implements ChatBanList<K> {
protected final BukkitParser parser;
protected final BanList banList;

public BukkitChatBanList(BukkitParser parser, BanList banList) {
this.parser = parser;
this.banList = banList;
}

public BanList getImpl() {
return this.banList;
}

public ChatBanEntry add(String key) {
return this.add(key, null, null, null);
}

public ChatBanEntry add(String key, String reason, String source, Date expires) {
return this.parser.toChatBanEntry(this.banList.addBan(key, reason, expires, source));
}

public ChatBanEntry get(String key) {
return this.parser.toChatBanEntry(this.banList.getBanEntry(key));
}

public void remove(String key) {
this.banList.pardon(key);
}

public boolean isBanned(String key) {
return this.banList.isBanned(key);
}

public Collection<ChatBanEntry> getEntries() {
return new ParseCollection<>(this.banList.getBanEntries(), this.parser::toChatBanEntry);
}

public boolean isEmpty() {
return this.banList.getBanEntries().isEmpty();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package vakiliner.chatcomponentapi.craftbukkit;

import org.bukkit.BanList;
import vakiliner.chatcomponentapi.base.ChatIpBanList;

public class BukkitChatIpBanList extends BukkitChatBanList<String> implements ChatIpBanList {
public BukkitChatIpBanList(BukkitParser parser, BanList banList) {
super(parser, banList);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
package vakiliner.chatcomponentapi.craftbukkit;

import java.util.Collection;
import java.util.Objects;
import java.util.UUID;
import org.bukkit.Server;
import org.bukkit.BanList.Type;
import vakiliner.chatcomponentapi.base.ChatIpBanList;
import vakiliner.chatcomponentapi.base.ChatPlayer;
import vakiliner.chatcomponentapi.base.ChatPlayerList;
import vakiliner.chatcomponentapi.base.ChatServer;
import vakiliner.chatcomponentapi.base.ChatUserBanList;
import vakiliner.chatcomponentapi.base.IChatPlugin;
import vakiliner.chatcomponentapi.common.ChatMessageType;
import vakiliner.chatcomponentapi.component.ChatComponent;
import vakiliner.chatcomponentapi.util.ParseCollection;

public class BukkitChatServer implements ChatServer {
public class BukkitChatServer implements ChatServer, ChatPlayerList {
protected final BukkitParser parser;
protected final Server server;

Expand All @@ -18,6 +28,50 @@ public Server getImpl() {
return this.server;
}

public ChatServer getServer() {
return this;
}

public ChatPlayerList getPlayerList() {
return this;
}

public ChatIpBanList getIpBanList() {
return this.parser.toChatIpBanList(this.server.getBanList(Type.IP));
}

public ChatUserBanList getUserBanList() {
return this.parser.toChatUserBanList(this.server.getBanList(Type.NAME));
}

public int getPlayerCount() {
return this.server.getOnlinePlayers().size();
}

public int getMaxPlayers() {
return this.server.getMaxPlayers();
}

public int getViewDistance() {
return this.server.getViewDistance();
}

public Collection<ChatPlayer> getPlayers() {
return new ParseCollection<>(this.server.getOnlinePlayers(), this.parser::toChatPlayer);
}

public ChatPlayer getPlayer(UUID uuid) {
return this.parser.toChatPlayer(this.server.getPlayer(uuid));
}

public ChatPlayer getPlayer(String name) {
return this.parser.toChatPlayer(this.server.getPlayerExact(name));
}

public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) {
this.parser.broadcastMessage(this.server, component, type, uuid);
}

public void execute(IChatPlugin plugin, Runnable runnable) {
this.parser.execute(this.server.getScheduler(), plugin, runnable);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package vakiliner.chatcomponentapi.craftbukkit;

import java.util.Date;
import org.bukkit.BanList;
import com.mojang.authlib.GameProfile;
import vakiliner.chatcomponentapi.base.ChatBanEntry;
import vakiliner.chatcomponentapi.base.ChatUserBanList;

public class BukkitChatUserBanList extends BukkitChatBanList<GameProfile> implements ChatUserBanList {
public BukkitChatUserBanList(BukkitParser parser, BanList banList) {
super(parser, banList);
}

public ChatBanEntry add(GameProfile key) {
return this.add(key.getName());
}

public ChatBanEntry add(GameProfile key, String reason, String source, Date expires) {
return this.add(key.getName(), reason, source, expires);
}

public ChatBanEntry get(GameProfile key) {
return this.get(key.getName());
}

public void remove(GameProfile key) {
this.remove(key.getName());
}

public boolean isBanned(GameProfile gameProfile) {
return this.isBanned(gameProfile.getName());
}
}
Loading