Compare commits
83 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 24fb4cfe4a | |||
| 186138d0c0 | |||
| 6690564017 | |||
| 89a0a900cc | |||
| 391a24db3f | |||
| 4b546af642 | |||
| ee8aabbf97 | |||
| 45994e2b94 | |||
| 13bdc69da8 | |||
| c0184fde8e | |||
| cbd297e59d | |||
| c6cf7c950e | |||
| fe5d80e017 | |||
| e985a8f15b | |||
| 615767f758 | |||
| 65a24b2295 | |||
| 94c2afe67a | |||
| 9bbca37ecd | |||
| 58241a0f5c | |||
| a960a01ca1 | |||
| 67d8ee773c | |||
| c6f2675278 | |||
| 2380be230e | |||
| 833276b7b3 | |||
| 9b32835720 | |||
| 61634a9cc3 | |||
| 408a35db8d | |||
| 9695a85131 | |||
| d027cf4f2a | |||
| c2f8bfc5b4 | |||
| 486425a62c | |||
| f9681d4c66 | |||
| cd0671dc59 | |||
| 7ebca16948 | |||
| e8cbdde518 | |||
| 7ca6f05151 | |||
| f4f17e90e5 | |||
| 3ea48efb1d | |||
| ffc3533688 | |||
| bd309855a2 | |||
| 1473c7e9b7 | |||
| 15cc7b6d18 | |||
| 1c89c5f779 | |||
| ca7f1cc8ca | |||
| 8fd1de84e4 | |||
| 95d9168b6b | |||
| c1db827132 | |||
| d10b78ab46 | |||
| 2d70523f43 | |||
| 42fb7ad3df | |||
| e90d0950d4 | |||
| 888d4190d1 | |||
| 57696b2538 | |||
| 1440537f6b | |||
| a16ff88c8d | |||
| 041de12ea7 | |||
| 5e36f66c4e | |||
| a6a5a6104d | |||
| 6f7b225ce8 | |||
| 81a85883d2 | |||
| 3f06d2fea4 | |||
| 26b390268a | |||
| 486d55f349 | |||
| 5948090d63 | |||
| 32340191de | |||
| 0b09875bb3 | |||
| 078a36d304 | |||
| 3ef4ec522b | |||
| cd6fa03990 | |||
| bba9fb68e6 | |||
| dcb7038833 | |||
| f8a058259d | |||
| 1696d5daeb | |||
| ac69af012a | |||
| 692546a232 | |||
| b0478b627f | |||
| 2cdca4b990 | |||
| 4c0b2adef4 | |||
| 191dd078b8 | |||
| 2de7807bec | |||
| 9d4f1dd370 | |||
| 6f769150b1 | |||
| 155dc0b621 |
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"homepage": "https://www.curseforge.com/minecraft/mc-mods/electroblobs-wizardry",
|
||||||
|
"promos": {
|
||||||
|
"1.12.2-latest": "4.3.6",
|
||||||
|
"1.12.2-recommended": "4.3.6"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,10 +7,10 @@ assignees: ''
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting.
|
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting. You may also find the [troubleshooting page](https://github.com/Electroblob77/Wizardry/wiki/Troubleshooting) helpful.
|
||||||
|
|
||||||
Minecraft version: 1.12.2 [change as necessary]
|
Minecraft version: 1.12.2 [change as necessary]
|
||||||
Wizardry version: 4.3.3 [change as necessary]
|
Wizardry version: 4.3.6 [change as necessary]
|
||||||
Environment: Singleplayer/LAN game/Server [delete as necessary]
|
Environment: Singleplayer/LAN game/Server [delete as necessary]
|
||||||
|
|
||||||
Issue details: [describe what you were doing when the issue occurred, what went wrong, what you expected to happen, etc.]
|
Issue details: [describe what you were doing when the issue occurred, what went wrong, what you expected to happen, etc.]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ assignees: ''
|
|||||||
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting.
|
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting.
|
||||||
|
|
||||||
Minecraft version: 1.12.2 [change as necessary]
|
Minecraft version: 1.12.2 [change as necessary]
|
||||||
Wizardry version: 4.3.3 [change as necessary]
|
Wizardry version: [change as necessary]
|
||||||
|
|
||||||
Question details: [explain your question here]
|
Question details: [explain your question here]
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
name: Potential Duplicates
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [opened, edited]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: bubkoo/potential-duplicates@v1
|
||||||
|
with:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
label: potential duplicate
|
||||||
|
exclude: |
|
||||||
|
adding
|
||||||
|
add
|
||||||
|
creating
|
||||||
|
create
|
||||||
|
icons
|
||||||
|
icon
|
||||||
|
logos
|
||||||
|
logo
|
||||||
|
missing
|
||||||
|
miss
|
||||||
|
needing
|
||||||
|
need
|
||||||
|
please
|
||||||
|
requesting
|
||||||
|
request
|
||||||
|
1.12.2
|
||||||
|
wizardry
|
||||||
|
state: all
|
||||||
|
threshold: 0.7
|
||||||
|
comment: |
|
||||||
|
This issue is potentially a duplicate of one of the following issues:
|
||||||
|
{{#issues}}
|
||||||
|
- [#{{ number }}] {{ title }} ({{ accuracy }}% match)
|
||||||
|
{{/issues}}
|
||||||
+8
-2
@@ -1,7 +1,7 @@
|
|||||||
# Credits
|
# Credits
|
||||||
|
|
||||||
Electroblob's Wizardry
|
Electroblob's Wizardry
|
||||||
Version 4.3.3
|
Version 4.3.6
|
||||||
For Minecraft 1.12.2
|
For Minecraft 1.12.2
|
||||||
|
|
||||||
Designed, coded and textured by Electroblob
|
Designed, coded and textured by Electroblob
|
||||||
@@ -12,6 +12,11 @@ Thanks also to the Minecraft modding community, which always has an answer to my
|
|||||||
|
|
||||||
In addition, I'd like to thank the following individuals for their contributions to the mod:
|
In addition, I'd like to thank the following individuals for their contributions to the mod:
|
||||||
|
|
||||||
|
#### Discord Moderators (and all-round awesome people)
|
||||||
|
|
||||||
|
- FavouriteDragon
|
||||||
|
- WinDanesz
|
||||||
|
|
||||||
#### Code
|
#### Code
|
||||||
|
|
||||||
- Corail31
|
- Corail31
|
||||||
@@ -27,13 +32,14 @@ In addition, I'd like to thank the following individuals for their contributions
|
|||||||
- rafasoares
|
- rafasoares
|
||||||
- xinyuan-liu
|
- xinyuan-liu
|
||||||
- SettingDust
|
- SettingDust
|
||||||
|
- Aralu115
|
||||||
|
|
||||||
#### Translations
|
#### Translations
|
||||||
|
|
||||||
- Spanish: MadWrist, Alsentar
|
- Spanish: MadWrist, Alsentar
|
||||||
- Mexican Spanish: MadWrist
|
- Mexican Spanish: MadWrist
|
||||||
- Russian: VilagVil, kellixon, bigenergy, MugGod2, DrHesperus
|
- Russian: VilagVil, kellixon, bigenergy, MugGod2, DrHesperus
|
||||||
- French: Hahdrim
|
- French: Hahdrim, Crowller
|
||||||
- Brazilian Portuguese: lorrampi
|
- Brazilian Portuguese: lorrampi
|
||||||
- Chinese (Simplified): ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer
|
- Chinese (Simplified): ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer
|
||||||
- Korean: shejery, rewi_wire, 방통, red1854th
|
- Korean: shejery, rewi_wire, 방통, red1854th
|
||||||
|
|||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/guide_for_contributing.md) before posting.
|
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/guide_for_contributing.md) before posting. You may also find the [troubleshooting page](https://github.com/Electroblob77/Wizardry/wiki/Troubleshooting) helpful.
|
||||||
|
|
||||||
Minecraft version: 1.12.2 [change as necessary]
|
Minecraft version: 1.12.2 [change as necessary]
|
||||||
Wizardry version: 4.3.3 [change as necessary]
|
Wizardry version: [change as necessary]
|
||||||
Environment: Singleplayer/LAN game/Server [delete as necessary]
|
Environment: Singleplayer/LAN game/Server [delete as necessary]
|
||||||
|
|
||||||
Issue details: [describe what you were doing when the issue occurred, what went wrong, what you expected to happen, etc.]
|
Issue details: [describe what you were doing when the issue occurred, what went wrong, what you expected to happen, etc.]
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ apply plugin: 'net.minecraftforge.gradle.forge'
|
|||||||
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
||||||
|
|
||||||
|
|
||||||
version = "4.3.3" // There, it matches semver, happy now?
|
version = "4.3.6" // There, it matches semver, happy now?
|
||||||
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
archivesBaseName = "ElectroblobsWizardry"
|
archivesBaseName = "ElectroblobsWizardry"
|
||||||
|
|
||||||
|
|||||||
Vendored
BIN
Binary file not shown.
+1
-2
@@ -1,6 +1,5 @@
|
|||||||
#Mon Sep 14 12:28:28 PDT 2015
|
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
##
|
##
|
||||||
@@ -6,47 +6,6 @@
|
|||||||
##
|
##
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
DEFAULT_JVM_OPTS=""
|
|
||||||
|
|
||||||
APP_NAME="Gradle"
|
|
||||||
APP_BASE_NAME=`basename "$0"`
|
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
|
||||||
MAX_FD="maximum"
|
|
||||||
|
|
||||||
warn ( ) {
|
|
||||||
echo "$*"
|
|
||||||
}
|
|
||||||
|
|
||||||
die ( ) {
|
|
||||||
echo
|
|
||||||
echo "$*"
|
|
||||||
echo
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# OS specific support (must be 'true' or 'false').
|
|
||||||
cygwin=false
|
|
||||||
msys=false
|
|
||||||
darwin=false
|
|
||||||
case "`uname`" in
|
|
||||||
CYGWIN* )
|
|
||||||
cygwin=true
|
|
||||||
;;
|
|
||||||
Darwin* )
|
|
||||||
darwin=true
|
|
||||||
;;
|
|
||||||
MINGW* )
|
|
||||||
msys=true
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# For Cygwin, ensure paths are in UNIX format before anything is touched.
|
|
||||||
if $cygwin ; then
|
|
||||||
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Attempt to set APP_HOME
|
# Attempt to set APP_HOME
|
||||||
# Resolve links: $0 may be a link
|
# Resolve links: $0 may be a link
|
||||||
PRG="$0"
|
PRG="$0"
|
||||||
@@ -61,9 +20,49 @@ while [ -h "$PRG" ] ; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
SAVED="`pwd`"
|
SAVED="`pwd`"
|
||||||
cd "`dirname \"$PRG\"`/" >&-
|
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||||
APP_HOME="`pwd -P`"
|
APP_HOME="`pwd -P`"
|
||||||
cd "$SAVED" >&-
|
cd "$SAVED" >/dev/null
|
||||||
|
|
||||||
|
APP_NAME="Gradle"
|
||||||
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS=""
|
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
|
MAX_FD="maximum"
|
||||||
|
|
||||||
|
warn () {
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
die () {
|
||||||
|
echo
|
||||||
|
echo "$*"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false').
|
||||||
|
cygwin=false
|
||||||
|
msys=false
|
||||||
|
darwin=false
|
||||||
|
nonstop=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN* )
|
||||||
|
cygwin=true
|
||||||
|
;;
|
||||||
|
Darwin* )
|
||||||
|
darwin=true
|
||||||
|
;;
|
||||||
|
MINGW* )
|
||||||
|
msys=true
|
||||||
|
;;
|
||||||
|
NONSTOP* )
|
||||||
|
nonstop=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
@@ -79,18 +78,18 @@ if [ -n "$JAVA_HOME" ] ; then
|
|||||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
locations of your Java installation."
|
location of your Java installation."
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
JAVACMD="java"
|
JAVACMD="java"
|
||||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
locations of your Java installation."
|
location of your Java installation."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Increase the maximum file descriptors if we can.
|
# Increase the maximum file descriptors if we can.
|
||||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||||
MAX_FD_LIMIT=`ulimit -H -n`
|
MAX_FD_LIMIT=`ulimit -H -n`
|
||||||
if [ $? -eq 0 ] ; then
|
if [ $? -eq 0 ] ; then
|
||||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||||
@@ -114,6 +113,7 @@ fi
|
|||||||
if $cygwin ; then
|
if $cygwin ; then
|
||||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
# We build the pattern for arguments to be converted via cygpath
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||||
@@ -154,11 +154,19 @@ if $cygwin ; then
|
|||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
# Escape application args
|
||||||
function splitJvmOpts() {
|
save () {
|
||||||
JVM_OPTS=("$@")
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||||
|
echo " "
|
||||||
}
|
}
|
||||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
APP_ARGS=$(save "$@")
|
||||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
|
||||||
|
|
||||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||||
|
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||||
|
|
||||||
|
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||||
|
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec "$JAVACMD" "$@"
|
||||||
|
|||||||
Vendored
+6
-12
@@ -8,14 +8,14 @@
|
|||||||
@rem Set local scope for the variables with windows NT shell
|
@rem Set local scope for the variables with windows NT shell
|
||||||
if "%OS%"=="Windows_NT" setlocal
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
@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=
|
|
||||||
|
|
||||||
set DIRNAME=%~dp0
|
set DIRNAME=%~dp0
|
||||||
if "%DIRNAME%" == "" set DIRNAME=.
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
set APP_BASE_NAME=%~n0
|
set APP_BASE_NAME=%~n0
|
||||||
set APP_HOME=%DIRNAME%
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@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=
|
||||||
|
|
||||||
@rem Find java.exe
|
@rem Find java.exe
|
||||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ echo.
|
|||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
echo.
|
echo.
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
echo locations of your Java installation.
|
echo location of your Java installation.
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
@@ -41,15 +41,14 @@ echo.
|
|||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
echo.
|
echo.
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
echo locations of your Java installation.
|
echo location of your Java installation.
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
:init
|
:init
|
||||||
@rem Get command-line arguments, handling Windowz variants
|
@rem Get command-line arguments, handling Windows variants
|
||||||
|
|
||||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
|
||||||
|
|
||||||
:win9xME_args
|
:win9xME_args
|
||||||
@rem Slurp the command line arguments.
|
@rem Slurp the command line arguments.
|
||||||
@@ -60,11 +59,6 @@ set _SKIP=2
|
|||||||
if "x%~1" == "x" goto execute
|
if "x%~1" == "x" goto execute
|
||||||
|
|
||||||
set CMD_LINE_ARGS=%*
|
set CMD_LINE_ARGS=%*
|
||||||
goto execute
|
|
||||||
|
|
||||||
:4NT_args
|
|
||||||
@rem Get arguments from the 4NT Shell from JP Software
|
|
||||||
set CMD_LINE_ARGS=%$
|
|
||||||
|
|
||||||
:execute
|
:execute
|
||||||
@rem Setup the command line
|
@rem Setup the command line
|
||||||
|
|||||||
@@ -198,6 +198,8 @@ public final class Settings {
|
|||||||
public boolean blindnessTweak = true;
|
public boolean blindnessTweak = true;
|
||||||
/** <b>[Server-only]</b> Whether using bonemeal on grass blocks has a chance to grow crystal flowers. */
|
/** <b>[Server-only]</b> Whether using bonemeal on grass blocks has a chance to grow crystal flowers. */
|
||||||
public boolean bonemealGrowsCrystalFlowers = true;
|
public boolean bonemealGrowsCrystalFlowers = true;
|
||||||
|
/** <b>[Server-only]</b> Whether to enable Wizardry mob loot injection. Allows an easier switch instead of blacklisting all entities. */
|
||||||
|
public boolean injectMobDrops = true;
|
||||||
/**
|
/**
|
||||||
* <b>[Server-only]</b> List of registry names of entities which summoned creatures are allowed to attack, in addition
|
* <b>[Server-only]</b> List of registry names of entities which summoned creatures are allowed to attack, in addition
|
||||||
* to the defaults.
|
* to the defaults.
|
||||||
@@ -807,6 +809,13 @@ public final class Settings {
|
|||||||
blindnessTweak = property.getBoolean();
|
blindnessTweak = property.getBoolean();
|
||||||
propOrder.add(property.getName());
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
|
property = config.get(TWEAKS_CATEGORY, "injectMobDrops", true,
|
||||||
|
"Whether to inject Wizardry loot to mobs, based on the loot table 'Mob Loot Table Whitelist' / 'Mob Loot Table Blacklist' settings. If disabled, the lists won't have any effect!");
|
||||||
|
property.setLanguageKey("config." + Wizardry.MODID + ".inject_mob_drops");
|
||||||
|
Wizardry.proxy.setToNamedBooleanEntry(property);
|
||||||
|
injectMobDrops = property.getBoolean();
|
||||||
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
property = config.get(TWEAKS_CATEGORY, "mobLootTableWhitelist", new String[0], "Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.");
|
property = config.get(TWEAKS_CATEGORY, "mobLootTableWhitelist", new String[0], "Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.");
|
||||||
property.setLanguageKey("config." + Wizardry.MODID + ".mob_loot_table_whitelist");
|
property.setLanguageKey("config." + Wizardry.MODID + ".mob_loot_table_whitelist");
|
||||||
property.setRequiresMcRestart(true);
|
property.setRequiresMcRestart(true);
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
package electroblob.wizardry;
|
package electroblob.wizardry;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.GsonBuilder;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import electroblob.wizardry.block.BlockBookshelf;
|
import electroblob.wizardry.block.BlockBookshelf;
|
||||||
import electroblob.wizardry.command.CommandCastSpell;
|
import electroblob.wizardry.command.CommandCastSpell;
|
||||||
import electroblob.wizardry.command.CommandDiscoverSpell;
|
import electroblob.wizardry.command.CommandDiscoverSpell;
|
||||||
@@ -16,11 +13,22 @@ import electroblob.wizardry.inventory.ContainerBookshelf;
|
|||||||
import electroblob.wizardry.misc.DonationPerksHandler;
|
import electroblob.wizardry.misc.DonationPerksHandler;
|
||||||
import electroblob.wizardry.misc.Forfeit;
|
import electroblob.wizardry.misc.Forfeit;
|
||||||
import electroblob.wizardry.packet.WizardryPacketHandler;
|
import electroblob.wizardry.packet.WizardryPacketHandler;
|
||||||
import electroblob.wizardry.registry.*;
|
import electroblob.wizardry.registry.Spells;
|
||||||
|
import electroblob.wizardry.registry.WizardryAdvancementTriggers;
|
||||||
|
import electroblob.wizardry.registry.WizardryBlocks;
|
||||||
|
import electroblob.wizardry.registry.WizardryItems;
|
||||||
|
import electroblob.wizardry.registry.WizardryLoot;
|
||||||
|
import electroblob.wizardry.registry.WizardrySounds;
|
||||||
import electroblob.wizardry.spell.Spell;
|
import electroblob.wizardry.spell.Spell;
|
||||||
import electroblob.wizardry.util.SpellProperties;
|
import electroblob.wizardry.util.SpellProperties;
|
||||||
import electroblob.wizardry.util.WandHelper;
|
import electroblob.wizardry.util.WandHelper;
|
||||||
import electroblob.wizardry.worldgen.*;
|
import electroblob.wizardry.worldgen.WorldGenCrystalFlower;
|
||||||
|
import electroblob.wizardry.worldgen.WorldGenCrystalOre;
|
||||||
|
import electroblob.wizardry.worldgen.WorldGenLibraryRuins;
|
||||||
|
import electroblob.wizardry.worldgen.WorldGenObelisk;
|
||||||
|
import electroblob.wizardry.worldgen.WorldGenShrine;
|
||||||
|
import electroblob.wizardry.worldgen.WorldGenUndergroundLibraryRuins;
|
||||||
|
import electroblob.wizardry.worldgen.WorldGenWizardTower;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.util.SoundCategory;
|
import net.minecraft.util.SoundCategory;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
@@ -39,8 +47,6 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
|
|||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,6 +62,7 @@ import java.util.Calendar;
|
|||||||
|
|
||||||
@Mod(modid = Wizardry.MODID, name = Wizardry.NAME, version = Wizardry.VERSION, acceptedMinecraftVersions = "[1.12.2]",
|
@Mod(modid = Wizardry.MODID, name = Wizardry.NAME, version = Wizardry.VERSION, acceptedMinecraftVersions = "[1.12.2]",
|
||||||
guiFactory = "electroblob.wizardry.WizardryGuiFactory",
|
guiFactory = "electroblob.wizardry.WizardryGuiFactory",
|
||||||
|
updateJSON = Wizardry.updateJSON,
|
||||||
dependencies = "required-after:forge@[14.23.5.2847,);after:jei@[4.15.0,);after:baubles@[1.5.2,);after:antiqueatlas@[4.6,)")
|
dependencies = "required-after:forge@[14.23.5.2847,);after:jei@[4.15.0,);after:baubles@[1.5.2,);after:antiqueatlas@[4.6,)")
|
||||||
|
|
||||||
public class Wizardry {
|
public class Wizardry {
|
||||||
@@ -74,7 +81,13 @@ public class Wizardry {
|
|||||||
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft
|
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft
|
||||||
* 1.11.x versions, and so on.
|
* 1.11.x versions, and so on.
|
||||||
*/
|
*/
|
||||||
public static final String VERSION = "4.3.3";
|
public static final String VERSION = "4.3.6";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Json file used by Forge's built-in <a href="https://mcforge.readthedocs.io/en/1.12.x/gettingstarted/autoupdate/">update checker</a>.
|
||||||
|
* Used by the in-game mod menu to show that green icon whenever a newer version is available of the mod.
|
||||||
|
*/
|
||||||
|
public static final String updateJSON = "https://github.com/Electroblob77/Wizardry/blob/1.12.2/.forge/update.json";
|
||||||
|
|
||||||
// IDEA: Triggering of inbuilt Forge events in relevant places?
|
// IDEA: Triggering of inbuilt Forge events in relevant places?
|
||||||
// IDEA: Abstract the vanilla particles behind the particle builder
|
// IDEA: Abstract the vanilla particles behind the particle builder
|
||||||
@@ -149,34 +162,6 @@ public class Wizardry {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void init(FMLInitializationEvent event){
|
public void init(FMLInitializationEvent event){
|
||||||
|
|
||||||
Gson gson = new GsonBuilder().setPrettyPrinting().create();
|
|
||||||
|
|
||||||
for(Item item : Item.REGISTRY){
|
|
||||||
|
|
||||||
if(item.getRegistryName().getNamespace().equals(MODID)){
|
|
||||||
|
|
||||||
try{
|
|
||||||
|
|
||||||
FileWriter writer = new FileWriter("generated\\" + item.getRegistryName().getPath() + ".json");
|
|
||||||
|
|
||||||
JsonObject json = new JsonObject();
|
|
||||||
|
|
||||||
json.addProperty("parent", "item/generated");
|
|
||||||
|
|
||||||
JsonObject textures = new JsonObject();
|
|
||||||
textures.addProperty("layer0", MODID + ":items/" + item.getRegistryName().getPath());
|
|
||||||
json.add("textures", textures);
|
|
||||||
|
|
||||||
gson.toJson(json, writer);
|
|
||||||
|
|
||||||
writer.close();
|
|
||||||
|
|
||||||
}catch(IOException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
settings.initConfigExtras();
|
settings.initConfigExtras();
|
||||||
|
|
||||||
// World generators
|
// World generators
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ class Contents {
|
|||||||
int x = GuiWizardHandbook.isRightPage(startPage) ? left + GuiWizardHandbook.GUI_WIDTH - GuiWizardHandbook.TEXT_INSET_X - GuiWizardHandbook.PAGE_WIDTH : left + GuiWizardHandbook.TEXT_INSET_X;
|
int x = GuiWizardHandbook.isRightPage(startPage) ? left + GuiWizardHandbook.GUI_WIDTH - GuiWizardHandbook.TEXT_INSET_X - GuiWizardHandbook.PAGE_WIDTH : left + GuiWizardHandbook.TEXT_INSET_X;
|
||||||
int y = top + GuiWizardHandbook.TEXT_INSET_Y + startLine * font.FONT_HEIGHT;
|
int y = top + GuiWizardHandbook.TEXT_INSET_Y + startLine * font.FONT_HEIGHT;
|
||||||
|
|
||||||
list.add(new GuiButtonHyperlink.Internal(0, x, y, font, entry.title, entry, 0, "", maxLineNumber-startLine, GuiWizardHandbook.isRightPage(startPage)));
|
list.add(new GuiButtonHyperlink.Internal(0, x, y, font, entry.title, entry, 0, "", maxLineNumber-startLine, GuiWizardHandbook.isRightPage(startPage), false));
|
||||||
|
|
||||||
startLine++;
|
startLine++;
|
||||||
|
|
||||||
|
|||||||
@@ -28,15 +28,17 @@ public abstract class GuiButtonHyperlink extends GuiButton {
|
|||||||
final List<String> lines;
|
final List<String> lines;
|
||||||
final int linesLeft;
|
final int linesLeft;
|
||||||
|
|
||||||
GuiButtonHyperlink(int id, int x, int y, FontRenderer font, String text, int indent, String suffix, int linesLeft, boolean rightPage){
|
GuiButtonHyperlink(int id, int x, int y, FontRenderer font, String text, int indent, String suffix, int linesLeft, boolean rightPage, boolean spaceless){
|
||||||
|
|
||||||
super(id, x, y, font.getStringWidth(text), font.FONT_HEIGHT, text);
|
super(id, x, y, font.getStringWidth(text), font.FONT_HEIGHT, text);
|
||||||
|
|
||||||
// Sometimes a link has punctuation or something after it that causes it to wrap onto a new line
|
// Sometimes a link has punctuation or something after it that causes it to wrap onto a new line
|
||||||
String linkWithSuffix = text + suffix;
|
String linkWithSuffix = text + suffix;
|
||||||
|
|
||||||
// If the string won't fit any words at the end of the current line, treat it as if we started a new line
|
// If the string won't fit any words (or characters in a spaceless language) at the end of the current line,
|
||||||
if(font.getStringWidth(linkWithSuffix.split("\\s")[0]) > GuiWizardHandbook.PAGE_WIDTH - indent){
|
// treat it as if we started a new line
|
||||||
|
String firstWord = spaceless ? linkWithSuffix.substring(0, 1) : linkWithSuffix.split("\\s")[0];
|
||||||
|
if(font.getStringWidth(firstWord) > GuiWizardHandbook.PAGE_WIDTH - indent){
|
||||||
indent = 0;
|
indent = 0;
|
||||||
this.y += font.FONT_HEIGHT;
|
this.y += font.FONT_HEIGHT;
|
||||||
}
|
}
|
||||||
@@ -149,7 +151,7 @@ public abstract class GuiButtonHyperlink extends GuiButton {
|
|||||||
* @throws IllegalArgumentException if the given argument array is empty or contains more than 2 arguments
|
* @throws IllegalArgumentException if the given argument array is empty or contains more than 2 arguments
|
||||||
* @throws JsonSyntaxException if the specified link target is not a URL or a valid section ID
|
* @throws JsonSyntaxException if the specified link target is not a URL or a valid section ID
|
||||||
*/
|
*/
|
||||||
public static GuiButtonHyperlink create(int x, int y, FontRenderer font, List<String> upToLink, String[] arguments, String suffix, int linesLeft, boolean rightPage){
|
public static GuiButtonHyperlink create(int x, int y, FontRenderer font, List<String> upToLink, String[] arguments, String suffix, int linesLeft, boolean rightPage, boolean spaceless){
|
||||||
|
|
||||||
if(arguments.length == 0 || arguments.length > 2) throw new IllegalArgumentException("Incorrect array length!");
|
if(arguments.length == 0 || arguments.length > 2) throw new IllegalArgumentException("Incorrect array length!");
|
||||||
|
|
||||||
@@ -158,7 +160,7 @@ public abstract class GuiButtonHyperlink extends GuiButton {
|
|||||||
if(arguments[0].matches(URL_REGEX)){
|
if(arguments[0].matches(URL_REGEX)){
|
||||||
|
|
||||||
button = new GuiButtonHyperlink.External(0, x, y, font, arguments[arguments.length - 1], arguments[0],
|
button = new GuiButtonHyperlink.External(0, x, y, font, arguments[arguments.length - 1], arguments[0],
|
||||||
font.getStringWidth(upToLink.get(upToLink.size() - 1)), suffix, linesLeft, rightPage);
|
font.getStringWidth(upToLink.get(upToLink.size() - 1)), suffix, linesLeft, rightPage, spaceless);
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
@@ -167,7 +169,7 @@ public abstract class GuiButtonHyperlink extends GuiButton {
|
|||||||
if(target == null) throw new JsonSyntaxException("Hyperlink points to nonexistent section id " + arguments[0]);
|
if(target == null) throw new JsonSyntaxException("Hyperlink points to nonexistent section id " + arguments[0]);
|
||||||
|
|
||||||
button = new GuiButtonHyperlink.Internal(0, x, y, font, arguments[arguments.length - 1],
|
button = new GuiButtonHyperlink.Internal(0, x, y, font, arguments[arguments.length - 1],
|
||||||
target, font.getStringWidth(upToLink.get(upToLink.size() - 1)), suffix, linesLeft, rightPage);
|
target, font.getStringWidth(upToLink.get(upToLink.size() - 1)), suffix, linesLeft, rightPage, spaceless);
|
||||||
}
|
}
|
||||||
|
|
||||||
return button;
|
return button;
|
||||||
@@ -177,8 +179,8 @@ public abstract class GuiButtonHyperlink extends GuiButton {
|
|||||||
|
|
||||||
final Section target;
|
final Section target;
|
||||||
|
|
||||||
Internal(int id, int x, int y, FontRenderer font, String text, Section target, int indent, String suffix, int linesLeft, boolean rightPage){
|
Internal(int id, int x, int y, FontRenderer font, String text, Section target, int indent, String suffix, int linesLeft, boolean rightPage, boolean spaceless){
|
||||||
super(id, x, y, font, text, indent, suffix, linesLeft, rightPage);
|
super(id, x, y, font, text, indent, suffix, linesLeft, rightPage, spaceless);
|
||||||
this.target = target;
|
this.target = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,8 +218,8 @@ public abstract class GuiButtonHyperlink extends GuiButton {
|
|||||||
|
|
||||||
final ITextComponent link;
|
final ITextComponent link;
|
||||||
|
|
||||||
External(int id, int x, int y, FontRenderer font, String text, String url, int indent, String suffix, int linesLeft, boolean rightPage){
|
External(int id, int x, int y, FontRenderer font, String text, String url, int indent, String suffix, int linesLeft, boolean rightPage, boolean spaceless){
|
||||||
super(id, x, y, font, text, indent, suffix, linesLeft, rightPage);
|
super(id, x, y, font, text, indent, suffix, linesLeft, rightPage, spaceless);
|
||||||
this.link = new TextComponentString(text);
|
this.link = new TextComponentString(text);
|
||||||
link.getStyle().setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url)).setColor(TextFormatting.DARK_BLUE);
|
link.getStyle().setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url)).setColor(TextFormatting.DARK_BLUE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -496,24 +496,30 @@ public class GuiWizardHandbook extends GuiScreen {
|
|||||||
|
|
||||||
Section currentSection = null;
|
Section currentSection = null;
|
||||||
|
|
||||||
for(Section section : sections.values()){
|
if(currentPage < singleToDoublePage(pageCount)){
|
||||||
// We always want this button to do something, and taking the right-hand page means it always does
|
// Find current section
|
||||||
if(section.containsPage(doubleToSinglePage(currentPage, true))){
|
for(Section section : sections.values()){
|
||||||
currentSection = section;
|
// Take the right-hand page if going to the next section, and the left-hand page otherwise
|
||||||
break;
|
if(section.containsPage(doubleToSinglePage(currentPage, button == nextSection))){
|
||||||
|
currentSection = section;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(currentSection != null){
|
List<Section> visibleSections = new ArrayList<>(sectionList);
|
||||||
|
visibleSections.removeIf(s -> !s.isUnlocked());
|
||||||
|
|
||||||
List<Section> visibleSections = new ArrayList<>(sectionList);
|
int index = currentSection == null ? visibleSections.size() : visibleSections.indexOf(currentSection);
|
||||||
visibleSections.removeIf(s -> !s.isUnlocked());
|
|
||||||
|
|
||||||
int index = visibleSections.indexOf(currentSection);
|
if(button == nextSection){
|
||||||
|
if(index + 1 < visibleSections.size()){
|
||||||
if(button == nextSection && index + 1 < visibleSections.size()){
|
|
||||||
currentPage = singleToDoublePage(visibleSections.get(index + 1).startPage);
|
currentPage = singleToDoublePage(visibleSections.get(index + 1).startPage);
|
||||||
}else if(index > 0){
|
}else{
|
||||||
|
currentPage = singleToDoublePage(pageCount);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(index > 0){
|
||||||
currentPage = singleToDoublePage(visibleSections.get(index - 1).startPage);
|
currentPage = singleToDoublePage(visibleSections.get(index - 1).startPage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.client.gui.handbook;
|
package electroblob.wizardry.client.gui.handbook;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.Streams;
|
import com.google.common.collect.Streams;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
@@ -35,6 +36,8 @@ import java.util.*;
|
|||||||
// be a non-static inner class
|
// be a non-static inner class
|
||||||
class Section {
|
class Section {
|
||||||
|
|
||||||
|
private static final Set<String> SPACELESS_LANGUAGES = ImmutableSet.of("zh_cn", "zh_tw");
|
||||||
|
|
||||||
// Final fields are mandatory (none here though), the rest are optional
|
// Final fields are mandatory (none here though), the rest are optional
|
||||||
String title;
|
String title;
|
||||||
private String[] rawText;
|
private String[] rawText;
|
||||||
@@ -293,7 +296,11 @@ class Section {
|
|||||||
|
|
||||||
String linkRaw = paragraph.substring(linkStart, linkEnd + 1);
|
String linkRaw = paragraph.substring(linkStart, linkEnd + 1);
|
||||||
String[] arguments = paragraph.substring(linkStart + 1, linkEnd).split("\\s", 2);
|
String[] arguments = paragraph.substring(linkStart + 1, linkEnd).split("\\s", 2);
|
||||||
String suffix = paragraph.substring(linkEnd).split("\\s", 2)[0].substring(1); // substring(1) to remove the @
|
String suffix = "";
|
||||||
|
|
||||||
|
// Account for trailing punctuation, except in languages that don't use spaces such as Chinese
|
||||||
|
boolean spaceless = SPACELESS_LANGUAGES.contains(Minecraft.getMinecraft().getLanguageManager().getCurrentLanguage().getLanguageCode());
|
||||||
|
if(!spaceless) paragraph.substring(linkEnd).split("\\s", 2)[0].substring(1); // substring(1) to remove the @
|
||||||
|
|
||||||
// The index of the single page currently being formatted, relative to the section
|
// The index of the single page currently being formatted, relative to the section
|
||||||
int pageRelative = (lines.size() + upToLink.size() - 1) / maxLineNumber;
|
int pageRelative = (lines.size() + upToLink.size() - 1) / maxLineNumber;
|
||||||
@@ -311,7 +318,7 @@ class Section {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// The button id only does what you use it for, so we're just not using it at all.
|
// The button id only does what you use it for, so we're just not using it at all.
|
||||||
this.buttons.get(pageRelative).add(GuiButtonHyperlink.create(x, y, font, upToLink, arguments, suffix, maxLineNumber - lineNumber - 1, GuiWizardHandbook.isRightPage(page)));
|
this.buttons.get(pageRelative).add(GuiButtonHyperlink.create(x, y, font, upToLink, arguments, suffix, maxLineNumber - lineNumber - 1, GuiWizardHandbook.isRightPage(page), spaceless));
|
||||||
|
|
||||||
// The link button should exactly overlay the display text in the main string
|
// The link button should exactly overlay the display text in the main string
|
||||||
// If the link has no display text specified, it displays the unformatted target string
|
// If the link has no display text specified, it displays the unformatted target string
|
||||||
|
|||||||
@@ -13,17 +13,17 @@ import net.minecraftforge.client.model.IModel;
|
|||||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||||
import net.minecraftforge.common.model.IModelState;
|
import net.minecraftforge.common.model.IModelState;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public class ModelBookshelf implements IModel {
|
public class ModelBookshelf implements IModel {
|
||||||
|
|
||||||
private static final ResourceLocation DEFAULT_BOOK_TEXTURE = new ResourceLocation(Wizardry.MODID, "blocks/books");
|
//private static final ResourceLocation DEFAULT_BOOK_TEXTURE = new ResourceLocation(Wizardry.MODID, "blocks/books");
|
||||||
|
|
||||||
private static final List<ResourceLocation> bookModelLocations = new ArrayList<>();
|
private static final List<ResourceLocation> bookModelLocations = new ArrayList<>();
|
||||||
|
|
||||||
|
private static final Map<String, IBakedModel[][]> bakedBookModels = new HashMap<>();
|
||||||
|
|
||||||
private final ModelResourceLocation bookshelfModelLocation;
|
private final ModelResourceLocation bookshelfModelLocation;
|
||||||
private final String variant;
|
private final String variant;
|
||||||
|
|
||||||
@@ -49,19 +49,7 @@ public class ModelBookshelf implements IModel {
|
|||||||
// I don't know why default state works here (surely it ought to be the state param?), but it works so who cares
|
// I don't know why default state works here (surely it ought to be the state param?), but it works so who cares
|
||||||
IBakedModel bookshelf = bookshelfModel.bake(bookshelfModel.getDefaultState(), format, bakedTextureGetter);
|
IBakedModel bookshelf = bookshelfModel.bake(bookshelfModel.getDefaultState(), format, bakedTextureGetter);
|
||||||
|
|
||||||
ImmutableList<ResourceLocation> textures = BlockBookshelf.getBookTextures();
|
IBakedModel[][] books = getBakedBookModels(format, bakedTextureGetter);
|
||||||
|
|
||||||
IBakedModel[][] books = new IBakedModel[textures.size()][BlockBookshelf.SLOT_COUNT];
|
|
||||||
|
|
||||||
for(int i = 0; i < textures.size(); i++){
|
|
||||||
|
|
||||||
ImmutableMap<String, String> retexturer = ImmutableMap.of("books", textures.get(i).toString());
|
|
||||||
|
|
||||||
for(int j = 0; j < BlockBookshelf.SLOT_COUNT; j++){
|
|
||||||
IModel bookModel = ModelLoaderRegistry.getModel(new ModelResourceLocation(bookModelLocations.get(j), variant)).retexture(retexturer);
|
|
||||||
books[i][j] = bookModel.bake(bookModel.getDefaultState(), format, bakedTextureGetter); // Same here!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// To clarify: the whole point of doing this was to avoid having to bake 4 * 2^12 models per bookshelf type
|
// To clarify: the whole point of doing this was to avoid having to bake 4 * 2^12 models per bookshelf type
|
||||||
// Therefore we have to have a baked bookshelf model that's kind of dynamic
|
// Therefore we have to have a baked bookshelf model that's kind of dynamic
|
||||||
@@ -74,6 +62,29 @@ public class ModelBookshelf implements IModel {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Retrieves the baked book models, or bakes them if they haven't been created yet. */
|
||||||
|
protected IBakedModel[][] getBakedBookModels(VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) throws Exception{
|
||||||
|
|
||||||
|
if(bakedBookModels.get(variant) == null){
|
||||||
|
|
||||||
|
ImmutableList<ResourceLocation> textures = BlockBookshelf.getBookTextures();
|
||||||
|
|
||||||
|
bakedBookModels.put(variant, new IBakedModel[textures.size()][BlockBookshelf.SLOT_COUNT]);
|
||||||
|
|
||||||
|
for(int i = 0; i < textures.size(); i++){
|
||||||
|
|
||||||
|
ImmutableMap<String, String> retexturer = ImmutableMap.of("books", textures.get(i).toString());
|
||||||
|
|
||||||
|
for(int j = 0; j < BlockBookshelf.SLOT_COUNT; j++){
|
||||||
|
IModel bookModel = ModelLoaderRegistry.getModel(new ModelResourceLocation(bookModelLocations.get(j), variant)).retexture(retexturer);
|
||||||
|
bakedBookModels.get(variant)[i][j] = bookModel.bake(bookModel.getDefaultState(), format, bakedTextureGetter); // Same here!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return bakedBookModels.get(variant);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<ResourceLocation> getDependencies(){
|
public Collection<ResourceLocation> getDependencies(){
|
||||||
return bookModelLocations;
|
return bookModelLocations;
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import java.util.Iterator;
|
|||||||
* than having to deal with each of them separately, which would be inefficient and cumbersome (the former of those
|
* than having to deal with each of them separately, which would be inefficient and cumbersome (the former of those
|
||||||
* classes cannot extend the latter because they both need to extend different subclasses of
|
* classes cannot extend the latter because they both need to extend different subclasses of
|
||||||
* {@link net.minecraft.enchantment.Enchantment}).
|
* {@link net.minecraft.enchantment.Enchantment}).
|
||||||
*
|
*
|
||||||
* @since Wizardry 1.2
|
* @since Wizardry 1.2
|
||||||
*/
|
*/
|
||||||
@Mod.EventBusSubscriber
|
@Mod.EventBusSubscriber
|
||||||
@@ -69,12 +69,16 @@ public interface Imbuement {
|
|||||||
Enchantment enchantment = Enchantment.getEnchantmentByID(enchantmentTag.getShort("id"));
|
Enchantment enchantment = Enchantment.getEnchantmentByID(enchantmentTag.getShort("id"));
|
||||||
// If the item contains a magic weapon enchantment, remove it from the item
|
// If the item contains a magic weapon enchantment, remove it from the item
|
||||||
if(enchantment instanceof Imbuement){
|
if(enchantment instanceof Imbuement){
|
||||||
|
((Imbuement) enchantment).onImbuementRemoval(stack);
|
||||||
enchantmentIt.remove();
|
enchantmentIt.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Allows executing some custom logic before this imbuement is being removed from the stack. Called when the imbuement is about to be removed. */
|
||||||
|
default void onImbuementRemoval(ItemStack stack){}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onPlayerOpenContainerEvent(PlayerContainerEvent event){
|
public static void onPlayerOpenContainerEvent(PlayerContainerEvent event){
|
||||||
// Brute-force fix to stop enchanted books in dungeon chests from having imbuements on them.
|
// Brute-force fix to stop enchanted books in dungeon chests from having imbuements on them.
|
||||||
|
|||||||
@@ -68,13 +68,15 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
|
|||||||
/** Data parameter for the wizard's element. */
|
/** Data parameter for the wizard's element. */
|
||||||
private static final DataParameter<Integer> ELEMENT = EntityDataManager.createKey(EntityEvilWizard.class,
|
private static final DataParameter<Integer> ELEMENT = EntityDataManager.createKey(EntityEvilWizard.class,
|
||||||
DataSerializers.VARINT);
|
DataSerializers.VARINT);
|
||||||
|
/** Data parameters for the wizard's current continuous spell. */
|
||||||
|
private static final DataParameter<String> CONTINUOUS_SPELL = EntityDataManager.createKey(EntityEvilWizard.class, DataSerializers.STRING);
|
||||||
|
private static final DataParameter<Integer> SPELL_COUNTER = EntityDataManager.createKey(EntityEvilWizard.class, DataSerializers.VARINT);
|
||||||
|
|
||||||
/** The resource location for the evil wizard's loot table. */
|
/** The resource location for the evil wizard's loot table. */
|
||||||
private static final ResourceLocation LOOT_TABLE = new ResourceLocation(Wizardry.MODID, "entities/evil_wizard");
|
private static final ResourceLocation LOOT_TABLE = new ResourceLocation(Wizardry.MODID, "entities/evil_wizard");
|
||||||
|
|
||||||
// Field implementations
|
// Field implementations
|
||||||
private List<Spell> spells = new ArrayList<Spell>(4);
|
private List<Spell> spells = new ArrayList<Spell>(4);
|
||||||
private Spell continuousSpell;
|
|
||||||
private int spellCounter;
|
|
||||||
|
|
||||||
public EntityEvilWizard(World world){
|
public EntityEvilWizard(World world){
|
||||||
|
|
||||||
@@ -93,6 +95,8 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
|
|||||||
super.entityInit();
|
super.entityInit();
|
||||||
this.dataManager.register(HEAL_COOLDOWN, -1);
|
this.dataManager.register(HEAL_COOLDOWN, -1);
|
||||||
this.dataManager.register(ELEMENT, -1);
|
this.dataManager.register(ELEMENT, -1);
|
||||||
|
this.dataManager.register(CONTINUOUS_SPELL, "ebwizardry:none");
|
||||||
|
this.dataManager.register(SPELL_COUNTER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -168,23 +172,23 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setContinuousSpell(Spell spell){
|
public void setContinuousSpell(Spell spell) {
|
||||||
this.continuousSpell = spell;
|
this.dataManager.set(CONTINUOUS_SPELL, spell.getRegistryName().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Spell getContinuousSpell(){
|
public Spell getContinuousSpell() {
|
||||||
return this.continuousSpell;
|
return Spell.get(this.dataManager.get(CONTINUOUS_SPELL));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setSpellCounter(int count){
|
public void setSpellCounter(int count) {
|
||||||
spellCounter = count;
|
this.dataManager.set(SPELL_COUNTER, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSpellCounter(){
|
public int getSpellCounter() {
|
||||||
return spellCounter;
|
return this.dataManager.get(SPELL_COUNTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class EntityMagicSlime extends EntitySlime implements ISummonedCreature {
|
|||||||
super(world);
|
super(world);
|
||||||
this.setPosition(target.posX, target.posY, target.posZ);
|
this.setPosition(target.posX, target.posY, target.posZ);
|
||||||
this.startRiding(target);
|
this.startRiding(target);
|
||||||
this.setOwnerId(caster.getUniqueID());
|
if (caster != null) this.setOwnerId(caster.getUniqueID());
|
||||||
this.setSlimeSize(2, false); // Needs to be called before setting the experience value to 0
|
this.setSlimeSize(2, false); // Needs to be called before setting the experience value to 0
|
||||||
this.experienceValue = 0;
|
this.experienceValue = 0;
|
||||||
this.lifetime = lifetime;
|
this.lifetime = lifetime;
|
||||||
|
|||||||
@@ -81,11 +81,12 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
|||||||
private static final DataParameter<Integer> HEAL_COOLDOWN = EntityDataManager.createKey(EntityWizard.class, DataSerializers.VARINT);
|
private static final DataParameter<Integer> HEAL_COOLDOWN = EntityDataManager.createKey(EntityWizard.class, DataSerializers.VARINT);
|
||||||
/** Data parameter for the wizard's element. */
|
/** Data parameter for the wizard's element. */
|
||||||
private static final DataParameter<Integer> ELEMENT = EntityDataManager.createKey(EntityWizard.class, DataSerializers.VARINT);
|
private static final DataParameter<Integer> ELEMENT = EntityDataManager.createKey(EntityWizard.class, DataSerializers.VARINT);
|
||||||
|
/** Data parameters for the wizard's current continuous spell. */
|
||||||
|
private static final DataParameter<String> CONTINUOUS_SPELL = EntityDataManager.createKey(EntityWizard.class, DataSerializers.STRING);
|
||||||
|
private static final DataParameter<Integer> SPELL_COUNTER = EntityDataManager.createKey(EntityWizard.class, DataSerializers.VARINT);
|
||||||
|
|
||||||
// Field implementations
|
// Field implementations
|
||||||
private List<Spell> spells = new ArrayList<Spell>(4);
|
private List<Spell> spells = new ArrayList<Spell>(4);
|
||||||
private Spell continuousSpell;
|
|
||||||
private int spellCounter;
|
|
||||||
|
|
||||||
/** A set of the positions of the blocks that are part of this wizard's tower. */
|
/** A set of the positions of the blocks that are part of this wizard's tower. */
|
||||||
private Set<BlockPos> towerBlocks;
|
private Set<BlockPos> towerBlocks;
|
||||||
@@ -102,6 +103,8 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
|||||||
super.entityInit();
|
super.entityInit();
|
||||||
this.dataManager.register(HEAL_COOLDOWN, -1);
|
this.dataManager.register(HEAL_COOLDOWN, -1);
|
||||||
this.dataManager.register(ELEMENT, 0);
|
this.dataManager.register(ELEMENT, 0);
|
||||||
|
this.dataManager.register(CONTINUOUS_SPELL, "ebwizardry:none");
|
||||||
|
this.dataManager.register(SPELL_COUNTER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -182,23 +185,23 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setContinuousSpell(Spell spell){
|
public void setContinuousSpell(Spell spell) {
|
||||||
this.continuousSpell = spell;
|
this.dataManager.set(CONTINUOUS_SPELL, spell.getRegistryName().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Spell getContinuousSpell(){
|
public Spell getContinuousSpell() {
|
||||||
return this.continuousSpell;
|
return Spell.get(this.dataManager.get(CONTINUOUS_SPELL));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setSpellCounter(int count){
|
public void setSpellCounter(int count) {
|
||||||
spellCounter = count;
|
this.dataManager.set(SPELL_COUNTER, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSpellCounter(){
|
public int getSpellCounter() {
|
||||||
return spellCounter;
|
return this.dataManager.get(SPELL_COUNTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package electroblob.wizardry.event;
|
||||||
|
|
||||||
|
import electroblob.wizardry.constants.Element;
|
||||||
|
import electroblob.wizardry.tileentity.TileEntityImbuementAltar;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.Cancelable;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ImbuementActivateEvent is fired when {@link TileEntityImbuementAltar#getImbuementResult(net.minecraft.item.ItemStack, electroblob.wizardry.constants.Element[],
|
||||||
|
* boolean, net.minecraft.world.World, net.minecraft.entity.player.EntityPlayer)} is called to allow adding in imbuement "recipes" dynamically, based on the
|
||||||
|
* contents of the Imbuement altar's receptacles and the item placed on the altar.
|
||||||
|
*
|
||||||
|
* <i>Note that this event is only fired on the server side.</i><br>
|
||||||
|
* <br>
|
||||||
|
* To alter the result of the imbuement process, change the {@link electroblob.wizardry.event.ImbuementActivateEvent#result} result of the process.<br>
|
||||||
|
* <br>
|
||||||
|
* This event is {@link Cancelable}. If this event is canceled, no further processing takes place.<br>
|
||||||
|
* <br>
|
||||||
|
* This event does not have a result. {@link Event.HasResult}<br>
|
||||||
|
* <br>
|
||||||
|
* This event is fired on the {@link MinecraftForge#EVENT_BUS}.
|
||||||
|
*
|
||||||
|
* @author WinDanesz
|
||||||
|
* @since Wizardry 4.3.5
|
||||||
|
*/
|
||||||
|
@Cancelable
|
||||||
|
public class ImbuementActivateEvent extends Event {
|
||||||
|
|
||||||
|
/** The item stack being imbued */
|
||||||
|
public ItemStack input;
|
||||||
|
|
||||||
|
/** The elements of the four receptacles */
|
||||||
|
public Element[] receptacleElements;
|
||||||
|
|
||||||
|
/** A reference to the current world object (may be null if {@code fullLootGen} is false) */
|
||||||
|
public World world;
|
||||||
|
|
||||||
|
/** The player that last interacted with the imbuement altar, or null if there isn't one (or if this is being queried for other reasons, e.g. JEI) */
|
||||||
|
public EntityPlayer lastUser;
|
||||||
|
|
||||||
|
/** The resulting item stack of the imbuement process */
|
||||||
|
public ItemStack result;
|
||||||
|
|
||||||
|
public ImbuementActivateEvent(ItemStack input, Element[] receptacleElements, World world, EntityPlayer lastUser, ItemStack result) {
|
||||||
|
super();
|
||||||
|
this.input = input;
|
||||||
|
this.receptacleElements = receptacleElements;
|
||||||
|
this.world = world;
|
||||||
|
this.lastUser = lastUser;
|
||||||
|
this.result = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package electroblob.wizardry.event;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.Cancelable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ResurrectionEvent is fired when a player is about to be resurrected, after all other checks have been performed.
|
||||||
|
* <i>Note that this event is only fired on the server side.</i><br>
|
||||||
|
* <br>
|
||||||
|
* This event is {@link Cancelable}. If this event is canceled, the player is not resurrected.<br>
|
||||||
|
* <br>
|
||||||
|
* This event does not have a result. {@link HasResult}<br>
|
||||||
|
* <br>
|
||||||
|
* This event is fired on the {@link MinecraftForge#EVENT_BUS}.
|
||||||
|
*
|
||||||
|
* @author Electroblob
|
||||||
|
* @since Wizardry 2.1
|
||||||
|
*/
|
||||||
|
@Cancelable
|
||||||
|
public class ResurrectionEvent extends PlayerEvent {
|
||||||
|
|
||||||
|
private final EntityPlayer caster;
|
||||||
|
|
||||||
|
public ResurrectionEvent(EntityPlayer player, EntityPlayer caster){
|
||||||
|
super(player);
|
||||||
|
this.caster = caster;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns the player that cast the resurrection spell. If the player resurrected themselves, this will be the
|
||||||
|
* same as {@link ResurrectionEvent#getEntityPlayer()}. */
|
||||||
|
public EntityPlayer getCaster(){
|
||||||
|
return caster;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -123,6 +123,8 @@ public class ItemArtefact extends Item {
|
|||||||
this.enabled = enabled;
|
this.enabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled() { return enabled; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EnumRarity getRarity(ItemStack stack){
|
public EnumRarity getRarity(ItemStack stack){
|
||||||
return rarity;
|
return rarity;
|
||||||
@@ -344,6 +346,8 @@ public class ItemArtefact extends Item {
|
|||||||
|
|
||||||
findMatchingWandAndExecute(player, Spells.shield, wand -> {
|
findMatchingWandAndExecute(player, Spells.shield, wand -> {
|
||||||
|
|
||||||
|
if(wand.getItem() instanceof ItemScroll) return; // Ignore scrolls since they shouldn't work
|
||||||
|
|
||||||
List<Entity> projectiles = EntityUtils.getEntitiesWithinRadius(5, player.posX, player.posY, player.posZ, world, Entity.class);
|
List<Entity> projectiles = EntityUtils.getEntitiesWithinRadius(5, player.posX, player.posY, player.posZ, world, Entity.class);
|
||||||
projectiles.removeIf(e -> !(e instanceof IProjectile));
|
projectiles.removeIf(e -> !(e instanceof IProjectile));
|
||||||
Vec3d look = player.getLookVec();
|
Vec3d look = player.getLookVec();
|
||||||
|
|||||||
@@ -84,8 +84,15 @@ public class ItemManaFlask extends Item {
|
|||||||
stacks.addAll(player.inventory.armorInventory); // player#getArmorInventoryList() only returns an Iterable
|
stacks.addAll(player.inventory.armorInventory); // player#getArmorInventoryList() only returns an Iterable
|
||||||
|
|
||||||
if(stacks.stream().anyMatch(s -> s.getItem() instanceof IManaStoringItem && !((IManaStoringItem)s.getItem()).isManaFull(s))){
|
if(stacks.stream().anyMatch(s -> s.getItem() instanceof IManaStoringItem && !((IManaStoringItem)s.getItem()).isManaFull(s))){
|
||||||
player.setActiveHand(hand);
|
|
||||||
|
if(player.capabilities.isCreativeMode){
|
||||||
|
findAndChargeItem(flask, player);
|
||||||
|
}else{
|
||||||
|
player.setActiveHand(hand);
|
||||||
|
}
|
||||||
|
|
||||||
return new ActionResult<>(EnumActionResult.SUCCESS, flask);
|
return new ActionResult<>(EnumActionResult.SUCCESS, flask);
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
return new ActionResult<>(EnumActionResult.FAIL, flask);
|
return new ActionResult<>(EnumActionResult.FAIL, flask);
|
||||||
}
|
}
|
||||||
@@ -106,30 +113,32 @@ public class ItemManaFlask extends Item {
|
|||||||
public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase entity){
|
public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase entity){
|
||||||
|
|
||||||
if(entity instanceof EntityPlayer){
|
if(entity instanceof EntityPlayer){
|
||||||
|
findAndChargeItem(stack, (EntityPlayer)entity);
|
||||||
EntityPlayer player = (EntityPlayer)entity;
|
|
||||||
|
|
||||||
List<ItemStack> stacks = InventoryUtils.getPrioritisedHotbarAndOffhand(player);
|
|
||||||
stacks.addAll(player.inventory.armorInventory); // player#getArmorInventoryList() only returns an Iterable
|
|
||||||
|
|
||||||
// Find the chargeable item with the least mana
|
|
||||||
ItemStack toCharge = stacks.stream()
|
|
||||||
.filter(s -> s.getItem() instanceof IManaStoringItem && !((IManaStoringItem)s.getItem()).isManaFull(s))
|
|
||||||
.min(Comparator.comparingDouble(s -> ((IManaStoringItem)s.getItem()).getFullness(s))).orElse(null);
|
|
||||||
|
|
||||||
if(toCharge != null){
|
|
||||||
|
|
||||||
((IManaStoringItem)toCharge.getItem()).rechargeMana(toCharge, size.capacity);
|
|
||||||
|
|
||||||
EntityUtils.playSoundAtPlayer(player, WizardrySounds.ITEM_MANA_FLASK_USE, 1, 1);
|
|
||||||
EntityUtils.playSoundAtPlayer(player, WizardrySounds.ITEM_MANA_FLASK_RECHARGE, 0.7f, 1.1f);
|
|
||||||
|
|
||||||
if(!player.isCreative()) stack.shrink(1);
|
|
||||||
player.getCooldownTracker().setCooldown(this, 20);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void findAndChargeItem(ItemStack stack, EntityPlayer player){
|
||||||
|
|
||||||
|
List<ItemStack> stacks = InventoryUtils.getPrioritisedHotbarAndOffhand(player);
|
||||||
|
stacks.addAll(player.inventory.armorInventory); // player#getArmorInventoryList() only returns an Iterable
|
||||||
|
|
||||||
|
// Find the chargeable item with the least mana
|
||||||
|
ItemStack toCharge = stacks.stream()
|
||||||
|
.filter(s -> s.getItem() instanceof IManaStoringItem && !((IManaStoringItem)s.getItem()).isManaFull(s))
|
||||||
|
.min(Comparator.comparingDouble(s -> ((IManaStoringItem)s.getItem()).getFullness(s))).orElse(null);
|
||||||
|
|
||||||
|
if(toCharge != null){
|
||||||
|
|
||||||
|
((IManaStoringItem)toCharge.getItem()).rechargeMana(toCharge, size.capacity);
|
||||||
|
|
||||||
|
EntityUtils.playSoundAtPlayer(player, WizardrySounds.ITEM_MANA_FLASK_USE, 1, 1);
|
||||||
|
EntityUtils.playSoundAtPlayer(player, WizardrySounds.ITEM_MANA_FLASK_RECHARGE, 0.7f, 1.1f);
|
||||||
|
|
||||||
|
if(!player.isCreative()) stack.shrink(1);
|
||||||
|
player.getCooldownTracker().setCooldown(this, 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,9 +15,16 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.*;
|
import net.minecraft.util.ActionResult;
|
||||||
|
import net.minecraft.util.EnumActionResult;
|
||||||
|
import net.minecraft.util.EnumHand;
|
||||||
|
import net.minecraft.util.NonNullList;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.util.text.Style;
|
||||||
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.fml.common.Loader;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
@@ -100,6 +107,13 @@ public class ItemScroll extends Item implements ISpellCastingItem, IWorkbenchIte
|
|||||||
tooltip.add(spell.getElement().getDisplayName());
|
tooltip.add(spell.getElement().getDisplayName());
|
||||||
tooltip.add(spell.getType().getDisplayName());
|
tooltip.add(spell.getType().getDisplayName());
|
||||||
}
|
}
|
||||||
|
// Advanced tooltips displays the source mod's name if the spell is not from Wizardry
|
||||||
|
if (advanced.isAdvanced() && this.getRegistryName().toString().equals(Wizardry.MODID + ":scroll") && !spell.getRegistryName().getNamespace().equals(Wizardry.MODID)) {
|
||||||
|
String modId = spell.getRegistryName().getNamespace();
|
||||||
|
String name = new Style().setColor(TextFormatting.BLUE).setItalic(true).getFormattingCode() +
|
||||||
|
Loader.instance().getIndexedModList().get(modId).getMetadata().name;
|
||||||
|
tooltip.add(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,7 +209,7 @@ public class ItemScroll extends Item implements ISpellCastingItem, IWorkbenchIte
|
|||||||
if(!spell.isContinuous && !caster.isCreative()) stack.shrink(1);
|
if(!spell.isContinuous && !caster.isCreative()) stack.shrink(1);
|
||||||
|
|
||||||
// Now uses the vanilla cooldown mechanic to prevent spamming of spells
|
// Now uses the vanilla cooldown mechanic to prevent spamming of spells
|
||||||
if(!spell.isContinuous) caster.getCooldownTracker().setCooldown(this, spell.getCooldown());
|
if(!spell.isContinuous && !caster.isCreative()) caster.getCooldownTracker().setCooldown(this, spell.getCooldown());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -12,10 +12,15 @@ import net.minecraft.creativetab.CreativeTabs;
|
|||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.*;
|
import net.minecraft.util.ActionResult;
|
||||||
|
import net.minecraft.util.EnumActionResult;
|
||||||
|
import net.minecraft.util.EnumHand;
|
||||||
|
import net.minecraft.util.NonNullList;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.text.Style;
|
import net.minecraft.util.text.Style;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.fml.common.Loader;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
import net.minecraftforge.oredict.OreDictionary;
|
import net.minecraftforge.oredict.OreDictionary;
|
||||||
@@ -96,6 +101,13 @@ public class ItemSpellBook extends Item {
|
|||||||
tooltip.add(spell.getElement().getDisplayName());
|
tooltip.add(spell.getElement().getDisplayName());
|
||||||
tooltip.add(spell.getType().getDisplayName());
|
tooltip.add(spell.getType().getDisplayName());
|
||||||
}
|
}
|
||||||
|
// Advanced tooltips displays the source mod's name if the spell is not from Wizardry
|
||||||
|
if (advanced.isAdvanced() && this.getRegistryName().toString().equals(Wizardry.MODID + ":spell_book") && !spell.getRegistryName().getNamespace().equals(Wizardry.MODID)) {
|
||||||
|
String modId = spell.getRegistryName().getNamespace();
|
||||||
|
String name = new Style().setColor(TextFormatting.BLUE).setItalic(true).getFormattingCode() +
|
||||||
|
Loader.instance().getIndexedModList().get(modId).getMetadata().name;
|
||||||
|
tooltip.add(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package electroblob.wizardry.item;
|
package electroblob.wizardry.item;
|
||||||
|
|
||||||
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
import com.google.common.collect.Streams;
|
import com.google.common.collect.Streams;
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.client.DrawingUtils;
|
import electroblob.wizardry.client.DrawingUtils;
|
||||||
@@ -44,7 +46,11 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.Arrays;
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber
|
@Mod.EventBusSubscriber
|
||||||
@@ -54,13 +60,35 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
|||||||
private static final float SAGE_OTHER_COST_REDUCTION = 0.2f;
|
private static final float SAGE_OTHER_COST_REDUCTION = 0.2f;
|
||||||
private static final float WARLOCK_SPEED_BOOST = 0.2f;
|
private static final float WARLOCK_SPEED_BOOST = 0.2f;
|
||||||
private static final UUID WARLOCK_SPEED_BOOST_UUID = UUID.fromString("4bad7152-2663-4b1b-bb59-552e92847031");
|
private static final UUID WARLOCK_SPEED_BOOST_UUID = UUID.fromString("4bad7152-2663-4b1b-bb59-552e92847031");
|
||||||
|
// Standard ItemArmor modifiers
|
||||||
|
private static final UUID[] ARMOR_MODIFIERS = new UUID[] {UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"), UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"), UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150")};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot slot) {
|
||||||
|
// The vanilla armor handling logic from ItemArmor.getItemAttributeModifiers was moved to ItemWizardArmour.getAttributeModifiers to allow checking if the stack has enough mana
|
||||||
|
Multimap<String, AttributeModifier> multimap = ArrayListMultimap.create();
|
||||||
|
return multimap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Multimap<String, AttributeModifier> getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) {
|
||||||
|
Multimap<String, AttributeModifier> multimap = super.getAttributeModifiers(slot, stack);
|
||||||
|
|
||||||
|
// only grant armor if the equipment has mana
|
||||||
|
if (slot == this.armorType && !((ItemWizardArmour) stack.getItem()).isManaEmpty(stack)) {
|
||||||
|
multimap.put(SharedMonsterAttributes.ARMOR.getName(), new AttributeModifier(ARMOR_MODIFIERS[slot.getIndex()], "Armor modifier", this.damageReduceAmount, 0));
|
||||||
|
multimap.put(SharedMonsterAttributes.ARMOR_TOUGHNESS.getName(), new AttributeModifier(ARMOR_MODIFIERS[slot.getIndex()], "Armor toughness", this.toughness, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return multimap;
|
||||||
|
}
|
||||||
|
|
||||||
public enum ArmourClass {
|
public enum ArmourClass {
|
||||||
|
|
||||||
WIZARD(Materials.SILK, () -> null, "wizard", 0.1f, 0, "hat", "robe", "leggings", "boots"),
|
WIZARD(Materials.SILK, () -> null, "wizard", 0.1f, 0, "hat", "robe", "leggings", "boots"),
|
||||||
SAGE(Materials.SAGE, () -> WizardryItems.resplendent_thread, "sage", 0.2f, 0, "hat", "robe", "leggings", "boots"),
|
SAGE(Materials.SAGE, () -> WizardryItems.resplendent_thread, "sage", 0.2f, 0, "hat", "robe", "leggings", "boots"),
|
||||||
BATTLEMAGE(Materials.BATTLEMAGE, () -> WizardryItems.crystal_silver_plating, "battlemage", 0.05f, 0.15f, "helmet", "chestplate", "leggings", "boots"),
|
BATTLEMAGE(Materials.BATTLEMAGE, () -> WizardryItems.crystal_silver_plating, "battlemage", 0.05f, 0.05f, "helmet", "chestplate", "leggings", "boots"),
|
||||||
WARLOCK(Materials.WARLOCK, () -> WizardryItems.ethereal_crystalweave, "warlock", 0.1f, 0.3f, "hood", "robe", "leggings", "boots");
|
WARLOCK(Materials.WARLOCK, () -> WizardryItems.ethereal_crystalweave, "warlock", 0.1f, 0.1f, "hood", "robe", "leggings", "boots");
|
||||||
|
|
||||||
/** The armour material to use for this armour class. */
|
/** The armour material to use for this armour class. */
|
||||||
final ArmorMaterial material;
|
final ArmorMaterial material;
|
||||||
@@ -277,7 +305,7 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
|||||||
if(this.armourClass == ArmourClass.WIZARD){
|
if(this.armourClass == ArmourClass.WIZARD){
|
||||||
for(ArmourClass armourClass : ArmourClass.values()){
|
for(ArmourClass armourClass : ArmourClass.values()){
|
||||||
if(upgrade.getItem() == armourClass.upgradeItem.get()){
|
if(upgrade.getItem() == armourClass.upgradeItem.get()){
|
||||||
Item newArmour = getArmour(this.element, armourClass, this.getEquipmentSlot());
|
Item newArmour = getArmour(this.element, armourClass, this.armorType);
|
||||||
ItemStack newStack = new ItemStack(newArmour);
|
ItemStack newStack = new ItemStack(newArmour);
|
||||||
((ItemWizardArmour)newArmour).setMana(newStack, this.getMana(stack));
|
((ItemWizardArmour)newArmour).setMana(newStack, this.getMana(stack));
|
||||||
newStack.setTagCompound(stack.getTagCompound());
|
newStack.setTagCompound(stack.getTagCompound());
|
||||||
|
|||||||
@@ -12,12 +12,15 @@ import electroblob.wizardry.entity.living.*;
|
|||||||
import electroblob.wizardry.entity.projectile.EntityFirebomb;
|
import electroblob.wizardry.entity.projectile.EntityFirebomb;
|
||||||
import electroblob.wizardry.entity.projectile.EntityMagicFireball;
|
import electroblob.wizardry.entity.projectile.EntityMagicFireball;
|
||||||
import electroblob.wizardry.event.SpellCastEvent;
|
import electroblob.wizardry.event.SpellCastEvent;
|
||||||
|
import electroblob.wizardry.event.SpellCastEvent.Source;
|
||||||
|
import electroblob.wizardry.item.IManaStoringItem;
|
||||||
|
import electroblob.wizardry.item.ISpellCastingItem;
|
||||||
import electroblob.wizardry.item.ItemArtefact;
|
import electroblob.wizardry.item.ItemArtefact;
|
||||||
import electroblob.wizardry.registry.*;
|
import electroblob.wizardry.registry.*;
|
||||||
import electroblob.wizardry.spell.Banish;
|
import electroblob.wizardry.spell.Banish;
|
||||||
import electroblob.wizardry.spell.Spell;
|
|
||||||
import electroblob.wizardry.util.BlockUtils;
|
import electroblob.wizardry.util.BlockUtils;
|
||||||
import electroblob.wizardry.util.EntityUtils;
|
import electroblob.wizardry.util.EntityUtils;
|
||||||
|
import electroblob.wizardry.util.SpellModifiers;
|
||||||
import electroblob.wizardry.util.SpellProperties.Context;
|
import electroblob.wizardry.util.SpellProperties.Context;
|
||||||
import net.minecraft.entity.effect.EntityLightningBolt;
|
import net.minecraft.entity.effect.EntityLightningBolt;
|
||||||
import net.minecraft.entity.item.EntityFallingBlock;
|
import net.minecraft.entity.item.EntityFallingBlock;
|
||||||
@@ -174,6 +177,23 @@ public abstract class Forfeit {
|
|||||||
|
|
||||||
forfeit.apply(event.getWorld(), player);
|
forfeit.apply(event.getWorld(), player);
|
||||||
|
|
||||||
|
ItemStack stack = player.getHeldItemMainhand();
|
||||||
|
|
||||||
|
if(!(stack.getItem() instanceof ISpellCastingItem)){
|
||||||
|
stack = player.getHeldItemOffhand();
|
||||||
|
if(!(stack.getItem() instanceof ISpellCastingItem)) stack = ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!stack.isEmpty()){
|
||||||
|
// Still need to charge the player mana or consume the scroll
|
||||||
|
if(event.getSource() == Source.SCROLL){
|
||||||
|
if(!player.isCreative()) stack.shrink(1);
|
||||||
|
}else if(stack.getItem() instanceof IManaStoringItem){
|
||||||
|
int cost = (int)(event.getSpell().getCost() * event.getModifiers().get(SpellModifiers.COST) + 0.1f); // Weird floaty rounding
|
||||||
|
((IManaStoringItem)stack.getItem()).consumeMana(stack, cost, player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WizardryAdvancementTriggers.spell_failure.triggerFor(player);
|
WizardryAdvancementTriggers.spell_failure.triggerFor(player);
|
||||||
|
|
||||||
EntityUtils.playSoundAtPlayer(player, forfeit.getSound(), WizardrySounds.SPELLS, 1, 1);
|
EntityUtils.playSoundAtPlayer(player, forfeit.getSound(), WizardrySounds.SPELLS, 1, 1);
|
||||||
@@ -222,10 +242,11 @@ public abstract class Forfeit {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
add(Tier.MASTER, Element.FIRE, create("burn_surroundings", (w, p) -> {
|
add(Tier.MASTER, Element.FIRE, create("burn_surroundings", (w, p) -> {
|
||||||
if(!w.isRemote){
|
if(!w.isRemote && EntityUtils.canDamageBlocks(p, w)){
|
||||||
List<BlockPos> sphere = BlockUtils.getBlockSphere(p.getPosition(), 6);
|
List<BlockPos> sphere = BlockUtils.getBlockSphere(p.getPosition(), 6);
|
||||||
for(BlockPos pos : sphere){
|
for(BlockPos pos : sphere){
|
||||||
if(w.rand.nextBoolean() && w.isAirBlock(pos)) w.setBlockState(pos, Blocks.FIRE.getDefaultState());
|
if(w.rand.nextBoolean() && w.isAirBlock(pos) && BlockUtils.canPlaceBlock(p, w, pos))
|
||||||
|
w.setBlockState(pos, Blocks.FIRE.getDefaultState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
@@ -376,10 +397,11 @@ public abstract class Forfeit {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
add(Tier.NOVICE, Element.EARTH, create("snares", (w, p) -> {
|
add(Tier.NOVICE, Element.EARTH, create("snares", (w, p) -> {
|
||||||
if(!w.isRemote){
|
if(!w.isRemote && EntityUtils.canDamageBlocks(p, w)){
|
||||||
for(EnumFacing direction : EnumFacing.HORIZONTALS){
|
for(EnumFacing direction : EnumFacing.HORIZONTALS){
|
||||||
BlockPos pos = p.getPosition().offset(direction);
|
BlockPos pos = p.getPosition().offset(direction);
|
||||||
if(BlockUtils.canBlockBeReplaced(w, pos)) w.setBlockState(pos, WizardryBlocks.snare.getDefaultState());
|
if(BlockUtils.canBlockBeReplaced(w, pos) && BlockUtils.canPlaceBlock(p, w, pos))
|
||||||
|
w.setBlockState(pos, WizardryBlocks.snare.getDefaultState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
@@ -393,9 +415,9 @@ public abstract class Forfeit {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
add(Tier.APPRENTICE, Element.EARTH, create("uproot_plants", (w, p) -> {
|
add(Tier.APPRENTICE, Element.EARTH, create("uproot_plants", (w, p) -> {
|
||||||
if(!w.isRemote){
|
if(!w.isRemote && EntityUtils.canDamageBlocks(p, w)){
|
||||||
List<BlockPos> sphere = BlockUtils.getBlockSphere(p.getPosition(), 5);
|
List<BlockPos> sphere = BlockUtils.getBlockSphere(p.getPosition(), 5);
|
||||||
sphere.removeIf(pos -> !(w.getBlockState(pos).getBlock() instanceof IPlantable));
|
sphere.removeIf(pos -> !(w.getBlockState(pos).getBlock() instanceof IPlantable) || !BlockUtils.canBreakBlock(p, w, pos));
|
||||||
sphere.forEach(pos -> w.destroyBlock(pos, true));
|
sphere.forEach(pos -> w.destroyBlock(pos, true));
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
@@ -403,9 +425,9 @@ public abstract class Forfeit {
|
|||||||
add(Tier.APPRENTICE, Element.EARTH, create("poison_self", (w, p) -> p.addPotionEffect(new PotionEffect(MobEffects.POISON, 400, 1))));
|
add(Tier.APPRENTICE, Element.EARTH, create("poison_self", (w, p) -> p.addPotionEffect(new PotionEffect(MobEffects.POISON, 400, 1))));
|
||||||
|
|
||||||
add(Tier.ADVANCED, Element.EARTH, create("flood", (w, p) -> {
|
add(Tier.ADVANCED, Element.EARTH, create("flood", (w, p) -> {
|
||||||
if(!w.isRemote){
|
if(!w.isRemote && EntityUtils.canDamageBlocks(p, w)){
|
||||||
List<BlockPos> sphere = BlockUtils.getBlockSphere(p.getPosition().up(), 2);
|
List<BlockPos> sphere = BlockUtils.getBlockSphere(p.getPosition().up(), 2);
|
||||||
sphere.removeIf(pos -> !BlockUtils.canBlockBeReplaced(w, pos, true));
|
sphere.removeIf(pos -> !BlockUtils.canBlockBeReplaced(w, pos, true) || !BlockUtils.canPlaceBlock(p, w, pos));
|
||||||
sphere.forEach(pos -> w.setBlockState(pos, Blocks.WATER.getDefaultState()));
|
sphere.forEach(pos -> w.setBlockState(pos, Blocks.WATER.getDefaultState()));
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
@@ -413,8 +435,7 @@ public abstract class Forfeit {
|
|||||||
add(Tier.MASTER, Element.EARTH, create("bury_self", (w, p) -> {
|
add(Tier.MASTER, Element.EARTH, create("bury_self", (w, p) -> {
|
||||||
if(!w.isRemote){
|
if(!w.isRemote){
|
||||||
List<BlockPos> sphere = BlockUtils.getBlockSphere(p.getPosition(), 4);
|
List<BlockPos> sphere = BlockUtils.getBlockSphere(p.getPosition(), 4);
|
||||||
sphere.removeIf(pos -> !w.getBlockState(pos).isFullCube());
|
sphere.removeIf(pos -> !w.getBlockState(pos).isFullCube() || BlockUtils.isBlockUnbreakable(w, pos) || BlockUtils.canBreakBlock(p, w, pos));
|
||||||
sphere.removeIf(pos -> BlockUtils.isBlockUnbreakable(w, pos));
|
|
||||||
sphere.forEach(pos -> {
|
sphere.forEach(pos -> {
|
||||||
EntityFallingBlock block = new EntityFallingBlock(w, pos.getX() + 0.5, pos.getY() + 0.5,
|
EntityFallingBlock block = new EntityFallingBlock(w, pos.getX() + 0.5, pos.getY() + 0.5,
|
||||||
pos.getZ() + 0.5, w.getBlockState(pos));
|
pos.getZ() + 0.5, w.getBlockState(pos));
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package electroblob.wizardry.misc;
|
package electroblob.wizardry.misc;
|
||||||
|
|
||||||
|
import com.google.common.collect.HashMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.item.IManaStoringItem;
|
import electroblob.wizardry.item.IManaStoringItem;
|
||||||
import electroblob.wizardry.item.ItemManaFlask;
|
import electroblob.wizardry.item.ItemManaFlask;
|
||||||
import net.minecraft.inventory.InventoryCrafting;
|
import net.minecraft.inventory.InventoryCrafting;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.crafting.CraftingManager;
|
|
||||||
import net.minecraft.item.crafting.IRecipe;
|
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
@@ -15,6 +15,8 @@ import net.minecraftforge.fml.common.gameevent.PlayerEvent;
|
|||||||
import net.minecraftforge.oredict.OreDictionary;
|
import net.minecraftforge.oredict.OreDictionary;
|
||||||
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements a dynamic crafting recipe for recharging items with mana flasks.
|
* Implements a dynamic crafting recipe for recharging items with mana flasks.
|
||||||
*
|
*
|
||||||
@@ -24,6 +26,8 @@ import net.minecraftforge.oredict.ShapelessOreRecipe;
|
|||||||
@Mod.EventBusSubscriber
|
@Mod.EventBusSubscriber
|
||||||
public class RecipeRechargeWithFlask extends ShapelessOreRecipe {
|
public class RecipeRechargeWithFlask extends ShapelessOreRecipe {
|
||||||
|
|
||||||
|
private static final Multimap<Item, RecipeRechargeWithFlask> FLASK_RECIPES = HashMultimap.create();
|
||||||
|
|
||||||
private final IManaStoringItem chargeable;
|
private final IManaStoringItem chargeable;
|
||||||
private final ItemManaFlask flask;
|
private final ItemManaFlask flask;
|
||||||
|
|
||||||
@@ -38,6 +42,7 @@ public class RecipeRechargeWithFlask extends ShapelessOreRecipe {
|
|||||||
if(!(chargeable instanceof IManaStoringItem)) throw new IllegalArgumentException("Item to be charged must be an instance of IManaStoringItem");
|
if(!(chargeable instanceof IManaStoringItem)) throw new IllegalArgumentException("Item to be charged must be an instance of IManaStoringItem");
|
||||||
this.chargeable = (IManaStoringItem)chargeable;
|
this.chargeable = (IManaStoringItem)chargeable;
|
||||||
this.flask = flask;
|
this.flask = flask;
|
||||||
|
FLASK_RECIPES.put(chargeable, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commented out for now because JEI spams the log with errors about the recipe having no output
|
// Commented out for now because JEI spams the log with errors about the recipe having no output
|
||||||
@@ -91,11 +96,11 @@ public class RecipeRechargeWithFlask extends ShapelessOreRecipe {
|
|||||||
// This means that although I no longer have to replace the result every tick, I still need to do it here
|
// This means that although I no longer have to replace the result every tick, I still need to do it here
|
||||||
// ... I thought the whole point of the new recipe system was so that I DIDN'T have to do this?!
|
// ... I thought the whole point of the new recipe system was so that I DIDN'T have to do this?!
|
||||||
if(event.craftMatrix instanceof InventoryCrafting){
|
if(event.craftMatrix instanceof InventoryCrafting){
|
||||||
for(IRecipe recipe : CraftingManager.REGISTRY){
|
Collection<RecipeRechargeWithFlask> recipes = FLASK_RECIPES.get(event.crafting.getItem());
|
||||||
if(recipe instanceof RecipeRechargeWithFlask
|
for(RecipeRechargeWithFlask recipe : recipes){
|
||||||
&& recipe.matches((InventoryCrafting)event.craftMatrix, event.player.world)){
|
if(recipe.matches((InventoryCrafting)event.craftMatrix, event.player.world)){
|
||||||
// Have to modify the itemstack in the actual event, it cannot be replaced
|
// Have to modify the itemstack in the actual event, it cannot be replaced
|
||||||
((RecipeRechargeWithFlask)recipe).rechargeItemAndCopyNBT(event.crafting, (InventoryCrafting)event.craftMatrix);
|
recipe.rechargeItemAndCopyNBT(event.crafting, (InventoryCrafting)event.craftMatrix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package electroblob.wizardry.packet;
|
package electroblob.wizardry.packet;
|
||||||
|
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
|
import electroblob.wizardry.event.ResurrectionEvent;
|
||||||
import electroblob.wizardry.inventory.ContainerArcaneWorkbench;
|
import electroblob.wizardry.inventory.ContainerArcaneWorkbench;
|
||||||
import electroblob.wizardry.item.ISpellCastingItem;
|
import electroblob.wizardry.item.ISpellCastingItem;
|
||||||
import electroblob.wizardry.packet.PacketControlInput.Message;
|
import electroblob.wizardry.packet.PacketControlInput.Message;
|
||||||
@@ -13,6 +14,7 @@ import io.netty.buffer.ByteBuf;
|
|||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
||||||
@@ -79,6 +81,7 @@ public class PacketControlInput implements IMessageHandler<Message, IMessage> {
|
|||||||
.filter(s -> Resurrection.canStackResurrect(s, player)).findFirst().orElse(null);
|
.filter(s -> Resurrection.canStackResurrect(s, player)).findFirst().orElse(null);
|
||||||
|
|
||||||
if(stack != null){
|
if(stack != null){
|
||||||
|
if(MinecraftForge.EVENT_BUS.post(new ResurrectionEvent(player, player))) break;
|
||||||
// This should suffice, since this is the only way a player can cast resurrection when dead!
|
// This should suffice, since this is the only way a player can cast resurrection when dead!
|
||||||
((ISpellCastingItem)stack.getItem()).cast(stack, Spells.resurrection, player, EnumHand.MAIN_HAND, 0, new SpellModifiers());
|
((ISpellCastingItem)stack.getItem()).cast(stack, Spells.resurrection, player, EnumHand.MAIN_HAND, 0, new SpellModifiers());
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -20,8 +20,14 @@ public class PacketSpellProperties implements IMessageHandler<PacketSpellPropert
|
|||||||
if(ctx.side.isClient()){
|
if(ctx.side.isClient()){
|
||||||
|
|
||||||
net.minecraft.client.Minecraft.getMinecraft().addScheduledTask(() -> {
|
net.minecraft.client.Minecraft.getMinecraft().addScheduledTask(() -> {
|
||||||
for(int i=0; i<message.propertiesArray.length; i++){
|
|
||||||
Spell.byNetworkID(i).setPropertiesClient(message.propertiesArray[i]);
|
int spellId = message.firstId;
|
||||||
|
|
||||||
|
for(int i = 0; i <message.propertiesArray.length; i++){
|
||||||
|
Spell spell = Spell.byNetworkID(spellId);
|
||||||
|
SpellProperties props = message.propertiesArray[i];
|
||||||
|
spell.setPropertiesClient(props);
|
||||||
|
spellId++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -32,22 +38,31 @@ public class PacketSpellProperties implements IMessageHandler<PacketSpellPropert
|
|||||||
public static class Message implements IMessage {
|
public static class Message implements IMessage {
|
||||||
|
|
||||||
private SpellProperties[] propertiesArray;
|
private SpellProperties[] propertiesArray;
|
||||||
|
private int firstId;
|
||||||
|
private int count;
|
||||||
// This constructor is required otherwise you'll get errors (used somewhere in fml through reflection)
|
// This constructor is required otherwise you'll get errors (used somewhere in fml through reflection)
|
||||||
public Message(){}
|
public Message(){}
|
||||||
|
|
||||||
public Message(SpellProperties... properties){
|
public Message(int firstId, int count, SpellProperties... properties){
|
||||||
|
this.firstId = firstId;
|
||||||
|
this.count = count;
|
||||||
this.propertiesArray = properties;
|
this.propertiesArray = properties;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fromBytes(ByteBuf buf){
|
public void fromBytes(ByteBuf buf){
|
||||||
|
|
||||||
List<SpellProperties> propertiesList = new ArrayList<>();
|
List<SpellProperties> propertiesList = new ArrayList<>();
|
||||||
int i = 0;
|
firstId = buf.readInt();
|
||||||
|
count = buf.readInt();
|
||||||
|
|
||||||
while(buf.isReadable()){
|
int k = 0;
|
||||||
propertiesList.add(new SpellProperties(Spell.byNetworkID(i++), buf));
|
int j = firstId;
|
||||||
|
while(k < count){
|
||||||
|
SpellProperties props = new SpellProperties(Spell.byNetworkID(j), buf);
|
||||||
|
propertiesList.add(props);
|
||||||
|
k++;
|
||||||
|
j++;
|
||||||
}
|
}
|
||||||
|
|
||||||
propertiesArray = propertiesList.toArray(new SpellProperties[0]);
|
propertiesArray = propertiesList.toArray(new SpellProperties[0]);
|
||||||
@@ -55,6 +70,8 @@ public class PacketSpellProperties implements IMessageHandler<PacketSpellPropert
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void toBytes(ByteBuf buf){
|
public void toBytes(ByteBuf buf){
|
||||||
|
buf.writeInt(firstId);
|
||||||
|
buf.writeInt(count);
|
||||||
for(SpellProperties properties : propertiesArray) properties.write(buf);
|
for(SpellProperties properties : propertiesArray) properties.write(buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ import electroblob.wizardry.Wizardry;
|
|||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.inventory.EntityEquipmentSlot;
|
import net.minecraft.inventory.EntityEquipmentSlot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.DamageSource;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraftforge.common.ISpecialArmor;
|
||||||
|
|
||||||
public class CurseUndeath extends Curse {
|
public class CurseUndeath extends Curse {
|
||||||
|
|
||||||
@@ -25,7 +27,7 @@ public class CurseUndeath extends Curse {
|
|||||||
|
|
||||||
// Adapted from EntityZombie
|
// Adapted from EntityZombie
|
||||||
if(entitylivingbase.world.isDaytime() && !entitylivingbase.world.isRemote){
|
if(entitylivingbase.world.isDaytime() && !entitylivingbase.world.isRemote){
|
||||||
|
|
||||||
float f = entitylivingbase.getBrightness();
|
float f = entitylivingbase.getBrightness();
|
||||||
|
|
||||||
if(f > 0.5F && entitylivingbase.world.rand.nextFloat() * 30.0F < (f - 0.4F) * 2.0F
|
if(f > 0.5F && entitylivingbase.world.rand.nextFloat() * 30.0F < (f - 0.4F) * 2.0F
|
||||||
@@ -35,14 +37,17 @@ public class CurseUndeath extends Curse {
|
|||||||
boolean flag = true;
|
boolean flag = true;
|
||||||
ItemStack itemstack = entitylivingbase.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
|
ItemStack itemstack = entitylivingbase.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
|
||||||
|
|
||||||
if(!itemstack.isEmpty()){
|
if (!itemstack.isEmpty()) {
|
||||||
if(itemstack.isItemStackDamageable()){
|
if (itemstack.isItemStackDamageable()) {
|
||||||
|
|
||||||
itemstack.setItemDamage(itemstack.getItemDamage() + entitylivingbase.world.rand.nextInt(2));
|
if (itemstack.getItem() instanceof ISpecialArmor) {
|
||||||
|
((ISpecialArmor) itemstack.getItem()).damageArmor(entitylivingbase, itemstack, DamageSource.ON_FIRE, entitylivingbase.world.rand.nextInt(2), EntityEquipmentSlot.HEAD.getSlotIndex());
|
||||||
if(itemstack.getItemDamage() >= itemstack.getMaxDamage()){
|
} else {
|
||||||
entitylivingbase.renderBrokenItemStack(itemstack);
|
itemstack.setItemDamage(itemstack.getItemDamage() + entitylivingbase.world.rand.nextInt(2));
|
||||||
entitylivingbase.setItemStackToSlot(EntityEquipmentSlot.HEAD, ItemStack.EMPTY);
|
if (itemstack.getItemDamage() >= itemstack.getMaxDamage()) {
|
||||||
|
entitylivingbase.renderBrokenItemStack(itemstack);
|
||||||
|
entitylivingbase.setItemStackToSlot(EntityEquipmentSlot.HEAD, ItemStack.EMPTY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,17 +2,14 @@ package electroblob.wizardry.potion;
|
|||||||
|
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.registry.WizardryPotions;
|
import electroblob.wizardry.registry.WizardryPotions;
|
||||||
|
import electroblob.wizardry.registry.WizardrySounds;
|
||||||
import electroblob.wizardry.util.EntityUtils;
|
import electroblob.wizardry.util.EntityUtils;
|
||||||
import electroblob.wizardry.util.GeometryUtils;
|
import electroblob.wizardry.util.GeometryUtils;
|
||||||
import electroblob.wizardry.util.NBTExtras;
|
import electroblob.wizardry.util.NBTExtras;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
|
||||||
import net.minecraft.nbt.NBTUtil;
|
import net.minecraft.nbt.NBTUtil;
|
||||||
import net.minecraft.network.play.server.SPacketEntityVelocity;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.MathHelper;
|
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
@@ -23,8 +20,6 @@ public class PotionContainment extends PotionMagicEffect {
|
|||||||
|
|
||||||
public static final String ENTITY_TAG = "containmentPos";
|
public static final String ENTITY_TAG = "containmentPos";
|
||||||
|
|
||||||
private static final double RUBBERBAND_THRESHOLD = 0.24;
|
|
||||||
|
|
||||||
public PotionContainment(boolean isBadEffect, int liquidColour){
|
public PotionContainment(boolean isBadEffect, int liquidColour){
|
||||||
super(isBadEffect, liquidColour, new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons/containment.png"));
|
super(isBadEffect, liquidColour, new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons/containment.png"));
|
||||||
this.setPotionName("potion." + Wizardry.MODID + ":containment");
|
this.setPotionName("potion." + Wizardry.MODID + ":containment");
|
||||||
@@ -41,7 +36,6 @@ public class PotionContainment extends PotionMagicEffect {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void performEffect(EntityLivingBase target, int strength){
|
public void performEffect(EntityLivingBase target, int strength){
|
||||||
|
|
||||||
float maxDistance = getContainmentDistance(strength);
|
float maxDistance = getContainmentDistance(strength);
|
||||||
|
|
||||||
// Initialise the containment position to the entity's position if it wasn't set already
|
// Initialise the containment position to the entity's position if it wasn't set already
|
||||||
@@ -63,59 +57,15 @@ public class PotionContainment extends PotionMagicEffect {
|
|||||||
if(target.getEntityBoundingBox().maxZ > origin.z + maxDistance) z = origin.z + maxDistance - target.width/2;
|
if(target.getEntityBoundingBox().maxZ > origin.z + maxDistance) z = origin.z + maxDistance - target.width/2;
|
||||||
if(target.getEntityBoundingBox().minZ < origin.z - maxDistance) z = origin.z - maxDistance + target.width/2;
|
if(target.getEntityBoundingBox().minZ < origin.z - maxDistance) z = origin.z - maxDistance + target.width/2;
|
||||||
|
|
||||||
if(x != target.posX || y != target.posY || z != target.posZ){
|
if(x != target.posX || y != target.posY || z != target.posZ)
|
||||||
|
{
|
||||||
|
if(target.world.isRemote){
|
||||||
|
EntityUtils.undoGravity(target);
|
||||||
|
target.addVelocity(0.15 * Math.signum(x - target.posX), 0.15 * Math.signum(y - target.posY), 0.15 * Math.signum(z - target.posZ));
|
||||||
|
|
||||||
// if(target.world.isRemote){
|
target.world.playSound(target.posX, target.posY, target.posZ, WizardrySounds.ENTITY_FORCEFIELD_DEFLECT,
|
||||||
//
|
WizardrySounds.SPELLS, 0.3f, 1f, false);
|
||||||
// if(x != target.posX){
|
|
||||||
// for(int i = 0; i < 20; i++){
|
|
||||||
// ParticleBuilder.create(ParticleBuilder.Type.DUST).pos(
|
|
||||||
// x,
|
|
||||||
// target.posY + target.height * target.world.rand.nextFloat(),
|
|
||||||
// target.posZ + target.width * (target.world.rand.nextFloat() - 0.5f))
|
|
||||||
// .face(EnumFacing.EAST).clr(0.8f, 0.9f, 1).spawn(target.world);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if(y != target.posY){
|
|
||||||
// for(int i = 0; i < 20; i++){
|
|
||||||
// ParticleBuilder.create(ParticleBuilder.Type.DUST).pos(
|
|
||||||
// target.posX + target.width * (target.world.rand.nextFloat() - 0.5f),
|
|
||||||
// y,
|
|
||||||
// target.posZ + target.width * (target.world.rand.nextFloat() - 0.5f))
|
|
||||||
// .face(EnumFacing.UP).clr(0.8f, 0.9f, 1).spawn(target.world);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if(z != target.posZ){
|
|
||||||
// for(int i = 0; i < 20; i++){
|
|
||||||
// ParticleBuilder.create(ParticleBuilder.Type.DUST).pos(
|
|
||||||
// target.posX + target.width * (target.world.rand.nextFloat() - 0.5f),
|
|
||||||
// target.posY + target.height * target.world.rand.nextFloat(),
|
|
||||||
// z)
|
|
||||||
// .face(EnumFacing.SOUTH).clr(0.8f, 0.9f, 1).spawn(target.world);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Rubberbanding prevention (the 0.25 limit is from NetHandlerPlayServer, just search "moved wrongly"
|
|
||||||
if(target instanceof EntityPlayer){
|
|
||||||
x = MathHelper.clamp(x, target.posX - RUBBERBAND_THRESHOLD, target.posX + RUBBERBAND_THRESHOLD);
|
|
||||||
y = MathHelper.clamp(y, target.posY - RUBBERBAND_THRESHOLD, target.posY + RUBBERBAND_THRESHOLD);
|
|
||||||
z = MathHelper.clamp(z, target.posZ - RUBBERBAND_THRESHOLD, target.posZ + RUBBERBAND_THRESHOLD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EntityUtils.undoGravity(target);
|
|
||||||
target.addVelocity(0.35 * Math.signum(x - target.posX), 0.35 * Math.signum(y - target.posY), 0.35 * Math.signum(z - target.posZ));
|
|
||||||
target.setPositionAndUpdate(x, y, z); // FIXME: This line must be causing the server rubberbanding, not sure why
|
|
||||||
// Player motion is handled on that player's client so needs packets
|
|
||||||
if(target instanceof EntityPlayerMP){
|
|
||||||
((EntityPlayerMP)target).connection.sendPacket(new SPacketEntityVelocity(target));
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// target.world.playSound(target.posX, target.posY, target.posZ, WizardrySounds.ENTITY_FORCEFIELD_DEFLECT,
|
|
||||||
// WizardrySounds.SPELLS, 0.3f, 1f, false);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Need to do this here because it's the only way to hook into potion ending both client- and server-side
|
// Need to do this here because it's the only way to hook into potion ending both client- and server-side
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import electroblob.wizardry.constants.Constants;
|
|||||||
import electroblob.wizardry.registry.WizardryPotions;
|
import electroblob.wizardry.registry.WizardryPotions;
|
||||||
import electroblob.wizardry.util.ParticleBuilder;
|
import electroblob.wizardry.util.ParticleBuilder;
|
||||||
import electroblob.wizardry.util.ParticleBuilder.Type;
|
import electroblob.wizardry.util.ParticleBuilder.Type;
|
||||||
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.SharedMonsterAttributes;
|
import net.minecraft.entity.SharedMonsterAttributes;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
@@ -50,4 +51,18 @@ public class PotionFrost extends PotionMagicEffect implements ICustomPotionParti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void performEffect(EntityLivingBase entitylivingbase, int strength) {
|
||||||
|
if (entitylivingbase.isBurning()) {
|
||||||
|
if (entitylivingbase.isPotionActive(WizardryPotions.frost)) {
|
||||||
|
entitylivingbase.removePotionEffect(WizardryPotions.frost);
|
||||||
|
entitylivingbase.extinguish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isReady(int duration, int amplifier) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,11 @@ import electroblob.wizardry.loot.RandomSpell;
|
|||||||
import electroblob.wizardry.loot.WizardSpell;
|
import electroblob.wizardry.loot.WizardSpell;
|
||||||
import net.minecraft.entity.EnumCreatureType;
|
import net.minecraft.entity.EnumCreatureType;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.storage.loot.*;
|
import net.minecraft.world.storage.loot.LootEntry;
|
||||||
|
import net.minecraft.world.storage.loot.LootEntryTable;
|
||||||
|
import net.minecraft.world.storage.loot.LootPool;
|
||||||
|
import net.minecraft.world.storage.loot.LootTableList;
|
||||||
|
import net.minecraft.world.storage.loot.RandomValueRange;
|
||||||
import net.minecraft.world.storage.loot.conditions.LootCondition;
|
import net.minecraft.world.storage.loot.conditions.LootCondition;
|
||||||
import net.minecraft.world.storage.loot.functions.LootFunctionManager;
|
import net.minecraft.world.storage.loot.functions.LootFunctionManager;
|
||||||
import net.minecraftforge.event.LootTableLoadEvent;
|
import net.minecraftforge.event.LootTableLoadEvent;
|
||||||
@@ -90,23 +94,27 @@ public final class WizardryLoot {
|
|||||||
event.getTable().addPool(getAdditive(Wizardry.MODID + ":chests/jungle_dispenser_additions", Wizardry.MODID + "_additional_dispenser_loot"));
|
event.getTable().addPool(getAdditive(Wizardry.MODID + ":chests/jungle_dispenser_additions", Wizardry.MODID + "_additional_dispenser_loot"));
|
||||||
}
|
}
|
||||||
// Mob drops
|
// Mob drops
|
||||||
// Let's hope mods will play nice and store their entity loot tables under 'entities' or 'entity'
|
if (Wizardry.settings.injectMobDrops) {
|
||||||
// If not, packmakers will have to sort it out themselves using the whitelist/blacklist
|
// Let's hope mods will play nice and store their entity loot tables under 'entities' or 'entity'
|
||||||
if(Arrays.asList(Wizardry.settings.mobLootTableWhitelist).contains(event.getName())){
|
// If not, packmakers will have to sort it out themselves using the whitelist/blacklist
|
||||||
event.getTable().addPool(getAdditive(Wizardry.MODID + ":entities/mob_additions", Wizardry.MODID + "_additional_mob_drops"));
|
if (Arrays.asList(Wizardry.settings.mobLootTableWhitelist).contains(event.getName())) {
|
||||||
|
|
||||||
}else if(!Arrays.asList(Wizardry.settings.mobLootTableBlacklist).contains(event.getName())
|
|
||||||
&& event.getName().getPath().contains("entities") || event.getName().getPath().contains("entity")){
|
|
||||||
// Get the filename of the loot table json, for well-behaved mods this will be the entity name
|
|
||||||
String[] split = event.getName().getPath().split("/");
|
|
||||||
String entityName = split[split.length - 1];
|
|
||||||
|
|
||||||
EntityEntry entry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(entityName));
|
|
||||||
if(entry == null) return; // If this is true it didn't work :(
|
|
||||||
Class entityClass = entry.getEntityClass();
|
|
||||||
|
|
||||||
if(EnumCreatureType.MONSTER.getCreatureClass().isAssignableFrom(entityClass)){
|
|
||||||
event.getTable().addPool(getAdditive(Wizardry.MODID + ":entities/mob_additions", Wizardry.MODID + "_additional_mob_drops"));
|
event.getTable().addPool(getAdditive(Wizardry.MODID + ":entities/mob_additions", Wizardry.MODID + "_additional_mob_drops"));
|
||||||
|
|
||||||
|
} else if (!Arrays.asList(Wizardry.settings.mobLootTableBlacklist).contains(event.getName())
|
||||||
|
&& event.getName().getPath().contains("entities") || event.getName().getPath().contains("entity")) {
|
||||||
|
// Get the filename of the loot table json, for well-behaved mods this will be the entity name
|
||||||
|
String[] split = event.getName().getPath().split("/");
|
||||||
|
String entityName = split[split.length - 1];
|
||||||
|
|
||||||
|
EntityEntry entry = ForgeRegistries.ENTITIES.getValue(new ResourceLocation(entityName));
|
||||||
|
if (entry == null) {
|
||||||
|
return; // If this is true it didn't work :(
|
||||||
|
}
|
||||||
|
Class entityClass = entry.getEntityClass();
|
||||||
|
|
||||||
|
if (EnumCreatureType.MONSTER.getCreatureClass().isAssignableFrom(entityClass)) {
|
||||||
|
event.getTable().addPool(getAdditive(Wizardry.MODID + ":entities/mob_additions", Wizardry.MODID + "_additional_mob_drops"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Fishing loot
|
// Fishing loot
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class ConjureBlock extends SpellRay {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean onBlockHit(World world, BlockPos pos, EnumFacing side, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){
|
protected boolean onBlockHit(World world, BlockPos pos, EnumFacing side, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){
|
||||||
|
|
||||||
if(caster.isSneaking() && world.getBlockState(pos).getBlock() == WizardryBlocks.spectral_block){
|
if(caster != null && caster.isSneaking() && world.getBlockState(pos).getBlock() == WizardryBlocks.spectral_block){
|
||||||
|
|
||||||
if(!world.isRemote){
|
if(!world.isRemote){
|
||||||
// Dispelling of blocks
|
// Dispelling of blocks
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class CurseOfSoulbinding extends SpellRay {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean onEntityHit(World world, Entity target, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){
|
protected boolean onEntityHit(World world, Entity target, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){
|
||||||
|
|
||||||
if(EntityUtils.isLiving(target) && caster instanceof EntityPlayer){
|
if(EntityUtils.isLiving(target) && caster instanceof EntityPlayer){
|
||||||
WizardData data = WizardData.get((EntityPlayer)caster);
|
WizardData data = WizardData.get((EntityPlayer)caster);
|
||||||
if(data != null){
|
if(data != null){
|
||||||
@@ -66,7 +66,7 @@ public class CurseOfSoulbinding extends SpellRay {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ public class CurseOfSoulbinding extends SpellRay {
|
|||||||
protected boolean onMiss(World world, EntityLivingBase caster, Vec3d origin, Vec3d direction, int ticksInUse, SpellModifiers modifiers){
|
protected boolean onMiss(World world, EntityLivingBase caster, Vec3d origin, Vec3d direction, int ticksInUse, SpellModifiers modifiers){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void spawnParticle(World world, double x, double y, double z, double vx, double vy, double vz){
|
protected void spawnParticle(World world, double x, double y, double z, double vx, double vy, double vz){
|
||||||
ParticleBuilder.create(Type.DARK_MAGIC).pos(x, y, z).clr(0.4f, 0, 0).spawn(world);
|
ParticleBuilder.create(Type.DARK_MAGIC).pos(x, y, z).clr(0.4f, 0, 0).spawn(world);
|
||||||
@@ -103,9 +103,9 @@ public class CurseOfSoulbinding extends SpellRay {
|
|||||||
|
|
||||||
Entity entity = EntityUtils.getEntityByUUID(player.world, iterator.next());
|
Entity entity = EntityUtils.getEntityByUUID(player.world, iterator.next());
|
||||||
|
|
||||||
if(entity == null) iterator.remove();
|
if (entity == null || (entity instanceof EntityLivingBase && !((EntityLivingBase) entity).isPotionActive(WizardryPotions.curse_of_soulbinding))) {
|
||||||
|
iterator.remove();
|
||||||
if(entity instanceof EntityLivingBase){
|
} else if (entity instanceof EntityLivingBase) {
|
||||||
// Retaliatory effect
|
// Retaliatory effect
|
||||||
if(DamageSafetyChecker.attackEntitySafely(entity, MagicDamage.causeDirectMagicDamage(player,
|
if(DamageSafetyChecker.attackEntitySafely(entity, MagicDamage.causeDirectMagicDamage(player,
|
||||||
MagicDamage.DamageType.MAGIC, true), event.getAmount(), event.getSource().getDamageType(),
|
MagicDamage.DamageType.MAGIC, true), event.getAmount(), event.getSource().getDamageType(),
|
||||||
|
|||||||
@@ -59,18 +59,19 @@ public class FrostRay extends SpellRay {
|
|||||||
this.getNameForTranslationFormatted()), true);
|
this.getNameForTranslationFormatted()), true);
|
||||||
// This now only damages in line with the maxHurtResistantTime. Some mods don't play nicely and fiddle
|
// This now only damages in line with the maxHurtResistantTime. Some mods don't play nicely and fiddle
|
||||||
// with this mechanic for their own purposes, so this line makes sure that doesn't affect wizardry.
|
// with this mechanic for their own purposes, so this line makes sure that doesn't affect wizardry.
|
||||||
}else if(ticksInUse % ((EntityLivingBase)target).maxHurtResistantTime == 1){
|
}else{
|
||||||
// For frost ray the entity can move slightly, unlike freeze
|
// For frost ray the entity can move slightly, unlike freeze
|
||||||
((EntityLivingBase)target).addPotionEffect(new PotionEffect(WizardryPotions.frost,
|
((EntityLivingBase)target).addPotionEffect(new PotionEffect(WizardryPotions.frost,
|
||||||
(int)(getProperty(EFFECT_DURATION).floatValue() * modifiers.get(WizardryItems.duration_upgrade)),
|
(int)(getProperty(EFFECT_DURATION).floatValue() * modifiers.get(WizardryItems.duration_upgrade)),
|
||||||
getProperty(EFFECT_STRENGTH).intValue()));
|
getProperty(EFFECT_STRENGTH).intValue()));
|
||||||
|
|
||||||
float damage = getProperty(DAMAGE).floatValue() * modifiers.get(SpellModifiers.POTENCY);
|
if(ticksInUse % ((EntityLivingBase)target).maxHurtResistantTime == 1){
|
||||||
if(target instanceof EntityBlaze || target instanceof EntityMagmaCube) damage *= 2;
|
float damage = getProperty(DAMAGE).floatValue() * modifiers.get(SpellModifiers.POTENCY);
|
||||||
|
if(target instanceof EntityBlaze || target instanceof EntityMagmaCube) damage *= 2;
|
||||||
EntityUtils.attackEntityWithoutKnockback(target, MagicDamage.causeDirectMagicDamage(caster,
|
|
||||||
DamageType.FROST), damage);
|
|
||||||
|
|
||||||
|
EntityUtils.attackEntityWithoutKnockback(target, MagicDamage.causeDirectMagicDamage(caster,
|
||||||
|
DamageType.FROST), damage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import electroblob.wizardry.util.ParticleBuilder.Type;
|
|||||||
import electroblob.wizardry.util.SpellModifiers;
|
import electroblob.wizardry.util.SpellModifiers;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.init.SoundEvents;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
@@ -24,14 +25,14 @@ public class Glide extends Spell {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void playSound(World world, EntityLivingBase entity, int ticksInUse, int duration, SpellModifiers modifiers, String... sounds){
|
protected void playSound(World world, EntityLivingBase entity, int ticksInUse, int duration, SpellModifiers modifiers, String... sounds){
|
||||||
if(ticksInUse == 0 && world.isRemote) Wizardry.proxy.playSpellSoundLoop(entity, this, this.sounds[0], this.sounds[0], this.sounds[0],
|
if(ticksInUse == 0 && world.isRemote) Wizardry.proxy.playSpellSoundLoop(entity, this, this.sounds[0], this.sounds[0], SoundEvents.UI_TOAST_OUT,
|
||||||
WizardrySounds.SPELLS, volume, pitch + pitchVariation * (world.rand.nextFloat() - 0.5f));
|
WizardrySounds.SPELLS, volume, pitch + pitchVariation * (world.rand.nextFloat() - 0.5f));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void playSound(World world, double x, double y, double z, int ticksInUse, int duration, SpellModifiers modifiers, String... sounds){
|
protected void playSound(World world, double x, double y, double z, int ticksInUse, int duration, SpellModifiers modifiers, String... sounds){
|
||||||
if(ticksInUse == 0 && world.isRemote){
|
if(ticksInUse == 0 && world.isRemote){
|
||||||
Wizardry.proxy.playSpellSoundLoop(world, x, y, z, this, this.sounds[0], this.sounds[0], this.sounds[0],
|
Wizardry.proxy.playSpellSoundLoop(world, x, y, z, this, this.sounds[0], this.sounds[0], SoundEvents.UI_TOAST_OUT,
|
||||||
WizardrySounds.SPELLS, volume, pitch + pitchVariation * (world.rand.nextFloat() - 0.5f), duration);
|
WizardrySounds.SPELLS, volume, pitch + pitchVariation * (world.rand.nextFloat() - 0.5f), duration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class MarkSacrifice extends SpellRay {
|
|||||||
PotionEffect effect = event.getEntityLiving().getActivePotionEffect(WizardryPotions.mark_of_sacrifice);
|
PotionEffect effect = event.getEntityLiving().getActivePotionEffect(WizardryPotions.mark_of_sacrifice);
|
||||||
|
|
||||||
if(effect != null && event.getSource().isMagicDamage()){
|
if(effect != null && event.getSource().isMagicDamage()){
|
||||||
event.setAmount(event.getAmount() * (1 + effect.getAmplifier() * DAMAGE_INCREASE_PER_LEVEL));
|
event.setAmount(event.getAmount() * (1 + effect.getAmplifier()) * DAMAGE_INCREASE_PER_LEVEL);
|
||||||
event.getEntityLiving().removePotionEffect(WizardryPotions.mark_of_sacrifice);
|
event.getEntityLiving().removePotionEffect(WizardryPotions.mark_of_sacrifice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,6 +111,9 @@ public class MindControl extends SpellRay {
|
|||||||
|
|
||||||
/** Returns true if the given entity can be mind controlled (i.e. is not a player, npc, evil wizard or boss). */
|
/** Returns true if the given entity can be mind controlled (i.e. is not a player, npc, evil wizard or boss). */
|
||||||
public static boolean canControl(Entity target){
|
public static boolean canControl(Entity target){
|
||||||
|
|
||||||
|
// TODO: Add a max health limit that scales with potency
|
||||||
|
|
||||||
return target instanceof EntityLiving && target.isNonBoss() && !(target instanceof INpc)
|
return target instanceof EntityLiving && target.isNonBoss() && !(target instanceof INpc)
|
||||||
&& !(target instanceof EntityEvilWizard) && !Arrays.asList(Wizardry.settings.mindControlTargetsBlacklist)
|
&& !(target instanceof EntityEvilWizard) && !Arrays.asList(Wizardry.settings.mindControlTargetsBlacklist)
|
||||||
.contains(EntityList.getKey(target.getClass()));
|
.contains(EntityList.getKey(target.getClass()));
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package electroblob.wizardry.spell;
|
package electroblob.wizardry.spell;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.data.WizardData;
|
import electroblob.wizardry.data.WizardData;
|
||||||
|
import electroblob.wizardry.event.ResurrectionEvent;
|
||||||
import electroblob.wizardry.item.ISpellCastingItem;
|
import electroblob.wizardry.item.ISpellCastingItem;
|
||||||
import electroblob.wizardry.item.SpellActions;
|
import electroblob.wizardry.item.SpellActions;
|
||||||
import electroblob.wizardry.packet.PacketResurrection;
|
import electroblob.wizardry.packet.PacketResurrection;
|
||||||
@@ -8,6 +10,7 @@ import electroblob.wizardry.packet.WizardryPacketHandler;
|
|||||||
import electroblob.wizardry.registry.Spells;
|
import electroblob.wizardry.registry.Spells;
|
||||||
import electroblob.wizardry.registry.WizardryItems;
|
import electroblob.wizardry.registry.WizardryItems;
|
||||||
import electroblob.wizardry.util.ParticleBuilder;
|
import electroblob.wizardry.util.ParticleBuilder;
|
||||||
|
import electroblob.wizardry.util.ParticleBuilder.Type;
|
||||||
import electroblob.wizardry.util.SpellModifiers;
|
import electroblob.wizardry.util.SpellModifiers;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
@@ -16,11 +19,16 @@ import net.minecraft.util.EnumHand;
|
|||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.text.TextComponentTranslation;
|
import net.minecraft.util.text.TextComponentTranslation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
@EventBusSubscriber
|
||||||
public class Resurrection extends Spell {
|
public class Resurrection extends Spell {
|
||||||
|
|
||||||
public static final String WAIT_TIME = "wait_time";
|
public static final String WAIT_TIME = "wait_time";
|
||||||
@@ -55,6 +63,9 @@ public class Resurrection extends Spell {
|
|||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
if(nearestDeadAlly != null){
|
if(nearestDeadAlly != null){
|
||||||
|
|
||||||
|
if(MinecraftForge.EVENT_BUS.post(new ResurrectionEvent(nearestDeadAlly, caster))) return false;
|
||||||
|
|
||||||
// When the player entity dies, it is removed from world#loadedEntityList. However, it is NOT removed
|
// When the player entity dies, it is removed from world#loadedEntityList. However, it is NOT removed
|
||||||
// from playerEntityList (and probably a few other places) until respawn is clicked, and since that
|
// from playerEntityList (and probably a few other places) until respawn is clicked, and since that
|
||||||
// never happens here we need to clean up those references or the player will have duplicate entries
|
// never happens here we need to clean up those references or the player will have duplicate entries
|
||||||
@@ -112,4 +123,42 @@ public class Resurrection extends Spell {
|
|||||||
&& ((ISpellCastingItem)stack.getItem()).canCast(stack, Spells.resurrection, player, EnumHand.MAIN_HAND, 0, new SpellModifiers());
|
&& ((ISpellCastingItem)stack.getItem()).canCast(stack, Spells.resurrection, player, EnumHand.MAIN_HAND, 0, new SpellModifiers());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
@SubscribeEvent
|
||||||
|
public static void onPlayerTickEvent(LivingUpdateEvent event){
|
||||||
|
|
||||||
|
if(event.getEntity() instanceof EntityPlayer){
|
||||||
|
|
||||||
|
EntityPlayer player = (EntityPlayer)event.getEntity();
|
||||||
|
|
||||||
|
if(player.world.isRemote && !player.isEntityAlive()){
|
||||||
|
|
||||||
|
EntityPlayer firstPersonPlayer = Wizardry.proxy.getThePlayer();
|
||||||
|
|
||||||
|
if(WizardData.get(firstPersonPlayer).isPlayerAlly(player)){
|
||||||
|
|
||||||
|
ItemStack wand = firstPersonPlayer.getHeldItemMainhand();
|
||||||
|
|
||||||
|
if(!(wand.getItem() instanceof ISpellCastingItem)){
|
||||||
|
wand = firstPersonPlayer.getHeldItemOffhand();
|
||||||
|
if(!(wand.getItem() instanceof ISpellCastingItem)) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(((ISpellCastingItem)wand.getItem()).getCurrentSpell(wand) == Spells.resurrection){
|
||||||
|
|
||||||
|
// TODO: Find some way of getting at the modifiers before the spell is cast
|
||||||
|
int waitTime = Spells.resurrection.getProperty(WAIT_TIME).intValue();
|
||||||
|
|
||||||
|
if(player.deathTime > waitTime){
|
||||||
|
ParticleBuilder.create(Type.SPARKLE, player.world.rand, player.posX, player.posY + 0.5, player.posZ, 0.5, false)
|
||||||
|
.clr(1, 1, 0.3f).vel(0, 0.02, 0).spawn(player.world);
|
||||||
|
}else{
|
||||||
|
ParticleBuilder.create(Type.DUST, player.world.rand, player.posX, player.posY + 0.5, player.posZ, 0.5, false)
|
||||||
|
.clr(1, 1, 0.3f).vel(0, 0.02, 0).time(50).spawn(player.world);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -319,8 +319,24 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
// To avoid sending extra data unnecessarily, the spell properties are sent in order of spell ID
|
// To avoid sending extra data unnecessarily, the spell properties are sent in order of spell ID
|
||||||
List<Spell> spells = new ArrayList<>(registry.getValuesCollection());
|
List<Spell> spells = new ArrayList<>(registry.getValuesCollection());
|
||||||
spells.sort(Comparator.comparingInt(Spell::networkID));
|
spells.sort(Comparator.comparingInt(Spell::networkID));
|
||||||
WizardryPacketHandler.net.sendTo(new PacketSpellProperties.Message(spells.stream()
|
|
||||||
.map(s -> s.properties).toArray(SpellProperties[]::new)), player);
|
SpellProperties[] propertiesArray = spells.stream().map(s -> s.properties).toArray(SpellProperties[]::new);
|
||||||
|
|
||||||
|
// splitting the packet into batches of 100 spells
|
||||||
|
int i = 0;
|
||||||
|
while (i < propertiesArray.length) {
|
||||||
|
List<SpellProperties> propertiesList = new ArrayList<>();
|
||||||
|
int first = i;
|
||||||
|
int batchCounter = 0;
|
||||||
|
for (int currentIndex = i; currentIndex < propertiesArray.length && batchCounter < 100; currentIndex++) {
|
||||||
|
propertiesList.add(propertiesArray[currentIndex]);
|
||||||
|
batchCounter++;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
SpellProperties[] currentArray = propertiesList.toArray(new SpellProperties[0]);
|
||||||
|
PacketSpellProperties.Message currentPacket = new PacketSpellProperties.Message(first, currentArray.length, currentArray);
|
||||||
|
WizardryPacketHandler.net.sendTo(currentPacket, player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void clearProperties(){
|
private static void clearProperties(){
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package electroblob.wizardry.tileentity;
|
|||||||
|
|
||||||
import electroblob.wizardry.block.BlockReceptacle;
|
import electroblob.wizardry.block.BlockReceptacle;
|
||||||
import electroblob.wizardry.constants.Element;
|
import electroblob.wizardry.constants.Element;
|
||||||
|
import electroblob.wizardry.event.ImbuementActivateEvent;
|
||||||
import electroblob.wizardry.item.IManaStoringItem;
|
import electroblob.wizardry.item.IManaStoringItem;
|
||||||
import electroblob.wizardry.item.ItemWizardArmour;
|
import electroblob.wizardry.item.ItemWizardArmour;
|
||||||
import electroblob.wizardry.registry.*;
|
import electroblob.wizardry.registry.*;
|
||||||
@@ -24,6 +25,7 @@ import net.minecraft.world.World;
|
|||||||
import net.minecraft.world.WorldServer;
|
import net.minecraft.world.WorldServer;
|
||||||
import net.minecraft.world.storage.loot.LootContext;
|
import net.minecraft.world.storage.loot.LootContext;
|
||||||
import net.minecraft.world.storage.loot.LootTable;
|
import net.minecraft.world.storage.loot.LootTable;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@@ -233,6 +235,14 @@ public class TileEntityImbuementAltar extends TileEntity implements ITickable {
|
|||||||
*/
|
*/
|
||||||
public static ItemStack getImbuementResult(ItemStack input, Element[] receptacleElements, boolean fullLootGen, World world, EntityPlayer lastUser){
|
public static ItemStack getImbuementResult(ItemStack input, Element[] receptacleElements, boolean fullLootGen, World world, EntityPlayer lastUser){
|
||||||
|
|
||||||
|
ItemStack eventResult = ItemStack.EMPTY;
|
||||||
|
|
||||||
|
if (world != null && MinecraftForge.EVENT_BUS.post(new ImbuementActivateEvent(input, receptacleElements, world, lastUser, eventResult))) {
|
||||||
|
// return the stack if something changes the result from an empty stack.
|
||||||
|
//noinspection ConstantConditions
|
||||||
|
if (eventResult != ItemStack.EMPTY) return eventResult;
|
||||||
|
}
|
||||||
|
|
||||||
if(input.getItem() instanceof ItemWizardArmour && ((ItemWizardArmour)input.getItem()).element == null){
|
if(input.getItem() instanceof ItemWizardArmour && ((ItemWizardArmour)input.getItem()).element == null){
|
||||||
|
|
||||||
if(Arrays.stream(receptacleElements).distinct().count() == 1 && receptacleElements[0] != null){ // All the same element
|
if(Arrays.stream(receptacleElements).distinct().count() == 1 && receptacleElements[0] != null){ // All the same element
|
||||||
|
|||||||
@@ -34,7 +34,9 @@ import java.util.Random;
|
|||||||
* <code>ParticleBuilder.create(Type.SPARKLE).pos(x, y, z).vel(vx, vy, vz).clr(r, g, b).spawn(world);</code>
|
* <code>ParticleBuilder.create(Type.SPARKLE).pos(x, y, z).vel(vx, vy, vz).clr(r, g, b).spawn(world);</code>
|
||||||
* <p></p>
|
* <p></p>
|
||||||
* It also goes without saying that <b>this class should only ever be used client-side</b>. Attempting to spawn particles
|
* It also goes without saying that <b>this class should only ever be used client-side</b>. Attempting to spawn particles
|
||||||
* on the server side will not work and will print a warning to the console.
|
* on the server side will not work and will print a warning to the console. {@code ParticleBuilder} is not threadsafe
|
||||||
|
* and attempting to call it from multiple threads at once will very likely cause an {@link IllegalStateException}.
|
||||||
|
*
|
||||||
* @author Electroblob
|
* @author Electroblob
|
||||||
* @since Wizardry 4.2
|
* @since Wizardry 4.2
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.util;
|
package electroblob.wizardry.util;
|
||||||
|
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
import electroblob.wizardry.event.SpellCastEvent;
|
import electroblob.wizardry.event.SpellCastEvent;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
@@ -77,13 +78,11 @@ public final class SpellModifiers {
|
|||||||
* @return The SpellModifiers object, allowing this method to be chained onto the constructor.
|
* @return The SpellModifiers object, allowing this method to be chained onto the constructor.
|
||||||
*/
|
*/
|
||||||
public SpellModifiers combine(SpellModifiers modifiers){
|
public SpellModifiers combine(SpellModifiers modifiers){
|
||||||
for(Entry<String, Float> entry : multiplierMap.entrySet()){
|
for(String key : Sets.union(this.multiplierMap.keySet(), modifiers.multiplierMap.keySet())){
|
||||||
float newValue = entry.getValue() * modifiers.get(entry.getKey());
|
float newValue = this.get(key) * modifiers.get(key);
|
||||||
entry.setValue(newValue);
|
|
||||||
// Also need to update the synced map if the modifier is synced in either object
|
// Also need to update the synced map if the modifier is synced in either object
|
||||||
if(this.syncedMultiplierMap.containsKey(entry.getKey()) || modifiers.syncedMultiplierMap.containsKey(entry.getKey())){
|
boolean sync = this.syncedMultiplierMap.containsKey(key) || modifiers.syncedMultiplierMap.containsKey(key);
|
||||||
this.syncedMultiplierMap.put(entry.getKey(), newValue);
|
this.set(key, newValue, sync);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -251,6 +251,7 @@ public final class WandHelper {
|
|||||||
|
|
||||||
for(int i = 0; i < cooldowns.length; i++){
|
for(int i = 0; i < cooldowns.length; i++){
|
||||||
if(cooldowns[i] > 0) cooldowns[i]--;
|
if(cooldowns[i] > 0) cooldowns[i]--;
|
||||||
|
if(cooldowns[i] < 0) cooldowns[i] = 0; // In case it got broken
|
||||||
}
|
}
|
||||||
|
|
||||||
setCooldowns(wand, cooldowns);
|
setCooldowns(wand, cooldowns);
|
||||||
@@ -312,6 +313,8 @@ public final class WandHelper {
|
|||||||
// cast, which is impossible if there are no spells.
|
// cast, which is impossible if there are no spells.
|
||||||
if(cooldowns.length <= selectedSpell) cooldowns = new int[spellCount];
|
if(cooldowns.length <= selectedSpell) cooldowns = new int[spellCount];
|
||||||
|
|
||||||
|
if(cooldown <= 0) cooldown = 1;
|
||||||
|
|
||||||
cooldowns[selectedSpell] = cooldown;
|
cooldowns[selectedSpell] = cooldown;
|
||||||
|
|
||||||
setCooldowns(wand, cooldowns);
|
setCooldowns(wand, cooldowns);
|
||||||
|
|||||||
@@ -1580,6 +1580,8 @@ config.ebwizardry.mob_loot_table_whitelist=Mob Loot Table Whitelist
|
|||||||
config.ebwizardry.mob_loot_table_whitelist.tooltip=Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.
|
config.ebwizardry.mob_loot_table_whitelist.tooltip=Whitelist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually include them.
|
||||||
config.ebwizardry.mob_loot_table_blacklist=Mob Loot Table Blacklist
|
config.ebwizardry.mob_loot_table_blacklist=Mob Loot Table Blacklist
|
||||||
config.ebwizardry.mob_loot_table_blacklist.tooltip=Blacklist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually exclude them.
|
config.ebwizardry.mob_loot_table_blacklist.tooltip=Blacklist for loot tables to inject additional mob drops (as specified in loot_tables/entities/mob_additions.json) into. Wizardry makes a best guess as to which loot tables belong to hostile mobs, but this may not always be correct or appropriate; add loot table locations (not entity IDs) to this list to manually exclude them.
|
||||||
|
config.ebwizardry.inject_mob_drops=Allow Wizardry Mob Loot
|
||||||
|
config.ebwizardry.inject_mob_drops.tooltip=Whether to inject Wizardry loot to mobs, based on the loot table 'Mob Loot Table Whitelist' / 'Mob Loot Table Blacklist' settings. If disabled, the lists won't have any effect!
|
||||||
config.ebwizardry.mob_spawn_dimensions=Mob Spawning Dimensions
|
config.ebwizardry.mob_spawn_dimensions=Mob Spawning Dimensions
|
||||||
config.ebwizardry.mob_spawn_dimensions.tooltip=List of ids of dimensions in which wizardry's hostile mobs can spawn.
|
config.ebwizardry.mob_spawn_dimensions.tooltip=List of ids of dimensions in which wizardry's hostile mobs can spawn.
|
||||||
config.ebwizardry.mob_spawn_biome_blacklist=Mob Spawning Biome Blacklist
|
config.ebwizardry.mob_spawn_biome_blacklist=Mob Spawning Biome Blacklist
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -53,21 +53,21 @@ tile.ebwizardry\:receptacle.name=받침
|
|||||||
tile.ebwizardry\:imbuement_altar.name=고취의 제단
|
tile.ebwizardry\:imbuement_altar.name=고취의 제단
|
||||||
|
|
||||||
item.ebwizardry\:crystal_magic.name=마법수정
|
item.ebwizardry\:crystal_magic.name=마법수정
|
||||||
item.ebwizardry\:crystal_magic.desc=무지갯빛의 아름다운 수정, 마법의 기운이 내부에서 서서히 변화하고 소용돌이치고 있다. 어쩌면 이 수정은 사용하면...
|
item.ebwizardry\:crystal_magic.desc=무지갯빛의 아름다운 수정, 마법의 기운이 내부에서 서서히 변화하며 소용돌이치고 있습니다. 어쩌면 이 수정은 사용하면...
|
||||||
item.ebwizardry\:crystal_fire.name=화염의 수정
|
item.ebwizardry\:crystal_fire.name=화염의 수정
|
||||||
item.ebwizardry\:crystal_fire.desc=주황빛으로 불타는 수정. 어쩌면 불의 원소를 푸는 열쇠일지도 모른다...
|
item.ebwizardry\:crystal_fire.desc=주황빛으로 불타는 수정, 어쩌면 불의 원소를 푸는 열쇠일지도 모릅니다...
|
||||||
item.ebwizardry\:crystal_ice.name=얼음의 수정
|
item.ebwizardry\:crystal_ice.name=얼음의 수정
|
||||||
item.ebwizardry\:crystal_ice.desc=푸르스름한 색조의 차가운 수정. 어쩌면 서리의 힘의 비밀을 간직하고 있을지도 모른다...
|
item.ebwizardry\:crystal_ice.desc=푸르스름한 색조의 차가운 수정, 어쩌면 서리의 힘의 비밀을 간직하고 있을지도 모릅니다...
|
||||||
item.ebwizardry\:crystal_lightning.name=폭풍의 수정
|
item.ebwizardry\:crystal_lightning.name=폭풍의 수정
|
||||||
item.ebwizardry\:crystal_lightning.desc=어지럽게 소용돌이치고 번쩍이는 수정. 어쩌면 더 큰 힘을 숨기고 있을지도 모른다...
|
item.ebwizardry\:crystal_lightning.desc=어지럽게 소용돌이치고 번쩍이는 수정, 어쩌면 더 큰 힘을 숨기고 있을지도 모릅니다...
|
||||||
item.ebwizardry\:crystal_necromancy.name=어둠의 수정
|
item.ebwizardry\:crystal_necromancy.name=어둠의 수정
|
||||||
item.ebwizardry\:crystal_necromancy.desc=마치 끌어당기는 듯한 깊고 푸르스름한 수정. 어쩌면 더 어두운 곳으로 가는 관문일지도 모른다...
|
item.ebwizardry\:crystal_necromancy.desc=마치 끌어당기는 듯한 깊고 푸르스름한 수정, 어쩌면 더 어두운 곳으로 가는 관문일지도 모릅니다...
|
||||||
item.ebwizardry\:crystal_earth.name=신록의 수정
|
item.ebwizardry\:crystal_earth.name=신록의 수정
|
||||||
item.ebwizardry\:crystal_earth.desc=녹색과 약간의 갈색으로 이루어진 수정. 어쩌면 자연의 힘과 연관이 있을지도 모른다...
|
item.ebwizardry\:crystal_earth.desc=녹색과 약간의 갈색으로 이루어진 수정, 어쩌면 자연의 힘과 연관이 있을지도 모릅니다...
|
||||||
item.ebwizardry\:crystal_sorcery.name=신령의 수정
|
item.ebwizardry\:crystal_sorcery.name=신령의 수정
|
||||||
item.ebwizardry\:crystal_sorcery.desc=푸르스름한 초록빛의 반짝거리는 수정. 어쩌면 고대의 힘의 비밀을 감추고 있을지도 모른다...
|
item.ebwizardry\:crystal_sorcery.desc=푸르스름한 초록빛의 반짝거리는 수정, 어쩌면 고대의 힘의 비밀을 감추고 있을지도 모릅니다...
|
||||||
item.ebwizardry\:crystal_healing.name=복사의 수정
|
item.ebwizardry\:crystal_healing.name=복사의 수정
|
||||||
item.ebwizardry\:crystal_healing.desc=금빛 햇살처럼 노랗게 반짝이는 수정. 어쩌면 신성한 힘의 연결고리일지도 모른다...
|
item.ebwizardry\:crystal_healing.desc=금빛 햇살처럼 노랗게 반짝이는 수정, 어쩌면 신성한 힘의 연결고리일지도 모릅니다...
|
||||||
|
|
||||||
item.ebwizardry\:spell_book.name=주문서
|
item.ebwizardry\:spell_book.name=주문서
|
||||||
item.ebwizardry\:spell_book.desc=고대의 상형문자와 룬 문자로 채워진 책. 노력을 통해 그 내용을 해독할 수 있을 것 같습니다...\n\n책을 읽으려면 오른쪽 버튼을 누르세요.
|
item.ebwizardry\:spell_book.desc=고대의 상형문자와 룬 문자로 채워진 책. 노력을 통해 그 내용을 해독할 수 있을 것 같습니다...\n\n책을 읽으려면 오른쪽 버튼을 누르세요.
|
||||||
@@ -75,7 +75,7 @@ item.ebwizardry\:spell_book.new=아직 발견되지 않았습니다!
|
|||||||
item.ebwizardry\:spell_book.apply_to_wizard=%1$s의 주문 %2$s을 %3$s로 대체하였습니다
|
item.ebwizardry\:spell_book.apply_to_wizard=%1$s의 주문 %2$s을 %3$s로 대체하였습니다
|
||||||
|
|
||||||
item.ebwizardry\:ruined_spell_book.name=빛바랜 주문서
|
item.ebwizardry\:ruined_spell_book.name=빛바랜 주문서
|
||||||
item.ebwizardry\:ruined_spell_book.desc=이 너덜너덜한 주문서는 너무 손상되어 제대로 읽혀지지 않지만, 어찌된 일인지, 아직도 마법의 기운이 남아있다. 만약 복원될 수만 있다면...
|
item.ebwizardry\:ruined_spell_book.desc=이 너덜너덜한 주문서는 너무 손상되어 제대로 읽혀지지 않지만, 어찌된 일인지, 아직도 마법의 기운이 남아있습니다. 만약 복원될 수만 있다면...
|
||||||
|
|
||||||
item.ebwizardry\:arcane_tome.name=마도서
|
item.ebwizardry\:arcane_tome.name=마도서
|
||||||
item.ebwizardry\:arcane_tome.desc=아무 %1$s지팡이를 %2$s지팡이로 강화합니다
|
item.ebwizardry\:arcane_tome.desc=아무 %1$s지팡이를 %2$s지팡이로 강화합니다
|
||||||
@@ -112,7 +112,7 @@ item.ebwizardry\:novice_healing_wand.name=회복 지팡이
|
|||||||
item.ebwizardry\:apprentice_fire_wand.name=견습 화염 지팡이
|
item.ebwizardry\:apprentice_fire_wand.name=견습 화염 지팡이
|
||||||
item.ebwizardry\:apprentice_ice_wand.name=견습 얼음 지팡이
|
item.ebwizardry\:apprentice_ice_wand.name=견습 얼음 지팡이
|
||||||
item.ebwizardry\:apprentice_lightning_wand.name=견습 벼락 지팡이
|
item.ebwizardry\:apprentice_lightning_wand.name=견습 벼락 지팡이
|
||||||
item.ebwizardry\:apprentice_necromancy_wand.name=견습 혼령 지팡이
|
item.ebwizardry\:apprentice_necromancy_wand.name=견습 사령 지팡이
|
||||||
item.ebwizardry\:apprentice_earth_wand.name=견습 대지 지팡이
|
item.ebwizardry\:apprentice_earth_wand.name=견습 대지 지팡이
|
||||||
item.ebwizardry\:apprentice_sorcery_wand.name=견습 신비 지팡이
|
item.ebwizardry\:apprentice_sorcery_wand.name=견습 신비 지팡이
|
||||||
item.ebwizardry\:apprentice_healing_wand.name=견습 치유 지팡이
|
item.ebwizardry\:apprentice_healing_wand.name=견습 치유 지팡이
|
||||||
@@ -120,7 +120,7 @@ item.ebwizardry\:apprentice_healing_wand.name=견습 치유 지팡이
|
|||||||
item.ebwizardry\:advanced_fire_wand.name=숙련 화염술사의 지팡이
|
item.ebwizardry\:advanced_fire_wand.name=숙련 화염술사의 지팡이
|
||||||
item.ebwizardry\:advanced_ice_wand.name=숙련 얼음법사의 지팡이
|
item.ebwizardry\:advanced_ice_wand.name=숙련 얼음법사의 지팡이
|
||||||
item.ebwizardry\:advanced_lightning_wand.name=숙련 벼락술사의 지팡이
|
item.ebwizardry\:advanced_lightning_wand.name=숙련 벼락술사의 지팡이
|
||||||
item.ebwizardry\:advanced_necromancy_wand.name=숙련 혼령술사의 지팡이
|
item.ebwizardry\:advanced_necromancy_wand.name=숙련 사령술사의 지팡이
|
||||||
item.ebwizardry\:advanced_earth_wand.name=숙련 대지법사의 지팡이
|
item.ebwizardry\:advanced_earth_wand.name=숙련 대지법사의 지팡이
|
||||||
item.ebwizardry\:advanced_sorcery_wand.name=숙련 신비술사의 지팡이
|
item.ebwizardry\:advanced_sorcery_wand.name=숙련 신비술사의 지팡이
|
||||||
item.ebwizardry\:advanced_healing_wand.name=숙련 치유사의 지팡이
|
item.ebwizardry\:advanced_healing_wand.name=숙련 치유사의 지팡이
|
||||||
@@ -146,16 +146,16 @@ item.ebwizardry\:large_mana_flask.name=큰 마나병
|
|||||||
item.ebwizardry\:mana_flask.desc=제작을 통해 %s마나를 지팡이나 갑옷에 충전합니다
|
item.ebwizardry\:mana_flask.desc=제작을 통해 %s마나를 지팡이나 갑옷에 충전합니다
|
||||||
|
|
||||||
item.ebwizardry\:grand_crystal.name=거대한 마법수정
|
item.ebwizardry\:grand_crystal.name=거대한 마법수정
|
||||||
item.ebwizardry\:grand_crystal.desc=자연적으로 발견된 것의 몇 배 크기인 거대한 마법의 수정. 누군가 인공적으로 만든 게 틀림없다. 하지만 어떻게?
|
item.ebwizardry\:grand_crystal.desc=자연적으로 발견된 것의 몇 배 크기인 거대한 마법의 수정, 누군가 인공적으로 만든 게 틀림없습니다. 하지만 어떻게?
|
||||||
item.ebwizardry\:crystal_shard.name=마법수정 조각
|
item.ebwizardry\:crystal_shard.name=마법수정 조각
|
||||||
item.ebwizardry\:crystal_shard.desc=산산조각난 마법 수정의 작은 조각. 그 자체로는 마력이 거의 없지만, 다른 용도가 있을지도 모른다...
|
item.ebwizardry\:crystal_shard.desc=산산조각난 마법 수정의 작은 조각, 그 자체로는 마력이 거의 없지만, 다른 용도가 있을지도 모릅니다...
|
||||||
|
|
||||||
item.ebwizardry\:astral_diamond.name=별의 다이아몬드
|
item.ebwizardry\:astral_diamond.name=별의 다이아몬드
|
||||||
item.ebwizardry\:astral_diamond.desc=별빛 아래 밝게 빛나는 아름다운 보석. 어떠한 마법사들은 강력한 마법의 거래 대가로 별의 다이아몬드를 찾는다네.
|
item.ebwizardry\:astral_diamond.desc=별빛 아래 밝게 빛나는 아름다운 보석이라네. 어떠한 마법사들은 강력한 마법의 거래 대가로 별의 다이아몬드를 찾는다네.
|
||||||
|
|
||||||
item.ebwizardry\:purifying_elixir.name=정화의 영약
|
item.ebwizardry\:purifying_elixir.name=정화의 영약
|
||||||
item.ebwizardry\:purifying_elixir.desc=저주를 제거합니다
|
item.ebwizardry\:purifying_elixir.desc=저주를 제거합니다
|
||||||
item.ebwizardry\:purifying_elixir.desc_extended=특이한 금빛 액체가 담긴 작은 병으로, 강력한 회복의 특성을 보이고 있습니다.
|
item.ebwizardry\:purifying_elixir.desc_extended=특이한 금빛 액체가 담긴 작은 병으로, 강력한 회복력을 보이고 있습니다.
|
||||||
|
|
||||||
item.ebwizardry\:storage_upgrade.name=지팡이 용량 강화
|
item.ebwizardry\:storage_upgrade.name=지팡이 용량 강화
|
||||||
item.ebwizardry\:siphon_upgrade.name=지팡이 흡수 강화
|
item.ebwizardry\:siphon_upgrade.name=지팡이 흡수 강화
|
||||||
@@ -194,24 +194,38 @@ item.ebwizardry\:blank_scroll.name=빈 두루마리
|
|||||||
item.ebwizardry\:scroll.generic=두루마리
|
item.ebwizardry\:scroll.generic=두루마리
|
||||||
item.ebwizardry\:scroll.name=%1$s의 두루마리
|
item.ebwizardry\:scroll.name=%1$s의 두루마리
|
||||||
item.ebwizardry\:scroll.undiscovered.name="%1$s"두루마리
|
item.ebwizardry\:scroll.undiscovered.name="%1$s"두루마리
|
||||||
item.ebwizardry\:scroll.desc=끈으로 느슨하게 묶인 마법이 부여된 종이. 두루마리에 부여된 주문을 외우면 외운 주문이 시전된다 .\n시전하려면 오른쪽 버튼을 누르세요.
|
item.ebwizardry\:scroll.desc=끈으로 느슨하게 묶인 마법이 부여된 종이. 두루마리에 부여된 주문을 외우면 외운 주문이 시전됩니다.\n시전하려면 오른쪽 버튼을 누르세요.
|
||||||
item.ebwizardry\:identification_scroll.name=지식의 두루마리
|
item.ebwizardry\:identification_scroll.name=지식의 두루마리
|
||||||
item.ebwizardry\:identification_scroll.desc=알 수 없는 주문서나 두루마리를 식별합니다
|
item.ebwizardry\:identification_scroll.desc=알 수 없는 주문서나 두루마리를 식별합니다
|
||||||
item.ebwizardry\:identification_scroll.desc_extended=오른쪽 버튼을 클릭하여 식별하지 않은 주문서를 식별할 수 있습니다.
|
item.ebwizardry\:identification_scroll.desc_extended=오른쪽 버튼을 클릭하여 식별하지 않은 주문서를 식별할 수 있습니다.
|
||||||
item.ebwizardry\:identification_scroll.nothing_to_identify=식별할 주문이 없습니다!
|
item.ebwizardry\:identification_scroll.nothing_to_identify=식별할 주문이 없습니다!
|
||||||
|
|
||||||
item.ebwizardry\:armour_upgrade.name=신비로운 보호의 문양
|
item.ebwizardry\:resplendent_thread.name=찬란한 실타래
|
||||||
item.ebwizardry\:armour_upgrade.desc=아무 마법사의 갑옷을 전설등급으로 만듭니다
|
item.ebwizardry\:resplendent_thread.desc=일반적인 마법사의 갑옷을 학자의 갑옷으로 강화합니다
|
||||||
item.ebwizardry\:armour_upgrade.desc_extended=신비로운 작업대에서 갑옷에 적용할 수 있습니다.
|
item.ebwizardry\:resplendent_thread.desc_extended=희미하게 빛나는 실로 신비로운 무늬를 수놓아 로브의 질을 높이고, 마법 부여의 효과를 상승시킵니다.\n\n신비로운 작업대에서 마법사 갑옷에 이 강화를 적용할 수 있습니다.
|
||||||
|
|
||||||
|
item.ebwizardry\:crystal_silver_plating.name=은도금된 수정
|
||||||
|
item.ebwizardry\:crystal_silver_plating.desc=일반적인 마법사의 갑옷을 전투법사의 갑옷으로 강화합니다
|
||||||
|
item.ebwizardry\:crystal_silver_plating.desc_extended=엘다르의 대장간에서 만들어진 거의 신화적인 합금으로, 우수한 마법 굴절도를 가지고 있습니다.\n\n신비로운 작업대에서 마법사 갑옷에 이 강화를 적용할 수 있습니다.
|
||||||
|
|
||||||
|
item.ebwizardry\:ethereal_crystalweave.name=천상의 수정천
|
||||||
|
item.ebwizardry\:ethereal_crystalweave.desc=일반적인 마법사의 갑옷을 주술사의 갑옷으로 강화합니다
|
||||||
|
item.ebwizardry\:ethereal_crystalweave.desc_extended=동물의 가죽처럼 두껍지만 한 장의 종이보다 가벼운 마나의 천입니다.\n\n신비로운 작업대에서 마법사 갑옷에 이 강화를 적용할 수 있습니다.
|
||||||
|
|
||||||
item.ebwizardry\:magic_silk.name=마법 비단
|
item.ebwizardry\:magic_silk.name=마법 비단
|
||||||
|
|
||||||
item.ebwizardry\:spectral_dust.name=망령의 가루
|
item.ebwizardry\:spectral_dust.name=망령의 가루
|
||||||
|
|
||||||
item.ebwizardry\:wizard_armour.legendary=전설
|
item.ebwizardry\:wizard_armour.element_cost_reduction=%2$s 주문의 마나 소모량이 %1$s 감소
|
||||||
item.ebwizardry\:wizard_armour.buff=%2$s 주문의 비용이 %1$s 감소
|
item.ebwizardry\:wizard_armour.cooldown_reduction=재사용 대기시간이 %1$s%% 감소
|
||||||
|
item.ebwizardry\:wizard_armour.enchantability=마법 부여의 효과 상승
|
||||||
item.ebwizardry\:wizard_armour.mana=마나\: %1$s/%2$s
|
item.ebwizardry\:wizard_armour.mana=마나\: %1$s/%2$s
|
||||||
|
|
||||||
|
item.ebwizardry\:wizard_armour.full_set=전부 착용 시:
|
||||||
|
item.ebwizardry\:sage_armour.full_set_bonus=다른 원소의 주문의 마나 소모량이 %1$s%% 감소
|
||||||
|
item.ebwizardry\:battlemage_armour.full_set_bonus=보호 I 효과가 부여
|
||||||
|
item.ebwizardry\:warlock_armour.full_set_bonus=이동속도가 %1$s%% 상승
|
||||||
|
|
||||||
item.ebwizardry\:wizard_hat.name=마법사 모자
|
item.ebwizardry\:wizard_hat.name=마법사 모자
|
||||||
item.ebwizardry\:wizard_robe.name=마법사 로브
|
item.ebwizardry\:wizard_robe.name=마법사 로브
|
||||||
item.ebwizardry\:wizard_leggings.name=마법사 각반
|
item.ebwizardry\:wizard_leggings.name=마법사 각반
|
||||||
@@ -232,10 +246,10 @@ item.ebwizardry\:wizard_robe_lightning.name=벼락술사 로브
|
|||||||
item.ebwizardry\:wizard_leggings_lightning.name=벼락술사 각반
|
item.ebwizardry\:wizard_leggings_lightning.name=벼락술사 각반
|
||||||
item.ebwizardry\:wizard_boots_lightning.name=벼락술사 부츠
|
item.ebwizardry\:wizard_boots_lightning.name=벼락술사 부츠
|
||||||
|
|
||||||
item.ebwizardry\:wizard_hat_necromancy.name=혼령술사 모자
|
item.ebwizardry\:wizard_hat_necromancy.name=사령술사 모자
|
||||||
item.ebwizardry\:wizard_robe_necromancy.name=혼령술사 로브
|
item.ebwizardry\:wizard_robe_necromancy.name=사령술사 로브
|
||||||
item.ebwizardry\:wizard_leggings_necromancy.name=혼령술사 각반
|
item.ebwizardry\:wizard_leggings_necromancy.name=사령술사 각반
|
||||||
item.ebwizardry\:wizard_boots_necromancy.name=혼령술사 부츠
|
item.ebwizardry\:wizard_boots_necromancy.name=사령술사 부츠
|
||||||
|
|
||||||
item.ebwizardry\:wizard_hat_earth.name=대지법사 모자
|
item.ebwizardry\:wizard_hat_earth.name=대지법사 모자
|
||||||
item.ebwizardry\:wizard_robe_earth.name=대지법사 로브
|
item.ebwizardry\:wizard_robe_earth.name=대지법사 로브
|
||||||
@@ -252,6 +266,126 @@ item.ebwizardry\:wizard_robe_healing.name=치유사 로브
|
|||||||
item.ebwizardry\:wizard_leggings_healing.name=치유사 각반
|
item.ebwizardry\:wizard_leggings_healing.name=치유사 각반
|
||||||
item.ebwizardry\:wizard_boots_healing.name=치유사 부츠
|
item.ebwizardry\:wizard_boots_healing.name=치유사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat.name=학자 모자
|
||||||
|
item.ebwizardry\:sage_robe.name=학자 로브
|
||||||
|
item.ebwizardry\:sage_leggings.name=학자 각반
|
||||||
|
item.ebwizardry\:sage_boots.name=학자 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_fire.name=화염학자 모자
|
||||||
|
item.ebwizardry\:sage_robe_fire.name=화염학자 로브
|
||||||
|
item.ebwizardry\:sage_leggings_fire.name=화염학자 각반
|
||||||
|
item.ebwizardry\:sage_boots_fire.name=화염학자 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_ice.name=얼음학자 모자
|
||||||
|
item.ebwizardry\:sage_robe_ice.name=얼음학자 로브
|
||||||
|
item.ebwizardry\:sage_leggings_ice.name=얼음학자 각반
|
||||||
|
item.ebwizardry\:sage_boots_ice.name=얼음학자 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_lightning.name=벼락학자 모자
|
||||||
|
item.ebwizardry\:sage_robe_lightning.name=벼락학자 로브
|
||||||
|
item.ebwizardry\:sage_leggings_lightning.name=벼락학자 각반
|
||||||
|
item.ebwizardry\:sage_boots_lightning.name=벼락학자 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_necromancy.name=사령학자 모자
|
||||||
|
item.ebwizardry\:sage_robe_necromancy.name=사령학자 로브
|
||||||
|
item.ebwizardry\:sage_leggings_necromancy.name=사령학자 각반
|
||||||
|
item.ebwizardry\:sage_boots_necromancy.name=사령학자 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_earth.name=대지학자 모자
|
||||||
|
item.ebwizardry\:sage_robe_earth.name=대지학자 로브
|
||||||
|
item.ebwizardry\:sage_leggings_earth.name=대지학자 각반
|
||||||
|
item.ebwizardry\:sage_boots_earth.name=대지학자 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_sorcery.name=신비학자 모자
|
||||||
|
item.ebwizardry\:sage_robe_sorcery.name=신비학자 로브
|
||||||
|
item.ebwizardry\:sage_leggings_sorcery.name=신비학자 각반
|
||||||
|
item.ebwizardry\:sage_boots_sorcery.name=신비학자 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_healing.name=치유학자 모자
|
||||||
|
item.ebwizardry\:sage_robe_healing.name=치유학자 로브
|
||||||
|
item.ebwizardry\:sage_leggings_healing.name=치유학자 각반
|
||||||
|
item.ebwizardry\:sage_boots_healing.name=치유학자 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet.name=전투법사 투구
|
||||||
|
item.ebwizardry\:battlemage_chestplate.name=전투법사 흉갑
|
||||||
|
item.ebwizardry\:battlemage_leggings.name=전투법사 각반
|
||||||
|
item.ebwizardry\:battlemage_boots.name=전투법사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_fire.name=화염 전투법사 투구
|
||||||
|
item.ebwizardry\:battlemage_chestplate_fire.name=화염 전투법사 흉갑
|
||||||
|
item.ebwizardry\:battlemage_leggings_fire.name=화염 전투법사 각반
|
||||||
|
item.ebwizardry\:battlemage_boots_fire.name=화염 전투법사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_ice.name=얼음 전투법사 투구
|
||||||
|
item.ebwizardry\:battlemage_chestplate_ice.name=얼음 전투법사 흉갑
|
||||||
|
item.ebwizardry\:battlemage_leggings_ice.name=얼음 전투법사 각반
|
||||||
|
item.ebwizardry\:battlemage_boots_ice.name=얼음 전투법사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_lightning.name=벼락 전투법사 투구
|
||||||
|
item.ebwizardry\:battlemage_chestplate_lightning.name=벼락 전투법사 흉갑
|
||||||
|
item.ebwizardry\:battlemage_leggings_lightning.name=벼락 전투법사 각반
|
||||||
|
item.ebwizardry\:battlemage_boots_lightning.name=벼락 전투법사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_necromancy.name=사령 전투법사 투구
|
||||||
|
item.ebwizardry\:battlemage_chestplate_necromancy.name=사령 전투법사 흉갑
|
||||||
|
item.ebwizardry\:battlemage_leggings_necromancy.name=사령 전투법사 각반
|
||||||
|
item.ebwizardry\:battlemage_boots_necromancy.name=사령 전투법사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_earth.name=대지 전투법사 투구
|
||||||
|
item.ebwizardry\:battlemage_chestplate_earth.name=대지 전투법사 흉갑
|
||||||
|
item.ebwizardry\:battlemage_leggings_earth.name=대지 전투법사 각반
|
||||||
|
item.ebwizardry\:battlemage_boots_earth.name=대지 전투법사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_sorcery.name=신비 전투법사 투구
|
||||||
|
item.ebwizardry\:battlemage_chestplate_sorcery.name=신비 전투법사 흉갑
|
||||||
|
item.ebwizardry\:battlemage_leggings_sorcery.name=신비 전투법사 각반
|
||||||
|
item.ebwizardry\:battlemage_boots_sorcery.name=신비 전투법사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_healing.name=치유 전투법사 투구
|
||||||
|
item.ebwizardry\:battlemage_chestplate_healing.name=치유 전투법사 흉갑
|
||||||
|
item.ebwizardry\:battlemage_leggings_healing.name=치유 전투법사 각반
|
||||||
|
item.ebwizardry\:battlemage_boots_healing.name=치유 전투법사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood.name=주술사 후드
|
||||||
|
item.ebwizardry\:warlock_robe.name=주술사 로브
|
||||||
|
item.ebwizardry\:warlock_leggings.name=주술사 각반
|
||||||
|
item.ebwizardry\:warlock_boots.name=주술사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_fire.name=화염주술사 후드
|
||||||
|
item.ebwizardry\:warlock_robe_fire.name=화염주술사 로브
|
||||||
|
item.ebwizardry\:warlock_leggings_fire.name=화염주술사 각반
|
||||||
|
item.ebwizardry\:warlock_boots_fire.name=화염주술사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_ice.name=얼음주술사 후드
|
||||||
|
item.ebwizardry\:warlock_robe_ice.name=얼음주술사 로브
|
||||||
|
item.ebwizardry\:warlock_leggings_ice.name=얼음주술사 각반
|
||||||
|
item.ebwizardry\:warlock_boots_ice.name=얼음주술사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_lightning.name=벼락주술사 후드
|
||||||
|
item.ebwizardry\:warlock_robe_lightning.name=벼락주술사 로브
|
||||||
|
item.ebwizardry\:warlock_leggings_lightning.name=벼락주술사 각반
|
||||||
|
item.ebwizardry\:warlock_boots_lightning.name=벼락주술사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_necromancy.name=사령주술사 후드
|
||||||
|
item.ebwizardry\:warlock_robe_necromancy.name=사령주술사 로브
|
||||||
|
item.ebwizardry\:warlock_leggings_necromancy.name=사령주술사 각반
|
||||||
|
item.ebwizardry\:warlock_boots_necromancy.name=사령주술사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_earth.name=대지주술사 후드
|
||||||
|
item.ebwizardry\:warlock_robe_earth.name=대지주술사 로브
|
||||||
|
item.ebwizardry\:warlock_leggings_earth.name=대지주술사 각반
|
||||||
|
item.ebwizardry\:warlock_boots_earth.name=대지주술사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_sorcery.name=신비주술사 후드
|
||||||
|
item.ebwizardry\:warlock_robe_sorcery.name=신비주술사 로브
|
||||||
|
item.ebwizardry\:warlock_leggings_sorcery.name=신비주술사 각반
|
||||||
|
item.ebwizardry\:warlock_boots_sorcery.name=신비주술사 부츠
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_healing.name=치유주술사 후드
|
||||||
|
item.ebwizardry\:warlock_robe_healing.name=치유주술사 로브
|
||||||
|
item.ebwizardry\:warlock_leggings_healing.name=치유주술사 각반
|
||||||
|
item.ebwizardry\:warlock_boots_healing.name=치유주술사 부츠
|
||||||
|
|
||||||
item.ebwizardry\:spawn_wizard.name=생성: 마법사
|
item.ebwizardry\:spawn_wizard.name=생성: 마법사
|
||||||
item.ebwizardry\:spawn_evil_wizard.name=생성: 사악한 마법사
|
item.ebwizardry\:spawn_evil_wizard.name=생성: 사악한 마법사
|
||||||
|
|
||||||
@@ -265,9 +399,9 @@ item.ebwizardry\:flamecatcher.name=화염의 활
|
|||||||
|
|
||||||
item.ebwizardry\:generic.disabled=이 아이템은 설정에서 사용할 수 없도록 설정됨
|
item.ebwizardry\:generic.disabled=이 아이템은 설정에서 사용할 수 없도록 설정됨
|
||||||
|
|
||||||
item.ebwizardry\:ring.generic.desc=버블즈 인벤토리에 장착하거나, 단축바에 두어 최대 2개 까지 장착할 수 있다.
|
item.ebwizardry\:ring.generic.desc=버블즈 인벤토리에 장착하거나, 단축바에 올려둬 최대 2개 까지 장착할 수 있습니다.
|
||||||
item.ebwizardry\:amulet.generic.desc=버블즈 인벤토리에 장착하거나, 단축바에 두어 한 번에 한 개만 장착할 수 있다.
|
item.ebwizardry\:amulet.generic.desc=버블즈 인벤토리에 장착하거나, 단축바에 올려둬 한 번에 한 개만 장착할 수 있습니다.
|
||||||
item.ebwizardry\:charm.generic.desc=버블즈 인벤토리에 장착하거나, 단축바에 두어 한 번에 한 개만 장착할 수 있다.
|
item.ebwizardry\:charm.generic.desc=버블즈 인벤토리에 장착하거나, 단축바에 올려둬 한 번에 한 개만 장착할 수 있습니다.
|
||||||
|
|
||||||
item.ebwizardry\:ring_condensing.name=축전의 반지
|
item.ebwizardry\:ring_condensing.name=축전의 반지
|
||||||
item.ebwizardry\:ring_condensing.desc=단축바에 있는 모든 지팡이의 마나를 천천히 재생시킵니다
|
item.ebwizardry\:ring_condensing.desc=단축바에 있는 모든 지팡이의 마나를 천천히 재생시킵니다
|
||||||
@@ -404,7 +538,7 @@ item.ebwizardry\:charm_flight.name=에메랄드 딱정벌레 날개
|
|||||||
item.ebwizardry\:charm_flight.desc=비행 및 활공 속도가 50%%더 빨라집니다
|
item.ebwizardry\:charm_flight.desc=비행 및 활공 속도가 50%%더 빨라집니다
|
||||||
item.ebwizardry\:charm_growth.name=마법수정 꽃 부적
|
item.ebwizardry\:charm_growth.name=마법수정 꽃 부적
|
||||||
item.ebwizardry\:charm_growth.desc=수확의 축복 주문이 35%%확률로 식물을 완전히 자라게 합니다
|
item.ebwizardry\:charm_growth.desc=수확의 축복 주문이 35%%확률로 식물을 완전히 자라게 합니다
|
||||||
item.ebwizardry\:charm_abseiling.name=마법이 부여된 실타래
|
item.ebwizardry\:charm_abseiling.name=마법이 부여된 실뭉치
|
||||||
item.ebwizardry\:charm_abseiling.desc=덩굴의 얽매임을 사용하며 공중에 있을 때 웅크리면 덩굴의 길이가 늘어납니다
|
item.ebwizardry\:charm_abseiling.desc=덩굴의 얽매임을 사용하며 공중에 있을 때 웅크리면 덩굴의 길이가 늘어납니다
|
||||||
item.ebwizardry\:charm_silk_touch.name=월광석 보주
|
item.ebwizardry\:charm_silk_touch.name=월광석 보주
|
||||||
item.ebwizardry\:charm_silk_touch.desc=채광 주문에 섬세한 손길이 적용됩니다
|
item.ebwizardry\:charm_silk_touch.desc=채광 주문에 섬세한 손길이 적용됩니다
|
||||||
@@ -577,6 +711,7 @@ entity.ebwizardry\:wizard.player_combat_3=너의 부주의함이 대가를 치
|
|||||||
entity.ebwizardry\:wizard.player_combat_4=싸울 준비나 해라, 악당아!
|
entity.ebwizardry\:wizard.player_combat_4=싸울 준비나 해라, 악당아!
|
||||||
entity.ebwizardry\:wizard.player_combat_5=분노를 느낄 준비나 해라!
|
entity.ebwizardry\:wizard.player_combat_5=분노를 느낄 준비나 해라!
|
||||||
|
|
||||||
|
entity.ebwizardry\:zombie_minion.name=좀비
|
||||||
entity.ebwizardry\:husk_minion.name=허스크
|
entity.ebwizardry\:husk_minion.name=허스크
|
||||||
entity.ebwizardry\:skeleton_minion.name=스켈레톤
|
entity.ebwizardry\:skeleton_minion.name=스켈레톤
|
||||||
entity.ebwizardry\:stray_minion.name=스트레이
|
entity.ebwizardry\:stray_minion.name=스트레이
|
||||||
@@ -599,7 +734,7 @@ entity.ebwizardry\:decoy.name=분산
|
|||||||
entity.ebwizardry\:vex_minion.name=벡스
|
entity.ebwizardry\:vex_minion.name=벡스
|
||||||
entity.ebwizardry\:remnant.name=잔존체
|
entity.ebwizardry\:remnant.name=잔존체
|
||||||
|
|
||||||
entity.ebwizardry\:마법_missile.name=마법
|
entity.ebwizardry\:magic_missile.name=마법
|
||||||
entity.ebwizardry\:arc.name=마법
|
entity.ebwizardry\:arc.name=마법
|
||||||
entity.ebwizardry\:spark_bomb.name=마법
|
entity.ebwizardry\:spark_bomb.name=마법
|
||||||
entity.ebwizardry\:ice_shard.name=마법
|
entity.ebwizardry\:ice_shard.name=마법
|
||||||
@@ -711,8 +846,12 @@ advancement.ebwizardry\:craft_lectern.desc=주문서 책장을 관리하기 위
|
|||||||
|
|
||||||
advancement.ebwizardry\:armour_set=이제야 좀 제대로 된 마법사 같네
|
advancement.ebwizardry\:armour_set=이제야 좀 제대로 된 마법사 같네
|
||||||
advancement.ebwizardry\:armour_set.desc=마법사 갑옷의 모자, 로브, 각반, 부츠를 모두 장착하세요
|
advancement.ebwizardry\:armour_set.desc=마법사 갑옷의 모자, 로브, 각반, 부츠를 모두 장착하세요
|
||||||
advancement.ebwizardry\:legendary=전설!
|
advancement.ebwizardry\:sage=학자의 길
|
||||||
advancement.ebwizardry\:legendary.desc=전설 마법사 갑옷을 획득하세요
|
advancement.ebwizardry\:sage.desc=학자의 갑옷을 획득하세요
|
||||||
|
advancement.ebwizardry\:battlemage=전투법사의 서약
|
||||||
|
advancement.ebwizardry\:battlemage.desc=전투법사의 갑옷을 획득하세요
|
||||||
|
advancement.ebwizardry\:warlock=주술사의 방식
|
||||||
|
advancement.ebwizardry\:warlock.desc=주술사의 갑옷을 획득하세요
|
||||||
|
|
||||||
advancement.ebwizardry\:enchant_scroll=두루마리!
|
advancement.ebwizardry\:enchant_scroll=두루마리!
|
||||||
advancement.ebwizardry\:enchant_scroll.desc=빈 두루마리를 만들고 신비로운 작업대에서 주문의 마법을 부여하세요
|
advancement.ebwizardry\:enchant_scroll.desc=빈 두루마리를 만들고 신비로운 작업대에서 주문의 마법을 부여하세요
|
||||||
@@ -758,7 +897,7 @@ element.magic.wizard=마법사
|
|||||||
element.fire.wizard=화염술사
|
element.fire.wizard=화염술사
|
||||||
element.ice.wizard=얼음법사
|
element.ice.wizard=얼음법사
|
||||||
element.lightning.wizard=벼락술사
|
element.lightning.wizard=벼락술사
|
||||||
element.necromancy.wizard=혼령술사
|
element.necromancy.wizard=사령술사
|
||||||
element.earth.wizard=대지법사
|
element.earth.wizard=대지법사
|
||||||
element.sorcery.wizard=신비술사
|
element.sorcery.wizard=신비술사
|
||||||
element.healing.wizard=치유사
|
element.healing.wizard=치유사
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ tile.ebwizardry\:dark_oak_lectern.name=Кафедра из тёмного дуб
|
|||||||
tile.ebwizardry\:receptacle.name=Вместилище
|
tile.ebwizardry\:receptacle.name=Вместилище
|
||||||
tile.ebwizardry\:imbuement_altar.name=Алтарь наполнения
|
tile.ebwizardry\:imbuement_altar.name=Алтарь наполнения
|
||||||
|
|
||||||
item.ebwizardry\:crystal_magic.name=Магический кристалл
|
item.ebwizardry\:crystal_magic.name=Волшебный кристалл
|
||||||
item.ebwizardry\:crystal_magic.desc=Переливающиеся цвета этого кристалла, кажется, медленно меняются и кружатся, намекая на магическую энергию внутри. Возможно, эту магию можно задействовать, как-нибудь...
|
item.ebwizardry\:crystal_magic.desc=Переливающиеся цвета этого кристалла, кажется, медленно меняются и кружатся, намекая на волшебную энергию внутри. Возможно, эту магию можно задействовать, как-нибудь...
|
||||||
item.ebwizardry\:crystal_fire.name=Огненный кристалл
|
item.ebwizardry\:crystal_fire.name=Огненный кристалл
|
||||||
item.ebwizardry\:crystal_fire.desc=Кристалл, который светится оранжево-огненным цветом. Возможно, он - ключ к разблокировки элемента огня...
|
item.ebwizardry\:crystal_fire.desc=Кристалл, который светится оранжево-огненным цветом. Возможно, он - ключ к разблокировки элемента огня...
|
||||||
item.ebwizardry\:crystal_ice.name=Ледяной кристалл
|
item.ebwizardry\:crystal_ice.name=Ледяной кристалл
|
||||||
@@ -96,7 +96,7 @@ item.ebwizardry\:wand.levelup=%1$s готов улучшиться до уров
|
|||||||
item.ebwizardry\:wand.addally=%1$s был добавлен в Ваш список союзников.
|
item.ebwizardry\:wand.addally=%1$s был добавлен в Ваш список союзников.
|
||||||
item.ebwizardry\:wand.removeally=%1$s был убран из Вашего списка союзников.
|
item.ebwizardry\:wand.removeally=%1$s был убран из Вашего списка союзников.
|
||||||
|
|
||||||
item.ebwizardry\:magic_wand.name=Магический жезл
|
item.ebwizardry\:magic_wand.name=Волшебный жезл
|
||||||
item.ebwizardry\:apprentice_wand.name=Жезл ученика
|
item.ebwizardry\:apprentice_wand.name=Жезл ученика
|
||||||
item.ebwizardry\:advanced_wand.name=Продвинутый жезл
|
item.ebwizardry\:advanced_wand.name=Продвинутый жезл
|
||||||
item.ebwizardry\:master_wand.name=Жезл мастера
|
item.ebwizardry\:master_wand.name=Жезл мастера
|
||||||
@@ -145,10 +145,10 @@ item.ebwizardry\:medium_mana_flask.name=Средняя колба с маной
|
|||||||
item.ebwizardry\:large_mana_flask.name=Большая колба с маной
|
item.ebwizardry\:large_mana_flask.name=Большая колба с маной
|
||||||
item.ebwizardry\:mana_flask.desc=Изготовьте колбу с маной с использованием Жезла или части брони Волшебника, чтобы восстановить %s маны.
|
item.ebwizardry\:mana_flask.desc=Изготовьте колбу с маной с использованием Жезла или части брони Волшебника, чтобы восстановить %s маны.
|
||||||
|
|
||||||
item.ebwizardry\:grand_crystal.name=Большой магический кристалл
|
item.ebwizardry\:grand_crystal.name=Большой волшебный кристалл
|
||||||
item.ebwizardry\:grand_crystal.desc=Крупный магический кристалл, в несколько раз больше тех, что обнаружены естественным образом. Кто-то, видимо, вырастил его искусственно - но как?
|
item.ebwizardry\:grand_crystal.desc=Крупный волшебный кристалл, в несколько раз больше тех, что обнаружены естественным образом. Кто-то, видимо, вырастил его искусственно - но как?
|
||||||
item.ebwizardry\:crystal_shard.name=Магический кристальный осколок
|
item.ebwizardry\:crystal_shard.name=Волшебный кристальный осколок
|
||||||
item.ebwizardry\:crystal_shard.desc=Маленький кусочек раздробленного магического кристалла. Он содержит в себе немного кол-во маны, но он может иметь другое применение...
|
item.ebwizardry\:crystal_shard.desc=Маленький кусочек раздробленного волшебного кристалла. Он содержит в себе немного количество маны, но он может иметь другое применение...
|
||||||
|
|
||||||
item.ebwizardry\:astral_diamond.name=Звёздный алмаз
|
item.ebwizardry\:astral_diamond.name=Звёздный алмаз
|
||||||
item.ebwizardry\:astral_diamond.desc=Высоко-ценившиеся драгоценный камень, который ярко сверкает над звёздным светом. Поговаривают, что самые могущественные Волшебники ищут Звёздные алмазы в замен, на самые неуловимые Таинственные знания.
|
item.ebwizardry\:astral_diamond.desc=Высоко-ценившиеся драгоценный камень, который ярко сверкает над звёздным светом. Поговаривают, что самые могущественные Волшебники ищут Звёздные алмазы в замен, на самые неуловимые Таинственные знания.
|
||||||
@@ -176,7 +176,7 @@ item.ebwizardry\:range_upgrade.desc=Улучшает эффективный ра
|
|||||||
item.ebwizardry\:duration_upgrade.desc=Улучшает продолжительность эффектов брошенным Жезлом.
|
item.ebwizardry\:duration_upgrade.desc=Улучшает продолжительность эффектов брошенным Жезлом.
|
||||||
item.ebwizardry\:cooldown_upgrade.desc=Улучшает скорость отката заклинания Жезла.
|
item.ebwizardry\:cooldown_upgrade.desc=Улучшает скорость отката заклинания Жезла.
|
||||||
item.ebwizardry\:blast_upgrade.desc=Улучшает область эффекта заклинаний брошенным Жезлом.
|
item.ebwizardry\:blast_upgrade.desc=Улучшает область эффекта заклинаний брошенным Жезлом.
|
||||||
item.ebwizardry\:attunement_upgrade.desc=Улучшает кол-во заклинаний, которых можно привязать к Жезлу.
|
item.ebwizardry\:attunement_upgrade.desc=Улучшает количество заклинаний, которых можно привязать к Жезлу.
|
||||||
item.ebwizardry\:melee_upgrade.desc=Улучшает жезл на использование маны, для нанесения большего урона по мобам, при ударе.
|
item.ebwizardry\:melee_upgrade.desc=Улучшает жезл на использование маны, для нанесения большего урона по мобам, при ударе.
|
||||||
|
|
||||||
item.ebwizardry\:flaming_axe.name=Пылающий топор
|
item.ebwizardry\:flaming_axe.name=Пылающий топор
|
||||||
@@ -204,7 +204,7 @@ item.ebwizardry\:armour_upgrade.name=Мистическая печать защ
|
|||||||
item.ebwizardry\:armour_upgrade.desc=Улучшает любую Броню волшебника, чтобы сделать её %1$s Легендарной.
|
item.ebwizardry\:armour_upgrade.desc=Улучшает любую Броню волшебника, чтобы сделать её %1$s Легендарной.
|
||||||
item.ebwizardry\:armour_upgrade.desc_extended=Примените это Улучшение в часть брони Волшебника в Мистическом верстаке.
|
item.ebwizardry\:armour_upgrade.desc_extended=Примените это Улучшение в часть брони Волшебника в Мистическом верстаке.
|
||||||
|
|
||||||
item.ebwizardry\:magic_silk.name=Магический шёлк
|
item.ebwizardry\:magic_silk.name=Волшебный шёлк
|
||||||
|
|
||||||
item.ebwizardry\:spectral_dust.name=Спектральный прах
|
item.ebwizardry\:spectral_dust.name=Спектральный прах
|
||||||
|
|
||||||
@@ -274,7 +274,7 @@ item.ebwizardry\:ring_condensing.desc=Медленно восстанавлив
|
|||||||
item.ebwizardry\:ring_siphoning.name=Кольцо выкачивания
|
item.ebwizardry\:ring_siphoning.name=Кольцо выкачивания
|
||||||
item.ebwizardry\:ring_siphoning.desc=Увеличивает выкачивание маны на 30%%.
|
item.ebwizardry\:ring_siphoning.desc=Увеличивает выкачивание маны на 30%%.
|
||||||
item.ebwizardry\:ring_battlemage.name=Кольцо боевого мага
|
item.ebwizardry\:ring_battlemage.name=Кольцо боевого мага
|
||||||
item.ebwizardry\:ring_battlemage.desc=Удерживая жезл в левой руке и меч в основной руке, даёт 10%% дополнительного магического урона.
|
item.ebwizardry\:ring_battlemage.desc=Удерживая жезл в левой руке и меч в основной руке, даёт 10%% дополнительного волшебного урона.
|
||||||
item.ebwizardry\:ring_combustion.name=Кольцо горения
|
item.ebwizardry\:ring_combustion.name=Кольцо горения
|
||||||
item.ebwizardry\:ring_combustion.desc=Существа, убитые Огненными заклинаниями, взрываются.
|
item.ebwizardry\:ring_combustion.desc=Существа, убитые Огненными заклинаниями, взрываются.
|
||||||
item.ebwizardry\:ring_fire_melee.name=Кольцо огненного прикосновения
|
item.ebwizardry\:ring_fire_melee.name=Кольцо огненного прикосновения
|
||||||
@@ -339,7 +339,7 @@ item.ebwizardry\:ring_interdiction.desc=Ваше силовое поле пов
|
|||||||
item.ebwizardry\:amulet_arcane_defence.name=Амулет мистической защиты
|
item.ebwizardry\:amulet_arcane_defence.name=Амулет мистической защиты
|
||||||
item.ebwizardry\:amulet_arcane_defence.desc=Медленно восстанавливается мана на всю одетую броню Волшебника.
|
item.ebwizardry\:amulet_arcane_defence.desc=Медленно восстанавливается мана на всю одетую броню Волшебника.
|
||||||
item.ebwizardry\:amulet_warding.name=Амулет защиты
|
item.ebwizardry\:amulet_warding.name=Амулет защиты
|
||||||
item.ebwizardry\:amulet_warding.desc=Сокращает весь входящий магический урон на 10%%.
|
item.ebwizardry\:amulet_warding.desc=Сокращает весь входящий волшебный урон на 10%%.
|
||||||
item.ebwizardry\:amulet_wisdom.name=Амулет мудрости
|
item.ebwizardry\:amulet_wisdom.name=Амулет мудрости
|
||||||
item.ebwizardry\:amulet_wisdom.desc=Существенно сокращает шанс отрицательных эффектов при использовании неоткрытых Заклинаний.
|
item.ebwizardry\:amulet_wisdom.desc=Существенно сокращает шанс отрицательных эффектов при использовании неоткрытых Заклинаний.
|
||||||
item.ebwizardry\:amulet_fire_protection.name=Амулет быстрой пламени
|
item.ebwizardry\:amulet_fire_protection.name=Амулет быстрой пламени
|
||||||
@@ -591,7 +591,7 @@ entity.ebwizardry\:spirit_horse.name=Призрачная лошадь
|
|||||||
entity.ebwizardry\:ice_giant.name=Ледяной гигант
|
entity.ebwizardry\:ice_giant.name=Ледяной гигант
|
||||||
entity.ebwizardry\:phoenix.name=Феникс
|
entity.ebwizardry\:phoenix.name=Феникс
|
||||||
entity.ebwizardry\:wizard.name=Волшебник
|
entity.ebwizardry\:wizard.name=Волшебник
|
||||||
entity.ebwizardry\:magic_slime.name=Магический слизень
|
entity.ebwizardry\:magic_slime.name=Волшебный слизень
|
||||||
entity.ebwizardry\:silverfish_minion.name=Чешуйница
|
entity.ebwizardry\:silverfish_minion.name=Чешуйница
|
||||||
entity.ebwizardry\:storm_elemental.name=Грозовой элементаль
|
entity.ebwizardry\:storm_elemental.name=Грозовой элементаль
|
||||||
entity.ebwizardry\:evil_wizard.name=Злой волшебник
|
entity.ebwizardry\:evil_wizard.name=Злой волшебник
|
||||||
@@ -599,31 +599,31 @@ entity.ebwizardry\:decoy.name=Приманка
|
|||||||
entity.ebwizardry\:vex_minion.name=Досаждатель
|
entity.ebwizardry\:vex_minion.name=Досаждатель
|
||||||
entity.ebwizardry\:remnant.name=Пережиток
|
entity.ebwizardry\:remnant.name=Пережиток
|
||||||
|
|
||||||
entity.ebwizardry\:magic_missile.name=Магическая
|
entity.ebwizardry\:magic_missile.name=Волшебная
|
||||||
entity.ebwizardry\:arc.name=Магическая
|
entity.ebwizardry\:arc.name=Волшебная
|
||||||
entity.ebwizardry\:spark_bomb.name=Магическая
|
entity.ebwizardry\:spark_bomb.name=Волшебная
|
||||||
entity.ebwizardry\:ice_shard.name=Магическая
|
entity.ebwizardry\:ice_shard.name=Волшебная
|
||||||
entity.ebwizardry\:firebomb.name=Магическая
|
entity.ebwizardry\:firebomb.name=Волшебная
|
||||||
entity.ebwizardry\:poison_bomb.name=Магическая
|
entity.ebwizardry\:poison_bomb.name=Волшебная
|
||||||
entity.ebwizardry\:force_orb.name=Магическая
|
entity.ebwizardry\:force_orb.name=Волшебная
|
||||||
entity.ebwizardry\:spark.name=Магическая
|
entity.ebwizardry\:spark.name=Волшебная
|
||||||
entity.ebwizardry\:darkness_orb.name=Магическая
|
entity.ebwizardry\:darkness_orb.name=Волшебная
|
||||||
entity.ebwizardry\:fire_sigil.name=Магическая
|
entity.ebwizardry\:fire_sigil.name=Волшебная
|
||||||
entity.ebwizardry\:frost_sigil.name=Магическая
|
entity.ebwizardry\:frost_sigil.name=Волшебная
|
||||||
entity.ebwizardry\:lightning_sigil.name=Магическая
|
entity.ebwizardry\:lightning_sigil.name=Волшебная
|
||||||
entity.ebwizardry\:lightning_arrow.name=Магическая
|
entity.ebwizardry\:lightning_arrow.name=Волшебная
|
||||||
entity.ebwizardry\:firebolt.name=Магическая
|
entity.ebwizardry\:firebolt.name=Волшебная
|
||||||
entity.ebwizardry\:ice_charge.name=Магическая
|
entity.ebwizardry\:ice_charge.name=Волшебная
|
||||||
entity.ebwizardry\:force_arrow.name=Магическая
|
entity.ebwizardry\:force_arrow.name=Волшебная
|
||||||
entity.ebwizardry\:dart.name=Магическая
|
entity.ebwizardry\:dart.name=Волшебная
|
||||||
entity.ebwizardry\:lightning_disc.name=Магическая
|
entity.ebwizardry\:lightning_disc.name=Волшебная
|
||||||
entity.ebwizardry\:thunderbolt.name=Магическая
|
entity.ebwizardry\:thunderbolt.name=Волшебная
|
||||||
entity.ebwizardry\:decay.name=Магическая
|
entity.ebwizardry\:decay.name=Волшебная
|
||||||
entity.ebwizardry\:ice_lance.name=Магическая
|
entity.ebwizardry\:ice_lance.name=Волшебная
|
||||||
entity.ebwizardry\:smoke_bomb.name=Магическая
|
entity.ebwizardry\:smoke_bomb.name=Волшебная
|
||||||
entity.ebwizardry\:ice_spike.name=Магическая
|
entity.ebwizardry\:ice_spike.name=Волшебная
|
||||||
entity.ebwizardry\:combustion_rune.name=Магическая
|
entity.ebwizardry\:combustion_rune.name=Волшебная
|
||||||
entity.ebwizardry\:flamecatcher_arrow.name=Магическая
|
entity.ebwizardry\:flamecatcher_arrow.name=Волшебная
|
||||||
|
|
||||||
entity.ebwizardry\:black_hole.name=Чёрная дыра
|
entity.ebwizardry\:black_hole.name=Чёрная дыра
|
||||||
entity.ebwizardry\:shield.name=Щит
|
entity.ebwizardry\:shield.name=Щит
|
||||||
@@ -652,9 +652,9 @@ itemGroup.ebwizardrygear=Снаряжение wizardry
|
|||||||
advancement.ebwizardry\:root=Волшебство
|
advancement.ebwizardry\:root=Волшебство
|
||||||
advancement.ebwizardry\:root.desc=Путешествие волшебника к освоению Мистики.
|
advancement.ebwizardry\:root.desc=Путешествие волшебника к освоению Мистики.
|
||||||
advancement.ebwizardry\:crystal=Любопытный кристалл...
|
advancement.ebwizardry\:crystal=Любопытный кристалл...
|
||||||
advancement.ebwizardry\:crystal.desc=Добудьте магический кристалл.
|
advancement.ebwizardry\:crystal.desc=Добудьте волшебный кристалл.
|
||||||
advancement.ebwizardry\:arcane_initiate=Приступить к Мистике.
|
advancement.ebwizardry\:arcane_initiate=Приступить к Мистике.
|
||||||
advancement.ebwizardry\:arcane_initiate.desc=Создайте магический Жезл из Золотого самородка, Палки и Магического кристалла.
|
advancement.ebwizardry\:arcane_initiate.desc=Создайте волшебный Жезл из Золотого самородка, Палки и Волшебного кристалла.
|
||||||
|
|
||||||
advancement.ebwizardry\:apprentice=Ученик волшебника.
|
advancement.ebwizardry\:apprentice=Ученик волшебника.
|
||||||
advancement.ebwizardry\:apprentice.desc=Используйте фолиант арканы, чтобы улучшить свой жезл.
|
advancement.ebwizardry\:apprentice.desc=Используйте фолиант арканы, чтобы улучшить свой жезл.
|
||||||
@@ -665,13 +665,13 @@ advancement.ebwizardry\:advanced.desc=Улучшите свой Жезл до П
|
|||||||
advancement.ebwizardry\:master=Мастер в Мистике.
|
advancement.ebwizardry\:master=Мастер в Мистике.
|
||||||
advancement.ebwizardry\:master.desc=Получите жезл мастера.
|
advancement.ebwizardry\:master.desc=Получите жезл мастера.
|
||||||
advancement.ebwizardry\:max_out_wand=Полностью оборудован.
|
advancement.ebwizardry\:max_out_wand=Полностью оборудован.
|
||||||
advancement.ebwizardry\:max_out_wand.desc=Примените максимальное кол-во улучшений в жезл Мастера.
|
advancement.ebwizardry\:max_out_wand.desc=Примените максимальное количество улучшений в жезл Мастера.
|
||||||
advancement.ebwizardry\:all_spells=Маг на все руки.
|
advancement.ebwizardry\:all_spells=Маг на все руки.
|
||||||
advancement.ebwizardry\:all_spells.desc=Бросьте каждое Заклинание в игре.
|
advancement.ebwizardry\:all_spells.desc=Бросьте каждое Заклинание в игре.
|
||||||
|
|
||||||
advancement.ebwizardry\:wizard_tower=Кто здесь живёт?
|
advancement.ebwizardry\:wizard_tower=Кто здесь живёт?
|
||||||
advancement.ebwizardry\:wizard_tower.desc=Посетите башню Волшебника.
|
advancement.ebwizardry\:wizard_tower.desc=Посетите башню Волшебника.
|
||||||
advancement.ebwizardry\:wizard_trade=Магическое решение.
|
advancement.ebwizardry\:wizard_trade=Волшебное решение.
|
||||||
advancement.ebwizardry\:wizard_trade.desc=Купите предмет у Волшебника.
|
advancement.ebwizardry\:wizard_trade.desc=Купите предмет у Волшебника.
|
||||||
advancement.ebwizardry\:anger_wizard=Вы пожалеете об этом.
|
advancement.ebwizardry\:anger_wizard=Вы пожалеете об этом.
|
||||||
advancement.ebwizardry\:anger_wizard.desc=Разозлите волшебника.
|
advancement.ebwizardry\:anger_wizard.desc=Разозлите волшебника.
|
||||||
@@ -815,7 +815,7 @@ spell.ebwizardry\:disintegration=Распад
|
|||||||
spell.ebwizardry\:divination=Предсказание
|
spell.ebwizardry\:divination=Предсказание
|
||||||
spell.ebwizardry\:dragon_fireball=Огненный шар дракона
|
spell.ebwizardry\:dragon_fireball=Огненный шар дракона
|
||||||
spell.ebwizardry\:earthquake=Землятресение
|
spell.ebwizardry\:earthquake=Землятресение
|
||||||
spell.ebwizardry\:empowering_presence=Магическое усиление
|
spell.ebwizardry\:empowering_presence=Волшебное усиление
|
||||||
spell.ebwizardry\:enrage=Разозление
|
spell.ebwizardry\:enrage=Разозление
|
||||||
spell.ebwizardry\:entrapment=Провокация
|
spell.ebwizardry\:entrapment=Провокация
|
||||||
spell.ebwizardry\:evade=Уклонение
|
spell.ebwizardry\:evade=Уклонение
|
||||||
@@ -888,7 +888,7 @@ spell.ebwizardry\:lightning_pulse=Молниевый пульс
|
|||||||
spell.ebwizardry\:lightning_ray=Молниевый луч
|
spell.ebwizardry\:lightning_ray=Молниевый луч
|
||||||
spell.ebwizardry\:lightning_sigil=Молниевый сигил
|
spell.ebwizardry\:lightning_sigil=Молниевый сигил
|
||||||
spell.ebwizardry\:lightning_web=Молниевая паутина
|
spell.ebwizardry\:lightning_web=Молниевая паутина
|
||||||
spell.ebwizardry\:magic_missile=Магический снаряд
|
spell.ebwizardry\:magic_missile=Волшебный снаряд
|
||||||
spell.ebwizardry\:mark_sacrifice=Знак жертвоприношения
|
spell.ebwizardry\:mark_sacrifice=Знак жертвоприношения
|
||||||
spell.ebwizardry\:metamorphosis=Метаморфоз
|
spell.ebwizardry\:metamorphosis=Метаморфоз
|
||||||
spell.ebwizardry\:meteor=Метеор
|
spell.ebwizardry\:meteor=Метеор
|
||||||
@@ -983,7 +983,7 @@ spell.ebwizardry\:chain_lightning.desc=Стреляет искрами свет
|
|||||||
spell.ebwizardry\:charge.desc=Заставляет заклинателя стремительно заряжаться в том направлении, куда он смотрит, повреждая и отбрасывая всё на своём пути.
|
spell.ebwizardry\:charge.desc=Заставляет заклинателя стремительно заряжаться в том направлении, куда он смотрит, повреждая и отбрасывая всё на своём пути.
|
||||||
spell.ebwizardry\:clairvoyance.desc=Раскрывает путь в запоминающее место. С этим выбранным заклинанием, shift + пкм по блоку, чтобы задать место. Бросьте это Заклинание как обычно, чтобы раскрыть путь. Путь исчезнет через 90 секунд.
|
spell.ebwizardry\:clairvoyance.desc=Раскрывает путь в запоминающее место. С этим выбранным заклинанием, shift + пкм по блоку, чтобы задать место. Бросьте это Заклинание как обычно, чтобы раскрыть путь. Путь исчезнет через 90 секунд.
|
||||||
spell.ebwizardry\:cobwebs.desc=Создаёт паутины туда, куда Вы указываете, она-же, сильно сдерживают движение любых существ пойманные среди них. Паутины пропадут через 20 секунд либо если сломать.
|
spell.ebwizardry\:cobwebs.desc=Создаёт паутины туда, куда Вы указываете, она-же, сильно сдерживают движение любых существ пойманные среди них. Паутины пропадут через 20 секунд либо если сломать.
|
||||||
spell.ebwizardry\:combustion_rune.desc=Помещает магические наземные мины на землю туда, куда Вы указываете, которые взрываются когда ступите на них.
|
spell.ebwizardry\:combustion_rune.desc=Помещает волшебные наземные мины на землю туда, куда Вы указываете, которые взрываются когда ступите на них.
|
||||||
spell.ebwizardry\:conjure_armour.desc=Создаёт спектральную броню вокруг Заклинателя, обеспечивающая защиту равной по защите Железной брони. Броня длится 60 секунд. У заклинателя должен быть Пустой слот для брони.
|
spell.ebwizardry\:conjure_armour.desc=Создаёт спектральную броню вокруг Заклинателя, обеспечивающая защиту равной по защите Железной брони. Броня длится 60 секунд. У заклинателя должен быть Пустой слот для брони.
|
||||||
spell.ebwizardry\:conjure_block.desc=Призывает спектральный блок туда, куда Вы указываете. Спектральный блок исчезает через 45 секунд, или Вы можете устранить его, снова бросив на него Заклинание.
|
spell.ebwizardry\:conjure_block.desc=Призывает спектральный блок туда, куда Вы указываете. Спектральный блок исчезает через 45 секунд, или Вы можете устранить его, снова бросив на него Заклинание.
|
||||||
spell.ebwizardry\:conjure_bow.desc=Создаёт спектральный лук с безграничными стрелами, которые длятся 60 секунд.
|
spell.ebwizardry\:conjure_bow.desc=Создаёт спектральный лук с безграничными стрелами, которые длятся 60 секунд.
|
||||||
@@ -1005,7 +1005,7 @@ spell.ebwizardry\:disintegration.desc=Выстреливает мощной мо
|
|||||||
spell.ebwizardry\:divination.desc=Направляет заклинателя к близлежащим Рудам и Ресурсам. Мощь, увеличит вероятность найти больше ценных руд.
|
spell.ebwizardry\:divination.desc=Направляет заклинателя к близлежащим Рудам и Ресурсам. Мощь, увеличит вероятность найти больше ценных руд.
|
||||||
spell.ebwizardry\:dragon_fireball.desc=Запускает огненный шар дракона в направлении, по которому Вы указываете, который выпускает сохраняющиеся Отравляющие облака при попадании.
|
spell.ebwizardry\:dragon_fireball.desc=Запускает огненный шар дракона в направлении, по которому Вы указываете, который выпускает сохраняющиеся Отравляющие облака при попадании.
|
||||||
spell.ebwizardry\:earthquake.desc=Истинный мастер земной магии, который может сдвинуть горы.
|
spell.ebwizardry\:earthquake.desc=Истинный мастер земной магии, который может сдвинуть горы.
|
||||||
spell.ebwizardry\:empowering_presence.desc=Даёт Заклинателю и ближайшим Союзникам усиленный магический урон на 30 секунд.
|
spell.ebwizardry\:empowering_presence.desc=Даёт Заклинателю и ближайшим Союзникам усиленный волшебный урон на 30 секунд.
|
||||||
spell.ebwizardry\:enrage.desc=Причиняет близлежащих существ впадать в ярость, вместо этого, останавливая всё, что они делали напасть на Заклинателя.
|
spell.ebwizardry\:enrage.desc=Причиняет близлежащих существ впадать в ярость, вместо этого, останавливая всё, что они делали напасть на Заклинателя.
|
||||||
spell.ebwizardry\:entrapment.desc=Заманивает цель в Сферу тьмы, которая беспомощно тянет её вверх и непрерывно повреждает её.
|
spell.ebwizardry\:entrapment.desc=Заманивает цель в Сферу тьмы, которая беспомощно тянет её вверх и непрерывно повреждает её.
|
||||||
spell.ebwizardry\:evade.desc=Заставляет заклинателя быстро отпрыгнуть в сторону, чтобы увернуться от происходящих атак.
|
spell.ebwizardry\:evade.desc=Заставляет заклинателя быстро отпрыгнуть в сторону, чтобы увернуться от происходящих атак.
|
||||||
@@ -1014,7 +1014,7 @@ spell.ebwizardry\:fireball.desc=Выпускает огненный шар в н
|
|||||||
spell.ebwizardry\:firebolt.desc=Выстреливает струёй огня на короткое расстояние перед Вами.
|
spell.ebwizardry\:firebolt.desc=Выстреливает струёй огня на короткое расстояние перед Вами.
|
||||||
spell.ebwizardry\:firebomb.desc=Выпускает огненную бомбу в направлении, по которому Вы указываете, которая взрывается при попадании, поджигая цели.
|
spell.ebwizardry\:firebomb.desc=Выпускает огненную бомбу в направлении, по которому Вы указываете, которая взрывается при попадании, поджигая цели.
|
||||||
spell.ebwizardry\:fire_resistance.desc=Даёт заклинателю огнестойкость на 30 секунд.
|
spell.ebwizardry\:fire_resistance.desc=Даёт заклинателю огнестойкость на 30 секунд.
|
||||||
spell.ebwizardry\:fire_sigil.desc=Помещает магическую огненную ловушку на землю, которая повреждает и поджигает существо сдетонирующее её.
|
spell.ebwizardry\:fire_sigil.desc=Помещает волшебную огненную ловушку на землю, которая повреждает и поджигает существо сдетонирующее её.
|
||||||
spell.ebwizardry\:fireskin.desc=Покрывает заклинателя в пламя на 30 секунд, причиняет всё, что атакует его загореться.
|
spell.ebwizardry\:fireskin.desc=Покрывает заклинателя в пламя на 30 секунд, причиняет всё, что атакует его загореться.
|
||||||
spell.ebwizardry\:firestorm.desc="Очистите землю и очистите почву!\nДеревья должны гореть, а озера должны кипеть!\nСпалите дерево и подпалите камень!\nВсем склониться перед адским троном!"
|
spell.ebwizardry\:firestorm.desc="Очистите землю и очистите почву!\nДеревья должны гореть, а озера должны кипеть!\nСпалите дерево и подпалите камень!\nВсем склониться перед адским троном!"
|
||||||
spell.ebwizardry\:fire_breath.desc="Я, дракон."
|
spell.ebwizardry\:fire_breath.desc="Я, дракон."
|
||||||
@@ -1023,26 +1023,26 @@ spell.ebwizardry\:flame_ray.desc=Создаёт поток пламени в н
|
|||||||
spell.ebwizardry\:flaming_axe.desc=Создаёт пылающий топор, который поджигает врагов при ударе. Длится 30 секунд.
|
spell.ebwizardry\:flaming_axe.desc=Создаёт пылающий топор, который поджигает врагов при ударе. Длится 30 секунд.
|
||||||
spell.ebwizardry\:flaming_weapon.desc=Временно наполняет первое оружие в панели быстрого доступа Заклинателя энергией пламени, причиняя поджигание жертв. Магия выветрится через 45 секунд.
|
spell.ebwizardry\:flaming_weapon.desc=Временно наполняет первое оружие в панели быстрого доступа Заклинателя энергией пламени, причиняя поджигание жертв. Магия выветрится через 45 секунд.
|
||||||
spell.ebwizardry\:flight.desc=Парить как Орёл.
|
spell.ebwizardry\:flight.desc=Парить как Орёл.
|
||||||
spell.ebwizardry\:font_of_mana.desc="Мы были наполнены интенсивной магической энергией вытекающая из центра ..." - Отрывок из дневника забытого мага; оставшаяся часть страницы была сожжена.
|
spell.ebwizardry\:font_of_mana.desc="Мы были наполнены интенсивной волшебной энергией вытекающая из центра ..." - Отрывок из дневника забытого мага; оставшаяся часть страницы была сожжена.
|
||||||
spell.ebwizardry\:font_of_vitality.desc=Это потрясающее ощущение.
|
spell.ebwizardry\:font_of_vitality.desc=Это потрясающее ощущение.
|
||||||
spell.ebwizardry\:force_arrow.desc=Выстреливает усиленной стрелой в направлении, по которому Вы указываете.
|
spell.ebwizardry\:force_arrow.desc=Выстреливает усиленной стрелой в направлении, по которому Вы указываете.
|
||||||
spell.ebwizardry\:forcefield.desc=Создаёт силовое поле вокруг Заклинателя, которое отталкивает существ и отражает большую часть снарядов.
|
spell.ebwizardry\:forcefield.desc=Создаёт силовое поле вокруг Заклинателя, которое отталкивает существ и отражает большую часть снарядов.
|
||||||
spell.ebwizardry\:force_orb.desc=Запускает силовую сферу, которая повреждает и отталкивает ближайших существ при попадании.
|
spell.ebwizardry\:force_orb.desc=Запускает силовую сферу, которая повреждает и отталкивает ближайших существ при попадании.
|
||||||
spell.ebwizardry\:forests_curse.desc="Как Вы посмели войти в мой лес!"
|
spell.ebwizardry\:forests_curse.desc="Как Вы посмели войти в мой лес!"
|
||||||
spell.ebwizardry\:forest_of_thorns.desc=Посреди леса кроется скрытая поляна,\nВ поляне играет Волшебник,\nМагические искусства невыразимого порядка,\nГлубоко в лесу шипов.
|
spell.ebwizardry\:forest_of_thorns.desc=Посреди леса кроется скрытая поляна,\nВ поляне играет Волшебник,\nВолшебные искусства невыразимого порядка,\nГлубоко в лесу шипов.
|
||||||
spell.ebwizardry\:freeze.desc=Замораживает цель на 10 секунд. Также будет замораживать воду и создавать на земле снег.
|
spell.ebwizardry\:freeze.desc=Замораживает цель на 10 секунд. Также будет замораживать воду и создавать на земле снег.
|
||||||
spell.ebwizardry\:freezing_weapon.desc=Временно наполняет первое оружие в панели быстрого доступа Заклинателя силой мороза, причиняя замораживание жертв. Магия выветрится через 45 секунд.
|
spell.ebwizardry\:freezing_weapon.desc=Временно наполняет первое оружие в панели быстрого доступа Заклинателя силой мороза, причиняя замораживание жертв. Магия выветрится через 45 секунд.
|
||||||
spell.ebwizardry\:frost_axe.desc=Создаёт морозный топор, который замораживает врагов при ударе. Длится 30 секунд.
|
spell.ebwizardry\:frost_axe.desc=Создаёт морозный топор, который замораживает врагов при ударе. Длится 30 секунд.
|
||||||
spell.ebwizardry\:frost_barrier.desc=Создаёт баррикаду льда впереди Заклинателя, которая ограждает их от поступающих атак. Барьер длится 20 секунд.
|
spell.ebwizardry\:frost_barrier.desc=Создаёт баррикаду льда впереди Заклинателя, которая ограждает их от поступающих атак. Барьер длится 20 секунд.
|
||||||
spell.ebwizardry\:frost_ray.desc=Создаёт поток мороза в направлении, по которому Вы указываете, который замедляет и регулярно повреждает цели.
|
spell.ebwizardry\:frost_ray.desc=Создаёт поток мороза в направлении, по которому Вы указываете, который замедляет и регулярно повреждает цели.
|
||||||
spell.ebwizardry\:frost_sigil.desc=Помещает магическую ледяную ловушку на землю, которая повреждает и замораживает существо, сдетонирующее её.
|
spell.ebwizardry\:frost_sigil.desc=Помещает волшебную ледяную ловушку на землю, которая повреждает и замораживает существо, сдетонирующее её.
|
||||||
spell.ebwizardry\:frost_step.desc=Позволяет заклинателю замораживать воду пока он бродит, на 30 секунд.
|
spell.ebwizardry\:frost_step.desc=Позволяет заклинателю замораживать воду пока он бродит, на 30 секунд.
|
||||||
spell.ebwizardry\:grapple.desc=Выстреливает магической лианой, которая позволяет Заклинателю захватываться в сторону блоков или сматывать существ. Отпустите лкм, чтобы освободить Блок или Существо.
|
spell.ebwizardry\:grapple.desc=Выстреливает волшебной лианой, которая позволяет Заклинателю захватываться в сторону блоков или сматывать существ. Отпустите лкм, чтобы освободить Блок или Существо.
|
||||||
spell.ebwizardry\:glide.desc=При удержании Лкм, позволяет Заклинателю скользить вниз, пока он находится в воздухе.
|
spell.ebwizardry\:glide.desc=При удержании Лкм, позволяет Заклинателю скользить вниз, пока он находится в воздухе.
|
||||||
spell.ebwizardry\:greater_fireball.desc=Запускает большой огненный шар в направлении, по которому Вы указываете, который врывается при попадании.
|
spell.ebwizardry\:greater_fireball.desc=Запускает большой огненный шар в направлении, по которому Вы указываете, который врывается при попадании.
|
||||||
spell.ebwizardry\:greater_heal.desc=Излечивает заклинателя 4-мя сердцами.
|
spell.ebwizardry\:greater_heal.desc=Излечивает заклинателя 4-мя сердцами.
|
||||||
spell.ebwizardry\:greater_telekinesis.desc=Позволяет заклинателю подбирать блок или существо и удерживать его в воздухе до тех пор, пока зажата кнопка Лкм. Shift во время удержания блока или существа, выбросит его на короткое расстояние.
|
spell.ebwizardry\:greater_telekinesis.desc=Позволяет заклинателю подбирать блок или существо и удерживать его в воздухе до тех пор, пока зажата кнопка Лкм. Shift во время удержания блока или существа, выбросит его на короткое расстояние.
|
||||||
spell.ebwizardry\:greater_ward.desc=Даёт заклинателю мощный защитный эффект, который существенно сокращает входящий магический урон на 30 секунд.
|
spell.ebwizardry\:greater_ward.desc=Даёт заклинателю мощный защитный эффект, который существенно сокращает входящий волшебный урон на 30 секунд.
|
||||||
spell.ebwizardry\:group_heal.desc=Лечит заклинателя и всех поблизости союзников, и, призывает существо с 3-мя сердцами.
|
spell.ebwizardry\:group_heal.desc=Лечит заклинателя и всех поблизости союзников, и, призывает существо с 3-мя сердцами.
|
||||||
spell.ebwizardry\:growth_aura.desc=Выращивает все посевы рядом от Заклинателя. Также выращивает высокую траву и цветы на блоке травы.
|
spell.ebwizardry\:growth_aura.desc=Выращивает все посевы рядом от Заклинателя. Также выращивает высокую траву и цветы на блоке травы.
|
||||||
spell.ebwizardry\:guardian_beam.desc=Стреляет лучами из глаз Стража в направлении, по которому Вы указываете, который повреждает цели и истощает их запас воздуха под водой.
|
spell.ebwizardry\:guardian_beam.desc=Стреляет лучами из глаз Стража в направлении, по которому Вы указываете, который повреждает цели и истощает их запас воздуха под водой.
|
||||||
@@ -1069,17 +1069,17 @@ spell.ebwizardry\:ironflesh.desc=Существенно улучшает соп
|
|||||||
spell.ebwizardry\:leap.desc=Заставляет заклинателя прыгать выше на несколько блоков и слегка вперёд.
|
spell.ebwizardry\:leap.desc=Заставляет заклинателя прыгать выше на несколько блоков и слегка вперёд.
|
||||||
spell.ebwizardry\:levitation.desc=Поднимает заклинателя вверх, пока зажата кнопка Лкм. Также будет сводить на нет урон от падения, если оно используется до удара об землю.
|
spell.ebwizardry\:levitation.desc=Поднимает заклинателя вверх, пока зажата кнопка Лкм. Также будет сводить на нет урон от падения, если оно используется до удара об землю.
|
||||||
spell.ebwizardry\:life_drain.desc=Создаёт поток иссушительной энергии в направлении, по которому Вы указываете, которая высасывает жизнь из цели и использует её, чтобы мало-помалу восстановить Ваше здоровье.
|
spell.ebwizardry\:life_drain.desc=Создаёт поток иссушительной энергии в направлении, по которому Вы указываете, которая высасывает жизнь из цели и использует её, чтобы мало-помалу восстановить Ваше здоровье.
|
||||||
spell.ebwizardry\:light.desc=Создаёт магическую точку света, которая освещает окружающую область. Длится 30 секунд.
|
spell.ebwizardry\:light.desc=Создаёт волшебную точку света, которая освещает окружающую область. Длится 30 секунд.
|
||||||
spell.ebwizardry\:lightning_arrow.desc=Выстреливает молниевой стрелой в направлении, по которому Вы указываете.
|
spell.ebwizardry\:lightning_arrow.desc=Выстреливает молниевой стрелой в направлении, по которому Вы указываете.
|
||||||
spell.ebwizardry\:lightning_bolt.desc=Вызывает молнию ударить туда, куда Вы указываете.
|
spell.ebwizardry\:lightning_bolt.desc=Вызывает молнию ударить туда, куда Вы указываете.
|
||||||
spell.ebwizardry\:lightning_disc.desc=Направляет молниевый диск лететь в направлении, по которому Вы указываете, при этом разыскивает цели.
|
spell.ebwizardry\:lightning_disc.desc=Направляет молниевый диск лететь в направлении, по которому Вы указываете, при этом разыскивает цели.
|
||||||
spell.ebwizardry\:lightning_hammer.desc="Я поражу Вас гневом небес!"
|
spell.ebwizardry\:lightning_hammer.desc="Я поражу Вас гневом небес!"
|
||||||
spell.ebwizardry\:lightning_pulse.desc=Заряжает землю около Заклинателя молнией, повреждает и отталкивает ближайших существ.
|
spell.ebwizardry\:lightning_pulse.desc=Заряжает землю около Заклинателя молнией, повреждает и отталкивает ближайших существ.
|
||||||
spell.ebwizardry\:lightning_ray.desc=Создаёт поток молнии в направлении, по которому Вы указываете, который непрерывно повреждает цели.
|
spell.ebwizardry\:lightning_ray.desc=Создаёт поток молнии в направлении, по которому Вы указываете, который непрерывно повреждает цели.
|
||||||
spell.ebwizardry\:lightning_sigil.desc=Размещает магическую молниевую ловушку на землю, которая повреждает существо, сдетонирующее её и зацепит других поблизости существ.
|
spell.ebwizardry\:lightning_sigil.desc=Размещает волшебную молниевую ловушку на землю, которая повреждает существо, сдетонирующее её и зацепит других поблизости существ.
|
||||||
spell.ebwizardry\:lightning_web.desc="Сконцентрируйтесь. Направьте шторм в свой разум сквозь Жезл и освободите свою ярость."
|
spell.ebwizardry\:lightning_web.desc="Сконцентрируйтесь. Направьте шторм в свой разум сквозь Жезл и освободите свою ярость."
|
||||||
spell.ebwizardry\:magic_missile.desc=Стреляет молнией магической энергией в направлении, по которому Вы указываете.
|
spell.ebwizardry\:magic_missile.desc=Стреляет молнией волшебной энергией в направлении, по которому Вы указываете.
|
||||||
spell.ebwizardry\:mark_sacrifice.desc=Помечает цель как божественную жертву. Следующая магическая атака на помеченного существа, нанесёт 60%% дополнительного урона с каждым уровнем эффекта.
|
spell.ebwizardry\:mark_sacrifice.desc=Помечает цель как божественную жертву. Следующая волшебная атака на помеченного существа, нанесёт 60%% дополнительного урона с каждым уровнем эффекта.
|
||||||
spell.ebwizardry\:metamorphosis.desc=Преобразует цель в другую форму. Работает только на определённых существ.
|
spell.ebwizardry\:metamorphosis.desc=Преобразует цель в другую форму. Работает только на определённых существ.
|
||||||
spell.ebwizardry\:meteor.desc=Некоторые волшебники хотят увидеть, как горит мир...
|
spell.ebwizardry\:meteor.desc=Некоторые волшебники хотят увидеть, как горит мир...
|
||||||
spell.ebwizardry\:mind_control.desc=Берёт контроль над разумом цели на 30 секунд, заставив его поменяться местами и драться вместо Заклинателя. Не будет работать на существ, которые слишком сильны волей.
|
spell.ebwizardry\:mind_control.desc=Берёт контроль над разумом цели на 30 секунд, заставив его поменяться местами и драться вместо Заклинателя. Не будет работать на существ, которые слишком сильны волей.
|
||||||
@@ -1099,12 +1099,12 @@ spell.ebwizardry\:pocket_workbench.desc=Позволяет заклинател
|
|||||||
spell.ebwizardry\:poison.desc=Стреляет ядом в направлении, по которому Вы указываете.
|
spell.ebwizardry\:poison.desc=Стреляет ядом в направлении, по которому Вы указываете.
|
||||||
spell.ebwizardry\:poison_bomb.desc=Запускает отравляющую бомбу в направлении, по которому Вы указываете, которая взрывается при попадании, а также отравляет ближайших существ.
|
spell.ebwizardry\:poison_bomb.desc=Запускает отравляющую бомбу в направлении, по которому Вы указываете, которая взрывается при попадании, а также отравляет ближайших существ.
|
||||||
spell.ebwizardry\:possession.desc="Стать своим врагом."
|
spell.ebwizardry\:possession.desc="Стать своим врагом."
|
||||||
spell.ebwizardry\:radiant_totem.desc=Создаёт сияющий тотем, который выстреливает лучом света на поблизости существ, лечащий Союзников, но повреждает мобов. Длится 30 секунд. Мощь, повысит кол-во целей.
|
spell.ebwizardry\:radiant_totem.desc=Создаёт сияющий тотем, который выстреливает лучом света на поблизости существ, лечащий Союзников, но повреждает мобов. Длится 30 секунд. Мощь, повысит количество целей.
|
||||||
spell.ebwizardry\:ray_of_purification.desc=Испускает луч ослепительного света, который повреждает и слепит цели. Неживые существа получат 2-й урон и загорятся.
|
spell.ebwizardry\:ray_of_purification.desc=Испускает луч ослепительного света, который повреждает и слепит цели. Неживые существа получат 2-й урон и загорятся.
|
||||||
spell.ebwizardry\:remove_curse.desc=Снимает любое проклятие, которое на данный момент влияет на Заклинателя.
|
spell.ebwizardry\:remove_curse.desc=Снимает любое проклятие, которое на данный момент влияет на Заклинателя.
|
||||||
spell.ebwizardry\:replenish_hunger.desc=Восполняет уровень еды Заклинателя 3-мя очками голода.
|
spell.ebwizardry\:replenish_hunger.desc=Восполняет уровень еды Заклинателя 3-мя очками голода.
|
||||||
spell.ebwizardry\:resurrection.desc=С мастером целителем рядом с Вами, быть мертвым... необязательно.
|
spell.ebwizardry\:resurrection.desc=С мастером целителем рядом с Вами, быть мертвым... необязательно.
|
||||||
spell.ebwizardry\:reversal.desc=Снимает случайный отрицательный эффект зелья и наносит его на цель, который будет страдать от этого эффекта в течение оставшегося периода времени. Мощь, увеличивает кол-во эффектов, которые будут обращены.
|
spell.ebwizardry\:reversal.desc=Снимает случайный отрицательный эффект зелья и наносит его на цель, который будет страдать от этого эффекта в течение оставшегося периода времени. Мощь, увеличивает количество эффектов, которые будут обращены.
|
||||||
spell.ebwizardry\:ring_of_fire.desc=Создаёт кольцо огня вокруг Заклинателя, которое повреждает всех ближайших врагов и поджигает их.
|
spell.ebwizardry\:ring_of_fire.desc=Создаёт кольцо огня вокруг Заклинателя, которое повреждает всех ближайших врагов и поджигает их.
|
||||||
spell.ebwizardry\:satiety.desc=Пополняет уровень еды Заклинателя 8-ю очками голода.
|
spell.ebwizardry\:satiety.desc=Пополняет уровень еды Заклинателя 8-ю очками голода.
|
||||||
spell.ebwizardry\:shadow_ward.desc=Создаёт стену тьмы впереди Заклинателя, которая причиняет половину всего входящего урона наносимого нападающему.
|
spell.ebwizardry\:shadow_ward.desc=Создаёт стену тьмы впереди Заклинателя, которая причиняет половину всего входящего урона наносимого нападающему.
|
||||||
@@ -1119,7 +1119,7 @@ spell.ebwizardry\:smoke_bomb.desc=Запускает дымовую бомбу
|
|||||||
spell.ebwizardry\:snare.desc=Устанавливает ловушку на землю, которая повреждает и ненадолго замедляет существо, которое сдетонирует её.
|
spell.ebwizardry\:snare.desc=Устанавливает ловушку на землю, которая повреждает и ненадолго замедляет существо, которое сдетонирует её.
|
||||||
spell.ebwizardry\:snowball.desc=Запускает снежок в направлении, по которому Вы указываете.
|
spell.ebwizardry\:snowball.desc=Запускает снежок в направлении, по которому Вы указываете.
|
||||||
spell.ebwizardry\:spark_bomb.desc=Запускает шоковый заряд в направлении, по которому Вы указываете, который выпускает искры на ближайших врагов при попадании.
|
spell.ebwizardry\:spark_bomb.desc=Запускает шоковый заряд в направлении, по которому Вы указываете, который выпускает искры на ближайших врагов при попадании.
|
||||||
spell.ebwizardry\:spectral_pathway.desc=Создаёт несокрушимый магический мост впереди Вас, который расширяется на 15 блоков. Мост исчезнет через 1 минуту.
|
spell.ebwizardry\:spectral_pathway.desc=Создаёт несокрушимый волшебный мост впереди Вас, который расширяется на 15 блоков. Мост исчезнет через 1 минуту.
|
||||||
spell.ebwizardry\:speed_time.desc=...день, ночь, рассвет, сумерки, восход и закат\: таким образом, проходит время, которое охватывает нас в бесконечном цикле...
|
spell.ebwizardry\:speed_time.desc=...день, ночь, рассвет, сумерки, восход и закат\: таким образом, проходит время, которое охватывает нас в бесконечном цикле...
|
||||||
spell.ebwizardry\:spider_swarm.desc=Призывает рой ядовитых пауков сражающихся за Вас. Пауки пропадут через 30 секунд, либо если их убьют.
|
spell.ebwizardry\:spider_swarm.desc=Призывает рой ядовитых пауков сражающихся за Вас. Пауки пропадут через 30 секунд, либо если их убьют.
|
||||||
spell.ebwizardry\:static_aura.desc=Окружает заклинателя молнией на 30 секунд, стреляя искрами молнии во что-либо, кто ударит его.
|
spell.ebwizardry\:static_aura.desc=Окружает заклинателя молнией на 30 секунд, стреляя искрами молнии во что-либо, кто ударит его.
|
||||||
@@ -1148,7 +1148,7 @@ spell.ebwizardry\:transportation.desc=Перемещает заклинател
|
|||||||
spell.ebwizardry\:vanishing_box.desc=Даёт заклинателю доступ к хранилищу Сундуку края.
|
spell.ebwizardry\:vanishing_box.desc=Даёт заклинателю доступ к хранилищу Сундуку края.
|
||||||
spell.ebwizardry\:vex_swarm.desc=Призывает рой летающих досаждателей сражающихся за Вас. Досаждатели пропадут через 30 секунд, либо если их убьют.
|
spell.ebwizardry\:vex_swarm.desc=Призывает рой летающих досаждателей сражающихся за Вас. Досаждатели пропадут через 30 секунд, либо если их убьют.
|
||||||
spell.ebwizardry\:wall_of_frost.desc=Зима в Ваших пальцах.
|
spell.ebwizardry\:wall_of_frost.desc=Зима в Ваших пальцах.
|
||||||
spell.ebwizardry\:ward.desc=Даёт заклинателю защитный эффект, который снижает входящий магический урон на 30 секунд.
|
spell.ebwizardry\:ward.desc=Даёт заклинателю защитный эффект, который снижает входящий волшебный урон на 30 секунд.
|
||||||
spell.ebwizardry\:water_breathing.desc=Позволяет заклинателю дышать под водой на 1 минуту.
|
spell.ebwizardry\:water_breathing.desc=Позволяет заклинателю дышать под водой на 1 минуту.
|
||||||
spell.ebwizardry\:whirlwind.desc=Заставляет цель взлетать вверх и подальше от Вас на скорости.
|
spell.ebwizardry\:whirlwind.desc=Заставляет цель взлетать вверх и подальше от Вас на скорости.
|
||||||
spell.ebwizardry\:wither.desc=Стреляет лучом тьмы, которая иссушает всё, что прикоснётся.
|
spell.ebwizardry\:wither.desc=Стреляет лучом тьмы, которая иссушает всё, что прикоснётся.
|
||||||
@@ -1269,7 +1269,7 @@ enchantment.ebwizardry\:flaming_weapon=Наполнение огнём
|
|||||||
enchantment.ebwizardry\:freezing_weapon=Наполнение морозом
|
enchantment.ebwizardry\:freezing_weapon=Наполнение морозом
|
||||||
enchantment.ebwizardry\:shocking_weapon=Наполнение молнией
|
enchantment.ebwizardry\:shocking_weapon=Наполнение молнией
|
||||||
|
|
||||||
enchantment.ebwizardry\:magic_protection=Магическая защита
|
enchantment.ebwizardry\:magic_protection=Волшебная защита
|
||||||
enchantment.ebwizardry\:frost_protection=Морозная защита
|
enchantment.ebwizardry\:frost_protection=Морозная защита
|
||||||
enchantment.ebwizardry\:shock_protection=Шоковая защита
|
enchantment.ebwizardry\:shock_protection=Шоковая защита
|
||||||
|
|
||||||
@@ -1279,7 +1279,7 @@ enchantment.ebwizardry.flaming_weapon.desc=Часть заклинания Ог
|
|||||||
enchantment.ebwizardry.freezing_weapon.desc=Часть заклинания Замороженного оружия; недостижимо в режиме Выживания (книга не сработает).
|
enchantment.ebwizardry.freezing_weapon.desc=Часть заклинания Замороженного оружия; недостижимо в режиме Выживания (книга не сработает).
|
||||||
enchantment.ebwizardry.shocking_weapon.desc=Часть заклинания Шокирующего оружия; недостижимо в режиме Выживания (книга не сработает).
|
enchantment.ebwizardry.shocking_weapon.desc=Часть заклинания Шокирующего оружия; недостижимо в режиме Выживания (книга не сработает).
|
||||||
|
|
||||||
enchantment.ebwizardry.magic_protection.desc=Уменьшает весь магический урон.
|
enchantment.ebwizardry.magic_protection.desc=Уменьшает весь волшебный урон.
|
||||||
enchantment.ebwizardry.frost_protection.desc=Уменьшает урон от заморозки.
|
enchantment.ebwizardry.frost_protection.desc=Уменьшает урон от заморозки.
|
||||||
enchantment.ebwizardry.shock_protection.desc=Уменьшает урон от шока.
|
enchantment.ebwizardry.shock_protection.desc=Уменьшает урон от шока.
|
||||||
|
|
||||||
@@ -1336,6 +1336,8 @@ commands.ebwizardry\:discoverspell.removespell=Убрано %1$s из данны
|
|||||||
|
|
||||||
config.ebwizardry.title.general=Параметры мода
|
config.ebwizardry.title.general=Параметры мода
|
||||||
|
|
||||||
|
config.ebwizardry.redundant_keys=В Вашем файле конфигурации содержатся лишние параметры, они ничего не сделают! [Подробности см. В журнале]
|
||||||
|
|
||||||
config.ebwizardry.generic.true=Вкл
|
config.ebwizardry.generic.true=Вкл
|
||||||
config.ebwizardry.generic.false=Выкл
|
config.ebwizardry.generic.false=Выкл
|
||||||
|
|
||||||
@@ -1463,9 +1465,9 @@ config.ebwizardry.bookshelf_blocks.tooltip=Список названий бло
|
|||||||
config.ebwizardry.book_items=Книги
|
config.ebwizardry.book_items=Книги
|
||||||
config.ebwizardry.book_items.tooltip=Список названий предметов в реестре, которых можно поместить в Книжную полку, в дополнение к стандартным. Названия предметов не чувствительны к регистру. Для предметов мода, префикс с ID мода (например: thaumcraft:thaumonomicon).
|
config.ebwizardry.book_items.tooltip=Список названий предметов в реестре, которых можно поместить в Книжную полку, в дополнение к стандартным. Названия предметов не чувствительны к регистру. Для предметов мода, префикс с ID мода (например: thaumcraft:thaumonomicon).
|
||||||
config.ebwizardry.bookshelf_search_radius=Радиус поиска Книжной полки
|
config.ebwizardry.bookshelf_search_radius=Радиус поиска Книжной полки
|
||||||
config.ebwizardry.bookshelf_search_radius.tooltip=Максимальное кол-во блоков может быть в Книжной полке из Мистического верстака или Кафедры, чтобы иметь возможность соединиться к ней.
|
config.ebwizardry.bookshelf_search_radius.tooltip=Максимальное количество блоков может быть в Книжной полке из Мистического верстака или Кафедры, чтобы иметь возможность соединиться к ней.
|
||||||
config.ebwizardry.currency_items=Предметы валюты
|
config.ebwizardry.currency_items=Предметы валюты
|
||||||
config.ebwizardry.currency_items.tooltip=Список названий предметов в реестре, который торгующийся Волшебник может использовать в качестве Валюты (в первом слоте; второй слот не затрагивается). Каждая запись в этом списке должна содержать название предмета в реестре, с последующим одним местом, затем целое число, определяющее 'значение' предмета. Более высокие значения означают, что требуется меньшее кол-во Валютных предметов для получения торговли.
|
config.ebwizardry.currency_items.tooltip=Список названий предметов в реестре, который торгующийся Волшебник может использовать в качестве Валюты (в первом слоте; второй слот не затрагивается). Каждая запись в этом списке должна содержать название предмета в реестре, с последующим одним местом, затем целое число, определяющее 'значение' предмета. Более высокие значения означают, что требуется меньшее количество Валютных предметов для получения торговли.
|
||||||
|
|
||||||
config.ebwizardry.category.worldgen=Настройки генерации мира
|
config.ebwizardry.category.worldgen=Настройки генерации мира
|
||||||
config.ebwizardry.category.worldgen.tooltip=Настройте возможности генерации мира Wizardry
|
config.ebwizardry.category.worldgen.tooltip=Настройте возможности генерации мира Wizardry
|
||||||
@@ -1630,9 +1632,9 @@ integration.antiqueatlas.marker.ebwizardry.obelisk=Обелиск
|
|||||||
integration.antiqueatlas.marker.ebwizardry.shrine=Святилища
|
integration.antiqueatlas.marker.ebwizardry.shrine=Святилища
|
||||||
integration.antiqueatlas.marker.ebwizardry.library_ruins=Разрушенная библиотека
|
integration.antiqueatlas.marker.ebwizardry.library_ruins=Разрушенная библиотека
|
||||||
|
|
||||||
spell.ebwizardry\:magic_missile_festive=Магическая омела
|
spell.ebwizardry\:magic_missile_festive=Волшебная омела
|
||||||
spell.ebwizardry\:summon_snow_golem_festive=Призывает замороженного Снеговика
|
spell.ebwizardry\:summon_snow_golem_festive=Призывает замороженного Снеговика
|
||||||
spell.ebwizardry\:invigorating_presence_festive=Бодрое усиление
|
spell.ebwizardry\:invigorating_presence_festive=Бодрое усиление
|
||||||
spell.ebwizardry\:empowering_presence_festive=Магическое усиление
|
spell.ebwizardry\:empowering_presence_festive=Волшебное усиление
|
||||||
|
|
||||||
wizard.debug=%1$s, %2$s, %3$s.
|
wizard.debug=%1$s, %2$s, %3$s.
|
||||||
@@ -54,7 +54,6 @@ tile.ebwizardry\:imbuement_altar.name=注灵祭坛
|
|||||||
|
|
||||||
item.ebwizardry\:crystal_magic.name=魔力水晶
|
item.ebwizardry\:crystal_magic.name=魔力水晶
|
||||||
item.ebwizardry\:crystal_magic.desc=水晶闪耀斑斓的色彩似乎在缓慢地变幻流转,暗示着其内蕴含的魔法能量。或许能以某种方法来驾驭这种魔力......
|
item.ebwizardry\:crystal_magic.desc=水晶闪耀斑斓的色彩似乎在缓慢地变幻流转,暗示着其内蕴含的魔法能量。或许能以某种方法来驾驭这种魔力......
|
||||||
|
|
||||||
item.ebwizardry\:crystal_fire.name=赤焰水晶
|
item.ebwizardry\:crystal_fire.name=赤焰水晶
|
||||||
item.ebwizardry\:crystal_fire.desc=发出烈火般橙色光彩的水晶。也许是揭示火焰元素奥秘的关键......
|
item.ebwizardry\:crystal_fire.desc=发出烈火般橙色光彩的水晶。也许是揭示火焰元素奥秘的关键......
|
||||||
item.ebwizardry\:crystal_ice.name=寒霜水晶
|
item.ebwizardry\:crystal_ice.name=寒霜水晶
|
||||||
@@ -201,18 +200,32 @@ item.ebwizardry\:identification_scroll.desc=识别的未知法术书或卷轴
|
|||||||
item.ebwizardry\:identification_scroll.desc_extended=手持鉴定卷轴右击,以鉴定快捷栏中的第一个未鉴定的法术书或卷轴。
|
item.ebwizardry\:identification_scroll.desc_extended=手持鉴定卷轴右击,以鉴定快捷栏中的第一个未鉴定的法术书或卷轴。
|
||||||
item.ebwizardry\:identification_scroll.nothing_to_identify=没有可鉴定的物品!
|
item.ebwizardry\:identification_scroll.nothing_to_identify=没有可鉴定的物品!
|
||||||
|
|
||||||
item.ebwizardry\:armour_upgrade.name=奥术护具升级圣印
|
item.ebwizardry\:resplendent_thread.name=魔辉丝线
|
||||||
item.ebwizardry\:armour_upgrade.desc=将任意巫师盔甲升级至%1$s传奇
|
item.ebwizardry\:resplendent_thread.desc=将寻常巫师盔甲升级至贤者盔甲
|
||||||
item.ebwizardry\:armour_upgrade.desc_extended=在奥术工作台中将该升级圣印附加到巫师盔甲上。
|
item.ebwizardry\:resplendent_thread.desc_extended=一卷微光闪烁的丝线,用于将奥术符纹刺绣至绝品的长袍之上,以提升其附魔能力。\n\n在奥术工作台中可将该升级圣物附加到一件巫师盔甲上。
|
||||||
|
|
||||||
|
item.ebwizardry\:crystal_silver_plating.name=晶银镶板
|
||||||
|
item.ebwizardry\:crystal_silver_plating.desc=将寻常巫师盔甲升级至战斗法师盔甲
|
||||||
|
item.ebwizardry\:crystal_silver_plating.desc_extended=一片近乎神话般的合金,于艾尔达的锻炉中铸造而成,具有出色的魔力偏转特性。\n\n在奥术工作台中将该升级圣物附加到一件巫师盔甲上。
|
||||||
|
|
||||||
|
item.ebwizardry\:ethereal_crystalweave.name=缈晶纹绸
|
||||||
|
item.ebwizardry\:ethereal_crystalweave.desc=将寻常巫师盔甲升级至巫术士盔甲
|
||||||
|
item.ebwizardry\:ethereal_crystalweave.desc_extended=一块蕴含魔力的布匹,厚如动物的毛皮,但不知为何,放在手中时的感觉却比薄纸还要轻盈。\n\n在奥术工作台中将该升级圣物附加到一件巫师盔甲上。
|
||||||
|
|
||||||
item.ebwizardry\:magic_silk.name=魔法绸缎
|
item.ebwizardry\:magic_silk.name=魔法绸缎
|
||||||
|
|
||||||
item.ebwizardry\:spectral_dust.name=灵尘
|
item.ebwizardry\:spectral_dust.name=灵尘
|
||||||
|
|
||||||
item.ebwizardry\:wizard_armour.legendary=传奇
|
item.ebwizardry\:wizard_armour.element_cost_reduction=-%1$s%% %2$s 魔力消耗
|
||||||
item.ebwizardry\:wizard_armour.buff=-%1$s %2$s 法术魔力损耗
|
item.ebwizardry\:wizard_armour.cooldown_reduction=-%1$s%% 冷却时间
|
||||||
|
item.ebwizardry\:wizard_armour.enchantability=额外的附魔能力
|
||||||
item.ebwizardry\:wizard_armour.mana=魔力:%1$s/%2$s
|
item.ebwizardry\:wizard_armour.mana=魔力:%1$s/%2$s
|
||||||
|
|
||||||
|
item.ebwizardry\:wizard_armour.full_set=全套:
|
||||||
|
item.ebwizardry\:sage_armour.full_set_bonus=-%1$s%% 其他元素法术魔力损耗
|
||||||
|
item.ebwizardry\:battlemage_armour.full_set_bonus=魔法护盾 I 效果
|
||||||
|
item.ebwizardry\:warlock_armour.full_set_bonus=+%1$s%% 移动速度
|
||||||
|
|
||||||
item.ebwizardry\:wizard_hat.name=巫师帽
|
item.ebwizardry\:wizard_hat.name=巫师帽
|
||||||
item.ebwizardry\:wizard_robe.name=巫师长袍
|
item.ebwizardry\:wizard_robe.name=巫师长袍
|
||||||
item.ebwizardry\:wizard_leggings.name=巫师护腿
|
item.ebwizardry\:wizard_leggings.name=巫师护腿
|
||||||
@@ -253,6 +266,126 @@ item.ebwizardry\:wizard_robe_healing.name=治愈巫师长袍
|
|||||||
item.ebwizardry\:wizard_leggings_healing.name=治愈巫师护腿
|
item.ebwizardry\:wizard_leggings_healing.name=治愈巫师护腿
|
||||||
item.ebwizardry\:wizard_boots_healing.name=治愈巫师靴子
|
item.ebwizardry\:wizard_boots_healing.name=治愈巫师靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat.name=贤者帽
|
||||||
|
item.ebwizardry\:sage_robe.name=贤者长袍
|
||||||
|
item.ebwizardry\:sage_leggings.name=贤者护腿
|
||||||
|
item.ebwizardry\:sage_boots.name=贤者靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_fire.name=烈焰贤者帽
|
||||||
|
item.ebwizardry\:sage_robe_fire.name=烈焰贤者长袍
|
||||||
|
item.ebwizardry\:sage_leggings_fire.name=烈焰贤者护腿
|
||||||
|
item.ebwizardry\:sage_boots_fire.name=烈焰贤者靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_ice.name=冰霜贤者帽
|
||||||
|
item.ebwizardry\:sage_robe_ice.name=冰霜贤者长袍
|
||||||
|
item.ebwizardry\:sage_leggings_ice.name=冰霜贤者护腿
|
||||||
|
item.ebwizardry\:sage_boots_ice.name=冰霜贤者靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_lightning.name=雷电贤者帽
|
||||||
|
item.ebwizardry\:sage_robe_lightning.name=雷电贤者长袍
|
||||||
|
item.ebwizardry\:sage_leggings_lightning.name=雷电贤者护腿
|
||||||
|
item.ebwizardry\:sage_boots_lightning.name=雷电贤者靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_necromancy.name=死灵贤者帽
|
||||||
|
item.ebwizardry\:sage_robe_necromancy.name=死灵贤者长袍
|
||||||
|
item.ebwizardry\:sage_leggings_necromancy.name=死灵贤者护腿
|
||||||
|
item.ebwizardry\:sage_boots_necromancy.name=死灵贤者靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_earth.name=自然贤者帽
|
||||||
|
item.ebwizardry\:sage_robe_earth.name=自然贤者长袍
|
||||||
|
item.ebwizardry\:sage_leggings_earth.name=自然贤者护腿
|
||||||
|
item.ebwizardry\:sage_boots_earth.name=自然贤者靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_sorcery.name=秘法贤者帽
|
||||||
|
item.ebwizardry\:sage_robe_sorcery.name=秘法贤者长袍
|
||||||
|
item.ebwizardry\:sage_leggings_sorcery.name=秘法贤者护腿
|
||||||
|
item.ebwizardry\:sage_boots_sorcery.name=秘法贤者靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:sage_hat_healing.name=治愈贤者帽
|
||||||
|
item.ebwizardry\:sage_robe_healing.name=治愈贤者长袍
|
||||||
|
item.ebwizardry\:sage_leggings_healing.name=治愈贤者护腿
|
||||||
|
item.ebwizardry\:sage_boots_healing.name=治愈贤者靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet.name=战斗法师头盔
|
||||||
|
item.ebwizardry\:battlemage_chestplate.name=战斗法师胸甲
|
||||||
|
item.ebwizardry\:battlemage_leggings.name=战斗法师护腿
|
||||||
|
item.ebwizardry\:battlemage_boots.name=战斗法师靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_fire.name=烈焰战斗法师头盔
|
||||||
|
item.ebwizardry\:battlemage_chestplate_fire.name=烈焰战斗法师胸甲
|
||||||
|
item.ebwizardry\:battlemage_leggings_fire.name=烈焰战斗法师护腿
|
||||||
|
item.ebwizardry\:battlemage_boots_fire.name=烈焰战斗法师靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_ice.name=冰霜战斗法师头盔
|
||||||
|
item.ebwizardry\:battlemage_chestplate_ice.name=冰霜战斗法师胸甲
|
||||||
|
item.ebwizardry\:battlemage_leggings_ice.name=冰霜战斗法师护腿
|
||||||
|
item.ebwizardry\:battlemage_boots_ice.name=冰霜战斗法师靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_lightning.name=雷电战斗法师头盔
|
||||||
|
item.ebwizardry\:battlemage_chestplate_lightning.name=雷电战斗法师胸甲
|
||||||
|
item.ebwizardry\:battlemage_leggings_lightning.name=雷电战斗法师护腿
|
||||||
|
item.ebwizardry\:battlemage_boots_lightning.name=雷电战斗法师靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_necromancy.name=死灵战斗法师头盔
|
||||||
|
item.ebwizardry\:battlemage_chestplate_necromancy.name=死灵战斗法师胸甲
|
||||||
|
item.ebwizardry\:battlemage_leggings_necromancy.name=死灵战斗法师护腿
|
||||||
|
item.ebwizardry\:battlemage_boots_necromancy.name=死灵战斗法师靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_earth.name=自然战斗法师头盔
|
||||||
|
item.ebwizardry\:battlemage_chestplate_earth.name=自然战斗法师胸甲
|
||||||
|
item.ebwizardry\:battlemage_leggings_earth.name=自然战斗法师护腿
|
||||||
|
item.ebwizardry\:battlemage_boots_earth.name=自然战斗法师靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_sorcery.name=秘法战斗法师头盔
|
||||||
|
item.ebwizardry\:battlemage_chestplate_sorcery.name=秘法战斗法师胸甲
|
||||||
|
item.ebwizardry\:battlemage_leggings_sorcery.name=秘法战斗法师护腿
|
||||||
|
item.ebwizardry\:battlemage_boots_sorcery.name=秘法战斗法师靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:battlemage_helmet_healing.name=治愈战斗法师头盔
|
||||||
|
item.ebwizardry\:battlemage_chestplate_healing.name=治愈战斗法师胸甲
|
||||||
|
item.ebwizardry\:battlemage_leggings_healing.name=治愈战斗法师护腿
|
||||||
|
item.ebwizardry\:battlemage_boots_healing.name=治愈战斗法师靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood.name=巫术士兜帽
|
||||||
|
item.ebwizardry\:warlock_robe.name=巫术士长袍
|
||||||
|
item.ebwizardry\:warlock_leggings.name=巫术士护腿
|
||||||
|
item.ebwizardry\:warlock_boots.name=巫术士靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_fire.name=烈焰巫术士兜帽
|
||||||
|
item.ebwizardry\:warlock_robe_fire.name=烈焰巫术士长袍
|
||||||
|
item.ebwizardry\:warlock_leggings_fire.name=烈焰巫术士护腿
|
||||||
|
item.ebwizardry\:warlock_boots_fire.name=烈焰巫术士靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_ice.name=冰霜巫术士兜帽
|
||||||
|
item.ebwizardry\:warlock_robe_ice.name=冰霜巫术士长袍
|
||||||
|
item.ebwizardry\:warlock_leggings_ice.name=冰霜巫术士护腿
|
||||||
|
item.ebwizardry\:warlock_boots_ice.name=冰霜巫术士靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_lightning.name=雷电巫术士兜帽
|
||||||
|
item.ebwizardry\:warlock_robe_lightning.name=雷电巫术士长袍
|
||||||
|
item.ebwizardry\:warlock_leggings_lightning.name=雷电巫术士护腿
|
||||||
|
item.ebwizardry\:warlock_boots_lightning.name=雷电巫术士靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_necromancy.name=死灵巫术士兜帽
|
||||||
|
item.ebwizardry\:warlock_robe_necromancy.name=死灵巫术士长袍
|
||||||
|
item.ebwizardry\:warlock_leggings_necromancy.name=死灵巫术士护腿
|
||||||
|
item.ebwizardry\:warlock_boots_necromancy.name=死灵巫术士靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_earth.name=自然巫术士兜帽
|
||||||
|
item.ebwizardry\:warlock_robe_earth.name=自然巫术士长袍
|
||||||
|
item.ebwizardry\:warlock_leggings_earth.name=自然巫术士护腿
|
||||||
|
item.ebwizardry\:warlock_boots_earth.name=自然巫术士靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_sorcery.name=秘法巫术士兜帽
|
||||||
|
item.ebwizardry\:warlock_robe_sorcery.name=秘法巫术士长袍
|
||||||
|
item.ebwizardry\:warlock_leggings_sorcery.name=秘法巫术士护腿
|
||||||
|
item.ebwizardry\:warlock_boots_sorcery.name=秘法巫术士靴子
|
||||||
|
|
||||||
|
item.ebwizardry\:warlock_hood_healing.name=治愈巫术士兜帽
|
||||||
|
item.ebwizardry\:warlock_robe_healing.name=治愈巫术士长袍
|
||||||
|
item.ebwizardry\:warlock_leggings_healing.name=治愈巫术士护腿
|
||||||
|
item.ebwizardry\:warlock_boots_healing.name=治愈巫术士靴子
|
||||||
|
|
||||||
item.ebwizardry\:spawn_wizard.name=生成巫师
|
item.ebwizardry\:spawn_wizard.name=生成巫师
|
||||||
item.ebwizardry\:spawn_evil_wizard.name=生成邪恶巫师
|
item.ebwizardry\:spawn_evil_wizard.name=生成邪恶巫师
|
||||||
|
|
||||||
@@ -409,7 +542,7 @@ item.ebwizardry\:charm_abseiling.desc=在施放藤蔓抓钩法术时潜行会减
|
|||||||
item.ebwizardry\:charm_silk_touch.name=月石宝珠
|
item.ebwizardry\:charm_silk_touch.name=月石宝珠
|
||||||
item.ebwizardry\:charm_silk_touch.desc=使用挖掘魔法破坏的方块必定掉落其本身
|
item.ebwizardry\:charm_silk_touch.desc=使用挖掘魔法破坏的方块必定掉落其本身
|
||||||
item.ebwizardry\:charm_sixth_sense.name=恐狼毛皮
|
item.ebwizardry\:charm_sixth_sense.name=恐狼毛皮
|
||||||
item.ebwizardry\:charm_sixth_sense.desc=第六感会为被动、中立和敌对生物显示不同颜色
|
item.ebwizardry\:charm_sixth_sense.desc=第六感会以不同形状显示被动、中立和敌对生物
|
||||||
item.ebwizardry\:charm_stop_time.name=奇特怀表
|
item.ebwizardry\:charm_stop_time.name=奇特怀表
|
||||||
item.ebwizardry\:charm_stop_time.desc=时间滞留魔法会让时间完全静止
|
item.ebwizardry\:charm_stop_time.desc=时间滞留魔法会让时间完全静止
|
||||||
item.ebwizardry\:charm_light.name=Elevinia 的永燃圣灯
|
item.ebwizardry\:charm_light.name=Elevinia 的永燃圣灯
|
||||||
@@ -712,8 +845,12 @@ advancement.ebwizardry\:craft_lectern.desc=合成一个览术台以随时掌握
|
|||||||
|
|
||||||
advancement.ebwizardry\:armour_set=现在你是一名真正的巫师了
|
advancement.ebwizardry\:armour_set=现在你是一名真正的巫师了
|
||||||
advancement.ebwizardry\:armour_set.desc=制作并装备全套巫师护甲
|
advancement.ebwizardry\:armour_set.desc=制作并装备全套巫师护甲
|
||||||
advancement.ebwizardry\:legendary=『传奇』
|
advancement.ebwizardry\:sage=贤者之道
|
||||||
advancement.ebwizardry\:legendary.desc=获得一件传奇巫师护甲
|
advancement.ebwizardry\:sage.desc=获得一件贤者盔甲
|
||||||
|
advancement.ebwizardry\:battlemage=战斗法师之证
|
||||||
|
advancement.ebwizardry\:battlemage.desc=获得一件战斗法师盔甲
|
||||||
|
advancement.ebwizardry\:warlock=巫术士之途
|
||||||
|
advancement.ebwizardry\:warlock.desc=获得一件巫术士盔甲
|
||||||
|
|
||||||
advancement.ebwizardry\:enchant_scroll=魔法卷轴!
|
advancement.ebwizardry\:enchant_scroll=魔法卷轴!
|
||||||
advancement.ebwizardry\:enchant_scroll.desc=制作一个空白卷轴,并在奥术工作台上用法术书附魔
|
advancement.ebwizardry\:enchant_scroll.desc=制作一个空白卷轴,并在奥术工作台上用法术书附魔
|
||||||
@@ -1337,6 +1474,8 @@ commands.ebwizardry\:discoverspell.removespell=将 %1$s 由 %2$s 的已发现法
|
|||||||
|
|
||||||
config.ebwizardry.title.general=模组选项
|
config.ebwizardry.title.general=模组选项
|
||||||
|
|
||||||
|
config.ebwizardry.redundant_keys=你的配置文件含有多余选项,它们不会发挥任何作用! [查看日志以获取详情]
|
||||||
|
|
||||||
config.ebwizardry.generic.true=开启
|
config.ebwizardry.generic.true=开启
|
||||||
config.ebwizardry.generic.false=关闭
|
config.ebwizardry.generic.false=关闭
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,6 @@
|
|||||||
"cooldown": 400,
|
"cooldown": 400,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"effect_radius": 8,
|
"effect_radius": 8,
|
||||||
"wait_time": 300
|
"wait_time": 200
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -70,6 +70,15 @@
|
|||||||
"width": 90,
|
"width": 90,
|
||||||
"height": 90
|
"height": 90
|
||||||
},
|
},
|
||||||
|
"classes": {
|
||||||
|
"location": "ebwizardry:textures/gui/handbook/pictures/classes.png",
|
||||||
|
"caption": "The Three Classes",
|
||||||
|
"u": 0,
|
||||||
|
"v": 0,
|
||||||
|
"width": 96,
|
||||||
|
"height": 32,
|
||||||
|
"border": false
|
||||||
|
},
|
||||||
"obelisk": {
|
"obelisk": {
|
||||||
"location": "ebwizardry:textures/gui/handbook/pictures/obelisk.png",
|
"location": "ebwizardry:textures/gui/handbook/pictures/obelisk.png",
|
||||||
"caption": "An Obelisk",
|
"caption": "An Obelisk",
|
||||||
@@ -496,7 +505,21 @@
|
|||||||
|
|
||||||
"Those wizards who devote themselves to the practice of one element sometimes wear special garments which grant bonuses for that element. Full sets of such garments are very sought after among wizards and are not easy to find.",
|
"Those wizards who devote themselves to the practice of one element sometimes wear special garments which grant bonuses for that element. Full sets of such garments are very sought after among wizards and are not easy to find.",
|
||||||
|
|
||||||
"Legend speaks of an arcane seal used by the most powerful wizards to greatly improve their armour."
|
"Once they have mastered the fundamentals of magic, many wizards choose to follow a particular path, or class, to further their training. There are three main classes that a wizard may align themselves with: sage, battlemage and warlock. Members of each class can easily be distinguished by their robes, which are modified - usually with rare and exotic materials - to better suit their needs.",
|
||||||
|
|
||||||
|
"#image classes",
|
||||||
|
|
||||||
|
"The Sage",
|
||||||
|
|
||||||
|
"By devoting their life to the pursuit of knowledge, the sage has perfected the art of efficient spellcasting, allowing them to cast spells using the smallest possible amount of mana. The finery of their silken robes belies the substantial protection they provide, as the sage is also an adept enchanter - though they are still no match for solid metal plating. Spending such long periods in the safety of a library does, however, make them rather sluggish in combat.",
|
||||||
|
|
||||||
|
"The Battlemage",
|
||||||
|
|
||||||
|
"The battlemage is geared for combat, clad in a combination of toughened cloth and crystal-silver plating sourced from the most skilled of foundries. Through discipline and training, the battlemage has also improved their speed and reactions, allowing them to cast spells more often. This does not come cheap, however, and a battlemage must be careful not to burn through mana too quickly.",
|
||||||
|
|
||||||
|
"The Warlock",
|
||||||
|
|
||||||
|
"The warlock lives for exploration, pushing the boundaries of what is possible to unearth lost arcane secrets. This, along with a willingness to experiment with what others may deem forbidden, has allowed them to break the constraints of traditional training and cast spells at a formidable rate, as well as reducing their mana usage. Their lightweight robes, though good for exploration, provide less protection in combat than their counterparts."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,15 @@
|
|||||||
"width": 90,
|
"width": 90,
|
||||||
"height": 90
|
"height": 90
|
||||||
},
|
},
|
||||||
|
"classes": {
|
||||||
|
"location": "ebwizardry:textures/gui/handbook/pictures/classes.png",
|
||||||
|
"caption": "The Three Classes",
|
||||||
|
"u": 0,
|
||||||
|
"v": 0,
|
||||||
|
"width": 96,
|
||||||
|
"height": 32,
|
||||||
|
"border": false
|
||||||
|
},
|
||||||
"obelisk": {
|
"obelisk": {
|
||||||
"location": "ebwizardry:textures/gui/handbook/pictures/obelisk.png",
|
"location": "ebwizardry:textures/gui/handbook/pictures/obelisk.png",
|
||||||
"caption": "An Obelisk",
|
"caption": "An Obelisk",
|
||||||
@@ -492,11 +501,25 @@
|
|||||||
"#recipe wizard_leggings",
|
"#recipe wizard_leggings",
|
||||||
"#recipe wizard_boots",
|
"#recipe wizard_boots",
|
||||||
|
|
||||||
"One may enchant wizard armour using a normal enchantment table, and due to the inherent properties of magical silk, it tends to be quite effective at holding enchantments. Of particular utility to a wizard are the Magic, Frost and Shock Protection enchantments, which may prove useful defending against other wielders of magic.",
|
"One may enchant wizard armor using a normal enchantment table, and due to the inherent properties of magical silk, it tends to be quite effective at holding enchantments. Of particular utility to a wizard are the Magic, Frost and Shock Protection enchantments, which may prove useful defending against other wielders of magic.",
|
||||||
|
|
||||||
"Those wizards who devote themselves to the practise of one element sometimes wear special garments which grant bonuses for that element. Full sets of such garments are very sought after among wizards and are not easy to find.",
|
"Those wizards who devote themselves to the practise of one element sometimes wear special garments which grant bonuses for that element. Full sets of such garments are very sought after among wizards and are not easy to find.",
|
||||||
|
|
||||||
"Legend speaks of an arcane seal used by the most powerful wizards to greatly improve their armor."
|
"Once they have mastered the fundamentals of magic, many wizards choose to follow a particular path, or class, to further their training. There are three main classes that a wizard may align themselves with: sage, battlemage and warlock. Members of each class can easily be distinguished by their robes, which are modified - usually with rare and exotic materials - to better suit their needs.",
|
||||||
|
|
||||||
|
"#image classes",
|
||||||
|
|
||||||
|
"The Sage",
|
||||||
|
|
||||||
|
"By devoting their life to the pursuit of knowledge, the sage has perfected the art of efficient spellcasting, allowing them to cast spells using the smallest possible amount of mana. The finery of their silken robes belies the substantial protection they provide, as the sage is also an adept enchanter - though they are still no match for solid metal plating. Spending such long periods in the safety of a library does, however, make them rather sluggish in combat.",
|
||||||
|
|
||||||
|
"The Battlemage",
|
||||||
|
|
||||||
|
"The battlemage is geared for combat, clad in a combination of toughened cloth and crystal-silver plating sourced from the most skilled of foundries. Through discipline and training, the battlemage has also improved their speed and reactions, allowing them to cast spells more often. This does not come cheap, however, and a battlemage must be careful not to burn through mana too quickly.",
|
||||||
|
|
||||||
|
"The Warlock",
|
||||||
|
|
||||||
|
"The warlock lives for exploration, pushing the boundaries of what is possible to unearth lost arcane secrets. This, along with a willingness to experiment with what others may deem forbidden, has allowed them to break the constraints of traditional training and cast spells at a formidable rate, as well as reducing their mana usage. Their lightweight robes, though good for exploration, provide less protection in combat than their counterparts."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -680,7 +680,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"@A @spells varázslatok@ különböző elemekhez tartoznak, melyek meghatározzák a varázslat természetét, és előnyökhöz juttatnak, ha bizonyos @wands pálcákkal@ használják őket együtt.",
|
"A @spells varázslatok@ különböző elemekhez tartoznak, melyek meghatározzák a varázslat természetét, és előnyökhöz juttatnak, ha bizonyos @wands pálcákkal@ használják őket együtt.",
|
||||||
|
|
||||||
"#image elements",
|
"#image elements",
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,15 @@
|
|||||||
"width": 90,
|
"width": 90,
|
||||||
"height": 90
|
"height": 90
|
||||||
},
|
},
|
||||||
|
"classes": {
|
||||||
|
"location": "ebwizardry:textures/gui/handbook/pictures/classes.png",
|
||||||
|
"caption": "3가지 분야",
|
||||||
|
"u": 0,
|
||||||
|
"v": 0,
|
||||||
|
"width": 96,
|
||||||
|
"height": 32,
|
||||||
|
"border": false
|
||||||
|
},
|
||||||
"obelisk": {
|
"obelisk": {
|
||||||
"location": "ebwizardry:textures/gui/handbook/pictures/obelisk.png",
|
"location": "ebwizardry:textures/gui/handbook/pictures/obelisk.png",
|
||||||
"caption": "방첨탑",
|
"caption": "방첨탑",
|
||||||
@@ -479,6 +488,7 @@
|
|||||||
|
|
||||||
"wizard_armour": {
|
"wizard_armour": {
|
||||||
"title": "마법사의 갑옷",
|
"title": "마법사의 갑옷",
|
||||||
|
|
||||||
"include_in_contents": "main_contents",
|
"include_in_contents": "main_contents",
|
||||||
"triggers": [
|
"triggers": [
|
||||||
"ebwizardry:arcane_initiate"
|
"ebwizardry:arcane_initiate"
|
||||||
@@ -501,10 +511,24 @@
|
|||||||
|
|
||||||
"아주 특별한 마법사들은 특정 원소에 영향을 주는 특별한 옷을 입는다네. 그 특별한 마법사의 갑옷은 찾기가 쉽지 않다네.",
|
"아주 특별한 마법사들은 특정 원소에 영향을 주는 특별한 옷을 입는다네. 그 특별한 마법사의 갑옷은 찾기가 쉽지 않다네.",
|
||||||
|
|
||||||
"전설등급의 갑옷은 강력한 마법사들이 갑옷의 방어력을 크게 향상시키기 위해 사용하는 불가사의한 도장이 찍힌 갑옷을 말한다네."
|
"마법의 기본을 터득한 후에는 많은 마법사들이 훈련을 하기 위해 특별한 경로를 따라가거나 분야를 선택하게 된다네. 가장 주된 분야로는 학자와 전투법사 , 주술사 총 3가지가 있다네. 각 분야의 로브는 특이한 외형과 특성을 가지고 있는데 각 분야의 마법사들을 쉽게 구별하고 각 분야의 목적에 맞추기 위해 희귀하고 특이한 재료로 로브를 변형하였기 때문이라네. ",
|
||||||
|
|
||||||
|
"#image classes",
|
||||||
|
|
||||||
|
"학자",
|
||||||
|
|
||||||
|
"지식을 추구하기 위해 삶을 바치면서, 학자는 완벽하게 효율적인 시전 방법을 연구하여 , 가능한 한 적은 양의 마나를 사용하여 마법을 시전할 수 있게 됐다네. 학자의 비단 로브의 화려함에는 상당한 보호 기능이 있다네. 학자는 뛰어난 마법 부여로 실력으로 로브에 마법을 부여하기 때문이네. 그러나 이 비단 로브는 고체 금속을 도금한 갑옷과는 비교가 되지도 않는다네. 그리고 안전한 도서관에서 긴 시간을 보내는 학자의 특성상 전투에 더욱더 더디게 만드는 데 한몫했을걸세",
|
||||||
|
|
||||||
|
"전투법사",
|
||||||
|
|
||||||
|
"전투법사의 로브는 가장 뛰어난 대장간에서 만든 은도금된 수정과 견고한 천을 함께 사용하여 만든 전투용 로브라네. 전투법사는 단련과 수련을 통해 속도와 반응속도를 향상하여 주문을 더 자주 시전한다네. 그러나 전투법사는 결코 마나의 소모가 적지 않다네. 마나를 너무 빨리 소모하지 않도록 주의해야 할걸세.",
|
||||||
|
|
||||||
|
"주술사",
|
||||||
|
|
||||||
|
"주술사는 잃어버린 신비로운 비밀을 찾아낼 수 있는 경계를 넓히는 탐험을 하며 살아간다네. 또한, 그들은 다른 마법사들이 금지되었다고 말하는 실험을 진행하려 한다네. 전통적인 훈련의 제약을 깨부숴, 주문의 마나 사용량과 재사용 대기시간을 효과적으로 줄였다네. 주술사의 가벼운 로브는 비록 탐험에는 좋지만, 전투복보다는 보호받지 못할 걸세."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
"magical_world": {
|
"magical_world": {
|
||||||
"title": "마법의 세계",
|
"title": "마법의 세계",
|
||||||
"include_in_contents": "main_contents",
|
"include_in_contents": "main_contents",
|
||||||
|
|||||||
@@ -11,8 +11,7 @@
|
|||||||
|
|
||||||
"images": {
|
"images": {
|
||||||
"workbench": {
|
"workbench": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/arcane_workbench.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/arcane_workbench.png",
|
|
||||||
"caption": "Мистический верстак",
|
"caption": "Мистический верстак",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
@@ -20,8 +19,7 @@
|
|||||||
"height": 110
|
"height": 110
|
||||||
},
|
},
|
||||||
"crystal_ore": {
|
"crystal_ore": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/crystal_ore.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/crystal_ore.png",
|
|
||||||
"caption": "Кристальная руда",
|
"caption": "Кристальная руда",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
@@ -30,7 +28,7 @@
|
|||||||
},
|
},
|
||||||
"magic_crystal": {
|
"magic_crystal": {
|
||||||
"location": "ebwizardry:textures/items/crystal_magic.png",
|
"location": "ebwizardry:textures/items/crystal_magic.png",
|
||||||
"caption": "Магический кристалл",
|
"caption": "Волшебный кристалл",
|
||||||
"u": 6,
|
"u": 6,
|
||||||
"v": 6,
|
"v": 6,
|
||||||
"width": 36,
|
"width": 36,
|
||||||
@@ -41,7 +39,7 @@
|
|||||||
},
|
},
|
||||||
"magic_wand": {
|
"magic_wand": {
|
||||||
"location": "ebwizardry:textures/items/wand_novice.png",
|
"location": "ebwizardry:textures/items/wand_novice.png",
|
||||||
"caption": "Магический жезл",
|
"caption": "Волшебный жезл",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
"width": 64,
|
"width": 64,
|
||||||
@@ -49,8 +47,7 @@
|
|||||||
"border": false
|
"border": false
|
||||||
},
|
},
|
||||||
"crystal_flower": {
|
"crystal_flower": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/crystal_flower.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/crystal_flower.png",
|
|
||||||
"caption": "Кристальный цветок",
|
"caption": "Кристальный цветок",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
@@ -58,8 +55,7 @@
|
|||||||
"height": 48
|
"height": 48
|
||||||
},
|
},
|
||||||
"wizard_tower": {
|
"wizard_tower": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/wizard_tower.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/wizard_tower.png",
|
|
||||||
"caption": "Башня волшебника",
|
"caption": "Башня волшебника",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
@@ -67,17 +63,24 @@
|
|||||||
"height": 110
|
"height": 110
|
||||||
},
|
},
|
||||||
"wizard_armour": {
|
"wizard_armour": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/wizard_armour.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/wizard_armour.png",
|
|
||||||
"caption": "Набор брони Волшебника",
|
"caption": "Набор брони Волшебника",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
"width": 90,
|
"width": 90,
|
||||||
"height": 90
|
"height": 90
|
||||||
},
|
},
|
||||||
|
"classes": {
|
||||||
|
"location": "ebwizardry:textures/gui/handbook/pictures/classes.png",
|
||||||
|
"caption": "3 Класса",
|
||||||
|
"u": 0,
|
||||||
|
"v": 0,
|
||||||
|
"width": 96,
|
||||||
|
"height": 32,
|
||||||
|
"border": false
|
||||||
|
},
|
||||||
"obelisk": {
|
"obelisk": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/obelisk.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/obelisk.png",
|
|
||||||
"caption": "Обелиск",
|
"caption": "Обелиск",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
@@ -85,8 +88,7 @@
|
|||||||
"height": 67
|
"height": 67
|
||||||
},
|
},
|
||||||
"shrine": {
|
"shrine": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/shrine.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/shrine.png",
|
|
||||||
"caption": "Святилище земли",
|
"caption": "Святилище земли",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
@@ -102,8 +104,7 @@
|
|||||||
"height": 57
|
"height": 57
|
||||||
},
|
},
|
||||||
"remnant": {
|
"remnant": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/remnant.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/remnant.png",
|
|
||||||
"caption": "Огненный пережиток",
|
"caption": "Огненный пережиток",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
@@ -111,9 +112,8 @@
|
|||||||
"height": 73
|
"height": 73
|
||||||
},
|
},
|
||||||
"tiers": {
|
"tiers": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/tiers.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/tiers.png",
|
"caption": "4 уровня жезла",
|
||||||
"caption": "4 уровней жезла",
|
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
"width": 96,
|
"width": 96,
|
||||||
@@ -121,8 +121,7 @@
|
|||||||
"border": false
|
"border": false
|
||||||
},
|
},
|
||||||
"elements": {
|
"elements": {
|
||||||
"location":
|
"location": "ebwizardry:textures/gui/handbook/pictures/elements.png",
|
||||||
"ebwizardry:textures/gui/handbook/pictures/elements.png",
|
|
||||||
"caption": "7 мистических аспектов",
|
"caption": "7 мистических аспектов",
|
||||||
"u": 0,
|
"u": 0,
|
||||||
"v": 0,
|
"v": 0,
|
||||||
@@ -305,7 +304,7 @@
|
|||||||
"title": "Введение",
|
"title": "Введение",
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Приветствую Вас, волшебник! Эта книга объясняет множество путей мистики и как их использовать. Эта не обычная книга, тем не менее - её страницы будут осуществляться перед Вами, когда Вы узнаете больше о Магическом мире.",
|
"Приветствую тебя, Волшебник! Эта книга объясняет множество путей мистики и как их использовать. Эта не обычная книга, тем не менее - её страницы будут осуществляться перед Вами, когда Вы узнаете больше о Волшебном мире.",
|
||||||
|
|
||||||
"Используйте кнопки Стрелок, чтобы переключаться между страницами, и кнопки с двойными стрелками, чтобы быстро перелистываться между разделами. Используйте центральную кнопку Меню, чтобы вернуться на основную страницу содержимого.",
|
"Используйте кнопки Стрелок, чтобы переключаться между страницами, и кнопки с двойными стрелками, чтобы быстро перелистываться между разделами. Используйте центральную кнопку Меню, чтобы вернуться на основную страницу содержимого.",
|
||||||
|
|
||||||
@@ -328,9 +327,9 @@
|
|||||||
"include_in_contents": "main_contents",
|
"include_in_contents": "main_contents",
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Чтобы начать в Wizardry, Вам понадобится:",
|
"Чтобы начать осваиваться в моём моде Wizardry, Вам понадобится:",
|
||||||
|
|
||||||
"- Магический жезл, создаётся как это показано:",
|
"- Волшебный жезл, создаётся как это показано:",
|
||||||
|
|
||||||
"#recipe magic_wand",
|
"#recipe magic_wand",
|
||||||
|
|
||||||
@@ -338,11 +337,11 @@
|
|||||||
|
|
||||||
"#recipe arcane_workbench",
|
"#recipe arcane_workbench",
|
||||||
|
|
||||||
"- @spells Книга заклинаний@. Они могут быть найдены в сундуках, выпавшие как добыча, купленные у Волшебников, или Вы можете сделать Заклинание новичка: Магический метательный снаряд, как это показано:",
|
"- @spells Книга заклинаний@. Их можно найти в сундуках, выпавшие как добыча, купленные у Волшебников, или Вы можете сделать Заклинание новичка: Волшебный метательный снаряд, как это показано:",
|
||||||
|
|
||||||
"#recipe magic_missile_spell_book",
|
"#recipe magic_missile_spell_book",
|
||||||
|
|
||||||
"Вам также нужно куча других Магических кристаллов, чтобы снабдить свой Жезл @mana маной@."
|
"Вам также нужно куча других Волшебных кристаллов, чтобы снабдить свой Жезл @mana маной@."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -354,7 +353,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Мана - мистическая энергия, которая даёт Волшебникам их силы. Сама по себе она не физическая форма; скорее всего, она всегда присутствует в Ауре, которая проникает во всё в мире. В частности, она проявляется в Кристаллах, встречающихся в природе, которые могут быть найдены вложенными в камнях под землёй. @wands Жезлы@ могут хранить в себе Ману, и эта мана направляется в @spells Заклинания@, которых Вы можете бросить. Некоторые заклинания требуют некое кол-во маны, в зависимости от того, насколько они сильны и как долго они длятся.",
|
"Мана - мистическая энергия, которая даёт Волшебникам их силы. Сама по себе она не физическая форма; скорее всего, она всегда присутствует в Ауре, которая проникает во всё в мире. В частности, она проявляется в Кристаллах, встречающихся в природе, которые могут быть найдены вложенными в камнях под землёй. @wands Жезлы@ могут хранить в себе Ману, и эта мана направляется в @spells Заклинания@, которых Вы можете бросить. Некоторые заклинания требуют некое количество маны, в зависимости от того, насколько они сильны и как долго они длятся.",
|
||||||
|
|
||||||
"#image crystal_ore",
|
"#image crystal_ore",
|
||||||
|
|
||||||
@@ -372,11 +371,11 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Жезл, это орудие выбора Волшебника. С ним Вы можете бросить любое @spells Заклинание@, если Жезл может сдерживать его силу (смотрите: @tiers Уровни@). Жезлы бывают разных видов, но Вы скорее всего приступите с простого Магического жезла.",
|
"Жезл, это орудие выбора Волшебника. С ним Вы можете бросить любое @spells Заклинание@, если Жезл может сдерживать его силу (смотрите: @tiers Уровни@). Жезлы бывают разных видов, но Вы скорее всего приступите с простого Волшебного жезла.",
|
||||||
|
|
||||||
"#image magic_wand",
|
"#image magic_wand",
|
||||||
|
|
||||||
"Большинство жезлов начинают свою жизнь как простое устройство своего рода Магического кристалла, прилагаемый к деревянной палке, с золотым самородком прикреплённый на другом конце. Кристалл это, разумеется, источник силы Жезла, поскольку он обеспечивает фокусировку, необходимая для направления @spells Заклинаний@. Оставшаяся часть Жезла тоже очень важна, поскольку она обеспечивает не только средства, с которыми держится Жезл, но также траектория, через которую @mana Ману@ можно направить и ориентировать.",
|
"Большинство жезлов начинают свою жизнь как простое устройство своего рода Волшебного кристалла, прилагаемый к деревянной палке, с золотым самородком прикреплённый на другом конце. Кристалл это, разумеется, источник силы Жезла, поскольку он обеспечивает фокусировку, необходимая для направления @spells Заклинаний@. Оставшаяся часть Жезла тоже очень важна, поскольку она обеспечивает не только средства, с которыми держится Жезл, но также траектория, через которую @mana Ману@ можно направить и ориентировать.",
|
||||||
|
|
||||||
"Чем больше заклинаний брошено Жезлом, тем больше он становится эффективным в направлении @spells Заклинаний@, и следовательно, может бросить заклинания большей силы. Этот эффект может быть различим по едва различимым изменениям, которые возникают в форме и внешнем виде самого Жезла: поскольку Жезл становится всё более мощным, его кристалл будет становиться всё более ярким, его цвет может изменяться в зависимости от его @elements Аспекта@, и спустя определённое время, дерево из которого он сделан, начнёт расти и меняться в более сложные формы.",
|
"Чем больше заклинаний брошено Жезлом, тем больше он становится эффективным в направлении @spells Заклинаний@, и следовательно, может бросить заклинания большей силы. Этот эффект может быть различим по едва различимым изменениям, которые возникают в форме и внешнем виде самого Жезла: поскольку Жезл становится всё более мощным, его кристалл будет становиться всё более ярким, его цвет может изменяться в зависимости от его @elements Аспекта@, и спустя определённое время, дерево из которого он сделан, начнёт расти и меняться в более сложные формы.",
|
||||||
|
|
||||||
@@ -402,7 +401,7 @@
|
|||||||
|
|
||||||
"Свитки весьма полезны, если Вам нужно использовать Заклинание один раз или дважды по конкретному заданию, чтобы не занимать место в слоте в своём @wands Жезле@. У них также имеется преимущество, мгновенно бросать Заклинания, которые обычно требуют период зарядки. Следует подчеркнуть, они являются неэффективным методом бросания Заклинаний по сравнению с использованием Жезла.",
|
"Свитки весьма полезны, если Вам нужно использовать Заклинание один раз или дважды по конкретному заданию, чтобы не занимать место в слоте в своём @wands Жезле@. У них также имеется преимущество, мгновенно бросать Заклинания, которые обычно требуют период зарядки. Следует подчеркнуть, они являются неэффективным методом бросания Заклинаний по сравнению с использованием Жезла.",
|
||||||
|
|
||||||
"На первый взгляд, магические руны с помощью которых написаны Заклинания, нечитаемы. Для определения Заклинания, Вы можете, несомненно, бросить Заклинание и посмотреть, что произойдёт - хотя, это может вызвать нежеланные побочные последствия, и большинство Заклинаний нуждаются в определённых условиях для работы. Более того, всегда есть вероятность недооценить неизвестное Заклинание когда бросаете, с потенциально опасными последствиями в зависимости от того, насколько мощное Заклинание. Более безопасный и более надёжный вариант - использовать Свиток идентификации, который можно найти в сундуках или купить у Волшебника. Щёлкните Пкм, пока держите, Свиток идентифицирует первую неизвестную Книгу с заклинанием или Свиток в панели быстрого доступа, потребляя Свиток идентификации в процессе."
|
"На первый взгляд, волшебные руны с помощью которых написаны Заклинания, нечитаемы. Для определения Заклинания, Вы можете, несомненно, бросить Заклинание и посмотреть, что произойдёт - хотя, это может вызвать нежеланные побочные последствия, и большинство Заклинаний нуждаются в определённых условиях для работы. Более того, всегда есть вероятность недооценить неизвестное Заклинание когда бросаете, с потенциально опасными последствиями в зависимости от того, насколько мощное Заклинание. Более безопасный и более надёжный вариант - использовать Свиток идентификации, который можно найти в сундуках или купить у Волшебника. Щёлкните Пкм, пока держите, Свиток идентифицирует первую неизвестную Книгу с заклинанием или Свиток в панели быстрого доступа, потребляя Свиток идентификации в процессе."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -448,7 +447,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Чтобы зарядить свой @wands Жезл@, поместите Жезл в центральный слот Мистического верстака и поместите несколько магических кристаллов в нижний левый слот, и затем нажмите Применить. Каждый кристалл стоит #mana_per_crystal @mana Маны@, и Жезл возьмёт столько, сколько ему необходимо, поэтому, Вы можете сохранить запасы кристаллов в Верстаке, когда они Вам понадобятся. Однако, имейте ввиду, что Жезл может взять только целое кол-во кристаллов, так что, если Жезлу необходимо, например, 30 и более маны, #example_charging_loss маны будет потеряно при зарядки."
|
"Чтобы зарядить свой @wands Жезл@, поместите Жезл в центральный слот Мистического верстака и поместите несколько волшебных кристаллов в нижний левый слот, и затем нажмите Применить. Каждый кристалл стоит #mana_per_crystal @mana Маны@, и Жезл возьмёт столько, сколько ему необходимо, поэтому, Вы можете сохранить запасы кристаллов в Верстаке, когда они Вам понадобятся. Однако, имейте ввиду, что Жезл может взять только целое количество кристаллов, так что, если Жезлу необходимо, например, 30 и более маны, #example_charging_loss маны будет потеряно при зарядки."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"upgrading_wands": {
|
"upgrading_wands": {
|
||||||
@@ -472,7 +471,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Мистический верстак также может быть использован для Зачаровывания @spells заклинаний@ и Свитков. Для этого, Вам понадобится Пустой свиток, созданный из кусочка бумаги и несколько ниток, Книга с заклинанием выбранная для Заклинания, и достаточно магических кристаллов, чтобы предоставить @mana Ману@, для наложения.",
|
"Мистический верстак также может быть использован для Зачаровывания @spells заклинаний@ и Свитков. Для этого, Вам понадобится Пустой свиток, созданный из кусочка бумаги и несколько ниток, Книга с заклинанием выбранная для Заклинания, и достаточно волшебных кристаллов, чтобы предоставить @mana Ману@, для наложения.",
|
||||||
|
|
||||||
"#recipe blank_scroll",
|
"#recipe blank_scroll",
|
||||||
|
|
||||||
@@ -490,11 +489,11 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Как волшебник, Вам нужно что-то, чтобы защитить Вас от существ, с которыми Вы сражаетесь. Впрочем, простая броня не подойдёт. Чтобы наиболее эффективно использовать свои Заклинания, Вам потребуется Броня волшебника: Шляпа, роба, поножи и ботинки. В отличие от простой брони, эти не ломаются. Вместо этого, они используют мистическую энергию для защиты Носителя. Это, безусловно, означает, что они могут быть заряжены Магическими кристаллами, точно также как Жезлы. К счастью, эта одежда не потребляет много @mana Маны@. Зарядите их, как Жезл в @arcane_workbench Мистическом верстаке@ или @mana_flasks Фляжками с маной@, но будьте осторожны - если у них кончится мана, то Вы окажетесь беззащитным.",
|
"Как волшебник, Вам нужно что-то, чтобы защитить Вас от существ, с которыми Вы сражаетесь. Впрочем, простая броня не подойдёт. Чтобы наиболее эффективно использовать свои Заклинания, Вам потребуется Броня волшебника: Шляпа, роба, поножи и ботинки. В отличие от простой брони, эти не ломаются. Вместо этого, они используют мистическую энергию для защиты Носителя. Это, безусловно, означает, что они могут быть заряжены Волшебными кристаллами, точно также как Жезлы. К счастью, эта одежда не потребляет много @mana Маны@. Зарядите их, как Жезл в @arcane_workbench Мистическом верстаке@ или @mana_flasks Фляжками с маной@, но будьте осторожны - если у них кончится мана, то Вы окажетесь беззащитным.",
|
||||||
|
|
||||||
"#image wizard_armour",
|
"#image wizard_armour",
|
||||||
|
|
||||||
"Вы можете получить броню Волшебника создав её из Магического шёлка:",
|
"Вы можете получить броню Волшебника создав её из Волшебного шёлка:",
|
||||||
|
|
||||||
"#recipe magic_silk",
|
"#recipe magic_silk",
|
||||||
"#recipe wizard_hat",
|
"#recipe wizard_hat",
|
||||||
@@ -502,11 +501,25 @@
|
|||||||
"#recipe wizard_leggings",
|
"#recipe wizard_leggings",
|
||||||
"#recipe wizard_boots",
|
"#recipe wizard_boots",
|
||||||
|
|
||||||
"Можно зачаровать Броню волшебника используя обычный Стол зачаровывания, а из-за собственных свойств магического шёлка, он довольно эффективен в сдерживании чар. Особенно полезны для Волшебников зачарования защиты - Магическая, Морозная и Шоковая, которая может оказаться полезной защитой против других обладателей магии.",
|
"Можно зачаровать Броню волшебника используя обычный Стол зачаровывания, а из-за собственных свойств волшебного шёлка, он довольно эффективен в сдерживании чар. Особенно полезны для Волшебников зачарования защиты - Волшебная, Морозная и Шоковая, которая может оказаться полезной защитой против других обладателей магии.",
|
||||||
|
|
||||||
"Те волшебники, кто посвящают себя практике одной стихии, иногда носят специальную одежду, которая даёт бонусы для этой стихии. Полный набор такой одежды очень востребованный среди Волшебников и её не так просто найти.",
|
"Те волшебники, кто посвящают себя практике одной стихии, иногда носят специальную одежду, которая даёт бонусы для этой стихии. Полный набор такой одежды очень востребованный среди Волшебников и её не так просто найти.",
|
||||||
|
|
||||||
"Легенда говорит о Мистической печати, используемой самыми могущественными Волшебниками, чтобы значительно улучшить свою броню."
|
"Как только они овладеют Основами магии, большинство Волшебников выберут следующий особый путь, либо класс, чтобы продолжить своё обучение. Есть 3 основных класса, к которым Волшебник может присоединиться: Мудрец, Боевой маг и Чародей. Членов каждого класса можно легко отличить по их мантиям, которые модифицируются - обычно с помощью Редких и Экзотических материалов - чтобы лучше удовлетворять свои потребности.",
|
||||||
|
|
||||||
|
"#image classes",
|
||||||
|
|
||||||
|
"Мудрец",
|
||||||
|
|
||||||
|
"Посвятив свою жизнь стремлению к знаниям, Мудрец усовершенствовал искусство эффективного бросания заклинания, позволив ему бросать заклинания используя наименьшее возможное количество маны. Их наряд из шёлковой мантии, опровергает значительную защиту, которую они обеспечивают, поскольку Мудрец также является искусным Волшебником - хотя они по-прежнему не могут сравниться с твёрдым металлическим покрытием. Однако, столь длительное проведение периодов времени в безопасной библиотеки делает их весьма вялыми в бою.",
|
||||||
|
|
||||||
|
"Боевой маг",
|
||||||
|
|
||||||
|
"Боевой маг является приспособленным для боя, одетого в комбинацию из упрочнённой ткани и кристально-серебряного покрытия добываемые на самых квалифицированных плавильных заводах. Через дисциплину и тренировку, боевой маг также улучшил свою скорость и реакции, позволяя ему более часто бросать заклинания. Однако, дёшево это не обходится, причём Боевой маг должен быть осторожен, чтобы слишком быстро не прожигать ману.",
|
||||||
|
|
||||||
|
"Чародей",
|
||||||
|
|
||||||
|
"Чародей живёт ради исследований, выталкивая границы того, что возможно, чтобы откапывать мистические тайны. Это, совместно со стремлением экспериментировать с тем, что другие могут счесть с запретным, позволили им преодолеть ограничения привычного обучения и бросать заклинания с невероятной скоростью, а также уменьшить использование маны. Их легковесные мантии, хотя и пригодны для разведки, обеспечивают меньшую защиту в бою, чем их представители. "
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -576,7 +589,7 @@
|
|||||||
|
|
||||||
"#image obelisk",
|
"#image obelisk",
|
||||||
|
|
||||||
"Эти структуры, как правило, защищены за счёт чар, которые призывают враждебных @creatures Магических существ@, если какой-нибудь человек случайно окажется поблизости. Отгоните этих существ и уничтожьте их источник, и реликвии будут Вашими."
|
"Эти структуры, как правило, защищены за счёт чар, которые призывают враждебных @creatures Волшебных существ@, если какой-нибудь человек случайно окажется поблизости. Отгоните этих существ и уничтожьте их источник, и реликвии будут Вашими."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"shrines": {
|
"shrines": {
|
||||||
@@ -606,7 +619,7 @@
|
|||||||
|
|
||||||
"#image library_ruins",
|
"#image library_ruins",
|
||||||
|
|
||||||
"Библиотеки не только используются для хранения книг. Волшебники прошлого, использовали силу Алтаря наполнения, который используется для осуществления наполнения магическими аспектами на магические материалы. Расположение алтаря является точным и сложным исскуством, поскольку, он должен быть соответствовать с учётом небесными движениями и местными колебаниями маны. Их практика строительства стала гораздо более редкой в новейшей истории, в основном, потому, что когда то построенный, твёрдый каменный алтарь держится веками, так что, нет особой обходимости в новых. Вместо этого, большинство Волшебников находят и восстанавливают существующий алтарь на случай того, чтобы необходимо было выполнять ритуалы для наполнения и, - Разрушенные библиотеки идеальное место для поиска.",
|
"Библиотеки не только используются для хранения книг. Волшебники прошлого, использовали силу Алтаря наполнения, который используется для осуществления наполнения волшебными аспектами на волшебные материалы. Расположение алтаря является точным и сложным исскуством, поскольку, он должен быть соответствовать с учётом небесными движениями и местными колебаниями маны. Их практика строительства стала гораздо более редкой в новейшей истории, в основном, потому, что когда то построенный, твёрдый каменный алтарь держится веками, так что, нет особой обходимости в новых. Вместо этого, большинство Волшебников находят и восстанавливают существующий алтарь на случай того, чтобы необходимо было выполнять ритуалы для наполнения и, - Разрушенные библиотеки идеальное место для поиска.",
|
||||||
|
|
||||||
"Вы, тоже, можете в определённый момент сочтить это полезным, и построить свою собственную библиотеку, которая, разумеется, потребует несколько Книжных полок:",
|
"Вы, тоже, можете в определённый момент сочтить это полезным, и построить свою собственную библиотеку, которая, разумеется, потребует несколько Книжных полок:",
|
||||||
|
|
||||||
@@ -614,7 +627,7 @@
|
|||||||
|
|
||||||
"#recipe gilded_wood",
|
"#recipe gilded_wood",
|
||||||
|
|
||||||
"Однако, эти книжные полки не просто мебель. Наполняя самые мощные магические кристаллы в своих Книжных полках, позволит беспрепятственно передавать знания между ними и близлежащим @arcane_workbench Мистическим верстаком@ - очень удобно, когда коллекция расширяется. В равной степени полезна - Кафедра:",
|
"Однако, эти книжные полки не просто мебель. Наполняя самые мощные волшебные кристаллы в своих Книжных полках, позволит беспрепятственно передавать знания между ними и близлежащим @arcane_workbench Мистическим верстаком@ - очень удобно, когда коллекция расширяется. В равной степени полезна - Кафедра:",
|
||||||
|
|
||||||
"#recipe lecterns",
|
"#recipe lecterns",
|
||||||
|
|
||||||
@@ -622,14 +635,14 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"creatures": {
|
"creatures": {
|
||||||
"title": "Магические существа",
|
"title": "Волшебные существа",
|
||||||
"include_in_contents": "magical_world_subsections",
|
"include_in_contents": "magical_world_subsections",
|
||||||
"triggers": [
|
"triggers": [
|
||||||
"ebwizardry:handbook/magical_creatures"
|
"ebwizardry:handbook/magical_creatures"
|
||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Помимо волшебников, множество других существ также используют магию. Многие из этих существ загадочны по своему происхождению, и большую часть можно призвать используя конкретные магические @spells Заклинания@. Этих существ можно встретить охраняющих @obelisks Обелиск@, а может и мощного Призывателя. Менее загадочные существа периодически встречаются в глуши.",
|
"Помимо волшебников, множество других существ также используют магию. Многие из этих существ загадочны по своему происхождению, и большую часть можно призвать используя конкретные волшебные @spells Заклинания@. Этих существ можно встретить охраняющих @obelisks Обелиск@, а может и мощного Призывателя. Менее загадочные существа периодически встречаются в глуши.",
|
||||||
|
|
||||||
"Наглядным примером является Пережиток, наподобие духа, сущность, которая формируется естественным образом из вещества, которое остаётся за счёт мощной магии, и чаще всего, принимает 1 из 7 мистических @elements Аспектов@. По отдельности, они не более чем помеха, но толпа, может быстро ошеломить неподготовленного Искателя приключений, а их присущая устойчивость к магии, требует принятия разумного ношения с собой Лука, или другого оружия дальнего боя.",
|
"Наглядным примером является Пережиток, наподобие духа, сущность, которая формируется естественным образом из вещества, которое остаётся за счёт мощной магии, и чаще всего, принимает 1 из 7 мистических @elements Аспектов@. По отдельности, они не более чем помеха, но толпа, может быстро ошеломить неподготовленного Искателя приключений, а их присущая устойчивость к магии, требует принятия разумного ношения с собой Лука, или другого оружия дальнего боя.",
|
||||||
|
|
||||||
@@ -650,7 +663,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Изучая @shrines Святилища@, возможно, Вам посчастливится обнаружить какой-нибудь древний магический артефакт - объект, способный предоставить своему Носителю уникальные и мощные баффы и особые силы. Известны 3 типа, которые были обнаружены: кольца, которые дают бонусы и эффекты к Заклинаниям, амулеты, которые увеличивают защитные свойства, и талисманы, которые дают полезные эффекты. Эти артефакты функционируют только в том случае, если надеть их правильным образом; просто имея их на одном человеке - недостаточно."
|
"Изучая @shrines Святилища@, возможно, Вам посчастливится обнаружить какой-нибудь древний волшебный артефакт - объект, способный предоставить своему Носителю уникальные и мощные баффы и особые силы. Известны 3 типа, которые были обнаружены: кольца, которые дают бонусы и эффекты к Заклинаниям, амулеты, которые увеличивают защитные свойства, и талисманы, которые дают полезные эффекты. Эти артефакты функционируют только в том случае, если надеть их правильным образом; просто имея их на одном человеке - недостаточно."
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -704,13 +717,13 @@
|
|||||||
|
|
||||||
"#colour_earthЗемля#colour_reset \nАспект земли направлен на естественный мир: Животные, растения, ветер, и подобное. Магия земли разнообразная и принимает целый ряд форм, от отравления врагов до высвобождения ярости погоды. Заклинания земли - сочетание атаки, защиты и практичности.",
|
"#colour_earthЗемля#colour_reset \nАспект земли направлен на естественный мир: Животные, растения, ветер, и подобное. Магия земли разнообразная и принимает целый ряд форм, от отравления врагов до высвобождения ярости погоды. Заклинания земли - сочетание атаки, защиты и практичности.",
|
||||||
|
|
||||||
"#colour_sorceryВолшебство#colour_reset \nВолшебство является аспектом силы и разнообразия. Чародеи манипулируют светом, гравитацией и даже самой реальностью, для удовлетворения своих потребностей. Чародейские заклинания можно использовать, среди прочего, чтобы предоставить своему Заклинателю магические силы или двигать объекты по своей воле.",
|
"#colour_sorceryВолшебство#colour_reset \nВолшебство является аспектом силы и разнообразия. Чародеи манипулируют светом, гравитацией и даже самой реальностью, для удовлетворения своих потребностей. Чародейские заклинания можно использовать, среди прочего, чтобы предоставить своему Заклинателю волшебные силы или двигать объекты по своей воле.",
|
||||||
|
|
||||||
"#colour_healingЛечение#colour_reset \nАспект лечения соответствует защите и регенерации. Целители стараются защитить себя и своих союзников насколько это возможно, и связи с этим, могут быть весьма сложными соперниками. Хотя в целом, не используется как атака, очищающий свет некоторых исцеляющих Заклинаний, нанесёт немалый урон нежити. Лечебные заклинания незаменимы, когда в бою.",
|
"#colour_healingЛечение#colour_reset \nАспект лечения соответствует защите и регенерации. Целители стараются защитить себя и своих союзников насколько это возможно, и связи с этим, могут быть весьма сложными соперниками. Хотя в целом, не используется как атака, очищающий свет некоторых исцеляющих Заклинаний, нанесёт немалый урон нежити. Лечебные заклинания незаменимы, когда в бою.",
|
||||||
|
|
||||||
"Границы между различными стихиями не всегда различаются, а некоторые Заклинания имеют схожие черты аспектов помимо их собственными.",
|
"Границы между различными стихиями не всегда различаются, а некоторые Заклинания имеют схожие черты аспектов помимо их собственными.",
|
||||||
|
|
||||||
"Если Вам повезёт, Вы можете случайно встретить Стихийный кристалл. Стихийные кристаллы - магические кристаллы, которые поглощают стихийные свойства по мере своего роста - хотя точные необходимые условия и механизм, с помощью которых это происходит, остаётся загадкой. Нам известно, наверное, что подобные кристаллы можно использовать для создания стихийных Жезлов, которые позволяют бросать Заклинания с нужной стихией с большей мощью, чем обычно."
|
"Если Вам повезёт, Вы можете случайно встретить Стихийный кристалл. Стихийные кристаллы - волшебные кристаллы, которые поглощают стихийные свойства по мере своего роста - хотя точные необходимые условия и механизм, с помощью которых это происходит, остаётся загадкой. Нам известно, наверное, что подобные кристаллы можно использовать для создания стихийных Жезлов, которые позволяют бросать Заклинания с нужной стихией с большей мощью, чем обычно."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -735,18 +748,18 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"Arkendur's Arcane Supplies Co. - магические предметы для всех Ваших потребностей!",
|
"Arkendur's Arcane Supplies Co. - волшебные предметы для всех Ваших нужд!",
|
||||||
|
|
||||||
"Необходимо перезарядить свой @wands Жезл@ на ходу? Нет проблем! @mana Мана@ теперь может быть бутылированной. Просто создайте Фляжку с маной с помощью Колбы и 8 магическими кристаллами и заберите её с собой. Когда Вам нужно использовать её, просто создайте её с помощью своего Жезла и она восстановит немного заряда.*",
|
"Нужно перезарядить свой @wands Жезл@ на ходу? Нет проблем! @mana Ману@ теперь можно разливать в бутылки. Просто изготовьте Фляжку с маной с помощью Колбы и 8 волшебными кристаллами и заберите её с собой. Когда Вам нужно использовать её, просто изготовьте её своим Жезлом и она восстановит немного заряда.*",
|
||||||
|
|
||||||
"#recipe medium_mana_flask",
|
"#recipe medium_mana_flask",
|
||||||
|
|
||||||
"НОВОЕ! Внедрение совершенно новых Малых и Больших фляжек с маной, и теперь - Вы можете выбрать размер Фляжки с маной, чтобы удовлетворить свои потребности!",
|
"НОВОЕ! Внедрение совершенно новых Малых и Больших фляжек с маной, а теперь - Вы можете выбрать размер Фляжки с маной, чтобы удовлетворять свои потребности!",
|
||||||
|
|
||||||
"#recipe small_mana_flask",
|
"#recipe small_mana_flask",
|
||||||
"#recipe large_mana_flask",
|
"#recipe large_mana_flask",
|
||||||
|
|
||||||
"* Этот процесс, уничтожит колбу. Некоторое кол-во маны потеряется во время разлива."
|
"* Этот процесс, уничтожит колбу. Определённое количество маны потеряется во время разлива."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"throwable_items": {
|
"throwable_items": {
|
||||||
@@ -762,11 +775,7 @@
|
|||||||
"#recipe firebomb",
|
"#recipe firebomb",
|
||||||
"#recipe poison_bomb",
|
"#recipe poison_bomb",
|
||||||
"#recipe smoke_bomb",
|
"#recipe smoke_bomb",
|
||||||
"#recipe spark_bomb",
|
"#recipe spark_bomb"
|
||||||
"#recipe gilded_wood",
|
|
||||||
"#recipe bookshelves",
|
|
||||||
"#recipe lecterns",
|
|
||||||
"#recipe receptacle"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"automated_casting": {
|
"automated_casting": {
|
||||||
@@ -811,7 +820,11 @@
|
|||||||
"#recipe firebomb",
|
"#recipe firebomb",
|
||||||
"#recipe poison_bomb",
|
"#recipe poison_bomb",
|
||||||
"#recipe smoke_bomb",
|
"#recipe smoke_bomb",
|
||||||
"#recipe spark_bomb"
|
"#recipe spark_bomb",
|
||||||
|
"#recipe gilded_wood",
|
||||||
|
"#recipe bookshelves",
|
||||||
|
"#recipe lecterns",
|
||||||
|
"#recipe receptacle"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -832,11 +845,11 @@
|
|||||||
|
|
||||||
"Код:",
|
"Код:",
|
||||||
|
|
||||||
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica \n- UltraHex \n- Azim-Palmer \n- raoulvdberge \n- rafasoares",
|
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica \n- UltraHex \n- Azim-Palmer \n- raoulvdberge \n- rafasoares \n- xinyuan-liu \n- SettingDust",
|
||||||
|
|
||||||
"Переводчики:",
|
"Переводчики:",
|
||||||
|
|
||||||
"- Испанский: MadWrist, Alsentar \n- Мексиканский испанский: MadWrist \n- Русский: VilagVil, kellixon, bigenergy, DrHesperus \n- Французский: Hahdrim \n- Бразильский португальский: lorrampi \n- Китайский (Упрощённый): ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Корейский: shejery, rewi_wire \n- Польский: Trozuu \n- Немецкий: BirdyDragon \n- Китайский (Традиционный): chesterccj305 \n- Венгерский: Bombadil",
|
"- Испанский: MadWrist, Alsentar \n- Мексиканский испанский: MadWrist \n- Русский: VilagVil, kellixon, bigenergy, MugGod2, DrHesperus \n- Французский: Hahdrim \n- Бразильский португальский: lorrampi \n- Китайский (Упрощённый): ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Корейский: shejery, rewi_wire, 방통, red1854th \n- Польский: Trozuu, Olej \n- Немецкий: BirdyDragon, Lemopav \n- Китайский (Традиционный): chesterccj305 \n- Венгерский: Bombadil",
|
||||||
|
|
||||||
"Звуковые эффекты",
|
"Звуковые эффекты",
|
||||||
|
|
||||||
|
|||||||
@@ -1,230 +0,0 @@
|
|||||||
PAGEBREAK
|
|
||||||
LINEBREAK
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Книга Волшебника
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
от Electroblob
|
|
||||||
PAGEBREAK
|
|
||||||
Введение
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
Приветствую вас, волшебник! Эта книга объясняет многие способы создания магии и способы ее использования.
|
|
||||||
|
|
||||||
Если вы когда-нибудь потеряете эту книгу, вы можете получить новую, соеденив книгу с магическим кристаллом.
|
|
||||||
PAGEBREAK
|
|
||||||
Содержание
|
|
||||||
------------------------------
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Начало
|
|
||||||
Начало
|
|
||||||
------------------------------
|
|
||||||
Чтобы начать работу с магией, вам понадобятся несколько вещей:
|
|
||||||
|
|
||||||
- Волшебный жезл, сделанный из золотого самородка, палки и магического кристалла.
|
|
||||||
|
|
||||||
- Чародейский стол, выполненный из 3 камней, 1 блока лазурита, 2 магических кристаллов, 2 золотых самородков и 1 фиолетового ковра.
|
|
||||||
|
|
||||||
- Книга заклинаний. Они могут быть найдены в сундуках, выбиты как дроп, куплены у волшебников, или вы можете сделать заклинание для новичка, магическую ракету, с книгой и 4 магическими кристаллами.
|
|
||||||
|
|
||||||
Вам также понадобится куча магических кристаллов, чтобы снабжать ваш жезл маной.
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Мана
|
|
||||||
Мана
|
|
||||||
------------------------------
|
|
||||||
Мана - это тайная энергия, которая дает волшебникам их силы. Она проявляется в встречающихся в природе кристаллах, которые можно обнаружить в подземных породах. Жезлы могут хранить ману, и эта мана направляется в заклинания, которые вы используете. Различные заклинания стоят разного количества маны, в зависимости от того, насколько они сильны и долговечны.
|
|
||||||
Наведите указатель мыши на жезл, чтобы увидеть, сколько маны хранится в нём.
|
|
||||||
LINEBREAK
|
|
||||||
IMAGE CRYSTAL
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Магического
|
|
||||||
Руда Кристалл Кристалла
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Жезлы
|
|
||||||
Жезлы
|
|
||||||
------------------------------
|
|
||||||
Жезл - это инструмент для мастера. С его помощью вы можете использовать любое заклинание, если жезл может содержать его силу (см. Раздел «Уровни» для более подробного объяснения). Жезлов
|
|
||||||
различные варианты, но вы почти наверняка начнете с основного волшебного жезла.
|
|
||||||
|
|
||||||
Когда вы держите палочку, в углу экрана будет отображаться небольшой экран с заголовком. Это указывает на выбранное в настоящий момент заклинание вместе с изображением, и, если заклинание было использоно, кулдаун указывает время, до которого заклинание может быть снова использовано.
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Заклинания
|
|
||||||
Заклинания
|
|
||||||
------------------------------
|
|
||||||
Жезл бесполезен без заклинаний. Заклинания записываются в двух формах: в книгах, которые являются постоянными, и в свитках, которые являются временными.
|
|
||||||
|
|
||||||
Книги заклинаний мало нужны сами по себе; Вместо этого они используются для привязки заклинания, которое они содержат к жезлам. Книги заклинаний можно найти по всему миру, и вам не придется долго искать их. Когда вы её найдете, вы можете навести курсор мыши на книгу заклинаний, чтобы сразу увидеть основную информацию о заклинании. Вы также можете щелкнуть правой кнопкой мыши, удерживая книгу заклинаний, чтобы прочитать более подробную информацию о заклинании.
|
|
||||||
|
|
||||||
С другой стороны, свитки служат для другой цели: щелчок правой кнопкой мыши в то время как удержание одной вызывает заклинание, связанное с ним, уничтожает свиток в этом процессе. Как и книги заклинаний, свитки можно найти по всему миру, но вы также можете сделать их сами, создав пустой свиток с помощью листа бумаги и нити. Затем вы можете привязать заклинание к свитку с помощью чародейского стола обычным способом. Это приведет к тому, что количество магических кристаллов будет равно мана-стоимости заклинания (округлено до ближайшего к MANA_PER_CRYSTAL).
|
|
||||||
|
|
||||||
Однако, чтобы связать заклинание с свитком, требуется знание этого заклинания, полученное только при его использовании, поэтому если вы найдете мощную книгу заклинаний, но не имеете жезла для заклинания, вы не можете просто создать свиток и использовать. Тем не менее, если вы найдете мощное заклинание и книгу заклинаний для одного и того же заклинания, вы можете сделать столько свитков для него, сколько хотите, и произнести заклинание, даже не нуждаясь в достаточно мощной палочке.
|
|
||||||
|
|
||||||
Свитки в основном полезны, когда вам нужно использовать заклинание один или два раза в конкретном месте, но не хотите, чтобы он занимал слот в вашем жезле.
|
|
||||||
|
|
||||||
Однако следует отметить, что свитки в лучшем случае являются неэффективным методом использования заклинаний.
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Чародейский Стол
|
|
||||||
Чародейский Стол
|
|
||||||
------------------------------
|
|
||||||
Чародейский Стол - это блок, похожий по внешнему виду на стол зачарования, где вы можете заряжать, модернизировать и связывать заклинания с вашим жезлом. Просто поместите его в любом месте и щелкните правой кнопкой мыши, и вы увидите интерфейс.
|
|
||||||
PAGEBREAK
|
|
||||||
IMAGE WORKBENCH
|
|
||||||
LINEBREAK
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Чародейский Стол
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Связывание заклинаний
|
|
||||||
Связывание заклинаний
|
|
||||||
------------------------------
|
|
||||||
Чтобы привязать заклинание к своему жезлу, просто поместите книгу заклинаний в один из пяти слотов вокруг края рабочего стола и жезла в центральном слоте и нажмите кнопку Принять. Одновременно можно связать до пяти заклинаний с жезлом. Удерживая жезл, вы можете переключаться между заклинаниями с помощью клавиш NEXT_SPELL_KEY и PREVIOUS_SPELL_KEY (их можно изменить в настройках -> управления).
|
|
||||||
|
|
||||||
SECTION Зарядка жезлов
|
|
||||||
Заряди свой жезл
|
|
||||||
------------------------------
|
|
||||||
Чтобы зарядить свой жезл, поместите жезл в центральный слот чародейского верстака и поместите некоторые магические кристаллы в слот влево, а затем нажмите Применить. Каждый кристалл стоит MANA_PER_CRYSTAL маны, и жезл будет принимать только то, что ему нужно, поэтому вы можете сохранить запас кристаллов в рабочем месте, когда вам это нужно. Однако, имейте в виду, что жезл может взять только целые кристаллы, поэтому, если жезлу понадобится, например, еще 30 маны, MANA_PER_CRYSTAL_MINUS_30 маны будет потеряно при зарядке. Все жезлы будут брать точное количество кристаллов для зарядки, если они пусты, если только они не применены к улучшению хранилища.
|
|
||||||
|
|
||||||
SECTION Улучшение Жезла
|
|
||||||
Улучши Свой Жезл
|
|
||||||
------------------------------
|
|
||||||
Чтобы обновить жезл, вам понадобится фолиант арканы соответствующего уровня (см. Раздел «Уровни») или специальное улучшение жезла. Оба они могут быть найдены как добыча или приобретены у волшебника. Чтобы обновить жезл, поместите его в центральный слот и поместите улучшение, затем нажмите «Применить».
|
|
||||||
|
|
||||||
Специальные улучшения жезла улучшают конкретный аспект жезла. Каждый тип улучшения может складываться до трех раз, и общее количество улучшений, которые может взять жезл, зависит от его уровня. Не удается удалить улучшения.
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Цветы И Бутылки
|
|
||||||
Цветы И Бутылки
|
|
||||||
------------------------------
|
|
||||||
Вы, вероятно, столкнетесь с любопытными светящимися цветами, которые время от времени растут в дикой природе. Это хрустальные цветы, естественный источник маны. Они могут быть собраны и обработаны для извлечения маны в виде кристаллов.
|
|
||||||
|
|
||||||
Вам нужно зарядить жезл на ходу? Нет проблем! Теперь можно разливать ману. Просто создайте колбу маны со стеклянной бутылкой и восемью магическими кристаллами и возьмите ее с собой. Когда вам нужно использовать его, просто соедените его своим жезлом, и он восстановит часть заряда. Этот процесс будет потреблять бутылку. Некоторая мана теряется во время розлива.
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Уровни
|
|
||||||
Уровни
|
|
||||||
------------------------------
|
|
||||||
Жезлы и заклинания входят в четыре уровня: BASIC_COLOURначинающийRESET_COLOUR, APPRENTICE_COLOURученикRESET_COLOUR, ADVANCED_COLOURпродвинутый RESET_COLOURи MASTER_COLOURмастерRESET_COLOUR. Каждый уровень более мощный, чем последний.
|
|
||||||
|
|
||||||
BASIC_COLOURначинающий RESET_COLOURжезлы-которые могут быть созданы. Они выдерживают BASIC_MAX_CHARGE мана, и может использовать только заклинания для начинающих. Начинающие заклинания достаточно просты, чтобы их бросали все, и они обычно не стоят много маны. Это не обязательно означает, что они бесполезны на более высоких уровнях; Их низкая стоимость делает некоторые заклинания начинающих полезными даже тогда, когда у вас есть доступ к мастер-заклинаниям..
|
|
||||||
|
|
||||||
APPRENTICE_COLOURУченик RESET_COLOURжезлы следующие после начинающих. Они выдерживают APPRENTICE_MAX_CHARGE ману и может применять заклинания для начинающих и учеников. Ученики заклинаний немного более впечатляющие, чем заклинания начинающих, но обычно стоят дороже.
|
|
||||||
|
|
||||||
ADVANCED_COLOURПродвинутый RESET_COLOURжезлы довольно редки и гораздо мощнее. Они могут использовать все заклинания, кроме мастер-заклинаний, и удерживать ADVANCED_MAX_CHARGE ману. Расширенные заклинания могут предоставлять сверхчеловеческие силы, такие как невидимость и наносить урон врагам.
|
|
||||||
|
|
||||||
MASTER_COLOURМастер RESET_COLOURжезлы самые могучие в мире. Они выдерживают MASTER_MAX_CHARGE ману, И может накладывать любое заклинание. Магистры заклинаний очень редки, и заклинания могут нанести полный урон не только врагам, но даже самому миру. Используйте с осторожностью.
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Стихии
|
|
||||||
Стихии
|
|
||||||
------------------------------
|
|
||||||
Заклинания принадлежат к различным элементам, которые описывают природу заклинания и также имеют перки при использовании с определенными жезлами.
|
|
||||||
|
|
||||||
FIRE_COLOURОгонь
|
|
||||||
Пожалуй, самый разрушительный элемент, огонь касается горения, лавы и взрывов. Мощный пиромант развяжет ад своим врагам и, возможно, запустит мир в этом процессе. Большинство заклинаний с огненной атакой поджигает цель, нанося ей постоянный урон с течением времени. Однако будьте осторожны, что заклинания огня могут не влиять на нижних мобов.
|
|
||||||
|
|
||||||
ICE_COLOURЛёд
|
|
||||||
Элемент льда сделан из всего, что холодно. Морозные заклинания часто замедляют врагов или замораживают их полностью, и особенно эффективны против существ огня. Магия магии льда может оказаться столь же полезной и вне боя, как замораживание воды для пересечения реки.
|
|
||||||
|
|
||||||
LIGHTNING_COLOURМолния
|
|
||||||
Этот элемент касается молнии, штормов и погоды. Мощный штормовой маг - это сила, с которой нужно считаться, а некоторые обладают способностью призывать молнию по желанию. Молниеносные заклинания часто наносят урон множеству врагов сразу и обычно ищут свою цель, делая их эффективной атакой против любых мобов ... но остерегайтесь криперов.
|
|
||||||
|
|
||||||
|
|
||||||
NECROMANCY_COLOURНекромантия
|
|
||||||
Некромантия - это элемент тьмы, хаоса и нежити. Некроманты таинственны и часто рассматриваются как злые, хотя обычно это не так. Заклинания некромантии обычно используются, чтобы призвать существ, чтобы сражаться за вас или даже сгибать волю ваших врагов.
|
|
||||||
|
|
||||||
EARTH_COLOURЗемля
|
|
||||||
Элемент земли сфокусирован на природном мире: животных, растениях, ветре и т. п. Магия Земли разнообразна и принимает самые различные формы: от отравления врагов до развязывания ярости погоды. Земные заклинания представляют собой смесь атак, защиты и полезности.
|
|
||||||
|
|
||||||
SORCERY_COLOURКолдовство
|
|
||||||
Волшебство - это элемент силы и изменения. Волшебники манипулируют светом, гравитацией и даже самой реальностью, чтобы соответствовать их потребностям. Колдовские заклинания могут использоваться, помимо всего прочего, для предоставления магическим силам заклинателя или перемещения предметов по их желанию.
|
|
||||||
|
|
||||||
HEALING_COLOURИсцеление
|
|
||||||
Элемент исцеления связан с защитой и регенерацией. Целители стараются как можно больше защитить себя и своих союзников и как таковые могут быть очень трудными противниками. Хотя обычно не используется в качестве атаки, очищающий свет некоторых исцеляющих заклинаний нанесет значительный урон нежити. Исцеляющие заклинания незаменимы в бою.
|
|
||||||
|
|
||||||
Границы между различными элементами не всегда различны, и некоторые заклинания несут в себе черты других элементов, отличных от их собственных.
|
|
||||||
|
|
||||||
Если вам повезет, вы можете напасть на элементарный жезл. Эти жезлы позволят вам использовать заклинания правильного элемента для большей силы, чем обычно.
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Одеяние Волшебника
|
|
||||||
Одеяние Волшебника
|
|
||||||
------------------------------
|
|
||||||
Как волшебник, вам понадобится что-то, чтобы защитить вас от существ, с которыми вы сражаетесь. Однако обычные доспехи не сделают этого. Чтобы максимально использовать ваши заклинания, вам понадобятся магические доспехи: шляпа, халаты, лосины и сапоги. В отличие от обычной брони, они не сломаются. Вместо этого они используют тайную энергию для защиты носителя. Это, конечно, означает, что они должны быть заряжены магическими кристаллами, как и жезлы. К счастью, эти предметы одежды не потребляют много маны. Зарядите их, как жезл в чародейском столе или в колбе маны, но будьте осторожны - если у них закончится мана, вы окажетесь беззащитными.
|
|
||||||
|
|
||||||
Вы можете получить волшебную броню, создавая ее из магического шелка, получаемого при создании нитки с магическим кристаллом.
|
|
||||||
|
|
||||||
Те волшебники, которые посвящают себя практике одного элемента, иногда носят специальные одежды, которые дают бонусы за этот элемент. Полные комплекты такой одежды очень популярны среди мастеров, и их не так просто найти.
|
|
||||||
|
|
||||||
Легенда говорит о тайной печати, используемой самыми могущественными волшебниками, чтобы значительно улучшить их броню.
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Волшебники И Башни
|
|
||||||
Волшебники И Башни
|
|
||||||
------------------------------
|
|
||||||
Не бойтесь - вы не единственный практикующий в этом мире. В ваших путешествиях вы можете встретить высокие башни с характерными остроконечными крышами. Это резиденции волшебников. Жизнь одиночества может иногда приводить в замешательство магов, но они, как правило, дружелюбные люди, которые готовы поделиться с вами своими знаниями, хотя и за определенную плату. Ожидайте оплатить драгоценные металлы и драгоценные камни, и взамен вы получите много чудесных загадок. Если, однако, это магическое заклинание, которое вы ищете, вам нужно поговорить со специалистом.
|
|
||||||
PAGEBREAK
|
|
||||||
PAGEBREAK
|
|
||||||
SECTION Рецепты
|
|
||||||
Рецепты
|
|
||||||
------------------------------
|
|
||||||
PAGEBREAK
|
|
||||||
PAGEBREAK
|
|
||||||
Рецепты
|
|
||||||
------------------------------
|
|
||||||
PAGEBREAK
|
|
||||||
PAGEBREAK
|
|
||||||
Рецепты
|
|
||||||
------------------------------
|
|
||||||
PAGEBREAK
|
|
||||||
PAGEBREAK
|
|
||||||
Рецепты
|
|
||||||
------------------------------
|
|
||||||
PAGEBREAK
|
|
||||||
PAGEBREAK
|
|
||||||
Credits
|
|
||||||
------------------------------
|
|
||||||
Electroblob's Wizardry
|
|
||||||
Version VERSION
|
|
||||||
For Minecraft MCVERSION
|
|
||||||
|
|
||||||
Designed, coded and textured by Electroblob
|
|
||||||
|
|
||||||
Thanks to Minecraft Forge and MCP, without which this mod would not have been possible.
|
|
||||||
|
|
||||||
Thanks also to the Minecraft modding community, which always has an answer to my modding problems!
|
|
||||||
|
|
||||||
In addition, I'd like to thank the following individuals for their contributions to the mod:
|
|
||||||
|
|
||||||
Code:
|
|
||||||
|
|
||||||
- Corail31
|
|
||||||
- 12foo
|
|
||||||
- Shadows-of-Fire
|
|
||||||
- HellFirePvP
|
|
||||||
|
|
||||||
Translations:
|
|
||||||
|
|
||||||
- Russian: VilagVil
|
|
||||||
- Spanish and Mexican Spanish: MadWrist
|
|
||||||
- Chinese: ZHENGLOC and dragon-evol
|
|
||||||
|
|
||||||
Lightning ray sound effect from OhhWowProductions
|
|
||||||
@@ -295,8 +295,10 @@
|
|||||||
"title": "导言",
|
"title": "导言",
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"向你致以敬意,巫师! 这本书介绍了数种魔法类别以及操纵这些元素的方法。我必须提醒你,这本书并不只是像现在这样,看起来十分普通 —— 当你在探索这个世界时,书中新的内容会不断地具现出来。",
|
" 向你致以敬意,巫师!",
|
||||||
|
|
||||||
|
"这本书介绍了数种魔法类别以及操纵这些元素的方法。我必须提醒你,这本书并不只是像现在这样看起来十分普通——当你在探索这个世界时,书中新的内容会不断地具现出来。",
|
||||||
|
|
||||||
"点击单箭头按钮可以切换页数,点击双箭头按钮可以在章节之间切换,点击中心按钮可以返回目录。",
|
"点击单箭头按钮可以切换页数,点击双箭头按钮可以在章节之间切换,点击中心按钮可以返回目录。",
|
||||||
|
|
||||||
"点击紫色的链接将会直接跳转到相关页面,右键书签将会把书签移动到当前页面,左键书签将会返回标记页面。"
|
"点击紫色的链接将会直接跳转到相关页面,右键书签将会把书签移动到当前页面,左键书签将会返回标记页面。"
|
||||||
@@ -318,17 +320,17 @@
|
|||||||
"include_in_contents": "main_contents",
|
"include_in_contents": "main_contents",
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"想要开始你的巫术之旅,你需要:",
|
"想要开始你的巫术之旅你需要:",
|
||||||
|
|
||||||
"- 一把魔杖,合成如下所示:",
|
"-一把魔杖,合成如下所示:",
|
||||||
|
|
||||||
"#recipe magic_wand",
|
"#recipe magic_wand",
|
||||||
|
|
||||||
"- 一个@arcane_workbench 奥术工作台@,合成如下所示:",
|
"-一个@arcane_workbench 奥术工作台@,合成如下所示:",
|
||||||
|
|
||||||
"#recipe arcane_workbench",
|
"#recipe arcane_workbench",
|
||||||
|
|
||||||
"- 一本@spells 法术@书。你可以在战利品箱中找到法术书,它也会以掉落物形式出现,你也可以与其他巫师交易。当然你也可以制作一本初始的法术书:魔法飞弹,如下所示:",
|
"-一本@spells 法术@书。你可以在战利品箱中找到法术书,它也会以掉落物形式出现,你也可以与其他巫师交易。当然你也可以制作一本初始的法术书:魔法飞弹,如下所示:",
|
||||||
|
|
||||||
"#recipe magic_missile_spell_book",
|
"#recipe magic_missile_spell_book",
|
||||||
|
|
||||||
@@ -410,7 +412,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"奥术工作台外观上与附魔台很相似,它可以用来为你的魔杖充能、升级 ,以及绑定@spells 法术@到你的@wands 魔杖@。制作方法如下所示:",
|
"奥术工作台外观上与附魔台很相似,它可以用来为你的魔杖充能、升级,以及绑定@spells 法术@到你的@wands 魔杖@。制作方法如下所示:",
|
||||||
|
|
||||||
"#recipe arcane_workbench",
|
"#recipe arcane_workbench",
|
||||||
|
|
||||||
@@ -480,7 +482,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"作为一名巫师,你需要一些东西在战斗时保护你不受过高的伤害,普通的盔甲可无法承此重任。为了能够在提供保护时还能让你最高效率地使用的魔力,你需要一套巫师护具:包括帽子、长袍、裤子和靴子。与普通盔甲不同的是,它们耐久归零之后不会消失。而且,蕴藏在其中的奥术能量将会保护穿戴者。当然,这意味着它们必须使用水晶充能,这一点和魔杖很相似。幸运的是,这些护具不太消耗@mana 魔力@。你可以像和魔杖那样,将其放置在@arcane_workbench 奥术工作台@,或者使用@mana_flasks 魔力瓶@为其充能,但是要小心-如果护具耗尽了魔力,它们将不再提供任何保护效果。",
|
"作为一名巫师,你需要一些东西在战斗时保护你不受过高的伤害,普通的盔甲可无法承此重任。为了能够在提供保护时还能让你最高效率地使用的魔力,你需要一套巫师护具:包括帽子、长袍、裤子和靴子。与普通盔甲不同的是,它们耐久归零之后不会消失。而且,蕴藏在其中的奥术能量将会保护穿戴者。当然,这意味着它们必须使用水晶充能,这一点和魔杖很相似。幸运的是,这些护具不太消耗@mana 魔力@。你可以像和魔杖那样,将其放置在@arcane_workbench 奥术工作台@里,或者使用@mana_flasks 魔力瓶@为其充能,但是要小心,如果护具耗尽了魔力,它们将不再提供任何保护效果。",
|
||||||
|
|
||||||
"#image wizard_armour",
|
"#image wizard_armour",
|
||||||
|
|
||||||
@@ -527,7 +529,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"在你的旅行中,你可能在野外会不时地遇到一种奇怪的,发光的花。这些独特的花朵被称为水晶花,它们能够高效的聚集@mana 魔力@ - 直到今天,还没有人能确定它能够高效聚集魔力的原因。但是我们知道,它们可以被收集和制作成魔力水晶,使得它们成为相当有用的地上的魔力来源。然而,因为花的尺寸很小,而且它们无法密集生长,所以通过这种方式收获的魔力并不是很多,",
|
"在你的旅行中,你可能在野外会不时地遇到一种奇怪的,发光的花。这些独特的花朵被称为水晶花,它们能够高效的聚集@mana 魔力@ - 直到今天,还没有人能确定它能够高效聚集魔力的原因。但是我们知道,它们可以被收集和制作成魔力水晶,使得它们成为相当有用的地上的魔力来源。然而,因为花的尺寸很小,而且它们无法密集生长,所以通过这种方式收获的魔力并不是很多。",
|
||||||
|
|
||||||
"#image crystal_flower",
|
"#image crystal_flower",
|
||||||
"#recipe crystal_flower_to_crystals"
|
"#recipe crystal_flower_to_crystals"
|
||||||
@@ -654,7 +656,7 @@
|
|||||||
],
|
],
|
||||||
"text":[
|
"text":[
|
||||||
|
|
||||||
"@wands 魔杖@和@spells 法术@分成四阶:#colour_novice新手#colour_reset,#colour_apprentice学徒#colour_reset,#colour_advanced进阶 #colour_reset 和 #colour_master大师#colour_reset。每一阶都比上一阶更强大。",
|
"@wands 魔杖@和@spells 法术@分成四阶:#colour_novice新手#colour_reset,#colour_apprentice学徒#colour_reset,#colour_advanced进阶#colour_reset和#colour_master大师#colour_reset。每一阶都比上一阶更强大。",
|
||||||
|
|
||||||
"#image tiers",
|
"#image tiers",
|
||||||
|
|
||||||
@@ -684,19 +686,19 @@
|
|||||||
|
|
||||||
"#image elements",
|
"#image elements",
|
||||||
|
|
||||||
"#colour_fire火焰#colour_reset \n 它或许是最具破坏性的元素,火与燃烧、熔岩和爆炸有关。一位强大的火术师能够释放出地狱烈焰灼烧他的敌人,并可能在这个过程中点燃整个世界。大多数攻击型火焰法术都会点燃目标,造成持续的伤害。然而,要注意火系法术可能对下界生物没有效果。",
|
"#colour_fire火焰#colour_reset 它或许是最具破坏性的元素,火与燃烧、熔岩和爆炸有关。一位强大的火术师能够释放出地狱烈焰灼烧他的敌人,并可能在这个过程中点燃整个世界。大多数攻击型火焰法术都会点燃目标,造成持续的伤害。然而,要注意火系法术可能对下界生物没有效果。",
|
||||||
|
|
||||||
"#colour_ice冰霜#colour_reset \n 冰元素囊括了所有与寒冷有关的事物,冰霜法术通常会让敌人减速或者完全冻结,同时对火焰生物能造成额外伤害。冰霜魔法在战斗之外也同样有用,比如冻住河流,让你方便的过河。",
|
"#colour_ice冰霜#colour_reset 冰元素囊括了所有与寒冷有关的事物,冰霜法术通常会让敌人减速或者完全冻结,同时对火焰生物能造成额外伤害。冰霜魔法在战斗之外也同样有用,比如冻住河流,让你方便的过河。",
|
||||||
|
|
||||||
"#colour_lightning雷电#colour_reset \n 这种元素与闪电,风暴和天气有关。绝不可忽视的一位强大的雷术师的力量,他们能够使雷电屈从于他们的意志。雷电法术通常能够一次性伤害多个敌人,并且能够自动寻找目标,这使得它们能有效地攻击任何生物…… 但是要小心爬行者。",
|
"#colour_lightning雷电#colour_reset 这种元素与闪电,风暴和天气有关。绝不可忽视的一位强大的雷术师的力量,他们能够使雷电屈从于他们的意志。雷电法术通常能够一次性伤害多个敌人,并且能够自动寻找目标,这使得它们能有效地攻击任何生物…… 但是要小心爬行者。",
|
||||||
|
|
||||||
"#colour_necromancy死灵#colour_reset \n 死灵元素与黑暗,混乱与亡灵相关。操纵死灵元素的巫师十分神秘,而且通常被常人认为是邪恶的,但实际上往往并不是这样。死灵法术通常能够召唤@creatures 魔法生物@为你而战,亦可以扭曲敌人的意志。",
|
"#colour_necromancy死灵#colour_reset 死灵元素与黑暗,混乱与亡灵相关。操纵死灵元素的巫师十分神秘,而且通常被常人认为是邪恶的,但实际上往往并不是这样。死灵法术通常能够召唤@creatures 魔法生物@为你而战,亦可以扭曲敌人的意志。",
|
||||||
|
|
||||||
"#colour_earth自然#colour_reset \n 自然元素与自然相关:动物,植物,风,以及与这些相似的。自然魔法种类繁多,形式多样,既可以毒害敌人,亦可展现天气狂暴的一面。自然法术集合了攻击、防御和功能类法术。",
|
"#colour_earth自然#colour_reset 自然元素与自然相关:动物,植物,风,以及与这些相似的。自然魔法种类繁多,形式多样,既可以毒害敌人,亦可展现天气狂暴的一面。自然法术集合了攻击、防御和功能类法术。",
|
||||||
|
|
||||||
"#colour_sorcery秘法#colour_reset \n 秘法元素与力场与变化有关。秘术师可以操纵光、重力甚至是现实本身来满足他们的需要。此外,秘法系法术可以赋予施法者奇特的魔法能力,或者可以帮助施法者移动他所希望移动的目标。",
|
"#colour_sorcery秘法#colour_reset 秘法元素与力场与变化有关。秘术师可以操纵光、重力甚至是现实本身来满足他们的需要。此外,秘法系法术可以赋予施法者奇特的魔法能力,或者可以帮助施法者移动他所希望移动的目标。",
|
||||||
|
|
||||||
"#colour_healing治愈#colour_reset \n 治愈元素侧重于防御和再生,治疗师尽可能多地保护他们自己和他们的盟友,因此在特殊情况下会非常难对付。虽然一般不用于攻击,但某些治疗法术的净化之光会对亡灵造成相当大的伤害。治疗法术在战斗中是必不可少的。",
|
"#colour_healing治愈#colour_reset 治愈元素侧重于防御和再生,治疗师尽可能多地保护他们自己和他们的盟友,因此在特殊情况下会非常难对付。虽然一般不用于攻击,但某些治疗法术的净化之光会对亡灵造成相当大的伤害。治疗法术在战斗中是必不可少的。",
|
||||||
|
|
||||||
"不同元素之间的界限并不总是泾渭分明的,有些法术反而具有其它元素的特征。",
|
"不同元素之间的界限并不总是泾渭分明的,有些法术反而具有其它元素的特征。",
|
||||||
|
|
||||||
@@ -806,7 +808,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"credits": {
|
"credits": {
|
||||||
"title": "鸣谢",
|
"title": "参与人员",
|
||||||
"include_in_contents": "main_contents",
|
"include_in_contents": "main_contents",
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
@@ -822,11 +824,11 @@
|
|||||||
|
|
||||||
"代码;",
|
"代码;",
|
||||||
|
|
||||||
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica \n- UltraHex \n- Azim-Palmer \n- raoulvdberge \n- rafasoares",
|
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica \n- UltraHex \n- Azim-Palmer \n- raoulvdberge \n- rafasoares \n- xinyuan-liu \n- SettingDust",
|
||||||
|
|
||||||
"翻译;",
|
"翻译;",
|
||||||
|
|
||||||
"- 西班牙语:MadWrist, Alsentar \n-墨西哥西班牙语:MadWrist \n- 俄语:VilagVil, kellixon, bigenergy \n- 法语:Hahdrim \n- 巴西葡萄牙语:lorrampi \n- 中文 (简体):ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Korean:shejery, rewi_wire \n- 波兰语:Trozuu \n- 德语:BirdyDragon \n- 中文 (繁体):chesterccj305 \n- 匈牙利语:Bombadil",
|
"- 西班牙语:MadWrist, Alsentar \n-墨西哥西班牙语:MadWrist \n- 俄语:VilagVil, kellixon, bigenergy, MugGod2, DrHesperus \n- 法语:Hahdrim \n- 巴西葡萄牙语:lorrampi \n- 中文 (简体):ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Korean:shejery, rewi_wire \n- 波兰语:Trozuu \n- 德语:BirdyDragon, Lemopav\n- 中文 (繁体):chesterccj305 \n- 匈牙利语:Bombadil",
|
||||||
|
|
||||||
"声音效果;",
|
"声音效果;",
|
||||||
|
|
||||||
@@ -834,7 +836,7 @@
|
|||||||
|
|
||||||
"想要获得更多信息,请参看@https://github.com/Electroblob77/Wizardry/wiki wiki@.",
|
"想要获得更多信息,请参看@https://github.com/Electroblob77/Wizardry/wiki wiki@.",
|
||||||
|
|
||||||
"觉得不过瘾? 加入@https://discord.gg/hs8yJP2 Discord server@获得第一手资讯,还可以一起探讨新内容!"
|
"觉得不过瘾?加入@https://discord.gg/hs8yJP2 Discord server@获得第一手资讯,还可以一起探讨新内容!"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -320,19 +320,19 @@
|
|||||||
|
|
||||||
"要開始使用法術,你需要準備:",
|
"要開始使用法術,你需要準備:",
|
||||||
|
|
||||||
"》法杖, 請依圖示合成:",
|
"法杖,請依圖示合成:",
|
||||||
|
|
||||||
"#recipe magic_wand",
|
"#recipe magic_wand",
|
||||||
|
|
||||||
"\n\n》@arcane_workbench 法術工作台@, 合成方式如圖:",
|
"@arcane_workbench 法術工作台@,合成方式如圖:",
|
||||||
|
|
||||||
"#recipe arcane_workbench",
|
"#recipe arcane_workbench",
|
||||||
|
|
||||||
"》@spells 法術書@\n這個可以在箱子裡找到,或從怪物身上掉落,或向法師購買。\n\n\n\n不然你也可以自己合成一個\n初學者法術【魔法彈】,\n如圖所示:",
|
"@spells 法術書@這個可以在箱子裡找到,或從怪物身上掉落,或向法師購買。不然你也可以自己合成一個初學者法術【魔法彈】,如圖所示:",
|
||||||
|
|
||||||
"#recipe magic_missile_spell_book",
|
"#recipe magic_missile_spell_book",
|
||||||
|
|
||||||
"你還需要準備一大堆魔法水晶\n來為法杖供應@mana 法力@。"
|
"你還需要準備一大堆魔法水晶來為法杖供應@mana 法力@。"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -344,7 +344,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"法力是賦予法師力量的魔法能量,其本身並非實體的物質,反而是可滲入於萬物之中的永恆能量。特別的是,法力蘊藏在於地下岩石中所找到的天然水晶內。\n@wands 法杖@可儲存法力,並在施法時\n將法力引導到@spells 法術@上。\n不同的法術會依其力量強度及持續時間消耗不同的法力值。",
|
"法力是賦予法師力量的魔法能量,其本身並非實體的物質,反而是可滲入於萬物之中的永恆能量。特別的是,法力蘊藏在於地下岩石中所找到的天然水晶內。@wands 法杖@可儲存法力,並在施法時將法力引導到@spells 法術@上。不同的法術會依其力量強度及持續時間消耗不同的法力值。",
|
||||||
|
|
||||||
"#image crystal_ore",
|
"#image crystal_ore",
|
||||||
|
|
||||||
@@ -362,17 +362,17 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"法杖是法師首選的器具。\n你能用它來施展任何法杖能力\n所及的@spells 法術@(請參閱@tiers 等級@章節)\n。\n法杖的種類很多,不過當然都得從基礎法杖開始。",
|
"法杖是法師首選的器具。你能用它來施展任何法杖能力所及的@spells 法術@(請參閱@tiers 等級@章節)。法杖的種類很多,不過當然都得從基礎法杖開始。",
|
||||||
|
|
||||||
"#image magic_wand",
|
"#image magic_wand",
|
||||||
|
|
||||||
"大多數的法杖都誕生於一個簡單的製作方式。\n準備一顆某種類型的魔法水晶,\n將水晶裝在木棒的一端,\n再於另一端黏上一顆金粒。\n水晶自然是法杖力量的源頭,\n因為它提供了引導@spells 法術@所需的\n焦點。而其餘的部分也很重要,不只是因為提供了握住法杖的地方,更是指引@mana 法力@前進的路徑\n。",
|
"大多數的法杖都誕生於一個簡單的製作方式。準備一顆某種類型的魔法水晶,將水晶裝在木棒的一端,再於另一端黏上一顆金粒。水晶自然是法杖力量的源頭,因為它提供了引導@spells 法術@所需的焦點。而其餘的部分也很重要,不只是因為提供了握住法杖的地方,更是指引@mana 法力@前進的路徑。",
|
||||||
|
|
||||||
"隨著法杖施展了愈多法術,\n其變得愈能駕馭@spells 法術@,\n因此也能施展更強大的法術。\n這樣的成長可以從法杖外觀上的細微變化中發現,隨著法杖愈來愈強,水晶會變得更加明亮,\n顏色也可能會根據其@elements 元素@而\n產生變化。過了一段時間之後,法杖本身的木材也會開始扭曲生長成各種複雜的形狀。",
|
"隨著法杖施展了愈多法術,其變得愈能駕馭@spells 法術@,因此也能施展更強大的法術。這樣的成長可以從法杖外觀上的細微變化中發現,隨著法杖愈來愈強,水晶會變得更加明亮,顏色也可能會根據其@elements 元素@而產生變化。過了一段時間之後,法杖本身的木材也會開始扭曲生長成各種複雜的形狀。",
|
||||||
|
|
||||||
"當你拿著法杖時,畫面的角落會顯示出目前法杖所選的法術及其圖示,而在施放法術之後,還會顯示冷卻條來表示直到下次施展所需等待的時間,它還會顯示法杖中的前一個和下一個法術名稱。按下《#next_spell_key 鍵》及《#previous_spell_key 鍵》可切換法術(這些都可在【選項】->【按鍵設定】中變更),你也可以在潛行時使用滑鼠滾輪來切換法術。",
|
"當你拿著法杖時,畫面的角落會顯示出目前法杖所選的法術及其圖示,而在施放法術之後,還會顯示冷卻條來表示直到下次施展所需等待的時間,它還會顯示法杖中的前一個和下一個法術名稱。按下《#next_spell_key 鍵》及《#previous_spell_key 鍵》可切換法術(這些都可在【選項】->【按鍵設定】中變更),你也可以在潛行時使用滑鼠滾輪來切換法術。",
|
||||||
|
|
||||||
"當你將游標停留在物品欄的法杖上時,會顯示法杖中儲存的\n@mana 法力@,伴隨目前所選的@spells 法術@及其\n特殊能力。\n將法杖放入@arcane_workbench 法術工作台@則可\n看見更詳細的資訊。"
|
"當你將游標停留在物品欄的法杖上時,會顯示法杖中儲存的@mana 法力@,伴隨目前所選的@spells 法術@及其特殊能力。將法杖放入@arcane_workbench 法術工作台@則可看見更詳細的資訊。"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -384,13 +384,13 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"沒有法術的@wands 法杖@沒有作用。\n法術的記錄形式有兩種:\n一種是永久性的書本,\n一種是暫時性的卷軸。",
|
"沒有法術的@wands 法杖@沒有作用。法術的記錄形式有兩種:一種是永久性的書本,一種是暫時性的卷軸。",
|
||||||
|
|
||||||
"法術書本身無法使用,而是用於將書中記載的法術存入@wands 法杖@。\n在世界各地都能發現法術書,應該用不了多少時間你就能找到一本。當你找到後,可將游標停留在書上,看一下這本法術書的基本資訊,也可以拿著書點擊滑鼠右鍵以閱讀更詳細的資料。",
|
"法術書本身無法使用,而是用於將書中記載的法術存入@wands 法杖@。在世界各地都能發現法術書,應該用不了多少時間你就能找到一本。當你找到後,可將游標停留在書上,看一下這本法術書的基本資訊,也可以拿著書點擊滑鼠右鍵以閱讀更詳細的資料。",
|
||||||
|
|
||||||
"相對而言卷軸則有不同的用途: 拿著卷軸點擊滑鼠右鍵便會施展上面的法術並用掉卷軸。跟法術書一樣,卷軸在世界各地都能找到,但你也可以自己@enchanting_scrolls 製作@。",
|
"相對而言卷軸則有不同的用途: 拿著卷軸點擊滑鼠右鍵便會施展上面的法術並用掉卷軸。跟法術書一樣,卷軸在世界各地都能找到,但你也可以自己@enchanting_scrolls 製作@。",
|
||||||
|
|
||||||
"在你準備進行某個任務時,有些法術可能只會用到一兩次,\n所以你不想讓那些法術占用\n你的@wands 法杖@空間,此時卷軸就非常\n有用。They also have the advantage of being able to instantly cast spells that would normally require a charge-up period. 不過得注意,比起法杖,卷軸還是效率較差的施法方式。",
|
"在你準備進行某個任務時,有些法術可能只會用到一兩次,所以你不想讓那些法術占用你的@wands 法杖@空間,此時卷軸就非常有用。They also have the advantage of being able to instantly cast spells that would normally require a charge-up period. 不過得注意,比起法杖,卷軸還是效率較差的施法方式。",
|
||||||
|
|
||||||
"未經訓練的眼睛無法閱讀法術中的魔法符文。然而若要鑑定一個法術,你當然可以冒著發生意外的風險來施展看看結果,但即便如此許多法術是要在特定的條件下才會發生作用。不過即便如此,還是有可能在施法時誤用了未鑑定的法術,其潛在的危險性取決於這個法術有多強大。因此更安全可靠的選擇是使用鑑定卷軸,可以在箱子裡找到或是向法師購買。拿著鑑定卷軸點擊滑鼠右鍵便會用掉卷軸並鑑定你快捷欄中第一個未知的法術書或卷軸。"
|
"未經訓練的眼睛無法閱讀法術中的魔法符文。然而若要鑑定一個法術,你當然可以冒著發生意外的風險來施展看看結果,但即便如此許多法術是要在特定的條件下才會發生作用。不過即便如此,還是有可能在施法時誤用了未鑑定的法術,其潛在的危險性取決於這個法術有多強大。因此更安全可靠的選擇是使用鑑定卷軸,可以在箱子裡找到或是向法師購買。拿著鑑定卷軸點擊滑鼠右鍵便會用掉卷軸並鑑定你快捷欄中第一個未知的法術書或卷軸。"
|
||||||
]
|
]
|
||||||
@@ -410,7 +410,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"法術工作台看起來有點像附魔台, 用來升級你的@wands 法杖@、\n為其補充法力和存入@spells 法術@。\n\n其合成方式如下:",
|
"法術工作台看起來有點像附魔台,用來升級你的@wands 法杖@、為其補充法力和存入@spells 法術@。其合成方式如下:",
|
||||||
|
|
||||||
"#recipe arcane_workbench",
|
"#recipe arcane_workbench",
|
||||||
|
|
||||||
@@ -427,7 +427,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"要將@spells 法術@存入你的@wands 法杖@,只要將\n法杖放入工作台中央的槽中,然後將法術書放入周圍其中一個槽並按下按鈕。此時你會注意到,在這個過程中,法術書並沒有受到任何影響,這是因為存入法術的動作,並不是將法術從法術書中取走,只是將法術抄寫至法杖中而已。因此你可以重複這個動作,盡量將想要的法術存入你的法杖。你一次最多只能存入五種法術到法杖中,不過可用協調升級來增加法術存量。"
|
"要將@spells 法術@存入你的@wands 法杖@,只要將法杖放入工作台中央的槽中,然後將法術書放入周圍其中一個槽並按下按鈕。此時你會注意到,在這個過程中,法術書並沒有受到任何影響,這是因為存入法術的動作,並不是將法術從法術書中取走,只是將法術抄寫至法杖中而已。因此你可以重複這個動作,盡量將想要的法術存入你的法杖。你一次最多只能存入五種法術到法杖中,不過可用協調升級來增加法術存量。"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"charging_wands": {
|
"charging_wands": {
|
||||||
@@ -438,7 +438,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"要幫@wands 法杖@補充法力,先將法杖\n放入法術工作台中央的槽,並在左下方那個槽放入魔法水晶,然後按下按鈕。\n每個水晶相當於#mana_per_crystal點的@mana 法力@,\n而法杖只會在需要時用掉水晶,因此你可以將水晶留在工作台內,以便需要時供應。但是請記得,法杖只能取用整數單位的水晶,舉例來說,如果法杖只需要30點法力,那補充法力時會有#example_charging_loss點法力浪費掉。"
|
"要幫@wands 法杖@補充法力,先將法杖放入法術工作台中央的槽,並在左下方那個槽放入魔法水晶,然後按下按鈕。每個水晶相當於#mana_per_crystal點的@mana 法力@,而法杖只會在需要時用掉水晶,因此你可以將水晶留在工作台內,以便需要時供應。但是請記得,法杖只能取用整數單位的水晶,舉例來說,如果法杖只需要30點法力,那補充法力時會有#example_charging_loss點法力浪費掉。"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"upgrading_wands": {
|
"upgrading_wands": {
|
||||||
@@ -449,7 +449,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"你需要對應@tiers 等級@的法術寶典來\n升級你的@wands 法杖@或進行特殊的法\n杖升級。這兩種東西都可從怪物的掉落物或向法師購買獲得。要升級法杖,先將法杖放入法術工作台中央的槽,並在右上方的槽放入升級物後按下按鈕。",
|
"你需要對應@tiers 等級@的法術寶典來升級你的@wands 法杖@或進行特殊的法杖升級。這兩種東西都可從怪物的掉落物或向法師購買獲得。要升級法杖,先將法杖放入法術工作台中央的槽,並在右上方的槽放入升級物後按下按鈕。",
|
||||||
|
|
||||||
"特殊的法杖升級可加強法杖某方面的能力,每種升級最高只能疊加三次,而法杖的總升級數取決於法杖的等級。升級後就無法移除。"
|
"特殊的法杖升級可加強法杖某方面的能力,每種升級最高只能疊加三次,而法杖的總升級數取決於法杖的等級。升級後就無法移除。"
|
||||||
]
|
]
|
||||||
@@ -462,7 +462,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"法術工作台也能用來將@spells 法術@\n存入卷軸。要製作卷軸,你需要先用一張紙及一些線來合成空白卷軸,然後選一本想要作成卷軸的法術書,最後準備足夠的魔法水晶以提供施展這個法術的@mana 法力@。",
|
"法術工作台也能用來將@spells 法術@存入卷軸。要製作卷軸,你需要先用一張紙及一些線來合成空白卷軸,然後選一本想要作成卷軸的法術書,最後準備足夠的魔法水晶以提供施展這個法術的@mana 法力@。",
|
||||||
|
|
||||||
"#recipe blank_scroll",
|
"#recipe blank_scroll",
|
||||||
|
|
||||||
@@ -480,7 +480,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"身為一位法師,在與生物搏鬥時需要一些東西來保護自己。雖然也能使用一般的護甲,但是為了充分發揮你的法術,你還是需要一套法師服,包括帽子、長袍、褲子和鞋子。\n與一般護甲不同的是,法師服不會破損,其使用魔法能量來保護穿著的人。因此跟法杖一樣,需要魔法水晶來補充能量。不過幸好這些服裝不會消耗太多\n@mana 法力@。\n法師服補充能量的方式也跟法杖一樣,可以用@arcane_workbench 法術工作台@或\n@mana_flasks 法力瓶@來補充,但是必須當心,\n如果法師服的法力耗盡了,你會發現自己毫無防禦力。",
|
"身為一位法師,在與生物搏鬥時需要一些東西來保護自己。雖然也能使用一般的護甲,但是為了充分發揮你的法術,你還是需要一套法師服,包括帽子、長袍、褲子和鞋子。與一般護甲不同的是,法師服不會破損,其使用魔法能量來保護穿著的人。因此跟法杖一樣,需要魔法水晶來補充能量。不過幸好這些服裝不會消耗太多@mana 法力@。法師服補充能量的方式也跟法杖一樣,可以用@arcane_workbench 法術工作台@或@mana_flasks 法力瓶@來補充,但是必須當心,如果法師服的法力耗盡了,你會發現自己毫無防禦力。",
|
||||||
|
|
||||||
"#image wizard_armour",
|
"#image wizard_armour",
|
||||||
|
|
||||||
@@ -514,7 +514,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"只是待在家裡是無法成為法術大師的,到外頭探索充滿魔法的世界吧!\n若你勇於挑戰,古代遺址、遺物以及不管好的或壞的神秘生物,都等著你發現。\n最偉大的法師同時也最具好奇心,他們會不斷的探索周遭環境,並嘗試所發現的東西,來獲得豐富的知識及強大的力量。",
|
"只是待在家裡是無法成為法術大師的,到外頭探索充滿魔法的世界吧!若你勇於挑戰,古代遺址、遺物以及不管好的或壞的神秘生物,都等著你發現。最偉大的法師同時也最具好奇心,他們會不斷的探索周遭環境,並嘗試所發現的東西,來獲得豐富的知識及強大的力量。",
|
||||||
|
|
||||||
"雖然法師不免大多的時間都是孤身一人,但知識的分享也是學習魔法藝術重要的一環。找尋其他法師,盡可能從他們身上學習更多知識,溝通才是一切最大的力量。"
|
"雖然法師不免大多的時間都是孤身一人,但知識的分享也是學習魔法藝術重要的一環。找尋其他法師,盡可能從他們身上學習更多知識,溝通才是一切最大的力量。"
|
||||||
],
|
],
|
||||||
@@ -527,7 +527,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"在你的旅途當中,可能在野外會不時遇到奇怪的發光花朵,這些獨特的花稱為水晶花,它們具有聚集@mana 法力@的神奇能力,至今還不\n知道原因。不過我們卻知道這些水晶花,可經由採集製作以提取法力成為水晶,這使它們成為地面上相當有用的法力來源。然而由於這種花並不大,而且生長的土地都很小塊,因此這種方式所能獲得的法力其實很有限。",
|
"在你的旅途當中,可能在野外會不時遇到奇怪的發光花朵,這些獨特的花稱為水晶花,它們具有聚集@mana 法力@的神奇能力,至今還不知道原因。不過我們卻知道這些水晶花,可經由採集製作以提取法力成為水晶,這使它們成為地面上相當有用的法力來源。然而由於這種花並不大,而且生長的土地都很小塊,因此這種方式所能獲得的法力其實很有限。",
|
||||||
|
|
||||||
"#image crystal_flower",
|
"#image crystal_flower",
|
||||||
"#recipe crystal_flower_to_crystals"
|
"#recipe crystal_flower_to_crystals"
|
||||||
@@ -541,13 +541,13 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"害怕嗎?你並不是這個世界上唯一會使用魔法的人。\n在你的旅途中,你可能會遇到具有獨特尖頂或雙尖頂的高塔,這些是法師同伴居住的地方。\n隱居的生活使法師們有時候會有點古怪,但是他們通常還是友善的,而且只要你願意付出代價,還是會樂意與你分享他們的知識。\n在支付了貴重金屬及寶石後,你會收到許多驚奇的法術作為回報。",
|
"害怕嗎?你並不是這個世界上唯一會使用魔法的人。在你的旅途中,你可能會遇到具有獨特尖頂或雙尖頂的高塔,這些是法師同伴居住的地方。隱居的生活使法師們有時候會有點古怪,但是他們通常還是友善的,而且只要你願意付出代價,還是會樂意與你分享他們的知識。在支付了貴重金屬及寶石後,你會收到許多驚奇的法術作為回報。",
|
||||||
|
|
||||||
"如果你想尋找的是@tiers 大師級@法術,\n那你得跟專門的人交談。",
|
"如果你想尋找的是@tiers 大師級@法術,那你得跟專門的人交談。",
|
||||||
|
|
||||||
"#image wizard_tower",
|
"#image wizard_tower",
|
||||||
|
|
||||||
"不幸的是,有少數法師並不歡迎訪客。這些法師通常已被驅逐,所以對於任何闖入地盤的人都充滿敵意。\n接近這些傢伙要特別小心,並做好抵擋強大魔法的準備。只要擊敗他們,他們的知識就會成為你的了。",
|
"不幸的是,有少數法師並不歡迎訪客。這些法師通常已被驅逐,所以對於任何闖入地盤的人都充滿敵意。接近這些傢伙要特別小心,並做好抵擋強大魔法的準備。只要擊敗他們,他們的知識就會成為你的了。",
|
||||||
|
|
||||||
"有一點必須知道,沒有法師會接受對他們攻擊或盜取他們東西的人,他們肯定不會善罷甘休。"
|
"有一點必須知道,沒有法師會接受對他們攻擊或盜取他們東西的人,他們肯定不會善罷甘休。"
|
||||||
]
|
]
|
||||||
@@ -562,11 +562,11 @@
|
|||||||
|
|
||||||
"古老魔法的遺跡散落在世界各處,其中最著名的是刻有許多符號及符文的石頭結構。這些廢墟看起來像是某種古代文明的遺跡,無論建造它們的是誰或是什麼,顯然具有相當豐富的魔法知識,且用來在這些地方設置持續至今的防衛魔法。",
|
"古老魔法的遺跡散落在世界各處,其中最著名的是刻有許多符號及符文的石頭結構。這些廢墟看起來像是某種古代文明的遺跡,無論建造它們的是誰或是什麼,顯然具有相當豐富的魔法知識,且用來在這些地方設置持續至今的防衛魔法。",
|
||||||
|
|
||||||
"這些結構大致上分成兩種類型,第一種是較常見的方尖碑:\n以雕刻符文石堆成高高尖頂的結構,底部開著一塊空間,存放著過去所遺留的次等魔法物品。",
|
"這些結構大致上分成兩種類型,第一種是較常見的方尖碑:以雕刻符文石堆成高高尖頂的結構,底部開著一塊空間,存放著過去所遺留的次等魔法物品。",
|
||||||
|
|
||||||
"#image obelisk",
|
"#image obelisk",
|
||||||
|
|
||||||
"這些結構通常受到魔法保護,一旦有人靠近就會召喚出充滿敵意的@creatures 魔法生物@來攻擊人類。\n對抗這些生物並摧毀其魔法源頭,那些遺物就是你的了。"
|
"這些結構通常受到魔法保護,一旦有人靠近就會召喚出充滿敵意的@creatures 魔法生物@來攻擊人類。對抗這些生物並摧毀其魔法源頭,那些遺物就是你的了。"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"shrines": {
|
"shrines": {
|
||||||
@@ -577,11 +577,11 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"第二種較為罕見的結構稱之為神殿,由一個中央基座及圍繞在四周的符文石柱所組成。基座上方擺著一個裝有古代@artefacts 神器@的\n寶箱,並通常施加了防護魔法鎖,以防他人竊取。整個結構還受到封鎖力場保護,使擅闖者無法逃離。",
|
"第二種較為罕見的結構稱之為神殿,由一個中央基座及圍繞在四周的符文石柱所組成。基座上方擺著一個裝有古代@artefacts 神器@的寶箱,並通常施加了防護魔法鎖,以防他人竊取。整個結構還受到封鎖力場保護,使擅闖者無法逃離。",
|
||||||
|
|
||||||
"#image shrine",
|
"#image shrine",
|
||||||
|
|
||||||
"由於這些神殿的重要意義及巨大的神秘力量,更別說裡面的寶物,對於志氣高昂的法師特別有吸引力。\n\n但是務必謹慎,有許多關於法師被關在封鎖區內,可能因為幽閉恐懼症導致慢慢發瘋的報導。且愈來愈多人認為,這就是神殿防護魔法的一個部分,而被關在其中的法師,其實是被控制用來守護神殿。這對於膽敢前往冒險的人來說,無疑是令人不寒而慄的結局..."
|
"由於這些神殿的重要意義及巨大的神秘力量,更別說裡面的寶物,對於志氣高昂的法師特別有吸引力。但是務必謹慎,有許多關於法師被關在封鎖區內,可能因為幽閉恐懼症導致慢慢發瘋的報導。且愈來愈多人認為,這就是神殿防護魔法的一個部分,而被關在其中的法師,其實是被控制用來守護神殿。這對於膽敢前往冒險的人來說,無疑是令人不寒而慄的結局..."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"library_ruins": {
|
"library_ruins": {
|
||||||
@@ -620,7 +620,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"除了法師,還有許多其它生物也會使用魔法。其中有許多是源自於魔法,且大部分都能用特定的@spells 法術@召喚。會看到這些生物,\n大多是在守護@obelisks 方尖碑@,但也可能\n遇到了強大的召喚法師。只有非常少數的神秘生物才會偶爾在野外發現。",
|
"除了法師,還有許多其它生物也會使用魔法。其中有許多是源自於魔法,且大部分都能用特定的@spells 法術@召喚。會看到這些生物,大多是在守護@obelisks 方尖碑@,但也可能遇到了強大的召喚法師。只有非常少數的神秘生物才會偶爾在野外發現。",
|
||||||
|
|
||||||
"A notable example is the remnant, a spirit-like being that forms naturally from the traces left behind by powerful magic and typically takes on one of the seven arcane @elements@. On their own, they are little more than a nuisance, but a swarm can quickly overwhelm the unprepared adventurer, and their innate resistance to magic makes it advisable to carry a bow or other ranged weapon.",
|
"A notable example is the remnant, a spirit-like being that forms naturally from the traces left behind by powerful magic and typically takes on one of the seven arcane @elements@. On their own, they are little more than a nuisance, but a swarm can quickly overwhelm the unprepared adventurer, and their innate resistance to magic makes it advisable to carry a bow or other ranged weapon.",
|
||||||
|
|
||||||
@@ -642,7 +642,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"在探索@shrines 神殿@時,你可能會好運的\n發現某種古代魔法神器,一種能夠賦予配戴者獨特而強大能力的物品。\n目前所知的類型有三種:\n為法術附加額外能力及效果的戒指,增強防禦力的項鍊,以及各種應用魔法的寶器。\n這些神器只是放入背包是沒有用的,要擺在身上的正確位置才會發生作用。"
|
"在探索@shrines 神殿@時,你可能會好運的發現某種古代魔法神器,一種能夠賦予配戴者獨特而強大能力的物品。目前所知的類型有三種:為法術附加額外能力及效果的戒指,增強防禦力的項鍊,以及各種應用魔法的寶器。這些神器只是放入背包是沒有用的,要擺在身上的正確位置才會發生作用。"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -670,7 +670,7 @@
|
|||||||
|
|
||||||
"要提升至更高等級,首先法杖必須變得夠強大到足以引導該等級的法術。法杖會隨著施展法術而獲得成長,法術類型、法術力量、元素效果以及其它外部因素都可能會影響法杖的成長速度。",
|
"要提升至更高等級,首先法杖必須變得夠強大到足以引導該等級的法術。法杖會隨著施展法術而獲得成長,法術類型、法術力量、元素效果以及其它外部因素都可能會影響法杖的成長速度。",
|
||||||
|
|
||||||
"當法杖足夠強大,法術寶典為最終將法杖提升至下個等級的關鍵物品(請參閱@upgrading_wands 升級法杖@),\n一旦完成升級,法杖將再次朝下個等級開始成長。"
|
"當法杖足夠強大,法術寶典為最終將法杖提升至下個等級的關鍵物品(請參閱@upgrading_wands 升級法杖@),一旦完成升級,法杖將再次朝下個等級開始成長。"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -682,23 +682,23 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"@spells 法術@各屬於不同的元素,代表\n法術的本質,且搭配使用對應的@wands 法杖@還會加強效果。",
|
"@spells 法術@各屬於不同的元素,代表法術的本質,且搭配使用對應的@wands 法杖@還會加強效果。",
|
||||||
|
|
||||||
"#image elements",
|
"#image elements",
|
||||||
|
|
||||||
"#colour_fire火#colour_reset \n火元素涉及燃燒、岩漿以及爆炸,大概是最具破壞性的元素。一個強大的烈焰法師可使敵人面臨煉獄般的火海,並可能在過程中毀掉這個世界。\n大部分的火系法術會讓目標著火,使他們持續受到傷害,但是對地獄的生物則沒什麼效果。",
|
"#colour_fire火#colour_reset 火元素涉及燃燒、岩漿以及爆炸,大概是最具破壞性的元素。一個強大的烈焰法師可使敵人面臨煉獄般的火海,並可能在過程中毀掉這個世界。大部分的火系法術會讓目標著火,使他們持續受到傷害,但是對地獄的生物則沒什麼效果。",
|
||||||
|
|
||||||
"#colour_ice冰#colour_reset \n冰元素來自於所有冰冷的物質。冰系法術通常會讓敵人減速,甚至使他們完全凍結,對於火系生物特別有效。\n冰凍魔法在戰鬥之外也很有用,例如使水面結冰以過河。",
|
"#colour_ice冰#colour_reset 冰元素來自於所有冰冷的物質。冰系法術通常會讓敵人減速,甚至使他們完全凍結,對於火系生物特別有效。冰凍魔法在戰鬥之外也很有用,例如使水面結冰以過河。",
|
||||||
|
|
||||||
"\n#colour_lightning電#colour_reset \n這個元素涉及雷電、風暴以及天氣。決不可小看一個強大雷電法師的力量,有些甚至能隨意召喚閃電。\n雷電法術經常能一次傷害多個敵人,還會自動搜尋目標,對任何生物都能造成有效的攻擊...但是得當心苦力怕。",
|
"#colour_lightning電#colour_reset 這個元素涉及雷電、風暴以及天氣。決不可小看一個強大雷電法師的力量,有些甚至能隨意召喚閃電。雷電法術經常能一次傷害多個敵人,還會自動搜尋目標,對任何生物都能造成有效的攻擊...但是得當心苦力怕。",
|
||||||
|
|
||||||
"#colour_necromancy死靈#colour_reset \n死靈是黑暗、渾沌以及不死生物的元素。神秘的死靈法師往往被視為邪惡,儘管通常不是這樣的。\n死靈法術常召喚@creatures 生物@來為他\n戰鬥,或進而扭曲敵人的意志。",
|
"#colour_necromancy死靈#colour_reset 死靈是黑暗、渾沌以及不死生物的元素。神秘的死靈法師往往被視為邪惡,儘管通常不是這樣的。死靈法術常召喚@creatures 生物@來為他戰鬥,或進而扭曲敵人的意志。",
|
||||||
|
|
||||||
"#colour_earth大地#colour_reset \n大地元素來自於動植物、風等自然界的的力量。大地魔法千變萬化,從毒害敵人到控制天氣,有各式各樣的形式。\n大地法術是綜合攻擊、防禦以及實用的法術。",
|
"#colour_earth大地#colour_reset 大地元素來自於動植物、風等自然界的的力量。大地魔法千變萬化,從毒害敵人到控制天氣,有各式各樣的形式。大地法術是綜合攻擊、防禦以及實用的法術。",
|
||||||
|
|
||||||
"#colour_sorcery秘術#colour_reset \n秘術是力量與變化的元素。\n秘術法師能操縱光線、重力,甚至現實世界本身來符合他們的需求。\n且不提其它用途,秘術法術可用來提供施法者魔法力量,或是任意移動物體。",
|
"#colour_sorcery秘術#colour_reset 秘術是力量與變化的元素。秘術法師能操縱光線、重力,甚至現實世界本身來符合他們的需求。且不提其它用途,秘術法術可用來提供施法者魔法力量,或是任意移動物體。",
|
||||||
|
|
||||||
"#colour_healing治療#colour_reset \n治療元素包括防禦和再生。\n治療法師會盡可能的保護自己及他們的同伴,因此可能會是非常難以對付的對手。\n治療法術在戰鬥中是不可或缺的,即便其通常不會用來進行攻擊,但是一些治療法術的淨化光芒會對不死生物造成相當大的傷害。",
|
"#colour_healing治療#colour_reset 治療元素包括防禦和再生。治療法師會盡可能的保護自己及他們的同伴,因此可能會是非常難以對付的對手。治療法術在戰鬥中是不可或缺的,即便其通常不會用來進行攻擊,但是一些治療法術的淨化光芒會對不死生物造成相當大的傷害。",
|
||||||
|
|
||||||
"不同元素之間的分界並不總是那麼明確,有些法術除了所屬元素的性質外,也會具有其它元素的特性。",
|
"不同元素之間的分界並不總是那麼明確,有些法術除了所屬元素的性質外,也會具有其它元素的特性。",
|
||||||
|
|
||||||
@@ -729,11 +729,11 @@
|
|||||||
|
|
||||||
"亞肯多魔法用品公司 - 為您所需的魔法物品!",
|
"亞肯多魔法用品公司 - 為您所需的魔法物品!",
|
||||||
|
|
||||||
"需要在旅行中為你的@wands 法杖@補充\n法力嗎?\n沒問題! 現在@mana 法力@可以裝瓶。\n只要用一個玻璃瓶及八個魔法水晶合成出法力瓶,就可以隨身攜帶。要用的時候,只要將你的法杖與法力瓶合成,就能將法力存入法杖。(註)",
|
"需要在旅行中為你的@wands 法杖@補充法力嗎?沒問題!現在@mana 法力@可以裝瓶。只要用一個玻璃瓶及八個魔法水晶合成出法力瓶,就可以隨身攜帶。要用的時候,只要將你的法杖與法力瓶合成,就能將法力存入法杖。(註)",
|
||||||
|
|
||||||
"#recipe medium_mana_flask",
|
"#recipe medium_mana_flask",
|
||||||
|
|
||||||
"好消息! 即日起推出全新的小瓶裝及大瓶裝法力,可依您的需求選擇!",
|
"好消息!即日起推出全新的小瓶裝及大瓶裝法力,可依您的需求選擇!",
|
||||||
|
|
||||||
"#recipe small_mana_flask",
|
"#recipe small_mana_flask",
|
||||||
"#recipe large_mana_flask",
|
"#recipe large_mana_flask",
|
||||||
@@ -749,7 +749,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"各種@spells 法術@的實體物,像是\n火焰彈、毒液彈、煙霧彈,還有電擊彈都能直接合成:",
|
"各種@spells 法術@的實體物,像是火焰彈、毒液彈、煙霧彈,還有電擊彈都能直接合成:",
|
||||||
|
|
||||||
"#recipe firebomb",
|
"#recipe firebomb",
|
||||||
"#recipe poison_bomb",
|
"#recipe poison_bomb",
|
||||||
@@ -765,7 +765,7 @@
|
|||||||
],
|
],
|
||||||
"text": [
|
"text": [
|
||||||
|
|
||||||
"近期的實驗顯示,在某種程度上只需要簡單的發射器就能自動施展@spells 法術@。沒有人知道原因,\n但看起來似乎是紅石的神奇特性竟然能觸發法術卷軸。只要將一些卷軸放入發射器,然後提供能量,就完成了這個機關..."
|
"近期的實驗顯示,在某種程度上只需要簡單的發射器就能自動施展@spells 法術@。沒有人知道原因,但看起來似乎是紅石的神奇特性竟然能觸發法術卷軸。只要將一些卷軸放入發射器,然後提供能量,就完成了這個機關..."
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
@@ -2,10 +2,10 @@
|
|||||||
{
|
{
|
||||||
"modid" : "ebwizardry",
|
"modid" : "ebwizardry",
|
||||||
"name" : "Electroblob's Wizardry",
|
"name" : "Electroblob's Wizardry",
|
||||||
"version" : "4.3.3",
|
"version" : "4.3.6",
|
||||||
"mcversion" : "1.12.2",
|
"mcversion" : "1.12.2",
|
||||||
"url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry",
|
"url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry",
|
||||||
"credits" : "\nDesigned, coded and textured by Electroblob.\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica, UltraHex, Azim-Palmer, raoulvdberge, rafasoares, xinyuan-liu, SettingDust.\nTranslators: Alsentar (Spanish), MadWrist (Mexican Spanish), VilagVil, kellixon, bigenergy, MugGod2 & DrHesperus (Russian), Hahdrim (French), lorrampi (Brazilian Portuguese), ZHENGLOC, dragon-evol, Hokorizero, TUsama & Determancer (Chinese - Simplified), shejery, rewi_wire, 방통 & red1854th (Korean), Trozuu & Olej (Polish), BirdyDragon & Lemopav (German), chesterccj305 (Chinese - Traditional), Bombadil (Hungarian).\nSound Effects: OhhWowProductions, fredzed, deleted_user_3277771, DiscoveryME, OGSoundFX, leosalom, juskiddink",
|
"credits" : "\nDesigned, coded and textured by Electroblob.\nDiscord Moderators: FavouriteDragon, WinDanesz\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica, UltraHex, Azim-Palmer, raoulvdberge, rafasoares, xinyuan-liu, SettingDust, Aralu115.\nTranslators: Alsentar (Spanish), MadWrist (Mexican Spanish), VilagVil, kellixon, bigenergy, MugGod2 & DrHesperus (Russian), Hahdrim & Crowller (French), lorrampi (Brazilian Portuguese), ZHENGLOC, dragon-evol, Hokorizero, TUsama & Determancer (Chinese - Simplified), shejery, rewi_wire, 방통 & red1854th (Korean), Trozuu & Olej (Polish), BirdyDragon & Lemopav (German), chesterccj305 (Chinese - Traditional), Bombadil (Hungarian).\nSound Effects: OhhWowProductions, fredzed, deleted_user_3277771, DiscoveryME, OGSoundFX, leosalom, juskiddink",
|
||||||
"authorList" : [
|
"authorList" : [
|
||||||
"Electroblob"
|
"Electroblob"
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user