Skip to content

Commit 4b1d7bc

Browse files
committed
Untangled code from BattleInterface
1 parent a54d5e0 commit 4b1d7bc

File tree

13 files changed

+876
-0
lines changed

13 files changed

+876
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/*target/
2+
/*.idea/

pom.xml

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>com.sentropic.guiapi</groupId>
8+
<artifactId>GUI-API</artifactId>
9+
<version>1.0-alpha.1</version>
10+
<packaging>jar</packaging>
11+
12+
<name>GUI API</name>
13+
14+
<properties>
15+
<java.version>1.8</java.version>
16+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
17+
</properties>
18+
19+
<build>
20+
<defaultGoal>clean package</defaultGoal>
21+
<plugins>
22+
<plugin>
23+
<groupId>org.apache.maven.plugins</groupId>
24+
<artifactId>maven-compiler-plugin</artifactId>
25+
<version>3.7.0</version>
26+
<configuration>
27+
<source>${java.version}</source>
28+
<target>${java.version}</target>
29+
</configuration>
30+
</plugin>
31+
<plugin>
32+
<groupId>org.apache.maven.plugins</groupId>
33+
<artifactId>maven-shade-plugin</artifactId>
34+
<version>3.1.0</version>
35+
<executions>
36+
<execution>
37+
<phase>package</phase>
38+
<goals>
39+
<goal>shade</goal>
40+
</goals>
41+
<configuration>
42+
<createDependencyReducedPom>false</createDependencyReducedPom>
43+
</configuration>
44+
</execution>
45+
</executions>
46+
</plugin>
47+
</plugins>
48+
<resources>
49+
<resource>
50+
<directory>src/main/resources</directory>
51+
<filtering>true</filtering>
52+
</resource>
53+
</resources>
54+
</build>
55+
<repositories>
56+
<repository>
57+
<id>spigotmc-repo</id>
58+
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
59+
</repository>
60+
<repository>
61+
<id>md_5-public</id>
62+
<url>http://repo.md-5.net/content/groups/public/</url>
63+
</repository>
64+
<repository>
65+
<id>jitpack.io</id>
66+
<url>https://jitpack.io</url>
67+
</repository>
68+
</repositories>
69+
<dependencies>
70+
<dependency>
71+
<groupId>org.spigotmc</groupId>
72+
<artifactId>spigot</artifactId>
73+
<version>1.16.1-R0.1-SNAPSHOT</version>
74+
</dependency>
75+
<dependency>
76+
<groupId>com.github.dmulloy2</groupId>
77+
<artifactId>ProtocolLib</artifactId>
78+
<version>7bac4ec634</version>
79+
</dependency>
80+
<dependency>
81+
<groupId>org.jetbrains</groupId>
82+
<artifactId>annotations-java5</artifactId>
83+
<version>21.0.1</version>
84+
</dependency>
85+
</dependencies>
86+
</project>
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.sentropic.guiapi;
2+
3+
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.ProtocolLibrary;
5+
import com.comphenix.protocol.ProtocolManager;
6+
import com.sentropic.guiapi.command.ReloadCommand;
7+
import com.sentropic.guiapi.listener.PacketListener;
8+
import org.bukkit.event.HandlerList;
9+
import org.bukkit.plugin.java.JavaPlugin;
10+
11+
public final class GUIAPI extends JavaPlugin {
12+
private static GUIAPI singleton;
13+
private static GUIManager guiManager;
14+
public static ProtocolManager protocolManager;
15+
private static PacketListener packetListener;
16+
17+
@Override
18+
public void onEnable() {
19+
if (singleton != null) { throw new IllegalStateException(); }
20+
saveDefaultConfig();
21+
reloadConfig();
22+
// TODO add config for character widths
23+
this.getCommand("guiapi").setExecutor(new ReloadCommand());
24+
25+
guiManager = new GUIManager();
26+
getServer().getPluginManager().registerEvents(guiManager, this);
27+
28+
protocolManager = ProtocolLibrary.getProtocolManager();
29+
packetListener = new PacketListener(this, PacketType.Play.Server.TITLE);
30+
protocolManager.addPacketListener(packetListener);
31+
32+
singleton = this;
33+
}
34+
35+
@Override
36+
public void onDisable() {
37+
HandlerList.unregisterAll(guiManager);
38+
guiManager.close();
39+
guiManager = null;
40+
41+
protocolManager.removePacketListener(packetListener);
42+
packetListener = null;
43+
protocolManager = null;
44+
45+
singleton = null;
46+
}
47+
48+
public static GUIAPI getPlugin() { return singleton; }
49+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.sentropic.guiapi;
2+
3+
import com.sentropic.guiapi.gui.GUI;
4+
import org.bukkit.GameMode;
5+
import org.bukkit.entity.Player;
6+
import org.bukkit.event.EventHandler;
7+
import org.bukkit.event.Listener;
8+
import org.bukkit.event.player.PlayerQuitEvent;
9+
import org.bukkit.scheduler.BukkitRunnable;
10+
11+
import java.util.HashMap;
12+
import java.util.Map;
13+
14+
public class GUIManager implements Listener {
15+
private final Map<Player,GUI> GUIS = new HashMap<>();
16+
private final Task task = new Task();
17+
18+
//TODO test bigger periods
19+
GUIManager() { task.runTaskTimer(GUIAPI.getPlugin(), 0, 1); }
20+
21+
void close() {
22+
try {
23+
task.cancel();
24+
} catch (IllegalStateException ignored) { }
25+
}
26+
27+
public GUI getGUI(Player player) {
28+
GUI gui = GUIS.get(player);
29+
if (gui == null) {
30+
gui = new GUI(player);
31+
GUIS.put(player, gui);
32+
}
33+
return gui;
34+
}
35+
36+
@EventHandler
37+
public void onPlayerLeave(PlayerQuitEvent event) { GUIS.remove(event.getPlayer()); }
38+
39+
public class Task extends BukkitRunnable {
40+
@Override
41+
public void run() {
42+
GUIS.values().stream()
43+
.filter(gui -> !gui.getPlayer().getGameMode().equals(GameMode.CREATIVE))
44+
.forEach(GUI::play);
45+
}
46+
}
47+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.sentropic.guiapi.command;
2+
3+
import com.sentropic.guiapi.GUIAPI;
4+
import org.bukkit.ChatColor;
5+
import org.bukkit.command.Command;
6+
import org.bukkit.command.CommandExecutor;
7+
import org.bukkit.command.CommandSender;
8+
9+
public class ReloadCommand implements CommandExecutor {
10+
@Override
11+
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
12+
if (args.length == 1 && args[0].equals("reload")) {
13+
GUIAPI.getPlugin().reloadConfig();
14+
sender.sendMessage(ChatColor.GREEN+"[GUIAPI] Reloaded config.yml");
15+
return true;
16+
}
17+
return false;
18+
}
19+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package com.sentropic.guiapi.gui;
2+
3+
import javax.annotation.Nullable;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
7+
public class Font {
8+
9+
// Static code
10+
11+
public static final Font DEFAULT = new Font("minecraft:default", 8);
12+
private static final Map<String,Font> registeredFonts = new HashMap<>();
13+
14+
static {
15+
DEFAULT.registerWidth('I', 4);
16+
DEFAULT.registerWidth('f', 5);
17+
DEFAULT.registerWidth('i', 2);
18+
DEFAULT.registerWidth('k', 5);
19+
DEFAULT.registerWidth('l', 3);
20+
DEFAULT.registerWidth('t', 4);
21+
DEFAULT.registerWidth(' ', 4);
22+
DEFAULT.registerWidth('.', 2);
23+
24+
register(DEFAULT);
25+
}
26+
27+
@Nullable
28+
public static Font ofName(String name) { return registeredFonts.get(name); }
29+
30+
public static void register(Font font) {
31+
String name = font.getName();
32+
if (registeredFonts.containsKey(name)) {
33+
throw new IllegalArgumentException("Font \""+name+"\" already exists");
34+
}
35+
registeredFonts.put(name, font);
36+
}
37+
38+
public static boolean unregister(Font font) {
39+
boolean success = false;
40+
if (registeredFonts != null) { success = registeredFonts.remove(font.toString()) != null; }
41+
return success;
42+
}
43+
44+
// Instance code
45+
46+
private final String name;
47+
private final int height;
48+
private Map<Character,Integer> widths;
49+
50+
public Font(String name, int height) {
51+
this.name = name;
52+
if (height < 5) { height += 1; } // Correction necessary for some reason
53+
this.height = height;
54+
}
55+
56+
public void registerWidth(char character, int width) {
57+
if (widths == null) { widths = new HashMap<>(); }
58+
widths.put(character, width);
59+
}
60+
61+
public int getWidth(char character, boolean custom) {
62+
int result = this == DEFAULT ?
63+
widths.getOrDefault(character, 6) :
64+
widths.getOrDefault(character, DEFAULT.getWidth(character, custom));
65+
if (!custom) {
66+
result = Math.round(result*height/8f); // Scale
67+
}
68+
return result;
69+
}
70+
71+
public int getWidth(String text) {
72+
if (text.equals("")) { return 0; }
73+
int total = 0;
74+
for (char character : text.toCharArray()) { total += getWidth(character, false); }
75+
return total;
76+
}
77+
78+
@Override
79+
public String toString() { return name; }
80+
81+
public String getName() { return name; }
82+
83+
public int getHeight() { return height; }
84+
}

0 commit comments

Comments
 (0)