Neoforge 21.1.69
TODO: Fix client-config not persisting/saving. Add new mobs to the list in the server-side config.
This commit is contained in:
parent
ecebdc91fa
commit
ddcfa9190f
35 changed files with 1175 additions and 994 deletions
|
@ -1,5 +1,9 @@
|
|||
# Upcoming changes
|
||||
|
||||
Make it possible to open the client-config from the Mod-list GUI.
|
||||
|
||||
Port to NeoForge 21.1.69 (Minecraft 1.21.1).
|
||||
|
||||
Fix volume handling of battle/silly music. (Previous implementation did not
|
||||
properly reduce volume based on Minecraft's "music volume" setting.)
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ configured for them.)
|
|||
|
||||
Simply invoke `./gradlew build` in the mod directory and after some time the
|
||||
finished jar will be saved at
|
||||
`build/libs/TurnBasedMinecraft-NeoForge-1.26.0-all.jar`
|
||||
`build/libs/TurnBasedMinecraft-NeoForge-1.27.0-all.jar`
|
||||
|
||||
# Reproducibility
|
||||
|
||||
|
|
232
build.gradle
232
build.gradle
|
@ -1,119 +1,197 @@
|
|||
plugins {
|
||||
id 'eclipse'
|
||||
id 'idea'
|
||||
id 'java-library'
|
||||
id 'maven-publish'
|
||||
id 'net.neoforged.gradle.userdev' version '7.0.80'
|
||||
id 'net.neoforged.moddev' version '1.0.20'
|
||||
}
|
||||
|
||||
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
|
||||
group = mod_group_id
|
||||
archivesBaseName = "TurnBasedMinecraft-NeoForge"
|
||||
|
||||
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
|
||||
repositories {
|
||||
mavenLocal()
|
||||
|
||||
flatDir {
|
||||
dir 'libs'
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
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
|
||||
|
||||
// Default run configurations.
|
||||
// These can be tweaked, removed, or duplicated as needed.
|
||||
runs {
|
||||
// applies to all the run configs below
|
||||
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
|
||||
systemProperty 'forge.logging.console.level', 'debug'
|
||||
|
||||
modSource project.sourceSets.main
|
||||
parchment {
|
||||
mappingsVersion = project.parchment_mappings_version
|
||||
minecraftVersion = project.parchment_minecraft_version
|
||||
}
|
||||
|
||||
client {
|
||||
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
|
||||
systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
|
||||
// This line is optional. Access Transformers are automatically detected
|
||||
// accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg')
|
||||
|
||||
// Default run configurations.
|
||||
// These can be tweaked, removed, or duplicated as needed.
|
||||
runs {
|
||||
client {
|
||||
client()
|
||||
|
||||
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
|
||||
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
|
||||
}
|
||||
|
||||
server {
|
||||
server()
|
||||
programArgument '--nogui'
|
||||
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
|
||||
}
|
||||
|
||||
// This run config launches GameTestServer and runs all registered gametests, then exits.
|
||||
// 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.
|
||||
gameTestServer {
|
||||
type = "gameTestServer"
|
||||
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
|
||||
}
|
||||
|
||||
data {
|
||||
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.
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
|
||||
programArgument '--nogui'
|
||||
}
|
||||
|
||||
// This run config launches GameTestServer and runs all registered gametests, then exits.
|
||||
// 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.
|
||||
gameTestServer {
|
||||
systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
|
||||
}
|
||||
|
||||
data {
|
||||
// example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it
|
||||
// workingDirectory project.file('run-data')
|
||||
|
||||
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
|
||||
programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Include resources generated by data generators.
|
||||
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
||||
|
||||
repositories {
|
||||
flatDir {
|
||||
dir 'libs'
|
||||
}
|
||||
// Sets up a dependency configuration called 'localRuntime'.
|
||||
// This configuration should be used instead of 'runtimeOnly' to declare
|
||||
// a dependency that will be present for runtime testing but that is
|
||||
// "optional", meaning it will not be pulled by dependents of this mod.
|
||||
configurations {
|
||||
runtimeClasspath.extendsFrom localRuntime
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// Specify the version of Minecraft to use.
|
||||
// Depending on the plugin applied there are several options. We will assume you applied the userdev plugin as shown above.
|
||||
// The group for userdev is net.neoforged, the module name is neoforge, and the version is the same as the neoforge version.
|
||||
// You can however also use the vanilla plugin (net.neoforged.gradle.vanilla) to use a version of Minecraft without the neoforge loader.
|
||||
// And its provides the option to then use net.minecraft as the group, and one of; client, server or joined as the module name, plus the game version as version.
|
||||
// For all intends and purposes: You can treat this dependency as if it is a normal library you would use.
|
||||
implementation "net.neoforged:neoforge:${neo_version}"
|
||||
// Example optional mod dependency with JEI
|
||||
// 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}-neoforge-api:${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
|
||||
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
|
||||
// The group id is ignored when searching -- in this case, it is "blank"
|
||||
// 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:
|
||||
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
|
||||
// http://www.gradle.org/docs/current/userguide/dependency_management.html
|
||||
|
||||
|
||||
// implementation "net.neoforged:neoforge:${neo_version}"
|
||||
|
||||
// implementation files('libs/javamp3-1.0.3.jar')
|
||||
implementation 'fr.delthas:javamp3:1.0.3'
|
||||
|
||||
implementation 'com.github.stephengold:j-ogg-vorbis:1.0.4'
|
||||
|
||||
jarJar(group: 'fr.delthas', name: 'javamp3', version: '[1.0.0,2.0.0)') {
|
||||
jarJar.pin(it, '1.0.3')
|
||||
jarJar(implementation("fr.delthas:javamp3")) {
|
||||
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.pin(it, '1.0.4')
|
||||
jarJar(implementation("com.github.stephengold:j-ogg-vorbis")) {
|
||||
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.
|
||||
// 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.
|
||||
// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html
|
||||
tasks.withType(ProcessResources).configureEach {
|
||||
var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {
|
||||
var replaceProperties = [
|
||||
minecraft_version : minecraft_version, minecraft_version_range: minecraft_version_range,
|
||||
neo_version : neo_version, neo_version_range: neo_version_range,
|
||||
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,
|
||||
minecraft_version : minecraft_version,
|
||||
minecraft_version_range: minecraft_version_range,
|
||||
neo_version : neo_version,
|
||||
neo_version_range : neo_version_range,
|
||||
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
|
||||
|
||||
filesMatching(['META-INF/mods.toml']) {
|
||||
expand replaceProperties + [project: project]
|
||||
}
|
||||
expand replaceProperties
|
||||
from "src/main/templates"
|
||||
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 by the runtime..
|
||||
jar {
|
||||
archiveClassifier = 'slim'
|
||||
archiveClassifier = 'all'
|
||||
manifest {
|
||||
attributes([
|
||||
"Specification-Title": "TurnBasedMinecraftMod",
|
||||
|
@ -137,3 +215,11 @@ tasks.withType(AbstractArchiveTask).configureEach {
|
|||
tasks.withType(JavaCompile).configureEach {
|
||||
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
|
||||
}
|
||||
|
||||
// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior.
|
||||
idea {
|
||||
module {
|
||||
downloadSources = true
|
||||
downloadJavadoc = true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,25 +1,31 @@
|
|||
org.gradle.jvmargs=-Xmx4096m
|
||||
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
|
||||
org.gradle.jvmargs=-Xmx1G
|
||||
org.gradle.daemon=false
|
||||
org.gradle.debug=false
|
||||
org.gradle.parallel=true
|
||||
org.gradle.caching=true
|
||||
org.gradle.configuration-cache=true
|
||||
|
||||
#read more on this at https://github.com/neoforged/NeoGradle/blob/NG_7.0/README.md#apply-parchment-mappings
|
||||
#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
|
||||
neogradle.subsystems.parchment.minecraftVersion=1.20.3
|
||||
neogradle.subsystems.parchment.mappingsVersion=2023.12.31
|
||||
parchment_minecraft_version=1.21
|
||||
parchment_mappings_version=2024.07.28
|
||||
|
||||
# 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.20.4
|
||||
minecraft_version=1.21.1
|
||||
|
||||
# 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
|
||||
# as they do not follow standard versioning conventions.
|
||||
minecraft_version_range=[1.20.4,1.21)
|
||||
minecraft_version_range=[1.21.1, 1.22)
|
||||
|
||||
# The Neo version must agree with the Minecraft version to get a valid artifact
|
||||
neo_version=20.4.146-beta
|
||||
neo_version=21.1.69
|
||||
# The Neo version range can use any version of Neo as bounds
|
||||
neo_version_range=[20.4,)
|
||||
neo_version_range=[21.1.0,)
|
||||
# The loader version range can only use the major version of FML as bounds
|
||||
loader_version_range=[2,)
|
||||
loader_version_range=[4,)
|
||||
|
||||
## Mod Properties
|
||||
|
||||
|
@ -31,7 +37,7 @@ mod_name=TurnBasedMinecraftMod
|
|||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||
mod_license=MIT
|
||||
# The mod version. See https://semver.org/
|
||||
mod_version=1.26.0
|
||||
mod_version=1.27.0
|
||||
# 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.
|
||||
# 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
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
|
34
gradlew
vendored
34
gradlew
vendored
|
@ -15,6 +15,8 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
|
@ -55,7 +57,7 @@
|
|||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (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.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
|
@ -83,10 +85,9 @@ done
|
|||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
|
||||
# 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"'
|
||||
# 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.
|
||||
MAX_FD=maximum
|
||||
|
@ -133,10 +134,13 @@ location of your Java installation."
|
|||
fi
|
||||
else
|
||||
JAVACMD=java
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
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
|
||||
location of your Java installation."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
|
@ -144,7 +148,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
|||
case $MAX_FD in #(
|
||||
max*)
|
||||
# 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 ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
|
@ -152,7 +156,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
|||
'' | soft) :;; #(
|
||||
*)
|
||||
# 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" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
|
@ -197,11 +201,15 @@ if "$cygwin" || "$msys" ; then
|
|||
done
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command;
|
||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
||||
# shell script including quotes and variable substitutions, so put them in
|
||||
# double quotes to make sure that they get re-expanded; and
|
||||
# * put everything else in single quotes, so that it's not re-expanded.
|
||||
|
||||
# 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"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
set -- \
|
||||
"-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 limitations under the License.
|
||||
@rem
|
||||
@rem SPDX-License-Identifier: Apache-2.0
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
|
@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
|
|||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
|
@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
pluginManagement {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
gradlePluginPortal()
|
||||
maven {
|
||||
url = 'https://maven.neoforged.net/releases'
|
||||
|
@ -10,5 +11,5 @@ pluginManagement {
|
|||
}
|
||||
|
||||
plugins {
|
||||
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0'
|
||||
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
|
||||
}
|
||||
|
|
|
@ -275,16 +275,16 @@ public class BattleGui extends Screen {
|
|||
setState(MenuState.ATTACK_TARGET);
|
||||
break;
|
||||
case DEFEND:
|
||||
PacketDistributor.SERVER.noArg().send(new PacketBattleDecision(
|
||||
TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.DEFEND, 0));
|
||||
PacketDistributor.sendToServer(new PacketBattleDecision(
|
||||
TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.DEFEND.getValue(), 0));
|
||||
setState(MenuState.WAITING);
|
||||
break;
|
||||
case ITEM:
|
||||
setState(MenuState.ITEM_ACTION);
|
||||
break;
|
||||
case FLEE:
|
||||
PacketDistributor.SERVER.noArg().send(new PacketBattleDecision(
|
||||
TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.FLEE, 0));
|
||||
PacketDistributor.sendToServer(new PacketBattleDecision(
|
||||
TurnBasedMinecraftMod.proxy.getLocalBattle().getId(), Battle.Decision.FLEE.getValue(), 0));
|
||||
setState(MenuState.WAITING);
|
||||
break;
|
||||
case ATTACK_TARGET:
|
||||
|
@ -313,9 +313,9 @@ public class BattleGui extends Screen {
|
|||
|
||||
protected void entityButtonActionEvent(EntitySelectionButton button, ButtonAction action) {
|
||||
if (action.equals(ButtonAction.ATTACK_TARGET)) {
|
||||
PacketDistributor.SERVER.noArg().send(
|
||||
PacketDistributor.sendToServer(
|
||||
new PacketBattleDecision(TurnBasedMinecraftMod.proxy.getLocalBattle().getId(),
|
||||
Battle.Decision.ATTACK, ((EntitySelectionButton) button).getID()));
|
||||
Battle.Decision.ATTACK.getValue(), ((EntitySelectionButton) button).getID()));
|
||||
setState(MenuState.WAITING);
|
||||
} else {
|
||||
setState(MenuState.MAIN_MENU);
|
||||
|
@ -325,18 +325,18 @@ public class BattleGui extends Screen {
|
|||
protected void itemButtonActionEvent(ItemSelectionButton button, ButtonAction action) {
|
||||
switch (action) {
|
||||
case DO_ITEM_SWITCH:
|
||||
PacketDistributor.SERVER.noArg().send(
|
||||
PacketDistributor.sendToServer(
|
||||
new PacketBattleDecision(TurnBasedMinecraftMod.proxy.getLocalBattle().getId(),
|
||||
Battle.Decision.SWITCH_ITEM, button.getID()));
|
||||
Battle.Decision.SWITCH_ITEM.getValue(), button.getID()));
|
||||
if (button.getID() >= 0 && button.getID() < 9) {
|
||||
Minecraft.getInstance().player.getInventory().selected = button.getID();
|
||||
}
|
||||
setState(MenuState.WAITING);
|
||||
break;
|
||||
case DO_USE_ITEM:
|
||||
PacketDistributor.SERVER.noArg().send(
|
||||
PacketDistributor.sendToServer(
|
||||
new PacketBattleDecision(TurnBasedMinecraftMod.proxy.getLocalBattle().getId(),
|
||||
Battle.Decision.USE_ITEM, button.getID()));
|
||||
Battle.Decision.USE_ITEM.getValue(), button.getID()));
|
||||
setState(MenuState.WAITING);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -1,11 +1,6 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.client;
|
||||
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.components.*;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.neoforged.neoforge.common.ModConfigSpec;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
|
@ -70,255 +65,4 @@ public class ClientConfig {
|
|||
|
||||
//builder.pop();
|
||||
}
|
||||
|
||||
public static class CliConfGui extends Screen {
|
||||
private final int widget_height = 20;
|
||||
private boolean dirtyFlag;
|
||||
private boolean accepted;
|
||||
private EditBox battleListEditBox = null;
|
||||
private EditBox sillyListEditBox = null;
|
||||
private SliderPercentage sillyMusicThresholdSlider = null;
|
||||
private Checkbox affectedByMasterVolCheckbox = null;
|
||||
private Checkbox affectedByMusicVolCheckbox = null;
|
||||
private SliderPercentage volumeSlider = null;
|
||||
|
||||
public CliConfGui() {
|
||||
super(Component.literal("TurnBasedMC Client Config"));
|
||||
|
||||
dirtyFlag = true;
|
||||
|
||||
accepted = false;
|
||||
}
|
||||
|
||||
public void onDirty() {
|
||||
clearWidgets();
|
||||
|
||||
// Initialize GUI elements.
|
||||
int widget_x_offset = 5;
|
||||
int widget_width = this.width / 2 - widget_x_offset * 2;
|
||||
int top_offset = 5;
|
||||
|
||||
addRenderableWidget(
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Battle Music Categories"),
|
||||
font));
|
||||
if (battleListEditBox == null) {
|
||||
battleListEditBox =
|
||||
new EditBox(font, this.width / 2 + widget_x_offset, top_offset, widget_width,
|
||||
widget_height, Component.literal("Battle Music Categories Edit Box"));
|
||||
} else {
|
||||
battleListEditBox.setPosition(this.width / 2 + widget_x_offset, top_offset);
|
||||
battleListEditBox.setSize(widget_width, widget_height);
|
||||
}
|
||||
String tempString = "";
|
||||
for (String category : CLIENT.battleMusicList.get()) {
|
||||
if (tempString.isEmpty()) {
|
||||
tempString = category;
|
||||
} else {
|
||||
tempString += "," + category;
|
||||
}
|
||||
}
|
||||
battleListEditBox.setMaxLength(128);
|
||||
battleListEditBox.setValue(tempString);
|
||||
addRenderableWidget(battleListEditBox);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
addRenderableWidget(
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Silly Music Categories"),
|
||||
font));
|
||||
if (sillyListEditBox == null) {
|
||||
sillyListEditBox =
|
||||
new EditBox(font, this.width / 2 + widget_x_offset, top_offset, widget_width,
|
||||
widget_height, Component.literal("Silly Music Categories Edit Box"));
|
||||
} else {
|
||||
sillyListEditBox.setPosition(this.width / 2 + widget_x_offset, top_offset);
|
||||
sillyListEditBox.setSize(widget_width, widget_height);
|
||||
}
|
||||
tempString = "";
|
||||
for (String category : CLIENT.sillyMusicList.get()) {
|
||||
if (tempString.isEmpty()) {
|
||||
tempString = category;
|
||||
} else {
|
||||
tempString += "," + category;
|
||||
}
|
||||
}
|
||||
sillyListEditBox.setMaxLength(128);
|
||||
sillyListEditBox.setValue(tempString);
|
||||
addRenderableWidget(sillyListEditBox);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
StringWidget stringWidget =
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Silly Music Threshold"), font);
|
||||
stringWidget.setTooltip(Tooltip.create(
|
||||
Component.literal("Ratio of minimum of silly mobs in battle to play silly music")));
|
||||
addRenderableWidget(stringWidget);
|
||||
if (sillyMusicThresholdSlider == null) {
|
||||
sillyMusicThresholdSlider =
|
||||
new SliderPercentage(this.width / 2 + widget_x_offset, top_offset, widget_width,
|
||||
widget_height, Component.literal("Silly Music Threshold: " +
|
||||
String.format("%.1f%%", CLIENT.sillyMusicThreshold.get() * 100.0)),
|
||||
CLIENT.sillyMusicThreshold.get(), "Silly Music Threshold: ");
|
||||
} else {
|
||||
sillyMusicThresholdSlider.setPosition(this.width / 2 + widget_x_offset, top_offset);
|
||||
sillyMusicThresholdSlider.setSize(widget_width, widget_height);
|
||||
}
|
||||
addRenderableWidget(sillyMusicThresholdSlider);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
stringWidget =
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Affected by Master Vol."),
|
||||
font);
|
||||
stringWidget.setTooltip(Tooltip.create(
|
||||
Component.literal("If enabled, volume is affected by global master volume.")));
|
||||
addRenderableWidget(stringWidget);
|
||||
if (affectedByMasterVolCheckbox == null) {
|
||||
affectedByMasterVolCheckbox = Checkbox.builder(Component.literal(""), font)
|
||||
.pos(this.width / 2 + widget_x_offset, top_offset).build();
|
||||
} else {
|
||||
affectedByMasterVolCheckbox.setPosition(this.width / 2 + widget_x_offset,
|
||||
top_offset);
|
||||
}
|
||||
if ((CLIENT.volumeAffectedByMasterVolume.get() &&
|
||||
!affectedByMasterVolCheckbox.selected()) ||
|
||||
(!CLIENT.volumeAffectedByMasterVolume.get() &&
|
||||
affectedByMasterVolCheckbox.selected())) {
|
||||
affectedByMasterVolCheckbox.onPress();
|
||||
}
|
||||
addRenderableWidget(affectedByMasterVolCheckbox);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
stringWidget =
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Affected by Music Vol."), font);
|
||||
stringWidget.setTooltip(Tooltip.create(
|
||||
Component.literal("If enabled, volume is affected by global music volume.")));
|
||||
addRenderableWidget(stringWidget);
|
||||
if (affectedByMusicVolCheckbox == null) {
|
||||
affectedByMusicVolCheckbox = Checkbox.builder(Component.literal(""), font)
|
||||
.pos(this.width / 2 + widget_x_offset, top_offset).build();
|
||||
} else {
|
||||
affectedByMusicVolCheckbox.setPosition(this.width / 2 + widget_x_offset,
|
||||
top_offset);
|
||||
}
|
||||
if ((CLIENT.volumeAffectedByMusicVolume.get() &&
|
||||
!affectedByMusicVolCheckbox.selected()) ||
|
||||
(!CLIENT.volumeAffectedByMusicVolume.get() &&
|
||||
affectedByMusicVolCheckbox.selected())) {
|
||||
affectedByMusicVolCheckbox.onPress();
|
||||
}
|
||||
addRenderableWidget(affectedByMusicVolCheckbox);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
stringWidget =
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Music Volume"), font);
|
||||
stringWidget.setTooltip(
|
||||
Tooltip.create(Component.literal("Volume of battle/silly music")));
|
||||
addRenderableWidget(stringWidget);
|
||||
if (volumeSlider == null) {
|
||||
volumeSlider =
|
||||
new SliderPercentage(this.width / 2 + widget_x_offset, top_offset, widget_width,
|
||||
widget_height, Component.literal(
|
||||
"Volume: " + String.format("%.1f%%", CLIENT.musicVolume.get() * 100.0)),
|
||||
CLIENT.musicVolume.get(), "Volume: ");
|
||||
} else {
|
||||
volumeSlider.setPosition(this.width / 2 + widget_x_offset, top_offset);
|
||||
volumeSlider.setSize(widget_width, widget_height);
|
||||
}
|
||||
addRenderableWidget(volumeSlider);
|
||||
|
||||
addRenderableWidget(Button.builder(Component.literal("Cancel"),
|
||||
(b) -> Minecraft.getInstance().setScreen(null))
|
||||
.bounds(this.width / 2 - widget_width + widget_x_offset,
|
||||
this.height - widget_height, widget_width, widget_height).build());
|
||||
addRenderableWidget(Button.builder(Component.literal("Accept"), (b) -> {
|
||||
accepted = true;
|
||||
}).bounds(this.width / 2 + widget_x_offset, this.height - widget_height, widget_width,
|
||||
widget_height).build());
|
||||
|
||||
dirtyFlag = false;
|
||||
}
|
||||
|
||||
private void doAccepted() {
|
||||
String temp = battleListEditBox.getValue();
|
||||
{
|
||||
List<String> battleList = new ArrayList<String>();
|
||||
for (String category : temp.split(",")) {
|
||||
battleList.add(category.strip());
|
||||
}
|
||||
CLIENT.battleMusicList.set(battleList);
|
||||
}
|
||||
|
||||
temp = sillyListEditBox.getValue();
|
||||
{
|
||||
List<String> sillyList = new ArrayList<String>();
|
||||
for (String category : temp.split(",")) {
|
||||
sillyList.add(category.strip());
|
||||
}
|
||||
CLIENT.sillyMusicList.set(sillyList);
|
||||
}
|
||||
|
||||
CLIENT.sillyMusicThreshold.set(sillyMusicThresholdSlider.percentage);
|
||||
|
||||
CLIENT.volumeAffectedByMasterVolume.set(affectedByMasterVolCheckbox.selected());
|
||||
|
||||
CLIENT.volumeAffectedByMusicVolume.set(affectedByMusicVolCheckbox.selected());
|
||||
|
||||
CLIENT.musicVolume.set(volumeSlider.percentage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPauseScreen() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) {
|
||||
if (accepted) {
|
||||
doAccepted();
|
||||
Minecraft.getInstance().setScreen(null);
|
||||
return;
|
||||
}
|
||||
if (dirtyFlag) {
|
||||
onDirty();
|
||||
}
|
||||
super.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resize(Minecraft pMinecraft, int pWidth, int pHeight) {
|
||||
dirtyFlag = true;
|
||||
super.resize(pMinecraft, pWidth, pHeight);
|
||||
}
|
||||
|
||||
private static class SliderPercentage extends AbstractSliderButton {
|
||||
private final String messagePrefix;
|
||||
private double percentage;
|
||||
|
||||
public SliderPercentage(int x, int y, int width, int height, Component message, double percentage, String messagePrefix) {
|
||||
super(x, y, width, height, message, percentage);
|
||||
this.percentage = percentage;
|
||||
this.messagePrefix = messagePrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateMessage() {
|
||||
setMessage(
|
||||
Component.literal(messagePrefix + String.format("%.1f%%", percentage * 100.0)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyValue() {
|
||||
percentage = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,262 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.client;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.components.*;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.neoforged.fml.ModContainer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ClientConfigGui extends net.minecraft.client.gui.screens.Screen {
|
||||
private final int widget_height = 20;
|
||||
private boolean dirtyFlag;
|
||||
private boolean accepted;
|
||||
private EditBox battleListEditBox = null;
|
||||
private EditBox sillyListEditBox = null;
|
||||
private SliderPercentage sillyMusicThresholdSlider = null;
|
||||
private Checkbox affectedByMasterVolCheckbox = null;
|
||||
private Checkbox affectedByMusicVolCheckbox = null;
|
||||
private SliderPercentage volumeSlider = null;
|
||||
|
||||
public ClientConfigGui(ModContainer container, Screen parent) {
|
||||
super(Component.literal("TurnBasedMC Client Config"));
|
||||
|
||||
dirtyFlag = true;
|
||||
|
||||
accepted = false;
|
||||
}
|
||||
|
||||
public void onDirty() {
|
||||
clearWidgets();
|
||||
|
||||
// Initialize GUI elements.
|
||||
int widget_x_offset = 5;
|
||||
int widget_width = this.width / 2 - widget_x_offset * 2;
|
||||
int top_offset = 5;
|
||||
|
||||
addRenderableWidget(
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Battle Music Categories"),
|
||||
font));
|
||||
if (battleListEditBox == null) {
|
||||
battleListEditBox =
|
||||
new EditBox(font, this.width / 2 + widget_x_offset, top_offset, widget_width,
|
||||
widget_height, Component.literal("Battle Music Categories Edit Box"));
|
||||
} else {
|
||||
battleListEditBox.setPosition(this.width / 2 + widget_x_offset, top_offset);
|
||||
battleListEditBox.setSize(widget_width, widget_height);
|
||||
}
|
||||
String tempString = "";
|
||||
for (String category : ClientConfig.CLIENT.battleMusicList.get()) {
|
||||
if (tempString.isEmpty()) {
|
||||
tempString = category;
|
||||
} else {
|
||||
tempString += "," + category;
|
||||
}
|
||||
}
|
||||
battleListEditBox.setMaxLength(128);
|
||||
battleListEditBox.setValue(tempString);
|
||||
addRenderableWidget(battleListEditBox);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
addRenderableWidget(
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Silly Music Categories"),
|
||||
font));
|
||||
if (sillyListEditBox == null) {
|
||||
sillyListEditBox =
|
||||
new EditBox(font, this.width / 2 + widget_x_offset, top_offset, widget_width,
|
||||
widget_height, Component.literal("Silly Music Categories Edit Box"));
|
||||
} else {
|
||||
sillyListEditBox.setPosition(this.width / 2 + widget_x_offset, top_offset);
|
||||
sillyListEditBox.setSize(widget_width, widget_height);
|
||||
}
|
||||
tempString = "";
|
||||
for (String category : ClientConfig.CLIENT.sillyMusicList.get()) {
|
||||
if (tempString.isEmpty()) {
|
||||
tempString = category;
|
||||
} else {
|
||||
tempString += "," + category;
|
||||
}
|
||||
}
|
||||
sillyListEditBox.setMaxLength(128);
|
||||
sillyListEditBox.setValue(tempString);
|
||||
addRenderableWidget(sillyListEditBox);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
StringWidget stringWidget =
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Silly Music Threshold"), font);
|
||||
stringWidget.setTooltip(Tooltip.create(
|
||||
Component.literal("Ratio of minimum of silly mobs in battle to play silly music")));
|
||||
addRenderableWidget(stringWidget);
|
||||
if (sillyMusicThresholdSlider == null) {
|
||||
sillyMusicThresholdSlider =
|
||||
new SliderPercentage(this.width / 2 + widget_x_offset, top_offset, widget_width,
|
||||
widget_height, Component.literal("Silly Music Threshold: " +
|
||||
String.format("%.1f%%", ClientConfig.CLIENT.sillyMusicThreshold.get() * 100.0)),
|
||||
ClientConfig.CLIENT.sillyMusicThreshold.get(), "Silly Music Threshold: ");
|
||||
} else {
|
||||
sillyMusicThresholdSlider.setPosition(this.width / 2 + widget_x_offset, top_offset);
|
||||
sillyMusicThresholdSlider.setSize(widget_width, widget_height);
|
||||
}
|
||||
addRenderableWidget(sillyMusicThresholdSlider);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
stringWidget =
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Affected by Master Vol."),
|
||||
font);
|
||||
stringWidget.setTooltip(Tooltip.create(
|
||||
Component.literal("If enabled, volume is affected by global master volume.")));
|
||||
addRenderableWidget(stringWidget);
|
||||
if (affectedByMasterVolCheckbox == null) {
|
||||
affectedByMasterVolCheckbox = Checkbox.builder(Component.literal(""), font)
|
||||
.pos(this.width / 2 + widget_x_offset, top_offset).build();
|
||||
} else {
|
||||
affectedByMasterVolCheckbox.setPosition(this.width / 2 + widget_x_offset,
|
||||
top_offset);
|
||||
}
|
||||
if ((ClientConfig.CLIENT.volumeAffectedByMasterVolume.get() &&
|
||||
!affectedByMasterVolCheckbox.selected()) ||
|
||||
(!ClientConfig.CLIENT.volumeAffectedByMasterVolume.get() &&
|
||||
affectedByMasterVolCheckbox.selected())) {
|
||||
affectedByMasterVolCheckbox.onPress();
|
||||
}
|
||||
addRenderableWidget(affectedByMasterVolCheckbox);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
stringWidget =
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Affected by Music Vol."), font);
|
||||
stringWidget.setTooltip(Tooltip.create(
|
||||
Component.literal("If enabled, volume is affected by global music volume.")));
|
||||
addRenderableWidget(stringWidget);
|
||||
if (affectedByMusicVolCheckbox == null) {
|
||||
affectedByMusicVolCheckbox = Checkbox.builder(Component.literal(""), font)
|
||||
.pos(this.width / 2 + widget_x_offset, top_offset).build();
|
||||
} else {
|
||||
affectedByMusicVolCheckbox.setPosition(this.width / 2 + widget_x_offset,
|
||||
top_offset);
|
||||
}
|
||||
if ((ClientConfig.CLIENT.volumeAffectedByMusicVolume.get() &&
|
||||
!affectedByMusicVolCheckbox.selected()) ||
|
||||
(!ClientConfig.CLIENT.volumeAffectedByMusicVolume.get() &&
|
||||
affectedByMusicVolCheckbox.selected())) {
|
||||
affectedByMusicVolCheckbox.onPress();
|
||||
}
|
||||
addRenderableWidget(affectedByMusicVolCheckbox);
|
||||
|
||||
top_offset += widget_height;
|
||||
|
||||
stringWidget =
|
||||
new StringWidget(this.width / 2 - widget_width + widget_x_offset, top_offset,
|
||||
widget_width, widget_height, Component.literal("Music Volume"), font);
|
||||
stringWidget.setTooltip(
|
||||
Tooltip.create(Component.literal("Volume of battle/silly music")));
|
||||
addRenderableWidget(stringWidget);
|
||||
if (volumeSlider == null) {
|
||||
volumeSlider =
|
||||
new SliderPercentage(this.width / 2 + widget_x_offset, top_offset, widget_width,
|
||||
widget_height, Component.literal(
|
||||
"Volume: " + String.format("%.1f%%", ClientConfig.CLIENT.musicVolume.get() * 100.0)),
|
||||
ClientConfig.CLIENT.musicVolume.get(), "Volume: ");
|
||||
} else {
|
||||
volumeSlider.setPosition(this.width / 2 + widget_x_offset, top_offset);
|
||||
volumeSlider.setSize(widget_width, widget_height);
|
||||
}
|
||||
addRenderableWidget(volumeSlider);
|
||||
|
||||
addRenderableWidget(Button.builder(Component.literal("Cancel"),
|
||||
(b) -> Minecraft.getInstance().setScreen(null))
|
||||
.bounds(this.width / 2 - widget_width + widget_x_offset,
|
||||
this.height - widget_height, widget_width, widget_height).build());
|
||||
addRenderableWidget(Button.builder(Component.literal("Accept"), (b) -> {
|
||||
accepted = true;
|
||||
}).bounds(this.width / 2 + widget_x_offset, this.height - widget_height, widget_width,
|
||||
widget_height).build());
|
||||
|
||||
dirtyFlag = false;
|
||||
}
|
||||
|
||||
private void doAccepted() {
|
||||
String temp = battleListEditBox.getValue();
|
||||
{
|
||||
List<String> battleList = new ArrayList<String>();
|
||||
for (String category : temp.split(",")) {
|
||||
battleList.add(category.strip());
|
||||
}
|
||||
ClientConfig.CLIENT.battleMusicList.set(battleList);
|
||||
}
|
||||
|
||||
temp = sillyListEditBox.getValue();
|
||||
{
|
||||
List<String> sillyList = new ArrayList<String>();
|
||||
for (String category : temp.split(",")) {
|
||||
sillyList.add(category.strip());
|
||||
}
|
||||
ClientConfig.CLIENT.sillyMusicList.set(sillyList);
|
||||
}
|
||||
|
||||
ClientConfig.CLIENT.sillyMusicThreshold.set(sillyMusicThresholdSlider.percentage);
|
||||
|
||||
ClientConfig.CLIENT.volumeAffectedByMasterVolume.set(affectedByMasterVolCheckbox.selected());
|
||||
|
||||
ClientConfig.CLIENT.volumeAffectedByMusicVolume.set(affectedByMusicVolCheckbox.selected());
|
||||
|
||||
ClientConfig.CLIENT.musicVolume.set(volumeSlider.percentage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPauseScreen() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) {
|
||||
if (accepted) {
|
||||
doAccepted();
|
||||
Minecraft.getInstance().setScreen(null);
|
||||
return;
|
||||
}
|
||||
if (dirtyFlag) {
|
||||
onDirty();
|
||||
}
|
||||
super.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resize(Minecraft pMinecraft, int pWidth, int pHeight) {
|
||||
dirtyFlag = true;
|
||||
super.resize(pMinecraft, pWidth, pHeight);
|
||||
}
|
||||
|
||||
private static class SliderPercentage extends AbstractSliderButton {
|
||||
private final String messagePrefix;
|
||||
private double percentage;
|
||||
|
||||
public SliderPercentage(int x, int y, int width, int height, Component message, double percentage, String messagePrefix) {
|
||||
super(x, y, width, height, message, percentage);
|
||||
this.percentage = percentage;
|
||||
this.messagePrefix = messagePrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateMessage() {
|
||||
setMessage(
|
||||
Component.literal(messagePrefix + String.format("%.1f%%", percentage * 100.0)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyValue() {
|
||||
percentage = value;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -15,7 +15,7 @@ import net.minecraft.resources.ResourceKey;
|
|||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.neoforged.neoforge.network.handling.PlayPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
|
||||
public class ClientProxy extends CommonProxy {
|
||||
private BattleGui battleGui = null;
|
||||
|
@ -236,7 +236,7 @@ public class ClientProxy extends CommonProxy {
|
|||
}
|
||||
|
||||
@Override
|
||||
public <MSG> void handlePacket(final MSG msg, final PlayPayloadContext ctx) {
|
||||
public <MSG> void handlePacket(final MSG msg, final IPayloadContext ctx) {
|
||||
if (msg.getClass() == PacketBattleMessage.class) {
|
||||
PacketBattleMessage pkt = (PacketBattleMessage) msg;
|
||||
Entity fromEntity = getEntity(pkt.getEntityIDFrom(), pkt.getDimension());
|
||||
|
@ -1473,4 +1473,9 @@ public class ClientProxy extends CommonProxy {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showClientConfigGui() {
|
||||
Minecraft.getInstance().setScreen(new ClientConfigGui(null, null));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,22 +1,21 @@
|
|||
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 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.neoforged.neoforge.event.entity.living.LivingAttackEvent;
|
||||
import net.neoforged.neoforge.event.entity.living.LivingChangeTargetEvent;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
|
||||
public class AttackEventHandler
|
||||
{
|
||||
private boolean isAttackerValid(LivingAttackEvent event)
|
||||
private boolean isAttackerValid(LivingIncomingDamageEvent event)
|
||||
{
|
||||
if(event.getSource().getEntity() == null)
|
||||
{
|
||||
|
@ -59,7 +58,7 @@ public class AttackEventHandler
|
|||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void entityAttacked(LivingAttackEvent event)
|
||||
public void entityAttacked(LivingIncomingDamageEvent event)
|
||||
{
|
||||
if(event.getEntity().level().isClientSide)
|
||||
{
|
||||
|
@ -82,7 +81,7 @@ public class AttackEventHandler
|
|||
if(!event.getEntity().hasCustomName())
|
||||
{
|
||||
TurnBasedMinecraftMod.logger.error("Cannot edit custom name from entity without custom name");
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor).send(new PacketGeneralMessage("Cannot edit custom name from entity without custom name"));
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketGeneralMessage("Cannot edit custom name from entity without custom name"));
|
||||
return;
|
||||
}
|
||||
editingInfo.entityInfo = config.getCustomEntityInfo(event.getEntity().getCustomName().getString());
|
||||
|
@ -91,9 +90,9 @@ public class AttackEventHandler
|
|||
editingInfo.entityInfo = new EntityInfo();
|
||||
editingInfo.entityInfo.customName = event.getEntity().getCustomName().getString();
|
||||
}
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor).send(new PacketGeneralMessage("Editing custom name \"" + event.getEntity().getCustomName().getString() + "\""));
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketGeneralMessage("Editing custom name \"" + event.getEntity().getCustomName().getString() + "\""));
|
||||
TurnBasedMinecraftMod.logger.info("Begin editing custom \"" + event.getEntity().getCustomName().getString() + "\"");
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -107,9 +106,9 @@ public class AttackEventHandler
|
|||
{
|
||||
editingInfo.entityInfo = editingInfo.entityInfo.clone();
|
||||
}
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor).send(new PacketGeneralMessage("Editing entity \"" + editingInfo.entityInfo.classType.getName() + "\""));
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketGeneralMessage("Editing entity \"" + editingInfo.entityInfo.classType.getName() + "\""));
|
||||
TurnBasedMinecraftMod.logger.info("Begin editing \"" + editingInfo.entityInfo.classType.getName() + "\"");
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)editingInfo.editor).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)editingInfo.editor, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -154,16 +153,16 @@ public class AttackEventHandler
|
|||
if(event.getEntity().level().isClientSide
|
||||
|| config.isOldBattleBehaviorEnabled()
|
||||
|| (event.getEntity() != null && battleManager.isRecentlyLeftBattle(event.getEntity().getId()))
|
||||
|| (event.getNewTarget() != null && battleManager.isRecentlyLeftBattle(event.getNewTarget().getId()))
|
||||
|| (event.getEntity() != null && event.getNewTarget() != null && Utility.distanceBetweenEntities(event.getEntity(), event.getNewTarget()) > (double)config.getAggroStartBattleDistance()))
|
||||
|| (event.getNewAboutToBeSetTarget() != null && battleManager.isRecentlyLeftBattle(event.getNewAboutToBeSetTarget().getId()))
|
||||
|| (event.getEntity() != null && event.getNewAboutToBeSetTarget() != null && Utility.distanceBetweenEntities(event.getEntity(), event.getNewAboutToBeSetTarget()) > (double)config.getAggroStartBattleDistance()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if(event.getEntity() != null
|
||||
&& event.getNewTarget() != null
|
||||
&& event.getNewAboutToBeSetTarget() != null
|
||||
&& !config.getBattleIgnoringPlayers().contains(event.getEntity().getId())
|
||||
&& !config.getBattleIgnoringPlayers().contains(event.getNewTarget().getId())
|
||||
&& event.getEntity().level().dimension().equals(event.getNewTarget().level().dimension()))
|
||||
&& !config.getBattleIgnoringPlayers().contains(event.getNewAboutToBeSetTarget().getId())
|
||||
&& event.getEntity().level().dimension().equals(event.getNewAboutToBeSetTarget().level().dimension()))
|
||||
{
|
||||
TurnBasedMinecraftMod.proxy.getBattleManager().checkTargeted(event);
|
||||
}
|
||||
|
|
|
@ -449,7 +449,7 @@ public class Battle {
|
|||
}
|
||||
PacketBattleInfo infoPacket = new PacketBattleInfo(getSideAIDs(), getSideBIDs(), timer, TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever());
|
||||
for (Combatant p : players.values()) {
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)p.entity).send(infoPacket);
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)p.entity, infoPacket);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -464,7 +464,7 @@ public class Battle {
|
|||
PacketBattleMessage packet = new PacketBattleMessage(type, from, to, dimension, amount, custom);
|
||||
for (Combatant p : players.values()) {
|
||||
if (p.entity.isAlive()) {
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)p.entity).send(packet);
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)p.entity, packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -574,7 +574,7 @@ public class Battle {
|
|||
|
||||
private void removeCombatantPostRemove(Combatant c) {
|
||||
if (c.entity instanceof Player) {
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)c.entity).send(new PacketBattleMessage(PacketBattleMessage.MessageType.ENDED, 0, 0, dimension, 0));
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)c.entity, new PacketBattleMessage(PacketBattleMessage.MessageType.ENDED, 0, 0, dimension, 0));
|
||||
}
|
||||
battleManager.addRecentlyLeftBattle(c);
|
||||
}
|
||||
|
@ -779,7 +779,7 @@ public class Battle {
|
|||
final Entity targetEntity = target.entity;
|
||||
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 int randomTimeLeft = random.nextInt(heldItemStack.getItem().getUseDuration(heldItemStack) / 3);
|
||||
final int randomTimeLeft = random.nextInt(heldItemStack.getItem().getUseDuration(heldItemStack, (LivingEntity)next.entity) / 3);
|
||||
if (TurnBasedMinecraftMod.proxy.getConfig().isFreezeCombatantsEnabled()) {
|
||||
next.yaw = yawDirection;
|
||||
next.pitch = pitchDirection;
|
||||
|
@ -1087,7 +1087,7 @@ public class Battle {
|
|||
debugLog += " null";
|
||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getId(), 0, PacketBattleMessage.UsedItemAction.USED_NOTHING.getValue());
|
||||
break;
|
||||
} else if (targetItem.isEdible()) {
|
||||
} else if (Utility.isItemEdible(targetItemStack, (LivingEntity)next.entity)) {
|
||||
debugLog += " food";
|
||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getId(), 0, PacketBattleMessage.UsedItemAction.USED_FOOD.getValue(), targetItemStack.getDisplayName().getString());
|
||||
final Entity nextEntity = next.entity;
|
||||
|
@ -1096,7 +1096,7 @@ public class Battle {
|
|||
} else {
|
||||
// then check vanilla foods
|
||||
final CreativeModeTab foodAndDrinksTab = CreativeModeTabRegistry.getTab(CreativeModeTabs.FOOD_AND_DRINKS.location());
|
||||
if (foodAndDrinksTab.contains(targetItemStack) && targetItem.isEdible()) {
|
||||
if (foodAndDrinksTab.contains(targetItemStack) && Utility.isItemEdible(targetItemStack, (LivingEntity)next.entity)) {
|
||||
debugLog += " food";
|
||||
sendMessageToAllPlayers(PacketBattleMessage.MessageType.USED_ITEM, next.entity.getId(), 0, PacketBattleMessage.UsedItemAction.USED_FOOD.getValue(), targetItemStack.getDisplayName().getString());
|
||||
final Entity nextEntity = next.entity;
|
||||
|
|
|
@ -8,8 +8,8 @@ import net.minecraft.world.entity.monster.Creeper;
|
|||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.neoforged.neoforge.common.NeoForge;
|
||||
import net.neoforged.neoforge.event.entity.living.LivingAttackEvent;
|
||||
import net.neoforged.neoforge.event.entity.living.LivingChangeTargetEvent;
|
||||
import net.neoforged.neoforge.event.entity.living.LivingIncomingDamageEvent;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
|
@ -44,7 +44,7 @@ public class BattleManager
|
|||
* @param event
|
||||
* @return True if event should be canceled
|
||||
*/
|
||||
public boolean checkAttack(final LivingAttackEvent event)
|
||||
public boolean checkAttack(final LivingIncomingDamageEvent event)
|
||||
{
|
||||
Config config = TurnBasedMinecraftMod.proxy.getConfig();
|
||||
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.
|
||||
if (TurnBasedMinecraftMod.proxy.getConfig().isPlayerOnlyBattlesEnabled() &&
|
||||
(!(event.getEntity() instanceof Player) || !(event.getNewTarget() instanceof Player))) {
|
||||
(!(event.getEntity() instanceof Player) || !(event.getNewAboutToBeSetTarget() instanceof Player))) {
|
||||
return;
|
||||
}
|
||||
|
||||
String targetedCustomName;
|
||||
try {
|
||||
targetedCustomName = event.getNewTarget().getCustomName().getString();
|
||||
targetedCustomName = event.getNewAboutToBeSetTarget().getCustomName().getString();
|
||||
} catch (NullPointerException e) {
|
||||
targetedCustomName = null;
|
||||
}
|
||||
|
@ -207,7 +207,7 @@ public class BattleManager
|
|||
}
|
||||
|
||||
EntityInfo targetedInfo;
|
||||
if(event.getNewTarget() instanceof Player)
|
||||
if(event.getNewAboutToBeSetTarget() instanceof Player)
|
||||
{
|
||||
targetedInfo = null;
|
||||
}
|
||||
|
@ -216,10 +216,10 @@ public class BattleManager
|
|||
targetedInfo = TurnBasedMinecraftMod.proxy.getConfig().getCustomEntityInfoReference(targetedCustomName);
|
||||
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.ignoreBattle
|
||||
|| TurnBasedMinecraftMod.proxy.getConfig().isIgnoreBattleType(attackerInfo.category)
|
||||
|
@ -235,8 +235,8 @@ public class BattleManager
|
|||
if(attackerBattle != null && !attackerBattle.hasCombatant(event.getEntity().getId())) {
|
||||
attackerBattle = null;
|
||||
}
|
||||
Battle defenderBattle = battleMap.get(entityToBattleMap.get(new EntityIDDimPair(event.getNewTarget())));
|
||||
if(defenderBattle != null && !defenderBattle.hasCombatant(event.getNewTarget().getId())) {
|
||||
Battle defenderBattle = battleMap.get(entityToBattleMap.get(new EntityIDDimPair(event.getNewAboutToBeSetTarget())));
|
||||
if(defenderBattle != null && !defenderBattle.hasCombatant(event.getNewAboutToBeSetTarget().getId())) {
|
||||
defenderBattle = null;
|
||||
}
|
||||
|
||||
|
@ -244,13 +244,13 @@ public class BattleManager
|
|||
return;
|
||||
} else if(attackerBattle == null && defenderBattle == null) {
|
||||
// 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
|
||||
Collection<Entity> sideA = new ArrayList<Entity>(1);
|
||||
Collection<Entity> sideB = new ArrayList<Entity>(1);
|
||||
sideA.add(event.getEntity());
|
||||
sideB.add(event.getNewTarget());
|
||||
sideB.add(event.getNewAboutToBeSetTarget());
|
||||
createBattle(sideA, sideB, event.getEntity().level().dimension());
|
||||
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
|
||||
return;
|
||||
} else if (attackerBattle.hasCombatantInSideA(event.getEntity().getId())) {
|
||||
attackerBattle.addCombatantToSideB(event.getNewTarget());
|
||||
attackerBattle.addCombatantToSideB(event.getNewAboutToBeSetTarget());
|
||||
} 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 {
|
||||
if (defenderBattle.getSize() >= TurnBasedMinecraftMod.proxy.getConfig().getMaxInBattle()) {
|
||||
// battle max reached, cannot add to battle
|
||||
return;
|
||||
} else if (defenderBattle.hasCombatantInSideA(event.getNewTarget().getId())) {
|
||||
} else if (defenderBattle.hasCombatantInSideA(event.getNewAboutToBeSetTarget().getId())) {
|
||||
defenderBattle.addCombatantToSideB(event.getEntity());
|
||||
} else {
|
||||
defenderBattle.addCombatantToSideA(event.getEntity());
|
||||
|
@ -317,7 +317,7 @@ public class BattleManager
|
|||
c.time = System.nanoTime();
|
||||
Config config = TurnBasedMinecraftMod.proxy.getConfig();
|
||||
if(c.entity instanceof ServerPlayer) {
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)c.entity).send(new PacketGeneralMessage("You just left battle! " + config.getLeaveBattleCooldownSeconds() + " seconds until you can attack/be-attacked again!"));
|
||||
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);
|
||||
entityToBattleMap.remove(new EntityIDDimPair(c.entity));
|
||||
|
@ -337,7 +337,7 @@ public class BattleManager
|
|||
iter.remove();
|
||||
if(entry.getValue().entity instanceof ServerPlayer)
|
||||
{
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)entry.getValue().entity).send(new PacketGeneralMessage("Timer ended, you can now attack/be-attacked again."));
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)entry.getValue().entity, new PacketGeneralMessage("Timer ended, you can now attack/be-attacked again."));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package com.burnedkirby.TurnBasedMinecraft.common;
|
|||
|
||||
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.neoforge.event.TickEvent;
|
||||
import net.neoforged.neoforge.event.tick.ServerTickEvent;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
|
@ -25,8 +25,9 @@ public class BattleUpdater
|
|||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void update(TickEvent.ServerTickEvent tickEvent) {
|
||||
if(tickEvent.phase != TickEvent.Phase.START && isRunning.get() && ++tick > tickLimit) {
|
||||
public void update(ServerTickEvent.Post tickEvent) {
|
||||
//if(tickEvent.phase != TickEvent.Phase.START && isRunning.get() && ++tick > tickLimit) {
|
||||
if(isRunning.get() && ++tick > tickLimit) {
|
||||
tick = 0;
|
||||
manager.battleMap.entrySet().removeIf(entry -> entry.getValue().update());
|
||||
manager.updateRecentlyLeftBattle();
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
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.LivingEntity;
|
||||
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
|
||||
{
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||
|
||||
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.resources.ResourceKey;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.neoforged.neoforge.network.handling.PlayPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import net.neoforged.neoforge.server.ServerLifecycleHooks;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public class CommonProxy
|
||||
{
|
||||
|
@ -172,5 +172,9 @@ public class CommonProxy
|
|||
return ServerLifecycleHooks.getCurrentServer().getLevel(dim).getEntity(id);
|
||||
}
|
||||
|
||||
public <MSG> void handlePacket(final MSG msg, final PlayPayloadContext 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() {}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||
|
||||
import java.io.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
||||
import com.electronwill.nightconfig.core.file.CommentedFileConfig;
|
||||
import com.electronwill.nightconfig.core.file.FileConfig;
|
||||
import com.electronwill.nightconfig.toml.TomlFormat;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.data.registries.VanillaRegistries;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.electronwill.nightconfig.core.file.FileConfig;
|
||||
import java.io.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
||||
public class Config
|
||||
{
|
||||
|
|
|
@ -2,8 +2,8 @@ package com.burnedkirby.TurnBasedMinecraft.common;
|
|||
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.networking.PacketGeneralMessage;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.neoforged.neoforge.event.entity.EntityTravelToDimensionEvent;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.neoforge.event.entity.EntityTravelToDimensionEvent;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
|
||||
public class DimensionChangedHandler {
|
||||
|
@ -14,7 +14,7 @@ public class DimensionChangedHandler {
|
|||
}
|
||||
if(TurnBasedMinecraftMod.proxy.getBattleManager().forceLeaveBattle(new EntityIDDimPair(event.getEntity()))
|
||||
&& event.getEntity() instanceof ServerPlayer) {
|
||||
PacketDistributor.PLAYER.with((ServerPlayer)event.getEntity()).send(new PacketGeneralMessage("Left battle due to moving to a different dimension"));
|
||||
PacketDistributor.sendToPlayer((ServerPlayer)event.getEntity(), new PacketGeneralMessage("Left battle due to moving to a different dimension"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.effect.MobEffects;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class EntityInfo
|
||||
{
|
||||
public Class classType;
|
||||
|
@ -276,7 +279,7 @@ public class EntityInfo
|
|||
{
|
||||
if(this == FIRE)
|
||||
{
|
||||
entity.setSecondsOnFire(duration / 20);
|
||||
entity.setRemainingFireTicks(duration / 2);
|
||||
return;
|
||||
}
|
||||
else if(this != UNKNOWN)
|
||||
|
@ -373,6 +376,28 @@ public class EntityInfo
|
|||
customName = 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, String category, int decisionAttack, int decisionDefend, int decisionFlee,
|
||||
String customName) {
|
||||
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.category = category;
|
||||
this.decisionAttack = decisionAttack;
|
||||
this.decisionDefend = decisionDefend;
|
||||
this.decisionFlee = decisionFlee;
|
||||
this.customName = customName;
|
||||
}
|
||||
|
||||
public EntityInfo clone()
|
||||
{
|
||||
EntityInfo newEntityInfo = new EntityInfo();
|
||||
|
@ -394,4 +419,93 @@ public class EntityInfo
|
|||
newEntityInfo.customName = new String(customName);
|
||||
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();
|
||||
|
||||
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 = "";
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.common;
|
||||
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.neoforge.event.entity.living.LivingHurtEvent;
|
||||
import net.neoforged.neoforge.event.entity.living.LivingIncomingDamageEvent;
|
||||
|
||||
public class HurtEventHandler {
|
||||
@SubscribeEvent
|
||||
public void handleHurtEvent(LivingHurtEvent event) {
|
||||
public void handleHurtEvent(LivingIncomingDamageEvent event) {
|
||||
CommonProxy proxy = TurnBasedMinecraftMod.proxy;
|
||||
if (event.getEntity().level().isClientSide || proxy.getBattleManager() == null) {
|
||||
return;
|
||||
|
|
|
@ -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,22 +19,22 @@ import net.minecraft.network.chat.HoverEvent;
|
|||
import net.minecraft.network.chat.MutableComponent;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.ModLoadingContext;
|
||||
import net.neoforged.fml.ModContainer;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.config.ModConfig;
|
||||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||
import net.neoforged.fml.event.lifecycle.FMLDedicatedServerSetupEvent;
|
||||
import net.neoforged.fml.loading.FMLEnvironment;
|
||||
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
|
||||
import net.neoforged.neoforge.common.NeoForge;
|
||||
import net.neoforged.neoforge.event.RegisterCommandsEvent;
|
||||
import net.neoforged.neoforge.event.server.ServerStartingEvent;
|
||||
import net.neoforged.neoforge.event.server.ServerStoppingEvent;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||
import net.neoforged.fml.event.lifecycle.FMLDedicatedServerSetupEvent;
|
||||
import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent;
|
||||
import net.neoforged.neoforge.network.registration.IPayloadRegistrar;
|
||||
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.Logger;
|
||||
|
||||
|
@ -42,7 +42,7 @@ import org.apache.logging.log4j.Logger;
|
|||
public class TurnBasedMinecraftMod {
|
||||
public static final String MODID = "com_burnedkirby_turnbasedminecraft";
|
||||
public static final String NAME = "Turn Based Minecraft Mod";
|
||||
public static final String VERSION = "1.26.0";
|
||||
public static final String VERSION = "1.27.0";
|
||||
public static final String CONFIG_FILENAME = "TBM_Config.toml";
|
||||
public static final String DEFAULT_CONFIG_FILENAME = "TBM_Config_DEFAULT.toml";
|
||||
public static final String CONFIG_DIRECTORY = "config/TurnBasedMinecraft/";
|
||||
|
@ -54,7 +54,7 @@ public class TurnBasedMinecraftMod {
|
|||
public static final String MUSIC_BATTLE = MUSIC_ROOT + "battle/";
|
||||
|
||||
private static final String PROTOCOL_VERSION = Integer.toString(3);
|
||||
private static final ResourceLocation HANDLER_ID = new ResourceLocation(MODID, "main_channel");
|
||||
private static final ResourceLocation HANDLER_ID = ResourceLocation.fromNamespaceAndPath(MODID, "main_channel");
|
||||
protected static Logger logger = LogManager.getLogger();
|
||||
|
||||
public static ResourceLocation getNetResourceLocation() {
|
||||
|
@ -63,38 +63,31 @@ public class TurnBasedMinecraftMod {
|
|||
|
||||
public static CommonProxy proxy;
|
||||
|
||||
public TurnBasedMinecraftMod(IEventBus eventBus) {
|
||||
eventBus.addListener(this::firstInit);
|
||||
eventBus.addListener(this::secondInitClient);
|
||||
eventBus.addListener(this::secondInitServer);
|
||||
eventBus.addListener(this::registerNetwork);
|
||||
public TurnBasedMinecraftMod(ModContainer container) {
|
||||
container.getEventBus().addListener(this::firstInit);
|
||||
container.getEventBus().addListener(this::secondInitClient);
|
||||
container.getEventBus().addListener(this::secondInitServer);
|
||||
container.getEventBus().addListener(this::registerNetwork);
|
||||
NeoForge.EVENT_BUS.register(this);
|
||||
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ClientConfig.CLIENT_SPEC);
|
||||
container.registerConfig(ModConfig.Type.CLIENT, ClientConfig.CLIENT_SPEC);
|
||||
}
|
||||
|
||||
private void registerNetwork(final RegisterPayloadHandlerEvent event) {
|
||||
final IPayloadRegistrar registrar = event.registrar(MODID);
|
||||
private void registerNetwork(final RegisterPayloadHandlersEvent event) {
|
||||
final PayloadRegistrar registrar = event.registrar(PROTOCOL_VERSION);
|
||||
|
||||
registrar.play(PacketBattleDecision.ID, PacketBattleDecision::new, handler -> handler
|
||||
.server(PacketBattleDecision.PayloadHandler.getInstance()::handleData));
|
||||
registrar.playToServer(PacketBattleDecision.TYPE, PacketBattleDecision.STREAM_CODEC, new PacketBattleDecision.PayloadHandler());
|
||||
|
||||
registrar.play(PacketBattleInfo.ID, PacketBattleInfo::new, handler -> handler
|
||||
.client(PacketBattleInfo.PayloadHandler.getInstance()::handleData));
|
||||
registrar.playToClient(PacketBattleInfo.TYPE, PacketBattleInfo.STREAM_CODEC, new PacketBattleInfo.PayloadHandler());
|
||||
|
||||
registrar.play(PacketBattleMessage.ID, PacketBattleMessage::new, handler -> handler
|
||||
.client(PacketBattleMessage.PayloadHandler.getInstance()::handleData));
|
||||
registrar.playToClient(PacketBattleMessage.TYPE, PacketBattleMessage.STREAM_CODEC, new PacketBattleMessage.PayloadHandler());
|
||||
|
||||
registrar.play(PacketBattleRequestInfo.ID, PacketBattleRequestInfo::new, handler -> handler
|
||||
.server(PacketBattleRequestInfo.PayloadHandler.getInstance()::handleData));
|
||||
registrar.playToServer(PacketBattleRequestInfo.TYPE, PacketBattleRequestInfo.STREAM_CODEC, new PacketBattleRequestInfo.PayloadHandler());
|
||||
|
||||
registrar.play(PacketEditingMessage.ID, PacketEditingMessage::new, handler -> handler
|
||||
.client(PacketEditingMessage.PayloadHandler.getInstance()::handleData));
|
||||
registrar.playToClient(PacketEditingMessage.TYPE, PacketEditingMessage.STREAM_CODEC, new PacketEditingMessage.PayloadHandler());
|
||||
|
||||
registrar.play(PacketGeneralMessage.ID, PacketGeneralMessage::new, handler -> handler
|
||||
.client(PacketGeneralMessage.PayloadHandler.getInstance()::handleData));
|
||||
registrar.playToClient(PacketGeneralMessage.TYPE, PacketGeneralMessage.STREAM_CODEC, new PacketGeneralMessage.PayloadHandler());
|
||||
|
||||
registrar.play(PacketClientGUI.ID, PacketClientGUI::new, handler -> handler
|
||||
.client(PacketClientGUI.PayloadHandler.getInstance()::handleData));
|
||||
registrar.playToClient(PacketClientGUI.TYPE, PacketClientGUI.STREAM_CODEC, new PacketClientGUI.PayloadHandler());
|
||||
|
||||
logger.debug("Register packets com_burnedkirby_turnbasedminecraft");
|
||||
}
|
||||
|
@ -158,7 +151,8 @@ public class TurnBasedMinecraftMod {
|
|||
proxy.getConfig().setBattleDisabledForAll(true);
|
||||
for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) {
|
||||
proxy.getConfig().addBattleIgnoringPlayer(player.getId());
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketGeneralMessage("OP disabled turn-based-combat for everyone"));
|
||||
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP disabled turn-based-combat for everyone"));
|
||||
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP disabled turn-based-combat for everyone"));
|
||||
}
|
||||
return 1;
|
||||
}));
|
||||
|
@ -179,7 +173,7 @@ public class TurnBasedMinecraftMod {
|
|||
proxy.getConfig().setBattleDisabledForAll(false);
|
||||
proxy.getConfig().clearBattleIgnoringPlayers();
|
||||
for (ServerPlayer player : c.getSource().getServer().getPlayerList().getPlayers()) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketGeneralMessage("OP enabled turn-based-combat for everyone"));
|
||||
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("OP enabled turn-based-combat for everyone"));
|
||||
}
|
||||
return 1;
|
||||
}));
|
||||
|
@ -190,7 +184,7 @@ public class TurnBasedMinecraftMod {
|
|||
.then(Commands.argument("targets", EntityArgument.players()).executes(c -> {
|
||||
for (ServerPlayer player : EntityArgument.getPlayers(c, "targets")) {
|
||||
proxy.getConfig().addBattleIgnoringPlayer(player.getId());
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketGeneralMessage("OP enabled turn-based-combat for you"));
|
||||
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);
|
||||
}
|
||||
return 1;
|
||||
|
@ -202,7 +196,7 @@ public class TurnBasedMinecraftMod {
|
|||
.then(Commands.argument("targets", EntityArgument.players()).executes(c -> {
|
||||
for (ServerPlayer player : EntityArgument.getPlayers(c, "targets")) {
|
||||
proxy.getConfig().removeBattleIgnoringPlayer(player.getId());
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketGeneralMessage("OP disabled turn-based-combat for you"));
|
||||
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);
|
||||
}
|
||||
return 1;
|
||||
|
@ -215,12 +209,12 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
} else {
|
||||
proxy.setEditingPlayer(player);
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
logger.info("Begin editing TBM Entity for player \"" + player.getDisplayName().getString() + "\" (\"" + c.getSource().getDisplayName() + "\")");
|
||||
}
|
||||
return 1;
|
||||
|
@ -231,14 +225,14 @@ public class TurnBasedMinecraftMod {
|
|||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
if (!proxy.getConfig().editEntityEntry(editingInfo.entityInfo)) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketGeneralMessage("An error occurred while attempting to save an entry to the config"));
|
||||
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("An error occurred while attempting to save an entry to the config"));
|
||||
proxy.removeEditingInfo(player.getId());
|
||||
} else {
|
||||
proxy.removeEditingInfo(player.getId());
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketGeneralMessage("Entity info saved in config and loaded."));
|
||||
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("Entity info saved in config and loaded."));
|
||||
}
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -251,7 +245,7 @@ public class TurnBasedMinecraftMod {
|
|||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null) {
|
||||
proxy.removeEditingInfo(player.getId());
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketGeneralMessage("Cancelled editing entry."));
|
||||
PacketDistributor.sendToPlayer(player, new PacketGeneralMessage("Cancelled editing entry."));
|
||||
}
|
||||
return 1;
|
||||
}))
|
||||
|
@ -263,11 +257,11 @@ public class TurnBasedMinecraftMod {
|
|||
Message exceptionMessage = new LiteralMessage("Invalid action for tbm-edit");
|
||||
throw new CommandSyntaxException(new SimpleCommandExceptionType(exceptionMessage), exceptionMessage);
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
} else {
|
||||
proxy.setEditingPlayer(player);
|
||||
proxy.getEditingInfo(player.getId()).isEditingCustomName = true;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
logger.info("Begin editing custom TBM Entity for player \"" + player.getDisplayName().getString() + "\" (\"" + c.getSource().getDisplayName() + "\")");
|
||||
}
|
||||
return 1;
|
||||
|
@ -277,9 +271,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -291,9 +285,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_IGNORE_BATTLE));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_IGNORE_BATTLE));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -307,9 +301,9 @@ public class TurnBasedMinecraftMod {
|
|||
boolean ignoreBattle = BoolArgumentType.getBool(c, "ignoreBattle");
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.ignoreBattle = ignoreBattle;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -322,9 +316,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_POWER));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_POWER));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -341,9 +335,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.attackPower = attackPower;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -356,9 +350,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_PROBABILITY));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_PROBABILITY));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -377,9 +371,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.attackProbability = attackProbability;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -392,9 +386,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_VARIANCE));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_VARIANCE));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -411,9 +405,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.attackVariance = attackVariance;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -426,9 +420,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -442,9 +436,9 @@ public class TurnBasedMinecraftMod {
|
|||
EntityInfo.Effect effect = EntityInfo.Effect.fromString(StringArgumentType.getString(c, "attackEffect"));
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.attackEffect = effect;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -457,9 +451,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT_PROBABILITY));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_ATTACK_EFFECT_PROBABILITY));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -478,9 +472,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.attackEffectProbability = attackEffectProbability;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -493,9 +487,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -512,9 +506,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.defenseDamage = defenseDamage;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -527,9 +521,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE_PROBABILITY));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DEFENSE_DAMAGE_PROBABILITY));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -548,9 +542,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.defenseDamageProbability = defenseDamageProbability;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -563,9 +557,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_EVASION));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_EVASION));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -584,9 +578,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.evasion = evasion;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -599,9 +593,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SPEED));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_SPEED));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -618,9 +612,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.speed = speed;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -633,9 +627,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_CATEGORY));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_CATEGORY));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -649,9 +643,9 @@ public class TurnBasedMinecraftMod {
|
|||
String category = StringArgumentType.getString(c, "category");
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.category = category;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -664,9 +658,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_ATTACK));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_ATTACK));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -685,9 +679,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.decisionAttack = decisionAttack;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -700,9 +694,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_DEFEND));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_DEFEND));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -721,9 +715,9 @@ public class TurnBasedMinecraftMod {
|
|||
}
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.decisionDefend = decisionDefend;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -736,9 +730,9 @@ public class TurnBasedMinecraftMod {
|
|||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
EditingInfo editingInfo = TurnBasedMinecraftMod.proxy.getEditingInfo(player.getId());
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_FLEE));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.EDIT_DECISION_FLEE));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -752,9 +746,9 @@ public class TurnBasedMinecraftMod {
|
|||
int decisionFlee = IntegerArgumentType.getInteger(c, "decisionFlee");
|
||||
if (editingInfo != null && !editingInfo.isPendingEntitySelection) {
|
||||
editingInfo.entityInfo.decisionFlee = decisionFlee;
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.PICK_EDIT, editingInfo.entityInfo));
|
||||
} else if (editingInfo != null) {
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.ATTACK_ENTITY));
|
||||
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);
|
||||
|
@ -770,7 +764,7 @@ public class TurnBasedMinecraftMod {
|
|||
.requires(c -> c.hasPermission(2))
|
||||
.executes(c -> {
|
||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketEditingMessage(PacketEditingMessage.Type.SERVER_EDIT));
|
||||
PacketDistributor.sendToPlayer(player, new PacketEditingMessage(PacketEditingMessage.Type.SERVER_EDIT));
|
||||
return 1;
|
||||
})
|
||||
.then(Commands.literal("leave_battle_cooldown").executes(c -> {
|
||||
|
@ -1682,7 +1676,7 @@ public class TurnBasedMinecraftMod {
|
|||
event.getDispatcher().register(
|
||||
Commands.literal("tbm-client-edit").executes(c -> {
|
||||
ServerPlayer player = c.getSource().getPlayerOrException();
|
||||
PacketDistributor.PLAYER.with(player).send(new PacketClientGUI());
|
||||
PacketDistributor.sendToPlayer(player, new PacketClientGUI(0));
|
||||
return 1;
|
||||
})
|
||||
);
|
||||
|
|
|
@ -4,10 +4,14 @@ import net.minecraft.core.registries.Registries;
|
|||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ArrowItem;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class Utility
|
||||
{
|
||||
public static float yawDirection(double posX, double posZ, double targetX, double targetZ)
|
||||
|
@ -59,7 +63,11 @@ public class Utility
|
|||
}
|
||||
|
||||
public static ResourceKey<Level> deserializeDimension(String dimString) {
|
||||
ResourceLocation dimRes = new ResourceLocation(dimString);
|
||||
ResourceLocation dimRes = ResourceLocation.parse(dimString);
|
||||
return ResourceKey.create(Registries.DIMENSION, dimRes);
|
||||
}
|
||||
|
||||
public static boolean isItemEdible(ItemStack itemStack, @Nullable LivingEntity entity) {
|
||||
return itemStack.getFoodProperties(entity) != null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,69 +2,49 @@ package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
|||
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.Battle;
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.Battle.Decision;
|
||||
|
||||
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.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.neoforged.neoforge.network.handling.PlayPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PacketBattleDecision implements CustomPacketPayload
|
||||
public record PacketBattleDecision(int battleID, int decision, int targetIDorItemID) implements CustomPacketPayload
|
||||
{
|
||||
public static final ResourceLocation ID = new ResourceLocation(TurnBasedMinecraftMod.MODID, "network_packetbattledecision");
|
||||
public static final CustomPacketPayload.Type<PacketBattleDecision> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetbattledecision"));
|
||||
|
||||
private int battleID;
|
||||
private Battle.Decision decision;
|
||||
private int targetIDOrItemID;
|
||||
|
||||
public PacketBattleDecision() {}
|
||||
|
||||
public PacketBattleDecision(int battleID, Battle.Decision decision, int targetIDOrItemID)
|
||||
{
|
||||
this.battleID = battleID;
|
||||
this.decision = decision;
|
||||
this.targetIDOrItemID = targetIDOrItemID;
|
||||
}
|
||||
|
||||
public PacketBattleDecision(final FriendlyByteBuf buf) {
|
||||
this.battleID = buf.readInt();
|
||||
this.decision = Decision.valueOf(buf.readInt());
|
||||
this.targetIDOrItemID = buf.readInt();
|
||||
}
|
||||
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
|
||||
);
|
||||
|
||||
@Override
|
||||
public void write(FriendlyByteBuf buf) {
|
||||
buf.writeInt(battleID);
|
||||
buf.writeInt(decision.getValue());
|
||||
buf.writeInt(targetIDOrItemID);
|
||||
public Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation id() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
public static class PayloadHandler {
|
||||
private static final PayloadHandler INSTANCE = new PayloadHandler();
|
||||
|
||||
public static PayloadHandler getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public void handleData(final PacketBattleDecision pkt, final PlayPayloadContext ctx) {
|
||||
ctx.workHandler().submitAsync(() -> {
|
||||
Battle b = TurnBasedMinecraftMod.proxy.getBattleManager().getBattleByID(pkt.battleID);
|
||||
if(b != null)
|
||||
{
|
||||
Player player = ctx.player().get();
|
||||
b.setDecision(player.getId(), pkt.decision, pkt.targetIDOrItemID);
|
||||
}
|
||||
}).exceptionally(e -> {
|
||||
ctx.packetHandler().disconnect(Component.literal("Exception handling PacketBattleDecision! " + e.getMessage()));
|
||||
return null;
|
||||
});
|
||||
public static class PayloadHandler implements IPayloadHandler<PacketBattleDecision> {
|
||||
@Override
|
||||
public void handle(final @NotNull PacketBattleDecision pkt, final IPayloadContext ctx) {
|
||||
ctx.enqueueWork(() -> {
|
||||
Battle b = TurnBasedMinecraftMod.proxy.getBattleManager().getBattleByID(pkt.battleID);
|
||||
if(b != null) {
|
||||
Player player = ctx.player();
|
||||
b.setDecision(player.getId(), Battle.Decision.valueOf(pkt.decision), pkt.targetIDorItemID);
|
||||
}
|
||||
}).exceptionally(e -> {
|
||||
ctx.disconnect(Component.literal("Exception handling PacketBattleDecision! " + e.getMessage()));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,91 +1,48 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.CommonProxy;
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.client.Minecraft;
|
||||
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.network.FriendlyByteBuf;
|
||||
import net.neoforged.neoforge.network.handling.PlayPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PacketBattleInfo implements CustomPacketPayload
|
||||
import java.util.Collection;
|
||||
|
||||
public record PacketBattleInfo(Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos, long maxDecisionNanos, boolean turnTimerEnabled) implements CustomPacketPayload
|
||||
{
|
||||
public static final ResourceLocation ID = new ResourceLocation(TurnBasedMinecraftMod.MODID, "network_packetbattleinfo");
|
||||
private Collection<Integer> sideA;
|
||||
private Collection<Integer> sideB;
|
||||
private long decisionNanos;
|
||||
public static final CustomPacketPayload.Type<PacketBattleInfo> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetbattleinfo"));
|
||||
|
||||
private long maxDecisionNanos;
|
||||
private boolean turnTimerEnabled;
|
||||
|
||||
public PacketBattleInfo()
|
||||
{
|
||||
sideA = new ArrayList<Integer>();
|
||||
sideB = new ArrayList<Integer>();
|
||||
decisionNanos = TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos();
|
||||
maxDecisionNanos = decisionNanos;
|
||||
turnTimerEnabled = false;
|
||||
}
|
||||
|
||||
public PacketBattleInfo(Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos, long maxDecisionNanos, boolean turnTimerEnabled)
|
||||
{
|
||||
this.sideA = sideA;
|
||||
this.sideB = sideB;
|
||||
this.decisionNanos = decisionNanos;
|
||||
this.maxDecisionNanos = maxDecisionNanos;
|
||||
this.turnTimerEnabled = turnTimerEnabled;
|
||||
}
|
||||
|
||||
public PacketBattleInfo(final FriendlyByteBuf buf) {
|
||||
int sideACount = buf.readInt();
|
||||
int sideBCount = buf.readInt();
|
||||
this.sideA = new ArrayList<>(sideACount);
|
||||
this.sideB = new ArrayList<>(sideBCount);
|
||||
for (int i = 0; i < sideACount; ++i) {
|
||||
this.sideA.add(buf.readInt());
|
||||
}
|
||||
for (int i = 0; i < sideBCount; ++i) {
|
||||
this.sideB.add(buf.readInt());
|
||||
}
|
||||
this.decisionNanos = buf.readLong();
|
||||
this.maxDecisionNanos = buf.readLong();
|
||||
this.turnTimerEnabled = buf.readBoolean();
|
||||
}
|
||||
public static final StreamCodec<ByteBuf, PacketBattleInfo> STREAM_CODEC = StreamCodec.composite(
|
||||
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
|
||||
);
|
||||
|
||||
@Override
|
||||
public void write(FriendlyByteBuf buf) {
|
||||
buf.writeInt(sideA.size());
|
||||
buf.writeInt(sideB.size());
|
||||
for(Integer id : sideA) {
|
||||
buf.writeInt(id);
|
||||
}
|
||||
for(Integer id : sideB) {
|
||||
buf.writeInt(id);
|
||||
}
|
||||
buf.writeLong(decisionNanos);
|
||||
buf.writeLong(maxDecisionNanos);
|
||||
buf.writeBoolean(turnTimerEnabled);
|
||||
public Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation id() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
public static class PayloadHandler {
|
||||
private static final PayloadHandler INSTANCE = new PayloadHandler();
|
||||
|
||||
public static PayloadHandler getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public void handleData(final PacketBattleInfo pkt, final PlayPayloadContext ctx) {
|
||||
ctx.workHandler().submitAsync(() -> {
|
||||
public static class PayloadHandler implements IPayloadHandler<PacketBattleInfo> {
|
||||
@Override
|
||||
public void handle(final @NotNull PacketBattleInfo pkt, final IPayloadContext ctx) {
|
||||
ctx.enqueueWork(() -> {
|
||||
if(TurnBasedMinecraftMod.proxy.getLocalBattle() == null)
|
||||
{
|
||||
return;
|
||||
|
@ -112,7 +69,7 @@ public class PacketBattleInfo implements CustomPacketPayload
|
|||
TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerEnabled(pkt.turnTimerEnabled);
|
||||
TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerMax((int)(pkt.maxDecisionNanos / 1000000000L));
|
||||
}).exceptionally(e -> {
|
||||
ctx.packetHandler().disconnect(Component.literal("Exception handling PacketBattleInfo! " + e.getMessage()));
|
||||
ctx.disconnect(Component.literal("Exception handling PacketBattleInfo! " + e.getMessage()));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,37 +1,46 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.Utility;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
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.ResourceLocation;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.neoforged.fml.loading.FMLEnvironment;
|
||||
import net.neoforged.neoforge.network.handling.PlayPayloadContext;
|
||||
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.Map;
|
||||
|
||||
public class PacketBattleMessage implements CustomPacketPayload
|
||||
{
|
||||
public static final ResourceLocation ID = new ResourceLocation(TurnBasedMinecraftMod.MODID, "network_packetbattlemessage");
|
||||
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 void write(FriendlyByteBuf buf) {
|
||||
buf.writeInt(messageType.getValue());
|
||||
buf.writeInt(entityIDFrom);
|
||||
buf.writeInt(entityIDTo);
|
||||
buf.writeUtf(Utility.serializeDimension(dimension));
|
||||
buf.writeInt(amount);
|
||||
buf.writeUtf(custom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation id() {
|
||||
return ID;
|
||||
public Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
public enum MessageType
|
||||
|
@ -151,6 +160,11 @@ public class PacketBattleMessage implements CustomPacketPayload
|
|||
public ResourceKey<Level> getDimension() {
|
||||
return dimension;
|
||||
}
|
||||
|
||||
public String getDimensionSerialized() {
|
||||
return Utility.serializeDimension(dimension);
|
||||
}
|
||||
|
||||
public PacketBattleMessage() { custom = new String(); }
|
||||
|
||||
public PacketBattleMessage(MessageType messageType, int entityIDFrom, int entityIDTo, ResourceKey<Level> dimension, int amount)
|
||||
|
@ -173,29 +187,15 @@ public class PacketBattleMessage implements CustomPacketPayload
|
|||
this.custom = custom;
|
||||
}
|
||||
|
||||
public PacketBattleMessage(final FriendlyByteBuf buf) {
|
||||
this.messageType = MessageType.valueOf(buf.readInt());
|
||||
this.entityIDFrom = buf.readInt();
|
||||
this.entityIDTo = buf.readInt();
|
||||
this.dimension = Utility.deserializeDimension(buf.readUtf());
|
||||
this.amount = buf.readInt();
|
||||
this.custom = buf.readUtf();
|
||||
}
|
||||
|
||||
public static class PayloadHandler {
|
||||
private static final PayloadHandler INSTANCE = new PayloadHandler();
|
||||
|
||||
public static PayloadHandler getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public void handleData(final PacketBattleMessage pkt, final PlayPayloadContext ctx) {
|
||||
ctx.workHandler().submitAsync(() -> {
|
||||
public static class PayloadHandler implements IPayloadHandler<PacketBattleMessage> {
|
||||
@Override
|
||||
public void handle(final @NotNull PacketBattleMessage pkt, final IPayloadContext ctx) {
|
||||
ctx.enqueueWork(() -> {
|
||||
if (FMLEnvironment.dist.isClient()) {
|
||||
TurnBasedMinecraftMod.proxy.handlePacket(pkt, ctx);
|
||||
}
|
||||
}).exceptionally(e -> {
|
||||
ctx.packetHandler().disconnect(Component.literal("Exception handling PacketBattleMessage! " + e.getMessage()));
|
||||
ctx.disconnect(Component.literal("Exception handling PacketBattleMessage! " + e.getMessage()));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,61 +2,52 @@ package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
|||
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.Battle;
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
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.neoforge.network.handling.PlayPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PacketBattleRequestInfo implements CustomPacketPayload
|
||||
public record PacketBattleRequestInfo(int battleID) implements CustomPacketPayload
|
||||
{
|
||||
public static final ResourceLocation ID = new ResourceLocation(TurnBasedMinecraftMod.MODID, "network_packetbattlerequestinfo");
|
||||
public static final CustomPacketPayload.Type<PacketBattleRequestInfo> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetbattlerequestinfo"));
|
||||
|
||||
private int battleID;
|
||||
|
||||
public PacketBattleRequestInfo() {}
|
||||
public static final StreamCodec<ByteBuf, PacketBattleRequestInfo> STREAM_CODEC = StreamCodec.composite(
|
||||
ByteBufCodecs.INT,
|
||||
PacketBattleRequestInfo::battleID,
|
||||
PacketBattleRequestInfo::new
|
||||
);
|
||||
|
||||
public PacketBattleRequestInfo(int battleID)
|
||||
{
|
||||
this.battleID = battleID;
|
||||
}
|
||||
|
||||
public PacketBattleRequestInfo(final FriendlyByteBuf buf) {
|
||||
battleID = buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(FriendlyByteBuf buf) {
|
||||
buf.writeInt(battleID);
|
||||
public Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation id() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
public static class PayloadHandler {
|
||||
private static final PayloadHandler INSTANCE = new PayloadHandler();
|
||||
|
||||
public static PayloadHandler getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public void handleData(final PacketBattleRequestInfo pkt, final PlayPayloadContext ctx) {
|
||||
ctx.workHandler().submitAsync(() -> {
|
||||
public static class PayloadHandler implements IPayloadHandler<PacketBattleRequestInfo> {
|
||||
@Override
|
||||
public void handle(final @NotNull PacketBattleRequestInfo pkt, final IPayloadContext ctx) {
|
||||
ctx.enqueueWork(() -> {
|
||||
Battle b = TurnBasedMinecraftMod.proxy.getBattleManager().getBattleByID(pkt.battleID);
|
||||
if(b == null) {
|
||||
return;
|
||||
}
|
||||
ctx.replyHandler().send(new PacketBattleInfo(
|
||||
b.getSideAIDs(),
|
||||
b.getSideBIDs(),
|
||||
b.getTimerNanos(),
|
||||
TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(),
|
||||
!TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever()));
|
||||
ctx.reply(new PacketBattleInfo(
|
||||
b.getSideAIDs(),
|
||||
b.getSideBIDs(),
|
||||
b.getTimerNanos(),
|
||||
TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(),
|
||||
!TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever()));
|
||||
}).exceptionally(e -> {
|
||||
ctx.packetHandler().disconnect(Component.literal("Exception handling PacketBattleRequestInfo! " + e.getMessage()));
|
||||
ctx.disconnect(Component.literal("Exception handling PacketBattleRequestInfo! " + e.getMessage()));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,50 +1,40 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||
|
||||
import com.burnedkirby.TurnBasedMinecraft.client.ClientConfig;
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
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.PlayPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PacketClientGUI implements CustomPacketPayload {
|
||||
public static final ResourceLocation ID = new ResourceLocation(TurnBasedMinecraftMod.MODID, "network_packetclientgui");
|
||||
public record PacketClientGUI(int reserved) implements CustomPacketPayload {
|
||||
public static final CustomPacketPayload.Type<PacketClientGUI> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetclientgui"));
|
||||
|
||||
int reserved;
|
||||
|
||||
public PacketClientGUI() {
|
||||
reserved = 0;
|
||||
}
|
||||
|
||||
public PacketClientGUI(FriendlyByteBuf buf) {
|
||||
reserved = buf.readInt();
|
||||
}
|
||||
public static final StreamCodec<ByteBuf, PacketClientGUI> STREAM_CODEC = StreamCodec.composite(
|
||||
ByteBufCodecs.VAR_INT,
|
||||
PacketClientGUI::reserved,
|
||||
PacketClientGUI::new
|
||||
);
|
||||
|
||||
@Override
|
||||
public void write(FriendlyByteBuf buf) {
|
||||
buf.writeInt(0);
|
||||
public Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation id() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
public static class PayloadHandler {
|
||||
private static final PayloadHandler INSTANCE = new PayloadHandler();
|
||||
|
||||
public static PayloadHandler getInstance() { return INSTANCE; }
|
||||
|
||||
public void handleData(final PacketClientGUI pkt, final PlayPayloadContext ctx) {
|
||||
ctx.workHandler().submitAsync(() -> {
|
||||
public static class PayloadHandler implements IPayloadHandler<PacketClientGUI> {
|
||||
@Override
|
||||
public void handle(final @NotNull PacketClientGUI pkt, final IPayloadContext ctx) {
|
||||
ctx.enqueueWork(() -> {
|
||||
if (FMLEnvironment.dist.isClient()) {
|
||||
Minecraft.getInstance().setScreen(new ClientConfig.CliConfGui());
|
||||
TurnBasedMinecraftMod.proxy.showClientConfigGui();
|
||||
}
|
||||
}).exceptionally(e -> {
|
||||
ctx.packetHandler().disconnect(Component.literal("Exception handling PacketClientGUI! " + e.getMessage()));
|
||||
ctx.disconnect(Component.literal("Exception handling PacketClientGUI! " + e.getMessage()));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,48 +2,36 @@ package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
|||
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.EntityInfo;
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
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.PlayPayloadContext;
|
||||
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.Map;
|
||||
|
||||
public class PacketEditingMessage implements CustomPacketPayload
|
||||
{
|
||||
public static final ResourceLocation ID = new ResourceLocation(TurnBasedMinecraftMod.MODID, "network_packeteditingmessage");
|
||||
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 void write(FriendlyByteBuf buf) {
|
||||
buf.writeInt(type.getValue());
|
||||
if(entityInfo.classType != null) {
|
||||
buf.writeUtf(entityInfo.classType.getName());
|
||||
} else {
|
||||
buf.writeUtf("unknown");
|
||||
}
|
||||
buf.writeBoolean(entityInfo.ignoreBattle);
|
||||
buf.writeInt(entityInfo.attackPower);
|
||||
buf.writeInt(entityInfo.attackProbability);
|
||||
buf.writeInt(entityInfo.attackVariance);
|
||||
buf.writeUtf(entityInfo.attackEffect.toString());
|
||||
buf.writeInt(entityInfo.attackEffectProbability);
|
||||
buf.writeInt(entityInfo.defenseDamage);
|
||||
buf.writeInt(entityInfo.defenseDamageProbability);
|
||||
buf.writeInt(entityInfo.evasion);
|
||||
buf.writeInt(entityInfo.speed);
|
||||
buf.writeUtf(entityInfo.category);
|
||||
buf.writeInt(entityInfo.decisionAttack);
|
||||
buf.writeInt(entityInfo.decisionDefend);
|
||||
buf.writeInt(entityInfo.decisionFlee);
|
||||
buf.writeUtf(entityInfo.customName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation id() {
|
||||
return ID;
|
||||
public CustomPacketPayload.Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
public enum Type
|
||||
|
@ -144,20 +132,15 @@ public class PacketEditingMessage implements CustomPacketPayload
|
|||
this.entityInfo.customName = buf.readUtf();
|
||||
}
|
||||
|
||||
public static class PayloadHandler {
|
||||
private static final PayloadHandler INSTANCE = new PayloadHandler();
|
||||
|
||||
public static PayloadHandler getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public void handleData(final PacketEditingMessage pkt, final PlayPayloadContext ctx) {
|
||||
ctx.workHandler().submitAsync(() -> {
|
||||
public static class PayloadHandler implements IPayloadHandler<PacketEditingMessage> {
|
||||
@Override
|
||||
public void handle(final @NotNull PacketEditingMessage pkt, final IPayloadContext ctx) {
|
||||
ctx.enqueueWork(() -> {
|
||||
if (FMLEnvironment.dist.isClient()) {
|
||||
TurnBasedMinecraftMod.proxy.handlePacket(pkt, ctx);
|
||||
}
|
||||
}).exceptionally(e -> {
|
||||
ctx.packetHandler().disconnect(Component.literal("Exception handling PacketEditingMessage! " + e.getMessage()));
|
||||
ctx.disconnect(Component.literal("Exception handling PacketEditingMessage! " + e.getMessage()));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,62 +1,50 @@
|
|||
package com.burnedkirby.TurnBasedMinecraft.common.networking;
|
||||
|
||||
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
||||
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
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.PlayPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||
import net.neoforged.neoforge.network.handling.IPayloadHandler;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PacketGeneralMessage implements CustomPacketPayload
|
||||
public record PacketGeneralMessage(String message) implements CustomPacketPayload
|
||||
{
|
||||
public static final ResourceLocation ID = new ResourceLocation(TurnBasedMinecraftMod.MODID, "network_packetgeneralmessage");
|
||||
public static final CustomPacketPayload.Type<PacketGeneralMessage> TYPE = new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(TurnBasedMinecraftMod.MODID, "network_packetgeneralmessage"));
|
||||
|
||||
String message;
|
||||
public static final StreamCodec<ByteBuf, PacketGeneralMessage> STREAM_CODEC = StreamCodec.composite(
|
||||
ByteBufCodecs.STRING_UTF8,
|
||||
PacketGeneralMessage::message,
|
||||
PacketGeneralMessage::new
|
||||
);
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public PacketGeneralMessage()
|
||||
{
|
||||
message = new String();
|
||||
}
|
||||
|
||||
public PacketGeneralMessage(String message)
|
||||
{
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public PacketGeneralMessage(final FriendlyByteBuf buf) {
|
||||
this.message = buf.readUtf();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(FriendlyByteBuf buf) {
|
||||
buf.writeUtf(message);
|
||||
public Type<? extends CustomPacketPayload> type() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation id() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
public static class PayloadHandler {
|
||||
private static final PayloadHandler INSTANCE = new PayloadHandler();
|
||||
|
||||
public static PayloadHandler getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public void handleData(final PacketGeneralMessage pkt, final PlayPayloadContext ctx) {
|
||||
ctx.workHandler().submitAsync(() -> {
|
||||
public static class PayloadHandler implements IPayloadHandler<PacketGeneralMessage> {
|
||||
@Override
|
||||
public void handle(final @NotNull PacketGeneralMessage pkt, final IPayloadContext ctx) {
|
||||
ctx.enqueueWork(() -> {
|
||||
if (FMLEnvironment.dist.isClient()) {
|
||||
TurnBasedMinecraftMod.proxy.handlePacket(pkt, ctx);
|
||||
}
|
||||
}).exceptionally(e -> {
|
||||
ctx.packetHandler().disconnect(Component.literal("Exception handling PacketGeneralMessage! " + e.getMessage()));
|
||||
ctx.disconnect(Component.literal("Exception handling PacketGeneralMessage! " + e.getMessage()));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,54 +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="${mod_license}"
|
||||
# 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
|
||||
# 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='''${mod_description}'''
|
||||
|
||||
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="neoforge" #mandatory
|
||||
# Does this dependency have to exist - if not, ordering below must be specified
|
||||
type="required" #mandatory
|
||||
# The version range of the dependency
|
||||
versionRange="${neo_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"
|
||||
type="required"
|
||||
versionRange="${minecraft_version_range}"
|
||||
ordering="NONE"
|
||||
side="BOTH"
|
93
src/main/templates/META-INF/neoforge.mods.toml
Normal file
93
src/main/templates/META-INF/neoforge.mods.toml
Normal file
|
@ -0,0 +1,93 @@
|
|||
# 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
|
||||
|
||||
# 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,)"
|
Loading…
Reference in a new issue