Skip to content

JavaBWAPI/JBWAPI

Repository files navigation

Build StatusTotal alertsLanguage grade: Java

JBWAPI

Pure Java bwapi 4.4.0 client implementation backed by N00byEdge's JavaBWAPIBackend idea and automated by Bytekeeper.

Also contains a modified version of the pure Java BWEM implementation from BWAPI4J.

Goals

  • Have a similar (Java) interface to BWMirror to make porting BWMirror bots easy without all the DLL and JNI hassle and overhead.
  • Stay as updated as possible with the BWAPI releases.

Advantages

  • No dependency on external DLL's.
  • At least 5x faster compared to BWMirror for primitives as it directly reads the memory mapped client file. Even faster for BWAPI objects as it also avoids type marshalling
  • Supports both 32 and 64 bit Java (e.g. deeplearning4j requires 64 bit Java which bwmirror doesn't support).
  • BWEM instead of BWTA as map analyser.
  • Supports Linux "natively" using openbw, made possible by by ByteKeeper
  • Async support for realtime tournament constraints, made possible by dgant

Warnings

  • A fake BWTA is provided for easier porting from BWMirror, but it translates BWTA calls to their respective BWEM calls, so specific Regions/Chokepoints etc. may differ.

Usage

Maven

Add JitPack as a repository:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

Add JBWAPI to your dependencies in <dependencies></dependencies>:

<dependency>
    <groupId>com.github.JavaBWAPI</groupId>
    <artifactId>JBWAPI</artifactId>
    <version>2.1.0</version>
</dependency>

Gradle

Add JitPack as a repository:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Add JBWAPI as a dependency:

dependencies {
    implementation 'com.github.JavaBWAPI:JBWAPI:2.1.0'
}

Jar

Alternatively add the latest .jar from the releases page to your project.

Compilation

mvnw.cmd package

or if you already have maven installed

mvn package

Example

A simple Hello World bot is as easy as

import bwapi.*;

class HelloBot extends DefaultBWListener {
	private BWClient bwClient;

	@Override
	public void onFrame() {
		Game game = bwClient.getGame();
		game.drawTextScreen(100, 100, "Hello World!");
	}

	public static void main(String[] args) {
		HelloBot bot = new HelloBot();
		bot.bwClient = new BWClient(bot);
		bot.bwClient.startGame();
	}
}

Documentation

The API documentation can be found here.

You can also ask any further questions on the SSCAIT Discord

Tutorial

If you are a just starting out with bot development, it might be helpful to follow the tutorial!

Bots

Some bots using JBWAPI (feel free to open a pullrequest to add yours!)

Linux

If you use Linux you can choose to develop normally and run the jar and starcraft using wine or try to use openbw by following the following instructions