diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml
deleted file mode 100644
index aea7251..0000000
--- a/.github/workflows/gradle.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-# This workflow uses actions that are not certified by GitHub.
-# They are provided by a third-party and are governed by
-# separate terms of service, privacy policy, and support
-# documentation.
-# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
-# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
-
-name: Java CI with Gradle
-
-on:
- push:
- branches: [ "master" ]
-
-jobs:
- build-gradle-project:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout project sources
- uses: actions/checkout@v3
- - name: Setup Gradle
- uses: gradle/gradle-build-action@v2
- - name: Make gradlew executable
- run: chmod +x ./gradlew
- - name: Run build with Gradle Wrapper
- run: ./gradlew shadowjar
- - uses: actions/upload-artifact@v4
- with:
- name: Archipelago.MultiClient.Java-SNAPSHOT
- path: build/libs
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
new file mode 100644
index 0000000..9558e40
--- /dev/null
+++ b/.github/workflows/maven.yml
@@ -0,0 +1,35 @@
+# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
+# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
+
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+
+name: Java CI with Maven
+
+on:
+ push:
+ branches: [ "main" ]
+ pull_request:
+ branches: [ "main" ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Set up JDK 17
+ uses: actions/setup-java@v3
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+ cache: maven
+ - name: Build with Maven
+ run: mvn -B package --file pom.xml
+
+ # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
+ - name: Update dependency graph
+ uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
diff --git a/.gitignore b/.gitignore
index dacb092..b425f09 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,35 @@
-# Project exclude paths
-/.gradle/
-/build/
-/build/classes/java/main/
-/.idea/
-gradle.properties
\ No newline at end of file
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 7f54ef3..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,35 +0,0 @@
-import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation
-
-plugins {
- id 'com.github.johnrengelman.shadow'
- id 'java-library'
-}
-
-archivesBaseName = "Archipelago.MultiClient.Java"
-group = 'gg.archipelago.APClient'
-version = '1.12'
-
-java.toolchain.languageVersion = JavaLanguageVersion.of(8)
-
-logger.info('Java: {} JVM: {}({}}) Arch: {}',System.getProperty('java.version'),System.getProperty('java.vm.version'),System.getProperty('java.vendor'),System.getProperty('os.arch'))
-
-repositories {
- mavenCentral()
-}
-
-
-dependencies {
- implementation 'org.java-websocket:Java-WebSocket:1.5.2'
- implementation 'com.google.code.gson:gson:2.8.9'
- implementation 'org.apache.httpcomponents.client5:httpclient5:5.2.1'
- implementation 'org.apache.httpcomponents.core5:httpcore5:5.2'
-}
-
-tasks.register('relocateShadowJar', ConfigureShadowRelocation) {
- target = tasks.shadowJar
- prefix = "archipelagoClient" // Default value is "shadow"
-}
-tasks.shadowJar.dependsOn tasks.relocateShadowJar
-
-shadowJar {
-}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 7454180..0000000
Binary files a/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 69a9715..0000000
--- a/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
deleted file mode 100644
index 744e882..0000000
--- a/gradlew
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MSYS* | MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=`expr $i + 1`
- done
- case $i in
- 0) set -- ;;
- 1) set -- "$args0" ;;
- 2) set -- "$args0" "$args1" ;;
- 3) set -- "$args0" "$args1" "$args2" ;;
- 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=`save "$@"`
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
deleted file mode 100644
index 107acd3..0000000
--- a/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..1e812fb
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,133 @@
+
+
+ 4.0.0
+
+ dev.koifysh
+ archipelago-client
+ 0.1.13
+
+ Archipelago Java Library
+ Library to connect to an Archipelago Server
+ https://github.com/KonoTyran/archipelago-client
+
+
+
+ MIT License
+ https://github.com/KonoTyran/archipelago-client/blob/main/LICENSE
+ repo
+
+
+
+
+ scm:git:git://github.com/KonoTyran/archipelago-client
+ scm:git:https://github.com/KonoTyran/archipelago-client.git
+ https://github.com/KonoTyran/archipelago-client
+
+
+
+
+ Kono Tyran
+ Kono.Tyran@gmail.com
+
+
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ org.java-websocket
+ Java-WebSocket
+ 1.5.2
+
+
+ com.google.code.gson
+ gson
+ 2.8.9
+
+
+ org.apache.httpcomponents.client5
+ httpclient5
+ 5.2.1
+
+
+ org.apache.httpcomponents.core5
+ httpcore5
+ 5.2
+
+
+ org.slf4j
+ slf4j-nop
+ 1.7.30
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-release-plugin
+ 3.0.1
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.2.1
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.6.3
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
+ none
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.5
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+ org.sonatype.central
+ central-publishing-maven-plugin
+ 0.4.0
+ true
+
+ central
+ true
+
+
+
+
+
+
\ No newline at end of file
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..bd40d54
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,29 @@
+Archipelago Java Client
+=======================
+
+
+A java client Library to connect to an [Archipelago](http://github.com/ArchipelagoMW/Archipelago) Server.
+
+
+## Getting Started
+Use the following Code snippits to add this library to your project using the following.
+
+### Maven
+To use maven add this dependency to your `pom.xml`:
+```xml
+
+ dev.koifysh
+ archipelago-client
+ 0.1.13
+
+```
+
+### Gradle
+To use Gradle add the maven central repository to your repositories list:
+```gradle
+mavenCentral()
+```
+then add this to your `dependancy` section
+```gradle
+implementation 'dev.koifysh:archipelago-client:0.1.13'
+```
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index d8cc5a1..0000000
--- a/settings.gradle
+++ /dev/null
@@ -1,5 +0,0 @@
-pluginManagement {
- plugins {
- id 'com.github.johnrengelman.shadow' version '7.1.2'
- }
-}
\ No newline at end of file
diff --git a/src/main/java/gg/archipelago/client/ArchipelagoClient.java b/src/main/java/dev/koifysh/archipelago/Client.java
similarity index 53%
rename from src/main/java/gg/archipelago/client/ArchipelagoClient.java
rename to src/main/java/dev/koifysh/archipelago/Client.java
index f29184d..312fe58 100644
--- a/src/main/java/gg/archipelago/client/ArchipelagoClient.java
+++ b/src/main/java/dev/koifysh/archipelago/Client.java
@@ -1,31 +1,31 @@
-package gg.archipelago.client;
-
-import gg.archipelago.client.Print.APPrint;
-import gg.archipelago.client.helper.DeathLink;
-import gg.archipelago.client.network.client.*;
-import gg.archipelago.client.network.server.ConnectUpdatePacket;
-import gg.archipelago.client.network.server.RoomInfoPacket;
-import gg.archipelago.client.parts.DataPackage;
-import gg.archipelago.client.parts.NetworkItem;
-import gg.archipelago.client.parts.Version;
+package dev.koifysh.archipelago;
+
+import dev.koifysh.archipelago.Print.APPrint;
+import dev.koifysh.archipelago.events.RetrievedEvent;
+import dev.koifysh.archipelago.network.server.ConnectUpdatePacket;
+import dev.koifysh.archipelago.network.server.RoomInfoPacket;
+import dev.koifysh.archipelago.parts.DataPackage;
+import dev.koifysh.archipelago.parts.NetworkItem;
+import dev.koifysh.archipelago.parts.NetworkSlot;
+import dev.koifysh.archipelago.parts.Version;
+import dev.koifysh.archipelago.network.client.*;
import org.apache.hc.core5.net.URIBuilder;
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
-import java.util.logging.Level;
import java.util.logging.Logger;
-public abstract class ArchipelagoClient {
+public abstract class Client {
- private final static Logger LOGGER = Logger.getLogger(ArchipelagoClient.class.getName());
+ private final static Logger LOGGER = Logger.getLogger(Client.class.getName());
private final String dataPackageLocation = "./APData/DataPackage.ser";
private int hintPoints;
- private ArchipelagoWebSocket archipelagoWebSocket;
+ private WebSocket webSocket;
private String password;
@@ -35,23 +35,24 @@ public abstract class ArchipelagoClient {
private DataPackage dataPackage;
- public static ArchipelagoClient archipelagoClient;
+ public static Client client;
private final LocationManager locationManager;
private final ItemManager itemManager;
private final EventManager eventManager;
- public static final Version protocolVersion = new Version(0, 3, 7);
+ public static final Version protocolVersion = new Version(0, 4, 7);
private int team;
private int slot;
+ private HashMap slotInfo;
private String name = "Name not set";
private String game = "Game not set";
private String alias;
private Set tags = new HashSet<>();
private int itemsHandlingFlags = 0b000;
- public ArchipelagoClient() {
+ public Client() {
loadDataPackage();
UUID = dataPackage.getUUID();
@@ -59,42 +60,59 @@ public ArchipelagoClient() {
eventManager = new EventManager();
locationManager = new LocationManager(this);
itemManager = new ItemManager(this);
- archipelagoClient = this;
+ client = this;
}
+ /**
+ * Sets the name of the game to send to Archipelago's servers
+ * @param game the name of your game.
+ */
public void setGame(String game) {
this.game = game;
}
+ /**
+ * overwrite, and set all tags sent to the Archipelago server.
+ * this will overwrite any previous tags that have been set.
+ * @param tags a Set of tags to send.
+ */
public void setTags(Set tags) {
if (!this.tags.equals(tags)) {
this.tags = tags;
if (isConnected()) {
ConnectUpdatePacket packet = new ConnectUpdatePacket();
packet.tags = this.tags;
- archipelagoWebSocket.sendPacket(packet);
+ webSocket.sendPacket(packet);
}
}
}
+ /**
+ * add a tag to your list, keeping all previous tags intact.
+ * @param tag String tag to be added.
+ */
public void addTag(String tag) {
if (!this.tags.contains(tag)) {
tags.add(tag);
if (isConnected()) {
ConnectUpdatePacket packet = new ConnectUpdatePacket();
packet.tags = this.tags;
- archipelagoWebSocket.sendPacket(packet);
+ webSocket.sendPacket(packet);
}
}
}
+ /**
+ * removes supplied tag, if it exists.
+ * @param tag String tag to be removed.
+ */
public void removeTag(String tag) {
if (this.tags.contains(tag)) {
tags.remove(tag);
if (isConnected()) {
ConnectUpdatePacket packet = new ConnectUpdatePacket();
packet.tags = this.tags;
- archipelagoWebSocket.sendPacket(packet);
+ webSocket.sendPacket(packet);
}
}
}
@@ -138,19 +156,30 @@ void saveDataPackage() {
objectOut.close();
} catch (IOException e) {
- LOGGER.log(Level.WARNING, "unable to save DataPackage.", e);
+ LOGGER.warning("unable to save DataPackage.");
}
}
+ /**
+ * Returns true only if connected to an Archipelago server.
+ * @return true if connected, otherwise false
+ */
public boolean isConnected() {
- return archipelagoWebSocket != null && archipelagoWebSocket.isOpen();
+ return webSocket != null && webSocket.isOpen();
}
+ /**
+ * closes a connection to the Archipelago server if connected.
+ */
public void close() {
- if (archipelagoWebSocket != null)
- archipelagoWebSocket.close();
+ if (webSocket != null)
+ webSocket.close();
}
+ /**
+ * sets a password to authenticate with to join a password protected room.
+ * @param password room password
+ */
public void setPassword(String password) {
this.password = password;
}
@@ -159,6 +188,10 @@ void setHintPoints(int hintPoints) {
this.hintPoints = hintPoints;
}
+ /**
+ * sets the slot name to connect to an Archcipelago server with.
+ * @param name
+ */
public void setName(String name) {
this.name = name;
}
@@ -171,6 +204,10 @@ void setTeam(int team) {
this.team = team;
}
+ void setSlotInfo(HashMap slotInfo) {
+ this.slotInfo = slotInfo;
+ }
+
void setRoomInfo(RoomInfoPacket roomInfo) {
this.roomInfo = roomInfo;
}
@@ -179,27 +216,46 @@ void updateDataPackage(DataPackage newData) {
dataPackage.update(newData);
}
+ /**
+ *
+ * @return team ID
+ */
public int getTeam() {
return team;
}
+ /**
+ *
+ * @return Slot ID
+ */
public int getSlot() {
return slot;
}
+ /**
+ * fetches the
+ * @return Room info.
+ */
public RoomInfoPacket getRoomInfo() {
return roomInfo;
}
+ public HashMap getSlotInfo() {return slotInfo;}
+
+ /**
+ * Works exactly like {@link #connect(URI, boolean)} with allowDowngrade set to true;
+ * @param address
+ * @throws URISyntaxException on malformed address
+ */
public void connect(String address) throws URISyntaxException {
URIBuilder builder = new URIBuilder((!address.contains("//")) ? "//" + address : address);
if (builder.getPort() == -1) { //set default port if not included
builder.setPort(38281);
}
- if (archipelagoWebSocket != null && archipelagoWebSocket.isOpen()) {
+ if (webSocket != null && webSocket.isOpen()) {
LOGGER.fine("previous WebSocket is open, closing.");
- archipelagoWebSocket.close();
+ webSocket.close();
}
if (builder.getScheme() == null) {
@@ -211,43 +267,89 @@ public void connect(String address) throws URISyntaxException {
connect(builder.build());
}
+ /**
+ * Works exactly like {@link #connect(URI, boolean)} but allowDowngrade is False
+ * @param address Address to connect to
+ */
public void connect(URI address) {
connect(address, false);
}
+ /**
+ * Connects to an Archipelago server with previously provided info.
+ *
+ * supply the following info before calling this method
+ *
+ * game: {@link #setGame(String)}
+ * slot name: {@link #setName(String)}
+ *
+ * if no protocol wss://
or ws://
is given will attempt a ssl connection
+ * to the supplied address, if that fails it will then try a non-ssl connection, unless allowDowngrade
is false.
+ *
+ * Do not prefix address
with wss://
or ws://
. let the user enter a protocol to use.
+ * by default ssl will be tried first, if that fails then non-ssl will be used. unless allowDowngrade
is set to false.
+ * @param address address of the archipelago server.
+ * @param allowDowngrade if set to false will prevent auto downgrade of ssl connection.
+ */
public void connect(URI address, boolean allowDowngrade) {
LOGGER.fine("attempting WebSocket connection to " + address.toString());
- archipelagoWebSocket = new ArchipelagoWebSocket(address, this);
- locationManager.setAPWebSocket(archipelagoWebSocket);
- itemManager.setAPWebSocket(archipelagoWebSocket);
- archipelagoWebSocket.connect(allowDowngrade);
+ webSocket = new WebSocket(address, this);
+ locationManager.setAPWebSocket(webSocket);
+ itemManager.setAPWebSocket(webSocket);
+ webSocket.connect(allowDowngrade);
}
+ /**
+ * Sends a Chat message to all other connected Clients.
+ * @param message Message to send.
+ */
public void sendChat(String message) {
- if (archipelagoWebSocket == null)
+ if (webSocket == null)
return;
- if (archipelagoWebSocket.isAuthenticated()) {
- archipelagoWebSocket.sendChat(message);
+ if (webSocket.isAuthenticated()) {
+ webSocket.sendChat(message);
}
}
+ /**
+ * inform the Archipelago server that a location ID has been checked.
+ * @param locationID id of a location.
+ * @return true if packet was successfully sent. False if not connected or otherwise failed to send.
+ */
public boolean checkLocation(long locationID) {
return locationManager.checkLocation(locationID);
}
+ /**
+ * inform the Archipelago server that a collection of location ID has been checked.
+ * @param locationIDs a collection of a locations.
+ * @return true if packet was successfully sent. False if not connected or otherwise failed to send.
+ */
public boolean checkLocations(Collection locationIDs) {
return locationManager.checkLocations(locationIDs);
}
+ /**
+ * Ask the server for information about what is in locations. you will get a response in the {@link dev.koifysh.archipelago.events.LocationInfoEvent} event.
+ * @param locationIDs List of location ID's to request info on.
+ */
public void scoutLocations(ArrayList locationIDs) {
- HashMap locations = dataPackage.getLocationsForGame(game);
- locationIDs.removeIf( location -> !locations.containsKey(location));
- archipelagoWebSocket.scoutLocation(locationIDs);
+ locationIDs.removeIf( location -> !dataPackage.getGame(game).locationNameToId.containsValue(location));
+ webSocket.scoutLocation(locationIDs);
}
- public abstract void onPrint(String print);
-
- public abstract void onPrintJson(APPrint apPrint, String type, int sending, NetworkItem receiving);
+ /**
+ * Called when the server wishes to display a message to the user.
+ *
+ * Deprecated use {@link dev.koifysh.archipelago.events.PrintJSONEvent} instead
+ * @see dev.koifysh.archipelago.events.PrintJSONEvent
+ * @param apPrint list of message segments.
+ * @param type the type of the received message.
+ * @param player int id of the sending player.
+ * @param item the network item that is involved with the message.
+ */
+ @Deprecated
+ public abstract void onPrintJson(APPrint apPrint, String type, int player, NetworkItem item);
public abstract void onError(Exception ex);
@@ -275,7 +377,7 @@ public String getGame() {
public String getConnectedAddress() {
if (isConnected())
- return archipelagoWebSocket.getRemoteSocketAddress().getHostName()+":"+archipelagoWebSocket.getRemoteSocketAddress().getPort();
+ return webSocket.getRemoteSocketAddress().getHostName()+":"+ webSocket.getRemoteSocketAddress().getPort();
else
return "";
}
@@ -284,17 +386,29 @@ public String getConnectedAddress() {
* this should not need to be called externally but is left public just in case.
*/
public void reconnect() {
- archipelagoWebSocket.reconnect();
+ webSocket.reconnect();
}
+ /**
+ * Gets the UUID of this client.
+ * @return UUID of the client, this should theoretically never change.
+ */
public String getUUID() {
return UUID;
}
+ /**
+ * gets the alias of this slot.
+ * @return Alias of the slot connected to.
+ */
public String getAlias() {
return alias;
}
+ /**
+ * sets an Alias for this slot on the Archipelago server.
+ * @param alias Name to set the alias to.
+ */
void setAlias(String alias) {
this.alias = alias;
}
@@ -307,40 +421,65 @@ public ItemManager getItemManager() {
return itemManager;
}
+ /**
+ * Update the current game status.
+ * @see ClientStatus
+ *
+ * @param status a {@link ClientStatus} to send to the server.
+ */
public void setGameState(ClientStatus status) {
- if (archipelagoWebSocket == null)
+ if (webSocket == null)
return;
- if (archipelagoWebSocket.isAuthenticated())
- archipelagoWebSocket.sendPacket(new StatusUpdatePacket(status));
+ if (webSocket.isAuthenticated())
+ webSocket.sendPacket(new StatusUpdatePacket(status));
}
+ /**
+ * manually trigger a resync to the Archipelago server. this should be done automatically if the library detects a desync.
+ */
public void sync() {
- archipelagoWebSocket.sendPacket(new SyncPacket());
+ webSocket.sendPacket(new SyncPacket());
}
public void sendBounce(BouncePacket bouncePacket) {
- if (archipelagoWebSocket == null)
+ if (webSocket == null)
return;
- if (archipelagoWebSocket.isAuthenticated())
- archipelagoWebSocket.sendPacket(bouncePacket);
+ if (webSocket.isAuthenticated())
+ webSocket.sendPacket(bouncePacket);
}
+ /**
+ * disconnects from a connected Archipelago server.
+ */
public void disconnect() {
- archipelagoWebSocket.close();
+ webSocket.close();
}
+ /**
+ * @return set of tags currently in use.
+ */
public Set getTags() {
return tags;
}
+ /**
+ * fetch the itemflags that have been set, bitwise Or against {@link ItemFlags} to read.
+ * @return items handling int.
+ */
public int getItemsHandlingFlags() {
return itemsHandlingFlags;
}
+ /**
+ * fetch the itemflags that have been set, bitwise Or against {@link ItemFlags} to read.
+ */
public void setItemsHandlingFlags(int itemsHandlingFlags) {
this.itemsHandlingFlags = itemsHandlingFlags;
}
+ /**
+ * @return the event manager.
+ */
public EventManager getEventManager() {
return eventManager;
}
@@ -348,13 +487,12 @@ public EventManager getEventManager() {
/**
* Uses DataStorage to save a value on the AP server.
*
- * @param setPacket
*/
public int dataStorageSet(SetPacket setPacket) {
- if (archipelagoWebSocket == null || !archipelagoWebSocket.isAuthenticated())
+ if (webSocket == null || !webSocket.isAuthenticated())
return 0;
- archipelagoWebSocket.sendPacket(setPacket);
+ webSocket.sendPacket(setPacket);
return setPacket.getRequestID();
}
@@ -364,14 +502,14 @@ public int dataStorageSet(SetPacket setPacket) {
* @param keys List of Keys to be notified of.
*/
public void dataStorageSetNotify(Collection keys) {
- if (archipelagoWebSocket == null || !archipelagoWebSocket.isAuthenticated())
+ if (webSocket == null || !webSocket.isAuthenticated())
return;
- archipelagoWebSocket.sendPacket(new SetNotifyPacket(keys));
+ webSocket.sendPacket(new SetNotifyPacket(keys));
}
/**
* Uses DataStorage to reterieve a value from the server will get value back though a
- * {@link gg.archipelago.client.events.RetrievedEvent RetrievedEvent}.
+ * {@link RetrievedEvent RetrievedEvent}.
* see following table for list of reserved keys.
*
*
@@ -399,11 +537,12 @@ public void dataStorageSetNotify(Collection keys) {
* @param keys a list of keys to retrieve values for
*/
public int dataStorageGet(Collection keys) {
- if (archipelagoWebSocket == null || !archipelagoWebSocket.isAuthenticated())
+ if (webSocket == null || !webSocket.isAuthenticated())
return 0;
GetPacket getPacket = new GetPacket(keys);
- archipelagoWebSocket.sendPacket(getPacket);
+ webSocket.sendPacket(getPacket);
return getPacket.getRequestID();
}
+
}
diff --git a/src/main/java/gg/archipelago/client/ClientStatus.java b/src/main/java/dev/koifysh/archipelago/ClientStatus.java
similarity index 50%
rename from src/main/java/gg/archipelago/client/ClientStatus.java
rename to src/main/java/dev/koifysh/archipelago/ClientStatus.java
index fafbfb9..1dcc8d6 100644
--- a/src/main/java/gg/archipelago/client/ClientStatus.java
+++ b/src/main/java/dev/koifysh/archipelago/ClientStatus.java
@@ -1,7 +1,14 @@
-package gg.archipelago.client;
+package dev.koifysh.archipelago;
import com.google.gson.annotations.SerializedName;
+/**
+ * A Status to send to the server.
+ * {@link #CLIENT_UNKNOWN} - default, no status.
+ * {@link #CLIENT_READY} - Ready to start.
+ * {@link #CLIENT_PLAYING} - Player has started playing.
+ * {@link #CLIENT_GOAL} - Player has finished their game. This will trigger an auto-release depending on server settings.
+ */
public enum ClientStatus {
@SerializedName("0")
@@ -13,7 +20,7 @@ public enum ClientStatus {
@SerializedName("30")
CLIENT_GOAL(30);
- private int value;
+ private final int value;
ClientStatus(int value) {
this.value = value;
}
diff --git a/src/main/java/gg/archipelago/client/EventManager.java b/src/main/java/dev/koifysh/archipelago/EventManager.java
similarity index 69%
rename from src/main/java/gg/archipelago/client/EventManager.java
rename to src/main/java/dev/koifysh/archipelago/EventManager.java
index b95d098..3f6d1da 100644
--- a/src/main/java/gg/archipelago/client/EventManager.java
+++ b/src/main/java/dev/koifysh/archipelago/EventManager.java
@@ -1,17 +1,27 @@
-package gg.archipelago.client;
+package dev.koifysh.archipelago;
-import gg.archipelago.client.events.Event;
-import gg.archipelago.client.events.ArchipelagoEventListener;
+import dev.koifysh.archipelago.events.ArchipelagoEventListener;
+import dev.koifysh.archipelago.events.Event;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
+/**
+ * Manages registering and calling events
+ * @see #registerListener(Object)
+ */
public class EventManager {
private final Map registeredListeners = new HashMap<>();
+ /**
+ * Use to register for Events that come from the Archipelago server.
+ * supplied Object must have at least 1 method annotated with {@link ArchipelagoEventListener}
+ * and have 1 parameter that extends {@link Event}
+ * @param listener the object containing a listener method.
+ */
public void registerListener(Object listener) {
for (Method method : listener.getClass().getMethods()) {
if (!method.isAnnotationPresent(ArchipelagoEventListener.class))
diff --git a/src/main/java/dev/koifysh/archipelago/ItemFlags.java b/src/main/java/dev/koifysh/archipelago/ItemFlags.java
new file mode 100644
index 0000000..2c8260e
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/ItemFlags.java
@@ -0,0 +1,26 @@
+package dev.koifysh.archipelago;
+
+/**
+ * Item Flag variables to read {@link Client#getItemsHandlingFlags()} and set {@link Client#setItemsHandlingFlags(int)}
+ *
+ * Current item flags: {@link #SEND_ITEMS} {@link #SEND_OWN_ITEMS} {@link #SEND_STARTING_INVENTORY}
+ */
+public class ItemFlags {
+
+ /**
+ * Tells the server to send you items from other worlds.
+ */
+ public static final int SEND_ITEMS = 0b001;
+
+ /**
+ * Tells the server to send your own items to you (remote items game)
+ */
+ public static final int SEND_OWN_ITEMS = 0b010;
+
+ /**
+ * Tells the server to send you any items that You should start with.
+ * don't set this if you handle starting items by some kind of data file.
+ */
+ public static final int SEND_STARTING_INVENTORY = 0b100;
+
+}
diff --git a/src/main/java/gg/archipelago/client/ItemManager.java b/src/main/java/dev/koifysh/archipelago/ItemManager.java
similarity index 56%
rename from src/main/java/gg/archipelago/client/ItemManager.java
rename to src/main/java/dev/koifysh/archipelago/ItemManager.java
index aa8bbbb..2a7276e 100644
--- a/src/main/java/gg/archipelago/client/ItemManager.java
+++ b/src/main/java/dev/koifysh/archipelago/ItemManager.java
@@ -1,24 +1,24 @@
-package gg.archipelago.client;
+package dev.koifysh.archipelago;
-import gg.archipelago.client.events.ReceiveItemEvent;
-import gg.archipelago.client.network.client.SyncPacket;
-import gg.archipelago.client.parts.DataPackage;
-import gg.archipelago.client.parts.NetworkItem;
+import dev.koifysh.archipelago.events.ReceiveItemEvent;
+import dev.koifysh.archipelago.network.client.SyncPacket;
+import dev.koifysh.archipelago.parts.DataPackage;
+import dev.koifysh.archipelago.parts.NetworkItem;
import java.util.ArrayList;
public class ItemManager {
- ArchipelagoClient archipelagoClient;
- ArchipelagoWebSocket webSocket;
+ Client client;
+ WebSocket webSocket;
ArrayList receivedItems = new ArrayList<>();
int index;
- public ItemManager(ArchipelagoClient archipelagoClient) {
- this.archipelagoClient = archipelagoClient;
+ public ItemManager(Client client) {
+ this.client = client;
}
public void receiveItems(ArrayList ids, int index) {
@@ -27,14 +27,14 @@ public void receiveItems(ArrayList ids, int index) {
}
if (receivedItems.size() == index) {
receivedItems.addAll(ids);
- DataPackage dp = archipelagoClient.getDataPackage();
- int myTeam = archipelagoClient.getTeam();
+ DataPackage dp = client.getDataPackage();
+ int myTeam = client.getTeam();
for (int i = this.index; i < receivedItems.size(); i++) {
NetworkItem item = receivedItems.get(i);
- item.itemName = dp.getItem(item.itemID);
- item.locationName = dp.getLocation(item.locationID);
- item.playerName = archipelagoClient.getRoomInfo().getPlayer(myTeam,item.playerID).alias;
- archipelagoClient.getEventManager().callEvent(new ReceiveItemEvent(item, index));
+ item.itemName = dp.getItem(item.itemID, client.getGame());
+ item.locationName = dp.getLocation(item.locationID, client.getSlotInfo().get(item.playerID).game);
+ item.playerName = client.getRoomInfo().getPlayer(myTeam,item.playerID).alias;
+ client.getEventManager().callEvent(new ReceiveItemEvent(item, index));
}
this.index = receivedItems.size();
@@ -42,7 +42,7 @@ public void receiveItems(ArrayList ids, int index) {
else {
if(webSocket != null) {
webSocket.sendPacket(new SyncPacket());
- archipelagoClient.getLocationManager().resendAllCheckedLocations();
+ client.getLocationManager().resendAllCheckedLocations();
}
}
}
@@ -52,8 +52,8 @@ public void writeFromSave(ArrayList receivedItems, int index) {
this.index = index;
}
- public void setAPWebSocket(ArchipelagoWebSocket archipelagoWebSocket) {
- this.webSocket = archipelagoWebSocket;
+ public void setAPWebSocket(WebSocket webSocket) {
+ this.webSocket = webSocket;
}
public int getIndex() {
diff --git a/src/main/java/gg/archipelago/client/LocationManager.java b/src/main/java/dev/koifysh/archipelago/LocationManager.java
similarity index 81%
rename from src/main/java/gg/archipelago/client/LocationManager.java
rename to src/main/java/dev/koifysh/archipelago/LocationManager.java
index 5080005..10232c7 100644
--- a/src/main/java/gg/archipelago/client/LocationManager.java
+++ b/src/main/java/dev/koifysh/archipelago/LocationManager.java
@@ -1,20 +1,23 @@
-package gg.archipelago.client;
+package dev.koifysh.archipelago;
-import gg.archipelago.client.network.client.LocationChecks;
+import dev.koifysh.archipelago.network.client.LocationChecks;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
public class LocationManager {
- ArchipelagoClient archipelagoClient;
- ArchipelagoWebSocket webSocket;
+ Client client;
+ WebSocket webSocket;
Set checkedLocations = new HashSet<>();
Set missingLocations = new HashSet<>();
- public LocationManager(ArchipelagoClient archipelagoClient) {
- this.archipelagoClient = archipelagoClient;
+ public LocationManager(Client client) {
+ this.client = client;
}
public boolean checkLocation(long id) {
@@ -57,8 +60,8 @@ public void resendAllCheckedLocations() {
webSocket.sendPacket(packet);
}
- protected void setAPWebSocket(ArchipelagoWebSocket archipelagoWebSocket) {
- this.webSocket = archipelagoWebSocket;
+ protected void setAPWebSocket(WebSocket webSocket) {
+ this.webSocket = webSocket;
}
public Set getCheckedLocations() {
diff --git a/src/main/java/gg/archipelago/client/Print/APPrint.java b/src/main/java/dev/koifysh/archipelago/Print/APPrint.java
similarity index 50%
rename from src/main/java/gg/archipelago/client/Print/APPrint.java
rename to src/main/java/dev/koifysh/archipelago/Print/APPrint.java
index be47489..822a508 100644
--- a/src/main/java/gg/archipelago/client/Print/APPrint.java
+++ b/src/main/java/dev/koifysh/archipelago/Print/APPrint.java
@@ -1,7 +1,7 @@
-package gg.archipelago.client.Print;
+package dev.koifysh.archipelago.Print;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.parts.NetworkItem;
+import dev.koifysh.archipelago.parts.NetworkItem;
public class APPrint {
@@ -20,4 +20,19 @@ public class APPrint {
@SerializedName("found")
public boolean found;
+ @SerializedName("team")
+ public String team;
+
+ @SerializedName("slot")
+ public int slot;
+
+ @SerializedName("message")
+ public String message;
+
+ @SerializedName("tags")
+ public String[] tags;
+
+ @SerializedName("countdown")
+ public int countdown;
+
}
diff --git a/src/main/java/gg/archipelago/client/Print/APPrintColor.java b/src/main/java/dev/koifysh/archipelago/Print/APPrintColor.java
similarity index 94%
rename from src/main/java/gg/archipelago/client/Print/APPrintColor.java
rename to src/main/java/dev/koifysh/archipelago/Print/APPrintColor.java
index a17bfb6..35b0e9b 100644
--- a/src/main/java/gg/archipelago/client/Print/APPrintColor.java
+++ b/src/main/java/dev/koifysh/archipelago/Print/APPrintColor.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.Print;
+package dev.koifysh.archipelago.Print;
import java.awt.*;
diff --git a/src/main/java/gg/archipelago/client/Print/APPrintPart.java b/src/main/java/dev/koifysh/archipelago/Print/APPrintPart.java
similarity index 62%
rename from src/main/java/gg/archipelago/client/Print/APPrintPart.java
rename to src/main/java/dev/koifysh/archipelago/Print/APPrintPart.java
index ed5d53c..a65dfef 100644
--- a/src/main/java/gg/archipelago/client/Print/APPrintPart.java
+++ b/src/main/java/dev/koifysh/archipelago/Print/APPrintPart.java
@@ -1,7 +1,10 @@
-package gg.archipelago.client.Print;
+package dev.koifysh.archipelago.Print;
public class APPrintPart {
public APPrintType type = APPrintType.text;
public APPrintColor color = APPrintColor.none;
public String text = "";
+ public int player = 0;
+ public int flags = 0;
+
}
diff --git a/src/main/java/gg/archipelago/client/Print/APPrintType.java b/src/main/java/dev/koifysh/archipelago/Print/APPrintType.java
similarity index 92%
rename from src/main/java/gg/archipelago/client/Print/APPrintType.java
rename to src/main/java/dev/koifysh/archipelago/Print/APPrintType.java
index 93ce2e5..0a1f680 100644
--- a/src/main/java/gg/archipelago/client/Print/APPrintType.java
+++ b/src/main/java/dev/koifysh/archipelago/Print/APPrintType.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.Print;
+package dev.koifysh.archipelago.Print;
import com.google.gson.annotations.SerializedName;
diff --git a/src/main/java/gg/archipelago/client/ArchipelagoWebSocket.java b/src/main/java/dev/koifysh/archipelago/WebSocket.java
similarity index 53%
rename from src/main/java/gg/archipelago/client/ArchipelagoWebSocket.java
rename to src/main/java/dev/koifysh/archipelago/WebSocket.java
index e558a5a..cdd814b 100644
--- a/src/main/java/gg/archipelago/client/ArchipelagoWebSocket.java
+++ b/src/main/java/dev/koifysh/archipelago/WebSocket.java
@@ -1,23 +1,24 @@
-package gg.archipelago.client;
+package dev.koifysh.archipelago;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
-import gg.archipelago.client.Print.APPrint;
-import gg.archipelago.client.Print.APPrintType;
-import gg.archipelago.client.events.*;
-import gg.archipelago.client.helper.DeathLink;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.ConnectionResult;
-import gg.archipelago.client.network.client.ConnectPacket;
-import gg.archipelago.client.network.client.GetDataPackagePacket;
-import gg.archipelago.client.network.client.LocationScouts;
-import gg.archipelago.client.network.client.SayPacket;
-import gg.archipelago.client.network.server.*;
-import gg.archipelago.client.parts.DataPackage;
-import gg.archipelago.client.parts.NetworkItem;
-import gg.archipelago.client.parts.NetworkPlayer;
+import dev.koifysh.archipelago.Print.APPrint;
+import dev.koifysh.archipelago.Print.APPrintType;
+import dev.koifysh.archipelago.helper.DeathLink;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.ConnectionResult;
+import dev.koifysh.archipelago.network.client.ConnectPacket;
+import dev.koifysh.archipelago.network.client.GetDataPackagePacket;
+import dev.koifysh.archipelago.network.client.LocationScouts;
+import dev.koifysh.archipelago.network.client.SayPacket;
+import dev.koifysh.archipelago.parts.DataPackage;
+import dev.koifysh.archipelago.parts.NetworkItem;
+import dev.koifysh.archipelago.parts.NetworkPlayer;
+import dev.koifysh.archipelago.events.*;
+import dev.koifysh.archipelago.network.server.*;
+
import org.apache.hc.core5.net.URIBuilder;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
@@ -28,11 +29,11 @@
import java.util.*;
import java.util.logging.Level;
-public class ArchipelagoWebSocket extends WebSocketClient {
+class WebSocket extends WebSocketClient {
- private final static java.util.logging.Logger LOGGER = java.util.logging.Logger.getLogger(ArchipelagoWebSocket.class.getName());
+ private final static java.util.logging.Logger LOGGER = java.util.logging.Logger.getLogger(WebSocket.class.getName());
- private final ArchipelagoClient archipelagoClient;
+ private final Client client;
private final Gson gson = new Gson();
@@ -44,9 +45,9 @@ public class ArchipelagoWebSocket extends WebSocketClient {
private static Timer reconnectTimer;
private boolean downgrade = false;
- public ArchipelagoWebSocket(URI serverUri, ArchipelagoClient archipelagoClient) {
+ public WebSocket(URI serverUri, Client client) {
super(serverUri);
- this.archipelagoClient = archipelagoClient;
+ this.client = client;
if (reconnectTimer != null) {
reconnectTimer.cancel();
}
@@ -77,49 +78,50 @@ public void onMessage(String message) {
RoomInfoPacket roomInfo = gson.fromJson(packet, RoomInfoPacket.class);
//save room info
- archipelagoClient.setRoomInfo(roomInfo);
+ client.setRoomInfo(roomInfo);
- checkDataPackage(roomInfo.datapackageVersions);
+ checkDataPackage(roomInfo.datapackageChecksums, roomInfo.games);
seedName = roomInfo.seedName;
ConnectPacket connectPacket = new ConnectPacket();
- connectPacket.version = ArchipelagoClient.protocolVersion;
- connectPacket.name = archipelagoClient.getMyName();
- connectPacket.password = (archipelagoClient.getPassword() == null) ? "" : archipelagoClient.getPassword();
- connectPacket.uuid = archipelagoClient.getUUID();
- connectPacket.game = archipelagoClient.getGame();
- connectPacket.tags = archipelagoClient.getTags();
- connectPacket.itemsHandling = archipelagoClient.getItemsHandlingFlags();
+ connectPacket.version = Client.protocolVersion;
+ connectPacket.name = client.getMyName();
+ connectPacket.password = (client.getPassword() == null) ? "" : client.getPassword();
+ connectPacket.uuid = client.getUUID();
+ connectPacket.game = client.getGame();
+ connectPacket.tags = client.getTags();
+ connectPacket.itemsHandling = client.getItemsHandlingFlags();
//send reply
sendPacket(connectPacket);
- archipelagoClient.setRoomInfo(roomInfo);
+ client.setRoomInfo(roomInfo);
break;
case Connected:
ConnectedPacket connectedPacket = gson.fromJson(packet, ConnectedPacket.class);
- archipelagoClient.setTeam(connectedPacket.team);
- archipelagoClient.setSlot(connectedPacket.slot);
+ client.setTeam(connectedPacket.team);
+ client.setSlot(connectedPacket.slot);
+ client.setSlotInfo(connectedPacket.slotInfo);
- archipelagoClient.getRoomInfo().networkPlayers.addAll(connectedPacket.players);
- archipelagoClient.getRoomInfo().networkPlayers.add(new NetworkPlayer(connectedPacket.team, 0, "Archipelago"));
- archipelagoClient.setAlias(archipelagoClient.getRoomInfo().getPlayer(connectedPacket.team, connectedPacket.slot).alias);
+ client.getRoomInfo().networkPlayers.addAll(connectedPacket.players);
+ client.getRoomInfo().networkPlayers.add(new NetworkPlayer(connectedPacket.team, 0, "Archipelago"));
+ client.setAlias(client.getRoomInfo().getPlayer(connectedPacket.team, connectedPacket.slot).alias);
JsonElement slotData = packet.getAsJsonObject().get("slot_data");
ConnectionAttemptEvent attemptConnectionEvent = new ConnectionAttemptEvent(connectedPacket.team, connectedPacket.slot, seedName, slotData);
- archipelagoClient.getEventManager().callEvent(attemptConnectionEvent);
+ client.getEventManager().callEvent(attemptConnectionEvent);
if (!attemptConnectionEvent.isCanceled()) {
authenticated = true;
//only send locations if the connection is not canceled.
- archipelagoClient.getLocationManager().addCheckedLocations(connectedPacket.checkedLocations);
- archipelagoClient.getLocationManager().setMissingLocations(connectedPacket.missingLocations);
- archipelagoClient.getLocationManager().sendIfChecked(connectedPacket.missingLocations);
+ client.getLocationManager().addCheckedLocations(connectedPacket.checkedLocations);
+ client.getLocationManager().setMissingLocations(connectedPacket.missingLocations);
+ client.getLocationManager().sendIfChecked(connectedPacket.missingLocations);
ConnectionResultEvent connectionResultEvent = new ConnectionResultEvent(ConnectionResult.Success, connectedPacket.team, connectedPacket.slot, seedName, slotData);
- archipelagoClient.getEventManager().callEvent(connectionResultEvent);
+ client.getEventManager().callEvent(connectionResultEvent);
} else {
this.close();
//close out of this loop because we are no longer interested in further commands from the server.
@@ -128,40 +130,39 @@ public void onMessage(String message) {
break;
case ConnectionRefused:
ConnectionRefusedPacket error = gson.fromJson(cmdList.get(i), ConnectionRefusedPacket.class);
- archipelagoClient.getEventManager().callEvent(new ConnectionResultEvent(error.errors[0]));
- break;
- case Print:
- archipelagoClient.onPrint(gson.fromJson(packet, PrintPacket.class).getText());
+ client.getEventManager().callEvent(new ConnectionResultEvent(error.errors[0]));
break;
case DataPackage:
JsonElement data = packet.getAsJsonObject().get("data");
DataPackage dataPackage = gson.fromJson(data, DataPackage.class);
- dataPackage.uuid = archipelagoClient.getUUID();
- archipelagoClient.updateDataPackage(dataPackage);
- if (dataPackage.getVersion() != 0) {
- archipelagoClient.saveDataPackage();
- }
+ dataPackage.uuid = client.getUUID();
+ client.updateDataPackage(dataPackage);
+ client.saveDataPackage();
break;
case PrintJSON:
LOGGER.finest("PrintJSON packet");
APPrint print = gson.fromJson(packet, APPrint.class);
-
//filter though all player IDs and replace id with alias.
for (int p = 0; print.parts.length > p; ++p) {
if (print.parts[p].type == APPrintType.playerID) {
int playerID = Integer.parseInt((print.parts[p].text));
- NetworkPlayer player = archipelagoClient.getRoomInfo().getPlayer(archipelagoClient.getTeam(), playerID);
+ NetworkPlayer player = client.getRoomInfo().getPlayer(client.getTeam(), playerID);
print.parts[p].text = player.alias;
} else if (print.parts[p].type == APPrintType.itemID) {
- int itemID = Integer.parseInt((print.parts[p].text));
- print.parts[p].text = archipelagoClient.getDataPackage().getItem(itemID);
+ long itemID = Long.parseLong(print.parts[p].text);
+ print.parts[p].text = client.getDataPackage().getItem(itemID, client.getSlotInfo().get(print.parts[i].player).game);
} else if (print.parts[p].type == APPrintType.locationID) {
- int locationID = Integer.parseInt((print.parts[p].text));
- print.parts[p].text = archipelagoClient.getDataPackage().getLocation(locationID);
+ long locationID = Long.parseLong(print.parts[p].text);
+ print.parts[p].text = client.getDataPackage().getLocation(locationID, client.getSlotInfo().get(print.parts[i].player).game);
}
}
- archipelagoClient.onPrintJson(print, print.type, print.receiving, print.item);
+
+ client.getEventManager().callEvent(new PrintJSONEvent(print, print.type, print.receiving, print.item));
+
+ //todo: remove next version
+ client.onPrintJson(print, print.type, print.receiving, print.item);
+
break;
case RoomUpdate:
RoomUpdatePacket updatePacket = gson.fromJson(packet, RoomUpdatePacket.class);
@@ -169,36 +170,36 @@ public void onMessage(String message) {
break;
case ReceivedItems:
ReceivedItemsPacket items = gson.fromJson(packet, ReceivedItemsPacket.class);
- ItemManager itemManager = archipelagoClient.getItemManager();
+ ItemManager itemManager = client.getItemManager();
itemManager.receiveItems(items.items, items.index);
break;
case Bounced:
BouncedPacket bounced = gson.fromJson(packet, BouncedPacket.class);
- if (DeathLink.isDeathLink(bounced))
+ if (bounced.tags.contains("DeathLink"))
DeathLink.receiveDeathLink(bounced);
else
- archipelagoClient.getEventManager().callEvent(new BouncedEvent(bounced.games, bounced.tags, bounced.slots, bounced.data));
+ client.getEventManager().callEvent(new BouncedEvent(bounced.games, bounced.tags, bounced.slots, bounced.data));
break;
case LocationInfo:
LocationInfoPacket locations = gson.fromJson(packet, LocationInfoPacket.class);
for (NetworkItem item : locations.locations) {
- item.itemName = archipelagoClient.getDataPackage().getItem(item.itemID);
- item.locationName = archipelagoClient.getDataPackage().getLocation(item.locationID);
- item.playerName = archipelagoClient.getRoomInfo().getPlayer(archipelagoClient.getTeam(), item.playerID).alias;
+ item.itemName = client.getDataPackage().getItem(item.itemID, client.getSlotInfo().get(item.playerID).game);
+ item.locationName = client.getDataPackage().getLocation(item.locationID, client.getSlotInfo().get(client.getSlot()).game);
+ item.playerName = client.getRoomInfo().getPlayer(client.getTeam(), item.playerID).alias;
}
- archipelagoClient.getEventManager().callEvent(new LocationInfoEvent(locations.locations));
+ client.getEventManager().callEvent(new LocationInfoEvent(locations.locations));
break;
case Retrieved:
RetrievedPacket retrievedPacket = gson.fromJson(packet, RetrievedPacket.class);
- archipelagoClient.getEventManager().callEvent(new RetrievedEvent(retrievedPacket.keys, packet.getAsJsonObject().get("keys").getAsJsonObject(), retrievedPacket.requestID));
+ client.getEventManager().callEvent(new RetrievedEvent(retrievedPacket.keys, packet.getAsJsonObject().get("keys").getAsJsonObject(), retrievedPacket.requestID));
break;
case SetReply:
SetReplyPacket setReplyPacket = gson.fromJson(packet, SetReplyPacket.class);
- archipelagoClient.getEventManager().callEvent(new SetReplyEvent(setReplyPacket.key, setReplyPacket.value, setReplyPacket.original_Value, packet.getAsJsonObject().get("value"), setReplyPacket.requestID));
+ client.getEventManager().callEvent(new SetReplyEvent(setReplyPacket.key, setReplyPacket.value, setReplyPacket.original_Value, packet.getAsJsonObject().get("value"), setReplyPacket.requestID));
break;
case InvalidPacket:
InvalidPacket invalidPacket = gson.fromJson(packet, InvalidPacket.class);
- archipelagoClient.getEventManager().callEvent(new InvalidPacketEvent(invalidPacket.type, invalidPacket.Original_cmd, invalidPacket.text));
+ client.getEventManager().callEvent(new InvalidPacketEvent(invalidPacket.type, invalidPacket.Original_cmd, invalidPacket.text));
default:
}
@@ -210,37 +211,42 @@ public void onMessage(String message) {
}
private void updateRoom(RoomUpdatePacket updateRoomPacket) {
- if (updateRoomPacket.networkPlayers.size() != 0) {
- archipelagoClient.getRoomInfo().networkPlayers = updateRoomPacket.networkPlayers;
- archipelagoClient.getRoomInfo().networkPlayers.add(new NetworkPlayer(archipelagoClient.getTeam(), 0, "Archipelago"));
+ if (!updateRoomPacket.networkPlayers.isEmpty()) {
+ client.getRoomInfo().networkPlayers = updateRoomPacket.networkPlayers;
+ client.getRoomInfo().networkPlayers.add(new NetworkPlayer(client.getTeam(), 0, "Archipelago"));
}
- checkDataPackage(updateRoomPacket.datapackageVersions);
+ client.setHintPoints(updateRoomPacket.hintPoints);
+ client.setAlias(client.getRoomInfo().getPlayer(client.getTeam(), client.getSlot()).alias);
- archipelagoClient.setHintPoints(updateRoomPacket.hintPoints);
- archipelagoClient.setAlias(archipelagoClient.getRoomInfo().getPlayer(archipelagoClient.getTeam(), archipelagoClient.getSlot()).alias);
-
- archipelagoClient.getEventManager().callEvent(new CheckedLocationsEvent(updateRoomPacket.checkedLocations));
+ client.getEventManager().callEvent(new CheckedLocationsEvent(updateRoomPacket.checkedLocations));
}
- private void checkDataPackage(HashMap versions) {
- HashSet exclusions = new HashSet<>();
- for (Map.Entry game : versions.entrySet()) {
- //the game does NOT need updating add it to the exclusion list.
- int myGameVersion = archipelagoClient.getDataPackage().getVersions().getOrDefault(game.getKey(), 0);
- int newGameVersion = game.getValue();
- if (newGameVersion <= myGameVersion && newGameVersion != 0) {
- exclusions.add(game.getKey());
+
+ private void checkDataPackage(HashMap versions, List games) {
+ Set gamesToUpdate = new HashSet<>();
+ Map checksums = client.getDataPackage().getChecksums();
+ for (Map.Entry game : versions.entrySet()) {
+ if (!games.contains(game.getKey()))
+ continue;
+
+ if (!checksums.containsKey(game.getKey())) {
+ gamesToUpdate.add(game.getKey());
+ continue;
}
+
+ if (!checksums.get(game.getKey()).equals(game.getValue()))
+ gamesToUpdate.add(game.getKey());
}
- if (exclusions.size() != versions.size()) {
- fetchDataPackageFromAP(exclusions);
+
+ if (!gamesToUpdate.isEmpty()) {
+ fetchDataPackageFromAP(gamesToUpdate);
}
}
- private void fetchDataPackageFromAP(Set exclusions) {
- sendPacket(new GetDataPackagePacket(exclusions));
+ private void fetchDataPackageFromAP(Set games) {
+ sendPacket(new GetDataPackagePacket(games));
}
public void sendPacket(APPacket packet) {
@@ -265,18 +271,18 @@ public void onClose(int code, String wsReason, boolean remote) {
// attempt to reconnect using non-secure web socket if we are failing to connect with a secure socket.
if (uri.getScheme().equalsIgnoreCase("wss") && downgrade) {
try {
- archipelagoClient.connect(new URIBuilder(uri).setScheme("ws").build());
+ client.connect(new URIBuilder(uri).setScheme("ws").build());
} catch (URISyntaxException ignored) {
- archipelagoClient.onClose(reason, 0);
+ client.onClose("(AP-275) " + reason, 0);
}
return;
}
- archipelagoClient.onClose(reason, 0);
+ client.onClose("(AP-279) " + reason, 0);
return;
}
if (code == 1000) {
reconnectTimer.cancel();
- archipelagoClient.onClose("Disconnected.", 0);
+ client.onClose("(AP-284) Disconnected.", 0);
}
if (code == 1006) {
@@ -287,26 +293,29 @@ public void onClose(int code, String wsReason, boolean remote) {
TimerTask reconnectTask = new TimerTask() {
@Override
public void run() {
- archipelagoClient.reconnect();
+ client.reconnect();
}
};
reconnectTimer.cancel();
reconnectTimer = new Timer();
reconnectTimer.schedule(reconnectTask, reconnectDelay);
- archipelagoClient.onClose(reason, reconnectDelay / 1000);
+ client.onClose("(AP-302) " + reason, reconnectDelay / 1000);
return;
}
}
reconnectTimer.cancel();
- archipelagoClient.onClose(reason, 0);
+ client.onClose("(AP-308) "+reason, 0);
}
@Override
public void onError(Exception ex) {
- if (ex instanceof SSLException) return;
- archipelagoClient.onError(ex);
+ if (ex instanceof SSLException) {
+ LOGGER.info(String.format("SSL Error: %s", ex.getMessage()));
+ return;
+ }
+ client.onError(ex);
LOGGER.log(Level.WARNING, "Error in websocket connection");
ex.printStackTrace();
}
diff --git a/src/main/java/gg/archipelago/client/events/ArchipelagoEventListener.java b/src/main/java/dev/koifysh/archipelago/events/ArchipelagoEventListener.java
similarity index 55%
rename from src/main/java/gg/archipelago/client/events/ArchipelagoEventListener.java
rename to src/main/java/dev/koifysh/archipelago/events/ArchipelagoEventListener.java
index 3451931..ae75a40 100644
--- a/src/main/java/gg/archipelago/client/events/ArchipelagoEventListener.java
+++ b/src/main/java/dev/koifysh/archipelago/events/ArchipelagoEventListener.java
@@ -1,8 +1,11 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+/**
+ * tag a method with this who's only parameter is a class that extends {@link Event}
+ */
@Retention(RetentionPolicy.RUNTIME)
public @interface ArchipelagoEventListener {
}
diff --git a/src/main/java/gg/archipelago/client/events/BouncedEvent.java b/src/main/java/dev/koifysh/archipelago/events/BouncedEvent.java
similarity index 96%
rename from src/main/java/gg/archipelago/client/events/BouncedEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/BouncedEvent.java
index 235ef71..82754bf 100644
--- a/src/main/java/gg/archipelago/client/events/BouncedEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/BouncedEvent.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
import com.google.gson.annotations.SerializedName;
diff --git a/src/main/java/gg/archipelago/client/events/CheckedLocationsEvent.java b/src/main/java/dev/koifysh/archipelago/events/CheckedLocationsEvent.java
similarity index 86%
rename from src/main/java/gg/archipelago/client/events/CheckedLocationsEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/CheckedLocationsEvent.java
index 57559a2..1a657d3 100644
--- a/src/main/java/gg/archipelago/client/events/CheckedLocationsEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/CheckedLocationsEvent.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
import java.util.ArrayList;
diff --git a/src/main/java/gg/archipelago/client/events/ConnectionAttemptEvent.java b/src/main/java/dev/koifysh/archipelago/events/ConnectionAttemptEvent.java
similarity index 96%
rename from src/main/java/gg/archipelago/client/events/ConnectionAttemptEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/ConnectionAttemptEvent.java
index 0f28139..30d750e 100644
--- a/src/main/java/gg/archipelago/client/events/ConnectionAttemptEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/ConnectionAttemptEvent.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
diff --git a/src/main/java/gg/archipelago/client/events/ConnectionResultEvent.java b/src/main/java/dev/koifysh/archipelago/events/ConnectionResultEvent.java
similarity index 92%
rename from src/main/java/gg/archipelago/client/events/ConnectionResultEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/ConnectionResultEvent.java
index 40a16ff..429b3e4 100644
--- a/src/main/java/gg/archipelago/client/events/ConnectionResultEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/ConnectionResultEvent.java
@@ -1,9 +1,9 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.internal.Primitives;
-import gg.archipelago.client.network.ConnectionResult;
+import dev.koifysh.archipelago.network.ConnectionResult;
public class ConnectionResultEvent implements Event {
diff --git a/src/main/java/gg/archipelago/client/events/DeathLinkEvent.java b/src/main/java/dev/koifysh/archipelago/events/DeathLinkEvent.java
similarity index 57%
rename from src/main/java/gg/archipelago/client/events/DeathLinkEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/DeathLinkEvent.java
index 5cd5727..367f736 100644
--- a/src/main/java/gg/archipelago/client/events/DeathLinkEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/DeathLinkEvent.java
@@ -1,5 +1,8 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
+/**
+ * event that is fired whenever you receive a death link from another player. must first enable death links via {@link dev.koifysh.archipelago.helper.DeathLink}
+ */
public class DeathLinkEvent implements Event {
public double time;
diff --git a/src/main/java/dev/koifysh/archipelago/events/Event.java b/src/main/java/dev/koifysh/archipelago/events/Event.java
new file mode 100644
index 0000000..51ed3a4
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/events/Event.java
@@ -0,0 +1,4 @@
+package dev.koifysh.archipelago.events;
+
+public interface Event {
+}
diff --git a/src/main/java/gg/archipelago/client/events/InvalidPacketEvent.java b/src/main/java/dev/koifysh/archipelago/events/InvalidPacketEvent.java
similarity index 94%
rename from src/main/java/gg/archipelago/client/events/InvalidPacketEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/InvalidPacketEvent.java
index 014b653..fd6ba61 100644
--- a/src/main/java/gg/archipelago/client/events/InvalidPacketEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/InvalidPacketEvent.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
public class InvalidPacketEvent implements Event {
diff --git a/src/main/java/gg/archipelago/client/events/LocationInfoEvent.java b/src/main/java/dev/koifysh/archipelago/events/LocationInfoEvent.java
similarity index 72%
rename from src/main/java/gg/archipelago/client/events/LocationInfoEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/LocationInfoEvent.java
index 272a194..95a314d 100644
--- a/src/main/java/gg/archipelago/client/events/LocationInfoEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/LocationInfoEvent.java
@@ -1,6 +1,6 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
-import gg.archipelago.client.parts.NetworkItem;
+import dev.koifysh.archipelago.parts.NetworkItem;
import java.util.ArrayList;
diff --git a/src/main/java/dev/koifysh/archipelago/events/PrintJSONEvent.java b/src/main/java/dev/koifysh/archipelago/events/PrintJSONEvent.java
new file mode 100644
index 0000000..01f639d
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/events/PrintJSONEvent.java
@@ -0,0 +1,28 @@
+package dev.koifysh.archipelago.events;
+
+import dev.koifysh.archipelago.Print.APPrint;
+import dev.koifysh.archipelago.parts.NetworkItem;
+
+/**
+ * event that is fired when the server wishes to send a message to the user.
+ */
+public class PrintJSONEvent implements Event {
+
+ public APPrint apPrint;
+ public String type;
+ public int player;
+ public NetworkItem item;
+
+ /**
+ * @param apPrint list of message segments.
+ * @param type the type of the received message.
+ * @param player int id of the sending player.
+ * @param item the network item that is involved with the message.
+ */
+ public PrintJSONEvent(APPrint apPrint, String type, int player, NetworkItem item) {
+ this.apPrint = apPrint;
+ this.type = type;
+ this.player = player;
+ this.item = item;
+ }
+}
diff --git a/src/main/java/gg/archipelago/client/events/ReceiveItemEvent.java b/src/main/java/dev/koifysh/archipelago/events/ReceiveItemEvent.java
similarity index 89%
rename from src/main/java/gg/archipelago/client/events/ReceiveItemEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/ReceiveItemEvent.java
index fa72596..a3edf71 100644
--- a/src/main/java/gg/archipelago/client/events/ReceiveItemEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/ReceiveItemEvent.java
@@ -1,6 +1,6 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
-import gg.archipelago.client.parts.NetworkItem;
+import dev.koifysh.archipelago.parts.NetworkItem;
public class ReceiveItemEvent implements Event {
diff --git a/src/main/java/gg/archipelago/client/events/RetrievedEvent.java b/src/main/java/dev/koifysh/archipelago/events/RetrievedEvent.java
similarity index 97%
rename from src/main/java/gg/archipelago/client/events/RetrievedEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/RetrievedEvent.java
index 24f201c..93b29ad 100644
--- a/src/main/java/gg/archipelago/client/events/RetrievedEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/RetrievedEvent.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
diff --git a/src/main/java/gg/archipelago/client/events/SetReplyEvent.java b/src/main/java/dev/koifysh/archipelago/events/SetReplyEvent.java
similarity index 96%
rename from src/main/java/gg/archipelago/client/events/SetReplyEvent.java
rename to src/main/java/dev/koifysh/archipelago/events/SetReplyEvent.java
index c5fc1b5..ff23305 100644
--- a/src/main/java/gg/archipelago/client/events/SetReplyEvent.java
+++ b/src/main/java/dev/koifysh/archipelago/events/SetReplyEvent.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.events;
+package dev.koifysh.archipelago.events;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
diff --git a/src/main/java/gg/archipelago/client/helper/DeathLink.java b/src/main/java/dev/koifysh/archipelago/helper/DeathLink.java
similarity index 51%
rename from src/main/java/gg/archipelago/client/helper/DeathLink.java
rename to src/main/java/dev/koifysh/archipelago/helper/DeathLink.java
index 9311b8f..4946adc 100644
--- a/src/main/java/gg/archipelago/client/helper/DeathLink.java
+++ b/src/main/java/dev/koifysh/archipelago/helper/DeathLink.java
@@ -1,34 +1,39 @@
-package gg.archipelago.client.helper;
+package dev.koifysh.archipelago.helper;
-import gg.archipelago.client.events.DeathLinkEvent;
-import gg.archipelago.client.network.client.BouncePacket;
-import gg.archipelago.client.network.server.BouncedPacket;
+import dev.koifysh.archipelago.network.client.BouncePacket;
+import dev.koifysh.archipelago.network.server.BouncedPacket;
+import dev.koifysh.archipelago.events.DeathLinkEvent;
import java.util.HashMap;
-import static gg.archipelago.client.ArchipelagoClient.archipelagoClient;
-
+import static dev.koifysh.archipelago.Client.client;
+/**
+ * a helper-class for sending and receiving death links.
+ *
+ * enable death links by calling {@link #setDeathLinkEnabled(boolean)}
+ */
public class DeathLink {
static private double lastDeath = 0;
- public static boolean isDeathLink(BouncedPacket bounced) {
- return bounced.tags.contains("DeathLink");
- }
-
public static void receiveDeathLink(BouncedPacket bounced) {
try {
if ((Double) bounced.data.getOrDefault("time", 0d) == lastDeath)
return;
DeathLinkEvent dl = new DeathLinkEvent((String)bounced.data.get("source"), (String)bounced.data.get("cause"), (Double)bounced.data.get("time"));
- archipelagoClient.getEventManager().callEvent(dl);
+ client.getEventManager().callEvent(dl);
} catch (ClassCastException ex) {
System.out.println("Error Receiving DeathLink, possible malformed bounce packet");
}
}
+ /**
+ * helper for sending a death link bounce packet. you can send these without enabling death link first, but it is frowned upon.
+ * @param source A String that is the name of the player sending the death link (does not have to be slot name)
+ * @param cause A String that is the cause of this death. may be empty.
+ */
public static void SendDeathLink(String source, String cause) {
lastDeath = (double)System.currentTimeMillis() / 1000D;
@@ -39,13 +44,17 @@ public static void SendDeathLink(String source, String cause) {
put("time", lastDeath);
put("source",source);
}});
- archipelagoClient.sendBounce(deathLinkPacket);
+ client.sendBounce(deathLinkPacket);
}
+ /**
+ * Enable or Disable receiving death links.
+ * @param enabled set to TRUE to enable death links, FALSE to disable.
+ */
public static void setDeathLinkEnabled(boolean enabled) {
if(enabled)
- archipelagoClient.addTag("DeathLink");
+ client.addTag("DeathLink");
else
- archipelagoClient.removeTag("DeathLink");
+ client.removeTag("DeathLink");
}
}
diff --git a/src/main/java/gg/archipelago/client/network/APPacket.java b/src/main/java/dev/koifysh/archipelago/network/APPacket.java
similarity index 88%
rename from src/main/java/gg/archipelago/client/network/APPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/APPacket.java
index 641a11b..89d40f6 100644
--- a/src/main/java/gg/archipelago/client/network/APPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/APPacket.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.network;
+package dev.koifysh.archipelago.network;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
diff --git a/src/main/java/gg/archipelago/client/network/APPacketType.java b/src/main/java/dev/koifysh/archipelago/network/APPacketType.java
similarity index 96%
rename from src/main/java/gg/archipelago/client/network/APPacketType.java
rename to src/main/java/dev/koifysh/archipelago/network/APPacketType.java
index 3f00654..0d0c14d 100644
--- a/src/main/java/gg/archipelago/client/network/APPacketType.java
+++ b/src/main/java/dev/koifysh/archipelago/network/APPacketType.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.network;
+package dev.koifysh.archipelago.network;
import com.google.gson.annotations.SerializedName;
diff --git a/src/main/java/gg/archipelago/client/network/ConnectionResult.java b/src/main/java/dev/koifysh/archipelago/network/ConnectionResult.java
similarity index 73%
rename from src/main/java/gg/archipelago/client/network/ConnectionResult.java
rename to src/main/java/dev/koifysh/archipelago/network/ConnectionResult.java
index a681c87..e0f709b 100644
--- a/src/main/java/gg/archipelago/client/network/ConnectionResult.java
+++ b/src/main/java/dev/koifysh/archipelago/network/ConnectionResult.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.network;
+package dev.koifysh.archipelago.network;
public enum ConnectionResult {
Success,InvalidSlot, SlotAlreadyTaken, IncompatibleVersion, InvalidPassword
diff --git a/src/main/java/dev/koifysh/archipelago/network/DataStorageOperation.java b/src/main/java/dev/koifysh/archipelago/network/DataStorageOperation.java
new file mode 100644
index 0000000..2346540
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/network/DataStorageOperation.java
@@ -0,0 +1,3 @@
+package dev.koifysh.archipelago.network;
+
+
diff --git a/src/main/java/gg/archipelago/client/network/Permission.java b/src/main/java/dev/koifysh/archipelago/network/Permission.java
similarity index 84%
rename from src/main/java/gg/archipelago/client/network/Permission.java
rename to src/main/java/dev/koifysh/archipelago/network/Permission.java
index e705083..b8c7c07 100644
--- a/src/main/java/gg/archipelago/client/network/Permission.java
+++ b/src/main/java/dev/koifysh/archipelago/network/Permission.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.network;
+package dev.koifysh.archipelago.network;
public enum Permission {
disabled(0b000),
diff --git a/src/main/java/gg/archipelago/client/network/RemainingMode.java b/src/main/java/dev/koifysh/archipelago/network/RemainingMode.java
similarity index 89%
rename from src/main/java/gg/archipelago/client/network/RemainingMode.java
rename to src/main/java/dev/koifysh/archipelago/network/RemainingMode.java
index ada9cc6..c1fb5df 100644
--- a/src/main/java/gg/archipelago/client/network/RemainingMode.java
+++ b/src/main/java/dev/koifysh/archipelago/network/RemainingMode.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.network;
+package dev.koifysh.archipelago.network;
public enum RemainingMode {
enabled,
diff --git a/src/main/java/gg/archipelago/client/network/client/BouncePacket.java b/src/main/java/dev/koifysh/archipelago/network/client/BouncePacket.java
similarity index 79%
rename from src/main/java/gg/archipelago/client/network/client/BouncePacket.java
rename to src/main/java/dev/koifysh/archipelago/network/client/BouncePacket.java
index 7419fb3..6d822ff 100644
--- a/src/main/java/gg/archipelago/client/network/client/BouncePacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/client/BouncePacket.java
@@ -1,10 +1,10 @@
-package gg.archipelago.client.network.client;
+package dev.koifysh.archipelago.network.client;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.events.Event;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.events.Event;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
import java.util.HashMap;
diff --git a/src/main/java/gg/archipelago/client/network/client/ConnectPacket.java b/src/main/java/dev/koifysh/archipelago/network/client/ConnectPacket.java
similarity index 75%
rename from src/main/java/gg/archipelago/client/network/client/ConnectPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/client/ConnectPacket.java
index c312307..99d4b13 100644
--- a/src/main/java/gg/archipelago/client/network/client/ConnectPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/client/ConnectPacket.java
@@ -1,9 +1,9 @@
-package gg.archipelago.client.network.client;
+package dev.koifysh.archipelago.network.client;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-import gg.archipelago.client.parts.Version;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+import dev.koifysh.archipelago.parts.Version;
import java.util.Set;
diff --git a/src/main/java/dev/koifysh/archipelago/network/client/GetDataPackagePacket.java b/src/main/java/dev/koifysh/archipelago/network/client/GetDataPackagePacket.java
new file mode 100644
index 0000000..267a06d
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/network/client/GetDataPackagePacket.java
@@ -0,0 +1,20 @@
+package dev.koifysh.archipelago.network.client;
+
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+
+import java.util.Set;
+
+public class GetDataPackagePacket extends APPacket {
+
+ Set games;
+
+ public GetDataPackagePacket() {
+ this(null);
+ }
+
+ public GetDataPackagePacket(Set games) {
+ super(APPacketType.GetDataPackage);
+ this.games = games;
+ }
+}
diff --git a/src/main/java/gg/archipelago/client/network/client/GetPacket.java b/src/main/java/dev/koifysh/archipelago/network/client/GetPacket.java
similarity index 60%
rename from src/main/java/gg/archipelago/client/network/client/GetPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/client/GetPacket.java
index 3db6fa9..fa10ce1 100644
--- a/src/main/java/gg/archipelago/client/network/client/GetPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/client/GetPacket.java
@@ -1,16 +1,18 @@
-package gg.archipelago.client.network.client;
+package dev.koifysh.archipelago.network.client;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.Client;
+import dev.koifysh.archipelago.events.RetrievedEvent;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
import java.util.Collection;
import java.util.Random;
/**
* Used to request a single or multiple values from the server's data storage, see the
- * {@link gg.archipelago.client.ArchipelagoClient#dataStorageSet(SetPacket) ArchipelagoClient.dataStorageSet()} for how to write values to the data storage.
- * A Get package will be answered with a {@link gg.archipelago.client.events.RetrievedEvent RetreivedEvent}.
+ * {@link Client#dataStorageSet(SetPacket) ArchipelagoClient.dataStorageSet()} for how to write values to the data storage.
+ * A Get package will be answered with a {@link RetrievedEvent RetreivedEvent}.
*/
public class GetPacket extends APPacket {
diff --git a/src/main/java/gg/archipelago/client/network/client/LocationChecks.java b/src/main/java/dev/koifysh/archipelago/network/client/LocationChecks.java
similarity index 67%
rename from src/main/java/gg/archipelago/client/network/client/LocationChecks.java
rename to src/main/java/dev/koifysh/archipelago/network/client/LocationChecks.java
index b4a46db..e6bf674 100644
--- a/src/main/java/gg/archipelago/client/network/client/LocationChecks.java
+++ b/src/main/java/dev/koifysh/archipelago/network/client/LocationChecks.java
@@ -1,8 +1,8 @@
-package gg.archipelago.client.network.client;
+package dev.koifysh.archipelago.network.client;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
import java.util.HashSet;
import java.util.Set;
diff --git a/src/main/java/gg/archipelago/client/network/client/LocationScouts.java b/src/main/java/dev/koifysh/archipelago/network/client/LocationScouts.java
similarity index 65%
rename from src/main/java/gg/archipelago/client/network/client/LocationScouts.java
rename to src/main/java/dev/koifysh/archipelago/network/client/LocationScouts.java
index 37a9f4b..e099785 100644
--- a/src/main/java/gg/archipelago/client/network/client/LocationScouts.java
+++ b/src/main/java/dev/koifysh/archipelago/network/client/LocationScouts.java
@@ -1,7 +1,7 @@
-package gg.archipelago.client.network.client;
+package dev.koifysh.archipelago.network.client;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
import java.util.ArrayList;
diff --git a/src/main/java/gg/archipelago/client/network/client/SayPacket.java b/src/main/java/dev/koifysh/archipelago/network/client/SayPacket.java
similarity index 62%
rename from src/main/java/gg/archipelago/client/network/client/SayPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/client/SayPacket.java
index 33d5cd4..1d53ec8 100644
--- a/src/main/java/gg/archipelago/client/network/client/SayPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/client/SayPacket.java
@@ -1,8 +1,8 @@
-package gg.archipelago.client.network.client;
+package dev.koifysh.archipelago.network.client;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
public class SayPacket extends APPacket {
diff --git a/src/main/java/gg/archipelago/client/network/client/SetNotifyPacket.java b/src/main/java/dev/koifysh/archipelago/network/client/SetNotifyPacket.java
similarity index 68%
rename from src/main/java/gg/archipelago/client/network/client/SetNotifyPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/client/SetNotifyPacket.java
index 868bf75..aa7ca67 100644
--- a/src/main/java/gg/archipelago/client/network/client/SetNotifyPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/client/SetNotifyPacket.java
@@ -1,7 +1,7 @@
-package gg.archipelago.client.network.client;
+package dev.koifysh.archipelago.network.client;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
import java.util.Collection;
diff --git a/src/main/java/gg/archipelago/client/network/client/SetPacket.java b/src/main/java/dev/koifysh/archipelago/network/client/SetPacket.java
similarity index 92%
rename from src/main/java/gg/archipelago/client/network/client/SetPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/client/SetPacket.java
index 514c46a..d4264c6 100644
--- a/src/main/java/gg/archipelago/client/network/client/SetPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/client/SetPacket.java
@@ -1,9 +1,9 @@
-package gg.archipelago.client.network.client;
+package dev.koifysh.archipelago.network.client;
-import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.events.SetReplyEvent;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
import java.util.ArrayList;
import java.util.Random;
@@ -23,7 +23,7 @@ public class SetPacket extends APPacket {
public Object defaultValue;
/**
- * If true, the server will send a {@link gg.archipelago.client.events.SetReplyEvent SetReplyEvent} response back to the client.
+ * If true, the server will send a {@link SetReplyEvent SetReplyEvent} response back to the client.
*/
@SerializedName("want_reply")
public boolean want_reply = false;
@@ -96,7 +96,7 @@ private static class DataStorageOperation {
*/
public enum Operation {
/**
- * Sets the current value of the key on the server to the value given in {@link gg.archipelago.client.network.client.SetPacket#addDataStorageOperation addDataStorageOperation(Operation, Value)}.
+ * Sets the current value of the key on the server to the value given in {@link SetPacket#addDataStorageOperation addDataStorageOperation(Operation, Value)}.
*/
@SerializedName("replace")
REPLACE,
diff --git a/src/main/java/gg/archipelago/client/network/client/StatusUpdatePacket.java b/src/main/java/dev/koifysh/archipelago/network/client/StatusUpdatePacket.java
similarity index 52%
rename from src/main/java/gg/archipelago/client/network/client/StatusUpdatePacket.java
rename to src/main/java/dev/koifysh/archipelago/network/client/StatusUpdatePacket.java
index 7a99390..32320d8 100644
--- a/src/main/java/gg/archipelago/client/network/client/StatusUpdatePacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/client/StatusUpdatePacket.java
@@ -1,8 +1,8 @@
-package gg.archipelago.client.network.client;
+package dev.koifysh.archipelago.network.client;
-import gg.archipelago.client.ClientStatus;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.ClientStatus;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
public class StatusUpdatePacket extends APPacket {
diff --git a/src/main/java/dev/koifysh/archipelago/network/client/SyncPacket.java b/src/main/java/dev/koifysh/archipelago/network/client/SyncPacket.java
new file mode 100644
index 0000000..940b259
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/network/client/SyncPacket.java
@@ -0,0 +1,12 @@
+package dev.koifysh.archipelago.network.client;
+
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+
+public class SyncPacket extends APPacket {
+
+
+ public SyncPacket() {
+ super(APPacketType.Sync);
+ }
+}
diff --git a/src/main/java/gg/archipelago/client/network/server/BouncedPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/BouncedPacket.java
similarity index 79%
rename from src/main/java/gg/archipelago/client/network/server/BouncedPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/BouncedPacket.java
index dcaef8f..6c744ba 100644
--- a/src/main/java/gg/archipelago/client/network/server/BouncedPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/BouncedPacket.java
@@ -1,8 +1,8 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
import java.util.HashMap;
import java.util.HashSet;
diff --git a/src/main/java/gg/archipelago/client/network/server/ConnectUpdatePacket.java b/src/main/java/dev/koifysh/archipelago/network/server/ConnectUpdatePacket.java
similarity index 64%
rename from src/main/java/gg/archipelago/client/network/server/ConnectUpdatePacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/ConnectUpdatePacket.java
index 7b05468..2871d70 100644
--- a/src/main/java/gg/archipelago/client/network/server/ConnectUpdatePacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/ConnectUpdatePacket.java
@@ -1,8 +1,8 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
import java.util.Set;
diff --git a/src/main/java/gg/archipelago/client/network/server/ConnectedPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/ConnectedPacket.java
similarity index 63%
rename from src/main/java/gg/archipelago/client/network/server/ConnectedPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/ConnectedPacket.java
index 02e7c90..9049c49 100644
--- a/src/main/java/gg/archipelago/client/network/server/ConnectedPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/ConnectedPacket.java
@@ -1,11 +1,13 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-import gg.archipelago.client.parts.NetworkPlayer;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+import dev.koifysh.archipelago.parts.NetworkPlayer;
+import dev.koifysh.archipelago.parts.NetworkSlot;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
public class ConnectedPacket extends APPacket {
@@ -20,6 +22,8 @@ public class ConnectedPacket extends APPacket {
public HashSet missingLocations = new HashSet<>();
@SerializedName("checked_locations")
public HashSet checkedLocations = new HashSet<>();
+ @SerializedName("slot_info")
+ public HashMap slotInfo;
public ConnectedPacket() {
super(APPacketType.Connected);
diff --git a/src/main/java/gg/archipelago/client/network/server/ConnectionRefusedPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/ConnectionRefusedPacket.java
similarity index 56%
rename from src/main/java/gg/archipelago/client/network/server/ConnectionRefusedPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/ConnectionRefusedPacket.java
index ff60fef..0e91e4f 100644
--- a/src/main/java/gg/archipelago/client/network/server/ConnectionRefusedPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/ConnectionRefusedPacket.java
@@ -1,9 +1,9 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-import gg.archipelago.client.network.ConnectionResult;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+import dev.koifysh.archipelago.network.ConnectionResult;
public class ConnectionRefusedPacket extends APPacket {
diff --git a/src/main/java/gg/archipelago/client/network/server/InvalidPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/InvalidPacket.java
similarity index 70%
rename from src/main/java/gg/archipelago/client/network/server/InvalidPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/InvalidPacket.java
index 7179ba6..f5a855e 100644
--- a/src/main/java/gg/archipelago/client/network/server/InvalidPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/InvalidPacket.java
@@ -1,8 +1,8 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
public class InvalidPacket extends APPacket {
diff --git a/src/main/java/dev/koifysh/archipelago/network/server/JsonPrintPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/JsonPrintPacket.java
new file mode 100644
index 0000000..6c7b874
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/network/server/JsonPrintPacket.java
@@ -0,0 +1,13 @@
+package dev.koifysh.archipelago.network.server;
+
+import dev.koifysh.archipelago.Print.APPrintPart;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+
+public class JsonPrintPacket extends APPacket {
+ APPrintPart[] parts;
+
+ public JsonPrintPacket() {
+ super(APPacketType.PrintJSON);
+ }
+}
diff --git a/src/main/java/gg/archipelago/client/network/server/LocationInfoPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/LocationInfoPacket.java
similarity index 59%
rename from src/main/java/gg/archipelago/client/network/server/LocationInfoPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/LocationInfoPacket.java
index efbd2e7..309ca7b 100644
--- a/src/main/java/gg/archipelago/client/network/server/LocationInfoPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/LocationInfoPacket.java
@@ -1,9 +1,9 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-import gg.archipelago.client.parts.NetworkItem;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+import dev.koifysh.archipelago.parts.NetworkItem;
import java.util.ArrayList;
diff --git a/src/main/java/gg/archipelago/client/network/server/PrintPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/PrintPacket.java
similarity index 64%
rename from src/main/java/gg/archipelago/client/network/server/PrintPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/PrintPacket.java
index 45a5a86..8c7a9ed 100644
--- a/src/main/java/gg/archipelago/client/network/server/PrintPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/PrintPacket.java
@@ -1,8 +1,8 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
public class PrintPacket extends APPacket {
diff --git a/src/main/java/gg/archipelago/client/network/server/ReceivedItemsPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/ReceivedItemsPacket.java
similarity index 63%
rename from src/main/java/gg/archipelago/client/network/server/ReceivedItemsPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/ReceivedItemsPacket.java
index 08071ca..a8925e3 100644
--- a/src/main/java/gg/archipelago/client/network/server/ReceivedItemsPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/ReceivedItemsPacket.java
@@ -1,9 +1,9 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-import gg.archipelago.client.parts.NetworkItem;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+import dev.koifysh.archipelago.parts.NetworkItem;
import java.util.ArrayList;
diff --git a/src/main/java/gg/archipelago/client/network/server/RetrievedPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/RetrievedPacket.java
similarity index 69%
rename from src/main/java/gg/archipelago/client/network/server/RetrievedPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/RetrievedPacket.java
index 34ecbbe..7033406 100644
--- a/src/main/java/gg/archipelago/client/network/server/RetrievedPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/RetrievedPacket.java
@@ -1,8 +1,8 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
import java.util.HashMap;
diff --git a/src/main/java/gg/archipelago/client/network/server/RoomInfoPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/RoomInfoPacket.java
similarity index 64%
rename from src/main/java/gg/archipelago/client/network/server/RoomInfoPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/RoomInfoPacket.java
index 49020ba..46f2b88 100644
--- a/src/main/java/gg/archipelago/client/network/server/RoomInfoPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/RoomInfoPacket.java
@@ -1,11 +1,10 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-import gg.archipelago.client.network.RemainingMode;
-import gg.archipelago.client.parts.NetworkPlayer;
-import gg.archipelago.client.parts.Version;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+import dev.koifysh.archipelago.parts.NetworkPlayer;
+import dev.koifysh.archipelago.parts.Version;
import java.util.ArrayList;
import java.util.HashMap;
@@ -14,15 +13,14 @@ public class RoomInfoPacket extends APPacket {
public Version version;
+ @SerializedName("generator_version")
+ public Version generatorVersion;
+
public String[] tags;
public boolean password;
- @SerializedName("forfeit_mode")
- public RemainingMode.ForfeitMode forfeitMode;
-
- @SerializedName("remaining_mode")
- public RemainingMode remainingMode;
+ public HashMap permissions;
@SerializedName("hint_cost")
public int hintCost;
@@ -35,8 +33,9 @@ public class RoomInfoPacket extends APPacket {
@SerializedName("games")
public ArrayList games = new ArrayList<>();
- @SerializedName("datapackage_versions")
- public HashMap datapackageVersions = new HashMap<>();
+
+ @SerializedName("datapackage_checksums")
+ public HashMap datapackageChecksums = new HashMap<>();
@SerializedName("seed_name")
public String seedName;
@@ -44,9 +43,6 @@ public class RoomInfoPacket extends APPacket {
@SerializedName("time")
public double time;
- @SerializedName("permissions")
- public HashMap permissions;
-
public RoomInfoPacket() {
super(APPacketType.RoomInfo);
}
diff --git a/src/main/java/gg/archipelago/client/network/server/RoomUpdatePacket.java b/src/main/java/dev/koifysh/archipelago/network/server/RoomUpdatePacket.java
similarity index 74%
rename from src/main/java/gg/archipelago/client/network/server/RoomUpdatePacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/RoomUpdatePacket.java
index 183a76c..10b677f 100644
--- a/src/main/java/gg/archipelago/client/network/server/RoomUpdatePacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/RoomUpdatePacket.java
@@ -1,11 +1,11 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-import gg.archipelago.client.network.RemainingMode;
-import gg.archipelago.client.parts.NetworkPlayer;
-import gg.archipelago.client.parts.Version;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
+import dev.koifysh.archipelago.network.RemainingMode;
+import dev.koifysh.archipelago.parts.NetworkPlayer;
+import dev.koifysh.archipelago.parts.Version;
import java.util.ArrayList;
import java.util.HashMap;
@@ -48,8 +48,8 @@ public class RoomUpdatePacket extends APPacket {
@SerializedName("datapackage_version")
public int datapackageVersion;
- @SerializedName("datapackage_versions")
- public HashMap datapackageVersions = new HashMap<>();
+ @SerializedName("datapackage_checksums")
+ public HashMap datapackageChecksums = new HashMap<>();
public RoomUpdatePacket() {
super(APPacketType.RoomUpdate);
diff --git a/src/main/java/gg/archipelago/client/network/server/SetReplyPacket.java b/src/main/java/dev/koifysh/archipelago/network/server/SetReplyPacket.java
similarity index 73%
rename from src/main/java/gg/archipelago/client/network/server/SetReplyPacket.java
rename to src/main/java/dev/koifysh/archipelago/network/server/SetReplyPacket.java
index 3dc9efd..dde6829 100644
--- a/src/main/java/gg/archipelago/client/network/server/SetReplyPacket.java
+++ b/src/main/java/dev/koifysh/archipelago/network/server/SetReplyPacket.java
@@ -1,8 +1,8 @@
-package gg.archipelago.client.network.server;
+package dev.koifysh.archipelago.network.server;
import com.google.gson.annotations.SerializedName;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
+import dev.koifysh.archipelago.network.APPacket;
+import dev.koifysh.archipelago.network.APPacketType;
public class SetReplyPacket extends APPacket {
@SerializedName("key")
diff --git a/src/main/java/dev/koifysh/archipelago/parts/DataPackage.java b/src/main/java/dev/koifysh/archipelago/parts/DataPackage.java
new file mode 100644
index 0000000..85a3573
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/parts/DataPackage.java
@@ -0,0 +1,61 @@
+package dev.koifysh.archipelago.parts;
+
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+public class DataPackage implements Serializable {
+
+ @Expose
+ @SerializedName("games")
+ HashMap games = new HashMap<>();
+
+ public String uuid = UUID.randomUUID().toString();
+
+ public String getItem(long itemID, String game) {
+ if (!games.containsKey(game))
+ return String.format("Unknown Item [%d] for [%s]", itemID, game);
+
+ if(!games.get(game).itemNameToId.containsValue(itemID))
+ return String.format("Unknown Item [%d] for [%s]", itemID, game);
+
+ return games.get(game).getItem(itemID);
+ }
+
+ public String getLocation(long locationID, String game) {
+ if (!games.containsKey(game))
+ return String.format("Unknown Location [%d] for [%s]", locationID, game);
+
+ if (!games.get(game).locationNameToId.containsValue(locationID))
+ return String.format("Unknown Location [%d] for [%s]", locationID, game);
+
+ return games.get(game).getLocation(locationID);
+ }
+
+ public Map getChecksums() {
+ HashMap checksums = new HashMap<>();
+ games.forEach((key, value) -> checksums.put(key, value.checksum));
+ return checksums;
+ }
+
+ public HashMap getGames() {
+ return games;
+ }
+
+ public Game getGame(String game) {
+ return games.get(game);
+ }
+
+
+ public String getUUID() {
+ return uuid;
+ }
+
+ public void update(DataPackage newData) {
+ games.putAll(newData.getGames());
+ }
+}
diff --git a/src/main/java/dev/koifysh/archipelago/parts/Game.java b/src/main/java/dev/koifysh/archipelago/parts/Game.java
new file mode 100644
index 0000000..0d52bc4
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/parts/Game.java
@@ -0,0 +1,48 @@
+package dev.koifysh.archipelago.parts;
+
+import com.google.gson.annotations.SerializedName;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+public class Game implements Serializable {
+
+
+
+ @SerializedName("checksum")
+ public String checksum;
+
+ @SerializedName("item_name_to_id")
+ public HashMap itemNameToId = new HashMap<>();
+
+ @SerializedName("location_name_to_id")
+ public HashMap locationNameToId = new HashMap<>();
+
+ private final HashMap idToItem = new HashMap<>();
+ private final HashMap idToLocation = new HashMap<>();
+
+ public String getItem(long itemID) {
+ if(idToItem.isEmpty()) {
+ for (Map.Entry entry : itemNameToId.entrySet()) {
+ idToItem.put(entry.getValue(), entry.getKey());
+ }
+ }
+ if (!idToItem.containsKey(itemID))
+ return String.format("Unknown Item [%d]", itemID);
+
+ return idToItem.get(itemID);
+ }
+
+ public String getLocation(long locationID) {
+ if(idToLocation.isEmpty()) {
+ for (Map.Entry entry : locationNameToId.entrySet()) {
+ idToLocation.put(entry.getValue(), entry.getKey());
+ }
+ }
+ if (!idToLocation.containsKey(locationID))
+ return String.format("Unknown Location [%d]", locationID);
+
+ return idToLocation.get(locationID);
+ }
+}
diff --git a/src/main/java/gg/archipelago/client/parts/NetworkItem.java b/src/main/java/dev/koifysh/archipelago/parts/NetworkItem.java
similarity index 96%
rename from src/main/java/gg/archipelago/client/parts/NetworkItem.java
rename to src/main/java/dev/koifysh/archipelago/parts/NetworkItem.java
index 36a3876..cdbcffe 100644
--- a/src/main/java/gg/archipelago/client/parts/NetworkItem.java
+++ b/src/main/java/dev/koifysh/archipelago/parts/NetworkItem.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.parts;
+package dev.koifysh.archipelago.parts;
import com.google.gson.annotations.SerializedName;
diff --git a/src/main/java/gg/archipelago/client/parts/NetworkPlayer.java b/src/main/java/dev/koifysh/archipelago/parts/NetworkPlayer.java
similarity index 88%
rename from src/main/java/gg/archipelago/client/parts/NetworkPlayer.java
rename to src/main/java/dev/koifysh/archipelago/parts/NetworkPlayer.java
index 6af4d80..bd5e511 100644
--- a/src/main/java/gg/archipelago/client/parts/NetworkPlayer.java
+++ b/src/main/java/dev/koifysh/archipelago/parts/NetworkPlayer.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.parts;
+package dev.koifysh.archipelago.parts;
public class NetworkPlayer {
public int team;
diff --git a/src/main/java/dev/koifysh/archipelago/parts/NetworkSlot.java b/src/main/java/dev/koifysh/archipelago/parts/NetworkSlot.java
new file mode 100644
index 0000000..bd494f4
--- /dev/null
+++ b/src/main/java/dev/koifysh/archipelago/parts/NetworkSlot.java
@@ -0,0 +1,41 @@
+package dev.koifysh.archipelago.parts;
+
+import com.google.gson.annotations.SerializedName;
+
+public class NetworkSlot {
+
+ @SerializedName("name")
+ public String name;
+
+ @SerializedName("game")
+ public String game;
+
+ @SerializedName("type")
+ public int type;
+
+
+ /**
+ * Flags that will tell you more about the slot type.
+ * {@link #SPECTATOR},
+ * {@link #PLAYER},
+ * {@link #GROUP}
+ */
+ public static class flags {
+
+ /**
+ * If set, indicates the slot is a spectator
+ */
+ public final static int SPECTATOR = 0b001;
+
+ /**
+ * If set, indicates the slot is a player
+ */
+ public final static int PLAYER = 0b010;
+
+ /**
+ * If set, indicates the slot is a group.
+ */
+ public final static int GROUP = 0b100;
+
+ }
+}
diff --git a/src/main/java/gg/archipelago/client/parts/Version.java b/src/main/java/dev/koifysh/archipelago/parts/Version.java
similarity index 89%
rename from src/main/java/gg/archipelago/client/parts/Version.java
rename to src/main/java/dev/koifysh/archipelago/parts/Version.java
index 59d27ba..eed4df7 100644
--- a/src/main/java/gg/archipelago/client/parts/Version.java
+++ b/src/main/java/dev/koifysh/archipelago/parts/Version.java
@@ -1,4 +1,4 @@
-package gg.archipelago.client.parts;
+package dev.koifysh.archipelago.parts;
import com.google.gson.annotations.SerializedName;
diff --git a/src/main/java/gg/archipelago/client/ItemFlags.java b/src/main/java/gg/archipelago/client/ItemFlags.java
deleted file mode 100644
index c2d3e02..0000000
--- a/src/main/java/gg/archipelago/client/ItemFlags.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package gg.archipelago.client;
-
-public class ItemFlags {
-
- //Indicates you get items sent from other worlds.
- public static final int SEND_ITEMS = 0b001;
-
- //send your own items to you (remote items game)
- public static final int SEND_OWN_ITEMS = 0b010;
-
- //send starting inventory upon connect
- public static final int SEND_STARTING_INVENTORY = 0b100;
-
-}
diff --git a/src/main/java/gg/archipelago/client/events/Event.java b/src/main/java/gg/archipelago/client/events/Event.java
deleted file mode 100644
index 0f1c503..0000000
--- a/src/main/java/gg/archipelago/client/events/Event.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package gg.archipelago.client.events;
-
-public interface Event {
-}
diff --git a/src/main/java/gg/archipelago/client/network/DataStorageOperation.java b/src/main/java/gg/archipelago/client/network/DataStorageOperation.java
deleted file mode 100644
index d8251b0..0000000
--- a/src/main/java/gg/archipelago/client/network/DataStorageOperation.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package gg.archipelago.client.network;
-
-
diff --git a/src/main/java/gg/archipelago/client/network/client/GetDataPackagePacket.java b/src/main/java/gg/archipelago/client/network/client/GetDataPackagePacket.java
deleted file mode 100644
index 2d6c77f..0000000
--- a/src/main/java/gg/archipelago/client/network/client/GetDataPackagePacket.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package gg.archipelago.client.network.client;
-
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-
-import java.util.Set;
-
-public class GetDataPackagePacket extends APPacket {
-
- Set exclusions;
-
- public GetDataPackagePacket() {
- this(null);
- }
-
- public GetDataPackagePacket(Set exclusions) {
- super(APPacketType.GetDataPackage);
- this.exclusions = exclusions;
- }
-}
diff --git a/src/main/java/gg/archipelago/client/network/client/SyncPacket.java b/src/main/java/gg/archipelago/client/network/client/SyncPacket.java
deleted file mode 100644
index 378c985..0000000
--- a/src/main/java/gg/archipelago/client/network/client/SyncPacket.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package gg.archipelago.client.network.client;
-
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-
-public class SyncPacket extends APPacket {
-
-
- public SyncPacket() {
- super(APPacketType.Sync);
- }
-}
diff --git a/src/main/java/gg/archipelago/client/network/server/JsonPrintPacket.java b/src/main/java/gg/archipelago/client/network/server/JsonPrintPacket.java
deleted file mode 100644
index 123c891..0000000
--- a/src/main/java/gg/archipelago/client/network/server/JsonPrintPacket.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package gg.archipelago.client.network.server;
-
-import gg.archipelago.client.Print.APPrintPart;
-import gg.archipelago.client.network.APPacket;
-import gg.archipelago.client.network.APPacketType;
-
-public class JsonPrintPacket extends APPacket {
- APPrintPart[] parts;
-
- public JsonPrintPacket() {
- super(APPacketType.PrintJSON);
- }
-}
diff --git a/src/main/java/gg/archipelago/client/parts/DataPackage.java b/src/main/java/gg/archipelago/client/parts/DataPackage.java
deleted file mode 100644
index 27a6af3..0000000
--- a/src/main/java/gg/archipelago/client/parts/DataPackage.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package gg.archipelago.client.parts;
-
-import com.google.gson.annotations.Expose;
-import com.google.gson.annotations.SerializedName;
-
-import java.io.Serializable;
-import java.util.*;
-
-public class DataPackage implements Serializable {
-
- @Expose
- @SerializedName("games")
- HashMap games = new HashMap<>();
-
- @Expose
- @SerializedName("version")
- int version = -1;
-
- HashMap itemIdToName = new HashMap<>();
-
- HashMap locationIdToName = new HashMap<>();
-
- public String uuid = UUID.randomUUID().toString();
-
- public String getItem(long itemID) {
- if(!itemIdToName.containsKey(itemID)) {
- return String.format("Unknown Item [%d]", itemID);
- }
-
- return itemIdToName.get(itemID);
- }
-
- public String getLocation(long locationID) {
- if(!locationIdToName.containsKey(locationID))
- return String.format("Unknown Location [%d]", locationID);
-
- return locationIdToName.get(locationID);
- }
-
- public Map getVersions() {
- HashMap versions = new HashMap<>();
- games.forEach((key, value) -> versions.put(key, value.version));
- return versions;
- }
-
- public HashMap getGames() {
- return games;
- }
-
- public HashMap getItems() {
- return itemIdToName;
- }
-
- public HashMap getItemsForGame(String game) {
- HashMap ret = new HashMap<>();
- for (Map.Entry gameEntry : games.entrySet()) {
- if(!gameEntry.getKey().equals(game)) continue;
- for (Map.Entry items : gameEntry.getValue().itemNameToId.entrySet()) {
- ret.put(items.getValue(), items.getKey());
- }
- }
- return ret;
- }
-
- public HashMap getLocations() {
- return locationIdToName;
- }
-
- public HashMap getLocationsForGame(String game) {
- HashMap ret = new HashMap<>();
- for (Map.Entry gameEntry : games.entrySet()) {
- if(!gameEntry.getKey().equals(game)) continue;
- for (Map.Entry locations : gameEntry.getValue().locationNameToId.entrySet()) {
- ret.put(locations.getValue(), locations.getKey());
- }
- }
- return ret;
- }
-
- public int getVersion() {
- return version;
- }
-
- public String getUUID() {
- return uuid;
- }
-
- public void update(DataPackage newData) {
- games.putAll(newData.getGames());
- buildItemsMap();
- buildLocationsMap();
- version = newData.version;
- }
-
- private void buildItemsMap() {
- for (Map.Entry gameEntry : games.entrySet()) {
- for (Map.Entry items : gameEntry.getValue().itemNameToId.entrySet()) {
- itemIdToName.put(items.getValue(), items.getKey());
- }
- }
- }
-
- private void buildLocationsMap() {
- locationIdToName.clear();
-
- for (Map.Entry gameEntry : games.entrySet()) {
- for (Map.Entry locations : gameEntry.getValue().locationNameToId.entrySet()) {
- locationIdToName.put(locations.getValue(), locations.getKey());
- }
- }
- }
-}
diff --git a/src/main/java/gg/archipelago/client/parts/Game.java b/src/main/java/gg/archipelago/client/parts/Game.java
deleted file mode 100644
index 1c4a62c..0000000
--- a/src/main/java/gg/archipelago/client/parts/Game.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package gg.archipelago.client.parts;
-
-import com.google.gson.annotations.SerializedName;
-
-import java.io.Serializable;
-import java.util.HashMap;
-
-public class Game implements Serializable {
-
- @SerializedName("version")
- public int version;
-
- @SerializedName("hash")
- public String hash;
-
- @SerializedName("item_name_to_id")
- public HashMap itemNameToId = new HashMap<>();
-
- @SerializedName("location_name_to_id")
- public HashMap locationNameToId = new HashMap<>();
-}