Skip to content

Commit 8668e63

Browse files
Platform support (#94)
Signed-off-by: Christopher White <18whitechristop@gmail.com> Signed-off-by: BT (calcastor/mame) <43831917+calcastor@users.noreply.github.com> Co-authored-by: BT (calcastor/mame) <43831917+calcastor@users.noreply.github.com>
1 parent 792967d commit 8668e63

Some content is hidden

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

51 files changed

+1033
-189
lines changed

buildSrc/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ repositories {
99
}
1010

1111
dependencies {
12-
implementation("com.gradleup.shadow:shadow-gradle-plugin:9.0.0-rc2")
13-
implementation("com.diffplug.spotless:spotless-plugin-gradle:7.2.1")
14-
implementation("de.skuzzle.restrictimports:restrict-imports-gradle-plugin:2.6.1")
12+
implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.3.0")
13+
implementation("com.diffplug.gradle.spotless:com.diffplug.gradle.spotless.gradle.plugin:8.1.0")
14+
implementation("de.skuzzle.restrictimports:de.skuzzle.restrictimports.gradle.plugin:3.0.0")
1515
}

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,41 @@ repositories {
1919
}
2020

2121
dependencies {
22-
implementation("tc.oc.pgm:util:0.16-SNAPSHOT") { isTransitive = false }
2322
implementation("com.zaxxer:HikariCP:2.4.1") { isTransitive = false }
2423
implementation("fr.minuskube.inv:smart-invs:1.2.7") { isTransitive = false }
2524

2625
implementation("redis.clients:jedis:3.5.1")
2726
implementation("co.aikar:idb-core:1.0.0-SNAPSHOT")
2827
implementation("co.aikar:idb-bukkit:1.0.0-SNAPSHOT")
29-
implementation("net.kyori:adventure-api:4.24.0")
30-
implementation("net.kyori:adventure-text-serializer-plain:4.24.0")
28+
implementation("net.kyori:adventure-api:4.25.0")
29+
implementation("net.kyori:adventure-text-serializer-plain:4.25.0")
3130
implementation("net.kyori:adventure-platform-bukkit:4.4.1")
31+
implementation("org.reflections:reflections:0.10.2")
3232

33-
compileOnly("app.ashcon:sportpaper:1.8.8-R0.1-SNAPSHOT")
3433
compileOnly("tc.oc.pgm:core:0.16-SNAPSHOT")
34+
compileOnly("tc.oc.pgm:util: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")
38-
compileOnly("org.jetbrains:annotations:22.0.0")
38+
compileOnly("org.jetbrains:annotations:26.0.2")
39+
compileOnly("net.dmulloy2:ProtocolLib:5.4.0")
40+
41+
// Minecraft includes these (or equivalents)
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"
4249
version = "0.2-SNAPSHOT"
4350
description = "A plugin for managing a Minecraft community"
4451

4552
tasks {
46-
withType<JavaCompile>() {
53+
withType<JavaCompile> {
4754
options.encoding = "UTF-8"
4855
}
49-
withType<Javadoc>() {
56+
withType<Javadoc> {
5057
options.encoding = "UTF-8"
5158
}
5259
}
@@ -55,7 +62,7 @@ spotless {
5562
ratchetFrom = "origin/dev"
5663
java {
5764
removeUnusedImports()
58-
palantirJavaFormat("2.73.0").style("GOOGLE").formatJavadoc(true)
65+
palantirJavaFormat("2.83.0").style("GOOGLE").formatJavadoc(true)
5966
}
6067
}
6168

core/build.gradle.kts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,29 @@ plugins {
66
id("com.gradleup.shadow")
77
}
88

9+
dependencies {
10+
compileOnly("dev.pgm.paper:paper-api:1.8_1.21.10-SNAPSHOT")
11+
12+
implementation(project(":util"))
13+
14+
runtimeOnly(project(":platform-sportpaper")) { exclude("*") }
15+
runtimeOnly(project(":platform-modern")) { exclude("*") }
16+
}
17+
918
tasks.named<ShadowJar>("shadowJar") {
1019
archiveFileName = "Community.jar"
1120
archiveClassifier.set("")
1221
destinationDirectory = rootProject.projectDir.resolve("build/libs")
1322
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
1423

15-
minimize()
24+
minimize {
25+
// Exclude from minimization as they're required at runtime
26+
exclude(project(":platform-sportpaper"))
27+
exclude(project(":platform-modern"))
28+
}
1629

1730
dependencies {
31+
exclude(dependency("org.jspecify:jspecify"))
1832
exclude(dependency("org.jetbrains:annotations"))
1933
}
2034

@@ -53,12 +67,14 @@ tasks {
5367
mapOf(
5468
"name" to name,
5569
"description" to description,
70+
"apiVersion" to "1.21.10",
5671
"mainClass" to "dev.pgm.community.Community",
5772
"version" to version,
5873
"commitHash" to commitHash,
5974
"author" to "applenick",
60-
"url" to "https://pgm.dev/")
75+
"url" to "https://pgm.dev/"
6176
)
77+
)
6278
}
6379
}
6480

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
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 dev.pgm.community.utils.WebUtils;
1112
import fr.minuskube.inv.InventoryManager;
1213
import java.util.Random;
14+
import java.util.logging.Level;
1315
import org.bukkit.Bukkit;
1416
import org.bukkit.ChatColor;
1517
import org.bukkit.event.Listener;
@@ -47,6 +49,14 @@ public void onEnable() {
4749
BukkitUtils.PLUGIN.set(this);
4850
}
4951

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

96106
public void registerListener(Listener listener) {
107+
Platform.MANIFEST.onEnable(this);
97108
getServer().getPluginManager().registerEvents(listener, this);
98109
}
99110

@@ -143,7 +154,7 @@ public void callEvent(CommunityEvent event) {
143154
// REMOVE WHEN NOT IN DEV
144155
public static void log(String format, Object... objects) {
145156
Bukkit.getConsoleSender()
146-
.sendMessage(ChatColor.translateAlternateColorCodes(
157+
.sendRawMessage(ChatColor.translateAlternateColorCodes(
147158
'&', String.format("&7[&4Community&7]&r " + format, objects)));
148159
}
149160
}

core/src/main/java/dev/pgm/community/mobs/MobFeature.java

Lines changed: 26 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package dev.pgm.community.mobs;
22

3+
import static dev.pgm.community.util.EntityUtils.ENTITY_UTILS;
4+
35
import com.google.common.collect.Maps;
46
import com.google.common.collect.Sets;
57
import dev.pgm.community.Community;
@@ -11,11 +13,8 @@
1113
import java.util.UUID;
1214
import java.util.logging.Logger;
1315
import java.util.stream.Collectors;
14-
import net.minecraft.server.v1_8_R3.EntityInsentient;
1516
import org.bukkit.Bukkit;
16-
import org.bukkit.Location;
1717
import org.bukkit.configuration.Configuration;
18-
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
1918
import org.bukkit.entity.Creature;
2019
import org.bukkit.entity.Entity;
2120
import org.bukkit.entity.EntityType;
@@ -50,11 +49,10 @@ public MobFeature(Configuration config, Logger logger) {
5049
@Override
5150
public void enable() {
5251
super.enable();
53-
this.task =
54-
Community.get()
55-
.getServer()
56-
.getScheduler()
57-
.runTaskTimer(Community.get(), this::updateFollows, 0L, 10L);
52+
this.task = Community.get()
53+
.getServer()
54+
.getScheduler()
55+
.runTaskTimer(Community.get(), this::updateFollows, 0L, 10L);
5856
}
5957

6058
@Override
@@ -81,24 +79,19 @@ public void onDamage(EntityDamageByEntityEvent event) {
8179
}
8280

8381
public void updateFollows() {
84-
this.followTargets
85-
.entrySet()
86-
.forEach(
87-
entry -> {
88-
Player owner = Bukkit.getPlayer(entry.getKey());
89-
Player target = Bukkit.getPlayer(entry.getValue());
90-
if (owner != null && target != null) {
91-
this.getOwnedMobs(owner)
92-
.forEach(
93-
mob -> {
94-
follow(mob, target.getLocation());
95-
if (mob instanceof Creature && attackers.contains(owner.getUniqueId())) {
96-
Creature creature = (Creature) mob;
97-
creature.setTarget(target);
98-
}
99-
});
100-
}
101-
});
82+
this.followTargets.entrySet().forEach(entry -> {
83+
Player owner = Bukkit.getPlayer(entry.getKey());
84+
Player target = Bukkit.getPlayer(entry.getValue());
85+
if (owner != null && target != null) {
86+
this.getOwnedMobs(owner).forEach(mob -> {
87+
ENTITY_UTILS.follow(mob, target.getLocation(), speed);
88+
if (mob instanceof Creature && attackers.contains(owner.getUniqueId())) {
89+
Creature creature = (Creature) mob;
90+
creature.setTarget(target);
91+
}
92+
});
93+
}
94+
});
10295
}
10396

10497
public boolean isFollower(UUID playerId) {
@@ -121,11 +114,6 @@ public void setTarget(Player player, Player target) {
121114
}
122115
}
123116

124-
private void follow(LivingEntity mob, Location location) {
125-
EntityInsentient nmsMob = ((EntityInsentient) ((CraftEntity) mob).getHandle());
126-
nmsMob.getNavigation().a(location.getX(), location.getY(), location.getZ(), speed);
127-
}
128-
129117
public MobConfig getMobConfig() {
130118
return (MobConfig) getConfig();
131119
}
@@ -152,15 +140,13 @@ public void spawn(Player sender, EntityType type, boolean canDie) {
152140
public List<LivingEntity> getOwnedMobs(Player sender) {
153141
return sender.getWorld().getLivingEntities().stream()
154142
.filter(le -> le.hasMetadata("owner"))
155-
.filter(
156-
le -> {
157-
List<MetadataValue> values = le.getMetadata("owner");
158-
Optional<MetadataValue> value =
159-
values.stream()
160-
.filter(mv -> mv.getOwningPlugin().equals(Community.get()))
161-
.findAny();
162-
return value.isPresent() && value.get().asString().equalsIgnoreCase(sender.getName());
163-
})
143+
.filter(le -> {
144+
List<MetadataValue> values = le.getMetadata("owner");
145+
Optional<MetadataValue> value = values.stream()
146+
.filter(mv -> mv.getOwningPlugin().equals(Community.get()))
147+
.findAny();
148+
return value.isPresent() && value.get().asString().equalsIgnoreCase(sender.getName());
149+
})
164150
.collect(Collectors.toList());
165151
}
166152

core/src/main/java/dev/pgm/community/mutations/types/items/BreadMutation.java

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package dev.pgm.community.mutations.types.items;
22

3+
import static dev.pgm.community.util.InventoryUtils.INVENTORY_UTILS;
4+
35
import com.google.common.collect.ImmutableMap;
46
import com.google.common.collect.Lists;
57
import com.google.common.collect.Maps;
68
import dev.pgm.community.Community;
79
import dev.pgm.community.mutations.Mutation;
810
import dev.pgm.community.mutations.MutationType;
911
import dev.pgm.community.mutations.types.KitMutationBase;
12+
import dev.pgm.community.util.Attributes;
13+
import dev.pgm.community.utils.compatibility.Enchantments;
1014
import dev.pgm.community.utils.compatibility.PotionEffects;
1115
import java.util.HashMap;
1216
import java.util.HashSet;
@@ -18,7 +22,6 @@
1822
import org.bukkit.Bukkit;
1923
import org.bukkit.Location;
2024
import org.bukkit.Material;
21-
import org.bukkit.attribute.Attribute;
2225
import org.bukkit.attribute.AttributeModifier;
2326
import org.bukkit.block.Block;
2427
import org.bukkit.block.BlockFace;
@@ -103,30 +106,31 @@ static ImmutableMap<ItemStack, Double> getBreadsMap() {
103106
ItemStack ironBread = preventSharing(
104107
new ItemBuilder(new ItemStack(Material.BREAD)).name("Iron Bread").build());
105108
ItemMeta ironBreadMeta = ironBread.getItemMeta();
106-
ironBreadMeta.addAttributeModifier(
107-
Attribute.GENERIC_KNOCKBACK_RESISTANCE,
109+
INVENTORY_UTILS.addAttributeModifier(
110+
ironBreadMeta,
111+
Attributes.KNOCKBACK_RESISTANCE,
108112
new AttributeModifier(
109-
Attribute.GENERIC_KNOCKBACK_RESISTANCE.name(),
110-
1,
111-
AttributeModifier.Operation.ADD_NUMBER));
113+
Attributes.KNOCKBACK_RESISTANCE.name(), 1, AttributeModifier.Operation.ADD_NUMBER));
112114
ironBread.setItemMeta(ironBreadMeta);
113115

114116
ItemStack fastBread = preventSharing(
115117
new ItemBuilder(new ItemStack(Material.BREAD)).name("Fast Bread").build());
116118
ItemMeta speedBreadMeta = fastBread.getItemMeta();
117-
speedBreadMeta.addAttributeModifier(
118-
Attribute.GENERIC_MOVEMENT_SPEED,
119+
INVENTORY_UTILS.addAttributeModifier(
120+
speedBreadMeta,
121+
Attributes.MOVEMENT_SPEED,
119122
new AttributeModifier(
120-
Attribute.GENERIC_MOVEMENT_SPEED.name(), 0.3, AttributeModifier.Operation.ADD_SCALAR));
123+
Attributes.MOVEMENT_SPEED.name(), 0.3, AttributeModifier.Operation.ADD_SCALAR));
121124
fastBread.setItemMeta(speedBreadMeta);
122125

123126
ItemStack veryFastBread = preventSharing(
124127
new ItemBuilder(new ItemStack(Material.BREAD)).name("Very Fast Bread").build());
125128
ItemMeta veryFastBreadMeta = veryFastBread.getItemMeta();
126-
veryFastBreadMeta.addAttributeModifier(
127-
Attribute.GENERIC_MOVEMENT_SPEED,
129+
INVENTORY_UTILS.addAttributeModifier(
130+
veryFastBreadMeta,
131+
Attributes.MOVEMENT_SPEED,
128132
new AttributeModifier(
129-
Attribute.GENERIC_MOVEMENT_SPEED.name(), 1, AttributeModifier.Operation.ADD_SCALAR));
133+
Attributes.MOVEMENT_SPEED.name(), 1, AttributeModifier.Operation.ADD_SCALAR));
130134
veryFastBread.setItemMeta(veryFastBreadMeta);
131135

132136
return new ImmutableMap.Builder<ItemStack, Double>()
@@ -138,7 +142,7 @@ static ImmutableMap<ItemStack, Double> getBreadsMap() {
138142
20.0)
139143
.put(
140144
preventSharing(new ItemBuilder(new ItemStack(Material.BREAD))
141-
.enchant(Enchantment.DAMAGE_ALL, 5)
145+
.enchant(Enchantments.SHARPNESS, 5)
142146
.name("Sharp Bread")
143147
.build()),
144148
20.0)
@@ -156,7 +160,7 @@ static ImmutableMap<ItemStack, Double> getBreadsMap() {
156160
.put(veryFastBread, 3.0)
157161
.put(
158162
preventSharing(new ItemBuilder(new ItemStack(Material.BREAD))
159-
.enchant(Enchantment.DAMAGE_ALL, 10)
163+
.enchant(Enchantments.SHARPNESS, 10)
160164
.name("Very Sharp Bread")
161165
.build()),
162166
3.0)
@@ -174,7 +178,7 @@ static ImmutableMap<ItemStack, Double> getBreadsMap() {
174178
1.0)
175179
.put(
176180
preventSharing(new ItemBuilder(new ItemStack(Material.BREAD))
177-
.enchant(Enchantment.DAMAGE_ALL, 20)
181+
.enchant(Enchantments.SHARPNESS, 20)
178182
.name("Insanely Sharp Bread")
179183
.build()),
180184
1.0)
@@ -203,7 +207,7 @@ static ImmutableMap<ItemStack, Double> getBadBreadsMap() {
203207
20.0)
204208
.put(
205209
preventSharing(new ItemBuilder(new ItemStack(Material.BREAD))
206-
.enchant(Enchantment.DAMAGE_ALL, 5)
210+
.enchant(Enchantments.SHARPNESS, 5)
207211
.name("Sharp Bread")
208212
.build()),
209213
20.0)

core/src/main/java/dev/pgm/community/mutations/types/items/ExplosionMutation.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.pgm.community.mutations.types.items;
22

3+
import static dev.pgm.community.util.Effects.EFFECTS;
34
import static tc.oc.pgm.util.bukkit.BukkitUtils.colorize;
45

56
import com.google.common.collect.Lists;
@@ -21,7 +22,6 @@
2122
import java.util.UUID;
2223
import java.util.stream.Collectors;
2324
import org.bukkit.Bukkit;
24-
import org.bukkit.Effect;
2525
import org.bukkit.Location;
2626
import org.bukkit.Material;
2727
import org.bukkit.World;
@@ -217,8 +217,7 @@ private void explode(Block block) {
217217

218218
world.createExplosion(loc, 3.3f);
219219

220-
for (int i = 0; i < 5; i++)
221-
world.spigot().playEffect(loc, Effect.LAVA_POP, 0, 0, 0, 0, 0, 0, 15, 50);
220+
for (int i = 0; i < 5; i++) EFFECTS.explosionEffect(loc);
222221
}
223222

224223
private static Kit getRandomKit() {

0 commit comments

Comments
 (0)