Join our discord server: https://discord.perkelle.com

Perkelle

There is 1 player online.

Connect to the server with the IP perkelle.com

News

Free Auto-Fill Weekend
We're trialling our first free auto-fill weekend. This weekend (Friday - Sunday), all players will have unlimited TNT auto fill, whether you're a donator or regular player.
We're interested to see how this affects the player count, and may consider making this a monthly / bi-weekly event if it goes well.

Vote Rewards
Vote rewards: We're bringing back top voter rewards. The top 3 voters of each month will be rewarded with the following:
       1) 1 month phantom rank + 5000 crystals
       2) 1 month vampire rank + 2500 crystals
       3) 1 month ghost rank + 1000 crystals

You can vote at each of our 5 voting sites once per day: https://perkelle.com/vote. Votes are being counted as of today, and the first rewards will be given out on the 1st of March. Get voting!
 


13 Feb 2020, 21:59 0 | 1
Hello everyone! It's been a while since we made an announcement.

Today we're launching our new SMP gamemode. It's a vanilla server, but with a 8kx8k custom terrain to make gameplay more interesting. PvP is disabled and griefing other players is against the rules. If someone has griefed your base, please let a member of staff know with /report, so that they can find out who made the changes to your base, roll them back and ban the griefer.

Enjoy!


20 Dec 2019, 12:07 0 | 1
KraftMC and NinjaOnion built 2 new maps for us:

"Snowy Village"


"Tree"


They are live on the servers.


20 Jun 2019, 19:10 1 | 6
I find reading the Hypixel dev blog very interesting, so I thought I'd write about our internal systems for those who are interested.

First off, I'd like to apologise for the down time to the website and the server yesterday (Saturday) due to these upgrades. So, let's get started!

Let's start with a little context: for Perkelle, we have a dedicated server from SYS with a 4790K and 32GB of RAM, which is enough to run our game servers for now. In addition to this, we have a secondary VPS from OVH (although we're looking to move that to Scaleway) which we host our lightweight backend microservices on so that they have minimal downtime. These microservices include our new Zeus system, our VPN checking system and plugins.

I also have a VPS of my own with a Threadripper 1950X elsewhere that I run Perkelle Bot on and a Gitlab runner for our instance.

Zeus is a our new microservice that is responsible for storing and distributing server info. I originally started writing in Golang for maximum performance, however, I later switch to Kotlin as I wanted to experiment with Ktor, a Kotlin HTTP framework, and also I was able to do development faster as I know Kotlin a lot better than Golang. I opensourced the original version, the code can be viewed on GitHub here: https://github.com/Dot-Rar/MasterController

Next, I wrote Ares, a client for Zeus that is able to run on BungeeCord and on Spigot servers. This adds a layer of abstraction so that our other plugins are able to easily interact with Zeus. I originally started by using KHTTP as the HTTP client library, but later switched to Fuel, and finally Apache Fluent HC. You can see an example of how the internal Ares code looks for connecting to one of the endpoints here:
 
class GamemodeTotalCount(val pl: MultiPlatformPlugin) : Endpoint() {

    override val endpoint = "/gamemode/total"

    override val requestType = RequestType.GET

    fun execute(gamemode: Gamemode, callback: Callback) {
        pl.async {
            try {
                val res = request(queryParams=*arrayOf("gamemode" to gamemode.internalName))

                if(!res.pojo.success) {
                    pl.log("GamemodeTotalCount failed with error code: ${res.pojo.error_code}; Gamemode: $gamemode")
                    pl.wait(2) {
                        execute(gamemode, callback)
                    }
                    return@async
                }

                callback(res.pojo.total!!)
            } catch(ex: Exception) {
                ex.printStackTrace()
                pl.wait(2) {
                    execute(gamemode, callback)
                }
            }
        }
    }

    data class Response(val success: Boolean, val error_code: Int?, val total: Int?)
}
This then allows me to make simple method calls to retrieve data from Zeus.

So, when a Spigot server starts, the following process takes place:
- Contacts Zeus and reports the gamemode, hostname and port of the server.
- Zeus assigns the Spigot server a UUID
- The Ares plugin sends a heartbeat to Zeus every 15 seconds

Then, every 5 seconds, all BungeeCord instances:
- Retrieve a list of servers and all data from Zeus
- Remove dead servers (not sending heartbeat) from the BungeeCord server list
- Add new servers to the BungeeCord server list

And that's pretty much it. It's quite a simple process in reality, however, it opens up a lot of options for us. Having an external microservice controller means that in the future, we are able to scale a lot easier, and also handle inter-server communication without the crude use of Redis pubsub. 

Please let me know if you're interested in me writing more of these in the future, and what you'd like to see!


27 Jan 2019, 17:23 0 | 5
Today we're overhauling our map system.
We've added 2 new maps, End and Forest.

End, built by Reconfigure, FOODLES_NOODLES and iSynced_:


Forest, built by Reconfigure and iSynced_:



We've also added a map voting system:

When the game finishes, right click your map in the lobby to vote for your favourite map.

Finally, we've also fixed a bug that you're probably sad about us fixing - TNT is no longer infinite in dispensers. It has always been a bug, as donators get auto-fill on their cannons as a perk.


04 Sep 2018, 21:13 1 | 7

Social