Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class ServerInfoCache {
* Get all servers, using cache if available.
*/
public static CompletableFuture<List<UnderstandableProxyServer>> getServers() {
if (System.currentTimeMillis() - lastCacheTime < CACHE_TTL_MS && !cachedServers.isEmpty()) {
if (!isCacheStale()) {
return CompletableFuture.completedFuture(new ArrayList<>(cachedServers));
}
return refreshCache();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,10 @@ private void loadLobbies(HypixelPlayer player) {
}

private void populateLobbies(HypixelPlayer player) {
// Clear all slots first
items.clear();
for (int i = 0; i < 18; i++) {
getInventory().setItemStack(i, ItemStack.AIR);
}
items.clear();

UUID currentServer = HypixelConst.getServerUUID();

Expand All @@ -106,7 +105,7 @@ public void run(InventoryPreClickEvent e, HypixelPlayer p) {
for (int i = 0; i < lobbies.size() && i < 18; i++) {
UnderstandableProxyServer lobby = lobbies.get(i);
boolean isCurrentServer = lobby.uuid().equals(currentServer);
int lobbyNumber = extractLobbyNumber(lobby.shortName());
int lobbyNumber = i + 1;

set(new GUIClickableItem(i) {
@Override
Expand All @@ -121,7 +120,7 @@ public ItemStack.Builder getItem(HypixelPlayer p) {
return ItemStackCreator.getStack(
titleColor + lobbyName + " #" + lobbyNumber,
material,
Math.max(1, lobbyNumber),
lobbyNumber,
"§7Players: " + players + "/" + max,
"",
statusLine
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,7 @@ public ItemStack.Builder getItem(HypixelPlayer player) {

@Override
public void run(InventoryPreClickEvent e, HypixelPlayer player) {
player.closeInventory();
new GUIMyProfile().open(player);
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,6 @@
import net.swofty.type.skyblockgeneric.user.SkyBlockPlayer;

public class ActionItemRightUse implements HypixelEventClass {

@SneakyThrows
@HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = true)
public void run(PlayerUseItemOnBlockEvent event) {
ItemStack itemStack = event.getPlayer().getItemInMainHand();
SkyBlockItem item = new SkyBlockItem(itemStack);
SkyBlockPlayer player = (SkyBlockPlayer) event.getPlayer();

if (item.hasComponent(InteractableComponent.class)) {
InteractableComponent interactableComponent = item.getComponent(InteractableComponent.class);
interactableComponent.onRightClick(player, item);
}
}

@SneakyThrows
@HypixelEvent(node = EventNodes.PLAYER, requireDataLoaded = true)
public void run(PlayerUseItemEvent event) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,24 @@ public class GUICrafting extends HypixelInventoryGUI implements RefreshingGUI {
private static final ItemStack.Builder RECIPE_REQUIRED = ItemStackCreator.getStack("§cRecipe Required", Material.BARRIER, 1, "§7Add the items for a valid", "§7recipe in the crafting grid", "§7to the left!");
private static final int[] CRAFT_SLOTS = new int[]{10, 11, 12, 19, 20, 21, 28, 29, 30};
private static final int RESULT_SLOT = 23;
private int lastGridHash = 0;
private SkyBlockRecipe<?> lastParsedRecipe = null;

public GUICrafting() {
super("Craft Item", InventoryType.CHEST_6_ROW);
}

private int computeGridHash(Inventory inv) { // TODO: Account for metadata
int h = 1;
for (int slot : CRAFT_SLOTS) {
ItemStack it = inv.getItemStack(slot);
h = 31 * h + it.material().id();
h = 31 * h + it.amount();
}
return h;
}


@Override
public void onOpen(InventoryGUIOpenEvent e) {
fill(ItemStackCreator.createNamedItemStack(Material.BLACK_STAINED_GLASS_PANE), 13, 34);
Expand Down Expand Up @@ -76,7 +89,16 @@ public void onBottomClick(InventoryPreClickEvent e) {
@Override
public void refreshItems(HypixelPlayer player) {
Inventory inventory = getInventory();
SkyBlockRecipe<?> recipe = SkyBlockRecipe.parseRecipe(getCurrentRecipe(inventory));
int gridHash = computeGridHash(inventory);
SkyBlockRecipe<?> recipe;

if (gridHash == lastGridHash) {
recipe = lastParsedRecipe;
} else {
lastGridHash = gridHash;
recipe = SkyBlockRecipe.parseRecipe(getCurrentRecipe(inventory));
lastParsedRecipe = recipe;
}

fill(ItemStackCreator.createNamedItemStack(Material.BLACK_STAINED_GLASS_PANE), 13, 34);
border(ItemStackCreator.createNamedItemStack(Material.RED_STAINED_GLASS_PANE));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

public class BuildersWandAbility extends RegisteredAbility {

@SuppressWarnings("preview")
public BuildersWandAbility() {
super("GRAND_ARCHITECT", "Grand Architect",
"Right-click the face of a block to extend all connected block faces.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,19 +125,24 @@ FromProxyChannels.PING_SERVER, new JSONObject()
}

private static int getNextAvailableDisplayName() {
if (servers.isEmpty()) return 1;
if (servers.values().stream().allMatch(ArrayList::isEmpty)) return 1;

List<GameServer> gameServers = new ArrayList<>();
servers.values().forEach(gameServers::addAll);

int highestDisplayName = (gameServers.stream().mapToInt(server -> {
String displayName = server.displayName().replaceAll("[^0-9]", "");
return Integer.parseInt(displayName);
}).max().getAsInt());
return highestDisplayName + 1;
Set<Integer> used = new HashSet<>();
for (ArrayList<GameServer> list : servers.values()) {
for (GameServer gs : list) {
String digits = gs.displayName().replaceAll("[^0-9]", "");
if (!digits.isEmpty()) {
try {
int n = Integer.parseInt(digits);
if (n > 0) used.add(n);
} catch (NumberFormatException ignored) {}
}
}
}
int candidate = 1;
while (used.contains(candidate)) candidate++;
return candidate;
}


private static int getNextAvailablePort() {
if (servers.isEmpty()) return 20000;
if (servers.values().stream().allMatch(ArrayList::isEmpty)) return 20000;
Expand Down
Loading