Compare commits
102 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 937617d7af | |||
| 94751a6fd5 | |||
| 01ab50cb27 | |||
| d0bcbc8ed8 | |||
| b660b02e0e | |||
| 153ea74966 | |||
| c81830efec | |||
| 6ec2e716cb | |||
| 96e7c5885b | |||
| 41d575c9c9 | |||
| 7f31fc6259 | |||
| 817fd26dcf | |||
| 7237840a2a | |||
| 8ad6b5590b | |||
| 1c2c267e1a | |||
| e45bfb9248 | |||
| 0d48606b51 | |||
| 3c0b65c485 | |||
| 771118afde | |||
| 29b9e0de8b | |||
| f26f537f50 | |||
| 91c9a5392b | |||
| 6ae9df1204 | |||
| d46600ac86 | |||
| 004782a1e4 | |||
| b2b48cd8a1 | |||
| 2277f6b278 | |||
| ba59d9786f | |||
| bdf5aa5b64 | |||
| a384a57622 | |||
| 586840aa53 | |||
| 1ab674136b | |||
| 64e7e3844e | |||
| 51a3d2a63e | |||
| 7c2e786d0b | |||
| a7ee0ad847 | |||
| 033d90ed3e | |||
| 52214f81cf | |||
| 516d7948ee | |||
| a490168fa2 | |||
| 306137a026 | |||
| 0a5527f3d4 | |||
| 4dbe24c8ea | |||
| 5477725b7e | |||
| 81bba5e7e0 | |||
| 9c29142e6a | |||
| 3dc3a3a378 | |||
| 3151d7d626 | |||
| d68f968632 | |||
| 74d9198522 | |||
| 0b56d47022 | |||
| 587ab1338e | |||
| 4816c48aa6 | |||
| 2456589fa7 | |||
| d7849a94b1 | |||
| cfb9f4fe25 | |||
| a269cf339b | |||
| 1c8e4f86ee | |||
| f2835c245f | |||
| 462512ad30 | |||
| db5a7dcfde | |||
| 17bba5dea8 | |||
| fbdb5cd844 | |||
| 393fb1c1b0 | |||
| 08e89b1aef | |||
| 1f25d95b1b | |||
| 1f3a71797e | |||
| a821ef2aef | |||
| 6845279c49 | |||
| 79b745e005 | |||
| 6fff0e31d1 | |||
| 11efe56437 | |||
| 7f5786c28c | |||
| 85b49b330a | |||
| d797e72445 | |||
| 5f21b565cd | |||
| 9ed06c9a34 | |||
| 50f315666f | |||
| 62bdbc81e4 | |||
| 3a571fd239 | |||
| 4fb5452dc4 | |||
| 652f1d2620 | |||
| 275f514810 | |||
| 7cf09e76f8 | |||
| 61080134fd | |||
| 563bed3b25 | |||
| 75740c388f | |||
| 5d96f4d700 | |||
| df8fd21c0b | |||
| 046ecb1e41 | |||
| f3dd7bccd8 | |||
| d6b64b3576 | |||
| 22c00c47ff | |||
| 6d0e65c2b0 | |||
| 0a6fd452c1 | |||
| 28a8a4ff2a | |||
| 71c09cf16d | |||
| 794085660e | |||
| 3d89186308 | |||
| a0bd7b64d7 | |||
| 4c633c98ff | |||
| 45ff70c207 |
@@ -10,7 +10,7 @@ assignees: ''
|
||||
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]
|
||||
Wizardry version: 4.2.8 [change as necessary]
|
||||
Wizardry version: 4.2.11 [change 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.]
|
||||
|
||||
@@ -10,7 +10,7 @@ assignees: ''
|
||||
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]
|
||||
Wizardry version: 4.2.8 [change as necessary]
|
||||
Wizardry version: 4.2.11 [change as necessary]
|
||||
|
||||
Question details: [explain your question here]
|
||||
|
||||
|
||||
+7
-3
@@ -1,7 +1,7 @@
|
||||
# Credits
|
||||
|
||||
Electroblob's Wizardry
|
||||
Version 4.2.8
|
||||
Version 4.2.11
|
||||
For Minecraft 1.12.2
|
||||
|
||||
Designed, coded and textured by Electroblob
|
||||
@@ -24,15 +24,19 @@ In addition, I'd like to thank the following individuals for their contributions
|
||||
- UltraHex
|
||||
- Azim-Palmer
|
||||
- raoulvdberge
|
||||
- rafasoares
|
||||
|
||||
#### Translations
|
||||
|
||||
- Spanish and Mexican Spanish: MadWrist
|
||||
- Spanish: MadWrist, Alsentar
|
||||
- Mexican Spanish: MadWrist
|
||||
- Russian: VilagVil, kellixon, bigenergy
|
||||
- French: Hahdrim
|
||||
- Brazilian Portuguese: lorrampi
|
||||
- Chinese: ZHENGLOC, dragon-evol
|
||||
- Chinese: ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer
|
||||
- Korean: shejery, rewi_wire
|
||||
- Polish: Trozuu
|
||||
- German: BirdyDragon
|
||||
- Taiwanese: chesterccj305
|
||||
|
||||
Lightning ray sound effect from OhhWowProductions
|
||||
|
||||
+1
-1
@@ -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.
|
||||
|
||||
Minecraft version: 1.12.2 [change as necessary]
|
||||
Wizardry version: 4.2.8 [change as necessary]
|
||||
Wizardry version: 4.2.11 [change 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.]
|
||||
|
||||
+8
-36
@@ -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.
|
||||
|
||||
|
||||
version = "4.2.8" // There, it matches semver, happy now?
|
||||
version = "4.2.11" // There, it matches semver, happy now?
|
||||
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
archivesBaseName = "ElectroblobsWizardry"
|
||||
|
||||
@@ -31,15 +31,10 @@ repositories {
|
||||
name = "ModMaven"
|
||||
url = "modmaven.k-4u.nl"
|
||||
}
|
||||
flatDir {
|
||||
// evErYthINg hAS tO Be a mAVeN rEPoSiTOrY... (to use deobfProvided, for some reason)
|
||||
// The lack of documentation is actually quite impressive, see the following threads:
|
||||
// http://www.minecraftforge.net/forum/topic/44262-solved-how-to-build-mod-with-dependencies/
|
||||
// https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/mapping-and-modding-tutorials/2866817-setting-up-dependencies-in-minecraft-forge-with
|
||||
// http://www.minecraftforge.net/forum/topic/44534-adding-dependencies-to-a-forge-project/
|
||||
dirs "libsfordeobf" // Don't put src jars in libs or forge will think you have duplicate mods
|
||||
maven {
|
||||
name = "Curseforge Maven"
|
||||
url = "https://minecraft.curseforge.com/api/maven/"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
minecraft {
|
||||
@@ -56,37 +51,14 @@ minecraft {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// you may put jars on which you depend on in ./libs
|
||||
// or you may define them like so..
|
||||
//compile "some.group:artifact:version:classifier"
|
||||
//compile "some.group:artifact:version"
|
||||
|
||||
// compile against the JEI API but do not include it at runtime
|
||||
// Compile against the JEI API but do not include it at runtime
|
||||
deobfProvided "mezz.jei:jei_${mc_version}:${jei_version}:api"
|
||||
// at runtime, use the full JEI jar
|
||||
// At runtime, use the full JEI jar
|
||||
runtime "mezz.jei:jei_${mc_version}:${jei_version}"
|
||||
|
||||
//deobfProvided "baubles:baubles-1.12:1.5.2:api" // #ihavenoideawhatimdoing #itjustworks
|
||||
//runtime "baubles:baubles-1.12:1.5.2" // If in doubt, copy what already works
|
||||
|
||||
//deobfProvided "antiqueatlas:antiqueatlas-1.12.2:4.5.1:src"
|
||||
//runtime "antiqueatlas:antiqueatlas-1.12.2:4.5.1"
|
||||
|
||||
// real examples
|
||||
//compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env
|
||||
//compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env
|
||||
|
||||
// the 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
|
||||
//provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
|
||||
|
||||
// the deobf configurations: 'deobfCompile' and 'deobfProvided' are the same as the normal compile and provided,
|
||||
// except that these dependencies get remapped to your current MCP mappings
|
||||
//deobfCompile 'com.mod-buildcraft:buildcraft:6.0.8:dev'
|
||||
//deobfProvided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
|
||||
|
||||
// for more info...
|
||||
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
|
||||
// http://www.gradle.org/docs/current/userguide/dependency_management.html
|
||||
deobfCompile "baubles:Baubles:${mc_version_short}:${baubles_version}"
|
||||
deobfCompile "antique-atlas:antiqueatlas:${mc_version}:${antique_atlas_version}"
|
||||
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -2,4 +2,7 @@
|
||||
# This is required to provide enough memory for the Minecraft decompilation process.
|
||||
org.gradle.jvmargs=-Xmx3G
|
||||
mc_version=1.12.2
|
||||
jei_version=4.13.1.225
|
||||
mc_version_short=1.12
|
||||
jei_version=4.13.1.225
|
||||
baubles_version=1.5.2
|
||||
antique_atlas_version=4.6.3
|
||||
@@ -240,6 +240,20 @@ public class CommonProxy {
|
||||
|
||||
/** Starts the first-person blink overlay effect for the specified player. */
|
||||
public void playBlinkEffect(EntityPlayer player){}
|
||||
|
||||
/**
|
||||
* Starts the client-side screen shake effect for the specified player.
|
||||
* @param player The player whose screen is to be shaken
|
||||
* @param intensity The amplitude of the shaking (around 10 looks about right)
|
||||
*/
|
||||
public void shakeScreen(EntityPlayer player, float intensity){}
|
||||
|
||||
/**
|
||||
* Loads the given shader for the given player, if they have shaders enabled.
|
||||
* @param player The player to load the shader for
|
||||
* @param shader The location of the shader to load
|
||||
*/
|
||||
public void loadShader(EntityPlayer player, ResourceLocation shader){}
|
||||
|
||||
/**
|
||||
* Gets the client side world using Minecraft.getMinecraft().world. <b>Only to be called client side!</b> Returns
|
||||
|
||||
@@ -6,8 +6,10 @@ import electroblob.wizardry.spell.Spell;
|
||||
import electroblob.wizardry.util.AllyDesignationSystem.FriendlyFire;
|
||||
import electroblob.wizardry.util.MagicDamage;
|
||||
import electroblob.wizardry.util.MagicDamage.DamageType;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.text.translation.I18n;
|
||||
import net.minecraftforge.common.config.ConfigCategory;
|
||||
@@ -16,6 +18,8 @@ import net.minecraftforge.common.config.Property;
|
||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
@@ -90,7 +94,7 @@ public final class Settings {
|
||||
/** <b>[Server-only]</b> List of dimension ids in which to generate wizard towers. */
|
||||
public int[] towerDimensions = {0};
|
||||
/** <b>[Server-only]</b> The rarity of wizard towers, used by the world generator. Larger numbers are rarer. */
|
||||
public int towerRarity = 900;
|
||||
public int towerRarity = 700;
|
||||
/** <b>[Server-only]</b> List of structure file locations for wizard towers without loot chests. */
|
||||
public ResourceLocation[] towerFiles = {new ResourceLocation(Wizardry.MODID, "wizard_tower_0"),
|
||||
new ResourceLocation(Wizardry.MODID, "wizard_tower_1"),
|
||||
@@ -104,7 +108,7 @@ public final class Settings {
|
||||
/** <b>[Server-only]</b> List of dimension ids in which to generate obelisks. */
|
||||
public int[] obeliskDimensions = {0, -1};
|
||||
/** <b>[Server-only]</b> The rarity of obelisks, used by the world generator. Larger numbers are rarer. */
|
||||
public int obeliskRarity = 800;
|
||||
public int obeliskRarity = 600;
|
||||
/** <b>[Server-only]</b> List of structure file locations for obelisks. */
|
||||
public ResourceLocation[] obeliskFiles = {new ResourceLocation(Wizardry.MODID, "obelisk_0"),
|
||||
new ResourceLocation(Wizardry.MODID, "obelisk_1"),
|
||||
@@ -114,7 +118,7 @@ public final class Settings {
|
||||
/** <b>[Server-only]</b> List of dimension ids in which to generate shrines. */
|
||||
public int[] shrineDimensions = {0, -1};
|
||||
/** <b>[Server-only]</b> The rarity of shrines, used by the world generator. Larger numbers are rarer. */
|
||||
public int shrineRarity = 1500;
|
||||
public int shrineRarity = 1100;
|
||||
/** <b>[Server-only]</b> List of structure file locations for shrines. */
|
||||
public ResourceLocation[] shrineFiles = {new ResourceLocation(Wizardry.MODID, "shrine_0"),
|
||||
new ResourceLocation(Wizardry.MODID, "shrine_1"),
|
||||
@@ -125,7 +129,7 @@ public final class Settings {
|
||||
new ResourceLocation(Wizardry.MODID, "shrine_6"),
|
||||
new ResourceLocation(Wizardry.MODID, "shrine_7")};
|
||||
/** <b>[Server-only]</b> List of solid blocks (usually trees) which are ignored by the structure generators. */
|
||||
public ResourceLocation[] treeBlocks = toResourceLocations(DEFAULT_TREE_BLOCKS);
|
||||
public Pair<ResourceLocation, Short>[] treeBlocks = parseItemMetaStrings(DEFAULT_TREE_BLOCKS);
|
||||
/** <b>[Server-only]</b> The chance for wizard towers to generate with an evil wizard and chest inside. */
|
||||
public double evilWizardChance = 0.2;
|
||||
/** <b>[Server-only]</b> List of dimension ids in which to generate crystal ore. */
|
||||
@@ -164,8 +168,6 @@ public final class Settings {
|
||||
public boolean playerBlockDamage = true;
|
||||
/** <b>[Server-only]</b> Whether to revert to the old wand upgrade system, which only requires tomes of arcana. */
|
||||
public boolean legacyWandLevelling = false;
|
||||
/** <b>[Server-only]</b> Whether to replace Minecraft's own fireballs with wizardry fireballs. */
|
||||
public boolean replaceVanillaFireballs = true;
|
||||
/** <b>[Server-only]</b> Whether to replace Minecraft's distance-based fall damage calculation with an equivalent,
|
||||
* velocity-based one. */
|
||||
public boolean replaceVanillaFallDamage = true;
|
||||
@@ -190,15 +192,15 @@ public final class Settings {
|
||||
* <b>[Server-only]</b> List of registry names of items which cannot be smelted by the pocket furnace spell, in
|
||||
* addition to armour, tools and weapons.
|
||||
*/
|
||||
public ResourceLocation[] pocketFurnaceItemBlacklist = toResourceLocations("cobblestone", "netherrack");
|
||||
public Pair<ResourceLocation, Short>[] pocketFurnaceItemBlacklist = parseItemMetaStrings("cobblestone", "netherrack");
|
||||
/** <b>[Server-only]</b> List of registry names of blocks which can be detected by the divination spell. */
|
||||
public ResourceLocation[] divinationOreWhitelist = {};
|
||||
public Pair<ResourceLocation, Short>[] divinationOreWhitelist = parseItemMetaStrings(); // That works I guess
|
||||
/** <b>[Server-only]</b> List of registry names of items which count as swords for imbuement spells. */
|
||||
public ResourceLocation[] swordItemWhitelist = {};
|
||||
public Pair<ResourceLocation, Short>[] swordItemWhitelist = parseItemMetaStrings();
|
||||
/** <b>[Server-only]</b> List of registry names of items which count as bows for imbuement spells. */
|
||||
public ResourceLocation[] bowItemWhitelist = {};
|
||||
public Pair<ResourceLocation, Short>[] bowItemWhitelist = parseItemMetaStrings();
|
||||
/** <b>[Server-only]</b> Map of items to values which wizard trades may use as currency. */
|
||||
public Map<ResourceLocation, Integer> currencyItems = new HashMap<>();
|
||||
public Map<Pair<ResourceLocation, Short>, Integer> currencyItems = new HashMap<>();
|
||||
/** <b>[Server-only]</b> Global damage scaling factor for all player magic damage. */
|
||||
public double playerDamageScale = 1.0;
|
||||
/** <b>[Server-only]</b> Global damage scaling factor for all npc magic damage. */
|
||||
@@ -268,7 +270,9 @@ public final class Settings {
|
||||
* effect.
|
||||
*/
|
||||
public boolean slowTimeAffectsPlayers = true;
|
||||
/** <b>[Synchronised]</b> Chance of 'misreading' an undiscovered spell and triggering a forfeit instead. */
|
||||
/** <b>[Synchronised]</b> Whether to replace Minecraft's own fireballs with wizardry fireballs. */
|
||||
public boolean replaceVanillaFireballs = true;
|
||||
/** <b>[Synchronised]</b> Chance of 'misreading' an undiscovered spell and triggering a forfeit instead. */
|
||||
public double forfeitChance = 0.2;
|
||||
|
||||
// Client-only settings. These settings only affect client-side code and hence are not synced. Each client obeys
|
||||
@@ -296,6 +300,10 @@ public final class Settings {
|
||||
public boolean booksPauseGame = true;
|
||||
/** <b>[Client-only]</b> Whether to use custom shaders for certain spells. */
|
||||
public boolean useShaders = true;
|
||||
/** <b>[Client-only]</b> Whether to use the screen shake effect for certain spells. */
|
||||
public boolean screenShake = true;
|
||||
/** <b>[Client-only]</b> Whether to use the screen blink effect for teleportation spells. */
|
||||
public boolean blinkEffect = true;
|
||||
/** <b>[Client-only]</b> The position of the spell HUD. */
|
||||
public GuiPosition spellHUDPosition = GuiPosition.BOTTOM_LEFT;
|
||||
|
||||
@@ -652,41 +660,42 @@ public final class Settings {
|
||||
"List of registry names of blocks or items which cannot be smelted by the pocket furnace spell, in addition to armour, tools and weapons. Block/item names are not case sensitive. For mod items, prefix with the mod ID (e.g. " + Wizardry.MODID + ":crystal_ore).");
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".pocket_furnace_item_blacklist");
|
||||
property.setRequiresWorldRestart(true);
|
||||
pocketFurnaceItemBlacklist = getResourceLocationList(property);
|
||||
pocketFurnaceItemBlacklist = parseItemMetaStrings(property.getStringList());
|
||||
propOrder.add(property.getName());
|
||||
|
||||
property = config.get(GAMEPLAY_CATEGORY, "divinationOreWhitelist", new String[0], "List of registry names of ore blocks which can be detected by the divination spell. Block names are not case sensitive. For mod blocks, prefix with the mod ID (e.g. " + Wizardry.MODID + ":crystal_ore).");
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".divination_ore_whitelist");
|
||||
property.setRequiresWorldRestart(true);
|
||||
divinationOreWhitelist = getResourceLocationList(property);
|
||||
divinationOreWhitelist = parseItemMetaStrings(property.getStringList());
|
||||
propOrder.add(property.getName());
|
||||
|
||||
property = config.get(GAMEPLAY_CATEGORY, "swordItemWhitelist", new String[0], "List of registry names of items which should count as swords for imbuement spells. Most swords should work automatically, but those that don't can be added manually here. Item names are not case sensitive. For mod items, prefix with the mod ID (e.g. tconstruct:broadsword).");
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".sword_item_whitelist");
|
||||
property.setRequiresWorldRestart(true);
|
||||
swordItemWhitelist = getResourceLocationList(property);
|
||||
swordItemWhitelist = parseItemMetaStrings(property.getStringList());
|
||||
propOrder.add(property.getName());
|
||||
|
||||
property = config.get(GAMEPLAY_CATEGORY, "bowItemWhitelist", new String[0], "List of registry names of items which should count as bows for imbuement spells. Most bows should work automatically, but those that don't can be added manually here. Item names are not case sensitive. For mod items, prefix with the mod ID (e.g. tconstruct:shortbow).");
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".bow_item_whitelist");
|
||||
property.setRequiresWorldRestart(true);
|
||||
bowItemWhitelist = getResourceLocationList(property);
|
||||
bowItemWhitelist = parseItemMetaStrings(property.getStringList());
|
||||
propOrder.add(property.getName());
|
||||
|
||||
property = config.get(GAMEPLAY_CATEGORY, "currencyItems", new String[]{"gold_ingot 3", "emerald 6"}, "List of registry names of items which wizard trades can use as currency (in the first slot; the second slot is unaffected). Each entry in this list should consist of an item registry name, followed by a single space, then an integer which defines the 'value' of the item. Higher values mean fewer of that currency item are required for a given trade.",
|
||||
Pattern.compile("[A-Za-z:_]+ [0-9]+"));
|
||||
Pattern.compile("[A-Za-z0-9:_]+ [0-9]+"));
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".currency_items");
|
||||
property.setRequiresWorldRestart(true);
|
||||
propOrder.add(property.getName());
|
||||
currencyItems = new HashMap<>();
|
||||
for(String string : property.getStringList()){
|
||||
string = string.toLowerCase(Locale.ROOT).trim();
|
||||
String[] args = string.split(" ");
|
||||
if(args.length != 2){
|
||||
Wizardry.logger.warn("Invalid entry in currency items: {}", string);
|
||||
continue; // Ignore invalid entries, the pattern above should ensure this never happens
|
||||
}
|
||||
try {
|
||||
currencyItems.put(new ResourceLocation(args[0]), Integer.parseInt(args[1]));
|
||||
currencyItems.put(parseItemMetaString(args[0]), Integer.parseInt(args[1]));
|
||||
}catch(NumberFormatException e){
|
||||
Wizardry.logger.warn("Invalid integer in currency items: {}", args[1]);
|
||||
}
|
||||
@@ -791,7 +800,7 @@ public final class Settings {
|
||||
property = config.get(GAMEPLAY_CATEGORY, "treeBlocks", DEFAULT_TREE_BLOCKS, "List of registry names of blocks which can be overwritten by wizardry's structure generators, affecting both fast and fancy structure generation. Most tree blocks and other foliage should work automatically, but those that don't can be added manually here. Block names are not case sensitive. For mod blocks, prefix with the mod ID (e.g. dynamictrees:oakbranch).");
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".tree_blocks");
|
||||
property.setRequiresWorldRestart(true);
|
||||
treeBlocks = getResourceLocationList(property);
|
||||
treeBlocks = parseItemMetaStrings(property.getStringList());
|
||||
propOrder.add(property.getName());
|
||||
|
||||
property = config.get(WORLDGEN_CATEGORY, "oreDimensions", new int[]{0}, "List of dimension ids in which crystal ore will generate. Note that removing the overworld (id 0) from this list will make the mod VERY difficult to play!");
|
||||
@@ -873,6 +882,18 @@ public final class Settings {
|
||||
useShaders = property.getBoolean();
|
||||
propOrder.add(property.getName());
|
||||
|
||||
property = config.get(CLIENT_CATEGORY, "screenShake", true, "Whether to use the screen shake effect for certain spells.");
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".screen_shake");
|
||||
Wizardry.proxy.setToNamedBooleanEntry(property);
|
||||
screenShake = property.getBoolean();
|
||||
propOrder.add(property.getName());
|
||||
|
||||
property = config.get(CLIENT_CATEGORY, "blinkEffect", true, "Whether to use the screen blink effect for teleportation spells.");
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".blink_effect");
|
||||
Wizardry.proxy.setToNamedBooleanEntry(property);
|
||||
blinkEffect = property.getBoolean();
|
||||
propOrder.add(property.getName());
|
||||
|
||||
config.setCategoryPropertyOrder(CLIENT_CATEGORY, propOrder);
|
||||
}
|
||||
|
||||
@@ -1082,4 +1103,45 @@ public final class Settings {
|
||||
public static ResourceLocation[] toResourceLocations(String... strings){
|
||||
return Arrays.stream(strings).map(s -> new ResourceLocation(s.toLowerCase(Locale.ROOT).trim())).toArray(ResourceLocation[]::new);
|
||||
}
|
||||
|
||||
/** Applies {@link Settings#parseItemMetaString(String)} to each input string and returns and array of the resulting
|
||||
* {@link Pair}s. */
|
||||
@SuppressWarnings("unchecked") // Shut up java
|
||||
public static Pair<ResourceLocation, Short>[] parseItemMetaStrings(String... strings){
|
||||
return Arrays.stream(strings).map(Settings::parseItemMetaString).toArray(Pair[]::new);
|
||||
}
|
||||
|
||||
/** Parses the given input string as an item of the form {@code id:metadata} and returns the resulting
|
||||
* {@link ResourceLocation} ID and metadata value as a {@link Pair} object. */
|
||||
public static Pair<ResourceLocation, Short> parseItemMetaString(String string){
|
||||
|
||||
string = string.toLowerCase(Locale.ROOT).trim();
|
||||
|
||||
String[] itemArgs = string.split(":");
|
||||
String item;
|
||||
short meta;
|
||||
|
||||
try {
|
||||
meta = Short.parseShort(itemArgs[itemArgs.length-1]);
|
||||
item = String.join(":", Arrays.copyOfRange(itemArgs, 0, itemArgs.length-1));
|
||||
}catch(NumberFormatException e){ // If no metadata is specified
|
||||
meta = OreDictionary.WILDCARD_VALUE;
|
||||
item = string;
|
||||
}
|
||||
|
||||
return Pair.of(new ResourceLocation(item), meta);
|
||||
}
|
||||
|
||||
public static boolean containsMetaBlock(Pair<ResourceLocation, Short>[] array, IBlockState block){
|
||||
return containsMetaThing(array, block.getBlock().getRegistryName(), (short)block.getBlock().getMetaFromState(block));
|
||||
}
|
||||
|
||||
public static boolean containsMetaItem(Pair<ResourceLocation, Short>[] array, ItemStack stack){
|
||||
return containsMetaThing(array, stack.getItem().getRegistryName(), (short)stack.getMetadata());
|
||||
}
|
||||
|
||||
public static boolean containsMetaThing(Pair<ResourceLocation, Short>[] array, ResourceLocation id, short metadata){
|
||||
return Arrays.asList(array).contains(Pair.of(id, metadata)) || Arrays.asList(array).contains(Pair.of(id, (short)OreDictionary.WILDCARD_VALUE));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ import java.util.Calendar;
|
||||
*/
|
||||
|
||||
@Mod(modid = Wizardry.MODID, name = Wizardry.NAME, version = Wizardry.VERSION, acceptedMinecraftVersions = "[1.12.2]",
|
||||
guiFactory = "electroblob.wizardry.WizardryGuiFactory", dependencies = "required-after:forge@[14.23.5.2814,)")
|
||||
guiFactory = "electroblob.wizardry.WizardryGuiFactory", dependencies = "required-after:forge@[14.23.5.2814,);after:antiqueatlas@[4.6,)")
|
||||
|
||||
public class Wizardry {
|
||||
|
||||
@@ -64,7 +64,7 @@ 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.11.x versions, and so on.
|
||||
*/
|
||||
public static final String VERSION = "4.2.8";
|
||||
public static final String VERSION = "4.2.11";
|
||||
|
||||
// IDEA: Triggering of inbuilt Forge events in relevant places?
|
||||
// IDEA: Abstract the vanilla particles behind the particle builder
|
||||
|
||||
@@ -290,7 +290,7 @@ public final class WizardryEventHandler {
|
||||
EntityLivingBase attacker = (EntityLivingBase)event.getSource().getTrueSource();
|
||||
|
||||
// Players can only ever attack with their main hand, so this is the right method to use here.
|
||||
if(!attacker.getHeldItemMainhand().isEmpty() && ImbueWeapon.isSword(attacker.getHeldItemMainhand().getItem())){
|
||||
if(!attacker.getHeldItemMainhand().isEmpty() && ImbueWeapon.isSword(attacker.getHeldItemMainhand())){
|
||||
|
||||
int level = EnchantmentHelper.getEnchantmentLevel(WizardryEnchantments.flaming_weapon,
|
||||
attacker.getHeldItemMainhand());
|
||||
@@ -420,7 +420,7 @@ public final class WizardryEventHandler {
|
||||
@SubscribeEvent // Priority doesn't matter here, we're only setting event fields so if it's cancelled it won't matter
|
||||
public static void onLivingFallEvent(LivingFallEvent event){
|
||||
// Why is fall damage based on distance fallen? Why? Who on earth came up with that? It makes no sense whatsoever!
|
||||
if(Wizardry.settings.replaceVanillaFallDamage && !Loader.isModLoaded("speedbasedfalldamage")){
|
||||
if(!event.getEntity().world.isRemote && Wizardry.settings.replaceVanillaFallDamage && !Loader.isModLoaded("speedbasedfalldamage")){
|
||||
// We want to keep the fall damage EXACTLY THE SAME for free, uninterrupted falls, but fix the weirdness
|
||||
// caused when something else changes the entity's velocity
|
||||
// All living entities have a gravity of 0.08b/t^2
|
||||
|
||||
@@ -107,7 +107,9 @@ public class BlockPedestal extends Block implements ITileEntityProvider {
|
||||
natural = true;
|
||||
metadata -= ELEMENT.getAllowedValues().size();
|
||||
}
|
||||
return this.getDefaultState().withProperty(ELEMENT, Element.values()[metadata]).withProperty(NATURAL, natural);
|
||||
Element element = Element.values()[metadata];
|
||||
if(!ELEMENT.getAllowedValues().contains(element)) return this.getDefaultState().withProperty(NATURAL, natural);
|
||||
return this.getDefaultState().withProperty(ELEMENT, element).withProperty(NATURAL, natural);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -69,7 +69,9 @@ public class BlockRunestone extends Block {
|
||||
|
||||
@Override
|
||||
public IBlockState getStateFromMeta(int metadata){
|
||||
return this.getDefaultState().withProperty(ELEMENT, Element.values()[metadata]);
|
||||
Element element = Element.values()[metadata];
|
||||
if(!ELEMENT.getAllowedValues().contains(element)) return this.getDefaultState();
|
||||
return this.getDefaultState().withProperty(ELEMENT, element);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -18,6 +18,7 @@ import net.minecraft.item.Item;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.BlockRenderLayer;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.EnumBlockRenderType;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
@@ -54,21 +55,24 @@ public class BlockSnare extends Block implements ITileEntityProvider {
|
||||
@Override
|
||||
public void onEntityCollision(World world, BlockPos pos, IBlockState state, Entity entity){
|
||||
|
||||
if(!world.isRemote && entity instanceof EntityLivingBase){
|
||||
if(entity instanceof EntityLivingBase){
|
||||
|
||||
if(world.getTileEntity(pos) instanceof TileEntityPlayerSave){
|
||||
|
||||
TileEntityPlayerSave tileentity = (TileEntityPlayerSave)world.getTileEntity(pos);
|
||||
|
||||
if(AllyDesignationSystem.isValidTarget(tileentity.getCaster(), entity)){
|
||||
|
||||
entity.attackEntityFrom(MagicDamage.causeDirectMagicDamage(tileentity.getCaster(), DamageType.MAGIC),
|
||||
Spells.snare.getProperty(Spell.DAMAGE).floatValue());
|
||||
DamageSource source = tileentity.getCaster() == null ? DamageSource.CACTUS
|
||||
: MagicDamage.causeDirectMagicDamage(tileentity.getCaster(), DamageType.MAGIC);
|
||||
|
||||
entity.attackEntityFrom(source, Spells.snare.getProperty(Spell.DAMAGE).floatValue());
|
||||
|
||||
((EntityLivingBase)entity).addPotionEffect(new PotionEffect(MobEffects.SLOWNESS,
|
||||
Spells.snare.getProperty(Spell.EFFECT_DURATION).intValue(),
|
||||
Spells.snare.getProperty(Spell.EFFECT_STRENGTH).intValue()));
|
||||
|
||||
world.destroyBlock(pos, false);
|
||||
if(!world.isRemote) world.destroyBlock(pos, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,9 +137,11 @@ public class BlockThorns extends BlockBush implements ITileEntityProvider {
|
||||
TileEntity tileentity = world.getTileEntity(pos);
|
||||
|
||||
if(tileentity instanceof TileEntityPlayerSaveTimed){
|
||||
if(AllyDesignationSystem.isValidTarget(((TileEntityPlayerSaveTimed)tileentity).getCaster(), target)){
|
||||
source = MagicDamage.causeDirectMagicDamage(((TileEntityPlayerSaveTimed)tileentity).getCaster(),
|
||||
MagicDamage.DamageType.MAGIC);
|
||||
|
||||
EntityLivingBase caster = ((TileEntityPlayerSaveTimed)tileentity).getCaster();
|
||||
|
||||
if(caster != null && AllyDesignationSystem.isValidTarget(caster, target)){
|
||||
source = MagicDamage.causeDirectMagicDamage(caster, MagicDamage.DamageType.MAGIC);
|
||||
}else{
|
||||
return false; // Don't attack or slow allies of the caster
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ import electroblob.wizardry.item.ItemScroll;
|
||||
import electroblob.wizardry.item.ItemSpellBook;
|
||||
import electroblob.wizardry.item.ItemWand;
|
||||
import electroblob.wizardry.packet.*;
|
||||
import electroblob.wizardry.potion.PotionSlowTime;
|
||||
import electroblob.wizardry.registry.Spells;
|
||||
import electroblob.wizardry.registry.WizardrySounds;
|
||||
import electroblob.wizardry.spell.*;
|
||||
@@ -195,6 +194,18 @@ public class ClientProxy extends CommonProxy {
|
||||
if(Minecraft.getMinecraft().player == player) WizardryClientEventHandler.playBlinkEffect();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shakeScreen(EntityPlayer player, float intensity){
|
||||
if(Minecraft.getMinecraft().player == player) WizardryClientEventHandler.shakeScreen(intensity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadShader(EntityPlayer player, ResourceLocation shader){
|
||||
if(Minecraft.getMinecraft().player == player && Wizardry.settings.useShaders
|
||||
&& !Minecraft.getMinecraft().entityRenderer.isShaderActive())
|
||||
Minecraft.getMinecraft().entityRenderer.loadShader(shader);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getSpellHUDSkins(){
|
||||
return GuiSpellDisplay.getSkinKeys();
|
||||
@@ -549,6 +560,12 @@ public class ClientProxy extends CommonProxy {
|
||||
data.randomDescriptions = new HashMap<>();
|
||||
|
||||
for(Spell spell : Spell.getAllSpells()){
|
||||
|
||||
if(spell.networkID() > message.names.size()){
|
||||
Wizardry.logger.warn("Received no glyph data for spell {}, skipping", spell.getRegistryName());
|
||||
continue;
|
||||
}
|
||||
|
||||
// -1 because the none spell isn't included
|
||||
// This is a case where we must use the network ID, not the metadata
|
||||
data.randomNames.put(spell, message.names.get(spell.networkID() - 1));
|
||||
|
||||
@@ -68,18 +68,44 @@ public final class WizardryClientEventHandler {
|
||||
private static int blinkEffectTimer;
|
||||
/** The number of ticks the blink effect lasts for. */
|
||||
private static final int BLINK_EFFECT_DURATION = 8;
|
||||
|
||||
/** The remaining time for which the screen shake effect will be active. */
|
||||
private static int screenShakeCounter = 0;
|
||||
private static final float SHAKINESS = 0.5f;
|
||||
|
||||
/** Starts the first person blink overlay effect. */
|
||||
/** Starts the first-person blink overlay effect. */
|
||||
public static void playBlinkEffect(){
|
||||
blinkEffectTimer = BLINK_EFFECT_DURATION;
|
||||
if(Wizardry.settings.blinkEffect) blinkEffectTimer = BLINK_EFFECT_DURATION;
|
||||
}
|
||||
|
||||
/** Starts the client-side screen shake effect. */
|
||||
public static void shakeScreen(float intensity){
|
||||
if(Wizardry.settings.screenShake){
|
||||
screenShakeCounter = (int)(intensity / SHAKINESS);
|
||||
Minecraft.getMinecraft().player.rotationPitch -= intensity * 0.5f; // Start halfway down
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onPlayerTickEvent(TickEvent.PlayerTickEvent event){
|
||||
|
||||
if(event.player == Minecraft.getMinecraft().player){
|
||||
if(event.player == Minecraft.getMinecraft().player && event.phase == TickEvent.Phase.END){
|
||||
|
||||
if(blinkEffectTimer > 0) blinkEffectTimer--;
|
||||
if(Wizardry.settings.blinkEffect){
|
||||
if(blinkEffectTimer > 0) blinkEffectTimer--;
|
||||
}else{
|
||||
blinkEffectTimer = 0;
|
||||
}
|
||||
|
||||
if(Wizardry.settings.screenShake){
|
||||
if(screenShakeCounter > 0){
|
||||
float magnitude = screenShakeCounter * SHAKINESS;
|
||||
Minecraft.getMinecraft().player.rotationPitch += screenShakeCounter % 2 == 0 ? magnitude : -magnitude;
|
||||
screenShakeCounter--;
|
||||
}
|
||||
}else{
|
||||
screenShakeCounter = 0;
|
||||
}
|
||||
|
||||
// Only seems to work here...
|
||||
// EntityLiving victim = Possession.getPossessee(Minecraft.getMinecraft().player);
|
||||
|
||||
@@ -13,6 +13,7 @@ import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
@@ -32,9 +33,7 @@ public class GuiSpellBook extends GuiScreen {
|
||||
this.spell = Spell.byMetadata(stack.getItemDamage());
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the screen and all the components in it.
|
||||
*/
|
||||
@Override
|
||||
public void drawScreen(int par1, int par2, float par3){
|
||||
|
||||
int xPos = this.width / 2 - xSize / 2;
|
||||
@@ -69,22 +68,18 @@ public class GuiSpellBook extends GuiScreen {
|
||||
0x777777);
|
||||
}
|
||||
|
||||
//this.fontRenderer.drawString("-------------------", xPos + 17, yPos + 35, 0);
|
||||
// Novice is usually white but this doesn't show up
|
||||
String tier = I18n.format("gui.ebwizardry:spell_book.tier", spell.getTier() == Tier.NOVICE ?
|
||||
"\u00A77" + spell.getTier().getDisplayName() : spell.getTier().getDisplayNameWithFormatting());
|
||||
this.fontRenderer.drawString(tier, xPos + 17, yPos + 45, 0);
|
||||
|
||||
if(spell.getTier() == Tier.NOVICE){
|
||||
// Novice is usually white but this doesn't show up.
|
||||
this.fontRenderer.drawString("Tier: \u00A77" + Tier.NOVICE.getDisplayName(), xPos + 17, yPos + 45, 0);
|
||||
}else{
|
||||
this.fontRenderer.drawString("Tier: " + spell.getTier().getDisplayNameWithFormatting(), xPos + 17, yPos + 45, 0);
|
||||
}
|
||||
|
||||
String element = "Element: " + spell.getElement().getFormattingCode() + spell.getElement().getDisplayName();
|
||||
if(!discovered) element = "Element: ?";
|
||||
String element = I18n.format("gui.ebwizardry:spell_book.element", spell.getElement().getFormattingCode() + spell.getElement().getDisplayName());
|
||||
if(!discovered) element = I18n.format("gui.ebwizardry:spell_book.element_undiscovered");
|
||||
this.fontRenderer.drawString(element, xPos + 17, yPos + 57, 0);
|
||||
|
||||
String manaCost = "Mana Cost: " + spell.getCost();
|
||||
if(spell.isContinuous) manaCost = "Mana Cost: " + spell.getCost() + "/second";
|
||||
if(!discovered) manaCost = "Mana Cost: ?";
|
||||
String manaCost = I18n.format("gui.ebwizardry:spell_book.mana_cost", spell.getCost());
|
||||
if(spell.isContinuous) manaCost = I18n.format("gui.ebwizardry:spell_book.mana_cost_continuous", spell.getCost());
|
||||
if(!discovered) manaCost = I18n.format("gui.ebwizardry:spell_book.mana_cost_undiscovered");
|
||||
this.fontRenderer.drawString(manaCost, xPos + 17, yPos + 69, 0);
|
||||
|
||||
if(discovered){
|
||||
@@ -95,6 +90,7 @@ public class GuiSpellBook extends GuiScreen {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui(){
|
||||
super.initGui();
|
||||
Keyboard.enableRepeatEvents(true);
|
||||
@@ -103,6 +99,7 @@ public class GuiSpellBook extends GuiScreen {
|
||||
this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(WizardrySounds.MISC_BOOK_OPEN, 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuiClosed(){
|
||||
super.onGuiClosed();
|
||||
Keyboard.enableRepeatEvents(false);
|
||||
|
||||
@@ -96,7 +96,10 @@ public class GuiSpellDisplay {
|
||||
// Normally when extending Gui, you'd have to have an instance to access its methods. However, we're not actually
|
||||
// using any of them, so this class may as well not bother and just be a static event handler. Neat!
|
||||
@SubscribeEvent
|
||||
public static void draw(RenderGameOverlayEvent event){
|
||||
public static void draw(RenderGameOverlayEvent.Post event){
|
||||
|
||||
if(event.getType() != RenderGameOverlayEvent.ElementType.TEXT
|
||||
&& event.getType() != RenderGameOverlayEvent.ElementType.HOTBAR) return;
|
||||
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
|
||||
@@ -20,9 +20,6 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Mod.EventBusSubscriber(Side.CLIENT)
|
||||
public class RenderArcaneLock {
|
||||
|
||||
@@ -39,36 +36,44 @@ public class RenderArcaneLock {
|
||||
|
||||
EntityPlayer player = Minecraft.getMinecraft().player;
|
||||
World world = Minecraft.getMinecraft().world;
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.enableBlend();
|
||||
boolean lighting = GL11.glIsEnabled(GL11.GL_LIGHTING);
|
||||
GlStateManager.disableLighting();
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
||||
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
Vec3d origin = player.getPositionEyes(event.getPartialTicks());
|
||||
GlStateManager.translate(-origin.x, -origin.y + player.getEyeHeight(), -origin.z);
|
||||
|
||||
GlStateManager.color(1, 1, 1, 1);
|
||||
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(textures[(player.ticksExisted % (textures.length * 2))/2]);
|
||||
|
||||
Tessellator tessellator = Tessellator.getInstance();
|
||||
BufferBuilder buffer = tessellator.getBuffer();
|
||||
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
|
||||
|
||||
// Someone managed to get a CME here so let's just copy the list to be safe
|
||||
boolean flag = false;
|
||||
boolean lighting = false;
|
||||
|
||||
// Someone managed to get a CME here so let's iterate manually to be safe (don't copy the list, it's expensive!)
|
||||
// It's only cosmetic so if a tileentity somehow gets removed while we're rendering them it's not a big deal
|
||||
List<TileEntity> tileentities = new ArrayList<>(world.loadedTileEntityList);
|
||||
for(int i=0; i<world.loadedTileEntityList.size(); i++){
|
||||
|
||||
for(TileEntity tileentity : tileentities){
|
||||
TileEntity tileentity = world.loadedTileEntityList.get(i);
|
||||
|
||||
if(tileentity == null) continue; // What the heck VoxelMap
|
||||
|
||||
if(tileentity.getDistanceSq(origin.x, origin.y, origin.z) <= tileentity.getMaxRenderDistanceSquared()
|
||||
&& tileentity.getTileData().hasUniqueId(ArcaneLock.NBT_KEY)){
|
||||
|
||||
if(!flag){
|
||||
|
||||
flag = true;
|
||||
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.enableBlend();
|
||||
lighting = GL11.glIsEnabled(GL11.GL_LIGHTING);
|
||||
GlStateManager.disableLighting();
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
||||
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
GlStateManager.translate(-origin.x, -origin.y + player.getEyeHeight(), -origin.z);
|
||||
|
||||
GlStateManager.color(1, 1, 1, 1);
|
||||
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(textures[(player.ticksExisted % (textures.length * 2))/2]);
|
||||
|
||||
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
|
||||
}
|
||||
|
||||
Vec3d[] vertices = WizardryUtilities.getVertices(world.getBlockState(tileentity.getPos()).getBoundingBox(world, tileentity.getPos()).grow(0.05).offset(tileentity.getPos()));
|
||||
|
||||
drawFace(buffer, vertices[0], vertices[1], vertices[3], vertices[2], 0, 0, 1, 1); // Bottom
|
||||
@@ -81,15 +86,19 @@ public class RenderArcaneLock {
|
||||
}
|
||||
}
|
||||
|
||||
tessellator.draw();
|
||||
if(flag){
|
||||
|
||||
GlStateManager.disableBlend();
|
||||
GlStateManager.enableTexture2D();
|
||||
if (lighting) {
|
||||
GlStateManager.enableLighting();
|
||||
tessellator.draw();
|
||||
|
||||
GlStateManager.disableBlend();
|
||||
GlStateManager.enableTexture2D();
|
||||
if(lighting){
|
||||
GlStateManager.enableLighting();
|
||||
}
|
||||
GlStateManager.disableRescaleNormal();
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
GlStateManager.disableRescaleNormal();
|
||||
GlStateManager.popMatrix();
|
||||
|
||||
}
|
||||
|
||||
private static void drawFace(BufferBuilder buffer, Vec3d topLeft, Vec3d topRight, Vec3d bottomLeft, Vec3d bottomRight, float u1, float v1, float u2, float v2){
|
||||
|
||||
@@ -68,7 +68,7 @@ public class EnchantmentMagicProtection extends Enchantment {
|
||||
|
||||
public enum Type {
|
||||
|
||||
MAGIC("magic", 1, 5, 8, s -> s instanceof IElementalDamage),
|
||||
MAGIC("magic", 1, 5, 8, s -> s instanceof IElementalDamage || s.isMagicDamage()),
|
||||
FROST("frost", 2, 10, 8, s -> s instanceof IElementalDamage && ((IElementalDamage)s).getType() == MagicDamage.DamageType.FROST),
|
||||
SHOCK("shock", 2, 10, 8, s -> s instanceof IElementalDamage && ((IElementalDamage)s).getType() == MagicDamage.DamageType.SHOCK);
|
||||
// Fire already exists, and the other types aren't used enough to be worth having
|
||||
|
||||
@@ -120,9 +120,9 @@ public interface Imbuement {
|
||||
|
||||
ItemStack bow = archer.getHeldItemMainhand();
|
||||
|
||||
if(!ImbueWeapon.isBow(bow.getItem())){
|
||||
if(!ImbueWeapon.isBow(bow)){
|
||||
bow = archer.getHeldItemOffhand();
|
||||
if(!ImbueWeapon.isBow(bow.getItem())) return;
|
||||
if(!ImbueWeapon.isBow(bow)) return;
|
||||
}
|
||||
|
||||
// Taken directly from ItemBow, so it works exactly the same as the power enchantment.
|
||||
|
||||
@@ -5,9 +5,11 @@ import electroblob.wizardry.registry.Spells;
|
||||
import electroblob.wizardry.registry.WizardryBlocks;
|
||||
import electroblob.wizardry.registry.WizardrySounds;
|
||||
import electroblob.wizardry.spell.Meteor;
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.MoverType;
|
||||
import net.minecraft.entity.item.EntityFallingBlock;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.world.World;
|
||||
@@ -61,9 +63,9 @@ public class EntityMeteor extends EntityFallingBlock {
|
||||
this.motionY *= 0.9800000190734863D;
|
||||
this.motionZ *= 0.9800000190734863D;
|
||||
|
||||
if(!this.world.isRemote){
|
||||
if(this.onGround){
|
||||
|
||||
if(this.onGround){
|
||||
if(!this.world.isRemote){
|
||||
|
||||
this.motionX *= 0.699999988079071D;
|
||||
this.motionZ *= 0.699999988079071D;
|
||||
@@ -72,8 +74,13 @@ public class EntityMeteor extends EntityFallingBlock {
|
||||
Spells.meteor.getProperty(Meteor.BLAST_STRENGTH).floatValue() * blastMultiplier,
|
||||
damageBlocks, damageBlocks);
|
||||
this.setDead();
|
||||
|
||||
}else{
|
||||
WizardryUtilities.getEntitiesWithinRadius(15, posX, posY, posZ, world, EntityPlayer.class)
|
||||
.forEach(p -> Wizardry.proxy.shakeScreen(p, 10));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,7 +7,6 @@ import electroblob.wizardry.util.MagicDamage.DamageType;
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.item.EntityFallingBlock;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.init.MobEffects;
|
||||
import net.minecraft.network.play.server.SPacketEntityVelocity;
|
||||
@@ -97,18 +96,6 @@ public class EntityEarthquake extends EntityMagicConstruct {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!world.isRemote){
|
||||
// Constant 15 blocks for now
|
||||
List<EntityPlayer> targets2 = WizardryUtilities.getEntitiesWithinRadius(15, posX, posY, posZ, world, EntityPlayer.class);
|
||||
|
||||
float magnitude = 10f * ((float)(this.lifetime - this.ticksExisted))/(float)this.lifetime;
|
||||
|
||||
// Makes the screen shake
|
||||
for(EntityPlayer target : targets2){
|
||||
target.rotationPitch += this.ticksExisted % 2 == 0 ? magnitude : -magnitude;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -169,6 +169,7 @@ public class EntityHammer extends EntityMagicConstruct {
|
||||
public void fall(float distance, float damageMultiplier){
|
||||
|
||||
if(world.isRemote){
|
||||
|
||||
for(int i = 0; i < 40; i++){
|
||||
double particleX = this.posX - 1.0d + 2 * rand.nextDouble();
|
||||
double particleZ = this.posZ - 1.0d + 2 * rand.nextDouble();
|
||||
@@ -180,6 +181,12 @@ public class EntityHammer extends EntityMagicConstruct {
|
||||
particleX - this.posX, 0, particleZ - this.posZ, Block.getStateId(block));
|
||||
}
|
||||
}
|
||||
|
||||
if(this.fallDistance > 10){
|
||||
WizardryUtilities.getEntitiesWithinRadius(10, posX, posY, posZ, world, EntityPlayer.class)
|
||||
.forEach(p -> Wizardry.proxy.shakeScreen(p, 6));
|
||||
}
|
||||
|
||||
}else{
|
||||
// Just to check the hammer has actually fallen from the sky, rather than the block under it being broken.
|
||||
if(this.fallDistance > 10){
|
||||
|
||||
@@ -10,6 +10,7 @@ import electroblob.wizardry.util.WizardryUtilities;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.MoverType;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
@@ -61,10 +62,9 @@ public class EntityIceSpike extends EntityMagicConstruct {
|
||||
if(!this.world.isRemote){
|
||||
for(Object entity : this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox())){
|
||||
if(entity instanceof EntityLivingBase && this.isValidTarget((EntityLivingBase)entity)){
|
||||
DamageSource source = this.getCaster() == null ? DamageSource.MAGIC : MagicDamage.causeDirectMagicDamage(this.getCaster(), DamageType.FROST);
|
||||
// Potion effect only gets added if the damage succeeded.
|
||||
if(((EntityLivingBase)entity).attackEntityFrom(
|
||||
MagicDamage.causeDirectMagicDamage(this.getCaster(), DamageType.FROST),
|
||||
Spells.ice_spikes.getProperty(Spell.DAMAGE).floatValue() * this.damageMultiplier))
|
||||
if(((EntityLivingBase)entity).attackEntityFrom(source, Spells.ice_spikes.getProperty(Spell.DAMAGE).floatValue() * this.damageMultiplier))
|
||||
((EntityLivingBase)entity).addPotionEffect(new PotionEffect(WizardryPotions.frost,
|
||||
Spells.ice_spikes.getProperty(Spell.EFFECT_DURATION).intValue(),
|
||||
Spells.ice_spikes.getProperty(Spell.EFFECT_STRENGTH).intValue()));
|
||||
|
||||
@@ -120,8 +120,10 @@ public class EntityMagicSlime extends EntitySlime implements ISummonedCreature {
|
||||
&& ((EntityLivingBase)this.getRidingEntity()).getHealth() > 0){
|
||||
if(this.ticksExisted % 16 == 1){
|
||||
this.getRidingEntity().attackEntityFrom(DamageSource.MAGIC, 1);
|
||||
((EntityLivingBase)this.getRidingEntity())
|
||||
.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 20, 2));
|
||||
if(this.getRidingEntity() != null){ // Some mobs force-dismount when attacked (normally when dying)
|
||||
((EntityLivingBase)this.getRidingEntity())
|
||||
.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 20, 2));
|
||||
}
|
||||
this.playSound(WizardrySounds.ENTITY_MAGIC_SLIME_ATTACK, 1.0f, 1.0f);
|
||||
this.squishAmount = 0.5F;
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.*;
|
||||
@@ -502,7 +503,6 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
||||
ItemStack anySpellBook = new ItemStack(WizardryItems.spell_book, 1, OreDictionary.WILDCARD_VALUE);
|
||||
ItemStack crystalStack = new ItemStack(WizardryItems.magic_crystal, 5);
|
||||
|
||||
// NOTE: For wizardry 1.2, increase the number of uses of this trade. The default is 7, for reference.
|
||||
this.trades.add(new MerchantRecipe(anySpellBook, crystalStack));
|
||||
|
||||
this.addRandomRecipes(3);
|
||||
@@ -587,12 +587,14 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
||||
|
||||
// TODO: Switch all of this over to some kind of loot pool system?
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private ItemStack getRandomPrice(Tier tier){
|
||||
|
||||
Map<ResourceLocation, Integer> map = Wizardry.settings.currencyItems;
|
||||
Map<Pair<ResourceLocation, Short>, Integer> map = Wizardry.settings.currencyItems;
|
||||
// This isn't that efficient but it's not called very often really so it doesn't matter
|
||||
ResourceLocation itemName = map.keySet().toArray(new ResourceLocation[0])[rand.nextInt(map.size())];
|
||||
Item item = Item.REGISTRY.getObject(itemName);
|
||||
Pair<ResourceLocation, Short> itemName = map.keySet().toArray(new Pair[0])[rand.nextInt(map.size())];
|
||||
Item item = Item.REGISTRY.getObject(itemName.getLeft());
|
||||
short meta = itemName.getRight();
|
||||
int value;
|
||||
|
||||
if(item == null){
|
||||
@@ -606,7 +608,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
||||
// ((tier.ordinal() + 1) * 16 + rand.nextInt(6)) gives a 'value' for the item being bought
|
||||
// This is then divided by the value of the currency item to give a price
|
||||
// The absolute maximum stack size that can result from this calculation (with value = 1) is 64.
|
||||
return new ItemStack(item, (8 + tier.ordinal() * 16 + rand.nextInt(9)) / value);
|
||||
return new ItemStack(item, (8 + tier.ordinal() * 16 + rand.nextInt(9)) / value, meta);
|
||||
}
|
||||
|
||||
private ItemStack getRandomItemOfTier(Tier tier){
|
||||
|
||||
@@ -9,7 +9,6 @@ import electroblob.wizardry.util.MagicDamage.DamageType;
|
||||
import electroblob.wizardry.util.ParticleBuilder;
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
@@ -48,13 +47,7 @@ public class EntityIceball extends EntityMagicProjectile {
|
||||
|
||||
}else{
|
||||
|
||||
boolean flag = true;
|
||||
|
||||
if(this.getThrower() != null && this.getThrower() instanceof EntityLiving){
|
||||
flag = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this.getThrower());
|
||||
}
|
||||
|
||||
if(flag){
|
||||
if(this.getThrower() == null || WizardryUtilities.canDamageBlocks(this.getThrower(), world)){
|
||||
|
||||
BlockPos pos = rayTrace.getBlockPos();
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package electroblob.wizardry.entity.projectile;
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.registry.Spells;
|
||||
import electroblob.wizardry.spell.Spell;
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.projectile.EntityLargeFireball;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
@@ -50,7 +51,7 @@ public class EntityLargeMagicFireball extends EntityMagicFireball {
|
||||
protected void onImpact(RayTraceResult rayTrace){
|
||||
|
||||
if(!world.isRemote){
|
||||
boolean flag = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this.thrower);
|
||||
boolean flag = this.getThrower() == null || WizardryUtilities.canDamageBlocks(this.getThrower(), world);
|
||||
this.world.newExplosion(null, this.posX, this.posY, this.posZ, getExplosionPower() * blastMultiplier, flag, flag);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,9 +6,9 @@ import electroblob.wizardry.spell.Spell;
|
||||
import electroblob.wizardry.util.MagicDamage;
|
||||
import electroblob.wizardry.util.MagicDamage.DamageType;
|
||||
import electroblob.wizardry.util.ParticleBuilder;
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.projectile.EntitySmallFireball;
|
||||
import net.minecraft.init.Blocks;
|
||||
@@ -84,13 +84,7 @@ public class EntityMagicFireball extends EntityMagicProjectile {
|
||||
|
||||
}else{
|
||||
|
||||
boolean flag = true;
|
||||
|
||||
if(this.getThrower() != null && this.getThrower() instanceof EntityLiving){
|
||||
flag = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this.getThrower());
|
||||
}
|
||||
|
||||
if(flag){
|
||||
if(this.getThrower() == null || WizardryUtilities.canDamageBlocks(this.getThrower(), world)){
|
||||
|
||||
BlockPos blockpos = rayTrace.getBlockPos().offset(rayTrace.sideHit);
|
||||
|
||||
|
||||
+27
-3
@@ -1,11 +1,17 @@
|
||||
package electroblob.wizardry.integration.antiqueatlas;
|
||||
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import hunternif.mc.atlas.AntiqueAtlasMod;
|
||||
import hunternif.mc.atlas.api.AtlasAPI;
|
||||
import hunternif.mc.atlas.marker.GlobalMarkersData;
|
||||
import hunternif.mc.atlas.marker.Marker;
|
||||
import hunternif.mc.atlas.registry.MarkerType;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import net.minecraftforge.fml.common.Loader;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
/**
|
||||
* This class handles all of wizardry's integration with the <i>Antique Atlas</i> mod. This class contains only the code
|
||||
@@ -15,6 +21,7 @@ import net.minecraftforge.fml.common.Loader;
|
||||
* @since Wizardry 4.2
|
||||
* @author Electroblob
|
||||
*/
|
||||
@Mod.EventBusSubscriber
|
||||
public class WizardryAntiqueAtlasIntegration {
|
||||
|
||||
public static final String ANTIQUE_ATLAS_MOD_ID = "antiqueatlas";
|
||||
@@ -38,7 +45,7 @@ public class WizardryAntiqueAtlasIntegration {
|
||||
* {@link electroblob.wizardry.Settings#autoTowerMarkers} is enabled. Server side only! */
|
||||
public static void markTower(World world, int x, int z){
|
||||
if(enabled() && Wizardry.settings.autoTowerMarkers){
|
||||
AtlasAPI.getMarkerAPI().putGlobalMarker(world, false, TOWER_MARKER.toString(), "integration.antiqueatlas.marker." + TOWER_MARKER.toString(), x, z);
|
||||
AtlasAPI.getMarkerAPI().putGlobalMarker(world, false, TOWER_MARKER.toString(), "integration.antiqueatlas.marker." + TOWER_MARKER.toString().replace(':', '.'), x, z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +53,7 @@ public class WizardryAntiqueAtlasIntegration {
|
||||
* {@link electroblob.wizardry.Settings#autoObeliskMarkers} is enabled. Server side only! */
|
||||
public static void markObelisk(World world, int x, int z){
|
||||
if(enabled() && Wizardry.settings.autoObeliskMarkers){
|
||||
AtlasAPI.getMarkerAPI().putGlobalMarker(world, false, OBELISK_MARKER.toString(), "integration.antiqueatlas.marker." + OBELISK_MARKER.toString(), x, z);
|
||||
AtlasAPI.getMarkerAPI().putGlobalMarker(world, false, OBELISK_MARKER.toString(), "integration.antiqueatlas.marker." + OBELISK_MARKER.toString().replace(':', '.'), x, z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +61,7 @@ public class WizardryAntiqueAtlasIntegration {
|
||||
* {@link electroblob.wizardry.Settings#autoShrineMarkers} is enabled. Server side only! */
|
||||
public static void markShrine(World world, int x, int z){
|
||||
if(enabled() && Wizardry.settings.autoShrineMarkers){
|
||||
AtlasAPI.getMarkerAPI().putGlobalMarker(world, false, SHRINE_MARKER.toString(), "integration.antiqueatlas.marker." + SHRINE_MARKER.toString(), x, z);
|
||||
AtlasAPI.getMarkerAPI().putGlobalMarker(world, false, SHRINE_MARKER.toString(), "integration.antiqueatlas.marker." + SHRINE_MARKER.toString().replace(':', '.'), x, z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,4 +75,21 @@ public class WizardryAntiqueAtlasIntegration {
|
||||
AtlasAPI.getMarkerAPI().registerMarker(new MarkerType(OBELISK_MARKER, new ResourceLocation(Wizardry.MODID, "textures/integration/antiqueatlas/obelisk.png")));
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onWorldLoadEvent(WorldEvent.Load event){
|
||||
|
||||
if(!enabled()) return;
|
||||
|
||||
// Backwards compatibility for existing markers using the old translation key format (with colons)
|
||||
GlobalMarkersData data = AntiqueAtlasMod.globalMarkersData.getData();
|
||||
for(Marker marker : data.getMarkersInDimension(event.getWorld().provider.getDimension())){
|
||||
if(marker.getLabel().contains(":")){
|
||||
// Remove old-format markers and replace them with new ones
|
||||
data.removeMarker(marker.getId());
|
||||
AtlasAPI.getMarkerAPI().putGlobalMarker(event.getWorld(), marker.isVisibleAhead(), marker.getType(),
|
||||
marker.getLabel().replace(':', '.'), marker.getX(), marker.getZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -375,7 +375,7 @@ public class ItemArtefact extends Item {
|
||||
if(artefact == WizardryItems.ring_battlemage){
|
||||
|
||||
if(player.getHeldItemOffhand().getItem() instanceof ISpellCastingItem
|
||||
&& ImbueWeapon.isSword(player.getHeldItemMainhand().getItem())){
|
||||
&& ImbueWeapon.isSword(player.getHeldItemMainhand())){
|
||||
modifiers.set(SpellModifiers.POTENCY, 1.1f * potency, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ import electroblob.wizardry.registry.WizardryRecipes;
|
||||
import electroblob.wizardry.registry.WizardryTabs;
|
||||
import electroblob.wizardry.util.SpellModifiers;
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
import net.minecraft.enchantment.Enchantment;
|
||||
import net.minecraft.enchantment.EnchantmentMending;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
@@ -194,7 +196,13 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
||||
public boolean getIsRepairable(ItemStack stack, ItemStack material){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// This is misleadingly-named, it also applies to enchanting with books at an anvil
|
||||
@Override
|
||||
public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment){
|
||||
return !(enchantment instanceof EnchantmentMending) && super.canApplyAtEnchantingTable(stack, enchantment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Properly handles the defence value of the armour. This method is responsible for the tooltip on top of
|
||||
* the armour value. It is also what handles armour toughness.
|
||||
|
||||
@@ -7,6 +7,7 @@ import electroblob.wizardry.constants.Tier;
|
||||
import electroblob.wizardry.data.WizardData;
|
||||
import electroblob.wizardry.item.ItemScroll;
|
||||
import electroblob.wizardry.item.ItemSpellBook;
|
||||
import electroblob.wizardry.registry.Spells;
|
||||
import electroblob.wizardry.spell.Spell;
|
||||
import electroblob.wizardry.util.SpellProperties;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@@ -16,9 +17,9 @@ import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.storage.loot.LootContext;
|
||||
import net.minecraft.world.storage.loot.conditions.LootCondition;
|
||||
import net.minecraft.world.storage.loot.functions.LootFunction;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
@@ -76,89 +77,94 @@ public class RandomSpell extends LootFunction {
|
||||
if(!(stack.getItem() instanceof ItemSpellBook) && !(stack.getItem() instanceof ItemScroll)) Wizardry.logger
|
||||
.warn("Applying the random_spell loot function to an item that isn't a spell book or scroll.");
|
||||
|
||||
Tier tier;
|
||||
Element element;
|
||||
|
||||
if(ignoreWeighting){
|
||||
if(tiers == null || tiers.isEmpty()){
|
||||
tier = Tier.values()[random.nextInt(Tier.values().length)];
|
||||
}else{
|
||||
tier = tiers.get(random.nextInt(tiers.size()));
|
||||
}
|
||||
}else{
|
||||
if(tiers == null || tiers.isEmpty()){
|
||||
tier = Tier.getWeightedRandomTier(random);
|
||||
}else{
|
||||
tier = Tier.getWeightedRandomTier(random, tiers.toArray(new Tier[0]));
|
||||
}
|
||||
}
|
||||
|
||||
// Elements aren't weighted
|
||||
if(elements == null || elements.isEmpty()){
|
||||
// Element can only be MAGIC if tier is NOVICE
|
||||
if(tier == Tier.NOVICE){
|
||||
element = Element.values()[random.nextInt(Element.values().length)];
|
||||
}else{
|
||||
Element[] elements = ArrayUtils.removeElement(Element.values(), Element.MAGIC);
|
||||
element = elements[random.nextInt(elements.length)];
|
||||
}
|
||||
}else{
|
||||
// In theory, swapping this line to the commented one should make absolutely no difference.
|
||||
element = elements.get(random.nextInt(elements.size()));
|
||||
// element = null;
|
||||
}
|
||||
|
||||
SpellProperties.Context spellContext = context.getLootedEntity() == null ? SpellProperties.Context.TREASURE
|
||||
: SpellProperties.Context.LOOTING;
|
||||
|
||||
// Here's a thought: does randomly selecting the element beforehand (as opposed to leaving it null and letting
|
||||
// the spell randomiser use any element) change the overall outcome at all?
|
||||
List<Spell> spellsList = Spell.getSpells(new Spell.TierElementFilter(tier, element, spellContext));
|
||||
|
||||
spellsList.removeIf(s -> !s.applicableForItem(stack.getItem()));
|
||||
if(stack.getItem() instanceof ItemScroll) spellsList.removeIf(s -> !s.isEnabled(SpellProperties.Context.SCROLL));
|
||||
if(stack.getItem() instanceof ItemSpellBook) spellsList.removeIf(s -> !s.isEnabled(SpellProperties.Context.BOOK));
|
||||
|
||||
// Ensures the tier chosen actually has spells in it, and if not uses NOVICE instead. NOVICE always has at least
|
||||
// the NONE spell since this spell cannot be disabled.
|
||||
// Commented out for now because it will interfere with the ability to specify tiers and elements.
|
||||
// To be honest, I may as well just say that if you disable enough spells to make this important, you deserve
|
||||
// less loot!
|
||||
/* if(spells.isEmpty()){ spellsList = Spell.getSpells(new Spell.TierElementFilter(EnumTier.NOVICE, null));
|
||||
* if(stack.getItem() instanceof ItemScroll) spellsList.retainAll(Spell.getSpells(Spell.nonContinuousSpells));
|
||||
* } */
|
||||
|
||||
if(spells != null && !spells.isEmpty()){
|
||||
spellsList.retainAll(spells);
|
||||
}
|
||||
|
||||
// This method is badly-named, loot chests pass a player through too, not just mobs
|
||||
// (And WHY does it only return an entity?! The underlying field is always a player so I'm casting it anyway)
|
||||
EntityPlayer player = (EntityPlayer)context.getKillerPlayer();
|
||||
|
||||
Spell spell = pickRandomSpell(stack, random, spellContext, player);
|
||||
|
||||
if(spell == Spells.none) Wizardry.logger.warn("Tried to apply the random_spell loot function to an item, but no"
|
||||
+ " enabled spells matched the criteria specified. Substituting placeholder (metadata 0) item.");
|
||||
|
||||
stack.setItemDamage(spell.metadata());
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
private Spell pickRandomSpell(ItemStack stack, Random random, SpellProperties.Context spellContext, EntityPlayer player){
|
||||
|
||||
// We're now doing this first because we need to know which spells we have to play with before selecting a tier and element
|
||||
List<Spell> possibleSpells = Spell.getSpells(s -> s.isEnabled(spellContext) && s.applicableForItem(stack.getItem())
|
||||
// Remove excluded tiers/elements immediately (mainly because empty tier checks should account for excluded elements)
|
||||
&& (tiers == null || tiers.contains(s.getTier())) && (elements == null || elements.contains(s.getElement())));
|
||||
|
||||
if(spells != null && !spells.isEmpty()){
|
||||
possibleSpells.retainAll(spells); // Normally you wouldn't specify a spells list AND tiers/elements... but you could!
|
||||
}
|
||||
|
||||
if(stack.getItem() instanceof ItemScroll) possibleSpells.removeIf(s -> !s.isEnabled(SpellProperties.Context.SCROLL));
|
||||
if(stack.getItem() instanceof ItemSpellBook) possibleSpells.removeIf(s -> !s.isEnabled(SpellProperties.Context.BOOK));
|
||||
|
||||
// Select a tier...
|
||||
|
||||
List<Tier> possibleTiers = new ArrayList<>();
|
||||
|
||||
if(tiers == null || tiers.isEmpty()){
|
||||
possibleTiers.addAll(Arrays.asList(Tier.values()));
|
||||
}else{
|
||||
possibleTiers.addAll(tiers);
|
||||
}
|
||||
// Remove all empty tiers
|
||||
possibleTiers.removeIf(t -> possibleSpells.stream().noneMatch(s -> s.getTier() == t)); // Lambdaception!
|
||||
|
||||
if(possibleTiers.isEmpty()) return Spells.none; // Gotta disable a lot of spells for this to happen
|
||||
|
||||
Tier tier = ignoreWeighting ? possibleTiers.get(random.nextInt(possibleTiers.size()))
|
||||
: Tier.getWeightedRandomTier(random, possibleTiers.toArray(new Tier[0]));
|
||||
|
||||
// Remove all spells that aren't of the selected tier
|
||||
possibleSpells.removeIf(s -> s.getTier() != tier);
|
||||
if(possibleSpells.isEmpty()) return Spells.none; // Should be caught by the no-elements check but we might as well
|
||||
|
||||
// Select an element...
|
||||
|
||||
List<Element> possibleElements = new ArrayList<>();
|
||||
|
||||
// Elements aren't weighted
|
||||
if(elements == null || elements.isEmpty()){
|
||||
possibleElements.addAll(Arrays.asList(Element.values()));
|
||||
}else{
|
||||
possibleElements.addAll(elements);
|
||||
}
|
||||
// Remove all empty elements
|
||||
possibleElements.removeIf(e -> possibleSpells.stream().noneMatch(s -> s.getElement() == e));
|
||||
|
||||
if(possibleElements.isEmpty()) return Spells.none; // A bit more likely I guess, but still pretty unlikely
|
||||
|
||||
Element element = possibleElements.get(random.nextInt(possibleElements.size()));
|
||||
|
||||
// Remove all spells that aren't of the selected tier
|
||||
possibleSpells.removeIf(s -> s.getElement() != element);
|
||||
if(possibleSpells.isEmpty()) return Spells.none; // If it fails anywhere, it'll most likely be here
|
||||
|
||||
// Remove either the undiscovered spells or the discovered ones, depending on the bias
|
||||
if(undiscoveredBias > 0 && player != null){
|
||||
|
||||
WizardData data = WizardData.get(player);
|
||||
|
||||
int discoveredCount = (int)spellsList.stream().filter(data::hasSpellBeenDiscovered).count();
|
||||
int discoveredCount = (int)possibleSpells.stream().filter(data::hasSpellBeenDiscovered).count();
|
||||
// If none have been discovered or they've all been discovered, don't bother!
|
||||
if(discoveredCount > 0 && discoveredCount < spellsList.size()){
|
||||
if(discoveredCount > 0 && discoveredCount < possibleSpells.size()){
|
||||
// Kinda unintuitive but it's very neat!
|
||||
boolean keepDiscovered = random.nextFloat() < 0.5f + 0.5f * undiscoveredBias;
|
||||
spellsList.removeIf(s -> keepDiscovered != data.hasSpellBeenDiscovered(s));
|
||||
possibleSpells.removeIf(s -> keepDiscovered != data.hasSpellBeenDiscovered(s));
|
||||
}
|
||||
}
|
||||
|
||||
if(spellsList.isEmpty()){
|
||||
Wizardry.logger.warn("Tried to apply the random_spell loot function to an item, but no enabled spells"
|
||||
+ "matched the criteria specified. Substituting placeholder (metadata 0) item.");
|
||||
stack.setItemDamage(0);
|
||||
}else{
|
||||
stack.setItemDamage(spellsList.get(random.nextInt(spellsList.size())).metadata());
|
||||
}
|
||||
|
||||
return stack;
|
||||
return possibleSpells.get(random.nextInt(possibleSpells.size())); // Finally pick a spell
|
||||
}
|
||||
|
||||
public static class Serializer extends LootFunction.Serializer<RandomSpell> {
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package electroblob.wizardry.misc;
|
||||
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTUtil;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.village.MerchantRecipe;
|
||||
import net.minecraft.village.MerchantRecipeList;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
@@ -46,12 +48,42 @@ public class WildcardTradeList extends MerchantRecipeList {
|
||||
}
|
||||
|
||||
private boolean areItemStacksExactlyEqual(ItemStack stack1, ItemStack stack2){
|
||||
// Added to allow wildcards; this line is the only actual change.
|
||||
// Added to allow wildcards
|
||||
if((stack1.getItemDamage() == OreDictionary.WILDCARD_VALUE || stack2.getItemDamage() == OreDictionary.WILDCARD_VALUE)
|
||||
// Can't use ItemStack.areItemsEqualIgnoreDurability because that only works for items with durability, not subtypes.
|
||||
&& stack1.getItem() == stack2.getItem()) return true;
|
||||
|
||||
return ItemStack.areItemsEqual(stack1, stack2) && (!stack2.hasTagCompound() || stack1.hasTagCompound() && NBTUtil.areNBTEquals(stack2.getTagCompound(), stack1.getTagCompound(), false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToBuf(PacketBuffer buffer){
|
||||
|
||||
buffer.writeByte((byte)(this.size() & 255));
|
||||
|
||||
// Trick the client into thinking this is a normal item
|
||||
for(MerchantRecipe merchantrecipe : this){
|
||||
|
||||
ItemStack itemToBuy = merchantrecipe.getItemToBuy();
|
||||
if(itemToBuy.getMetadata() == OreDictionary.WILDCARD_VALUE) itemToBuy = WizardryUtilities.copyWithMeta(itemToBuy, 0);
|
||||
buffer.writeItemStack(itemToBuy);
|
||||
|
||||
ItemStack itemToSell = merchantrecipe.getItemToSell();
|
||||
if(itemToSell.getMetadata() == OreDictionary.WILDCARD_VALUE) itemToSell = WizardryUtilities.copyWithMeta(itemToSell, 0);
|
||||
buffer.writeItemStack(itemToSell);
|
||||
|
||||
ItemStack secondItemToBuy = merchantrecipe.getSecondItemToBuy();
|
||||
buffer.writeBoolean(!secondItemToBuy.isEmpty());
|
||||
|
||||
if(!secondItemToBuy.isEmpty()){
|
||||
if(secondItemToBuy.getMetadata() == OreDictionary.WILDCARD_VALUE) secondItemToBuy = WizardryUtilities.copyWithMeta(secondItemToBuy, 0);
|
||||
buffer.writeItemStack(secondItemToBuy);
|
||||
}
|
||||
|
||||
buffer.writeBoolean(merchantrecipe.isRecipeDisabled());
|
||||
buffer.writeInt(merchantrecipe.getToolUses());
|
||||
buffer.writeInt(merchantrecipe.getMaxTradeUses());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ public class PacketSyncSettings implements IMessageHandler<Message, IMessage> {
|
||||
Wizardry.settings.discoveryMode = message.settings.discoveryMode;
|
||||
Wizardry.settings.creativeBypassesArcaneLock = message.settings.creativeBypassesArcaneLock;
|
||||
Wizardry.settings.slowTimeAffectsPlayers = message.settings.slowTimeAffectsPlayers;
|
||||
Wizardry.settings.replaceVanillaFireballs = message.settings.replaceVanillaFireballs;
|
||||
Wizardry.settings.forfeitChance = message.settings.forfeitChance;
|
||||
}
|
||||
|
||||
@@ -56,6 +57,7 @@ public class PacketSyncSettings implements IMessageHandler<Message, IMessage> {
|
||||
settings.discoveryMode = buf.readBoolean();
|
||||
settings.creativeBypassesArcaneLock = buf.readBoolean();
|
||||
settings.slowTimeAffectsPlayers = buf.readBoolean();
|
||||
settings.replaceVanillaFireballs = buf.readBoolean();
|
||||
settings.forfeitChance = buf.readFloat();
|
||||
}
|
||||
|
||||
@@ -64,6 +66,7 @@ public class PacketSyncSettings implements IMessageHandler<Message, IMessage> {
|
||||
buf.writeBoolean(settings.discoveryMode);
|
||||
buf.writeBoolean(settings.creativeBypassesArcaneLock);
|
||||
buf.writeBoolean(settings.slowTimeAffectsPlayers);
|
||||
buf.writeBoolean(settings.replaceVanillaFireballs);
|
||||
buf.writeFloat((float)settings.forfeitChance); // Configs don't have floats but this can only be 0-1 anyway
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,9 +172,9 @@ public class PotionSlowTime extends PotionMagicEffect implements ISyncedPotion {
|
||||
@SubscribeEvent
|
||||
public static void onPotionAddedEvent(PotionEvent.PotionAddedEvent event){
|
||||
if(event.getEntity().world.isRemote && event.getPotionEffect().getPotion() == WizardryPotions.slow_time
|
||||
&& event.getEntity() == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SlowTime.SHADER);
|
||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect();
|
||||
&& event.getEntity() instanceof EntityPlayer){
|
||||
Wizardry.proxy.loadShader((EntityPlayer)event.getEntity(), SlowTime.SHADER);
|
||||
Wizardry.proxy.playBlinkEffect((EntityPlayer)event.getEntity());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -67,6 +67,9 @@ public final class WizardryLoot {
|
||||
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/wizard_armour"));
|
||||
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/arcane_tomes"));
|
||||
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/wand_upgrades"));
|
||||
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/uncommon_artefacts"));
|
||||
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/rare_artefacts"));
|
||||
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/epic_artefacts"));
|
||||
LootTableList.register(new ResourceLocation(Wizardry.MODID, "entities/evil_wizard"));
|
||||
LootTableList.register(new ResourceLocation(Wizardry.MODID, "entities/mob_additions"));
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package electroblob.wizardry.spell;
|
||||
|
||||
import electroblob.wizardry.Settings;
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.block.BlockCrystalOre;
|
||||
import electroblob.wizardry.registry.WizardryItems;
|
||||
@@ -21,6 +22,7 @@ import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.world.World;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
@@ -65,11 +67,13 @@ public class Divination extends Spell {
|
||||
|
||||
List<BlockPos> sphere = WizardryUtilities.getBlockSphere(caster.getPosition(), range);
|
||||
|
||||
sphere.removeIf(b -> !(world.getBlockState(b).getBlock() instanceof BlockOre
|
||||
|| world.getBlockState(b).getBlock() instanceof BlockRedstoneOre
|
||||
|| world.getBlockState(b).getBlock() instanceof BlockCrystalOre
|
||||
|| Arrays.asList(Wizardry.settings.divinationOreWhitelist)
|
||||
.contains(world.getBlockState(b).getBlock().getRegistryName())));
|
||||
sphere.removeIf(b -> {
|
||||
Block block = world.getBlockState(b).getBlock();
|
||||
return !(block instanceof BlockOre
|
||||
|| block instanceof BlockRedstoneOre
|
||||
|| block instanceof BlockCrystalOre
|
||||
|| Settings.containsMetaBlock(Wizardry.settings.divinationOreWhitelist, world.getBlockState(b)));
|
||||
});
|
||||
|
||||
Strength strength = Strength.NOTHING;
|
||||
|
||||
@@ -87,9 +91,6 @@ public class Divination extends Spell {
|
||||
(float)(target.getY() + 0.5 - (caster.getEntityBoundingBox().minY + caster.getEyeHeight())),
|
||||
(float)(target.getZ() + 0.5 - caster.posZ));
|
||||
|
||||
if(world.isRemote) ParticleBuilder.create(ParticleBuilder.Type.SPARKLE).pos(target.getX() + 0.5,
|
||||
target.getY() + 1.5, target.getZ() + 0.5).spawn(world);
|
||||
|
||||
strength = Strength.forWeight(calculateWeight(world, caster, target, range, modifiers));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package electroblob.wizardry.spell;
|
||||
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.entity.construct.EntityEarthquake;
|
||||
import electroblob.wizardry.registry.WizardryItems;
|
||||
import electroblob.wizardry.util.SpellModifiers;
|
||||
@@ -7,6 +8,7 @@
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.EnumAction;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumParticleTypes;
|
||||
@@ -53,6 +55,10 @@
|
||||
world.spawnParticle(EnumParticleTypes.BLOCK_DUST, particleX, y,
|
||||
particleZ, particleX - x, 0, particleZ - z, Block.getStateId(block));
|
||||
}
|
||||
|
||||
WizardryUtilities.getEntitiesWithinRadius(15, x, y, z, world, EntityPlayer.class)
|
||||
.forEach(p -> Wizardry.proxy.shakeScreen(p, 12));
|
||||
|
||||
}
|
||||
|
||||
return super.spawnConstruct(world, x, y, z, side, caster, modifiers);
|
||||
|
||||
@@ -31,7 +31,7 @@ public class FlamingWeapon extends Spell {
|
||||
|
||||
for(ItemStack stack : WizardryUtilities.getPrioritisedHotbarAndOffhand(caster)){
|
||||
|
||||
if((ImbueWeapon.isSword(stack.getItem()) || ImbueWeapon.isBow(stack.getItem()))
|
||||
if((ImbueWeapon.isSword(stack) || ImbueWeapon.isBow(stack))
|
||||
&& !EnchantmentHelper.getEnchantments(stack).containsKey(WizardryEnchantments.flaming_weapon)){
|
||||
// The enchantment level as determined by the damage multiplier. The + 0.5f is so that
|
||||
// weird float processing doesn't incorrectly round it down.
|
||||
|
||||
@@ -37,7 +37,7 @@ public class FreezingWeapon extends Spell {
|
||||
|
||||
for(ItemStack stack : WizardryUtilities.getPrioritisedHotbarAndOffhand(caster)){
|
||||
|
||||
if((ImbueWeapon.isSword(stack.getItem()) || ImbueWeapon.isBow(stack.getItem()))
|
||||
if((ImbueWeapon.isSword(stack) || ImbueWeapon.isBow(stack))
|
||||
&& !EnchantmentHelper.getEnchantments(stack).containsKey(WizardryEnchantments.freezing_weapon)){
|
||||
// The enchantment level as determined by the damage multiplier. The + 0.5f is so that
|
||||
// weird float processing doesn't incorrectly round it down.
|
||||
|
||||
@@ -210,6 +210,8 @@ public class Grapple extends Spell {
|
||||
@Override
|
||||
public boolean cast(World world, EntityLiving caster, EnumHand hand, int ticksInUse, EntityLivingBase target, SpellModifiers modifiers){
|
||||
|
||||
if(target == null) return false;
|
||||
|
||||
Vec3d origin = new Vec3d(caster.posX, caster.getEntityBoundingBox().minY + caster.getEyeHeight(), caster.posZ);
|
||||
|
||||
// If the target is an entity, we need to use the entity's centre rather than the original hit position
|
||||
|
||||
@@ -18,6 +18,7 @@ import net.minecraft.item.EnumAction;
|
||||
import net.minecraft.network.play.server.SPacketEntityVelocity;
|
||||
import net.minecraft.tileentity.TileEntityDispenser;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
@@ -86,7 +87,8 @@ public class GreaterTelekinesis extends SpellRay {
|
||||
|
||||
Vec3d look = caster.getLookVec().scale(getProperty(THROW_VELOCITY).floatValue() * modifiers.get(WizardryItems.range_upgrade));
|
||||
target.addVelocity(look.x, look.y, look.z);
|
||||
if(caster instanceof EntityPlayer) caster.swingArm(caster.getActiveHand());
|
||||
// No IntelliJ, it's not always false, that's not how polymorphism works
|
||||
if(caster instanceof EntityPlayer) caster.swingArm(caster.getActiveHand() == null ? EnumHand.MAIN_HAND : caster.getActiveHand());
|
||||
|
||||
}else{
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import electroblob.wizardry.util.ParticleBuilder;
|
||||
import electroblob.wizardry.util.SpellModifiers;
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.EnumAction;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
@@ -19,6 +20,11 @@ public class HealAlly extends SpellRay {
|
||||
addProperties(HEALTH);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeCastBy(EntityLiving npc, boolean override){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean onEntityHit(World world, Entity target, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package electroblob.wizardry.spell;
|
||||
|
||||
import electroblob.wizardry.Settings;
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.constants.Constants;
|
||||
import electroblob.wizardry.data.WizardData;
|
||||
@@ -11,9 +12,13 @@ import electroblob.wizardry.util.SpellModifiers;
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
import net.minecraft.enchantment.EnchantmentHelper;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.*;
|
||||
import net.minecraft.item.EnumAction;
|
||||
import net.minecraft.item.ItemBow;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemSword;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.world.World;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@@ -32,7 +37,7 @@ public class ImbueWeapon extends Spell {
|
||||
|
||||
for(ItemStack stack : WizardryUtilities.getPrioritisedHotbarAndOffhand(caster)){
|
||||
|
||||
if(isSword(stack.getItem())
|
||||
if(isSword(stack)
|
||||
&& !EnchantmentHelper.getEnchantments(stack).containsKey(WizardryEnchantments.magic_sword)
|
||||
&& WizardData.get(caster).getImbuementDuration(WizardryEnchantments.magic_sword) <= 0){
|
||||
// The enchantment level as determined by the damage multiplier. The + 0.5f is so that
|
||||
@@ -44,7 +49,7 @@ public class ImbueWeapon extends Spell {
|
||||
WizardData.get(caster).setImbuementDuration(WizardryEnchantments.magic_sword,
|
||||
(int)(getProperty(EFFECT_DURATION).floatValue() * modifiers.get(WizardryItems.duration_upgrade)));
|
||||
|
||||
}else if(isBow(stack.getItem())
|
||||
}else if(isBow(stack)
|
||||
&& !EnchantmentHelper.getEnchantments(stack).containsKey(WizardryEnchantments.magic_bow)
|
||||
&& WizardData.get(caster).getImbuementDuration(WizardryEnchantments.magic_bow) <= 0){
|
||||
// The enchantment level as determined by the damage multiplier. The + 0.5f is so that
|
||||
@@ -77,13 +82,13 @@ public class ImbueWeapon extends Spell {
|
||||
}
|
||||
|
||||
/** Returns true if the given item counts as a sword, i.e. it extends {@link ItemSword} or is in the whitelist. */
|
||||
public static boolean isSword(Item item){
|
||||
return item instanceof ItemSword || Arrays.asList(Wizardry.settings.swordItemWhitelist).contains(item.getRegistryName());
|
||||
public static boolean isSword(ItemStack stack){
|
||||
return stack.getItem() instanceof ItemSword || Settings.containsMetaItem(Wizardry.settings.swordItemWhitelist, stack);
|
||||
}
|
||||
|
||||
/** Returns true if the given item counts as a bow, i.e. it extends {@link ItemBow} or is in the whitelist. */
|
||||
public static boolean isBow(Item item){
|
||||
return item instanceof ItemBow || Arrays.asList(Wizardry.settings.bowItemWhitelist).contains(item.getRegistryName());
|
||||
public static boolean isBow(ItemStack stack){
|
||||
return stack.getItem() instanceof ItemBow || Settings.containsMetaItem(Wizardry.settings.bowItemWhitelist, stack);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package electroblob.wizardry.spell;
|
||||
|
||||
import electroblob.wizardry.Settings;
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.util.SpellModifiers;
|
||||
import electroblob.wizardry.util.WizardryUtilities;
|
||||
@@ -10,8 +11,6 @@ import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.EnumParticleTypes;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class PocketFurnace extends Spell {
|
||||
|
||||
public static final String ITEMS_SMELTED = "items_smelted";
|
||||
@@ -37,9 +36,9 @@ public class PocketFurnace extends Spell {
|
||||
|
||||
result = FurnaceRecipes.instance().getSmeltingResult(stack);
|
||||
|
||||
if(!result.isEmpty() && !(result.getItem() instanceof ItemTool) && !(result.getItem() instanceof ItemSword)
|
||||
&& !(result.getItem() instanceof ItemArmor)
|
||||
&& !Arrays.asList(Wizardry.settings.pocketFurnaceItemBlacklist).contains(result.getItem().getRegistryName())){
|
||||
if(!result.isEmpty() && !(stack.getItem() instanceof ItemTool) && !(stack.getItem() instanceof ItemSword)
|
||||
&& !(stack.getItem() instanceof ItemArmor)
|
||||
&& !Settings.containsMetaItem(Wizardry.settings.pocketFurnaceItemBlacklist, stack)){
|
||||
|
||||
if(stack.getCount() <= usesLeft){
|
||||
ItemStack stack2 = new ItemStack(result.getItem(), stack.getCount(), result.getItemDamage());
|
||||
|
||||
@@ -201,6 +201,8 @@ public class Possession extends SpellRay {
|
||||
*/
|
||||
public boolean possess(EntityPlayer possessor, EntityLiving target, int duration){
|
||||
|
||||
if(possessor.isSneaking()) return false;
|
||||
|
||||
if(WizardData.get(possessor) != null){
|
||||
|
||||
WizardData.get(possessor).setVariable(POSSESSEE_KEY, target);
|
||||
@@ -210,6 +212,7 @@ public class Possession extends SpellRay {
|
||||
possessor.eyeHeight = target.getEyeHeight();
|
||||
setSize(possessor, target.width, target.height);
|
||||
|
||||
target.dismountRidingEntity();
|
||||
target.setDead();
|
||||
target.setNoAI(true);
|
||||
target.setAttackTarget(null);
|
||||
@@ -249,10 +252,10 @@ public class Possession extends SpellRay {
|
||||
}
|
||||
}
|
||||
|
||||
if(possessor.world.isRemote && possessor == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||
if(possessor.world.isRemote){
|
||||
// Shaders and effects
|
||||
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
|
||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); // Looks quite nice...
|
||||
Wizardry.proxy.loadShader(possessor, SHADER);
|
||||
Wizardry.proxy.playBlinkEffect(possessor);
|
||||
|
||||
}else{
|
||||
|
||||
@@ -346,7 +349,7 @@ public class Possession extends SpellRay {
|
||||
|
||||
if(player.world.isRemote && player == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||
net.minecraft.client.Minecraft.getMinecraft().entityRenderer.stopUseShader();
|
||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); // Looks quite nice...
|
||||
Wizardry.proxy.playBlinkEffect(player);
|
||||
}
|
||||
|
||||
for(IAttribute attribute : INHERITED_ATTRIBUTES.keySet()){
|
||||
@@ -397,9 +400,7 @@ public class Possession extends SpellRay {
|
||||
|
||||
if(player.world.isRemote){
|
||||
ParticleBuilder.create(Type.DARK_MAGIC, player).clr(0.1f, 0, 0.3f).spawn(player.world);
|
||||
// TODO: This (and a few other similar uses) needs ClientProxy-ing.
|
||||
if(!net.minecraft.client.Minecraft.getMinecraft().entityRenderer.isShaderActive())
|
||||
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
|
||||
Wizardry.proxy.loadShader(player, SHADER);
|
||||
}
|
||||
|
||||
}else{
|
||||
@@ -683,11 +684,13 @@ public class Possession extends SpellRay {
|
||||
|
||||
if(possessee != null){
|
||||
|
||||
if(possessee.canPickUpLoot() && possessee.getHeldItemMainhand().isEmpty()){
|
||||
possessee.setHeldItem(EnumHand.MAIN_HAND, event.getItem().getItem());
|
||||
}else{
|
||||
event.setCanceled(true);
|
||||
}
|
||||
event.setCanceled(true);
|
||||
|
||||
// if(possessee.canPickUpLoot() && possessee.getHeldItemMainhand().isEmpty()){
|
||||
// possessee.setHeldItem(EnumHand.MAIN_HAND, event.getItem().getItem());
|
||||
// }else{
|
||||
// event.setCanceled(true);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,12 +41,17 @@ public class Shockwave extends Spell {
|
||||
|
||||
for(EntityLivingBase target : targets){
|
||||
|
||||
if(target instanceof EntityPlayer && (!Wizardry.settings.playersMoveEachOther
|
||||
|| ItemArtefact.isArtefactActive((EntityPlayer)target, WizardryItems.amulet_anchoring))){
|
||||
if(target instanceof EntityPlayer){
|
||||
|
||||
if(!world.isRemote) caster.sendStatusMessage(new TextComponentTranslation("spell.resist",
|
||||
target.getName(), this.getNameForTranslationFormatted()), true);
|
||||
return false;
|
||||
Wizardry.proxy.shakeScreen((EntityPlayer)target, 10);
|
||||
|
||||
if(!Wizardry.settings.playersMoveEachOther) continue;
|
||||
|
||||
if(ItemArtefact.isArtefactActive((EntityPlayer)target, WizardryItems.amulet_anchoring)){
|
||||
if(!world.isRemote) caster.sendStatusMessage(new TextComponentTranslation("spell.resist",
|
||||
target.getName(), this.getNameForTranslationFormatted()), true);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if(AllyDesignationSystem.isValidTarget(caster, target)){
|
||||
|
||||
@@ -39,9 +39,9 @@ public class SixthSense extends Spell {
|
||||
(int)(getProperty(EFFECT_DURATION).floatValue() * modifiers.get(WizardryItems.duration_upgrade)),
|
||||
(int)((modifiers.get(WizardryItems.range_upgrade) - 1f) / Constants.RANGE_INCREASE_PER_LEVEL)));
|
||||
|
||||
if(world.isRemote && caster == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
|
||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect();
|
||||
if(world.isRemote){
|
||||
Wizardry.proxy.loadShader(caster, SHADER);
|
||||
Wizardry.proxy.playBlinkEffect(caster);
|
||||
}
|
||||
|
||||
this.playSound(world, caster, ticksInUse, -1, modifiers);
|
||||
@@ -51,9 +51,9 @@ public class SixthSense extends Spell {
|
||||
@SubscribeEvent
|
||||
public static void onPotionAddedEvent(PotionEvent.PotionAddedEvent event){
|
||||
if(event.getEntity().world.isRemote && event.getPotionEffect().getPotion() == WizardryPotions.sixth_sense
|
||||
&& event.getEntity() == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
|
||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect();
|
||||
&& event.getEntity() instanceof EntityPlayer){
|
||||
Wizardry.proxy.loadShader((EntityPlayer)event.getEntity(), SHADER);
|
||||
Wizardry.proxy.playBlinkEffect((EntityPlayer)event.getEntity());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ public class SlowTime extends SpellBuff {
|
||||
@Override
|
||||
public boolean cast(World world, EntityPlayer caster, EnumHand hand, int ticksInUse, SpellModifiers modifiers){
|
||||
|
||||
if(caster.world.isRemote && caster == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
|
||||
if(caster.world.isRemote){
|
||||
Wizardry.proxy.loadShader(caster, SHADER);
|
||||
}
|
||||
|
||||
return super.cast(world, caster, hand, ticksInUse, modifiers);
|
||||
|
||||
@@ -38,9 +38,9 @@ public class Transience extends Spell {
|
||||
@Override
|
||||
public boolean cast(World world, EntityPlayer caster, EnumHand hand, int ticksInUse, SpellModifiers modifiers){
|
||||
|
||||
if(world.isRemote && caster == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
|
||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect();
|
||||
if(world.isRemote){
|
||||
Wizardry.proxy.loadShader(caster, SHADER);
|
||||
Wizardry.proxy.playBlinkEffect(caster);
|
||||
}
|
||||
|
||||
if(!caster.isPotionActive(WizardryPotions.transience)){
|
||||
@@ -87,9 +87,9 @@ public class Transience extends Spell {
|
||||
@SubscribeEvent
|
||||
public static void onPotionAddedEvent(PotionEvent.PotionAddedEvent event){
|
||||
if(event.getEntity().world.isRemote && event.getPotionEffect().getPotion() == WizardryPotions.transience
|
||||
&& event.getEntity() == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
|
||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect();
|
||||
&& event.getEntity() instanceof EntityPlayer){
|
||||
Wizardry.proxy.loadShader((EntityPlayer)event.getEntity(), SHADER);
|
||||
Wizardry.proxy.playBlinkEffect((EntityPlayer)event.getEntity());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package electroblob.wizardry.util;
|
||||
|
||||
import electroblob.wizardry.CommonProxy;
|
||||
import electroblob.wizardry.Settings;
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.data.WizardData;
|
||||
import electroblob.wizardry.entity.living.ISpellCaster;
|
||||
@@ -23,6 +24,7 @@ import net.minecraft.inventory.EntityEquipmentSlot;
|
||||
import net.minecraft.inventory.EntityEquipmentSlot.Type;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.datasync.DataParameter;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.*;
|
||||
@@ -298,11 +300,10 @@ public final class WizardryUtilities {
|
||||
* @return True if the given block is a tree block, false if not.
|
||||
*/
|
||||
public static boolean isTreeBlock(World world, BlockPos pos){
|
||||
return world.getBlockState(pos).getBlock() instanceof BlockLog
|
||||
|| world.getBlockState(pos).getBlock() instanceof BlockCactus
|
||||
|| world.getBlockState(pos).getBlock().isLeaves(world.getBlockState(pos), world, pos)
|
||||
|| world.getBlockState(pos).getBlock().isFoliage(world, pos)
|
||||
|| Arrays.asList(Wizardry.settings.treeBlocks).contains(world.getBlockState(pos).getBlock().getRegistryName());
|
||||
Block block = world.getBlockState(pos).getBlock();
|
||||
return block instanceof BlockLog || block instanceof BlockCactus
|
||||
|| block.isLeaves(world.getBlockState(pos), world, pos) || block.isFoliage(world, pos)
|
||||
|| Settings.containsMetaBlock(Wizardry.settings.treeBlocks, world.getBlockState(pos));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -634,7 +635,7 @@ public final class WizardryUtilities {
|
||||
// This is a perfect example of where you need to use .equals() and not ==. For most applications,
|
||||
// this was unnoticeable until world reload because the UUID instance or entity instance is stored.
|
||||
// Fixed now though.
|
||||
if(entity.getUniqueID().equals(id)){
|
||||
if(entity != null && entity.getUniqueID() != null && entity.getUniqueID().equals(id)){
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
@@ -795,6 +796,20 @@ public final class WizardryUtilities {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link ItemStack} that is identical to the supplied one, except with the metadata changed to the
|
||||
* new value given.
|
||||
* @param toCopy The stack to copy
|
||||
* @param newMetadata The new metadata value
|
||||
* @return The resulting {@link ItemStack}
|
||||
*/
|
||||
public static ItemStack copyWithMeta(ItemStack toCopy, int newMetadata){
|
||||
ItemStack copy = new ItemStack(toCopy.getItem(), toCopy.getCount(), newMetadata);
|
||||
NBTTagCompound compound = toCopy.getTagCompound();
|
||||
if(compound != null) copy.setTagCompound(compound.copy());
|
||||
return copy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given player is opped on the given server. If the server is a singleplayer or LAN server, this
|
||||
* means they have cheats enabled.
|
||||
|
||||
@@ -144,6 +144,9 @@ public abstract class WorldGenSurfaceStructure implements IWorldGenerator {
|
||||
|
||||
// Estimate a starting height for searching for the floor
|
||||
BlockPos centre = world.getTopSolidOrLiquidBlock(new BlockPos(origin.add(size.getX()/2, 0, size.getZ()/2)));
|
||||
// Check if we're at the top of the world, and if so just randomise the y pos (accounts for 'cavern' dimensions)
|
||||
if(centre.getY() >= world.getActualHeight()) centre = new BlockPos(centre.getX(), random.nextInt(world.getActualHeight()), centre.getZ());
|
||||
|
||||
Integer startingHeight = WizardryUtilities.getNearestSurface(world, centre, EnumFacing.UP, 32, true,
|
||||
WizardryUtilities.SurfaceCriteria.COLLIDABLE_IGNORING_TREES);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
#PARSE_ESCAPES
|
||||
# PARSE_ESCAPES
|
||||
tile.ebwizardry\:arcane_workbench.name=Arcane Workbench
|
||||
tile.ebwizardry\:crystal_ore.name=Crystal Ore
|
||||
tile.ebwizardry\:petrified_stone.name=Petrified Stone
|
||||
@@ -498,6 +498,13 @@ advancement.ebwizardry\:enchant_scroll.desc=Craft a blank scroll and enchant it
|
||||
|
||||
handbook.toast.title=New Handbook Section Unlocked!
|
||||
|
||||
gui.ebwizardry\:spell_book.tier=Tier: %s
|
||||
gui.ebwizardry\:spell_book.element=Element: %s
|
||||
gui.ebwizardry\:spell_book.element_undiscovered=Element: ?
|
||||
gui.ebwizardry\:spell_book.mana_cost=Mana Cost: %s
|
||||
gui.ebwizardry\:spell_book.mana_cost_continuous=Mana Cost: %s/second
|
||||
gui.ebwizardry\:spell_book.mana_cost_undiscovered=Mana Cost: ?
|
||||
|
||||
container.ebwizardry\:arcane_workbench=Arcane Workbench
|
||||
container.ebwizardry\:arcane_workbench.apply=Apply
|
||||
container.ebwizardry\:arcane_workbench.mana=Mana\:
|
||||
@@ -836,7 +843,7 @@ spell.ebwizardry\:poison_bomb.desc=Lanches a poison bomb in the direction you ar
|
||||
spell.ebwizardry\:possession.desc="Become thy enemy."
|
||||
spell.ebwizardry\:ray_of_purification.desc=Emits a ray of blinding light that damages and blinds its targets. Undead creatures take double damage and are set on fire.
|
||||
spell.ebwizardry\:remove_curse.desc=Removes any curse currently affecting the caster.
|
||||
spell.ebwizardry\:replenish_hunger.desc=Replenishes the caster's food level by 4 hunger points.
|
||||
spell.ebwizardry\:replenish_hunger.desc=Replenishes the caster's food level by 3 hunger points.
|
||||
spell.ebwizardry\:resurrection.desc=With a master healer by your side, being dead is... optional.
|
||||
spell.ebwizardry\:reversal.desc=Removes a random negative potion effect and inflicts it upon the target, which will suffer that effect for the remaining duration. Potency increases the number of effects that are reversed.
|
||||
spell.ebwizardry\:ring_of_fire.desc=Creates a ring of fire around the caster, damaging all nearby enemies and setting them on fire.
|
||||
@@ -1227,6 +1234,10 @@ config.ebwizardry.use_shaders=Use Custom Shaders
|
||||
config.ebwizardry.use_shaders.tooltip=Whether to use custom shaders for certain spells. These use the vanilla shader system (like mob spectating shaders) and shouldn't have much of an effect on performance in most cases, but they may conflict with other shaders.
|
||||
config.ebwizardry.use_shaders.true=Yes - gimme those sweet shaders!
|
||||
config.ebwizardry.use_shaders.false=No - I'm running this on a potato
|
||||
config.ebwizardry.screen_shake=Screen Shake
|
||||
config.ebwizardry.screen_shake.tooltip=Whether to use the screen shake effect for certain spells.
|
||||
config.ebwizardry.blink_effect=Blink Effect
|
||||
config.ebwizardry.blink_effect.tooltip=Whether to use the screen blink effect for teleportation spells.
|
||||
|
||||
config.ebwizardry.category.commands=Command Settings
|
||||
config.ebwizardry.category.commands.tooltip=Configure wizardry's commands
|
||||
@@ -1284,9 +1295,9 @@ config.ebwizardry.auto_place_shrine_markers.tooltip=Controls whether wizardry au
|
||||
|
||||
integration.jei.category.ebwizardry\:arcane_workbench=Arcane Workbench
|
||||
|
||||
integration.antiqueatlas.marker.ebwizardry\:wizard_tower=Wizard Tower
|
||||
integration.antiqueatlas.marker.ebwizardry\:obelisk=Obelisk
|
||||
integration.antiqueatlas.marker.ebwizardry\:shrine=Shrine
|
||||
integration.antiqueatlas.marker.ebwizardry.wizard_tower=Wizard Tower
|
||||
integration.antiqueatlas.marker.ebwizardry.obelisk=Obelisk
|
||||
integration.antiqueatlas.marker.ebwizardry.shrine=Shrine
|
||||
|
||||
spell.ebwizardry\:magic_missile_festive=Magic Mistletoe
|
||||
spell.ebwizardry\:summon_snow_golem_festive=Summon Frosty The Snowman
|
||||
|
||||
@@ -498,6 +498,13 @@ advancement.ebwizardry\:enchant_scroll.desc=Craft a blank scroll and enchant it
|
||||
|
||||
handbook.toast.title=New Handbook Section Unlocked!
|
||||
|
||||
gui.ebwizardry\:spell_book.tier=Tier: %s
|
||||
gui.ebwizardry\:spell_book.element=Element: %s
|
||||
gui.ebwizardry\:spell_book.element_undiscovered=Element: ?
|
||||
gui.ebwizardry\:spell_book.mana_cost=Mana Cost: %s
|
||||
gui.ebwizardry\:spell_book.mana_cost_continuous=Mana Cost: %s/second
|
||||
gui.ebwizardry\:spell_book.mana_cost_undiscovered=Mana Cost: ?
|
||||
|
||||
container.ebwizardry\:arcane_workbench=Arcane Workbench
|
||||
container.ebwizardry\:arcane_workbench.apply=Apply
|
||||
container.ebwizardry\:arcane_workbench.mana=Mana\:
|
||||
@@ -836,7 +843,7 @@ spell.ebwizardry\:poison_bomb.desc=Lanches a poison bomb in the direction you ar
|
||||
spell.ebwizardry\:possession.desc="Become thy enemy."
|
||||
spell.ebwizardry\:ray_of_purification.desc=Emits a ray of blinding light that damages and blinds its targets. Undead creatures take double damage and are set on fire.
|
||||
spell.ebwizardry\:remove_curse.desc=Removes any curse currently affecting the caster.
|
||||
spell.ebwizardry\:replenish_hunger.desc=Replenishes the caster's food level by 4 hunger points.
|
||||
spell.ebwizardry\:replenish_hunger.desc=Replenishes the caster's food level by 3 hunger points.
|
||||
spell.ebwizardry\:resurrection.desc=With a master healer by your side, being dead is... optional.
|
||||
spell.ebwizardry\:reversal.desc=Removes a random negative potion effect and inflicts it upon the target, which will suffer that effect for the remaining duration. Potency increases the number of effects that are reversed.
|
||||
spell.ebwizardry\:ring_of_fire.desc=Creates a ring of fire around the caster, damaging all nearby enemies and setting them on fire.
|
||||
@@ -1227,6 +1234,10 @@ config.ebwizardry.use_shaders=Use Custom Shaders
|
||||
config.ebwizardry.use_shaders.tooltip=Whether to use custom shaders for certain spells. These use the vanilla shader system (like mob spectating shaders) and shouldn't have much of an effect on performance in most cases, but they may conflict with other shaders.
|
||||
config.ebwizardry.use_shaders.true=Yes - gimme those sweet shaders!
|
||||
config.ebwizardry.use_shaders.false=No - I'm running this on a potato
|
||||
config.ebwizardry.screen_shake=Screen Shake
|
||||
config.ebwizardry.screen_shake.tooltip=Whether to use the screen shake effect for certain spells.
|
||||
config.ebwizardry.blink_effect=Blink Effect
|
||||
config.ebwizardry.blink_effect.tooltip=Whether to use the screen blink effect for teleportation spells.
|
||||
|
||||
config.ebwizardry.category.commands=Command Settings
|
||||
config.ebwizardry.category.commands.tooltip=Configure wizardry's commands
|
||||
@@ -1284,9 +1295,9 @@ config.ebwizardry.auto_place_shrine_markers.tooltip=Controls whether wizardry au
|
||||
|
||||
integration.jei.category.ebwizardry\:arcane_workbench=Arcane Workbench
|
||||
|
||||
integration.antiqueatlas.marker.ebwizardry\:wizard_tower=Wizard Tower
|
||||
integration.antiqueatlas.marker.ebwizardry\:obelisk=Obelisk
|
||||
integration.antiqueatlas.marker.ebwizardry\:shrine=Shrine
|
||||
integration.antiqueatlas.marker.ebwizardry.wizard_tower=Wizard Tower
|
||||
integration.antiqueatlas.marker.ebwizardry.obelisk=Obelisk
|
||||
integration.antiqueatlas.marker.ebwizardry.shrine=Shrine
|
||||
|
||||
spell.ebwizardry\:magic_missile_festive=Magic Mistletoe
|
||||
spell.ebwizardry\:summon_snow_golem_festive=Summon Frosty The Snowman
|
||||
|
||||
@@ -837,7 +837,7 @@ spell.ebwizardry\:poison_bomb.desc=Wystrzeliwuje trującą bombę w pożądanym
|
||||
spell.ebwizardry\:possession.desc="Zostań swoim wrogiem."
|
||||
spell.ebwizardry\:ray_of_purification.desc=Emituje promień oślepiającego światła, który uszkadza i oślepia cele. Nieumarłe stworzenia otrzymują podwójne obrażenia i zostają podpalone.
|
||||
spell.ebwizardry\:remove_curse.desc=Usuwa wszelkie klątwy, które dzierży rzucający.
|
||||
spell.ebwizardry\:replenish_hunger.desc=Uzupełnia poziom głodu rzucającego o 4 punkty.
|
||||
spell.ebwizardry\:replenish_hunger.desc=Uzupełnia poziom głodu rzucającego o 3 punkty.
|
||||
spell.ebwizardry\:resurrection.desc=U boku głównego uzdrowiciela jest martwe... opcjonalne.
|
||||
spell.ebwizardry\:reversal.desc=Usuwa losowy zły efekt mikstury i przekazuje go celowi, który odczuje ten efekt przez pozostały czas. Potencja zwiększa liczbę odwróconych efektów.
|
||||
spell.ebwizardry\:ring_of_fire.desc=Tworzy pierścień ognia wokół rzucającego, uszkadzając wszystkich pobliskich wrogów i podpalając ich.
|
||||
@@ -1272,8 +1272,8 @@ config.ebwizardry.auto_place_shrine_markers.tooltip=Kontroluje, czy Wizardry aut
|
||||
|
||||
integration.jei.category.ebwizardry\:arcane_workbench=Tajmniczny Stół
|
||||
|
||||
integration.antiqueatlas.marker.ebwizardry\:wizard_tower=Wieża Czarodzieja
|
||||
integration.antiqueatlas.marker.ebwizardry\:obelisk=Obelisk
|
||||
integration.antiqueatlas.marker.ebwizardry\:shrine=Świątynia
|
||||
integration.antiqueatlas.marker.ebwizardry.wizard_tower=Wieża Czarodzieja
|
||||
integration.antiqueatlas.marker.ebwizardry.obelisk=Obelisk
|
||||
integration.antiqueatlas.marker.ebwizardry.shrine=Świątynia
|
||||
|
||||
wizard.debug=%1$s, %2$s, %3$s
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@
|
||||
{
|
||||
"type": "loot_table",
|
||||
"name": "ebwizardry:subsets/arcane_tomes",
|
||||
"weight": 3
|
||||
"weight": 4
|
||||
},
|
||||
{
|
||||
"type": "loot_table",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
{
|
||||
"type": "loot_table",
|
||||
"name": "ebwizardry:subsets/arcane_tomes",
|
||||
"weight": 6
|
||||
"weight": 8
|
||||
},
|
||||
{
|
||||
"type": "loot_table",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
{
|
||||
"type": "loot_table",
|
||||
"name": "ebwizardry:subsets/arcane_tomes",
|
||||
"weight": 4
|
||||
"weight": 5
|
||||
},
|
||||
{
|
||||
"type": "loot_table",
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"type": "item",
|
||||
"entryName": "apprentice_tome",
|
||||
"name": "ebwizardry:arcane_tome",
|
||||
"weight": 3,
|
||||
"weight": 4,
|
||||
"functions": [
|
||||
{
|
||||
"function": "set_data",
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
],
|
||||
"key": {
|
||||
"x": {
|
||||
"item": "minecraft:string"
|
||||
"type": "forge:ore_dict",
|
||||
"ore": "string"
|
||||
},
|
||||
"y": [
|
||||
{
|
||||
@@ -48,4 +49,4 @@
|
||||
"item": "ebwizardry:magic_silk",
|
||||
"count": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"chargeup": 0,
|
||||
"cooldown": 30,
|
||||
"base_properties": {
|
||||
"hunger_points": 3,
|
||||
"hunger_points": 6,
|
||||
"saturation_modifier": 0.1
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@
|
||||
"chargeup": 0,
|
||||
"cooldown": 50,
|
||||
"base_properties": {
|
||||
"hunger_points": 8,
|
||||
"hunger_points": 16,
|
||||
"saturation_modifier": 0.1
|
||||
}
|
||||
}
|
||||
@@ -732,11 +732,11 @@
|
||||
|
||||
"Code:",
|
||||
|
||||
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica",
|
||||
"- 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",
|
||||
|
||||
"Translations:",
|
||||
|
||||
"- Spanish and Mexican Spanish: MadWrist \n- Russian: VilagVil, kellixon \n- French: Hahdrim \n- Brazilian Portuguese: lorrampi \n- Chinese: ZHENGLOC, dragon-evol \n- Korean: shejery, rewi_wire \n- Polish: Trozuu",
|
||||
"- Spanish: MadWrist, Alsentar \n- Mexican Spanish: MadWrist \n- Russian: VilagVil, kellixon, bigenergy \n- French: Hahdrim \n- Brazilian Portuguese: lorrampi \n- Chinese: ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Korean: shejery, rewi_wire \n- Polish: Trozuu \n-German: BirdyDragon \n-Taiwanese: chesterccj305",
|
||||
|
||||
"Lightning ray sound effect from OhhWowProductions",
|
||||
|
||||
|
||||
@@ -732,11 +732,11 @@
|
||||
|
||||
"Code:",
|
||||
|
||||
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica",
|
||||
"- 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",
|
||||
|
||||
"Translations:",
|
||||
|
||||
"- Spanish and Mexican Spanish: MadWrist \n- Russian: VilagVil, kellixon \n- French: Hahdrim \n- Brazilian Portuguese: lorrampi \n- Chinese: ZHENGLOC, dragon-evol \n- Korean: shejery, rewi_wire \n- Polish: Trozuu",
|
||||
"- Spanish: MadWrist, Alsentar \n- Mexican Spanish: MadWrist \n- Russian: VilagVil, kellixon, bigenergy \n- French: Hahdrim \n- Brazilian Portuguese: lorrampi \n- Chinese: ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Korean: shejery, rewi_wire \n- Polish: Trozuu \n-German: BirdyDragon \n-Taiwanese: chesterccj305",
|
||||
|
||||
"Lightning ray sound effect from OhhWowProductions",
|
||||
|
||||
|
||||
@@ -0,0 +1,750 @@
|
||||
{
|
||||
"bookmark_start_section": "introduction",
|
||||
|
||||
"colours": {
|
||||
"text": "#000000",
|
||||
"caption": "#666666",
|
||||
"hyperlink": "#601ba0",
|
||||
"highlight": "#dd4c1d",
|
||||
"new_section": "#ee88f7"
|
||||
},
|
||||
|
||||
"images": {
|
||||
"workbench": {
|
||||
"location": "ebwizardry:textures/gui/arcane_workbench_picture.png",
|
||||
"caption": "Mesa Arcana",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 110
|
||||
},
|
||||
"crystal_ore": {
|
||||
"location": "ebwizardry:textures/gui/ore_picture.png",
|
||||
"caption": "Mena de Cristal Mágico",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 64,
|
||||
"height": 64
|
||||
},
|
||||
"magic_crystal": {
|
||||
"location": "ebwizardry:textures/items/crystal_magic.png",
|
||||
"caption": "Cristal Mágico",
|
||||
"u": 6,
|
||||
"v": 6,
|
||||
"width": 36,
|
||||
"height": 33,
|
||||
"texture_width": 48,
|
||||
"texture_height": 48,
|
||||
"border": false
|
||||
},
|
||||
"magic_wand": {
|
||||
"location": "ebwizardry:textures/items/wand_novice.png",
|
||||
"caption": "Varita Mágica",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 64,
|
||||
"height": 64,
|
||||
"border": false
|
||||
},
|
||||
"crystal_flower": {
|
||||
"location": "ebwizardry:textures/gui/flower_picture.png",
|
||||
"caption": "Flor de Cristal",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 48,
|
||||
"height": 48
|
||||
},
|
||||
"wizard_tower": {
|
||||
"location": "ebwizardry:textures/gui/tower_picture.png",
|
||||
"caption": "Torre de mago",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 110
|
||||
},
|
||||
"wizard_armour": {
|
||||
"location": "ebwizardry:textures/gui/armour_picture.png",
|
||||
"caption": "Conjunto de Armadura de mago",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 90,
|
||||
"height": 90
|
||||
},
|
||||
"obelisk": {
|
||||
"location": "ebwizardry:textures/gui/obelisk_picture.png",
|
||||
"caption": "Obelisco",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 67
|
||||
},
|
||||
"shrine": {
|
||||
"location": "ebwizardry:textures/gui/shrine_picture.png",
|
||||
"caption": "Santuario de la tierra",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 67
|
||||
},
|
||||
"tiers": {
|
||||
"location": "ebwizardry:textures/gui/tiers_picture.png",
|
||||
"caption": "Los 4 niveles en las Varitas",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 96,
|
||||
"height": 24,
|
||||
"border": false
|
||||
},
|
||||
"elements": {
|
||||
"location": "ebwizardry:textures/gui/elements_picture.png",
|
||||
"caption": "Los 7 elementos Arcanos",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 106,
|
||||
"height": 20,
|
||||
"border": false
|
||||
}
|
||||
},
|
||||
|
||||
"recipes": {
|
||||
"arcane_workbench": {
|
||||
"locations": [ "ebwizardry:arcane_workbench" ]
|
||||
},
|
||||
"magic_wand": {
|
||||
"locations": [ "ebwizardry:magic_wand" ]
|
||||
},
|
||||
"novice_wands": {
|
||||
"locations": [
|
||||
"ebwizardry:magic_wand",
|
||||
"ebwizardry:wand_fire",
|
||||
"ebwizardry:wand_ice",
|
||||
"ebwizardry:wand_lightning",
|
||||
"ebwizardry:wand_necromancy",
|
||||
"ebwizardry:wand_earth",
|
||||
"ebwizardry:wand_sorcery",
|
||||
"ebwizardry:wand_healing"
|
||||
]
|
||||
},
|
||||
"magic_missile_spell_book": {
|
||||
"locations": [ "ebwizardry:magic_missile_spell_book" ]
|
||||
},
|
||||
"wizard_handbook": {
|
||||
"locations": [ "ebwizardry:wizard_handbook" ]
|
||||
},
|
||||
"crystal_flower_to_crystals": {
|
||||
"locations": [ "ebwizardry:crystal_flower_to_crystals" ]
|
||||
},
|
||||
"crystal_blocks": {
|
||||
"locations": [
|
||||
"ebwizardry:crystal_block",
|
||||
"ebwizardry:crystal_block_fire",
|
||||
"ebwizardry:crystal_block_ice",
|
||||
"ebwizardry:crystal_block_lightning",
|
||||
"ebwizardry:crystal_block_necromancy",
|
||||
"ebwizardry:crystal_block_earth",
|
||||
"ebwizardry:crystal_block_sorcery",
|
||||
"ebwizardry:crystal_block_healing"
|
||||
]
|
||||
},
|
||||
"crystal_blocks_to_crystals": {
|
||||
"locations": [
|
||||
"ebwizardry:crystal_block_to_crystals",
|
||||
"ebwizardry:crystal_block_to_crystals_fire",
|
||||
"ebwizardry:crystal_block_to_crystals_ice",
|
||||
"ebwizardry:crystal_block_to_crystals_lightning",
|
||||
"ebwizardry:crystal_block_to_crystals_necromancy",
|
||||
"ebwizardry:crystal_block_to_crystals_earth",
|
||||
"ebwizardry:crystal_block_to_crystals_sorcery",
|
||||
"ebwizardry:crystal_block_to_crystals_healing"
|
||||
]
|
||||
},
|
||||
"crystal_shard": {
|
||||
"locations": [ "ebwizardry:crystal_shard" ]
|
||||
},
|
||||
"small_mana_flask": {
|
||||
"locations": [ "ebwizardry:small_mana_flask" ]
|
||||
},
|
||||
"medium_mana_flask": {
|
||||
"locations": [ "ebwizardry:medium_mana_flask" ]
|
||||
},
|
||||
"large_mana_flask": {
|
||||
"locations": [ "ebwizardry:large_mana_flask" ]
|
||||
},
|
||||
"runestone": {
|
||||
"locations": [
|
||||
"ebwizardry:runestone_fire",
|
||||
"ebwizardry:runestone_ice",
|
||||
"ebwizardry:runestone_lightning",
|
||||
"ebwizardry:runestone_necromancy",
|
||||
"ebwizardry:runestone_earth",
|
||||
"ebwizardry:runestone_sorcery",
|
||||
"ebwizardry:runestone_healing"
|
||||
]
|
||||
},
|
||||
"runestone_pedestal": {
|
||||
"locations": [
|
||||
"ebwizardry:runestone_pedestal_fire",
|
||||
"ebwizardry:runestone_pedestal_ice",
|
||||
"ebwizardry:runestone_pedestal_lightning",
|
||||
"ebwizardry:runestone_pedestal_necromancy",
|
||||
"ebwizardry:runestone_pedestal_earth",
|
||||
"ebwizardry:runestone_pedestal_sorcery",
|
||||
"ebwizardry:runestone_pedestal_healing"
|
||||
]
|
||||
},
|
||||
"transportation_stone": {
|
||||
"locations": [ "ebwizardry:transportation_stone" ]
|
||||
},
|
||||
"magic_silk": {
|
||||
"locations": [ "ebwizardry:magic_silk" ]
|
||||
},
|
||||
"wizard_hat": {
|
||||
"locations": [ "ebwizardry:wizard_hat" ]
|
||||
},
|
||||
"wizard_robe": {
|
||||
"locations": [ "ebwizardry:wizard_robe" ]
|
||||
},
|
||||
"wizard_leggings": {
|
||||
"locations": [ "ebwizardry:wizard_leggings" ]
|
||||
},
|
||||
"wizard_boots": {
|
||||
"locations": [ "ebwizardry:wizard_boots" ]
|
||||
},
|
||||
"blank_scroll": {
|
||||
"locations": [ "ebwizardry:blank_scroll" ]
|
||||
},
|
||||
"firebomb": {
|
||||
"locations": [ "ebwizardry:firebomb" ]
|
||||
},
|
||||
"poison_bomb": {
|
||||
"locations": [ "ebwizardry:poison_bomb" ]
|
||||
},
|
||||
"smoke_bomb": {
|
||||
"locations": [ "ebwizardry:smoke_bomb" ]
|
||||
},
|
||||
"spark_bomb": {
|
||||
"locations": [ "ebwizardry:spark_bomb" ]
|
||||
}
|
||||
},
|
||||
|
||||
"sections": {
|
||||
|
||||
"inside_cover": {
|
||||
"centre": {
|
||||
"x": true,
|
||||
"y": true
|
||||
},
|
||||
"text": [
|
||||
|
||||
"El Manual del Mago",
|
||||
|
||||
"Por Electroblob"
|
||||
]
|
||||
},
|
||||
|
||||
"introduction": {
|
||||
"title": "Introduccion",
|
||||
"text": [
|
||||
|
||||
"¡Saludos Mago! Este libro te mostrara los secretos de las artes arcanas, y de cómo usarlas. Este no es un libro común y corriente, ya que su conocimiento y sus páginas aumentarán a medida que descubres más y más sobre mundo mágico.",
|
||||
|
||||
"Utiliza los botones en forma de flecha para pasar la página, y los botones de doble flecha para pasar de una sección a otra. Usa el botón de menú central para regresar al índice.",
|
||||
|
||||
"Haz clic en cualquier palabra en color purpura para ir directamente al tema en cuestión. Haz clic derecho al marcador rojo para moverlo a la página actual, y clic izquierdo para saltar a la página marcada."
|
||||
]
|
||||
},
|
||||
|
||||
"main_contents": {
|
||||
"title": "Índice",
|
||||
"contents": {
|
||||
"id": "main_contents",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
}
|
||||
},
|
||||
|
||||
"setting_up": {
|
||||
"title": "Iniciación",
|
||||
"include_in_contents": "main_contents",
|
||||
"text": [
|
||||
|
||||
"Para comenzar como mago, necesitarás conseguir lo siguiente:",
|
||||
|
||||
"- Una Varita mágica, hecha de la siguiente forma:",
|
||||
|
||||
"#recipe magic_wand",
|
||||
|
||||
"- Una @arcane_workbench Mesa Arcana@, hecha de a siguiente forma:",
|
||||
|
||||
"#recipe arcane_workbench",
|
||||
|
||||
"- Un @spells Libro de hechizos@. Estos se pueden encontrar en cofres, recompensas por matar monstruos, y comprado a otros magos. Puedes crear el hechizo Misil Mágico, un hechizo de bajo nivel, de la siguiente forma:",
|
||||
|
||||
"#recipe magic_missile_spell_book",
|
||||
|
||||
"También necesitaras bastantes Cristales Mágicos para suplir tu varita de @mana@."
|
||||
]
|
||||
},
|
||||
|
||||
"mana": {
|
||||
"title": "Maná",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:crystal"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"El Maná es la energía mística que concede a los magos sus habilidades. Mucho más que una sustancia física, el Maná es un aura que impregna la realidad de forma omnipresente. En nuestro mundo, suele acumularse hasta formar cristales sólidos, los cuales pueden ser hallados incrustados en piedra en el subsuelo. Las @wands Varitas@ almacenan Maná dentro de ellas, y este Maná es canalizado hacia fuera al conjurar un @spells Hechizo@. Diferentes Hechizos requieren diferentes cantidades de Maná, dependiendo de que tan poderosos sean y de cuanto duren sus efectos.",
|
||||
|
||||
"#image crystal_ore",
|
||||
|
||||
"#image magic_crystal",
|
||||
|
||||
"Al ser energía pura, el Maná no puede ser creado ni destruido. Cuando se conjura un hechizo, El Maná canalizado simplemente se disipa en el ambiente. Ciertamente, la mayoría de Maná se encuentra esparcido en pequeñas cantidades a través de todo el Cosmos. Sin embargo, para poder ser usado, el Maná debe de estar concentrado. Esto se puede lograr de forma natural a través de miles de años, como pasa con los cristales mágicos, o de forma artificial, un método avanzado no abordado en este libro. También existen diferentes formas de que el Maná sea mejor administrado al conjurar hechizos, y de recuperar una parte del Maná disipado en el ambiente."
|
||||
]
|
||||
},
|
||||
|
||||
"wands": {
|
||||
"title": "Varitas",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:arcane_initiate"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"La varita es el arma y herramienta principal de un mago. Con ella, podrás conjurar cualquier @spells hechizo@ que la varita pueda canalizar (véase @tiers Niveles@). Las varitas vienen en diferentes variedades, pero es muy probable que empieces con una varita básica.",
|
||||
|
||||
"#image magic_wand",
|
||||
|
||||
"La mayoria de varitas comienzan como una estructura simple de un cristal mágico unido a un palo de madera, con una pepita de oro unido en el otro extremo. El cristal es, claro está, la fuente de poder de la varita, ya que provee el foco necesario para canalizar @spells hechizos@. El resto de la varita es importante también, ya que no solo provee un medio para sostener la varita, sino también un circuito interno por el cual el @mana maná@ puede ser canalizado y dirigido.",
|
||||
|
||||
"A medida que se conjuren hechizos con la varita, esta se volverá más efectiva en canalizar dichos @spells hechizos@, y eventualmente, en conjurar hechizos mas poderosos. Esto se puede notar debido a ciertos cambios en la varita misma: Mientras mas poderosa se vuelva una varita, su cristal mágico se volverá más brillante, su color puede llegar a cambiar dependiendo de su @elements elemento@, y después de un tiempo, la madera de la que esta hecha comenzara a crecer por si sola y a retorcerse en figuras mas complejas.",
|
||||
|
||||
"Mientras sostienes una varita, un pequeño recuadro aparecerá en la esquina de tu pantalla. Este recuadro muestra el hechizo seleccionado actualmente, además de una imagen para representar tal hechizo, si el hechizo ya fue conjurado, y una barra de cooldown indicando el tiempo restante para poder conjurar el hechizo otra vez. Tambien muestra los nombres del hechizo anterior y el hechizo siguiente vinculados a la varita. Para cambiar de hechizo, utiliza las teclas #next_spell_key and #previous_spell_key (Estas pueden ser modificadas en Opciones > Controles). Tambien puedes cambiar de hechizo utilizando la rueda del mouse mientras estas agachado.",
|
||||
|
||||
"Cuando veas tu inventario, si pones el mouse sobre la varita, veras cuanto @mana mana@ le queda, junto con el @spells hechizo@ seleccionado actualmente y otras habilidades que tenga. Puedes visualizar más información sobre la varita colocándola en una @arcane_workbench mesa arcana@."
|
||||
]
|
||||
},
|
||||
|
||||
"spells": {
|
||||
"title": "Hechizos",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/spells"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Sin hechizos para conjurar y lanzar, una @wands varita@ es prácticamente inútil. Los hechizos son grabados en dos formas: en libros, los cual los hace permanentes, y en pergaminos, los cuales son temporales.",
|
||||
|
||||
"Los libros de hechizos son inútiles por si mismos, por lo que son usados para vincular el hechizo que contienen a las @wands varitas@. Los libros de hechizos se encuentran pueden ser hallados a través de todo el planeta, y no tomara mucho tiempo encontrarte con uno. Cuando lo encuentres, puedes colocar el mouse sobre el libro de hechizo para ver información básica sobre el hechizo que contiene. También puedes darle clic derecho mientras lo sostienes para leer mas acerca de él.",
|
||||
|
||||
"Por otro lado, los pergaminos sirven otro propósito: Haciendo click derecho mientras sostienes uno conjurará el hechizo escrito en el, consumiendo el pergamino. Al igual que los libros de hechizos, los pergaminos pueden ser hallados en muchas partes del mundo, pero también puedes crearlos tu mismo(a) (véase @enchanting_scrolls Encantando Pergaminos@).",
|
||||
|
||||
"Los pergaminos son bastante utiles cuando necesitas utilizar un hechizo una o dos veces en una misión específica, y no quieres que tome espacio innecesario en tu @wands varita@. De todas formas, cabe destacar que no son tan efectivas para conjurar hechizos en comparación con las varitas.",
|
||||
|
||||
"Desde la perspectiva de alguien común y corriente, los símbolos y runas en los cuales están escritos los hechizos son solo garabatos ilegibles. Pero tú no eres alguien común. ¡Eres un mago, joder! Y como tal, poco a poco iras aprendiendo a descifrar este lenguaje. Para identificar un hechizo podrías, claro está, simplemente conjurarlo y ver que pasa. Pero ten en cuenta que al hacerlo puede haber efectos no deseados, además de que muchos hechizos necesitan ciertas condiciones para funcionar. Además de eso, para novatos es probable leer el hechizo de forma errónea y pueden llegar a haber consecuencias peligrosas dependiendo de que tan poderoso sea el hechizo. Una opción más segura es utilizar un pergamino de identificación, los cuales pueden ser encontrados en cofres o comprados a otros magos. Al hacer click derecho mientras se sostiene uno, se identificará el primer hechizo desconocido en tu inventario, consumiendo el pergamino de identificación."
|
||||
]
|
||||
},
|
||||
|
||||
"arcane_workbench": {
|
||||
"title": "Mesa Arcana",
|
||||
"include_in_contents": "main_contents",
|
||||
"contents": {
|
||||
"id": "arcane_workbench_subsections",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
},
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/arcane_workbench"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"La mesa arcana es un bloque similar a la mesa de encantamientos, donde podrás recargar, mejorar, y vincular @spells hechizos@ a tu @wands varita@. Puedes crearla de la siguiente forma:",
|
||||
|
||||
"#recipe arcane_workbench",
|
||||
|
||||
"Las siguientes paginas explicaran las acciones que puedes hacer en una mesa arcana.",
|
||||
|
||||
"#image workbench"
|
||||
],
|
||||
"sections": {
|
||||
"binding_spells": {
|
||||
"title": "Vinculando Hechizos",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/arcane_workbench"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Para vincular un @spells hechizo@ a tu @wands varita@, solo tienes que colocar la varita en la ranura central de la mesa arcana, luego colocar el libro de hechizo que desees en las ranuras alrededor y presionar “Aplicar”. Como habrás de notar, el acto de vincular un hechizo no afecta al libro, esto es porque al vincular un hechizo, la mesa arcana no “toma” el hechizo del libro, sino que de cierta forma “copia” de forma resumida el hechizo en la varita. De esta forma, puedes cambiar los hechizos vinculados a tu varita tantas veces como quieras con solo repetir el proceso. Puedes vincular hasta cinco hechizos diferentes a una sola varita cada vez, aunque este numero puede aumentar con mejoras de vinculación."
|
||||
]
|
||||
},
|
||||
"charging_wands": {
|
||||
"title": "Recargando Varitas",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/arcane_workbench"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Para recargar tu @wands varita@, coloca la varita en la ranura central de la mesa arcana, coloca algunos cristales mágicos en la ranura inferior izquierda y luego presiona “Aplicar”. Cada cristal vale #mana_per_crystal @mana maná@, y la varita solo tomara lo que necesita, por lo que puedes dejar una provision de cristales en la mesa arcana para cuando la necesites. Sin embargo, ten en cuenta que la varita solo puede tomar números de cristales enteros, así que si por ejemplo, la varita necesita 30 mas de maná, #example_charging_loss de maná se perderán al cargarla."
|
||||
]
|
||||
},
|
||||
"upgrading_wands": {
|
||||
"title": "Mejorando Varitas",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/tome_of_arcana"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Para mejorar tu @wands varita@, necesitaras un Tomo de Arcana del @tiers nivel@ adecuado, o también, una mejora especial para tu varita. Los Tomos de Arcana y las mejoras especiales pueden ser hallados en cofres o comprados a otros magos. Para mejorar tu varita, colocala en la ranura central, y coloca el objeto de mejora en la ranura superior derecha, luego presiona “Aplicar”.",
|
||||
|
||||
"Mejoras especiales para la varita cambian el aspecto de la varita. Cada tipo de mejora se puede acumular tres veces, y el total de mejoras que una varita puede tomar depende de su nivel. Solo recuerda que las mejoras no pueden ser removidas."
|
||||
]
|
||||
},
|
||||
"enchanting_scrolls": {
|
||||
"title": "Encantando Pergaminos",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/scrolls"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"La mesa Arcana tambien puede ser usada para encantar @spells hechizos@ en pergaminos. Para hacerlo, necesitaras un pergamino en blanco, creado con papel y un poco de cuerda, un libro de hechizo de tu preferencia, y suficientes cristales mágicos para proveer @mana maná@ para conjurar.",
|
||||
|
||||
"#recipe blank_scroll",
|
||||
|
||||
"Coloca los cristales en la ranura inferior izquierda, el pergamino en blanco en la ranura central, y el libro de hechizos en la sola ranura encima, luego presiona confirmar par encantar le pergamino."
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"wizard_armour": {
|
||||
"title": "Armadura de Mago",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:arcane_initiate"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Como el legendario y poderoso mago que eres, necesitaras algo para protegerte de las criaturas y monstruos que obviamente vencerás. Las armaduras normales son buenas, sí… pero checa eso: Sombrero, túnica, pantalones y botas. A diferencia de las armaduras normales, la armadura de mago no se rompe, ya que utiliza maná para endurecer su tela al punto de simular el metal, y proteger al usuario. Estas armaduras deben de ser recargadas con cristales mágicos, como las varitas. Afortunadamente, estas ropas no consumen mucho @mana maná@. Recárgalas como lo harías con una varita en la @arcane_workbench mesa arcana@ o con @mana_flasks frascos de mana@. Pero ten cuidado, si se le acaba el maná, lo único que te protegerá de aquellos monstruos será simple tela.",
|
||||
|
||||
"#image wizard_armour",
|
||||
|
||||
"Puedes crear una armadura de mago a partir de tela mágica:",
|
||||
|
||||
"#recipe magic_silk",
|
||||
"#recipe wizard_hat",
|
||||
"#recipe wizard_robe",
|
||||
"#recipe wizard_leggings",
|
||||
"#recipe wizard_boots",
|
||||
|
||||
"Puedes encantar una armadura de mago usando una mesa de encantamientos común, y debido a las propiedades de la tela mágica, es bastante efectiva en retener encantamientos. Los encantamientos de Protección contra Magia, Hielo y Electricidad son de particular utilidad para magos como tú, especialmente en defensa contra otros magos.",
|
||||
|
||||
"Aquellos magos que se dedican a la práctica de un elemento particular suelen llevar ropas especiales que les proporcionan efectos adicionales para dominar tal elemento. Conjuntos enteros de aquellas ropas son muy buscadas por los magos y no son fáciles de encontrar.",
|
||||
|
||||
"Leyendas hablan sobre un sello arcano usado por los magos y brujas mas poderosos. Dicen que aquel sello volverá la armadura de cualquier mago tan resistente como su contraparte mundana…"
|
||||
]
|
||||
},
|
||||
|
||||
"magical_world": {
|
||||
"title": "Magia en el Mundo",
|
||||
"include_in_contents": "main_contents",
|
||||
"contents": {
|
||||
"id": "magical_world_subsections",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
},
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/on_subsection_unlock"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"No puedes dominar las artes arcanas quedándote encerrado en tu cuarto ¿o sí? ¡Hay un mundo entero de magia allá afuera para explorar! Ruinas Antiguas, reliquias y seres misteriosos benévolos y malévolos esperan ser descubiertos – si sabes donde buscar. Los más grandes magos también son los más curiosos, y mucho de su conocimiento y poder lo encontraron explorando el mundo que los rodea, y experimentando con lo que encuentran.",
|
||||
|
||||
"Aunque un mago pasa la mayoría de su tiempo solo, compartir conocimiento es vital para aprender las artes arcanas. Busca a otros practicantes de la magia y aprende todo lo que puedas de ellos. La comunicación es uno de los poderes mas grandes que puedas tener."
|
||||
],
|
||||
"sections": {
|
||||
"crystal_flowers": {
|
||||
"title": "Flores de Cristal",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/crystal_flowers"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Durante tu travesía, es probable que te encuentre una curiosa y colorida flor que emite luz. Estas interesantes flores se les conoce como flores de cristal, y son altamente concentradas en @mana maná@. Nade sabe el porque de esto, lo que si sabemos es que sus pétalos están hechos de cristales de mana, haciendo de estas flores una fuente útil de mana en la superficie. La cantidad de maná obtenida de esta forma es limitada debido al pequeño tamaño de las flores, y que suelen crecer en grupos pequeños.",
|
||||
|
||||
"#image crystal_flower",
|
||||
"#recipe crystal_flower_to_crystals"
|
||||
]
|
||||
},
|
||||
"wizard_towers": {
|
||||
"title": "Torres de mago",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:wizard_tower"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"No temas, no eres el único practicante de magia en este mundo. En tus viajes, puede que te encuentres con una o dos altas torres con techos puntiagudos. Esta es la residencia de un mago. A veces una vida de soledad puede volver a los magos un poco gruñones, pero usualmente son personas amigables que están dispuestos a compartir su conocimiento contigo, por un precio. No te sorprendas si debes pagar raros y preciosos metales y gemas, ya que a cambio recibirás grandes maravillas arcanas.",
|
||||
|
||||
"En el caso de que fuese un hechizo de nivel @tiers maestro@ lo que buscas, necesitaras hablar con un especialista.",
|
||||
|
||||
"#image wizard_tower",
|
||||
|
||||
"Desafortunadamente, existen algunos magos en cuyas puertas los visitantes no son bienvenidos. Estos magos suelen ser marginados, y son hostiles hacia todo aquel que se cruce en su camino. Ten cuidado con estos individuos. Si los encuentras, prepárate para defenderte contra magia poderosa. Véncelos, y su conocimiento será tuyo.",
|
||||
|
||||
"Cabe destacar que los magos no toman de buena forma el ser atacados o robados, y siendo ese el caso, no dudarán en tomar la justicia por sus propias manos."
|
||||
]
|
||||
},
|
||||
"obelisks": {
|
||||
"title": "Obeliscos",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/obelisks"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Vestigios de antiguas civilizaciones yacen esparcidas por todo el mundo. Los mas notables son estructuras de piedra tallada con símbolos y runas. Estas ruinas son todo lo que queda de lo que parece ser alguna clase de civilización antigua. Quien sea, o lo que sea que las haya construido, claramente tenían amplios conocimientos sobre magia, conocimientos que uso para conjurar encantamientos protectores que aun hoy día permanecen en aquellos lugares.",
|
||||
|
||||
"Estas estructuras suelen ser de dos tipos. El primero, y el mas común, son los Obeliscos: altas construcciones puntiagudas hechas de piedras rúnicas, con una estructura inferior abierta que contiene reliquias arcanas menores, ya olvidadas en el pasado.",
|
||||
|
||||
"#image obelisk",
|
||||
|
||||
"Estas estructuras suelen estar protegidas por un encantamiento que invoca @creatures criaturas@ del Caos Elemental cuando un humano se acerca demasiado. Vence a estas criaturas, destruye su invocador, y las reliquias serán tuyas."
|
||||
]
|
||||
},
|
||||
"shrines": {
|
||||
"title": "Santuarios",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:visit_shrine"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"El Segundo tipo es mucho mas raro, y son conocidos como santuarios. Estas estructuras consisten en un circulo de pilares de piedras rúnicas rodeando un pedestal central, en el cualse encuentra un cofre que contiene @artefacts artefactos@. Este cofre suele estar protegido por un encantamiento de Cerradura Arcana, impidiendo que cualquiera excepto el dueño lo abra. La estructura completa también esta protegida por un campo de contención, el cual impide el escape de cualquier cosa que se acerque demasiado.",
|
||||
|
||||
"#image shrine",
|
||||
|
||||
"Debido al gran poder e importancia arcana, sin mencionar las riquezas que contiene, estas estructuras son particularmente atractivas para cualquier mago aspirante. Pero ten cuidado, ha habido reportes de magos quedando atrapados en en el campo de contención y lentamente perdiendo la cordura a medida que pasa el tiempo. Algunos otros, creen que aquellas ocurrencias es un deliberado esfuerzo de la magia protectora del santuario, y que aquellos magos atrapados son controlados para proteger la estructura. Una perspectiva escalofriante sin duda para todo aquel que se atreva a aventurarse cerca…."
|
||||
]
|
||||
},
|
||||
"creatures": {
|
||||
"title": "Criaturas Magicas",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/magical_creatures"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Además de magos, una gran cantidad de criaturas utilizan magia. Muchas de estas criaturas son de origen arcano, y la mayoría pueden ser invocadas desde el Caos Elemental usando @spells hechizos@. Es posible encontrarse con estas criaturas protegiendo un obelisco o a un poderoso mago invocador. Seres arcanos menores pueden ser encontrados casualmente en la naturaleza."
|
||||
]
|
||||
},
|
||||
"artefacts": {
|
||||
"title": "Artefactos",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:artefact"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Al explorar un @shrines santuario@, puedes ser lo bastante afortunado(a) como para encontrar alguna clase de artefacto mágico antiguo, un objeto capaz de concederle a su portador poderes y habilidades únicas y poderosas. Tres tipos de artefactos se han encontrado son: anillos, lo cuales conceden efectos especiales a hechizos, amuletos, los cuales mejoran habilidades defensivas y talismanes, que conceden efectos de utilidad. Estos artefactos parecen funcionar solo si se llevan de forma apropiada, el simple hecho de tenerla en su persona es insuficiente."
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"tiers": {
|
||||
"title": "Niveles",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/tome_of_arcana"
|
||||
],
|
||||
"text":[
|
||||
|
||||
"Las @wands varitas@ y @spells hechizos@ vienen en cuatro niveles: #colour_novicenovice#colour_reset, #colour_apprenticeapprentice#colour_reset, #colour_advancedadvanced #colour_resetand #colour_mastermaster#colour_reset. Cada nivel es mas poderoso que el anterior.",
|
||||
|
||||
"#image tiers",
|
||||
|
||||
"#colour_noviceNovice #colour_resetwands son las que pueden ser creadas. Pueden almacenar hasta #novice_max_charge maná, y solo pueden conjurar hechizos de nivel novato. Hechizos de nivel novato son lo bastante simples para ser conjurados por cualquiera y no suelen usar mucho maná. Esto no significa que son inútiles en niveles mas altos, ya que su bajo costo los hace bastante útiles incluso al tener acceso a hechizos de nivel maestro.",
|
||||
|
||||
"#colour_apprenticeApprentice #colour_resetwands son el siguiente nivel de varitas después del nivel novato. Pueden almacenar hasta #apprentice_max_charge maná y puede conjurar hechizos de novato y hechizos de aprendiz. Los hechizos de aprendiz son mas impresionantes que los hechizos de novato, pero suelen costar más.",
|
||||
|
||||
"#colour_advancedAdvanced #colour_resetwands son mas raras y ponderosas. Pueden conjurar todos los hechizos excepto hechizos de nivel maestro, y almacenan hasta #advanced_max_charge maná. Hechizos de nivel avanzado pueden conceder poderes y habilidades super humanas como inivisibilidad y causar estragos en enemigos.",
|
||||
|
||||
"#colour_masterMaster #colour_resetwands son las varitas más poderosas que existen. Almacenan hasta #master_max_charge maná y pueden conjurar cualquier hechizo. Libros de hechizo de nivel maestro son muy raros, y ciertos hechizos pueden causar una terrible devastación no solo a enemigos, sino al mundo mismo. Usar con precaución.",
|
||||
|
||||
"Para poder ser mejorada a un nivel mayor, la varita debe de volverse lo suficientemente poderosa como para canalizar hechizos de ese nivel. Las varitas ganan poder a medida de que hechizos son conjurados con ellas. Variedad, poder, efectos elementales y otros fatores externos pueden tener efecto en que tan rápido una varita gana este poder.",
|
||||
|
||||
"Una vez que una varita es lo suficientemente poderosa, un tomo de arcana proveerá el catalizador final para elevar a la varita al siguiente nivel (véase @upgrading_wands Mejorando varitas@), una vez que esto pasa, el proceso de maduración para la varita comienza de nuevo."
|
||||
]
|
||||
},
|
||||
|
||||
"elements": {
|
||||
"title": "Elementos",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/elements"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Los @spells hechizos@ pertenecen a diferentes elementos, los cuales determinan la naturaleza del hechizo y conceden ventajas al ser conjurados por ciertas @wands varitas@.",
|
||||
|
||||
"#image elements",
|
||||
|
||||
"#colour_fireFire#colour_reset \n Talvez el elemento mas destructivo. El fuego se trata sobre quemar, consumir, lava y explosiones. Un Pirómano poderoso desatará el infierno ante sus enemigos y probablemente incendie el mundo en el proceso. La mayoría de hechizos de fuego envuelven a los enemigos en llamas, causando Daño adicional con el tiempo. Sin embargo, ten en cuenta que los hechizos de fuego no tienen efecto sobre las criaturas provenientes del Nether.",
|
||||
|
||||
"#colour_iceIce#colour_reset \n El elemento de hielo contiene todo lo que es frio. Los hechizos gélidos suelen ralentizar a los enemigos o congelarlos completamente, y son especialmente efectivos en criaturas de fuego. Los hechizos de hielo suelen también ser útiles fuera de combate, como por ejemplo, congelar el agua para cruzar un rio.",
|
||||
|
||||
"#colour_lightningLightning#colour_reset \n Este es el element que concierne los relámpagos, truenos y rayos, tormentas, lluvias y el clima. Un poderoso mago de la tormenta es una fuerza a temer, y algunos poseen la habilidad de comandar a los rayos a voluntad. Los hechizos de tormenta suelen dañar múltiples enemigos al mismo tiempo e incluso siguen a sus objetivos, haciendo de estos un ataque efectivo contra cualquier enemigo…..pero ten cuidado con los creepers.",
|
||||
|
||||
"#colour_necromancyNecromancy#colour_reset \n La necromancia es el elemento de la oscuridad, caos y de la no-muerte. Los necromagos son misteriosos, y suelen considerarse malvados, aunque este no suele ser el caso. Los hechizos de necromancia suelen ser usados para invocar @creatures criaturas@ para pelear por ti o incluso doblegar la voluntad de tus enemigos.",
|
||||
|
||||
"#colour_earthEarth#colour_reset \n El elemento de la tierra se enfoca en el mundo natural: animales, plantas, el viento, y cosas por el estilo. Los hechizos de tierra son diversos y toman una gran variedad de formas, desde envenenar enemigos hasta desencadenar la furia del clima terrenal. Los hechizos de tierra suelen ser una mezcla de ataque, defensa y utilidad.",
|
||||
|
||||
"#colour_sorcerySorcery#colour_reset \n La hechicería es el elemento del cambio y la fuerza. Los hechiceros manipulan la luz, la gravedad e incluso la realidad misma para que se ajuste a sus necesidades. Los hechizos de hechicería pueden ser usados, entre muchas otras cosas, para darle al mago poderes especiales o mover objetos a voluntad.",
|
||||
|
||||
"#colour_healingHealing#colour_reset \n El elemento de curación es un elemento perfectamente válido, ¿verdad? ¡¿Verdad?! Este elemento se trata sobre defensa y regeneración. Los curanderos buscan protegerse a ellos mismos y a sus aliados en los mas posible y por eso suelen ser oponentes formidables. Aunque no suele ser usado de forma ofensiva, la luz purificadora de algunos hechizos de curación hará un Daño considerable a los no-muertos. Los hechizos de curación son indispensables en combate",
|
||||
|
||||
"Los límites entre diferentes elementos no son siempre diferentes, y algunos hechizos suelen tener semejanza a otros elementos diferentes al suyo.",
|
||||
|
||||
"Si tienes suerte, podrás encontrar un cristal elemental. Los cristales elementales son cristales mágicos que absorbieron propiedades elementales mientras se formaban. Estos cristales pueden ser usados para crear varitas elementales, las cuales potencian los hechizos de tal elemento."
|
||||
]
|
||||
},
|
||||
|
||||
"miscellaneous": {
|
||||
"title": "Miscelaneo",
|
||||
"include_in_contents": "main_contents",
|
||||
"contents": {
|
||||
"id": "miscellaneous_subsections",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
},
|
||||
"triggers": [
|
||||
"ebwizardry:on_subsection_unlock"
|
||||
],
|
||||
"sections": {
|
||||
"mana_flasks": {
|
||||
"title": "Frascos de mana",
|
||||
"include_in_contents": "miscellaneous_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/mana_flasks"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Provisiones Arcanas de Arkendur inc. – ¡Objetos mágicos para todas tus necesidades!",
|
||||
|
||||
"¿Necesitas recargar tu @wands varita@ de forma rápida? ¡No hay problema! El @mana mana@ ya puede ser embotellado. Simplemente creas un frasco de mana con una botella y ocho cristales mágicos. Cuando quieras usarlo, solo colócalo en la mesa de crafteo con tu varita y cargara cierta parte. *",
|
||||
|
||||
"#recipe medium_mana_flask",
|
||||
|
||||
"¡NUEVO! Aquí llegaron los nuevos frascos de mana de tamaños pequeños y grandes – ¡ahora puedes seleccionar un frasco que satisface tus necesidades!",
|
||||
|
||||
"#recipe small_mana_flask",
|
||||
"#recipe large_mana_flask",
|
||||
|
||||
"* Este proceso destruirá la botella. Cierto nivel de mana se pierde durante el embotellamiento."
|
||||
]
|
||||
},
|
||||
"throwable_items": {
|
||||
"title": "Objetos Arrojables",
|
||||
"include_in_contents": "miscellaneous_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/throwables"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Algunos @spells hechizos@ conjuran objetos físicos, algunos de estos pueden ser creados directamente. Bombas de fuego, Bombas de veneno, Bombas de chispas y Bombas de humo pueden todas ser creadas:",
|
||||
|
||||
"#recipe firebomb",
|
||||
"#recipe poison_bomb",
|
||||
"#recipe smoke_bomb",
|
||||
"#recipe spark_bomb"
|
||||
]
|
||||
},
|
||||
"automated_casting": {
|
||||
"title": "Conjuracion Automatica",
|
||||
"include_in_contents": "miscellaneous_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:enchant_scroll"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Experimentación reciente ha revelado que es posible automatizar la conjuración de @spells hechizos@, hasta cierto punto, usando nada mas que un dispensador simple. Nadie sabe porque, pero parece que las extrañas propiedades de la piedra roja se extienden hasta la conjuración de un pergamino de hechizo. Poniendo un par de estos en un dispensador y dándole poder serviría como una buena trampa…."
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"crafting_recipes": {
|
||||
"title": "Recetas para crafteos",
|
||||
"include_in_contents": "main_contents",
|
||||
"text": [
|
||||
|
||||
"#recipe arcane_workbench",
|
||||
"#recipe novice_wands",
|
||||
"#recipe magic_missile_spell_book",
|
||||
"#recipe wizard_handbook",
|
||||
"#recipe crystal_flower_to_crystals",
|
||||
"#recipe crystal_blocks",
|
||||
"#recipe crystal_blocks_to_crystals",
|
||||
"#recipe crystal_shard",
|
||||
"#recipe small_mana_flask",
|
||||
"#recipe medium_mana_flask",
|
||||
"#recipe large_mana_flask",
|
||||
"#recipe runestone",
|
||||
"#recipe runestone_pedestal",
|
||||
"#recipe transportation_stone",
|
||||
"#recipe magic_silk",
|
||||
"#recipe wizard_hat",
|
||||
"#recipe wizard_robe",
|
||||
"#recipe wizard_leggings",
|
||||
"#recipe wizard_boots",
|
||||
"#recipe blank_scroll",
|
||||
"#recipe firebomb",
|
||||
"#recipe poison_bomb",
|
||||
"#recipe smoke_bomb",
|
||||
"#recipe spark_bomb"
|
||||
]
|
||||
},
|
||||
|
||||
"credits": {
|
||||
"title": "Creditos",
|
||||
"include_in_contents": "main_contents",
|
||||
"text": [
|
||||
|
||||
"Electroblob's Wizardry \nVersion #version \nPara Minecraft #mcversion",
|
||||
|
||||
"Diseñado, programado y texturizado por Electroblob",
|
||||
|
||||
"Gracias a Minecraft Forge y MCP, cuya presencia hizo posible este mod.",
|
||||
|
||||
"¡Gracias también a la Comunidad de Mods de Minecraft, que siempre tiene una respuesta para mis preguntas!",
|
||||
|
||||
"Adicionalmente, me gustaría agradecer a los siguientes individuos por sus contribuciones al mod:",
|
||||
|
||||
"Codigo:",
|
||||
|
||||
"- 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",
|
||||
|
||||
"Traducciones:",
|
||||
|
||||
"- Español: MadWrist, Alsentar \n- Español de Mexico: MadWrist \n- Ruso: VilagVil, kellixon, bigenergy \n- Frances: Hahdrim \n- Portuges Brasileño: lorrampi \n- Chino: ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Koreano: shejery, rewi_wire \n- Polaco: Trozuu, \nAlemán: BirdyDragon",
|
||||
|
||||
"Efecto de sonido para los relámpagos por OhhWowProductions",
|
||||
|
||||
"Para mas informacion, revisa nuestra @https://github.com/Electroblob77/Wizardry/wiki wiki@.",
|
||||
|
||||
"¿Te encanta este mod? ¡unete al @https://discord.gg/MTmMzMv servidor de Discord@ para las ultimas noticias,discusiones y extras!"
|
||||
]
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,319 +0,0 @@
|
||||
PAGEBREAK
|
||||
LINEBREAK
|
||||
|
||||
|
||||
|
||||
|
||||
El Manual del Mago
|
||||
|
||||
|
||||
|
||||
Por Electroblob
|
||||
PAGEBREAK
|
||||
Introduccion
|
||||
--------------------
|
||||
|
||||
Saludos, mago! Este libro explica las diferentes formas de lo arcano y como
|
||||
usarlas.
|
||||
|
||||
Si alguna vez pierde este libro, lo puede volver a fabricar con un libro y un cristal magico.
|
||||
PAGEBREAK
|
||||
Contents
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
SECTION Comenzando
|
||||
Comenzando
|
||||
--------------------
|
||||
Para iniciar con Wizardry, necesitaras algunas cosas:
|
||||
|
||||
- Una varita magica, crafteada con una pepita de oro, un palo y un cristal magico.
|
||||
|
||||
- Una Mesa de Trabajo Arcana, crafteada con 3 piedras, 1 bloque de lapis lazuli,
|
||||
2 cristales magicos, 2 pepitas de oro y 1 alfombra morada.
|
||||
|
||||
- Un libro de hechizos. Estos pueden ser encontrados en cofres, arrojados como botin,
|
||||
comprados a magos, o puedes hacer el hechizo del aprendiz, Misil Magico, con un
|
||||
libro y 4 cristales magicos.
|
||||
|
||||
Tambien necesitaras un monton de cristales magicos para suplir tu varita con mana.
|
||||
PAGEBREAK
|
||||
SECTION Mana
|
||||
Mana
|
||||
--------------------
|
||||
Mana es la energia arcana que le da a los magos sus poderes. Se manifiesta en cristales que aparecen naturalmente, los cuales aparecen incrustados bajo roca. Las varitas almacenan mana dentro de ellas, y este mana es canalizado en los hechizos que tu lanzas. Cada hechizo cuesta una cantidad diferente de mana, dependiendo de que tan
|
||||
poderosos sean y que tanto duran.
|
||||
|
||||
Coloca tu raton sobre una varita para ver la cantidad de mana que tiene.
|
||||
IMAGE CRYSTAL
|
||||
LINEBREAK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Mena
|
||||
de Cristal Magico Cristal
|
||||
PAGEBREAK
|
||||
SECTION Varitas
|
||||
Varitas
|
||||
--------------------
|
||||
La varita es la herramienta de eleccion de un mago. Con ella, puedes lanzar cualquier
|
||||
hechizo, solo si la varita contiene dicho poder (ver Nivel de varitas para entender mejor).
|
||||
Las varitas vienen en variedades diferentes, es muy probable que empieces con la varita magica
|
||||
basica.
|
||||
|
||||
Cuando tienes una varita en tu mano, aparecera una pequena ventana en el esquina de la
|
||||
pantalla. Esto indica el hechizo que esta seleccionado actualmente con una representacion
|
||||
de este, y, si el hechizo ha sido lanzado, una barra con el tiempo de reactivacion para que
|
||||
el hechizo pueda volcver a ser lanzado de nuevo.
|
||||
PAGEBREAK
|
||||
SECTION Hechizos
|
||||
Hechizos
|
||||
--------------------
|
||||
Una varita es inservible sin hechizos que lanzar. Los hechizos estan guardados en dos
|
||||
formas: en libros, los cuales son permanentes, y en pergaminos, que son temporales.
|
||||
|
||||
Los libros de hechizos son poco utiles ellos solos, por eso se suele ligar el hechizo
|
||||
que contienen a las varitas. Los libros de hechizos pueden ser encontrados por todo el
|
||||
mundo. Cuando encuentres uno, puedes colocar el raton sobre el libro para ver su informacion.
|
||||
Tambien puede hacer clic derecho mientras lo tiene en su mano para ver mas informacion.
|
||||
|
||||
Pergaminos, por otro lado, sirven un proposito diferente: hacer clic derecho con
|
||||
el en la mano, lanzara el hechizo que tenga ligado a el, destruyendo el papel en el
|
||||
proceso. Como los libros, los hechizos pueden ser encontrados por todo el mundo, pero
|
||||
tambien puedes hacerlos tu mismo al craftear un pergamino vacio con papel y un poco de
|
||||
hilo. Puedes ligarle un hechizo usando una Mesa de Trabajo Arcana, pero solo si ya conoces
|
||||
dicho hechizo. Hacer esto consumira un cantidad de cristales magicos equivalente al mana
|
||||
que cuesta lanzar el hechizo (redondeado al MANA_PER_CRYSTAL mas cercano).
|
||||
|
||||
Para el ojo sin experiencia, las runas magicas con las cuales los hechizos son escritos
|
||||
son ilegibles. Por eso, para identificar un hechizo, podrias lanzarlo y ver sus efectos
|
||||
pero quizas ocasione efectos no deseados, y algunos hechizos necesitan condicione necesarias
|
||||
para funcionar. Una forma mas segura, es usar un Pergamino de la Identificacion, el cual
|
||||
puede ser comprado a magos. Hacer clic derecho con uno en la mano identificara el
|
||||
primer hechizo desconocido en tu barra.
|
||||
|
||||
Los pergaminos son utiles cuando necesitas lanzar un hechizo una o dos veces en una
|
||||
ocasion en particular pero no quieres que te ocupe un espacio en tu varita. Hay que
|
||||
resaltar, como sea, que los pergaminos son un metodo ineficiente de lanzar hechizos.
|
||||
PAGEBREAK
|
||||
SECTION Mesa de Trabajo Arcana
|
||||
La Mesa de Trabajo Arcana
|
||||
--------------------
|
||||
La Mesa de Trabajo Arcana es un bloque similar en apariencia a la mesa de encantamiento
|
||||
donde puedes cargar, mejorar y ligar hechizos a una varita. Simplemente coloca donde sea
|
||||
y haz clic derecho, y veras una interfaz aparecer parecida a la de la derecha.
|
||||
PAGEBREAK
|
||||
IMAGE WORKBENCH
|
||||
LINEBREAK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
La Mesa de Trabajo Arcana
|
||||
PAGEBREAK
|
||||
SECTION Ligando Hechizos
|
||||
Ligando Hechizos
|
||||
--------------------
|
||||
Para ligar un hechizo a tu varita, simplemente coloca tu varita en el espacio central
|
||||
de la Mesa de Trabajo Arcana, luego coloca el libro de hechizo en uno de los espacios
|
||||
que estan alrededor y pulsa Aplicar. Puedes ligar 5 hechizos a la vez, esto puede ser
|
||||
aumentado con mejoras. Cuando tienes una varita en la mano, puedes cambiar los hechizos
|
||||
con las NEXT_SPELL_KEY y PREVIOUS_SPELL_KEY teclas. Tambien puedes cambiarlo al agacharte
|
||||
y moviendo la rueda del raton.
|
||||
|
||||
SECTION Cargando varitas
|
||||
Cargando varitas
|
||||
--------------------
|
||||
Para cargar tu varita, coloca la varita en el espacio central de la Mesa de Trabajo Arcana
|
||||
y coloca algunos cristales magicos en el espacio mas arriba en la izquierda, y despues
|
||||
pulsa Aplicar. Cada cristal vale MANA_PER_CRYSTAL mana, y la varita solo toma lo que
|
||||
necesita, asi que puedes mantener cristales en la Mesa de Trabajo Arcana para cuando
|
||||
los necesites. Todas las varitas tomaran un numero exacto de cristales para cargarla si esta
|
||||
vacia, a menos que tengan una mejora de almacenamiento aplicada.
|
||||
|
||||
SECTION Mejorando varitas
|
||||
Mejorando tu varita
|
||||
--------------------
|
||||
Para mejorar tu varita, necesitaras un Tomo de lo Arcano de tu nivel apropiado (ver
|
||||
Niveles) o una mejora de varita especial. Ambos pueden ser encontrados como botin o
|
||||
comprado a un mago. Para mejorar tu varita, colocala en el espacio central de la
|
||||
Mesa de Trabajo Arcana y la mejora en el espacio inferior a la izquierda, y pulsar Aplicar.
|
||||
|
||||
Mejoras de varita especiales mejorar un aspecto particular de la varita. Cada tipo de mejora
|
||||
se puede apilar 3 veces, y el total de mejoras que puede tener una varita depende del nivel.
|
||||
Las mejoras no pueden ser removidas.
|
||||
PAGEBREAK
|
||||
SECTION Flores y Frascos
|
||||
Flores y Frascos
|
||||
--------------------
|
||||
Es probable que te encuentres con flores brillantes creciendo en el suelo de tiempo
|
||||
en tiempo. Esas son flores de cristal magico, una fuente de mana natural. Pueden ser
|
||||
cosechadas y crafteadas para extraer mana en cristales.
|
||||
|
||||
Necesitas recargar tu varita de camino? No hay problema! El mana puede ser enfrascado.
|
||||
Simplemente craftea un frasco de mana con una botella de cristal y ocho cristales magicos
|
||||
y llevatelo contigo. Cuando necesites mana, solo craftea la varita con el frasco para
|
||||
recargar un poco. Este proceso consumira la botella. Un poco de mana se perdera en el
|
||||
proceso de enfrascamiento.
|
||||
PAGEBREAK
|
||||
SECTION Niveles
|
||||
Niveles
|
||||
--------------------
|
||||
Las varitas y los hechizos vienen en cuatro niveles: BASIC_COLOURBasicoRESET_COLOUR, APPRENTICE_COLOURAprendizRESET_COLOUR, ADVANCED_COLOURAvanzadoRESET_COLOUR y MASTER_COLOURMaestroRESET_COLOUR. Cada nivel es mejor que el anterior.
|
||||
|
||||
Las varitas BASIC_COLOURBasico RESET_COLOURson las que pueden ser crafteadas. Almacenan
|
||||
BASIC_MAX_CHARGE mana, y solo pueden lanzar hechizos basicos. Hechizos basicos son suficientemente simples para ser lanzados por cualquiera y no usan mucho mana. Esto
|
||||
no significa que son inservibles en niveles mas altos, sin embargo; su costo pequeno
|
||||
hace que algunos hechizos basicos sean utiles cuando tienes acceso a hechizos maestros.
|
||||
|
||||
Las varitas APPRENTICE_COLOURAprendiz RESET_COLOURson el siguiente nivel despues de las
|
||||
varitas basicas. Almacenan APPRENTICE_MAX_CHARGE mana y pueden lanzar hechizos basicos y de
|
||||
aprendiz. Los hechizos de aprendiz son mas llamativos que los basicos, pero cuestan mas.
|
||||
|
||||
Las varitas ADVANCED_COLOURAvanzado RESET_COLOURson muy raras y mucho mas poderosas.
|
||||
Pueden lanzar todos los hechizos excepto los maestros, y almacenar ADVANCED_MAX_CHARGE mana.
|
||||
Los hechizos avanzados pueden otorgar poderes de superhumano como invisibilidad y causar
|
||||
mucho dano a los enemigos.
|
||||
|
||||
Las varitas MASTER_COLOURMaestro RESET_COLOURson las mas poderosas varitas que existen. Almacenan MASTER_MAX_CHARGE mana, y pueden lanzar cualquier hechizo. Los libros de hechizos
|
||||
maestros son muy raros y los hechizos pueden causar una gran devastacion, no solo a los enemigos
|
||||
si no al mundo en si. Usar con precaucion.
|
||||
PAGEBREAK
|
||||
SECTION Elementos
|
||||
Elementos
|
||||
--------------------
|
||||
Los hechizos pertenecen a diferentes elementos, los cuales describen la naturaleza
|
||||
del hechizo y tambien tienen ventajas cuando son lanzados con ciertas varitas.
|
||||
|
||||
FIRE_COLOURFuego
|
||||
Quizas el elemento mas destructivo, fuego conlleva quemaduras, lava, y explosiones. Un piromano poderoso desatara el infierno sobre sus enemigos y probablemente encienda
|
||||
el mundo en el proceso. La mayoria de los ataques de fuego queman a sus objetivos,
|
||||
causando dano extra sobre el tiempo. Sin embargo, te en cuenta que no tendran efecto
|
||||
en monstruos del Nether.
|
||||
|
||||
ICE_COLOURHielo
|
||||
El elemento de hielo esta formado por todo lo que es frio. Los hechizos de hielo
|
||||
frencuentemente ralentizan a los enemigos o los congelan completamente, y son
|
||||
efectivos contra criaturas de fuego. La magia de hielo puede ser util fuera de
|
||||
combate, como para congelar un rio para poder cruzarlo a pie.
|
||||
|
||||
LIGHTNING_COLOURRayo
|
||||
Este elemento conlleva relampagos, tormentas y el clima. Un mago de tormenta poderoso
|
||||
es una fuerza dura de vencer, y algunos son capaces de llamar rayos a voluntad. Los
|
||||
hechizos de rayo con frecuencia hacen dano a varios enemigos a la vez y usualmente
|
||||
persiguen a su objetivo, haciendolos efectivos para atacar a cualquier monstruo...
|
||||
pero cuidado con los creepers.
|
||||
|
||||
NECROMANCY_COLOURNigromancia
|
||||
Nigromancia es el elemento de oscuridad, caos y lo no-muerto. Nigromantes son
|
||||
misteriosos y a veces considerados malos, aunque no siempre es el casp. Los
|
||||
hechizos de nigromancia son usados para invocar criaturas que pelearan por ti o
|
||||
hasta controlar la voluntad de tus enemigos.
|
||||
|
||||
EARTH_COLOURTierra
|
||||
El elemento de tierra esta enfocado en el mundo natural: animales, plantas, el viento, y cosas asi. La magia de tierra es diversa y toma una gran variedad de formas, desde envenerar enemigos hasta desatar la furia del clima. Los hechizos de tierra son una liga de ataque, defensa y utilidad.
|
||||
|
||||
SORCERY_COLOURHechiceria
|
||||
La hechiceria es el elemento de la fuerza y el cambio. Los hechiceros manipulan la luz,
|
||||
la gravedad y hasta la realidad para su beneficio. Los hechizos de hechiceria pueden
|
||||
ser usados, entre otras cosas, para conceder poderes magicos y mover objetos.
|
||||
|
||||
HEALING_COLOURCuracion
|
||||
El elemento de curacion conlleva defensa y regeneracion. Los sanadores buscan
|
||||
protegerse y a sus aliados lo mas posble, lo cual puede ser dificil para los
|
||||
oponentes. A pesar de no considerarse como un ataque, la luz purificadora de sus
|
||||
hechizos de curacion puede ser letales para los no-muertos. Los hechizos de
|
||||
curacion son indispensables cuando se esta dentro de combate.
|
||||
|
||||
Los limites entre los diferentes elementos no siempre son distintos, y algunos hechizos
|
||||
tienen atributos de otros elementos mas que del suyo.
|
||||
|
||||
Si eres suertudo, puedes que te encuentres una varita elemental. Estas varitas te
|
||||
permiten lanzar hechizos del elemento correcto con mas potencia de lo usual.
|
||||
PAGEBREAK
|
||||
SECTION Armadura de Mago
|
||||
Armadura de Mago
|
||||
--------------------
|
||||
Como mago, necesitaras algo para protegerte de las criaturas que combates.
|
||||
Ninguna armadura ordinal valdra. Para sacarle provecho a tus hechizos, necesitas
|
||||
armadura de mago: sombrero, tunica, pantalones y botas. A diferencia de las otras,
|
||||
estas no se romperan. Sin embargo, usaran energia arcana para proteger al usuario.
|
||||
Esto significa que deben ser cargados con cristales magicos. Ventajosamente no
|
||||
consumen mucho mana. Recargalos en la mesa o con frascos.
|
||||
|
||||
Puedes obtener armadura de mago crafteandola con Seda Magica, obtenida al craftear
|
||||
hilo con un cristal magico.
|
||||
|
||||
Esos magos que se dedican a practicar un solo elemento algunas veces visten
|
||||
piezas especiales las cuales ofrecen bonus a dicho elemento. Los sets completos
|
||||
de esta armadura son muy codiciados entre magos y no son faciles de conseguir.
|
||||
|
||||
Hay una legenda que habla sobre un sello arcano usado por los magos mas poderosos
|
||||
para mejorar en sobre manera su armadura.
|
||||
PAGEBREAK
|
||||
SECTION Magos y Torres
|
||||
Magos y Torres
|
||||
--------------------
|
||||
No temas - no eres el unico que practica magia en este mundo. En tus viajes, te encontraras con torres altas con unos distintivos techos puntiagudos.
|
||||
Estas son las residencias de varios magos. Una vida de soledad puede hacer que los magos se vuelvan grunones, pero usualmente son seres amigables que estan
|
||||
dispuestos a compartir su conocimiento contigo - con un precio. Preparate para pagar con gemas y metales preciosos, y a cambio recibiras grandezas arcanas.
|
||||
Si, en dado caso, un hechizo maestro es lo que buscas, deberar hablar con un especialista en dicho elemento.
|
||||
|
||||
Desafortunadamente, hay algunos magos que no le dan la bienvenida a los visitantes. Estos magos son marginados y son hostiles hacia cualquiera que cruce su camino. Aproximate a ellos con cautela, y preparate para defenderte contra magia sumamente poderosa. Derrotalos, y su conocimiento sera tuyo.
|
||||
PAGEBREAK
|
||||
SECTION Recetas de Crafteo
|
||||
Recetas de Crafteo
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
PAGEBREAK
|
||||
Recetas de Crafteo
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
PAGEBREAK
|
||||
Recetas de Crafteo
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
PAGEBREAK
|
||||
Recetas de Crafteo
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
PAGEBREAK
|
||||
Creditos
|
||||
--------------------
|
||||
Electroblob's Wizardry
|
||||
Version VERSION
|
||||
Para Minecraft MCVERSION
|
||||
|
||||
Disenado, codificado y texturizado por Electroblob
|
||||
|
||||
Gracias a Minecraft Forge y MCP, porque sin estos esto no hubiese sido posible.
|
||||
|
||||
Gracias tambien a la comunidad de Minecraft que crea mods, la cual siempre tiene una respuesta para mis problemas!
|
||||
|
||||
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
|
||||
@@ -0,0 +1,751 @@
|
||||
{
|
||||
"bookmark_start_section": "introduction",
|
||||
|
||||
"colours": {
|
||||
"text": "#000000",
|
||||
"caption": "#666666",
|
||||
"hyperlink": "#601ba0",
|
||||
"highlight": "#dd4c1d",
|
||||
"new_section": "#ee88f7"
|
||||
},
|
||||
|
||||
"images": {
|
||||
"workbench": {
|
||||
"location": "ebwizardry:textures/gui/arcane_workbench_picture.png",
|
||||
"caption": "奥术工作台",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 110
|
||||
},
|
||||
"crystal_ore": {
|
||||
"location": "ebwizardry:textures/gui/ore_picture.png",
|
||||
"caption": "水晶矿石",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 64,
|
||||
"height": 64
|
||||
},
|
||||
"magic_crystal": {
|
||||
"location": "ebwizardry:textures/items/crystal_magic.png",
|
||||
"caption": "魔法水晶",
|
||||
"u": 6,
|
||||
"v": 6,
|
||||
"width": 36,
|
||||
"height": 33,
|
||||
"texture_width": 48,
|
||||
"texture_height": 48,
|
||||
"border": false
|
||||
},
|
||||
"magic_wand": {
|
||||
"location": "ebwizardry:textures/items/wand_novice.png",
|
||||
"caption": "魔杖",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 64,
|
||||
"height": 64,
|
||||
"border": false
|
||||
},
|
||||
"crystal_flower": {
|
||||
"location": "ebwizardry:textures/gui/flower_picture.png",
|
||||
"caption": "水晶花",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 48,
|
||||
"height": 48
|
||||
},
|
||||
"wizard_tower": {
|
||||
"location": "ebwizardry:textures/gui/tower_picture.png",
|
||||
"caption": "巫师塔",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 110
|
||||
},
|
||||
"wizard_armour": {
|
||||
"location": "ebwizardry:textures/gui/armour_picture.png",
|
||||
"caption": "一整套巫师护具",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 90,
|
||||
"height": 90
|
||||
},
|
||||
"obelisk": {
|
||||
"location": "ebwizardry:textures/gui/obelisk_picture.png",
|
||||
"caption": "方尖碑",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 67
|
||||
},
|
||||
"shrine": {
|
||||
"location": "ebwizardry:textures/gui/shrine_picture.png",
|
||||
"caption": "大地圣祠",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 67
|
||||
},
|
||||
"tiers": {
|
||||
"location": "ebwizardry:textures/gui/tiers_picture.png",
|
||||
"caption": "宗师级魔杖",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 96,
|
||||
"height": 24,
|
||||
"border": false
|
||||
},
|
||||
"elements": {
|
||||
"location": "ebwizardry:textures/gui/elements_picture.png",
|
||||
"caption": "七种魔法元素",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 106,
|
||||
"height": 20,
|
||||
"border": false
|
||||
}
|
||||
},
|
||||
|
||||
"recipes": {
|
||||
"arcane_workbench": {
|
||||
"locations": [ "ebwizardry:arcane_workbench" ]
|
||||
},
|
||||
"magic_wand": {
|
||||
"locations": [ "ebwizardry:magic_wand" ]
|
||||
},
|
||||
"novice_wands": {
|
||||
"locations": [
|
||||
"ebwizardry:magic_wand",
|
||||
"ebwizardry:wand_fire",
|
||||
"ebwizardry:wand_ice",
|
||||
"ebwizardry:wand_lightning",
|
||||
"ebwizardry:wand_necromancy",
|
||||
"ebwizardry:wand_earth",
|
||||
"ebwizardry:wand_sorcery",
|
||||
"ebwizardry:wand_healing"
|
||||
]
|
||||
},
|
||||
"magic_missile_spell_book": {
|
||||
"locations": [ "ebwizardry:magic_missile_spell_book" ]
|
||||
},
|
||||
"wizard_handbook": {
|
||||
"locations": [ "ebwizardry:wizard_handbook" ]
|
||||
},
|
||||
"crystal_flower_to_crystals": {
|
||||
"locations": [ "ebwizardry:crystal_flower_to_crystals" ]
|
||||
},
|
||||
"crystal_blocks": {
|
||||
"locations": [
|
||||
"ebwizardry:crystal_block",
|
||||
"ebwizardry:crystal_block_fire",
|
||||
"ebwizardry:crystal_block_ice",
|
||||
"ebwizardry:crystal_block_lightning",
|
||||
"ebwizardry:crystal_block_necromancy",
|
||||
"ebwizardry:crystal_block_earth",
|
||||
"ebwizardry:crystal_block_sorcery",
|
||||
"ebwizardry:crystal_block_healing"
|
||||
]
|
||||
},
|
||||
"crystal_blocks_to_crystals": {
|
||||
"locations": [
|
||||
"ebwizardry:crystal_block_to_crystals",
|
||||
"ebwizardry:crystal_block_to_crystals_fire",
|
||||
"ebwizardry:crystal_block_to_crystals_ice",
|
||||
"ebwizardry:crystal_block_to_crystals_lightning",
|
||||
"ebwizardry:crystal_block_to_crystals_necromancy",
|
||||
"ebwizardry:crystal_block_to_crystals_earth",
|
||||
"ebwizardry:crystal_block_to_crystals_sorcery",
|
||||
"ebwizardry:crystal_block_to_crystals_healing"
|
||||
]
|
||||
},
|
||||
"crystal_shard": {
|
||||
"locations": [ "ebwizardry:crystal_shard" ]
|
||||
},
|
||||
"small_mana_flask": {
|
||||
"locations": [ "ebwizardry:small_mana_flask" ]
|
||||
},
|
||||
"medium_mana_flask": {
|
||||
"locations": [ "ebwizardry:medium_mana_flask" ]
|
||||
},
|
||||
"large_mana_flask": {
|
||||
"locations": [ "ebwizardry:large_mana_flask" ]
|
||||
},
|
||||
"runestone": {
|
||||
"locations": [
|
||||
"ebwizardry:runestone_fire",
|
||||
"ebwizardry:runestone_ice",
|
||||
"ebwizardry:runestone_lightning",
|
||||
"ebwizardry:runestone_necromancy",
|
||||
"ebwizardry:runestone_earth",
|
||||
"ebwizardry:runestone_sorcery",
|
||||
"ebwizardry:runestone_healing"
|
||||
]
|
||||
},
|
||||
"runestone_pedestal": {
|
||||
"locations": [
|
||||
"ebwizardry:runestone_pedestal_fire",
|
||||
"ebwizardry:runestone_pedestal_ice",
|
||||
"ebwizardry:runestone_pedestal_lightning",
|
||||
"ebwizardry:runestone_pedestal_necromancy",
|
||||
"ebwizardry:runestone_pedestal_earth",
|
||||
"ebwizardry:runestone_pedestal_sorcery",
|
||||
"ebwizardry:runestone_pedestal_healing"
|
||||
]
|
||||
},
|
||||
"transportation_stone": {
|
||||
"locations": [ "ebwizardry:transportation_stone" ]
|
||||
},
|
||||
"magic_silk": {
|
||||
"locations": [ "ebwizardry:magic_silk" ]
|
||||
},
|
||||
"wizard_hat": {
|
||||
"locations": [ "ebwizardry:wizard_hat" ]
|
||||
},
|
||||
"wizard_robe": {
|
||||
"locations": [ "ebwizardry:wizard_robe" ]
|
||||
},
|
||||
"wizard_leggings": {
|
||||
"locations": [ "ebwizardry:wizard_leggings" ]
|
||||
},
|
||||
"wizard_boots": {
|
||||
"locations": [ "ebwizardry:wizard_boots" ]
|
||||
},
|
||||
"blank_scroll": {
|
||||
"locations": [ "ebwizardry:blank_scroll" ]
|
||||
},
|
||||
"firebomb": {
|
||||
"locations": [ "ebwizardry:firebomb" ]
|
||||
},
|
||||
"poison_bomb": {
|
||||
"locations": [ "ebwizardry:poison_bomb" ]
|
||||
},
|
||||
"smoke_bomb": {
|
||||
"locations": [ "ebwizardry:smoke_bomb" ]
|
||||
},
|
||||
"spark_bomb": {
|
||||
"locations": [ "ebwizardry:spark_bomb" ]
|
||||
}
|
||||
},
|
||||
|
||||
"sections": {
|
||||
|
||||
"inside_cover": {
|
||||
"centre": {
|
||||
"x": true,
|
||||
"y": true
|
||||
},
|
||||
"text": [
|
||||
|
||||
"巫师手札",
|
||||
|
||||
"By Electroblob"
|
||||
]
|
||||
},
|
||||
|
||||
"introduction": {
|
||||
"title": "介绍",
|
||||
"text": [
|
||||
|
||||
"向你致以敬意, 巫师! 这本书介绍了数种魔法类别以及操纵这些元素的方法。 我必须提醒你,这本书并不只是像现在这样,看起来十分普通 —— 当你在探索这个世界时,书中新的内容会不断地具现出来。",
|
||||
|
||||
"点击单箭头按钮可以切换页数, 点击双箭头按钮可以在章节之间切换. 点击中心按钮可以返回目录。",
|
||||
|
||||
"点击紫色的链接将会直接跳转到相关页面, 右键书签将会把书签移动到当前页面, 左键书签将会返回标记页面。"
|
||||
]
|
||||
},
|
||||
|
||||
"main_contents": {
|
||||
"title": "内容",
|
||||
"contents": {
|
||||
"id": "main_contents",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
}
|
||||
},
|
||||
|
||||
"setting_up": {
|
||||
"title": "在最开始",
|
||||
"include_in_contents": "main_contents",
|
||||
"text": [
|
||||
|
||||
"想要开始你的巫术之旅,你需要:",
|
||||
|
||||
"- 一把魔杖, 合成如下所示:",
|
||||
|
||||
"#recipe magic_wand",
|
||||
|
||||
"- 一个 @arcane_workbench 奥术工作台@ , 合成如下所示:",
|
||||
|
||||
"#recipe arcane_workbench",
|
||||
|
||||
"- 一本 @spells 法术@ 书. 你可以在战利品箱发现法术书, 它也会以掉落物形式出现,你也可以与其他巫师交易。当然你也可以制作一本初始的法术书, 魔法飞弹, 如下所示:",
|
||||
|
||||
"#recipe magic_missile_spell_book",
|
||||
|
||||
"你还要准备大量的魔法水晶,为你的魔杖注入 @mana 魔力@ ."
|
||||
]
|
||||
},
|
||||
|
||||
"mana": {
|
||||
"title": "魔力",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:crystal"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"魔力作为一种魔法能量,是巫师力量的来源。 它自身并不是某种物质; 它是无处不在的场域,充塞于世界上的一切之中. 特殊的情况下,它会以水晶的形式在自然中出现, 而这种水晶通常会镶嵌于地底的石头中. @wands 魔杖@ 可以储存魔力, 这些魔力会被你引导到你所释放的 @spells 法术@ 中。不同的法术需要的魔力各不一样, 魔力损耗取决于法术威力以及时长。",
|
||||
|
||||
"#image crystal_ore",
|
||||
|
||||
"#image magic_crystal",
|
||||
|
||||
"人们普遍认为魔力无法被创生或毁灭, 当释放法术时, 法术所引导的魔力会消散到周围环境。这确实是魔力最广泛地存在形式 - 散布于世界的各个角落。然而, 一旦需要利用这些魔力, 你必须, 就像历经几千年而形成的地底水晶一样,将其凝合起来。又或者通过人工的方式将其聚合为固体形态 - 但这一精深的课题已经超出了本书的范围了. 当然,也存在着一些方法,能够提高你的魔力使用效率,或者在施法过程中恢复一些魔力消耗。"
|
||||
]
|
||||
},
|
||||
|
||||
"wands": {
|
||||
"title": "魔杖",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:arcane_initiate"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"魔杖是巫师的工具。你能够释放任何你当前的魔杖等阶能够释放的@spells 法术@ ,(参见 @tiers 等阶@ ). 魔杖有许多种类型 ,但可以肯定的是,你需要从一把基础魔杖来开启你的巫师之旅。",
|
||||
|
||||
"#image magic_wand",
|
||||
|
||||
"大多数魔杖的制作,在最开始时相当简单,将一块魔法水晶固定在木棍的一端,而另一端镶嵌一粒金粒,一根简单的魔杖就制作好了。魔法水晶是魔杖力量的来源, 它提供了必要的,用来引导 @spells 法术@ 的核心. 魔杖的其它部分也很重要, 它不仅能让你方便的手持魔杖进行施法, 而且还充当了引导和定向 @mana 魔力@ 流动的通路。",
|
||||
|
||||
"随着魔杖释放的法术越多, 它引导 @spells 法术@ 的效率会越来越高, 因此可以可以用它来施放更强大的魔法。这种能力的变化可以从魔杖本身的形状和外观上的细微变化中看出: 随着魔杖变得越来越强大, 它顶端的魔法水晶将会变得更有活力, 水晶的颜色也会变化,变化的颜色取决于它所引导的 @elements 元素@ , 制作它的木材将会生长和扭曲,形成更复杂的形状。",
|
||||
|
||||
"手持魔杖的时候, 屏幕的角落会出现一个显示框。 上面会显示当前选中的法术及其图标,如果当前法术被施放,其上的冷却条将会指示该法术可以再次施放的时间间隔。 显示框还能显示与魔杖当前使用的法术相连的上一个和下一个法术的名称. 如要在法术间切换, 你可以使用 #next_spell_key 和 #previous_spell_key 键 (这些都可以在 选项 -> 控制 中修改). 也可以在潜行时通过滚动鼠标滚轮来切换法术。",
|
||||
|
||||
"查看物品栏时, 将鼠标悬停在一根魔杖上,就会显示出还有多少 @mana 魔力@ 储存在其中, 以及当前所应用于魔杖的 @spells 法术@ 以及任何特殊的能力. 想要查询魔杖的更详细的信息,可将其放置在 @arcane_workbench 奥术工作台@ ."
|
||||
]
|
||||
},
|
||||
|
||||
"spells": {
|
||||
"title": "法术",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/spells"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"一把 @wands 魔杖@ ,如果没有法术,那你就无法使用它. 法术有两种记录的形式: 永久性的写在法术书中,或者写在一次性的法术卷轴上",
|
||||
|
||||
"法术书本身没什么用;但它们可以将其所包含的法术绑定到 @wands 魔杖@ 上. 世界中的很多地方都藏有法术书,你很快就能找到一本. 当你找到法术书时,将鼠标悬停在在法术书上就能看到法术的基本信息。你也可以在拿着一本法术书右键来阅读更多关于它的内容。",
|
||||
|
||||
"卷轴有不同的用途: 右键将会施放与之绑定的法术, 在此过程中卷轴会销毁。像法术书一样,卷轴可以在世界各地找到,但你也可以自己制作(参见 @enchanting_scrolls 附魔卷轴@ ).",
|
||||
|
||||
"当你需要在一些特定的情形下中使用少量特殊的法术,但又不想占用你的 @wands 魔杖@ 法术位时,卷轴将会发挥巨大的作用。然而,我必须提醒你,与使用魔杖相比,使用卷轴是一种效率低下的施法方法。",
|
||||
|
||||
"对不了解该法术的人而言, 那些用于书写法术书的魔法符文实在是令人头疼。为了鉴定一个法术,你可以尝试施放该法术,看看会发生什么 - 尽管这样做可能会产生副作用, 而且许多法术需要一定的条件才能生效。更重要的是,在施放一个你不了解的法术时,总会有误读该法术的可能, 而那些由误读而带来的潜在的危险的强度则取决于该法术的威力.一个更安全、更可靠的选择是使用鉴定卷轴,你可以在箱子里找到或者从巫师那里买到. 手持鉴定卷轴右键,将会识别第一个你所不知道的法术,该过程先将快捷栏的右边开始,然后向左依次检索, 鉴定完毕会消耗鉴定卷轴。"
|
||||
]
|
||||
},
|
||||
|
||||
"arcane_workbench": {
|
||||
"title": "奥术工作台",
|
||||
"include_in_contents": "main_contents",
|
||||
"contents": {
|
||||
"id": "arcane_workbench_subsections",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
},
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/arcane_workbench"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"奥术工作台外观上与附魔台很相似,它可以用来为你的魔杖充能、升级 ,以及绑定 @spells 法术@ 到你的 @wands 魔杖@ 。制作方法如下所示:",
|
||||
|
||||
"#recipe arcane_workbench",
|
||||
|
||||
"以下内容展示了在奥术工作台中可以执行的操作。",
|
||||
|
||||
"#image workbench"
|
||||
],
|
||||
"sections": {
|
||||
"binding_spells": {
|
||||
"title": "绑定法术",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/arcane_workbench"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"想要绑定@spells 法术@到你的@wands 魔杖@, 只需将你的魔杖放在工作台中间的凹槽里,然后把法术书放在周围的一个槽里,然后点击“应用”按钮即可. 你会注意到法术书在这个过程中并没有发生变化 - 这是因为法术绑定行为不会从法术书中“取走”法术; 相反,它使魔杖与法术相协调。你可以通过简单地重复法术绑定过程来改变你魔杖上的法术,以及你也可以一次性在一根魔杖上绑定五种法术, 而一次性绑定法术上限的个数会随着魔杖协调升级而增加"
|
||||
]
|
||||
},
|
||||
"charging_wands": {
|
||||
"title": "魔杖充能",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/arcane_workbench"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"想要充能你的 @wands 魔杖@ , 你需要把魔杖放在奥术工作台的中央凹槽里,然后把一些魔法水晶放在左下角的凹槽里, 最后点击“应用”按钮即可。每个水晶含有#mana_per_crystal @mana 魔力@, 充能时魔杖不会过量吸收魔力, 所以你可以在工作台中常备一些水晶,以便不时之需。不过要记住,魔杖只能吸收一整个水晶中的魔力, 例如,增加30点魔力, #example_charging_loss 魔力将会损失。."
|
||||
]
|
||||
},
|
||||
"upgrading_wands": {
|
||||
"title": "升级魔杖",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/tome_of_arcana"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"为了升级你的 @wands 魔杖@ , 你需要一本适当 @tiers 等阶@ 的奥法宝典 或者一些特殊的魔杖升级. 两者都可以作为战利品或者从巫师那里购买. 想要升级你的魔杖, 你需要把它放在奥术工作台的中央凹槽,然后将升级物品放置在右上角凹槽,最后点击应用。",
|
||||
|
||||
"特殊的魔杖升级可以改善魔杖某个方面的能力。每种类型的升级最多可以叠加三次,一根魔杖可以升级的总数取决于它的等级。魔杖的升级不能被移除。"
|
||||
]
|
||||
},
|
||||
"enchanting_scrolls": {
|
||||
"title": "附魔卷轴",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/scrolls"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"奥术工作台也可以用来附魔 @spells 法术@ 卷轴。首先,你需要一个空白卷轴, 空白卷轴由线和纸组成, 以及一本法术书, 还要足够的 @mana 魔力@ ,这样才能够成功使法术拓印在空白卷轴上。",
|
||||
|
||||
"#recipe blank_scroll",
|
||||
|
||||
"将魔法水晶放在左下的凹槽, 空白卷轴放置在中央凹槽, 将一本法术书放置在周围凹槽, 点击应用来附魔该卷轴。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"wizard_armour": {
|
||||
"title": "巫师护具",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:arcane_initiate"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"作为一名巫师, 你需要一些东西在战斗时保护你不受过高的伤害,普通的盔甲可无法承此重任。为了能够在提供保护时还能让你最高效率地使用的魔力, 你需要一套巫师护具: 包括帽子、长袍、裤子和靴子。 与普通盔甲不同的是,它们耐久归零之后不会消失。而且,蕴藏在其中的奥术能量将会保护穿戴者。当然,这意味着它们必须使用水晶充能, 这一点和魔杖很相似。幸运的是, 这些护具不太消耗@mana 魔力@. 你可以像和魔杖那样,将其放置在 @arcane_workbench 奥术工作台@ ,或者使用 @mana_flasks 魔力瓶@ 为其充能, 但是要小心-如果护具们耗尽了魔力,它们将不再提供任何保护。",
|
||||
|
||||
"#image wizard_armour",
|
||||
|
||||
"你可以用魔法绸缎制造巫师护具:",
|
||||
|
||||
"#recipe magic_silk",
|
||||
"#recipe wizard_hat",
|
||||
"#recipe wizard_robe",
|
||||
"#recipe wizard_leggings",
|
||||
"#recipe wizard_boots",
|
||||
|
||||
"你可以用附魔台为巫师护具附魔,而因为魔法绸缎的固有属性, 它们倾向于被附魔上能够使它们留存的更久的附魔. 对巫师具有特殊的实用价值为魔法,冰霜,雷电保护附魔, 这些附魔可以有效抵御其它巫师的进攻。",
|
||||
|
||||
"那些沉迷于练习单系魔法的巫师,有时会穿上可以给予额外魔法增益的服装。全套这样的服装在巫师群体中很受欢迎,所以并不容易找到。",
|
||||
|
||||
"在传说中,最强大的巫师使用一种神秘的封印来提高他们护甲的能力。"
|
||||
]
|
||||
},
|
||||
|
||||
"magical_world": {
|
||||
"title": "魔法世界",
|
||||
"include_in_contents": "main_contents",
|
||||
"contents": {
|
||||
"id": "magical_world_subsections",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
},
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/on_subsection_unlock"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"一个人仅仅呆在家里是无法掌握奥术之力的 - 这个充塞着魔力的世界等待着你的探索! 古代遗迹,还有那些神秘的,抱着善意或者恶意的生物等待着你发现 - 如果你知道它们在哪。最伟大的巫师往往有着强烈的好奇心, 他们通过对周围环境的探索获得大量的知识和力量, 然后通过实验去验证他们所发现的。",
|
||||
|
||||
"巫师的大部分时间都是一个人度过的, 然而对学习奥术而言,与他人分享彼此的知识很重要。你应该去寻找那些先行者,尽可能多地向他们学习:交流可以说是最强大的力量了。"
|
||||
],
|
||||
"sections": {
|
||||
"crystal_flowers": {
|
||||
"title": "魔法水晶花",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/crystal_flowers"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"在你的旅行中,你可能在野外会不时地遇到一种奇怪的,发光的花. 这些独特的花朵被称为水晶花,它们能够高效的聚集 @mana 魔力@ - 直到今天,还没有人能确定它高效聚集魔力的原因。但是我们知道,它们可以被收集和制作成魔法水晶,使得它们成为相当有用的地上的魔力来源。然而,因为花的尺寸很小,而且它们无法密集生长,所以通过这种方式收获的魔力并不是很多,",
|
||||
|
||||
"#image crystal_flower",
|
||||
"#recipe crystal_flower_to_crystals"
|
||||
]
|
||||
},
|
||||
"wizard_towers": {
|
||||
"title": "巫师塔",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:wizard_tower"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"不要害怕 —— 你不是这个世界上唯一一个使用魔法的人。 在旅行途中,你很可能会遇到一两个有着独特尖顶的高塔。这是其它巫师的住所。孤独的生活有时会让巫师有点暴躁,但他们通常都很友好,而且愿意与你分享他们的知识 —— 尽管是有代价的。你可以用贵重金属和宝石来与他们交换珍贵的奥术知识。",
|
||||
|
||||
"然而,如果你寻找的是 @tiers 宗师@ 法术, 你需要去找那些专业人士。",
|
||||
|
||||
"#image wizard_tower",
|
||||
|
||||
"不幸的是,有一些巫师不欢迎访客的到来。这些巫师早已被逐出巫师群体, 他们对任何路过此地的人都抱有敌意. 与这些人打交道要格外谨慎, 并做好防御强大魔法的准备。打败他们,他们的知识就是你的了。",
|
||||
|
||||
"还应该指出的是,没有哪个巫师会乐意被攻击或被偷 - 他们更喜欢按他们的规矩来。"
|
||||
]
|
||||
},
|
||||
"obelisks": {
|
||||
"title": "方尖碑",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/obelisks"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"古代魔法遗迹散布在世界各地, 其中最著名的是雕刻着许多符号和符文的石头建筑. 这些遗迹似乎是某种古代文明的遗迹。不管是谁,或者是什么东西建造了它们,它们显然拥有相当丰富的魔法知识, 并使用这些知识在这些地方设置了保护魔法,这些魔法直到今天还在生效。",
|
||||
|
||||
"这些结构大致可分为两类. 第一个,也是最常见的,是方尖碑: 符文石制成的尖顶, 底部有一个开放的结构,其中为次级魔法遗迹,你在上面还能感受到残存着的气息,那是来自被遗忘的过去。",
|
||||
|
||||
"#image obelisk",
|
||||
|
||||
"这些建筑通常受到魔法的保护,一旦有人离得太近,就会召唤敌对 @creatures 生物@ 。击退这些生物并摧毁它们的源头,那么这个遗迹的财富就是你的了。"
|
||||
]
|
||||
},
|
||||
"shrines": {
|
||||
"title": "圣祠",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:visit_shrine"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"第二种,也是比较少见的一种,被称为圣祠。这些结构由围绕着中心基座的一圈符文石柱组成, 基座上放置着一个箱子,里面装满了古代的 @artefacts 圣遗物@ . 这个箱子通常被一个奥术锁保护着, 除了箱子的主人,其它人都无法打开。整个结构也被一个控制场域保护着, 防止任何离得太近的东西逃跑。",
|
||||
|
||||
"#image shrine",
|
||||
|
||||
"只要你意识到圣祠所包含的强大魔力和其重要性, 箱子里所存放的东西的珍贵毋庸置疑, 这些结构对任何有抱负的巫师都特别有吸引力 - 但是要谨慎。有很多关于巫师被困在封闭空间里,慢慢被逼疯的报道,这也许是因为幽闭恐惧症。 然而,越来越多的人相信这种情况的发生也是圣祠的保护魔法的一部分, 被困在里面的巫师实际上是被控制来保护该结构的。 对于任何胆敢靠近的人来说,这无疑令人不寒而栗....."
|
||||
]
|
||||
},
|
||||
"creatures": {
|
||||
"title": "魔法生物",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/magical_creatures"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"除了巫师,许多其他生物也可以使用魔法。而在其中有很多从出生开始就拥有魔力,而且它们大部分都可以施放 @spells 法术@ . 其中一种你可能会在守卫 @obelisks 方尖碑@ 的生物中看到,他们可能是由更强大的召唤师召唤而来。偶尔你还能够在野外中被发现魔法能力不强的生物。"
|
||||
]
|
||||
},
|
||||
"artefacts": {
|
||||
"title": "圣遗物",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:artefact"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"当你在探索圣祠时,你可能会幸运地发现一些古老的魔法制品 —— 一些能赋予穿戴者独特而强大的魔法和特殊能力的物品。已发现三种类型: 戒指,给予法术增幅和额外效果,护身符,提高防御能力,还有符咒,能产生特殊效用。这些魔法制物似乎只有在正确佩戴时才能发挥作用; 仅仅是把它们放在身上无法发挥它们的效果。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"tiers": {
|
||||
"title": "等阶",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/tome_of_arcana"
|
||||
],
|
||||
"text":[
|
||||
|
||||
"@wands 魔杖@ 和 @spells 法术@ 分成四阶: #colour_novice新手#colour_reset, #colour_apprentice学徒#colour_reset, #colour_advanced进阶 #colour_reset 和 #colour_master宗师#colour_reset.每一阶都比上一阶更强大。",
|
||||
|
||||
"#image tiers",
|
||||
|
||||
"#colour_novice新手 #colour_reset魔杖 魔杖可以手工制作. 它们可以容纳 #novice_max_charge 魔力, 且只可以释放基础法术. 基础法术很简单,任何人都可以使用,而且通常情况下不会消耗很多魔力。然而,这并不一定意味着在你步入更高等阶后,它们就没有用处了; 即便你已经可以使用宗师级魔法,基础法术低廉的魔力消耗依然使得它们备受青睐。",
|
||||
|
||||
"#colour_apprentice学徒 #colour_reset魔杖 是新手的下一等阶. 学徒级魔杖可容纳 #apprentice_max_charge 魔力 ,可以施放基础和学徒法术。学徒法术比新手法术更令人眼前一亮,但通常魔力消耗更多。",
|
||||
|
||||
"#colour_advanced进阶 #colour_reset魔杖 魔杖是相当罕见的,而且更强大. 他们可以使用除宗师法术以外的所有法术,并能够容纳 #advanced_max_charge 魔力. 进阶法术能够带来超越人类极限的能力,譬如隐形,以及为你的敌人带来浩劫。",
|
||||
|
||||
"#colour_master宗师 #colour_reset魔杖 魔杖是世界上最强大的魔杖. 他们能够容纳 #master_max_charge 魔力, 并且能够随意施展任何法术.宗师等阶的法术书是非常罕见的,这些法术不仅可以对敌人造成彻底的破坏,甚至可以对世界本身造成破坏。请务必谨慎使用。",
|
||||
|
||||
"要升级到更高的等级,一根魔杖首先要有足够的力量来引导该等级的法术。魔杖在施法时会增进自身。法术种类、法术强度、元素效果和其他外部因素都会影响魔杖的成熟速度。",
|
||||
|
||||
"一旦一根魔杖足够强大,一本奥法宝典就是魔杖提升到下一层所需的最后催化剂 (参见 @upgrading_wands 升级魔杖@ ), 升级过后,魔杖又可以继续成长到下一等阶。"
|
||||
]
|
||||
},
|
||||
|
||||
"elements": {
|
||||
"title": "元素",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/elements"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"@spells 法术@ 分属于不同的元素 , 元素决定了法术的本质并且决定了它会被何种 @wands 魔杖@ 增幅。",
|
||||
|
||||
"#image elements",
|
||||
|
||||
"#colour_fire火焰#colour_reset \n 它或许是最具破坏性的元素, 火与燃烧、熔岩和爆炸有关。 一位强大的舞焰师能够释放出地狱烈焰灼烧他的敌人,并可能在这个过程中点燃整个世界。大多数攻击型火焰法术都会点燃目标,造成持续的伤害。然而,要注意火系法术可能对下界生物没有效果。",
|
||||
|
||||
"#colour_ice冰霜#colour_reset \nThe 冰元素囊括了所有与寒冷有关的事物,冰霜法术通常会让敌人减速或者完全冻结,同时对火焰生物能造成额外伤害。冰霜魔法在战斗之外也同样有用,比如冻住河流,让你方便的过河。",
|
||||
|
||||
"#colour_lightning雷电#colour_reset \n 这种元素与闪电,风暴和天气有关。绝不可忽视的一位强大的驯雷师的力量,他们能够使雷电屈从于他们的意志。雷电法术通常能够一次性伤害多个敌人,并且能够自动寻找目标,这使得它们能有效地攻击任何生物…… 但是要小心爬行者。",
|
||||
|
||||
"#colour_necromancy死灵#colour_reset \n 死灵元素与黑暗, 混乱与亡灵相关. 操纵死灵元素的巫师是神秘的,而且通常被认为是邪恶的,但实际上往往并不是这样。死灵法术通常能够召唤 @creatures 魔法生物@ 为你而战,亦可以扭曲你的敌人的意志。",
|
||||
|
||||
"#colour_earth大地#colour_reset \nThe 大地元素与自然相关: 动物,植物,风,以及与这些相似的。大地魔法种类繁多,形式多样,既可以毒害敌人,亦可展现天气狂暴的一面。大地法术集合了攻击、防御和功能类法术。",
|
||||
|
||||
"#colour_sorcery秘法#colour_reset \n 秘法元素与力场与变化有关. 秘术师可以操纵光、重力甚至是现实本身来满足他们的需要。此外,秘法系法术可以赋予施法者奇特的魔法能力,或者可以帮助施法者移动他所希望移动的目标。",
|
||||
|
||||
"#colour_healing治愈#colour_reset \n 治愈元素侧重于防御和再生,治疗师尽可能多地保护他们自己和他们的盟友,因此在特殊情况下会非常难对付。虽然一般不用于攻击,但某些治疗法术的净化之光会对亡灵造成相当大的伤害。治疗法术在战斗中是必不可少的。",
|
||||
|
||||
"不同元素之间的界限并不总是泾渭分明的,有些法术反而具有其它元素的特征。",
|
||||
|
||||
"如果幸运的话,你可能会找到元素水晶。元素水晶是一种魔法水晶,它在生长过程中吸收了元素属性 - 尽管这种情况发生的条件和机制仍然是一个谜。 然而,我们确实知道,这些水晶可以用来制造单元素魔杖,这种魔杖会增幅与其相对应元素的法术的法术强度。"
|
||||
]
|
||||
},
|
||||
|
||||
"miscellaneous": {
|
||||
"title": "杂项",
|
||||
"include_in_contents": "main_contents",
|
||||
"contents": {
|
||||
"id": "miscellaneous_subsections",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
},
|
||||
"triggers": [
|
||||
"ebwizardry:on_subsection_unlock"
|
||||
],
|
||||
"sections": {
|
||||
"mana_flasks": {
|
||||
"title": "魔力瓶",
|
||||
"include_in_contents": "miscellaneous_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/mana_flasks"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"Arkendur的魔法物品供应 - 我们有你所想要的魔法物品!",
|
||||
|
||||
"想要在旅途中充能你的 @wands 魔杖@ ? 没问题! @mana 魔力@ 现在可以装瓶了。将八颗魔法水晶放入玻璃瓶中,魔法瓶的制作就这样简简单单。 当你想使用它时, 将它与你的魔杖合成一下,它将会为你的魔杖恢复一些魔力。",
|
||||
|
||||
"#recipe medium_mana_flask",
|
||||
|
||||
"新品!让我们为你介绍崭新的小型魔力瓶和大型魔力瓶 - 现在你可以根据你的需要来挑选适合大小的魔力瓶!",
|
||||
|
||||
"#recipe small_mana_flask",
|
||||
"#recipe large_mana_flask",
|
||||
|
||||
"* 这个过程会破坏瓶子。装瓶过程中会不可避免的损失一些魔力。"
|
||||
]
|
||||
},
|
||||
"throwable_items": {
|
||||
"title": "投掷物",
|
||||
"include_in_contents": "miscellaneous_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/throwables"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"有许多 @spells 法术@ 召唤出物理实体的投掷物, 有些还可以直接制作。燃烧弹, 毒气弹, 电击弹, 烟雾弹都可以制造:",
|
||||
|
||||
"#recipe firebomb",
|
||||
"#recipe poison_bomb",
|
||||
"#recipe smoke_bomb",
|
||||
"#recipe spark_bomb"
|
||||
]
|
||||
},
|
||||
"automated_casting": {
|
||||
"title": "施法自动化",
|
||||
"include_in_contents": "miscellaneous_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:enchant_scroll"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"最近的实验表明,自动化释放 @spells 法术@ 是可能的, 只用一个简单的发射器就可以办到了。 没有人确切知道其中的原理, 但似乎红石的奇怪属性能够激活法术卷轴。在发射器里放一些法术卷轴,然后给它通上红石信号就可以了。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"crafting_recipes": {
|
||||
"title": "合成配方",
|
||||
"include_in_contents": "main_contents",
|
||||
"text": [
|
||||
|
||||
"#recipe arcane_workbench",
|
||||
"#recipe novice_wands",
|
||||
"#recipe magic_missile_spell_book",
|
||||
"#recipe wizard_handbook",
|
||||
"#recipe crystal_flower_to_crystals",
|
||||
"#recipe crystal_blocks",
|
||||
"#recipe crystal_blocks_to_crystals",
|
||||
"#recipe crystal_shard",
|
||||
"#recipe small_mana_flask",
|
||||
"#recipe medium_mana_flask",
|
||||
"#recipe large_mana_flask",
|
||||
"#recipe runestone",
|
||||
"#recipe runestone_pedestal",
|
||||
"#recipe transportation_stone",
|
||||
"#recipe magic_silk",
|
||||
"#recipe wizard_hat",
|
||||
"#recipe wizard_robe",
|
||||
"#recipe wizard_leggings",
|
||||
"#recipe wizard_boots",
|
||||
"#recipe blank_scroll",
|
||||
"#recipe firebomb",
|
||||
"#recipe poison_bomb",
|
||||
"#recipe smoke_bomb",
|
||||
"#recipe spark_bomb"
|
||||
]
|
||||
},
|
||||
|
||||
"credits": {
|
||||
"title": "鸣谢",
|
||||
"include_in_contents": "main_contents",
|
||||
"text": [
|
||||
|
||||
"Electroblob's Wizardry \n版本 #version \nFor Minecraft #mcversion",
|
||||
|
||||
"设计, 代码和材质 by Electroblob",
|
||||
|
||||
"感谢Minecraft Forge 以及 MCP, 没有它们, 这个mod就不可能得以实现。",
|
||||
|
||||
"同时也感谢Minecraft modding community, 他们总会在我遇到mod难题时帮助我!",
|
||||
|
||||
"此外, 我还要感谢以下人员对本mod的贡献:",
|
||||
|
||||
"代码:",
|
||||
|
||||
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica",
|
||||
|
||||
"翻译:",
|
||||
|
||||
"- 西班牙语 : MadWrist \n- 俄语: VilagVil, kellixon \n- 法语: Hahdrim \n- 葡萄牙语: lorrampi \n- 中文: ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- 韩语: shejery, rewi_wire \n- 波兰语: Trozuu \n- 德语: BirdyDragon",
|
||||
|
||||
"雷电效果音: OhhWowProductions",
|
||||
|
||||
"想要获得更多信息, 请参看 @https://github.com/Electroblob77/Wizardry/wiki wiki@.",
|
||||
|
||||
"觉得不过瘾? 加入 @https://discord.gg/MTmMzMv Discord server@ 获得第一手资讯,还可以一起探讨新内容!"
|
||||
|
||||
]
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,225 +0,0 @@
|
||||
PAGEBREAK
|
||||
LINEBREAK
|
||||
|
||||
|
||||
|
||||
|
||||
巫师手册
|
||||
|
||||
|
||||
|
||||
作者 Electroblob
|
||||
PAGEBREAK
|
||||
简介
|
||||
--------------------
|
||||
|
||||
欢迎您,伟大的巫师!本书将会向您阐释奥术的工作原理以及使用它们的方法。
|
||||
|
||||
如果您不慎遗失了本书,您可以在工作台上用书和魔法水晶制作一本新的。
|
||||
PAGEBREAK
|
||||
内容
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
SECTION 准备工作
|
||||
准备工作
|
||||
--------------------
|
||||
要打开通向巫术的大门,您将会需要以下几样东西:
|
||||
|
||||
- 一根法杖,由一粒金粒,一根木棍和一块魔法水晶合成。
|
||||
|
||||
- 一个奥术工作台,由三块石头,一块青金石块,两块魔法水晶,两粒金粒和一块紫色地毯合成。
|
||||
|
||||
- 一本法术书,它们可以在箱子中找到,由怪物掉落或向巫师们购买。当然您也可以用一本书和四块魔法水晶制作一个初学者的法术“魔法飞弹”。
|
||||
|
||||
此外,您将会需要更多的魔法水晶来为您的法杖提供魔力。
|
||||
PAGEBREAK
|
||||
SECTION 魔力
|
||||
魔力
|
||||
--------------------
|
||||
魔力是给予巫师们力量的奥术能量。它在自然界中以水晶的形式存在,这些水晶嵌在石缝中,可以在地下被找到。法杖中可以储存魔力,而这些魔力将被塑造为您施展的法术。不同的法术会消耗不同数量的魔力,这取决于它们有多么强大以及它们会持续多久。
|
||||
|
||||
将鼠标悬停在法杖上就可以看到其中的魔力储量。
|
||||
IMAGE CRYSTAL
|
||||
LINEBREAK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
魔法
|
||||
水晶矿 水晶
|
||||
PAGEBREAK
|
||||
SECTION 法杖
|
||||
法杖
|
||||
--------------------
|
||||
法杖是一个巫师的实用之选。有了法杖,您就可以施展任何法术,只要法杖能够承受它的力量(更深入的解释在“等级”一节中)。
|
||||
法杖有许多不同的种类,但您将从最基本的法杖开始。
|
||||
|
||||
拿着法杖时,屏幕的角落会出现一个小小的提示,它会显示当前选择的法术及其图标。此外,如果一个法术被施展了,会有一个冷却条显示还有多久才能再次施展这个法术。
|
||||
PAGEBREAK
|
||||
SECTION 法术
|
||||
法术
|
||||
--------------------
|
||||
一根没有法术可施展的法杖是毫无用处的。法术可以通过两种方式被记录下来:永久地记录在书上,或者暂时地记录在卷轴上。
|
||||
|
||||
法术书本身没有什么用处,它们是用来将其中记录的法术绑定到法杖上的。法术书可以在世界各处被发现,而且您肯定很快就会找到一本。当您发现了一本法术书时,您可以将鼠标悬停在上面来看一下法术的基本信息,您也可以拿着法术书按下右键来阅读法术的详细信息。
|
||||
|
||||
与之相反,卷轴的使用方式是不一样的:拿着卷轴右击将会施展其中绑定的法术,而在这个过程中卷轴将会被摧毁。像法术书一样,卷轴可以在世界各处被发现,但您也可以自己制作它们。首先拿一张纸和一些线合成空白卷轴,然后您可以在奥术工作台上将法术绑定到卷轴上,前提是您拥有关于这个法术的知识。这么做将会消耗与法术的魔力消耗相对应数量的魔法水晶(消耗的魔法水晶个数是向上取整的)。
|
||||
|
||||
对于未经训练的人来说,用于书写法术的魔法符文是无法辨识的。为了鉴定一个法术,您当然可以施展它然后看看发生了什么 - 但这么做可能会产生您不想看到的副作用,而且许多法术需要在特定的条件下才能起作用。一种更安全可靠的选择是使用鉴定卷轴,它可以在箱子里找到或向巫师购买。拿着它右击将会鉴定您热键栏中第一个未知的法术书或卷轴,并消耗鉴定卷轴。
|
||||
|
||||
如果您需要在一次探险中使用某个法术一两次但又不希望它占用您法杖的一个槽,那卷轴是十分有用的。但值得注意的是卷轴是一种相当没有效率的施法方式。
|
||||
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
|
||||
SECTION 合成配方
|
||||
合成配方
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
PAGEBREAK
|
||||
合成配方
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
PAGEBREAK
|
||||
合成配方
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
PAGEBREAK
|
||||
合成配方
|
||||
--------------------
|
||||
PAGEBREAK
|
||||
PAGEBREAK
|
||||
鸣谢
|
||||
--------------------
|
||||
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
|
||||
@@ -0,0 +1,750 @@
|
||||
{
|
||||
"bookmark_start_section": "introduction",
|
||||
|
||||
"colours": {
|
||||
"text": "#000000",
|
||||
"caption": "#666666",
|
||||
"hyperlink": "#601ba0",
|
||||
"highlight": "#dd4c1d",
|
||||
"new_section": "#ee88f7"
|
||||
},
|
||||
|
||||
"images": {
|
||||
"workbench": {
|
||||
"location": "ebwizardry:textures/gui/arcane_workbench_picture.png",
|
||||
"caption": "法術工作台",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 110
|
||||
},
|
||||
"crystal_ore": {
|
||||
"location": "ebwizardry:textures/gui/ore_picture.png",
|
||||
"caption": "水晶礦",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 64,
|
||||
"height": 64
|
||||
},
|
||||
"magic_crystal": {
|
||||
"location": "ebwizardry:textures/items/crystal_magic.png",
|
||||
"caption": "魔法水晶",
|
||||
"u": 6,
|
||||
"v": 6,
|
||||
"width": 36,
|
||||
"height": 33,
|
||||
"texture_width": 48,
|
||||
"texture_height": 48,
|
||||
"border": false
|
||||
},
|
||||
"magic_wand": {
|
||||
"location": "ebwizardry:textures/items/wand_novice.png",
|
||||
"caption": "法杖",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 64,
|
||||
"height": 64,
|
||||
"border": false
|
||||
},
|
||||
"crystal_flower": {
|
||||
"location": "ebwizardry:textures/gui/flower_picture.png",
|
||||
"caption": "水晶花",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 48,
|
||||
"height": 48
|
||||
},
|
||||
"wizard_tower": {
|
||||
"location": "ebwizardry:textures/gui/tower_picture.png",
|
||||
"caption": "法師塔",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 110
|
||||
},
|
||||
"wizard_armour": {
|
||||
"location": "ebwizardry:textures/gui/armour_picture.png",
|
||||
"caption": "法師服",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 90,
|
||||
"height": 90
|
||||
},
|
||||
"obelisk": {
|
||||
"location": "ebwizardry:textures/gui/obelisk_picture.png",
|
||||
"caption": "方尖碑",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 67
|
||||
},
|
||||
"shrine": {
|
||||
"location": "ebwizardry:textures/gui/shrine_picture.png",
|
||||
"caption": "神殿",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 110,
|
||||
"height": 67
|
||||
},
|
||||
"tiers": {
|
||||
"location": "ebwizardry:textures/gui/tiers_picture.png",
|
||||
"caption": "四種等級的法杖",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 96,
|
||||
"height": 24,
|
||||
"border": false
|
||||
},
|
||||
"elements": {
|
||||
"location": "ebwizardry:textures/gui/elements_picture.png",
|
||||
"caption": "七種法術元素",
|
||||
"u": 0,
|
||||
"v": 0,
|
||||
"width": 106,
|
||||
"height": 20,
|
||||
"border": false
|
||||
}
|
||||
},
|
||||
|
||||
"recipes": {
|
||||
"arcane_workbench": {
|
||||
"locations": [ "ebwizardry:arcane_workbench" ]
|
||||
},
|
||||
"magic_wand": {
|
||||
"locations": [ "ebwizardry:magic_wand" ]
|
||||
},
|
||||
"novice_wands": {
|
||||
"locations": [
|
||||
"ebwizardry:magic_wand",
|
||||
"ebwizardry:wand_fire",
|
||||
"ebwizardry:wand_ice",
|
||||
"ebwizardry:wand_lightning",
|
||||
"ebwizardry:wand_necromancy",
|
||||
"ebwizardry:wand_earth",
|
||||
"ebwizardry:wand_sorcery",
|
||||
"ebwizardry:wand_healing"
|
||||
]
|
||||
},
|
||||
"magic_missile_spell_book": {
|
||||
"locations": [ "ebwizardry:magic_missile_spell_book" ]
|
||||
},
|
||||
"wizard_handbook": {
|
||||
"locations": [ "ebwizardry:wizard_handbook" ]
|
||||
},
|
||||
"crystal_flower_to_crystals": {
|
||||
"locations": [ "ebwizardry:crystal_flower_to_crystals" ]
|
||||
},
|
||||
"crystal_blocks": {
|
||||
"locations": [
|
||||
"ebwizardry:crystal_block",
|
||||
"ebwizardry:crystal_block_fire",
|
||||
"ebwizardry:crystal_block_ice",
|
||||
"ebwizardry:crystal_block_lightning",
|
||||
"ebwizardry:crystal_block_necromancy",
|
||||
"ebwizardry:crystal_block_earth",
|
||||
"ebwizardry:crystal_block_sorcery",
|
||||
"ebwizardry:crystal_block_healing"
|
||||
]
|
||||
},
|
||||
"crystal_blocks_to_crystals": {
|
||||
"locations": [
|
||||
"ebwizardry:crystal_block_to_crystals",
|
||||
"ebwizardry:crystal_block_to_crystals_fire",
|
||||
"ebwizardry:crystal_block_to_crystals_ice",
|
||||
"ebwizardry:crystal_block_to_crystals_lightning",
|
||||
"ebwizardry:crystal_block_to_crystals_necromancy",
|
||||
"ebwizardry:crystal_block_to_crystals_earth",
|
||||
"ebwizardry:crystal_block_to_crystals_sorcery",
|
||||
"ebwizardry:crystal_block_to_crystals_healing"
|
||||
]
|
||||
},
|
||||
"crystal_shard": {
|
||||
"locations": [ "ebwizardry:crystal_shard" ]
|
||||
},
|
||||
"small_mana_flask": {
|
||||
"locations": [ "ebwizardry:small_mana_flask" ]
|
||||
},
|
||||
"medium_mana_flask": {
|
||||
"locations": [ "ebwizardry:medium_mana_flask" ]
|
||||
},
|
||||
"large_mana_flask": {
|
||||
"locations": [ "ebwizardry:large_mana_flask" ]
|
||||
},
|
||||
"runestone": {
|
||||
"locations": [
|
||||
"ebwizardry:runestone_fire",
|
||||
"ebwizardry:runestone_ice",
|
||||
"ebwizardry:runestone_lightning",
|
||||
"ebwizardry:runestone_necromancy",
|
||||
"ebwizardry:runestone_earth",
|
||||
"ebwizardry:runestone_sorcery",
|
||||
"ebwizardry:runestone_healing"
|
||||
]
|
||||
},
|
||||
"runestone_pedestal": {
|
||||
"locations": [
|
||||
"ebwizardry:runestone_pedestal_fire",
|
||||
"ebwizardry:runestone_pedestal_ice",
|
||||
"ebwizardry:runestone_pedestal_lightning",
|
||||
"ebwizardry:runestone_pedestal_necromancy",
|
||||
"ebwizardry:runestone_pedestal_earth",
|
||||
"ebwizardry:runestone_pedestal_sorcery",
|
||||
"ebwizardry:runestone_pedestal_healing"
|
||||
]
|
||||
},
|
||||
"transportation_stone": {
|
||||
"locations": [ "ebwizardry:transportation_stone" ]
|
||||
},
|
||||
"magic_silk": {
|
||||
"locations": [ "ebwizardry:magic_silk" ]
|
||||
},
|
||||
"wizard_hat": {
|
||||
"locations": [ "ebwizardry:wizard_hat" ]
|
||||
},
|
||||
"wizard_robe": {
|
||||
"locations": [ "ebwizardry:wizard_robe" ]
|
||||
},
|
||||
"wizard_leggings": {
|
||||
"locations": [ "ebwizardry:wizard_leggings" ]
|
||||
},
|
||||
"wizard_boots": {
|
||||
"locations": [ "ebwizardry:wizard_boots" ]
|
||||
},
|
||||
"blank_scroll": {
|
||||
"locations": [ "ebwizardry:blank_scroll" ]
|
||||
},
|
||||
"firebomb": {
|
||||
"locations": [ "ebwizardry:firebomb" ]
|
||||
},
|
||||
"poison_bomb": {
|
||||
"locations": [ "ebwizardry:poison_bomb" ]
|
||||
},
|
||||
"smoke_bomb": {
|
||||
"locations": [ "ebwizardry:smoke_bomb" ]
|
||||
},
|
||||
"spark_bomb": {
|
||||
"locations": [ "ebwizardry:spark_bomb" ]
|
||||
}
|
||||
},
|
||||
|
||||
"sections": {
|
||||
|
||||
"inside_cover": {
|
||||
"centre": {
|
||||
"x": true,
|
||||
"y": true
|
||||
},
|
||||
"text": [
|
||||
|
||||
"法師手冊",
|
||||
|
||||
"作者: Electroblob\n\n翻譯: Grant"
|
||||
]
|
||||
},
|
||||
|
||||
"introduction": {
|
||||
"title": "前言",
|
||||
"text": [
|
||||
|
||||
"你好啊,法師!\n\n本書介紹許多法術相關事物及使用方式。 這不是一本普通的書,其內容會隨著你在魔法世界的探索而逐漸呈現。",
|
||||
|
||||
"使用箭頭按鈕來翻頁,按下雙箭頭按鈕則可快速的切換章節,而中間的選單按鈕則是翻回主目錄頁面。",
|
||||
|
||||
"點擊任何紫色連結文字直接跳至相關頁面。對書籤點擊滑鼠右鍵可將書籤移到目前這頁,對書籤點擊滑鼠左鍵則可翻回書籤那頁。"
|
||||
]
|
||||
},
|
||||
|
||||
"main_contents": {
|
||||
"title": "目錄",
|
||||
"contents": {
|
||||
"id": "main_contents",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
}
|
||||
},
|
||||
|
||||
"setting_up": {
|
||||
"title": "準備",
|
||||
"include_in_contents": "main_contents",
|
||||
"text": [
|
||||
|
||||
"要開始使用法術,你需要準備:",
|
||||
|
||||
"》法杖, 請依圖示合成:",
|
||||
|
||||
"#recipe magic_wand",
|
||||
|
||||
"\n\n》@arcane_workbench 法術工作台@, 合成方式如圖:",
|
||||
|
||||
"#recipe arcane_workbench",
|
||||
|
||||
"》@spells 法術書@\n這個可以在箱子裡找到,或從怪物身上掉落,或向法師購買。\n\n\n\n不然你也可以自己合成一個\n初學者法術【魔法彈】,\n如圖所示:",
|
||||
|
||||
"#recipe magic_missile_spell_book",
|
||||
|
||||
"你還需要準備一大堆魔法水晶\n來為法杖供應@mana 法力@。"
|
||||
]
|
||||
},
|
||||
|
||||
"mana": {
|
||||
"title": "法力",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:crystal"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"法力是賦予法師力量的魔法能量,其本身並非實體的物質,反而是可滲入於萬物之中的永恆能量。特別的是,法力蘊藏在於地下岩石中所找到的天然水晶內。\n@wands 法杖@可儲存法力,並在施法時\n將法力引導到@spells 法術@上。\n不同的法術會依其力量強度及持續時間消耗不同的法力值。",
|
||||
|
||||
"#image crystal_ore",
|
||||
|
||||
"#image magic_crystal",
|
||||
|
||||
"人們普遍認為法力無法被創造或消滅,每當施展法術時,其引導的法力就會散失到周圍環境中。事實上這就是大量的法力散布於世界各處的原因。總之無論要如何使用法力,必須從地底下的天然千年水晶中,或本書未涵蓋的高級人工方式將其收集。還有各種方法使法術更有效的使用法力,以及回收在施法過程中逸散的部分法力。"
|
||||
]
|
||||
},
|
||||
|
||||
"wands": {
|
||||
"title": "法杖",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:arcane_initiate"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"法杖是法師首選的器具。\n你能用它來施展任何法杖能力\n所及的@spells 法術@(請參閱@tiers 等級@章節)\n。\n法杖的種類很多,不過當然都得從基礎法杖開始。",
|
||||
|
||||
"#image magic_wand",
|
||||
|
||||
"大多數的法杖都誕生於一個簡單的製作方式。\n準備一顆某種類型的魔法水晶,\n將水晶裝在木棒的一端,\n再於另一端黏上一顆金粒。\n水晶自然是法杖力量的源頭,\n因為它提供了引導@spells 法術@所需的\n焦點。而其餘的部分也很重要,不只是因為提供了握住法杖的地方,更是指引@mana 法力@前進的路徑\n。",
|
||||
|
||||
"隨著法杖施展了愈多法術,\n其變得愈能駕馭@spells 法術@,\n因此也能施展更強大的法術。\n這樣的成長可以從法杖外觀上的細微變化中發現,隨著法杖愈來愈強,水晶會變得更加明亮,\n顏色也可能會根據其@elements 元素@而\n產生變化。過了一段時間之後,法杖本身的木材也會開始扭曲生長成各種複雜的形狀。",
|
||||
|
||||
"當你拿著法杖時,畫面的角落會顯示出目前法杖所選的法術及其圖示,而在施放法術之後,還會顯示冷卻條來表示直到下次施展所需等待的時間,它還會顯示法杖中的前一個和下一個法術名稱。按下《#next_spell_key 鍵》及《#previous_spell_key 鍵》可切換法術(這些都可在【選項】->【按鍵設定】中變更),你也可以在潛行時使用滑鼠滾輪來切換法術。",
|
||||
|
||||
"當你將游標停留在物品欄的法杖上時,會顯示法杖中儲存的\n@mana 法力@,伴隨目前所選的@spells 法術@及其\n特殊能力。\n將法杖放入@arcane_workbench 法術工作台@則可\n看見更詳細的資訊。"
|
||||
]
|
||||
},
|
||||
|
||||
"spells": {
|
||||
"title": "法術",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/spells"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"沒有法術的@wands 法杖@沒有作用。\n法術的記錄形式有兩種:\n一種是永久性的書本,\n一種是暫時性的卷軸。",
|
||||
|
||||
"法術書本身無法使用,而是用於將書中記載的法術存入@wands 法杖@。\n在世界各地都能發現法術書,應該用不了多少時間你就能找到一本。當你找到後,可將游標停留在書上,看一下這本法術書的基本資訊,也可以拿著書點擊滑鼠右鍵以閱讀更詳細的資料。",
|
||||
|
||||
"相對而言卷軸則有不同的用途: 拿著卷軸點擊滑鼠右鍵便會施展上面的法術並用掉卷軸。跟法術書一樣,卷軸在世界各地都能找到,但你也可以自己@enchanting_scrolls 製作@。",
|
||||
|
||||
"在你準備進行某個任務時,有些法術可能只會用到一兩次,\n所以你不想讓那些法術占用\n你的@wands 法杖@空間,此時卷軸就非常\n有用。不過得注意,比起法杖,卷軸還是效率較差的施法方式。",
|
||||
|
||||
"未經訓練的眼睛無法閱讀法術中的魔法符文。然而若要鑑定一個法術,你當然可以冒著發生意外的風險來施展看看結果,但即便如此許多法術是要在特定的條件下才會發生作用。不過即便如此,還是有可能在施法時誤用了未鑑定的法術,其潛在的危險性取決於這個法術有多強大。因此更安全可靠的選擇是使用鑑定卷軸,可以在箱子裡找到或是向法師購買。拿著鑑定卷軸點擊滑鼠右鍵便會用掉卷軸並鑑定你快捷欄中第一個未知的法術書或卷軸。"
|
||||
]
|
||||
},
|
||||
|
||||
"arcane_workbench": {
|
||||
"title": "法術工作台",
|
||||
"include_in_contents": "main_contents",
|
||||
"contents": {
|
||||
"id": "arcane_workbench_subsections",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
},
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/arcane_workbench"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"法術工作台看起來有點像附魔台, 用來升級你的@wands 法杖@、\n為其補充法力和存入@spells 法術@。\n\n其合成方式如下:",
|
||||
|
||||
"#recipe arcane_workbench",
|
||||
|
||||
"接下來的頁面將說明法術工作台的各種功用。",
|
||||
|
||||
"#image workbench"
|
||||
],
|
||||
"sections": {
|
||||
"binding_spells": {
|
||||
"title": "抄寫法術",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/arcane_workbench"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"要將@spells 法術@存入你的@wands 法杖@,只要將\n法杖放入工作台中央的槽中,然後將法術書放入周圍其中一個槽並按下按鈕。此時你會注意到,在這個過程中,法術書並沒有受到任何影響,這是因為存入法術的動作,並不是將法術從法術書中取走,只是將法術抄寫至法杖中而已。因此你可以重複這個動作,盡量將想要的法術存入你的法杖。你一次最多只能存入五種法術到法杖中,不過可用協調升級來增加法術存量。"
|
||||
]
|
||||
},
|
||||
"charging_wands": {
|
||||
"title": "法杖補充法力",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/arcane_workbench"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"要幫@wands 法杖@補充法力,先將法杖\n放入法術工作台中央的槽,並在左下方那個槽放入魔法水晶,然後按下按鈕。\n每個水晶相當於#mana_per_crystal點的@mana 法力@,\n而法杖只會在需要時用掉水晶,因此你可以將水晶留在工作台內,以便需要時供應。但是請記得,法杖只能取用整數單位的水晶,舉例來說,如果法杖只需要30點法力,那補充法力時會有#example_charging_loss點法力浪費掉。"
|
||||
]
|
||||
},
|
||||
"upgrading_wands": {
|
||||
"title": "升級法杖",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/tome_of_arcana"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"你需要對應@tiers 等級@的法術寶典來\n升級你的@wands 法杖@或進行特殊的法\n杖升級。這兩種東西都可從怪物的掉落物或向法師購買獲得。要升級法杖,先將法杖放入法術工作台中央的槽,並在右上方的槽放入升級物後按下按鈕。",
|
||||
|
||||
"特殊的法杖升級可加強法杖某方面的能力,每種升級最高只能疊加三次,而法杖的總升級數取決於法杖的等級。升級後就無法移除。"
|
||||
]
|
||||
},
|
||||
"enchanting_scrolls": {
|
||||
"title": "製作卷軸",
|
||||
"include_in_contents": "arcane_workbench_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/scrolls"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"法術工作台也能用來將@spells 法術@\n存入卷軸。要製作卷軸,你需要先用一張紙及一些線來合成空白卷軸,然後選一本想要作成卷軸的法術書,最後準備足夠的魔法水晶以提供施展這個法術的@mana 法力@。",
|
||||
|
||||
"#recipe blank_scroll",
|
||||
|
||||
"先將水晶放入左下方的槽,再將空白卷軸放入中央的槽,然後將法術書放入上方單獨的槽,最後按下按鈕以製成法術卷軸。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"wizard_armour": {
|
||||
"title": "法師服",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:arcane_initiate"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"身為一位法師,在與生物搏鬥時需要一些東西來保護自己。雖然也能使用一般的護甲,但是為了充分發揮你的法術,你還是需要一套法師服,包括帽子、長袍、褲子和鞋子。\n與一般護甲不同的是,法師服不會破損,其使用魔法能量來保護穿著的人。因此跟法杖一樣,需要魔法水晶來補充能量。不過幸好這些服裝不會消耗太多\n@mana 法力@。\n法師服補充能量的方式也跟法杖一樣,可以用@arcane_workbench 法術工作台@或\n@mana_flasks 法力瓶@來補充,但是必須當心,\n如果法師服的法力耗盡了,你會發現自己毫無防禦力。",
|
||||
|
||||
"#image wizard_armour",
|
||||
|
||||
"你可以用魔法絲綢來製成法師服:",
|
||||
|
||||
"#recipe magic_silk",
|
||||
"#recipe wizard_hat",
|
||||
"#recipe wizard_robe",
|
||||
"#recipe wizard_leggings",
|
||||
"#recipe wizard_boots",
|
||||
|
||||
"使用一般的附魔台就能為法師服附魔,而且由於魔法絲綢本身的特性,附魔後的效果特別好。對一個法師而言,最有用的是魔法、冰凍及衝擊三種防護附魔,有助於對抗敵人的魔法攻擊。",
|
||||
|
||||
"有些專注於特定元素的法師會穿著能加強該元素力量的特殊服裝,這種整套的服裝法師們都相當喜歡,但也不容易找到。",
|
||||
|
||||
"傳說中最強的法師曾經用一種法術印記來大大強化他們的服裝。"
|
||||
]
|
||||
},
|
||||
|
||||
"magical_world": {
|
||||
"title": "魔法世界",
|
||||
"include_in_contents": "main_contents",
|
||||
"contents": {
|
||||
"id": "magical_world_subsections",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
},
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/on_subsection_unlock"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"只是待在家裡是無法成為法術大師的,到外頭探索充滿魔法的世界吧!\n若你勇於挑戰,古代遺址、遺物以及不管好的或壞的神秘生物,都等著你發現。\n最偉大的法師同時也最具好奇心,他們會不斷的探索周遭環境,並嘗試所發現的東西,來獲得豐富的知識及強大的力量。",
|
||||
|
||||
"雖然法師不免大多的時間都是孤身一人,但知識的分享也是學習魔法藝術重要的一環。找尋其他法師,盡可能從他們身上學習更多知識,溝通才是一切最大的力量。"
|
||||
],
|
||||
"sections": {
|
||||
"crystal_flowers": {
|
||||
"title": "水晶花",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/crystal_flowers"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"在你的旅途當中,可能在野外會不時遇到奇怪的發光花朵,這些獨特的花稱為水晶花,它們具有聚集@mana 法力@的神奇能力,至今還不\n知道原因。不過我們卻知道這些水晶花,可經由採集製作以提取法力成為水晶,這使它們成為地面上相當有用的法力來源。然而由於這種花並不大,而且生長的土地都很小塊,因此這種方式所能獲得的法力其實很有限。",
|
||||
|
||||
"#image crystal_flower",
|
||||
"#recipe crystal_flower_to_crystals"
|
||||
]
|
||||
},
|
||||
"wizard_towers": {
|
||||
"title": "法師塔",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:wizard_tower"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"害怕嗎?你並不是這個世界上唯一會使用魔法的人。\n在你的旅途中,你可能會遇到具有獨特尖頂或雙尖頂的高塔,這些是法師同伴居住的地方。\n隱居的生活使法師們有時候會有點古怪,但是他們通常還是友善的,而且只要你願意付出代價,還是會樂意與你分享他們的知識。\n在支付了貴重金屬及寶石後,你會收到許多驚奇的法術作為回報。",
|
||||
|
||||
"如果你想尋找的是@tiers 大師級@法術,\n那你得跟專門的人交談。",
|
||||
|
||||
"#image wizard_tower",
|
||||
|
||||
"不幸的是,有少數法師並不歡迎訪客。這些法師通常已被驅逐,所以對於任何闖入地盤的人都充滿敵意。\n接近這些傢伙要特別小心,並做好抵擋強大魔法的準備。只要擊敗他們,他們的知識就會成為你的了。",
|
||||
|
||||
"有一點必須知道,沒有法師會接受對他們攻擊或盜取他們東西的人,他們肯定不會善罷甘休。"
|
||||
]
|
||||
},
|
||||
"obelisks": {
|
||||
"title": "方尖碑",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/obelisks"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"古老魔法的遺跡散落在世界各處,其中最著名的是刻有許多符號及符文的石頭結構。這些廢墟看起來像是某種古代文明的遺跡,無論建造它們的是誰或是什麼,顯然具有相當豐富的魔法知識,且用來在這些地方設置持續至今的防衛魔法。",
|
||||
|
||||
"這些結構大致上分成兩種類型,第一種是較常見的方尖碑:\n以雕刻符文石堆成高高尖頂的結構,底部開著一塊空間,存放著過去所遺留的次等魔法物品。",
|
||||
|
||||
"#image obelisk",
|
||||
|
||||
"這些結構通常受到魔法保護,一旦有人靠近就會召喚出充滿敵意的@creatures 魔法生物@來攻擊人類。\n對抗這些生物並摧毀其魔法源頭,那些遺物就是你的了。"
|
||||
]
|
||||
},
|
||||
"shrines": {
|
||||
"title": "神殿",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:visit_shrine"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"第二種較為罕見的結構稱之為神殿,由一個中央基座及圍繞在四周的符文石柱所組成。基座上方擺著一個裝有古代@artefacts 神器@的\n寶箱,並通常施加了防護魔法鎖,以防他人竊取。整個結構還受到封鎖力場保護,使擅闖者無法逃離。",
|
||||
|
||||
"#image shrine",
|
||||
|
||||
"由於這些神殿的重要意義及巨大的神秘力量,更別說裡面的寶物,對於志氣高昂的法師特別有吸引力。\n\n但是務必謹慎,有許多關於法師被關在封鎖區內,可能因為幽閉恐懼症導致慢慢發瘋的報導。且愈來愈多人認為,這就是神殿防護魔法的一個部分,而被關在其中的法師,其實是被控制用來守護神殿。這對於膽敢前往冒險的人來說,無疑是令人不寒而慄的結局..."
|
||||
]
|
||||
},
|
||||
"creatures": {
|
||||
"title": "魔法生物",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/magical_creatures"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"除了法師,還有許多其它生物也會使用魔法。其中有許多是源自於魔法,且大部分都能用特定的@spells 法術@召喚。會看到這些生物,\n大多是在守護@obelisks 方尖碑@,但也可能\n遇到了強大的召喚法師。只有非常少數的神秘生物才會偶爾在野外發現。"
|
||||
]
|
||||
},
|
||||
"artefacts": {
|
||||
"title": "神器",
|
||||
"include_in_contents": "magical_world_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:artefact"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"在探索@shrines 神殿@時,你可能會好運的\n發現某種古代魔法神器,一種能夠賦予配戴者獨特而強大能力的物品。\n目前所知的類型有三種:\n為法術附加額外能力及效果的戒指,增強防禦力的項鍊,以及各種應用魔法的寶器。\n這些神器只是放入背包是沒有用的,要擺在身上的正確位置才會發生作用。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"tiers": {
|
||||
"title": "等級",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/tome_of_arcana"
|
||||
],
|
||||
"text":[
|
||||
|
||||
"@wands 法杖@和@spells 法術@都分成四個等級: #colour_novice基礎#colour_reset、#colour_apprentice學徒#colour_reset、#colour_advanced進階#colour_reset以及#colour_master大師#colour_reset。每個等級都比前一級還強。",
|
||||
|
||||
"#image tiers",
|
||||
|
||||
"只有#colour_novice基礎#colour_reset法杖能以合成的方式製作,其最多可儲存#novice_max_charge點法力,且只能施展基礎法術。基礎法術通常不會消耗太多法力,任何人都足以施展。但這並不表示它們相較於高等法術就毫無用處。即便你已經能施展大師級法術,某些基礎法術由於消耗法力低而仍然實用。",
|
||||
|
||||
"#colour_apprentice學徒#colour_reset法杖是基礎法杖的下個等級,其最多可儲存#apprentice_max_charge點法力,並可施展基礎及學徒法術。學徒法術比基礎法術更強一些,但通常也消耗更多法力。",
|
||||
|
||||
"#colour_advanced進階#colour_reset法杖非常稀有也更加強大,可施展大師級以外的所有法術,並可儲存#advanced_max_charge點法力。進階法術能夠重創敵人,並擁有超人般的能力,例如隱身術。",
|
||||
|
||||
"#colour_master大師#colour_reset法杖是現存最強大的法杖,其最多可儲存#master_max_charge點法力,並可施展所有法術。大師級法術書相當罕見,且法術的威力能徹底毀滅的不僅是敵人,甚至包括整個世界。務必謹慎使用!",
|
||||
|
||||
"要提升至更高等級,首先法杖必須變得夠強大到足以引導該等級的法術。法杖會隨著施展法術而獲得成長,法術類型、法術力量、元素效果以及其它外部因素都可能會影響法杖的成長速度。",
|
||||
|
||||
"當法杖足夠強大,法術寶典為最終將法杖提升至下個等級的關鍵物品(請參閱@upgrading_wands 升級法杖@),\n一旦完成升級,法杖將再次朝下個等級開始成長。"
|
||||
]
|
||||
},
|
||||
|
||||
"elements": {
|
||||
"title": "元素",
|
||||
"include_in_contents": "main_contents",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/elements"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"@spells 法術@各屬於不同的元素,代表\n法術的本質,且搭配使用對應的@wands 法杖@還會加強效果。",
|
||||
|
||||
"#image elements",
|
||||
|
||||
"#colour_fire火#colour_reset \n火元素涉及燃燒、岩漿以及爆炸,大概是最具破壞性的元素。一個強大的烈焰法師可使敵人面臨煉獄般的火海,並可能在過程中毀掉這個世界。\n大部分的火系法術會讓目標著火,使他們持續受到傷害,但是對地獄的生物則沒什麼效果。",
|
||||
|
||||
"#colour_ice冰#colour_reset \n冰元素來自於所有冰冷的物質。冰系法術通常會讓敵人減速,甚至使他們完全凍結,對於火系生物特別有效。\n冰凍魔法在戰鬥之外也很有用,例如使水面結冰以過河。",
|
||||
|
||||
"\n#colour_lightning電#colour_reset \n這個元素涉及雷電、風暴以及天氣。決不可小看一個強大雷電法師的力量,有些甚至能隨意召喚閃電。\n雷電法術經常能一次傷害多個敵人,還會自動搜尋目標,對任何生物都能造成有效的攻擊...但是得當心苦力怕。",
|
||||
|
||||
"#colour_necromancy死靈#colour_reset \n死靈是黑暗、渾沌以及不死生物的元素。神秘的死靈法師往往被視為邪惡,儘管通常不是這樣的。\n死靈法術常召喚@creatures 生物@來為他\n戰鬥,或進而扭曲敵人的意志。",
|
||||
|
||||
"#colour_earth大地#colour_reset \n大地元素來自於動植物、風等自然界的的力量。大地魔法千變萬化,從毒害敵人到控制天氣,有各式各樣的形式。\n大地法術是綜合攻擊、防禦以及實用的法術。",
|
||||
|
||||
"#colour_sorcery秘術#colour_reset \n秘術是力量與變化的元素。\n秘術法師能操縱光線、重力,甚至現實世界本身來符合他們的需求。\n且不提其它用途,秘術法術可用來提供施法者魔法力量,或是任意移動物體。",
|
||||
|
||||
"#colour_healing治療#colour_reset \n治療元素包括防禦和再生。\n治療法師會盡可能的保護自己及他們的同伴,因此可能會是非常難以對付的對手。\n治療法術在戰鬥中是不可或缺的,即便其通常不會用來進行攻擊,但是一些治療法術的淨化光芒會對不死生物造成相當大的傷害。",
|
||||
|
||||
"不同元素之間的分界並不總是那麼明確,有些法術除了所屬元素的性質外,也會具有其它元素的特性。",
|
||||
|
||||
"幸運的話,或許你能發現一種元素水晶,這是種在生長過程中吸收了元素的魔法水晶,不過實際上發生的方式及所需的條件仍然是個謎。但我們知道這種水晶能用來製作元素法杖,用來施展對應的法術,可比平常發揮更大的效果。"
|
||||
]
|
||||
},
|
||||
|
||||
"miscellaneous": {
|
||||
"title": "其它",
|
||||
"include_in_contents": "main_contents",
|
||||
"contents": {
|
||||
"id": "miscellaneous_subsections",
|
||||
"hyperlinks": true,
|
||||
"page_numbers": true,
|
||||
"separator": "."
|
||||
},
|
||||
"triggers": [
|
||||
"ebwizardry:on_subsection_unlock"
|
||||
],
|
||||
"sections": {
|
||||
"mana_flasks": {
|
||||
"title": "法力瓶",
|
||||
"include_in_contents": "miscellaneous_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/mana_flasks"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"亞肯多魔法用品公司 - 為您所需的魔法物品!",
|
||||
|
||||
"需要在旅行中為你的@wands 法杖@補充\n法力嗎?\n沒問題! 現在@mana 法力@可以裝瓶。\n只要用一個玻璃瓶及八個魔法水晶合成出法力瓶,就可以隨身攜帶。要用的時候,只要將你的法杖與法力瓶合成,就能將法力存入法杖。(註)",
|
||||
|
||||
"#recipe medium_mana_flask",
|
||||
|
||||
"好消息! 即日起推出全新的小瓶裝及大瓶裝法力,可依您的需求選擇!",
|
||||
|
||||
"#recipe small_mana_flask",
|
||||
"#recipe large_mana_flask",
|
||||
|
||||
"(註)過程中瓶子會用掉,且裝瓶時也會耗損一些法力。"
|
||||
]
|
||||
},
|
||||
"throwable_items": {
|
||||
"title": "投擲物",
|
||||
"include_in_contents": "miscellaneous_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:handbook/throwables"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"各種@spells 法術@的實體物,像是\n火焰彈、毒液彈、煙霧彈,還有電擊彈都能直接合成:",
|
||||
|
||||
"#recipe firebomb",
|
||||
"#recipe poison_bomb",
|
||||
"#recipe smoke_bomb",
|
||||
"#recipe spark_bomb"
|
||||
]
|
||||
},
|
||||
"automated_casting": {
|
||||
"title": "自動施法",
|
||||
"include_in_contents": "miscellaneous_subsections",
|
||||
"triggers": [
|
||||
"ebwizardry:enchant_scroll"
|
||||
],
|
||||
"text": [
|
||||
|
||||
"近期的實驗顯示,在某種程度上只需要簡單的發射器就能自動施展@spells 法術@。沒有人知道原因,\n但看起來似乎是紅石的神奇特性竟然能觸發法術卷軸。只要將一些卷軸放入發射器,然後提供能量,就完成了這個機關..."
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"crafting_recipes": {
|
||||
"title": "合成表",
|
||||
"include_in_contents": "main_contents",
|
||||
"text": [
|
||||
|
||||
"#recipe arcane_workbench",
|
||||
"#recipe novice_wands",
|
||||
"#recipe magic_missile_spell_book",
|
||||
"#recipe wizard_handbook",
|
||||
"#recipe crystal_flower_to_crystals",
|
||||
"#recipe crystal_blocks",
|
||||
"#recipe crystal_blocks_to_crystals",
|
||||
"#recipe crystal_shard",
|
||||
"#recipe small_mana_flask",
|
||||
"#recipe medium_mana_flask",
|
||||
"#recipe large_mana_flask",
|
||||
"#recipe runestone",
|
||||
"#recipe runestone_pedestal",
|
||||
"#recipe transportation_stone",
|
||||
"#recipe magic_silk",
|
||||
"#recipe wizard_hat",
|
||||
"#recipe wizard_robe",
|
||||
"#recipe wizard_leggings",
|
||||
"#recipe wizard_boots",
|
||||
"#recipe blank_scroll",
|
||||
"#recipe firebomb",
|
||||
"#recipe poison_bomb",
|
||||
"#recipe smoke_bomb",
|
||||
"#recipe spark_bomb"
|
||||
]
|
||||
},
|
||||
|
||||
"credits": {
|
||||
"title": "製作群",
|
||||
"include_in_contents": "main_contents",
|
||||
"text": [
|
||||
|
||||
"法術模組\n版本 #version\n支援 Minecraft #mcversion",
|
||||
|
||||
"設計、程式及材質: Electroblob",
|
||||
|
||||
"感謝 Minecraft Forge 及 MCP,\n沒有它們就沒有這個模組。",
|
||||
|
||||
"也感謝Minecraft的模組討論區,\n總能回答我的模組問題!",
|
||||
|
||||
"\n另外,我要感謝以下各位對本模組的貢獻:",
|
||||
|
||||
"程式碼:",
|
||||
|
||||
"》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\n翻譯:",
|
||||
|
||||
"》繁體中文: Grant\n》(墨西哥)西班牙文: MadWrist \n》俄文: VilagVil, kellixon\n》法文: Hahdrim\n》巴西葡萄牙文: lorrampi\n》簡體中文: ZHENGLOC, dragon-evol\n》韓文: shejery, rewi_wire\n》波蘭文: Trozuu",
|
||||
|
||||
"雷電音效: OhhWowProductions",
|
||||
|
||||
"更多資訊請前往 @https://github.com/Electroblob77/Wizardry/wiki wiki@",
|
||||
|
||||
"覺得法術模組還有不足之處? 請加入 @https://discord.gg/MTmMzMv Discord 伺服器@以獲得\n最新消息、討論及額外事務!"
|
||||
]
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,10 @@
|
||||
{
|
||||
"modid" : "ebwizardry",
|
||||
"name" : "Electroblob's Wizardry",
|
||||
"version" : "4.2.8",
|
||||
"version" : "4.2.11",
|
||||
"mcversion" : "1.12.2",
|
||||
"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.\nTranslators: MadWrist (Spanish, Mexican Spanish), VilagVil, kellixon & bigenergy (Russian), Hahdrim (French), lorrampi (Brazilian Portuguese), ZHENGLOC & dragon-evol (Chinese), shejery & rewi_wire (Korean), Trozuu (Polish).",
|
||||
"credits" : "\nDesigned, coded and textured by Electroblob.\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica, UltraHex, Azim-Palmer, raoulvdberge.\nTranslators: MadWrist (Spanish, Mexican Spanish), VilagVil, kellixon & bigenergy (Russian), Hahdrim (French), lorrampi (Brazilian Portuguese), ZHENGLOC & dragon-evol (Chinese), shejery & rewi_wire (Korean), Trozuu (Polish), chesterccj305 (Taiwanese).",
|
||||
"authorList" : [
|
||||
"Electroblob"
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user