Compare commits
147 commits
forge-1.26
...
neoforge
Author | SHA1 | Date | |
---|---|---|---|
02556bc43f | |||
7d10f38daf | |||
cc00257f36 | |||
c8e43a58e0 | |||
2173b6ef6e | |||
bd51eb7621 | |||
e8bd28848a | |||
dfeb368222 | |||
d62ae7be34 | |||
420a5f120b | |||
f9cb3c0537 | |||
0cd721fa71 | |||
fbbc208ec5 | |||
48ee3dd350 | |||
9b82e1a5a4 | |||
2840445bfc | |||
ecf52cd253 | |||
f6156bdc50 | |||
8c94e959d3 | |||
ae6af86e7b | |||
d33686aaf9 | |||
52d13f9e80 | |||
9a6f6de8f8 | |||
19f422a371 | |||
1f066bfc3f | |||
7dd906ef8f | |||
7d99ffc1f4 | |||
e430c38ac8 | |||
570c68c675 | |||
2eea03730b | |||
b9fd70c8da | |||
d1962d0525 | |||
6628079b8d | |||
99d8798bc2 | |||
e272e2d83a | |||
5914cad3fe | |||
c40c7ab570 | |||
ea4920a1b5 | |||
16346da98c | |||
d874acb2ce | |||
4a0ab20f26 | |||
e9a89e85f7 | |||
7c321a7827 | |||
cb27ae0f98 | |||
7a5c9506c9 | |||
aac81f20bc | |||
4e38f4a89a | |||
cd6106a19c | |||
cabc9766aa | |||
45d115510d | |||
c5006f4c38 | |||
c553e24ad6 | |||
52458bbfc5 | |||
934fc3842b | |||
89f19f3218 | |||
cecf687c7e | |||
82039dcfd2 | |||
8d18405a61 | |||
a88d812bb3 | |||
6afd7115c2 | |||
2e40c403cd | |||
b9d128a647 | |||
606d5cf575 | |||
25e503ddfa | |||
3f36931e0e | |||
b18b159259 | |||
e2f474564d | |||
ddcfa9190f | |||
ecebdc91fa | |||
0d79d88474 | |||
3f8a12a4ad | |||
c0e70007f7 | |||
6c2265f184 | |||
3f7c922c5d | |||
03ea6d3bc9 | |||
6b21afdce9 | |||
c8066e2550 | |||
b0a58384f3 | |||
caa90f7fa6 | |||
7ba0b7b307 | |||
83b7e99cee | |||
c0fddb6955 | |||
aac4f9b6aa | |||
18b4fac876 | |||
86cbc5e7ba | |||
bba99d4e6a | |||
356502f722 | |||
75976c8d9a | |||
62774b0b0c | |||
846840c3a7 | |||
43bb0c7059 | |||
288ed1cfd6 | |||
b8a32a490e | |||
ae3cbfe4f6 | |||
9a481f95d0 | |||
24a29eaba6 | |||
9fab572800 | |||
6f0c223c9d | |||
17c39a5329 | |||
4879aaefd1 | |||
46f8e22c8b | |||
54afb08263 | |||
2616e73407 | |||
edc3246bd1 | |||
b1b8451331 | |||
f635badfe1 | |||
fb2c4cd13c | |||
830f4255bb | |||
490518a58a | |||
e3ba1abdae | |||
d564756c42 | |||
64a7fb263f | |||
52b1b5ee05 | |||
2e71ea97ad | |||
f9178777ee | |||
9d4cd5c4e7 | |||
85c4588470 | |||
7770698947 | |||
a3d4ae74ef | |||
f56891e1d0 | |||
d58ef1585a | |||
2cbad47b33 | |||
d57f18d6c2 | |||
c0bbf92efc | |||
5708e46118 | |||
edf2d3926d | |||
3caf1d31bf | |||
01bf977fd6 | |||
75b710c3d4 | |||
0c5e823839 | |||
c8e405f685 | |||
29d45ea0f9 | |||
63fb52e75f | |||
4881f056f5 | |||
3cc138dd47 | |||
8d15bbb593 | |||
36b25b7d07 | |||
4801558716 | |||
69b72cadd8 | |||
f245947686 | |||
08b8c7d412 | |||
8e3b028f6c | |||
7c4d4b6eb8 | |||
02684bfbad | |||
b00f500e36 | |||
a1de902d69 | |||
c9bf87271d |
45 changed files with 2542 additions and 1293 deletions
|
@ -23,9 +23,9 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- run: git clone --depth=1 --no-single-branch https://git.seodisparate.com/stephenseo/TurnBasedMinecraftMod.git TurnBasedMinecraftMod
|
- run: git clone --depth=1 --no-single-branch https://git.seodisparate.com/stephenseo/TurnBasedMinecraftMod.git TurnBasedMinecraftMod
|
||||||
- run: cd TurnBasedMinecraftMod && git checkout ${GITHUB_REF_NAME}
|
- run: cd TurnBasedMinecraftMod && git checkout ${GITHUB_REF_NAME}
|
||||||
- run: cd TurnBasedMinecraftMod && sed -i '/org.gradle.jvmargs/s/Xmx[0-9]\+[mMgG]/Xmx1024m/' gradle.properties
|
- run: cd TurnBasedMinecraftMod && sed -i '/org.gradle.jvmargs/s/Xmx[0-9]\+[mMgG]/Xmx1024m/' gradle.properties && echo 'neogradle.subsystems.decompiler.maxThreads=1' >> gradle.properties
|
||||||
- run: cd TurnBasedMinecraftMod && ./gradlew --console=plain build
|
- run: cd TurnBasedMinecraftMod && ./gradlew --console=plain build
|
||||||
- run: cd TurnBasedMinecraftMod/build/libs && find . -regex '.*all.jar$' -exec sha256sum '{}' ';' -exec bash -c 'sha256sum {} >> sha256sums.txt' ';' && java --version >> javaVersion.txt && javac --version >> javaVersion.txt
|
- run: cd TurnBasedMinecraftMod/build/libs && find . -type f -regex '.*all.jar$' -exec sha256sum '{}' ';' -exec bash -c 'sha256sum {} >> sha256sums.txt' ';' && java --version >> javaVersion.txt && javac --version >> javaVersion.txt
|
||||||
- name: Create release and attach jar
|
- name: Create release and attach jar
|
||||||
run: |
|
run: |
|
||||||
curl --fail-with-body -X 'POST' \
|
curl --fail-with-body -X 'POST' \
|
||||||
|
@ -35,7 +35,7 @@ jobs:
|
||||||
-H 'Content-Type: application/json' \
|
-H 'Content-Type: application/json' \
|
||||||
-d "{
|
-d "{
|
||||||
\"name\": \"TurnBasedMinecraftMod version ${GITHUB_REF_NAME}\",
|
\"name\": \"TurnBasedMinecraftMod version ${GITHUB_REF_NAME}\",
|
||||||
\"body\": \"See the [Changelog](https://git.seodisparate.com/stephenseo/TurnBasedMinecraftMod/src/branch/forge/Changelog.md)
|
\"body\": \"See the [Changelog](https://git.seodisparate.com/stephenseo/TurnBasedMinecraftMod/src/branch/neoforge/Changelog.md)
|
||||||
|
|
||||||
$(java --version | sed -n '1p;2,$s/^/ /p')
|
$(java --version | sed -n '1p;2,$s/^/ /p')
|
||||||
$(javac --version)
|
$(javac --version)
|
||||||
|
|
76
Changelog.md
76
Changelog.md
|
@ -1,6 +1,80 @@
|
||||||
# Upcoming changes
|
# Upcoming changes
|
||||||
|
|
||||||
## Version Forge-1.26.2
|
# Version Forge-1.26.5
|
||||||
|
|
||||||
|
Update TBM\_Config.toml to have haste\_speed and slow\_speed for all mob
|
||||||
|
entries.
|
||||||
|
|
||||||
|
Update Config to merge in new changes. This means that the existing config will
|
||||||
|
be overwritten much less frequently (if ever).
|
||||||
|
|
||||||
|
Update to Forge 52.0.26 (MC 1.21.1).
|
||||||
|
|
||||||
|
# Version NeoForge-1.26.5-MC-1.21.1
|
||||||
|
|
||||||
|
Update TBM\_Config.toml to have haste\_speed and slow\_speed for all mob
|
||||||
|
entries.
|
||||||
|
|
||||||
|
Update ClientConfigGui to quit to mod-menu screen in NeoForge (before, it quit
|
||||||
|
to the main screen or current game).
|
||||||
|
|
||||||
|
Update Config to merge in new changes. This means that the existing config will
|
||||||
|
be overwritten much less frequently (if ever).
|
||||||
|
|
||||||
|
Update to NeoForge 21.1.74 (MC 1.21.1).
|
||||||
|
|
||||||
|
# Version NeoForge-1.26.5
|
||||||
|
|
||||||
|
Update TBM\_Config.toml to have haste\_speed and slow\_speed for all mob
|
||||||
|
entries.
|
||||||
|
|
||||||
|
Update ClientConfigGui to quit to mod-menu screen in NeoForge (before, it quit
|
||||||
|
to the main screen or current game).
|
||||||
|
|
||||||
|
Update Config to merge in new changes. This means that the existing config will
|
||||||
|
be overwritten much less frequently (if ever).
|
||||||
|
|
||||||
|
Update to NeoForge 21.3.11-beta (MC 1.21.3).
|
||||||
|
|
||||||
|
# Version Forge-1.26.4
|
||||||
|
|
||||||
|
[Add support for "per-player-stats" in Turn-Based-Battle.](https://stephen-seo.github.io/TurnBasedMinecraftMod/server_config/#per-player-settings)
|
||||||
|
|
||||||
|
Update to Forge 52.0.24 (MC 1.21.1).
|
||||||
|
|
||||||
|
# Version NeoForge-1.26.4-MC-1.21.1
|
||||||
|
|
||||||
|
[Add support for "per-player-stats" in Turn-Based-Battle.](https://stephen-seo.github.io/TurnBasedMinecraftMod/server_config/#per-player-settings)
|
||||||
|
|
||||||
|
Update to Neoforge 21.1.73 (Minecraft 1.21.1).
|
||||||
|
|
||||||
|
# Version NeoForge-1.26.4
|
||||||
|
|
||||||
|
[Add support for "per-player-stats" in Turn-Based-Battle.](https://stephen-seo.github.io/TurnBasedMinecraftMod/server_config/#per-player-settings)
|
||||||
|
|
||||||
|
Update to NeoForge 21.3.6-beta (MC 1.21.3).
|
||||||
|
|
||||||
|
# Version Forge-1.26.3
|
||||||
|
|
||||||
|
Tweak to "Ping" packet to not create client-local Battle instance if it does
|
||||||
|
not exist.
|
||||||
|
|
||||||
|
# Version NeoForge-1.26.3
|
||||||
|
|
||||||
|
Port to NeoForge 21.3.2-beta (MC 1.21.3).
|
||||||
|
|
||||||
|
Note that MC 1.21.1 (NeoForge 21.1.72) will still be supported in a separate
|
||||||
|
branch (neoforge\_mc1.21.1) until MC version 1.22 is released.
|
||||||
|
|
||||||
|
Tweak to "Ping" packet to not create client-local Battle instance if it does
|
||||||
|
not exist.
|
||||||
|
|
||||||
|
# Version NeoForge-1.26.3-MC-1.21.1
|
||||||
|
|
||||||
|
Tweak to "Ping" packet to not create client-local Battle instance if it does
|
||||||
|
not exist.
|
||||||
|
|
||||||
|
# Version Forge-1.26.2
|
||||||
|
|
||||||
Show battling Entities next to their attack button in the BattleGUI.
|
Show battling Entities next to their attack button in the BattleGUI.
|
||||||
|
|
||||||
|
|
16
FAQ.md
16
FAQ.md
|
@ -41,17 +41,16 @@ work.
|
||||||
## How do I configure battle music?
|
## How do I configure battle music?
|
||||||
|
|
||||||
There is a way to edit client-config that deals with music settings, like what
|
There is a way to edit client-config that deals with music settings, like what
|
||||||
mob groups trigger battle/silly music and volume. This menu can be opened in one
|
mob groups trigger battle/silly music and volume. This menu can be opened in two
|
||||||
way.
|
ways.
|
||||||
|
|
||||||
- Run the command `/tbm-client-edit` to open the menu.
|
- Run the command `/tbm-client-edit` to open the menu.
|
||||||
|
- Open the Mod list from the options screen, click on TBMM on the left column
|
||||||
|
and click on "Config". (Note that this way of opening the client-config-gui
|
||||||
|
is unavailable on Forge, and is only available on NeoForge.)
|
||||||
|
|
||||||
Note that "Accept" must be clicked on to save the client-config.
|
Note that "Accept" must be clicked on to save the client-config.
|
||||||
|
|
||||||
Note that the NeoForge version of this mod can access this menu through the mod
|
|
||||||
list GUI. Minecraft Forge currently does not have this capability, so it can be
|
|
||||||
only accessed via the command.
|
|
||||||
|
|
||||||
## Why do passive mobs don't start turn-based battle?
|
## Why do passive mobs don't start turn-based battle?
|
||||||
|
|
||||||
By default, the `passive` category is set to "ignore turn-based-battle" in the
|
By default, the `passive` category is set to "ignore turn-based-battle" in the
|
||||||
|
@ -80,6 +79,11 @@ command](https://youtu.be/9xkbHNWkcIY).
|
||||||
|
|
||||||
## I updated the mod, but now my config changes are back to default, what happened?
|
## I updated the mod, but now my config changes are back to default, what happened?
|
||||||
|
|
||||||
|
*As of Version 1.26.5 and onwards, this should happen less often!*
|
||||||
|
Version 1.26.5 introduces more robust config updating such that entries that
|
||||||
|
exist in the default config, but not in the current config will be appended to
|
||||||
|
the current config.
|
||||||
|
|
||||||
Sometimes, I add new mob entries to the config, and increment the version
|
Sometimes, I add new mob entries to the config, and increment the version
|
||||||
number of the config. When the server/client starts, it checks the default
|
number of the config. When the server/client starts, it checks the default
|
||||||
config's version number with the existing config's version number. If the
|
config's version number with the existing config's version number. If the
|
||||||
|
|
29
README.md
29
README.md
|
@ -11,6 +11,10 @@ https://www.curseforge.com/minecraft/mc-mods/turnbasedminecraft/files
|
||||||
https://modrinth.com/mod/turnbasedmc
|
https://modrinth.com/mod/turnbasedmc
|
||||||
https://git.seodisparate.com/stephenseo/TurnBasedMinecraftMod/releases
|
https://git.seodisparate.com/stephenseo/TurnBasedMinecraftMod/releases
|
||||||
|
|
||||||
|
# Documentation Page
|
||||||
|
|
||||||
|
https://stephen-seo.github.io/TurnBasedMinecraftMod/
|
||||||
|
|
||||||
# Forge or NeoForge
|
# Forge or NeoForge
|
||||||
|
|
||||||
The `forge` branch tracks the version of the mod for Minecraft Forge.
|
The `forge` branch tracks the version of the mod for Minecraft Forge.
|
||||||
|
@ -19,7 +23,7 @@ The `neoforge` branch tracks the version of the mod for Minecraft NeoForge.
|
||||||
|
|
||||||
# What changed in what version
|
# What changed in what version
|
||||||
|
|
||||||
See the [Changelog](https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/master/Changelog.md)
|
See the [Changelog](https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md)
|
||||||
|
|
||||||
# Things you may need to know about this mod
|
# Things you may need to know about this mod
|
||||||
|
|
||||||
|
@ -32,13 +36,18 @@ The config file `.minecraft/config/TurnBasedMinecraft/TBM_Config.toml` is commen
|
||||||
with info on what each option does. ~~It will also be moved if a newer version
|
with info on what each option does. ~~It will also be moved if a newer version
|
||||||
of this mod has a newer version of the config file (usually renamed with a
|
of this mod has a newer version of the config file (usually renamed with a
|
||||||
timestamp).~~ ~~I will try my best to not move the previous version config, but rather
|
timestamp).~~ ~~I will try my best to not move the previous version config, but rather
|
||||||
edit the previous version config to have new options.~~ When a new config version is made,
|
edit the previous version config to have new options.~~ ~~When a new config version is made,
|
||||||
usually because a new entry has been added, the existing config is renamed to a file with
|
usually because a new entry has been added, the existing config is renamed to a file with
|
||||||
a timestamp in the filename of when it was replaced. One can set a config option in the
|
a timestamp in the filename of when it was replaced. One can set a config option in the
|
||||||
config to prevent it being overwritten if necessary.
|
config to prevent it being overwritten if necessary.~~
|
||||||
|
|
||||||
Some options in the config file only affect the Server, and ~~some only affect the Client.~~
|
*As of version 1.26.5 of this mod, this should happen less frequently!*
|
||||||
[Client-config can only be opened with `/tbm-client-edit`.](https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/forge/FAQ.md#how-do-i-configure-battle-music)
|
Version 1.26.5 introduces changes that allow entries that exist in the default
|
||||||
|
config but not in the current config to be appended in the current config.
|
||||||
|
|
||||||
|
Some options in the config file only affect the Server, and ~~some only affect the Client~~.
|
||||||
|
Client config has been moved to a
|
||||||
|
[separate system provided by NeoForge](https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/FAQ.md#how-do-i-configure-battle-music).
|
||||||
When playing multiplayer, some configuration of the config on the server may be needed.
|
When playing multiplayer, some configuration of the config on the server may be needed.
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
|
@ -73,7 +82,7 @@ configured for them.)
|
||||||
|
|
||||||
Simply invoke `./gradlew build` in the mod directory and after some time the
|
Simply invoke `./gradlew build` in the mod directory and after some time the
|
||||||
finished jar will be saved at
|
finished jar will be saved at
|
||||||
`build/libs/TurnBasedMinecraft-Forge-1.26.2-all.jar`
|
`build/libs/TurnBasedMinecraft-NeoForge-1.26.5-all.jar`
|
||||||
|
|
||||||
# Reproducibility
|
# Reproducibility
|
||||||
|
|
||||||
|
@ -82,16 +91,16 @@ more details.
|
||||||
|
|
||||||
# Other notes
|
# Other notes
|
||||||
|
|
||||||
This mod uses [j-ogg-vorbis](https://github.com/stephengold/j-ogg-all) available
|
This mod uses [j-ogg-vorbis](https://github.com/stephengold/j-ogg-all)
|
||||||
from [http://www.j-ogg.de](http://www.j-ogg.de) and copyrighted by Tor-Einar
|
available from [http://www.j-ogg.de](http://www.j-ogg.de) and copyrighted by
|
||||||
Jarnbjo.
|
Tor-Einar Jarnbjo.
|
||||||
|
|
||||||
This mod also uses [JavaMP3](https://github.com/kevinstadler/JavaMP3)
|
This mod also uses [JavaMP3](https://github.com/kevinstadler/JavaMP3)
|
||||||
which is licensed under the [MIT License](https://github.com/kevinstadler/JavaMP3/blob/master/LICENSE).
|
which is licensed under the [MIT License](https://github.com/kevinstadler/JavaMP3/blob/master/LICENSE).
|
||||||
|
|
||||||
# Frequently Asked Questions
|
# Frequently Asked Questions
|
||||||
|
|
||||||
[See the FAQ page.](https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/master/FAQ.md)
|
[See the FAQ page.](https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/FAQ.md)
|
||||||
|
|
||||||
# Related Videos
|
# Related Videos
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,149 @@ Starting with version 1.24.0 of this mod, this file will list what version of
|
||||||
Java was used to compile the jars. In theory, using the same version of Java
|
Java was used to compile the jars. In theory, using the same version of Java
|
||||||
should result in an identical jar due to reproducible builds.
|
should result in an identical jar due to reproducible builds.
|
||||||
|
|
||||||
|
## NeoForge 1.26.5
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.5-all.jar
|
||||||
|
b02d0abf6f2fbc5c3b718b548309efacb159ec8f86c7d2d653fc0b73234e761a build/libs/TurnBasedMinecraft-NeoForge-1.26.5-all.jar
|
||||||
|
|
||||||
|
## NeoForge 1.26.5-MC-1.21.1
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.5-MC-1.21.1-all.jar
|
||||||
|
c529ebe3dd48608afd27e3393b201036ce84d3be0a850cdf48039fbc4820629e build/libs/TurnBasedMinecraft-NeoForge-1.26.5-MC-1.21.1-all.jar
|
||||||
|
|
||||||
|
## Forge 1.26.5
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-Forge-1.26.5-all.jar
|
||||||
|
c8ed6e2e9a433c40901d41ec604bc6260fc5b231f5d3859832ecbe76b0f5a9e2 build/libs/TurnBasedMinecraft-Forge-1.26.5-all.jar
|
||||||
|
|
||||||
|
## NeoForge 1.26.4
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.4-all.jar
|
||||||
|
ddab3e58638ba70c7b10f84f4aa7ac81e8e5a63cb47d0ebf7e7aa4bcf3c0a1ba build/libs/TurnBasedMinecraft-NeoForge-1.26.4-all.jar
|
||||||
|
|
||||||
|
## NeoForge 1.26.4-MC-1.21.1
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.4-MC-1.21.1-all.jar
|
||||||
|
e49665c67452cae8fab8f356d187b860893885afbe6dab1e3a869331a12f1cf5 build/libs/TurnBasedMinecraft-NeoForge-1.26.4-MC-1.21.1-all.jar
|
||||||
|
|
||||||
|
## Forge 1.26.4
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-Forge-1.26.4-all.jar
|
||||||
|
2052b1e8f6a49374b6a9bbc0c0547c1972d5454ea9afa5f0455c534285d6cada build/libs/TurnBasedMinecraft-Forge-1.26.4-all.jar
|
||||||
|
|
||||||
|
## NeoForge 1.26.3
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.3-all.jar
|
||||||
|
2c8f17499a475f22493244e16f499bed46ea6a32a20f6bd2be5b3151464b2225 build/libs/TurnBasedMinecraft-NeoForge-1.26.3-all.jar
|
||||||
|
|
||||||
|
## NeoForge 1.26.3-MC-1.21.1
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.3-MC-1.21.1-all.jar
|
||||||
|
311018353109da4d9a49379d9ebc29dbac7e2aef3331ec177bd0edc300d15b89 /home/public/TurnBasedMC/TurnBasedMinecraft-NeoForge-1.26.3-MC-1.21.1-all.jar
|
||||||
|
|
||||||
|
## Forge 1.26.3
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-Forge-1.26.3-all.jar
|
||||||
|
5fdaffd14f75c2340a410c37811a5f7644ade3c6852db4b982bf3161bab1aae7 build/libs/TurnBasedMinecraft-Forge-1.26.3-all.jar
|
||||||
|
|
||||||
|
## NeoForge 1.26.2
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-NeoForge-1.26.2-all.jar
|
||||||
|
d55f516a2166d266c0d60e881b170cb734372ac01c8a25cf12e2f593f7b87004 build/libs/TurnBasedMinecraft-NeoForge-1.26.2-all.jar
|
||||||
|
|
||||||
|
## Forge 1.26.2
|
||||||
|
|
||||||
|
$ java --version
|
||||||
|
openjdk 21.0.5 2024-10-15
|
||||||
|
OpenJDK Runtime Environment (build 21.0.5+11)
|
||||||
|
OpenJDK 64-Bit Server VM (build 21.0.5+11, mixed mode, sharing)
|
||||||
|
|
||||||
|
$ javac --version
|
||||||
|
javac 21.0.5
|
||||||
|
|
||||||
|
$ sha256sum build/libs/TurnBasedMinecraft-Forge-1.26.2-all.jar
|
||||||
|
d06f3cc8e050aa4086dce187ffce2cc5049c67c401a0cd4608138880b0868e89 build/libs/TurnBasedMinecraft-Forge-1.26.2-all.jar
|
||||||
|
|
||||||
## Forge 1.26.1
|
## Forge 1.26.1
|
||||||
|
|
||||||
$ java --version
|
$ java --version
|
||||||
|
|
269
build.gradle
269
build.gradle
|
@ -1,108 +1,106 @@
|
||||||
plugins {
|
plugins {
|
||||||
id 'eclipse'
|
id 'java-library'
|
||||||
id 'idea'
|
|
||||||
id 'maven-publish'
|
id 'maven-publish'
|
||||||
id 'net.minecraftforge.gradle' version '[6.0.24,6.2)'
|
id 'net.neoforged.moddev' version '1.0.21'
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('wrapper', Wrapper).configure {
|
||||||
|
// Define wrapper values here so as to not have to always do so when updating gradlew.properties.
|
||||||
|
// Switching this to Wrapper.DistributionType.ALL will download the full gradle sources that comes with
|
||||||
|
// documentation attached on cursor hover of gradle classes and methods. However, this comes with increased
|
||||||
|
// file size for Gradle. If you do switch this to ALL, run the Gradle wrapper task twice afterwards.
|
||||||
|
// (Verify by checking gradle/wrapper/gradle-wrapper.properties to see if distributionUrl now points to `-all`)
|
||||||
|
distributionType = Wrapper.DistributionType.BIN
|
||||||
}
|
}
|
||||||
|
|
||||||
version = mod_version
|
version = mod_version
|
||||||
group = mod_group_id
|
group = mod_group_id
|
||||||
|
|
||||||
base {
|
repositories {
|
||||||
archivesName = "TurnBasedMinecraft-Forge"
|
mavenLocal()
|
||||||
|
|
||||||
|
flatDir {
|
||||||
|
dir 'libs'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mojang ships Java 21 to end users in 1.20.5+, so your mod should target Java 21.
|
base {
|
||||||
|
archivesName = "TurnBasedMinecraft-NeoForge"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mojang ships Java 21 to end users starting in 1.20.5, so mods should target Java 21.
|
||||||
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
|
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
|
||||||
println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"
|
println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch'))
|
||||||
|
|
||||||
jarJar.enable()
|
neoForge {
|
||||||
|
// Specify the version of NeoForge to use.
|
||||||
|
version = project.neo_version
|
||||||
|
|
||||||
minecraft {
|
parchment {
|
||||||
// The mappings can be changed at any time and must be in the following format.
|
mappingsVersion = project.parchment_mappings_version
|
||||||
// Channel: Version:
|
minecraftVersion = project.parchment_minecraft_version
|
||||||
// official MCVersion Official field/method names from Mojang mapping files
|
}
|
||||||
// parchment YYYY.MM.DD-MCVersion Open community-sourced parameter names and javadocs layered on top of official
|
|
||||||
//
|
|
||||||
// You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
|
|
||||||
// See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
|
|
||||||
//
|
|
||||||
// Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge
|
|
||||||
// Additional setup is needed to use their mappings: https://parchmentmc.org/docs/getting-started
|
|
||||||
//
|
|
||||||
// Use non-default mappings at your own risk. They may not always work.
|
|
||||||
// Simply re-run your setup task after changing the mappings to update your workspace.
|
|
||||||
mappings channel: mapping_channel, version: mapping_version
|
|
||||||
|
|
||||||
// Tell FG to not automtically create the reobf tasks, as we now use Official mappings at runtime, If you don't use them at dev time then you'll have to fix your reobf yourself.
|
// This line is optional. Access Transformers are automatically detected
|
||||||
reobf = false
|
// accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg')
|
||||||
|
|
||||||
// When true, this property will have all Eclipse/IntelliJ IDEA run configurations run the "prepareX" task for the given run configuration before launching the game.
|
|
||||||
// In most cases, it is not necessary to enable.
|
|
||||||
// enableEclipsePrepareRuns = true
|
|
||||||
// enableIdeaPrepareRuns = true
|
|
||||||
|
|
||||||
// This property allows configuring Gradle's ProcessResources task(s) to run on IDE output locations before launching the game.
|
|
||||||
// It is REQUIRED to be set to true for this template to function.
|
|
||||||
// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html
|
|
||||||
copyIdeResources = true
|
|
||||||
|
|
||||||
// When true, this property will add the folder name of all declared run configurations to generated IDE run configurations.
|
|
||||||
// The folder name can be set on a run configuration using the "folderName" property.
|
|
||||||
// By default, the folder name of a run configuration is the name of the Gradle project containing it.
|
|
||||||
// generateRunFolders = true
|
|
||||||
|
|
||||||
// This property enables access transformers for use in development.
|
|
||||||
// They will be applied to the Minecraft artifact.
|
|
||||||
// The access transformer file can be anywhere in the project.
|
|
||||||
// However, it must be at "META-INF/accesstransformer.cfg" in the final mod jar to be loaded by Forge.
|
|
||||||
// This default location is a best practice to automatically put the file in the right place in the final jar.
|
|
||||||
// See https://docs.minecraftforge.net/en/latest/advanced/accesstransformers/ for more information.
|
|
||||||
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
|
|
||||||
|
|
||||||
// Default run configurations.
|
// Default run configurations.
|
||||||
// These can be tweaked, removed, or duplicated as needed.
|
// These can be tweaked, removed, or duplicated as needed.
|
||||||
runs {
|
runs {
|
||||||
// applies to all the run configs below
|
|
||||||
configureEach {
|
|
||||||
workingDirectory project.file('run')
|
|
||||||
|
|
||||||
// Recommended logging data for a userdev environment
|
|
||||||
// The markers can be added/remove as needed separated by commas.
|
|
||||||
// "SCAN": For mods scan.
|
|
||||||
// "REGISTRIES": For firing of registry events.
|
|
||||||
// "REGISTRYDUMP": For getting the contents of all registries.
|
|
||||||
property 'forge.logging.markers', 'REGISTRIES'
|
|
||||||
|
|
||||||
// Recommended logging level for the console
|
|
||||||
// You can set various levels here.
|
|
||||||
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
|
|
||||||
property 'forge.logging.console.level', 'debug'
|
|
||||||
}
|
|
||||||
|
|
||||||
client {
|
client {
|
||||||
|
client()
|
||||||
|
|
||||||
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
|
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
|
||||||
property 'forge.enabledGameTestNamespaces', mod_id
|
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
property 'forge.enabledGameTestNamespaces', mod_id
|
server()
|
||||||
args '--nogui'
|
programArgument '--nogui'
|
||||||
|
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
|
||||||
}
|
}
|
||||||
|
|
||||||
// This run config launches GameTestServer and runs all registered gametests, then exits.
|
// This run config launches GameTestServer and runs all registered gametests, then exits.
|
||||||
// By default, the server will crash when no gametests are provided.
|
// By default, the server will crash when no gametests are provided.
|
||||||
// The gametest system is also enabled by default for other run configs under the /test command.
|
// The gametest system is also enabled by default for other run configs under the /test command.
|
||||||
gameTestServer {
|
gameTestServer {
|
||||||
property 'forge.enabledGameTestNamespaces', mod_id
|
type = "gameTestServer"
|
||||||
|
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
|
||||||
}
|
}
|
||||||
|
|
||||||
data {
|
data {
|
||||||
// example of overriding the workingDirectory set in configureEach above
|
data()
|
||||||
workingDirectory project.file('run-data')
|
|
||||||
|
// example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it
|
||||||
|
// gameDirectory = project.file('run-data')
|
||||||
|
|
||||||
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
|
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
|
||||||
args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
|
programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
|
||||||
|
}
|
||||||
|
|
||||||
|
// applies to all the run configs above
|
||||||
|
configureEach {
|
||||||
|
// Recommended logging data for a userdev environment
|
||||||
|
// The markers can be added/remove as needed separated by commas.
|
||||||
|
// "SCAN": For mods scan.
|
||||||
|
// "REGISTRIES": For firing of registry events.
|
||||||
|
// "REGISTRYDUMP": For getting the contents of all registries.
|
||||||
|
systemProperty 'forge.logging.markers', 'REGISTRIES'
|
||||||
|
|
||||||
|
// Recommended logging level for the console
|
||||||
|
// You can set various levels here.
|
||||||
|
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
|
||||||
|
logLevel = org.slf4j.event.Level.DEBUG
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mods {
|
||||||
|
// define mod <-> source bindings
|
||||||
|
// these are used to tell the game which sources are for which mod
|
||||||
|
// mostly optional in a single mod project
|
||||||
|
// but multi mod projects should define one per mod
|
||||||
|
"${mod_id}" {
|
||||||
|
sourceSet(sourceSets.main)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,88 +108,102 @@ minecraft {
|
||||||
// Include resources generated by data generators.
|
// Include resources generated by data generators.
|
||||||
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
||||||
|
|
||||||
repositories {
|
// Sets up a dependency configuration called 'localRuntime'.
|
||||||
// Put repositories for dependencies here
|
// This configuration should be used instead of 'runtimeOnly' to declare
|
||||||
// ForgeGradle automatically adds the Forge maven and Maven Central for you
|
// a dependency that will be present for runtime testing but that is
|
||||||
|
// "optional", meaning it will not be pulled by dependents of this mod.
|
||||||
flatDir {
|
configurations {
|
||||||
dir 'libs'
|
runtimeClasspath.extendsFrom localRuntime
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Specify the version of Minecraft to use.
|
// Example optional mod dependency with JEI
|
||||||
// Any artifact can be supplied so long as it has a "userdev" classifier artifact and is a compatible patcher artifact.
|
|
||||||
// The "userdev" classifier will be requested and setup by ForgeGradle.
|
|
||||||
// If the group id is "net.minecraft" and the artifact id is one of ["client", "server", "joined"],
|
|
||||||
// then special handling is done to allow a setup of a vanilla dependency without the use of an external repository.
|
|
||||||
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
|
|
||||||
|
|
||||||
// Example mod dependency with JEI
|
|
||||||
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
|
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
|
||||||
// compileOnly "mezz.jei:jei-${mc_version}-common-api:${jei_version}"
|
// compileOnly "mezz.jei:jei-${mc_version}-common-api:${jei_version}"
|
||||||
// compileOnly "mezz.jei:jei-${mc_version}-forge-api:${jei_version}"
|
// compileOnly "mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}"
|
||||||
// runtimeOnly "mezz.jei:jei-${mc_version}-forge:${jei_version}"
|
// We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it
|
||||||
|
// localRuntime "mezz.jei:jei-${mc_version}-neoforge:${jei_version}"
|
||||||
|
|
||||||
// Example mod dependency using a mod jar from ./libs with a flat dir repository
|
// Example mod dependency using a mod jar from ./libs with a flat dir repository
|
||||||
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
|
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
|
||||||
// The group id is ignored when searching -- in this case, it is "blank"
|
// The group id is ignored when searching -- in this case, it is "blank"
|
||||||
// implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}")
|
// implementation "blank:coolmod-${mc_version}:${coolmod_version}"
|
||||||
|
|
||||||
|
// Example mod dependency using a file as dependency
|
||||||
|
// implementation files("libs/coolmod-${mc_version}-${coolmod_version}.jar")
|
||||||
|
|
||||||
|
// Example project dependency using a sister or child project:
|
||||||
|
// implementation project(":myproject")
|
||||||
|
|
||||||
// For more info:
|
// For more info:
|
||||||
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
|
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
|
||||||
// http://www.gradle.org/docs/current/userguide/dependency_management.html
|
// http://www.gradle.org/docs/current/userguide/dependency_management.html
|
||||||
|
|
||||||
// Hack fix for now, force jopt-simple to be exactly 5.0.4 because Mojang ships that version, but some transitive dependencies request 6.0+
|
|
||||||
implementation('net.sf.jopt-simple:jopt-simple:5.0.4') { version { strictly '5.0.4' } }
|
|
||||||
|
|
||||||
|
// implementation "net.neoforged:neoforge:${neo_version}"
|
||||||
|
|
||||||
|
// implementation files('libs/javamp3-1.0.3.jar')
|
||||||
implementation 'fr.delthas:javamp3:1.0.3'
|
implementation 'fr.delthas:javamp3:1.0.3'
|
||||||
|
|
||||||
implementation 'com.github.stephengold:j-ogg-vorbis:1.0.4'
|
implementation 'com.github.stephengold:j-ogg-vorbis:1.0.4'
|
||||||
|
|
||||||
jarJar(group: 'fr.delthas', name: 'javamp3', version: '[1.0.0,2.0.0)') {
|
jarJar(implementation("fr.delthas:javamp3")) {
|
||||||
jarJar.pin(it, '1.0.3')
|
version {
|
||||||
|
strictly '[1.0.0,2.0.0)'
|
||||||
|
prefer '1.0.3'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
jarJar(group: 'com.github.stephengold', name: 'j-ogg-vorbis', version: '[1.0.4, 2.0.0)') {
|
jarJar(implementation("com.github.stephengold:j-ogg-vorbis")) {
|
||||||
jarJar.pin(it, '1.0.4')
|
version {
|
||||||
|
strictly '[1.0.4,2.0.0)'
|
||||||
|
prefer '1.0.4'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This block of code expands all declared replace properties in the specified resource targets.
|
// This block of code expands all declared replace properties in the specified resource targets.
|
||||||
// A missing property will result in an error. Properties are expanded using ${} Groovy notation.
|
// A missing property will result in an error. Properties are expanded using ${} Groovy notation.
|
||||||
// When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments.
|
var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {
|
||||||
// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html
|
|
||||||
tasks.named('processResources', ProcessResources).configure {
|
|
||||||
var replaceProperties = [
|
var replaceProperties = [
|
||||||
minecraft_version: minecraft_version, minecraft_version_range: minecraft_version_range,
|
minecraft_version : minecraft_version,
|
||||||
forge_version: forge_version, forge_version_range: forge_version_range,
|
minecraft_version_range: minecraft_version_range,
|
||||||
loader_version_range: loader_version_range,
|
neo_version : neo_version,
|
||||||
mod_id: mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version,
|
neo_version_range : neo_version_range,
|
||||||
mod_authors: mod_authors, mod_description: mod_description,
|
loader_version_range : loader_version_range,
|
||||||
|
mod_id : mod_id,
|
||||||
|
mod_name : mod_name,
|
||||||
|
mod_license : mod_license,
|
||||||
|
mod_version : mod_version,
|
||||||
|
mod_authors : mod_authors,
|
||||||
|
mod_description : mod_description
|
||||||
]
|
]
|
||||||
inputs.properties replaceProperties
|
inputs.properties replaceProperties
|
||||||
|
expand replaceProperties
|
||||||
filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) {
|
from "src/main/templates"
|
||||||
expand replaceProperties + [project: project]
|
into "build/generated/sources/modMetadata"
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// Include the output of "generateModMetadata" as an input directory for the build
|
||||||
|
// this works with both building through Gradle and the IDE.
|
||||||
|
sourceSets.main.resources.srcDir generateModMetadata
|
||||||
|
// To avoid having to run "generateModMetadata" manually, make it run on every project reload
|
||||||
|
neoForge.ideSyncTask generateModMetadata
|
||||||
|
|
||||||
// Example for how to get properties into the manifest for reading at runtime.
|
// Example for how to get properties into the manifest for reading by the runtime..
|
||||||
tasks.named('jar', Jar).configure {
|
jar {
|
||||||
|
archiveClassifier = 'all'
|
||||||
manifest {
|
manifest {
|
||||||
attributes([
|
attributes([
|
||||||
'Specification-Title' : mod_id,
|
"Specification-Title": "TurnBasedMinecraftMod",
|
||||||
'Specification-Vendor' : mod_authors,
|
"Specification-Vendor": "TurnBasedMinecraftMod_BK",
|
||||||
'Specification-Version' : '1', // We are version 1 of ourselves
|
"Specification-Version": "1", // We are version 1 of ourselves
|
||||||
'Implementation-Title' : "TurnBasedMinecraftMod",
|
"Implementation-Title": "TurnBasedMinecraftMod",
|
||||||
'Implementation-Version' : project.jar.archiveVersion,
|
"Implementation-Version": "${version}",
|
||||||
'Implementation-Vendor' : mod_authors
|
"Implementation-Vendor" :"TurnBasedMinecraftMod_BK",
|
||||||
|
// Do not place timestamp for the sake of reproducible builds
|
||||||
|
// "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is the preferred method to reobfuscate your jar file
|
|
||||||
//finalizedBy 'reobfJar'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reproducible Builds
|
// Reproducible Builds
|
||||||
|
@ -204,17 +216,10 @@ tasks.withType(JavaCompile).configureEach {
|
||||||
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
|
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge the resources and classes into the same directory.
|
// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior.
|
||||||
// This is done because java expects modules to be in a single directory.
|
idea {
|
||||||
// And if we have it in multiple we have to do performance intensive hacks like having the UnionFileSystem
|
module {
|
||||||
// This will eventually be migrated to ForgeGradle so modders don't need to manually do it. But that is later.
|
downloadSources = true
|
||||||
sourceSets.each {
|
downloadJavadoc = true
|
||||||
def dir = layout.buildDirectory.dir("sourcesSets/$it.name")
|
}
|
||||||
it.output.resourcesDir = dir
|
|
||||||
it.java.destinationDirectory = dir
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure "jarJar" is run after "build"
|
|
||||||
tasks.named("build").configure {
|
|
||||||
finalizedBy "jarJar"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,42 +1,31 @@
|
||||||
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
|
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
|
||||||
# This is required to provide enough memory for the Minecraft decompilation process.
|
org.gradle.jvmargs=-Xmx1G
|
||||||
org.gradle.jvmargs=-Xmx3G
|
|
||||||
org.gradle.daemon=false
|
org.gradle.daemon=false
|
||||||
|
org.gradle.parallel=true
|
||||||
|
org.gradle.caching=true
|
||||||
|
org.gradle.configuration-cache=true
|
||||||
|
|
||||||
|
#read more on this at https://github.com/neoforged/ModDevGradle?tab=readme-ov-file#better-minecraft-parameter-names--javadoc-parchment
|
||||||
|
# you can also find the latest versions at: https://parchmentmc.org/docs/getting-started
|
||||||
|
parchment_minecraft_version=1.21
|
||||||
|
parchment_mappings_version=2024.07.28
|
||||||
|
|
||||||
## Environment Properties
|
# Environment Properties
|
||||||
|
# You can find the latest versions here: https://projects.neoforged.net/neoforged/neoforge
|
||||||
|
# The Minecraft version must agree with the Neo version to get a valid artifact
|
||||||
|
minecraft_version=1.21.3
|
||||||
|
|
||||||
# The Minecraft version must agree with the Forge version to get a valid artifact
|
|
||||||
minecraft_version=1.21.1
|
|
||||||
# The Minecraft version range can use any release version of Minecraft as bounds.
|
# The Minecraft version range can use any release version of Minecraft as bounds.
|
||||||
# Snapshots, pre-releases, and release candidates are not guaranteed to sort properly
|
# Snapshots, pre-releases, and release candidates are not guaranteed to sort properly
|
||||||
# as they do not follow standard versioning conventions.
|
# as they do not follow standard versioning conventions.
|
||||||
minecraft_version_range=[1.21.1,1.22)
|
minecraft_version_range=[1.21.3, 1.22)
|
||||||
# The Forge version must agree with the Minecraft version to get a valid artifact
|
|
||||||
forge_version=52.0.22
|
|
||||||
# The Forge version range can use any version of Forge as bounds or match the loader version range
|
|
||||||
forge_version_range=[0,)
|
|
||||||
# The loader version range can only use the major version of Forge/FML as bounds
|
|
||||||
loader_version_range=[0,)
|
|
||||||
# The mapping channel to use for mappings.
|
|
||||||
# The default set of supported mapping channels are ["official", "snapshot", "snapshot_nodoc", "stable", "stable_nodoc"].
|
|
||||||
# Additional mapping channels can be registered through the "channelProviders" extension in a Gradle plugin.
|
|
||||||
#
|
|
||||||
# | Channel | Version | |
|
|
||||||
# |-----------|----------------------|--------------------------------------------------------------------------------|
|
|
||||||
# | official | MCVersion | Official field/method names from Mojang mapping files |
|
|
||||||
# | parchment | YYYY.MM.DD-MCVersion | Open community-sourced parameter names and javadocs layered on top of official |
|
|
||||||
#
|
|
||||||
# You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
|
|
||||||
# See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
|
|
||||||
#
|
|
||||||
# Parchment is an unofficial project maintained by ParchmentMC, separate from Minecraft Forge.
|
|
||||||
# Additional setup is needed to use their mappings, see https://parchmentmc.org/docs/getting-started
|
|
||||||
mapping_channel=official
|
|
||||||
# The mapping version to query from the mapping channel.
|
|
||||||
# This must match the format required by the mapping channel.
|
|
||||||
mapping_version=1.21.1
|
|
||||||
|
|
||||||
|
# The Neo version must agree with the Minecraft version to get a valid artifact
|
||||||
|
neo_version=21.3.11-beta
|
||||||
|
# The Neo version range can use any version of Neo as bounds
|
||||||
|
neo_version_range=[21.3.0,)
|
||||||
|
# The loader version range can only use the major version of FML as bounds
|
||||||
|
loader_version_range=[4,)
|
||||||
|
|
||||||
## Mod Properties
|
## Mod Properties
|
||||||
|
|
||||||
|
@ -48,7 +37,7 @@ mod_name=TurnBasedMinecraftMod
|
||||||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||||
mod_license=MIT
|
mod_license=MIT
|
||||||
# The mod version. See https://semver.org/
|
# The mod version. See https://semver.org/
|
||||||
mod_version=1.26.2
|
mod_version=1.26.5
|
||||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||||
# This should match the base package used for the mod sources.
|
# This should match the base package used for the mod sources.
|
||||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
|
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
3
gradle/wrapper/gradle-wrapper.properties
vendored
3
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,7 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
27
gradlew
vendored
27
gradlew
vendored
|
@ -15,6 +15,8 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
|
@ -55,7 +57,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 +85,9 @@ 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 -P "${APP_HOME:-./}" > /dev/null && printf '%s
|
||||||
|
' "$PWD" ) || 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
|
||||||
|
@ -130,10 +134,13 @@ location of your Java installation."
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
JAVACMD=java
|
JAVACMD=java
|
||||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
if ! command -v java >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
location of your Java installation."
|
location of your Java installation."
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Increase the maximum file descriptors if we can.
|
# Increase the maximum file descriptors if we can.
|
||||||
|
@ -141,7 +148,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
|
||||||
|
@ -149,7 +156,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
|
||||||
|
@ -198,11 +205,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" \
|
||||||
|
|
22
gradlew.bat
vendored
22
gradlew.bat
vendored
|
@ -13,6 +13,8 @@
|
||||||
@rem See the License for the specific language governing permissions and
|
@rem See the License for the specific language governing permissions and
|
||||||
@rem limitations under the License.
|
@rem limitations under the License.
|
||||||
@rem
|
@rem
|
||||||
|
@rem SPDX-License-Identifier: Apache-2.0
|
||||||
|
@rem
|
||||||
|
|
||||||
@if "%DEBUG%"=="" @echo off
|
@if "%DEBUG%"=="" @echo off
|
||||||
@rem ##########################################################################
|
@rem ##########################################################################
|
||||||
|
@ -43,11 +45,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 +59,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
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
pluginManagement {
|
pluginManagement {
|
||||||
repositories {
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
maven {
|
maven {
|
||||||
name = 'MinecraftForge'
|
url = 'https://maven.neoforged.net/releases'
|
||||||
url = 'https://maven.minecraftforge.net/'
|
|
||||||
}
|
}
|
||||||
jcenter()
|
jcenter()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
@ -11,5 +11,5 @@ pluginManagement {
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0'
|
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.client.gui.screens.inventory.InventoryScreen;
|
import net.minecraft.client.gui.screens.inventory.InventoryScreen;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraftforge.network.PacketDistributor;
|
import net.neoforged.neoforge.network.PacketDistributor;
|
||||||
|
|
||||||
import java.util.ConcurrentModificationException;
|
import java.util.ConcurrentModificationException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -256,6 +256,7 @@ public class BattleGui extends Screen {
|
||||||
} else {
|
} else {
|
||||||
waitMissingBattleTicks = null;
|
waitMissingBattleTicks = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TurnBasedMinecraftMod.proxy.getLocalBattle().getState() == Battle.State.DECISION
|
if (TurnBasedMinecraftMod.proxy.getLocalBattle().getState() == Battle.State.DECISION
|
||||||
&& timeRemaining.get() > 0) {
|
&& timeRemaining.get() > 0) {
|
||||||
long nextInstant = System.nanoTime();
|
long nextInstant = System.nanoTime();
|
||||||
|
@ -320,22 +321,20 @@ public class BattleGui extends Screen {
|
||||||
setState(MenuState.ATTACK_TARGET);
|
setState(MenuState.ATTACK_TARGET);
|
||||||
break;
|
break;
|
||||||
case DEFEND:
|
case DEFEND:
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketBattleDecision(
|
PacketDistributor.sendToServer(new PacketBattleDecision(
|
||||||
TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.DEFEND, 0),
|
TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.DEFEND.getValue(), 0));
|
||||||
PacketDistributor.SERVER.noArg());
|
|
||||||
setState(MenuState.WAITING);
|
setState(MenuState.WAITING);
|
||||||
break;
|
break;
|
||||||
case ITEM:
|
case ITEM:
|
||||||
setState(MenuState.ITEM_ACTION);
|
setState(MenuState.ITEM_ACTION);
|
||||||
break;
|
break;
|
||||||
case FLEE:
|
case FLEE:
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketBattleDecision(
|
PacketDistributor.sendToServer(new PacketBattleDecision(
|
||||||
TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.FLEE, 0),
|
TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.FLEE.getValue(), 0));
|
||||||
PacketDistributor.SERVER.noArg());
|
|
||||||
setState(MenuState.WAITING);
|
setState(MenuState.WAITING);
|
||||||
break;
|
break;
|
||||||
case ATTACK_TARGET:
|
case ATTACK_TARGET:
|
||||||
// Invalid but set to main menu anyways.
|
// Invalid, but set menu to main menu anyways.
|
||||||
setState(MenuState.MAIN_MENU);
|
setState(MenuState.MAIN_MENU);
|
||||||
break;
|
break;
|
||||||
case SWITCH_HELD_ITEM:
|
case SWITCH_HELD_ITEM:
|
||||||
|
@ -348,7 +347,7 @@ public class BattleGui extends Screen {
|
||||||
setState(MenuState.MAIN_MENU);
|
setState(MenuState.MAIN_MENU);
|
||||||
break;
|
break;
|
||||||
case DO_ITEM_SWITCH:
|
case DO_ITEM_SWITCH:
|
||||||
// Invalid but set to main menu anyways.
|
// Invalid, but set menu to main menu anyways.
|
||||||
setState(MenuState.MAIN_MENU);
|
setState(MenuState.MAIN_MENU);
|
||||||
break;
|
break;
|
||||||
case DO_USE_ITEM:
|
case DO_USE_ITEM:
|
||||||
|
@ -360,9 +359,9 @@ public class BattleGui extends Screen {
|
||||||
|
|
||||||
protected void entityButtonActionEvent(EntitySelectionButton button, ButtonAction action) {
|
protected void entityButtonActionEvent(EntitySelectionButton button, ButtonAction action) {
|
||||||
if (action.equals(ButtonAction.ATTACK_TARGET)) {
|
if (action.equals(ButtonAction.ATTACK_TARGET)) {
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketBattleDecision(
|
PacketDistributor.sendToServer(
|
||||||
TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.ATTACK, button.getID()),
|
new PacketBattleDecision(TurnBasedMinecraftMod.proxy.getLocalBattle().getId(),
|
||||||
PacketDistributor.SERVER.noArg());
|
Battle.Decision.ATTACK.getValue(), ((EntitySelectionButton) button).getID()));
|
||||||
setState(MenuState.WAITING);
|
setState(MenuState.WAITING);
|
||||||
} else {
|
} else {
|
||||||
setState(MenuState.MAIN_MENU);
|
setState(MenuState.MAIN_MENU);
|
||||||
|
@ -372,18 +371,18 @@ public class BattleGui extends Screen {
|
||||||
protected void itemButtonActionEvent(ItemSelectionButton button, ButtonAction action) {
|
protected void itemButtonActionEvent(ItemSelectionButton button, ButtonAction action) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case DO_ITEM_SWITCH:
|
case DO_ITEM_SWITCH:
|
||||||
TurnBasedMinecraftMod.getHandler().send(
|
PacketDistributor.sendToServer(
|
||||||
new PacketBattleDecision(TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.SWITCH_ITEM, button.getID()),
|
new PacketBattleDecision(TurnBasedMinecraftMod.proxy.getLocalBattle().getId(),
|
||||||
PacketDistributor.SERVER.noArg());
|
Battle.Decision.SWITCH_ITEM.getValue(), button.getID()));
|
||||||
if (button.getID() >= 0 && button.getID() < 9) {
|
if (button.getID() >= 0 && button.getID() < 9) {
|
||||||
Minecraft.getInstance().player.getInventory().selected = button.getID();
|
Minecraft.getInstance().player.getInventory().selected = button.getID();
|
||||||
}
|
}
|
||||||
setState(MenuState.WAITING);
|
setState(MenuState.WAITING);
|
||||||
break;
|
break;
|
||||||
case DO_USE_ITEM:
|
case DO_USE_ITEM:
|
||||||
TurnBasedMinecraftMod.getHandler().send(
|
PacketDistributor.sendToServer(
|
||||||
new PacketBattleDecision(TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.USE_ITEM, button.getID()),
|
new PacketBattleDecision(TurnBasedMinecraftMod.proxy.getLocalBattle().getId(),
|
||||||
PacketDistributor.SERVER.noArg());
|
Battle.Decision.USE_ITEM.getValue(), button.getID()));
|
||||||
setState(MenuState.WAITING);
|
setState(MenuState.WAITING);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -402,18 +401,13 @@ public class BattleGui extends Screen {
|
||||||
if (getMinecraft().player.isCreative()) {
|
if (getMinecraft().player.isCreative()) {
|
||||||
return super.keyPressed(keyCode, b, c);
|
return super.keyPressed(keyCode, b, c);
|
||||||
} else if (keyCode == 256) {
|
} else if (keyCode == 256) {
|
||||||
TurnBasedMinecraftMod.proxy.displayString("Leaving GUI, but the battle continues!");
|
|
||||||
getMinecraft().setScreen(null);
|
getMinecraft().setScreen(null);
|
||||||
|
TurnBasedMinecraftMod.proxy.displayString("Leaving GUI, but the battle continues!");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false; // TODO verify return value
|
return false; // TODO verify return value
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void renderBackground(GuiGraphics p_283688_, int p_299421_, int p_298679_, float p_297268_) {
|
|
||||||
// Left blank to not render background.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyReleased(int a, int b, int c) {
|
public boolean keyReleased(int a, int b, int c) {
|
||||||
if (getMinecraft().player.isCreative()) {
|
if (getMinecraft().player.isCreative()) {
|
||||||
|
@ -437,4 +431,9 @@ public class BattleGui extends Screen {
|
||||||
public void setTurnTimerMax(int timerMax) {
|
public void setTurnTimerMax(int timerMax) {
|
||||||
this.timerMax = timerMax;
|
this.timerMax = timerMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderBackground(GuiGraphics p_283688_, int p_296369_, int p_296477_, float p_294317_) {
|
||||||
|
// Prevent graying of background.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,7 +259,7 @@ public class BattleMusic
|
||||||
|
|
||||||
// set volume
|
// set volume
|
||||||
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
|
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
|
||||||
gainControl.setValue(BattleMusic.percentageToDecibels(volume)); // in decibels
|
gainControl.setValue(BattleMusic.percentageToDecibels(volume));
|
||||||
|
|
||||||
clip.loop(Clip.LOOP_CONTINUOUSLY);
|
clip.loop(Clip.LOOP_CONTINUOUSLY);
|
||||||
clip.start();
|
clip.start();
|
||||||
|
@ -387,6 +387,7 @@ public class BattleMusic
|
||||||
return !sillyMusic.isEmpty();
|
return !sillyMusic.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Percentage must be between 0 and 1.
|
||||||
public static float percentageToDecibels(float percentage) {
|
public static float percentageToDecibels(float percentage) {
|
||||||
if (percentage > 1.0F) {
|
if (percentage > 1.0F) {
|
||||||
return 0.0F;
|
return 0.0F;
|
||||||
|
@ -448,7 +449,7 @@ public class BattleMusic
|
||||||
sdl.open(audioFormat);
|
sdl.open(audioFormat);
|
||||||
{
|
{
|
||||||
FloatControl volumeControl = (FloatControl) sdl.getControl(FloatControl.Type.MASTER_GAIN);
|
FloatControl volumeControl = (FloatControl) sdl.getControl(FloatControl.Type.MASTER_GAIN);
|
||||||
volumeControl.setValue(BattleMusic.percentageToDecibels(volume)); // in decibels
|
volumeControl.setValue(BattleMusic.percentageToDecibels(volume));
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
@ -546,7 +547,7 @@ public class BattleMusic
|
||||||
sdl.open(audioFormat);
|
sdl.open(audioFormat);
|
||||||
{
|
{
|
||||||
FloatControl volumeControl = (FloatControl) sdl.getControl(FloatControl.Type.MASTER_GAIN);
|
FloatControl volumeControl = (FloatControl) sdl.getControl(FloatControl.Type.MASTER_GAIN);
|
||||||
volumeControl.setValue(BattleMusic.percentageToDecibels(volume)); // in decibels
|
volumeControl.setValue(BattleMusic.percentageToDecibels(volume));
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioInputStream ais = reader.getAudioInputStream(oggVorbisFile);
|
AudioInputStream ais = reader.getAudioInputStream(oggVorbisFile);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.client;
|
package com.burnedkirby.TurnBasedMinecraft.client;
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
import net.minecraftforge.common.ForgeConfigSpec;
|
import net.neoforged.neoforge.common.ModConfigSpec;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -9,23 +9,23 @@ import java.util.List;
|
||||||
|
|
||||||
public class ClientConfig {
|
public class ClientConfig {
|
||||||
public static final ClientConfig CLIENT;
|
public static final ClientConfig CLIENT;
|
||||||
public static final ForgeConfigSpec CLIENT_SPEC;
|
public static final ModConfigSpec CLIENT_SPEC;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Pair<ClientConfig, ForgeConfigSpec> pair =
|
Pair<ClientConfig, ModConfigSpec> pair =
|
||||||
new ForgeConfigSpec.Builder().configure(ClientConfig::new);
|
new ModConfigSpec.Builder().configure(ClientConfig::new);
|
||||||
CLIENT = pair.getKey();
|
CLIENT = pair.getKey();
|
||||||
CLIENT_SPEC = pair.getValue();
|
CLIENT_SPEC = pair.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final ForgeConfigSpec.ConfigValue<List<? extends String>> battleMusicList;
|
public final ModConfigSpec.ConfigValue<List<? extends String>> battleMusicList;
|
||||||
public final ForgeConfigSpec.ConfigValue<List<? extends String>> sillyMusicList;
|
public final ModConfigSpec.ConfigValue<List<? extends String>> sillyMusicList;
|
||||||
public final ForgeConfigSpec.DoubleValue sillyMusicThreshold;
|
public final ModConfigSpec.DoubleValue sillyMusicThreshold;
|
||||||
public final ForgeConfigSpec.BooleanValue volumeAffectedByMasterVolume;
|
public final ModConfigSpec.BooleanValue volumeAffectedByMasterVolume;
|
||||||
public final ForgeConfigSpec.BooleanValue volumeAffectedByMusicVolume;
|
public final ModConfigSpec.BooleanValue volumeAffectedByMusicVolume;
|
||||||
public final ForgeConfigSpec.DoubleValue musicVolume;
|
public final ModConfigSpec.DoubleValue musicVolume;
|
||||||
|
|
||||||
ClientConfig(ForgeConfigSpec.Builder builder) {
|
ClientConfig(ModConfigSpec.Builder builder) {
|
||||||
//builder.push("music");
|
//builder.push("music");
|
||||||
|
|
||||||
List<String> battleMusicList = new ArrayList<String>(8);
|
List<String> battleMusicList = new ArrayList<String>(8);
|
||||||
|
|
|
@ -5,6 +5,7 @@ import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraft.client.gui.components.*;
|
import net.minecraft.client.gui.components.*;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.neoforged.fml.ModContainer;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -19,13 +20,16 @@ public class ClientConfigGui extends net.minecraft.client.gui.screens.Screen {
|
||||||
private Checkbox affectedByMasterVolCheckbox = null;
|
private Checkbox affectedByMasterVolCheckbox = null;
|
||||||
private Checkbox affectedByMusicVolCheckbox = null;
|
private Checkbox affectedByMusicVolCheckbox = null;
|
||||||
private SliderPercentage volumeSlider = null;
|
private SliderPercentage volumeSlider = null;
|
||||||
|
private Screen parentScreen = null;
|
||||||
|
|
||||||
public ClientConfigGui() {
|
public ClientConfigGui(ModContainer container, Screen parent) {
|
||||||
super(Component.literal("TurnBasedMC Client Config"));
|
super(Component.literal("TurnBasedMC Client Config"));
|
||||||
|
|
||||||
dirtyFlag = true;
|
dirtyFlag = true;
|
||||||
|
|
||||||
accepted = false;
|
accepted = false;
|
||||||
|
|
||||||
|
this.parentScreen = parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDirty() {
|
public void onDirty() {
|
||||||
|
@ -174,7 +178,7 @@ public class ClientConfigGui extends net.minecraft.client.gui.screens.Screen {
|
||||||
addRenderableWidget(volumeSlider);
|
addRenderableWidget(volumeSlider);
|
||||||
|
|
||||||
addRenderableWidget(Button.builder(Component.literal("Cancel"),
|
addRenderableWidget(Button.builder(Component.literal("Cancel"),
|
||||||
(b) -> Minecraft.getInstance().setScreen(null))
|
(b) -> Minecraft.getInstance().setScreen(this.parentScreen))
|
||||||
.bounds(this.width / 2 - widget_width + widget_x_offset,
|
.bounds(this.width / 2 - widget_width + widget_x_offset,
|
||||||
this.height - widget_height, widget_width, widget_height).build());
|
this.height - widget_height, widget_width, widget_height).build());
|
||||||
addRenderableWidget(Button.builder(Component.literal("Accept"), (b) -> {
|
addRenderableWidget(Button.builder(Component.literal("Accept"), (b) -> {
|
||||||
|
@ -224,7 +228,7 @@ public class ClientConfigGui extends net.minecraft.client.gui.screens.Screen {
|
||||||
public void render(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) {
|
public void render(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) {
|
||||||
if (accepted) {
|
if (accepted) {
|
||||||
doAccepted();
|
doAccepted();
|
||||||
Minecraft.getInstance().setScreen(null);
|
Minecraft.getInstance().setScreen(this.parentScreen);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (dirtyFlag) {
|
if (dirtyFlag) {
|
||||||
|
|
|
@ -15,7 +15,7 @@ import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.sounds.SoundSource;
|
import net.minecraft.sounds.SoundSource;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
|
|
||||||
public class ClientProxy extends CommonProxy {
|
public class ClientProxy extends CommonProxy {
|
||||||
private BattleGui battleGui = null;
|
private BattleGui battleGui = null;
|
||||||
|
@ -168,7 +168,7 @@ public class ClientProxy extends CommonProxy {
|
||||||
parentComponent.getSiblings().add(prefix);
|
parentComponent.getSiblings().add(prefix);
|
||||||
parentComponent.getSiblings().add(text);
|
parentComponent.getSiblings().add(text);
|
||||||
// UUID is required by sendMessage, but appears to be unused, so just give dummy UUID
|
// UUID is required by sendMessage, but appears to be unused, so just give dummy UUID
|
||||||
Minecraft.getInstance().player.sendSystemMessage(parentComponent);
|
Minecraft.getInstance().player.displayClientMessage(parentComponent, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -181,7 +181,7 @@ public class ClientProxy extends CommonProxy {
|
||||||
parentComponent.getSiblings().add(prefix);
|
parentComponent.getSiblings().add(prefix);
|
||||||
parentComponent.getSiblings().add(text);
|
parentComponent.getSiblings().add(text);
|
||||||
// UUID is required by sendMessage, but appears to be unused, so just give dummy UUID
|
// UUID is required by sendMessage, but appears to be unused, so just give dummy UUID
|
||||||
Minecraft.getInstance().player.sendSystemMessage(parentComponent);
|
Minecraft.getInstance().player.displayClientMessage(parentComponent, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkBattleTypes(boolean entityLeft) {
|
private void checkBattleTypes(boolean entityLeft) {
|
||||||
|
@ -190,16 +190,16 @@ public class ClientProxy extends CommonProxy {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
float percentage = 0.0f;
|
double percentage = 0.0;
|
||||||
if (sillyMusicCount == 0 && battleMusicCount == 0) {
|
if (sillyMusicCount == 0 && battleMusicCount == 0) {
|
||||||
percentage = 0.0f;
|
percentage = 0.0;
|
||||||
} else if (battleMusicCount == 0) {
|
} else if (battleMusicCount == 0) {
|
||||||
percentage = 100.0f;
|
percentage = 1.0;
|
||||||
} else {
|
} else {
|
||||||
percentage = 100.0f * (float) sillyMusicCount / (float) (sillyMusicCount + battleMusicCount);
|
percentage = (double) sillyMusicCount / (double) (sillyMusicCount + battleMusicCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (percentage >= ClientConfig.CLIENT.sillyMusicThreshold.get().floatValue()) {
|
if (percentage >= ClientConfig.CLIENT.sillyMusicThreshold.get()) {
|
||||||
if (battleMusic.isPlaying()) {
|
if (battleMusic.isPlaying()) {
|
||||||
if (!battleMusic.isPlayingSilly() && battleMusic.hasSillyMusic()) {
|
if (!battleMusic.isPlayingSilly() && battleMusic.hasSillyMusic()) {
|
||||||
stopMusic(false);
|
stopMusic(false);
|
||||||
|
@ -236,7 +236,7 @@ public class ClientProxy extends CommonProxy {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <MSG> void handlePacket(MSG msg, CustomPayloadEvent.Context ctx) {
|
public <MSG> void handlePacket(final MSG msg, final IPayloadContext ctx) {
|
||||||
if (msg.getClass() == PacketBattleMessage.class) {
|
if (msg.getClass() == PacketBattleMessage.class) {
|
||||||
PacketBattleMessage pkt = (PacketBattleMessage) msg;
|
PacketBattleMessage pkt = (PacketBattleMessage) msg;
|
||||||
Entity fromEntity = getEntity(pkt.getEntityIDFrom(), pkt.getDimension());
|
Entity fromEntity = getEntity(pkt.getEntityIDFrom(), pkt.getDimension());
|
||||||
|
@ -451,7 +451,6 @@ public class ClientProxy extends CommonProxy {
|
||||||
parentComponent.getSiblings().add(message);
|
parentComponent.getSiblings().add(message);
|
||||||
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
|
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case CROSSBOW_NO_AMMO: {
|
case CROSSBOW_NO_AMMO: {
|
||||||
parentComponent.getSiblings().add(from);
|
parentComponent.getSiblings().add(from);
|
||||||
parentComponent.getSiblings().add(Component.literal(" tried to use their crossbow but ran out of ammo!"));
|
parentComponent.getSiblings().add(Component.literal(" tried to use their crossbow but ran out of ammo!"));
|
||||||
|
@ -482,22 +481,27 @@ public class ClientProxy extends CommonProxy {
|
||||||
MutableComponent text = Component.literal("Edit what value? ");
|
MutableComponent text = Component.literal("Edit what value? ");
|
||||||
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
|
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
|
||||||
|
|
||||||
MutableComponent option = Component.literal("IgB");
|
MutableComponent option;
|
||||||
// HoverEvent.Action.SHOW_TEXT is probably SHOW_TEXT
|
MutableComponent value;
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit ignoreBattle"))
|
|
||||||
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("IgnoreBattle"))));
|
|
||||||
MutableComponent value = Component.literal("(" + pkt.getEntityInfo().ignoreBattle + ") ");
|
|
||||||
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
|
||||||
option.getSiblings().add(value);
|
|
||||||
text.getSiblings().add(option);
|
|
||||||
|
|
||||||
option = Component.literal("AP");
|
if (pkt.getEntityInfo().playerName.isEmpty()) {
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackPower"))
|
option = Component.literal("IgB");
|
||||||
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("AttackPower"))));
|
// HoverEvent.Action.SHOW_TEXT is probably SHOW_TEXT
|
||||||
value = Component.literal("(" + pkt.getEntityInfo().attackPower + ") ");
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit ignoreBattle"))
|
||||||
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("IgnoreBattle"))));
|
||||||
option.getSiblings().add(value);
|
value = Component.literal("(" + pkt.getEntityInfo().ignoreBattle + ") ");
|
||||||
text.getSiblings().add(option);
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
|
option.getSiblings().add(value);
|
||||||
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
|
option = Component.literal("AP");
|
||||||
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackPower"))
|
||||||
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("AttackPower"))));
|
||||||
|
value = Component.literal("(" + pkt.getEntityInfo().attackPower + ") ");
|
||||||
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
|
option.getSiblings().add(value);
|
||||||
|
text.getSiblings().add(option);
|
||||||
|
}
|
||||||
|
|
||||||
option = Component.literal("APr");
|
option = Component.literal("APr");
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackProbability"))
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackProbability"))
|
||||||
|
@ -507,13 +511,15 @@ public class ClientProxy extends CommonProxy {
|
||||||
option.getSiblings().add(value);
|
option.getSiblings().add(value);
|
||||||
text.getSiblings().add(option);
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
option = Component.literal("AV");
|
if (pkt.getEntityInfo().playerName.isEmpty()) {
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackVariance"))
|
option = Component.literal("AV");
|
||||||
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("AttackVariance"))));
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackVariance"))
|
||||||
value = Component.literal("(" + pkt.getEntityInfo().attackVariance + ") ");
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("AttackVariance"))));
|
||||||
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
value = Component.literal("(" + pkt.getEntityInfo().attackVariance + ") ");
|
||||||
option.getSiblings().add(value);
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
text.getSiblings().add(option);
|
option.getSiblings().add(value);
|
||||||
|
text.getSiblings().add(option);
|
||||||
|
}
|
||||||
|
|
||||||
option = Component.literal("AE");
|
option = Component.literal("AE");
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackEffect"))
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit attackEffect"))
|
||||||
|
@ -531,21 +537,23 @@ public class ClientProxy extends CommonProxy {
|
||||||
option.getSiblings().add(value);
|
option.getSiblings().add(value);
|
||||||
text.getSiblings().add(option);
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
option = Component.literal("DD");
|
if (pkt.getEntityInfo().playerName.isEmpty()) {
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit defenseDamage"))
|
option = Component.literal("DD");
|
||||||
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DefenseDamage"))));
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit defenseDamage"))
|
||||||
value = Component.literal("(" + pkt.getEntityInfo().defenseDamage + ") ");
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DefenseDamage"))));
|
||||||
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
value = Component.literal("(" + pkt.getEntityInfo().defenseDamage + ") ");
|
||||||
option.getSiblings().add(value);
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
text.getSiblings().add(option);
|
option.getSiblings().add(value);
|
||||||
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
option = Component.literal("DDPr");
|
option = Component.literal("DDPr");
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit defenseDamageProbability"))
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit defenseDamageProbability"))
|
||||||
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DefenseDamageProbability"))));
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DefenseDamageProbability"))));
|
||||||
value = Component.literal("(" + pkt.getEntityInfo().defenseDamageProbability + "%) ");
|
value = Component.literal("(" + pkt.getEntityInfo().defenseDamageProbability + "%) ");
|
||||||
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
option.getSiblings().add(value);
|
option.getSiblings().add(value);
|
||||||
text.getSiblings().add(option);
|
text.getSiblings().add(option);
|
||||||
|
}
|
||||||
|
|
||||||
option = Component.literal("E");
|
option = Component.literal("E");
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit evasion"))
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit evasion"))
|
||||||
|
@ -563,37 +571,55 @@ public class ClientProxy extends CommonProxy {
|
||||||
option.getSiblings().add(value);
|
option.getSiblings().add(value);
|
||||||
text.getSiblings().add(option);
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
option = Component.literal("C");
|
option = Component.literal("HS");
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit category"))
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit hasteSpeed"))
|
||||||
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("Category"))));
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("HasteSpeed"))));
|
||||||
value = Component.literal("(" + pkt.getEntityInfo().category + ") ");
|
value = Component.literal("(" + pkt.getEntityInfo().hasteSpeed + ") ");
|
||||||
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
option.getSiblings().add(value);
|
option.getSiblings().add(value);
|
||||||
text.getSiblings().add(option);
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
option = Component.literal("DecA");
|
option = Component.literal("SS");
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionAttack"))
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit slowSpeed"))
|
||||||
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionAttack"))));
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("SlowSpeed"))));
|
||||||
value = Component.literal("(" + pkt.getEntityInfo().decisionAttack + "%) ");
|
value = Component.literal("(" + pkt.getEntityInfo().slowSpeed + ") ");
|
||||||
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
option.getSiblings().add(value);
|
option.getSiblings().add(value);
|
||||||
text.getSiblings().add(option);
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
option = Component.literal("DecD");
|
if (pkt.getEntityInfo().playerName.isEmpty()) {
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionDefend"))
|
option = Component.literal("C");
|
||||||
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionDefend"))));
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit category"))
|
||||||
value = Component.literal("(" + pkt.getEntityInfo().decisionDefend + "%) ");
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("Category"))));
|
||||||
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
value = Component.literal("(" + pkt.getEntityInfo().category + ") ");
|
||||||
option.getSiblings().add(value);
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
text.getSiblings().add(option);
|
option.getSiblings().add(value);
|
||||||
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
option = Component.literal("DecF");
|
option = Component.literal("DecA");
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionFlee"))
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionAttack"))
|
||||||
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionFlee"))));
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionAttack"))));
|
||||||
value = Component.literal("(" + pkt.getEntityInfo().decisionFlee + "%) ");
|
value = Component.literal("(" + pkt.getEntityInfo().decisionAttack + "%) ");
|
||||||
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
option.getSiblings().add(value);
|
option.getSiblings().add(value);
|
||||||
text.getSiblings().add(option);
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
|
option = Component.literal("DecD");
|
||||||
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionDefend"))
|
||||||
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionDefend"))));
|
||||||
|
value = Component.literal("(" + pkt.getEntityInfo().decisionDefend + "%) ");
|
||||||
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
|
option.getSiblings().add(value);
|
||||||
|
text.getSiblings().add(option);
|
||||||
|
|
||||||
|
option = Component.literal("DecF");
|
||||||
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit decisionFlee"))
|
||||||
|
.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.literal("DecisionFlee"))));
|
||||||
|
value = Component.literal("(" + pkt.getEntityInfo().decisionFlee + "%) ");
|
||||||
|
value.setStyle(value.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)));
|
||||||
|
option.getSiblings().add(value);
|
||||||
|
text.getSiblings().add(option);
|
||||||
|
}
|
||||||
|
|
||||||
option = Component.literal("Finished Editing");
|
option = Component.literal("Finished Editing");
|
||||||
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFF00FF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit finish")));
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFF00FF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit finish")));
|
||||||
|
@ -1303,6 +1329,44 @@ public class ClientProxy extends CommonProxy {
|
||||||
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
|
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case EDIT_HASTE_SPEED: {
|
||||||
|
MutableComponent text = Component.literal("haste speed: ");
|
||||||
|
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
|
||||||
|
|
||||||
|
for (int i = 0; i <= 100; i += 10) {
|
||||||
|
MutableComponent option = Component.literal(Integer.toString(i));
|
||||||
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit hasteSpeed " + Integer.toString(i))));
|
||||||
|
text.getSiblings().add(option);
|
||||||
|
if (i < 100) {
|
||||||
|
text.getSiblings().add(Component.literal(", "));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
text.getSiblings().add(Component.literal(" (or use command \"/tbm-edit edit hasteSpeed <integer>\")"));
|
||||||
|
|
||||||
|
parentComponent.getSiblings().add(text);
|
||||||
|
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EDIT_SLOW_SPEED: {
|
||||||
|
MutableComponent text = Component.literal("slow speed: ");
|
||||||
|
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
|
||||||
|
|
||||||
|
for (int i = 0; i <= 100; i += 10) {
|
||||||
|
MutableComponent option = Component.literal(Integer.toString(i));
|
||||||
|
option.setStyle(option.getStyle().withColor(TextColor.fromRgb(0xFFFFFF00)).withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tbm-edit edit slowSpeed " + Integer.toString(i))));
|
||||||
|
text.getSiblings().add(option);
|
||||||
|
if (i < 100) {
|
||||||
|
text.getSiblings().add(Component.literal(", "));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
text.getSiblings().add(Component.literal(" (or use command \"/tbm-edit edit slowSpeed <integer>\")"));
|
||||||
|
|
||||||
|
parentComponent.getSiblings().add(text);
|
||||||
|
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case EDIT_CATEGORY: {
|
case EDIT_CATEGORY: {
|
||||||
MutableComponent text = Component.literal("category: ");
|
MutableComponent text = Component.literal("category: ");
|
||||||
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
|
text.setStyle(text.getStyle().withColor(TextColor.fromRgb(0xFFFFFFFF)).withBold(false));
|
||||||
|
@ -1473,6 +1537,10 @@ public class ClientProxy extends CommonProxy {
|
||||||
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
|
TurnBasedMinecraftMod.proxy.displayComponent(parentComponent);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case PICK_PLAYER: {
|
||||||
|
TurnBasedMinecraftMod.proxy.displayString("Use \"/tbm-edit player <player_name>\"");
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1481,7 +1549,7 @@ public class ClientProxy extends CommonProxy {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showClientConfigGui() {
|
public void showClientConfigGui() {
|
||||||
Minecraft.getInstance().setScreen(new ClientConfigGui());
|
Minecraft.getInstance().setScreen(new ClientConfigGui(null, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common;
|
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
|
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketBattleMessage;
|
||||||
|
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketEditingMessage;
|
||||||
|
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketGeneralMessage;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.damagesource.DamageTypes;
|
||||||
|
import net.minecraft.world.entity.monster.Creeper;
|
||||||
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
|
import net.neoforged.neoforge.event.entity.living.LivingChangeTargetEvent;
|
||||||
|
import net.neoforged.neoforge.event.entity.living.LivingIncomingDamageEvent;
|
||||||
|
import net.neoforged.neoforge.network.PacketDistributor;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketBattleMessage;
|
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketEditingMessage;
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketGeneralMessage;
|
|
||||||
import net.minecraft.world.damagesource.DamageTypes;
|
|
||||||
import net.minecraft.world.entity.monster.Creeper;
|
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
|
||||||
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
|
||||||
import net.minecraftforge.event.entity.living.LivingChangeTargetEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
||||||
import net.minecraftforge.network.PacketDistributor;
|
|
||||||
|
|
||||||
public class AttackEventHandler
|
public class AttackEventHandler
|
||||||
{
|
{
|
||||||
private boolean isAttackerValid(LivingAttackEvent event)
|
private boolean isAttackerValid(LivingIncomingDamageEvent event)
|
||||||
{
|
{
|
||||||
if(event.getSource().getEntity() == null)
|
if(event.getSource().getEntity() == null)
|
||||||
{
|
{
|
||||||
|
@ -59,7 +58,7 @@ public class AttackEventHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void entityAttacked(LivingAttackEvent event)
|
public void entityAttacked(LivingIncomingDamageEvent event)
|
||||||
{
|
{
|
||||||
if(event.getEntity().level().isClientSide)
|
if(event.getEntity().level().isClientSide)
|
||||||
{
|
{
|
||||||
|
@ -82,7 +81,7 @@ public class AttackEventHandler
|
||||||
if(!event.getEntity().hasCustomName())
|
if(!event.getEntity().hasCustomName())
|
||||||
{
|
{
|
||||||
TurnBasedMinecraftMod.logger.error("Cannot edit custom name from entity without custom name");
|
TurnBasedMinecraftMod.logger.error("Cannot edit custom name from entity without custom name");
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketGeneralMessage("Cannot edit custom name from entity without custom name"), PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor));
|
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketGeneralMessage("Cannot edit custom name from entity without custom name"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
editingInfo.entityInfo = config.getCustomEntityInfo(event.getEntity().getCustomName().getString());
|
editingInfo.entityInfo = config.getCustomEntityInfo(event.getEntity().getCustomName().getString());
|
||||||
|
@ -91,9 +90,9 @@ public class AttackEventHandler
|
||||||
editingInfo.entityInfo = new EntityInfo();
|
editingInfo.entityInfo = new EntityInfo();
|
||||||
editingInfo.entityInfo.customName = event.getEntity().getCustomName().getString();
|
editingInfo.entityInfo.customName = event.getEntity().getCustomName().getString();
|
||||||
}
|
}
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketGeneralMessage("Editing custom name \"" + event.getEntity().getCustomName().getString() + "\""), PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor));
|
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketGeneralMessage("Editing custom name \"" + event.getEntity().getCustomName().getString() + "\""));
|
||||||
TurnBasedMinecraftMod.logger.info("Begin editing custom \"" + event.getEntity().getCustomName().getString() + "\"");
|
TurnBasedMinecraftMod.logger.info("Begin editing custom \"" + event.getEntity().getCustomName().getString() + "\"");
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor));
|
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -107,9 +106,9 @@ public class AttackEventHandler
|
||||||
{
|
{
|
||||||
editingInfo.entityInfo = editingInfo.entityInfo.clone();
|
editingInfo.entityInfo = editingInfo.entityInfo.clone();
|
||||||
}
|
}
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketGeneralMessage("Editing entity \"" + editingInfo.entityInfo.classType.getName() + "\""), PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor));
|
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketGeneralMessage("Editing entity \"" + editingInfo.entityInfo.classType.getName() + "\""));
|
||||||
TurnBasedMinecraftMod.logger.info("Begin editing \"" + editingInfo.entityInfo.classType.getName() + "\"");
|
TurnBasedMinecraftMod.logger.info("Begin editing \"" + editingInfo.entityInfo.classType.getName() + "\"");
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor));
|
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -154,16 +153,16 @@ public class AttackEventHandler
|
||||||
if(event.getEntity().level().isClientSide
|
if(event.getEntity().level().isClientSide
|
||||||
|| config.isOldBattleBehaviorEnabled()
|
|| config.isOldBattleBehaviorEnabled()
|
||||||
|| (event.getEntity() != null && battleManager.isRecentlyLeftBattle(event.getEntity().getId()))
|
|| (event.getEntity() != null && battleManager.isRecentlyLeftBattle(event.getEntity().getId()))
|
||||||
|| (event.getNewTarget() != null && battleManager.isRecentlyLeftBattle(event.getNewTarget().getId()))
|
|| (event.getNewAboutToBeSetTarget() != null && battleManager.isRecentlyLeftBattle(event.getNewAboutToBeSetTarget().getId()))
|
||||||
|| (event.getEntity() != null && event.getNewTarget() != null && Utility.distanceBetweenEntities(event.getEntity(), event.getNewTarget()) > (double)config.getAggroStartBattleDistance()))
|
|| (event.getEntity() != null && event.getNewAboutToBeSetTarget() != null && Utility.distanceBetweenEntities(event.getEntity(), event.getNewAboutToBeSetTarget()) > (double)config.getAggroStartBattleDistance()))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(event.getEntity() != null
|
else if(event.getEntity() != null
|
||||||
&& event.getNewTarget() != null
|
&& event.getNewAboutToBeSetTarget() != null
|
||||||
&& !config.getBattleIgnoringPlayers().contains(event.getEntity().getId())
|
&& !config.getBattleIgnoringPlayers().contains(event.getEntity().getId())
|
||||||
&& !config.getBattleIgnoringPlayers().contains(event.getNewTarget().getId())
|
&& !config.getBattleIgnoringPlayers().contains(event.getNewAboutToBeSetTarget().getId())
|
||||||
&& event.getEntity().level().dimension().equals(event.getNewTarget().level().dimension()))
|
&& event.getEntity().level().dimension().equals(event.getNewAboutToBeSetTarget().level().dimension()))
|
||||||
{
|
{
|
||||||
TurnBasedMinecraftMod.proxy.getBattleManager().checkTargeted(event);
|
TurnBasedMinecraftMod.proxy.getBattleManager().checkTargeted(event);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketBattlePing;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.damagesource.DamageSource;
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
import net.minecraft.world.effect.MobEffects;
|
import net.minecraft.world.effect.MobEffects;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
|
@ -15,8 +16,8 @@ import net.minecraft.world.entity.monster.Creeper;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.*;
|
import net.minecraft.world.item.*;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.common.CreativeModeTabRegistry;
|
import net.neoforged.neoforge.common.CreativeModeTabRegistry;
|
||||||
import net.minecraftforge.network.PacketDistributor;
|
import net.neoforged.neoforge.network.PacketDistributor;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
@ -134,6 +135,9 @@ public class Battle {
|
||||||
} catch (NullPointerException exception) {
|
} catch (NullPointerException exception) {
|
||||||
entityInfo = null;
|
entityInfo = null;
|
||||||
}
|
}
|
||||||
|
if (entityInfo == null) {
|
||||||
|
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(e.getName().getString());
|
||||||
|
}
|
||||||
if (entityInfo == null) {
|
if (entityInfo == null) {
|
||||||
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
|
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
|
||||||
}
|
}
|
||||||
|
@ -166,6 +170,9 @@ public class Battle {
|
||||||
} catch (NullPointerException exception) {
|
} catch (NullPointerException exception) {
|
||||||
entityInfo = null;
|
entityInfo = null;
|
||||||
}
|
}
|
||||||
|
if (entityInfo == null) {
|
||||||
|
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(e.getName().getString());
|
||||||
|
}
|
||||||
if (entityInfo == null) {
|
if (entityInfo == null) {
|
||||||
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
|
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
|
||||||
}
|
}
|
||||||
|
@ -268,6 +275,9 @@ public class Battle {
|
||||||
} catch (NullPointerException exception) {
|
} catch (NullPointerException exception) {
|
||||||
entityInfo = null;
|
entityInfo = null;
|
||||||
}
|
}
|
||||||
|
if (entityInfo == null) {
|
||||||
|
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(e.getName().getString());
|
||||||
|
}
|
||||||
if (entityInfo == null) {
|
if (entityInfo == null) {
|
||||||
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
|
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
|
||||||
}
|
}
|
||||||
|
@ -316,6 +326,9 @@ public class Battle {
|
||||||
} catch (NullPointerException exception) {
|
} catch (NullPointerException exception) {
|
||||||
entityInfo = null;
|
entityInfo = null;
|
||||||
}
|
}
|
||||||
|
if (entityInfo == null) {
|
||||||
|
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(e.getName().getString());
|
||||||
|
}
|
||||||
if (entityInfo == null) {
|
if (entityInfo == null) {
|
||||||
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
|
entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(e);
|
||||||
}
|
}
|
||||||
|
@ -453,7 +466,7 @@ public class Battle {
|
||||||
}
|
}
|
||||||
PacketBattleInfo infoPacket = new PacketBattleInfo(getId(), getSideAIDs(), getSideBIDs(), timer, TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever());
|
PacketBattleInfo infoPacket = new PacketBattleInfo(getId(), getSideAIDs(), getSideBIDs(), timer, TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever());
|
||||||
for (Combatant p : players.values()) {
|
for (Combatant p : players.values()) {
|
||||||
TurnBasedMinecraftMod.getHandler().send(infoPacket, PacketDistributor.PLAYER.with((ServerPlayer)p.entity));
|
PacketDistributor.sendToPlayer((ServerPlayer)p.entity, infoPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -463,7 +476,7 @@ public class Battle {
|
||||||
}
|
}
|
||||||
PacketBattlePing pingPacket = new PacketBattlePing(getId(), (int)(timer / 1000000000L));
|
PacketBattlePing pingPacket = new PacketBattlePing(getId(), (int)(timer / 1000000000L));
|
||||||
for (Combatant p : players.values()) {
|
for (Combatant p : players.values()) {
|
||||||
TurnBasedMinecraftMod.getHandler().send(pingPacket, PacketDistributor.PLAYER.with((ServerPlayer)p.entity));
|
PacketDistributor.sendToPlayer((ServerPlayer)p.entity, pingPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -478,7 +491,7 @@ public class Battle {
|
||||||
PacketBattleMessage packet = new PacketBattleMessage(type, from, to, dimension, amount, custom);
|
PacketBattleMessage packet = new PacketBattleMessage(type, from, to, dimension, amount, custom);
|
||||||
for (Combatant p : players.values()) {
|
for (Combatant p : players.values()) {
|
||||||
if (p.entity.isAlive()) {
|
if (p.entity.isAlive()) {
|
||||||
TurnBasedMinecraftMod.getHandler().send(packet, PacketDistributor.PLAYER.with((ServerPlayer)p.entity));
|
PacketDistributor.sendToPlayer((ServerPlayer)p.entity, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -588,7 +601,7 @@ public class Battle {
|
||||||
|
|
||||||
private void removeCombatantPostRemove(Combatant c) {
|
private void removeCombatantPostRemove(Combatant c) {
|
||||||
if (c.entity instanceof Player) {
|
if (c.entity instanceof Player) {
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketBattleMessage(PacketBattleMessage.MessageType.ENDED, 0, 0, dimension, 0), PacketDistributor.PLAYER.with((ServerPlayer)c.entity));
|
PacketDistributor.sendToPlayer((ServerPlayer)c.entity, new PacketBattleMessage(PacketBattleMessage.MessageType.ENDED, 0, 0, dimension, 0));
|
||||||
}
|
}
|
||||||
battleManager.addRecentlyLeftBattle(c);
|
battleManager.addRecentlyLeftBattle(c);
|
||||||
}
|
}
|
||||||
|
@ -781,7 +794,7 @@ public class Battle {
|
||||||
case ATTACK:
|
case ATTACK:
|
||||||
debugLog += " attack";
|
debugLog += " attack";
|
||||||
Combatant target = null;
|
Combatant target = null;
|
||||||
if (next.entity instanceof Player) {
|
if (next.entity instanceof Player player) {
|
||||||
debugLog += " as player";
|
debugLog += " as player";
|
||||||
target = sideA.get(next.targetEntityID);
|
target = sideA.get(next.targetEntityID);
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
|
@ -790,15 +803,15 @@ public class Battle {
|
||||||
if (target == null || !target.entity.isAlive() || target == next) {
|
if (target == null || !target.entity.isAlive() || target == next) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ItemStack heldItemStack = ((Player) next.entity).getMainHandItem();
|
ItemStack heldItemStack = player.getMainHandItem();
|
||||||
if (heldItemStack.getItem() instanceof BowItem) {
|
if (heldItemStack.getItem() instanceof BowItem) {
|
||||||
debugLog += " with bow";
|
debugLog += " with bow";
|
||||||
if (Utility.doesPlayerHaveArrows((Player) next.entity)) {
|
if (Utility.doesPlayerHaveArrows(player)) {
|
||||||
final Entity nextEntity = next.entity;
|
final Entity nextEntity = next.entity;
|
||||||
final Entity targetEntity = target.entity;
|
final Entity targetEntity = target.entity;
|
||||||
final float yawDirection = Utility.yawDirection(next.entity.getX(), next.entity.getZ(), target.entity.getX(), target.entity.getZ());
|
final float yawDirection = Utility.yawDirection(next.entity.getX(), next.entity.getZ(), target.entity.getX(), target.entity.getZ());
|
||||||
final float pitchDirection = Utility.pitchDirection(next.entity.getX(), next.entity.getY(), next.entity.getZ(), target.entity.getX(), target.entity.getY(), target.entity.getZ());
|
final float pitchDirection = Utility.pitchDirection(next.entity.getX(), next.entity.getY(), next.entity.getZ(), target.entity.getX(), target.entity.getY(), target.entity.getZ());
|
||||||
final int randomTimeLeft = random.nextInt(heldItemStack.getUseDuration((LivingEntity)next.entity) / 3);
|
final int randomTimeLeft = random.nextInt(heldItemStack.getItem().getUseDuration(heldItemStack, player) / 3);
|
||||||
if (TurnBasedMinecraftMod.proxy.getConfig().isFreezeCombatantsEnabled()) {
|
if (TurnBasedMinecraftMod.proxy.getConfig().isFreezeCombatantsEnabled()) {
|
||||||
next.yaw = yawDirection;
|
next.yaw = yawDirection;
|
||||||
next.pitch = pitchDirection;
|
next.pitch = pitchDirection;
|
||||||
|
@ -815,8 +828,7 @@ public class Battle {
|
||||||
continue;
|
continue;
|
||||||
} else if (heldItemStack.getItem() instanceof CrossbowItem) {
|
} else if (heldItemStack.getItem() instanceof CrossbowItem) {
|
||||||
debugLog += " with crossbow";
|
debugLog += " with crossbow";
|
||||||
if (Utility.doesPlayerHaveArrows((Player)next.entity)) {
|
if (Utility.doesPlayerHaveArrows(player)) {
|
||||||
// Similar to attack with bow.
|
|
||||||
final Entity nextEntity = next.entity;
|
final Entity nextEntity = next.entity;
|
||||||
final Entity targetEntity = target.entity;
|
final Entity targetEntity = target.entity;
|
||||||
final float yawDirection = Utility.yawDirection(next.entity.getX(), next.entity.getZ(), target.entity.getX(), target.entity.getZ());
|
final float yawDirection = Utility.yawDirection(next.entity.getX(), next.entity.getZ(), target.entity.getX(), target.entity.getZ());
|
||||||
|
@ -829,7 +841,7 @@ public class Battle {
|
||||||
((ServerPlayer) nextEntity).connection.teleport(nextEntity.getX(), nextEntity.getY(), nextEntity.getZ(), yawDirection, pitchDirection);
|
((ServerPlayer) nextEntity).connection.teleport(nextEntity.getX(), nextEntity.getY(), nextEntity.getZ(), yawDirection, pitchDirection);
|
||||||
CrossbowItem itemCrossbow = (CrossbowItem) heldItemStack.getItem();
|
CrossbowItem itemCrossbow = (CrossbowItem) heldItemStack.getItem();
|
||||||
TurnBasedMinecraftMod.proxy.getAttackerViaBowSet().add(new AttackerViaBow(nextEntity, getId()));
|
TurnBasedMinecraftMod.proxy.getAttackerViaBowSet().add(new AttackerViaBow(nextEntity, getId()));
|
||||||
itemCrossbow.releaseUsing(((Player) nextEntity).getMainHandItem(), nextEntity.level(), (LivingEntity) nextEntity, -100);
|
itemCrossbow.releaseUsing(heldItemStack, nextEntity.level(), (LivingEntity)nextEntity, -100);
|
||||||
itemCrossbow.use(nextEntity.level(), (Player)nextEntity, InteractionHand.MAIN_HAND);
|
itemCrossbow.use(nextEntity.level(), (Player)nextEntity, InteractionHand.MAIN_HAND);
|
||||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.FIRED_ARROW, nextEntity.getId(), targetEntity.getId(), 0);
|
sendMessageToAllPlayers(PacketBattleMessage.MessageType.FIRED_ARROW, nextEntity.getId(), targetEntity.getId(), 0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -838,9 +850,18 @@ public class Battle {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
debugLog += " without bow";
|
debugLog += " without bow";
|
||||||
int hitChance = TurnBasedMinecraftMod.proxy.getConfig().getPlayerAttackProbability();
|
int hitChance;
|
||||||
|
if (next.entityInfo != null && !next.entityInfo.playerName.isEmpty()) {
|
||||||
|
hitChance = next.entityInfo.attackProbability;
|
||||||
|
} else {
|
||||||
|
hitChance = TurnBasedMinecraftMod.proxy.getConfig().getPlayerAttackProbability();
|
||||||
|
}
|
||||||
if (target.entity instanceof Player) {
|
if (target.entity instanceof Player) {
|
||||||
hitChance = hitChance * (100 - TurnBasedMinecraftMod.proxy.getConfig().getPlayerEvasion()) / 100;
|
if (target.entityInfo != null && !target.entityInfo.playerName.isEmpty()) {
|
||||||
|
hitChance = hitChance * (100 - target.entityInfo.evasion) / 100;
|
||||||
|
} else {
|
||||||
|
hitChance = hitChance * (100 - TurnBasedMinecraftMod.proxy.getConfig().getPlayerEvasion()) / 100;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
hitChance = hitChance * (100 - target.entityInfo.evasion) / 100;
|
hitChance = hitChance * (100 - target.entityInfo.evasion) / 100;
|
||||||
}
|
}
|
||||||
|
@ -877,6 +898,13 @@ public class Battle {
|
||||||
((Player) nextEntity).attack(targetEntity);
|
((Player) nextEntity).attack(targetEntity);
|
||||||
TurnBasedMinecraftMod.proxy.setAttackingEntity(null);
|
TurnBasedMinecraftMod.proxy.setAttackingEntity(null);
|
||||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ATTACK, nextEntity.getId(), targetEntity.getId(), TurnBasedMinecraftMod.proxy.getAttackingDamage());
|
sendMessageToAllPlayers(PacketBattleMessage.MessageType.ATTACK, nextEntity.getId(), targetEntity.getId(), TurnBasedMinecraftMod.proxy.getAttackingDamage());
|
||||||
|
// Attack effect
|
||||||
|
if (next.entityInfo != null && next.entityInfo.attackEffect != EntityInfo.Effect.UNKNOWN && next.entityInfo.attackEffectProbability > 0) {
|
||||||
|
if (random.nextInt(100) < next.entityInfo.attackEffectProbability) {
|
||||||
|
next.entityInfo.attackEffect.applyEffectToEntity((LivingEntity)targetEntity);
|
||||||
|
sendMessageToAllPlayers(PacketBattleMessage.MessageType.WAS_AFFECTED, nextEntity.getId(), targetEntity.getId(), 0, next.entityInfo.attackEffect.getAffectedString());
|
||||||
|
}
|
||||||
|
}
|
||||||
if (defenseDamageTriggered) {
|
if (defenseDamageTriggered) {
|
||||||
// defense damage
|
// defense damage
|
||||||
DamageSource defenseDamageSource = targetEntity.damageSources().mobAttack((LivingEntity) targetEntity);
|
DamageSource defenseDamageSource = targetEntity.damageSources().mobAttack((LivingEntity) targetEntity);
|
||||||
|
@ -1021,48 +1049,111 @@ public class Battle {
|
||||||
int fastestEnemySpeed = 0;
|
int fastestEnemySpeed = 0;
|
||||||
if (next.isSideA) {
|
if (next.isSideA) {
|
||||||
for (Combatant c : sideB.values()) {
|
for (Combatant c : sideB.values()) {
|
||||||
if (c.entity instanceof Player) {
|
if (c.entity instanceof Player player) {
|
||||||
int playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
int playerSpeed;
|
||||||
if (((Player) c.entity).hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
|
||||||
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
|
playerSpeed = c.entityInfo.speed;
|
||||||
} else if (((Player) c.entity).hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
|
} else {
|
||||||
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
|
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
||||||
|
}
|
||||||
|
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
||||||
|
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
|
||||||
|
playerSpeed = c.entityInfo.hasteSpeed;
|
||||||
|
} else {
|
||||||
|
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
|
||||||
|
}
|
||||||
|
} else if (player.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
|
||||||
|
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
|
||||||
|
playerSpeed = c.entityInfo.slowSpeed;
|
||||||
|
} else {
|
||||||
|
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (playerSpeed > fastestEnemySpeed) {
|
if (playerSpeed > fastestEnemySpeed) {
|
||||||
fastestEnemySpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
fastestEnemySpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (c.entityInfo.speed > fastestEnemySpeed) {
|
if (c.entity instanceof LivingEntity livingEntity) {
|
||||||
|
if (livingEntity.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
||||||
|
if (c.entityInfo.hasteSpeed > fastestEnemySpeed) {
|
||||||
|
fastestEnemySpeed = c.entityInfo.hasteSpeed;
|
||||||
|
}
|
||||||
|
} else if (livingEntity.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
|
||||||
|
if (c.entityInfo.slowSpeed > fastestEnemySpeed) {
|
||||||
|
fastestEnemySpeed = c.entityInfo.slowSpeed;
|
||||||
|
}
|
||||||
|
} else if (c.entityInfo.speed > fastestEnemySpeed) {
|
||||||
|
fastestEnemySpeed = c.entityInfo.speed;
|
||||||
|
}
|
||||||
|
} else if (c.entityInfo.speed > fastestEnemySpeed) {
|
||||||
fastestEnemySpeed = c.entityInfo.speed;
|
fastestEnemySpeed = c.entityInfo.speed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (Combatant c : sideA.values()) {
|
for (Combatant c : sideA.values()) {
|
||||||
if (c.entity instanceof Player) {
|
if (c.entity instanceof Player player) {
|
||||||
int playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
int playerSpeed;
|
||||||
if (((Player) c.entity).hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
|
||||||
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
|
playerSpeed = c.entityInfo.speed;
|
||||||
} else if (((Player) c.entity).hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
|
} else {
|
||||||
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
|
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
||||||
|
}
|
||||||
|
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
||||||
|
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
|
||||||
|
playerSpeed = c.entityInfo.hasteSpeed;
|
||||||
|
} else {
|
||||||
|
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
|
||||||
|
}
|
||||||
|
} else if (player.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
|
||||||
|
if (c.entityInfo != null && !c.entityInfo.playerName.isEmpty()) {
|
||||||
|
playerSpeed = c.entityInfo.slowSpeed;
|
||||||
|
} else {
|
||||||
|
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (playerSpeed > fastestEnemySpeed) {
|
if (playerSpeed > fastestEnemySpeed) {
|
||||||
fastestEnemySpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
fastestEnemySpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (c.entityInfo.speed > fastestEnemySpeed) {
|
if (c.entity instanceof LivingEntity livingEntity) {
|
||||||
|
if (livingEntity.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
||||||
|
if (c.entityInfo.hasteSpeed > fastestEnemySpeed) {
|
||||||
|
fastestEnemySpeed = c.entityInfo.hasteSpeed;
|
||||||
|
}
|
||||||
|
} else if (livingEntity.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
|
||||||
|
if (c.entityInfo.slowSpeed > fastestEnemySpeed) {
|
||||||
|
fastestEnemySpeed = c.entityInfo.slowSpeed;
|
||||||
|
}
|
||||||
|
} else if (c.entityInfo.speed > fastestEnemySpeed) {
|
||||||
|
fastestEnemySpeed = c.entityInfo.speed;
|
||||||
|
}
|
||||||
|
} else if (c.entityInfo.speed > fastestEnemySpeed) {
|
||||||
fastestEnemySpeed = c.entityInfo.speed;
|
fastestEnemySpeed = c.entityInfo.speed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int fleeProbability = 0;
|
int fleeProbability = 0;
|
||||||
if (next.entity instanceof Player) {
|
if (next.entity instanceof Player player) {
|
||||||
int playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
int playerSpeed;
|
||||||
if (((Player) next.entity).hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
if (next.entityInfo != null && !next.entityInfo.playerName.isEmpty()) {
|
||||||
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
|
playerSpeed = next.entityInfo.speed;
|
||||||
} else if (((Player) next.entity).hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
|
} else {
|
||||||
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
|
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSpeed();
|
||||||
|
}
|
||||||
|
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
||||||
|
if (next.entityInfo != null && !next.entityInfo.playerName.isEmpty()) {
|
||||||
|
playerSpeed = next.entityInfo.hasteSpeed;
|
||||||
|
} else {
|
||||||
|
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerHasteSpeed();
|
||||||
|
}
|
||||||
|
} else if (player.hasEffect(MobEffects.MOVEMENT_SLOWDOWN)) {
|
||||||
|
if (next.entityInfo != null && !next.entityInfo.playerName.isEmpty()) {
|
||||||
|
playerSpeed = next.entityInfo.slowSpeed;
|
||||||
|
} else {
|
||||||
|
playerSpeed = TurnBasedMinecraftMod.proxy.getConfig().getPlayerSlowSpeed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (fastestEnemySpeed >= playerSpeed) {
|
if (fastestEnemySpeed >= playerSpeed) {
|
||||||
fleeProbability = TurnBasedMinecraftMod.proxy.getConfig().getFleeBadProbability();
|
fleeProbability = TurnBasedMinecraftMod.proxy.getConfig().getFleeBadProbability();
|
||||||
|
@ -1107,7 +1198,7 @@ public class Battle {
|
||||||
debugLog += " null";
|
debugLog += " null";
|
||||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getId(), 0, PacketBattleMessage.UsedItemAction.USED_NOTHING.getValue());
|
sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getId(), 0, PacketBattleMessage.UsedItemAction.USED_NOTHING.getValue());
|
||||||
break;
|
break;
|
||||||
} else if (Utility.isItemEdible(targetItemStack)) {
|
} else if (Utility.isItemEdible(targetItemStack, (LivingEntity)next.entity)) {
|
||||||
debugLog += " food";
|
debugLog += " food";
|
||||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getId(), 0, PacketBattleMessage.UsedItemAction.USED_FOOD.getValue(), targetItemStack.getDisplayName().getString());
|
sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getId(), 0, PacketBattleMessage.UsedItemAction.USED_FOOD.getValue(), targetItemStack.getDisplayName().getString());
|
||||||
final Entity nextEntity = next.entity;
|
final Entity nextEntity = next.entity;
|
||||||
|
@ -1116,7 +1207,7 @@ public class Battle {
|
||||||
} else {
|
} else {
|
||||||
// then check vanilla foods
|
// then check vanilla foods
|
||||||
final CreativeModeTab foodAndDrinksTab = CreativeModeTabRegistry.getTab(CreativeModeTabs.FOOD_AND_DRINKS.location());
|
final CreativeModeTab foodAndDrinksTab = CreativeModeTabRegistry.getTab(CreativeModeTabs.FOOD_AND_DRINKS.location());
|
||||||
if (foodAndDrinksTab.contains(targetItemStack) && Utility.isItemEdible(targetItemStack)) {
|
if (foodAndDrinksTab.contains(targetItemStack) && Utility.isItemEdible(targetItemStack, (LivingEntity)next.entity)) {
|
||||||
debugLog += " food";
|
debugLog += " food";
|
||||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getId(), 0, PacketBattleMessage.UsedItemAction.USED_FOOD.getValue(), targetItemStack.getDisplayName().getString());
|
sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getId(), 0, PacketBattleMessage.UsedItemAction.USED_FOOD.getValue(), targetItemStack.getDisplayName().getString());
|
||||||
final Entity nextEntity = next.entity;
|
final Entity nextEntity = next.entity;
|
||||||
|
@ -1135,7 +1226,13 @@ public class Battle {
|
||||||
final int nextItemToUse = next.itemToUse;
|
final int nextItemToUse = next.itemToUse;
|
||||||
final int prevItem = ((Player)nextEntity).getInventory().selected;
|
final int prevItem = ((Player)nextEntity).getInventory().selected;
|
||||||
((Player)nextEntity).getInventory().selected = nextItemToUse;
|
((Player)nextEntity).getInventory().selected = nextItemToUse;
|
||||||
((Player)nextEntity).getInventory().setItem(nextItemToUse, targetItem.use(nextEntity.level(), (Player)nextEntity, InteractionHand.MAIN_HAND).getObject());
|
InteractionResult interactionResult = targetItem.use(nextEntity.level(), (Player)nextEntity, InteractionHand.MAIN_HAND);
|
||||||
|
if (interactionResult instanceof InteractionResult.Success resultSuccess) {
|
||||||
|
ItemStack transformed = resultSuccess.heldItemTransformedTo();
|
||||||
|
if (transformed != null) {
|
||||||
|
((Player) nextEntity).getInventory().setItem(nextItemToUse, transformed);
|
||||||
|
}
|
||||||
|
}
|
||||||
((Player)nextEntity).getInventory().selected = prevItem;
|
((Player)nextEntity).getInventory().selected = prevItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,10 @@ import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.monster.Creeper;
|
import net.minecraft.world.entity.monster.Creeper;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.neoforged.neoforge.common.NeoForge;
|
||||||
import net.minecraftforge.event.entity.living.LivingAttackEvent;
|
import net.neoforged.neoforge.event.entity.living.LivingChangeTargetEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingChangeTargetEvent;
|
import net.neoforged.neoforge.event.entity.living.LivingIncomingDamageEvent;
|
||||||
import net.minecraftforge.network.PacketDistributor;
|
import net.neoforged.neoforge.network.PacketDistributor;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -32,7 +32,7 @@ public class BattleManager
|
||||||
recentlyLeftBattle = new HashMap<Integer, Combatant>();
|
recentlyLeftBattle = new HashMap<Integer, Combatant>();
|
||||||
battleUpdater = new BattleUpdater(this);
|
battleUpdater = new BattleUpdater(this);
|
||||||
entityToBattleMap = new HashMap<EntityIDDimPair, Integer>();
|
entityToBattleMap = new HashMap<EntityIDDimPair, Integer>();
|
||||||
MinecraftForge.EVENT_BUS.register(battleUpdater);
|
NeoForge.EVENT_BUS.register(battleUpdater);
|
||||||
tempIDPair = new EntityIDDimPair();
|
tempIDPair = new EntityIDDimPair();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ public class BattleManager
|
||||||
* @param event
|
* @param event
|
||||||
* @return True if event should be canceled
|
* @return True if event should be canceled
|
||||||
*/
|
*/
|
||||||
public boolean checkAttack(final LivingAttackEvent event)
|
public boolean checkAttack(final LivingIncomingDamageEvent event)
|
||||||
{
|
{
|
||||||
Config config = TurnBasedMinecraftMod.proxy.getConfig();
|
Config config = TurnBasedMinecraftMod.proxy.getConfig();
|
||||||
String receiverClassName = event.getEntity().getClass().getName();
|
String receiverClassName = event.getEntity().getClass().getName();
|
||||||
|
@ -183,13 +183,13 @@ public class BattleManager
|
||||||
{
|
{
|
||||||
// Check if "player_only_battles" is enabled and if both entities are players.
|
// Check if "player_only_battles" is enabled and if both entities are players.
|
||||||
if (TurnBasedMinecraftMod.proxy.getConfig().isPlayerOnlyBattlesEnabled() &&
|
if (TurnBasedMinecraftMod.proxy.getConfig().isPlayerOnlyBattlesEnabled() &&
|
||||||
(!(event.getEntity() instanceof Player) || !(event.getNewTarget() instanceof Player))) {
|
(!(event.getEntity() instanceof Player) || !(event.getNewAboutToBeSetTarget() instanceof Player))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String targetedCustomName;
|
String targetedCustomName;
|
||||||
try {
|
try {
|
||||||
targetedCustomName = event.getNewTarget().getCustomName().getString();
|
targetedCustomName = event.getNewAboutToBeSetTarget().getCustomName().getString();
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
targetedCustomName = null;
|
targetedCustomName = null;
|
||||||
}
|
}
|
||||||
|
@ -207,7 +207,7 @@ public class BattleManager
|
||||||
}
|
}
|
||||||
|
|
||||||
EntityInfo targetedInfo;
|
EntityInfo targetedInfo;
|
||||||
if(event.getNewTarget() instanceof Player)
|
if(event.getNewAboutToBeSetTarget() instanceof Player)
|
||||||
{
|
{
|
||||||
targetedInfo = null;
|
targetedInfo = null;
|
||||||
}
|
}
|
||||||
|
@ -216,10 +216,10 @@ public class BattleManager
|
||||||
targetedInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(targetedCustomName);
|
targetedInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(targetedCustomName);
|
||||||
if(targetedInfo == null)
|
if(targetedInfo == null)
|
||||||
{
|
{
|
||||||
targetedInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(event.getNewTarget());
|
targetedInfo = TurnBasedMinecraftMod.proxy.getConfig().getMatchingEntityInfo(event.getNewAboutToBeSetTarget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if((event.getNewTarget() instanceof Player && ((Player)event.getNewTarget()).isCreative())
|
if((event.getNewAboutToBeSetTarget() instanceof Player && ((Player)event.getNewAboutToBeSetTarget()).isCreative())
|
||||||
|| attackerInfo == null
|
|| attackerInfo == null
|
||||||
|| attackerInfo.ignoreBattle
|
|| attackerInfo.ignoreBattle
|
||||||
|| TurnBasedMinecraftMod.proxy.getConfig().isIgnoreBattleType(attackerInfo.category)
|
|| TurnBasedMinecraftMod.proxy.getConfig().isIgnoreBattleType(attackerInfo.category)
|
||||||
|
@ -235,8 +235,8 @@ public class BattleManager
|
||||||
if(attackerBattle != null && !attackerBattle.hasCombatant(event.getEntity().getId())) {
|
if(attackerBattle != null && !attackerBattle.hasCombatant(event.getEntity().getId())) {
|
||||||
attackerBattle = null;
|
attackerBattle = null;
|
||||||
}
|
}
|
||||||
Battle defenderBattle = battleMap.get(entityToBattleMap.get(new EntityIDDimPair(event.getNewTarget())));
|
Battle defenderBattle = battleMap.get(entityToBattleMap.get(new EntityIDDimPair(event.getNewAboutToBeSetTarget())));
|
||||||
if(defenderBattle != null && !defenderBattle.hasCombatant(event.getNewTarget().getId())) {
|
if(defenderBattle != null && !defenderBattle.hasCombatant(event.getNewAboutToBeSetTarget().getId())) {
|
||||||
defenderBattle = null;
|
defenderBattle = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,13 +244,13 @@ public class BattleManager
|
||||||
return;
|
return;
|
||||||
} else if(attackerBattle == null && defenderBattle == null) {
|
} else if(attackerBattle == null && defenderBattle == null) {
|
||||||
// neither in battle
|
// neither in battle
|
||||||
if(event.getEntity() instanceof Player || event.getNewTarget() instanceof Player)
|
if(event.getEntity() instanceof Player || event.getNewAboutToBeSetTarget() instanceof Player)
|
||||||
{
|
{
|
||||||
// at least one is a player, create battle
|
// at least one is a player, create battle
|
||||||
Collection<Entity> sideA = new ArrayList<Entity>(1);
|
Collection<Entity> sideA = new ArrayList<Entity>(1);
|
||||||
Collection<Entity> sideB = new ArrayList<Entity>(1);
|
Collection<Entity> sideB = new ArrayList<Entity>(1);
|
||||||
sideA.add(event.getEntity());
|
sideA.add(event.getEntity());
|
||||||
sideB.add(event.getNewTarget());
|
sideB.add(event.getNewAboutToBeSetTarget());
|
||||||
createBattle(sideA, sideB, event.getEntity().level().dimension());
|
createBattle(sideA, sideB, event.getEntity().level().dimension());
|
||||||
logger.debug("neither in battle, at least one is player, creating new battle");
|
logger.debug("neither in battle, at least one is player, creating new battle");
|
||||||
}
|
}
|
||||||
|
@ -261,16 +261,16 @@ public class BattleManager
|
||||||
// battle max reached, cannot add to battle
|
// battle max reached, cannot add to battle
|
||||||
return;
|
return;
|
||||||
} else if (attackerBattle.hasCombatantInSideA(event.getEntity().getId())) {
|
} else if (attackerBattle.hasCombatantInSideA(event.getEntity().getId())) {
|
||||||
attackerBattle.addCombatantToSideB(event.getNewTarget());
|
attackerBattle.addCombatantToSideB(event.getNewAboutToBeSetTarget());
|
||||||
} else {
|
} else {
|
||||||
attackerBattle.addCombatantToSideA(event.getNewTarget());
|
attackerBattle.addCombatantToSideA(event.getNewAboutToBeSetTarget());
|
||||||
}
|
}
|
||||||
entityToBattleMap.put(new EntityIDDimPair(event.getNewTarget()), attackerBattle.getId());
|
entityToBattleMap.put(new EntityIDDimPair(event.getNewAboutToBeSetTarget()), attackerBattle.getId());
|
||||||
} else {
|
} else {
|
||||||
if (defenderBattle.getSize() >= TurnBasedMinecraftMod.proxy.getConfig().getMaxInBattle()) {
|
if (defenderBattle.getSize() >= TurnBasedMinecraftMod.proxy.getConfig().getMaxInBattle()) {
|
||||||
// battle max reached, cannot add to battle
|
// battle max reached, cannot add to battle
|
||||||
return;
|
return;
|
||||||
} else if (defenderBattle.hasCombatantInSideA(event.getNewTarget().getId())) {
|
} else if (defenderBattle.hasCombatantInSideA(event.getNewAboutToBeSetTarget().getId())) {
|
||||||
defenderBattle.addCombatantToSideB(event.getEntity());
|
defenderBattle.addCombatantToSideB(event.getEntity());
|
||||||
} else {
|
} else {
|
||||||
defenderBattle.addCombatantToSideA(event.getEntity());
|
defenderBattle.addCombatantToSideA(event.getEntity());
|
||||||
|
@ -307,7 +307,7 @@ public class BattleManager
|
||||||
public void cleanup()
|
public void cleanup()
|
||||||
{
|
{
|
||||||
battleUpdater.setRunning(false);
|
battleUpdater.setRunning(false);
|
||||||
MinecraftForge.EVENT_BUS.unregister(battleUpdater);
|
NeoForge.EVENT_BUS.unregister(battleUpdater);
|
||||||
battleMap.clear();
|
battleMap.clear();
|
||||||
battleUpdater = null;
|
battleUpdater = null;
|
||||||
}
|
}
|
||||||
|
@ -317,7 +317,7 @@ public class BattleManager
|
||||||
c.time = System.nanoTime();
|
c.time = System.nanoTime();
|
||||||
Config config = TurnBasedMinecraftMod.proxy.getConfig();
|
Config config = TurnBasedMinecraftMod.proxy.getConfig();
|
||||||
if(c.entity instanceof ServerPlayer) {
|
if(c.entity instanceof ServerPlayer) {
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketGeneralMessage("You just left battle! " + config.getLeaveBattleCooldownSeconds() + " seconds until you can attack/be-attacked again!"), PacketDistributor.PLAYER.with((ServerPlayer)c.entity));
|
PacketDistributor.sendToPlayer((ServerPlayer)c.entity, new PacketGeneralMessage("You just left battle! " + config.getLeaveBattleCooldownSeconds() + " seconds until you can attack/be-attacked again!"));
|
||||||
}
|
}
|
||||||
recentlyLeftBattle.put(c.entity.getId(), c);
|
recentlyLeftBattle.put(c.entity.getId(), c);
|
||||||
entityToBattleMap.remove(new EntityIDDimPair(c.entity));
|
entityToBattleMap.remove(new EntityIDDimPair(c.entity));
|
||||||
|
@ -337,7 +337,7 @@ public class BattleManager
|
||||||
iter.remove();
|
iter.remove();
|
||||||
if(entry.getValue().entity instanceof ServerPlayer)
|
if(entry.getValue().entity instanceof ServerPlayer)
|
||||||
{
|
{
|
||||||
TurnBasedMinecraftMod.getHandler().send(new PacketGeneralMessage("Timer ended, you can now attack/be-attacked again."), PacketDistributor.PLAYER.with((ServerPlayer)entry.getValue().entity));
|
PacketDistributor.sendToPlayer((ServerPlayer)entry.getValue().entity, new PacketGeneralMessage("Timer ended, you can now attack/be-attacked again."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common;
|
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
|
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.neoforged.neoforge.event.tick.ServerTickEvent;
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
@ -25,8 +25,9 @@ public class BattleUpdater
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void update(TickEvent.ServerTickEvent tickEvent) {
|
public void update(ServerTickEvent.Post tickEvent) {
|
||||||
if(tickEvent.phase != TickEvent.Phase.START && isRunning.get() && ++tick > tickLimit && tickEvent.haveTime()) {
|
//if(tickEvent.phase != TickEvent.Phase.START && isRunning.get() && ++tick > tickLimit) {
|
||||||
|
if(isRunning.get() && ++tick > tickLimit && tickEvent.hasTime()) {
|
||||||
tick = 0;
|
tick = 0;
|
||||||
manager.battleMap.entrySet().removeIf(entry -> entry.getValue().update());
|
manager.battleMap.entrySet().removeIf(entry -> entry.getValue().update());
|
||||||
manager.updateRecentlyLeftBattle();
|
manager.updateRecentlyLeftBattle();
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common;
|
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import net.minecraft.world.effect.MobEffectInstance;
|
||||||
|
import net.minecraft.world.effect.MobEffects;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.effect.MobEffectInstance;
|
|
||||||
import net.minecraft.world.effect.MobEffects;
|
import java.util.Comparator;
|
||||||
|
|
||||||
public class Combatant
|
public class Combatant
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common;
|
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
import net.minecraftforge.server.ServerLifecycleHooks;
|
import net.neoforged.neoforge.server.ServerLifecycleHooks;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.*;
|
||||||
import java.util.Hashtable;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class CommonProxy
|
public class CommonProxy
|
||||||
{
|
{
|
||||||
|
@ -172,7 +172,9 @@ public class CommonProxy
|
||||||
return ServerLifecycleHooks.getCurrentServer().getLevel(dim).getEntity(id);
|
return ServerLifecycleHooks.getCurrentServer().getLevel(dim).getEntity(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <MSG> void handlePacket(MSG msg,CustomPayloadEvent.Context ctx) {}
|
public <MSG> void handlePacket(final MSG msg, final IPayloadContext ctx) {}
|
||||||
|
|
||||||
|
public static final StreamCodec<ByteBuf, Collection<Integer>> COLLECTION_INT_CODEC = ByteBufCodecs.INT.apply(ByteBufCodecs.collection(ArrayList::new));
|
||||||
|
|
||||||
public void showClientConfigGui() {}
|
public void showClientConfigGui() {}
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2,9 +2,9 @@ package com.burnedkirby.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketGeneralMessage;
|
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketGeneralMessage;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraftforge.event.entity.EntityTravelToDimensionEvent;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.neoforged.neoforge.event.entity.EntityTravelToDimensionEvent;
|
||||||
import net.minecraftforge.network.PacketDistributor;
|
import net.neoforged.neoforge.network.PacketDistributor;
|
||||||
|
|
||||||
public class DimensionChangedHandler {
|
public class DimensionChangedHandler {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
@ -14,9 +14,7 @@ public class DimensionChangedHandler {
|
||||||
}
|
}
|
||||||
if(TurnBasedMinecraftMod.proxy.getBattleManager().forceLeaveBattle(new EntityIDDimPair(event.getEntity()))
|
if(TurnBasedMinecraftMod.proxy.getBattleManager().forceLeaveBattle(new EntityIDDimPair(event.getEntity()))
|
||||||
&& event.getEntity() instanceof ServerPlayer) {
|
&& event.getEntity() instanceof ServerPlayer) {
|
||||||
TurnBasedMinecraftMod.getHandler().send(
|
PacketDistributor.sendToPlayer((ServerPlayer)event.getEntity(), new PacketGeneralMessage("Left battle due to moving to a different dimension"));
|
||||||
new PacketGeneralMessage("Left battle due to moving to a different dimension"),
|
|
||||||
PacketDistributor.PLAYER.with((ServerPlayer)event.getEntity()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ public class EditingInfo
|
||||||
public EntityInfo entityInfo;
|
public EntityInfo entityInfo;
|
||||||
public boolean isPendingEntitySelection;
|
public boolean isPendingEntitySelection;
|
||||||
public boolean isEditingCustomName;
|
public boolean isEditingCustomName;
|
||||||
|
public boolean isEditingPlayer;
|
||||||
|
|
||||||
public EditingInfo()
|
public EditingInfo()
|
||||||
{
|
{
|
||||||
|
@ -15,6 +16,7 @@ public class EditingInfo
|
||||||
entityInfo = null;
|
entityInfo = null;
|
||||||
isPendingEntitySelection = true;
|
isPendingEntitySelection = true;
|
||||||
isEditingCustomName = false;
|
isEditingCustomName = false;
|
||||||
|
isEditingPlayer = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EditingInfo(Player player)
|
public EditingInfo(Player player)
|
||||||
|
@ -23,5 +25,6 @@ public class EditingInfo
|
||||||
entityInfo = null;
|
entityInfo = null;
|
||||||
isPendingEntitySelection = true;
|
isPendingEntitySelection = true;
|
||||||
isEditingCustomName = false;
|
isEditingCustomName = false;
|
||||||
|
isEditingPlayer = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common;
|
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.world.effect.MobEffectInstance;
|
import net.minecraft.world.effect.MobEffectInstance;
|
||||||
import net.minecraft.world.effect.MobEffects;
|
import net.minecraft.world.effect.MobEffects;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
public class EntityInfo
|
public class EntityInfo
|
||||||
{
|
{
|
||||||
public Class classType;
|
public Class classType;
|
||||||
|
@ -17,11 +20,14 @@ public class EntityInfo
|
||||||
public int defenseDamageProbability;
|
public int defenseDamageProbability;
|
||||||
public int evasion;
|
public int evasion;
|
||||||
public int speed;
|
public int speed;
|
||||||
|
public int hasteSpeed;
|
||||||
|
public int slowSpeed;
|
||||||
public String category;
|
public String category;
|
||||||
public int decisionAttack;
|
public int decisionAttack;
|
||||||
public int decisionDefend;
|
public int decisionDefend;
|
||||||
public int decisionFlee;
|
public int decisionFlee;
|
||||||
public String customName;
|
public String customName;
|
||||||
|
public String playerName;
|
||||||
|
|
||||||
public enum Effect
|
public enum Effect
|
||||||
{
|
{
|
||||||
|
@ -366,11 +372,39 @@ public class EntityInfo
|
||||||
defenseDamageProbability = 0;
|
defenseDamageProbability = 0;
|
||||||
evasion = 15;
|
evasion = 15;
|
||||||
speed = 50;
|
speed = 50;
|
||||||
|
hasteSpeed = 80;
|
||||||
|
slowSpeed = 20;
|
||||||
category = "unknown";
|
category = "unknown";
|
||||||
decisionAttack = 70;
|
decisionAttack = 70;
|
||||||
decisionDefend = 20;
|
decisionDefend = 20;
|
||||||
decisionFlee = 10;
|
decisionFlee = 10;
|
||||||
customName = new String();
|
customName = new String();
|
||||||
|
playerName = new String();
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityInfo(Class classType, boolean ignoreBattle, int attackPower, int attackProbability, int attackVariance,
|
||||||
|
Effect attackEffect, int attackEffectProbability, int defenseDamage, int defenseDamageProbability,
|
||||||
|
int evasion, int speed, int hasteSpeed, int slowSpeed, String category, int decisionAttack, int decisionDefend, int decisionFlee,
|
||||||
|
String customName, String playerName) {
|
||||||
|
this.classType = classType;
|
||||||
|
this.ignoreBattle = ignoreBattle;
|
||||||
|
this.attackPower = attackPower;
|
||||||
|
this.attackProbability = attackProbability;
|
||||||
|
this.attackVariance = attackVariance;
|
||||||
|
this.attackEffect = attackEffect;
|
||||||
|
this.attackEffectProbability = attackEffectProbability;
|
||||||
|
this.defenseDamage = defenseDamage;
|
||||||
|
this.defenseDamageProbability = defenseDamageProbability;
|
||||||
|
this.evasion = evasion;
|
||||||
|
this.speed = speed;
|
||||||
|
this.hasteSpeed = hasteSpeed;
|
||||||
|
this.slowSpeed = slowSpeed;
|
||||||
|
this.category = category;
|
||||||
|
this.decisionAttack = decisionAttack;
|
||||||
|
this.decisionDefend = decisionDefend;
|
||||||
|
this.decisionFlee = decisionFlee;
|
||||||
|
this.customName = customName;
|
||||||
|
this.playerName = playerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EntityInfo clone()
|
public EntityInfo clone()
|
||||||
|
@ -387,11 +421,123 @@ public class EntityInfo
|
||||||
newEntityInfo.defenseDamageProbability = defenseDamageProbability;
|
newEntityInfo.defenseDamageProbability = defenseDamageProbability;
|
||||||
newEntityInfo.evasion = evasion;
|
newEntityInfo.evasion = evasion;
|
||||||
newEntityInfo.speed = speed;
|
newEntityInfo.speed = speed;
|
||||||
|
newEntityInfo.hasteSpeed = hasteSpeed;
|
||||||
|
newEntityInfo.slowSpeed = slowSpeed;
|
||||||
newEntityInfo.category = category;
|
newEntityInfo.category = category;
|
||||||
newEntityInfo.decisionAttack = decisionAttack;
|
newEntityInfo.decisionAttack = decisionAttack;
|
||||||
newEntityInfo.decisionDefend = decisionDefend;
|
newEntityInfo.decisionDefend = decisionDefend;
|
||||||
newEntityInfo.decisionFlee = decisionFlee;
|
newEntityInfo.decisionFlee = decisionFlee;
|
||||||
newEntityInfo.customName = new String(customName);
|
newEntityInfo.customName = customName;
|
||||||
|
newEntityInfo.playerName = playerName;
|
||||||
return newEntityInfo;
|
return newEntityInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EntityInfo(ByteBuf buffer) {
|
||||||
|
int name_bytes_len = buffer.readInt();
|
||||||
|
if (name_bytes_len > 0) {
|
||||||
|
ByteBuf name_bytes = buffer.readBytes(name_bytes_len);
|
||||||
|
try {
|
||||||
|
classType = Class.forName(name_bytes.toString(StandardCharsets.UTF_8));
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
TurnBasedMinecraftMod.logger.warn("Failed to decode EntityInfo.classType", e);
|
||||||
|
classType = null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
classType = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
ignoreBattle = buffer.readBoolean();
|
||||||
|
attackPower = buffer.readInt();
|
||||||
|
attackProbability = buffer.readInt();
|
||||||
|
attackVariance = buffer.readInt();
|
||||||
|
|
||||||
|
int effect_len = buffer.readInt();
|
||||||
|
ByteBuf effect_bytes = buffer.readBytes(effect_len);
|
||||||
|
attackEffect = Effect.fromString(effect_bytes.toString(StandardCharsets.UTF_8));
|
||||||
|
|
||||||
|
attackEffectProbability = buffer.readInt();
|
||||||
|
defenseDamage = buffer.readInt();
|
||||||
|
defenseDamageProbability = buffer.readInt();
|
||||||
|
evasion = buffer.readInt();
|
||||||
|
speed = buffer.readInt();
|
||||||
|
hasteSpeed = buffer.readInt();
|
||||||
|
slowSpeed = buffer.readInt();
|
||||||
|
|
||||||
|
int category_len = buffer.readInt();
|
||||||
|
ByteBuf category_bytes = buffer.readBytes(category_len);
|
||||||
|
category = category_bytes.toString(StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
decisionAttack = buffer.readInt();
|
||||||
|
decisionDefend = buffer.readInt();
|
||||||
|
decisionFlee = buffer.readInt();
|
||||||
|
|
||||||
|
int custom_len = buffer.readInt();
|
||||||
|
if (custom_len > 0) {
|
||||||
|
ByteBuf custom_bytes = buffer.readBytes(custom_len);
|
||||||
|
customName = custom_bytes.toString(StandardCharsets.UTF_8);
|
||||||
|
} else {
|
||||||
|
customName = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
int player_len = buffer.readInt();
|
||||||
|
if (player_len > 0) {
|
||||||
|
ByteBuf player_bytes = buffer.readBytes(player_len);
|
||||||
|
playerName = player_bytes.toString(StandardCharsets.UTF_8);
|
||||||
|
} else {
|
||||||
|
playerName = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void encode(ByteBuf buffer) {
|
||||||
|
if (classType == null) {
|
||||||
|
buffer.writeInt(0);
|
||||||
|
} else {
|
||||||
|
String name = classType.getName();
|
||||||
|
byte[] name_bytes = name.getBytes(StandardCharsets.UTF_8);
|
||||||
|
buffer.writeInt(name_bytes.length);
|
||||||
|
buffer.writeBytes(name_bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer.writeBoolean(ignoreBattle);
|
||||||
|
buffer.writeInt(attackPower);
|
||||||
|
buffer.writeInt(attackProbability);
|
||||||
|
buffer.writeInt(attackVariance);
|
||||||
|
|
||||||
|
String effect_name = attackEffect.toString();
|
||||||
|
byte[] effect_bytes = effect_name.getBytes(StandardCharsets.UTF_8);
|
||||||
|
buffer.writeInt(effect_bytes.length);
|
||||||
|
buffer.writeBytes(effect_bytes);
|
||||||
|
|
||||||
|
buffer.writeInt(attackEffectProbability);
|
||||||
|
buffer.writeInt(defenseDamage);
|
||||||
|
buffer.writeInt(defenseDamageProbability);
|
||||||
|
buffer.writeInt(evasion);
|
||||||
|
buffer.writeInt(speed);
|
||||||
|
buffer.writeInt(hasteSpeed);
|
||||||
|
buffer.writeInt(slowSpeed);
|
||||||
|
|
||||||
|
byte[] category_bytes = category.getBytes(StandardCharsets.UTF_8);
|
||||||
|
buffer.writeInt(category_bytes.length);
|
||||||
|
buffer.writeBytes(category_bytes);
|
||||||
|
|
||||||
|
buffer.writeInt(decisionAttack);
|
||||||
|
buffer.writeInt(decisionDefend);
|
||||||
|
buffer.writeInt(decisionFlee);
|
||||||
|
|
||||||
|
if (customName.isEmpty()) {
|
||||||
|
buffer.writeInt(0);
|
||||||
|
} else {
|
||||||
|
byte[] custom_bytes = customName.getBytes(StandardCharsets.UTF_8);
|
||||||
|
buffer.writeInt(custom_bytes.length);
|
||||||
|
buffer.writeBytes(custom_bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playerName.isEmpty()) {
|
||||||
|
buffer.writeInt(0);
|
||||||
|
} else {
|
||||||
|
byte[] player_bytes = playerName.getBytes(StandardCharsets.UTF_8);
|
||||||
|
buffer.writeInt(player_bytes.length);
|
||||||
|
buffer.writeBytes(player_bytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common;
|
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.neoforged.neoforge.event.entity.living.LivingIncomingDamageEvent;
|
||||||
|
|
||||||
public class HurtEventHandler {
|
public class HurtEventHandler {
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void handleHurtEvent(LivingHurtEvent event) {
|
public void handleHurtEvent(LivingIncomingDamageEvent event) {
|
||||||
CommonProxy proxy = TurnBasedMinecraftMod.proxy;
|
CommonProxy proxy = TurnBasedMinecraftMod.proxy;
|
||||||
if (event.getEntity().level().isClientSide || proxy.getBattleManager() == null) {
|
if (event.getEntity().level().isClientSide || proxy.getBattleManager() == null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common;
|
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraftforge.event.entity.EntityJoinLevelEvent;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent;
|
||||||
|
|
||||||
public class PlayerJoinEventHandler
|
public class PlayerJoinEventHandler
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||||
|
|
||||||
|
import com.burnedkirby.TurnBasedMinecraft.client.ClientConfig;
|
||||||
|
import com.burnedkirby.TurnBasedMinecraft.client.ClientConfigGui;
|
||||||
|
import net.neoforged.api.distmarker.Dist;
|
||||||
|
import net.neoforged.fml.ModContainer;
|
||||||
|
import net.neoforged.fml.common.Mod;
|
||||||
|
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
|
||||||
|
|
||||||
|
@Mod(value = TurnBasedMinecraftMod.MODID, dist = Dist.CLIENT)
|
||||||
|
public class TBMM_Client {
|
||||||
|
public TBMM_Client(ModContainer container) {
|
||||||
|
container.registerExtensionPoint(IConfigScreenFactory.class, ClientConfigGui::new);
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,19 +19,21 @@ import net.minecraft.network.chat.HoverEvent;
|
||||||
import net.minecraft.network.chat.MutableComponent;
|
import net.minecraft.network.chat.MutableComponent;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.event.RegisterCommandsEvent;
|
import net.neoforged.fml.ModContainer;
|
||||||
import net.minecraftforge.event.server.ServerStartingEvent;
|
import net.neoforged.fml.common.Mod;
|
||||||
import net.minecraftforge.event.server.ServerStoppingEvent;
|
import net.neoforged.fml.config.ModConfig;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.neoforged.fml.event.lifecycle.FMLDedicatedServerSetupEvent;
|
||||||
import net.minecraftforge.fml.config.ModConfig;
|
import net.neoforged.fml.loading.FMLEnvironment;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
import net.neoforged.neoforge.common.NeoForge;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.neoforged.neoforge.event.RegisterCommandsEvent;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLDedicatedServerSetupEvent;
|
import net.neoforged.neoforge.event.server.ServerStartingEvent;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.neoforged.neoforge.event.server.ServerStoppingEvent;
|
||||||
import net.minecraftforge.network.*;
|
import net.neoforged.neoforge.network.PacketDistributor;
|
||||||
|
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
|
||||||
|
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
@ -39,7 +41,7 @@ import org.apache.logging.log4j.Logger;
|
||||||
public class TurnBasedMinecraftMod {
|
public class TurnBasedMinecraftMod {
|
||||||
public static final String MODID = "com_burnedkirby_turnbasedminecraft";
|
public static final String MODID = "com_burnedkirby_turnbasedminecraft";
|
||||||
public static final String NAME = "Turn Based Minecraft Mod";
|
public static final String NAME = "Turn Based Minecraft Mod";
|
||||||
public static final String VERSION = "1.26.2";
|
public static final String VERSION = "1.26.5";
|
||||||
public static final String CONFIG_FILENAME = "TBM_Config.toml";
|
public static final String CONFIG_FILENAME = "TBM_Config.toml";
|
||||||
public static final String DEFAULT_CONFIG_FILENAME = "TBM_Config_DEFAULT.toml";
|
public static final String DEFAULT_CONFIG_FILENAME = "TBM_Config_DEFAULT.toml";
|
||||||
public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/";
|
public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/";
|
||||||
|
@ -50,89 +52,61 @@ public class TurnBasedMinecraftMod {
|
||||||
public static final String MUSIC_SILLY = MUSIC_ROOT + "silly/";
|
public static final String MUSIC_SILLY = MUSIC_ROOT + "silly/";
|
||||||
public static final String MUSIC_BATTLE = MUSIC_ROOT + "battle/";
|
public static final String MUSIC_BATTLE = MUSIC_ROOT + "battle/";
|
||||||
|
|
||||||
private static final Integer PROTOCOL_VERSION = 5;
|
private static final String PROTOCOL_VERSION = Integer.toString(4);
|
||||||
private static final ResourceLocation HANDLER_ID = ResourceLocation.fromNamespaceAndPath(MODID, "main_channel");
|
private static final ResourceLocation HANDLER_ID = ResourceLocation.fromNamespaceAndPath(MODID, "main_channel");
|
||||||
|
|
||||||
private static final SimpleChannel HANDLER = ChannelBuilder
|
|
||||||
.named(HANDLER_ID)
|
|
||||||
.clientAcceptedVersions(Channel.VersionTest.exact(PROTOCOL_VERSION))
|
|
||||||
.serverAcceptedVersions(Channel.VersionTest.exact(PROTOCOL_VERSION))
|
|
||||||
.networkProtocolVersion(PROTOCOL_VERSION)
|
|
||||||
.simpleChannel();
|
|
||||||
protected static Logger logger = LogManager.getLogger();
|
protected static Logger logger = LogManager.getLogger();
|
||||||
|
|
||||||
public static ResourceLocation getNetResourceLocation() {
|
public static ResourceLocation getNetResourceLocation() {
|
||||||
return HANDLER_ID;
|
return HANDLER_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SimpleChannel getHandler() {
|
|
||||||
return HANDLER;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static CommonProxy proxy;
|
public static CommonProxy proxy;
|
||||||
|
|
||||||
public TurnBasedMinecraftMod(FMLJavaModLoadingContext ctx) {
|
public TurnBasedMinecraftMod(ModContainer container) {
|
||||||
ctx.getModEventBus().addListener(this::firstInit);
|
container.getEventBus().addListener(this::firstInit);
|
||||||
ctx.getModEventBus().addListener(this::secondInitClient);
|
container.getEventBus().addListener(this::secondInitClient);
|
||||||
ctx.getModEventBus().addListener(this::secondInitServer);
|
container.getEventBus().addListener(this::secondInitServer);
|
||||||
|
container.getEventBus().addListener(this::registerNetwork);
|
||||||
|
NeoForge.EVENT_BUS.register(this);
|
||||||
|
container.registerConfig(ModConfig.Type.CLIENT, ClientConfig.CLIENT_SPEC);
|
||||||
|
}
|
||||||
|
|
||||||
MinecraftForge.EVENT_BUS.register(this);
|
private void registerNetwork(final RegisterPayloadHandlersEvent event) {
|
||||||
|
final PayloadRegistrar registrar = event.registrar(PROTOCOL_VERSION);
|
||||||
|
|
||||||
ctx.registerConfig(ModConfig.Type.CLIENT, ClientConfig.CLIENT_SPEC);
|
registrar.playToServer(PacketBattleDecision.TYPE, PacketBattleDecision.STREAM_CODEC, new PacketBattleDecision.PayloadHandler());
|
||||||
|
|
||||||
|
registrar.playToClient(PacketBattleInfo.TYPE, PacketBattleInfo.STREAM_CODEC, new PacketBattleInfo.PayloadHandler());
|
||||||
|
|
||||||
|
registrar.playToClient(PacketBattleMessage.TYPE, PacketBattleMessage.STREAM_CODEC, new PacketBattleMessage.PayloadHandler());
|
||||||
|
|
||||||
|
registrar.playToServer(PacketBattleRequestInfo.TYPE, PacketBattleRequestInfo.STREAM_CODEC, new PacketBattleRequestInfo.PayloadHandler());
|
||||||
|
|
||||||
|
registrar.playToClient(PacketEditingMessage.TYPE, PacketEditingMessage.STREAM_CODEC, new PacketEditingMessage.PayloadHandler());
|
||||||
|
|
||||||
|
registrar.playToClient(PacketGeneralMessage.TYPE, PacketGeneralMessage.STREAM_CODEC, new PacketGeneralMessage.PayloadHandler());
|
||||||
|
|
||||||
|
registrar.playToClient(PacketClientGUI.TYPE, PacketClientGUI.STREAM_CODEC, new PacketClientGUI.PayloadHandler());
|
||||||
|
|
||||||
|
registrar.playToClient(PacketBattlePing.TYPE, PacketBattlePing.STREAM_CODEC, new PacketBattlePing.PayloadHandler());
|
||||||
|
|
||||||
|
logger.debug("Register packets com_burnedkirby_turnbasedminecraft");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void firstInit(final FMLCommonSetupEvent event) {
|
private void firstInit(final FMLCommonSetupEvent event) {
|
||||||
proxy = DistExecutor.unsafeRunForDist(() -> () -> new ClientProxy(), () -> () -> new CommonProxy());
|
if (FMLEnvironment.dist.isClient()) {
|
||||||
|
proxy = new ClientProxy();
|
||||||
|
} else {
|
||||||
|
proxy = new CommonProxy();
|
||||||
|
}
|
||||||
proxy.setLogger(logger);
|
proxy.setLogger(logger);
|
||||||
proxy.initialize();
|
proxy.initialize();
|
||||||
|
|
||||||
// register packets
|
|
||||||
HANDLER.messageBuilder(PacketBattleInfo.class, NetworkDirection.PLAY_TO_CLIENT)
|
|
||||||
.encoder(new PacketBattleInfo.Encoder())
|
|
||||||
.decoder(new PacketBattleInfo.Decoder())
|
|
||||||
.consumerNetworkThread(new PacketBattleInfo.Consumer())
|
|
||||||
.add();
|
|
||||||
HANDLER.messageBuilder(PacketBattleRequestInfo.class, NetworkDirection.PLAY_TO_SERVER)
|
|
||||||
.encoder(new PacketBattleRequestInfo.Encoder())
|
|
||||||
.decoder(new PacketBattleRequestInfo.Decoder())
|
|
||||||
.consumerNetworkThread(new PacketBattleRequestInfo.Consumer())
|
|
||||||
.add();
|
|
||||||
HANDLER.messageBuilder(PacketBattleDecision.class, NetworkDirection.PLAY_TO_SERVER)
|
|
||||||
.encoder(new PacketBattleDecision.Encoder())
|
|
||||||
.decoder(new PacketBattleDecision.Decoder())
|
|
||||||
.consumerNetworkThread(new PacketBattleDecision.Consumer())
|
|
||||||
.add();
|
|
||||||
HANDLER.messageBuilder(PacketBattleMessage.class, NetworkDirection.PLAY_TO_CLIENT)
|
|
||||||
.encoder(new PacketBattleMessage.Encoder())
|
|
||||||
.decoder(new PacketBattleMessage.Decoder())
|
|
||||||
.consumerNetworkThread(new PacketBattleMessage.Consumer())
|
|
||||||
.add();
|
|
||||||
HANDLER.messageBuilder(PacketGeneralMessage.class, NetworkDirection.PLAY_TO_CLIENT)
|
|
||||||
.encoder(new PacketGeneralMessage.Encoder())
|
|
||||||
.decoder(new PacketGeneralMessage.Decoder())
|
|
||||||
.consumerNetworkThread(new PacketGeneralMessage.Consumer())
|
|
||||||
.add();
|
|
||||||
HANDLER.messageBuilder(PacketEditingMessage.class, NetworkDirection.PLAY_TO_CLIENT)
|
|
||||||
.encoder(new PacketEditingMessage.Encoder())
|
|
||||||
.decoder(new PacketEditingMessage.Decoder())
|
|
||||||
.consumerNetworkThread(new PacketEditingMessage.Consumer())
|
|
||||||
.add();
|
|
||||||
HANDLER.messageBuilder(PacketClientGui.class, NetworkDirection.PLAY_TO_CLIENT)
|
|
||||||
.encoder(new PacketClientGui.Encoder())
|
|
||||||
.decoder(new PacketClientGui.Decoder())
|
|
||||||
.consumerNetworkThread(new PacketClientGui.Consumer())
|
|
||||||
.add();
|
|
||||||
HANDLER.messageBuilder(PacketBattlePing.class, NetworkDirection.PLAY_TO_CLIENT)
|
|
||||||
.encoder(new PacketBattlePing.Encoder())
|
|
||||||
.decoder(new PacketBattlePing.Decoder())
|
|
||||||
.consumerNetworkThread(new PacketBattlePing.Consumer())
|
|
||||||
.add();
|
|
||||||
|
|
||||||
// register event handler(s)
|
// register event handler(s)
|
||||||
MinecraftForge.EVENT_BUS.register(new AttackEventHandler());
|
NeoForge.EVENT_BUS.register(new AttackEventHandler());
|
||||||
MinecraftForge.EVENT_BUS.register(new PlayerJoinEventHandler());
|
NeoForge.EVENT_BUS.register(new PlayerJoinEventHandler());
|
||||||
MinecraftForge.EVENT_BUS.register(new DimensionChangedHandler());
|
NeoForge.EVENT_BUS.register(new DimensionChangedHandler());
|
||||||
MinecraftForge.EVENT_BUS.register(new HurtEventHandler());
|
NeoForge.EVENT_BUS.register(new HurtEventHandler());
|
||||||
|
|
||||||
logger.debug("Init com_burnedkirby_turnbasedminecraft");
|
logger.debug("Init com_burnedkirby_turnbasedminecraft");
|
||||||
}
|
}
|
||||||
|
@ -178,7 +152,7 @@ public class TurnBasedMinecraftMod {
|
||||||
proxy.getConfig().setBattleDisabledForAll(true);
|
proxy.getConfig().setBattleDisabledForAll(true);
|
||||||
for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) {
|
for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) {
|
||||||
proxy.getConfig().addBattleIgnoringPlayer(player.getId());
|
proxy.getConfig().addBattleIgnoringPlayer(player.getId());
|
||||||
getHandler().send(new PacketGeneralMessage("OP disabled turn-based-combat for everyone"), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP disabled turn-based-combat for everyone"));
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}));
|
}));
|
||||||
|
@ -199,7 +173,7 @@ public class TurnBasedMinecraftMod {
|
||||||
proxy.getConfig().setBattleDisabledForAll(false);
|
proxy.getConfig().setBattleDisabledForAll(false);
|
||||||
proxy.getConfig().clearBattleIgnoringPlayers();
|
proxy.getConfig().clearBattleIgnoringPlayers();
|
||||||
for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) {
|
for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) {
|
||||||
getHandler().send(new PacketGeneralMessage("OP enabled turn-based-combat for everyone"), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP enabled turn-based-combat for everyone"));
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}));
|
}));
|
||||||
|
@ -210,7 +184,7 @@ public class TurnBasedMinecraftMod {
|
||||||
.then(Commands.argument("targets", EntityArgument.players()).executes(c -> {
|
.then(Commands.argument("targets", EntityArgument.players()).executes(c -> {
|
||||||
for (ServerPlayer player : EntityArgument.getPlayers(c, "targets")) {
|
for (ServerPlayer player : EntityArgument.getPlayers(c, "targets")) {
|
||||||
proxy.getConfig().addBattleIgnoringPlayer(player.getId());
|
proxy.getConfig().addBattleIgnoringPlayer(player.getId());
|
||||||
getHandler().send(new PacketGeneralMessage("OP enabled turn-based-combat for you"), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP enabled turn-based-combat for you"));
|
||||||
c.getSource().sendSuccess(() -> Component.literal("Enabled turn-based-combat for " + player.getDisplayName().getString()), true);
|
c.getSource().sendSuccess(() -> Component.literal("Enabled turn-based-combat for " + player.getDisplayName().getString()), true);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -222,7 +196,7 @@ public class TurnBasedMinecraftMod {
|
||||||
.then(Commands.argument("targets", EntityArgument.players()).executes(c -> {
|
.then(Commands.argument("targets", EntityArgument.players()).executes(c -> {
|
||||||
for (ServerPlayer player : EntityArgument.getPlayers(c, "targets")) {
|
for (ServerPlayer player : EntityArgument.getPlayers(c, "targets")) {
|
||||||
proxy.getConfig().removeBattleIgnoringPlayer(player.getId());
|
proxy.getConfig().removeBattleIgnoringPlayer(player.getId());
|
||||||
getHandler().send(new PacketGeneralMessage("OP disabled turn-based-combat for you"), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP disabled turn-based-combat for you"));
|
||||||
c.getSource().sendSuccess(() -> Component.literal("Disabled turn-based-combat for " + player.getDisplayName().getString()), true);
|
c.getSource().sendSuccess(() -> Component.literal("Disabled turn-based-combat for " + player.getDisplayName().getString()), true);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -235,12 +209,12 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
proxy.setEditingPlayer(player);
|
proxy.setEditingPlayer(player);
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
logger.info("Begin editing TBM Entity for player \"" + player.getDisplayName().getString() + "\" (\"" + c.getSource().getDisplayName() + "\")");
|
logger.info("Begin editing TBM Entity for player \"" + player.getDisplayName().getString() + "\" (\"" + c.getSource().getDisplayName() + "\")");
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -251,14 +225,14 @@ public class TurnBasedMinecraftMod {
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
if (!proxy.getConfig().editEntityEntry(editingInfo.entityInfo)) {
|
if (!proxy.getConfig().editEntityEntry(editingInfo.entityInfo)) {
|
||||||
getHandler().send(new PacketGeneralMessage("An error occurred while attempting to save an entry to the config"), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("An error occurred while attempting to save an entry to the config"));
|
||||||
proxy.removeEditingInfo(player.getId());
|
proxy.removeEditingInfo(player.getId());
|
||||||
} else {
|
} else {
|
||||||
proxy.removeEditingInfo(player.getId());
|
proxy.removeEditingInfo(player.getId());
|
||||||
getHandler().send(new PacketGeneralMessage("Entity info saved in config and loaded."), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("Entity info saved in config and loaded."));
|
||||||
}
|
}
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -271,7 +245,7 @@ public class TurnBasedMinecraftMod {
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null) {
|
if (editingInfo != null) {
|
||||||
proxy.removeEditingInfo(player.getId());
|
proxy.removeEditingInfo(player.getId());
|
||||||
getHandler().send(new PacketGeneralMessage("Cancelled editing entry."), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("Cancelled editing entry."));
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}))
|
}))
|
||||||
|
@ -283,23 +257,47 @@ public class TurnBasedMinecraftMod {
|
||||||
Message exceptionMessage = new LiteralMessage("Invalid action for tbm-edit");
|
Message exceptionMessage = new LiteralMessage("Invalid action for tbm-edit");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
proxy.setEditingPlayer(player);
|
proxy.setEditingPlayer(player);
|
||||||
proxy.getEditingInfo(player.getId()).isEditingCustomName = true;
|
proxy.getEditingInfo(player.getId()).isEditingCustomName = true;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
logger.info("Begin editing custom TBM Entity for player \"" + player.getDisplayName().getString() + "\" (\"" + c.getSource().getDisplayName() + "\")");
|
logger.info("Begin editing custom TBM Entity for player \"" + player.getDisplayName().getString() + "\" (\"" + c.getSource().getDisplayName() + "\")");
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}))
|
}))
|
||||||
|
.then(Commands.literal("player")
|
||||||
|
.executes(c -> {
|
||||||
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_PLAYER));
|
||||||
|
return 1;
|
||||||
|
})
|
||||||
|
.then(Commands.argument("playerName", StringArgumentType.greedyString()).executes(c -> {
|
||||||
|
String name = StringArgumentType.getString(c, "playerName");
|
||||||
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("Editing player \"" + name + "\""));
|
||||||
|
TurnBasedMinecraftMod.logger.info("Begin editing player \"" + name + "\"");
|
||||||
|
proxy.setEditingPlayer(player);
|
||||||
|
EditingInfo editInfo = proxy.getEditingInfo(player.getId());
|
||||||
|
editInfo.isEditingPlayer = true;
|
||||||
|
editInfo.entityInfo = TurnBasedMinecraftMod.proxy.getConfig().getPlayerInfo(name);
|
||||||
|
if (editInfo.entityInfo == null) {
|
||||||
|
editInfo.entityInfo = new EntityInfo();
|
||||||
|
}
|
||||||
|
editInfo.entityInfo.playerName = name;
|
||||||
|
editInfo.isPendingEntitySelection = false;
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editInfo.entityInfo));
|
||||||
|
return 1;
|
||||||
|
}))
|
||||||
|
)
|
||||||
.then(Commands.literal("edit")
|
.then(Commands.literal("edit")
|
||||||
.executes(c -> {
|
.executes(c -> {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -311,9 +309,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_IGNORE_BATTLE), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_IGNORE_BATTLE));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -327,9 +325,9 @@ public class TurnBasedMinecraftMod {
|
||||||
boolean ignoreBattle = BoolArgumentType.getBool(c, "ignoreBattle");
|
boolean ignoreBattle = BoolArgumentType.getBool(c, "ignoreBattle");
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.ignoreBattle = ignoreBattle;
|
editingInfo.entityInfo.ignoreBattle = ignoreBattle;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -342,9 +340,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_POWER), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_POWER));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -361,9 +359,9 @@ public class TurnBasedMinecraftMod {
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.attackPower = attackPower;
|
editingInfo.entityInfo.attackPower = attackPower;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -376,9 +374,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_PROBABILITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_PROBABILITY));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -397,9 +395,9 @@ public class TurnBasedMinecraftMod {
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.attackProbability = attackProbability;
|
editingInfo.entityInfo.attackProbability = attackProbability;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -412,9 +410,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_VARIANCE), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_VARIANCE));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -431,9 +429,9 @@ public class TurnBasedMinecraftMod {
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.attackVariance = attackVariance;
|
editingInfo.entityInfo.attackVariance = attackVariance;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -446,9 +444,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -462,9 +460,9 @@ public class TurnBasedMinecraftMod {
|
||||||
EntityInfo.Effect effect = EntityInfo.Effect.fromString(StringArgumentType.getString(c, "attackEffect"));
|
EntityInfo.Effect effect = EntityInfo.Effect.fromString(StringArgumentType.getString(c, "attackEffect"));
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.attackEffect = effect;
|
editingInfo.entityInfo.attackEffect = effect;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -477,9 +475,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT_PROBABILITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT_PROBABILITY));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -498,9 +496,9 @@ public class TurnBasedMinecraftMod {
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.attackEffectProbability = attackEffectProbability;
|
editingInfo.entityInfo.attackEffectProbability = attackEffectProbability;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -513,9 +511,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -532,9 +530,9 @@ public class TurnBasedMinecraftMod {
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.defenseDamage = defenseDamage;
|
editingInfo.entityInfo.defenseDamage = defenseDamage;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -547,9 +545,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE_PROBABILITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE_PROBABILITY));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -568,9 +566,9 @@ public class TurnBasedMinecraftMod {
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.defenseDamageProbability = defenseDamageProbability;
|
editingInfo.entityInfo.defenseDamageProbability = defenseDamageProbability;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -583,9 +581,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_EVASION), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_EVASION));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -604,9 +602,9 @@ public class TurnBasedMinecraftMod {
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.evasion = evasion;
|
editingInfo.entityInfo.evasion = evasion;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -615,32 +613,66 @@ public class TurnBasedMinecraftMod {
|
||||||
}))
|
}))
|
||||||
)
|
)
|
||||||
.then(Commands.literal("speed")
|
.then(Commands.literal("speed")
|
||||||
|
.executes(c -> {
|
||||||
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SPEED));
|
||||||
|
} else if (editingInfo != null) {
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
|
} else {
|
||||||
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
})
|
||||||
|
.then(Commands.argument("speed", IntegerArgumentType.integer())
|
||||||
|
.executes(c -> {
|
||||||
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
|
int speed = IntegerArgumentType.getInteger(c, "speed");
|
||||||
|
if (speed < 0) {
|
||||||
|
speed = 0;
|
||||||
|
}
|
||||||
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
|
editingInfo.entityInfo.speed = speed;
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
|
} else if (editingInfo != null) {
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
|
} else {
|
||||||
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}))
|
||||||
|
)
|
||||||
|
.then(Commands.literal("hasteSpeed")
|
||||||
.executes(c -> {
|
.executes(c -> {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SPEED), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_HASTE_SPEED));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
})
|
})
|
||||||
.then(Commands.argument("speed", IntegerArgumentType.integer())
|
.then(Commands.argument("hasteSpeed", IntegerArgumentType.integer())
|
||||||
.executes(c -> {
|
.executes(c -> {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
int speed = IntegerArgumentType.getInteger(c, "speed");
|
int hasteSpeed = IntegerArgumentType.getInteger(c, "hasteSpeed");
|
||||||
if (speed < 0) {
|
if (hasteSpeed < 0) {
|
||||||
speed = 0;
|
hasteSpeed = 0;
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.speed = speed;
|
editingInfo.entityInfo.hasteSpeed = hasteSpeed;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -648,14 +680,48 @@ public class TurnBasedMinecraftMod {
|
||||||
return 1;
|
return 1;
|
||||||
}))
|
}))
|
||||||
)
|
)
|
||||||
|
.then(Commands.literal("slowSpeed")
|
||||||
|
.executes(c -> {
|
||||||
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SLOW_SPEED));
|
||||||
|
} else if (editingInfo != null) {
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
|
} else {
|
||||||
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
})
|
||||||
|
.then(Commands.argument("slowSpeed", IntegerArgumentType.integer())
|
||||||
|
.executes(c -> {
|
||||||
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
|
int slowSpeed = IntegerArgumentType.getInteger(c, "slowSpeed");
|
||||||
|
if (slowSpeed < 0) {
|
||||||
|
slowSpeed = 0;
|
||||||
|
}
|
||||||
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
|
editingInfo.entityInfo.slowSpeed = slowSpeed;
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
|
} else if (editingInfo != null) {
|
||||||
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
|
} else {
|
||||||
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}))
|
||||||
|
)
|
||||||
.then(Commands.literal("category")
|
.then(Commands.literal("category")
|
||||||
.executes(c -> {
|
.executes(c -> {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_CATEGORY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_CATEGORY));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -669,9 +735,9 @@ public class TurnBasedMinecraftMod {
|
||||||
String category = StringArgumentType.getString(c, "category");
|
String category = StringArgumentType.getString(c, "category");
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.category = category;
|
editingInfo.entityInfo.category = category;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -684,9 +750,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_ATTACK), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_ATTACK));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -705,9 +771,9 @@ public class TurnBasedMinecraftMod {
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.decisionAttack = decisionAttack;
|
editingInfo.entityInfo.decisionAttack = decisionAttack;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -720,9 +786,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_DEFEND), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_DEFEND));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -741,9 +807,9 @@ public class TurnBasedMinecraftMod {
|
||||||
}
|
}
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.decisionDefend = decisionDefend;
|
editingInfo.entityInfo.decisionDefend = decisionDefend;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -756,9 +822,9 @@ public class TurnBasedMinecraftMod {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_FLEE), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_FLEE));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -772,9 +838,9 @@ public class TurnBasedMinecraftMod {
|
||||||
int decisionFlee = IntegerArgumentType.getInteger(c, "decisionFlee");
|
int decisionFlee = IntegerArgumentType.getInteger(c, "decisionFlee");
|
||||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||||
editingInfo.entityInfo.decisionFlee = decisionFlee;
|
editingInfo.entityInfo.decisionFlee = decisionFlee;
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||||
} else if (editingInfo != null) {
|
} else if (editingInfo != null) {
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||||
} else {
|
} else {
|
||||||
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
Message exceptionMessage = new LiteralMessage("Cannot edit entity without starting editing (use \"/tbm-edit\").");
|
||||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||||
|
@ -790,7 +856,7 @@ public class TurnBasedMinecraftMod {
|
||||||
.requires(c -> c.hasPermission(2))
|
.requires(c -> c.hasPermission(2))
|
||||||
.executes(c -> {
|
.executes(c -> {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
getHandler().send(new PacketEditingMessage(PacketEditingMessage.Type.SERVER_EDIT), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.SERVER_EDIT));
|
||||||
return 1;
|
return 1;
|
||||||
})
|
})
|
||||||
.then(Commands.literal("leave_battle_cooldown").executes(c -> {
|
.then(Commands.literal("leave_battle_cooldown").executes(c -> {
|
||||||
|
@ -1702,7 +1768,7 @@ public class TurnBasedMinecraftMod {
|
||||||
event.getDispatcher().register(
|
event.getDispatcher().register(
|
||||||
Commands.literal("tbm-client-edit").executes(c -> {
|
Commands.literal("tbm-client-edit").executes(c -> {
|
||||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||||
getHandler().send(new PacketClientGui(), PacketDistributor.PLAYER.with(player));
|
PacketDistributor.sendToPlayer(player, new PacketClientGUI(0));
|
||||||
return 1;
|
return 1;
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,11 +5,14 @@ import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ArrowItem;
|
import net.minecraft.world.item.ArrowItem;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class Utility
|
public class Utility
|
||||||
{
|
{
|
||||||
public static float yawDirection(double posX, double posZ, double targetX, double targetZ)
|
public static float yawDirection(double posX, double posZ, double targetX, double targetZ)
|
||||||
|
@ -65,7 +68,7 @@ public class Utility
|
||||||
return ResourceKey.create(Registries.DIMENSION, dimRes);
|
return ResourceKey.create(Registries.DIMENSION, dimRes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isItemEdible(ItemStack itemStack) {
|
public static boolean isItemEdible(ItemStack itemStack, @Nullable LivingEntity entity) {
|
||||||
return itemStack.get(DataComponents.FOOD) != null;
|
return itemStack.get(DataComponents.CONSUMABLE) != null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,64 +1,50 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.Battle;
|
import com.burnedkirby.TurnBasedMinecraft.common.Battle;
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.Battle.Decision;
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.function.BiConsumer;
|
public record PacketBattleDecision(int battleID, int decision, int targetIDorItemID) implements CustomPacketPayload
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class PacketBattleDecision
|
|
||||||
{
|
{
|
||||||
private int battleID;
|
public static final CustomPacketPayload.Type<PacketBattleDecision> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetbattledecision"));
|
||||||
private Battle.Decision decision;
|
|
||||||
private int targetIDOrItemID;
|
|
||||||
|
|
||||||
public PacketBattleDecision() {}
|
public static final StreamCodec<ByteBuf, PacketBattleDecision> STREAM_CODEC = StreamCodec.composite(
|
||||||
|
ByteBufCodecs.INT,
|
||||||
|
PacketBattleDecision::battleID,
|
||||||
|
ByteBufCodecs.VAR_INT,
|
||||||
|
PacketBattleDecision::decision,
|
||||||
|
ByteBufCodecs.INT,
|
||||||
|
PacketBattleDecision::targetIDorItemID,
|
||||||
|
PacketBattleDecision::new
|
||||||
|
);
|
||||||
|
|
||||||
public PacketBattleDecision(int battleID, Battle.Decision decision, int targetIDOrItemID)
|
@Override
|
||||||
{
|
public Type<? extends CustomPacketPayload> type() {
|
||||||
this.battleID = battleID;
|
return TYPE;
|
||||||
this.decision = decision;
|
|
||||||
this.targetIDOrItemID = targetIDOrItemID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Encoder implements BiConsumer<PacketBattleDecision, RegistryFriendlyByteBuf> {
|
public static class PayloadHandler implements IPayloadHandler<PacketBattleDecision> {
|
||||||
public Encoder() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(PacketBattleDecision pkt, RegistryFriendlyByteBuf buf) {
|
public void handle(final @NotNull PacketBattleDecision pkt, final IPayloadContext ctx) {
|
||||||
buf.writeInt(pkt.battleID);
|
|
||||||
buf.writeInt(pkt.decision.getValue());
|
|
||||||
buf.writeInt(pkt.targetIDOrItemID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Decoder implements Function<RegistryFriendlyByteBuf, PacketBattleDecision> {
|
|
||||||
public Decoder() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketBattleDecision apply(RegistryFriendlyByteBuf buf) {
|
|
||||||
return new PacketBattleDecision(buf.readInt(), Decision.valueOf(buf.readInt()), buf.readInt());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Consumer implements BiConsumer<PacketBattleDecision, CustomPayloadEvent.Context> {
|
|
||||||
public Consumer() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(PacketBattleDecision pkt, CustomPayloadEvent.Context ctx) {
|
|
||||||
ctx.enqueueWork(() -> {
|
ctx.enqueueWork(() -> {
|
||||||
Battle b = TurnBasedMinecraftMod.proxy.getBattleManager().getBattleByID(pkt.battleID);
|
Battle b = TurnBasedMinecraftMod.proxy.getBattleManager().getBattleByID(pkt.battleID);
|
||||||
if(b != null)
|
if(b != null) {
|
||||||
{
|
Player player = ctx.player();
|
||||||
ServerPlayer player = ctx.getSender();
|
b.setDecision(player.getId(), Battle.Decision.valueOf(pkt.decision), pkt.targetIDorItemID);
|
||||||
b.setDecision(player.getId(), pkt.decision, pkt.targetIDOrItemID);
|
|
||||||
}
|
}
|
||||||
|
}).exceptionally(e -> {
|
||||||
|
ctx.disconnect(Component.literal("Exception handling PacketBattleDecision! " + e.getMessage()));
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
ctx.setPacketHandled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,94 +1,49 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
|
import com.burnedkirby.TurnBasedMinecraft.common.CommonProxy;
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class PacketBattleInfo
|
public record PacketBattleInfo(int battleID, Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos, long maxDecisionNanos, boolean turnTimerEnabled) implements CustomPacketPayload
|
||||||
{
|
{
|
||||||
private int battleID;
|
public static final CustomPacketPayload.Type<PacketBattleInfo> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetbattleinfo"));
|
||||||
private Collection<Integer> sideA;
|
|
||||||
private Collection<Integer> sideB;
|
|
||||||
private long decisionNanos;
|
|
||||||
|
|
||||||
private long maxDecisionNanos;
|
public static final StreamCodec<ByteBuf, PacketBattleInfo> STREAM_CODEC = StreamCodec.composite(
|
||||||
private boolean turnTimerEnabled;
|
ByteBufCodecs.INT,
|
||||||
|
PacketBattleInfo::battleID,
|
||||||
|
CommonProxy.COLLECTION_INT_CODEC,
|
||||||
|
PacketBattleInfo::sideA,
|
||||||
|
CommonProxy.COLLECTION_INT_CODEC,
|
||||||
|
PacketBattleInfo::sideB,
|
||||||
|
ByteBufCodecs.VAR_LONG,
|
||||||
|
PacketBattleInfo::decisionNanos,
|
||||||
|
ByteBufCodecs.VAR_LONG,
|
||||||
|
PacketBattleInfo::maxDecisionNanos,
|
||||||
|
ByteBufCodecs.BOOL,
|
||||||
|
PacketBattleInfo::turnTimerEnabled,
|
||||||
|
PacketBattleInfo::new
|
||||||
|
);
|
||||||
|
|
||||||
public PacketBattleInfo()
|
@Override
|
||||||
{
|
public Type<? extends CustomPacketPayload> type() {
|
||||||
battleID = 0;
|
return TYPE;
|
||||||
sideA = new ArrayList<Integer>();
|
|
||||||
sideB = new ArrayList<Integer>();
|
|
||||||
decisionNanos = TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos();
|
|
||||||
maxDecisionNanos = decisionNanos;
|
|
||||||
turnTimerEnabled = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketBattleInfo(int battleID, Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos, long maxDecisionNanos, boolean turnTimerEnabled)
|
public static class PayloadHandler implements IPayloadHandler<PacketBattleInfo> {
|
||||||
{
|
|
||||||
this.battleID = battleID;
|
|
||||||
this.sideA = sideA;
|
|
||||||
this.sideB = sideB;
|
|
||||||
this.decisionNanos = decisionNanos;
|
|
||||||
this.maxDecisionNanos = maxDecisionNanos;
|
|
||||||
this.turnTimerEnabled = turnTimerEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Encoder implements BiConsumer<PacketBattleInfo, RegistryFriendlyByteBuf> {
|
|
||||||
public Encoder() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(PacketBattleInfo msg, RegistryFriendlyByteBuf buf) {
|
public void handle(final @NotNull PacketBattleInfo pkt, final IPayloadContext ctx) {
|
||||||
buf.writeInt(msg.battleID);
|
|
||||||
buf.writeInt(msg.sideA.size());
|
|
||||||
buf.writeInt(msg.sideB.size());
|
|
||||||
for(Integer id : msg.sideA) {
|
|
||||||
buf.writeInt(id);
|
|
||||||
}
|
|
||||||
for(Integer id : msg.sideB) {
|
|
||||||
buf.writeInt(id);
|
|
||||||
}
|
|
||||||
buf.writeLong(msg.decisionNanos);
|
|
||||||
buf.writeLong(msg.maxDecisionNanos);
|
|
||||||
buf.writeBoolean(msg.turnTimerEnabled);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Decoder implements Function<RegistryFriendlyByteBuf, PacketBattleInfo> {
|
|
||||||
public Decoder() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketBattleInfo apply(RegistryFriendlyByteBuf buf) {
|
|
||||||
int battleID = buf.readInt();
|
|
||||||
int sideACount = buf.readInt();
|
|
||||||
int sideBCount = buf.readInt();
|
|
||||||
Collection<Integer> sideA = new ArrayList<Integer>(sideACount);
|
|
||||||
Collection<Integer> sideB = new ArrayList<Integer>(sideBCount);
|
|
||||||
for(int i = 0; i < sideACount; ++i) {
|
|
||||||
sideA.add(buf.readInt());
|
|
||||||
}
|
|
||||||
for(int i = 0; i < sideBCount; ++i) {
|
|
||||||
sideB.add(buf.readInt());
|
|
||||||
}
|
|
||||||
long decisionNanos = buf.readLong();
|
|
||||||
long maxDecisionNanos = buf.readLong();
|
|
||||||
boolean turnTimerEnabled = buf.readBoolean();
|
|
||||||
return new PacketBattleInfo(battleID, sideA, sideB, decisionNanos, maxDecisionNanos, turnTimerEnabled);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Consumer implements BiConsumer<PacketBattleInfo, CustomPayloadEvent.Context> {
|
|
||||||
public Consumer() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(PacketBattleInfo pkt, CustomPayloadEvent.Context ctx) {
|
|
||||||
ctx.enqueueWork(() -> {
|
ctx.enqueueWork(() -> {
|
||||||
if(TurnBasedMinecraftMod.proxy.getLocalBattle() == null)
|
if(TurnBasedMinecraftMod.proxy.getLocalBattle() == null)
|
||||||
{
|
{
|
||||||
|
@ -116,8 +71,10 @@ public class PacketBattleInfo
|
||||||
TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged();
|
TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged();
|
||||||
TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerEnabled(pkt.turnTimerEnabled);
|
TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerEnabled(pkt.turnTimerEnabled);
|
||||||
TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerMax((int)(pkt.maxDecisionNanos / 1000000000L));
|
TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerMax((int)(pkt.maxDecisionNanos / 1000000000L));
|
||||||
|
}).exceptionally(e -> {
|
||||||
|
ctx.disconnect(Component.literal("Exception handling PacketBattleInfo! " + e.getMessage()));
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
ctx.setPacketHandled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,20 +2,47 @@ package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.Utility;
|
import com.burnedkirby.TurnBasedMinecraft.common.Utility;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.neoforged.fml.loading.FMLEnvironment;
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class PacketBattleMessage
|
public class PacketBattleMessage implements CustomPacketPayload
|
||||||
{
|
{
|
||||||
|
public static final CustomPacketPayload.Type<PacketBattleMessage> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetbattlemessage"));
|
||||||
|
|
||||||
|
public static final StreamCodec<ByteBuf, PacketBattleMessage> STREAM_CODEC = StreamCodec.composite(
|
||||||
|
ByteBufCodecs.VAR_INT.map(MessageType::valueOf, MessageType::getValue),
|
||||||
|
PacketBattleMessage::getMessageType,
|
||||||
|
ByteBufCodecs.INT,
|
||||||
|
PacketBattleMessage::getEntityIDFrom,
|
||||||
|
ByteBufCodecs.INT,
|
||||||
|
PacketBattleMessage::getEntityIDTo,
|
||||||
|
ByteBufCodecs.STRING_UTF8.map(Utility::deserializeDimension, Utility::serializeDimension),
|
||||||
|
PacketBattleMessage::getDimension,
|
||||||
|
ByteBufCodecs.INT,
|
||||||
|
PacketBattleMessage::getAmount,
|
||||||
|
ByteBufCodecs.STRING_UTF8,
|
||||||
|
PacketBattleMessage::getCustom,
|
||||||
|
PacketBattleMessage::new
|
||||||
|
);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<? extends CustomPacketPayload> type() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
public enum MessageType
|
public enum MessageType
|
||||||
{
|
{
|
||||||
ENTERED(0),
|
ENTERED(0),
|
||||||
|
@ -133,6 +160,11 @@ public class PacketBattleMessage
|
||||||
public ResourceKey<Level> getDimension() {
|
public ResourceKey<Level> getDimension() {
|
||||||
return dimension;
|
return dimension;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDimensionSerialized() {
|
||||||
|
return Utility.serializeDimension(dimension);
|
||||||
|
}
|
||||||
|
|
||||||
public PacketBattleMessage() { custom = new String(); }
|
public PacketBattleMessage() { custom = new String(); }
|
||||||
|
|
||||||
public PacketBattleMessage(MessageType messageType, int entityIDFrom, int entityIDTo, ResourceKey<Level> dimension, int amount)
|
public PacketBattleMessage(MessageType messageType, int entityIDFrom, int entityIDTo, ResourceKey<Level> dimension, int amount)
|
||||||
|
@ -155,45 +187,17 @@ public class PacketBattleMessage
|
||||||
this.custom = custom;
|
this.custom = custom;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Encoder implements BiConsumer<PacketBattleMessage, RegistryFriendlyByteBuf> {
|
public static class PayloadHandler implements IPayloadHandler<PacketBattleMessage> {
|
||||||
public Encoder() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(PacketBattleMessage pkt, RegistryFriendlyByteBuf buf) {
|
public void handle(final @NotNull PacketBattleMessage pkt, final IPayloadContext ctx) {
|
||||||
buf.writeInt(pkt.messageType.getValue());
|
|
||||||
buf.writeInt(pkt.entityIDFrom);
|
|
||||||
buf.writeInt(pkt.entityIDTo);
|
|
||||||
buf.writeUtf(Utility.serializeDimension(pkt.dimension));
|
|
||||||
buf.writeInt(pkt.amount);
|
|
||||||
buf.writeUtf(pkt.custom);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Decoder implements Function<RegistryFriendlyByteBuf, PacketBattleMessage> {
|
|
||||||
public Decoder() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketBattleMessage apply(RegistryFriendlyByteBuf buf) {
|
|
||||||
return new PacketBattleMessage(
|
|
||||||
MessageType.valueOf(
|
|
||||||
buf.readInt()),
|
|
||||||
buf.readInt(),
|
|
||||||
buf.readInt(),
|
|
||||||
Utility.deserializeDimension(buf.readUtf()),
|
|
||||||
buf.readInt(),
|
|
||||||
buf.readUtf());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Consumer implements BiConsumer<PacketBattleMessage, CustomPayloadEvent.Context> {
|
|
||||||
public Consumer() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(PacketBattleMessage pkt, CustomPayloadEvent.Context ctx) {
|
|
||||||
ctx.enqueueWork(() -> {
|
ctx.enqueueWork(() -> {
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> TurnBasedMinecraftMod.proxy.handlePacket(pkt, ctx));
|
if (FMLEnvironment.dist.isClient()) {
|
||||||
|
TurnBasedMinecraftMod.proxy.handlePacket(pkt, ctx);
|
||||||
|
}
|
||||||
|
}).exceptionally(e -> {
|
||||||
|
ctx.disconnect(Component.literal("Exception handling PacketBattleMessage! " + e.getMessage()));
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
ctx.setPacketHandled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,60 +1,46 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.function.BiConsumer;
|
public record PacketBattlePing(int battleID, int remainingSeconds) implements CustomPacketPayload {
|
||||||
import java.util.function.Function;
|
public static final CustomPacketPayload.Type<PacketBattlePing> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetbattleping"));
|
||||||
|
|
||||||
public class PacketBattlePing {
|
public static final StreamCodec<ByteBuf, PacketBattlePing> STREAM_CODEC = StreamCodec.composite(
|
||||||
private int battleID;
|
ByteBufCodecs.INT,
|
||||||
private int decisionSeconds;
|
PacketBattlePing::battleID,
|
||||||
|
ByteBufCodecs.VAR_INT,
|
||||||
|
PacketBattlePing::remainingSeconds,
|
||||||
|
PacketBattlePing::new
|
||||||
|
);
|
||||||
|
|
||||||
public PacketBattlePing() {
|
@Override
|
||||||
battleID = 0;
|
public Type<? extends CustomPacketPayload> type() {
|
||||||
decisionSeconds = 1;
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketBattlePing(int battleID, int decisionSeconds) {
|
public static class PayloadHandler implements IPayloadHandler<PacketBattlePing> {
|
||||||
this.battleID = battleID;
|
|
||||||
this.decisionSeconds = decisionSeconds;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Encoder implements BiConsumer<PacketBattlePing, RegistryFriendlyByteBuf> {
|
|
||||||
public Encoder() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(PacketBattlePing pkt, RegistryFriendlyByteBuf buf) {
|
public void handle(final @NotNull PacketBattlePing pkt, IPayloadContext ctx) {
|
||||||
buf.writeInt(pkt.battleID);
|
|
||||||
buf.writeInt(pkt.decisionSeconds);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Decoder implements Function<RegistryFriendlyByteBuf, PacketBattlePing> {
|
|
||||||
public Decoder() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketBattlePing apply(RegistryFriendlyByteBuf buf) {
|
|
||||||
return new PacketBattlePing(buf.readInt(), buf.readInt());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Consumer implements BiConsumer<PacketBattlePing, CustomPayloadEvent.Context> {
|
|
||||||
public Consumer() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(PacketBattlePing pkt, CustomPayloadEvent.Context ctx) {
|
|
||||||
ctx.enqueueWork(() -> {
|
ctx.enqueueWork(() -> {
|
||||||
if (TurnBasedMinecraftMod.proxy.getLocalBattle() == null) {
|
if (TurnBasedMinecraftMod.proxy.getLocalBattle() != null) {
|
||||||
TurnBasedMinecraftMod.proxy.createLocalBattle(pkt.battleID);
|
TurnBasedMinecraftMod.proxy.setBattleGuiAsGui();
|
||||||
|
TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged();
|
||||||
|
TurnBasedMinecraftMod.proxy.setBattleGuiTime(pkt.remainingSeconds);
|
||||||
|
TurnBasedMinecraftMod.proxy.pauseMCMusic();
|
||||||
}
|
}
|
||||||
TurnBasedMinecraftMod.proxy.setBattleGuiAsGui();
|
}).exceptionally(e -> {
|
||||||
TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged();
|
ctx.disconnect(Component.literal("Exception handling PacketBattlePing! " + e.getMessage()));
|
||||||
TurnBasedMinecraftMod.proxy.setBattleGuiTime(pkt.decisionSeconds);
|
return null;
|
||||||
TurnBasedMinecraftMod.proxy.pauseMCMusic();
|
|
||||||
});
|
});
|
||||||
ctx.setPacketHandled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,54 +2,55 @@ package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.Battle;
|
import com.burnedkirby.TurnBasedMinecraft.common.Battle;
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.function.BiConsumer;
|
public record PacketBattleRequestInfo(int battleID) implements CustomPacketPayload
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class PacketBattleRequestInfo
|
|
||||||
{
|
{
|
||||||
private int battleID;
|
public static final CustomPacketPayload.Type<PacketBattleRequestInfo> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetbattlerequestinfo"));
|
||||||
|
|
||||||
public PacketBattleRequestInfo() {}
|
public static final StreamCodec<ByteBuf, PacketBattleRequestInfo> STREAM_CODEC = StreamCodec.composite(
|
||||||
|
ByteBufCodecs.INT,
|
||||||
|
PacketBattleRequestInfo::battleID,
|
||||||
|
PacketBattleRequestInfo::new
|
||||||
|
);
|
||||||
|
|
||||||
public PacketBattleRequestInfo(int battleID)
|
public PacketBattleRequestInfo(int battleID)
|
||||||
{
|
{
|
||||||
this.battleID = battleID;
|
this.battleID = battleID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Encoder implements BiConsumer<PacketBattleRequestInfo, RegistryFriendlyByteBuf> {
|
@Override
|
||||||
public Encoder() {}
|
public Type<? extends CustomPacketPayload> type() {
|
||||||
|
return TYPE;
|
||||||
@Override
|
|
||||||
public void accept(PacketBattleRequestInfo pkt, RegistryFriendlyByteBuf buf) {
|
|
||||||
buf.writeInt(pkt.battleID);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Decoder implements Function<RegistryFriendlyByteBuf, PacketBattleRequestInfo> {
|
public static class PayloadHandler implements IPayloadHandler<PacketBattleRequestInfo> {
|
||||||
public Decoder() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PacketBattleRequestInfo apply(RegistryFriendlyByteBuf buf) {
|
public void handle(final @NotNull PacketBattleRequestInfo pkt, final IPayloadContext ctx) {
|
||||||
return new PacketBattleRequestInfo(buf.readInt());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Consumer implements BiConsumer<PacketBattleRequestInfo, CustomPayloadEvent.Context> {
|
|
||||||
public Consumer() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(PacketBattleRequestInfo pkt, CustomPayloadEvent.Context ctx) {
|
|
||||||
ctx.enqueueWork(() -> {
|
ctx.enqueueWork(() -> {
|
||||||
Battle b = TurnBasedMinecraftMod.proxy.getBattleManager().getBattleByID(pkt.battleID);
|
Battle b = TurnBasedMinecraftMod.proxy.getBattleManager().getBattleByID(pkt.battleID);
|
||||||
if(b == null) {
|
if(b == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
TurnBasedMinecraftMod.getHandler().reply(new PacketBattleInfo(b.getId(), b.getSideAIDs(), b.getSideBIDs(), b.getTimerNanos(), TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever()), ctx);
|
ctx.reply(new PacketBattleInfo(
|
||||||
|
b.getId(),
|
||||||
|
b.getSideAIDs(),
|
||||||
|
b.getSideBIDs(),
|
||||||
|
b.getTimerNanos(),
|
||||||
|
TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(),
|
||||||
|
!TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever()));
|
||||||
|
}).exceptionally(e -> {
|
||||||
|
ctx.disconnect(Component.literal("Exception handling PacketBattleRequestInfo! " + e.getMessage()));
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
ctx.setPacketHandled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.neoforged.fml.loading.FMLEnvironment;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public record PacketClientGUI(int reserved) implements CustomPacketPayload {
|
||||||
|
public static final CustomPacketPayload.Type<PacketClientGUI> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetclientgui"));
|
||||||
|
|
||||||
|
public static final StreamCodec<ByteBuf, PacketClientGUI> STREAM_CODEC = StreamCodec.composite(
|
||||||
|
ByteBufCodecs.VAR_INT,
|
||||||
|
PacketClientGUI::reserved,
|
||||||
|
PacketClientGUI::new
|
||||||
|
);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type<? extends CustomPacketPayload> type() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class PayloadHandler implements IPayloadHandler<PacketClientGUI> {
|
||||||
|
@Override
|
||||||
|
public void handle(final @NotNull PacketClientGUI pkt, final IPayloadContext ctx) {
|
||||||
|
ctx.enqueueWork(() -> {
|
||||||
|
if (FMLEnvironment.dist.isClient()) {
|
||||||
|
TurnBasedMinecraftMod.proxy.showClientConfigGui();
|
||||||
|
}
|
||||||
|
}).exceptionally(e -> {
|
||||||
|
ctx.disconnect(Component.literal("Exception handling PacketClientGUI! " + e.getMessage()));
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,52 +0,0 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
|
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class PacketClientGui {
|
|
||||||
int reserved;
|
|
||||||
|
|
||||||
public PacketClientGui() {
|
|
||||||
reserved = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PacketClientGui(int reserved) {
|
|
||||||
this.reserved = reserved;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Encoder implements BiConsumer<PacketClientGui, RegistryFriendlyByteBuf> {
|
|
||||||
public Encoder() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(PacketClientGui pkt, RegistryFriendlyByteBuf buf) {
|
|
||||||
buf.writeInt(pkt.reserved);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Decoder implements Function<RegistryFriendlyByteBuf, PacketClientGui> {
|
|
||||||
public Decoder() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketClientGui apply(RegistryFriendlyByteBuf registryFriendlyByteBuf) {
|
|
||||||
return new PacketClientGui(registryFriendlyByteBuf.readInt());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Consumer implements BiConsumer<PacketClientGui, CustomPayloadEvent.Context> {
|
|
||||||
public Consumer() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(PacketClientGui pkt, CustomPayloadEvent.Context ctx) {
|
|
||||||
ctx.enqueueWork(() -> {
|
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> TurnBasedMinecraftMod.proxy.showClientConfigGui());
|
|
||||||
});
|
|
||||||
ctx.setPacketHandled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,18 +2,38 @@ package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.EntityInfo;
|
import com.burnedkirby.TurnBasedMinecraft.common.EntityInfo;
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.neoforged.fml.loading.FMLEnvironment;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class PacketEditingMessage
|
public class PacketEditingMessage implements CustomPacketPayload
|
||||||
{
|
{
|
||||||
|
public static final CustomPacketPayload.Type<PacketEditingMessage> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packeteditingmessage"));
|
||||||
|
|
||||||
|
public static final StreamCodec<ByteBuf, PacketEditingMessage> STREAM_CODEC = StreamCodec.composite(
|
||||||
|
ByteBufCodecs.INT.map(Type::valueOf, Type::getValue),
|
||||||
|
PacketEditingMessage::getType,
|
||||||
|
StreamCodec.ofMember(EntityInfo::encode, EntityInfo::new),
|
||||||
|
PacketEditingMessage::getEntityInfo,
|
||||||
|
PacketEditingMessage::new
|
||||||
|
);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomPacketPayload.Type<? extends CustomPacketPayload> type() {
|
||||||
|
return TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
public enum Type
|
public enum Type
|
||||||
{
|
{
|
||||||
ATTACK_ENTITY(0),
|
ATTACK_ENTITY(0),
|
||||||
|
@ -28,11 +48,14 @@ public class PacketEditingMessage
|
||||||
EDIT_DEFENSE_DAMAGE_PROBABILITY(9),
|
EDIT_DEFENSE_DAMAGE_PROBABILITY(9),
|
||||||
EDIT_EVASION(10),
|
EDIT_EVASION(10),
|
||||||
EDIT_SPEED(11),
|
EDIT_SPEED(11),
|
||||||
|
EDIT_HASTE_SPEED(18),
|
||||||
|
EDIT_SLOW_SPEED(19),
|
||||||
EDIT_CATEGORY(12),
|
EDIT_CATEGORY(12),
|
||||||
EDIT_DECISION_ATTACK(13),
|
EDIT_DECISION_ATTACK(13),
|
||||||
EDIT_DECISION_DEFEND(14),
|
EDIT_DECISION_DEFEND(14),
|
||||||
EDIT_DECISION_FLEE(15),
|
EDIT_DECISION_FLEE(15),
|
||||||
SERVER_EDIT(16);
|
SERVER_EDIT(16),
|
||||||
|
PICK_PLAYER(17);
|
||||||
|
|
||||||
Type(int value)
|
Type(int value)
|
||||||
{
|
{
|
||||||
|
@ -89,73 +112,40 @@ public class PacketEditingMessage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Encoder implements BiConsumer<PacketEditingMessage, RegistryFriendlyByteBuf> {
|
public PacketEditingMessage(final FriendlyByteBuf buf) {
|
||||||
public Encoder() {}
|
this.type = Type.valueOf(buf.readInt());
|
||||||
|
this.entityInfo = new EntityInfo();
|
||||||
@Override
|
try {
|
||||||
public void accept(PacketEditingMessage pkt, RegistryFriendlyByteBuf buf) {
|
this.entityInfo.classType = this.entityInfo.getClass().getClassLoader().loadClass(buf.readUtf());
|
||||||
buf.writeInt(pkt.type.getValue());
|
} catch (ClassNotFoundException e) { /* ignored */ }
|
||||||
if(pkt.entityInfo.classType != null) {
|
this.entityInfo.ignoreBattle = buf.readBoolean();
|
||||||
buf.writeUtf(pkt.entityInfo.classType.getName());
|
this.entityInfo.attackPower = buf.readInt();
|
||||||
} else {
|
this.entityInfo.attackProbability = buf.readInt();
|
||||||
buf.writeUtf("unknown");
|
this.entityInfo.attackVariance = buf.readInt();
|
||||||
}
|
this.entityInfo.attackEffect = EntityInfo.Effect.fromString(buf.readUtf());
|
||||||
buf.writeBoolean(pkt.entityInfo.ignoreBattle);
|
this.entityInfo.attackEffectProbability = buf.readInt();
|
||||||
buf.writeInt(pkt.entityInfo.attackPower);
|
this.entityInfo.defenseDamage = buf.readInt();
|
||||||
buf.writeInt(pkt.entityInfo.attackProbability);
|
this.entityInfo.defenseDamageProbability = buf.readInt();
|
||||||
buf.writeInt(pkt.entityInfo.attackVariance);
|
this.entityInfo.evasion = buf.readInt();
|
||||||
buf.writeUtf(pkt.entityInfo.attackEffect.toString());
|
this.entityInfo.speed = buf.readInt();
|
||||||
buf.writeInt(pkt.entityInfo.attackEffectProbability);
|
this.entityInfo.category = buf.readUtf();
|
||||||
buf.writeInt(pkt.entityInfo.defenseDamage);
|
this.entityInfo.decisionAttack = buf.readInt();
|
||||||
buf.writeInt(pkt.entityInfo.defenseDamageProbability);
|
this.entityInfo.decisionDefend = buf.readInt();
|
||||||
buf.writeInt(pkt.entityInfo.evasion);
|
this.entityInfo.decisionFlee = buf.readInt();
|
||||||
buf.writeInt(pkt.entityInfo.speed);
|
this.entityInfo.customName = buf.readUtf();
|
||||||
buf.writeUtf(pkt.entityInfo.category);
|
|
||||||
buf.writeInt(pkt.entityInfo.decisionAttack);
|
|
||||||
buf.writeInt(pkt.entityInfo.decisionDefend);
|
|
||||||
buf.writeInt(pkt.entityInfo.decisionFlee);
|
|
||||||
buf.writeUtf(pkt.entityInfo.customName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Decoder implements Function<RegistryFriendlyByteBuf, PacketEditingMessage> {
|
public static class PayloadHandler implements IPayloadHandler<PacketEditingMessage> {
|
||||||
public Decoder() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PacketEditingMessage apply(RegistryFriendlyByteBuf buf) {
|
public void handle(final @NotNull PacketEditingMessage pkt, final IPayloadContext ctx) {
|
||||||
Type type = Type.valueOf(buf.readInt());
|
|
||||||
EntityInfo einfo = new EntityInfo();
|
|
||||||
try {
|
|
||||||
einfo.classType = einfo.getClass().getClassLoader().loadClass(buf.readUtf());
|
|
||||||
} catch (ClassNotFoundException e) { /* ignored */ }
|
|
||||||
einfo.ignoreBattle = buf.readBoolean();
|
|
||||||
einfo.attackPower = buf.readInt();
|
|
||||||
einfo.attackProbability = buf.readInt();
|
|
||||||
einfo.attackVariance = buf.readInt();
|
|
||||||
einfo.attackEffect = EntityInfo.Effect.fromString(buf.readUtf());
|
|
||||||
einfo.attackEffectProbability = buf.readInt();
|
|
||||||
einfo.defenseDamage = buf.readInt();
|
|
||||||
einfo.defenseDamageProbability = buf.readInt();
|
|
||||||
einfo.evasion = buf.readInt();
|
|
||||||
einfo.speed = buf.readInt();
|
|
||||||
einfo.category = buf.readUtf();
|
|
||||||
einfo.decisionAttack = buf.readInt();
|
|
||||||
einfo.decisionDefend = buf.readInt();
|
|
||||||
einfo.decisionFlee = buf.readInt();
|
|
||||||
einfo.customName = buf.readUtf();
|
|
||||||
return new PacketEditingMessage(type, einfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Consumer implements BiConsumer<PacketEditingMessage, CustomPayloadEvent.Context> {
|
|
||||||
public Consumer() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(PacketEditingMessage pkt, CustomPayloadEvent.Context ctx) {
|
|
||||||
ctx.enqueueWork(() -> {
|
ctx.enqueueWork(() -> {
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> TurnBasedMinecraftMod.proxy.handlePacket(pkt, ctx));
|
if (FMLEnvironment.dist.isClient()) {
|
||||||
|
TurnBasedMinecraftMod.proxy.handlePacket(pkt, ctx);
|
||||||
|
}
|
||||||
|
}).exceptionally(e -> {
|
||||||
|
ctx.disconnect(Component.literal("Exception handling PacketEditingMessage! " + e.getMessage()));
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
ctx.setPacketHandled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,59 +1,52 @@
|
||||||
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||||
|
|
||||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraftforge.event.network.CustomPayloadEvent;
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.neoforged.fml.loading.FMLEnvironment;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
|
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.function.BiConsumer;
|
public record PacketGeneralMessage(String message) implements CustomPacketPayload
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class PacketGeneralMessage
|
|
||||||
{
|
{
|
||||||
String message;
|
public static final CustomPacketPayload.Type<PacketGeneralMessage> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetgeneralmessage"));
|
||||||
|
|
||||||
|
public static final StreamCodec<ByteBuf, PacketGeneralMessage> STREAM_CODEC = StreamCodec.composite(
|
||||||
|
ByteBufCodecs.STRING_UTF8,
|
||||||
|
PacketGeneralMessage::message,
|
||||||
|
PacketGeneralMessage::new
|
||||||
|
);
|
||||||
|
|
||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketGeneralMessage()
|
|
||||||
{
|
|
||||||
message = new String();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PacketGeneralMessage(String message)
|
public PacketGeneralMessage(String message)
|
||||||
{
|
{
|
||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Encoder implements BiConsumer<PacketGeneralMessage, RegistryFriendlyByteBuf> {
|
@Override
|
||||||
public Encoder() {}
|
public Type<? extends CustomPacketPayload> type() {
|
||||||
|
return TYPE;
|
||||||
@Override
|
|
||||||
public void accept(PacketGeneralMessage pkt, RegistryFriendlyByteBuf buf) {
|
|
||||||
buf.writeUtf(pkt.message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Decoder implements Function<RegistryFriendlyByteBuf, PacketGeneralMessage> {
|
public static class PayloadHandler implements IPayloadHandler<PacketGeneralMessage> {
|
||||||
public Decoder() {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PacketGeneralMessage apply(RegistryFriendlyByteBuf buf) {
|
public void handle(final @NotNull PacketGeneralMessage pkt, final IPayloadContext ctx) {
|
||||||
return new PacketGeneralMessage(buf.readUtf());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Consumer implements BiConsumer<PacketGeneralMessage, CustomPayloadEvent.Context> {
|
|
||||||
public Consumer() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(PacketGeneralMessage pkt, CustomPayloadEvent.Context ctx) {
|
|
||||||
ctx.enqueueWork(() -> {
|
ctx.enqueueWork(() -> {
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> TurnBasedMinecraftMod.proxy.handlePacket(pkt, ctx));
|
if (FMLEnvironment.dist.isClient()) {
|
||||||
|
TurnBasedMinecraftMod.proxy.handlePacket(pkt, ctx);
|
||||||
|
}
|
||||||
|
}).exceptionally(e -> {
|
||||||
|
ctx.disconnect(Component.literal("Exception handling PacketGeneralMessage! " + e.getMessage()));
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
ctx.setPacketHandled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
# This is an example mods.toml file. It contains the data relating to the loading mods.
|
|
||||||
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
|
|
||||||
# The overall format is standard TOML format, v0.5.0.
|
|
||||||
# Note that there are a couple of TOML lists in this file.
|
|
||||||
# Find more information on toml format here: https://github.com/toml-lang/toml
|
|
||||||
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
|
|
||||||
modLoader="javafml" #mandatory
|
|
||||||
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
|
|
||||||
loaderVersion="${loader_version_range}" #mandatory (34 is current forge version)
|
|
||||||
# A URL to refer people to when problems occur with this mod
|
|
||||||
issueTrackerURL="https://github.com/Stephen-Seo/TurnBasedMinecraftMod/issues" #optional
|
|
||||||
license="MIT"
|
|
||||||
# A list of mods - how many allowed here is determined by the individual mod loader
|
|
||||||
[[mods]] #mandatory
|
|
||||||
# The modid of the mod
|
|
||||||
modId="${mod_id}" #mandatory
|
|
||||||
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
|
|
||||||
version="${mod_version}" #mandatory
|
|
||||||
# A display name for the mod
|
|
||||||
displayName="${mod_name}" #mandatory
|
|
||||||
# A URL to query for updates for this mod. See the JSON update specification <here>
|
|
||||||
#updateJSONURL="" #optional
|
|
||||||
updateJSONURL="https://github.com/Stephen-Seo/TurnBasedMinecraftMod/raw/refs/heads/forge/update.json"
|
|
||||||
# A URL for the "homepage" for this mod, displayed in the mod UI
|
|
||||||
displayURL="https://github.com/Stephen-Seo/TurnBasedMinecraftMod" #optional
|
|
||||||
# A file name (in the root of the mod JAR) containing a logo for display
|
|
||||||
#logoFile="" #optional
|
|
||||||
# A text field displayed in the mod UI
|
|
||||||
credits="Thanks for this mod goes to Java" #optional
|
|
||||||
# A text field displayed in the mod UI
|
|
||||||
authors="${mod_authors}" #optional
|
|
||||||
# The description text for the mod (multi line!) (#mandatory)
|
|
||||||
description='''
|
|
||||||
Implements turn-based-battle in Minecraft.
|
|
||||||
'''
|
|
||||||
|
|
||||||
logoFile="assets/com_burnedkirby_turnbasedminecraft/tbmm_icon.png"
|
|
||||||
|
|
||||||
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
|
|
||||||
[[dependencies.com_burnedkirby_turnbasedminecraft]] #optional
|
|
||||||
# the modid of the dependency
|
|
||||||
modId="forge" #mandatory
|
|
||||||
# Does this dependency have to exist - if not, ordering below must be specified
|
|
||||||
mandatory=true #mandatory
|
|
||||||
# The version range of the dependency
|
|
||||||
versionRange="${forge_version_range}" #mandatory
|
|
||||||
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
|
|
||||||
ordering="NONE"
|
|
||||||
# Side this dependency is applied on - BOTH, CLIENT or SERVER
|
|
||||||
side="BOTH"
|
|
||||||
# Here's another dependency
|
|
||||||
[[dependencies.com_burnedkirby_turnbasedminecraft]]
|
|
||||||
modId="minecraft"
|
|
||||||
mandatory=true
|
|
||||||
versionRange="${minecraft_version_range}"
|
|
||||||
ordering="NONE"
|
|
||||||
side="BOTH"
|
|
|
@ -125,6 +125,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 45
|
speed = 45
|
||||||
|
haste_speed = 65
|
||||||
|
slow_speed = 25
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -141,6 +143,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 20
|
speed = 20
|
||||||
|
haste_speed = 40
|
||||||
|
slow_speed = 5
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -156,6 +160,8 @@ defense_damage = 0
|
||||||
evasion = 45
|
evasion = 45
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 45
|
speed = 45
|
||||||
|
haste_speed = 80
|
||||||
|
slow_speed = 25
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -172,6 +178,8 @@ defense_damage = 0
|
||||||
evasion = 35
|
evasion = 35
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 75
|
speed = 75
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 55
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -188,6 +196,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 25
|
speed = 25
|
||||||
|
haste_speed = 45
|
||||||
|
slow_speed = 5
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -202,6 +212,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 25
|
speed = 25
|
||||||
|
haste_speed = 35
|
||||||
|
slow_speed = 5
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -218,6 +230,8 @@ defense_damage_probability = 35
|
||||||
evasion = 25
|
evasion = 25
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 45
|
speed = 45
|
||||||
|
haste_speed = 65
|
||||||
|
slow_speed = 25
|
||||||
decision_attack_probability = 80
|
decision_attack_probability = 80
|
||||||
decision_defend_probability = 20
|
decision_defend_probability = 20
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -233,6 +247,8 @@ defense_damage = 0
|
||||||
evasion = 40
|
evasion = 40
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 70
|
speed = 70
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 50
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -248,6 +264,8 @@ defense_damage = 0
|
||||||
evasion = 40
|
evasion = 40
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 15
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -263,6 +281,8 @@ defense_damage = 0
|
||||||
evasion = 35
|
evasion = 35
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 15
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -279,6 +299,8 @@ defense_damage = 0
|
||||||
evasion = 35
|
evasion = 35
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 60
|
speed = 60
|
||||||
|
haste_speed = 80
|
||||||
|
slow_speed = 40
|
||||||
decision_attack_probability = 75
|
decision_attack_probability = 75
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 25
|
decision_flee_probability = 25
|
||||||
|
@ -293,6 +315,8 @@ defense_damage = 0
|
||||||
evasion = 2
|
evasion = 2
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 45
|
speed = 45
|
||||||
|
haste_speed = 65
|
||||||
|
slow_speed = 25
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -309,6 +333,8 @@ defense_damage_probability = 30
|
||||||
evasion = 25
|
evasion = 25
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 50
|
speed = 50
|
||||||
|
haste_speed = 70
|
||||||
|
slow_speed = 30
|
||||||
decision_attack_probability = 80
|
decision_attack_probability = 80
|
||||||
decision_defend_probability = 20
|
decision_defend_probability = 20
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -324,6 +350,8 @@ defense_damage = 0
|
||||||
evasion = 20
|
evasion = 20
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 40
|
speed = 40
|
||||||
|
haste_speed = 60
|
||||||
|
slow_speed = 20
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -340,6 +368,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 25
|
speed = 25
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 5
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -355,6 +385,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 15
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -370,6 +402,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 45
|
speed = 45
|
||||||
|
haste_speed = 65
|
||||||
|
slow_speed = 25
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -385,6 +419,8 @@ defense_damage = 0
|
||||||
evasion = 12
|
evasion = 12
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 15
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -400,6 +436,8 @@ defense_damage = 0
|
||||||
evasion = 20
|
evasion = 20
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 25
|
speed = 25
|
||||||
|
haste_speed = 45
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -415,6 +453,8 @@ defense_damage = 0
|
||||||
evasion = 20
|
evasion = 20
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 28
|
speed = 28
|
||||||
|
haste_speed = 48
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -430,6 +470,8 @@ defense_damage = 0
|
||||||
evasion = 35
|
evasion = 35
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 65
|
speed = 65
|
||||||
|
haste_speed = 85
|
||||||
|
slow_speed = 45
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -445,6 +487,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 30
|
speed = 30
|
||||||
|
haste_speed = 50
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -460,6 +504,8 @@ defense_damage = 0
|
||||||
evasion = 4
|
evasion = 4
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 15
|
||||||
decision_attack_probability = 90
|
decision_attack_probability = 90
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -475,6 +521,8 @@ defense_damage = 0
|
||||||
evasion = 15
|
evasion = 15
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 10
|
speed = 10
|
||||||
|
haste_speed = 30
|
||||||
|
slow_speed = 5
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -490,6 +538,8 @@ defense_damage = 0
|
||||||
evasion = 37
|
evasion = 37
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 15
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -505,6 +555,8 @@ defense_damage = 0
|
||||||
evasion = 13
|
evasion = 13
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 30
|
speed = 30
|
||||||
|
haste_speed = 50
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -520,6 +572,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 30
|
speed = 30
|
||||||
|
haste_speed = 50
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -535,6 +589,8 @@ defense_damage = 0
|
||||||
evasion = 25
|
evasion = 25
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 70
|
speed = 70
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 50
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -551,6 +607,8 @@ defense_damage = 0
|
||||||
evasion = 13
|
evasion = 13
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 30
|
speed = 30
|
||||||
|
haste_speed = 50
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -566,6 +624,8 @@ defense_damage = 0
|
||||||
evasion = 30
|
evasion = 30
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 80
|
speed = 80
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 50
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -581,6 +641,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 15
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -596,6 +658,8 @@ defense_damage = 0
|
||||||
evasion = 7
|
evasion = 7
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 50
|
speed = 50
|
||||||
|
haste_speed = 70
|
||||||
|
slow_speed = 20
|
||||||
decision_attack_probability = 95
|
decision_attack_probability = 95
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -611,6 +675,8 @@ defense_damage = 0
|
||||||
evasion = 8
|
evasion = 8
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 15
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -627,6 +693,8 @@ defense_damage = 0
|
||||||
evasion = 7
|
evasion = 7
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 65
|
speed = 65
|
||||||
|
haste_speed = 85
|
||||||
|
slow_speed = 40
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -642,6 +710,8 @@ defense_damage = 0
|
||||||
evasion = 20
|
evasion = 20
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 40
|
speed = 40
|
||||||
|
haste_speed = 60
|
||||||
|
slow_speed = 20
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -657,6 +727,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 25
|
speed = 25
|
||||||
|
haste_speed = 45
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -672,6 +744,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 50
|
speed = 50
|
||||||
|
haste_speed = 65
|
||||||
|
slow_speed = 20
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -687,6 +761,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "monster"
|
category = "monster"
|
||||||
speed = 25
|
speed = 25
|
||||||
|
haste_speed = 45
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -702,6 +778,8 @@ defense_damage = 0
|
||||||
evasion = 40
|
evasion = 40
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 50
|
speed = 50
|
||||||
|
haste_speed = 80
|
||||||
|
slow_speed = 30
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 100
|
decision_flee_probability = 100
|
||||||
|
@ -717,6 +795,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 20
|
speed = 20
|
||||||
|
haste_speed = 40
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 50
|
decision_defend_probability = 50
|
||||||
decision_flee_probability = 50
|
decision_flee_probability = 50
|
||||||
|
@ -732,6 +812,8 @@ defense_damage = 0
|
||||||
evasion = 25
|
evasion = 25
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 65
|
speed = 65
|
||||||
|
haste_speed = 85
|
||||||
|
slow_speed = 45
|
||||||
decision_attack_probability = 70
|
decision_attack_probability = 70
|
||||||
decision_defend_probability = 20
|
decision_defend_probability = 20
|
||||||
decision_flee_probability = 10
|
decision_flee_probability = 10
|
||||||
|
@ -747,6 +829,8 @@ defense_damage = 0
|
||||||
evasion = 35
|
evasion = 35
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 75
|
speed = 75
|
||||||
|
haste_speed = 95
|
||||||
|
slow_speed = 50
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -761,6 +845,8 @@ defense_damage = 0
|
||||||
evasion = 30
|
evasion = 30
|
||||||
category = "animal"
|
category = "animal"
|
||||||
speed = 20
|
speed = 20
|
||||||
|
haste_speed = 50
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 90
|
decision_attack_probability = 90
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -778,6 +864,8 @@ defense_damage = 0
|
||||||
evasion = 30
|
evasion = 30
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 75
|
speed = 75
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 30
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -793,6 +881,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 45
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -808,6 +898,8 @@ defense_damage = 0
|
||||||
evasion = 1
|
evasion = 1
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 20
|
speed = 20
|
||||||
|
haste_speed = 40
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 10
|
decision_defend_probability = 10
|
||||||
decision_flee_probability = 80
|
decision_flee_probability = 80
|
||||||
|
@ -823,6 +915,8 @@ defense_damage = 0
|
||||||
evasion = 45
|
evasion = 45
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 75
|
speed = 75
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 55
|
||||||
decision_attack_probability = 70
|
decision_attack_probability = 70
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 30
|
decision_flee_probability = 30
|
||||||
|
@ -838,6 +932,8 @@ defense_damage = 0
|
||||||
evasion = 65
|
evasion = 65
|
||||||
category = "animal"
|
category = "animal"
|
||||||
speed = 65
|
speed = 65
|
||||||
|
haste_speed = 85
|
||||||
|
slow_speed = 30
|
||||||
decision_attack_probability = 70
|
decision_attack_probability = 70
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 25
|
decision_flee_probability = 25
|
||||||
|
@ -853,6 +949,8 @@ defense_damage = 0
|
||||||
evasion = 60
|
evasion = 60
|
||||||
category = "animal"
|
category = "animal"
|
||||||
speed = 70
|
speed = 70
|
||||||
|
haste_speed = 80
|
||||||
|
slow_speed = 20
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 100
|
decision_flee_probability = 100
|
||||||
|
@ -868,6 +966,8 @@ defense_damage = 0
|
||||||
evasion = 45
|
evasion = 45
|
||||||
category = "animal"
|
category = "animal"
|
||||||
speed = 50
|
speed = 50
|
||||||
|
haste_speed = 60
|
||||||
|
slow_speed = 15
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 100
|
decision_flee_probability = 100
|
||||||
|
@ -883,6 +983,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 65
|
speed = 65
|
||||||
|
haste_speed = 80
|
||||||
|
slow_speed = 20
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -898,6 +1000,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 65
|
speed = 65
|
||||||
|
haste_speed = 85
|
||||||
|
slow_speed = 45
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -913,6 +1017,8 @@ defense_damage = 0
|
||||||
evasion = 30
|
evasion = 30
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 60
|
speed = 60
|
||||||
|
haste_speed = 80
|
||||||
|
slow_speed = 40
|
||||||
decision_attack_probability = 75
|
decision_attack_probability = 75
|
||||||
decision_defend_probability = 20
|
decision_defend_probability = 20
|
||||||
decision_flee_probability = 5
|
decision_flee_probability = 5
|
||||||
|
@ -928,6 +1034,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 50
|
speed = 50
|
||||||
|
haste_speed = 70
|
||||||
|
slow_speed = 30
|
||||||
decision_attack_probability = 65
|
decision_attack_probability = 65
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 25
|
decision_flee_probability = 25
|
||||||
|
@ -943,6 +1051,8 @@ defense_damage = 0
|
||||||
evasion = 1
|
evasion = 1
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 20
|
speed = 20
|
||||||
|
haste_speed = 40
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 10
|
decision_defend_probability = 10
|
||||||
decision_flee_probability = 80
|
decision_flee_probability = 80
|
||||||
|
@ -958,6 +1068,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 50
|
speed = 50
|
||||||
|
haste_speed = 70
|
||||||
|
slow_speed = 30
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -973,6 +1085,8 @@ defense_damage = 0
|
||||||
evasion = 30
|
evasion = 30
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 75
|
speed = 75
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 55
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -988,6 +1102,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 30
|
speed = 30
|
||||||
|
haste_speed = 50
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 45
|
decision_attack_probability = 45
|
||||||
decision_defend_probability = 25
|
decision_defend_probability = 25
|
||||||
decision_flee_probability = 30
|
decision_flee_probability = 30
|
||||||
|
@ -1003,6 +1119,8 @@ defense_damage = 0
|
||||||
evasion = 35
|
evasion = 35
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 70
|
speed = 70
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 40
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -1018,6 +1136,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 30
|
speed = 30
|
||||||
|
haste_speed = 50
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 5
|
decision_defend_probability = 5
|
||||||
decision_flee_probability = 85
|
decision_flee_probability = 85
|
||||||
|
@ -1033,6 +1153,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "animal"
|
category = "animal"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 70
|
||||||
|
slow_speed = 20
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -1048,6 +1170,8 @@ defense_damage = 0
|
||||||
evasion = 40
|
evasion = 40
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 75
|
speed = 75
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 35
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 100
|
decision_flee_probability = 100
|
||||||
|
@ -1063,6 +1187,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 30
|
speed = 30
|
||||||
|
haste_speed = 40
|
||||||
|
slow_speed = 20
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -1078,6 +1204,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 65
|
speed = 65
|
||||||
|
haste_speed = 85
|
||||||
|
slow_speed = 35
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -1093,6 +1221,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 60
|
speed = 60
|
||||||
|
haste_speed = 70
|
||||||
|
slow_speed = 45
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -1108,6 +1238,8 @@ defense_damage = 0
|
||||||
evasion = 15
|
evasion = 15
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 40
|
speed = 40
|
||||||
|
haste_speed = 70
|
||||||
|
slow_speed = 25
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -1123,6 +1255,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 50
|
speed = 50
|
||||||
|
haste_speed = 70
|
||||||
|
slow_speed = 35
|
||||||
decision_attack_probability = 65
|
decision_attack_probability = 65
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 25
|
decision_flee_probability = 25
|
||||||
|
@ -1138,6 +1272,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 50
|
||||||
|
slow_speed = 20
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 10
|
decision_defend_probability = 10
|
||||||
decision_flee_probability = 80
|
decision_flee_probability = 80
|
||||||
|
@ -1153,6 +1289,8 @@ defense_damage = 0
|
||||||
evasion = 20
|
evasion = 20
|
||||||
category = "animal"
|
category = "animal"
|
||||||
speed = 70
|
speed = 70
|
||||||
|
haste_speed = 85
|
||||||
|
slow_speed = 45
|
||||||
decision_attack_probability = 80
|
decision_attack_probability = 80
|
||||||
decision_defend_probability = 15
|
decision_defend_probability = 15
|
||||||
decision_flee_probability = 5
|
decision_flee_probability = 5
|
||||||
|
@ -1168,6 +1306,8 @@ defense_damage = 0
|
||||||
evasion = 8
|
evasion = 8
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 65
|
speed = 65
|
||||||
|
haste_speed = 80
|
||||||
|
slow_speed = 35
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -1183,6 +1323,8 @@ defense_damage = 0
|
||||||
evasion = 50
|
evasion = 50
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 75
|
speed = 75
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 40
|
||||||
decision_attack_probability = 25
|
decision_attack_probability = 25
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 75
|
decision_flee_probability = 75
|
||||||
|
@ -1199,6 +1341,8 @@ defense_damage_probability = 75
|
||||||
evasion = 25
|
evasion = 25
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 45
|
speed = 45
|
||||||
|
haste_speed = 55
|
||||||
|
slow_speed = 25
|
||||||
decision_attack_probability = 35
|
decision_attack_probability = 35
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 65
|
decision_flee_probability = 65
|
||||||
|
@ -1214,6 +1358,8 @@ defense_damage = 0
|
||||||
evasion = 50
|
evasion = 50
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 75
|
speed = 75
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 40
|
||||||
decision_attack_probability = 25
|
decision_attack_probability = 25
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 75
|
decision_flee_probability = 75
|
||||||
|
@ -1229,6 +1375,8 @@ defense_damage = 0
|
||||||
evasion = 35
|
evasion = 35
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 45
|
speed = 45
|
||||||
|
haste_speed = 65
|
||||||
|
slow_speed = 25
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 10
|
decision_defend_probability = 10
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -1244,6 +1392,8 @@ defense_damage = 0
|
||||||
evasion = 50
|
evasion = 50
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 75
|
speed = 75
|
||||||
|
haste_speed = 90
|
||||||
|
slow_speed = 40
|
||||||
decision_attack_probability = 25
|
decision_attack_probability = 25
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 75
|
decision_flee_probability = 75
|
||||||
|
@ -1259,6 +1409,8 @@ defense_damage = 0
|
||||||
evasion = 35
|
evasion = 35
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 50
|
speed = 50
|
||||||
|
haste_speed = 60
|
||||||
|
slow_speed = 30
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 40
|
decision_defend_probability = 40
|
||||||
decision_flee_probability = 60
|
decision_flee_probability = 60
|
||||||
|
@ -1274,6 +1426,8 @@ defense_damage = 0
|
||||||
evasion = 5
|
evasion = 5
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 35
|
speed = 35
|
||||||
|
haste_speed = 50
|
||||||
|
slow_speed = 25
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 10
|
decision_defend_probability = 10
|
||||||
decision_flee_probability = 80
|
decision_flee_probability = 80
|
||||||
|
@ -1289,6 +1443,8 @@ defense_damage = 0
|
||||||
evasion = 27
|
evasion = 27
|
||||||
category = "boss"
|
category = "boss"
|
||||||
speed = 63
|
speed = 63
|
||||||
|
haste_speed = 85
|
||||||
|
slow_speed = 53
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -1305,6 +1461,8 @@ defense_damage = 0
|
||||||
evasion = 20
|
evasion = 20
|
||||||
category = "boss"
|
category = "boss"
|
||||||
speed = 68
|
speed = 68
|
||||||
|
haste_speed = 88
|
||||||
|
slow_speed = 48
|
||||||
decision_attack_probability = 100
|
decision_attack_probability = 100
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 0
|
decision_flee_probability = 0
|
||||||
|
@ -1320,6 +1478,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 55
|
speed = 55
|
||||||
|
haste_speed = 75
|
||||||
|
slow_speed = 35
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
@ -1335,6 +1495,8 @@ defense_damage = 0
|
||||||
evasion = 10
|
evasion = 10
|
||||||
category = "passive"
|
category = "passive"
|
||||||
speed = 15
|
speed = 15
|
||||||
|
haste_speed = 20
|
||||||
|
slow_speed = 10
|
||||||
decision_attack_probability = 0
|
decision_attack_probability = 0
|
||||||
decision_defend_probability = 0
|
decision_defend_probability = 0
|
||||||
decision_flee_probability = 90
|
decision_flee_probability = 90
|
||||||
|
|
94
src/main/templates/META-INF/neoforge.mods.toml
Normal file
94
src/main/templates/META-INF/neoforge.mods.toml
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
# This is an example neoforge.mods.toml file. It contains the data relating to the loading mods.
|
||||||
|
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
|
||||||
|
# The overall format is standard TOML format, v0.5.0.
|
||||||
|
# Note that there are a couple of TOML lists in this file.
|
||||||
|
# Find more information on toml format here: https://github.com/toml-lang/toml
|
||||||
|
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
|
||||||
|
modLoader="javafml" #mandatory
|
||||||
|
|
||||||
|
# A version range to match for said mod loader - for regular FML @Mod it will be the FML version. This is currently 2.
|
||||||
|
loaderVersion="${loader_version_range}" #mandatory
|
||||||
|
|
||||||
|
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
|
||||||
|
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
|
||||||
|
license="${mod_license}"
|
||||||
|
|
||||||
|
# A URL to refer people to when problems occur with this mod
|
||||||
|
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
|
||||||
|
|
||||||
|
# A list of mods - how many allowed here is determined by the individual mod loader
|
||||||
|
[[mods]] #mandatory
|
||||||
|
|
||||||
|
# The modid of the mod
|
||||||
|
modId="${mod_id}" #mandatory
|
||||||
|
|
||||||
|
# The version number of the mod
|
||||||
|
version="${mod_version}" #mandatory
|
||||||
|
|
||||||
|
# A display name for the mod
|
||||||
|
displayName="${mod_name}" #mandatory
|
||||||
|
|
||||||
|
# A URL to query for updates for this mod. See the JSON update specification https://docs.neoforged.net/docs/misc/updatechecker/
|
||||||
|
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional
|
||||||
|
updateJSONURL="https://github.com/Stephen-Seo/TurnBasedMinecraftMod/raw/refs/heads/neoforge/update.json"
|
||||||
|
|
||||||
|
# A URL for the "homepage" for this mod, displayed in the mod UI
|
||||||
|
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional
|
||||||
|
|
||||||
|
# A file name (in the root of the mod JAR) containing a logo for display
|
||||||
|
#logoFile="examplemod.png" #optional
|
||||||
|
logoFile="assets/com_burnedkirby_turnbasedminecraft/tbmm_icon.png"
|
||||||
|
|
||||||
|
# A text field displayed in the mod UI
|
||||||
|
#credits="" #optional
|
||||||
|
|
||||||
|
# A text field displayed in the mod UI
|
||||||
|
authors="${mod_authors}" #optional
|
||||||
|
|
||||||
|
# The description text for the mod (multi line!) (#mandatory)
|
||||||
|
description='''${mod_description}'''
|
||||||
|
|
||||||
|
# The [[mixins]] block allows you to declare your mixin config to FML so that it gets loaded.
|
||||||
|
#[[mixins]]
|
||||||
|
#config="${mod_id}.mixins.json"
|
||||||
|
|
||||||
|
# The [[accessTransformers]] block allows you to declare where your AT file is.
|
||||||
|
# If this block is omitted, a fallback attempt will be made to load an AT from META-INF/accesstransformer.cfg
|
||||||
|
#[[accessTransformers]]
|
||||||
|
#file="META-INF/accesstransformer.cfg"
|
||||||
|
|
||||||
|
# The coremods config file path is not configurable and is always loaded from META-INF/coremods.json
|
||||||
|
|
||||||
|
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
|
||||||
|
[[dependencies.${mod_id}]] #optional
|
||||||
|
# the modid of the dependency
|
||||||
|
modId="neoforge" #mandatory
|
||||||
|
# The type of the dependency. Can be one of "required", "optional", "incompatible" or "discouraged" (case insensitive).
|
||||||
|
# 'required' requires the mod to exist, 'optional' does not
|
||||||
|
# 'incompatible' will prevent the game from loading when the mod exists, and 'discouraged' will show a warning
|
||||||
|
type="required" #mandatory
|
||||||
|
# Optional field describing why the dependency is required or why it is incompatible
|
||||||
|
# reason="..."
|
||||||
|
# The version range of the dependency
|
||||||
|
versionRange="${neo_version_range}" #mandatory
|
||||||
|
# An ordering relationship for the dependency.
|
||||||
|
# BEFORE - This mod is loaded BEFORE the dependency
|
||||||
|
# AFTER - This mod is loaded AFTER the dependency
|
||||||
|
ordering="NONE"
|
||||||
|
# Side this dependency is applied on - BOTH, CLIENT, or SERVER
|
||||||
|
side="BOTH"
|
||||||
|
|
||||||
|
# Here's another dependency
|
||||||
|
[[dependencies.${mod_id}]]
|
||||||
|
modId="minecraft"
|
||||||
|
type="required"
|
||||||
|
# This version range declares a minimum of the current minecraft version up to but not including the next major version
|
||||||
|
versionRange="${minecraft_version_range}"
|
||||||
|
ordering="NONE"
|
||||||
|
side="BOTH"
|
||||||
|
|
||||||
|
# Features are specific properties of the game environment, that you may want to declare you require. This example declares
|
||||||
|
# that your mod requires GL version 3.2 or higher. Other features will be added. They are side aware so declaring this won't
|
||||||
|
# stop your mod loading on the server for example.
|
||||||
|
#[features.${mod_id}]
|
||||||
|
#openGLVersion="[3.2,)"
|
19
update.json
19
update.json
|
@ -1,11 +1,22 @@
|
||||||
{
|
{
|
||||||
"homepage": "https://github.com/Stephen-Seo/TurnBasedMinecraftMod",
|
"homepage": "https://github.com/Stephen-Seo/TurnBasedMinecraftMod",
|
||||||
|
"1.21.3": {
|
||||||
|
"1.26.5": "Config improvements, NeoForge 21.3.11-beta.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
|
||||||
|
"1.26.4": "Add player-specific config, NeoForge 21.3.6-beta.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
|
||||||
|
"1.26.3": "Ported to NeoForge 21.3.2-beta (MC 1.21.3), minor tweak to packet.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md"
|
||||||
|
},
|
||||||
"1.21.1": {
|
"1.21.1": {
|
||||||
"1.26.1": "Ported to Forge 52.0.22, leave BattleGUI with Escape Key, MC music paused in battle properly.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/forge/Changelog.md",
|
"1.26.5-MC-1.21.1": "Config improvements, NeoForge 21.1.74.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
|
||||||
"1.26.0": "Ported to Forge 52.0.21, client config.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/forge/Changelog.md"
|
"1.26.4-MC-1.21.1": "Add player-specific config, NeoForge 21.1.73.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
|
||||||
|
"1.26.3-MC-1.21.1": "Minor tweak to packet.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
|
||||||
|
"1.26.2": "Display Entities on attack menu in BattleGUI.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
|
||||||
|
"1.26.1": "Ported to NeoForge 21.1.72, leave BattleGUI with Escape key, MC music paused in battle properly.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md",
|
||||||
|
"1.26.0": "Ported to NeoForge 21.1.69, client config.\n https://github.com/Stephen-Seo/TurnBasedMinecraftMod/blob/neoforge/Changelog.md"
|
||||||
},
|
},
|
||||||
"promos": {
|
"promos": {
|
||||||
"1.21.1-latest": "1.26.1",
|
"1.21.3-latest": "1.26.5",
|
||||||
"1.21.1-recommended": "1.26.1"
|
"1.21.3-recommended": "1.26.5",
|
||||||
|
"1.21.1-latest": "1.26.5-MC-1.21.1",
|
||||||
|
"1.21.1-recommended": "1.26.5-MC-1.21.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue