Tabletop Games Framework (TAG) - a Java-based benchmark for developing modern board games for AI research

Overview

TAG: Tabletop Games Framework

license top-language code-size twitter

The Tabletop Games Framework (TAG) is a Java-based benchmark for developing modern board games for AI research. TAG provides a common skeleton for implementing tabletop games based on a common API for AI agents, a set of components and classes to easily add new games and an import module for defining data in JSON format. At present, this platform includes the implementation of seven different tabletop games that can also be used as an example for further developments. Additionally, TAG also incorporates logging functionality that allows the user to perform a detailed analysis of the game, in terms of action space, branching factor, hidden information, and other measures of interest for Game AI research. Pandemic Example GUI for Pandemic

Games

Currently implemented games:

  • Tic-Tac-Toe
  • Dots and Boxes
  • Love Letter (Seiji Kanai 2012)
  • Uno (Merle Robbins 1971)
  • Virus! (Cabrero and others 2015)
  • Exploding Kittens (Inman and others 2015)
  • Colt Express (Christophe Raimbault 2014)
  • Pandemic (Matt Leacock 2008)
  • Diamant (Bruno Faidutti and Alan R. Moon 2005)
  • Dominion (Donald X. Vaccarino 2008)
  • Poker Texas Hold'em
  • Blackjack

Games in progress:

  • Settlers of Catan (Klaus Teuber 1995)
  • Descent (Jesper Ejsing, John Goodenough, Frank Walls 2005)
  • Santorini (Lina Cossette, David Forest 2016)

Setting up

The project requires Java with minimum version 8. In order to run the code, you must either download the repository, or clone it. If you are looking for a particular release, you can find all listed here.

The simplest way to run the code is to create a new project in IntelliJ IDEA or a similar IDE. In IntelliJ, create a new project from existing sources, pointing to the code downloaded or cloned and selecting the Maven framework for import. This process should automatically set up the environment and add any project libraries as well.

Alternatively, open the code directly in your IDE of choice, right click the pom.xml file and setup the project with the Maven framework. Make sure src/main/java is marked as sources root. You can run the core.Game.java class to test if all is set up properly and compiling. This video includes the steps of loading the project correctly in IntelliJ.

Getting started

To get started the website provides various guides and descriptions of the framework. Another good resource is our paper "Design and Implementation of TAG: A Tabletop Games Framework".

Citing Information

To cite TAG in your work, please cite this paper:

@inproceedings{gaina2020tag,
         author= {Raluca D. Gaina and Martin Balla and Alexander Dockhorn and Raul Montoliu and Diego Perez-Liebana},
         title= {{TAG: A Tabletop Games Framework}},
         year= {2020},
         booktitle= {{Experimental AI in Games (EXAG), AIIDE 2020 Workshop}},
         abstract= {Tabletop games come in a variety of forms, including board games, card games, and dice games. In recent years, their complexity has considerably increased, with many components, rules that change dynamically through the game, diverse player roles, and a series of control parameters that influence a game's balance. As such, they also encompass novel and intricate challenges for Artificial Intelligence methods, yet research largely focuses on classical board games such as chess and Go. We introduce in this work the Tabletop Games (TAG) framework, which promotes research into general AI in modern tabletop games, facilitating the implementation of new games and AI players, while providing analytics to capture the complexities of the challenges proposed. We include preliminary results with sample AI players, showing some moderate success, with plenty of room for improvement, and discuss further developments and new research directions.},
    }

Other Materials

Visual materials

V1 – Edited programming video (see below)
V2 – Uncut programming video (see below)
V3 – PowerPoint slides: https://tinyurl.com/tag-exag-ppt
V5 – Transcript A1: https://tinyurl.com/tag-exag-tr1
V6 – Transcript A2: https://tinyurl.com/tag-exag-tr2

Audio materials

A1 – Framework presentation (see below)
A2 – Programming (see below)

Full videos available

EXAG 2020 presentation (A1 + V1): https://youtu.be/M81elk-NmKM
EXAG alternative presentation (A1 + V3): https://youtu.be/ST_2Q40pzjc
TAG introduction tutorial (A2 + V1): https://youtu.be/-U7SCGNOcsg
TAG full programming tutorial (V2): https://youtu.be/m7DAFdViywY

Contact

The main method to contribute to our repository directly with code, or to suggest new features, point out bugs or ask questions about the project is through creating new Issues on this github repository or creating new Pull Requests. Alternatively, you may contact the authors of the papers listed above.

You can also find out more about the QMUL Game AI Group.

Acknowledgements

This work was partly funded by the EPSRC CDT in Intelligent Games and Game Intelligence (IGGI) EP/L015846/1 and EPSRC research grant EP/T008962/1.

Comments
  • Open Loop, Information Set and RegretMatching MCTS (amongst others)

    Open Loop, Information Set and RegretMatching MCTS (amongst others)

    Major change here is a set of MCTS enhancements to implement various algorithmic variants from the literature. This has involved some significant 'refactoring' of SingleTreeNode in particular. The major design point is that child nodes are no longer kept in an array with a fixed order, but in a Map keyed by the AbstractAction that leads to the node.

    MCTSParams has also had a fair amount added to it:

    1. SelectionPolicy can be ROBUST or SIMPLE. ROBUST (the old default) picks the final action based on the number of visits, while SIMPLE picks the action with the highest mean value.

    2. RolloutsEnabled has been subsumed into RolloutLength. RolloutLength ==0 implies no rollouts.

    3. OpenLoop can be FALSE or TRUE. FALSE is the old default, which assumes deterministic environments and does not advance the GameState as the Tree is descended. TRUE now supports OpenLoop MCTS, in which the game state is advanced on every iteration as we extend the tree. (For this reason I have added a copyCount as well as fmCallsCount, and for the moment set the fmCallsBudget to apply to the sum of the two; the old code was advancing fmCallsCount as the tree was descended, even though the FM was never called.)

    4. OpponentTreePolicy has 3 values SelfOnly, Paranoid, Paranoid2. SelfOnly means that we ignore our opponents in the Tree, and only construct this using our actions. Paranoid2 is the original version - assuming that opponents are attempting to minimise our score. Paranoid is my version of this - I suspect, subject to feedback/review - that the Exploration bonus was misapplied in Paranoid2.

    5. I have split RolloutLength into two parts: MaxTreeDepth and RolloutLength. MaxTreeDepth limits the depth of the tree (you'd never have guessed!), while RolloutLength now applies purely to the rollout outside the tree. This does mean that currently you cannot restrain the sum of the two to a specific value - but it does mean that Monte Carlo Search is now supported with MaxTreeDepth=1, RolloutLength = High.

    6. Redeterminise can be TRUE or FALSE. (FALSE is the old functionality). TRUE is a very simple form of Information Set MCTS that redeterminised the root game state used for each iteration. We should expect this to be significantly better on stochastic games.

    7. TreePolicy can be any of UCB, AlphaGo, EXP3, RegretMatching. UCB is the standard logic, AlphaGo replaces the form of the UCB exploration term with that used by AlphaGo (instead of sqrt(logN / n) it uses sqrt(N) / (1 + n)). EXP3 and Regret Matching implement the bandit algorithms of the same names instead of UCB. These have an exploration term, which is configured using exploreEpsilon as a new parameter (this is not used outside of these variants).

    opened by hopshackle 5
  • Heuristics

    Heuristics

    Added back the heuristics for OSLA, MCTS and RHEA. To use a heuristic simply just pass it in the agent's constructor: players.add(new OSLAPlayer(new PandemicHeuristics()); In the rollouts there are checks if the agent has a heuristic assigned or not. If there is one it uses that for evaluating the game state if not it uses the game's getScore function.

    opened by martinballa 3
  • Query about configurations of Pandemic competion

    Query about configurations of Pandemic competion

    We intend to participate in the COG2022 competition: Pandemic. We want to know whether the configuration of this competition has been determined. For example, how many players are there in one game and whether their roles are fixed or random assigned. Also, is there a evaluation program to give score to the entry? We think this is important as it will help the training of AIs if we can know the true scores.

    opened by youpengzhao 2
  • Java 11 needed

    Java 11 needed

    Hi, the project has a dependency in SolutionEvaluator that needs Java 11 at least. Trying to build it with Java 8 got me this error:

    java: cannot access evodef.SolutionEvaluator bad class file: .../.m2/repository/com/github/hopshackle/NTBEA/0.2/NTBEA-0.2.jar!/evodef/SolutionEvaluator.class class file has wrong version 55.0, should be 52.0 Please remove or make sure it appears in the correct subdirectory of the classpath.

    Please update that info on the setting up section.

    Otherwise really great framework. Congrats!

    opened by erfont 2
  • Extend NTBEA to include IHeuristic as part of MCTSParams

    Extend NTBEA to include IHeuristic as part of MCTSParams

    Currently a heuristic state evaluation function can be provided as par of the MCTSPlayer constructor.

    It may be useful to incorporate this into MCTSParams so that the heuristic used can be optimised via NTBEA?

    enhancement 
    opened by hopshackle 2
  • [WIP] Event Actions

    [WIP] Event Actions

    Implementation of Event actions, but:

    TODO:

    • [x] force action for Resilient Population (PandemicForwardModel.java)
    • [ ] GameState.java Forecast in partial observability should leave first N cards visible to player
    • [x] actions spawned from Event cards should be free
    • [x] should be able to play Event cards any time
    opened by rdgain 2
  • Master tournament output

    Master tournament output

    I've added another line for each player to the round robin tournament output. This indicates the win rate of each agent in the games it played. Previous shown percentage referred to the number of victories as a percentage of games played in the tournament (independently if the agent played in it or not).

    I'm calculating the number of games played per agent in a tournament as:

     int gameCounter = (gamesPerMatchUp * matchUpsRun);
     int gamesPerPlayer = gameCounter * playersPerGame.get(g) / agents.size();
    

    but it'd be good a double-check on this.

    opened by GAIGResearch 1
  • Bump junit from 4.12 to 4.13.1

    Bump junit from 4.12 to 4.13.1

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps junit from 4.12 to 4.13.1.

    Release notes

    Sourced from junit's releases.

    JUnit 4.13.1

    Please refer to the release notes for details.

    JUnit 4.13

    Please refer to the release notes for details.

    JUnit 4.13 RC 2

    Please refer to the release notes for details.

    JUnit 4.13 RC 1

    Please refer to the release notes for details.

    JUnit 4.13 Beta 3

    Please refer to the release notes for details.

    JUnit 4.13 Beta 2

    Please refer to the release notes for details.

    JUnit 4.13 Beta 1

    Please refer to the release notes for details.

    Commits
    • 1b683f4 [maven-release-plugin] prepare release r4.13.1
    • ce6ce3a Draft 4.13.1 release notes
    • c29dd82 Change version to 4.13.1-SNAPSHOT
    • 1d17486 Add a link to assertThrows in exception testing
    • 543905d Use separate line for annotation in Javadoc
    • 510e906 Add sub headlines to class Javadoc
    • 610155b Merge pull request from GHSA-269g-pwp5-87pp
    • b6cfd1e Explicitly wrap float parameter for consistency (#1671)
    • a5d205c Fix GitHub link in FAQ (#1672)
    • 3a5c6b4 Deprecated since jdk9 replacing constructor instance of Double and Float (#1660)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • New game: Stratego

    New game: Stratego

    Adds the game Stratego to the framework (implemented by Jonny Betts). Some adjustments made (game runs), but it needs further testing on functionality (and potentially some more simplifications are possible).

    opened by rdgain 1
  • Expert iteration and various MCTS additions

    Expert iteration and various MCTS additions

    1. Added ParameterFactory to support Game Parameter initisalisation from json files
    • a game parameter file can now be passed to GameReportII
    1. Added MultiNTBEA in ParameterSearch
    • GameMultiPlayerEvaluator.java; plus see updated --help documentation in ParameterSearch.java, which now defaults to use MulitNTBEA unless an opponent is specified (MultiNTBEA optimises all agents in a game in parallel, potentially avoiding issues with optimising to a trivial, random player)
    1. First version of Dice Monastery (v1.8 of rules)

    2. Added some standard 'action-based' heuristics: These rely on having a fixed hash code for each Action as a key to look up a simple Advantage (numerical value of 'good' that action is). Think of it as a MAST-style heuristic.

    • ActionAdvantageHeuristic - this is initialised from a file of hashCode -> double values (so, fixed)
    • LearnedAdvantage - this can be used to learn from one game to the next when using MCTS, learning from the Advantages calculated from the MCTS Tree after each decision is made. This can then be used in Rollout, to decide Node Expansion Order, or as an Opponent Model in later games.
    1. Various MCTS variants and parameters added:
    • Added 'ExpertIteration' facility to record state information and the associated statistics for each node in the tree - to be used for learning useful stats and policies (currently only used for the ActionAdvantageHeuristic mentioned above...but much space for expansion)
    • Added MAST options to MCTS (as in Bjornnson & Finnson 2008). These Action-specific values are keyed by the Action hash code, and can be learned either from the Tree actions, Rollout actions, or both.
    • Added AdvantageFunction support that enables a class to be specified to split the order of node expansion
    • Added the ability to specify classes for both Opponent Models and Rollout Policies. These must be classes with either a non-arg constructore, and/or a single Stinrg constructor
    • Added Progressive Widening to MCTS parameters - which then uses the specified Advantage Function
    1. RoundRobinTournament updated to have the same ability as GameReportII to add in Listeners to report on game progress and statistics
    opened by hopshackle 1
  • [WIP] New game: Terraforming Mars

    [WIP] New game: Terraforming Mars

    This is still work in progress! The game is far along now to request playtesting to hunt for bugs (as it contains a lot of actions and variations of action types and parameters)! Happy to receive reports of any issues, but specifically looking for issues with:

    • Crashes when trying to do a specific action
    • Being allowed to do an action when you shouldn't be
    • Not being allowed to do an action when you should be
    • Visual bugs (something not correctly drawn / out of bounds etc.)
    • Possible visual improvements (anything that could be better drawn / better interactions possible to make the game more intuitive / easier to play / more accessible)

    Any reports along these lines with as much detail as possible to allow reproduction or intuition of the problem would be highly appreciated!

    A summary of what's been done follows. Boardgamegeek page for rules etc: https://boardgamegeek.com/boardgame/167791/terraforming-mars

    Implemented:

    • [x] Base game board, corporations and project cards + corporate era corporations and project cards - using resources from https://ssimeonoff.github.io/ an amazing website for TM!
    • [x] Most actions on cards implemented as variations and parameterized options of several action classes
    • [x] (hopefully) intuitive GUI for human play
    • [x] Winning conditions (though not yet displayed in GUI)
    • [x] Solo play (set just 1 player): - start with 14 TR + 0 production (Corporate Era) - game ends after generation 14 (regardless of global parameters) - player wins if Mars is terraformed by the end of the game - setup: X cities + 1 adjacent greenery each are placed randomly on the map on legal positions by neutral player (gives X money production if Tharsis Republic corporation is chosen) - cards: if a card reduces other player's resources/production, they can always be played as if a 2nd player with infinite resources exists (therefore these can still be played for the benefits, and can ignore the negative effects). - not fully play-tested
    • [x] Corporate Era 0 starting production
    • [ ] Some actions are not yet implemented:
      • [x] Selling projects for 1MC/project
      • [ ] TITANIUM may be used as if... :
      • [ ] STEEL MAY BE USED as if.. :
      • [ ] temporary discounts or effects (next card / this generation only)
      • [ ] but (do something else) if you have ...
    • [ ] If the game goes on long enough to use up all the project cards, the deck does not yet reshuffle with the discards.
    • [ ] Final Greenery placement

    Known issues:

    • [x] Bugs in state copies, random player recommended for human testing
    • [x] A strange city bug where one player can place infinite cities for free (unkown cause) [Edit: caused by Tharsis Republic corporation, first actions and active actions were not flagged properly as done - now fixed, state saved on the card instead of actions]
    • [x] Sometimes resources to pay are not calculated correctly when multiple options are available; reason for this yet unknown, as it only happens in some cases, and this will cause the game to crash as the player will end up in a situation where they can't pay for the action with remaining resources. Similar issue: sometimes paying for a card does not actually play the card, but you lose the resources.
    • [x] Actions that would cause specific card choices (e.g. add resource to another card) are technically implemented, but don't work.
    • [x] Actions to look at top cards and buy/take them not working
    • [x] Action fail: place X>1 tiles (only places the first)
    • [x] Effects for money back and discounts on cards sometime not working (corporations ok)
    • [x] Bonuses from global parameters don't apply anymore
    • [x] Winner and final scoring not diplayed in GUI
    • [ ] Actions menu flickering

    image

    image

    image

    help wanted 
    opened by rdgain 1
  • Logistic regression

    Logistic regression

    This includes functionality to automatically learn heuristics from game trajectories using:

    • Simple Ordinary Least Squares Regression (OLS)
    • Support Vector Machines (SVM)
    • Logistic Regression

    The entry point to use this is evaluation.ProgressiveLearner.

    • This starts with a specified starting heuristic (the default being NULL, which gives random play)
    • This runs N games, and then learns a state evaluation heuristic from the trajectories of those games.
    • On the next iteration an agent is added in to the growing set that uses the new heuristic.
    • This stops after X iterations, and a round robin tournament is run between all the agents to estimate fitness

    See documentation in the ProgressiveLearner class for further details.

    This requires a State feature space to be defined (one of the inputs to ProgressiveLearner) that implements IStateFeatureVector. See examples in Dots and Boxes, Love Letter and Dominion.

    The regression target can be any of WIN, ORDINAL, SCORE. (ORD_SCALE is also possible, which allows logistic regression to be used on the ORDINAL by converting it to a 0..1 range); otherwise Logistic Regression can only be used on a WIN target.

    The new players.learners package contains the three OLS/SVM/Logistic learners that can be plugged in,

    opened by hopshackle 0
  • Report bugs in Pandemic

    Report bugs in Pandemic

    Well, we intend to participate in COG 2022 competition of Pandemic so we execute the code. However, we discover some bugs and report them here.

    1. The diseases can not be cured in one action. To be specific, if we use the antidote or the skill of medic to cure the disease of one colour in a city, only one disease can be removed. However, according to the rules, all these diseases should be removed. We think it is a serious bug as it makes the role of medic useless.
    2. The exchange of cards between players is unclear. If the players try to exchange the cards, we don't know who gives the card and who receives the card.
    3. The turn order of the games may be disrupted after using the event cards, for example, one player may be given another action step while someone's turn may be skipped.
    opened by youpengzhao 12
  • Generalised parameter search

    Generalised parameter search

    • Parameter search generalised to any EvoAlg, not only NTBEA
    • Adds an enumeration for search frameworks in ParameterSearch class, and a method to construct these appropriately.
    • Skeleton for MapElites included, with some methods left open on TODOs. Can specify arbitrary number of behaviours, where each has a name, and a list of possible values (if comparable, the closest one is used for indexing; if not, equality is checked to used for indexing in the map). MapElites implements the EvoAlg interface, with some adjustments.
    • A new method added in GameEvaluator which returns not only a value, but also a map from behaviour to value. These behaviour names and value types should match to those defined in ParameterSearch (though no explicit checks for this are included yet).

    Better full integration of other optimisers could be expanded in the future (this still assumes model-based approaches and makes some other assumptions MapElites ignores, NTBEA has quite a rigid framework with some odd decisions behind it too to base this on).

    opened by rdgain 0
  • Pandemic - player turn gets stuck in endless loop

    Pandemic - player turn gets stuck in endless loop

    Player turn sometimes gets stuck in loop after infecting cities step. After infecting cities the turn goes back to perform player actions and lets one more action be executed before going to infecting cities again. The loop continues until the game is lost.

    • The nextNode/childNode of InfectCities node (somehow) gets set to null, causing the AbstractRuleBasedForwardModel to reset the current node to the root node.

    The issue appears when playing with different setups of MCTS players. Haven't tested with other types of players. I'm looking into this problem but if anyone got any suggestions I would appriciate it.

    bug 
    opened by kristian-angelin 3
  • Turn order refactor to abstract turn order

    Turn order refactor to abstract turn order

    This has been bugging me for too long and it should be fixed. Rename TurnOrder to AbstractTurnOrder (consistency with all other abstract core classes) and move into core package.

    code quality 
    opened by rdgain 0
Releases(v2.0)
  • v2.0(Jan 20, 2022)

    New since last release:

    • All games with tunable parameters
    • Game, agent and heuristic optimisation framework (using NTBEA)
    • Game statistics reporting
    • AI player round robing tournaments
    • Frontend GUI for playing all games with all players + extra run settings and parameter adjustment.
    • Timing functionality for AI agent decision making (including chess-like timer with possible increments)
    • GUI updates and bug fixes
    • Consistency updates
    • Web and documentation: tabletopgames.ai/wiki/

    Summary:

    • 14 games: Tic Tac Toe, Virus, Uno, Love Letter, Colt Express, Exploding Kittens, Pandemic, Battlelore, Blackjack, Diamant, Dominion, Dots & Boxes, Poker, Sushi Go!
    • 4 AI players: random, OSLA (greedy), MCTS (with many tunable parameters and extensions), RMHC
    • 2 human players: console & GUI
    Source code(tar.gz)
    Source code(zip)
  • v1.0(Aug 25, 2020)

    Public base framework:

    • Components, actions, rules, turn orders, visualisations, game loop, interfaces and abstract classes
    • 7 games: Tic Tac Toe, Virus, Uno, Love Letter, Colt Express, Exploding Kittens, Pandemic
    • 4 AI players: random, OSLA (greedy), MCTS, RMHC
    • 2 human players: console & GUI
    Source code(tar.gz)
    Source code(zip)
Owner
null
Win32 and DirectX mappings for java using Project Panama. Ignore the C# tag, it's just reference code used for decompilation

JWin32 A Project Panama-based mapping + wrapper generator for win32 headers. IMPORTANT As of 0.5.0, no prebuilt jars will be provided. You must genera

FalsePattern 9 Nov 27, 2022
A joint research effort for building highly optimized Reactive-Streams compliant operators.

reactive-streams-commons A joint research effort for building highly optimized Reactive-Streams compliant operators. Current implementors include RxJa

Reactor 350 Dec 23, 2022
Teaching repository for the undergraduate course in Operations Research at Technical University Munich.

Tutorial for Operations Research SS22 Konstantin Kuchenmeister Teaching repository for the undergraduate course in Operations Research at Technical Un

Konstantin Kuchenmeister 9 Aug 27, 2022
A manager tool to categorize game assets such as images and sounds/music. The tool enables you to tag these files, so that finding them by tags allows fast searches.

BtAssetManager This application allows you to easily categorize large amounts of image and sound files. You can apply tags to each individual file to

null 21 Sep 15, 2022
A supercharged gradle template for developing Minecraft plugins with multi platform support.

Minecraft Multi-Platform Template You can use this template to develop your own high quality Minecraft plugins for multiple platforms using Gradle wit

sVoxelDev 3 Nov 23, 2022
💡极致性能的企业级Java服务器框架,RPC,游戏服务器框架,web应用服务器框架。(Extreme fast enterprise Java server framework, can be RPC, game server framework, web server framework.)

?? 为性能而生的万能服务器框架 ?? Ⅰ. zfoo简介 ?? 性能炸裂,天生异步,Actor设计思想,无锁化设计,基于Spring的MVC式用法的万能RPC框架 极致序列化,原生集成的目前二进制序列化和反序列化速度最快的 zfoo protocol 作为网络通讯协议 高可拓展性,单台服务器部署,

null 1k Jan 1, 2023
A networking library for LibGDX utilizing Netty allowing easy creation of multiplayer games.

Lunar What is Lunar? Lunar is a networking library for LibGDX. With lunar you can easily create multiplayer games quickly and efficiently. Lunar provi

Vrekt 28 Nov 25, 2022
Some anti afk bot which prevents you from getting punished for going afk in games. Way of stopping the bot is slightly flawed but we'll ignore that.

AntiAFK Some anti afk bot which prevents you from getting punished for going afk in games. Gui mode coming soon... Installation Install Java 17. Downl

flasky 1 Jan 13, 2022
A tool to create flags for Paradox Interactive games.

Iron Workshop Flag Creator Instllation and Usage Instructions Instructional video here: https://youtu.be/0a8xXvN_ygk Flag Creator Purpose and Use The

null 5 Sep 11, 2022
fork of autoGG for fabric to pay respect to Techno after games.

AutoTechno Description: This mod is a tribute to the youtuber Technoblade and to their family which takes on a new spin to the usual auto gg mods by i

ZtereoHYPE 4 Jul 23, 2022
An open-source reverse-engineered dedicated server for Frostbite games

FrostbiteServer An open-source reverse-engineered dedicated server for games running on the Frostbite engine. When finished, this will be used to host

Sean Kahler 26 Jan 5, 2023
Free and 100% open source Progressive Java Runtime for modern Java™ deployments supported by a leading OpenJDK contributor

BellSoft Liberica JDK is a build of OpenJDK that is tested and verified to be compliant with the Java SE specification using OpenJDK Technology Compat

null 195 Dec 22, 2022
The goal of the project is to create a web application using Java EE and database (PostgreSQL) without connecting a modern technology stack like spring boot and hibernate

About The Project SignIn page SignUp page Profile page The goal of the project is to create a web application using Java EE and database (PostgreSQL)

Islam Khabibullin 2 Mar 23, 2022
JHusky - Modern native Git hooks made easy for java environments

JHusky Modern native Git hooks made easy for java environments JHusky improves your commits and more ?? Jwoof! Install Include it to your project as a

Pedro Caires 23 Oct 31, 2022
This repository contains examples of modern Java features that appear in various videos I'm creating for my courses at Vanderbilt.

This repository contains examples of modern Java features that appear in various videos I'm creating for my courses at Vanderbilt. It's organized into

Douglas C. Schmidt 7 Dec 1, 2022
Sui - Modern super user interface implementation on Android.

Sui Modern super user interface (SUI) implementation on Android. The name, Sui, also comes from a character. Introduction Sui provides Java APIs, Shiz

Rikka apps 1k Jan 5, 2023
Piranha - a modern cloud runtime

Piranha Project The Piranha Project delivers you with Cloud ready containers and useful add-on / integration modules. Getting Started To get started w

Piranha Cloud 161 Dec 24, 2022
MockNeat - the modern faker lib.

Mockneat is an arbitrary data-generator open-source library written in Java. It provides a simple but powerful (fluent) API that enables developers to

Andrei Ciobanu 506 Dec 26, 2022