Compare commits
22 commits
v1.3.1-pre
...
master
Author | SHA1 | Date | |
---|---|---|---|
53572b6e84 | |||
4792caa473 | |||
263308e4a1 | |||
![]() |
5643a2dbcc | ||
a3035fadcd | |||
![]() |
8ded7e50d5 | ||
13613d0003 | |||
022b9b7390 | |||
![]() |
053486a22a | ||
![]() |
003380f696 | ||
![]() |
cfb01a4205 | ||
a017d6988a | |||
77f01b8596 | |||
ee3485783e | |||
8f5eec5b02 | |||
c3947d8fb3 | |||
![]() |
eb74d01183 | ||
f6a3d3272f | |||
ca02eb69a5 | |||
68594537d1 | |||
![]() |
f641916e24 | ||
0e2a366fbb |
82 changed files with 10993 additions and 619 deletions
38
.forgejo/workflows/build.yaml
Normal file
38
.forgejo/workflows/build.yaml
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: docker
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: make gradle wrapper executable
|
||||||
|
run: chmod +x ./gradlew
|
||||||
|
|
||||||
|
- name: set up jdk
|
||||||
|
run: |
|
||||||
|
INSTALL_DIR="/opt/java"
|
||||||
|
mkdir -p "$INSTALL_DIR"
|
||||||
|
|
||||||
|
JDK8_URL="https://cdn.azul.com/zulu/bin/zulu8.84.0.15-ca-jdk8.0.442-linux_x64.tar.gz"
|
||||||
|
JRE17_URL="https://cdn.azul.com/zulu/bin/zulu17.56.15-ca-jre17.0.14-linux_x64.tar.gz"
|
||||||
|
|
||||||
|
echo "Downloading JDK8 from $JDK8_URL"
|
||||||
|
curl -L "$JDK8_URL" | tar -xz -C "$INSTALL_DIR"
|
||||||
|
|
||||||
|
echo "Downloading JRE17 from $JRE17_URL"
|
||||||
|
curl -L "$JRE17_URL" | tar -xz -C "$INSTALL_DIR"
|
||||||
|
|
||||||
|
- name: build
|
||||||
|
run: JDK8=/opt/java/zulu8.84.0.15-ca-jdk8.0.442-linux_x64 JAVA_HOME=/opt/java/zulu17.56.15-ca-jre17.0.14-linux_x64 ./gradlew build
|
||||||
|
|
||||||
|
- name: capture build artifacts
|
||||||
|
uses: https://code.forgejo.org/forgejo/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: Artifacts
|
||||||
|
path: 'build/libs'
|
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
gradlew* linguist-vendored
|
||||||
|
gradle/wrapper/* linguist-vendored
|
||||||
|
*.bat text eol=crlf
|
||||||
|
|
22
.github/workflows/build.yml
vendored
22
.github/workflows/build.yml
vendored
|
@ -1,22 +0,0 @@
|
||||||
name: Run Gradle Build
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
gradle:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout source
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- uses: actions/setup-java@v3
|
|
||||||
name: Setup Java
|
|
||||||
with:
|
|
||||||
distribution: temurin
|
|
||||||
java-version: 17
|
|
||||||
- name: Setup Gradle
|
|
||||||
uses: gradle/gradle-build-action@v2
|
|
||||||
- name: Execute Gradle build
|
|
||||||
run: ./gradlew build
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
name: Upload built mod JAR
|
|
||||||
with:
|
|
||||||
name: latest-autobuild
|
|
||||||
path: build/libs/*.jar
|
|
10
.github/workflows/gradle-wrapper-validation.yml
vendored
10
.github/workflows/gradle-wrapper-validation.yml
vendored
|
@ -1,10 +0,0 @@
|
||||||
name: "Validate Gradle Wrapper"
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
validation:
|
|
||||||
name: "Validation"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: gradle/wrapper-validation-action@v1
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,6 +1,3 @@
|
||||||
.idea/
|
|
||||||
.vscode/
|
|
||||||
run/
|
run/
|
||||||
build/
|
build/
|
||||||
.gradle/
|
.gradle/
|
||||||
|
|
||||||
|
|
73
README.md
73
README.md
|
@ -1,53 +1,80 @@
|
||||||
# zombies-utils
|
# zombies-utils
|
||||||
##### Download latest release: [v1.3.0-pre5](https://github.com/Stachelbeere1248/zombies-utils/releases/tag/v1.3.0-pre5).
|
|
||||||
|
##### Download the latest release [here](https://github.com/Stachelbeere1248/zombies-utils/releases/latest)
|
||||||
|
|
||||||
Hello, I am currently working on this mod. More features will come. For now it has:
|
Hello, I am currently working on this mod. More features will come. For now it has:
|
||||||
|
|
||||||
- An accurate timer + Automatic splitting
|
- An accurate timer + Automatic splitting
|
||||||
- Tracking of splits & segment PBs (with custom categories)
|
- Tracking of splits & segment PBs (with custom categories)
|
||||||
- SLA hud
|
- SLA hud
|
||||||
- A chat macro
|
- A chat macro
|
||||||
- Spawn-times HUD (no aa colors yet, but Rocket Launcher mode)
|
- Spawn-times HUD: visual, auditory, RL-mode
|
||||||
|
- Player Visibility
|
||||||
|
|
||||||
#### Disclaimers
|
#### Disclaimers
|
||||||
|
|
||||||
- If you are using a Hypixel language other than the selected one the mod may not work entirely. Check config.
|
- If you are using a Hypixel language other than the selected one the mod may not work entirely. Check config.
|
||||||
|
|
||||||
## For Users
|
## For Users
|
||||||
The timer automatically splits every round. The PB/Segment recorder automatically distinguishes maps and difficulties, but not player count.
|
|
||||||
|
The timer automatically splits every round. The PB/Segment recorder automatically distinguishes maps and difficulties,
|
||||||
|
but not player count.
|
||||||
|
|
||||||
### Config
|
### Config
|
||||||
- Language: The selected Hypixel language. Currently supports EN,FR,DE.
|
|
||||||
- Timer:
|
- `Language`: The selected Hypixel language. Currently supports EN,FR,DE.
|
||||||
- Default Category: The record-category to be selected when starting the game.
|
- ###### Timer:
|
||||||
- Paste Delta: Whether to include +- relative to PB when clicking the round summaries to paste it in chat.
|
- `Default Category`: The record-category to be selected when starting the game.
|
||||||
- PB Announcements: Whether to show **\*\*\*NEW PERSONAL BEST\*\*\*** on PB in summaries.
|
- `PB Announcements`: Whether to show **\*\*\*NEW PERSONAL BEST\*\*\*** on PB in summaries.
|
||||||
- SST:
|
- ###### SST:
|
||||||
- Enabled: Enables / disables this feature.
|
- `Enabled`: Enables / disables this feature.
|
||||||
- Auditory: A List of tick offsets that a sound should be played. Default (-40, -20, 0) means 2s and 1s in advance, as well as on spawn.
|
- `Auditory`: A List of tick offsets that a sound should be played. Default (-40, -20, 0) means 2s and 1s in
|
||||||
- RL pre-timing: During RL mode, how much SST times sohuld be offsetted. Defaults to 1.4s earlier. Affects HUD as well as auditory.
|
advance, as well as on spawn.
|
||||||
- Truncate: Whether to show passed rounds in the HUD.
|
- `RL pre-timing`: During RL mode, how much SST times sohuld be offsetted. Defaults to 1.4s earlier. Affects HUD as
|
||||||
- SLA:
|
well as auditory.
|
||||||
- Enabled: Whether the SLA HUD should automatically be shown when starting a game.
|
- `Truncate`: Whether to show passed rounds in the HUD.
|
||||||
- Truncate: Whether inactive windows and rooms should be shown.
|
- ###### SLA:
|
||||||
- Macro Message: The Message to be sent when pressing the Chat Macro Key. Do NOT use "§" as symbol.
|
- `Enabled`: Whether the SLA HUD should automatically be shown when starting a game.
|
||||||
- Player Visibility: Whether to enable PlayerVisibility by default.
|
- `Truncate`: Whether inactive windows and rooms should be shown.
|
||||||
- CPS Counter: A simple CPS Counter which shows the amount of clicks within the last 20 gameticks.
|
- ###### Player Visibility:
|
||||||
|
- `Enabled`: Whether to enable PlayerVisibility by default.
|
||||||
|
- `Range`: The range within which players are hidden while enabled.
|
||||||
|
- `Macro Message`: The Message to be sent when pressing the Chat Macro Key. Do NOT use "§" as symbol.
|
||||||
|
- `CPS Counter`: A simple CPS Counter which shows the amount of clicks within the last 20 gameticks.
|
||||||
|
|
||||||
### Commands
|
### Commands
|
||||||
- /category \<name> - Switches to the category called name. All recorded times are bound to its category. Tabcomplete suggests already existing categories, but you can insert a new (clean) one as well.
|
|
||||||
|
- /category \<name> - Switches to the category called name. All recorded times are bound to its category. Tabcomplete
|
||||||
|
suggests already existing categories, but you can insert a new (clean) one as well.
|
||||||
- Examples:
|
- Examples:
|
||||||
- /category pistol_only
|
- /category pistol_only
|
||||||
- /category no_doors_solo
|
- /category no_doors_solo
|
||||||
- note: you do NOT need to make your own categories to seperate difficulties or map
|
- note: you do NOT need to make your own categories to seperate difficulties or map
|
||||||
- /sla \<off|map|quick|rotate|mirror|offset>
|
- /sla \<off|map|quick|rotate|mirror|offset>
|
||||||
- /sla off - Disables the SLA hud
|
- /sla off - Disables the SLA hud
|
||||||
- /sla map \<de|bb|aa> - forcefully set the map
|
- /sla map \<de|bb|aa|p> - forcefully set the map
|
||||||
- /sla quick \<mogi_a|ghxula|ghxula-garden>
|
- /sla quick \<mogi_a|ghxula|ghxula-garden>
|
||||||
|
- useless for most players:
|
||||||
- /sla rotate - rotates all windows around the axis (0,y,0)
|
- /sla rotate - rotates all windows around the axis (0,y,0)
|
||||||
- /sla mirror \<x|z> - mirrors all windows along the plane (0,y,z) or (x,y,0)
|
- /sla mirror \<x|z> - mirrors all windows along the plane (0,y,z) or (x,y,0)
|
||||||
- /sla offset \<x> \<y> \<z> - set an offset, allowing you to use sla on map-recreations, such as housings
|
- /sla offset \<x> \<y> \<z> - set an offset, allowing you to use sla on map-recreations, such as housings
|
||||||
- /zombiesutils \<timer>
|
- /zombiesutils \<timer>
|
||||||
- /zombiesutils timer \<kill|split>
|
- /zombiesutils timer \<kill|split>
|
||||||
- /zombiesutils timer kill - Stops the running timer completely
|
- /zombiesutils timer kill - Stops the running timer completely
|
||||||
- /zombiesutils timer split \<round> - Splits as if \<round> was passed, not recommended to use as it might create impossible PBs.
|
- /zombiesutils timer split \<round> - Splits as if \<round> was passed, not recommended to use as it might
|
||||||
|
create impossible PBs.
|
||||||
- /qz \<de|bb|aa|p> - sends you to a new game of Dead End, Bad Blood, Alien Arcadium or Prison
|
- /qz \<de|bb|aa|p> - sends you to a new game of Dead End, Bad Blood, Alien Arcadium or Prison
|
||||||
|
|
||||||
### Hotkeys
|
### Hotkeys
|
||||||
|
|
||||||
- Chat Macro: Sends the message specified in the config.
|
- Chat Macro: Sends the message specified in the config.
|
||||||
- RL Mode: Toggles usage of the rocket launcher mode spawn-time offset.
|
- RL Mode: Toggles usage of the rocket launcher mode spawn-time offset.
|
||||||
- Player Visibility: Toggles whether to show players that are within a 4 block radius.
|
- Player Visibility: Toggles whether to show players that are within a 4 block radius.
|
||||||
|
|
||||||
### Extra
|
### Extra
|
||||||
- Managing split-categories: In your game directory is a folder called "zombies" which contains the folder "splits". You can simply rename or delete the folders inside "splits". You can also edit your splits, the data is stored as a list of ticks inside the MAP_DIFFICULTY.times files, a simple text editor (such as Notepad on Windows) should be able to edit it (UTF-16 encoded text). The other subfolder, runs, logs all the splits for every run you play.
|
|
||||||
|
- Managing split-categories: In your game directory (aka `.minecraft`) is a folder called `zombies` which contains the
|
||||||
|
folder `splits`. You can simply rename or delete the folders inside `splits`, they represent your categories. You can
|
||||||
|
also edit your splits, the data is stored as a list of ticks inside the `MAP_DIFFICULTY.times` files, a simple text
|
||||||
|
editor (such as Notepad on Windows) should be able to edit it (UTF-16 encoded text). The other subfolder, runs, logs
|
||||||
|
all the splits for every run you play.
|
||||||
|
|
1
TODO.md
1
TODO.md
|
@ -1 +0,0 @@
|
||||||
- Distinguishing Escape
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import org.apache.commons.lang3.SystemUtils
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
idea
|
idea
|
||||||
java
|
java
|
||||||
|
@ -8,11 +10,12 @@ plugins {
|
||||||
|
|
||||||
//Constants:
|
//Constants:
|
||||||
|
|
||||||
val baseGroup = "com.github.stachelbeere1248.zombiesutils"
|
val baseGroup: String by project
|
||||||
val mcVersion: String by project
|
val mcVersion: String by project
|
||||||
val version: String by project
|
val version: String by project
|
||||||
val mixinGroup = "$baseGroup.mixin"
|
val mixinGroup = "$baseGroup.mixin"
|
||||||
val modid: String by project
|
val modid: String by project
|
||||||
|
val transformerFile = file("src/main/resources/accesstransformer.cfg")
|
||||||
|
|
||||||
// Toolchains:
|
// Toolchains:
|
||||||
java {
|
java {
|
||||||
|
@ -26,14 +29,26 @@ loom {
|
||||||
"client" {
|
"client" {
|
||||||
// If you don't want mixins, remove these lines
|
// If you don't want mixins, remove these lines
|
||||||
property("mixin.debug", "true")
|
property("mixin.debug", "true")
|
||||||
property("asmhelper.verbose", "true")
|
|
||||||
arg("--tweakClass", "org.spongepowered.asm.launch.MixinTweaker")
|
arg("--tweakClass", "org.spongepowered.asm.launch.MixinTweaker")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
runConfigs {
|
||||||
|
"client" {
|
||||||
|
if (SystemUtils.IS_OS_MAC_OSX) {
|
||||||
|
// This argument causes a crash on macOS
|
||||||
|
vmArgs.remove("-XstartOnFirstThread")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
remove(getByName("server"))
|
||||||
|
}
|
||||||
forge {
|
forge {
|
||||||
pack200Provider.set(dev.architectury.pack200.java.Pack200Adapter())
|
pack200Provider.set(dev.architectury.pack200.java.Pack200Adapter())
|
||||||
// If you don't want mixins, remove this lines
|
// If you don't want mixins, remove this lines
|
||||||
mixinConfig("mixins.$modid.json")
|
mixinConfig("mixins.$modid.json")
|
||||||
|
if (transformerFile.exists()) {
|
||||||
|
println("Installing access transformer")
|
||||||
|
accessTransformer(transformerFile)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// If you don't want mixins, remove these lines
|
// If you don't want mixins, remove these lines
|
||||||
mixin {
|
mixin {
|
||||||
|
@ -50,8 +65,6 @@ sourceSets.main {
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven("https://repo.spongepowered.org/maven/")
|
maven("https://repo.spongepowered.org/maven/")
|
||||||
// If you don't want to log in with your real minecraft account, remove this line
|
|
||||||
maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val shadowImpl: Configuration by configurations.creating {
|
val shadowImpl: Configuration by configurations.creating {
|
||||||
|
@ -68,10 +81,6 @@ dependencies {
|
||||||
isTransitive = false
|
isTransitive = false
|
||||||
}
|
}
|
||||||
annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT")
|
annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT")
|
||||||
|
|
||||||
// If you don't want to log in with your real minecraft account, remove this line
|
|
||||||
runtimeOnly("me.djtheredstoner:DevAuth-forge-legacy:1.1.2")
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tasks:
|
// Tasks:
|
||||||
|
@ -80,7 +89,7 @@ tasks.withType(JavaCompile::class) {
|
||||||
options.encoding = "UTF-8"
|
options.encoding = "UTF-8"
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(Jar::class) {
|
tasks.withType(org.gradle.jvm.tasks.Jar::class) {
|
||||||
archiveBaseName.set(modid)
|
archiveBaseName.set(modid)
|
||||||
manifest.attributes.run {
|
manifest.attributes.run {
|
||||||
this["FMLCorePluginContainsFMLMod"] = "true"
|
this["FMLCorePluginContainsFMLMod"] = "true"
|
||||||
|
@ -89,6 +98,8 @@ tasks.withType(Jar::class) {
|
||||||
// If you don't want mixins, remove these lines
|
// If you don't want mixins, remove these lines
|
||||||
this["TweakClass"] = "org.spongepowered.asm.launch.MixinTweaker"
|
this["TweakClass"] = "org.spongepowered.asm.launch.MixinTweaker"
|
||||||
this["MixinConfigs"] = "mixins.$modid.json"
|
this["MixinConfigs"] = "mixins.$modid.json"
|
||||||
|
if (transformerFile.exists())
|
||||||
|
this["FMLAT"] = "${modid}_at.cfg"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,13 +107,13 @@ tasks.processResources {
|
||||||
inputs.property("version", project.version)
|
inputs.property("version", project.version)
|
||||||
inputs.property("mcversion", mcVersion)
|
inputs.property("mcversion", mcVersion)
|
||||||
inputs.property("modid", modid)
|
inputs.property("modid", modid)
|
||||||
inputs.property("mixinGroup", mixinGroup)
|
inputs.property("basePackage", baseGroup)
|
||||||
|
|
||||||
filesMatching(listOf("mcmod.info", "mixins.$modid.json")) {
|
filesMatching(listOf("mcmod.info", "mixins.$modid.json")) {
|
||||||
expand(inputs.properties)
|
expand(inputs.properties)
|
||||||
}
|
}
|
||||||
|
|
||||||
rename("(.+_at.cfg)", "META-INF/$1")
|
rename("accesstransformer.cfg", "META-INF/${modid}_at.cfg")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -114,16 +125,16 @@ val remapJar by tasks.named<net.fabricmc.loom.task.RemapJarTask>("remapJar") {
|
||||||
|
|
||||||
tasks.jar {
|
tasks.jar {
|
||||||
archiveClassifier.set("without-deps")
|
archiveClassifier.set("without-deps")
|
||||||
destinationDirectory.set(layout.buildDirectory.dir("badjars"))
|
destinationDirectory.set(layout.buildDirectory.dir("intermediates"))
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.shadowJar {
|
tasks.shadowJar {
|
||||||
destinationDirectory.set(layout.buildDirectory.dir("badjars"))
|
destinationDirectory.set(layout.buildDirectory.dir("intermediates"))
|
||||||
archiveClassifier.set("all-dev")
|
archiveClassifier.set("non-obfuscated-with-deps")
|
||||||
configurations = listOf(shadowImpl)
|
configurations = listOf(shadowImpl)
|
||||||
doLast {
|
doLast {
|
||||||
configurations.forEach {
|
configurations.forEach {
|
||||||
println("Copying jars into mod: ${it.files}")
|
println("Copying dependencies into mod: ${it.files}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
loom.platform=forge
|
loom.platform=forge
|
||||||
org.gradle.jvmargs=-Xmx2g
|
org.gradle.jvmargs=-Xmx2g
|
||||||
baseGroup = com.github.stachelbeere1248.zombiesutils
|
baseGroup = xyz.stachel.zombiesutils
|
||||||
mcVersion = 1.8.9
|
mcVersion = 1.8.9
|
||||||
modid = zombiesutils
|
modid = zombiesutils
|
||||||
version = 1.3.1-PREVIEW_4
|
version = 1.4.0
|
||||||
|
org.gradle.java.installations.fromEnv=JDK8,JRE17
|
||||||
|
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|
19
gradlew
vendored
19
gradlew
vendored
|
@ -55,7 +55,7 @@
|
||||||
# Darwin, MinGW, and NonStop.
|
# Darwin, MinGW, and NonStop.
|
||||||
#
|
#
|
||||||
# (3) This script is generated from the Groovy template
|
# (3) This script is generated from the Groovy template
|
||||||
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||||
# within the Gradle project.
|
# within the Gradle project.
|
||||||
#
|
#
|
||||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||||
|
@ -83,7 +83,8 @@ done
|
||||||
# This is normally unused
|
# This is normally unused
|
||||||
# shellcheck disable=SC2034
|
# shellcheck disable=SC2034
|
||||||
APP_BASE_NAME=${0##*/}
|
APP_BASE_NAME=${0##*/}
|
||||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||||
|
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
MAX_FD=maximum
|
MAX_FD=maximum
|
||||||
|
@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||||
case $MAX_FD in #(
|
case $MAX_FD in #(
|
||||||
max*)
|
max*)
|
||||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||||
# shellcheck disable=SC3045
|
# shellcheck disable=SC2039,SC3045
|
||||||
MAX_FD=$( ulimit -H -n ) ||
|
MAX_FD=$( ulimit -H -n ) ||
|
||||||
warn "Could not query maximum file descriptor limit"
|
warn "Could not query maximum file descriptor limit"
|
||||||
esac
|
esac
|
||||||
|
@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||||
'' | soft) :;; #(
|
'' | soft) :;; #(
|
||||||
*)
|
*)
|
||||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||||
# shellcheck disable=SC3045
|
# shellcheck disable=SC2039,SC3045
|
||||||
ulimit -n "$MAX_FD" ||
|
ulimit -n "$MAX_FD" ||
|
||||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||||
esac
|
esac
|
||||||
|
@ -201,11 +202,11 @@ fi
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
# 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"'
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
# Collect all arguments for the java command;
|
# Collect all arguments for the java command:
|
||||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||||
# shell script including quotes and variable substitutions, so put them in
|
# and any embedded shellness will be escaped.
|
||||||
# double quotes to make sure that they get re-expanded; and
|
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||||
# * put everything else in single quotes, so that it's not re-expanded.
|
# treated as '${Hostname}' itself on the command line.
|
||||||
|
|
||||||
set -- \
|
set -- \
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||||
|
|
20
gradlew.bat
vendored
20
gradlew.bat
vendored
|
@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
if %ERRORLEVEL% equ 0 goto execute
|
if %ERRORLEVEL% equ 0 goto execute
|
||||||
|
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||||
echo location of your Java installation.
|
echo location of your Java installation. 1>&2
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
|
@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto execute
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||||
echo location of your Java installation.
|
echo location of your Java installation. 1>&2
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ pluginManagement {
|
||||||
maven("https://maven.fabricmc.net")
|
maven("https://maven.fabricmc.net")
|
||||||
maven("https://maven.minecraftforge.net/")
|
maven("https://maven.minecraftforge.net/")
|
||||||
maven("https://repo.spongepowered.org/maven/")
|
maven("https://repo.spongepowered.org/maven/")
|
||||||
maven("https://repo.sk1er.club/repository/maven-releases/")
|
maven("https://repo.essential.gg/repository/maven-releases/")
|
||||||
}
|
}
|
||||||
resolutionStrategy {
|
resolutionStrategy {
|
||||||
eachPlugin {
|
eachPlugin {
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.game;
|
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public class GameMode {
|
|
||||||
private final Map map;
|
|
||||||
private Difficulty difficulty;
|
|
||||||
|
|
||||||
public GameMode(@NotNull Map map) {
|
|
||||||
this.map = map;
|
|
||||||
this.difficulty = Difficulty.NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameMode(@NotNull Map map, @NotNull Difficulty difficulty) {
|
|
||||||
this.map = map;
|
|
||||||
this.difficulty = difficulty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map getMap() {
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Difficulty getDifficulty() {
|
|
||||||
return difficulty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void changeDifficulty(@NotNull Difficulty difficulty) {
|
|
||||||
switch (map) {
|
|
||||||
case DEAD_END:
|
|
||||||
case BAD_BLOOD:
|
|
||||||
case PRISON:
|
|
||||||
this.difficulty = difficulty;
|
|
||||||
break;
|
|
||||||
case ALIEN_ARCADIUM:
|
|
||||||
throw new RuntimeException("Achievement Get: Alien Arcadium Hard/RIP" + Map.ALIEN_ARCADIUM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean is(Map map, Difficulty difficulty) {
|
|
||||||
return this.getDifficulty() == difficulty && this.getMap() == map;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.game.waves;
|
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.util.ChatComponentText;
|
|
||||||
import org.jetbrains.annotations.Contract;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
@SuppressWarnings("DuplicatedCode")
|
|
||||||
public class Waves {
|
|
||||||
private static final byte[][]
|
|
||||||
deadEndWaveTimes = {{10, 20}, {10, 20}, {10, 20, 35}, {10, 20, 35}, {10, 22, 37}, {10, 22, 44}, {10, 25, 47}, {10, 25, 50}, {10, 22, 38}, {10, 24, 45}, {10, 25, 48}, {10, 25, 50}, {10, 25, 50}, {10, 25, 45}, {10, 25, 46}, {10, 24, 47}, {10, 24, 47}, {10, 24, 47}, {10, 24, 47}, {10, 24, 49}, {10, 23, 44}, {10, 23, 45}, {10, 23, 42}, {10, 23, 43}, {10, 23, 43}, {10, 23, 36}, {10, 24, 44}, {10, 24, 42}, {10, 24, 42}, {10, 24, 45}},
|
|
||||||
badBloodWaveTimes = {{10, 22}, {10, 22}, {10, 22}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34}, {10, 24, 38}, {10, 24, 38}, {10, 22, 34}, {10, 24, 38}, {10, 22, 34}},
|
|
||||||
alienArcadiumWaveTimes = {{10, 13, 16, 19}, {10, 14, 18, 22}, {10, 13, 16, 19}, {10, 14, 17, 21, 25, 28}, {10, 14, 18, 22, 26, 30}, {10, 14, 19, 23, 28, 32}, {10, 15, 19, 23, 27, 31}, {10, 15, 20, 25, 30, 35}, {10, 14, 19, 23, 28, 32}, {10, 16, 22, 27, 33, 38}, {10, 16, 21, 27, 32, 38}, {10, 16, 22, 28, 34, 40}, {10, 16, 22, 28, 34, 40}, {10, 16, 21, 26, 31, 36}, {10, 17, 24, 31, 38, 46}, {10, 16, 22, 27, 33, 38}, {10, 14, 19, 23, 28, 32}, {10, 14, 19, 23, 28, 32}, {10, 14, 18, 22, 26, 30}, {10, 15, 21, 26, 31, 36}, {10, 14, 19, 23, 28, 32}, {10, 14, 19, 23, 28, 34}, {10, 14, 18, 22, 26, 30}, {10, 14, 19, 23, 28, 32}, {10}, {10, 23, 36}, {10, 22, 34}, {10, 20, 30}, {10, 24, 38}, {10, 22, 34}, {10, 22, 34}, {10, 21, 32}, {10, 22, 34}, {10, 22, 34}, {10}, {10, 22, 34}, {10, 20, 31}, {10, 22, 34}, {10, 22, 34}, {10, 22, 34, 37, 45}, {10, 21, 32}, {10, 22, 34}, {10, 13, 22, 25, 34, 37}, {10, 22, 34}, {10, 22, 34, 35}, {10, 21, 32, 35}, {10, 20, 30}, {10, 20, 30, 33}, {10, 21, 32}, {10, 22, 34, 37}, {10, 20, 30, 33}, {10, 22, 34, 37}, {10, 22, 34, 37}, {10, 20, 32, 35, 39}, {10, 16, 22, 28, 34, 40}, {10, 14, 18}, {10, 14, 18}, {10, 22, 34, 37, 38}, {10, 14, 18, 22, 26, 30}, {10, 20, 30, 33}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 27, 32}, {10, 14, 18, 22, 27, 32}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {10, 14, 18, 22, 26, 30}, {5}, {5}, {5}, {5}, {5}},
|
|
||||||
prisonWaveTimes = {{10, 20}, {10, 20, 30}, {10, 17, 24, 31}, {10, 17, 24, 31}, {10, 20, 30}, {10, 20, 30}, {10, 20, 30}, {10, 25, 40}, {10, 25, 35}, {10, 25, 45}, {10, 25, 40}, {10, 25, 37}, {10, 22, 34}, {10, 25, 37}, {10, 25, 40}, {10, 22, 37}, {10, 22, 42}, {10, 25, 45}, {10, 25, 45}, {10, 25, 40}, {10, 20, 35, 55, 75}, {10, 25, 40}, {10, 30, 50}, {10, 30, 50}, {10, 25, 45}, {10, 30, 50}, {10, 25, 45}, {10, 30, 50}, {10, 30, 55}, {10}};
|
|
||||||
|
|
||||||
@Contract(pure = true)
|
|
||||||
public static byte[] get(@NotNull Map map, int round) {
|
|
||||||
byte[] ret = new byte[]{0};
|
|
||||||
try {
|
|
||||||
switch (map) {
|
|
||||||
case DEAD_END:
|
|
||||||
ret = deadEndWaveTimes[round - 1];
|
|
||||||
break;
|
|
||||||
case BAD_BLOOD:
|
|
||||||
ret = badBloodWaveTimes[round - 1];
|
|
||||||
break;
|
|
||||||
case ALIEN_ARCADIUM:
|
|
||||||
ret = alienArcadiumWaveTimes[round - 1];
|
|
||||||
break;
|
|
||||||
case PRISON:
|
|
||||||
ret = prisonWaveTimes[round - 1];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} catch (ArrayIndexOutOfBoundsException ignored) {
|
|
||||||
Minecraft.getMinecraft().thePlayer.addChatMessage(
|
|
||||||
new ChatComponentText("Achievement get: Round " + round + " " + map)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte getLastWave(@NotNull Map map, int round) {
|
|
||||||
byte[] aByte = get(map, round);
|
|
||||||
return aByte[aByte.length - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.handlers;
|
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.timer.Timer;
|
|
||||||
import net.minecraft.entity.Entity;
|
|
||||||
import net.minecraft.entity.monster.EntityZombie;
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public class Round1Correction {
|
|
||||||
|
|
||||||
private final Timer TIMER;
|
|
||||||
|
|
||||||
public Round1Correction(Timer timer) {
|
|
||||||
TIMER = timer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public void onWaveSpawn(@NotNull EntityJoinWorldEvent event) {
|
|
||||||
final Entity entity = event.entity;
|
|
||||||
if (entity instanceof EntityZombie) {
|
|
||||||
TIMER.correctStartTick();
|
|
||||||
MinecraftForge.EVENT_BUS.unregister(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,176 +0,0 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.timer;
|
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.GameMode;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.SLA;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.handlers.Round1Correction;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.timer.recorder.Category;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.CategoryFile;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.GameFile;
|
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.event.ClickEvent;
|
|
||||||
import net.minecraft.util.ChatComponentText;
|
|
||||||
import net.minecraft.util.ChatStyle;
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
|
||||||
import org.jetbrains.annotations.Contract;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public class Game {
|
|
||||||
private final Timer TIMER;
|
|
||||||
private final GameMode GAME_MODE;
|
|
||||||
private final GameFile GAME_FILE;
|
|
||||||
private final boolean roundOneRecorded;
|
|
||||||
private int round;
|
|
||||||
private Category category;
|
|
||||||
|
|
||||||
public Game(@NotNull final Map map, final String serverNumber) {
|
|
||||||
this.GAME_MODE = new GameMode(map);
|
|
||||||
this.TIMER = new Timer();
|
|
||||||
this.GAME_FILE = new GameFile(serverNumber, map);
|
|
||||||
this.category = new Category();
|
|
||||||
this.round = 1;
|
|
||||||
this.roundOneRecorded = true;
|
|
||||||
|
|
||||||
MinecraftForge.EVENT_BUS.register(new Round1Correction(TIMER));
|
|
||||||
if (ZombiesUtils.getInstance().getConfig().isSlaToggled()) SLA.instance = new SLA(map);
|
|
||||||
}
|
|
||||||
public Game(@NotNull final Map map, final String serverNumber, final int round) {
|
|
||||||
this.GAME_MODE = new GameMode(map);
|
|
||||||
this.TIMER = new Timer();
|
|
||||||
this.GAME_FILE = new GameFile(serverNumber, map);
|
|
||||||
this.category = new Category();
|
|
||||||
this.round = round;
|
|
||||||
this.roundOneRecorded = (round == 1);
|
|
||||||
|
|
||||||
MinecraftForge.EVENT_BUS.register(new Round1Correction(TIMER));
|
|
||||||
if (ZombiesUtils.getInstance().getConfig().isSlaToggled()) SLA.instance = new SLA(map);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public Timer getTimer() {
|
|
||||||
return this.TIMER;
|
|
||||||
};
|
|
||||||
|
|
||||||
public void setCategory(Category category) {
|
|
||||||
this.category = category;
|
|
||||||
}
|
|
||||||
public int getRound() {
|
|
||||||
return round;
|
|
||||||
}
|
|
||||||
public GameMode getGameMode() {
|
|
||||||
return GAME_MODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void pass(int round) {
|
|
||||||
if ((round == 0) || (this.round == round + 1) || (this.TIMER.getRoundTime() < 100)) {
|
|
||||||
ZombiesUtils.getInstance().getLogger().debug("SPLIT CANCELLED");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
record();
|
|
||||||
} catch (Exception e) {
|
|
||||||
ZombiesUtils.getInstance().getLogger().error(ExceptionUtils.getStackTrace(e));
|
|
||||||
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("Error recording splits"));
|
|
||||||
}
|
|
||||||
this.TIMER.split();
|
|
||||||
this.round = round + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void record() {
|
|
||||||
this.compareSegment();
|
|
||||||
if (this.roundOneRecorded) this.compareBest();
|
|
||||||
this.GAME_FILE.setSegment(this.round, this.TIMER.getRoundTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String bar = "§l§a▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬";
|
|
||||||
|
|
||||||
public void compareSegment() throws IndexOutOfBoundsException {
|
|
||||||
final CategoryFile categoryFile = this.category.getByGameMode(this.GAME_MODE);
|
|
||||||
final short bestSegment = categoryFile.getBestSegment(round);
|
|
||||||
final int roundTime = this.getTimer().getRoundTime();
|
|
||||||
|
|
||||||
final String timeString = formattedTime(roundTime);
|
|
||||||
String segmentMessage = Game.bar + "\n§e Category: §d" + category.getName();
|
|
||||||
String deltaString = "";
|
|
||||||
|
|
||||||
|
|
||||||
if (bestSegment == (short) 0) {
|
|
||||||
categoryFile.setBestSegment(round, roundTime);
|
|
||||||
|
|
||||||
if (ZombiesUtils.getInstance().getConfig().getAnnouncePB())
|
|
||||||
segmentMessage += "\n§e§l***§6§l NEW BEST SEGMENT! §e§l***";
|
|
||||||
segmentMessage += "\n§cRound " + round + "§e took §a" + timeString + "§e!";
|
|
||||||
} else {
|
|
||||||
if (roundTime < bestSegment) {
|
|
||||||
if (ZombiesUtils.getInstance().getConfig().getAnnouncePB())
|
|
||||||
segmentMessage += "\n§e§l***§6§l NEW BEST SEGMENT! §e§l***";
|
|
||||||
categoryFile.setBestSegment(round, roundTime);
|
|
||||||
}
|
|
||||||
deltaString = formattedDelta(roundTime, bestSegment);
|
|
||||||
segmentMessage += "\n§cRound " + round + "§e took §a" + timeString + " §9" + deltaString;
|
|
||||||
if (ZombiesUtils.getInstance().getConfig().getCopyDelta()) deltaString = " (" + deltaString + ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
segmentMessage += "\n" + Game.bar;
|
|
||||||
final ChatComponentText message = new ChatComponentText(segmentMessage);
|
|
||||||
|
|
||||||
String copyString = String.format("Round %s took %s%s!", round, timeString, deltaString);
|
|
||||||
message.setChatStyle(new ChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, copyString)));
|
|
||||||
|
|
||||||
Minecraft.getMinecraft().thePlayer.addChatMessage(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void compareBest() throws IndexOutOfBoundsException {
|
|
||||||
final CategoryFile categoryFile = this.category.getByGameMode(this.GAME_MODE);
|
|
||||||
final int personalBest = categoryFile.getPersonalBest(round);
|
|
||||||
final int gameTime = this.TIMER.getGameTime();
|
|
||||||
String deltaString = "";
|
|
||||||
|
|
||||||
String bestMessage = Game.bar + "\n§e Category: §d" + category.getName();
|
|
||||||
final String timeString = formattedTime(gameTime);
|
|
||||||
|
|
||||||
if (personalBest == 0) {
|
|
||||||
categoryFile.setPersonalBest(round, gameTime);
|
|
||||||
|
|
||||||
if (ZombiesUtils.getInstance().getConfig().getAnnouncePB())
|
|
||||||
bestMessage += "\n§e§l***§6§l NEW PERSONAL BEST! §e§l***";
|
|
||||||
bestMessage += "\n§cRound " + round + "§e finished at §a" + timeString + "§e!";
|
|
||||||
} else {
|
|
||||||
if (gameTime < personalBest) {
|
|
||||||
if (ZombiesUtils.getInstance().getConfig().getAnnouncePB())
|
|
||||||
bestMessage += "\n§e§l***§6§l NEW PERSONAL BEST! §e§l***";
|
|
||||||
categoryFile.setPersonalBest(round, gameTime);
|
|
||||||
}
|
|
||||||
deltaString = formattedDelta(gameTime, personalBest);
|
|
||||||
bestMessage += "\n§cRound " + round + "§e finished at §a" + timeString + " §9" + deltaString;
|
|
||||||
if (ZombiesUtils.getInstance().getConfig().getCopyDelta()) deltaString = " (" + deltaString + ")";
|
|
||||||
}
|
|
||||||
bestMessage += "\n" + Game.bar;
|
|
||||||
final ChatComponentText message = new ChatComponentText(bestMessage);
|
|
||||||
|
|
||||||
String copyString = String.format("Round %s finished at %s%s!", round, timeString, deltaString);
|
|
||||||
message.setChatStyle(new ChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, copyString)));
|
|
||||||
|
|
||||||
Minecraft.getMinecraft().thePlayer.addChatMessage(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Contract(pure = true)
|
|
||||||
private String formattedTime(int gameTime) {
|
|
||||||
gameTime *= 50;
|
|
||||||
return String.format("%d:%02d.%d%d",
|
|
||||||
gameTime / 60000,
|
|
||||||
(gameTime % 60000) / 1000,
|
|
||||||
(gameTime % 1000) / 100,
|
|
||||||
(gameTime % 100) / 10
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Contract(pure = true)
|
|
||||||
private static @NotNull String formattedDelta(int newTime, int prevTime) {
|
|
||||||
final double delta = (double) (newTime - prevTime) / 20;
|
|
||||||
return String.format("%+.2f", delta);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,73 +0,0 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.timer.recorder;
|
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.GameMode;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.CategoryFile;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
public class Category {
|
|
||||||
private static String selectedCategory = ZombiesUtils.getInstance().getConfig().getDefaultCategory();
|
|
||||||
public final CategoryFile[] categoryFiles = new CategoryFile[10];
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
public Category() {
|
|
||||||
final File category;
|
|
||||||
if (ZombiesUtils.isHypixel()) category = new File(new File("zombies", "splits"), selectedCategory);
|
|
||||||
else category = new File(new File("zombies", "practise-splits"), selectedCategory);
|
|
||||||
categoryFiles[0] = new CategoryFile(category, new GameMode(Map.DEAD_END));
|
|
||||||
categoryFiles[1] = new CategoryFile(category, new GameMode(Map.DEAD_END, Difficulty.HARD));
|
|
||||||
categoryFiles[2] = new CategoryFile(category, new GameMode(Map.DEAD_END, Difficulty.RIP));
|
|
||||||
|
|
||||||
categoryFiles[3] = new CategoryFile(category, new GameMode(Map.BAD_BLOOD));
|
|
||||||
categoryFiles[4] = new CategoryFile(category, new GameMode(Map.BAD_BLOOD, Difficulty.HARD));
|
|
||||||
categoryFiles[5] = new CategoryFile(category, new GameMode(Map.BAD_BLOOD, Difficulty.RIP));
|
|
||||||
|
|
||||||
categoryFiles[6] = new CategoryFile(category, new GameMode(Map.ALIEN_ARCADIUM));
|
|
||||||
|
|
||||||
categoryFiles[7] = new CategoryFile(category, new GameMode(Map.PRISON));
|
|
||||||
categoryFiles[8] = new CategoryFile(category, new GameMode(Map.PRISON, Difficulty.HARD));
|
|
||||||
categoryFiles[9] = new CategoryFile(category, new GameMode(Map.PRISON, Difficulty.RIP));
|
|
||||||
|
|
||||||
this.name = Category.selectedCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setSelectedCategory(String selectedCategory) {
|
|
||||||
Category.selectedCategory = selectedCategory;
|
|
||||||
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(game -> game.setCategory(new Category()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String[] getCategories() {
|
|
||||||
File dir;
|
|
||||||
if (ZombiesUtils.isHypixel()) dir = new File("zombies" + File.separator + "splits");
|
|
||||||
else dir = new File("zombies" + File.separator + "practise-splits");
|
|
||||||
if (dir.isDirectory()) return dir.list();
|
|
||||||
else return new String[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
public CategoryFile getByGameMode(@NotNull GameMode gameMode) {
|
|
||||||
|
|
||||||
|
|
||||||
if (gameMode.is(Map.DEAD_END, Difficulty.NORMAL)) return categoryFiles[0];
|
|
||||||
else if (gameMode.is(Map.DEAD_END, Difficulty.HARD)) return categoryFiles[1];
|
|
||||||
else if (gameMode.is(Map.DEAD_END, Difficulty.RIP)) return categoryFiles[2];
|
|
||||||
|
|
||||||
else if (gameMode.is(Map.BAD_BLOOD, Difficulty.NORMAL)) return categoryFiles[3];
|
|
||||||
else if (gameMode.is(Map.BAD_BLOOD, Difficulty.HARD)) return categoryFiles[4];
|
|
||||||
else if (gameMode.is(Map.BAD_BLOOD, Difficulty.RIP)) return categoryFiles[5];
|
|
||||||
|
|
||||||
else if (gameMode.is(Map.ALIEN_ARCADIUM, Difficulty.NORMAL)) return categoryFiles[6];
|
|
||||||
|
|
||||||
else if (gameMode.is(Map.PRISON, Difficulty.NORMAL)) return categoryFiles[7];
|
|
||||||
else if (gameMode.is(Map.PRISON, Difficulty.HARD)) return categoryFiles[8];
|
|
||||||
else if (gameMode.is(Map.PRISON, Difficulty.RIP)) return categoryFiles[9];
|
|
||||||
else throw new IllegalStateException("Unexpected value: " + gameMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
|
22
src/main/java/xyz/stachel/zombiesutils/ResourceLoader.java
Normal file
22
src/main/java/xyz/stachel/zombiesutils/ResourceLoader.java
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class ResourceLoader {
|
||||||
|
public static Optional<JsonElement> readJsonResource(final String resourcePath) {
|
||||||
|
ResourceLocation resourceLocation = new ResourceLocation("zombiesutils", resourcePath);
|
||||||
|
try (Reader reader = new InputStreamReader(Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation).getInputStream())) {
|
||||||
|
return Optional.ofNullable(new JsonParser().parse(reader));
|
||||||
|
} catch (Exception e) {
|
||||||
|
ZombiesUtils.getInstance().getLogger().error(e.fillInStackTrace());
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ package com.github.stachelbeere1248.zombiesutils;
|
||||||
import com.github.stachelbeere1248.zombiesutils.commands.CommandRegistry;
|
import com.github.stachelbeere1248.zombiesutils.commands.CommandRegistry;
|
||||||
import com.github.stachelbeere1248.zombiesutils.config.Hotkeys;
|
import com.github.stachelbeere1248.zombiesutils.config.Hotkeys;
|
||||||
import com.github.stachelbeere1248.zombiesutils.config.ZombiesUtilsConfig;
|
import com.github.stachelbeere1248.zombiesutils.config.ZombiesUtilsConfig;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.GameData;
|
||||||
import com.github.stachelbeere1248.zombiesutils.handlers.Handlers;
|
import com.github.stachelbeere1248.zombiesutils.handlers.Handlers;
|
||||||
import com.github.stachelbeere1248.zombiesutils.timer.GameManager;
|
import com.github.stachelbeere1248.zombiesutils.timer.GameManager;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -21,6 +22,7 @@ public class ZombiesUtils {
|
||||||
private ZombiesUtilsConfig config;
|
private ZombiesUtilsConfig config;
|
||||||
private Handlers handlers;
|
private Handlers handlers;
|
||||||
private Logger logger;
|
private Logger logger;
|
||||||
|
private GameData gameData;
|
||||||
|
|
||||||
public ZombiesUtils() {
|
public ZombiesUtils() {
|
||||||
hotkeys = new Hotkeys();
|
hotkeys = new Hotkeys();
|
||||||
|
@ -40,10 +42,9 @@ public class ZombiesUtils {
|
||||||
|
|
||||||
@Mod.EventHandler
|
@Mod.EventHandler
|
||||||
public void preInit(@NotNull FMLPreInitializationEvent event) {
|
public void preInit(@NotNull FMLPreInitializationEvent event) {
|
||||||
logger = event.getModLog();
|
this.logger = event.getModLog();
|
||||||
this.config = new ZombiesUtilsConfig(new Configuration(
|
this.config = new ZombiesUtilsConfig(new Configuration(
|
||||||
event.getSuggestedConfigurationFile(),
|
event.getSuggestedConfigurationFile())
|
||||||
"1.2.4")
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +54,7 @@ public class ZombiesUtils {
|
||||||
handlers.registerAll();
|
handlers.registerAll();
|
||||||
CommandRegistry.registerAll();
|
CommandRegistry.registerAll();
|
||||||
hotkeys.registerAll();
|
hotkeys.registerAll();
|
||||||
|
gameData = new GameData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Logger getLogger() {
|
public Logger getLogger() {
|
||||||
|
@ -74,4 +76,8 @@ public class ZombiesUtils {
|
||||||
public GameManager getGameManager() {
|
public GameManager getGameManager() {
|
||||||
return gameManager;
|
return gameManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GameData getGameData() {
|
||||||
|
return gameData;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.commands;
|
package com.github.stachelbeere1248.zombiesutils.commands;
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.SLA;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.sla.QuickSLA;
|
import com.github.stachelbeere1248.zombiesutils.game.sla.QuickSLA;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.windows.SLA;
|
||||||
import net.minecraft.command.*;
|
import net.minecraft.command.*;
|
||||||
import net.minecraft.util.BlockPos;
|
import net.minecraft.util.BlockPos;
|
||||||
import net.minecraft.util.ChatComponentText;
|
import net.minecraft.util.ChatComponentText;
|
||||||
|
@ -21,7 +21,7 @@ public class SlaCommand extends CommandBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCommandUsage(ICommandSender sender) {
|
public String getCommandUsage(ICommandSender sender) {
|
||||||
return "/sla off\n/sla offset [x] [x] [x]\n/sla rotate\n/sla mirror\n/sla map <de|bb|aa>\n/sla quick";
|
return "/sla off\n/sla offset [x] [x] [x]\n/sla rotate\n/sla mirror\n/sla map <de|bb|aa|p>\n/sla quick";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -83,9 +83,12 @@ public class SlaCommand extends CommandBase {
|
||||||
case "aa":
|
case "aa":
|
||||||
SLA.instance = new SLA(Map.ALIEN_ARCADIUM);
|
SLA.instance = new SLA(Map.ALIEN_ARCADIUM);
|
||||||
break;
|
break;
|
||||||
|
case "p":
|
||||||
|
SLA.instance = new SLA(Map.PRISON);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new WrongUsageException(
|
throw new WrongUsageException(
|
||||||
"[Invalid option] options: de, bb, aa", args[1]);
|
"[Invalid option] options: de, bb, aa, p", args[1]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "quick":
|
case "quick":
|
||||||
|
@ -124,7 +127,7 @@ public class SlaCommand extends CommandBase {
|
||||||
if (args.length < 5) options.add("0");
|
if (args.length < 5) options.add("0");
|
||||||
break;
|
break;
|
||||||
case "map":
|
case "map":
|
||||||
options.addAll(Arrays.asList("de", "bb", "aa"));
|
options.addAll(Arrays.asList("de", "bb", "aa", "p"));
|
||||||
break;
|
break;
|
||||||
case "mirror":
|
case "mirror":
|
||||||
options.addAll(Arrays.asList("x", "z"));
|
options.addAll(Arrays.asList("x", "z"));
|
|
@ -68,8 +68,7 @@ public class ZombiesUtilsCommand extends CommandBase {
|
||||||
default:
|
default:
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
} else if (args.length == 3) {
|
||||||
else if (args.length == 3) {
|
|
||||||
switch (args[0]) {
|
switch (args[0]) {
|
||||||
case "timer":
|
case "timer":
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
|
@ -41,6 +41,7 @@ public class Hotkeys {
|
||||||
public KeyBinding getRlSpawn() {
|
public KeyBinding getRlSpawn() {
|
||||||
return rlSpawn;
|
return rlSpawn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public KeyBinding getPlayerVisiblity() {
|
public KeyBinding getPlayerVisiblity() {
|
||||||
return playerVisiblity;
|
return playerVisiblity;
|
||||||
}
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.config;
|
package com.github.stachelbeere1248.zombiesutils.config;
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.utils.LanguageSupport;
|
import com.github.stachelbeere1248.zombiesutils.utils.LanguageSupport;
|
||||||
import net.minecraftforge.common.config.Configuration;
|
import net.minecraftforge.common.config.Configuration;
|
||||||
import net.minecraftforge.common.config.Property;
|
import net.minecraftforge.common.config.Property;
|
||||||
|
@ -24,10 +23,10 @@ public class ZombiesUtilsConfig {
|
||||||
private Property defaultCategory;
|
private Property defaultCategory;
|
||||||
private Property language;
|
private Property language;
|
||||||
private Property auditory;
|
private Property auditory;
|
||||||
private Property copyDelta;
|
|
||||||
private Property cpsCounter;
|
private Property cpsCounter;
|
||||||
private Property announcePB;
|
private Property announcePB;
|
||||||
private Property playerVis;
|
private Property playerVis;
|
||||||
|
private Property playerVisRange;
|
||||||
|
|
||||||
public ZombiesUtilsConfig(Configuration config) {
|
public ZombiesUtilsConfig(Configuration config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
@ -35,9 +34,7 @@ public class ZombiesUtilsConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void read() {
|
private void read() {
|
||||||
ZombiesUtils.getInstance().getLogger().debug("Loading config...");
|
|
||||||
config.load();
|
config.load();
|
||||||
ZombiesUtils.getInstance().getLogger().debug("Config loaded.");
|
|
||||||
|
|
||||||
//SST
|
//SST
|
||||||
sstHud = config.get(
|
sstHud = config.get(
|
||||||
|
@ -93,12 +90,6 @@ public class ZombiesUtilsConfig {
|
||||||
"general",
|
"general",
|
||||||
"name of the category to be selected unless specified using /runCategory"
|
"name of the category to be selected unless specified using /runCategory"
|
||||||
);
|
);
|
||||||
copyDelta = config.get(
|
|
||||||
"timer",
|
|
||||||
"copy delta",
|
|
||||||
false,
|
|
||||||
"Also copy the delta-time when clicking the round-end message?"
|
|
||||||
);
|
|
||||||
announcePB = config.get(
|
announcePB = config.get(
|
||||||
"timer",
|
"timer",
|
||||||
"announce",
|
"announce",
|
||||||
|
@ -106,6 +97,22 @@ public class ZombiesUtilsConfig {
|
||||||
"Whether to announce PBs."
|
"Whether to announce PBs."
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//Player Visibility
|
||||||
|
playerVis = config.get(
|
||||||
|
"PlayerVis",
|
||||||
|
"default",
|
||||||
|
false,
|
||||||
|
"If players should always be visible"
|
||||||
|
);
|
||||||
|
playerVisRange = config.get(
|
||||||
|
"PlayerVis",
|
||||||
|
"range",
|
||||||
|
4,
|
||||||
|
"The range within which players are hidden",
|
||||||
|
0,
|
||||||
|
50
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//ROOT
|
//ROOT
|
||||||
language = config.get(
|
language = config.get(
|
||||||
|
@ -121,12 +128,6 @@ public class ZombiesUtilsConfig {
|
||||||
"T",
|
"T",
|
||||||
"The Text to be sent when pressing the chat-macro hotkey"
|
"The Text to be sent when pressing the chat-macro hotkey"
|
||||||
);
|
);
|
||||||
playerVis = config.get(
|
|
||||||
Configuration.CATEGORY_GENERAL,
|
|
||||||
"playervis",
|
|
||||||
false,
|
|
||||||
"If players should always be visible"
|
|
||||||
);
|
|
||||||
cpsCounter = config.get(
|
cpsCounter = config.get(
|
||||||
Configuration.CATEGORY_GENERAL,
|
Configuration.CATEGORY_GENERAL,
|
||||||
"cps",
|
"cps",
|
||||||
|
@ -154,19 +155,25 @@ public class ZombiesUtilsConfig {
|
||||||
private List<IConfigElement> getTimerElements() {
|
private List<IConfigElement> getTimerElements() {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
new CustomConfigElement("Default category", defaultCategory),
|
new CustomConfigElement("Default category", defaultCategory),
|
||||||
new CustomConfigElement("Paste delta", copyDelta),
|
|
||||||
new CustomConfigElement("PB announcements", announcePB)
|
new CustomConfigElement("PB announcements", announcePB)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<IConfigElement> getPlayerVisElements() {
|
||||||
|
return Arrays.asList(
|
||||||
|
new CustomConfigElement("Enabled", playerVis),
|
||||||
|
new CustomConfigElement("Range", playerVisRange)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
List<IConfigElement> getRootElements() {
|
List<IConfigElement> getRootElements() {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
new CustomConfigElement("Language", language),
|
new CustomConfigElement("Language", language),
|
||||||
new DummyConfigElement.DummyCategoryElement("Timer", "", getTimerElements()),
|
new DummyConfigElement.DummyCategoryElement("Timer", "", getTimerElements()),
|
||||||
new DummyConfigElement.DummyCategoryElement("SST", "", getSpawntimeElements()),
|
new DummyConfigElement.DummyCategoryElement("SST", "", getSpawntimeElements()),
|
||||||
new DummyConfigElement.DummyCategoryElement("SLA", "", getSlaElements()),
|
new DummyConfigElement.DummyCategoryElement("SLA", "", getSlaElements()),
|
||||||
|
new DummyConfigElement.DummyCategoryElement("Player Visibility", "", getPlayerVisElements()),
|
||||||
new CustomConfigElement("Macro message", chatMacro),
|
new CustomConfigElement("Macro message", chatMacro),
|
||||||
new CustomConfigElement("Player visibility", playerVis),
|
|
||||||
new CustomConfigElement("CPS counter", cpsCounter)
|
new CustomConfigElement("CPS counter", cpsCounter)
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -209,20 +216,22 @@ public class ZombiesUtilsConfig {
|
||||||
return sstHud.getBoolean();
|
return sstHud.getBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getCopyDelta() {
|
|
||||||
return copyDelta.getBoolean();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getCpsToggle() {
|
public boolean getCpsToggle() {
|
||||||
return cpsCounter.getBoolean();
|
return cpsCounter.getBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getAnnouncePB() {
|
public boolean getAnnouncePB() {
|
||||||
return announcePB.getBoolean();
|
return announcePB.getBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getPlayerVis() {
|
public boolean getPlayerVis() {
|
||||||
return playerVis.getBoolean();
|
return playerVis.getBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getPlayerVisRange() {
|
||||||
|
return playerVisRange.getInt();
|
||||||
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onConfigChange(ConfigChangedEvent.@NotNull OnConfigChangedEvent event) {
|
public void onConfigChange(ConfigChangedEvent.@NotNull OnConfigChangedEvent event) {
|
||||||
if (event.modID.equals("zombiesutils") && event.configID == null) {
|
if (event.modID.equals("zombiesutils") && event.configID == null) {
|
57
src/main/java/xyz/stachel/zombiesutils/game/GameData.java
Normal file
57
src/main/java/xyz/stachel/zombiesutils/game/GameData.java
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils.game;
|
||||||
|
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.ResourceLoader;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.waves.Round;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class GameData {
|
||||||
|
private final Round[][] roundData;
|
||||||
|
|
||||||
|
public GameData() {
|
||||||
|
roundData = new Round[10][];
|
||||||
|
roundData[0] = readFromFile("data/rounds/DEAD_END_NORMAL.json");
|
||||||
|
roundData[1] = readFromFile("data/rounds/DEAD_END_HARD.json");
|
||||||
|
roundData[2] = readFromFile("data/rounds/DEAD_END_RIP.json");
|
||||||
|
roundData[3] = readFromFile("data/rounds/BAD_BLOOD_NORMAL.json");
|
||||||
|
roundData[4] = readFromFile("data/rounds/BAD_BLOOD_HARD.json");
|
||||||
|
roundData[5] = readFromFile("data/rounds/BAD_BLOOD_RIP.json");
|
||||||
|
roundData[6] = readFromFile("data/rounds/ALIEN_ARCADIUM.json");
|
||||||
|
roundData[7] = readFromFile("data/rounds/PRISON_NORMAL.json");
|
||||||
|
roundData[8] = readFromFile("data/rounds/PRISON_HARD.json");
|
||||||
|
roundData[9] = readFromFile("data/rounds/PRISON_RIP.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Round getRound(@NotNull GameMode gameMode, int round) {
|
||||||
|
switch (gameMode) {
|
||||||
|
case DEAD_END:
|
||||||
|
return roundData[0][round - 1];
|
||||||
|
case DEAD_END_HARD:
|
||||||
|
return roundData[1][round - 1];
|
||||||
|
case DEAD_END_RIP:
|
||||||
|
return roundData[2][round - 1];
|
||||||
|
case BAD_BLOOD:
|
||||||
|
return roundData[3][round - 1];
|
||||||
|
case BAD_BLOOD_HARD:
|
||||||
|
return roundData[4][round - 1];
|
||||||
|
case BAD_BLOOD_RIP:
|
||||||
|
return roundData[5][round - 1];
|
||||||
|
case ALIEN_ARCADIUM:
|
||||||
|
return roundData[6][round - 1];
|
||||||
|
case PRISON:
|
||||||
|
return roundData[7][round - 1];
|
||||||
|
case PRISON_HARD:
|
||||||
|
return roundData[8][round - 1];
|
||||||
|
case PRISON_RIP:
|
||||||
|
return roundData[9][round - 1];
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Invalid GameMode: " + gameMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Round[] readFromFile(final String resourcePath) {
|
||||||
|
final JsonElement roundsJsonElement = ResourceLoader.readJsonResource(resourcePath).orElseThrow(RuntimeException::new);
|
||||||
|
return new Gson().fromJson(roundsJsonElement, Round[].class);
|
||||||
|
}
|
||||||
|
}
|
84
src/main/java/xyz/stachel/zombiesutils/game/GameMode.java
Normal file
84
src/main/java/xyz/stachel/zombiesutils/game/GameMode.java
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils.game;
|
||||||
|
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
||||||
|
import org.jetbrains.annotations.Contract;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public enum GameMode {
|
||||||
|
DEAD_END(Map.DEAD_END, Difficulty.NORMAL), DEAD_END_HARD(Map.DEAD_END, Difficulty.HARD), DEAD_END_RIP(Map.DEAD_END, Difficulty.RIP),
|
||||||
|
BAD_BLOOD(Map.BAD_BLOOD, Difficulty.NORMAL), BAD_BLOOD_HARD(Map.BAD_BLOOD, Difficulty.HARD), BAD_BLOOD_RIP(Map.BAD_BLOOD, Difficulty.RIP),
|
||||||
|
ALIEN_ARCADIUM(Map.ALIEN_ARCADIUM, Difficulty.NORMAL),
|
||||||
|
PRISON(Map.PRISON, Difficulty.NORMAL), PRISON_HARD(Map.PRISON, Difficulty.HARD), PRISON_RIP(Map.PRISON, Difficulty.RIP);
|
||||||
|
private final Map map;
|
||||||
|
private final Difficulty difficulty;
|
||||||
|
|
||||||
|
GameMode(final @NotNull Map map, final @NotNull Difficulty difficulty) {
|
||||||
|
this.map = map;
|
||||||
|
this.difficulty = difficulty;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Contract(pure = true)
|
||||||
|
public static GameMode getNormalForMap(final @NotNull Map map) {
|
||||||
|
switch (map) {
|
||||||
|
case DEAD_END:
|
||||||
|
return DEAD_END;
|
||||||
|
case BAD_BLOOD:
|
||||||
|
return BAD_BLOOD;
|
||||||
|
case ALIEN_ARCADIUM:
|
||||||
|
return ALIEN_ARCADIUM;
|
||||||
|
case PRISON:
|
||||||
|
return PRISON;
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Unexpected value: " + map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map getMap() {
|
||||||
|
return this.map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Difficulty getDifficulty() {
|
||||||
|
return this.difficulty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameMode appliedDifficulty(final Difficulty difficulty) {
|
||||||
|
switch (this.map) {
|
||||||
|
case DEAD_END:
|
||||||
|
switch (difficulty) {
|
||||||
|
case NORMAL:
|
||||||
|
return DEAD_END;
|
||||||
|
case HARD:
|
||||||
|
return DEAD_END_HARD;
|
||||||
|
case RIP:
|
||||||
|
return DEAD_END_RIP;
|
||||||
|
}
|
||||||
|
case BAD_BLOOD:
|
||||||
|
switch (difficulty) {
|
||||||
|
case NORMAL:
|
||||||
|
return BAD_BLOOD;
|
||||||
|
case HARD:
|
||||||
|
return BAD_BLOOD_HARD;
|
||||||
|
case RIP:
|
||||||
|
return BAD_BLOOD_RIP;
|
||||||
|
}
|
||||||
|
case PRISON:
|
||||||
|
switch (difficulty) {
|
||||||
|
case NORMAL:
|
||||||
|
return PRISON;
|
||||||
|
case HARD:
|
||||||
|
return PRISON_HARD;
|
||||||
|
case RIP:
|
||||||
|
return PRISON_RIP;
|
||||||
|
}
|
||||||
|
case ALIEN_ARCADIUM:
|
||||||
|
return ALIEN_ARCADIUM;
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Invalid Map: " + this.map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isMap(Map map) {
|
||||||
|
return this.getMap() == map;
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,7 +14,7 @@ public enum Map {
|
||||||
|
|
||||||
public static Optional<Map> getMap() {
|
public static Optional<Map> getMap() {
|
||||||
World world = Minecraft.getMinecraft().theWorld;
|
World world = Minecraft.getMinecraft().theWorld;
|
||||||
BlockPos pos = new BlockPos(44,71,0);
|
BlockPos pos = new BlockPos(44, 71, 0);
|
||||||
if (!world.isBlockLoaded(pos) || Scoreboard.isNotZombies()) return Optional.empty();
|
if (!world.isBlockLoaded(pos) || Scoreboard.isNotZombies()) return Optional.empty();
|
||||||
Block block = world.getBlockState(pos).getBlock();
|
Block block = world.getBlockState(pos).getBlock();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.game.sla;
|
package com.github.stachelbeere1248.zombiesutils.game.sla;
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.SLA;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.windows.SLA;
|
||||||
|
|
||||||
@SuppressWarnings("SpellCheckingInspection")
|
@SuppressWarnings("SpellCheckingInspection")
|
||||||
public class QuickSLA {
|
public class QuickSLA {
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils.game.waves;
|
||||||
|
|
||||||
|
public enum Prefix {
|
||||||
|
BOSS(0xCC5555, "B", 0x7A3333),
|
||||||
|
BLAZES(0xEFB61F, "BL", 0x8F6D0F),
|
||||||
|
SLIME(0x88FF88, "S", 0x51A951),
|
||||||
|
HBM(0x2A415F, "HBM", 0x193241),
|
||||||
|
WITHER_SKELETON(0x888888, "WS", 0x515151),
|
||||||
|
OLD_ONE(0x55AA55, "O1", 0x336633),
|
||||||
|
GIANT(0x00FFFF, "G", 0x009999),
|
||||||
|
POLICE(0x16537E, "P", 0x0E324D),
|
||||||
|
CELL(0xFF8234, "C", 0x99501F),
|
||||||
|
WINDOW(0xAAAAAA, "W", 0x666666);
|
||||||
|
|
||||||
|
private final int color;
|
||||||
|
private final int fadedColor;
|
||||||
|
private final String prefix;
|
||||||
|
|
||||||
|
Prefix(final int color, final String prefix, final int fadedColor) {
|
||||||
|
this.color = color;
|
||||||
|
this.prefix = prefix;
|
||||||
|
this.fadedColor = fadedColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPrefix() {
|
||||||
|
return prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFadedColor() {
|
||||||
|
return fadedColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
21
src/main/java/xyz/stachel/zombiesutils/game/waves/Round.java
Normal file
21
src/main/java/xyz/stachel/zombiesutils/game/waves/Round.java
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils.game.waves;
|
||||||
|
|
||||||
|
public class Round {
|
||||||
|
private final Wave[] waves;
|
||||||
|
|
||||||
|
public Round(final Wave[] waves) {
|
||||||
|
this.waves = waves;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Wave[] getWaves() {
|
||||||
|
return waves;
|
||||||
|
}
|
||||||
|
|
||||||
|
public short[] getWaveTimes() {
|
||||||
|
short[] ret = new short[waves.length];
|
||||||
|
for (int i = 0; i < waves.length; i++) {
|
||||||
|
ret[i] = waves[i].getTime();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
25
src/main/java/xyz/stachel/zombiesutils/game/waves/Wave.java
Normal file
25
src/main/java/xyz/stachel/zombiesutils/game/waves/Wave.java
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils.game.waves;
|
||||||
|
|
||||||
|
@SuppressWarnings("DuplicatedCode")
|
||||||
|
public class Wave {
|
||||||
|
private final short ticks;
|
||||||
|
private final Prefix[] prefixes;
|
||||||
|
|
||||||
|
public Wave(final short ticks, final Prefix[] prefixes) {
|
||||||
|
this.ticks = ticks;
|
||||||
|
this.prefixes = prefixes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Wave(final short ticks) {
|
||||||
|
this.ticks = ticks;
|
||||||
|
this.prefixes = new Prefix[]{ Prefix.WINDOW };
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getTime() {
|
||||||
|
return this.ticks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Prefix[] getPrefixes() {
|
||||||
|
return this.prefixes;
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,21 +3,21 @@ package com.github.stachelbeere1248.zombiesutils.game.waves;
|
||||||
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
||||||
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
|
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class WaveTiming {
|
public class WaveTiming {
|
||||||
public static int rl = 0;
|
public static int rl = 0;
|
||||||
|
|
||||||
public static void onTick() {
|
public static void onTick() {
|
||||||
if (Scoreboard.isNotZombies()) return;
|
if (Scoreboard.isNotZombies()) return;
|
||||||
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(
|
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(
|
||||||
game -> {
|
game -> {
|
||||||
byte[] waves = Waves.get(game.getGameMode().getMap(), game.getRound());
|
short[] waves = ZombiesUtils.getInstance().getGameData().getRound(game.getGameMode(), game.getRound()).getWaveTimes();
|
||||||
final int roundTime = game.getTimer().getRoundTime();
|
final int roundTime = game.getTimer().getRoundTime();
|
||||||
final int[] auditory = ZombiesUtils.getInstance().getConfig().getAuditory();
|
final int[] auditory = ZombiesUtils.getInstance().getConfig().getAuditory();
|
||||||
for (int wave : waves) {
|
for (short wave : waves) {
|
||||||
wave = wave * 20 + rl;
|
wave = (short) (wave + rl);
|
||||||
final Integer pre = roundTime - wave;
|
final Integer pre = roundTime - wave;
|
||||||
if (Arrays.stream(auditory).anyMatch(pre::equals)) {
|
if (Arrays.stream(auditory).anyMatch(pre::equals)) {
|
||||||
Minecraft.getMinecraft().thePlayer.playSound("note.pling", 1, 2);
|
Minecraft.getMinecraft().thePlayer.playSound("note.pling", 1, 2);
|
|
@ -151,8 +151,116 @@ public class Room {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Contract(" -> new")
|
@Contract(" -> new")
|
||||||
public static Room @NotNull [] getPrison() {
|
public static Room @NotNull [] getP() {
|
||||||
return new Room[0];
|
return new Room[]{
|
||||||
|
new Room("Cell Blocks", "cb", new Window[]{
|
||||||
|
new Window(1, 109, 144, 21),
|
||||||
|
new Window(2, 109, 144, -19),
|
||||||
|
new Window(3, 193, 158, -17),
|
||||||
|
new Window(4, 193, 158, 19),
|
||||||
|
}),
|
||||||
|
new Room("Corridors", "co", new Window[]{
|
||||||
|
new Window(1, 189, 144, 21),
|
||||||
|
new Window(2, 251, 144, 31),
|
||||||
|
new Window(3, 219, 144, -21),
|
||||||
|
new Window(4, 233, 144, -49),
|
||||||
|
new Window(5, 221, 158, -21),
|
||||||
|
new Window(6, 255, 158, 9),
|
||||||
|
new Window(7, 273, 158, 51),
|
||||||
|
}),
|
||||||
|
new Room("Cafeteria", "ca", new Window[]{
|
||||||
|
new Window(1, 249, 144, 73),
|
||||||
|
new Window(2, 189, 144, 25),
|
||||||
|
}),
|
||||||
|
new Room("Visitor's Room", "v", new Window[]{
|
||||||
|
new Window(1, 261, 144, -45),
|
||||||
|
new Window(2, 273, 144, 13)
|
||||||
|
}),
|
||||||
|
new Room("Library", "l", new Window[]{
|
||||||
|
new Window(1, 265, 158, 9),
|
||||||
|
new Window(2, 263, 158, -47),
|
||||||
|
}),
|
||||||
|
new Room("Monitor Room", "mt", new Window[]{
|
||||||
|
new Window(1, 201, 158, 25),
|
||||||
|
new Window(2, 197, 158, 3),
|
||||||
|
}),
|
||||||
|
new Room("Medical Bay", "mt", new Window[]{
|
||||||
|
new Window(1, 249, 158, 31),
|
||||||
|
new Window(2, 223, 158, 53),
|
||||||
|
}),
|
||||||
|
new Room("The Courts", "cs", new Window[]{
|
||||||
|
new Window(1, 285, 144, 81),
|
||||||
|
new Window(2, 247, 144, 157),
|
||||||
|
new Window(3, 211, 144, 157),
|
||||||
|
}),
|
||||||
|
new Room("Offices", "o", new Window[]{
|
||||||
|
new Window(1, 153, 144, 161),
|
||||||
|
new Window(2, 151, 144, 191),
|
||||||
|
new Window(3, 99, 144, 181),
|
||||||
|
new Window(4, 123, 144, 163),
|
||||||
|
new Window(5, 71, 144, 163),
|
||||||
|
}),
|
||||||
|
new Room("Head Manager's Office", "h", new Window[]{
|
||||||
|
new Window(1, 179, 158, 169),
|
||||||
|
new Window(2, 179, 158, 177),
|
||||||
|
new Window(3, 79, 158, 177),
|
||||||
|
new Window(4, 79, 158, 169),
|
||||||
|
}),
|
||||||
|
new Room("Basement Corridor", "bc", new Window[]{
|
||||||
|
new Window(1, 231, 130, 29),
|
||||||
|
new Window(2, 193, 130, 31),
|
||||||
|
}),
|
||||||
|
new Room("The Deep", "d", new Window[]{
|
||||||
|
new Window(1, 167, 126, -45),
|
||||||
|
new Window(2, 163, 122, 13),
|
||||||
|
new Window(3, 193, 122, 13),
|
||||||
|
}),
|
||||||
|
new Room("Boiler Room", "b", new Window[]{
|
||||||
|
new Window(1, 107, 126, -11),
|
||||||
|
new Window(2, 125, 126, 25),
|
||||||
|
new Window(3, 163, 130, -45),
|
||||||
|
new Window(4, 107, 130, -45),
|
||||||
|
}),
|
||||||
|
new Room("Yard", "y", new Window[]{
|
||||||
|
new Window(1, 185, 144, 79),
|
||||||
|
new Window(2, 189, 144, 119),
|
||||||
|
new Window(3, 107, 144, 121),
|
||||||
|
}),
|
||||||
|
new Room("Alleyway", "a", new Window[]{
|
||||||
|
new Window(1, 101, 144, 133),
|
||||||
|
new Window(2, 147, 144, 117)
|
||||||
|
}),
|
||||||
|
new Room("Guard's Gunroom", "gr", new Window[]{
|
||||||
|
new Window(1, 29, 148, 75),
|
||||||
|
new Window(2, 29, 144, 43),
|
||||||
|
new Window(3, 65, 126, 5),
|
||||||
|
}),
|
||||||
|
new Room("Guard's Quarters", "q", new Window[]{
|
||||||
|
new Window(1, 83, 148, 83),
|
||||||
|
new Window(2, 57, 148, 35),
|
||||||
|
}),
|
||||||
|
new Room("Stockage", "st", new Window[]{
|
||||||
|
new Window(1, 241, 130, -25),
|
||||||
|
new Window(2, 227, 130, -45),
|
||||||
|
}),
|
||||||
|
new Room("Kitchen", "k", new Window[]{
|
||||||
|
new Window(1, 261, 144, 33),
|
||||||
|
new Window(2, 271, 144, 45),
|
||||||
|
}),
|
||||||
|
new Room("Isolation", "i", new Window[]{
|
||||||
|
new Window(1, 75, 144, 91),
|
||||||
|
new Window(2, 29, 144, 87),
|
||||||
|
}),
|
||||||
|
new Room("Showers", "sh", new Window[]{
|
||||||
|
new Window(1, 37, 144, 15),
|
||||||
|
new Window(2, 37, 144, -11),
|
||||||
|
}),
|
||||||
|
new Room("???", "?", new Window[]{
|
||||||
|
new Window(1, 191, 126, -67),
|
||||||
|
new Window(2, 207, 126, -67),
|
||||||
|
}),
|
||||||
|
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
|
@ -1,12 +1,9 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.game;
|
package com.github.stachelbeere1248.zombiesutils.game.windows;
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.windows.Room;
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.windows.Window;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.entity.EntityPlayerSP;
|
import net.minecraft.client.entity.EntityPlayerSP;
|
||||||
import net.minecraft.util.ChatComponentText;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -31,7 +28,6 @@ public class SLA {
|
||||||
break;
|
break;
|
||||||
case PRISON:
|
case PRISON:
|
||||||
this.rooms = new Room[0];
|
this.rooms = new Room[0];
|
||||||
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§cThis map has no SLA database yet. Contribute by dming Stachelbeere1248 coordinates for windows on Discord."));
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException("Unexpected value: " + map);
|
throw new IllegalStateException("Unexpected value: " + map);
|
||||||
|
@ -80,8 +76,7 @@ public class SLA {
|
||||||
player.posY - offset[1],
|
player.posY - offset[1],
|
||||||
player.posZ - offset[2]
|
player.posZ - offset[2]
|
||||||
};
|
};
|
||||||
for (Room room : rooms
|
for (Room room : rooms) {
|
||||||
) {
|
|
||||||
room.resetActiveWindowCount();
|
room.resetActiveWindowCount();
|
||||||
for (Window window : room.getWindows()
|
for (Window window : room.getWindows()
|
||||||
) {
|
) {
|
||||||
|
@ -91,7 +86,8 @@ public class SLA {
|
||||||
}
|
}
|
||||||
|
|
||||||
// (2x)²+(2y)²+(2z)² = 4(x²+y²+z²) = 4d²
|
// (2x)²+(2y)²+(2z)² = 4(x²+y²+z²) = 4d²
|
||||||
if (distanceDoubledThenSquared < 6400) {
|
final int slaRange = 50;
|
||||||
|
if (distanceDoubledThenSquared < 4 * slaRange * slaRange) {
|
||||||
window.setActive(true);
|
window.setActive(true);
|
||||||
room.increaseActiveWindowCount();
|
room.increaseActiveWindowCount();
|
||||||
} else window.setActive(false);
|
} else window.setActive(false);
|
|
@ -17,16 +17,19 @@ public class ChatHandler {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void difficultyChange(@NotNull final ClientChatReceivedEvent event) {
|
public void difficultyChange(@NotNull final ClientChatReceivedEvent event) {
|
||||||
|
if (event.message.getUnformattedText().contains(":")) return;
|
||||||
|
final String message = STRIP_COLOR_PATTERN.matcher(event.message.getUnformattedText()).replaceAll("").trim();
|
||||||
|
|
||||||
|
if (LanguageSupport.containsHard(message)) {
|
||||||
|
ZombiesUtils.getInstance().getGameManager().setDifficulty(Difficulty.HARD);
|
||||||
|
} else if (LanguageSupport.containsRIP(message)) {
|
||||||
|
ZombiesUtils.getInstance().getGameManager().setDifficulty(Difficulty.RIP);
|
||||||
|
} else {
|
||||||
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(
|
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(
|
||||||
game -> {
|
game -> {
|
||||||
String message = STRIP_COLOR_PATTERN.matcher(event.message.getUnformattedText()).replaceAll("").trim();
|
if (LanguageSupport.isHelicopterIncoming(message)) game.helicopter();
|
||||||
if (message.contains(":")) return;
|
|
||||||
if (LanguageSupport.containsHard(message)) {
|
|
||||||
game.getGameMode().changeDifficulty(Difficulty.HARD);
|
|
||||||
} else if (LanguageSupport.containsRIP(message)) {
|
|
||||||
game.getGameMode().changeDifficulty(Difficulty.RIP);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -15,10 +15,10 @@ public class Handlers {
|
||||||
public void registerAll() {
|
public void registerAll() {
|
||||||
MinecraftForge.EVENT_BUS.register(ZombiesUtils.getInstance().getConfig());
|
MinecraftForge.EVENT_BUS.register(ZombiesUtils.getInstance().getConfig());
|
||||||
MinecraftForge.EVENT_BUS.register(renderer);
|
MinecraftForge.EVENT_BUS.register(renderer);
|
||||||
|
MinecraftForge.EVENT_BUS.register(renderPlayerHandler);
|
||||||
MinecraftForge.EVENT_BUS.register(new TickHandler());
|
MinecraftForge.EVENT_BUS.register(new TickHandler());
|
||||||
MinecraftForge.EVENT_BUS.register(new ChatHandler());
|
MinecraftForge.EVENT_BUS.register(new ChatHandler());
|
||||||
MinecraftForge.EVENT_BUS.register(new KeyInputHandler());
|
MinecraftForge.EVENT_BUS.register(new KeyInputHandler());
|
||||||
MinecraftForge.EVENT_BUS.register(new RenderPlayerHandler());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public RenderGameOverlayHandler getRenderer() {
|
public RenderGameOverlayHandler getRenderer() {
|
|
@ -17,7 +17,7 @@ public class KeyInputHandler {
|
||||||
if (event instanceof InputEvent.KeyInputEvent) {
|
if (event instanceof InputEvent.KeyInputEvent) {
|
||||||
if (Keyboard.getEventKey() == '\0') return;
|
if (Keyboard.getEventKey() == '\0') return;
|
||||||
if (Keyboard.getEventKeyState()) {
|
if (Keyboard.getEventKeyState()) {
|
||||||
Hotkeys hotkeys = ZombiesUtils.getInstance().getHotkeys();
|
final Hotkeys hotkeys = ZombiesUtils.getInstance().getHotkeys();
|
||||||
if (Keyboard.getEventKey() == hotkeys.getChatMacro().getKeyCode()) Minecraft.getMinecraft().thePlayer
|
if (Keyboard.getEventKey() == hotkeys.getChatMacro().getKeyCode()) Minecraft.getMinecraft().thePlayer
|
||||||
.sendChatMessage(ZombiesUtils.getInstance().getConfig().getChatMacro());
|
.sendChatMessage(ZombiesUtils.getInstance().getConfig().getChatMacro());
|
||||||
else if (Keyboard.getEventKey() == hotkeys.getRlSpawn().getKeyCode()) {
|
else if (Keyboard.getEventKey() == hotkeys.getRlSpawn().getKeyCode()) {
|
|
@ -1,9 +1,11 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.handlers;
|
package com.github.stachelbeere1248.zombiesutils.handlers;
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.SLA;
|
import com.github.stachelbeere1248.zombiesutils.game.waves.Prefix;
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.waves.Waves;
|
import com.github.stachelbeere1248.zombiesutils.game.waves.Wave;
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.windows.Room;
|
import com.github.stachelbeere1248.zombiesutils.game.windows.Room;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.windows.SLA;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.timer.Game;
|
||||||
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
|
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
|
@ -31,13 +33,6 @@ public class RenderGameOverlayHandler {
|
||||||
return String.format("%d:%02d.%d", minutesPart, secondsPart, tenthSecondsPart);
|
return String.format("%d:%02d.%d", minutesPart, secondsPart, tenthSecondsPart);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getWaveString(long waveTicks, int wave) {
|
|
||||||
final long minutesPart = (waveTicks * 50) / 60000;
|
|
||||||
final long secondsPart = ((waveTicks * 50) % 60000) / 1000;
|
|
||||||
final long tenthSecondsPart = ((waveTicks * 50) % 1000) / 100;
|
|
||||||
return String.format("W%d %d:%02d.%d", wave, minutesPart, secondsPart, tenthSecondsPart);
|
|
||||||
}
|
|
||||||
|
|
||||||
void toggleRL() {
|
void toggleRL() {
|
||||||
if (rl == 0) rl = ZombiesUtils.getInstance().getConfig().getOffset();
|
if (rl == 0) rl = ZombiesUtils.getInstance().getConfig().getOffset();
|
||||||
else rl = 0;
|
else rl = 0;
|
||||||
|
@ -47,20 +42,16 @@ public class RenderGameOverlayHandler {
|
||||||
public void onRenderGameOverlay(RenderGameOverlayEvent.@NotNull Post event) {
|
public void onRenderGameOverlay(RenderGameOverlayEvent.@NotNull Post event) {
|
||||||
if (event.type != RenderGameOverlayEvent.ElementType.TEXT) return;
|
if (event.type != RenderGameOverlayEvent.ElementType.TEXT) return;
|
||||||
|
|
||||||
|
|
||||||
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(
|
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(
|
||||||
game -> {
|
game -> {
|
||||||
renderTime(game.getTimer().getRoundTime());
|
renderTime(game.getTimer().getRoundTime());
|
||||||
renderSpawnTime(
|
renderSpawnTime(
|
||||||
Waves.get(
|
game
|
||||||
game.getGameMode().getMap(),
|
|
||||||
game.getRound()
|
|
||||||
),
|
|
||||||
game.getTimer().getRoundTime()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (!Minecraft.getMinecraft().gameSettings.showDebugInfo)
|
||||||
SLA.getInstance().ifPresent(sla -> renderSla(sla.getRooms()));
|
SLA.getInstance().ifPresent(sla -> renderSla(sla.getRooms()));
|
||||||
if (ZombiesUtils.getInstance().getConfig().getCpsToggle()) renderCPS();
|
if (ZombiesUtils.getInstance().getConfig().getCpsToggle()) renderCPS();
|
||||||
}
|
}
|
||||||
|
@ -97,42 +88,51 @@ public class RenderGameOverlayHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderSpawnTime(byte @NotNull [] waveTimes, short roundTicks) {
|
private void renderSpawnTime(final Game game) {
|
||||||
if (Scoreboard.isNotZombies() || !ZombiesUtils.getInstance().getConfig().getSST()) return;
|
if (!ZombiesUtils.getInstance().getConfig().getSST() || Scoreboard.isNotZombies()) return;
|
||||||
|
final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
|
||||||
final int length = waveTimes.length + 1;
|
final int screenWidth = scaledResolution.getScaledWidth();
|
||||||
|
final int screenHeight = scaledResolution.getScaledHeight();
|
||||||
|
final Wave[] round = ZombiesUtils.getInstance().getGameData().getRound(game.getGameMode(), game.getRound()).getWaves();
|
||||||
|
final int roundTime = game.getTimer().getRoundTime();
|
||||||
|
final int length = round.length + 1;
|
||||||
int heightIndex = 0;
|
int heightIndex = 0;
|
||||||
int color = 0xFFFF55;
|
int color = 0xFFFF55;
|
||||||
|
boolean faded = false;
|
||||||
|
|
||||||
for (byte waveTime : waveTimes) {
|
for (Wave wave : round) {
|
||||||
int clonedColor = color;
|
final short spawnTime = (short) (wave.getTime() + rl);
|
||||||
final short waveTicks = (short) ((waveTime * 20) + rl);
|
if (roundTime > spawnTime) {
|
||||||
|
if (!ZombiesUtils.getInstance().getConfig().isSpawntimeShortened()) faded = true;
|
||||||
if (roundTicks > waveTicks) {
|
|
||||||
if (!ZombiesUtils.getInstance().getConfig().isSpawntimeShortened()) clonedColor = 0x555555;
|
|
||||||
else {
|
else {
|
||||||
heightIndex++;
|
heightIndex++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
} else faded = false;
|
||||||
|
final String spawnTimeString = " W" + (heightIndex + 1) + ": " + getTimeString(spawnTime);
|
||||||
final String time = getWaveString(waveTicks, heightIndex + 1);
|
int width = fontRenderer.getStringWidth(spawnTimeString);
|
||||||
final int width = fontRenderer.getStringWidth(time);
|
|
||||||
final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
|
|
||||||
final int screenWidth = scaledResolution.getScaledWidth();
|
|
||||||
final int screenHeight = scaledResolution.getScaledHeight();
|
|
||||||
|
|
||||||
fontRenderer.drawStringWithShadow(
|
fontRenderer.drawStringWithShadow(
|
||||||
time,
|
spawnTimeString,
|
||||||
screenWidth - width,
|
screenWidth - width,
|
||||||
screenHeight - fontRenderer.FONT_HEIGHT * (length - heightIndex),
|
screenHeight - fontRenderer.FONT_HEIGHT * (length - heightIndex),
|
||||||
clonedColor
|
faded ? 0x666666 : color
|
||||||
);
|
);
|
||||||
if (clonedColor != 0x555555) color = 0xAAAAAA;
|
for (Prefix prefix : wave.getPrefixes()) {
|
||||||
|
final String prefixString = prefix.getPrefix() + " ";
|
||||||
|
width += fontRenderer.getStringWidth(prefixString);
|
||||||
|
fontRenderer.drawStringWithShadow(
|
||||||
|
prefixString,
|
||||||
|
screenWidth - width,
|
||||||
|
screenHeight - fontRenderer.FONT_HEIGHT * (length - heightIndex),
|
||||||
|
faded ? prefix.getFadedColor() : prefix.getColor()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!faded) color = 0xAAAAAA;
|
||||||
heightIndex++;
|
heightIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void renderCPS() {
|
public void renderCPS() {
|
||||||
final String cps = String.format("%2d", getClicks());
|
final String cps = String.format("%2d", getClicks());
|
||||||
final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
|
final ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
|
|
@ -1,15 +1,20 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.handlers;
|
package com.github.stachelbeere1248.zombiesutils.handlers;
|
||||||
|
|
||||||
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
||||||
import com.github.stachelbeere1248.zombiesutils.config.ZombiesUtilsConfig;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.util.ChatComponentText;
|
||||||
import net.minecraft.util.Vec3;
|
import net.minecraft.util.Vec3;
|
||||||
import net.minecraftforge.client.event.RenderPlayerEvent;
|
import net.minecraftforge.client.event.RenderPlayerEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class RenderPlayerHandler {
|
public class RenderPlayerHandler {
|
||||||
private boolean visible = ZombiesUtils.getInstance().getConfig().getPlayerVis();
|
private boolean visible;
|
||||||
|
|
||||||
|
public RenderPlayerHandler() {
|
||||||
|
this.visible = ZombiesUtils.getInstance().getConfig().getPlayerVis();
|
||||||
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onRender(RenderPlayerEvent.@NotNull Pre event) {
|
public void onRender(RenderPlayerEvent.@NotNull Pre event) {
|
||||||
if (event.entityPlayer.isPlayerSleeping() || event.entityPlayer.isUser()) return;
|
if (event.entityPlayer.isPlayerSleeping() || event.entityPlayer.isUser()) return;
|
||||||
|
@ -19,9 +24,20 @@ public class RenderPlayerHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean inRange(@NotNull Vec3 playerOther) {
|
private boolean inRange(@NotNull Vec3 playerOther) {
|
||||||
return playerOther.squareDistanceTo(Minecraft.getMinecraft().thePlayer.getPositionVector()) <= 16;
|
final int range = ZombiesUtils.getInstance().getConfig().getPlayerVisRange();
|
||||||
|
return playerOther.squareDistanceTo(Minecraft.getMinecraft().thePlayer.getPositionVector()) <= range * range;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void togglePlayerVisibility() {
|
public void togglePlayerVisibility() {
|
||||||
this.visible = !this.visible;
|
this.visible = !this.visible;
|
||||||
|
final String s;
|
||||||
|
if (this.visible) {
|
||||||
|
s = "§dPlayer Visibility §e is now §rON";
|
||||||
|
} else {
|
||||||
|
s = "§dPlayer Visibility §e is now §8OFF";
|
||||||
|
}
|
||||||
|
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(
|
||||||
|
s
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils.handlers;
|
||||||
|
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.timer.Timer;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
|
||||||
|
import net.minecraft.entity.monster.EntityZombie;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class Round1Correction {
|
||||||
|
|
||||||
|
private final Timer timer;
|
||||||
|
private final String serverNumber;
|
||||||
|
|
||||||
|
public Round1Correction(Timer timer, String serverNumber) {
|
||||||
|
this.timer = timer;
|
||||||
|
this.serverNumber = serverNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void onWaveSpawn(@NotNull EntityJoinWorldEvent event) {
|
||||||
|
if (!(event.entity instanceof EntityZombie)) return;
|
||||||
|
if (Scoreboard.isNotZombies()) return;
|
||||||
|
final Optional<String> s = Scoreboard.getServerNumber();
|
||||||
|
if (!s.isPresent()) return;
|
||||||
|
if (!s.get().equals(serverNumber)) {
|
||||||
|
MinecraftForge.EVENT_BUS.unregister(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.timer.correctStartTick();
|
||||||
|
MinecraftForge.EVENT_BUS.unregister(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,188 @@
|
||||||
|
package xyz.stachel.zombiesutils.init;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.lib.tree.ClassNode;
|
||||||
|
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
|
||||||
|
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipInputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A mixin plugin to automatically discover all mixins in the current JAR.
|
||||||
|
* <p>
|
||||||
|
* This mixin plugin automatically scans your entire JAR (or class directory, in case of an in-IDE launch) for classes inside of your
|
||||||
|
* mixin package and registers those. It does this recursively for sub packages of the mixin package as well. This means you will need
|
||||||
|
* to only have mixin classes inside of your mixin package, which is good style anyway.
|
||||||
|
*
|
||||||
|
* @author Linnea Gräf
|
||||||
|
*/
|
||||||
|
public class AutoDiscoveryMixinPlugin implements IMixinConfigPlugin {
|
||||||
|
private static final List<AutoDiscoveryMixinPlugin> mixinPlugins = new ArrayList<>();
|
||||||
|
|
||||||
|
public static List<AutoDiscoveryMixinPlugin> getMixinPlugins() {
|
||||||
|
return mixinPlugins;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String mixinPackage;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoad(String mixinPackage) {
|
||||||
|
this.mixinPackage = mixinPackage;
|
||||||
|
mixinPlugins.add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolves the base class root for a given class URL. This resolves either the JAR root, or the class file root.
|
||||||
|
* In either case the return value of this + the class name will resolve back to the original class url, or to other
|
||||||
|
* class urls for other classes.
|
||||||
|
*/
|
||||||
|
public URL getBaseUrlForClassUrl(URL classUrl) {
|
||||||
|
String string = classUrl.toString();
|
||||||
|
if (classUrl.getProtocol().equals("jar")) {
|
||||||
|
try {
|
||||||
|
return new URL(string.substring(4).split("!")[0]);
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (string.endsWith(".class")) {
|
||||||
|
try {
|
||||||
|
return new URL(string.replace("\\", "/")
|
||||||
|
.replace(getClass().getCanonicalName()
|
||||||
|
.replace(".", "/") + ".class", ""));
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return classUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the package that contains all the mixins. This value is set by mixin itself using {@link #onLoad}.
|
||||||
|
*/
|
||||||
|
public String getMixinPackage() {
|
||||||
|
return mixinPackage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the path inside the class root to the mixin package
|
||||||
|
*/
|
||||||
|
public String getMixinBaseDir() {
|
||||||
|
return mixinPackage.replace(".", "/");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of all discovered mixins.
|
||||||
|
*/
|
||||||
|
private List<String> mixins = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to add mixin class ot the mixins based on the filepath inside of the class root.
|
||||||
|
* Removes the {@code .class} file suffix, as well as the base mixin package.
|
||||||
|
* <p><b>This method cannot be called after mixin initialization.</p>
|
||||||
|
*
|
||||||
|
* @param className the name or path of a class to be registered as a mixin.
|
||||||
|
*/
|
||||||
|
public void tryAddMixinClass(String className) {
|
||||||
|
String norm = (className.endsWith(".class") ? className.substring(0, className.length() - ".class".length()) : className)
|
||||||
|
.replace("\\", "/")
|
||||||
|
.replace("/", ".");
|
||||||
|
if (norm.startsWith(getMixinPackage() + ".") && !norm.endsWith(".")) {
|
||||||
|
mixins.add(norm.substring(getMixinPackage().length() + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search through the JAR or class directory to find mixins contained in {@link #getMixinPackage()}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<String> getMixins() {
|
||||||
|
if (mixins != null) return mixins;
|
||||||
|
System.out.println("Trying to discover mixins");
|
||||||
|
mixins = new ArrayList<>();
|
||||||
|
URL classUrl = getClass().getProtectionDomain().getCodeSource().getLocation();
|
||||||
|
System.out.println("Found classes at " + classUrl);
|
||||||
|
Path file;
|
||||||
|
try {
|
||||||
|
file = Paths.get(getBaseUrlForClassUrl(classUrl).toURI());
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
System.out.println("Base directory found at " + file);
|
||||||
|
if (Files.isDirectory(file)) {
|
||||||
|
walkDir(file);
|
||||||
|
} else {
|
||||||
|
walkJar(file);
|
||||||
|
}
|
||||||
|
System.out.println("Found mixins: " + mixins);
|
||||||
|
|
||||||
|
return mixins;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search through directory for mixin classes based on {@link #getMixinBaseDir}.
|
||||||
|
*
|
||||||
|
* @param classRoot The root directory in which classes are stored for the default package.
|
||||||
|
*/
|
||||||
|
private void walkDir(Path classRoot) {
|
||||||
|
System.out.println("Trying to find mixins from directory");
|
||||||
|
try (Stream<Path> classes = Files.walk(classRoot.resolve(getMixinBaseDir()))) {
|
||||||
|
classes.map(it -> classRoot.relativize(it).toString())
|
||||||
|
.forEach(this::tryAddMixinClass);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read through a JAR file, trying to find all mixins inside.
|
||||||
|
*/
|
||||||
|
private void walkJar(Path file) {
|
||||||
|
System.out.println("Trying to find mixins from jar file");
|
||||||
|
try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(file))) {
|
||||||
|
ZipEntry next;
|
||||||
|
while ((next = zis.getNextEntry()) != null) {
|
||||||
|
tryAddMixinClass(next.getName());
|
||||||
|
zis.closeEntry();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRefMapperConfig() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -49,7 +49,7 @@ public class MixinNetHandlerPlayClient {
|
||||||
ZombiesUtils.getInstance().getGameManager().splitOrNew(Scoreboard.getRound());
|
ZombiesUtils.getInstance().getGameManager().splitOrNew(Scoreboard.getRound());
|
||||||
} catch (ScoardboardException | InvalidMapException e) {
|
} catch (ScoardboardException | InvalidMapException e) {
|
||||||
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§cFailed to start or split timer. Please send a log to Stachelbeere1248."));
|
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§cFailed to start or split timer. Please send a log to Stachelbeere1248."));
|
||||||
ZombiesUtils.getInstance().getLogger().error(e.getStackTrace());
|
ZombiesUtils.getInstance().getLogger().error(e.fillInStackTrace());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ public class MixinNetHandlerPlayClient {
|
||||||
final String message = packet.getMessage().getUnformattedText().trim();
|
final String message = packet.getMessage().getUnformattedText().trim();
|
||||||
String serverNumber;
|
String serverNumber;
|
||||||
serverNumber = Scoreboard.getServerNumber().orElse("");
|
serverNumber = Scoreboard.getServerNumber().orElse("");
|
||||||
if (LanguageSupport.isWin(message)) ZombiesUtils.getInstance().getGameManager().endGame(serverNumber,true);
|
if (LanguageSupport.isWin(message)) ZombiesUtils.getInstance().getGameManager().endGame(serverNumber, true);
|
||||||
if (LanguageSupport.isLoss(message)) ZombiesUtils.getInstance().getGameManager().endGame(serverNumber, false);
|
if (LanguageSupport.isLoss(message)) ZombiesUtils.getInstance().getGameManager().endGame(serverNumber, false);
|
||||||
}
|
}
|
||||||
|
|
129
src/main/java/xyz/stachel/zombiesutils/timer/Game.java
Normal file
129
src/main/java/xyz/stachel/zombiesutils/timer/Game.java
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils.timer;
|
||||||
|
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.GameMode;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.windows.SLA;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.handlers.Round1Correction;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.timer.recorder.Category;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.CategoryFile;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.GameFile;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.util.ChatComponentText;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class Game {
|
||||||
|
private final Timer timer;
|
||||||
|
private final GameFile gameFile;
|
||||||
|
private final boolean roundOneRecorded;
|
||||||
|
private GameMode gameMode;
|
||||||
|
private Category category;
|
||||||
|
private int round;
|
||||||
|
private boolean escaping;
|
||||||
|
|
||||||
|
public Game(@NotNull final Map map, final String serverNumber) {
|
||||||
|
this.gameMode = GameMode.getNormalForMap(map);
|
||||||
|
this.timer = new Timer();
|
||||||
|
this.gameFile = new GameFile(serverNumber, map);
|
||||||
|
this.category = new Category();
|
||||||
|
this.round = 1;
|
||||||
|
this.roundOneRecorded = true;
|
||||||
|
|
||||||
|
MinecraftForge.EVENT_BUS.register(new Round1Correction(this.timer, serverNumber));
|
||||||
|
if (ZombiesUtils.getInstance().getConfig().isSlaToggled()) SLA.instance = new SLA(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Game(@NotNull final Map map, final String serverNumber, final int round) {
|
||||||
|
this.gameMode = GameMode.getNormalForMap(map);
|
||||||
|
this.timer = new Timer();
|
||||||
|
this.gameFile = new GameFile(serverNumber, map);
|
||||||
|
this.category = new Category();
|
||||||
|
this.round = round;
|
||||||
|
this.roundOneRecorded = (round == 1);
|
||||||
|
|
||||||
|
MinecraftForge.EVENT_BUS.register(new Round1Correction(this.timer, serverNumber));
|
||||||
|
if (ZombiesUtils.getInstance().getConfig().isSlaToggled()) SLA.instance = new SLA(map);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timer getTimer() {
|
||||||
|
return this.timer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCategory(Category category) {
|
||||||
|
this.category = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeDifficulty(final Difficulty difficulty) {
|
||||||
|
this.gameMode = this.gameMode.appliedDifficulty(difficulty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRound() {
|
||||||
|
return round;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameMode getGameMode() {
|
||||||
|
return gameMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void pass(int round) {
|
||||||
|
if ((round == 0) || (this.round == round + 1) || (this.timer.getRoundTime() < 100)) {
|
||||||
|
ZombiesUtils.getInstance().getLogger().debug("SPLIT CANCELLED");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
record();
|
||||||
|
} catch (Exception e) {
|
||||||
|
ZombiesUtils.getInstance().getLogger().error(ExceptionUtils.getStackTrace(e));
|
||||||
|
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§cError recording splits"));
|
||||||
|
}
|
||||||
|
this.timer.split();
|
||||||
|
this.round = round + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void helicopter() {
|
||||||
|
if (!gameMode.isMap(Map.PRISON)) {
|
||||||
|
Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§cEscaping without playing prison???"));
|
||||||
|
ZombiesUtils.getInstance().getLogger().error(Thread.currentThread().getStackTrace());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.escaping = true;
|
||||||
|
this.pass(30);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void record() {
|
||||||
|
this.compareSegment();
|
||||||
|
if (this.roundOneRecorded) this.compareBest();
|
||||||
|
this.gameFile.setSegment(this.round, this.timer.getRoundTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void compareSegment() throws IndexOutOfBoundsException {
|
||||||
|
if (this.escaping) return;
|
||||||
|
final CategoryFile categoryFile = this.category.getByGameMode(this.gameMode);
|
||||||
|
final short bestSegment = categoryFile.getBestSegment(round);
|
||||||
|
final int roundTime = this.getTimer().getRoundTime();
|
||||||
|
|
||||||
|
if (bestSegment == (short) 0) categoryFile.setBestSegment(round, roundTime);
|
||||||
|
else if (roundTime < bestSegment) categoryFile.setBestSegment(round, roundTime);
|
||||||
|
final RecordMessageSender recordMessageSender = new RecordMessageSender(this.category.getName(), round, roundTime, bestSegment);
|
||||||
|
recordMessageSender.roundSplit();
|
||||||
|
recordMessageSender.sendRecordMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void compareBest() throws IndexOutOfBoundsException {
|
||||||
|
final CategoryFile categoryFile = this.category.getByGameMode(this.gameMode);
|
||||||
|
final int round = this.escaping ? 31 : this.round;
|
||||||
|
final int personalBest = categoryFile.getPersonalBest(round);
|
||||||
|
final int gameTime = this.timer.getGameTime();
|
||||||
|
|
||||||
|
if (personalBest == 0) categoryFile.setPersonalBest(round, gameTime);
|
||||||
|
else if (gameTime < personalBest) categoryFile.setPersonalBest(round, gameTime);
|
||||||
|
final RecordMessageSender recordMessageSender = new RecordMessageSender(category.getName(), round, gameTime, personalBest);
|
||||||
|
if (!escaping) recordMessageSender.gameSplit();
|
||||||
|
else recordMessageSender.helicopterSplit();
|
||||||
|
recordMessageSender.sendRecordMessage();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,17 +1,20 @@
|
||||||
package com.github.stachelbeere1248.zombiesutils.timer;
|
package com.github.stachelbeere1248.zombiesutils.timer;
|
||||||
|
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.enums.Difficulty;
|
||||||
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
import com.github.stachelbeere1248.zombiesutils.game.enums.Map;
|
||||||
import com.github.stachelbeere1248.zombiesutils.utils.InvalidMapException;
|
import com.github.stachelbeere1248.zombiesutils.utils.InvalidMapException;
|
||||||
import com.github.stachelbeere1248.zombiesutils.utils.ScoardboardException;
|
import com.github.stachelbeere1248.zombiesutils.utils.ScoardboardException;
|
||||||
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
|
import com.github.stachelbeere1248.zombiesutils.utils.Scoreboard;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class GameManager {
|
public class GameManager {
|
||||||
private final HashMap<String, Game> GAMES;
|
private final HashMap<String, Game> GAMES;
|
||||||
|
private Optional<Difficulty> queuedDifficulty = Optional.empty();
|
||||||
|
private String queuedDifficultyServer = "INVALID";
|
||||||
|
|
||||||
public GameManager() {
|
public GameManager() {
|
||||||
GAMES = new HashMap<>();
|
GAMES = new HashMap<>();
|
||||||
|
@ -28,11 +31,11 @@ public class GameManager {
|
||||||
switch (game.getGameMode().getMap()) {
|
switch (game.getGameMode().getMap()) {
|
||||||
case DEAD_END:
|
case DEAD_END:
|
||||||
case BAD_BLOOD:
|
case BAD_BLOOD:
|
||||||
case PRISON: //TODO: Escape
|
case PRISON:
|
||||||
game.pass((byte) 30);
|
game.pass(30);
|
||||||
break;
|
break;
|
||||||
case ALIEN_ARCADIUM:
|
case ALIEN_ARCADIUM:
|
||||||
game.pass((byte) 105);
|
game.pass(105);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,11 +46,25 @@ public class GameManager {
|
||||||
public void splitOrNew(int round) throws ScoardboardException, InvalidMapException {
|
public void splitOrNew(int round) throws ScoardboardException, InvalidMapException {
|
||||||
final String serverNumber = Scoreboard.getServerNumber().orElseThrow(ScoardboardException::new);
|
final String serverNumber = Scoreboard.getServerNumber().orElseThrow(ScoardboardException::new);
|
||||||
if (GAMES.containsKey(serverNumber)) {
|
if (GAMES.containsKey(serverNumber)) {
|
||||||
if (round == 0) GAMES.put(serverNumber, new Game(Map.getMap().orElseThrow(InvalidMapException::new), serverNumber));
|
if (round == 0) newGame(serverNumber);
|
||||||
else GAMES.get(serverNumber).pass(round);
|
else GAMES.get(serverNumber).pass(round);
|
||||||
} else {
|
} else newGame(serverNumber);
|
||||||
GAMES.put(serverNumber, new Game(Map.getMap().orElseThrow(InvalidMapException::new), serverNumber, round + 1));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void newGame(@NotNull String serverNumber) throws InvalidMapException {
|
||||||
|
final Game game = new Game(Map.getMap().orElseThrow(InvalidMapException::new), serverNumber);
|
||||||
|
if (serverNumber.equals(queuedDifficultyServer)) {
|
||||||
|
this.queuedDifficulty.ifPresent(game::changeDifficulty);
|
||||||
|
}
|
||||||
|
this.queuedDifficulty = Optional.empty();
|
||||||
|
this.GAMES.put(serverNumber, game);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDifficulty(@NotNull Difficulty difficulty) {
|
||||||
|
this.queuedDifficultyServer = Scoreboard.getServerNumber().orElse("INVALID");
|
||||||
|
if (this.GAMES.containsKey(this.queuedDifficultyServer)) {
|
||||||
|
this.GAMES.get(this.queuedDifficultyServer).changeDifficulty(difficulty);
|
||||||
|
} else this.queuedDifficulty = Optional.of(difficulty);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<String> getGames() {
|
public Set<String> getGames() {
|
|
@ -0,0 +1,104 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils.timer;
|
||||||
|
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.event.ClickEvent;
|
||||||
|
import net.minecraft.util.ChatComponentText;
|
||||||
|
import net.minecraft.util.ChatStyle;
|
||||||
|
import org.jetbrains.annotations.Contract;
|
||||||
|
|
||||||
|
public class RecordMessageSender {
|
||||||
|
private final StringBuilder recordMessage;
|
||||||
|
private final int newTime;
|
||||||
|
private final int oldTime;
|
||||||
|
private final int round;
|
||||||
|
private final String deltaString;
|
||||||
|
private final String timeString;
|
||||||
|
private String copyString;
|
||||||
|
|
||||||
|
public RecordMessageSender(final String categoryName, final int round, final int newTime, final int oldTime) {
|
||||||
|
this.recordMessage = new StringBuilder(
|
||||||
|
"§l§a▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n§e Category: §d" + categoryName
|
||||||
|
);
|
||||||
|
this.newTime = newTime;
|
||||||
|
this.oldTime = oldTime;
|
||||||
|
this.deltaString = oldTime != 0 ? " " + formattedDelta(newTime, oldTime) : "";
|
||||||
|
this.timeString = formattedTime(newTime);
|
||||||
|
this.round = round;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendRecordMessage() {
|
||||||
|
final ChatComponentText message = new ChatComponentText(
|
||||||
|
this.recordMessage
|
||||||
|
.append("\n§l§a▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬")
|
||||||
|
.toString()
|
||||||
|
);
|
||||||
|
message.setChatStyle(new ChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, this.copyString)));
|
||||||
|
Minecraft.getMinecraft().thePlayer.addChatMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void gameSplit() {
|
||||||
|
final String announcement = newTime < oldTime && ZombiesUtils.getInstance().getConfig().getAnnouncePB() ?
|
||||||
|
"\n§e§l***§6§l NEW PERSONAL BEST! §e§l***" : "";
|
||||||
|
this.recordMessage.append(announcement)
|
||||||
|
.append("\n§cRound ")
|
||||||
|
.append(round)
|
||||||
|
.append("§e finished at §a")
|
||||||
|
.append(timeString)
|
||||||
|
.append("§9")
|
||||||
|
.append(deltaString)
|
||||||
|
.append("§e!");
|
||||||
|
this.copyString = deltaString.isEmpty() ?
|
||||||
|
String.format("Round %d finished at %s!", round, timeString) :
|
||||||
|
String.format("Round %d finished at %s (%s)!", round, timeString, deltaString);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void roundSplit() {
|
||||||
|
final String announcement = newTime < oldTime && ZombiesUtils.getInstance().getConfig().getAnnouncePB() ?
|
||||||
|
"\n§e§l***§6§l NEW BEST SEGMENT! §e§l***" : "";
|
||||||
|
final String timeString = formattedTime(newTime);
|
||||||
|
final String deltaString = oldTime != 0 ? formattedDelta(newTime, oldTime) : "";
|
||||||
|
this.recordMessage.append(announcement)
|
||||||
|
.append("\n§cRound ")
|
||||||
|
.append(round)
|
||||||
|
.append("§e took §a")
|
||||||
|
.append(timeString)
|
||||||
|
.append("§9")
|
||||||
|
.append(deltaString)
|
||||||
|
.append("§e!");
|
||||||
|
this.copyString = deltaString.isEmpty() ?
|
||||||
|
String.format("Round %d took %s!", round, timeString) :
|
||||||
|
String.format("Round %d took %s (%s)!", round, timeString, deltaString);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void helicopterSplit() {
|
||||||
|
final String announcement = newTime < oldTime && ZombiesUtils.getInstance().getConfig().getAnnouncePB() ?
|
||||||
|
"\n§e§l***§6§l NEW PERSONAL BEST! §e§l***" : "";
|
||||||
|
this.recordMessage.append(announcement)
|
||||||
|
.append("\n§8§lHelicopter §r§ecalled at §a")
|
||||||
|
.append(timeString)
|
||||||
|
.append("§9")
|
||||||
|
.append(deltaString)
|
||||||
|
.append("§e!");
|
||||||
|
this.copyString = deltaString.isEmpty() ?
|
||||||
|
String.format("Helicopter called at %s!", timeString) :
|
||||||
|
String.format("Helicopter called at %s (%s)!", timeString, deltaString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Contract(pure = true)
|
||||||
|
private String formattedTime(int time) {
|
||||||
|
time *= 50;
|
||||||
|
return String.format("%d:%02d.%d%d",
|
||||||
|
time / 60000,
|
||||||
|
(time % 60000) / 1000,
|
||||||
|
(time % 1000) / 100,
|
||||||
|
(time % 100) / 10
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Contract(pure = true)
|
||||||
|
private String formattedDelta(int newTime, int oldTime) {
|
||||||
|
final double delta = (double) (newTime - oldTime) / 20;
|
||||||
|
return String.format("%+.2f", delta);
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,9 +14,11 @@ public class Timer {
|
||||||
public void correctStartTick() {
|
public void correctStartTick() {
|
||||||
this.startTick = this.getCurrentTick() - 200;
|
this.startTick = this.getCurrentTick() - 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
void split() {
|
void split() {
|
||||||
this.roundStart = this.getGameTime();
|
this.roundStart = this.getGameTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getGameTime() {
|
public int getGameTime() {
|
||||||
return (int) (getCurrentTick() - startTick);
|
return (int) (getCurrentTick() - startTick);
|
||||||
}
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
package com.github.stachelbeere1248.zombiesutils.timer.recorder;
|
||||||
|
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.ZombiesUtils;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.game.GameMode;
|
||||||
|
import com.github.stachelbeere1248.zombiesutils.timer.recorder.files.CategoryFile;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class Category {
|
||||||
|
private static String selectedCategory = ZombiesUtils.getInstance().getConfig().getDefaultCategory();
|
||||||
|
public final CategoryFile[] categoryFiles = new CategoryFile[10];
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
public Category() {
|
||||||
|
final File category;
|
||||||
|
if (ZombiesUtils.isHypixel()) category = new File(new File("zombies", "splits"), selectedCategory);
|
||||||
|
else category = new File(new File("zombies", "practise-splits"), selectedCategory);
|
||||||
|
categoryFiles[0] = new CategoryFile(category, GameMode.DEAD_END);
|
||||||
|
categoryFiles[1] = new CategoryFile(category, GameMode.DEAD_END_HARD);
|
||||||
|
categoryFiles[2] = new CategoryFile(category, GameMode.DEAD_END_RIP);
|
||||||
|
|
||||||
|
categoryFiles[3] = new CategoryFile(category, GameMode.BAD_BLOOD);
|
||||||
|
categoryFiles[4] = new CategoryFile(category, GameMode.BAD_BLOOD_HARD);
|
||||||
|
categoryFiles[5] = new CategoryFile(category, GameMode.BAD_BLOOD_RIP);
|
||||||
|
|
||||||
|
categoryFiles[6] = new CategoryFile(category, GameMode.ALIEN_ARCADIUM);
|
||||||
|
|
||||||
|
categoryFiles[7] = new CategoryFile(category, GameMode.PRISON);
|
||||||
|
categoryFiles[8] = new CategoryFile(category, GameMode.PRISON_HARD);
|
||||||
|
categoryFiles[9] = new CategoryFile(category, GameMode.PRISON_RIP);
|
||||||
|
|
||||||
|
this.name = Category.selectedCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSelectedCategory(String selectedCategory) {
|
||||||
|
Category.selectedCategory = selectedCategory;
|
||||||
|
ZombiesUtils.getInstance().getGameManager().getGame().ifPresent(game -> game.setCategory(new Category()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String[] getCategories() {
|
||||||
|
File dir;
|
||||||
|
if (ZombiesUtils.isHypixel()) dir = new File("zombies" + File.separator + "splits");
|
||||||
|
else dir = new File("zombies" + File.separator + "practise-splits");
|
||||||
|
if (dir.isDirectory()) return dir.list();
|
||||||
|
else return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public CategoryFile getByGameMode(@NotNull GameMode gameMode) {
|
||||||
|
switch (gameMode) {
|
||||||
|
case DEAD_END:
|
||||||
|
return categoryFiles[0];
|
||||||
|
case DEAD_END_HARD:
|
||||||
|
return categoryFiles[1];
|
||||||
|
case DEAD_END_RIP:
|
||||||
|
return categoryFiles[2];
|
||||||
|
case BAD_BLOOD:
|
||||||
|
return categoryFiles[3];
|
||||||
|
case BAD_BLOOD_HARD:
|
||||||
|
return categoryFiles[4];
|
||||||
|
case BAD_BLOOD_RIP:
|
||||||
|
return categoryFiles[5];
|
||||||
|
case ALIEN_ARCADIUM:
|
||||||
|
return categoryFiles[6];
|
||||||
|
case PRISON:
|
||||||
|
return categoryFiles[7];
|
||||||
|
case PRISON_HARD:
|
||||||
|
return categoryFiles[8];
|
||||||
|
case PRISON_RIP:
|
||||||
|
return categoryFiles[9];
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Unexpected value: " + gameMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,7 +23,7 @@ public class CategoryData implements ISplitsData {
|
||||||
personalBests = new int[30];
|
personalBests = new int[30];
|
||||||
break;
|
break;
|
||||||
case PRISON:
|
case PRISON:
|
||||||
bestSegments = new short[31];
|
bestSegments = new short[30];
|
||||||
personalBests = new int[31];
|
personalBests = new int[31];
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
|
@ -18,7 +18,7 @@ public class CategoryFile extends File {
|
||||||
public CategoryFile(File category, @NotNull GameMode gameMode) {
|
public CategoryFile(File category, @NotNull GameMode gameMode) {
|
||||||
// Game-directory -> custom category -> file named "MAP_DIFFICULTY.times"
|
// Game-directory -> custom category -> file named "MAP_DIFFICULTY.times"
|
||||||
// Content encoded in StandardCharsets.UTF_16
|
// Content encoded in StandardCharsets.UTF_16
|
||||||
super(category, gameMode.getMap() + "_" + gameMode.getDifficulty() + ".times");
|
super(category, gameMode + ".times");
|
||||||
this.gameMode = gameMode;
|
this.gameMode = gameMode;
|
||||||
this.data = FileManager.categoryReadOrCreate(this);
|
this.data = FileManager.categoryReadOrCreate(this);
|
||||||
}
|
}
|
|
@ -7,7 +7,7 @@ import java.util.regex.Pattern;
|
||||||
|
|
||||||
@SuppressWarnings("SpellCheckingInspection")
|
@SuppressWarnings("SpellCheckingInspection")
|
||||||
public class LanguageSupport {
|
public class LanguageSupport {
|
||||||
private static final String[] LANGUAGEs = {
|
private static final String[] LANGUAGES = {
|
||||||
"EN",
|
"EN",
|
||||||
"FR",
|
"FR",
|
||||||
"DE"
|
"DE"
|
||||||
|
@ -52,6 +52,13 @@ public class LanguageSupport {
|
||||||
return Arrays.stream(words).anyMatch(input::contains);
|
return Arrays.stream(words).anyMatch(input::contains);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isHelicopterIncoming(@NotNull String input) {
|
||||||
|
final String[] words = {
|
||||||
|
"The Helicopter is on its way! Hold out for 120 more seconds!"
|
||||||
|
};
|
||||||
|
return Arrays.stream(words).anyMatch(input::contains);
|
||||||
|
}
|
||||||
|
|
||||||
public static @NotNull Pattern roundPattern(@NotNull String language) {
|
public static @NotNull Pattern roundPattern(@NotNull String language) {
|
||||||
switch (language) {
|
switch (language) {
|
||||||
case "EN":
|
case "EN":
|
||||||
|
@ -65,20 +72,7 @@ public class LanguageSupport {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NotNull Pattern mapPattern(@NotNull String language) {
|
|
||||||
switch (language) {
|
|
||||||
case "EN":
|
|
||||||
return Pattern.compile("Map:.*(Dead End|Bad Blood|Alien Arcadium|Prison)");
|
|
||||||
case "FR":
|
|
||||||
return Pattern.compile("Carte:.*(Dead End|Bad Blood|Alien Arcadium|Prison)");
|
|
||||||
case "DE":
|
|
||||||
return Pattern.compile("Karte:.*(Dead End|Bad Blood|Alien Arcadium|Prison)");
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException("Unexpected value: " + language);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String[] getLanguages() {
|
public static String[] getLanguages() {
|
||||||
return LANGUAGEs;
|
return LANGUAGES;
|
||||||
}
|
}
|
||||||
}
|
}
|
2
src/main/resources/accesstransformer.cfg
Normal file
2
src/main/resources/accesstransformer.cfg
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
public net.minecraft.client.renderer.GlStateManager$Color
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,692 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM",
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,687 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,697 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"SLIME"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"WITHER_SKELETON",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"HBM"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,658 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 880,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 960,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BLAZES"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 920,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BLAZES"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 980,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 880,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 860,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 860,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 720,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 880,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,655 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 880,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 960,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BLAZES"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 920,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BLAZES"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 980,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 880,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 860,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 860,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 720,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 880,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,663 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 880,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 760,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 960,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BLAZES"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 920,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 940,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 980,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 880,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 860,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 860,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 460,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 720,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 880,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,738 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 340,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 620,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 340,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 620,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS",
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1100,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1100,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 0,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 300,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1200,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS",
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 2100,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,738 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 340,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 620,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 340,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 620,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS",
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1100,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1100,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 0,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 300,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1200,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS",
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 2100,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,738 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 340,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 620,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 340,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 480,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 620,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"CELL"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW",
|
||||||
|
"POLICE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 680,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 740,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 440,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 840,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS",
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 400,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 700,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1100,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1000,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1100,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 200,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"waves": [
|
||||||
|
{
|
||||||
|
"ticks": 0,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 300,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 600,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 900,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1200,
|
||||||
|
"prefixes": [
|
||||||
|
"BOSS",
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1500,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 1800,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ticks": 2100,
|
||||||
|
"prefixes": [
|
||||||
|
"WINDOW"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -2,16 +2,16 @@
|
||||||
{
|
{
|
||||||
"modid": "${modid}",
|
"modid": "${modid}",
|
||||||
"name": "Zombies Utils",
|
"name": "Zombies Utils",
|
||||||
"description": "",
|
"description": "An all-in-one mod for Hypixel Zombies. Targets legit speed-runners.",
|
||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"mcversion": "${mcversion}",
|
"mcversion": "${mcversion}",
|
||||||
"url": "https://github.com/Stachelbeere1248/zombies-utils",
|
"url": "https://github.com/Stachelbeere1248/zombies-utils",
|
||||||
"updateUrl": "https://github.com/Stachelbeere1248/zombies-utils/releases",
|
"updateUrl": "https://github.com/Stachelbeere1248/zombies-utils/blob/master/update.json",
|
||||||
"authorList": [
|
"authorList": [
|
||||||
"Stachelbeere1248"
|
"Stachelbeere1248"
|
||||||
],
|
],
|
||||||
"credits": "Seosean, thamid-23",
|
"credits": "Seosean, thamid-23",
|
||||||
"logoFile": "",
|
"logoFile": "zombiesutils.png",
|
||||||
"screenshots": [],
|
"screenshots": [],
|
||||||
"dependencies": []
|
"dependencies": []
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
{
|
{
|
||||||
"package": "com.github.stachelbeere1248.zombiesutils.mixin",
|
"package": "${basePackage}.mixin",
|
||||||
|
"plugin": "${basePackage}.init.AutoDiscoveryMixinPlugin",
|
||||||
"refmap": "mixins.${modid}.refmap.json",
|
"refmap": "mixins.${modid}.refmap.json",
|
||||||
"minVersion": "0.7",
|
"minVersion": "0.7",
|
||||||
"compatibilityLevel": "JAVA_8",
|
"compatibilityLevel": "JAVA_8",
|
||||||
"mixins": [
|
"__comment": "You do not need to manually register mixins in this template. Check the auto discovery mixin plugin for more info."
|
||||||
],
|
|
||||||
"client": [
|
|
||||||
"MixinNetHandlerPlayClient"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
BIN
src/main/resources/zombiesutils.png
Normal file
BIN
src/main/resources/zombiesutils.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 273 B |
13
update.json
Normal file
13
update.json
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"homepage": "https://github.com/Stachelbeere1248/zombies-utils/releases",
|
||||||
|
"promos": {
|
||||||
|
"1.8.9-latest": "1.3.7",
|
||||||
|
"1.8.9-recommended": "1.3.7"
|
||||||
|
},
|
||||||
|
"1.8.9": {
|
||||||
|
"1.3.6": "SST Prefixes, added update checker url",
|
||||||
|
"1.3.7-PRE_1": "patch: difficiluty detection",
|
||||||
|
"1.3.7-PRE_2": "fix instant crash",
|
||||||
|
"1.3.7": "mark release, fix faded prefix colors"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue