从1.21.4迁移更新到1.21.5版本

改了些细节,如紫水晶剪刀使用动画显示
This commit is contained in:
叁玖领域 2025-04-10 11:18:12 +08:00
parent c3bff64c61
commit 416932bb7a
88 changed files with 2063 additions and 6 deletions

5
.gitattributes vendored Normal file
View File

@ -0,0 +1,5 @@
# Disable autocrlf on generated files, they always generate with LF
# Add any extra files or paths here to make git stop saying they
# are changed when only line endings change.
src/generated/**/.cache/cache text eol=lf
src/generated/**/*.json text eol=lf

25
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Setup JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Build with Gradle
run: ./gradlew build

26
.gitignore vendored Normal file
View File

@ -0,0 +1,26 @@
# eclipse
bin
*.launch
.settings
.metadata
.classpath
.project
# idea
out
*.ipr
*.iws
*.iml
.idea
# gradle
build
.gradle
# other
eclipse
run
runs
run-data
repo

25
README.md Normal file
View File

@ -0,0 +1,25 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Installation information
=======
This template repository can be directly cloned to get you started with a new
mod. Simply create a new repository cloned from this one, by following the
instructions provided by [GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template).
Once you have your clone, simply open the repository in the IDE of your choice. The usual recommendation for an IDE is either IntelliJ IDEA or Eclipse.
If at any point you are missing libraries in your IDE, or you've run into problems you can
run `gradlew --refresh-dependencies` to refresh the local cache. `gradlew clean` to reset everything
{this does not affect your code} and then start the process again.
Mapping Names:
============
By default, the MDK is configured to use the official mapping names from Mojang for methods and fields
in the Minecraft codebase. These names are covered by a specific license. All modders should be aware of this
license. For the latest license text, refer to the mapping file itself, or the reference copy here:
https://github.com/NeoForged/NeoForm/blob/main/Mojang.md
Additional Resources:
==========
Community Documentation: https://docs.neoforged.net/
NeoForged Discord: https://discord.neoforged.net/

24
TEMPLATE_LICENSE.txt Normal file
View File

@ -0,0 +1,24 @@
MIT License
Copyright (c) 2023 NeoForged project
This license applies to the template files as supplied by github.com/NeoForged/MDK
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

173
build.gradle Normal file
View File

@ -0,0 +1,173 @@
plugins {
id 'java-library'
id 'maven-publish'
id 'net.neoforged.gradle.userdev' version '7.0.184'
}
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
repositories {
mavenLocal()
}
base {
archivesName = mod_id
}
// Mojang ships Java 21 to end users starting in 1.20.5, so mods should target Java 21.
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
//minecraft.accessTransformers.file rootProject.file('src/main/resources/META-INF/accesstransformer.cfg')
//minecraft.accessTransformers.entry public net.minecraft.client.Minecraft textureManager # textureManager
// 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
}
client {
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
}
server {
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
argument '--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 'neoforge.enabledGameTestNamespaces', project.mod_id
}
clientData {
// example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it
// workingDirectory project.file('run-data')
systemProperty('gradle.task', 'runData')
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
arguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
}
}
// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }
// 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
}
minecraft {
accessTransformers.file("src/main/resources/META-INF/accesstransformer.cfg")
}
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
}
// 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 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
]
inputs.properties replaceProperties
filesMatching(['META-INF/neoforge.mods.toml']) {
expand replaceProperties
}
}
// Example configuration to allow publishing using the maven-publish plugin
publishing {
publications {
register('mavenJava', MavenPublication) {
from components.java
}
}
repositories {
maven {
url "file://${project.projectDir}/repo"
}
}
}
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
}
}

45
gradle.properties Normal file
View File

@ -0,0 +1,45 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=false
org.gradle.configuration-cache=false
#read more on this at https://github.com/neoforged/NeoGradle/blob/NG_7.0/README.md#apply-parchment-mappings
# you can also find the latest versions at: https://parchmentmc.org/docs/getting-started
neogradle.subsystems.parchment.minecraftVersion=1.21.4
neogradle.subsystems.parchment.mappingsVersion=2025.03.23
# Environment Properties
# You can find the latest versions here: https://projects.neoforged.net/neoforged/neoforge
# The Minecraft version must agree with the Neo version to get a valid artifact
minecraft_version=1.21.5
# 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.21.5]
# The Neo version must agree with the Minecraft version to get a valid artifact
neo_version=21.5.30-beta
# The Neo version range can use any version of Neo as bounds
neo_version_range=[21.5.30-beta,)
# The loader version range can only use the major version of FML as bounds
loader_version_range=[1,)
## Mod Properties
# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
# Must match the String constant located in the main mod class annotated with @Mod.
mod_id=leashedplayer
# The human-readable display name for the mod.
mod_name=Leashed Player
# 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.21.5_0.0.4.0.4.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
mod_group_id=com.r3944realms.leashedplayer
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
mod_authors=r3944Realms
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
mod_description= Player but can be leashed

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.12-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

252
gradlew vendored Normal file
View File

@ -0,0 +1,252 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# 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/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# 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
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
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.
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=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# 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" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

94
gradlew.bat vendored Normal file
View File

@ -0,0 +1,94 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
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
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
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
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

11
settings.gradle Normal file
View File

@ -0,0 +1,11 @@
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
maven { url = 'https://maven.neoforged.net/releases' }
}
}
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0'
}

View File

@ -0,0 +1,3 @@
// 1.21.5 2025-03-29T16:40:03.0405054 Registries
f2536789df7f06362718a59ba4a96890e2f9b8aa data/leashedplayer/jukebox_song/what_does_the_fox_say.json
84106976f4f71012fc5bd1784303a0d135623c77 data/leashedplayer/painting_variant/group_photo.json

View File

@ -0,0 +1,8 @@
// 1.21.5 2025-03-29T16:40:02.9875592 Tags for minecraft:item mod id leashedplayer
84707301f1fe2490a899deb51302d413cfff5a89 data/c/tags/item/tools/shear.json
bde6ca31173d1f22d5f6fe355dc90c9faa35b239 data/minecraft/tags/item/amethyst_tool_materials.json
63e4ad58dc8397171f84264d53dfe4fb503c7b1e data/minecraft/tags/item/arrows.json
84707301f1fe2490a899deb51302d413cfff5a89 data/minecraft/tags/item/enchantable/durability.json
84707301f1fe2490a899deb51302d413cfff5a89 data/minecraft/tags/item/enchantable/mining.json
84707301f1fe2490a899deb51302d413cfff5a89 data/minecraft/tags/item/enchantable/vanishing.json
5cf114c796db4c2235df11ee7f656bba09d72a7a data/minecraft/tags/item/head_armor.json

View File

@ -0,0 +1,2 @@
// 1.21.5 2025-03-29T16:40:03.0435015 Languages: en_us for mod: leashedplayer
2c7f061dfc276db13135adce15c68cfc145ccf37 assets/leashedplayer/lang/en_us.json

View File

@ -0,0 +1 @@
// 1.21.5 2025-03-29T16:40:03.0112992 Tags for minecraft:block mod id leashedplayer

View File

@ -0,0 +1,2 @@
// 1.21.5 2025-03-29T16:40:03.0510463 Sound Definitions
81f1cc9f404c2670bf7cc679107177ffb0b48c77 assets/leashedplayer/sounds.json

View File

@ -0,0 +1,2 @@
// 1.21.5 2025-03-29T16:40:03.0163693 Tags for minecraft:painting_variant mod id leashedplayer
e081a053d7c2f2d3238cf38436185ef23d234505 data/minecraft/tags/painting_variant/placeable.json

View File

@ -0,0 +1,2 @@
// 1.21.5 2025-03-29T16:40:02.9987109 Languages: lzh for mod: leashedplayer
7536eb6d1c69695c06ebb9da5b57a391174b02cb assets/leashedplayer/lang/lzh.json

View File

@ -0,0 +1,2 @@
// 1.21.5 2025-03-29T16:40:03.0306291 Languages: zh_cn for mod: leashedplayer
f7bcf89907a8ca5f575e4b519d53cd0628bb1e6b assets/leashedplayer/lang/zh_cn.json

View File

@ -0,0 +1,11 @@
// 1.21.5 2025-03-29T16:40:03.0040344 LeashedPlayer Recipes
13ebe9a580731296eb10c05d1844657d58e07cc1 data/leashedplayer/advancement/recipes/misc/amethyst_shears.json
1b45d1ad8dc73f1787c97777ad13d9771c9e0ad1 data/leashedplayer/advancement/recipes/misc/leash_rope_arrow.json
a26d63c2360b32df0b636a5dec96dd919139e022 data/leashedplayer/advancement/recipes/misc/spectral_leash_rope_arrow.json
af1f65626735f1001426e0984217139e15649725 data/leashedplayer/recipe/amethyst_shears.json
db45be6e2bbddc49e60a6c1b12e2ef44afad30d8 data/leashedplayer/recipe/leash_rope_arrow.json
db37bd69a700eaae69bff48c77ed49ca55fb9bf1 data/leashedplayer/recipe/spectral_leash_rope_arrow.json
935d8732ca65dd73e4668a197cda60480053fbcd data/minecraft/advancement/recipes/misc/leash_rope_arrow_shape.json
5811048f18527a45b36b8b927de4e5d7c12a75eb data/minecraft/recipe/leash_rope_arrow_shape.json
4dffdb7a2a537b409d1ec2630d9b74300649e1d8 data/minecraft/recipe/tipped_leash_rope_arrow_a.json
7810cb5e8c165f479fc6cd030bd1cf7bc508993b data/minecraft/recipe/tipped_leash_rope_arrow_b.json

View File

@ -0,0 +1,25 @@
// 1.21.5 2025-03-29T16:40:03.0481 Model Definitions - leashedplayer
d213db38f45b911f2023c83e15b018371a630ae0 assets/leashedplayer/items/amethyst_shears.json
bc53c9feb22db83882974d60456bef0d3ef3ef5e assets/leashedplayer/items/fabric.json
e4e426067245e93d282a3d953c420fca04c23f3d assets/leashedplayer/items/leash_rope_arrow.json
6151e1b11ec884d511b2fd595e39c9f12674e824 assets/leashedplayer/items/spectral_leash_rope_arrow.json
1b914911c9077563701e9ac4b7f8c425f6eff4ee assets/leashedplayer/items/tipped_leash_rope_arrow.json
766c487fbf0c59e9045eeaf81daf583eb679b0e1 assets/leashedplayer/models/item/amethyst_shears.json
5846df9d85726428905701120ef34c9324c20faf assets/leashedplayer/models/item/bow_lra_pulling_0.json
845a7316b86e26f88c6932d4ef2656126503727a assets/leashedplayer/models/item/bow_lra_pulling_1.json
5bd1f9f28b91005c587f1c38fb77cd19b59495e3 assets/leashedplayer/models/item/bow_lra_pulling_2.json
83946f4d60d0fb1758d6553c36330506c8e48ada assets/leashedplayer/models/item/crossbow_leash_rope_arrow.json
bb0d76077719c83c8a8bd4346a24ea1766175125 assets/leashedplayer/models/item/fabric.json
114d3cc5832ef047403114504483c6f3ea07e77c assets/leashedplayer/models/item/leash_rope_arrow.json
c4748995a5fe190d20e3bd16f4b2244164ec0f83 assets/leashedplayer/models/item/spectral_leash_rope_arrow.json
ba065b1a88d82f95e10d026bf7bfdac7923de24c assets/leashedplayer/models/item/tipped_leash_rope_arrow.json
fe3d4b8fd83f9ba4e2a951ec2e23ea98a347c2cc assets/minecraft/items/bow.json
12be767d961ae273ae0968ad06f022b57afbb0b0 assets/minecraft/items/crossbow.json
08270cb07bcffbeedc5c5eeb4904c4f852a8741b assets/minecraft/models/item/bow_pulling_0.json
ceb850b6b4a0650ee3d1529e67ab8e7447b0319f assets/minecraft/models/item/bow_pulling_1.json
65c4490152c9f65bc766d686b38fffdfeb7a0873 assets/minecraft/models/item/bow_pulling_2.json
3f5af50f9ebf07f64949415b4d3a3b6ec549f93b assets/minecraft/models/item/crossbow_arrow.json
b98e781a6782a959e897e7db93ef9e9bed6ee72f assets/minecraft/models/item/crossbow_firework.json
967e2cb3fce436263b91050e448394e460d1596d assets/minecraft/models/item/crossbow_pulling_0.json
1b3d6214059e250dda7aba60632cdc5a315a6146 assets/minecraft/models/item/crossbow_pulling_1.json
98bcc5449dcc6b30ae1e0558906c2b3ce5d32da0 assets/minecraft/models/item/crossbow_pulling_2.json

View File

@ -0,0 +1,12 @@
// 1.21.5 2025-03-30T19:34:30.4253532 Advancements
4d97adba079f1966090a52443bb439319f550680 data/leashedplayer/advancement/advancement_leash_arrow.json
f16184b81ea35a0fbd8f2c49b085a96c32818c69 data/leashedplayer/advancement/dog_running_player.json
bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_arrow.json
29911bbed5a1b7ede2b08d82e6716cd9463bc061 data/leashedplayer/advancement/leashed_friend.json
25f6b476b194a27c0fe0e75d74ac3a7ff4054789 data/leashedplayer/advancement/leashed_self.json
a69a455855fb6dd8a8ac131a55099de5de45d7c4 data/leashedplayer/advancement/leash_arrow.json
d109d59adbfa6efdefb4003623c9fb4950f2956b data/leashedplayer/advancement/leash_start.json
2d8bce7fd078f9cc6b73b77f2fbab30e6cc197f4 data/leashedplayer/advancement/leash_terminator.json
4e567c22e18462ad367fe1817140d1ffa13a6294 data/leashedplayer/advancement/neo_fox.json
4b0bcf6b372f52e954edcef37a6b04435ec2b4e8 data/leashedplayer/advancement/no_leash.json
72f40eb5816d1e8c296bdf4df6b599c15ba7e7e9 data/leashedplayer/advancement/tipped_leash_arrow.json

View File

@ -0,0 +1,2 @@
// 1.21.5 2025-03-29T16:40:03.0241113 Languages: zh_tw for mod: leashedplayer
c23825af72a73bc54b72ad3817acb5a03d299375 assets/leashedplayer/lang/zh_tw.json

View File

@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "leashedplayer:item/amethyst_shears"
}
}

View File

@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "leashedplayer:item/fabric"
}
}

View File

@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "leashedplayer:item/leash_rope_arrow"
}
}

View File

@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "leashedplayer:item/spectral_leash_rope_arrow"
}
}

View File

@ -0,0 +1,12 @@
{
"model": {
"type": "minecraft:model",
"model": "leashedplayer:item/tipped_leash_rope_arrow",
"tints": [
{
"type": "minecraft:potion",
"default": -13083194
}
]
}
}

View File

@ -0,0 +1,88 @@
{
"advancement.leashedplayer.advancement_leash_arrow": "More advanced flash arrow with a Tether?",
"advancement.leashedplayer.advancement_leash_arrow.desc": "Well, apart from glowing, there doesn't seem to be any other difference",
"advancement.leashedplayer.dog_running_player": "It's Walking human time.",
"advancement.leashedplayer.dog_running_player.desc": "In the park where dogs are not allowed to be walked, the dog decided to walk the human instead",
"advancement.leashedplayer.follow_arrow": "Launch!!!",
"advancement.leashedplayer.follow_arrow.desc": "Mc, what are you talking about in physics?",
"advancement.leashedplayer.leash_arrow": "Arrow with a Tether?",
"advancement.leashedplayer.leash_arrow.desc": "Maybe you can using it to shoot some mob?",
"advancement.leashedplayer.leash_start": "The Power of Traction",
"advancement.leashedplayer.leash_start.desc": "Journey to becoming a Leash Expert",
"advancement.leashedplayer.leash_terminator": "The Lead Terminator",
"advancement.leashedplayer.leash_terminator.desc": "I am Lead Terminator!",
"advancement.leashedplayer.leashed_friend": "Be bound by Rope",
"advancement.leashedplayer.leashed_friend.desc": "Be Bond by player with lead",
"advancement.leashedplayer.leashed_self": "Stable Connection",
"advancement.leashedplayer.leashed_self.desc": "“Restrain oneself with a rope",
"advancement.leashedplayer.neo_fox": "NEOFORGE!",
"advancement.leashedplayer.neo_fox.desc": "It seems can be equipped.",
"advancement.leashedplayer.no_leash": "Don't tie me up",
"advancement.leashedplayer.no_leash.desc": "You cannot be leashed by ANY",
"advancement.leashedplayer.tipped_leash_arrow": "God said there should be more arrows",
"advancement.leashedplayer.tipped_leash_arrow.desc": "A dazzling array of Leash Rope arrows",
"creativetab.leashedplayer.leashedplayer_tab": "Leashed Player",
"effect.leashedplayer.no_leash": "No Leash",
"entity.leashedplayer.kid_player": "Kid",
"entity.leashedplayer.leash_rope_arrow": "Leash Rope Arrow",
"entity.leashedplayer.nestle_rope_arrow": "Nestle Rope Arrow",
"entity.leashedplayer.spectral_leash_rope_arrow": "Spectral Leash Rope Arrow",
"gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "Create Leash Fence Knot Entity if absent",
"gamerule.LP.CreateLeashFenceKnotEntityIfAbsent.description": "Create LeashKnot Entity if it's absent on fence",
"gamerule.LP.KeepLeashNotDropTime": "Keep leash alive Time",
"gamerule.LP.KeepLeashNotDropTime.description": "The time of Keep new leash which has far distance alive (Tick)",
"gamerule.LP.TeleportWithLeashedPlayers": "Teleport leashed player with player holder",
"gamerule.LP.TeleportWithLeashedPlayers.description": "Holder will teleport with their leashed players ",
"item.leash_rope_arrow.desc.1": "§7This arrow will carry the owner along with its flight:",
"item.leash_rope_arrow.desc.2": "§c1.§r If it hits a fence or an entity, it will leash the owner to it and drop as a normal arrow.",
"item.leash_rope_arrow.desc.3": "§c2.§r Crouching near the arrow allows for faster retrieval. If the arrow's owner is not the player, the owner will be leashed to the player who picks it up.",
"item.leash_rope_arrow.desc.4": "§c3.§r When fired from its launcher, the first entity hit will become the arrow's owner and will fly along with it.",
"item.leash_rope_arrow.desc.5": "§c4.§r Under the §c§l\"no_leash\"§r effect, the behavior of the arrow when fired will follow the launchers behavior.",
"item.leash_rope_arrow.description": "Arrows with ropes attached?",
"item.leashedplayer.amethyst_shears": "Amethyst Shears",
"item.leashedplayer.fabric": "Fabric",
"item.leashedplayer.leash_rope_arrow": "Leash Rope Arrow",
"item.leashedplayer.neoforge": "NeoForge",
"item.leashedplayer.spectral_leash_rope_arrow": "Spectral Leash Rope Arrow",
"item.minecraft.lingering_potion.effect.no_leash": "Splash No Leash Potion",
"item.minecraft.potion.effect.no_leash": "No Leash Potion",
"item.minecraft.splash_potion.effect.no_leash": "Splash No Leash Potion",
"item.minecraft.tipped_arrow.effect.no_leash": "Arrow of No Leash",
"item.spectral_leash_rope_arrow.desc": "§c2.§r Strike the entity to give it a §e§lGlowing§r effect.",
"item.tipped_leash_rope_arrow.desc": "§c2.§rStrike the entity to give it a Potion effect.",
"item.tipped_leash_rope_arrow.name": "Tipped Leash Rope Arrow Soaked By %1$s",
"item.variant.leash_rope_arrow.desc.1": "§7A variant of Leash Rope Arrow",
"item.variant.leash_rope_arrow.desc.2": "§c1.§r The function is the same as its original one。",
"jukebox_song.leashedplayer.what_does_the_fox_say": "What does the fox say?",
"key.leashedplayer.category": "Leashed Player",
"key.leashedplayer.leash_length.add": "Increase the Length of Leash Rope",
"key.leashedplayer.leash_length.not_support_to_not_player_entity": "Only work on Players",
"key.leashedplayer.leash_length.sub": "Decrease the Length of Leash Rope",
"leashedplayer.command.leash.message.leash.data.clear": "%1$s's LeashData(LeashHolderEntity: %2$s) now is clear",
"leashedplayer.command.leash.message.leash.data.clear.leash.clear.failed.no_data": "%1$s has no LeashData can be clear",
"leashedplayer.command.leash.message.leash.data.null": "%1$s has no LeashDataEntity",
"leashedplayer.command.leash.message.leash.data.set": "%1$s LeashDataEntity now is set as %2$s",
"leashedplayer.command.leash.message.leash.data.set.failed.diff_level": "%1$s and %2$s are not at a same level",
"leashedplayer.command.leash.message.leash.data.set.failed.forbid_same_entity": "Prohibit setting the same entity",
"leashedplayer.command.leash.message.leash.data.set.failed.no_knot_exist_in_that_pos": "No knot found at (X:%f,Y:%f,Z:%f)",
"leashedplayer.command.leash.message.leash.data.set.failed.too_far": "The distance between %1$s and %2$s is larger than the 1.2 times of LeashLength, LeashLength is %3$s blocks",
"leashedplayer.command.leash.message.leash.data.show": "%1$s's LeashDataEntity is %2$s",
"leashedplayer.command.leash.message.leash.length.failed": "Failed (Internal Error, maybe your command is incorrect)",
"leashedplayer.command.leash.message.leash.length.set": "The Leash length of %1$s is set to %2$s blocks",
"leashedplayer.command.leash.message.leash.length.show": "The Leash Length of %1$s is %2$s blocks",
"leashedplayer.command.motion.message.adder.successful": "§bAdd Successfully.§a%s§7:§f[§eVec§7: §a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.command.motion.message.multiply.successful": "§bMultiply Successfully.§a%s§7:§f[§eVec§7: §a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.command.motion.message.setter.successful": "§bSet Successfully.§a%s§7:§f[§eVec§7: §a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.lead_breaker.item.desc": "§7can break the link of leash",
"leashedplayer.lead_breaker.item.use_fai": "§cFailed to break §f%1$s§c 's Leashed Link to §f%2$s",
"leashedplayer.lead_breaker.item.use_suf": "§aSuccessfully break §f%1$s§a 's Leashed Link to §f%2$s ",
"leashedplayer.leash_rope.length.decrease": "§Decrease the §f%s §cLength of Leash Rope§7(§bLength§7:§e%d§7)",
"leashedplayer.leash_rope.length.decrease.self": "§cDecrease the Length of Leash Rope§7(§bLength§7:§e%d§7)",
"leashedplayer.leash_rope.length.failed": "§cFailed",
"leashedplayer.leash_rope.length.increase": "§aIncrease the §f%s §aLength of Leash Rope§7(§bLength§7:§e%d§7)",
"leashedplayer.leash_rope.length.increase.self": "§aIncrease the Length of Leash Rope§7(§bLength§7:§e%d§7)",
"leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip": "§aPush §f§lShift§a to pick up quickly",
"painting.leashedplayer.group_photo.author": "§9Leisure §4Time §eDock§r",
"painting.leashedplayer.group_photo.title": "§dGroup Photo §7[§6memorable§7]§r",
"sound.leashedplayer.subtitle.what_does_the_fox_say": "Great Chu will rise again! Chen She will be king!"
}

View File

@ -0,0 +1,3 @@
{
"entity.leashedplayer.kid_player": "幼"
}

View File

@ -0,0 +1,88 @@
{
"advancement.leashedplayer.advancement_leash_arrow": "更闪亮的拴绳箭?",
"advancement.leashedplayer.advancement_leash_arrow.desc": "嗯,除了发光,似乎没有什么其它不同了",
"advancement.leashedplayer.dog_running_player": "遛“人”时间",
"advancement.leashedplayer.dog_running_player.desc": "公园不能遛狗,于是狗站起来遛人",
"advancement.leashedplayer.follow_arrow": "启航!!!",
"advancement.leashedplayer.follow_arrow.desc": "抱歉,我的世界不存在物理学",
"advancement.leashedplayer.leash_arrow": "拴绳之箭?",
"advancement.leashedplayer.leash_arrow.desc": "也许可以用它来发射生物?",
"advancement.leashedplayer.leash_start": "牵引之力",
"advancement.leashedplayer.leash_start.desc": "拴绳大师之路",
"advancement.leashedplayer.leash_terminator": "拴绳终结者",
"advancement.leashedplayer.leash_terminator.desc": "我來终结拴绳者!",
"advancement.leashedplayer.leashed_friend": "拴绳链接",
"advancement.leashedplayer.leashed_friend.desc": "被玩家用拴绳链接",
"advancement.leashedplayer.leashed_self": "稳固联结",
"advancement.leashedplayer.leashed_self.desc": "用拴绳拴住自己",
"advancement.leashedplayer.neo_fox": "NEOFORGE!",
"advancement.leashedplayer.neo_fox.desc": "似乎可以戴头上",
"advancement.leashedplayer.no_leash": "勿拴我",
"advancement.leashedplayer.no_leash.desc": "你不会被任何东西拴住",
"advancement.leashedplayer.tipped_leash_arrow": "神说要有更多箭矢",
"advancement.leashedplayer.tipped_leash_arrow.desc": "真是琳琅满目啊",
"creativetab.leashedplayer.leashedplayer_tab": "可拴玩家",
"effect.leashedplayer.no_leash": "禁拴",
"entity.leashedplayer.kid_player": "小孩",
"entity.leashedplayer.leash_rope_arrow": "拴绳箭",
"entity.leashedplayer.nestle_rope_arrow": "贴贴拴绳箭",
"entity.leashedplayer.spectral_leash_rope_arrow": "拴绳光灵箭",
"gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "如果缺失则创建拴绳结",
"gamerule.LP.CreateLeashFenceKnotEntityIfAbsent.description": "如果在栅栏处缺失拴绳结,则创建它",
"gamerule.LP.KeepLeashNotDropTime": "保持拴绳不掉落的时间",
"gamerule.LP.KeepLeashNotDropTime.description": "当距离过远时,保持新建拴绳不掉落的时间 (刻)",
"gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者传送",
"gamerule.LP.TeleportWithLeashedPlayers.description": "传送时将被拴玩家与持有者一起传送",
"item.leash_rope_arrow.desc.1": "§7该箭将会携带拥有者随其飞行",
"item.leash_rope_arrow.desc.2": "§c1.§r 若击中栅栏或生物时,将持有者拴在其上并已普通箭形式掉落;",
"item.leash_rope_arrow.desc.3": "§c2.§r 靠近该箭下蹲可以更快拾取该箭,如果该箭持有者不是自己,则持有者将被拾取者拴住;",
"item.leash_rope_arrow.desc.4": "§c3.§r 当前其发射器里发射,第一个射中的生物将成为此箭的持有者并随箭飞行;",
"item.leash_rope_arrow.desc.5": "§c4.§r 在§c§l禁拴§7(§c§lno_leash§7)§r效果下射出的箭行为同发射器。",
"item.leash_rope_arrow.description": "带有拴绳的箭矢?",
"item.leashedplayer.amethyst_shears": "紫水晶剪刀",
"item.leashedplayer.fabric": "Fabric",
"item.leashedplayer.leash_rope_arrow": "拴绳箭",
"item.leashedplayer.neoforge": "NeoForge",
"item.leashedplayer.spectral_leash_rope_arrow": "拴绳光灵箭",
"item.minecraft.lingering_potion.effect.no_leash": "滞留型禁拴药水",
"item.minecraft.potion.effect.no_leash": "禁拴药水",
"item.minecraft.splash_potion.effect.no_leash": "喷溅型禁拴药水",
"item.minecraft.tipped_arrow.effect.no_leash": "禁拴之箭",
"item.spectral_leash_rope_arrow.desc": "§c2.§r 击中实体给与其§e§l发光§7(§e§lGlowing§7)§r效果",
"item.tipped_leash_rope_arrow.desc": "§c2.§r 击中实体给与其药水效果",
"item.tipped_leash_rope_arrow.name": "用%1$s浸泡过的拴绳箭",
"item.variant.leash_rope_arrow.desc.1": "§7拴绳箭的一个变种",
"item.variant.leash_rope_arrow.desc.2": "§c1.§r 功能同其本体;",
"jukebox_song.leashedplayer.what_does_the_fox_say": "狐狸是怎么叫的?",
"key.leashedplayer.category": "可拴玩家",
"key.leashedplayer.leash_length.add": "增加拴绳长度",
"key.leashedplayer.leash_length.not_support_to_not_player_entity": "只在玩家身上有效",
"key.leashedplayer.leash_length.sub": "减小拴绳长度",
"leashedplayer.command.leash.message.leash.data.clear": "%1$s的拴绳数据拴绳持有者实体%2$s现在已清除",
"leashedplayer.command.leash.message.leash.data.clear.leash.clear.failed.no_data": "%1$s沒有拴绳数据可清除",
"leashedplayer.command.leash.message.leash.data.null": "%1$s沒有拴绳数据实体",
"leashedplayer.command.leash.message.leash.data.set": "%1$s拴绳数据实体被设置为%2$s",
"leashedplayer.command.leash.message.leash.data.set.failed.diff_level": "%1$s和%2$s不在同一维度上",
"leashedplayer.command.leash.message.leash.data.set.failed.forbid_same_entity": "禁止设置同一实体",
"leashedplayer.command.leash.message.leash.data.set.failed.no_knot_exist_in_that_pos": "未找到拴绳结在(X:%f, Y:%f, Z:%f)处",
"leashedplayer.command.leash.message.leash.data.set.failed.too_far": "%1$s到%2$s的距离超过了1.2倍 拴绳长度,原长:%3$s 格",
"leashedplayer.command.leash.message.leash.data.show": "%1$s的拴绳数据实体为%2$s",
"leashedplayer.command.leash.message.leash.length.failed": "失败(内部错误,可能是你输的指令有误)",
"leashedplayer.command.leash.message.leash.length.set": "%1$s的拴绳长度被设置为%2$s格",
"leashedplayer.command.leash.message.leash.length.show": "%1$s的拴绳长度为%2$s格",
"leashedplayer.command.motion.message.adder.successful": "§b添加成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.command.motion.message.multiply.successful": "§b倍乘成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.command.motion.message.setter.successful": "§b设置成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.lead_breaker.item.desc": "§7可以破坏拴绳链接",
"leashedplayer.lead_breaker.item.use_fai": "§c无法剪断§f%2$s§c对§f%1$s§c拴绳链接",
"leashedplayer.lead_breaker.item.use_suf": "§a成功剪断§f%2$s§a对§f%1$s§a拴绳链接",
"leashedplayer.leash_rope.length.decrease": "§c减少§f%s的拴绳长度§c§7(§b长度§7:§e%d§7)",
"leashedplayer.leash_rope.length.decrease.self": "§c减少拴绳长度§c§7(§b长度§7:§e%d§7)",
"leashedplayer.leash_rope.length.failed": "§c失败",
"leashedplayer.leash_rope.length.increase": "§a增加§f%s的拴绳长度§a§7(§b长度§7:§e%d§7)",
"leashedplayer.leash_rope.length.increase.self": "§a增加拴绳长度§a§7(§b长度§7:§e%d§7)",
"leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip": "§a按下§f§lShift键§a以加快拾取",
"painting.leashedplayer.group_photo.author": "§9闲趣§4时§e坞§r",
"painting.leashedplayer.group_photo.title": "§d集体照 §7[§6纪念§7]§r",
"sound.leashedplayer.subtitle.what_does_the_fox_say": "大楚兴~ 陈胜王~~"
}

View File

@ -0,0 +1,88 @@
{
"advancement.leashedplayer.advancement_leash_arrow": "更閃亮的拴繩箭?",
"advancement.leashedplayer.advancement_leash_arrow.desc": "嗯,除了發光,其它好像沒什麽不同",
"advancement.leashedplayer.dog_running_player": "遛“人”時間",
"advancement.leashedplayer.dog_running_player.desc": "公園裏不許遛狗,於是狗站起來遛人",
"advancement.leashedplayer.follow_arrow": "啓航!!!",
"advancement.leashedplayer.follow_arrow.desc": "抱歉,麦块不講物理學",
"advancement.leashedplayer.leash_arrow": "拴繩之箭?",
"advancement.leashedplayer.leash_arrow.desc": "也許可以用它發射生物?",
"advancement.leashedplayer.leash_start": "牽引之力",
"advancement.leashedplayer.leash_start.desc": "拴繩大師之路",
"advancement.leashedplayer.leash_terminator": "拴繩終結者",
"advancement.leashedplayer.leash_terminator.desc": "吾將終結拴繩!",
"advancement.leashedplayer.leashed_friend": "拴繩鏈接",
"advancement.leashedplayer.leashed_friend.desc": "被玩家用拴繩鏈接",
"advancement.leashedplayer.leashed_self": "穩固聯結",
"advancement.leashedplayer.leashed_self.desc": "用栓繩拴住自己",
"advancement.leashedplayer.neo_fox": "NEOFORGE!",
"advancement.leashedplayer.neo_fox.desc": "似乎可以戴著",
"advancement.leashedplayer.no_leash": "請恁勿拴唔",
"advancement.leashedplayer.no_leash.desc": "恁不會被任何拴住",
"advancement.leashedplayer.tipped_leash_arrow": "神說要有更多箭矢",
"advancement.leashedplayer.tipped_leash_arrow.desc": "真是琳琅滿目啊",
"creativetab.leashedplayer.leashedplayer_tab": "可拴玩家",
"effect.leashedplayer.no_leash": "禁拴",
"entity.leashedplayer.kid_player": "小孩",
"entity.leashedplayer.leash_rope_arrow": "拴繩箭",
"entity.leashedplayer.nestle_rope_arrow": "貼貼拴繩箭",
"entity.leashedplayer.spectral_leash_rope_arrow": "拴繩光靈箭",
"gamerule.LP.CreateLeashFenceKnotEntityIfAbsent": "如果缺失則創建拴繩結",
"gamerule.LP.CreateLeashFenceKnotEntityIfAbsent.description": "如果在柵欄処缺失拴繩結,則創建它",
"gamerule.LP.KeepLeashNotDropTime": "保持其不掉落的時間",
"gamerule.LP.KeepLeashNotDropTime.description": "儅距離過遠時,保持其不掉落的時間(刻)",
"gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者傳送",
"gamerule.LP.TeleportWithLeashedPlayers.description": "將被拴玩家將隨持有者一起傳送",
"item.leash_rope_arrow.desc.1": "§7該箭將會攜帶擁有者隨其飛行",
"item.leash_rope_arrow.desc.2": "§c1.§r 若擊中柵欄或生物時,將持有者拴在其上並以普通箭的形式掉落;",
"item.leash_rope_arrow.desc.3": "§c2.§r 靠近該箭下蹲可以更快拾取該箭,如果該箭的持有者不是自己,則持有者將被拾取者拴住;",
"item.leash_rope_arrow.desc.4": "§c3.§r 當箭從發射器發射時,第一個射中的生物將成為此箭的持有者並隨箭飛行;",
"item.leash_rope_arrow.desc.5": "§c4.§r 在§c§l禁拴§7(§c§lno_leash§7)§r效果下射出的箭行為將與發射器的行為相同。",
"item.leash_rope_arrow.description": "帶有拴繩的箭矢?",
"item.leashedplayer.amethyst_shears": "紫水晶剪刀",
"item.leashedplayer.fabric": "Fabric",
"item.leashedplayer.leash_rope_arrow": "拴繩箭",
"item.leashedplayer.neoforge": "NeoForge",
"item.leashedplayer.spectral_leash_rope_arrow": "拴繩光靈箭",
"item.minecraft.lingering_potion.effect.no_leash": "滯留型禁拴藥水",
"item.minecraft.potion.effect.no_leash": "禁拴藥水",
"item.minecraft.splash_potion.effect.no_leash": "噴濺型禁拴藥水",
"item.minecraft.tipped_arrow.effect.no_leash": "禁拴之箭",
"item.spectral_leash_rope_arrow.desc": "擊中實體給予其§e§l發光§7(§e§lGlowing§7)§r效果",
"item.tipped_leash_rope_arrow.desc": "擊中實體給予其药水效果",
"item.tipped_leash_rope_arrow.name": "蘸有%1$s的拴繩箭",
"item.variant.leash_rope_arrow.desc.1": "§7拴繩箭矢的一個變種",
"item.variant.leash_rope_arrow.desc.2": "§c1.§r 功能與本體一致;",
"jukebox_song.leashedplayer.what_does_the_fox_say": "狐狸是怎麽叫的?",
"key.leashedplayer.category": "可拴玩家",
"key.leashedplayer.leash_length.add": "增加拴繩長度",
"key.leashedplayer.leash_length.not_support_to_not_player_entity": "僅對玩家有效",
"key.leashedplayer.leash_length.sub": "減小拴繩長度",
"leashedplayer.command.leash.message.leash.data.clear": "%1$s的拴繩數據拴繩持有者實體%2$s現在已清除",
"leashedplayer.command.leash.message.leash.data.clear.leash.clear.failed.no_data": "%1$s沒有拴繩數據實體可被清除",
"leashedplayer.command.leash.message.leash.data.null": "%1$s沒有拴繩數據實體",
"leashedplayer.command.leash.message.leash.data.set": "%1$s拴繩數據實體設置為%2$s",
"leashedplayer.command.leash.message.leash.data.set.failed.diff_level": "%1$s和%2$s不在同一緯度上",
"leashedplayer.command.leash.message.leash.data.set.failed.forbid_same_entity": "禁止設置同一實體",
"leashedplayer.command.leash.message.leash.data.set.failed.no_knot_exist_in_that_pos": "未找到拴繩結在(X:%f, Y:%f, Z:%f)処",
"leashedplayer.command.leash.message.leash.data.set.failed.too_far": "%1$s到%2$s的距離超過了1.2倍拴繩長度,原長:%3$s 格",
"leashedplayer.command.leash.message.leash.data.show": "%1$s拴繩數據實體為%2$s",
"leashedplayer.command.leash.message.leash.length.failed": "失敗(内部錯誤,,可能你輸入的指令有誤)",
"leashedplayer.command.leash.message.leash.length.set": "%1$s的拴繩長度被設置為%2$s格",
"leashedplayer.command.leash.message.leash.length.show": "%1$s的拴繩長度為%2$s格",
"leashedplayer.command.motion.message.adder.successful": "§b添加成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.command.motion.message.multiply.successful": "§b倍乘成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.command.motion.message.setter.successful": "§b設置成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.lead_breaker.item.desc": "§7可以破壞拴繩鏈接",
"leashedplayer.lead_breaker.item.use_fai": "§c未能剪斷§f%2$s§c對§f%1$s§c拴繩鏈接",
"leashedplayer.lead_breaker.item.use_suf": "§a成功剪斷§f%2$s§a對§f%1$s§a拴繩鏈接",
"leashedplayer.leash_rope.length.decrease": "§c減少§f%s§c的拴繩長度§7(§長度§7:§e%d§7)",
"leashedplayer.leash_rope.length.decrease.self": "§c減少拴繩長度§7(§長度§7:§e%d§7)",
"leashedplayer.leash_rope.length.failed": "§c失敗",
"leashedplayer.leash_rope.length.increase": "§a增加§f%s§a的拴繩長度§7(§長度§7:§e%d§7)",
"leashedplayer.leash_rope.length.increase.self": "§a增加拴繩長度§7(§長度§7:§e%d§7)",
"leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip": "§a按下§f§lShift鍵§a以加速拾取",
"painting.leashedplayer.group_photo.author": "§9閑趣§4時§e塢§r",
"painting.leashedplayer.group_photo.title": "§d集體照 §7[§6紀念§7]§r",
"sound.leashedplayer.subtitle.what_does_the_fox_say": "大楚興~ 陳勝王~~"
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "leashedplayer:item/amethyst_shears"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/bow",
"textures": {
"layer0": "leashedplayer:item/bow_lra_pulling_0"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/bow",
"textures": {
"layer0": "leashedplayer:item/bow_lra_pulling_1"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/bow",
"textures": {
"layer0": "leashedplayer:item/bow_lra_pulling_2"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/crossbow",
"textures": {
"layer0": "leashedplayer:item/crossbow_leash_rope_arrow"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "leashedplayer:item/fabric"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "leashedplayer:item/leash_rope_arrow"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "leashedplayer:item/spectral_leash_rope_arrow"
}
}

View File

@ -0,0 +1,7 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "leashedplayer:item/tipped_leash_rope_arrow_head",
"layer1": "leashedplayer:item/tipped_leash_rope_arrow_base"
}
}

View File

@ -0,0 +1,8 @@
{
"music/what_does_the_fox_say": {
"sounds": [
"leashedplayer:music/what_does_the_fox_say"
],
"subtitle": "sound.leashedplayer.subtitle.what_does_the_fox_say"
}
}

View File

@ -0,0 +1,65 @@
{
"model": {
"type": "minecraft:condition",
"on_false": {
"type": "minecraft:model",
"model": "minecraft:item/bow"
},
"on_true": {
"type": "leashedplayer:conditional_range",
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/bow_pulling_0"
},
"falseModels": [
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/bow_pulling_0"
},
"threshold": 0.0
},
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/bow_pulling_1"
},
"threshold": 0.65
},
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/bow_pulling_2"
},
"threshold": 0.9
}
],
"property": "leashedplayer:bow_pull",
"scale": 0.05,
"trueModels": [
{
"model": {
"type": "minecraft:model",
"model": "leashedplayer:item/bow_lra_pulling_0"
},
"threshold": 0.0
},
{
"model": {
"type": "minecraft:model",
"model": "leashedplayer:item/bow_lra_pulling_1"
},
"threshold": 0.65
},
{
"model": {
"type": "minecraft:model",
"model": "leashedplayer:item/bow_lra_pulling_2"
},
"threshold": 0.9
}
]
},
"property": "minecraft:using_item"
}
}

View File

@ -0,0 +1,61 @@
{
"model": {
"type": "minecraft:condition",
"on_false": {
"type": "minecraft:select",
"cases": [
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_arrow"
},
"when": "arrow"
},
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_firework"
},
"when": "rocket"
},
{
"model": {
"type": "minecraft:model",
"model": "leashedplayer:item/crossbow_leash_rope_arrow"
},
"when": "leash_rope_arrow"
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow"
},
"property": "leashedplayer:charge_extend_type"
},
"on_true": {
"type": "minecraft:range_dispatch",
"entries": [
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_pulling_1"
},
"threshold": 0.58
},
{
"model": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_pulling_2"
},
"threshold": 1.0
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/crossbow_pulling_0"
},
"property": "minecraft:crossbow/pull"
},
"property": "minecraft:using_item"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/bow",
"textures": {
"layer0": "minecraft:item/bow_pulling_0"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/bow",
"textures": {
"layer0": "minecraft:item/bow_pulling_1"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/bow",
"textures": {
"layer0": "minecraft:item/bow_pulling_2"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/crossbow",
"textures": {
"layer0": "minecraft:item/crossbow_arrow"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/crossbow",
"textures": {
"layer0": "minecraft:item/crossbow_firework"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/crossbow",
"textures": {
"layer0": "minecraft:item/crossbow_pulling_0"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/crossbow",
"textures": {
"layer0": "minecraft:item/crossbow_pulling_1"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/crossbow",
"textures": {
"layer0": "minecraft:item/crossbow_pulling_2"
}
}

View File

@ -0,0 +1,5 @@
{
"values": [
"leashedplayer:amethyst_shears"
]
}

View File

@ -0,0 +1,35 @@
{
"parent": "leashedplayer:leash_arrow",
"criteria": {
"has_flash_leash_rope_item": {
"conditions": {
"items": [
{
"items": "leashedplayer:spectral_leash_rope_arrow"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"announce_to_chat": false,
"description": {
"translate": "advancement.leashedplayer.advancement_leash_arrow.desc"
},
"hidden": true,
"icon": {
"count": 1,
"id": "leashedplayer:spectral_leash_rope_arrow"
},
"title": {
"translate": "advancement.leashedplayer.advancement_leash_arrow"
}
},
"requirements": [
[
"has_flash_leash_rope_item"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,33 @@
{
"parent": "leashedplayer:leash_arrow",
"criteria": {
"leash_by_wo_do": {
"conditions": {
"holder": {
"type": "minecraft:wolf"
}
},
"trigger": "leashedplayer:leash_player"
}
},
"display": {
"description": {
"translate": "advancement.leashedplayer.dog_running_player.desc"
},
"frame": "challenge",
"hidden": true,
"icon": {
"count": 1,
"id": "minecraft:bone"
},
"title": {
"translate": "advancement.leashedplayer.dog_running_player"
}
},
"requirements": [
[
"leash_by_wo_do"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,33 @@
{
"parent": "leashedplayer:leash_arrow",
"criteria": {
"leash_arrow": {
"conditions": {
"holder": {
"type": "leashedplayer:leash_rope_arrow"
}
},
"trigger": "leashedplayer:leash_player"
}
},
"display": {
"announce_to_chat": false,
"description": {
"translate": "advancement.leashedplayer.follow_arrow.desc"
},
"hidden": true,
"icon": {
"count": 1,
"id": "leashedplayer:leash_rope_arrow"
},
"title": {
"translate": "advancement.leashedplayer.follow_arrow"
}
},
"requirements": [
[
"leash_arrow"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,35 @@
{
"parent": "leashedplayer:leash_start",
"criteria": {
"has_leash_rope_item": {
"conditions": {
"items": [
{
"items": "leashedplayer:leash_rope_arrow"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"announce_to_chat": false,
"description": {
"translate": "advancement.leashedplayer.leash_arrow.desc"
},
"hidden": true,
"icon": {
"count": 1,
"id": "leashedplayer:leash_rope_arrow"
},
"title": {
"translate": "advancement.leashedplayer.leash_arrow"
}
},
"requirements": [
[
"has_leash_rope_item"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,35 @@
{
"criteria": {
"has_leash_rope_item": {
"conditions": {
"items": [
{
"items": "minecraft:lead"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"announce_to_chat": false,
"background": "leashedplayer:textures/gui/advancements/backgrounds/leashed_player",
"description": {
"translate": "advancement.leashedplayer.leash_start.desc"
},
"hidden": true,
"icon": {
"count": 1,
"id": "minecraft:lead"
},
"title": {
"translate": "advancement.leashedplayer.leash_start"
}
},
"requirements": [
[
"has_leash_rope_item"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,34 @@
{
"parent": "leashedplayer:leash_start",
"criteria": {
"has_amethyst_shears": {
"conditions": {
"items": [
{
"items": "leashedplayer:amethyst_shears"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "advancement.leashedplayer.leash_terminator.desc"
},
"hidden": true,
"icon": {
"count": 1,
"id": "leashedplayer:amethyst_shears"
},
"title": {
"translate": "advancement.leashedplayer.leash_terminator"
}
},
"requirements": [
[
"has_amethyst_shears"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,32 @@
{
"parent": "leashedplayer:leash_start",
"criteria": {
"leash_other_player": {
"conditions": {
"holder": {
"type": "minecraft:player"
}
},
"trigger": "leashedplayer:leash_player"
}
},
"display": {
"description": {
"translate": "advancement.leashedplayer.leashed_friend.desc"
},
"hidden": true,
"icon": {
"count": 1,
"id": "minecraft:lead"
},
"title": {
"translate": "advancement.leashedplayer.leashed_friend"
}
},
"requirements": [
[
"leash_other_player"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,32 @@
{
"parent": "leashedplayer:leash_start",
"criteria": {
"leash_self": {
"conditions": {
"holder": {
"type": "minecraft:leash_knot"
}
},
"trigger": "leashedplayer:leash_player"
}
},
"display": {
"description": {
"translate": "advancement.leashedplayer.leashed_self.desc"
},
"hidden": true,
"icon": {
"count": 1,
"id": "minecraft:player_head"
},
"title": {
"translate": "advancement.leashedplayer.leashed_self"
}
},
"requirements": [
[
"leash_self"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,36 @@
{
"parent": "leashedplayer:leash_start",
"criteria": {
"has_neo_fox": {
"conditions": {
"items": [
{
"items": "leashedplayer:neoforge"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"announce_to_chat": false,
"description": {
"translate": "advancement.leashedplayer.neo_fox.desc"
},
"frame": "goal",
"hidden": true,
"icon": {
"count": 1,
"id": "leashedplayer:neoforge"
},
"title": {
"translate": "advancement.leashedplayer.neo_fox"
}
},
"requirements": [
[
"has_neo_fox"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,33 @@
{
"parent": "leashedplayer:leash_start",
"criteria": {
"no_leash": {
"conditions": {
"effects": {
"leashedplayer:no_leash": {}
}
},
"trigger": "minecraft:effects_changed"
}
},
"display": {
"description": {
"translate": "advancement.leashedplayer.no_leash.desc"
},
"frame": "goal",
"hidden": true,
"icon": {
"count": 1,
"id": "minecraft:barrier"
},
"title": {
"translate": "advancement.leashedplayer.no_leash"
}
},
"requirements": [
[
"no_leash"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_amethyst_shard": {
"conditions": {
"items": [
{
"items": "minecraft:amethyst_shard"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "leashedplayer:amethyst_shears"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_the_recipe",
"has_amethyst_shard"
]
],
"rewards": {
"recipes": [
"leashedplayer:amethyst_shears"
]
}
}

View File

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_lead": {
"conditions": {
"items": [
{
"items": "minecraft:lead"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "leashedplayer:leash_rope_arrow"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_the_recipe",
"has_lead"
]
],
"rewards": {
"recipes": [
"leashedplayer:leash_rope_arrow"
]
}
}

View File

@ -0,0 +1,43 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_lead": {
"conditions": {
"items": [
{
"items": "minecraft:lead"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_spectral_arrow": {
"conditions": {
"items": [
{
"items": "minecraft:spectral_arrow"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "leashedplayer:spectral_leash_rope_arrow"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_the_recipe",
"has_lead",
"has_spectral_arrow"
]
],
"rewards": {
"recipes": [
"leashedplayer:spectral_leash_rope_arrow"
]
}
}

View File

@ -0,0 +1,35 @@
{
"parent": "leashedplayer:leash_arrow",
"criteria": {
"has_tipped_leash_arrow": {
"conditions": {
"items": [
{
"items": "leashedplayer:tipped_leash_rope_arrow"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "advancement.leashedplayer.tipped_leash_arrow.desc"
},
"frame": "goal",
"hidden": true,
"icon": {
"count": 1,
"id": "leashedplayer:tipped_leash_rope_arrow"
},
"title": {
"translate": "advancement.leashedplayer.tipped_leash_arrow"
}
},
"requirements": [
[
"has_tipped_leash_arrow"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,8 @@
{
"comparator_output": 15,
"description": {
"translate": "jukebox_song.leashedplayer.what_does_the_fox_say"
},
"length_in_seconds": 121.0,
"sound_event": "leashedplayer:what_does_the_fox_say"
}

View File

@ -0,0 +1,11 @@
{
"asset_id": "leashedplayer:group_photo",
"author": {
"translate": "painting.leashedplayer.group_photo.author"
},
"height": 3,
"title": {
"translate": "painting.leashedplayer.group_photo.title"
},
"width": 4
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"#": "minecraft:amethyst_shard",
"%": "minecraft:stick"
},
"pattern": [
"#%",
"%#"
],
"result": {
"count": 1,
"id": "leashedplayer:amethyst_shears"
}
}

View File

@ -0,0 +1,12 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
"minecraft:lead",
"minecraft:arrow"
],
"result": {
"count": 1,
"id": "leashedplayer:leash_rope_arrow"
}
}

View File

@ -0,0 +1,12 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
"minecraft:lead",
"minecraft:spectral_arrow"
],
"result": {
"count": 1,
"id": "leashedplayer:spectral_leash_rope_arrow"
}
}

View File

@ -0,0 +1,43 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_glowstone_dust": {
"conditions": {
"items": [
{
"items": "minecraft:glowstone_dust"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_lead": {
"conditions": {
"items": [
{
"items": "minecraft:lead"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "minecraft:leash_rope_arrow_shape"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_the_recipe",
"has_lead",
"has_glowstone_dust"
]
],
"rewards": {
"recipes": [
"minecraft:leash_rope_arrow_shape"
]
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"#": "leashedplayer:leash_rope_arrow",
"$": "minecraft:glowstone_dust"
},
"pattern": [
" $ ",
"$#$",
" $ "
],
"result": {
"count": 1,
"id": "leashedplayer:spectral_leash_rope_arrow"
}
}

View File

@ -0,0 +1,4 @@
{
"type": "leashedplayer:tipped_leash_rope_arrow_a_recipe",
"category": "misc"
}

View File

@ -0,0 +1,4 @@
{
"type": "leashedplayer:tipped_leash_rope_arrow_b_recipe",
"category": "misc"
}

View File

@ -0,0 +1,5 @@
{
"values": [
"minecraft:amethyst_shard"
]
}

View File

@ -0,0 +1,7 @@
{
"values": [
"leashedplayer:leash_rope_arrow",
"leashedplayer:spectral_leash_rope_arrow",
"leashedplayer:tipped_leash_rope_arrow"
]
}

View File

@ -0,0 +1,5 @@
{
"values": [
"leashedplayer:amethyst_shears"
]
}

View File

@ -0,0 +1,5 @@
{
"values": [
"leashedplayer:amethyst_shears"
]
}

View File

@ -0,0 +1,5 @@
{
"values": [
"leashedplayer:amethyst_shears"
]
}

View File

@ -0,0 +1,6 @@
{
"values": [
"leashedplayer:neoforge",
"minecraft:lead"
]
}

View File

@ -0,0 +1,5 @@
{
"values": [
"leashedplayer:group_photo"
]
}

View File

@ -92,7 +92,7 @@ public class LeadBreakerItem extends ShearsItem {
} else return InteractionResult.PASS;
}
}
return InteractionResult.PASS;
return InteractionResult.SUCCESS;
}
@Override
@ -116,6 +116,7 @@ public class LeadBreakerItem extends ShearsItem {
PlayerLeashable playerLeashable = (PlayerLeashable) pPlayer;
if (playerLeashable.getLeashDataFromEntityData() != null) {
pPlayer.playSound(SoundEvents.SHEEP_SHEAR, 1.0F, 1.0F);
return InteractionResult.SUCCESS;
}
}
return super.use(pLevel, pPlayer, pUsedHand);

View File

@ -317,10 +317,6 @@ public abstract class MixinPlayer extends LivingEntity implements PlayerLeashabl
method = {"readAdditionalSaveData"}, at = {@At("RETURN")}
)//数据读取
private void readSaveData(CompoundTag pCompound, CallbackInfo ci) {
Leashable.LeashData leashable$leashdata = pCompound.read("Pl$LeashData", Leashable.LeashData.CODEC).orElse(null);
if (this.getLeashData() != null && leashable$leashdata == null) {
this.removeLeash();
}
this.setLeashData(leashable$leashdata);
this.readLeashData(pCompound);
}
}

View File

@ -1,9 +1,11 @@
package com.r3944realms.leashedplayer.modInterface;
import com.mojang.serialization.Codec;
import com.r3944realms.leashedplayer.content.commands.LeashCommand;
import com.r3944realms.leashedplayer.content.criteriaTriggers.ModCriteriaTriggers;
import com.r3944realms.leashedplayer.utils.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.game.ClientboundSetEntityLinkPacket;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
@ -36,12 +38,29 @@ public interface PlayerLeashable extends Leashable {
* 是否立即可被拴住
*/
boolean canBeLeashedInstantly(Player player);
@Override
default void writeLeashData(CompoundTag tag, @org.jetbrains.annotations.Nullable Leashable.LeashData leashData) {
tag.storeNullable("Pl$LeashData", Leashable.LeashData.CODEC, leashData);
}
@Override
default void readLeashData(CompoundTag tag) {
CompoundTag compoundTag = tag.read("Pl$LeashData", CompoundTag.CODEC).orElse(null);
if (compoundTag != null) {
Leashable.LeashData leashable$leashdata = compoundTag.read("Pl$LeashData", Leashable.LeashData.CODEC).orElse(null);
if (this.getLeashData() != null && leashable$leashdata == null) {
this.removeLeash();
}
this.setLeashData(leashable$leashdata);
}
}
/**
* 设置栓绳数据
* @param pLeashHolder 拴绳持有者
* @param pBroadcastPacket 是否广播包
*/
@Override
default void setLeashedTo(@NotNull Entity pLeashHolder, boolean pBroadcastPacket) {
setLeashedTo((Entity & Leashable)this, pLeashHolder, pBroadcastPacket);
if(this instanceof ServerPlayer) {

View File

@ -0,0 +1,92 @@
# 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://github.com/3944Realms/R39_Whimsy_NeoForgeModProject_Sub/issues" #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://github.com/3944Realms/R39_Whimsy_NeoForgeModProject_Sub" #optional
# A file name (in the root of the mod JAR) containing a logo for display
logoFile="leashedplayerlogo.png" #optional
# 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,)"