Bug found - addPlayer being called instead of getPlayer

This commit is contained in:
tastybento 2024-04-28 08:00:03 -07:00
parent 5b4ecd5293
commit cf0bdbc390
14 changed files with 48 additions and 116 deletions

View File

@ -419,7 +419,7 @@ public class BentoBox extends JavaPlugin implements Listener {
* @return the ranksManager
* @deprecated Just use {@code RanksManager.getInstance()}
*/
@Deprecated(since = "2.0.0")
@Deprecated(since = "2.0.0", forRemoval = true)
public RanksManager getRanksManager() {
return RanksManager.getInstance();
}

View File

@ -224,7 +224,6 @@ public abstract class Addon {
* @since 1.13.0
*/
public void reloadConfig() {
BentoBox.getInstance().logDebug("Config reloaded");
config = loadYamlFile();
}

View File

@ -384,29 +384,28 @@ public class Flag implements Comparable<Flag> {
*/
@Nullable
public PanelItem toPanelItem(BentoBox plugin, User user, World world, @Nullable Island island, boolean invisible) {
// TODO: Why is this taking long
long m = System.currentTimeMillis();
// Invisibility
if (!user.isOp() && invisible) {
return null;
}
// Start the flag conversion
PanelItemBuilder pib = new PanelItemBuilder()
.icon(ItemParser.parse(user.getTranslationOrNothing(this.getIconReference()), new ItemStack(icon)))
.name(user.getTranslation("protection.panel.flag-item.name-layout", TextVariables.NAME, user.getTranslation(getNameReference())))
.name(user.getTranslation("protection.panel.flag-item.name-layout", TextVariables.NAME,
user.getTranslation(getNameReference())))
.clickHandler(clickHandler)
.invisible(invisible);
BentoBox.getInstance().logDebug("Time for pib = " + (System.currentTimeMillis() - m));
if (hasSubPanel()) {
pib.description(user.getTranslation("protection.panel.flag-item.menu-layout", TextVariables.DESCRIPTION, user.getTranslation(getDescriptionReference())));
return pib.build();
}
BentoBox.getInstance().logDebug("Type = " + getType());
return switch (getType()) {
case PROTECTION -> createProtectionFlag(plugin, user, island, pib).build();
case SETTING -> createSettingFlag(user, island, pib).build();
case WORLD_SETTING -> createWorldSettingFlag(user, world, pib).build();
};
}
private PanelItemBuilder createWorldSettingFlag(User user, World world, PanelItemBuilder pib) {
@ -432,16 +431,15 @@ public class Flag implements Comparable<Flag> {
}
private PanelItemBuilder createProtectionFlag(BentoBox plugin, User user, Island island, PanelItemBuilder pib) {
long m = System.currentTimeMillis();
BentoBox.getInstance().logDebug("Protection flag");
if (island != null) {
int y = island.getFlag(this);
BentoBox.getInstance().logDebug("Protection flag getFlag time " + (System.currentTimeMillis() - m));
// Protection flag
pib.description(user.getTranslation("protection.panel.flag-item.description-layout",
TextVariables.DESCRIPTION, user.getTranslation(getDescriptionReference())));
BentoBox.getInstance().logDebug("Protection flag description time " + (System.currentTimeMillis() - m));
RanksManager.getInstance().getRanks().forEach((reference, score) -> {
if (score > RanksManager.BANNED_RANK && score < y) {
pib.description(user.getTranslation("protection.panel.flag-item.blocked-rank") + user.getTranslation(reference));
} else if (score <= RanksManager.OWNER_RANK && score > y) {
@ -451,7 +449,7 @@ public class Flag implements Comparable<Flag> {
}
});
}
BentoBox.getInstance().logDebug("Protection flag time " + (System.currentTimeMillis() - m));
return pib;
}
@ -479,7 +477,7 @@ public class Flag implements Comparable<Flag> {
public Set<Flag> getSubflags() {
return subflags;
}
/**
* Set the name of this flag for a specified locale. This enables the flag's name to be assigned via API. It will not be stored anywhere
* and must be rewritten using this call every time the flag is built.
@ -492,7 +490,7 @@ public class Flag implements Comparable<Flag> {
public boolean setTranslatedName(Locale locale, String name) {
return BentoBox.getInstance().getLocalesManager().setTranslation(locale, getNameReference(), name);
}
/**
* Set the name of this flag for a specified locale. This enables the flag's name to be assigned via API. It will not be stored anywhere
* and must be rewritten using this call every time the flag is built.

View File

@ -74,7 +74,7 @@ public class TabbedPanel extends Panel implements PanelListener {
* @param page - the page of the tab to show (if multi paged)
*/
public void openPanel(int activeTab, int page) {
long m = System.currentTimeMillis();
if (!tpb.getTabs().containsKey(activeTab)) {
// Request to open a non-existent tab
throw new InvalidParameterException("Attempt to open a non-existent tab in a tabbed panel. Missing tab #" + activeTab);
@ -85,29 +85,23 @@ public class TabbedPanel extends Panel implements PanelListener {
}
this.activeTab = activeTab;
this.activePage = page;
BentoBox.getInstance().logDebug("Time 1 " + (System.currentTimeMillis() - m));
// The items in the panel
TreeMap<Integer, PanelItem> items = new TreeMap<>();
// Get the tab
Tab tab = tpb.getTabs().get(activeTab);
BentoBox.getInstance().logDebug("Time 2 " + (System.currentTimeMillis() - m));
// Remove any tabs that have no items, if required
if (tpb.isHideIfEmpty()) {
tpb.getTabs().values().removeIf(t -> !t.equals(tab) && t.getPanelItems().stream().noneMatch(Objects::nonNull));
}
// Set up the tabbed header
setupHeader(tab, items);
BentoBox.getInstance().logDebug("Time 3 " + (System.currentTimeMillis() - m));
// Show the active tab
if (tpb.getTabs().containsKey(activeTab)) {
List<PanelItem> panelItems = tab.getPanelItems();
// Adds the flag items
panelItems.stream().filter(Objects::nonNull).skip(page * ITEMS_PER_PAGE).limit(page * ITEMS_PER_PAGE + ITEMS_PER_PAGE).forEach(i -> items.put(items.lastKey() + 1, i));
BentoBox.getInstance().logDebug("Time 4 " + (System.currentTimeMillis() - m));
// set up the footer
setupFooter(items);
BentoBox.getInstance().logDebug("Time 5 " + (System.currentTimeMillis() - m));
// Add forward and backward icons
if (page > 0) {
// Previous page icon
@ -117,7 +111,6 @@ public class TabbedPanel extends Panel implements PanelListener {
return true;
}).build());
}
BentoBox.getInstance().logDebug("Time 6 " + (System.currentTimeMillis() - m));
if ((page + 1) * ITEMS_PER_PAGE < panelItems.stream().filter(Objects::nonNull).count()) {
// Next page icon
items.put(52, new PanelItemBuilder().icon(Material.ARROW).name(tpb.getUser().getTranslation(PROTECTION_PANEL + "next")).clickHandler((panel, user1, clickType, slot1) -> {
@ -126,14 +119,11 @@ public class TabbedPanel extends Panel implements PanelListener {
return true;
}).build());
}
BentoBox.getInstance().logDebug("Time 7 " + (System.currentTimeMillis() - m));
} else {
throw new InvalidParameterException("Unknown tab slot number " + activeTab);
}
BentoBox.getInstance().logDebug("Time 8 " + (System.currentTimeMillis() - m));
// Show it to the player
this.makePanel(tab.getName(), items, tpb.getSize(), tpb.getUser(), this);
BentoBox.getInstance().logDebug("Time 9 " + (System.currentTimeMillis() - m));
}
/**
@ -189,6 +179,7 @@ public class TabbedPanel extends Panel implements PanelListener {
// Reset the closed flag
closed = false;
}
}
/**

View File

@ -1711,7 +1711,6 @@ public class Island implements DataObject, MetaDataAble {
* Indicates the fields have been changed. Used to optimize saving on shutdown and notify other servers
*/
public void setChanged() {
BentoBox.getInstance().logDebug("Island changed");
this.setUpdatedDate(System.currentTimeMillis());
this.changed = true;
IslandsManager.updateIsland(this);

View File

@ -61,6 +61,7 @@ public class PanelListenerManager implements Listener {
// Refresh
l.refreshPanel();
});
} else {
// Wrong name - delete this panel
openPanels.remove(user.getUniqueId());

View File

@ -108,7 +108,6 @@ public class IslandsManager {
// Listen for Island Updates
MultiLib.onString(plugin, "bentobox-updateIsland", id -> {
BentoBox.getInstance().logDebug("Updating island " + id);
Island island = handler.loadObject(id);
if (island != null) {
islandCache.updateIsland(island);
@ -117,13 +116,11 @@ public class IslandsManager {
// Delete island blocks
MultiLib.onString(plugin, "bentobox-deleteIsland", id -> {
BentoBox.getInstance().logDebug("Delete island blocks");
IslandDeletion idd = getGson().fromJson(id, IslandDeletion.class);
plugin.getIslandDeletionManager().getIslandChunkDeletionManager().add(idd);
});
// List for new islands
MultiLib.onString(plugin, "bentobox-newIsland", id -> {
BentoBox.getInstance().logDebug("New island " + id);
Island island = handler.loadObject(id);
if (island != null) {
islandCache.addIsland(island);
@ -139,7 +136,6 @@ public class IslandsManager {
World world = Bukkit.getWorld(split[0]);
if (world != null) {
getIslandById(split[1]).ifPresent(i -> this.setSpawn(i));
BentoBox.getInstance().logDebug("Setting spawn for world " + world);
}
}
@ -277,7 +273,6 @@ public class IslandsManager {
* @param involvedPlayer - player related to the island deletion, if any
*/
public void deleteIsland(@NonNull Island island, boolean removeBlocks, @Nullable UUID involvedPlayer) {
BentoBox.getInstance().logDebug("Deleting island " + island.getUniqueId() + " remove blocks = " + removeBlocks);
// Fire event
IslandBaseEvent event = IslandEvent.builder().island(island).involvedPlayer(involvedPlayer)
.reason(Reason.DELETE).build();
@ -1641,14 +1636,11 @@ public class IslandsManager {
* @param island - island
*/
public static void updateIsland(Island island) {
long m = System.currentTimeMillis();
if (handler.objectExists(island.getUniqueId())) {
island.clearChanged();
handler.saveObjectAsync(island)
.thenAccept(b -> MultiLib.notify("bentobox-updateIsland", island.getUniqueId()));
}
BentoBox.getInstance().logDebug("Island update " + (System.currentTimeMillis() - m));
}
/**

View File

@ -69,7 +69,6 @@ public class PlayersManager {
public Players getPlayer(UUID uuid){
if (!playerCache.containsKey(uuid)) {
playerCache.put(uuid, addPlayer(uuid));
BentoBox.getInstance().logDebug("Not in cache");
}
return playerCache.get(uuid);
}
@ -138,7 +137,7 @@ public class PlayersManager {
* @param user - the User
*/
public void setPlayerName(@NonNull User user) {
Players player = addPlayer(user.getUniqueId());
Players player = getPlayer(user.getUniqueId());
player.setPlayerName(user.getName());
handler.saveObject(player);
Names newName = new Names(user.getName(), user.getUniqueId());
@ -169,7 +168,7 @@ public class PlayersManager {
* @return number of resets
*/
public int getResets(World world, UUID playerUUID) {
return addPlayer(playerUUID).getResets(world);
return getPlayer(playerUUID).getResets(world);
}
/**
@ -181,7 +180,7 @@ public class PlayersManager {
* @see #getResets(World, UUID)
*/
public int getResetsLeft(World world, UUID playerUUID) {
addPlayer(playerUUID);
getPlayer(playerUUID);
if (plugin.getIWM().getResetLimit(world) == -1) {
return -1;
} else {
@ -197,7 +196,7 @@ public class PlayersManager {
* @param resets number of resets to set
*/
public void setResets(World world, UUID playerUUID, int resets) {
Players p = addPlayer(playerUUID);
Players p = getPlayer(playerUUID);
p.setResets(world, resets);
handler.saveObject(p);
}
@ -208,7 +207,7 @@ public class PlayersManager {
* @return name of the locale this player uses
*/
public String getLocale(UUID playerUUID) {
return addPlayer(playerUUID).getLocale();
return getPlayer(playerUUID).getLocale();
}
/**
@ -217,7 +216,7 @@ public class PlayersManager {
* @param localeName - locale name, e.g., en-US
*/
public void setLocale(UUID playerUUID, String localeName) {
Players p = addPlayer(playerUUID);
Players p = getPlayer(playerUUID);
p.setLocale(localeName);
handler.saveObject(p);
}
@ -228,7 +227,7 @@ public class PlayersManager {
* @param playerUUID - the player's UUID
*/
public void addDeath(World world, UUID playerUUID) {
Players p = addPlayer(playerUUID);
Players p = getPlayer(playerUUID);
p.addDeath(world);
handler.saveObject(p);
}
@ -240,7 +239,7 @@ public class PlayersManager {
* @param deaths - number of deaths
*/
public void setDeaths(World world, UUID playerUUID, int deaths) {
Players p = addPlayer(playerUUID);
Players p = getPlayer(playerUUID);
p.setDeaths(world, deaths);
handler.saveObject(p);
}
@ -252,7 +251,7 @@ public class PlayersManager {
* @return number of deaths
*/
public int getDeaths(World world, UUID playerUUID) {
return addPlayer(playerUUID).getDeaths(world);
return getPlayer(playerUUID).getDeaths(world);
}
/**
@ -304,7 +303,7 @@ public class PlayersManager {
* @param playerUUID player's UUID
*/
public void addReset(World world, UUID playerUUID) {
Players p = addPlayer(playerUUID);
Players p = getPlayer(playerUUID);
p.addReset(world);
handler.saveObject(p);
}

View File

@ -96,6 +96,11 @@ public class IslandCache {
}
/**
* TODO REMOVE THIS DEBUG METHOD
* @param island1 island1
* @param island2 island 2
*/
public void compareIslands(Island island1, Island island2) {
if (island1 == null || island2 == null) {
BentoBox.getInstance().logDebug("One or both islands are null. Cannot compare.");

View File

@ -1,14 +1,10 @@
package world.bentobox.bentobox.panels.settings;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.World;
@ -78,7 +74,8 @@ public class SettingsTab implements Tab, ClickHandler {
* @return list of flags that will be shown in this panel
*/
protected List<Flag> getFlags() {
long m = System.currentTimeMillis();
return plugin.getFlagsManager().getFlags();
/*
// Get a list of flags of the correct type and sort by the translated names
List<Flag> flags = plugin.getFlagsManager().getFlags().stream().filter(f -> f.getType().equals(type))
// We're stripping colors to avoid weird sorting issues
@ -90,8 +87,7 @@ public class SettingsTab implements Tab, ClickHandler {
Flag.Mode mode = currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC);
plugin.getIWM().getAddon(world).ifPresent(gm -> flags.removeIf(f -> f.getMode().isGreaterThan(mode) ||
f.getMode().equals(Flag.Mode.TOP_ROW)));
BentoBox.getInstance().logDebug("Time to get flags = " + (System.currentTimeMillis() - m));
return flags;
return flags;*/
}
/**
@ -123,8 +119,6 @@ public class SettingsTab implements Tab, ClickHandler {
@Override
@NonNull
public List<@Nullable PanelItem> getPanelItems() {
BentoBox.getInstance().logDebug("Get panel items");
List<Flag> flags = getFlags();
int i = 0;
// Jump past empty tabs
@ -132,25 +126,10 @@ public class SettingsTab implements Tab, ClickHandler {
currentMode.put(user.getUniqueId(), currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC).getNext());
flags = getFlags();
}
long m = System.currentTimeMillis();
// TODO This is taking too long!!!
List<@Nullable PanelItem> result = new ArrayList<>();
for (Flag f : flags) {
boolean x = plugin.getIWM().getHiddenFlags(world).contains(f.getID());
//BentoBox.getInstance().logDebug("Time for x = " + (System.currentTimeMillis() - m));
PanelItem pi = f.toPanelItem(plugin, user, world, island, x);
///BentoBox.getInstance().logDebug("Time for pi = " + (System.currentTimeMillis() - m));
result.add(pi);
}
/*
List<@Nullable PanelItem> result = flags.stream().map(
(f -> f.toPanelItem(plugin, user, world, island,
plugin.getIWM().getHiddenFlags(world).contains(f.getID()))))
.toList();
*/
BentoBox.getInstance().logDebug("Time for getpanelitems end = " + (System.currentTimeMillis() - m));
return result;
}
@ -162,6 +141,7 @@ public class SettingsTab implements Tab, ClickHandler {
icons.put(4, Flags.CHANGE_SETTINGS.toPanelItem(plugin, user, world, island, false));
icons.put(5, Flags.LOCK.toPanelItem(plugin, user, world, island, false));
}
// Add the mode icon
switch (currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC)) {
case ADVANCED -> icons.put(7, new PanelItemBuilder().icon(Material.GOLD_INGOT)
@ -186,7 +166,8 @@ public class SettingsTab implements Tab, ClickHandler {
.clickHandler(this)
.build());
}
// Add the reset everything to default - it's only in the player's settings panel
// Add the reset everything to default - it's only in the player's settings panel
if (island != null && user.getUniqueId().equals(island.getOwner())) {
icons.put(8, new PanelItemBuilder().icon(Material.TNT)
.name(user.getTranslation(PROTECTION_PANEL + "reset-to-default.name"))
@ -240,7 +221,6 @@ public class SettingsTab implements Tab, ClickHandler {
@Override
public boolean onClick(Panel panel, User user, ClickType clickType, int slot) {
long m = System.currentTimeMillis();
// Cycle the mode
currentMode.put(user.getUniqueId(), currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC).getNext());
if (panel instanceof TabbedPanel tp) {
@ -248,7 +228,6 @@ public class SettingsTab implements Tab, ClickHandler {
tp.refreshPanel();
user.getPlayer().playSound(user.getLocation(), Sound.BLOCK_STONE_BUTTON_CLICK_OFF, 1F, 1F);
}
BentoBox.getInstance().logDebug("Time for onClick = " + (System.currentTimeMillis() - m));
return true;
}

View File

@ -70,7 +70,6 @@ public class WorldDefaultSettingsTab extends SettingsTab implements Tab {
*/
@Override
public @NonNull List<PanelItem> getPanelItems() {
BentoBox.getInstance().logDebug("Get world default settings");
// Different description and click handlers
return getFlags().stream().map(f -> {
PanelItem i = f.toPanelItem(plugin, user, world, island, false);

View File

@ -266,16 +266,6 @@ public class AdminSettingsCommandTest extends RanksManagerBeforeClassTest {
verify(user).sendMessage("general.errors.use-in-game");
}
/**
* Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminSettingsCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
*/
@Test
public void testExecuteUserStringListOfStringNoArgs() {
assertTrue(asc.execute(user, "", Collections.emptyList()));
verify(pm).setFlagsDisplayMode(user.getUniqueId(), Mode.EXPERT);
// Open panel
}
/**
* Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminSettingsCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
*/

View File

@ -237,7 +237,7 @@ public class JoinLeaveListenerTest {
PlayerJoinEvent event = new PlayerJoinEvent(player, "");
jll.onPlayerJoin(event);
// Verify
verify(pm, times(2)).addPlayer(any());
verify(pm, times(2)).getPlayer(any());
verify(player, never()).sendMessage(anyString());
// Verify resets
verify(pm).setResets(eq(world), any(), eq(0));
@ -354,7 +354,7 @@ public class JoinLeaveListenerTest {
PlayerJoinEvent event = new PlayerJoinEvent(player, "");
jll.onPlayerJoin(event);
// Verify
verify(pm, times(2)).addPlayer(any());
verify(pm, times(2)).getPlayer(any());
verify(player).sendMessage(eq("commands.island.create.on-first-login"));
}

View File

@ -278,16 +278,6 @@ public class PlayersManagerTest {
assertEquals(deaths + 1, pm.getDeaths(world, uuid));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.PlayersManager#addPlayer(java.util.UUID)}.
*/
@Test
public void testAddPlayer() {
pm.addPlayer(uuid);
assertTrue(pm.isKnown(uuid));
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.PlayersManager#addReset(org.bukkit.World, java.util.UUID)}.
@ -443,7 +433,7 @@ public class PlayersManagerTest {
public void testGetSetResetsLeft() throws InstantiationException, IllegalAccessException, InvocationTargetException,
ClassNotFoundException, NoSuchMethodException, IntrospectionException {
// Add a player
pm.addPlayer(uuid);
pm.getPlayer(uuid);
assertEquals(0, pm.getResets(world, uuid));
pm.setResets(world, uuid, 20);
assertEquals(20, pm.getResets(world, uuid));
@ -464,7 +454,7 @@ public class PlayersManagerTest {
ClassNotFoundException, NoSuchMethodException, IntrospectionException {
User user = pm.getUser("random");
assertNull(user);
pm.addPlayer(uuid);
pm.getPlayer(uuid);
user = pm.getUser("tastybento");
assertEquals("tastybento", user.getName());
}
@ -485,7 +475,7 @@ public class PlayersManagerTest {
*/
@Test
public void testGetUUID() {
pm.addPlayer(uuid);
pm.getPlayer(uuid);
assertEquals(uuid, pm.getUUID("tastybento"));
assertNull(pm.getUUID("unknown"));
}
@ -498,7 +488,7 @@ public class PlayersManagerTest {
public void testGetUUIDOfflinePlayer() {
pm.setHandler(db);
// Add a player to the cache
pm.addPlayer(uuid);
pm.getPlayer(uuid);
UUID uuidResult = pm.getUUID("tastybento");
assertEquals(uuid, uuidResult);
}
@ -511,7 +501,7 @@ public class PlayersManagerTest {
public void testGetUUIDUnknownPlayer() {
pm.setHandler(db);
// Add a player to the cache
pm.addPlayer(uuid);
pm.getPlayer(uuid);
// Unknown player should return null
assertNull(pm.getUUID("tastybento123"));
}
@ -541,8 +531,8 @@ public class PlayersManagerTest {
@Test
public void testIsKnown() {
pm.addPlayer(uuid);
pm.addPlayer(notUUID);
pm.getPlayer(uuid);
pm.getPlayer(notUUID);
assertFalse(pm.isKnown(null));
assertTrue(pm.isKnown(uuid));
@ -551,21 +541,11 @@ public class PlayersManagerTest {
/**
* Test method for
* {@link world.bentobox.bentobox.managers.PlayersManager#isSaveTaskRunning()}.
* {@link world.bentobox.bentobox.managers.PlayersManager#setHandler(Database)}
*/
@Test
public void testIsSaveTaskRunning() {
assertFalse(pm.isSaveTaskRunning());
}
/**
* Test method for
* {@link world.bentobox.bentobox.managers.PlayersManager#load()}.
*/
@Test
public void testLoad() {
public void testSetHandler() {
pm.setHandler(db);
pm.load();
}
/**
@ -608,7 +588,7 @@ public class PlayersManagerTest {
public void testSetandGetPlayerName() {
pm.setHandler(db);
// Add a player
pm.addPlayer(uuid);
pm.getPlayer(uuid);
assertEquals("tastybento", pm.getName(user.getUniqueId()));
pm.setPlayerName(user);
assertEquals(user.getName(), pm.getName(user.getUniqueId()));