GithubHelp home page GithubHelp logo

minetest / serverlist Goto Github PK

View Code? Open in Web Editor NEW
52.0 52.0 28.0 145 KB

The global Minetest server list server

License: GNU Lesser General Public License v2.1

Python 66.46% HTML 2.06% JavaScript 14.83% CSS 4.92% EJS 11.73%

serverlist's Introduction

Minetest

Build Status Translation status License

Minetest is a free open-source voxel game engine with easy modding and game creation.

Copyright (C) 2010-2022 Perttu Ahola [email protected] and contributors (see source file comments and the version control log)

Table of Contents

  1. Further Documentation
  2. Default Controls
  3. Paths
  4. Configuration File
  5. Command-line Options
  6. Compiling
  7. Docker
  8. Version Scheme

Further documentation

Default controls

All controls are re-bindable using settings. Some can be changed in the key config dialog in the settings tab.

Button Action
Move mouse Look around
W, A, S, D Move
Space Jump/move up
Shift Sneak/move down
Q Drop itemstack
Shift + Q Drop single item
Left mouse button Dig/punch/use
Right mouse button Place/use
Shift + right mouse button Build (without using)
I Inventory menu
Mouse wheel Select item
0-9 Select item
Z Zoom (needs zoom privilege)
T Chat
/ Command
Esc Pause menu/abort/exit (pauses only singleplayer game)
+ Increase view range
- Decrease view range
K Enable/disable fly mode (needs fly privilege)
J Enable/disable fast mode (needs fast privilege)
H Enable/disable noclip mode (needs noclip privilege)
E Aux1 (Move fast in fast mode. Games may add special features)
C Cycle through camera modes
V Cycle through minimap modes
Shift + V Change minimap orientation
F1 Hide/show HUD
F2 Hide/show chat
F3 Disable/enable fog
F4 Disable/enable camera update (Mapblocks are not updated anymore when disabled, disabled in release builds)
F5 Cycle through debug information screens
F6 Cycle through profiler info screens
F10 Show/hide console
F12 Take screenshot

Paths

Locations:

  • bin - Compiled binaries
  • share - Distributed read-only data
  • user - User-created modifiable data

Where each location is on each platform:

  • Windows .zip / RUN_IN_PLACE source:
    • bin = bin
    • share = .
    • user = .
  • Windows installed:
    • bin = C:\Program Files\Minetest\bin (Depends on the install location)
    • share = C:\Program Files\Minetest (Depends on the install location)
    • user = %APPDATA%\Minetest or %MINETEST_USER_PATH%
  • Linux installed:
    • bin = /usr/bin
    • share = /usr/share/minetest
    • user = ~/.minetest or $MINETEST_USER_PATH
  • macOS:
    • bin = Contents/MacOS
    • share = Contents/Resources
    • user = Contents/User or ~/Library/Application Support/minetest or $MINETEST_USER_PATH

Worlds can be found as separate folders in: user/worlds/

Configuration file

  • Default location: user/minetest.conf
  • This file is created by closing Minetest for the first time.
  • A specific file can be specified on the command line: --config <path-to-file>
  • A run-in-place build will look for the configuration file in location_of_exe/../minetest.conf and also location_of_exe/../../minetest.conf

Command-line options

  • Use --help

Compiling

Docker

Version scheme

We use major.minor.patch since 5.0.0-dev. Prior to that we used 0.major.minor.

  • Major is incremented when the release contains breaking changes, all other numbers are set to 0.
  • Minor is incremented when the release contains new non-breaking features, patch is set to 0.
  • Patch is incremented when the release only contains bugfixes and very minor/trivial features considered necessary.

Since 5.0.0-dev and 0.4.17-dev, the dev notation refers to the next release, i.e.: 5.0.0-dev is the development version leading to 5.0.0. Prior to that we used previous_version-dev.

serverlist's People

Contributors

buckaroobanzay avatar est31 avatar luk3yx avatar nerzhul avatar noob3167 avatar rollerozxa avatar sfan5 avatar shadowninja avatar sofar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

serverlist's Issues

Rewrite serverlist

Current frontend for the server list is quite bad looking and limited feature wise.

Many features could be added to the backend too.

Here is my wish list for a completely rewritten serverlist:

  • Better Looking Website
    • Use Icons for flags and ping, just like the ingame server list
    • More readable values (player count, max and average are too hard to distinguish without looking to the header multiple times)
    • Makes links in description clickable, or add more URL fields to announce (not user friendly to select + copy/paste, especially since if the content update it break the current selection)
    • One-click copy of server URL and port (until minetest/minetest#7400 become a thing)
    • Modern looking website overall (should at the very least match the Minetest website color wise, there is a ton of other space for improvements)
    • Adaptive UI for mobile phones
    • Lighthouse report is not really good (except performance wise) for accessibility, SEO and best practices
    • Give the website its own icon just like the ContentDB
    • Separate embed view from regular view
  • Features
    • Make website an installable PWA
    • Provide complete OpenAPI specification for the REST API
    • Allow the creation of notification alerts (with webworkers together with the PWA) when a specific server comme back to life or have more than x players.
    • More ways of researching in the server list (currently we can only filter by protocol version); text based, player count based, mod based, etc
    • One-click search for a server mod/game in CDB
  • More complex stuff / require Minetest change
    • Allow a server to provide an icon
    • Allow a server to provide screenshots
    • Provide a tags system to classify servers into categories
    • Add player reviews just like CDB packages (require CDB OAuth or merging serverlist and CDB)

I looked a bit into rewriting the frontend part, but sadly I am pretty bad at designing :(

possible to show separate stats on versions ?

as
Players: 530/1291 Servers: 312/365

maybe permanent or depending on the pull down menu ?

with Players in each version (0.4, 5.x and 2.0.0)

at pull-down might be then 2 smaller each values ...

  • 0.4.x and 2.0.0
  • only 5.x
    I think you have seen my counting ... that also might wake up our admins, gamer or even dev team about how we loos true mt gamer.

Stop penalizing servers for running up-to-date code

Server list is sorted (at least partially) based on uptime, which penalizes servers that restart to stay up-to-date with current mods/games, and encourages servers to continue to run stale versions in order to stay higher on the listing. Restarting a server should not push it to the bottom of the list.

Instead, it would be better to track availability, e.g. each time a poll is done, record whether the server was on the list and responded to the ping or not. Compute availability stats based on a time window, such as the past hour or day or week, and use that in place of uptime when determining ranking. Uptime can still be captured as a metric but should not be used in the sorting algorithm.

wrong server running since reboot wrong

I just saw: My server Asia Thailand

post a text on 9.2.2022 I know that list showed 21 days old since restart,

just today on 11.2.2022 I see it show 32 days ...

what ??? ... 21 plus 2 or 3 = 32 ????
I didn't go server_announce false or have a crash or reboot since at least 2 weeks

Remove or lower the Mobile User penalty for servers

The code that differs between "real" users and "guests" is obsolete now.

  1. Back in the day when clients used "Guest" as name it made sense, but now with the new app prefixes that are TOTALLY random, you determine many users as "guests" when they are actual players that simply use such an app that gives them the prefix.

The players mostly have NO CHOICE ... the app gives them the name by default and sometimes they even have to pay to enter a custom name.

I don't think it is FAIR to count those people as "guests".

  1. Because of this server list algorithm the servers JUMP many places at once cause they sometimes get more players with such prefix names and other times less of them.

This is not something the server owner can control or decide

Server owners are not happy about the fact that their server rank in the list is largely dependend on the amount of "guests".

  1. I don't think Minetest ever had "guest accounts" ... what I understand under a guest account is something that will get created when the user joins and DELETES ITSELF as soon as the user leaves again. This kind of account is nowhere to be found in Minetest. EVERY account is the SAME.

EDIT: If the majority of core devs disagrees with removing this penalty at least consider lowering the penalty for users with these prefixes.

Wrong data is returned sometimes

Sometimes (this happens randomly) this data is returned:

{
    "total_max": {
        "servers": 19,
        "clients": 39
    },
    "total": {
        "servers": 0,
        "clients": 0
    },
    "list": []
}

Notice that it is nicely formatted even though debug mode is disabled.
This is not a problem with uwsgi or nginx, this data is contained in the actual list.json.
After half a minute the data is reset to the correct data.

No uniquness by connection address

It is possible now to have several servers with same ip/domain name and port in the list.
For example, at this moment you may see two Krondor servers: one is mine, and second belongs to someone else. Both are registered with krondor.neoascetic.me as domain name.

80% gamer of max setting is nonsens - as admins don't know

# Penalize highly loaded servers to improve player distribution. # Note: This doesn't just make more than 80% of max players stop # increasing your points, it can actually reduce your points # if you have guests. cap = int(server["clients_max"] * 0.80) if server["clients"] > cap: points -= server["clients"] - cap
this is a bit miss-leading,
as MOST server admins do NOT know this ... and the server owner might check out the real maximum,
but then is getting a penalty already at 80% of his still GOOD capacity ! without lag

cut it out ... (--)

for example my server could hold tested 64 gamer, but I have to set 80 to avoid this, but 80 is too much,
so the server build in join stop then is wrong ... NO, this penalty here is wrong.

The master server will include DNS resolution time when showing "ping" time.

Hi all. http://servers.minetest.net/ includes or count some kind of DNS resolution time when showing the "ping".
The MinetestBot on IRC used to do the same and it's fixed.
Result of the !up command when checking using the domain name.

[21:02:33] <Megaf> !up foo.bar 30003
[21:02:34] <MinetestBot> foo.bar:30003 is up (656ms)

Now, when using the IP instead of the DNS. Note the huge difference.

[21:09:36] <sfan5> !up foo.bar.foo.bar 30003
[21:09:39] <MinetestBot> foo.bar.foo.bar:30003 is up (2ms)

After fixing. With domain name.

[21:28:43] <sfan5> !up foo.bar 30003
[21:28:44] <MinetestBot> foo.bar:30003 is up (2ms)

And checking again with the servers IP.

[21:35:27] <Megaf> !up foo.bar.foo.bar 30003
[21:35:28] <MinetestBot> foo.bar.foo.bar is up (2ms)

Related code: https://github.com/minetest/master-server/blob/master/server.py#L135

`flask.send_file` api change in flask > 2.0

Breaking change in flask > 2.0 (the requirements.txt specifies >= 1.1.0)

https://flask.palletsprojects.com/en/2.2.x/api/?highlight=send_from_directory#flask.send_file (in "Changelog")

Changed in version 2.0: max_age replaces the cache_timeout parameter. conditional is enabled and max_age is not set by default.

Line in question:

cache_timeout=0)

Solutions:

  • pin flask dependency to < 2.0
  • switch to max_age parameter

mapgen name went missing somehow

the first time a server announces the mapgen info is used
the second time it's gone
possibly related to ALLOW_UPDATE_WITHOUT_OLD

What was the need of guests ? penalty ?

Maybe a lot of testing kids that are joining, hurry around, not understand, ... whatever ... and left after some time ...

Where is the difference to other gamer ?

  • they stay short

IF guests had a negative effect onto the server, as of we think, automated login or automatic names

  • admins had the change to use mod no_guest to get rid of them

When I compare that I am about 12 hours continues on a server, a guest with 5 or 10 minute is a small impact onto the amount of gamer in the server, ans so also a small and short impact onto the list and ranking.

AS List sorting depends on Quality: better say stability !how long server exist - reboots
AND on gamer on (attractive !) it would make more sense beside

  • stop penalizing guests
  • focus more from guests to average gamer and lift up the maximum there ... max 4 as 1/2 is 8 gamer avg, hmm
    # 1/2 per average client, limited to 4 points += min(4, server["pop_v"] / 2)
    set the limit maybe to 8 show more exact a liked server with continuing steady amount of gamer
    witch also is a feedback in stable server, good mod composition and 16 gamer is so far now a nice point

guest gamer leave for sure some time later ... but gamer like a server stay, come back and enjoy ...
so give here more limit, beside stop that penalty for guest might be the batter way for ranking us

Add content warning system

  • Allow server announce to include content warnings
  • Allow overriding the content warnings of a server manually
  • Filter /list.json by default to not include certain content warnings by default (filtering will be done client-side)
  • Add query argument to /list.json to show certain categories, ie: ?show=all

example content flags:

  • adult_only
  • sexual
  • drugs: drugs or alcohol.
  • gambling
  • gore: blood, etc.
  • horror: shocking and scary content.
  • violence: non-cartoon violence.

Alternative

Ban problematic content in #54

Maybe disallow forks being listed on the server list?

Recently in the forums a discussion started whether to allow forks being listed in the server list or not allow forks being listed.

https://forum.minetest.net/viewtopic.php?p=349681#p349681 ff.
https://forum.minetest.net/viewtopic.php?f=3&t=22745

It should be clarified if 3rd party applications that were forked from any of the Minetest releases should be allowed on the official Minetest server list or if there should be usage guidelines or technical solutions to prevent forks being listed.

Cons:

  • Forks "steal" players from other servers because most of them are more popular than Minetest, especially on mobile
  • Forks are not Minetest, but it is the Minetest server list
  • Forks are not Minetest, but players expect Minetest and not some altered somewhat compatible other software based on Minetest
  • There could be licensing issues with the forks
  • Preconfiguring and hosting an own serverlist server is easy and forks can and should do that

Pros:

  • They centralize (most) mobile gamers on their own servers and mobile gamers are not that much liked by some Minetest server hosters.
  • Do nothing because a fork can simply announce itself as normal Minetest server anyways

Increase maximum points for player count

The limit lays at 16 points and the limit for the average players at 4 points.
The Minetest community has grown a lot so today are there much servers with more than 16 players.
I prefer to double both limits to 32 and 8 points.

What do you think?
Forum Topic

Thumbnails

In order to make the server list more visually appealing, server thumbnails might be a good addition. The implementation could fetch them from a provided URL.

Add server list rules

Should describe:

  • manipulation (ie: by fake data)
  • allowed content on servers
  • allowed content of server meta data
  • any requirements on server owners
    • moderation (I don't think we should require moderation, other than the following two points)
    • illegal content (we may be required to delist servers in some cases)
    • security (hacked servers or malicious server)
  • how to report a server

Add the possibility to report servers according to their title/description (rules needed)

Problem

See minetest/minetest#8710 (comment)
Anyone at the moment could create a server with a description such as "[name] should die", "let's burn all the [ethnicity]" etc.

Solutions

(steps)

  1. Discuss and write down a set of rules
  2. Implement a report system
  3. Have someone moderating it
  4. Profit

Alternatives

Don't, but this can become a huge problem. See the aforementioned comment

Additional context

MT could feature some sort of 18+ tag for porn and general kinks that don't hurt no one/spread hate. By no means servers with a political vision should be penalised as long as, again, that political vision is not based on hate. For instance, a server called "The Almighty NeoNazis" should be banned, whereas Anarchy servers shouldn't. MT should only cover servers titles and descriptions. If servers admins spread hate, it's not MT responsibility and it should be up to people to expose these toxic elements.

set max_user penalty back to 100, or 80

set max_user penalty back to 100, or 80

as 200 is a sure not proofed maximum that I have even not seen at the fork of Multicraft 2.0.0
Max seen or tested:

  • Multicraft 80, what mean set 100 with penalty at 81
  • Minetest 5.2.0 on my server, got 64 gamer in with all in afk zone, lag 1.0, mean set max to 80 = penalty at 65

The max of 200 is misused to offer something that IS not there !
There is and will be for some time no hardware or low mod server that can really hold 160 users, what mean no malus

It is misleading gamer about the server options,
and also an affront against the server owners that use reasonable max gamer on there servers as of their experience what server can really do.

After Server might proof more, wen can rise up ... but 200 is a LIE !

Horrible memory leaks

Process running since Apr. 18th was using 28% of RAM.

Newly started copy runs just as well but uses just 3% RAM.

Getting Apache mod_wsgi to work with `master-server`

I have an instance of master-server running in Apache on a server at 192.168.10.2. My DNS server (also at 192.168.10.2) redirect requests for servers.minetest.net to `192.168.10.2.

My Minetest servers (Also running on 192.168.10.2) are able to register themselves at startup with the master server, and I see them in the server list. After 5 minutes, I can see them trying to update their server listing entry. However, they end up dropping off the list after the 350 seconds "stale" timer expires.

I've been unable to debug this and figure out the cause, and I've followed the code through to where finishRequestAsync is called... but I can't quite follow the object oriented bits.

I'm guessing that the removal of this from the server list has something to do with the IP... But I can't tell why.

Server can't announce after address change.

After some Problems with my server, I got a new ip-address.
Now started the server normaly but it doesn't get shown on the serverlist.
I also don't get any error messages.

Server is at 185.234.72.95:30001 online but not able to announce.

Thanks for your help!

Hide double protocol servers from v4 list

# reduction to 40% for servers that support both legacy (v4) and v5 clients if server["proto_min"] <= 32 and server["proto_max"] > 36: points *= 0.4
better way: list them just/only in 0.,4 version, and then fully (no penalty)

reason:
as of my research most gamer there come from our old 0.4 itself, the not updated 0.4 versions on apps,
and there own client ...

as there own client seam NOT to separate between 0.4 and 5.x and as of listed multiproto server also in 5.0 I see a huge amount of mismatches connects on my server as soon getting place 3 or better

as of my research there are near no gamer left in 5.x they might splay there ... and they still can scroll down to the 0.4 server part ... it is much better that a few 5.x users scroll then all wrong servers 5.x are flooded with mismatched connections, that also have no fun, are blocked from joining they cant understand why!

Table alternate colours for rows (tr tags)

In style.css I would recommend having a nth-child tr configured so that we can have alternating colours per row. This would make it easier to scan the row's data further away on the right hand side.

A code example:

#server_list tr:nth-child(odd) {
	background: #grey;
}
#server_list tr:nth-child(even) {
	background: #white;
}

Locking is ineffective when using multiple workers

When running this under uwsgi with multiple processes (e.g. -p 2), you start seeing errors like this:

  File "./server.py", line 385, in save
    os.rename(list_path + "~", list_path)
FileNotFoundError: [Errno 2] No such file or directory: '/srv/serverlist/static/list.json~' -> '/srv/serverlist/static/list.json'

We do have a lock to prevent multiple threads from doing this, but not to prevent multiple workers from doing this.

Discussion: should private servers be allowed on the list?

I wanna start a discussion about this. Because I noticed that there are a lot of private servers on the list. And i personally think that maybe they should not be allowed there. I mean the list is meant for public servers right? The private ones end up filling the list with servers that people can't join. One person in particular has like 10 different private servers spamming the list. The server list in the minetest UI is labeled "Public Servers". i think that should be enforced somehow.

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.