Skip to content

Commit 81a273c

Browse files
committed
Add sportpaper platform implementation
Signed-off-by: Christopher White <[email protected]>
1 parent 3a8100f commit 81a273c

File tree

63 files changed

+1509
-1029
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1509
-1029
lines changed

buildSrc/src/main/kotlin/buildlogic.java-conventions.gradle.kts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,20 @@ dependencies {
2929
implementation("net.kyori:adventure-api:4.17.0")
3030
implementation("net.kyori:adventure-text-serializer-plain:4.17.0")
3131
implementation("net.kyori:adventure-platform-bukkit:4.3.4")
32+
implementation("org.reflections:reflections:0.10.2")
3233

33-
compileOnly("app.ashcon:sportpaper:1.8.8-R0.1-SNAPSHOT")
3434
compileOnly("tc.oc.pgm:core:0.16-SNAPSHOT")
3535
compileOnly("tc.oc.occ:AFK:1.0.0-SNAPSHOT")
3636
compileOnly("tc.oc.occ:Environment:1.0.0-SNAPSHOT")
3737
compileOnly("org.incendo:cloud-annotations:2.0.0")
3838
compileOnly("org.jetbrains:annotations:22.0.0")
39+
40+
// Minecraft includes these (or equivalents)
41+
compileOnly("com.mojang:authlib:6.0.54")
42+
compileOnly("it.unimi.dsi:fastutil:8.1.0")
43+
compileOnly("com.google.guava:guava:17.0")
44+
compileOnly("com.google.code.gson:gson:2.10.1")
45+
compileOnly("commons-lang:commons-lang:2.6")
3946
}
4047

4148
group = "dev.pgm.community"

core/build.gradle.kts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,23 @@ plugins {
66
id("com.gradleup.shadow")
77
}
88

9+
dependencies {
10+
compileOnly("dev.pgm.paper:paper-api:1.8_1.21.1-SNAPSHOT")
11+
12+
implementation(project(":util"))
13+
14+
runtimeOnly(project(":platform-sportpaper")) { exclude("*") }
15+
}
16+
917
tasks.named<ShadowJar>("shadowJar") {
1018
archiveFileName = "Community.jar"
1119
archiveClassifier.set("")
1220
destinationDirectory = rootProject.projectDir.resolve("build/libs")
1321

14-
minimize()
22+
minimize {
23+
// Exclude from minimization as they're required at runtime
24+
exclude(project(":platform-sportpaper"))
25+
}
1526

1627
dependencies {
1728
exclude(dependency("org.jetbrains:annotations"))

core/src/main/java/dev/pgm/community/Community.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
import dev.pgm.community.feature.FeatureManager;
77
import dev.pgm.community.squads.SquadChannel;
88
import dev.pgm.community.text.TextTranslations;
9+
import dev.pgm.community.util.Platform;
910
import dev.pgm.community.utils.PGMUtils;
1011
import fr.minuskube.inv.InventoryManager;
1112
import java.util.Random;
12-
import net.md_5.bungee.api.ChatColor;
13+
import java.util.logging.Level;
1314
import org.bukkit.Bukkit;
15+
import org.bukkit.ChatColor;
1416
import org.bukkit.event.Listener;
1517
import org.bukkit.plugin.java.JavaPlugin;
1618
import tc.oc.pgm.api.integration.Integration;
@@ -46,6 +48,14 @@ public void onEnable() {
4648
BukkitUtils.PLUGIN.set(this);
4749
}
4850

51+
// Sanity test PGM is running on a supported version before doing any work
52+
try {
53+
Platform.init();
54+
} catch (Throwable t) {
55+
getLogger().log(Level.SEVERE, "Failed to initialize Community platform", t);
56+
getServer().getPluginManager().disablePlugin(this);
57+
}
58+
4959
this.setupConfig();
5060
this.setupDatabase();
5161
this.setupFeatures();
@@ -90,6 +100,7 @@ private void setupTranslations() {
90100
}
91101

92102
public void registerListener(Listener listener) {
103+
Platform.MANIFEST.onEnable(this);
93104
getServer().getPluginManager().registerEvents(listener, this);
94105
}
95106

@@ -139,7 +150,7 @@ public void callEvent(CommunityEvent event) {
139150
// REMOVE WHEN NOT IN DEV
140151
public static void log(String format, Object... objects) {
141152
Bukkit.getConsoleSender()
142-
.sendMessage(ChatColor.translateAlternateColorCodes(
153+
.sendRawMessage(ChatColor.translateAlternateColorCodes(
143154
'&', String.format("&7[&4Community&7]&r " + format, objects)));
144155
}
145156
}

core/src/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import dev.pgm.community.menu.CommunityInventoryProvider;
55
import fr.minuskube.inv.content.InventoryContents;
66
import java.util.function.Consumer;
7-
import net.md_5.bungee.api.ChatColor;
7+
import org.bukkit.ChatColor;
88
import org.bukkit.Material;
99
import org.bukkit.entity.Player;
1010
import org.bukkit.event.inventory.InventoryClickEvent;

core/src/main/java/dev/pgm/community/freeze/FreezeManager.java

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import net.kyori.adventure.text.format.NamedTextColor;
2727
import net.kyori.adventure.title.Title.Times;
2828
import net.kyori.adventure.util.Ticks;
29-
import net.md_5.bungee.api.ChatColor;
29+
import org.bukkit.ChatColor;
3030
import org.bukkit.Location;
3131
import org.bukkit.entity.Entity;
3232
import org.bukkit.entity.Player;
@@ -95,11 +95,10 @@ public void setFrozen(
9595
// Don't allow freezing if player is exempt
9696
if (freezee.hasPermission(CommunityPermissions.FREEZE_EXEMPT)
9797
&& !freezer.getSender().hasPermission(CommunityPermissions.FREEZE_FORCE)) {
98-
freezer.sendWarning(
99-
text()
100-
.append(PlayerComponent.player(freezee, NameStyle.FANCY))
101-
.append(text(" can not be frozen"))
102-
.build());
98+
freezer.sendWarning(text()
99+
.append(PlayerComponent.player(freezee, NameStyle.FANCY))
100+
.append(text(" can not be frozen"))
101+
.build());
103102
return;
104103
}
105104

@@ -138,11 +137,10 @@ private void freeze(Player freezee, Component senderName, boolean silent) {
138137
Audience.get(freezee).sendWarning(freezeTitle.build());
139138
} else {
140139
Audience.get(freezee)
141-
.showTitle(
142-
title(
143-
empty(),
144-
freezeTitle.build(),
145-
Times.of(Ticks.duration(5), Ticks.duration(9999), Ticks.duration(5))));
140+
.showTitle(title(
141+
empty(),
142+
freezeTitle.build(),
143+
Times.of(Ticks.duration(5), Ticks.duration(9999), Ticks.duration(5))));
146144
}
147145
Audience.get(freezee).playSound(FREEZE_SOUND);
148146

@@ -172,15 +170,13 @@ private void thaw(Player freezee, Component senderName, boolean silent) {
172170
private Component createInteractiveBroadcast(
173171
Component senderName, Player freezee, boolean frozen) {
174172
return text()
175-
.append(
176-
translatable(
177-
String.format("moderation.freeze.broadcast.%s", frozen ? "frozen" : "thaw"),
178-
NamedTextColor.GRAY,
179-
senderName,
180-
PlayerComponent.player(freezee, NameStyle.FANCY)))
181-
.hoverEvent(
182-
HoverEvent.showText(
183-
translatable("moderation.freeze.broadcast.hover", NamedTextColor.GRAY)))
173+
.append(translatable(
174+
String.format("moderation.freeze.broadcast.%s", frozen ? "frozen" : "thaw"),
175+
NamedTextColor.GRAY,
176+
senderName,
177+
PlayerComponent.player(freezee, NameStyle.FANCY)))
178+
.hoverEvent(HoverEvent.showText(
179+
translatable("moderation.freeze.broadcast.hover", NamedTextColor.GRAY)))
184180
.clickEvent(ClickEvent.runCommand("/f " + freezee.getName()))
185181
.build();
186182
}

core/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java

Lines changed: 45 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.google.common.collect.Lists;
77
import com.google.common.collect.Sets;
88
import dev.pgm.community.Community;
9+
import dev.pgm.community.utils.compatability.Enchantments;
10+
import dev.pgm.community.utils.compatability.Materials;
911
import fr.minuskube.inv.ClickableItem;
1012
import fr.minuskube.inv.SmartInventory;
1113
import fr.minuskube.inv.content.InventoryContents;
@@ -20,7 +22,6 @@
2022
import net.kyori.adventure.text.format.NamedTextColor;
2123
import org.bukkit.DyeColor;
2224
import org.bukkit.Material;
23-
import org.bukkit.enchantments.Enchantment;
2425
import org.bukkit.entity.Player;
2526
import org.bukkit.inventory.ItemFlag;
2627
import org.bukkit.inventory.ItemStack;
@@ -57,12 +58,11 @@ public MapSelectionMenu(String title, List<MapInfo> maps, Player viewer) {
5758
}
5859

5960
public SmartInventory getInventory(SmartInventory parent) {
60-
SmartInventory.Builder builder =
61-
SmartInventory.builder()
62-
.title(colorize(title))
63-
.provider(this)
64-
.manager(Community.get().getInventory())
65-
.size(ROWS, 9);
61+
SmartInventory.Builder builder = SmartInventory.builder()
62+
.title(colorize(title))
63+
.provider(this)
64+
.manager(Community.get().getInventory())
65+
.size(ROWS, 9);
6666

6767
if (parent != null) {
6868
builder.parent(parent);
@@ -136,55 +136,50 @@ public Material getMapMaterial(MapInfo map) {
136136
return map.getTags().isEmpty()
137137
|| !map.getTags().stream().filter(tag -> tag.isGamemode()).findAny().isPresent()
138138
? Material.MAP
139-
: getMapTagMaterial(map.getTags().stream().filter(tag -> tag.isGamemode()).findAny().get());
139+
: getMapTagMaterial(
140+
map.getTags().stream().filter(tag -> tag.isGamemode()).findAny().get());
140141
}
141142

142143
private List<ClickableItem> getMapItems(List<MapInfo> maps) {
143144
return maps.stream().map(this::getMapIcon).collect(Collectors.toList());
144145
}
145146

146147
private List<ClickableItem> getFilteredMapItems() {
147-
return getMapItems(
148-
maps.stream()
149-
.filter(
150-
map -> {
151-
if (viewAll) return true;
152-
153-
Collection<MapTag> tags = map.getTags();
154-
return tags != null && tags.contains(getFilterTag());
155-
})
156-
.collect(Collectors.toList()));
148+
return getMapItems(maps.stream()
149+
.filter(map -> {
150+
if (viewAll) return true;
151+
152+
Collection<MapTag> tags = map.getTags();
153+
return tags != null && tags.contains(getFilterTag());
154+
})
155+
.collect(Collectors.toList()));
157156
}
158157

159158
private ClickableItem getNoMapsIcon() {
160-
return ClickableItem.empty(
161-
new ItemBuilder()
162-
.material(Material.STAINED_GLASS_PANE)
163-
.color(DyeColor.RED)
164-
.name(colorize("&cNo Maps found"))
165-
.lore(colorize("&7Check &b/maps &7for details"))
166-
.flags(ItemFlag.values())
167-
.build());
159+
return ClickableItem.empty(new ItemBuilder()
160+
.material(Materials.STAINED_GLASS_PANE)
161+
.color(DyeColor.RED)
162+
.name(colorize("&cNo Maps found"))
163+
.lore(colorize("&7Check &b/maps &7for details"))
164+
.flags(ItemFlag.values())
165+
.build());
168166
}
169167

170168
private ClickableItem getAllIcon() {
171-
ItemBuilder allItemBuilder =
172-
new ItemBuilder()
173-
.material(Material.BOOKSHELF)
174-
.name(colorize((viewAll ? "&a" : "&c") + "View All"))
175-
.lore(colorize(viewAll ? "&7Click to filter by map tags" : "&7Click to view all maps"))
176-
.flags(ItemFlag.values());
169+
ItemBuilder allItemBuilder = new ItemBuilder()
170+
.material(Material.BOOKSHELF)
171+
.name(colorize((viewAll ? "&a" : "&c") + "View All"))
172+
.lore(colorize(viewAll ? "&7Click to filter by map tags" : "&7Click to view all maps"))
173+
.flags(ItemFlag.values());
177174

178175
if (viewAll) {
179-
allItemBuilder.enchant(Enchantment.LUCK, 1);
176+
allItemBuilder.enchant(Enchantments.LUCK_OF_THE_SEA, 1);
180177
}
181178

182-
return ClickableItem.of(
183-
allItemBuilder.build(),
184-
c -> {
185-
this.viewAll = !viewAll;
186-
getInventory().open(getViewer(), 0);
187-
});
179+
return ClickableItem.of(allItemBuilder.build(), c -> {
180+
this.viewAll = !viewAll;
181+
getInventory().open(getViewer(), 0);
182+
});
188183
}
189184

190185
private ClickableItem getFilterIcon() {
@@ -200,7 +195,7 @@ private ClickableItem getFilterIcon() {
200195
colorize("&7Filter: &b" + (filterIndex + 1) + " &7/&3 " + tags.size()),
201196
colorize(
202197
"&7Total Maps: &a" + getFilteredMapItems().size() + " &7/&2 " + maps.size()))
203-
.enchant(Enchantment.LUCK, 1)
198+
.enchant(Enchantments.LUCK_OF_THE_SEA, 1)
204199
.flags(ItemFlag.values())
205200
.build(),
206201
c -> {
@@ -240,41 +235,41 @@ private Material getMapTagMaterial(MapTag mapTag) {
240235
case "ffa":
241236
return Material.DIAMOND_SWORD;
242237
case "border":
243-
return Material.IRON_BARDING;
238+
return Materials.IRON_BARDING;
244239
case "wool":
245-
return Material.WOOL;
240+
return Materials.WOOL;
246241
case "controlpoint":
247242
return Material.BEACON;
248243
case "flag":
249-
return Material.BANNER;
244+
return Materials.BANNER;
250245
case "classes":
251246
return Material.FISHING_ROD;
252247
case "deathmatch":
253248
return Material.STONE_SWORD;
254249
case "monument":
255250
return Material.DIAMOND_PICKAXE;
256251
case "4teams":
257-
return Material.TRAP_DOOR;
252+
return Materials.TRAP_DOOR;
258253
case "timelimit":
259-
return Material.WATCH;
254+
return Materials.WATCH;
260255
case "autotnt":
261256
return Material.TNT;
262257
case "core":
263258
return Material.OBSIDIAN;
264259
case "blitz":
265260
return Material.EGG;
266261
case "scorebox":
267-
return Material.WEB;
262+
return Materials.WEB;
268263
case "6teams":
269-
return Material.BED;
264+
return Materials.BED;
270265
case "rage":
271266
return Material.BOW;
272267
case "3teams":
273-
return Material.WORKBENCH;
268+
return Materials.WORKBENCH;
274269
case "terrain":
275-
return Material.GRASS;
270+
return Materials.GRASS;
276271
case "8teams":
277-
return Material.INK_SACK;
272+
return Materials.DYE;
278273
default:
279274
return Material.MAP;
280275
}

core/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static tc.oc.pgm.util.nms.NMSHacks.NMS_HACKS;
55
import static tc.oc.pgm.util.nms.PlayerUtils.PLAYER_UTILS;
66

7+
import dev.pgm.community.utils.compatability.Materials;
78
import fr.minuskube.inv.ClickableItem;
89
import fr.minuskube.inv.SmartInventory;
910
import fr.minuskube.inv.content.InventoryContents;
@@ -111,7 +112,7 @@ private ClickableItem getPlayerItem(
111112
}
112113

113114
private ItemStack getPlayerHead(Player viewer, Player player) {
114-
ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
115+
ItemStack head = new ItemStack(Materials.SKULL_ITEM, 1, (byte) 3);
115116
SkullMeta meta = (SkullMeta) head.getItemMeta();
116117
meta.setDisplayName(player.getDisplayName());
117118
meta.setLore(getPlayerLore(viewer, player));

0 commit comments

Comments
 (0)