Skip to content

Commit

Permalink
Added spigot plugin to hook PlaceholderAPI
Browse files Browse the repository at this point in the history
  • Loading branch information
QuickGlare committed Sep 8, 2020
1 parent 1f08845 commit ea033d0
Show file tree
Hide file tree
Showing 23 changed files with 582 additions and 136 deletions.
87 changes: 9 additions & 78 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,83 +4,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>io.alerium</groupId>
<artifactId>Chocolate</artifactId>
<version>1.0.0-SNAPSHOT</version>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

<repositories>
<repository>
<id>velocity</id>
<url>https://repo.velocitypowered.com/snapshots/</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>com.velocitypowered</groupId>
<artifactId>velocity-api</artifactId>
<version>1.0.8-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>me.minidigger</groupId>
<artifactId>minimessage-text</artifactId>
<version>2.0.4</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
<scope>compile</scope>
</dependency>
</dependencies>

<groupId>io.alerium.chocolate</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
<version>1.1.0-SNAPSHOT</version>

<modules>
<module>velocity</module>
<module>spigot</module>
</modules>

</project>
65 changes: 65 additions & 0 deletions spigot/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<artifactId>parent</artifactId>
<groupId>io.alerium.chocolate</groupId>
<version>1.1.0-SNAPSHOT</version>
</parent>

<artifactId>spigot</artifactId>
<name>ChocolateSpigot</name>

<build>
<finalName>${project.name}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>

<repositories>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>

<repository>
<id>placeholderapi</id>
<url>http://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.15.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.10.9</version>
<scope>provided</scope>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package io.alerium.chocolate.spigot;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import io.alerium.chocolate.spigot.hooks.PAPIExpansion;
import io.alerium.chocolate.spigot.listeners.MessageListener;
import io.alerium.chocolate.spigot.listeners.PlayerListener;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

public class ChocolateSpigotPlugin extends JavaPlugin {

private final Cache<String, Integer> onlinePlayers = CacheBuilder.newBuilder()
.expireAfterWrite(1, TimeUnit.MINUTES)
.build();

private final Map<UUID, String> playersProxy = new HashMap<>();

@Override
public void onEnable() {
registerListeners();
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "Chocolate");
new PAPIExpansion(this).register();
}

@Override
public void onDisable() {

}

private void registerListeners() {
Bukkit.getPluginManager().registerEvents(new PlayerListener(this), this);
Bukkit.getMessenger().registerIncomingPluginChannel(this, "Chocolate", new MessageListener(this));
}

public int getOnlinePlayers(Player player, String server) {
Integer players = onlinePlayers.getIfPresent(server.toLowerCase());
if (players == null) {
players = -1;
onlinePlayers.put(server.toLowerCase(), players);

ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF("PlayerCount");
output.writeUTF(server);

player.sendPluginMessage(this, "Chocolate", output.toByteArray());
}

return players;
}

public void updateOnlinePlayers(String server, int amount) {
onlinePlayers.put(server.toLowerCase(), amount);
}

public String getPlayerProxy(Player player) {
if (!playersProxy.containsKey(player.getUniqueId())) {
playersProxy.put(player.getUniqueId(), null);

ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeUTF("Proxy");
output.writeUTF(player.getUniqueId().toString());

player.sendPluginMessage(this, "Chocolate", output.toByteArray());
return null;
}

return playersProxy.get(player.getUniqueId());
}

public void updatePlayerProxy(UUID uuid, String proxy) {
Player player = Bukkit.getPlayer(uuid);
if (player == null || !player.isOnline())
return;

playersProxy.put(uuid, proxy);
}

public void removePlayerProxy(UUID uuid) {
playersProxy.remove(uuid);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package io.alerium.chocolate.spigot.hooks;

import io.alerium.chocolate.spigot.ChocolateSpigotPlugin;
import lombok.RequiredArgsConstructor;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

@RequiredArgsConstructor
public class PAPIExpansion extends PlaceholderExpansion {

private final ChocolateSpigotPlugin plugin;

public @NotNull String getIdentifier() {
return "chocolate";
}

public @NotNull String getAuthor() {
return "xQuickGlare";
}

public @NotNull String getVersion() {
return "1.0.0";
}

@Override
public String onPlaceholderRequest(Player player, @NotNull String params) {
if (params.equalsIgnoreCase("total_count")) {
int amount = plugin.getOnlinePlayers(player, "ALL");
if (amount == -1)
return "";
return Integer.toString(1);
}

if (params.equalsIgnoreCase("player_proxy")) {
String proxy = plugin.getPlayerProxy(player);
if (proxy == null)
return "";
return proxy;
}

if (params.startsWith("server_")) {
String server = params.split("_")[1];
int amount = plugin.getOnlinePlayers(player, server);
if (amount == -1)
return "";
return Integer.toString(amount);
}
return "";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package io.alerium.chocolate.spigot.listeners;

import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams;
import io.alerium.chocolate.spigot.ChocolateSpigotPlugin;
import lombok.RequiredArgsConstructor;
import org.bukkit.entity.Player;
import org.bukkit.plugin.messaging.PluginMessageListener;
import org.jetbrains.annotations.NotNull;

import java.util.UUID;

@RequiredArgsConstructor
public class MessageListener implements PluginMessageListener {

private final ChocolateSpigotPlugin plugin;

public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] data) {
if (!channel.equalsIgnoreCase("Chocolate"))
return;

ByteArrayDataInput input = ByteStreams.newDataInput(data);
String subChannel = input.readUTF();

switch (subChannel.toUpperCase()) {
case "PROXY":
UUID uuid = UUID.fromString(input.readUTF());
String proxy = input.readUTF();
plugin.updatePlayerProxy(uuid, proxy);
break;

case "PLAYERCOUNT":
String server = input.readUTF();
int amount = input.readInt();
plugin.updateOnlinePlayers(server, amount);
break;
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.alerium.chocolate.spigot.listeners;

import io.alerium.chocolate.spigot.ChocolateSpigotPlugin;
import lombok.RequiredArgsConstructor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;

@RequiredArgsConstructor
public class PlayerListener implements Listener {

private final ChocolateSpigotPlugin plugin;

@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
plugin.removePlayerProxy(event.getPlayer().getUniqueId());
}

}
4 changes: 4 additions & 0 deletions spigot/src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name: Chocolate
author: xQuickGlare
version: 1.1.0
main: io.alerium.chocolate.spigot.ChocolateSpigotPlugin
Loading

0 comments on commit ea033d0

Please sign in to comment.