Skip to content

Commit dffbaf3

Browse files
authored
Merge branch 'EssentialsX:2.x' into 2.x
2 parents 2b75c87 + e2295c1 commit dffbaf3

File tree

197 files changed

+6385
-5549
lines changed

Some content is hidden

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

197 files changed

+6385
-5549
lines changed

.github/workflows/build-pr.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ on:
1111
- mc/*
1212
- dev/*
1313

14+
permissions:
15+
checks: write
16+
1417
jobs:
1518
build:
1619
name: Build and upload

Essentials/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ dependencies {
1414
implementation 'org.checkerframework:checker-qual:3.21.0'
1515
implementation 'nu.studer:java-ordered-properties:1.0.4'
1616

17-
implementation 'net.kyori:adventure-api:4.17.0'
18-
implementation 'net.kyori:adventure-text-minimessage:4.17.0'
19-
implementation 'net.kyori:adventure-platform-bukkit:4.3.3'
17+
implementation 'net.kyori:adventure-api:4.18.0'
18+
implementation 'net.kyori:adventure-text-minimessage:4.18.0'
19+
implementation 'net.kyori:adventure-platform-bukkit:4.3.4'
2020

2121
// Providers
2222
api project(':providers:BaseProviders')

Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.earth2me.essentials;
22

33
import java.util.stream.Collectors;
4+
import net.ess3.provider.KnownCommandsProvider;
45
import org.bukkit.command.Command;
56
import org.bukkit.command.PluginIdentifiableCommand;
67
import org.bukkit.plugin.Plugin;
@@ -67,7 +68,7 @@ public final void addPlugin(final Plugin plugin) {
6768

6869
private List<Map.Entry<String, Command>> getPluginCommands(Plugin plugin) {
6970
final Map<String, Command> commands = new HashMap<>();
70-
for (final Map.Entry<String, Command> entry : ess.getKnownCommandsProvider().getKnownCommands().entrySet()) {
71+
for (final Map.Entry<String, Command> entry : ess.provider(KnownCommandsProvider.class).getKnownCommands().entrySet()) {
7172
if (entry.getValue() instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) entry.getValue()).getPlugin().equals(plugin)) {
7273
commands.put(entry.getKey(), entry.getValue());
7374
}

Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import io.papermc.lib.PaperLib;
88
import net.ess3.api.IEssentials;
99
import net.ess3.api.IUser;
10-
import net.ess3.api.InvalidWorldException;
1110
import net.ess3.api.TranslatableException;
1211
import net.ess3.api.events.UserWarpEvent;
1312
import net.ess3.api.events.teleport.PreTeleportEvent;
@@ -424,7 +423,7 @@ public void warp(final IUser otherUser, String warp, final Trade chargeFor, fina
424423
final Location loc;
425424
try {
426425
loc = ess.getWarps().getWarp(warp);
427-
} catch (final WarpNotFoundException | InvalidWorldException e) {
426+
} catch (final WarpNotFoundException e) {
428427
future.completeExceptionally(e);
429428
return;
430429
}

Essentials/src/main/java/com/earth2me/essentials/Essentials.java

Lines changed: 86 additions & 263 deletions
Large diffs are not rendered by default.

Essentials/src/main/java/com/earth2me/essentials/EssentialsBlockListener.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.earth2me.essentials.craftbukkit.Inventories;
44
import com.earth2me.essentials.utils.MaterialUtil;
55
import net.ess3.api.IEssentials;
6+
import net.ess3.provider.PersistentDataProvider;
7+
import net.ess3.provider.SpawnerItemProvider;
68
import org.bukkit.GameMode;
79
import org.bukkit.block.BlockState;
810
import org.bukkit.block.CreatureSpawner;
@@ -26,11 +28,11 @@ public EssentialsBlockListener(final IEssentials ess) {
2628
public void onBlockPlace(final BlockPlaceEvent event) {
2729
final ItemStack is = event.getItemInHand();
2830

29-
if (is.getType() == MaterialUtil.SPAWNER && ess.getPersistentDataProvider().getString(is, "convert") != null) {
31+
if (is.getType() == MaterialUtil.SPAWNER && ess.provider(PersistentDataProvider.class).getString(is, "convert") != null) {
3032
final BlockState blockState = event.getBlockPlaced().getState();
3133
if (blockState instanceof CreatureSpawner) {
3234
final CreatureSpawner spawner = (CreatureSpawner) blockState;
33-
final EntityType type = ess.getSpawnerItemProvider().getEntityType(event.getItemInHand());
35+
final EntityType type = ess.provider(SpawnerItemProvider.class).getEntityType(event.getItemInHand());
3436
if (type != null && Mob.fromBukkitType(type) != null) {
3537
if (ess.getUser(event.getPlayer()).isAuthorized("essentials.spawnerconvert." + Mob.fromBukkitType(type).name().toLowerCase(Locale.ENGLISH))) {
3638
spawner.setSpawnedType(type);

Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import net.ess3.api.IEssentials;
1818
import net.ess3.api.events.AfkStatusChangeEvent;
1919
import net.ess3.provider.CommandSendListenerProvider;
20+
import net.ess3.provider.FormattedCommandAliasProvider;
21+
import net.ess3.provider.InventoryViewProvider;
22+
import net.ess3.provider.KnownCommandsProvider;
2023
import net.ess3.provider.providers.BukkitCommandSendListenerProvider;
2124
import net.ess3.provider.providers.PaperCommandSendListenerProvider;
2225
import net.essentialsx.api.v2.events.AsyncUserDataLoadEvent;
@@ -65,7 +68,6 @@
6568
import java.text.NumberFormat;
6669
import java.util.ArrayList;
6770
import java.util.Date;
68-
import java.util.HashMap;
6971
import java.util.HashSet;
7072
import java.util.Iterator;
7173
import java.util.List;
@@ -299,7 +301,7 @@ public void onPlayerQuit(final PlayerQuitEvent event) {
299301
}
300302
user.setLogoutLocation();
301303
if (user.isRecipeSee()) {
302-
ess.getInventoryViewProvider().getTopInventory(user.getBase().getOpenInventory()).clear();
304+
ess.provider(InventoryViewProvider.class).getTopInventory(user.getBase().getOpenInventory()).clear();
303305
}
304306

305307
final ArrayList<HumanEntity> viewers = new ArrayList<>(user.getBase().getInventory().getViewers());
@@ -609,17 +611,17 @@ public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event) {
609611

610612
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
611613
public void onPlayerCommandPreprocess(final PlayerCommandPreprocessEvent event) {
612-
final String cmd = event.getMessage().toLowerCase(Locale.ENGLISH).split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH);
614+
final String cmd = event.getMessage().split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH);
613615
final int argStartIndex = event.getMessage().indexOf(" ");
614616
final String args = argStartIndex == -1 ? "" // No arguments present
615617
: event.getMessage().substring(argStartIndex); // arguments start at argStartIndex; substring from there.
616618

617619
// If the plugin command does not exist, check if it is an alias from commands.yml
618620
if (ess.getServer().getPluginCommand(cmd) == null) {
619-
final Command knownCommand = ess.getKnownCommandsProvider().getKnownCommands().get(cmd);
621+
final Command knownCommand = ess.provider(KnownCommandsProvider.class).getKnownCommands().get(cmd);
620622
if (knownCommand instanceof FormattedCommandAlias) {
621623
final FormattedCommandAlias command = (FormattedCommandAlias) knownCommand;
622-
for (String fullCommand : ess.getFormattedCommandAliasProvider().createCommands(command, event.getPlayer(), args.split(" "))) {
624+
for (String fullCommand : ess.provider(FormattedCommandAliasProvider.class).createCommands(command, event.getPlayer(), args.split(" "))) {
623625
handlePlayerCommandPreprocess(event, fullCommand);
624626
}
625627
return;
@@ -632,7 +634,7 @@ public void onPlayerCommandPreprocess(final PlayerCommandPreprocessEvent event)
632634

633635
public void handlePlayerCommandPreprocess(final PlayerCommandPreprocessEvent event, final String effectiveCommand) {
634636
final Player player = event.getPlayer();
635-
final String cmd = effectiveCommand.toLowerCase(Locale.ENGLISH).split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH);
637+
final String cmd = effectiveCommand.split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH);
636638
final PluginCommand pluginCommand = ess.getServer().getPluginCommand(cmd);
637639

638640
if (ess.getSettings().getSocialSpyCommands().contains(cmd) || ess.getSettings().getSocialSpyCommands().contains("*")) {
@@ -705,21 +707,17 @@ public void handlePlayerCommandPreprocess(final PlayerCommandPreprocessEvent eve
705707
// If so, no need to check for (and write) new ones.
706708
boolean cooldownFound = false;
707709

708-
// Iterate over a copy of getCommandCooldowns in case of concurrent modifications
709-
for (final Entry<Pattern, Long> entry : new HashMap<>(user.getCommandCooldowns()).entrySet()) {
710+
for (final Entry<Pattern, Long> entry : user.getCommandCooldowns().entrySet()) {
710711
// Remove any expired cooldowns
711712
if (entry.getValue() <= System.currentTimeMillis()) {
712713
user.clearCommandCooldown(entry.getKey());
713714
// Don't break in case there are other command cooldowns left to clear.
714715
} else if (entry.getKey().matcher(fullCommand).matches()) {
715716
// User's current cooldown hasn't expired, inform and terminate cooldown code.
716-
if (entry.getValue() > System.currentTimeMillis()) {
717-
final String commandCooldownTime = DateUtil.formatDateDiff(entry.getValue());
718-
user.sendTl("commandCooldown", commandCooldownTime);
719-
cooldownFound = true;
720-
event.setCancelled(true);
721-
break;
722-
}
717+
final String commandCooldownTime = DateUtil.formatDateDiff(entry.getValue());
718+
user.sendTl("commandCooldown", commandCooldownTime);
719+
cooldownFound = true;
720+
event.setCancelled(true);
723721
}
724722
}
725723

@@ -897,14 +895,15 @@ public void run() {
897895
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
898896
public void onInventoryClickEvent(final InventoryClickEvent event) {
899897
Player refreshPlayer = null;
900-
final Inventory top = ess.getInventoryViewProvider().getTopInventory(event.getView());
898+
final InventoryViewProvider provider = ess.provider(InventoryViewProvider.class);
899+
final Inventory top = provider.getTopInventory(event.getView());
901900
final InventoryType type = top.getType();
902901

903902
final Inventory clickedInventory;
904903
if (event.getRawSlot() < 0) {
905904
clickedInventory = null;
906905
} else {
907-
clickedInventory = event.getRawSlot() < top.getSize() ? top : ess.getInventoryViewProvider().getBottomInventory(event.getView());
906+
clickedInventory = event.getRawSlot() < top.getSize() ? top : provider.getBottomInventory(event.getView());
908907
}
909908

910909
final User user = ess.getUser((Player) event.getWhoClicked());
@@ -963,7 +962,8 @@ private boolean isPreventBindingHat(User user, PlayerInventory inventory) {
963962
@EventHandler(priority = EventPriority.MONITOR)
964963
public void onInventoryCloseEvent(final InventoryCloseEvent event) {
965964
Player refreshPlayer = null;
966-
final Inventory top = ess.getInventoryViewProvider().getTopInventory(event.getView());
965+
final InventoryViewProvider provider = ess.provider(InventoryViewProvider.class);
966+
final Inventory top = provider.getTopInventory(event.getView());
967967
final InventoryType type = top.getType();
968968
if (type == InventoryType.PLAYER) {
969969
final User user = ess.getUser((Player) event.getPlayer());
@@ -977,7 +977,7 @@ public void onInventoryCloseEvent(final InventoryCloseEvent event) {
977977
final User user = ess.getUser((Player) event.getPlayer());
978978
if (user.isRecipeSee()) {
979979
user.setRecipeSee(false);
980-
ess.getInventoryViewProvider().getTopInventory(event.getView()).clear();
980+
provider.getTopInventory(event.getView()).clear();
981981
refreshPlayer = user.getBase();
982982
}
983983
} else if (type == InventoryType.CHEST && top.getSize() == 9) {

Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.earth2me.essentials.config.ConfigurateUtil;
44
import com.earth2me.essentials.config.EssentialsConfiguration;
55
import com.earth2me.essentials.config.EssentialsUserConfiguration;
6+
import com.earth2me.essentials.config.entities.LazyLocation;
67
import com.earth2me.essentials.craftbukkit.BanLookup;
78
import com.earth2me.essentials.userstorage.ModernUUIDCache;
89
import com.earth2me.essentials.utils.AdventureUtil;
@@ -156,6 +157,41 @@ public static void uuidFileConvert(final IEssentials ess, final Boolean ignoreUF
156157
ess.getLogger().info("To rerun the conversion type /essentials uuidconvert");
157158
}
158159

160+
public void updateRandomTeleport() {
161+
if (doneFile.getBoolean("updateRandomTeleport", false)) {
162+
return;
163+
}
164+
165+
final EssentialsConfiguration config = ess.getRandomTeleport().getConfig();
166+
167+
if (config.getRootNode() != null) {
168+
final LazyLocation center = config.getLocation("center");
169+
final Location centerLoc = center != null ? center.location() : null;
170+
if (center != null && centerLoc != null) {
171+
final double minRange = config.getDouble("min-range", Double.MIN_VALUE);
172+
final double maxRange = config.getDouble("max-range", Double.MIN_VALUE);
173+
for (final World world : ess.getServer().getWorlds()) {
174+
final String propPrefix = "locations." + world.getName() + ".";
175+
config.setProperty(propPrefix + "center", centerLoc);
176+
177+
if (minRange != Double.MIN_VALUE) {
178+
config.setProperty(propPrefix + "min-range", minRange);
179+
}
180+
if (maxRange != Double.MIN_VALUE) {
181+
config.setProperty(propPrefix + "max-range", maxRange);
182+
}
183+
}
184+
}
185+
config.removeProperty("center");
186+
187+
config.blockingSave();
188+
}
189+
190+
doneFile.setProperty("updateRandomTeleport", true);
191+
doneFile.save();
192+
ess.getLogger().info("Done converting random teleport config.");
193+
}
194+
159195
public void convertMailList() {
160196
if (doneFile.getBoolean("updateUsersMailList", false)) {
161197
return;
@@ -1068,5 +1104,6 @@ public void afterSettings() {
10681104
convertStupidCamelCaseUserdataKeys();
10691105
convertMailList();
10701106
purgeBrokenNpcAccounts();
1107+
updateRandomTeleport();
10711108
}
10721109
}

Essentials/src/main/java/com/earth2me/essentials/IEssentials.java

Lines changed: 6 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,7 @@
88
import com.earth2me.essentials.perm.PermissionsHandler;
99
import com.earth2me.essentials.updatecheck.UpdateChecker;
1010
import com.earth2me.essentials.userstorage.IUserMap;
11-
import net.ess3.nms.refl.providers.ReflOnlineModeProvider;
12-
import net.ess3.provider.BannerDataProvider;
13-
import net.ess3.provider.BiomeKeyProvider;
14-
import net.ess3.provider.ContainerProvider;
15-
import net.ess3.provider.DamageEventProvider;
16-
import net.ess3.provider.FormattedCommandAliasProvider;
17-
import net.ess3.provider.InventoryViewProvider;
18-
import net.ess3.provider.ItemUnbreakableProvider;
19-
import net.ess3.provider.KnownCommandsProvider;
20-
import net.ess3.provider.MaterialTagProvider;
21-
import net.ess3.provider.PersistentDataProvider;
22-
import net.ess3.provider.PlayerLocaleProvider;
23-
import net.ess3.provider.SerializationProvider;
24-
import net.ess3.provider.ServerStateProvider;
25-
import net.ess3.provider.SignDataProvider;
26-
import net.ess3.provider.SpawnerBlockProvider;
27-
import net.ess3.provider.SpawnerItemProvider;
28-
import net.ess3.provider.SyncCommandsProvider;
29-
import net.ess3.provider.WorldInfoProvider;
11+
import net.ess3.provider.Provider;
3012
import net.essentialsx.api.v2.services.BalanceTop;
3113
import net.essentialsx.api.v2.services.mail.MailService;
3214
import org.bukkit.Server;
@@ -157,43 +139,11 @@ public interface IEssentials extends Plugin {
157139

158140
Iterable<User> getOnlineUsers();
159141

160-
SpawnerItemProvider getSpawnerItemProvider();
161-
162-
SpawnerBlockProvider getSpawnerBlockProvider();
163-
164-
ServerStateProvider getServerStateProvider();
165-
166-
MaterialTagProvider getMaterialTagProvider();
167-
168-
ContainerProvider getContainerProvider();
169-
170-
KnownCommandsProvider getKnownCommandsProvider();
171-
172-
SerializationProvider getSerializationProvider();
173-
174-
FormattedCommandAliasProvider getFormattedCommandAliasProvider();
175-
176-
SyncCommandsProvider getSyncCommandsProvider();
177-
178-
PersistentDataProvider getPersistentDataProvider();
179-
180-
ReflOnlineModeProvider getOnlineModeProvider();
181-
182-
ItemUnbreakableProvider getItemUnbreakableProvider();
183-
184-
WorldInfoProvider getWorldInfoProvider();
185-
186-
SignDataProvider getSignDataProvider();
187-
188-
PlayerLocaleProvider getPlayerLocaleProvider();
189-
190-
DamageEventProvider getDamageEventProvider();
191-
192-
BiomeKeyProvider getBiomeKeyProvider();
193-
194-
BannerDataProvider getBannerDataProvider();
142+
PluginCommand getPluginCommand(String cmd);
195143

196-
InventoryViewProvider getInventoryViewProvider();
144+
ProviderFactory getProviders();
197145

198-
PluginCommand getPluginCommand(String cmd);
146+
default <P extends Provider> P provider(final Class<P> providerClass) {
147+
return getProviders().get(providerClass);
148+
}
199149
}

Essentials/src/main/java/com/earth2me/essentials/ISettings.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.earth2me.essentials.commands.IEssentialsCommand;
44
import com.earth2me.essentials.signs.EssentialsSign;
55
import com.earth2me.essentials.textreader.IText;
6+
import net.essentialsx.api.v2.ChatType;
67
import net.kyori.adventure.text.minimessage.tag.Tag;
78
import org.bukkit.Material;
89
import org.bukkit.event.EventPriority;
@@ -37,6 +38,8 @@ public interface ISettings extends IConf {
3738

3839
String getChatFormat(String group);
3940

41+
String getChatFormat(String group, ChatType chatType);
42+
4043
String getWorldAlias(String world);
4144

4245
int getChatRadius();
@@ -106,6 +109,10 @@ public interface ISettings extends IConf {
106109

107110
boolean getRespawnAtHome();
108111

112+
String getRandomSpawnLocation();
113+
114+
String getRandomRespawnLocation();
115+
109116
boolean isRespawnAtAnchor();
110117

111118
Set getMultipleHomes();
@@ -411,12 +418,18 @@ public interface ISettings extends IConf {
411418

412419
boolean showZeroBaltop();
413420

421+
BigDecimal getMultiplier(final User user);
422+
414423
int getMaxItemLore();
415424

416425
Tag getPrimaryColor();
417426

418427
Tag getSecondaryColor();
419428

429+
BigDecimal getBaltopMinBalance();
430+
431+
long getBaltopMinPlaytime();
432+
420433
enum KeepInvPolicy {
421434
KEEP,
422435
DELETE,

0 commit comments

Comments
 (0)