Giter VIP home page Giter VIP logo

serverbrowser's Introduction

SA-MP Server Browser

Codacy grade Waffle.io - Columns and their card count

master: Build Status

develop: Build Status

Description

This application offers a row of tools for the San Andreas-Multiplayer mod for the Grand Theft Auto: San Andreas game.

Features

  • Save your favourite servers
  • Access to a list of currently over 2000 servers
  • Version changer
  • Username history
  • Access to SA-MP Settings via graphical user interface
  • Access to SA-MP chat logs (with colors and timestamps)
  • Server history
  • MORE TO COME ...
    • Server-specific usernames
    • Screenshot viewer

Donate

If you want to make me feel better, since i am dedicating my free time to do this, feel free to donate something on https://ko-fi.com/marcelschr .

Languages

This software is currently available in the following languages (some might not be perfectly and completly translated):

  • English
  • German
  • Georgian (Translated by Medzvel)
  • Greek (Translated by vassilis)
  • Dutch (Translated by Jsytlez)
  • Russian (Translated by Codeah)
  • Polish (Translated by AbyssMorgan)
  • Romanian (Translated by IstuntmanI)
  • Spanish (Translated by Unrea1, updated by RIDE2DAY)
  • Turkish (Translated by MustafaKemalAtaturk)
  • Bosnian (Translated by Tagic)

Installation

Overall, you have 3 options:

Downloading the latest launcher.jar file

The latest launcher.jar is available under https://github.com/Bios-Marcel/ServerBrowser/releases/latest , but it will require you to have Java 8 or later installed, i strongly suggest installing Java 9, since future versions of this project will use Java 9.

Downloading the latest Installer (NOT SUPPORTED ANYMORE)

The latest installer is also available under https://github.com/Bios-Marcel/ServerBrowser/releases/tag/8.5.7 Unlike when using the launcher.jar file, the installer won't require you to download anything other than the installer itself. The installer isn't supported after version 8.5.7 anymore.

Build all the stuff yourself

In case you are paranoid and scared that i might have infected the files in the release section, feel free to build the project yourself. For further information on how to build the project, check the Build Section below

Troubleshooting

Your client isn't able to fetch servers

If your Client isn't able to fetch any servers anymore, the first thing you should do, is to try and download the latest version of the client.

The second thing you might want to check, is your firewall. Make sure you haven't blocked the application itself.

Your client doesn't start anymore

In case your client doesn't start anymore, the first thing you should do, is to try and download the latest version of the client.

If downloading the latest version of the client doesn't help, try removing your currently installed Java runtime, if you have never installed a Java runtime, uninstall the ServerBrowser using the default Windows uninstalling procedure. After deleting Java and/or the ServerBrowser reinstall it.

Pictures

There is a light and a dark theme, here are screenshots including both themes:

Servers Dark

Servers Light

Past Usernames Dark

Past Usernames Light

Version Changer Dark

Version Changer Light

Files Dark

Files Light

Settings Dark

Settings Light

Documentation (Outdated)

Javadoc is available under: (https://bios-marcel.github.io/ServerBrowser-Doc/overview-summary.html)

User Documentation (not complete) is available under: (https://github.com/Bios-Marcel/ServerBrowser/wiki)

You want to help?

You can help by reporting bugs, recommending new features or creating pull requests.

Another way for you to contribute, is to help localizing the application

How to create a new language file

If you want to translate the program into another language, simply copy /client/src/main/resources/com/msc/serverbrowser/localization/Lang_en.properties and name it lang_YOUR_COUNTRIES_SHORTCUT.propeties. After having done the translation, send me the file or do a pull request on GitHub. Please be careful to not modify any of the key names, that means only edit whats behind a =. If possible try to escape all characters, since there is currently to UTF-8 support for language files.

To be localized

Note: Some of the following key-value pairs might already be correct, in that case i don't know it though.

German

Done

Georgian

errorFetchingServers=Couldn't fetch servers
favourites=Favourites
pageSize=PageSize
fetchingServers=Fetching servers, please wait a moment.
connectToServerUsingPassword=Connect using password
enterFilterValue=Enter filter value
lagcomp=lagcomp:
showTimestamps=Show times if available
locateGTAManually=Click here to enter your GTA path manually.
lastVisit=Last visit
visitWebsite=Visit website
gtaNotFoundPrompt=Will be automatically detected if left empty
addToFavourites=Add to favourites
rememberLastView=Remember last view
inputMethodText=Input method text editing and language switching
ba=Bosnian
sureYouWantToRestoreLegacySettingsAswell=Do you also, in addition to the application settings, want to reset the SA-MP settings?
cantFindGTA=Can't find GTA installation
sureYouWantToRestoreLegacySettings=Are you sure, that you want to reset the SA-MP settings?
customSampPath=Custom SA-MP Path
noFavouriteServers=You don't have any favourites.
directmode=Directmode (Fix chat text drawing problems)
usePreReleases=Use pre-releases
tr=Turkish
activePlayers=Active players: {0}
showChatlogColors=Show colors
showChatlogColorsAsText=Show colors as text
copyIpAddressAndPort=Copy IP address and port
donate=Donate
applyUsername=Apply username
all=All
removeUsernameSingular=Remove username
downloadingUpdate=Downloading update
history=History
restoreLegacySettingsToDefault=Restore SA-MP settings to default
removeUsernamePlural=Remove usernames
connectingToServer=Connecting to server
allowCachingSampVersions=Allow caching downloaded SA-MP versions
retrieving=Retrieving ...
connectToServer=Connect to server
removeFromFavourites=Remove from favourites
checkingForUpdates=Checking for updates
serverMightBeOfflineConnectAnyways=The server might not be online, do you want to try connecting to it anyways?
noServerHistory=You haven't joined any servers recently.
enterServerPasswordMessage=Enter the servers password (Leave empty if you think there is none).
multicoreUsage=Multicore usage
openDonationPageTooltip=Opens the 'Donate' section of the GitHub project page

Greek

errorFetchingServers=Couldn't fetch servers
favourites=Favourites
fetchingServers=Fetching servers, please wait a moment.
chatTimestamps=Chat Timestamps
connectToServerUsingPassword=Connect using password
enterFilterValue=Enter filter value
lagcomp=lagcomp:
showTimestamps=Show times if available
locateGTAManually=Click here to enter your GTA path manually.
lastVisit=Last visit
visitWebsite=Visit website
gtaNotFoundPrompt=Will be automatically detected if left empty
addToFavourites=Add to favourites
generalSettingsTitle=General
sureYouWantToRestoreLegacySettingsAswell=Do you also, in addition to the application settings, want to reset the SA-MP settings?
sampVersion=SA-MP Version {0}
cantFindGTA=Can't find GTA installation
ping=Ping:
sureYouWantToRestoreLegacySettings=Are you sure, that you want to reset the SA-MP settings?
noFavouriteServers=You don't have any favourites.
usePreReleases=Use pre-releases
informationSettingsTitle=Information
showChatlogColors=Show colors
showChatlogColorsAsText=Show colors as text
copyIpAddressAndPort=Copy IP address and port
donate=Donate
applyUsername=Apply username
all=All
removeUsernameSingular=Remove username
downloadingUpdate=Downloading update
versionInfo=Version: {0}
history=History
chatlogs=Chatlogs
restoreLegacySettingsToDefault=Restore SA-MP settings to default
removeUsernamePlural=Remove usernames
connectingToServer=Connecting to server
retrieving=Retrieving ...
connectToServer=Connect to server
servers=Servers: {0}
removeFromFavourites=Remove from favourites
checkingForUpdates=Checking for updates
serverMightBeOfflineConnectAnyways=The server might not be online, do you want to try connecting to it anyways?
noServerHistory=You haven't joined any servers recently.
enterServerPasswordMessage=Enter the servers password (Leave empty if you think there is none).
openDonationPageTooltip=Opens the 'Donate' section of the GitHub project page

Dutch

errorFetchingServers=Couldn't fetch servers
favourites=Favourites
fetchingServers=Fetching servers, please wait a moment.
connectToServerUsingPassword=Connect using password
enterFilterValue=Enter filter value
lagcomp=lagcomp:
showTimestamps=Show times if available
locateGTAManually=Click here to enter your GTA path manually.
gamemodeTableHeader=Gamemode
lastVisit=Last visit
visitWebsite=Visit website
addToFavourites=Add to favourites
ba=Bosnian
sureYouWantToRestoreLegacySettingsAswell=Do you also, in addition to the application settings, want to reset the SA-MP settings?
cantFindGTA=Can't find GTA installation
ping=Ping:
downloadSettingTitle=Downloads
sureYouWantToRestoreLegacySettings=Are you sure, that you want to reset the SA-MP settings?
map=Map:
website=Website:
noFavouriteServers=You don't have any favourites.
usePreReleases=Use pre-releases
tr=Turkish
showChatlogColors=Show colors
showChatlogColorsAsText=Show colors as text
copyIpAddressAndPort=Copy IP address and port
donate=Donate
applyUsername=Apply username
all=All
removeUsernameSingular=Remove username
downloadingUpdate=Downloading update
history=History
restoreLegacySettingsToDefault=Restore SA-MP settings to default
removeUsernamePlural=Remove usernames
updatesSettingTitle=Updates
connectingToServer=Connecting to server
retrieving=Retrieving ...
connectToServer=Connect to server
servers=Servers: {0}
removeFromFavourites=Remove from favourites
checkingForUpdates=Checking for updates
serverMightBeOfflineConnectAnyways=The server might not be online, do you want to try connecting to it anyways?
noServerHistory=You haven't joined any servers recently.
enterServerPasswordMessage=Enter the servers password (Leave empty if you think there is none).
serverOffline=Server is offline.
openDonationPageTooltip=Opens the 'Donate' section of the GitHub project page

Russian

errorFetchingServers=Couldn't fetch servers
favourites=Favourites
connectToServerUsingPassword=Connect using password
enterFilterValue=Enter filter value
lagcomp=lagcomp:
showTimestamps=Show times if available
locateGTAManually=Click here to enter your GTA path manually.
lastVisit=Last visit
visitWebsite=Visit website
addToFavourites=Add to favourites
ba=Bosnian
sureYouWantToRestoreLegacySettingsAswell=Do you also, in addition to the application settings, want to reset the SA-MP settings?
cantFindGTA=Can't find GTA installation
ping=Ping:
sureYouWantToRestoreLegacySettings=Are you sure, that you want to reset the SA-MP settings?
noFavouriteServers=You don't have any favourites.
usePreReleases=Use pre-releases
tr=Turkish
showChatlogColors=Show colors
showChatlogColorsAsText=Show colors as text
copyIpAddressAndPort=Copy IP address and port
donate=Donate
applyUsername=Apply username
all=All
removeUsernameSingular=Remove username
downloadingUpdate=Downloading update
history=History
restoreLegacySettingsToDefault=Restore SA-MP settings to default
removeUsernamePlural=Remove usernames
connectingToServer=Connecting to server
retrieving=Retrieving ...
connectToServer=Connect to server
removeFromFavourites=Remove from favourites
checkingForUpdates=Checking for updates
serverMightBeOfflineConnectAnyways=The server might not be online, do you want to try connecting to it anyways?
noServerHistory=You haven't joined any servers recently.
enterServerPasswordMessage=Enter the servers password (Leave empty if you think there is none).
openDonationPageTooltip=Opens the 'Donate' section of the GitHub project page

Polish

Done

Romanian

connectToServerUsingPassword=Connect using password
lagcomp=lagcomp:
lastVisit=Last visit
visitWebsite=Visit website
addToFavourites=Add to favourites
ba=Bosnian
generalSettingsTitle=General
sureYouWantToRestoreLegacySettingsAswell=Do you also, in addition to the application settings, want to reset the SA-MP settings?
ping=Ping:
sureYouWantToRestoreLegacySettings=Are you sure, that you want to reset the SA-MP settings?
usePreReleases=Use pre-releases
showChatlogColorsAsText=Show colors as text
copyIpAddressAndPort=Copy IP address and port
restoreLegacySettingsToDefault=Restore SA-MP settings to default
connectToServer=Connect to server
removeFromFavourites=Remove from favourites
enterServerPasswordMessage=Enter the servers password (Leave empty if you think there is none).

Spanish

favourites=Favourites
connectToServerUsingPassword=Connect using password
enterFilterValue=Enter filter value
showTimestamps=Show times if available
lastVisit=Last visit
visitWebsite=Visit website
addToFavourites=Add to favourites
ba=Bosnian
generalSettingsTitle=General
sureYouWantToRestoreLegacySettingsAswell=Do you also, in addition to the application settings, want to reset the SA-MP settings?
sureYouWantToRestoreLegacySettings=Are you sure, that you want to reset the SA-MP settings?
noFavouriteServers=You don't have any favourites.
usePreReleases=Use pre-releases
tr=Turkish
showChatlogColors=Show colors
showChatlogColorsAsText=Show colors as text
copyIpAddressAndPort=Copy IP address and port
donate=Donate
applyUsername=Apply username
all=All
removeUsernameSingular=Remove username
downloadingUpdate=Downloading update
history=History
restoreLegacySettingsToDefault=Restore SA-MP settings to default
removeUsernamePlural=Remove usernames
no=No
connectingToServer=Connecting to server
connectToServer=Connect to server
removeFromFavourites=Remove from favourites
checkingForUpdates=Checking for updates
serverMightBeOfflineConnectAnyways=The server might not be online, do you want to try connecting to it anyways?
noServerHistory=You haven't joined any servers recently.
enterServerPasswordMessage=Enter the servers password (Leave empty if you think there is none).

Turkish

favourites=Favourites
pageSize=PageSize
connectToServerUsingPassword=Connect using password
enterFilterValue=Enter filter value
showTimestamps=Show times if available
gamemodeTableHeader=Gamemode
lastVisit=Last visit
visitWebsite=Visit website
addToFavourites=Add to favourites
sureYouWantToRestoreLegacySettingsAswell=Do you also, in addition to the application settings, want to reset the SA-MP settings?
ping=Ping:
sureYouWantToRestoreLegacySettings=Are you sure, that you want to reset the SA-MP settings?
fpsLimit=FPS Limit
website=Website:
usePreReleases=Use pre-releases
showChatlogColors=Show colors
showChatlogColorsAsText=Show colors as text
copyIpAddressAndPort=Copy IP address and port
donate=Donate
applyUsername=Apply username
all=All
removeUsernameSingular=Remove username
downloadingUpdate=Downloading update
history=History
restoreLegacySettingsToDefault=Restore SA-MP settings to default
removeUsernamePlural=Remove usernames
retrieving=Retrieving ...
connectToServer=Connect to server
removeFromFavourites=Remove from favourites
checkingForUpdates=Checking for updates
enterServerPasswordMessage=Enter the servers password (Leave empty if you think there is none).

Bosnian

pageSize=PageSize
connectToServerUsingPassword=Connect using password
lagcomp=lagcomp:
gamemodeTableHeader=Gamemode
ping=Ping:
fpsLimit=FPS Limit
usePreReleases=Use pre-releases
enterServerPasswordMessage=Enter the servers password (Leave empty if you think there is none).

Build

This project is managed using gradle.

Building with Gradle

To see which tasks are available, run:

on Unix:

$ ./gradlew tasks

on Windows:

$ ./gradlew.bat tasks

The first time you execute gradlew (gradle wrapper) it will download a local copy of gradle into the project folder .gradle. This will not be committed to version control.

You are of course free to use your own or systems copy of gradle, but this approach has the advantage that we all share the same version of gradle.

Running tasks on subprojects

To run tasks on the subprojects, you can either cd into the subproject and run the task, e.g.:

$ cd client
$ ../gradlew run

Assemble and test the build outputs. You will find the results in the build folder of client.

$ ./gradlew build

In order to build a runnable .jar file, run:

$ ./gradlew shadowJar

Syncing gradle with Eclipse

Typically, when you import a gradle project into eclipse, it takes care of creating the eclipse project files via the plugin buildship.

However, if you want to be extra sure, donยดt want to use the plugin or need to fix some synchronization issue between eclipse and gradle; It is useful to know how to manually do it:

From the parent project run:

$ ./gradlew eclipseClean eclipse

Eclipse will instantly reload the fresh project settings files.

You need help?

Send me an E-Mail

serverbrowser's People

Contributors

abyssmorgan avatar amagida avatar bios-marcel avatar bugabinga avatar istuntmani avatar jstylezzz avatar medzvel avatar tagic avatar vasily-x avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

serverbrowser's Issues

Version changing might require administrative rights

In order to be able to alter files in the windows programs folder, the user needs admin rights, since my application is usually not started with admin rights, i either have to prompt the user for one time rights or start the actual samp installer, which might be better anyways. i am not sure if that works though.

Roadmap

Step 1

I have tested the whole scenario using the official samp installer via command line.
I have executed the following:

.\installer.exe /S /D=Path

/S stands for silent installation and /D specified the target path. During installation all errors will be ignored.

Step 2

I have reimplemented the current installation logic, it is now possible to use .zip and `.exe`` (Official nullsoft installer).

Step 3

Remove all current installation candidates using zips.

Replace Logger

Right now, i am using a global logger, that is shared between client and server, making everything way too static. Instead i should create a separate logger for both sides, which is also not global.

Automatic custom.img, custom.ide and custom.ipl mover

As you already added a Version Changer (which is really useful), you could also add an automatic CUSTOM.* mover.

Multiple Servers I play on offer a set of CUSTOM.img and CUSTOM.ide (potentially also CUSTOM.ipl) files to add more objects to their servers, and I have to copy them over everytime I switch between those.

Would be nice if we could link the files to a specific Server in your Browser and when joining, the specified files will automatically be copied to the GTA SA/SAMP/ directory.

Just an idea and nothing important since it's not a big deal to do it manually (eg. batch file), but this would still be much easier.

The favourites tab needs to be hooked to the USERDATA.dat file

So it will be easier to handle the favourites. It should use the same favourites list as the samp.exe browser. Looks like you already did most of the work for this, but for some reason you forgot to finish it.

Also:

public static SampServer addServerToFavourites(final String address, final Integer port) {
final SampServer server = new SampServer(address, port);
try (final SampQuery query = new SampQuery(server.getAddress(), server.getPort()))
{
query.getBasicServerInfo().ifPresent(serverInfo -> {
server.setPlayers(Integer.parseInt(serverInfo[1]));
server.setMaxPlayers(Integer.parseInt(serverInfo[2]));
server.setHostname(serverInfo[3]);
server.setMode(serverInfo[4]);
server.setLanguage(serverInfo[5]);
});
query.getServersRules().ifPresent(rules -> {
server.setWebsite(rules.get("weburl"));
server.setVersion(rules.get("version"));
});
}
catch (final SocketException | UnknownHostException exception) {
Logging.warn("Error updating server information.", exception);
server.setHostname(UNKNOWN);
server.setLanguage(UNKNOWN);
server.setMode(UNKNOWN);
server.setWebsite(UNKNOWN);
server.setVersion(UNKNOWN);
server.setLagcomp(UNKNOWN);
server.setPlayers(0);
server.setMaxPlayers(0);
}
Logging.info("Adding server to favourites: " + server);
addServerToFavourites(server);
return server;
}

It looks like you should just return without actually calling addServerToFavourites(server); if that exception is caught. If I'm not missing anything.

More translation suggestion

I translate Lang_en.properties file to bosnian language and i can't find this list:

image

You should add them in file like:

  • connectToServer=Conect to server
  • removeFromFavourites=Remove from favourites
  • copyIpAddresAndPort=Copy IP Addres And Port
  • visitWebsite=Visit Website

Java 9 Migration

Benefits

  • greater startup time
  • JavaFX improvements
  • UTF-8 ResourceBundle
  • Modular JRE (smaller)

Downsides

  • No 32bit JRE builds
  • Refactorings for modularization
  • Java 9 Support by libraries
    • Finding alternative libraries

Necessary steps

  • Rewrite updater to use the Installer
  • Migrating buildscript to Java 9
  • Upgrading libraries / finding alternatives
  • Necessary refactorings

Fix usage of comma and dot in numbers

Some people might be confused, because i am following the german format when displaying numbers.

4.000.000,54

what most people are probably use to is this:

4,000,000.54

I might consider changing the format depending on the chosen language.

Chatlog suggestions

  • A text background colorpicker (also being able to manually introduce your favorite background's RGB code). This can make the embedded colors work better.
  • A checkbox if we want to display the colors as color embedding or just as plain text. (it simply works as color embedding right now)

Also, maybe adding a border to the log text ? So we would be able to have the chatlog looking more as SA-MP's chat. SA-MP's border is black by default. It looks horrible on light theme with color embedding:
image
but looks almost perfect with the dark theme:
image

Add compression to RMI

I have noticed, that sending about 1100 SampServer Objects (Java objects) from Server to Client, can, in case that you have got a slow internet connection, take multiplee seconds to complete. Since that is the case, i might consider compressing all SampServer Objects on the server side before sending them to the client. The zipping will happen only once at server startup. Instead of sending Seralized SampServer Objects over RMI i will instead send a byte array containing a list of servers.

Might come in handy:

Structure Localization Keys

The problem is that the keys are currently not.named after any scheme, it's just some random snake case name. I also tried to avoid documentation, which i am not sure is always the best option.

0

Description of the Problem

PLEASE FILL IN - What have you done to cause the severe?

Error message

0

Full stacktrace

java.lang.ArrayIndexOutOfBoundsException: 0
	at com.msc.serverbrowser.util.ServerUtility.fetchFromAPI(ServerUtility:102)
	at com.msc.serverbrowser.util.ServerUtility.fetchServersFromSouthclaws(ServerUtility:80)
	at com.msc.serverbrowser.gui.controllers.implementations.ServerListController$fillTableWithOnlineServerList$1.run(ServerListController:187)
	Thread.run(Thread:748)

Additional information

Operating system: Linux, 4.20.5-arch1-1-ARCH, amd64
Java: OpenJDK 64-Bit Server VM (1.8.0_202-b26) by Oracle Corporation

Server password is passed incorrectly

Couldn't connect to a password protected server, samp constantly gave me an invalid password message.

the buildLaunchingArguments has a typo which passes the wrong arg for the server password:

		if (!password.isEmpty()) {
			arguments.add("z");
			arguments.add(password);
		}

should be arguments.add("-z");

as far as I know?

Padlock on side suggestion

Like in default launcher:

  • Green icon for servers without password.
  • Red icon for servers with password.

image

SA-MP Settings have been taken over originally, which is bad

The SA-MP settings are somewhat problematic, since some of them are disable settings like "Disable headmove" and some are enable settings like "directmode". for one "true" means will enable the feature and for the other "true" means will disable the feature. For a user, that can be very confusing.

Logo design contribution

Hallo @Bios-Marcel
Great to know your projects and interesting to make a logo for this projects as i am a graphics designer.If you have any requirements then let me know.Its free for any open source projects.
Thank you

Ensure validity of language files ( completion / escaping))

In order to assure that everything is correct, the project is in need of tests which assure that every file is complete, at least in comparison to the English file, which is the default.

In addition to completeness i could test or even correct the escaping of special characters.

english is not on point

when you select a server which has a password it opens a box saying "ur server" instead of "your server"

Improvements of the Chatlog feature

Current state

At its current state, the feature only allows to display the chatlog file inside of a TextArea.

Possible Additions

  • Colored Text (Since colorcodes are logged aswell)
  • Show/Hide Date/Time
  • Filter for player(s)

Making this into a true cross-platform app

SA-MP is a windows only thing, but GTA SA is mostlikely playable via Wine on Unix systems. So it'd be interesting if it'd be possible to actually build a bridge between wine and this software, so a Unix user could make use of this software. Maybe even MacOS would be possible? No clue, but i can't test that anyways.

Using Multithreading when loading Favourites

Right now, loading the favourites takes quite a while, since every server in the list will be queried to be able to display the latest data. Instead i could lazy load the list or load the list with known data (have to change the data structure that is saved on adding a favourite) and then update it.

# Error after updating the application

After updating, the first start leads to an error, it works fine after starting it again.

**Edit:

This happens due to the fact that i am retrieving the path of the. Jar file itself in order to use it for restarting the application, but since it wasn't started via .Jar, but via .Exe this doesn't quite work out. **

Key Binder suggestion

Something like this:
screenshot_12
And the possibilities to store and load our binds from file.

App can't find GTA installation

I am using the latest released version 8.5.2
The app can't find the game installation path so i wrote it manually. Seems that it's not enough.
I'm doing something wrong?

Also, it's normal to let the app install only on the AppData\Local folder? Can you add a custom installation destination?

https://imgur.com/a/Gn9Im

For input string: ""

Description of the Problem

I selected some servers in the server history while the table had column sorting enabled.

Error message

For input string: ""

Full stacktrace

	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:592)
	at java.lang.Integer.parseInt(Integer.java:615)
	at com.msc.serverbrowser.gui.controllers.implementations.ServerListController.lambda$setPlayerComparator$12(ServerListController.java:287)
	at com.sun.javafx.scene.control.TableColumnComparatorBase$TableColumnComparator.doCompare(TableColumnComparatorBase.java:122)
	at com.sun.javafx.scene.control.TableColumnComparatorBase.compare(TableColumnComparatorBase.java:63)
	at javafx.collections.transformation.SortedList$ElementComparator.compare(SortedList.java:294)
	at javafx.collections.transformation.SortedList$ElementComparator.compare(SortedList.java:283)
	at com.sun.javafx.collections.SortHelper.mergeSort(SortHelper.java:260)
	at com.sun.javafx.collections.SortHelper.mergeSort(SortHelper.java:271)
	at com.sun.javafx.collections.SortHelper.sort(SortHelper.java:96)
	at javafx.collections.transformation.SortedList.doSortWithPermutationChange(SortedList.java:185)
	at javafx.collections.transformation.SortedList.access$100(SortedList.java:54)
	at javafx.collections.transformation.SortedList$1.invalidated(SortedList.java:132)
	at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:111)
	at javafx.beans.property.ObjectPropertyBase.access$000(ObjectPropertyBase.java:51)
	at javafx.beans.property.ObjectPropertyBase$Listener.invalidated(ObjectPropertyBase.java:233)
	at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137)
	at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
	at javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:74)
	at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
	at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
	at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
	at javafx.scene.control.TableView.setComparator(TableView.java:1177)
	at javafx.scene.control.TableView.sort(TableView.java:1508)
	at javafx.scene.control.TableView.doSort(TableView.java:1608)
	at javafx.scene.control.TableView.lambda$new$37(TableView.java:538)
	at com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:329)
	at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)
	at javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)
	at javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482)
	at javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541)
	at javafx.collections.ObservableListBase.endChange(ObservableListBase.java:205)
	at javafx.collections.ModifiableObservableListBase.add(ModifiableObservableListBase.java:155)
	at java.util.AbstractList.add(AbstractList.java:108)
	at com.sun.javafx.scene.control.skin.TableColumnHeader.sortColumn(TableColumnHeader.java:751)
	at com.sun.javafx.scene.control.skin.TableColumnHeader.lambda$static$55(TableColumnHeader.java:243)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
	at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
	at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
	at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
	at com.sun.glass.ui.View.notifyMouse(View.java:937)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
	at java.lang.Thread.run(Thread.java:748)

Additional information

Operating system: Windows 10, 10.0, amd64
Java: Java HotSpot(TM) 64-Bit Server VM (1.8.0_162-b12) by Oracle Corporation

For input string: ""

Description of the Problem

I dunno, I just switched from "all" to "favourites".

Error message

For input string: ""

Full stacktrace

java.lang.NumberFormatException: For input string: ""
	NumberFormatException.forInputString(NumberFormatException:65)
	Integer.parseInt(Integer:592)
	Integer.parseInt(Integer:615)
	at com.msc.serverbrowser.gui.controllers.implementations.ServerListController$setPlayerComparator$1.compare(ServerListController:226)
	at com.msc.serverbrowser.gui.controllers.implementations.ServerListController$setPlayerComparator$1.compare(ServerListController:48)
	TableColumnComparatorBase$TableColumnComparator.doCompare(TableColumnComparatorBase:123)
	TableColumnComparatorBase.compare(TableColumnComparatorBase:63)
	SortedList$ElementComparator.compare(SortedList:294)
	SortedList$ElementComparator.compare(SortedList:283)
	Arrays.binarySearch0(Arrays:2545)
	Arrays.binarySearch(Arrays:2530)
	SortedList.findPosition(SortedList:326)
	SortedList.insertToMapping(SortedList:331)
	SortedList.addRemove(SortedList:401)
	SortedList.sourceChanged(SortedList:108)
	TransformationList.lambda$getListener$0(TransformationList:106)
	WeakListChangeListener.onChanged(WeakListChangeListener:88)
	ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper:164)
	ListListenerHelper.fireValueChangedEvent(ListListenerHelper:73)
	ObservableListBase.fireChange(ObservableListBase:233)
	ListChangeBuilder.commit(ListChangeBuilder:482)
	ListChangeBuilder.endChange(ListChangeBuilder:541)
	ObservableListBase.endChange(ObservableListBase:205)
	FilteredList.sourceChanged(FilteredList:147)
	TransformationList.lambda$getListener$0(TransformationList:106)
	WeakListChangeListener.onChanged(WeakListChangeListener:88)
	ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper:164)
	ListListenerHelper.fireValueChangedEvent(ListListenerHelper:73)
	ObservableListBase.fireChange(ObservableListBase:233)
	ListChangeBuilder.commit(ListChangeBuilder:482)
	ListChangeBuilder.endChange(ListChangeBuilder:541)
	ObservableListBase.endChange(ObservableListBase:205)
	ModifiableObservableListBase.add(ModifiableObservableListBase:155)
	AbstractList.add(AbstractList:108)
	at com.msc.serverbrowser.gui.components.SampServerTable.add(SampServerTable:323)
	at com.msc.serverbrowser.gui.components.SampServerTable.addAll(SampServerTable:332)
	at com.msc.serverbrowser.gui.controllers.implementations.ServerListController.toggleMode(ServerListController:176)
	at com.msc.serverbrowser.gui.controllers.implementations.ServerListController.toggleHistoryMode(ServerListController:149)
	at com.msc.serverbrowser.gui.controllers.implementations.ServerListController.access$toggleHistoryMode(ServerListController:48)
	at com.msc.serverbrowser.gui.controllers.implementations.ServerListController$initialize$$inlined$with$lambda$6.handle(ServerListController:124)
	at com.msc.serverbrowser.gui.controllers.implementations.ServerListController$initialize$$inlined$with$lambda$6.handle(ServerListController:48)
	CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler:86)
	EventHandlerManager.dispatchBubblingEvent(EventHandlerManager:238)
	EventHandlerManager.dispatchBubblingEvent(EventHandlerManager:191)
	CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher:59)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:58)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:56)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:56)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:56)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:56)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	EventUtil.fireEventImpl(EventUtil:74)
	EventUtil.fireEvent(EventUtil:49)
	Event.fireEvent(Event:198)
	Node.fireEvent(Node:8413)
	ToggleButton.fire(ToggleButton:256)
	RadioButton.fire(RadioButton:113)
	ButtonBehavior.mouseReleased(ButtonBehavior:182)
	BehaviorSkinBase$1.handle(BehaviorSkinBase:96)
	BehaviorSkinBase$1.handle(BehaviorSkinBase:89)
	CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler:218)
	CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler:80)
	EventHandlerManager.dispatchBubblingEvent(EventHandlerManager:238)
	EventHandlerManager.dispatchBubblingEvent(EventHandlerManager:191)
	CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher:59)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:58)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:56)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:56)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:56)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	BasicEventDispatcher.dispatchEvent(BasicEventDispatcher:56)
	EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl:114)
	EventUtil.fireEventImpl(EventUtil:74)
	EventUtil.fireEvent(EventUtil:54)
	Event.fireEvent(Event:198)
	Scene$MouseHandler.process(Scene:3757)
	Scene$MouseHandler.access$1500(Scene:3485)
	Scene.impl_processMouseEvent(Scene:1762)
	Scene$ScenePeerListener.mouseEvent(Scene:2494)
	GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler:394)
	GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler:295)
	AccessController.doPrivileged(Native Method)
	GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler:432)
	QuantumToolkit.runWithoutRenderLock(QuantumToolkit:389)
	GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler:431)
	View.handleMouseEvent(View:555)
	View.notifyMouse(View:937)
	GtkApplication._runLoop(Native Method)
	GtkApplication.lambda$null$5(GtkApplication:139)
	Thread.run(Thread:748)

Additional information

Operating system: Linux, 4.17.11-84.current, amd64
Java: OpenJDK 64-Bit Server VM (1.8.0_172-solus-b00) by Oracle Corporation

Critical Bug in Java 9 that causes a crash when opening the screenshot view

This bug seems to be related to setting -fx-background-image via CSS. As soon as opening the Files/Screenshot view, the app hangs.

CSS Warnng:

Sep 26, 2017 6:47:08 AM com.sun.javafx.css.StyleManager getCachedImage
WARNING: Error loading image: file://home/marcel/GTA%20San%20Andreas%20User%20Files/SAMP/screens/Screenshot%20from%202017-08-09%2008-44-41.png

Will investigate this further and maybe file an issue in the Java 9 bugtracker.

Delete Server Using - DELETING BUTTON

So at this moment, when i want to remove server from favourites, i have to select server then click mouse right button and then click remove server from favourites. This will be really good if we can do this with only select server and delete button.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.