Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'EssentialsX:2.x' into 2.x
Browse files Browse the repository at this point in the history
Mowstyl authored Jan 26, 2025
2 parents 2b75c87 + e2295c1 commit dffbaf3
Showing 197 changed files with 6,385 additions and 5,549 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/build-pr.yml
Original file line number Diff line number Diff line change
@@ -11,6 +11,9 @@ on:
- mc/*
- dev/*

permissions:
checks: write

jobs:
build:
name: Build and upload
6 changes: 3 additions & 3 deletions Essentials/build.gradle
Original file line number Diff line number Diff line change
@@ -14,9 +14,9 @@ dependencies {
implementation 'org.checkerframework:checker-qual:3.21.0'
implementation 'nu.studer:java-ordered-properties:1.0.4'

implementation 'net.kyori:adventure-api:4.17.0'
implementation 'net.kyori:adventure-text-minimessage:4.17.0'
implementation 'net.kyori:adventure-platform-bukkit:4.3.3'
implementation 'net.kyori:adventure-api:4.18.0'
implementation 'net.kyori:adventure-text-minimessage:4.18.0'
implementation 'net.kyori:adventure-platform-bukkit:4.3.4'

// Providers
api project(':providers:BaseProviders')
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.earth2me.essentials;

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

private List<Map.Entry<String, Command>> getPluginCommands(Plugin plugin) {
final Map<String, Command> commands = new HashMap<>();
for (final Map.Entry<String, Command> entry : ess.getKnownCommandsProvider().getKnownCommands().entrySet()) {
for (final Map.Entry<String, Command> entry : ess.provider(KnownCommandsProvider.class).getKnownCommands().entrySet()) {
if (entry.getValue() instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) entry.getValue()).getPlugin().equals(plugin)) {
commands.put(entry.getKey(), entry.getValue());
}
Original file line number Diff line number Diff line change
@@ -7,7 +7,6 @@
import io.papermc.lib.PaperLib;
import net.ess3.api.IEssentials;
import net.ess3.api.IUser;
import net.ess3.api.InvalidWorldException;
import net.ess3.api.TranslatableException;
import net.ess3.api.events.UserWarpEvent;
import net.ess3.api.events.teleport.PreTeleportEvent;
@@ -424,7 +423,7 @@ public void warp(final IUser otherUser, String warp, final Trade chargeFor, fina
final Location loc;
try {
loc = ess.getWarps().getWarp(warp);
} catch (final WarpNotFoundException | InvalidWorldException e) {
} catch (final WarpNotFoundException e) {
future.completeExceptionally(e);
return;
}
349 changes: 86 additions & 263 deletions Essentials/src/main/java/com/earth2me/essentials/Essentials.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -3,6 +3,8 @@
import com.earth2me.essentials.craftbukkit.Inventories;
import com.earth2me.essentials.utils.MaterialUtil;
import net.ess3.api.IEssentials;
import net.ess3.provider.PersistentDataProvider;
import net.ess3.provider.SpawnerItemProvider;
import org.bukkit.GameMode;
import org.bukkit.block.BlockState;
import org.bukkit.block.CreatureSpawner;
@@ -26,11 +28,11 @@ public EssentialsBlockListener(final IEssentials ess) {
public void onBlockPlace(final BlockPlaceEvent event) {
final ItemStack is = event.getItemInHand();

if (is.getType() == MaterialUtil.SPAWNER && ess.getPersistentDataProvider().getString(is, "convert") != null) {
if (is.getType() == MaterialUtil.SPAWNER && ess.provider(PersistentDataProvider.class).getString(is, "convert") != null) {
final BlockState blockState = event.getBlockPlaced().getState();
if (blockState instanceof CreatureSpawner) {
final CreatureSpawner spawner = (CreatureSpawner) blockState;
final EntityType type = ess.getSpawnerItemProvider().getEntityType(event.getItemInHand());
final EntityType type = ess.provider(SpawnerItemProvider.class).getEntityType(event.getItemInHand());
if (type != null && Mob.fromBukkitType(type) != null) {
if (ess.getUser(event.getPlayer()).isAuthorized("essentials.spawnerconvert." + Mob.fromBukkitType(type).name().toLowerCase(Locale.ENGLISH))) {
spawner.setSpawnedType(type);
Original file line number Diff line number Diff line change
@@ -17,6 +17,9 @@
import net.ess3.api.IEssentials;
import net.ess3.api.events.AfkStatusChangeEvent;
import net.ess3.provider.CommandSendListenerProvider;
import net.ess3.provider.FormattedCommandAliasProvider;
import net.ess3.provider.InventoryViewProvider;
import net.ess3.provider.KnownCommandsProvider;
import net.ess3.provider.providers.BukkitCommandSendListenerProvider;
import net.ess3.provider.providers.PaperCommandSendListenerProvider;
import net.essentialsx.api.v2.events.AsyncUserDataLoadEvent;
@@ -65,7 +68,6 @@
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -299,7 +301,7 @@ public void onPlayerQuit(final PlayerQuitEvent event) {
}
user.setLogoutLocation();
if (user.isRecipeSee()) {
ess.getInventoryViewProvider().getTopInventory(user.getBase().getOpenInventory()).clear();
ess.provider(InventoryViewProvider.class).getTopInventory(user.getBase().getOpenInventory()).clear();
}

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

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

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

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

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

// Iterate over a copy of getCommandCooldowns in case of concurrent modifications
for (final Entry<Pattern, Long> entry : new HashMap<>(user.getCommandCooldowns()).entrySet()) {
for (final Entry<Pattern, Long> entry : user.getCommandCooldowns().entrySet()) {
// Remove any expired cooldowns
if (entry.getValue() <= System.currentTimeMillis()) {
user.clearCommandCooldown(entry.getKey());
// Don't break in case there are other command cooldowns left to clear.
} else if (entry.getKey().matcher(fullCommand).matches()) {
// User's current cooldown hasn't expired, inform and terminate cooldown code.
if (entry.getValue() > System.currentTimeMillis()) {
final String commandCooldownTime = DateUtil.formatDateDiff(entry.getValue());
user.sendTl("commandCooldown", commandCooldownTime);
cooldownFound = true;
event.setCancelled(true);
break;
}
final String commandCooldownTime = DateUtil.formatDateDiff(entry.getValue());
user.sendTl("commandCooldown", commandCooldownTime);
cooldownFound = true;
event.setCancelled(true);
}
}

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

final Inventory clickedInventory;
if (event.getRawSlot() < 0) {
clickedInventory = null;
} else {
clickedInventory = event.getRawSlot() < top.getSize() ? top : ess.getInventoryViewProvider().getBottomInventory(event.getView());
clickedInventory = event.getRawSlot() < top.getSize() ? top : provider.getBottomInventory(event.getView());
}

final User user = ess.getUser((Player) event.getWhoClicked());
@@ -963,7 +962,8 @@ private boolean isPreventBindingHat(User user, PlayerInventory inventory) {
@EventHandler(priority = EventPriority.MONITOR)
public void onInventoryCloseEvent(final InventoryCloseEvent event) {
Player refreshPlayer = null;
final Inventory top = ess.getInventoryViewProvider().getTopInventory(event.getView());
final InventoryViewProvider provider = ess.provider(InventoryViewProvider.class);
final Inventory top = provider.getTopInventory(event.getView());
final InventoryType type = top.getType();
if (type == InventoryType.PLAYER) {
final User user = ess.getUser((Player) event.getPlayer());
@@ -977,7 +977,7 @@ public void onInventoryCloseEvent(final InventoryCloseEvent event) {
final User user = ess.getUser((Player) event.getPlayer());
if (user.isRecipeSee()) {
user.setRecipeSee(false);
ess.getInventoryViewProvider().getTopInventory(event.getView()).clear();
provider.getTopInventory(event.getView()).clear();
refreshPlayer = user.getBase();
}
} else if (type == InventoryType.CHEST && top.getSize() == 9) {
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@
import com.earth2me.essentials.config.ConfigurateUtil;
import com.earth2me.essentials.config.EssentialsConfiguration;
import com.earth2me.essentials.config.EssentialsUserConfiguration;
import com.earth2me.essentials.config.entities.LazyLocation;
import com.earth2me.essentials.craftbukkit.BanLookup;
import com.earth2me.essentials.userstorage.ModernUUIDCache;
import com.earth2me.essentials.utils.AdventureUtil;
@@ -156,6 +157,41 @@ public static void uuidFileConvert(final IEssentials ess, final Boolean ignoreUF
ess.getLogger().info("To rerun the conversion type /essentials uuidconvert");
}

public void updateRandomTeleport() {
if (doneFile.getBoolean("updateRandomTeleport", false)) {
return;
}

final EssentialsConfiguration config = ess.getRandomTeleport().getConfig();

if (config.getRootNode() != null) {
final LazyLocation center = config.getLocation("center");
final Location centerLoc = center != null ? center.location() : null;
if (center != null && centerLoc != null) {
final double minRange = config.getDouble("min-range", Double.MIN_VALUE);
final double maxRange = config.getDouble("max-range", Double.MIN_VALUE);
for (final World world : ess.getServer().getWorlds()) {
final String propPrefix = "locations." + world.getName() + ".";
config.setProperty(propPrefix + "center", centerLoc);

if (minRange != Double.MIN_VALUE) {
config.setProperty(propPrefix + "min-range", minRange);
}
if (maxRange != Double.MIN_VALUE) {
config.setProperty(propPrefix + "max-range", maxRange);
}
}
}
config.removeProperty("center");

config.blockingSave();
}

doneFile.setProperty("updateRandomTeleport", true);
doneFile.save();
ess.getLogger().info("Done converting random teleport config.");
}

public void convertMailList() {
if (doneFile.getBoolean("updateUsersMailList", false)) {
return;
@@ -1068,5 +1104,6 @@ public void afterSettings() {
convertStupidCamelCaseUserdataKeys();
convertMailList();
purgeBrokenNpcAccounts();
updateRandomTeleport();
}
}
62 changes: 6 additions & 56 deletions Essentials/src/main/java/com/earth2me/essentials/IEssentials.java
Original file line number Diff line number Diff line change
@@ -8,25 +8,7 @@
import com.earth2me.essentials.perm.PermissionsHandler;
import com.earth2me.essentials.updatecheck.UpdateChecker;
import com.earth2me.essentials.userstorage.IUserMap;
import net.ess3.nms.refl.providers.ReflOnlineModeProvider;
import net.ess3.provider.BannerDataProvider;
import net.ess3.provider.BiomeKeyProvider;
import net.ess3.provider.ContainerProvider;
import net.ess3.provider.DamageEventProvider;
import net.ess3.provider.FormattedCommandAliasProvider;
import net.ess3.provider.InventoryViewProvider;
import net.ess3.provider.ItemUnbreakableProvider;
import net.ess3.provider.KnownCommandsProvider;
import net.ess3.provider.MaterialTagProvider;
import net.ess3.provider.PersistentDataProvider;
import net.ess3.provider.PlayerLocaleProvider;
import net.ess3.provider.SerializationProvider;
import net.ess3.provider.ServerStateProvider;
import net.ess3.provider.SignDataProvider;
import net.ess3.provider.SpawnerBlockProvider;
import net.ess3.provider.SpawnerItemProvider;
import net.ess3.provider.SyncCommandsProvider;
import net.ess3.provider.WorldInfoProvider;
import net.ess3.provider.Provider;
import net.essentialsx.api.v2.services.BalanceTop;
import net.essentialsx.api.v2.services.mail.MailService;
import org.bukkit.Server;
@@ -157,43 +139,11 @@ public interface IEssentials extends Plugin {

Iterable<User> getOnlineUsers();

SpawnerItemProvider getSpawnerItemProvider();

SpawnerBlockProvider getSpawnerBlockProvider();

ServerStateProvider getServerStateProvider();

MaterialTagProvider getMaterialTagProvider();

ContainerProvider getContainerProvider();

KnownCommandsProvider getKnownCommandsProvider();

SerializationProvider getSerializationProvider();

FormattedCommandAliasProvider getFormattedCommandAliasProvider();

SyncCommandsProvider getSyncCommandsProvider();

PersistentDataProvider getPersistentDataProvider();

ReflOnlineModeProvider getOnlineModeProvider();

ItemUnbreakableProvider getItemUnbreakableProvider();

WorldInfoProvider getWorldInfoProvider();

SignDataProvider getSignDataProvider();

PlayerLocaleProvider getPlayerLocaleProvider();

DamageEventProvider getDamageEventProvider();

BiomeKeyProvider getBiomeKeyProvider();

BannerDataProvider getBannerDataProvider();
PluginCommand getPluginCommand(String cmd);

InventoryViewProvider getInventoryViewProvider();
ProviderFactory getProviders();

PluginCommand getPluginCommand(String cmd);
default <P extends Provider> P provider(final Class<P> providerClass) {
return getProviders().get(providerClass);
}
}
13 changes: 13 additions & 0 deletions Essentials/src/main/java/com/earth2me/essentials/ISettings.java
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@
import com.earth2me.essentials.commands.IEssentialsCommand;
import com.earth2me.essentials.signs.EssentialsSign;
import com.earth2me.essentials.textreader.IText;
import net.essentialsx.api.v2.ChatType;
import net.kyori.adventure.text.minimessage.tag.Tag;
import org.bukkit.Material;
import org.bukkit.event.EventPriority;
@@ -37,6 +38,8 @@ public interface ISettings extends IConf {

String getChatFormat(String group);

String getChatFormat(String group, ChatType chatType);

String getWorldAlias(String world);

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

boolean getRespawnAtHome();

String getRandomSpawnLocation();

String getRandomRespawnLocation();

boolean isRespawnAtAnchor();

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

boolean showZeroBaltop();

BigDecimal getMultiplier(final User user);

int getMaxItemLore();

Tag getPrimaryColor();

Tag getSecondaryColor();

BigDecimal getBaltopMinBalance();

long getBaltopMinPlaytime();

enum KeepInvPolicy {
KEEP,
DELETE,
Loading

0 comments on commit dffbaf3

Please sign in to comment.