Skip to content

Commit 8ecdac9

Browse files
committed
fix inspectkit/inspectec failing for offline players
- savekit silent mode no longer requires player to be online, and now persists to DB immediately - added saveECSilent for offline enderchest saves via inspect - replaced Bukkit.getOfflinePlayers() scan in close listeners with a stored inspector→target UUID map, eliminating lag and failed lookups - fixed InspectEc using inspector's UUID instead of target's when loading enderchest data
1 parent 3fce281 commit 8ecdac9

3 files changed

Lines changed: 71 additions & 80 deletions

File tree

src/main/java/dev/noah/perplayerkit/KitManager.java

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -224,50 +224,54 @@ public boolean saveEC(UUID uuid, int slot, ItemStack[] kit) {
224224
return false;
225225
}
226226

227+
public boolean saveECSilent(UUID uuid, int slot, ItemStack[] kit) {
228+
boolean notEmpty = false;
229+
for (ItemStack i : kit) {
230+
if (i != null) {
231+
notEmpty = true;
232+
break;
233+
}
234+
}
235+
236+
if (!notEmpty) {
237+
return false;
238+
}
239+
240+
kitByKitIDMap.put(IDUtil.getECId(uuid, slot), kit);
241+
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> saveEnderchestToDB(uuid, slot));
242+
return true;
243+
}
244+
227245
public boolean savekit(UUID uuid, int slot, ItemStack[] kit, boolean silent) {
228246
if (silent) {
229-
if (Bukkit.getPlayer(uuid) != null) {
230-
Player player = Bukkit.getPlayer(uuid);
231-
if (player != null) {
232-
boolean notEmpty = false;
233-
for (ItemStack i : kit) {
234-
if (i != null) {
235-
if (!notEmpty) {
236-
notEmpty = true;
237-
}
238-
}
239-
}
247+
boolean notEmpty = false;
248+
for (ItemStack i : kit) {
249+
if (i != null) {
250+
notEmpty = true;
251+
break;
252+
}
253+
}
240254

241-
if (notEmpty) {
242-
if (kit[36] != null) {
243-
if (!kit[36].getType().toString().contains("BOOTS")) {
244-
kit[36] = null;
245-
}
246-
}
247-
if (kit[37] != null) {
248-
if (!kit[37].getType().toString().contains("LEGGINGS")) {
249-
kit[37] = null;
250-
}
251-
}
252-
if (kit[38] != null) {
253-
if (!(kit[38].getType().toString().contains("CHESTPLATE") || kit[38].getType().toString().contains("ELYTRA"))) {
254-
kit[38] = null;
255-
}
256-
}
257-
if (kit[39] != null) {
258-
if (!kit[39].getType().toString().contains("HELMET")) {
259-
kit[39] = null;
260-
}
261-
}
255+
if (!notEmpty) {
256+
return false;
257+
}
262258

263-
kitByKitIDMap.put(IDUtil.getPlayerKitId(uuid, slot), ItemFilter.get().filterItemStack(kit));
264-
return true;
265-
} else {
266-
player.sendMessage(ChatColor.RED + "You cant save an empty kit!");
267-
}
268-
}
259+
if (kit[36] != null && !kit[36].getType().toString().contains("BOOTS")) {
260+
kit[36] = null;
269261
}
270-
return false;
262+
if (kit[37] != null && !kit[37].getType().toString().contains("LEGGINGS")) {
263+
kit[37] = null;
264+
}
265+
if (kit[38] != null && !(kit[38].getType().toString().contains("CHESTPLATE") || kit[38].getType().toString().contains("ELYTRA"))) {
266+
kit[38] = null;
267+
}
268+
if (kit[39] != null && !kit[39].getType().toString().contains("HELMET")) {
269+
kit[39] = null;
270+
}
271+
272+
kitByKitIDMap.put(IDUtil.getPlayerKitId(uuid, slot), ItemFilter.get().filterItemStack(kit));
273+
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> savePlayerKitToDB(uuid, slot));
274+
return true;
271275
} else {
272276
return savekit(uuid, slot, kit);
273277
}

src/main/java/dev/noah/perplayerkit/gui/GUI.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@
3636
import org.ipvp.canvas.slot.Slot;
3737
import org.ipvp.canvas.type.ChestMenu;
3838

39+
import java.util.HashMap;
3940
import java.util.HashSet;
4041
import java.util.List;
42+
import java.util.Map;
4143
import java.util.Set;
4244
import java.util.UUID;
4345

@@ -49,6 +51,15 @@ public class GUI {
4951
private final Plugin plugin;
5052
private final boolean filterItemsOnImport;
5153
private static final Set<UUID> kitDeletionFlag = new HashSet<>();
54+
private static final Map<UUID, UUID> inspectTargets = new HashMap<>();
55+
56+
public static void setInspectTarget(UUID inspector, UUID target) {
57+
inspectTargets.put(inspector, target);
58+
}
59+
60+
public static UUID getAndRemoveInspectTarget(UUID inspector) {
61+
return inspectTargets.remove(inspector);
62+
}
5263

5364
public GUI(Plugin plugin) {
5465
this.plugin = plugin;
@@ -167,6 +178,7 @@ public void OpenECKitKenu(Player p, int slot) {
167178
}
168179

169180
public void InspectKit(Player p, UUID target, int slot) {
181+
setInspectTarget(p.getUniqueId(), target);
170182
String playerName = getPlayerName(target);
171183
Menu menu = createInspectMenu(slot, playerName);
172184

@@ -206,6 +218,7 @@ public void InspectKit(Player p, UUID target, int slot) {
206218
}
207219

208220
public void InspectEc(Player p, UUID target, int slot) {
221+
setInspectTarget(p.getUniqueId(), target);
209222
String playerName = getPlayerName(target);
210223
Menu menu = createInspectEcMenu(slot, playerName);
211224

@@ -217,9 +230,9 @@ public void InspectEc(Player p, UUID target, int slot) {
217230
menu.getSlot(i).setItem(ItemUtil.createGlassPane());
218231

219232
}
220-
if (KitManager.get().getItemStackArrayById(p.getUniqueId() + "ec" + slot) != null) {
233+
if (KitManager.get().getItemStackArrayById(target + "ec" + slot) != null) {
221234

222-
ItemStack[] kit = KitManager.get().getItemStackArrayById(p.getUniqueId() + "ec" + slot);
235+
ItemStack[] kit = KitManager.get().getItemStackArrayById(target + "ec" + slot);
223236
for (int i = 9; i < 36; i++) {
224237
menu.getSlot(i).setItem(kit[i - 9]);
225238
}

src/main/java/dev/noah/perplayerkit/listeners/KitMenuCloseListener.java

Lines changed: 13 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
import dev.noah.perplayerkit.gui.GUI;
2323
import dev.noah.perplayerkit.util.StyleManager;
2424
import net.md_5.bungee.api.ChatColor;
25-
import org.bukkit.Bukkit;
26-
import org.bukkit.OfflinePlayer;
2725
import org.bukkit.entity.Player;
2826
import org.bukkit.event.EventHandler;
2927
import org.bukkit.event.Listener;
@@ -124,6 +122,12 @@ public void onInspectKitEditorClose(InventoryCloseEvent e) {
124122
if (!p.hasPermission("perplayerkit.admin")) {
125123
return;
126124
}
125+
126+
UUID targetUuid = GUI.getAndRemoveInspectTarget(p.getUniqueId());
127+
if (targetUuid == null) {
128+
return;
129+
}
130+
127131
String title = view.getTitle();
128132
String[] parts = title.replace(StyleManager.get().getPrimaryColor() + "Inspecting ", "").split("'s kit ");
129133
if (parts.length != 2) {
@@ -137,24 +141,6 @@ public void onInspectKitEditorClose(InventoryCloseEvent e) {
137141
return;
138142
}
139143

140-
UUID targetUuid = null;
141-
for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()) {
142-
if (playerName.equalsIgnoreCase(offlinePlayer.getName())) {
143-
targetUuid = offlinePlayer.getUniqueId();
144-
break;
145-
}
146-
}
147-
if (targetUuid == null) {
148-
Player onlinePlayer = Bukkit.getPlayerExact(playerName);
149-
if (onlinePlayer != null) {
150-
targetUuid = onlinePlayer.getUniqueId();
151-
}
152-
}
153-
if (targetUuid == null) {
154-
p.sendMessage(ChatColor.RED + "Could not find player " + playerName);
155-
return;
156-
}
157-
158144
if (GUI.removeKitDeletionFlag(p)) {
159145
return;
160146
}
@@ -191,6 +177,12 @@ public void onInspectEnderchestEditorClose(InventoryCloseEvent e) {
191177
if (!p.hasPermission("perplayerkit.admin")) {
192178
return;
193179
}
180+
181+
UUID targetUuid = GUI.getAndRemoveInspectTarget(p.getUniqueId());
182+
if (targetUuid == null) {
183+
return;
184+
}
185+
194186
String title = view.getTitle();
195187
String[] parts = title.replace(StyleManager.get().getPrimaryColor() + "Inspecting ", "").split("'s enderchest ");
196188
if (parts.length != 2) {
@@ -204,24 +196,6 @@ public void onInspectEnderchestEditorClose(InventoryCloseEvent e) {
204196
return;
205197
}
206198

207-
UUID targetUuid = null;
208-
for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()) {
209-
if (playerName.equalsIgnoreCase(offlinePlayer.getName())) {
210-
targetUuid = offlinePlayer.getUniqueId();
211-
break;
212-
}
213-
}
214-
if (targetUuid == null) {
215-
Player onlinePlayer = Bukkit.getPlayerExact(playerName);
216-
if (onlinePlayer != null) {
217-
targetUuid = onlinePlayer.getUniqueId();
218-
}
219-
}
220-
if (targetUuid == null) {
221-
p.sendMessage(ChatColor.RED + "Could not find player " + playerName);
222-
return;
223-
}
224-
225199
if (GUI.removeKitDeletionFlag(p)) {
226200
return;
227201
}
@@ -237,7 +211,7 @@ public void onInspectEnderchestEditorClose(InventoryCloseEvent e) {
237211
}
238212
}
239213

240-
if (KitManager.get().saveEC(targetUuid, slot, kit)) {
214+
if (KitManager.get().saveECSilent(targetUuid, slot, kit)) {
241215
p.sendMessage(ChatColor.GREEN + "Enderchest " + slot + " updated for player " + playerName + "!");
242216
} else {
243217
p.sendMessage(ChatColor.RED + "Failed to update enderchest for player " + playerName + "!");

0 commit comments

Comments
 (0)