Compare commits
83 Commits
1.12.2-dev
...
4.2.3
| Author | SHA1 | Date | |
|---|---|---|---|
| 43b66df22a | |||
| b192a431d7 | |||
| 3be98ab612 | |||
| ed950322ff | |||
| 4cde8c60bc | |||
| 9924e10f13 | |||
| eeb0640525 | |||
| 693c11ada0 | |||
| 038fd7225f | |||
| 999e32f37c | |||
| 8c2ac5adbb | |||
| 9c1e2e08c3 | |||
| e7f7960540 | |||
| a46bad4497 | |||
| 06d02ad45d | |||
| c39a213e62 | |||
| 2caca39a22 | |||
| 8d46191ff8 | |||
| fb7af9328d | |||
| 0991baf964 | |||
| bdefecbe9b | |||
| eef48f319a | |||
| 3a788c867c | |||
| 1ba723ade1 | |||
| c06105cd00 | |||
| 97c72685bb | |||
| 23fccaac9c | |||
| 74b6bdba0f | |||
| d69e3a253d | |||
| 744c7a2331 | |||
| c355cb034c | |||
| 5e321cc4cf | |||
| fbecce0543 | |||
| a6c24e9cb6 | |||
| 14a624db3f | |||
| 16a4c8231f | |||
| 931c99617c | |||
| 037f340a03 | |||
| b6cc417641 | |||
| 6565a0734a | |||
| 0aac70c5fb | |||
| 8551dc407b | |||
| 1eec7921ce | |||
| 18920a24c5 | |||
| e0c6f0f00f | |||
| a4f6391fac | |||
| a570bd57d0 | |||
| f1ff179b98 | |||
| 6d09acc78e | |||
| 960d97de49 | |||
| ebe64b06e3 | |||
| 99887f95e2 | |||
| 2e5a9fce3e | |||
| 2be6230977 | |||
| 518d69a2e2 | |||
| 93bc9b1b89 | |||
| 413d21d1d8 | |||
| 78fc00c0cc | |||
| a1d2d6a16e | |||
| d6492ee3f1 | |||
| 831f68d8d9 | |||
| f86ea2334d | |||
| d8f3ca2d01 | |||
| b262f711e2 | |||
| 4da63d6735 | |||
| be80d4863c | |||
| 62c696cd13 | |||
| f58dfea4bf | |||
| a924545457 | |||
| 290d420e6b | |||
| e4da941e40 | |||
| 8e95e830a3 | |||
| 7d0334fc5a | |||
| b352105dd4 | |||
| 05e6b53970 | |||
| e76dc4a873 | |||
| 4d164c15ad | |||
| 6b30c7923e | |||
| 97a23d0e39 | |||
| 44d1d4dbb7 | |||
| 22cb4d7f56 | |||
| 54abdb6746 | |||
| 414b773da6 |
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Report a crash or something that isn't working as it should
|
||||||
|
title: "[Give a brief, relevant title here]"
|
||||||
|
labels: bug
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
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.2 [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.]
|
||||||
|
|
||||||
|
Other mods involved: [only list mods that are relevant to the problem]
|
||||||
|
|
||||||
|
Link to crash report (if applicable): [give a link to the crash report on gist, pastebin, etc.]
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Make a suggestion for improving the mod
|
||||||
|
title: "[Give a brief, relevant title here]"
|
||||||
|
labels: enhancement
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/guide_for_contributing.md) before posting.
|
||||||
|
|
||||||
|
Minecraft versions: [if this suggestion only applies to some versions, list them here]
|
||||||
|
|
||||||
|
Suggestion details: [describe what you would like to see added to the mod and why]
|
||||||
|
|
||||||
|
Other mods involved: [if this suggestion involves integration with other mods, list them here]
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
name: Question
|
||||||
|
about: Ask a question about the mod or the code
|
||||||
|
title: "[Give a brief, relevant title here]"
|
||||||
|
labels: question
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
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.2 [change as necessary]
|
||||||
|
|
||||||
|
Question details: [explain your question here]
|
||||||
|
|
||||||
|
Other mods involved: [if this question involves other mods, list them here]
|
||||||
+10
-3
@@ -1,7 +1,7 @@
|
|||||||
# Credits
|
# Credits
|
||||||
|
|
||||||
Electroblob's Wizardry
|
Electroblob's Wizardry
|
||||||
Version 4.1.4
|
Version 4.2.3
|
||||||
For Minecraft 1.12.2
|
For Minecraft 1.12.2
|
||||||
|
|
||||||
Designed, coded and textured by Electroblob
|
Designed, coded and textured by Electroblob
|
||||||
@@ -18,11 +18,18 @@ In addition, I'd like to thank the following individuals for their contributions
|
|||||||
- 12foo
|
- 12foo
|
||||||
- Shadows-of-Fire
|
- Shadows-of-Fire
|
||||||
- HellFirePvP
|
- HellFirePvP
|
||||||
|
- Tora-B
|
||||||
|
- Avatair
|
||||||
|
- Aeronica
|
||||||
|
|
||||||
#### Translations
|
#### Translations
|
||||||
|
|
||||||
- Russian: VilagVil
|
|
||||||
- Spanish and Mexican Spanish: MadWrist
|
- Spanish and Mexican Spanish: MadWrist
|
||||||
- Chinese: ZHENGLOC and dragon-evol
|
- Russian: VilagVil, kellixon
|
||||||
|
- French: Hahdrim
|
||||||
|
- Brazilian Portuguese: lorrampi
|
||||||
|
- Chinese: ZHENGLOC, dragon-evol
|
||||||
|
- Korean: shejery, rewi_wire
|
||||||
|
- Polish: Trozuu
|
||||||
|
|
||||||
Lightning ray sound effect from OhhWowProductions
|
Lightning ray sound effect from OhhWowProductions
|
||||||
|
|||||||
+3
-3
@@ -1,7 +1,7 @@
|
|||||||
# License
|
# License
|
||||||
This repository is copyright © Electroblob 2018. The following license is provided to allow you to creatively contribute to and improve the repository.
|
This repository is copyright © Electroblob 2018. The following license is provided to allow you to creatively contribute to and improve the repository.
|
||||||
|
|
||||||
This license applies only to the source code, assets and wiki pages present in this repository. The compiled mod (available at https://minecraft.curseforge.com/projects/electroblobs-wizardry) comes under its own separate license, see the aforementioned webpage for details.
|
This license applies only to the source code, assets and wiki pages present in this repository. The compiled mod (available at https://minecraft.curseforge.com/projects/electroblobs-wizardry) comes under its own separate license, see the aforementioned webpage for details. By downloading, running, forking, contributing to or otherwise interacting with this repository, you agree to the license set out below.
|
||||||
|
|
||||||
TL;DR: Do what you want with this repo on Github, but ask me first if you want to put it anywhere else or publish your version. Don't try and make money off the repo or anything in it. I'm not responsible if the code breaks things, and if you help me out by submitting a PR, I can use and modify the contents of that PR as long as I give you credit. (This brief summary is non-binding and does not override or replace the full license below.)
|
TL;DR: Do what you want with this repo on Github, but ask me first if you want to put it anywhere else or publish your version. Don't try and make money off the repo or anything in it. I'm not responsible if the code breaks things, and if you help me out by submitting a PR, I can use and modify the contents of that PR as long as I give you credit. (This brief summary is non-binding and does not override or replace the full license below.)
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ TL;DR: Do what you want with this repo on Github, but ask me first if you want t
|
|||||||
|
|
||||||
### 1. Warranty and usage
|
### 1. Warranty and usage
|
||||||
|
|
||||||
This repository, the source code for the Minecraft modification Electroblob's Wizardry ('Wizardry'), is provided in the hope that it will be useful and/or educational. You are free to download and modify this repository for personal use only. See section 2 for details regarding public sharing of this repository.
|
This repository, the source code for the Minecraft modification Electroblob's Wizardry ('Wizardry'), is provided in the hope that it will be useful and/or educational. You are free to download and modify this repository for personal use. See section 2 for details regarding public sharing of this repository.
|
||||||
|
|
||||||
THIS REPOSITORY IS PROVIDED AS-IS WITH NO WARRANTIES, IMPLIED OR OTHERWISE. ELECTROBLOB TAKES NO RESPONSIBILITY FOR ANY DAMAGES INCURRED BY THE USE OR MISUSE OF THIS REPOSITORY.
|
THIS REPOSITORY IS PROVIDED AS-IS WITH NO WARRANTIES, IMPLIED OR OTHERWISE. ELECTROBLOB TAKES NO RESPONSIBILITY FOR ANY DAMAGES INCURRED BY THE USE OR MISUSE OF THIS REPOSITORY.
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ In addition to private use as set out in section 1, you are free to fork this re
|
|||||||
|
|
||||||
### 3. Distribution
|
### 3. Distribution
|
||||||
|
|
||||||
Distribution, in whole or in part, of compiled versions of wizardry, and distribution of the source code anywhere except on Github, modified or otherwise, is forbidden without advance written permission from Electroblob. Electroblob reserves the right to refuse or withdraw such permission at any time.
|
Distribution of this repository anywhere except on Github, in whole or in part, modified or otherwise, is forbidden without advance written permission from Electroblob. Electroblob reserves the right to refuse or withdraw such permission at any time.
|
||||||
|
|
||||||
### 4. Commercial use
|
### 4. Commercial use
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Wizardry [](https://minecraft.curseforge.com/projects/electroblobs-wizardry) [](https://minecraft.curseforge.com/projects/electroblobs-wizardry) [](https://discord.gg/MTmMzMv)
|
# Wizardry [](https://minecraft.curseforge.com/projects/electroblobs-wizardry) [](https://minecraft.curseforge.com/projects/electroblobs-wizardry/files) [](https://minecraft.curseforge.com/projects/electroblobs-wizardry/relations/dependents) [](https://discord.gg/MTmMzMv)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ apply plugin: 'net.minecraftforge.gradle.forge'
|
|||||||
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
||||||
|
|
||||||
|
|
||||||
version = "4.2.0" // There, it matches semver, happy now? (I am just gonna rename the file afterwards, you know that right?)
|
version = "4.2.3" // There, it matches semver, happy now?
|
||||||
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
archivesBaseName = "ElectroblobsWizardry"
|
archivesBaseName = "ElectroblobsWizardry"
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ repositories {
|
|||||||
// http://www.minecraftforge.net/forum/topic/44262-solved-how-to-build-mod-with-dependencies/
|
// 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
|
// 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/
|
// http://www.minecraftforge.net/forum/topic/44534-adding-dependencies-to-a-forge-project/
|
||||||
dirs "libsfordeobf" // Don't use libs or forge will think you have duplicate mods
|
dirs "libsfordeobf" // Don't put src jars in libs or forge will think you have duplicate mods
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,12 @@ When submitting an issue, I would be grateful if you could follow these few guid
|
|||||||
|
|
||||||
- Please stick to the issue template, it's there to help you provide the right information so I can fix the problem more easily. If you're not sure what to put for anything, that's ok, just leave it as it is.
|
- Please stick to the issue template, it's there to help you provide the right information so I can fix the problem more easily. If you're not sure what to put for anything, that's ok, just leave it as it is.
|
||||||
|
|
||||||
|
- One issue per issue please! Make a separate issue for each bug/suggestion. If you think multiple different issues may be related, reference between them using # followed by the issue number.
|
||||||
|
|
||||||
- Please give me as much information about the issue as you can, but keep it relevant. "This is really annoying me and my friend" does not help me fix the problem!
|
- Please give me as much information about the issue as you can, but keep it relevant. "This is really annoying me and my friend" does not help me fix the problem!
|
||||||
|
|
||||||
|
- Make sure your wizardry and Forge versions are both up-to-date for the game version you are using.
|
||||||
|
|
||||||
- There's no need to put 'tags' in square brackets in the issue title, I'll put proper github issue tags on it which will also help organise it. You can use them to search for issues too!
|
- There's no need to put 'tags' in square brackets in the issue title, I'll put proper github issue tags on it which will also help organise it. You can use them to search for issues too!
|
||||||
|
|
||||||
- Don't close an issue unless it has actually been fixed or is no longer relevant - otherwise I might not end up fixing it at all! Usually I'll take care of closing issues anyway, so you don't have to worry about it.
|
- Don't close an issue unless it has actually been fixed or is no longer relevant - otherwise I might not end up fixing it at all! Usually I'll take care of closing issues anyway, so you don't have to worry about it.
|
||||||
|
|||||||
@@ -67,6 +67,10 @@ public final class Settings {
|
|||||||
/** The unlocalised name of the compatibility config category. */
|
/** The unlocalised name of the compatibility config category. */
|
||||||
public static final String COMPATIBILITY_CATEGORY = "compatibility";
|
public static final String COMPATIBILITY_CATEGORY = "compatibility";
|
||||||
|
|
||||||
|
private static final String[] DEFAULT_TREE_BLOCKS = {"dynamictrees:oakbranch", "dynamictrees:sprucebranch",
|
||||||
|
"dynamictrees:birchbranch", "dynamictrees:junglebranch", "dynamictrees:darkoakbranch",
|
||||||
|
"dynamictrees:acaciabranch", "dynamictrees:cactusbranch", "dynamictrees:leaves0", "dynamictrees:leaves1"};
|
||||||
|
|
||||||
private static final String[] DEFAULT_LOOT_INJECTION_LOCATIONS = {"minecraft:chests/simple_dungeon",
|
private static final String[] DEFAULT_LOOT_INJECTION_LOCATIONS = {"minecraft:chests/simple_dungeon",
|
||||||
"minecraft:chests/abandoned_mineshaft", "minecraft:chests/desert_pyramid", "minecraft:chests/jungle_temple",
|
"minecraft:chests/abandoned_mineshaft", "minecraft:chests/desert_pyramid", "minecraft:chests/jungle_temple",
|
||||||
"minecraft:chests/stronghold_corridor", "minecraft:chests/stronghold_crossing",
|
"minecraft:chests/stronghold_corridor", "minecraft:chests/stronghold_crossing",
|
||||||
@@ -85,7 +89,7 @@ public final class Settings {
|
|||||||
/** <b>[Server-only]</b> List of dimension ids in which to generate wizard towers. */
|
/** <b>[Server-only]</b> List of dimension ids in which to generate wizard towers. */
|
||||||
public int[] towerDimensions = {0};
|
public int[] towerDimensions = {0};
|
||||||
/** <b>[Server-only]</b> The rarity of wizard towers, used by the world generator. Larger numbers are rarer. */
|
/** <b>[Server-only]</b> The rarity of wizard towers, used by the world generator. Larger numbers are rarer. */
|
||||||
public int towerRarity = 600;
|
public int towerRarity = 900;
|
||||||
/** <b>[Server-only]</b> List of structure file locations for wizard towers without loot chests. */
|
/** <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"),
|
public ResourceLocation[] towerFiles = {new ResourceLocation(Wizardry.MODID, "wizard_tower_0"),
|
||||||
new ResourceLocation(Wizardry.MODID, "wizard_tower_1"),
|
new ResourceLocation(Wizardry.MODID, "wizard_tower_1"),
|
||||||
@@ -99,7 +103,7 @@ public final class Settings {
|
|||||||
/** <b>[Server-only]</b> List of dimension ids in which to generate obelisks. */
|
/** <b>[Server-only]</b> List of dimension ids in which to generate obelisks. */
|
||||||
public int[] obeliskDimensions = {0, -1};
|
public int[] obeliskDimensions = {0, -1};
|
||||||
/** <b>[Server-only]</b> The rarity of obelisks, used by the world generator. Larger numbers are rarer. */
|
/** <b>[Server-only]</b> The rarity of obelisks, used by the world generator. Larger numbers are rarer. */
|
||||||
public int obeliskRarity = 550;
|
public int obeliskRarity = 800;
|
||||||
/** <b>[Server-only]</b> List of structure file locations for obelisks. */
|
/** <b>[Server-only]</b> List of structure file locations for obelisks. */
|
||||||
public ResourceLocation[] obeliskFiles = {new ResourceLocation(Wizardry.MODID, "obelisk_0"),
|
public ResourceLocation[] obeliskFiles = {new ResourceLocation(Wizardry.MODID, "obelisk_0"),
|
||||||
new ResourceLocation(Wizardry.MODID, "obelisk_1"),
|
new ResourceLocation(Wizardry.MODID, "obelisk_1"),
|
||||||
@@ -109,7 +113,7 @@ public final class Settings {
|
|||||||
/** <b>[Server-only]</b> List of dimension ids in which to generate shrines. */
|
/** <b>[Server-only]</b> List of dimension ids in which to generate shrines. */
|
||||||
public int[] shrineDimensions = {0, -1};
|
public int[] shrineDimensions = {0, -1};
|
||||||
/** <b>[Server-only]</b> The rarity of shrines, used by the world generator. Larger numbers are rarer. */
|
/** <b>[Server-only]</b> The rarity of shrines, used by the world generator. Larger numbers are rarer. */
|
||||||
public int shrineRarity = 1000;
|
public int shrineRarity = 1500;
|
||||||
/** <b>[Server-only]</b> List of structure file locations for shrines. */
|
/** <b>[Server-only]</b> List of structure file locations for shrines. */
|
||||||
public ResourceLocation[] shrineFiles = {new ResourceLocation(Wizardry.MODID, "shrine_0"),
|
public ResourceLocation[] shrineFiles = {new ResourceLocation(Wizardry.MODID, "shrine_0"),
|
||||||
new ResourceLocation(Wizardry.MODID, "shrine_1"),
|
new ResourceLocation(Wizardry.MODID, "shrine_1"),
|
||||||
@@ -119,6 +123,8 @@ public final class Settings {
|
|||||||
new ResourceLocation(Wizardry.MODID, "shrine_5"),
|
new ResourceLocation(Wizardry.MODID, "shrine_5"),
|
||||||
new ResourceLocation(Wizardry.MODID, "shrine_6"),
|
new ResourceLocation(Wizardry.MODID, "shrine_6"),
|
||||||
new ResourceLocation(Wizardry.MODID, "shrine_7")};
|
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);
|
||||||
/** <b>[Server-only]</b> The chance for wizard towers to generate with an evil wizard and chest inside. */
|
/** <b>[Server-only]</b> The chance for wizard towers to generate with an evil wizard and chest inside. */
|
||||||
public double evilWizardChance = 0.2;
|
public double evilWizardChance = 0.2;
|
||||||
/** <b>[Server-only]</b> List of dimension ids in which to generate crystal ore. */
|
/** <b>[Server-only]</b> List of dimension ids in which to generate crystal ore. */
|
||||||
@@ -700,13 +706,17 @@ public final class Settings {
|
|||||||
towerDimensions = property.getIntList();
|
towerDimensions = property.getIntList();
|
||||||
propOrder.add(property.getName());
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
property = config.get(WORLDGEN_CATEGORY, "towerRarity", 600, "Rarity of wizard towers. 1 in this many chunks will contain a wizard tower, meaning higher numbers are rarer.", 20, 5000);
|
property = config.get(WORLDGEN_CATEGORY, "towerRarity", 900, "Rarity of wizard towers. 1 in this many chunks will contain a wizard tower, meaning higher numbers are rarer.", 20, 5000);
|
||||||
property.setLanguageKey("config." + Wizardry.MODID + ".tower_rarity");
|
property.setLanguageKey("config." + Wizardry.MODID + ".tower_rarity");
|
||||||
property.setRequiresWorldRestart(true);
|
property.setRequiresWorldRestart(true);
|
||||||
Wizardry.proxy.setToNumberSliderEntry(property);
|
Wizardry.proxy.setToNumberSliderEntry(property);
|
||||||
towerRarity = property.getInt();
|
towerRarity = property.getInt();
|
||||||
propOrder.add(property.getName());
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
|
// A bit of backwards-compatibility: predictably, people don't read my instructions and update without deleting
|
||||||
|
// the config, resulting in wizard towers generating everywhere - so let's update it for them!
|
||||||
|
if(towerRarity < 20) towerRarity = 600; // The old default was 8, which is outside the new allowed range
|
||||||
|
|
||||||
property = config.get(WORLDGEN_CATEGORY, "evilWizardChance", 0.2, "The chance for wizard towers to generate with an evil wizard and chest inside, instead of a friendly wizard.", 0, 1);
|
property = config.get(WORLDGEN_CATEGORY, "evilWizardChance", 0.2, "The chance for wizard towers to generate with an evil wizard and chest inside, instead of a friendly wizard.", 0, 1);
|
||||||
property.setLanguageKey("config." + Wizardry.MODID + ".evil_wizard_chance");
|
property.setLanguageKey("config." + Wizardry.MODID + ".evil_wizard_chance");
|
||||||
property.setRequiresWorldRestart(true);
|
property.setRequiresWorldRestart(true);
|
||||||
@@ -734,7 +744,7 @@ public final class Settings {
|
|||||||
obeliskDimensions = property.getIntList();
|
obeliskDimensions = property.getIntList();
|
||||||
propOrder.add(property.getName());
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
property = config.get(WORLDGEN_CATEGORY, "obeliskRarity", 550, "Rarity of obelisks. 1 in this many chunks will contain an obelisk, meaning higher numbers are rarer.", 20, 5000);
|
property = config.get(WORLDGEN_CATEGORY, "obeliskRarity", 800, "Rarity of obelisks. 1 in this many chunks will contain an obelisk, meaning higher numbers are rarer.", 20, 5000);
|
||||||
property.setLanguageKey("config." + Wizardry.MODID + ".obelisk_rarity");
|
property.setLanguageKey("config." + Wizardry.MODID + ".obelisk_rarity");
|
||||||
property.setRequiresWorldRestart(true);
|
property.setRequiresWorldRestart(true);
|
||||||
Wizardry.proxy.setToNumberSliderEntry(property);
|
Wizardry.proxy.setToNumberSliderEntry(property);
|
||||||
@@ -754,7 +764,7 @@ public final class Settings {
|
|||||||
shrineDimensions = property.getIntList();
|
shrineDimensions = property.getIntList();
|
||||||
propOrder.add(property.getName());
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
property = config.get(WORLDGEN_CATEGORY, "shrineRarity", 1000, "Rarity of shrines. 1 in this many chunks will contain a shrine, meaning higher numbers are rarer.", 20, 5000);
|
property = config.get(WORLDGEN_CATEGORY, "shrineRarity", 1500, "Rarity of shrines. 1 in this many chunks will contain a shrine, meaning higher numbers are rarer.", 20, 5000);
|
||||||
property.setLanguageKey("config." + Wizardry.MODID + ".shrine_rarity");
|
property.setLanguageKey("config." + Wizardry.MODID + ".shrine_rarity");
|
||||||
property.setRequiresWorldRestart(true);
|
property.setRequiresWorldRestart(true);
|
||||||
Wizardry.proxy.setToNumberSliderEntry(property);
|
Wizardry.proxy.setToNumberSliderEntry(property);
|
||||||
@@ -768,6 +778,12 @@ public final class Settings {
|
|||||||
shrineFiles = getResourceLocationList(property);
|
shrineFiles = getResourceLocationList(property);
|
||||||
propOrder.add(property.getName());
|
propOrder.add(property.getName());
|
||||||
|
|
||||||
|
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);
|
||||||
|
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!");
|
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!");
|
||||||
property.setLanguageKey("config." + Wizardry.MODID + ".ore_dimensions");
|
property.setLanguageKey("config." + Wizardry.MODID + ".ore_dimensions");
|
||||||
property.setRequiresWorldRestart(true);
|
property.setRequiresWorldRestart(true);
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ import electroblob.wizardry.misc.Forfeit;
|
|||||||
import electroblob.wizardry.packet.WizardryPacketHandler;
|
import electroblob.wizardry.packet.WizardryPacketHandler;
|
||||||
import electroblob.wizardry.registry.*;
|
import electroblob.wizardry.registry.*;
|
||||||
import electroblob.wizardry.spell.Spell;
|
import electroblob.wizardry.spell.Spell;
|
||||||
import electroblob.wizardry.util.CustomSoundCategory;
|
|
||||||
import electroblob.wizardry.util.SpellProperties;
|
import electroblob.wizardry.util.SpellProperties;
|
||||||
import electroblob.wizardry.worldgen.*;
|
import electroblob.wizardry.worldgen.*;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.util.SoundCategory;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.RegistryEvent;
|
import net.minecraftforge.event.RegistryEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
@@ -41,7 +41,10 @@ import org.apache.logging.log4j.Logger;
|
|||||||
* @author Electroblob
|
* @author Electroblob
|
||||||
* @since Wizardry 1.0
|
* @since Wizardry 1.0
|
||||||
*/
|
*/
|
||||||
@Mod(modid = Wizardry.MODID, name = Wizardry.NAME, version = Wizardry.VERSION, guiFactory = "electroblob.wizardry.WizardryGuiFactory")
|
|
||||||
|
@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,)")
|
||||||
|
|
||||||
public class Wizardry {
|
public class Wizardry {
|
||||||
|
|
||||||
/** Wizardry's mod ID. */
|
/** Wizardry's mod ID. */
|
||||||
@@ -51,14 +54,14 @@ public class Wizardry {
|
|||||||
/**
|
/**
|
||||||
* The version number for this version of wizardry. The following system is used for version numbers:
|
* The version number for this version of wizardry. The following system is used for version numbers:
|
||||||
* <p></p>
|
* <p></p>
|
||||||
* <center><b>[major Minecraft version].[major mod version].[minor mod version/patch]
|
* <center><b>[major Minecraft version].[major mod version].[minor mod version/patch]</b>
|
||||||
* <p></p>
|
* <p></p>
|
||||||
* </center></b> The major mod version is consistent across Minecraft versions, i.e. Wizardry 1.1 has the same
|
* </center> The major mod version is consistent across Minecraft versions, i.e. Wizardry 1.1 has the same
|
||||||
* features as Wizardry 2.1, but they are for different versions of Minecraft and have separate minor versioning.
|
* features as Wizardry 2.1, but they are for different versions of Minecraft and have separate minor versioning.
|
||||||
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft
|
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft
|
||||||
* 1.11.x versions, and so on.
|
* 1.11.x versions, and so on.
|
||||||
*/
|
*/
|
||||||
public static final String VERSION = "4.2.0";
|
public static final String VERSION = "4.2.3";
|
||||||
|
|
||||||
// IDEA: Triggering of inbuilt Forge events in relevant places?
|
// IDEA: Triggering of inbuilt Forge events in relevant places?
|
||||||
// IDEA: Abstract the vanilla particles behind the particle builder
|
// IDEA: Abstract the vanilla particles behind the particle builder
|
||||||
@@ -66,9 +69,6 @@ public class Wizardry {
|
|||||||
// TODO: Have particles obey Minecraft's particle setting where appropriate
|
// TODO: Have particles obey Minecraft's particle setting where appropriate
|
||||||
// (see https://github.com/RootsTeam/Embers/blob/master/src/main/java/teamroots/embers/particle/ParticleUtil.java)
|
// (see https://github.com/RootsTeam/Embers/blob/master/src/main/java/teamroots/embers/particle/ParticleUtil.java)
|
||||||
// TODO: TileEntityArcaneWorkbench needs looking at, esp. regarding inventory and markDirty
|
// TODO: TileEntityArcaneWorkbench needs looking at, esp. regarding inventory and markDirty
|
||||||
// TODO: See what can be done with the illager spell sounds (and go over sounds in general)
|
|
||||||
// TODO: Fix possession
|
|
||||||
// TODO: Fix charge
|
|
||||||
|
|
||||||
/** Static instance of the {@link Settings} object for Wizardry. */
|
/** Static instance of the {@link Settings} object for Wizardry. */
|
||||||
public static final Settings settings = new Settings();
|
public static final Settings settings = new Settings();
|
||||||
@@ -113,6 +113,9 @@ public class Wizardry {
|
|||||||
proxy.registerRenderers();
|
proxy.registerRenderers();
|
||||||
proxy.registerKeyBindings();
|
proxy.registerKeyBindings();
|
||||||
|
|
||||||
|
// Commented out for 4.2.3 to get rid of the sound bug, reinstate once a fix is found.
|
||||||
|
WizardrySounds.SPELLS = SoundCategory.PLAYERS;//CustomSoundCategory.add(Wizardry.MODID + "_spells");
|
||||||
|
|
||||||
WizardryBaublesIntegration.init();
|
WizardryBaublesIntegration.init();
|
||||||
WizardryAntiqueAtlasIntegration.init();
|
WizardryAntiqueAtlasIntegration.init();
|
||||||
|
|
||||||
@@ -151,8 +154,6 @@ public class Wizardry {
|
|||||||
proxy.initGuiBits();
|
proxy.initGuiBits();
|
||||||
proxy.registerParticles();
|
proxy.registerParticles();
|
||||||
proxy.registerSoundEventListener();
|
proxy.registerSoundEventListener();
|
||||||
|
|
||||||
WizardrySounds.SPELLS = CustomSoundCategory.add(Wizardry.MODID + ":spells");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import net.minecraft.block.material.Material;
|
|||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.BlockRenderLayer;
|
import net.minecraft.util.BlockRenderLayer;
|
||||||
import net.minecraft.util.EnumBlockRenderType;
|
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.IBlockAccess;
|
import net.minecraft.world.IBlockAccess;
|
||||||
@@ -34,26 +33,16 @@ public class BlockSpectral extends Block implements ITileEntityProvider {
|
|||||||
|
|
||||||
// Replaces getRenderBlockPass
|
// Replaces getRenderBlockPass
|
||||||
@Override
|
@Override
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
public BlockRenderLayer getRenderLayer(){
|
public BlockRenderLayer getRenderLayer(){
|
||||||
return BlockRenderLayer.TRANSLUCENT;
|
return BlockRenderLayer.TRANSLUCENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
// See BlockTransportationStone for what all these do
|
||||||
public EnumBlockRenderType getRenderType(IBlockState state){
|
@Override public boolean isFullCube(IBlockState state){ return false; }
|
||||||
return EnumBlockRenderType.MODEL;
|
@Override public boolean isBlockNormalCube(IBlockState state){ return false; }
|
||||||
}
|
@Override public boolean isNormalCube(IBlockState state){ return false; }
|
||||||
|
@Override public boolean isOpaqueCube(IBlockState state){ return false; }
|
||||||
// Apparently it's OK to override this, despite it being deprecated. More importantly, it being deprecated is not
|
|
||||||
// Forge's doing, rather it is Mojang themselves misusing the @Deprecated annotation to mean 'internal, don't call'.
|
|
||||||
@Override
|
|
||||||
public boolean isOpaqueCube(IBlockState state){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random random){
|
public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random random){
|
||||||
@@ -67,12 +56,12 @@ public class BlockSpectral extends Block implements ITileEntityProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overriden to make the block always look full brightness despite not emitting
|
// // Overriden to make the block always look full brightness despite not emitting
|
||||||
// full light.
|
// // full light.
|
||||||
@Override
|
// @Override
|
||||||
public int getPackedLightmapCoords(IBlockState state, IBlockAccess source, BlockPos pos){
|
// public int getPackedLightmapCoords(IBlockState state, IBlockAccess source, BlockPos pos){
|
||||||
return 15;
|
// return 15;
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasTileEntity(IBlockState state){
|
public boolean hasTileEntity(IBlockState state){
|
||||||
|
|||||||
@@ -62,12 +62,6 @@ public class BlockTransportationStone extends Block {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Forge version of the above method. I still need to override both though because vanilla uses the other one.
|
|
||||||
@Override
|
|
||||||
public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ... and this one is for rendering.
|
// ... and this one is for rendering.
|
||||||
@Override
|
@Override
|
||||||
public boolean isOpaqueCube(IBlockState state){
|
public boolean isOpaqueCube(IBlockState state){
|
||||||
@@ -147,7 +141,7 @@ public class BlockTransportationStone extends Block {
|
|||||||
if(locations.isEmpty()) locations.add(here);
|
if(locations.isEmpty()) locations.add(here);
|
||||||
else{
|
else{
|
||||||
locations.remove(here); // Prevents duplicates
|
locations.remove(here); // Prevents duplicates
|
||||||
locations.set(locations.size() - 1, here);
|
locations.set(Math.max(locations.size() - 1, 0), here);
|
||||||
}
|
}
|
||||||
if(!world.isRemote) player.sendStatusMessage(new TextComponentTranslation("tile." + Wizardry.MODID + ":transportation_stone.confirm", Spells.transportation.getNameForTranslationFormatted()), true);
|
if(!world.isRemote) player.sendStatusMessage(new TextComponentTranslation("tile." + Wizardry.MODID + ":transportation_stone.confirm", Spells.transportation.getNameForTranslationFormatted()), true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -425,14 +425,15 @@ public class ClientProxy extends CommonProxy {
|
|||||||
// Again, no need to check if the spell succeeded, because the packet is only ever sent when it
|
// Again, no need to check if the spell succeeded, because the packet is only ever sent when it
|
||||||
// succeeds.
|
// succeeds.
|
||||||
MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Post(Source.NPC, spell, (EntityLiving)caster, message.modifiers));
|
MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Post(Source.NPC, spell, (EntityLiving)caster, message.modifiers));
|
||||||
}
|
|
||||||
|
|
||||||
if(caster instanceof ISpellCaster){
|
if(caster instanceof ISpellCaster){
|
||||||
if(spell.isContinuous || spell instanceof None){
|
if(spell.isContinuous || spell instanceof None){
|
||||||
((ISpellCaster)caster).setContinuousSpell(spell);
|
((ISpellCaster)caster).setContinuousSpell(spell);
|
||||||
((EntityLiving)caster).setAttackTarget((EntityLivingBase)target);
|
((EntityLiving)caster).setAttackTarget((EntityLivingBase)target);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}else if(caster != null){
|
}else if(caster != null){
|
||||||
Wizardry.logger.warn("Recieved a PacketNPCCastSpell, but the caster ID was not the ID of an EntityLiving");
|
Wizardry.logger.warn("Recieved a PacketNPCCastSpell, but the caster ID was not the ID of an EntityLiving");
|
||||||
}
|
}
|
||||||
@@ -474,6 +475,9 @@ public class ClientProxy extends CommonProxy {
|
|||||||
|
|
||||||
World world = Minecraft.getMinecraft().world;
|
World world = Minecraft.getMinecraft().world;
|
||||||
Entity caster = world.getEntityByID(message.casterID);
|
Entity caster = world.getEntityByID(message.casterID);
|
||||||
|
|
||||||
|
if(caster == null) return; // Shouldn't happen
|
||||||
|
|
||||||
// Moved from when the packet is sent to when it is received; fixes the sound not playing in first person.
|
// Moved from when the packet is sent to when it is received; fixes the sound not playing in first person.
|
||||||
caster.playSound(WizardrySounds.SPELL_TRANSPORTATION_TRAVEL, 1, 1);
|
caster.playSound(WizardrySounds.SPELL_TRANSPORTATION_TRAVEL, 1, 1);
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ package electroblob.wizardry.client.gui;
|
|||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.client.DrawingUtils;
|
import electroblob.wizardry.client.DrawingUtils;
|
||||||
import electroblob.wizardry.constants.Element;
|
import electroblob.wizardry.constants.Element;
|
||||||
|
import electroblob.wizardry.constants.Tier;
|
||||||
import electroblob.wizardry.data.SpellGlyphData;
|
import electroblob.wizardry.data.SpellGlyphData;
|
||||||
import electroblob.wizardry.data.WizardData;
|
import electroblob.wizardry.data.WizardData;
|
||||||
import electroblob.wizardry.item.IManaStoringItem;
|
import electroblob.wizardry.item.IManaStoringItem;
|
||||||
import electroblob.wizardry.item.ISpellCastingItem;
|
import electroblob.wizardry.item.ISpellCastingItem;
|
||||||
import electroblob.wizardry.item.IWorkbenchItem;
|
import electroblob.wizardry.item.IWorkbenchItem;
|
||||||
|
import electroblob.wizardry.item.ItemWand;
|
||||||
import electroblob.wizardry.packet.PacketControlInput;
|
import electroblob.wizardry.packet.PacketControlInput;
|
||||||
import electroblob.wizardry.packet.WizardryPacketHandler;
|
import electroblob.wizardry.packet.WizardryPacketHandler;
|
||||||
import electroblob.wizardry.registry.WizardrySounds;
|
import electroblob.wizardry.registry.WizardrySounds;
|
||||||
@@ -29,6 +31,8 @@ import net.minecraft.inventory.Slot;
|
|||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraftforge.client.event.TextureStitchEvent;
|
import net.minecraftforge.client.event.TextureStitchEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
@@ -47,6 +51,7 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
private IInventory arcaneWorkbenchInventory;
|
private IInventory arcaneWorkbenchInventory;
|
||||||
|
|
||||||
private static final int TOOLTIP_WIDTH = 164;
|
private static final int TOOLTIP_WIDTH = 164;
|
||||||
|
private static final int TOOLTIP_TEXT_INSET = 6;
|
||||||
|
|
||||||
/** We report the actual size of the GUI to Minecraft when a wand is in so JEI doesn't overdraw it.
|
/** We report the actual size of the GUI to Minecraft when a wand is in so JEI doesn't overdraw it.
|
||||||
* For calculations, we use the size without the tooltip, which is stored in this constant. */
|
* For calculations, we use the size without the tooltip, which is stored in this constant. */
|
||||||
@@ -57,6 +62,9 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
private static final int RUNE_WIDTH = 100;
|
private static final int RUNE_WIDTH = 100;
|
||||||
private static final int RUNE_HEIGHT = 100;
|
private static final int RUNE_HEIGHT = 100;
|
||||||
|
|
||||||
|
private static final int PROGRESSION_BAR_WIDTH = 152;
|
||||||
|
private static final int PROGRESSION_BAR_HEIGHT = 3;
|
||||||
|
|
||||||
private static final int HALO_DIAMETER = 156;
|
private static final int HALO_DIAMETER = 156;
|
||||||
|
|
||||||
private static final int TEXTURE_WIDTH = 512;
|
private static final int TEXTURE_WIDTH = 512;
|
||||||
@@ -232,6 +240,26 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
y += 14;
|
y += 14;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Progression bar
|
||||||
|
if(stack.getItem() instanceof ItemWand && !Wizardry.settings.legacyWandLevelling){
|
||||||
|
|
||||||
|
y += 10;
|
||||||
|
|
||||||
|
Tier tier = ((ItemWand)stack.getItem()).tier;
|
||||||
|
|
||||||
|
float progressFraction = 1;
|
||||||
|
|
||||||
|
if(tier != Tier.MASTER){
|
||||||
|
progressFraction = (float)WandHelper.getProgression(stack) / Tier.values()[tier.level + 1].progression;
|
||||||
|
}
|
||||||
|
|
||||||
|
DrawingUtils.drawTexturedRect(guiLeft + MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET, y, MAIN_GUI_WIDTH, ySize + PROGRESSION_BAR_HEIGHT, PROGRESSION_BAR_WIDTH, PROGRESSION_BAR_HEIGHT, TEXTURE_WIDTH, TEXTURE_HEIGHT);
|
||||||
|
int width = (int)(PROGRESSION_BAR_WIDTH * progressFraction);
|
||||||
|
DrawingUtils.drawTexturedRect(guiLeft + MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET, y, MAIN_GUI_WIDTH, ySize, width, PROGRESSION_BAR_HEIGHT, TEXTURE_WIDTH, TEXTURE_HEIGHT);
|
||||||
|
|
||||||
|
y += 8;
|
||||||
|
}
|
||||||
|
|
||||||
if(stack.getItem() instanceof ISpellCastingItem && ((ISpellCastingItem)stack.getItem()).showSpellsInWorkbench(this.mc.player, stack)){
|
if(stack.getItem() instanceof ISpellCastingItem && ((ISpellCastingItem)stack.getItem()).showSpellsInWorkbench(this.mc.player, stack)){
|
||||||
|
|
||||||
Spell[] spells = ((ISpellCastingItem)stack.getItem()).getSpells(stack);
|
Spell[] spells = ((ISpellCastingItem)stack.getItem()).getSpells(stack);
|
||||||
@@ -251,7 +279,7 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
.bindTexture(discovered ? spell.getElement().getIcon() : Element.MAGIC.getIcon());
|
.bindTexture(discovered ? spell.getElement().getIcon() : Element.MAGIC.getIcon());
|
||||||
|
|
||||||
// Renders the little element icon
|
// Renders the little element icon
|
||||||
DrawingUtils.drawTexturedRect(guiLeft + MAIN_GUI_WIDTH + 5, y, 8, 8);
|
DrawingUtils.drawTexturedRect(guiLeft + MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET - 1, y, 8, 8);
|
||||||
|
|
||||||
y += 10;
|
y += 10;
|
||||||
}
|
}
|
||||||
@@ -270,8 +298,8 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
if(level > 0){
|
if(level > 0){
|
||||||
ItemStack stack1 = new ItemStack(item, level);
|
ItemStack stack1 = new ItemStack(item, level);
|
||||||
GlStateManager.enableDepth();
|
GlStateManager.enableDepth();
|
||||||
this.itemRender.renderItemAndEffectIntoGUI(stack1, guiLeft + MAIN_GUI_WIDTH + 6 + x, y);
|
this.itemRender.renderItemAndEffectIntoGUI(stack1, guiLeft + MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET + x, y);
|
||||||
this.itemRender.renderItemOverlayIntoGUI(this.fontRenderer, stack1, guiLeft + MAIN_GUI_WIDTH + 6 + x, y,
|
this.itemRender.renderItemOverlayIntoGUI(this.fontRenderer, stack1, guiLeft + MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET + x, y,
|
||||||
null);
|
null);
|
||||||
x += 18;
|
x += 18;
|
||||||
GlStateManager.disableDepth();
|
GlStateManager.disableDepth();
|
||||||
@@ -311,7 +339,7 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
|
|
||||||
int y = 6;
|
int y = 6;
|
||||||
|
|
||||||
this.fontRenderer.drawStringWithShadow("\u00A7f" + stack.getDisplayName(), MAIN_GUI_WIDTH + 6, y, 0);
|
this.fontRenderer.drawStringWithShadow("\u00A7f" + stack.getDisplayName(), MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET, y, 0);
|
||||||
|
|
||||||
if(stack.getItem() instanceof IManaStoringItem && ((IManaStoringItem)stack.getItem()).showManaInWorkbench(this.mc.player, stack)){
|
if(stack.getItem() instanceof IManaStoringItem && ((IManaStoringItem)stack.getItem()).showManaInWorkbench(this.mc.player, stack)){
|
||||||
y += 14;
|
y += 14;
|
||||||
@@ -319,7 +347,27 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
"\u00A77" + I18n.format("container." + Wizardry.MODID + ":arcane_workbench.mana")
|
"\u00A77" + I18n.format("container." + Wizardry.MODID + ":arcane_workbench.mana")
|
||||||
+ " " + ((IManaStoringItem)stack.getItem()).getMana(stack) + "/"
|
+ " " + ((IManaStoringItem)stack.getItem()).getMana(stack) + "/"
|
||||||
+ ((IManaStoringItem)stack.getItem()).getManaCapacity(stack),
|
+ ((IManaStoringItem)stack.getItem()).getManaCapacity(stack),
|
||||||
MAIN_GUI_WIDTH + 6, y, 0);
|
MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET, y, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Progression tier text
|
||||||
|
if(stack.getItem() instanceof ItemWand && !Wizardry.settings.legacyWandLevelling){
|
||||||
|
|
||||||
|
y += 14;
|
||||||
|
|
||||||
|
Tier tier = ((ItemWand)stack.getItem()).tier;
|
||||||
|
|
||||||
|
this.fontRenderer.drawStringWithShadow(tier.getDisplayNameWithFormatting(), MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET, y, 0);
|
||||||
|
|
||||||
|
if(tier != Tier.MASTER){
|
||||||
|
Tier nextTier = Tier.values()[tier.level + 1];
|
||||||
|
String s = TextFormatting.DARK_GRAY.toString() + nextTier.getDisplayName();
|
||||||
|
if(WandHelper.getProgression(stack) >= nextTier.progression) s = nextTier.getDisplayNameWithFormatting();
|
||||||
|
this.fontRenderer.drawStringWithShadow(s, MAIN_GUI_WIDTH + TOOLTIP_WIDTH
|
||||||
|
- TOOLTIP_TEXT_INSET - fontRenderer.getStringWidth(s), y, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
y += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
y += 14;
|
y += 14;
|
||||||
@@ -337,10 +385,10 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(discovered){
|
if(discovered){
|
||||||
this.fontRenderer.drawStringWithShadow(spell.getDisplayNameWithFormatting(), MAIN_GUI_WIDTH + 16, y, 0);
|
this.fontRenderer.drawStringWithShadow(spell.getDisplayNameWithFormatting(), MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET + 10, y, 0);
|
||||||
}else{
|
}else{
|
||||||
this.mc.standardGalacticFontRenderer.drawStringWithShadow(
|
this.mc.standardGalacticFontRenderer.drawStringWithShadow(
|
||||||
"\u00A79" + SpellGlyphData.getGlyphName(spell, this.mc.world), MAIN_GUI_WIDTH + 16, y, 0);
|
"\u00A79" + SpellGlyphData.getGlyphName(spell, this.mc.world), MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET + 10, y, 0);
|
||||||
}
|
}
|
||||||
y += 10;
|
y += 10;
|
||||||
}
|
}
|
||||||
@@ -351,7 +399,7 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
y += 6;
|
y += 6;
|
||||||
|
|
||||||
this.fontRenderer.drawStringWithShadow("\u00A7f" + I18n.format("container."
|
this.fontRenderer.drawStringWithShadow("\u00A7f" + I18n.format("container."
|
||||||
+ Wizardry.MODID + ":arcane_workbench.upgrades"), MAIN_GUI_WIDTH + 6, y, 0);
|
+ Wizardry.MODID + ":arcane_workbench.upgrades"), MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET, y, 0);
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
y += 10;
|
y += 10;
|
||||||
@@ -364,7 +412,7 @@ public class GuiArcaneWorkbench extends GuiContainer {
|
|||||||
if(level > 0){
|
if(level > 0){
|
||||||
// The javadoc for isPointInRegion is ambiguous; what it means is that the REGION is
|
// The javadoc for isPointInRegion is ambiguous; what it means is that the REGION is
|
||||||
// relative to the GUI but the POINT isn't.
|
// relative to the GUI but the POINT isn't.
|
||||||
if(isPointInRegion(MAIN_GUI_WIDTH + 6 + x, y, 16, 16, mouseX, mouseY)){
|
if(isPointInRegion(MAIN_GUI_WIDTH + TOOLTIP_TEXT_INSET + x, y, 16, 16, mouseX, mouseY)){
|
||||||
ItemStack stack1 = new ItemStack(item, level);
|
ItemStack stack1 = new ItemStack(item, level);
|
||||||
this.renderToolTip(stack1, mouseX - guiLeft, mouseY - guiTop);
|
this.renderToolTip(stack1, mouseX - guiLeft, mouseY - guiTop);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.google.common.collect.Streams;
|
|||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonSyntaxException;
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.client.DrawingUtils;
|
import electroblob.wizardry.client.DrawingUtils;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
@@ -17,6 +18,7 @@ import net.minecraft.item.crafting.Ingredient;
|
|||||||
import net.minecraft.util.JsonUtils;
|
import net.minecraft.util.JsonUtils;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
class CraftingRecipe {
|
class CraftingRecipe {
|
||||||
@@ -60,8 +62,8 @@ class CraftingRecipe {
|
|||||||
for(ResourceLocation location : locations){
|
for(ResourceLocation location : locations){
|
||||||
|
|
||||||
IRecipe recipe = CraftingManager.getRecipe(location);
|
IRecipe recipe = CraftingManager.getRecipe(location);
|
||||||
if(recipe == null) throw new JsonSyntaxException("No such recipe: " + location);
|
if(recipe == null) Wizardry.logger.warn("The recipe {} used in the wizard's handbook does not exist, it will display a blank grid instead", location);
|
||||||
recipes.add(recipe);
|
else recipes.add(recipe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +82,7 @@ class CraftingRecipe {
|
|||||||
|
|
||||||
for(int[] instance : instances){
|
for(int[] instance : instances){
|
||||||
if(GuiWizardHandbook.singleToDoublePage(instance[0]) == doublePage){
|
if(GuiWizardHandbook.singleToDoublePage(instance[0]) == doublePage){
|
||||||
renderCraftingRecipe(font, itemRenderer, left + instance[1], top + instance[2], recipes.get(index % recipes.size()));
|
renderCraftingRecipe(font, itemRenderer, left + instance[1], top + instance[2], recipes.isEmpty() ? null : recipes.get(index % recipes.size()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -96,6 +98,8 @@ class CraftingRecipe {
|
|||||||
*/
|
*/
|
||||||
void drawTooltips(GuiWizardHandbook gui, FontRenderer font, RenderItem itemRenderer, int doublePage, int left, int top, int mouseX, int mouseY){
|
void drawTooltips(GuiWizardHandbook gui, FontRenderer font, RenderItem itemRenderer, int doublePage, int left, int top, int mouseX, int mouseY){
|
||||||
|
|
||||||
|
if(recipes.isEmpty()) return;
|
||||||
|
|
||||||
int index = (int)(Minecraft.getSystemTime() % Integer.MAX_VALUE)/2000;
|
int index = (int)(Minecraft.getSystemTime() % Integer.MAX_VALUE)/2000;
|
||||||
|
|
||||||
for(int[] instance : instances){
|
for(int[] instance : instances){
|
||||||
@@ -135,50 +139,53 @@ class CraftingRecipe {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void renderCraftingRecipe(FontRenderer font, RenderItem itemRenderer, int x, int y, IRecipe recipe){
|
private static void renderCraftingRecipe(FontRenderer font, RenderItem itemRenderer, int x, int y, @Nullable IRecipe recipe){
|
||||||
|
|
||||||
ItemStack result = recipe.getRecipeOutput();
|
|
||||||
|
|
||||||
GlStateManager.color(1, 1, 1, 1);
|
GlStateManager.color(1, 1, 1, 1);
|
||||||
Minecraft.getMinecraft().renderEngine.bindTexture(GuiWizardHandbook.texture);
|
Minecraft.getMinecraft().renderEngine.bindTexture(GuiWizardHandbook.texture);
|
||||||
|
|
||||||
DrawingUtils.drawTexturedRect(x, y, TEXTURE_INSET_X, TEXTURE_INSET_Y, WIDTH, HEIGHT, GuiWizardHandbook.TEXTURE_WIDTH, GuiWizardHandbook.TEXTURE_HEIGHT);
|
DrawingUtils.drawTexturedRect(x, y, TEXTURE_INSET_X, TEXTURE_INSET_Y, WIDTH, HEIGHT, GuiWizardHandbook.TEXTURE_WIDTH, GuiWizardHandbook.TEXTURE_HEIGHT);
|
||||||
|
|
||||||
GlStateManager.pushMatrix();
|
if(recipe != null){
|
||||||
RenderHelper.enableGUIStandardItemLighting();
|
|
||||||
GlStateManager.disableLighting();
|
|
||||||
GlStateManager.enableRescaleNormal();
|
|
||||||
GlStateManager.enableColorMaterial();
|
|
||||||
itemRenderer.zLevel = 100.0F;
|
|
||||||
|
|
||||||
int index = (int)(Minecraft.getSystemTime() % Integer.MAX_VALUE)/2000;
|
GlStateManager.pushMatrix();
|
||||||
|
RenderHelper.enableGUIStandardItemLighting();
|
||||||
|
GlStateManager.disableLighting();
|
||||||
|
GlStateManager.enableRescaleNormal();
|
||||||
|
GlStateManager.enableColorMaterial();
|
||||||
|
itemRenderer.zLevel = 100.0F;
|
||||||
|
|
||||||
int i = 0;
|
int index = (int)(Minecraft.getSystemTime() % Integer.MAX_VALUE) / 2000;
|
||||||
|
|
||||||
for(Ingredient ingredient : recipe.getIngredients()){
|
int i = 0;
|
||||||
|
|
||||||
if(ingredient != Ingredient.EMPTY){
|
for(Ingredient ingredient : recipe.getIngredients()){
|
||||||
ItemStack stack = ingredient.getMatchingStacks()[index % ingredient.getMatchingStacks().length];
|
|
||||||
if(!stack.isEmpty()){
|
if(ingredient != Ingredient.EMPTY){
|
||||||
itemRenderer.renderItemAndEffectIntoGUI(stack, x + BORDER + 18 * (i%3), y + BORDER + 18 * (i/3));
|
ItemStack stack = ingredient.getMatchingStacks()[index % ingredient.getMatchingStacks().length];
|
||||||
itemRenderer.renderItemOverlays(font, stack, x + BORDER + 18 * (i%3), y + BORDER + 18 * (i/3));
|
if(!stack.isEmpty()){
|
||||||
|
itemRenderer.renderItemAndEffectIntoGUI(stack, x + BORDER + 18 * (i % 3), y + BORDER + 18 * (i / 3));
|
||||||
|
itemRenderer.renderItemOverlays(font, stack, x + BORDER + 18 * (i % 3), y + BORDER + 18 * (i / 3));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
i++;
|
ItemStack result = recipe.getRecipeOutput();
|
||||||
|
|
||||||
|
if(!result.isEmpty()){
|
||||||
|
itemRenderer.renderItemAndEffectIntoGUI(result, x + BORDER + 86, y + BORDER + 18);
|
||||||
|
itemRenderer.renderItemOverlays(font, result, x + BORDER + 86, y + BORDER + 18);
|
||||||
|
}
|
||||||
|
|
||||||
|
GlStateManager.popMatrix();
|
||||||
|
GlStateManager.enableDepth();
|
||||||
|
GlStateManager.disableColorMaterial();
|
||||||
|
itemRenderer.zLevel = 0.0F;
|
||||||
|
RenderHelper.disableStandardItemLighting();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!result.isEmpty()){
|
|
||||||
itemRenderer.renderItemAndEffectIntoGUI(result, x + BORDER + 86, y + BORDER + 18);
|
|
||||||
itemRenderer.renderItemOverlays(font, result, x + BORDER + 86, y + BORDER + 18);
|
|
||||||
}
|
|
||||||
|
|
||||||
GlStateManager.popMatrix();
|
|
||||||
GlStateManager.enableDepth();
|
|
||||||
GlStateManager.disableColorMaterial();
|
|
||||||
itemRenderer.zLevel = 0.0F;
|
|
||||||
RenderHelper.disableStandardItemLighting();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void renderCraftingTooltips(GuiWizardHandbook gui, RenderItem itemRenderer, int x, int y, int mouseX, int mouseY, IRecipe recipe){
|
private static void renderCraftingTooltips(GuiWizardHandbook gui, RenderItem itemRenderer, int x, int y, int mouseX, int mouseY, IRecipe recipe){
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ public class GuiWizardHandbook extends GuiScreen {
|
|||||||
addFormatTag("advanced_max_charge", "" + Tier.ADVANCED.maxCharge);
|
addFormatTag("advanced_max_charge", "" + Tier.ADVANCED.maxCharge);
|
||||||
addFormatTag("master_max_charge", "" + Tier.MASTER.maxCharge);
|
addFormatTag("master_max_charge", "" + Tier.MASTER.maxCharge);
|
||||||
addFormatTag("version", Wizardry.VERSION);
|
addFormatTag("version", Wizardry.VERSION);
|
||||||
addFormatTag("mcversion", Minecraft.getMinecraft().getVersion());
|
addFormatTag("mcversion", "1.12.2");
|
||||||
|
|
||||||
addFormatTag("colour_novice", "\u00A77");
|
addFormatTag("colour_novice", "\u00A77");
|
||||||
addFormatTag("colour_apprentice", Tier.APPRENTICE.getFormattingCode());
|
addFormatTag("colour_apprentice", Tier.APPRENTICE.getFormattingCode());
|
||||||
|
|||||||
@@ -282,6 +282,9 @@ public final class WizardryModels {
|
|||||||
if(location.getPath().contains("runestone") || location.getPath().contains("runestone_pedestal")){
|
if(location.getPath().contains("runestone") || location.getPath().contains("runestone_pedestal")){
|
||||||
IBakedModel original = event.getModelRegistry().getObject(location);
|
IBakedModel original = event.getModelRegistry().getObject(location);
|
||||||
event.getModelRegistry().putObject(location, new BakedModelGlowingOverlay(original, "overlay"));
|
event.getModelRegistry().putObject(location, new BakedModelGlowingOverlay(original, "overlay"));
|
||||||
|
}else if(location.getPath().contains("spectral_block")){
|
||||||
|
IBakedModel original = event.getModelRegistry().getObject(location);
|
||||||
|
event.getModelRegistry().putObject(location, new BakedModelGlowingOverlay(original, "spectral_block"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,8 +41,6 @@ public class ParticlePath extends ParticleWizardry {
|
|||||||
@Override
|
@Override
|
||||||
public void onUpdate(){
|
public void onUpdate(){
|
||||||
|
|
||||||
super.onUpdate();
|
|
||||||
|
|
||||||
this.prevPosX = this.posX;
|
this.prevPosX = this.posX;
|
||||||
this.prevPosY = this.posY;
|
this.prevPosY = this.posY;
|
||||||
this.prevPosZ = this.posZ;
|
this.prevPosZ = this.posZ;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public class ParticleTornado extends ParticleDigging {
|
|||||||
public ParticleTornado(World world, int maxAge, double originX, double originZ, double radius, double yPos,
|
public ParticleTornado(World world, int maxAge, double originX, double originZ, double radius, double yPos,
|
||||||
double velX, double velZ, IBlockState block){
|
double velX, double velZ, IBlockState block){
|
||||||
super(world, 0, 0, 0, 0, 0, 0, block);
|
super(world, 0, 0, 0, 0, 0, 0, block);
|
||||||
float angle = this.rand.nextFloat() * (float)Math.PI * 2;
|
this.angle = this.rand.nextFloat() * (float)Math.PI * 2;
|
||||||
double x = originX - MathHelper.cos(angle) * radius;
|
double x = originX - MathHelper.cos(angle) * radius;
|
||||||
double z = originZ + radius * MathHelper.sin(angle);
|
double z = originZ + radius * MathHelper.sin(angle);
|
||||||
this.radius = radius;
|
this.radius = radius;
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(Side.CLIENT)
|
@Mod.EventBusSubscriber(Side.CLIENT)
|
||||||
public class RenderArcaneLock {
|
public class RenderArcaneLock {
|
||||||
|
|
||||||
@@ -54,9 +57,14 @@ public class RenderArcaneLock {
|
|||||||
BufferBuilder buffer = tessellator.getBuffer();
|
BufferBuilder buffer = tessellator.getBuffer();
|
||||||
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
|
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
|
||||||
|
|
||||||
for(TileEntity tileentity : world.loadedTileEntityList){
|
// Someone managed to get a CME here so let's just copy the list to be safe
|
||||||
|
// 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);
|
||||||
|
|
||||||
if(tileentity.getDistanceSq(origin.x, origin.y, origin.z) <= 64*64 && tileentity.getTileData().hasUniqueId(ArcaneLock.NBT_KEY)){
|
for(TileEntity tileentity : tileentities){
|
||||||
|
|
||||||
|
if(tileentity.getDistanceSq(origin.x, origin.y, origin.z) <= tileentity.getMaxRenderDistanceSquared()
|
||||||
|
&& tileentity.getTileData().hasUniqueId(ArcaneLock.NBT_KEY)){
|
||||||
|
|
||||||
Vec3d[] vertices = WizardryUtilities.getVertices(world.getBlockState(tileentity.getPos()).getBoundingBox(world, tileentity.getPos()).grow(0.05).offset(tileentity.getPos()));
|
Vec3d[] vertices = WizardryUtilities.getVertices(world.getBlockState(tileentity.getPos()).getBoundingBox(world, tileentity.getPos()).grow(0.05).offset(tileentity.getPos()));
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ import java.util.Random;
|
|||||||
public enum Tier {
|
public enum Tier {
|
||||||
|
|
||||||
NOVICE(700, 3, 12, 0, new Style().setColor(TextFormatting.WHITE), "novice"),
|
NOVICE(700, 3, 12, 0, new Style().setColor(TextFormatting.WHITE), "novice"),
|
||||||
APPRENTICE(1000, 5, 5, 6000, new Style().setColor(TextFormatting.AQUA), "apprentice"),
|
APPRENTICE(1000, 5, 5, 4000, new Style().setColor(TextFormatting.AQUA), "apprentice"),
|
||||||
ADVANCED(1500, 7, 2, 9000, new Style().setColor(TextFormatting.DARK_BLUE), "advanced"),
|
ADVANCED(1500, 7, 2, 6000, new Style().setColor(TextFormatting.DARK_BLUE), "advanced"),
|
||||||
MASTER(2500, 9, 1, 15000, new Style().setColor(TextFormatting.DARK_PURPLE), "master");
|
MASTER(2500, 9, 1, 10000, new Style().setColor(TextFormatting.DARK_PURPLE), "master");
|
||||||
|
|
||||||
/** Maximum mana a wand of this tier can store. */
|
/** Maximum mana a wand of this tier can store. */
|
||||||
public final int maxCharge;
|
public final int maxCharge;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import electroblob.wizardry.enchantment.Imbuement;
|
|||||||
import electroblob.wizardry.entity.living.ISummonedCreature;
|
import electroblob.wizardry.entity.living.ISummonedCreature;
|
||||||
import electroblob.wizardry.event.SpellCastEvent;
|
import electroblob.wizardry.event.SpellCastEvent;
|
||||||
import electroblob.wizardry.event.SpellCastEvent.Source;
|
import electroblob.wizardry.event.SpellCastEvent.Source;
|
||||||
|
import electroblob.wizardry.item.ItemWand;
|
||||||
import electroblob.wizardry.packet.PacketCastContinuousSpell;
|
import electroblob.wizardry.packet.PacketCastContinuousSpell;
|
||||||
import electroblob.wizardry.packet.PacketPlayerSync;
|
import electroblob.wizardry.packet.PacketPlayerSync;
|
||||||
import electroblob.wizardry.packet.WizardryPacketHandler;
|
import electroblob.wizardry.packet.WizardryPacketHandler;
|
||||||
@@ -71,7 +72,7 @@ public class WizardData implements INBTSerializable<NBTTagCompound> {
|
|||||||
private static final Set<IStoredVariable> storedVariables = new HashSet<>();
|
private static final Set<IStoredVariable> storedVariables = new HashSet<>();
|
||||||
|
|
||||||
/** The maximum number of recent spells to track. */
|
/** The maximum number of recent spells to track. */
|
||||||
public static final int MAX_RECENT_SPELLS = 10;
|
public static final int MAX_RECENT_SPELLS = ItemWand.BASE_SPELL_SLOTS;
|
||||||
|
|
||||||
/** The player this WizardData instance belongs to. */
|
/** The player this WizardData instance belongs to. */
|
||||||
private final EntityPlayer player;
|
private final EntityPlayer player;
|
||||||
@@ -140,7 +141,7 @@ public class WizardData implements INBTSerializable<NBTTagCompound> {
|
|||||||
// All players can recognise magic missile. This is not done using discoverSpell because that seems to cause
|
// All players can recognise magic missile. This is not done using discoverSpell because that seems to cause
|
||||||
// a crash on load occasionally (probably something to do with achievements being initialised)
|
// a crash on load occasionally (probably something to do with achievements being initialised)
|
||||||
this.spellsDiscovered.add(Spells.magic_missile);
|
this.spellsDiscovered.add(Spells.magic_missile);
|
||||||
this.recentSpells = EvictingQueue.create(MAX_RECENT_SPELLS); // Only keeps a reference to the last 10 spells cast
|
this.recentSpells = EvictingQueue.create(MAX_RECENT_SPELLS); // Only keeps a reference to the last 5 spells cast
|
||||||
this.castCommandSpell = Spells.none;
|
this.castCommandSpell = Spells.none;
|
||||||
this.castCommandModifiers = new SpellModifiers();
|
this.castCommandModifiers = new SpellModifiers();
|
||||||
this.castCommandTick = 0;
|
this.castCommandTick = 0;
|
||||||
@@ -272,7 +273,7 @@ public class WizardData implements INBTSerializable<NBTTagCompound> {
|
|||||||
* @param spell The spell to count casts for.
|
* @param spell The spell to count casts for.
|
||||||
*/
|
*/
|
||||||
public int countRecentCasts(Spell spell){
|
public int countRecentCasts(Spell spell){
|
||||||
return (int)this.recentSpells.stream().filter(s -> s == spell).count(); // We know this can't be more than 10
|
return (int)this.recentSpells.stream().filter(s -> s == spell).count(); // We know this can't be more than 5
|
||||||
}
|
}
|
||||||
|
|
||||||
// Imbuements
|
// Imbuements
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package electroblob.wizardry.entity.construct;
|
package electroblob.wizardry.entity.construct;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.registry.Spells;
|
import electroblob.wizardry.registry.Spells;
|
||||||
import electroblob.wizardry.spell.Spell;
|
import electroblob.wizardry.spell.Spell;
|
||||||
import electroblob.wizardry.util.WizardryUtilities;
|
import electroblob.wizardry.util.WizardryUtilities;
|
||||||
@@ -33,7 +34,8 @@ public class EntityCombustionRune extends EntityMagicConstruct {
|
|||||||
|
|
||||||
float strength = Spells.combustion_rune.getProperty(Spell.BLAST_RADIUS).floatValue();
|
float strength = Spells.combustion_rune.getProperty(Spell.BLAST_RADIUS).floatValue();
|
||||||
|
|
||||||
world.newExplosion(this.getCaster(), this.posX, this.posY, this.posZ, strength, true, true);
|
world.newExplosion(this.getCaster(), this.posX, this.posY, this.posZ, strength, true,
|
||||||
|
getCaster() != null && WizardryUtilities.canDamageBlocks(getCaster(), world));
|
||||||
|
|
||||||
// The trap is destroyed once triggered.
|
// The trap is destroyed once triggered.
|
||||||
this.setDead();
|
this.setDead();
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import net.minecraft.world.World;
|
|||||||
|
|
||||||
public class EntityDecoy extends EntitySummonedCreature {
|
public class EntityDecoy extends EntitySummonedCreature {
|
||||||
|
|
||||||
|
// TODO: These guys need sounds!
|
||||||
|
|
||||||
/** Creates a new decoy in the given world. */
|
/** Creates a new decoy in the given world. */
|
||||||
public EntityDecoy(World world){
|
public EntityDecoy(World world){
|
||||||
super(world);
|
super(world);
|
||||||
|
|||||||
@@ -81,7 +81,9 @@ public class ItemLightningHammer extends Item implements IConjuredItem {
|
|||||||
Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(slot);
|
Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(slot);
|
||||||
|
|
||||||
if(slot == EntityEquipmentSlot.MAINHAND){
|
if(slot == EntityEquipmentSlot.MAINHAND){
|
||||||
multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", Spells.lightning_hammer.getProperty(Spell.DIRECT_DAMAGE).floatValue(), WizardryUtilities.Operations.ADD));
|
float attackDamage = Spells.lightning_hammer.arePropertiesInitialised() ?
|
||||||
|
Spells.lightning_hammer.getProperty(Spell.DIRECT_DAMAGE).floatValue() : 10; // Fallback for search tree init, value doesn't really matter
|
||||||
|
multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", attackDamage, WizardryUtilities.Operations.ADD));
|
||||||
multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", ATTACK_SPEED, WizardryUtilities.Operations.ADD));
|
multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", ATTACK_SPEED, WizardryUtilities.Operations.ADD));
|
||||||
multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(MOVEMENT_SPEED_MODIFIER, "Weapon modifier", MOVEMENT_SPEED_REDUCTION, WizardryUtilities.Operations.MULTIPLY_FLAT));
|
multimap.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), new AttributeModifier(MOVEMENT_SPEED_MODIFIER, "Weapon modifier", MOVEMENT_SPEED_REDUCTION, WizardryUtilities.Operations.MULTIPLY_FLAT));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package electroblob.wizardry.item;
|
package electroblob.wizardry.item;
|
||||||
|
|
||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
|
import electroblob.wizardry.data.SpellGlyphData;
|
||||||
import electroblob.wizardry.event.SpellCastEvent;
|
import electroblob.wizardry.event.SpellCastEvent;
|
||||||
import electroblob.wizardry.event.SpellCastEvent.Source;
|
import electroblob.wizardry.event.SpellCastEvent.Source;
|
||||||
import electroblob.wizardry.packet.PacketCastSpell;
|
import electroblob.wizardry.packet.PacketCastSpell;
|
||||||
@@ -22,6 +23,9 @@ import net.minecraftforge.common.MinecraftForge;
|
|||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
import net.minecraftforge.oredict.OreDictionary;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ItemScroll extends Item implements ISpellCastingItem {
|
public class ItemScroll extends Item implements ISpellCastingItem {
|
||||||
|
|
||||||
@@ -81,6 +85,25 @@ public class ItemScroll extends Item implements ISpellCastingItem {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public void addInformation(ItemStack itemstack, World world, List<String> tooltip, net.minecraft.client.util.ITooltipFlag advanced){
|
||||||
|
|
||||||
|
if(world != null){
|
||||||
|
|
||||||
|
Spell spell = Spell.byMetadata(itemstack.getItemDamage());
|
||||||
|
|
||||||
|
boolean discovered = Wizardry.proxy.shouldDisplayDiscovered(spell, itemstack);
|
||||||
|
|
||||||
|
// Advanced tooltips display more information, mainly for searching purposes in creative
|
||||||
|
if(discovered && advanced.isAdvanced()){ // No cheating!
|
||||||
|
tooltip.add(spell.getTier().getDisplayName());
|
||||||
|
tooltip.add(spell.getElement().getDisplayName());
|
||||||
|
tooltip.add(spell.getType().getDisplayName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxItemUseDuration(ItemStack stack){
|
public int getMaxItemUseDuration(ItemStack stack){
|
||||||
return CASTING_TIME;
|
return CASTING_TIME;
|
||||||
|
|||||||
@@ -71,9 +71,10 @@ public class ItemSpectralBow extends ItemBow implements IConjuredItem {
|
|||||||
|
|
||||||
if(!oldStack.isEmpty() || !newStack.isEmpty()){
|
if(!oldStack.isEmpty() || !newStack.isEmpty()){
|
||||||
// We only care about the situation where we specifically want the animation NOT to play.
|
// We only care about the situation where we specifically want the animation NOT to play.
|
||||||
if(oldStack.getItem() == newStack.getItem() && !slotChanged
|
if(oldStack.getItem() == newStack.getItem() && !slotChanged)
|
||||||
// This code should only run on the client side, so using Minecraft is ok.
|
// This code should only run on the client side, so using Minecraft is ok.
|
||||||
&& !net.minecraft.client.Minecraft.getMinecraft().player.isHandActive())
|
// Why the heck was this here?
|
||||||
|
//&& !net.minecraft.client.Minecraft.getMinecraft().player.isHandActive())
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,10 +64,13 @@ public class ItemSpellBook extends Item {
|
|||||||
: "#\u00A79" + SpellGlyphData.getGlyphName(spell, world));
|
: "#\u00A79" + SpellGlyphData.getGlyphName(spell, world));
|
||||||
|
|
||||||
tooltip.add(spell.getTier().getDisplayNameWithFormatting());
|
tooltip.add(spell.getTier().getDisplayNameWithFormatting());
|
||||||
|
|
||||||
|
// Advanced tooltips display more information, mainly for searching purposes in creative
|
||||||
|
if(discovered && advanced.isAdvanced()){ // No cheating!
|
||||||
|
tooltip.add(spell.getElement().getDisplayName());
|
||||||
|
tooltip.add(spell.getType().getDisplayName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* Removed to streamline the tooltip a bit. Information is now within the book. if(spell.isContinuous){
|
|
||||||
* tooltip.add("\u00A79Mana Cost: " + spell.cost + " per second"); }else{ tooltip.add("\u00A79Mana Cost: " +
|
|
||||||
* spell.cost); } */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
|
|||||||
private static final int CONTINUOUS_TRACKING_INTERVAL = 20;
|
private static final int CONTINUOUS_TRACKING_INTERVAL = 20;
|
||||||
/** The increase in progression for casting spells of the matching element. */
|
/** The increase in progression for casting spells of the matching element. */
|
||||||
private static final float ELEMENTAL_PROGRESSION_MODIFIER = 1.2f;
|
private static final float ELEMENTAL_PROGRESSION_MODIFIER = 1.2f;
|
||||||
|
/** The increase in progression for casting an undiscovered spell (can only happen once per spell for each player). */
|
||||||
|
private static final float DISCOVERY_PROGRESSION_MODIFIER = 5f;
|
||||||
/** The fraction of progression lost when all recently-cast spells are the same as the one being cast. */
|
/** The fraction of progression lost when all recently-cast spells are the same as the one being cast. */
|
||||||
private static final float MAX_PROGRESSION_REDUCTION = 0.75f;
|
private static final float MAX_PROGRESSION_REDUCTION = 0.75f;
|
||||||
|
|
||||||
@@ -573,6 +575,11 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
|
|||||||
progressionModifier *= ELEMENTAL_PROGRESSION_MODIFIER;
|
progressionModifier *= ELEMENTAL_PROGRESSION_MODIFIER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(WizardData.get(player) != null && !WizardData.get(player).hasSpellBeenDiscovered(spell)){
|
||||||
|
// Casting an undiscovered spell now grants 5x progression
|
||||||
|
progressionModifier *= DISCOVERY_PROGRESSION_MODIFIER;
|
||||||
|
}
|
||||||
|
|
||||||
modifiers.set(SpellModifiers.PROGRESSION, progressionModifier, false);
|
modifiers.set(SpellModifiers.PROGRESSION, progressionModifier, false);
|
||||||
|
|
||||||
return modifiers;
|
return modifiers;
|
||||||
@@ -635,6 +642,8 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
|
|||||||
// WandHelper.setProgression(centre.getStack(), WandHelper.getProgression(centre.getStack()) - tier.progression);
|
// WandHelper.setProgression(centre.getStack(), WandHelper.getProgression(centre.getStack()) - tier.progression);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
WandHelper.setProgression(centre.getStack(), 0);
|
||||||
|
|
||||||
ItemStack newWand = new ItemStack(WizardryItems.getWand(tier, this.element));
|
ItemStack newWand = new ItemStack(WizardryItems.getWand(tier, this.element));
|
||||||
newWand.setTagCompound(centre.getStack().getTagCompound());
|
newWand.setTagCompound(centre.getStack().getTagCompound());
|
||||||
// This needs to be done after copying the tag compound so the mana capacity for the new wand
|
// This needs to be done after copying the tag compound so the mana capacity for the new wand
|
||||||
|
|||||||
@@ -375,7 +375,7 @@ public abstract class Forfeit {
|
|||||||
if(!w.isRemote){
|
if(!w.isRemote){
|
||||||
for(EnumFacing direction : EnumFacing.HORIZONTALS){
|
for(EnumFacing direction : EnumFacing.HORIZONTALS){
|
||||||
BlockPos pos = p.getPosition().offset(direction);
|
BlockPos pos = p.getPosition().offset(direction);
|
||||||
w.setBlockState(pos, WizardryBlocks.snare.getDefaultState());
|
if(WizardryUtilities.canBlockBeReplaced(w, pos)) w.setBlockState(pos, WizardryBlocks.snare.getDefaultState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
@@ -410,6 +410,7 @@ public abstract class Forfeit {
|
|||||||
if(!w.isRemote){
|
if(!w.isRemote){
|
||||||
List<BlockPos> sphere = WizardryUtilities.getBlockSphere(p.getPosition(), 4);
|
List<BlockPos> sphere = WizardryUtilities.getBlockSphere(p.getPosition(), 4);
|
||||||
sphere.removeIf(pos -> !w.getBlockState(pos).isFullCube());
|
sphere.removeIf(pos -> !w.getBlockState(pos).isFullCube());
|
||||||
|
sphere.removeIf(pos -> WizardryUtilities.isBlockUnbreakable(w, pos));
|
||||||
sphere.forEach(pos -> {
|
sphere.forEach(pos -> {
|
||||||
EntityFallingBlock block = new EntityFallingBlock(w, pos.getX() + 0.5, pos.getY() + 0.5,
|
EntityFallingBlock block = new EntityFallingBlock(w, pos.getX() + 0.5, pos.getY() + 0.5,
|
||||||
pos.getZ() + 0.5, w.getBlockState(pos));
|
pos.getZ() + 0.5, w.getBlockState(pos));
|
||||||
|
|||||||
@@ -0,0 +1,103 @@
|
|||||||
|
package electroblob.wizardry.misc;
|
||||||
|
|
||||||
|
import electroblob.wizardry.Wizardry;
|
||||||
|
import electroblob.wizardry.item.IManaStoringItem;
|
||||||
|
import electroblob.wizardry.item.ItemManaFlask;
|
||||||
|
import net.minecraft.inventory.InventoryCrafting;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.crafting.CraftingManager;
|
||||||
|
import net.minecraft.item.crafting.IRecipe;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.gameevent.PlayerEvent;
|
||||||
|
import net.minecraftforge.oredict.OreDictionary;
|
||||||
|
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements a dynamic crafting recipe for recharging items with mana flasks.
|
||||||
|
*
|
||||||
|
* @author Corail31, Electroblob
|
||||||
|
* @since Wizardry 4.2.2
|
||||||
|
*/
|
||||||
|
@Mod.EventBusSubscriber
|
||||||
|
public class RecipeRechargeWithFlask extends ShapelessOreRecipe {
|
||||||
|
|
||||||
|
private final IManaStoringItem chargeable;
|
||||||
|
private final ItemManaFlask flask;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new charging recipe for the given chargeable item using the given flask item.
|
||||||
|
* @param chargeable The type of item to be charged
|
||||||
|
* @param flask The mana flask used to charge the item
|
||||||
|
*/
|
||||||
|
public RecipeRechargeWithFlask(Item chargeable, ItemManaFlask flask){
|
||||||
|
super(null, new ItemStack(chargeable, 1, OreDictionary.WILDCARD_VALUE),
|
||||||
|
new ItemStack(chargeable, 1, OreDictionary.WILDCARD_VALUE), flask);
|
||||||
|
if(!(chargeable instanceof IManaStoringItem)) throw new IllegalArgumentException("Item to be charged must be an instance of IManaStoringItem");
|
||||||
|
this.chargeable = (IManaStoringItem)chargeable;
|
||||||
|
this.flask = flask;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Commented out for now because JEI spams the log with errors about the recipe having no output
|
||||||
|
// @Nonnull
|
||||||
|
// @Override
|
||||||
|
// public ItemStack getRecipeOutput(){
|
||||||
|
// return ItemStack.EMPTY; // According to the javadoc, dynamic recipes are supposed to return an empty stack here
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getCraftingResult(InventoryCrafting inv){
|
||||||
|
ItemStack result = super.getCraftingResult(inv);
|
||||||
|
rechargeItemAndCopyNBT(result, inv);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean matches(InventoryCrafting inv, World world){
|
||||||
|
ItemStack stack = findItemToCharge(inv);
|
||||||
|
if(!stack.isEmpty() && chargeable.isManaFull(stack)) return false;
|
||||||
|
return super.matches(inv, world);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void rechargeItemAndCopyNBT(ItemStack toCharge, InventoryCrafting inv){
|
||||||
|
if(toCharge.getItem() == chargeable){
|
||||||
|
ItemStack stack = findItemToCharge(inv);
|
||||||
|
if(!stack.isEmpty()) chargeable.setMana(toCharge, chargeable.getMana(stack));
|
||||||
|
chargeable.rechargeMana(toCharge, flask.size.capacity);
|
||||||
|
toCharge.setTagCompound(stack.getTagCompound()); // Copy NBT to new stack
|
||||||
|
}else{
|
||||||
|
Wizardry.logger.warn("Tried to recharge item {} with mana flask, but it did not match the recipe result {}!", toCharge.getItem(), chargeable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ItemStack findItemToCharge(InventoryCrafting inv){
|
||||||
|
for(int i=0; i<inv.getSizeInventory(); i++){
|
||||||
|
ItemStack ingredient = inv.getStackInSlot(i);
|
||||||
|
if(ingredient.getItem() == chargeable) return ingredient;
|
||||||
|
}
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDynamic(){
|
||||||
|
return true; // Stops it appearing in the recipe book
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void onItemCraftedEvent(PlayerEvent.ItemCraftedEvent event){
|
||||||
|
// getCraftingResult seems to only work for the result that's displayed, not once it is actually taken
|
||||||
|
// This means that although I no longer have to replace the result every tick, I still need to do it here
|
||||||
|
// ... I thought the whole point of the new recipe system was so that I DIDN'T have to do this?!
|
||||||
|
if(event.craftMatrix instanceof InventoryCrafting){
|
||||||
|
for(IRecipe recipe : CraftingManager.REGISTRY){
|
||||||
|
if(recipe instanceof RecipeRechargeWithFlask
|
||||||
|
&& recipe.matches((InventoryCrafting)event.craftMatrix, event.player.world)){
|
||||||
|
// Have to modify the itemstack in the actual event, it cannot be replaced
|
||||||
|
((RecipeRechargeWithFlask)recipe).rechargeItemAndCopyNBT(event.crafting, (InventoryCrafting)event.craftMatrix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -52,7 +52,7 @@ public interface ISyncedPotion {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onPotionExpiryEvent(PotionEvent.PotionExpiryEvent event){
|
public static void onPotionExpiryEvent(PotionEvent.PotionExpiryEvent event){
|
||||||
|
|
||||||
if(event.getPotionEffect().getPotion() instanceof ISyncedPotion
|
if(event.getPotionEffect() != null && event.getPotionEffect().getPotion() instanceof ISyncedPotion
|
||||||
&& ((ISyncedPotion)event.getPotionEffect().getPotion()).shouldSync(event.getEntityLiving())){
|
&& ((ISyncedPotion)event.getPotionEffect().getPotion()).shouldSync(event.getEntityLiving())){
|
||||||
|
|
||||||
if(!event.getEntityLiving().world.isRemote){
|
if(!event.getEntityLiving().world.isRemote){
|
||||||
@@ -67,7 +67,7 @@ public interface ISyncedPotion {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onPotionRemoveEvent(PotionEvent.PotionRemoveEvent event){
|
public static void onPotionRemoveEvent(PotionEvent.PotionRemoveEvent event){
|
||||||
|
|
||||||
if(event.getPotionEffect().getPotion() instanceof ISyncedPotion
|
if(event.getPotionEffect() != null && event.getPotionEffect().getPotion() instanceof ISyncedPotion
|
||||||
&& ((ISyncedPotion)event.getPotionEffect().getPotion()).shouldSync(event.getEntityLiving())){
|
&& ((ISyncedPotion)event.getPotionEffect().getPotion()).shouldSync(event.getEntityLiving())){
|
||||||
|
|
||||||
if(!event.getEntityLiving().world.isRemote){
|
if(!event.getEntityLiving().world.isRemote){
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public final class WizardryBlocks {
|
|||||||
registerBlock(registry, "crystal_flower", new BlockCrystalFlower(Material.PLANTS).setHardness(0.0F).setCreativeTab(WizardryTabs.WIZARDRY));
|
registerBlock(registry, "crystal_flower", new BlockCrystalFlower(Material.PLANTS).setHardness(0.0F).setCreativeTab(WizardryTabs.WIZARDRY));
|
||||||
registerBlock(registry, "snare", new BlockSnare(Material.PLANTS).setHardness(0.0F));
|
registerBlock(registry, "snare", new BlockSnare(Material.PLANTS).setHardness(0.0F));
|
||||||
registerBlock(registry, "transportation_stone", new BlockTransportationStone(Material.ROCK).setHardness(0.3F).setLightLevel(0.5f).setLightOpacity(0).setCreativeTab(WizardryTabs.WIZARDRY));
|
registerBlock(registry, "transportation_stone", new BlockTransportationStone(Material.ROCK).setHardness(0.3F).setLightLevel(0.5f).setLightOpacity(0).setCreativeTab(WizardryTabs.WIZARDRY));
|
||||||
registerBlock(registry, "spectral_block", new BlockSpectral(Material.GLASS).setLightLevel(0.7f).setLightOpacity(0).setBlockUnbreakable().setResistance(6000000.0F));
|
registerBlock(registry, "spectral_block", new BlockSpectral(Material.GLASS).setLightOpacity(1).setBlockUnbreakable().setResistance(6000000.0F));
|
||||||
registerBlock(registry, "crystal_block", new BlockCrystal(Material.IRON).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
|
registerBlock(registry, "crystal_block", new BlockCrystal(Material.IRON).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
|
||||||
registerBlock(registry, "meteor", new Block(Material.ROCK).setLightLevel(1));
|
registerBlock(registry, "meteor", new Block(Material.ROCK).setLightLevel(1));
|
||||||
registerBlock(registry, "vanishing_cobweb", new BlockVanishingCobweb(Material.WEB).setLightOpacity(1).setHardness(4.0F));
|
registerBlock(registry, "vanishing_cobweb", new BlockVanishingCobweb(Material.WEB).setLightOpacity(1).setHardness(4.0F));
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import net.minecraft.enchantment.Enchantment;
|
|||||||
import net.minecraftforge.event.RegistryEvent;
|
import net.minecraftforge.event.RegistryEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
@@ -18,6 +19,7 @@ import javax.annotation.Nonnull;
|
|||||||
* @author Electroblob
|
* @author Electroblob
|
||||||
* @since Wizardry 2.1
|
* @since Wizardry 2.1
|
||||||
*/
|
*/
|
||||||
|
@ObjectHolder(Wizardry.MODID)
|
||||||
@Mod.EventBusSubscriber
|
@Mod.EventBusSubscriber
|
||||||
public final class WizardryEnchantments {
|
public final class WizardryEnchantments {
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,7 @@ package electroblob.wizardry.registry;
|
|||||||
import electroblob.wizardry.Wizardry;
|
import electroblob.wizardry.Wizardry;
|
||||||
import electroblob.wizardry.item.IManaStoringItem;
|
import electroblob.wizardry.item.IManaStoringItem;
|
||||||
import electroblob.wizardry.item.ItemManaFlask;
|
import electroblob.wizardry.item.ItemManaFlask;
|
||||||
import net.minecraft.inventory.ContainerPlayer;
|
import electroblob.wizardry.misc.RecipeRechargeWithFlask;
|
||||||
import net.minecraft.inventory.ContainerWorkbench;
|
|
||||||
import net.minecraft.inventory.IInventory;
|
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.crafting.FurnaceRecipes;
|
import net.minecraft.item.crafting.FurnaceRecipes;
|
||||||
@@ -14,9 +12,6 @@ import net.minecraft.util.ResourceLocation;
|
|||||||
import net.minecraftforge.event.RegistryEvent;
|
import net.minecraftforge.event.RegistryEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
|
||||||
import net.minecraftforge.oredict.OreDictionary;
|
|
||||||
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
|
||||||
import net.minecraftforge.registries.IForgeRegistry;
|
import net.minecraftforge.registries.IForgeRegistry;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
@@ -54,84 +49,22 @@ public final class WizardryRecipes {
|
|||||||
|
|
||||||
// Mana flask recipes
|
// Mana flask recipes
|
||||||
|
|
||||||
ItemStack smallFlaskStack = new ItemStack(WizardryItems.small_mana_flask);
|
Item chargeable;
|
||||||
ItemStack mediumFlaskStack = new ItemStack(WizardryItems.medium_mana_flask);
|
|
||||||
ItemStack largeFlaskStack = new ItemStack(WizardryItems.large_mana_flask);
|
|
||||||
|
|
||||||
ItemStack chargeable;
|
|
||||||
|
|
||||||
while(!chargingRecipeQueue.isEmpty()){
|
while(!chargingRecipeQueue.isEmpty()){
|
||||||
// Use remove() and not poll() because the queue shouldn't be empty in here
|
// Use remove() and not poll() because the queue shouldn't be empty in here
|
||||||
chargeable = new ItemStack(chargingRecipeQueue.remove(), 1, OreDictionary.WILDCARD_VALUE);
|
chargeable = chargingRecipeQueue.remove();
|
||||||
|
|
||||||
registry.register(new ShapelessOreRecipe(null, chargeable, chargeable, smallFlaskStack){
|
registry.register(new RecipeRechargeWithFlask(chargeable, (ItemManaFlask)WizardryItems.small_mana_flask)
|
||||||
@Override public boolean isDynamic(){ return true; } // Stops it appearing in the recipe book
|
.setRegistryName(new ResourceLocation(Wizardry.MODID, "recipes/small_flask_" + chargeable.getRegistryName().getPath())));
|
||||||
}.setRegistryName(new ResourceLocation(Wizardry.MODID, "recipes/small_flask_" + chargeable.getItem().getRegistryName().getPath())));
|
|
||||||
|
|
||||||
registry.register(new ShapelessOreRecipe(null, chargeable, chargeable, mediumFlaskStack){
|
registry.register(new RecipeRechargeWithFlask(chargeable, (ItemManaFlask)WizardryItems.medium_mana_flask)
|
||||||
@Override public boolean isDynamic(){ return true; }
|
.setRegistryName(new ResourceLocation(Wizardry.MODID, "recipes/medium_flask_" + chargeable.getRegistryName().getPath())));
|
||||||
}.setRegistryName(new ResourceLocation(Wizardry.MODID, "recipes/medium_flask_" + chargeable.getItem().getRegistryName().getPath())));
|
|
||||||
|
|
||||||
registry.register(new ShapelessOreRecipe(null, chargeable, chargeable, largeFlaskStack){
|
registry.register(new RecipeRechargeWithFlask(chargeable, (ItemManaFlask)WizardryItems.large_mana_flask)
|
||||||
@Override public boolean isDynamic(){ return true; }
|
.setRegistryName(new ResourceLocation(Wizardry.MODID, "recipes/large_flask_" + chargeable.getRegistryName().getPath())));
|
||||||
}.setRegistryName(new ResourceLocation(Wizardry.MODID, "recipes/large_flask_" + chargeable.getItem().getRegistryName().getPath())));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onPlayerTickEvent(TickEvent.PlayerTickEvent event){
|
|
||||||
|
|
||||||
if(event.phase == TickEvent.Phase.START){
|
|
||||||
|
|
||||||
if(event.player.openContainer instanceof ContainerWorkbench){
|
|
||||||
|
|
||||||
IInventory craftMatrix = ((ContainerWorkbench)event.player.openContainer).craftMatrix;
|
|
||||||
ItemStack output = ((ContainerWorkbench)event.player.openContainer).craftResult.getStackInSlot(0);
|
|
||||||
processManaFlaskCrafting(craftMatrix, output);
|
|
||||||
|
|
||||||
}else if(event.player.openContainer instanceof ContainerPlayer){
|
|
||||||
|
|
||||||
IInventory craftMatrix = ((ContainerPlayer)event.player.openContainer).craftMatrix;
|
|
||||||
ItemStack output = ((ContainerPlayer)event.player.openContainer).craftResult.getStackInSlot(0);
|
|
||||||
// Unfortunately I have no choice but to call this method every tick when the player isn't using another
|
|
||||||
// inventory, since the only thing tracking whether the player is looking at their inventory is the GUI
|
|
||||||
// itself, which is client-side only.
|
|
||||||
processManaFlaskCrafting(craftMatrix, output);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void processManaFlaskCrafting(IInventory craftMatrix, ItemStack output){
|
|
||||||
|
|
||||||
// Charges wand using mana flask
|
|
||||||
|
|
||||||
ItemManaFlask flask = null;
|
|
||||||
ItemStack input = ItemStack.EMPTY;
|
|
||||||
|
|
||||||
for(int i = 0; i < craftMatrix.getSizeInventory(); i++){
|
|
||||||
|
|
||||||
ItemStack stack = craftMatrix.getStackInSlot(i);
|
|
||||||
|
|
||||||
if(stack.getItem() instanceof ItemManaFlask){
|
|
||||||
flask = (ItemManaFlask)stack.getItem();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(stack.getItem() instanceof IManaStoringItem){
|
|
||||||
input = stack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(flask == null) return;
|
|
||||||
|
|
||||||
if(output.getItem() instanceof IManaStoringItem && !input.isEmpty()){
|
|
||||||
|
|
||||||
output.setTagCompound((input.getTagCompound()));
|
|
||||||
|
|
||||||
int currentMana = ((IManaStoringItem)input.getItem()).getMana(input);
|
|
||||||
|
|
||||||
((IManaStoringItem)output.getItem()).setMana(output, Math.min(currentMana + flask.size.capacity,
|
|
||||||
((IManaStoringItem)input.getItem()).getManaCapacity(input)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,11 +18,14 @@ public class ArrowRain extends SpellConstructRanged<EntityArrowRain> {
|
|||||||
|
|
||||||
// Moves the entity back towards the caster a bit, so the area of effect is better centred on the position.
|
// Moves the entity back towards the caster a bit, so the area of effect is better centred on the position.
|
||||||
// 3 is the distance to move the entity back towards the caster.
|
// 3 is the distance to move the entity back towards the caster.
|
||||||
double dx = caster.posX - x;
|
double dx = caster == null ? side.getDirectionVec().getX() : caster.posX - x;
|
||||||
double dz = caster.posZ - z;
|
double dz = caster == null ? side.getDirectionVec().getZ() : caster.posZ - z;
|
||||||
double distRatio = 3 / Math.sqrt(dx * dx + dz * dz);
|
double dist = Math.sqrt(dx * dx + dz * dz);
|
||||||
x += dx * distRatio;
|
if(dist != 0){
|
||||||
z += dz * distRatio;
|
double distRatio = 3 / dist;
|
||||||
|
x += dx * distRatio;
|
||||||
|
z += dz * distRatio;
|
||||||
|
}
|
||||||
// Moves the entity up 5 blocks so that it is above mobs' heads.
|
// Moves the entity up 5 blocks so that it is above mobs' heads.
|
||||||
y += 5;
|
y += 5;
|
||||||
|
|
||||||
@@ -32,7 +35,11 @@ public class ArrowRain extends SpellConstructRanged<EntityArrowRain> {
|
|||||||
@Override
|
@Override
|
||||||
protected void addConstructExtras(EntityArrowRain construct, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
protected void addConstructExtras(EntityArrowRain construct, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
||||||
// Makes the arrows shoot in the direction the caster was looking when they cast the spell.
|
// Makes the arrows shoot in the direction the caster was looking when they cast the spell.
|
||||||
construct.rotationYaw = caster.rotationYawHead;
|
if(caster != null){
|
||||||
|
construct.rotationYaw = caster.rotationYawHead;
|
||||||
|
}else{
|
||||||
|
construct.rotationYaw = side.getHorizontalAngle();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class ConjureBlock extends SpellRay {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean onBlockHit(World world, BlockPos pos, EnumFacing side, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){
|
protected boolean onBlockHit(World world, BlockPos pos, EnumFacing side, Vec3d hit, EntityLivingBase caster, Vec3d origin, int ticksInUse, SpellModifiers modifiers){
|
||||||
|
|
||||||
if(world.getBlockState(pos).getBlock() == WizardryBlocks.spectral_block){
|
if(caster.isSneaking() && world.getBlockState(pos).getBlock() == WizardryBlocks.spectral_block){
|
||||||
|
|
||||||
if(!world.isRemote){
|
if(!world.isRemote){
|
||||||
// Dispelling of blocks
|
// Dispelling of blocks
|
||||||
|
|||||||
@@ -24,7 +24,9 @@ public class Decay extends SpellConstructRanged<EntityDecay> {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean spawnConstruct(World world, double x, double y, double z, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
protected boolean spawnConstruct(World world, double x, double y, double z, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
||||||
|
|
||||||
if(world.getBlockState(new BlockPos(x, y, z)).isNormalCube()) return false;
|
BlockPos origin = new BlockPos(x, y, z);
|
||||||
|
|
||||||
|
if(world.getBlockState(origin).isNormalCube()) return false;
|
||||||
|
|
||||||
super.spawnConstruct(world, x, y, z, side, caster, modifiers);
|
super.spawnConstruct(world, x, y, z, side, caster, modifiers);
|
||||||
|
|
||||||
@@ -35,7 +37,7 @@ public class Decay extends SpellConstructRanged<EntityDecay> {
|
|||||||
int verticalRange = (int)(6 * modifiers.get(WizardryItems.blast_upgrade));
|
int verticalRange = (int)(6 * modifiers.get(WizardryItems.blast_upgrade));
|
||||||
|
|
||||||
for(int i=0; i<quantity; i++){
|
for(int i=0; i<quantity; i++){
|
||||||
BlockPos pos = WizardryUtilities.findNearbyFloorSpace(caster, horizontalRange, verticalRange);
|
BlockPos pos = WizardryUtilities.findNearbyFloorSpace(world, origin, horizontalRange, verticalRange);
|
||||||
if(pos == null) break;
|
if(pos == null) break;
|
||||||
super.spawnConstruct(world, pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, side, caster, modifiers);
|
super.spawnConstruct(world, pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, side, caster, modifiers);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,9 @@ public class Disintegration extends SpellRay {
|
|||||||
double z = (world.rand.nextDouble() - 0.5) * target.width;
|
double z = (world.rand.nextDouble() - 0.5) * target.width;
|
||||||
ember.setPosition(target.posX + x, target.posY + y, target.posZ + z);
|
ember.setPosition(target.posX + x, target.posY + y, target.posZ + z);
|
||||||
float speed = 0.2f;
|
float speed = 0.2f;
|
||||||
ember.setVelocity(x * speed, y * 0.5f * speed, z * speed);
|
ember.motionX = x * speed;
|
||||||
|
ember.motionY = y * 0.5f * speed;
|
||||||
|
ember.motionZ = z * speed;
|
||||||
world.spawnEntity(ember);
|
world.spawnEntity(ember);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,20 +40,18 @@
|
|||||||
|
|
||||||
if(world.isRemote){
|
if(world.isRemote){
|
||||||
|
|
||||||
world.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, caster.posX,
|
world.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, x, y + 0.1, z, 0, 0, 0);
|
||||||
caster.getEntityBoundingBox().minY + 0.1, caster.posZ, 0, 0, 0);
|
|
||||||
|
|
||||||
double particleX, particleZ;
|
double particleX, particleZ;
|
||||||
|
|
||||||
for(int i=0; i<40; i++){
|
for(int i=0; i<40; i++){
|
||||||
|
|
||||||
particleX = caster.posX - 1.0d + 2 * world.rand.nextDouble();
|
particleX = x - 1.0d + 2 * world.rand.nextDouble();
|
||||||
particleZ = caster.posZ - 1.0d + 2 * world.rand.nextDouble();
|
particleZ = z - 1.0d + 2 * world.rand.nextDouble();
|
||||||
|
|
||||||
IBlockState block = WizardryUtilities.getBlockEntityIsStandingOn(caster);
|
IBlockState block = WizardryUtilities.getBlockEntityIsStandingOn(caster);
|
||||||
world.spawnParticle(EnumParticleTypes.BLOCK_DUST, particleX, caster.getEntityBoundingBox().minY,
|
world.spawnParticle(EnumParticleTypes.BLOCK_DUST, particleX, y,
|
||||||
particleZ, particleX - caster.posX, 0, particleZ - caster.posZ,
|
particleZ, particleX - x, 0, particleZ - z, Block.getStateId(block));
|
||||||
Block.getStateId(block));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import net.minecraft.entity.EntityLivingBase;
|
|||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class Hailstorm extends SpellConstructRanged<EntityHailstorm> {
|
public class Hailstorm extends SpellConstructRanged<EntityHailstorm> {
|
||||||
|
|
||||||
public Hailstorm(){
|
public Hailstorm(){
|
||||||
@@ -14,15 +16,18 @@ public class Hailstorm extends SpellConstructRanged<EntityHailstorm> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean spawnConstruct(World world, double x, double y, double z, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
protected boolean spawnConstruct(World world, double x, double y, double z, EnumFacing side, @Nullable EntityLivingBase caster, SpellModifiers modifiers){
|
||||||
|
|
||||||
// Moves the entity back towards the caster a bit, so the area of effect is better centred on the position.
|
// Moves the entity back towards the caster a bit, so the area of effect is better centred on the position.
|
||||||
// 3 is the distance to move the entity back towards the caster.
|
// 3 is the distance to move the entity back towards the caster.
|
||||||
double dx = caster.posX - x;
|
double dx = caster == null ? side.getDirectionVec().getX() : caster.posX - x;
|
||||||
double dz = caster.posZ - z;
|
double dz = caster == null ? side.getDirectionVec().getZ() : caster.posZ - z;
|
||||||
double distRatio = 3 / Math.sqrt(dx * dx + dz * dz);
|
double dist = Math.sqrt(dx * dx + dz * dz);
|
||||||
x += dx * distRatio;
|
if(dist != 0){
|
||||||
z += dz * distRatio;
|
double distRatio = 3 / dist;
|
||||||
|
x += dx * distRatio;
|
||||||
|
z += dz * distRatio;
|
||||||
|
}
|
||||||
// Moves the entity up 5 blocks so that it is above mobs' heads.
|
// Moves the entity up 5 blocks so that it is above mobs' heads.
|
||||||
y += 5;
|
y += 5;
|
||||||
|
|
||||||
@@ -32,7 +37,11 @@ public class Hailstorm extends SpellConstructRanged<EntityHailstorm> {
|
|||||||
@Override
|
@Override
|
||||||
protected void addConstructExtras(EntityHailstorm construct, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
protected void addConstructExtras(EntityHailstorm construct, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
||||||
// Makes the arrows shoot in the direction the caster was looking when they cast the spell.
|
// Makes the arrows shoot in the direction the caster was looking when they cast the spell.
|
||||||
if(caster != null) construct.rotationYaw = caster.rotationYawHead;
|
if(caster != null){
|
||||||
|
construct.rotationYaw = caster.rotationYawHead;
|
||||||
|
}else{
|
||||||
|
construct.rotationYaw = side.getHorizontalAngle();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,8 +23,10 @@ public class IceSpikes extends SpellConstructRanged<EntityIceSpike> {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean spawnConstruct(World world, double x, double y, double z, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
protected boolean spawnConstruct(World world, double x, double y, double z, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
||||||
|
|
||||||
|
if(side == null) return false;
|
||||||
|
|
||||||
BlockPos blockHit = new BlockPos(x, y, z);
|
BlockPos blockHit = new BlockPos(x, y, z);
|
||||||
if(side != null && side.getAxisDirection() == EnumFacing.AxisDirection.NEGATIVE) blockHit = blockHit.offset(side);
|
if(side.getAxisDirection() == EnumFacing.AxisDirection.NEGATIVE) blockHit = blockHit.offset(side);
|
||||||
|
|
||||||
if(world.getBlockState(blockHit).isNormalCube()) return false;
|
if(world.getBlockState(blockHit).isNormalCube()) return false;
|
||||||
|
|
||||||
|
|||||||
@@ -247,7 +247,7 @@ public class Possession extends SpellRay {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(possessor.world.isRemote){
|
if(possessor.world.isRemote && possessor == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||||
// Shaders and effects
|
// Shaders and effects
|
||||||
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
|
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
|
||||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); // Looks quite nice...
|
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); // Looks quite nice...
|
||||||
@@ -342,7 +342,7 @@ public class Possession extends SpellRay {
|
|||||||
player.capabilities.isFlying = false;
|
player.capabilities.isFlying = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(player.world.isRemote){
|
if(player.world.isRemote && player == net.minecraft.client.Minecraft.getMinecraft().player){
|
||||||
net.minecraft.client.Minecraft.getMinecraft().entityRenderer.stopUseShader();
|
net.minecraft.client.Minecraft.getMinecraft().entityRenderer.stopUseShader();
|
||||||
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); // Looks quite nice...
|
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); // Looks quite nice...
|
||||||
}
|
}
|
||||||
@@ -624,7 +624,7 @@ public class Possession extends SpellRay {
|
|||||||
EntityLiving possessee = getPossessee((EntityPlayer)event.getTarget());
|
EntityLiving possessee = getPossessee((EntityPlayer)event.getTarget());
|
||||||
EntityLiving attacker = (EntityLiving)event.getEntityLiving();
|
EntityLiving attacker = (EntityLiving)event.getEntityLiving();
|
||||||
if(possessee != null && !attacker.canAttackClass(possessee.getClass())){
|
if(possessee != null && !attacker.canAttackClass(possessee.getClass())){
|
||||||
event.setCanceled(true); // Mobs can't target a player possessing an entity they don't normally attack
|
((EntityLiving)event.getEntityLiving()).setAttackTarget(null); // Mobs can't target a player possessing an entity they don't normally attack
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
// Conversely, general spell classes ONLY EVER define the properties they ACTUALLY USE.
|
// Conversely, general spell classes ONLY EVER define the properties they ACTUALLY USE.
|
||||||
public final Spell addProperties(String... keys){
|
public final Spell addProperties(String... keys){
|
||||||
|
|
||||||
if(properties != null) throw new IllegalStateException("Tried to add spell properties after they were initialised");
|
if(arePropertiesInitialised()) throw new IllegalStateException("Tried to add spell properties after they were initialised");
|
||||||
|
|
||||||
for(String key : keys) if(propertyKeys.contains(key)) Wizardry.logger.warn("Tried to add a duplicate property key '"
|
for(String key : keys) if(propertyKeys.contains(key)) Wizardry.logger.warn("Tried to add a duplicate property key '"
|
||||||
+ key + "' to spell " + this.getRegistryName());
|
+ key + "' to spell " + this.getRegistryName());
|
||||||
@@ -236,11 +236,17 @@ public abstract class Spell extends IForgeRegistryEntry.Impl<Spell> implements C
|
|||||||
return propertyKeys.toArray(new String[0]);
|
return propertyKeys.toArray(new String[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns true if this spell's properties have been initialised, false if not. Check this if you're attempting
|
||||||
|
* to access them from code that could be called before wizardry's {@code init()} method (e.g. item attributes). */
|
||||||
|
public final boolean arePropertiesInitialised(){
|
||||||
|
return properties != null;
|
||||||
|
}
|
||||||
|
|
||||||
/** Sets this spell's properties to the given {@link SpellProperties} object, but only if it doesn't already
|
/** Sets this spell's properties to the given {@link SpellProperties} object, but only if it doesn't already
|
||||||
* have one. This prevents spell properties from being changed after initialisation. */
|
* have one. This prevents spell properties from being changed after initialisation. */
|
||||||
public void setProperties(@Nonnull SpellProperties properties){
|
public void setProperties(@Nonnull SpellProperties properties){
|
||||||
|
|
||||||
if(this.properties == null){
|
if(!arePropertiesInitialised()){
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
}else{
|
}else{
|
||||||
Wizardry.logger.info("A mod attempted to set a spell's properties, but they were already initialised.");
|
Wizardry.logger.info("A mod attempted to set a spell's properties, but they were already initialised.");
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ public class SpellConstruct<T extends EntityMagicConstruct> extends Spell {
|
|||||||
* @param modifiers The modifiers with which the spell was cast.
|
* @param modifiers The modifiers with which the spell was cast.
|
||||||
* @return false to cause the spell to fail, true to continue with casting.
|
* @return false to cause the spell to fail, true to continue with casting.
|
||||||
*/
|
*/
|
||||||
protected boolean spawnConstruct(World world, double x, double y, double z, @Nullable EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
protected boolean spawnConstruct(World world, double x, double y, double z, @Nullable EnumFacing side, @Nullable EntityLivingBase caster, SpellModifiers modifiers){
|
||||||
|
|
||||||
if(!world.isRemote){
|
if(!world.isRemote){
|
||||||
// Creates a new construct using the supplied factory
|
// Creates a new construct using the supplied factory
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ import electroblob.wizardry.util.SpellModifiers;
|
|||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.item.EnumAction;
|
import net.minecraft.item.EnumAction;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class Tornado extends SpellConstruct<EntityTornado> {
|
public class Tornado extends SpellConstruct<EntityTornado> {
|
||||||
|
|
||||||
@@ -19,7 +23,8 @@ public class Tornado extends SpellConstruct<EntityTornado> {
|
|||||||
@Override
|
@Override
|
||||||
protected void addConstructExtras(EntityTornado construct, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
protected void addConstructExtras(EntityTornado construct, EnumFacing side, EntityLivingBase caster, SpellModifiers modifiers){
|
||||||
float speed = getProperty(SPEED).floatValue();
|
float speed = getProperty(SPEED).floatValue();
|
||||||
construct.setHorizontalVelocity(caster.getLookVec().x * speed, caster.getLookVec().z * speed);
|
Vec3d direction = caster == null ? new Vec3d(side.getDirectionVec()) : caster.getLookVec();
|
||||||
|
construct.setHorizontalVelocity(direction.x * speed, direction.z * speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,12 +142,17 @@ public class TileEntityShrineCore extends TileEntity implements ITickable {
|
|||||||
double z = this.pos.getZ() + 0.5;
|
double z = this.pos.getZ() + 0.5;
|
||||||
|
|
||||||
if(!world.isRemote){
|
if(!world.isRemote){
|
||||||
|
|
||||||
WizardryPacketHandler.net.sendToAllAround(new PacketConquerShrine.Message(this.pos),
|
WizardryPacketHandler.net.sendToAllAround(new PacketConquerShrine.Message(this.pos),
|
||||||
new NetworkRegistry.TargetPoint(this.world.provider.getDimension(), x, y, z, 64));
|
new NetworkRegistry.TargetPoint(this.world.provider.getDimension(), x, y, z, 64));
|
||||||
}
|
|
||||||
|
|
||||||
world.setBlockState(pos, WizardryBlocks.runestone_pedestal.getDefaultState()
|
if(world.getBlockState(pos).getBlock() == WizardryBlocks.runestone_pedestal){
|
||||||
.withProperty(BlockPedestal.ELEMENT, world.getBlockState(pos).getValue(BlockPedestal.ELEMENT)));
|
world.setBlockState(pos, WizardryBlocks.runestone_pedestal.getDefaultState()
|
||||||
|
.withProperty(BlockPedestal.ELEMENT, world.getBlockState(pos).getValue(BlockPedestal.ELEMENT)));
|
||||||
|
}else{
|
||||||
|
Wizardry.logger.warn("What's going on?! A shrine core is being conquered but the block at its position is not a runestone pedestal!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
world.markTileEntityForRemoval(this);
|
world.markTileEntityForRemoval(this);
|
||||||
|
|
||||||
|
|||||||
@@ -111,12 +111,12 @@ public final class AllyDesignationSystem {
|
|||||||
*/
|
*/
|
||||||
public static boolean isValidTarget(Entity attacker, Entity target){
|
public static boolean isValidTarget(Entity attacker, Entity target){
|
||||||
|
|
||||||
// Always return true if the attacker is null
|
|
||||||
if(attacker == null) return true;
|
|
||||||
|
|
||||||
// Always return false if the target is null
|
// Always return false if the target is null
|
||||||
if(target == null) return false;
|
if(target == null) return false;
|
||||||
|
|
||||||
|
// Always return true if the attacker is null - this must be after the target null check!
|
||||||
|
if(attacker == null) return true;
|
||||||
|
|
||||||
// Tests whether the target is the attacker
|
// Tests whether the target is the attacker
|
||||||
if(target == attacker) return false;
|
if(target == attacker) return false;
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public final class CustomSoundCategory {
|
|||||||
/**
|
/**
|
||||||
* Adds a new custom sound category, performing the necessary changes to GameSettings and
|
* Adds a new custom sound category, performing the necessary changes to GameSettings and
|
||||||
*
|
*
|
||||||
* @param name A unique name for the sound category
|
* @param name A unique name for the sound category. <b>Must not contain any colons!</b>
|
||||||
* @return The resulting SoundCategory object
|
* @return The resulting SoundCategory object
|
||||||
* @throws IllegalArgumentException if name is not unique
|
* @throws IllegalArgumentException if name is not unique
|
||||||
*/
|
*/
|
||||||
@@ -59,8 +59,8 @@ public final class CustomSoundCategory {
|
|||||||
constantName = name.toUpperCase().replace(" ", "");
|
constantName = name.toUpperCase().replace(" ", "");
|
||||||
referenceName = constantName.toLowerCase();
|
referenceName = constantName.toLowerCase();
|
||||||
// >> Electroblob: Removed array surrounding varargs argument
|
// >> Electroblob: Removed array surrounding varargs argument
|
||||||
soundCategory = EnumHelper.addEnum(SoundCategory.class , constantName, new Class[]{String.class}, referenceName);
|
soundCategory = EnumHelper.addEnum(SoundCategory.class , constantName, new Class<?>[]{String.class}, referenceName);
|
||||||
SOUND_CATEGORIES = ObfuscationReflectionHelper.getPrivateValue(SoundCategory.class, SoundCategory.VOICE ,"SOUND_CATEGORIES", SRG_SOUND_CATEGORIES);
|
SOUND_CATEGORIES = ObfuscationReflectionHelper.getPrivateValue(SoundCategory.class, SoundCategory.VOICE, SRG_SOUND_CATEGORIES);
|
||||||
if (SOUND_CATEGORIES.containsKey(referenceName))
|
if (SOUND_CATEGORIES.containsKey(referenceName))
|
||||||
// >> Electroblob: changed from Error to IllegalArgumentException
|
// >> Electroblob: changed from Error to IllegalArgumentException
|
||||||
throw new IllegalArgumentException("Clash in Sound Category name pools! Cannot insert " + constantName);
|
throw new IllegalArgumentException("Clash in Sound Category name pools! Cannot insert " + constantName);
|
||||||
@@ -79,8 +79,7 @@ public final class CustomSoundCategory {
|
|||||||
// Replace the map in the GameSettings.class
|
// Replace the map in the GameSettings.class
|
||||||
// >> Electroblob: Fully qualified names, because this class gets loaded on both sides
|
// >> Electroblob: Fully qualified names, because this class gets loaded on both sides
|
||||||
ObfuscationReflectionHelper.setPrivateValue(net.minecraft.client.settings.GameSettings.class,
|
ObfuscationReflectionHelper.setPrivateValue(net.minecraft.client.settings.GameSettings.class,
|
||||||
net.minecraft.client.Minecraft.getMinecraft().gameSettings, soundLevels,
|
net.minecraft.client.Minecraft.getMinecraft().gameSettings, soundLevels, SRG_soundLevels);
|
||||||
"soundLevels", SRG_soundLevels);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,7 @@ public class MagicDamage extends EntityDamageSource implements IElementalDamage
|
|||||||
/** The name of the damagesource for indirect magic damage from the wizardry mod. */
|
/** The name of the damagesource for indirect magic damage from the wizardry mod. */
|
||||||
public static final String INDIRECT_MAGIC_DAMAGE = "indirect_wizardry_magic";
|
public static final String INDIRECT_MAGIC_DAMAGE = "indirect_wizardry_magic";
|
||||||
// Technically, I don't need to specify that the classes in this map must extend entity, but it's good practice to.
|
// Technically, I don't need to specify that the classes in this map must extend entity, but it's good practice to.
|
||||||
private static final Map<Class<? extends Entity>, DamageType[]> immunityMapping = new HashMap<>();
|
private static final Map<Class<? extends Entity>, EnumSet<DamageType>> immunityMapping = new HashMap<>();
|
||||||
|
|
||||||
private final DamageType type;
|
private final DamageType type;
|
||||||
private final boolean isRetaliatory;
|
private final boolean isRetaliatory;
|
||||||
@@ -131,24 +131,25 @@ public class MagicDamage extends EntityDamageSource implements IElementalDamage
|
|||||||
public static boolean isEntityImmune(DamageType type, Entity entity){
|
public static boolean isEntityImmune(DamageType type, Entity entity){
|
||||||
|
|
||||||
if(type == DamageType.FIRE && entity.isImmuneToFire()) return true;
|
if(type == DamageType.FIRE && entity.isImmuneToFire()) return true;
|
||||||
|
EnumSet immunities = immunityMapping.get(entity.getClass());
|
||||||
|
|
||||||
DamageType[] immunities = MagicDamage.immunityMapping.get(entity.getClass());
|
return immunities != null && immunities.contains(type);
|
||||||
|
|
||||||
return immunities != null && Arrays.asList(immunities).contains(type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Registers the given type of entity as immune to all of the passed in damage types. */
|
/** Registers the given type of entity as immune to all of the passed in damage types. */
|
||||||
public static void setEntityImmunities(Class<? extends Entity> entityType, DamageType... immunities){
|
public static void setEntityImmunities(Class<? extends Entity> entityType, DamageType... immunities){
|
||||||
immunityMapping.put(entityType, immunities);
|
EnumSet<DamageType> immunitySet = EnumSet.noneOf(DamageType.class);
|
||||||
|
Collections.addAll(immunitySet, immunities);
|
||||||
|
immunityMapping.put(entityType, immunitySet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Adds the passed in damage type to the list of damage types to which the given entity is immune. */
|
/** Adds the passed in damage type to the list of damage types to which the given entity is immune. */
|
||||||
public static void addEntityImmunity(Class<? extends Entity> entityType, DamageType immunity){
|
public static void addEntityImmunity(Class<? extends Entity> entityType, DamageType immunity){
|
||||||
List<DamageType> immunities = immunityMapping.get(entityType) == null ? new ArrayList<>()
|
EnumSet<DamageType> immunitySet = immunityMapping.get(entityType);
|
||||||
: Arrays.asList(immunityMapping.get(entityType));
|
if (immunitySet == null) immunitySet = EnumSet.of(immunity);
|
||||||
immunities.add(immunity);
|
else immunitySet.add(immunity);
|
||||||
// Apparently putting 0 here works just fine.
|
|
||||||
immunityMapping.put(entityType, immunities.toArray(new DamageType[0]));
|
immunityMapping.put(entityType, immunitySet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public final class WandHelper {
|
|||||||
public static final String UPGRADES_KEY = "upgrades";
|
public static final String UPGRADES_KEY = "upgrades";
|
||||||
public static final String PROGRESSION_KEY = "progression";
|
public static final String PROGRESSION_KEY = "progression";
|
||||||
|
|
||||||
private static final HashMap<Item, String> upgradeMap = new HashMap<Item, String>();
|
private static final HashMap<Item, String> upgradeMap = new HashMap<>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
upgradeMap.put(WizardryItems.condenser_upgrade, "condenser");
|
upgradeMap.put(WizardryItems.condenser_upgrade, "condenser");
|
||||||
@@ -251,11 +251,15 @@ public final class WandHelper {
|
|||||||
/** Returns the given wand's cooldown for the currently selected spell, or 0 if the wand has no cooldown data. */
|
/** Returns the given wand's cooldown for the currently selected spell, or 0 if the wand has no cooldown data. */
|
||||||
public static int getCurrentCooldown(ItemStack wand){
|
public static int getCurrentCooldown(ItemStack wand){
|
||||||
|
|
||||||
|
if(wand.getTagCompound() == null) wand.setTagCompound(new NBTTagCompound());
|
||||||
|
|
||||||
int[] cooldowns = getCooldowns(wand);
|
int[] cooldowns = getCooldowns(wand);
|
||||||
|
|
||||||
if(cooldowns.length == 0) return 0;
|
int selectedSpell = wand.getTagCompound().getInteger(SELECTED_SPELL_KEY);
|
||||||
|
|
||||||
|
if(selectedSpell < 0 || cooldowns.length <= selectedSpell) return 0;
|
||||||
// Don't need to check if the tag compound is null since the above check is equivalent.
|
// Don't need to check if the tag compound is null since the above check is equivalent.
|
||||||
return cooldowns[wand.getTagCompound().getInteger(SELECTED_SPELL_KEY)];
|
return cooldowns[selectedSpell];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the given wand's cooldown for the spell after the currently selected spell, or 0 if the wand has no
|
/** Returns the given wand's cooldown for the spell after the currently selected spell, or 0 if the wand has no
|
||||||
@@ -264,9 +268,11 @@ public final class WandHelper {
|
|||||||
|
|
||||||
int[] cooldowns = getCooldowns(wand);
|
int[] cooldowns = getCooldowns(wand);
|
||||||
|
|
||||||
if(cooldowns.length == 0) return 0;
|
int nextSpell = getNextSpellIndex(wand);
|
||||||
|
|
||||||
|
if(nextSpell < 0 || cooldowns.length <= nextSpell) return 0;
|
||||||
// Don't need to check if the tag compound is null since the above check is equivalent.
|
// Don't need to check if the tag compound is null since the above check is equivalent.
|
||||||
return cooldowns[getNextSpellIndex(wand)];
|
return cooldowns[nextSpell];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the given wand's cooldown for the spell before the currently selected spell, or 0 if the wand has no
|
/** Returns the given wand's cooldown for the spell before the currently selected spell, or 0 if the wand has no
|
||||||
@@ -275,9 +281,11 @@ public final class WandHelper {
|
|||||||
|
|
||||||
int[] cooldowns = getCooldowns(wand);
|
int[] cooldowns = getCooldowns(wand);
|
||||||
|
|
||||||
if(cooldowns.length == 0) return 0;
|
int previousSpell = getPreviousSpellIndex(wand);
|
||||||
|
|
||||||
|
if(previousSpell < 0 || cooldowns.length <= previousSpell) return 0;
|
||||||
// Don't need to check if the tag compound is null since the above check is equivalent.
|
// Don't need to check if the tag compound is null since the above check is equivalent.
|
||||||
return cooldowns[getPreviousSpellIndex(wand)];
|
return cooldowns[previousSpell];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets the given wand's cooldown for the currently selected spell. Will also set the maximum cooldown. */
|
/** Sets the given wand's cooldown for the currently selected spell. Will also set the maximum cooldown. */
|
||||||
@@ -287,19 +295,24 @@ public final class WandHelper {
|
|||||||
|
|
||||||
int[] cooldowns = getCooldowns(wand);
|
int[] cooldowns = getCooldowns(wand);
|
||||||
|
|
||||||
|
int selectedSpell = wand.getTagCompound().getInteger(SELECTED_SPELL_KEY);
|
||||||
|
int spellCount = getSpells(wand).length;
|
||||||
|
|
||||||
|
if(spellCount <= selectedSpell) return; // Probably shouldn't happen
|
||||||
|
|
||||||
// The length of the spells array must be greater than 0 since this method can only be called if a spell is
|
// The length of the spells array must be greater than 0 since this method can only be called if a spell is
|
||||||
// cast, which is impossible if there are no spells.
|
// cast, which is impossible if there are no spells.
|
||||||
if(cooldowns.length == 0) cooldowns = new int[getSpells(wand).length];
|
if(cooldowns.length <= selectedSpell) cooldowns = new int[spellCount];
|
||||||
|
|
||||||
cooldowns[wand.getTagCompound().getInteger(SELECTED_SPELL_KEY)] = cooldown;
|
cooldowns[selectedSpell] = cooldown;
|
||||||
|
|
||||||
setCooldowns(wand, cooldowns);
|
setCooldowns(wand, cooldowns);
|
||||||
|
|
||||||
int[] maxCooldowns = getMaxCooldowns(wand);
|
int[] maxCooldowns = getMaxCooldowns(wand);
|
||||||
|
|
||||||
if(maxCooldowns.length == 0) maxCooldowns = new int[getSpells(wand).length];
|
if(maxCooldowns.length <= selectedSpell) maxCooldowns = new int[spellCount];
|
||||||
|
|
||||||
maxCooldowns[wand.getTagCompound().getInteger(SELECTED_SPELL_KEY)] = cooldown;
|
maxCooldowns[selectedSpell] = cooldown;
|
||||||
|
|
||||||
setMaxCooldowns(wand, maxCooldowns);
|
setMaxCooldowns(wand, maxCooldowns);
|
||||||
}
|
}
|
||||||
@@ -333,9 +346,13 @@ public final class WandHelper {
|
|||||||
|
|
||||||
int[] cooldowns = getMaxCooldowns(wand);
|
int[] cooldowns = getMaxCooldowns(wand);
|
||||||
|
|
||||||
if(cooldowns.length == 0) return 0;
|
if(wand.getTagCompound() == null) return 0;
|
||||||
// Don't need to check if the tag compound is null since the above check is equivalent.
|
|
||||||
return cooldowns[wand.getTagCompound().getInteger(SELECTED_SPELL_KEY)];
|
int selectedSpell = wand.getTagCompound().getInteger(SELECTED_SPELL_KEY);
|
||||||
|
|
||||||
|
if(cooldowns.length <= selectedSpell) return 0;
|
||||||
|
|
||||||
|
return cooldowns[selectedSpell];
|
||||||
}
|
}
|
||||||
|
|
||||||
// ================================================== Upgrades ==================================================
|
// ================================================== Upgrades ==================================================
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import electroblob.wizardry.entity.living.ISpellCaster;
|
|||||||
import electroblob.wizardry.item.ISpellCastingItem;
|
import electroblob.wizardry.item.ISpellCastingItem;
|
||||||
import electroblob.wizardry.spell.Spell;
|
import electroblob.wizardry.spell.Spell;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockCactus;
|
||||||
import net.minecraft.block.BlockLog;
|
import net.minecraft.block.BlockLog;
|
||||||
import net.minecraft.block.properties.IProperty;
|
import net.minecraft.block.properties.IProperty;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
@@ -285,13 +286,25 @@ public final class WizardryUtilities {
|
|||||||
/** Surface criterion which defines a surface as the boundary between a block that cannot be moved through, and
|
/** Surface criterion which defines a surface as the boundary between a block that cannot be moved through, and
|
||||||
* a block that can be moved through or a tree block (log or leaves). Used for structure generation. */
|
* a block that can be moved through or a tree block (log or leaves). Used for structure generation. */
|
||||||
SurfaceCriteria COLLIDABLE_IGNORING_TREES = basedOn((world, pos) ->
|
SurfaceCriteria COLLIDABLE_IGNORING_TREES = basedOn((world, pos) ->
|
||||||
world.getBlockState(pos).getMaterial().blocksMovement()
|
world.getBlockState(pos).getMaterial().blocksMovement() && !isTreeBlock(world, pos));
|
||||||
&& !(world.getBlockState(pos).getBlock() instanceof BlockLog)
|
|
||||||
&& !(world.getBlockState(pos).getBlock().isLeaves(world.getBlockState(pos), world, pos)
|
|
||||||
&& !(world.getBlockState(pos).getBlock().isFoliage(world, pos))));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the block at the given position is a tree block (or other 'solid' vegetation, such as cacti).
|
||||||
|
* Used for structure generation.
|
||||||
|
* @param world The world the block is in
|
||||||
|
* @param pos The position of the block to be tested
|
||||||
|
* @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());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds the nearest floor level in the given direction from the given position,
|
* Finds the nearest floor level in the given direction from the given position,
|
||||||
* within the range specified. This is a shorthand for
|
* within the range specified. This is a shorthand for
|
||||||
@@ -857,9 +870,10 @@ public final class WizardryUtilities {
|
|||||||
|
|
||||||
ItemStack stack = caster.getHeldItem(caster.getActiveHand());
|
ItemStack stack = caster.getHeldItem(caster.getActiveHand());
|
||||||
|
|
||||||
if(stack.getItem() instanceof ISpellCastingItem && ((ISpellCastingItem)stack.getItem()).getCurrentSpell(stack) == spell
|
if(stack.getItem() instanceof ISpellCastingItem && ((ISpellCastingItem)stack.getItem()).getCurrentSpell(stack) == spell){
|
||||||
&& ((ISpellCastingItem)stack.getItem()).canCast(stack, spell, (EntityPlayer)caster,
|
// Don't do this, it interferes with stuff! We effectively already tested this with caster.isHandActive() anyway
|
||||||
EnumHand.MAIN_HAND, 0, new SpellModifiers())){
|
// && ((ISpellCastingItem)stack.getItem()).canCast(stack, spell, (EntityPlayer)caster,
|
||||||
|
// EnumHand.MAIN_HAND, 0, new SpellModifiers())){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -327,8 +327,7 @@ public abstract class WorldGenSurfaceStructure implements IWorldGenerator {
|
|||||||
Block below = world.getBlockState(pos.down()).getBlock();
|
Block below = world.getBlockState(pos.down()).getBlock();
|
||||||
|
|
||||||
if(block instanceof BlockLog){
|
if(block instanceof BlockLog){
|
||||||
if(below != Blocks.GRASS && below != Blocks.DIRT && !(below instanceof BlockLog) &&
|
if(below != Blocks.GRASS && below != Blocks.DIRT && !WizardryUtilities.isTreeBlock(world, pos.down())){
|
||||||
!below.isLeaves(world.getBlockState(pos.down()), world, pos.down())){
|
|
||||||
world.setBlockToAir(pos);
|
world.setBlockToAir(pos);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -313,7 +313,7 @@ item.ebwizardry\:amulet_auto_shield.desc=Grants a 25%% chance to trigger the shi
|
|||||||
item.ebwizardry\:charm_haggler.name=Haggler's Sign
|
item.ebwizardry\:charm_haggler.name=Haggler's Sign
|
||||||
item.ebwizardry\:charm_haggler.desc=Wizards are guaranteed to offer a new trade every time you trade with them
|
item.ebwizardry\:charm_haggler.desc=Wizards are guaranteed to offer a new trade every time you trade with them
|
||||||
item.ebwizardry\:charm_experience_tome.name=Tome of the Diligent
|
item.ebwizardry\:charm_experience_tome.name=Tome of the Diligent
|
||||||
item.ebwizardry\:charm_experience_tome.desc=Increases the rate at which wands gain progression by 40%%
|
item.ebwizardry\:charm_experience_tome.desc=Increases the rate at which wands gain progression by 50%%
|
||||||
item.ebwizardry\:charm_auto_smelt.name=Metallurgist's Mark
|
item.ebwizardry\:charm_auto_smelt.name=Metallurgist's Mark
|
||||||
item.ebwizardry\:charm_auto_smelt.desc=Pocket furnace triggers automatically when bound to a wand on your hotbar
|
item.ebwizardry\:charm_auto_smelt.desc=Pocket furnace triggers automatically when bound to a wand on your hotbar
|
||||||
item.ebwizardry\:charm_lava_walking.name=Nether Ice Core
|
item.ebwizardry\:charm_lava_walking.name=Nether Ice Core
|
||||||
@@ -719,14 +719,14 @@ spell.ebwizardry\:arc.desc=Fires a spark of lightning at the target.
|
|||||||
spell.ebwizardry\:arcane_jammer.desc=Prevents the target from using magic for 15 seconds.
|
spell.ebwizardry\:arcane_jammer.desc=Prevents the target from using magic for 15 seconds.
|
||||||
spell.ebwizardry\:arcane_lock.desc=Creates an impenetrable barrier of force around a container, protecting it from being opened or destroyed. The caster and their allies may still open it, however.
|
spell.ebwizardry\:arcane_lock.desc=Creates an impenetrable barrier of force around a container, protecting it from being opened or destroyed. The caster and their allies may still open it, however.
|
||||||
spell.ebwizardry\:arrow_rain.desc="Archers, fire!"
|
spell.ebwizardry\:arrow_rain.desc="Archers, fire!"
|
||||||
spell.ebwizardry\:banish.desc=Teleports the target against its will to a random locations within a certain range.
|
spell.ebwizardry\:banish.desc=Teleports the target against its will to a random location within a certain range.
|
||||||
spell.ebwizardry\:black_hole.desc=Tear reality asunder.
|
spell.ebwizardry\:black_hole.desc=Tear reality asunder.
|
||||||
spell.ebwizardry\:blink.desc=Teleports the caster over a short distance to where they are pointing.
|
spell.ebwizardry\:blink.desc=Teleports the caster over a short distance to where they are pointing.
|
||||||
spell.ebwizardry\:blizzard.desc=Creates a zone of swirling icy wind which slows and continually damages anything trapped inside. The caster is immune to the damage but is still slowed.
|
spell.ebwizardry\:blizzard.desc=Creates a zone of swirling icy wind which slows and continually damages anything trapped inside. The caster is immune to the damage but is still slowed.
|
||||||
spell.ebwizardry\:bubble.desc=Fires a jet of bubbles which causes anything it hits to float upwards helplessly. The target will fall after a certain time or if it is damaged.
|
spell.ebwizardry\:bubble.desc=Fires a jet of bubbles which causes anything it hits to float upwards helplessly. The target will fall after a certain time or if it is damaged.
|
||||||
spell.ebwizardry\:chain_lightning.desc=Fires a spark of lightning at the target, which then chains to additional targets up to twice.
|
spell.ebwizardry\:chain_lightning.desc=Fires a spark of lightning at the target, which then chains to additional targets up to twice.
|
||||||
spell.ebwizardry\:charge.desc=Causes the caster to charge rapidly in the direction they are looking, damaging and knocking back anything in their path.
|
spell.ebwizardry\:charge.desc=Causes the caster to charge rapidly in the direction they are looking, damaging and knocking back anything in their path.
|
||||||
spell.ebwizardry\:clairvoyance.desc=Reveals the path to a remembered locations. With this spell selected, sneak-right-click on a block to set the locations. Cast this spell normally to reveal the path. The path will fade after 90 seconds.
|
spell.ebwizardry\:clairvoyance.desc=Reveals the path to a remembered location. With this spell selected, sneak-right-click on a block to set the location. Cast this spell normally to reveal the path. The path will fade after 90 seconds.
|
||||||
spell.ebwizardry\:cobwebs.desc=Creates cobwebs where you are pointing, which greatly hamper the movement of any creatures caught amongst them. The cobwebs will vanish after 20 seconds or if broken.
|
spell.ebwizardry\:cobwebs.desc=Creates cobwebs where you are pointing, which greatly hamper the movement of any creatures caught amongst them. The cobwebs will vanish after 20 seconds or if broken.
|
||||||
spell.ebwizardry\:combustion_rune.desc=Places a magical landmine on the ground where you are pointing, which explodes when stepped upon.
|
spell.ebwizardry\:combustion_rune.desc=Places a magical landmine on the ground where you are pointing, which explodes when stepped upon.
|
||||||
spell.ebwizardry\:conjure_armour.desc=Creates spectral armour around the caster which offers protection equal to that of iron armour. The armour lasts for 60 seconds. The caster must have an empty armour slot.
|
spell.ebwizardry\:conjure_armour.desc=Creates spectral armour around the caster which offers protection equal to that of iron armour. The armour lasts for 60 seconds. The caster must have an empty armour slot.
|
||||||
@@ -895,9 +895,9 @@ spell.ebwizardry\:transportation.undefined=You must remember the location of a s
|
|||||||
spell.ebwizardry\:transportation.wrongdimension=No remembered stone circle in this dimension...
|
spell.ebwizardry\:transportation.wrongdimension=No remembered stone circle in this dimension...
|
||||||
spell.ebwizardry\:clairvoyance.searching=Searching...
|
spell.ebwizardry\:clairvoyance.searching=Searching...
|
||||||
spell.ebwizardry\:clairvoyance.confirm=The path revealed upon casting %1$s will now lead back to this point
|
spell.ebwizardry\:clairvoyance.confirm=The path revealed upon casting %1$s will now lead back to this point
|
||||||
spell.ebwizardry\:clairvoyance.outofrange=Your remembered locations is too far away or inaccessible...
|
spell.ebwizardry\:clairvoyance.outofrange=Your remembered location is too far away or inaccessible...
|
||||||
spell.ebwizardry\:clairvoyance.undefined=You must remember a locations first!
|
spell.ebwizardry\:clairvoyance.undefined=You must remember a location first!
|
||||||
spell.ebwizardry\:clairvoyance.wrongdimension=Your remembered locations is in another dimension...
|
spell.ebwizardry\:clairvoyance.wrongdimension=Your remembered location is in another dimension...
|
||||||
spell.ebwizardry\:possession.insufficienthealth=You don't have enough health to possess %1$s!
|
spell.ebwizardry\:possession.insufficienthealth=You don't have enough health to possess %1$s!
|
||||||
spell.ebwizardry\:possession.success=Press %s to stop possessing
|
spell.ebwizardry\:possession.success=Press %s to stop possessing
|
||||||
spell.ebwizardry\:divination.nothing=Nothing happened.
|
spell.ebwizardry\:divination.nothing=Nothing happened.
|
||||||
@@ -1003,6 +1003,16 @@ enchantment.ebwizardry\:magic_protection=Magic Protection
|
|||||||
enchantment.ebwizardry\:frost_protection=Frost Protection
|
enchantment.ebwizardry\:frost_protection=Frost Protection
|
||||||
enchantment.ebwizardry\:shock_protection=Shock Protection
|
enchantment.ebwizardry\:shock_protection=Shock Protection
|
||||||
|
|
||||||
|
enchantment.ebwizardry.magic_sword.desc=Part of the Imbue Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
enchantment.ebwizardry.magic_bow.desc=Part of the Imbue Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
enchantment.ebwizardry.flaming_weapon.desc=Part of the Flaming Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
enchantment.ebwizardry.freezing_weapon.desc=Part of the Freezing Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
enchantment.ebwizardry.shocking_weapon.desc=Part of the Shocking Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
|
||||||
|
enchantment.ebwizardry.magic_protection.desc=Reduces damage from all magic.
|
||||||
|
enchantment.ebwizardry.frost_protection.desc=Reduces the effects of frost damage.
|
||||||
|
enchantment.ebwizardry.shock_protection.desc=Reduces the effects of shock damage.
|
||||||
|
|
||||||
key.categories.ebwizardry=Wizardry
|
key.categories.ebwizardry=Wizardry
|
||||||
|
|
||||||
key.ebwizardry.next_spell=Next Spell
|
key.ebwizardry.next_spell=Next Spell
|
||||||
@@ -1011,7 +1021,7 @@ key.ebwizardry.previous_spell=Previous Spell
|
|||||||
death.attack.wizardry_magic=%1$s was killed by %2$s using magic
|
death.attack.wizardry_magic=%1$s was killed by %2$s using magic
|
||||||
death.attack.indirect_wizardry_magic=%1$s was killed by %2$s using magic
|
death.attack.indirect_wizardry_magic=%1$s was killed by %2$s using magic
|
||||||
|
|
||||||
soundCategory.ebwizardry\:spells=Spells
|
soundCategory.ebwizardry_spells=Spells
|
||||||
|
|
||||||
commands.ebwizardry\:cast.usage=/%1$s <spell> [player | x y z direction] [duration] [modifiers]
|
commands.ebwizardry\:cast.usage=/%1$s <spell> [player | x y z direction] [duration] [modifiers]
|
||||||
commands.ebwizardry\:cast.success=Successfully cast %s
|
commands.ebwizardry\:cast.success=Successfully cast %s
|
||||||
@@ -1175,6 +1185,8 @@ config.ebwizardry.shrine_rarity=Shrine Rarity
|
|||||||
config.ebwizardry.shrine_rarity.tooltip=Rarity of shrines. 1 in this many chunks will contain a shrine, meaning higher numbers are rarer.
|
config.ebwizardry.shrine_rarity.tooltip=Rarity of shrines. 1 in this many chunks will contain a shrine, meaning higher numbers are rarer.
|
||||||
config.ebwizardry.shrine_files=Shrine Structure Files
|
config.ebwizardry.shrine_files=Shrine Structure Files
|
||||||
config.ebwizardry.shrine_files.tooltip=List of structure file locations for shrines. One of these files will be randomly selected each time a shrine is generated. File locations are of the format [mod id]\:[filename], which refers to the file assets/[mod id]/structures/[filename].nbt. Duplicate entries are permitted, allowing for simple weighting without duplicating the structure files themselves.
|
config.ebwizardry.shrine_files.tooltip=List of structure file locations for shrines. One of these files will be randomly selected each time a shrine is generated. File locations are of the format [mod id]\:[filename], which refers to the file assets/[mod id]/structures/[filename].nbt. Duplicate entries are permitted, allowing for simple weighting without duplicating the structure files themselves.
|
||||||
|
config.ebwizardry.tree_blocks=Tree Blocks
|
||||||
|
config.ebwizardry.tree_blocks.tooltip=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).
|
||||||
config.ebwizardry.ore_dimensions=Ore Dimensions
|
config.ebwizardry.ore_dimensions=Ore Dimensions
|
||||||
config.ebwizardry.ore_dimensions.tooltip=List of ids of dimensions in which crystal ore will generate. Note that removing the overworld (id 0) from this list will make the mod VERY difficult to play!
|
config.ebwizardry.ore_dimensions.tooltip=List of ids of dimensions in which crystal ore will generate. Note that removing the overworld (id 0) from this list will make the mod VERY difficult to play!
|
||||||
config.ebwizardry.flower_dimensions=Flower Dimensions
|
config.ebwizardry.flower_dimensions=Flower Dimensions
|
||||||
|
|||||||
@@ -313,7 +313,7 @@ item.ebwizardry\:amulet_auto_shield.desc=Grants a 25%% chance to trigger the shi
|
|||||||
item.ebwizardry\:charm_haggler.name=Haggler's Sign
|
item.ebwizardry\:charm_haggler.name=Haggler's Sign
|
||||||
item.ebwizardry\:charm_haggler.desc=Wizards are guaranteed to offer a new trade every time you trade with them
|
item.ebwizardry\:charm_haggler.desc=Wizards are guaranteed to offer a new trade every time you trade with them
|
||||||
item.ebwizardry\:charm_experience_tome.name=Tome of the Diligent
|
item.ebwizardry\:charm_experience_tome.name=Tome of the Diligent
|
||||||
item.ebwizardry\:charm_experience_tome.desc=Increases the rate at which wands gain progression by 40%%
|
item.ebwizardry\:charm_experience_tome.desc=Increases the rate at which wands gain progression by 50%%
|
||||||
item.ebwizardry\:charm_auto_smelt.name=Metallurgist's Mark
|
item.ebwizardry\:charm_auto_smelt.name=Metallurgist's Mark
|
||||||
item.ebwizardry\:charm_auto_smelt.desc=Pocket furnace triggers automatically when bound to a wand on your hotbar
|
item.ebwizardry\:charm_auto_smelt.desc=Pocket furnace triggers automatically when bound to a wand on your hotbar
|
||||||
item.ebwizardry\:charm_lava_walking.name=Nether Ice Core
|
item.ebwizardry\:charm_lava_walking.name=Nether Ice Core
|
||||||
@@ -719,14 +719,14 @@ spell.ebwizardry\:arc.desc=Fires a spark of lightning at the target.
|
|||||||
spell.ebwizardry\:arcane_jammer.desc=Prevents the target from using magic for 15 seconds.
|
spell.ebwizardry\:arcane_jammer.desc=Prevents the target from using magic for 15 seconds.
|
||||||
spell.ebwizardry\:arcane_lock.desc=Creates an impenetrable barrier of force around a container, protecting it from being opened or destroyed. The caster and their allies may still open it, however.
|
spell.ebwizardry\:arcane_lock.desc=Creates an impenetrable barrier of force around a container, protecting it from being opened or destroyed. The caster and their allies may still open it, however.
|
||||||
spell.ebwizardry\:arrow_rain.desc="Archers, fire!"
|
spell.ebwizardry\:arrow_rain.desc="Archers, fire!"
|
||||||
spell.ebwizardry\:banish.desc=Teleports the target against its will to a random locations within a certain range.
|
spell.ebwizardry\:banish.desc=Teleports the target against its will to a random location within a certain range.
|
||||||
spell.ebwizardry\:black_hole.desc=Tear reality asunder.
|
spell.ebwizardry\:black_hole.desc=Tear reality asunder.
|
||||||
spell.ebwizardry\:blink.desc=Teleports the caster over a short distance to where they are pointing.
|
spell.ebwizardry\:blink.desc=Teleports the caster over a short distance to where they are pointing.
|
||||||
spell.ebwizardry\:blizzard.desc=Creates a zone of swirling icy wind which slows and continually damages anything trapped inside. The caster is immune to the damage but is still slowed.
|
spell.ebwizardry\:blizzard.desc=Creates a zone of swirling icy wind which slows and continually damages anything trapped inside. The caster is immune to the damage but is still slowed.
|
||||||
spell.ebwizardry\:bubble.desc=Fires a jet of bubbles which causes anything it hits to float upwards helplessly. The target will fall after a certain time or if it is damaged.
|
spell.ebwizardry\:bubble.desc=Fires a jet of bubbles which causes anything it hits to float upwards helplessly. The target will fall after a certain time or if it is damaged.
|
||||||
spell.ebwizardry\:chain_lightning.desc=Fires a spark of lightning at the target, which then chains to additional targets up to twice.
|
spell.ebwizardry\:chain_lightning.desc=Fires a spark of lightning at the target, which then chains to additional targets up to twice.
|
||||||
spell.ebwizardry\:charge.desc=Causes the caster to charge rapidly in the direction they are looking, damaging and knocking back anything in their path.
|
spell.ebwizardry\:charge.desc=Causes the caster to charge rapidly in the direction they are looking, damaging and knocking back anything in their path.
|
||||||
spell.ebwizardry\:clairvoyance.desc=Reveals the path to a remembered locations. With this spell selected, sneak-right-click on a block to set the locations. Cast this spell normally to reveal the path. The path will fade after 90 seconds.
|
spell.ebwizardry\:clairvoyance.desc=Reveals the path to a remembered location. With this spell selected, sneak-right-click on a block to set the location. Cast this spell normally to reveal the path. The path will fade after 90 seconds.
|
||||||
spell.ebwizardry\:cobwebs.desc=Creates cobwebs where you are pointing, which greatly hamper the movement of any creatures caught amongst them. The cobwebs will vanish after 20 seconds or if broken.
|
spell.ebwizardry\:cobwebs.desc=Creates cobwebs where you are pointing, which greatly hamper the movement of any creatures caught amongst them. The cobwebs will vanish after 20 seconds or if broken.
|
||||||
spell.ebwizardry\:combustion_rune.desc=Places a magical landmine on the ground where you are pointing, which explodes when stepped upon.
|
spell.ebwizardry\:combustion_rune.desc=Places a magical landmine on the ground where you are pointing, which explodes when stepped upon.
|
||||||
spell.ebwizardry\:conjure_armour.desc=Creates spectral armor around the caster which offers protection equal to that of iron armor. The armor lasts for 60 seconds. The caster must have an empty armor slot.
|
spell.ebwizardry\:conjure_armour.desc=Creates spectral armor around the caster which offers protection equal to that of iron armor. The armor lasts for 60 seconds. The caster must have an empty armor slot.
|
||||||
@@ -895,9 +895,9 @@ spell.ebwizardry\:transportation.undefined=You must remember the location of a s
|
|||||||
spell.ebwizardry\:transportation.wrongdimension=No remembered stone circle in this dimension...
|
spell.ebwizardry\:transportation.wrongdimension=No remembered stone circle in this dimension...
|
||||||
spell.ebwizardry\:clairvoyance.searching=Searching...
|
spell.ebwizardry\:clairvoyance.searching=Searching...
|
||||||
spell.ebwizardry\:clairvoyance.confirm=The path revealed upon casting %1$s will now lead back to this point
|
spell.ebwizardry\:clairvoyance.confirm=The path revealed upon casting %1$s will now lead back to this point
|
||||||
spell.ebwizardry\:clairvoyance.outofrange=Your remembered locations is too far away or inaccessible...
|
spell.ebwizardry\:clairvoyance.outofrange=Your remembered location is too far away or inaccessible...
|
||||||
spell.ebwizardry\:clairvoyance.undefined=You must remember a locations first!
|
spell.ebwizardry\:clairvoyance.undefined=You must remember a location first!
|
||||||
spell.ebwizardry\:clairvoyance.wrongdimension=Your remembered locations is in another dimension...
|
spell.ebwizardry\:clairvoyance.wrongdimension=Your remembered location is in another dimension...
|
||||||
spell.ebwizardry\:possession.insufficienthealth=You don't have enough health to possess %1$s!
|
spell.ebwizardry\:possession.insufficienthealth=You don't have enough health to possess %1$s!
|
||||||
spell.ebwizardry\:possession.success=Press %s to stop possessing
|
spell.ebwizardry\:possession.success=Press %s to stop possessing
|
||||||
spell.ebwizardry\:divination.nothing=Nothing happened.
|
spell.ebwizardry\:divination.nothing=Nothing happened.
|
||||||
@@ -1003,6 +1003,16 @@ enchantment.ebwizardry\:magic_protection=Magic Protection
|
|||||||
enchantment.ebwizardry\:frost_protection=Frost Protection
|
enchantment.ebwizardry\:frost_protection=Frost Protection
|
||||||
enchantment.ebwizardry\:shock_protection=Shock Protection
|
enchantment.ebwizardry\:shock_protection=Shock Protection
|
||||||
|
|
||||||
|
enchantment.ebwizardry.magic_sword.desc=Part of the Imbue Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
enchantment.ebwizardry.magic_bow.desc=Part of the Imbue Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
enchantment.ebwizardry.flaming_weapon.desc=Part of the Flaming Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
enchantment.ebwizardry.freezing_weapon.desc=Part of the Freezing Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
enchantment.ebwizardry.shocking_weapon.desc=Part of the Shocking Weapon spell; unobtainable in survival mode (the book won't work).
|
||||||
|
|
||||||
|
enchantment.ebwizardry.magic_protection.desc=Reduces damage from all magic.
|
||||||
|
enchantment.ebwizardry.frost_protection.desc=Reduces the effects of frost damage.
|
||||||
|
enchantment.ebwizardry.shock_protection.desc=Reduces the effects of shock damage.
|
||||||
|
|
||||||
key.categories.ebwizardry=Wizardry
|
key.categories.ebwizardry=Wizardry
|
||||||
|
|
||||||
key.ebwizardry.next_spell=Next Spell
|
key.ebwizardry.next_spell=Next Spell
|
||||||
@@ -1011,7 +1021,7 @@ key.ebwizardry.previous_spell=Previous Spell
|
|||||||
death.attack.wizardry_magic=%1$s was killed by %2$s using magic
|
death.attack.wizardry_magic=%1$s was killed by %2$s using magic
|
||||||
death.attack.indirect_wizardry_magic=%1$s was killed by %2$s using magic
|
death.attack.indirect_wizardry_magic=%1$s was killed by %2$s using magic
|
||||||
|
|
||||||
soundCategory.ebwizardry\:spells=Spells
|
soundCategory.ebwizardry_spells=Spells
|
||||||
|
|
||||||
commands.ebwizardry\:cast.usage=/%1$s <spell> [player | x y z direction] [duration] [modifiers]
|
commands.ebwizardry\:cast.usage=/%1$s <spell> [player | x y z direction] [duration] [modifiers]
|
||||||
commands.ebwizardry\:cast.success=Successfully cast %s
|
commands.ebwizardry\:cast.success=Successfully cast %s
|
||||||
@@ -1175,6 +1185,8 @@ config.ebwizardry.shrine_rarity=Shrine Rarity
|
|||||||
config.ebwizardry.shrine_rarity.tooltip=Rarity of shrines. 1 in this many chunks will contain a shrine, meaning higher numbers are rarer.
|
config.ebwizardry.shrine_rarity.tooltip=Rarity of shrines. 1 in this many chunks will contain a shrine, meaning higher numbers are rarer.
|
||||||
config.ebwizardry.shrine_files=Shrine Structure Files
|
config.ebwizardry.shrine_files=Shrine Structure Files
|
||||||
config.ebwizardry.shrine_files.tooltip=List of structure file locations for shrines. One of these files will be randomly selected each time a shrine is generated. File locations are of the format [mod id]\:[filename], which refers to the file assets/[mod id]/structures/[filename].nbt. Duplicate entries are permitted, allowing for simple weighting without duplicating the structure files themselves.
|
config.ebwizardry.shrine_files.tooltip=List of structure file locations for shrines. One of these files will be randomly selected each time a shrine is generated. File locations are of the format [mod id]\:[filename], which refers to the file assets/[mod id]/structures/[filename].nbt. Duplicate entries are permitted, allowing for simple weighting without duplicating the structure files themselves.
|
||||||
|
config.ebwizardry.tree_blocks=Tree Blocks
|
||||||
|
config.ebwizardry.tree_blocks.tooltip=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).
|
||||||
config.ebwizardry.ore_dimensions=Ore Dimensions
|
config.ebwizardry.ore_dimensions=Ore Dimensions
|
||||||
config.ebwizardry.ore_dimensions.tooltip=List of ids of dimensions in which crystal ore will generate. Note that removing the overworld (id 0) from this list will make the mod VERY difficult to play!
|
config.ebwizardry.ore_dimensions.tooltip=List of ids of dimensions in which crystal ore will generate. Note that removing the overworld (id 0) from this list will make the mod VERY difficult to play!
|
||||||
config.ebwizardry.flower_dimensions=Flower Dimensions
|
config.ebwizardry.flower_dimensions=Flower Dimensions
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,760 @@
|
|||||||
|
tile.ebwizardry:arcane_workbench.name=Mesa de Trabalho Arcana
|
||||||
|
tile.ebwizardry:crystal_ore.name=Minério de Cristal
|
||||||
|
tile.ebwizardry:petrified_stone.name=Pedra Petrificada
|
||||||
|
tile.ebwizardry:ice_statue.name=Estátua de Gelo
|
||||||
|
tile.ebwizardry:crystal_flower.name=Flor de Cristal
|
||||||
|
tile.ebwizardry:snare.name=Armadilha
|
||||||
|
tile.ebwizardry:transportation_stone.name=Pedra de Transportação
|
||||||
|
tile.ebwizardry:spectral_block.name=Bloco Espectral
|
||||||
|
tile.ebwizardry:crystal_block.name=Bloco de Cristal
|
||||||
|
|
||||||
|
item.ebwizardry:magic_crystal.name=Cristal Mágico
|
||||||
|
item.ebwizardry:magic_wand.name=Varinha Mágica
|
||||||
|
item.ebwizardry:apprentice_wand.name=Varinha Aprendiz
|
||||||
|
item.ebwizardry:advanced_wand.name=Varinha Avançada
|
||||||
|
item.ebwizardry:master_wand.name=Varinha Mestra
|
||||||
|
item.ebwizardry:spell_book.name=Livro de Feitiços
|
||||||
|
|
||||||
|
item.ebwizardry:arcane_tome.name=Tomo de Arcana
|
||||||
|
item.ebwizardry:arcane_tome.desc1=Atualiza qualquer %1$s
|
||||||
|
item.ebwizardry:arcane_tome.desc2=varinha em %1$s nível
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_handbook.name=O Manual do Mago
|
||||||
|
item.ebwizardry:wizard_handbook.desc=por %1$s
|
||||||
|
|
||||||
|
item.ebwizardry:wand.buff=+%1$s %2$s potência
|
||||||
|
item.ebwizardry:wand.spell=Feitiço Atual: %1$s
|
||||||
|
item.ebwizardry:wand.mana=Mana: %1$s/%2$s
|
||||||
|
|
||||||
|
item.ebwizardry:wand.addally=%1$s foi adicionado à sua lista de aliados
|
||||||
|
item.ebwizardry:wand.removeally=%1$s foi removido da sua lista de aliados
|
||||||
|
|
||||||
|
item.ebwizardry:basic_fire_wand.name=Varinha de Brasas
|
||||||
|
item.ebwizardry:basic_ice_wand.name=Varinha de Geada
|
||||||
|
item.ebwizardry:basic_lightning_wand.name=Varinha de Faíscas
|
||||||
|
item.ebwizardry:basic_necromancy_wand.name=Varinha de Sombras
|
||||||
|
item.ebwizardry:basic_earth_wand.name=Varinha da Floresta
|
||||||
|
item.ebwizardry:basic_sorcery_wand.name=Varinha de Mistério
|
||||||
|
item.ebwizardry:basic_healing_wand.name=Varinha de Cura
|
||||||
|
|
||||||
|
item.ebwizardry:apprentice_fire_wand.name=Varinha do Piromante Aprendiz
|
||||||
|
item.ebwizardry:apprentice_ice_wand.name=Varinha do Mago de Gelo Aprendiz
|
||||||
|
item.ebwizardry:apprentice_lightning_wand.name=Varinha do Mago da Tempestade Aprendiz
|
||||||
|
item.ebwizardry:apprentice_necromancy_wand.name=Varinha do Necromante Aprendiz
|
||||||
|
item.ebwizardry:apprentice_earth_wand.name=Varinha do Mago de Terra Aprendiz
|
||||||
|
item.ebwizardry:apprentice_sorcery_wand.name=Varinha do Feiticeiro Aprendiz
|
||||||
|
item.ebwizardry:apprentice_healing_wand.name=Varinha do Curandeiro Aprendiz
|
||||||
|
|
||||||
|
item.ebwizardry:advanced_fire_wand.name=Varinha do Piromante
|
||||||
|
item.ebwizardry:advanced_ice_wand.name=Varinha do Mago de Gelo
|
||||||
|
item.ebwizardry:advanced_lightning_wand.name=Varinha do Mago da Tempestade
|
||||||
|
item.ebwizardry:advanced_necromancy_wand.name=Varinha do Necromante
|
||||||
|
item.ebwizardry:advanced_earth_wand.name=Varinha do Mago de Terra
|
||||||
|
item.ebwizardry:advanced_sorcery_wand.name=Varinha do Feiticeiro
|
||||||
|
item.ebwizardry:advanced_healing_wand.name=Varinha do Curandeiro
|
||||||
|
|
||||||
|
item.ebwizardry:master_fire_wand.name=Varinha do Piromante Mestre
|
||||||
|
item.ebwizardry:master_ice_wand.name=Varinha do Mago de Gelo Mestre
|
||||||
|
item.ebwizardry:master_lightning_wand.name=Varinha do Mago da Tempestade Mestre
|
||||||
|
item.ebwizardry:master_necromancy_wand.name=Varinha do Necromante Mestre
|
||||||
|
item.ebwizardry:master_earth_wand.name=Varinha do Mago de Terra Mestre
|
||||||
|
item.ebwizardry:master_sorcery_wand.name=Varinha do Feiticeiro Mestre
|
||||||
|
item.ebwizardry:master_healing_wand.name=Varinha do Curandeiro Mestre
|
||||||
|
|
||||||
|
item.ebwizardry:spectral_sword.name=Espada Espectral
|
||||||
|
item.ebwizardry:spectral_pickaxe.name=Picareta Espectral
|
||||||
|
item.ebwizardry:spectral_bow.name=Arco Espectral
|
||||||
|
|
||||||
|
item.ebwizardry:mana_flask.name=Frasco de Mana
|
||||||
|
item.ebwizardry:storage_upgrade.name=Atualização de Armazenamento para Varinha
|
||||||
|
item.ebwizardry:siphon_upgrade.name=Atualização de Sifão para Varinha
|
||||||
|
item.ebwizardry:condenser_upgrade.name=Atualização de Condensador para Varinha
|
||||||
|
item.ebwizardry:range_upgrade.name=Atualização de Alcance para Varinha
|
||||||
|
item.ebwizardry:duration_upgrade.name=Atualização de Duração para Varinha
|
||||||
|
item.ebwizardry:cooldown_upgrade.name=Atualização de Tempo de Recarga para Varinha
|
||||||
|
item.ebwizardry:blast_upgrade.name=Atualização de Explosão para Varinha
|
||||||
|
item.ebwizardry:attunement_upgrade.name=Atualização de Sintonização para Varinha
|
||||||
|
|
||||||
|
item.ebwizardry:flaming_axe.name=Machado Flamejante
|
||||||
|
item.ebwizardry:frost_axe.name=Machado Gélido
|
||||||
|
|
||||||
|
item.ebwizardry:firebomb.name=Bomba Incendiária
|
||||||
|
item.ebwizardry:poison_bomb.name=Bomba de Veneno
|
||||||
|
item.ebwizardry:smoke_bomb.name=Bomba de Fumaça
|
||||||
|
|
||||||
|
item.ebwizardry:blank_scroll.name=Pergaminho em Branco
|
||||||
|
item.ebwizardry:scroll.name=Pergaminho de %1$s
|
||||||
|
item.ebwizardry:scroll.undiscovered.name=Pergaminho "%1$s"
|
||||||
|
item.ebwizardry:identification_scroll.name=Pergaminho de Identificação
|
||||||
|
item.ebwizardry:identification_scroll.desc1=%1$sIdentifica um desconhecido
|
||||||
|
item.ebwizardry:identification_scroll.desc2=%1$slivro de feitiços ou pergaminhos
|
||||||
|
item.ebwizardry:identification_scroll.nothing_to_identify=Nada para identificar!
|
||||||
|
|
||||||
|
item.ebwizardry:armour_upgrade.name=Selo Arcano de Proteção
|
||||||
|
item.ebwizardry:armour_upgrade.desc1=%1$sAtualiza qualquer armadura de mago
|
||||||
|
item.ebwizardry:armour_upgrade.desc2=%1$spara fazer isto %2$slendário
|
||||||
|
|
||||||
|
item.ebwizardry:magic_silk.name=Seda Mágica
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_armour.legendary=Lendário
|
||||||
|
item.ebwizardry:wizard_armour.buff=-%1$s %2$s custo
|
||||||
|
item.ebwizardry:wizard_armour.mana=Mana: %1$s/%2$s
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_hat.name=Chapéu de Mago
|
||||||
|
item.ebwizardry:wizard_robe.name=Túnica de Mago
|
||||||
|
item.ebwizardry:wizard_leggings.name=Calças de Mago
|
||||||
|
item.ebwizardry:wizard_boots.name=Botas de Mago
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_hat_fire.name=Chapéu de Piromante
|
||||||
|
item.ebwizardry:wizard_robe_fire.name=Túnica de Piromante
|
||||||
|
item.ebwizardry:wizard_leggings_fire.name=Calças de Piromante
|
||||||
|
item.ebwizardry:wizard_boots_fire.name=Botas de Piromante
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_hat_ice.name=Chapéu de Mago de Gelo
|
||||||
|
item.ebwizardry:wizard_robe_ice.name=Túnica de Mago de Gelo
|
||||||
|
item.ebwizardry:wizard_leggings_ice.name=Calças de Mago de Gelo
|
||||||
|
item.ebwizardry:wizard_boots_ice.name=Botas de Mago de Gelo
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_hat_lightning.name=Chapéu de Mago da Tempestade
|
||||||
|
item.ebwizardry:wizard_robe_lightning.name=Túnica de Mago da Tempestade
|
||||||
|
item.ebwizardry:wizard_leggings_lightning.name=Calças de Mago da Tempestade
|
||||||
|
item.ebwizardry:wizard_boots_lightning.name=Botas de Mago da Tempestade
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_hat_necromancy.name=Chapéu de Necromante
|
||||||
|
item.ebwizardry:wizard_robe_necromancy.name=Túnica de Necromante
|
||||||
|
item.ebwizardry:wizard_leggings_necromancy.name=Calças de Necromante
|
||||||
|
item.ebwizardry:wizard_boots_necromancy.name=Botas de Necromante
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_hat_earth.name=Chapéu de Mago de Terra
|
||||||
|
item.ebwizardry:wizard_robe_earth.name=Túnica de Mago de Terra
|
||||||
|
item.ebwizardry:wizard_leggings_earth.name=Calças de Mago de Terra
|
||||||
|
item.ebwizardry:wizard_boots_earth.name=Botas de Mago de Terra
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_hat_sorcery.name=Chapéu de Feiticeiro
|
||||||
|
item.ebwizardry:wizard_robe_sorcery.name=Túnica de Feiticeiro
|
||||||
|
item.ebwizardry:wizard_leggings_sorcery.name=Calças de Feiticeiro
|
||||||
|
item.ebwizardry:wizard_boots_sorcery.name=Botas de Feiticeiro
|
||||||
|
|
||||||
|
item.ebwizardry:wizard_hat_healing.name=Chapéu de Curandeiro
|
||||||
|
item.ebwizardry:wizard_robe_healing.name=Túnica de Curandeiro
|
||||||
|
item.ebwizardry:wizard_leggings_healing.name=Calças de Curandeiro
|
||||||
|
item.ebwizardry:wizard_boots_healing.name=Botas de Curandeiro
|
||||||
|
|
||||||
|
item.ebwizardry:spawn_wizard.name=Gerar Mago
|
||||||
|
item.ebwizardry:spawn_evil_wizard.name=Gerar Mago Malvado
|
||||||
|
|
||||||
|
item.ebwizardry:spectral_helmet.name=Capacete Espectral
|
||||||
|
item.ebwizardry:spectral_chestplate.name=Peitoral Espectral
|
||||||
|
item.ebwizardry:spectral_leggings.name=Calças Espectrais
|
||||||
|
item.ebwizardry:spectral_boots.name=Botas Espectrais
|
||||||
|
|
||||||
|
entity.ebwizardry:summonedcreature.nameplate=%2$s de %1$s
|
||||||
|
entity.ebwizardry:summonedcreature.nameplate_fallback=%1$s de alguém
|
||||||
|
|
||||||
|
entity.ebwizardry:zombie_minion.name=Zumbi
|
||||||
|
entity.ebwizardry:skeleton_minion.name=Esqueleto
|
||||||
|
entity.ebwizardry:spider_minion.name=Aranha
|
||||||
|
entity.ebwizardry:blaze_minion.name=Blaze
|
||||||
|
entity.ebwizardry:wither_skeleton_minion.name=Esqueleto Wither
|
||||||
|
entity.ebwizardry:ice_wraith.name=Espectro de Gelo
|
||||||
|
entity.ebwizardry:lightning_wraith.name=Espectro de Relâmpago
|
||||||
|
entity.ebwizardry:shadow_wraith.name=Espectro de Sombra
|
||||||
|
entity.ebwizardry:spirit_wolf.name=Lobo Espiritual
|
||||||
|
entity.ebwizardry:spirit_horse.name=Cavalo Espiritual
|
||||||
|
entity.ebwizardry:ice_giant.name=Gigante de Gelo
|
||||||
|
entity.ebwizardry:phoenix.name=Fênix
|
||||||
|
entity.ebwizardry:wizard.name=Mago
|
||||||
|
entity.ebwizardry:magic_slime.name=Slime Mágico
|
||||||
|
entity.ebwizardry:silverfish_minion.name=Traça
|
||||||
|
entity.ebwizardry:storm_elemental.name=Elemental da Tempestade
|
||||||
|
entity.ebwizardry:evil_wizard.name=Mago Malvado
|
||||||
|
entity.ebwizardry:decoy.name=Chamariz
|
||||||
|
|
||||||
|
entity.ebwizardry:magic_missile.name=Magia
|
||||||
|
entity.ebwizardry:arc.name=Magia
|
||||||
|
entity.ebwizardry:spark_bomb.name=Magia
|
||||||
|
entity.ebwizardry:ice_shard.name=Magia
|
||||||
|
entity.ebwizardry:firebomb.name=Magia
|
||||||
|
entity.ebwizardry:poison_bomb.name=Magia
|
||||||
|
entity.ebwizardry:force_orb.name=Magia
|
||||||
|
entity.ebwizardry:spark.name=Magia
|
||||||
|
entity.ebwizardry:darkness_orb.name=Magia
|
||||||
|
entity.ebwizardry:fire_sigil.name=Magia
|
||||||
|
entity.ebwizardry:frost_sigil.name=Magia
|
||||||
|
entity.ebwizardry:lightning_sigil.name=Magia
|
||||||
|
entity.ebwizardry:lightning_arrow.name=Magia
|
||||||
|
entity.ebwizardry:firebolt.name=Magia
|
||||||
|
entity.ebwizardry:ice_charge.name=Magia
|
||||||
|
entity.ebwizardry:force_arrow.name=Magia
|
||||||
|
entity.ebwizardry:dart.name=Magia
|
||||||
|
entity.ebwizardry:lightning_disc.name=Magia
|
||||||
|
entity.ebwizardry:thunderbolt.name=Magia
|
||||||
|
entity.ebwizardry:decay.name=Magia
|
||||||
|
entity.ebwizardry:ice_lance.name=Magia
|
||||||
|
entity.ebwizardry:smoke_bomb.name=Magia
|
||||||
|
entity.ebwizardry:ice_spike.name=Magia
|
||||||
|
|
||||||
|
entity.ebwizardry:black_hole.name=Buraco Negro
|
||||||
|
entity.ebwizardry:shield.name=Escudo
|
||||||
|
entity.ebwizardry:meteor.name=Meteoro
|
||||||
|
entity.ebwizardry:blizzard.name=Nevasca
|
||||||
|
entity.ebwizardry:bubble.name=Bolha
|
||||||
|
entity.ebwizardry:tornado.name=Tornado
|
||||||
|
entity.ebwizardry:lightning_hammer.name=Martelo Relâmpago
|
||||||
|
entity.ebwizardry:arrow_rain.name=Chuva de Flechas
|
||||||
|
entity.ebwizardry:healing_aura.name=Aura Curativa
|
||||||
|
entity.ebwizardry:forcefield.name=Campo de Força
|
||||||
|
entity.ebwizardry:ring_of_fire.name=Anel de Fogo
|
||||||
|
entity.ebwizardry:earthquake.name=Terremoto
|
||||||
|
entity.ebwizardry:falling_grass.name=Queda de Grama
|
||||||
|
entity.ebwizardry:hailstorm.name=Chuva de Granizo
|
||||||
|
entity.ebwizardry:lightning_pulse.name=Pulso de Relâmpago
|
||||||
|
|
||||||
|
item_group.ebwizardry=Wizardry
|
||||||
|
item_group.wizardryspells=Feitiços
|
||||||
|
|
||||||
|
advancement.wizardry:root=Wizardry
|
||||||
|
advancement.wizardry:root.desc=A jornada de um mago para dominar o arcano
|
||||||
|
advancement.wizardry:crystal=Um Cristal Curioso...
|
||||||
|
advancement.wizardry:crystal.desc=Minerar um cristal mágico
|
||||||
|
advancement.wizardry:arcane_initiate=Iniciado Arcano
|
||||||
|
advancement.wizardry:arcane_initiate.desc=Craftar uma varinha mágica com uma pepita de ouro, um graveto e um cristal mágico
|
||||||
|
advancement.wizardry:apprentice=Aprendiz de Mago
|
||||||
|
advancement.wizardry:apprentice.desc=Usar um tomo de arcana para atualizar sua varinha
|
||||||
|
advancement.wizardry:master=Mestre Arcano
|
||||||
|
advancement.wizardry:master.desc=Obtenha uma varinha mestre
|
||||||
|
advancement.wizardry:all_spells=Mago de Todos os Comércios
|
||||||
|
advancement.wizardry:all_spells.desc=Lance todos os feitiços do jogo
|
||||||
|
advancement.wizardry:wizard_trade=Negociação Mágica
|
||||||
|
advancement.wizardry:wizard_trade.desc=Comprar um item de um mago
|
||||||
|
advancement.wizardry:buy_master_spell=Conhecimento é Poder
|
||||||
|
advancement.wizardry:buy_master_spell.desc=Compre um feitiço mestre de um mago
|
||||||
|
advancement.wizardry:freeze_blaze=Não Tão Quente Agora
|
||||||
|
advancement.wizardry:freeze_blaze.desc=Congelar um sólido blaze
|
||||||
|
advancement.wizardry:charge_creeper=Isto Vai Explodir
|
||||||
|
advancement.wizardry:charge_creeper.desc='Acidentalmente' energizar um creeper
|
||||||
|
advancement.wizardry:frankenstein=Frankenstein
|
||||||
|
advancement.wizardry:frankenstein.desc=Transformar um porco em um Homem-porco Zumbi usando o feitiço lightning bolt
|
||||||
|
advancement.wizardry:special_upgrade=Consertando Arcano
|
||||||
|
advancement.wizardry:special_upgrade.desc=Aplique uma atualização especial para uma varinha
|
||||||
|
advancement.wizardry:craft_flask=Isto é Magia, Engarrafada!
|
||||||
|
advancement.wizardry:craft_flask.desc=Craftar um frasco de mana
|
||||||
|
advancement.wizardry:elemental=Elemental
|
||||||
|
advancement.wizardry:elemental.desc=Obtenha uma varinha elemental
|
||||||
|
advancement.wizardry:armour_set=Now Você É um Mago Adequado
|
||||||
|
advancement.wizardry:armour_set.desc=Craftar e equipar um conjunto completo de armadura de mago
|
||||||
|
advancement.wizardry:legendary=Lendário
|
||||||
|
advancement.wizardry:legendary.desc=Obtenha uma peça de armadura lendária de mago
|
||||||
|
advancement.wizardry:self_destruct=Que Saiu Pela Culatra
|
||||||
|
advancement.wizardry:self_destruct.desc=Seja morto por sua própria magia
|
||||||
|
advancement.wizardry:pig_tornado=Não de Novo...
|
||||||
|
advancement.wizardry:pig_tornado.desc=Monte num porco em um tornado
|
||||||
|
advancement.wizardry:jam_wizard=Sessão de Jamming
|
||||||
|
advancement.wizardry:jam_wizard.desc=Usar o feitiço bloqueador arcano num mago
|
||||||
|
advancement.wizardry:slime_skeleton=Situação Complicada
|
||||||
|
advancement.wizardry:slime_skeleton.desc=Engolir um esqueleto num slime
|
||||||
|
advancement.wizardry:anger_wizard=Você Vai Se Arrepender
|
||||||
|
advancement.wizardry:anger_wizard.desc=Deixe um mago irritado
|
||||||
|
advancement.wizardry:defeat_evil_wizard=Justiça
|
||||||
|
advancement.wizardry:defeat_evil_wizard.desc=Derrote um mago malvado
|
||||||
|
advancement.wizardry:max_out_wand=Totalmente Equipado
|
||||||
|
advancement.wizardry:max_out_wand.desc=Aplique o número máximo de atualizações a uma varinha mestra
|
||||||
|
advancement.wizardry:element_master=Maestria Elemental
|
||||||
|
advancement.wizardry:element_master.desc=Lançar todos os feitiços de qualquer elemento
|
||||||
|
advancement.wizardry:identify_spell=Apreciação Arcana
|
||||||
|
advancement.wizardry:identify_spell.desc=Use um pergaminho de identificação para identificar um livro de feitiços ou pergaminho
|
||||||
|
|
||||||
|
tile.ebwizardry:transportation_stone.confirm=A partir de agora você retornará a este lugar quando lançar %1$s
|
||||||
|
tile.ebwizardry:transportation_stone.invalid=Você deve fazer um círculo com 8 pedras de transportação primeiro!
|
||||||
|
|
||||||
|
container.ebwizardry:arcane_workbench=Mesa de Trabalho Arcana
|
||||||
|
container.ebwizardry:arcane_workbench.apply=Aplicar
|
||||||
|
container.ebwizardry:arcane_workbench.mana=Mana:
|
||||||
|
container.ebwizardry:arcane_workbench.upgrades=Atualizações Aplicadas:
|
||||||
|
|
||||||
|
tier.basic=Novato
|
||||||
|
tier.apprentice=Aprendiz
|
||||||
|
tier.advanced=Avançado
|
||||||
|
tier.master=Mestre
|
||||||
|
|
||||||
|
element.simple=Nenhum
|
||||||
|
element.fire=Fogo
|
||||||
|
element.ice=Gelo
|
||||||
|
element.lightning=Relâmpago
|
||||||
|
element.necromancy=Necromancia
|
||||||
|
element.earth=Terra
|
||||||
|
element.sorcery=Feitiçaria
|
||||||
|
element.healing=Cura
|
||||||
|
|
||||||
|
element.simple.wizard=Mago
|
||||||
|
element.fire.wizard=Piromante
|
||||||
|
element.ice.wizard=Mago de Gelo
|
||||||
|
element.lightning.wizard=Mago da Tempestade
|
||||||
|
element.necromancy.wizard=Necromante
|
||||||
|
element.earth.wizard=Mago da Terra
|
||||||
|
element.sorcery.wizard=Feiticeiro
|
||||||
|
element.healing.wizard=Curandeiro
|
||||||
|
|
||||||
|
spelltype.attack=Ataque
|
||||||
|
spelltype.defence=Defesa
|
||||||
|
spelltype.utility=Utilidade
|
||||||
|
spelltype.minion=Minion
|
||||||
|
|
||||||
|
spell.disabled=%1$s foi desativado na configuração
|
||||||
|
spell.resist=%1$s resistiu %2$s
|
||||||
|
spell.discover=Descobriu o feitiço %1$s!
|
||||||
|
|
||||||
|
spell.ebwizardry:agility=Agilidade
|
||||||
|
spell.ebwizardry:arc=Arco
|
||||||
|
spell.ebwizardry:arcane_jammer=Bloqueador Arcano
|
||||||
|
spell.ebwizardry:arrow_rain=Chuva de Flechas
|
||||||
|
spell.ebwizardry:banish=Banir
|
||||||
|
spell.ebwizardry:black_hole=Buraco Negro
|
||||||
|
spell.ebwizardry:blink=Lampejar
|
||||||
|
spell.ebwizardry:blizzard=Nevasca
|
||||||
|
spell.ebwizardry:bubble=Bolha
|
||||||
|
spell.ebwizardry:chain_lightning=Cadeia de Raios
|
||||||
|
spell.ebwizardry:clairvoyance=Clarividência
|
||||||
|
spell.ebwizardry:cobwebs=Teias de Aranha
|
||||||
|
spell.ebwizardry:conjure_armour=Conjurar Armadura
|
||||||
|
spell.ebwizardry:conjure_bow=Conjurar Arco
|
||||||
|
spell.ebwizardry:conjure_pickaxe=Conjurar Picareta
|
||||||
|
spell.ebwizardry:conjure_sword=Conjurar Espada
|
||||||
|
spell.ebwizardry:cure_effects=Efeitos de Cura
|
||||||
|
spell.ebwizardry:curse_of_soulbinding=Maldição de Liga-Alma
|
||||||
|
spell.ebwizardry:darkness_orb=Orbe da Escuridão
|
||||||
|
spell.ebwizardry:darkvision=Visão-Sombria
|
||||||
|
spell.ebwizardry:dart=Dardo
|
||||||
|
spell.ebwizardry:decay=Apodrecimento
|
||||||
|
spell.ebwizardry:decoy=Chamariz
|
||||||
|
spell.ebwizardry:detonate=Detonar
|
||||||
|
spell.ebwizardry:diamondflesh=Carne de Diamante
|
||||||
|
spell.ebwizardry:earthquake=Terremoto
|
||||||
|
spell.ebwizardry:entrapment=Aprisionamento
|
||||||
|
spell.ebwizardry:fireball=Bola de Fogo
|
||||||
|
spell.ebwizardry:firebolt=Disparo de Fogo
|
||||||
|
spell.ebwizardry:firebomb=Bomba de Fogo
|
||||||
|
spell.ebwizardry:fire_resistance=Resistência ao Fogo
|
||||||
|
spell.ebwizardry:fire_sigil=Sigilo de Fogo
|
||||||
|
spell.ebwizardry:fireskin=Pele de Fogo
|
||||||
|
spell.ebwizardry:firestorm=Tempestade de Fogo
|
||||||
|
spell.ebwizardry:flame_ray=Raio de Fogo
|
||||||
|
spell.ebwizardry:flaming_axe=Machado Flamejante
|
||||||
|
spell.ebwizardry:flaming_weapon=Arma Flamejante
|
||||||
|
spell.ebwizardry:flight=Vôo
|
||||||
|
spell.ebwizardry:font_of_mana=Fonte de Mana
|
||||||
|
spell.ebwizardry:font_of_vitality=Fonte de Vitalidade
|
||||||
|
spell.ebwizardry:force_arrow=Flecha de Força
|
||||||
|
spell.ebwizardry:forcefield=Campo de Força
|
||||||
|
spell.ebwizardry:force_orb=Orbe de Força
|
||||||
|
spell.ebwizardry:forests_curse=Maldição da Floresta
|
||||||
|
spell.ebwizardry:freeze=Congelar
|
||||||
|
spell.ebwizardry:freezing_weapon=Arma Congelante
|
||||||
|
spell.ebwizardry:frost_axe=Machado da Geada
|
||||||
|
spell.ebwizardry:frost_ray=Raio de Geada
|
||||||
|
spell.ebwizardry:frost_sigil=Sigilo de Geada
|
||||||
|
spell.ebwizardry:glide=Planar
|
||||||
|
spell.ebwizardry:greater_fireball=Bola de Fogo Maior
|
||||||
|
spell.ebwizardry:greater_heal=Cura Maior
|
||||||
|
spell.ebwizardry:group_heal=Cura Grupo
|
||||||
|
spell.ebwizardry:growth_aura=Aura de Crescimento
|
||||||
|
spell.ebwizardry:hailstorm=Chuva de Granizo
|
||||||
|
spell.ebwizardry:heal=Cura
|
||||||
|
spell.ebwizardry:heal_ally=Curar Aliados
|
||||||
|
spell.ebwizardry:healing_aura=Aura Curativa
|
||||||
|
spell.ebwizardry:homing_spark=Faísca Teleguiada
|
||||||
|
spell.ebwizardry:ice_age=Era do Gelo
|
||||||
|
spell.ebwizardry:ice_charge=Carga de Gelo
|
||||||
|
spell.ebwizardry:ice_lance=Lança de Gelo
|
||||||
|
spell.ebwizardry:ice_shard=Fragmento de Gelo
|
||||||
|
spell.ebwizardry:ice_shroud=Mortalha de Gelo
|
||||||
|
spell.ebwizardry:ice_spikes=Espinhos de Gelo
|
||||||
|
spell.ebwizardry:ice_statue=Estátua de Gelo
|
||||||
|
spell.ebwizardry:ignite=Incendiar
|
||||||
|
spell.ebwizardry:imbue_weapon=Imbuir Arma
|
||||||
|
spell.ebwizardry:intimidate=Intimidar
|
||||||
|
spell.ebwizardry:invigorating_presence=Presença Revigorante
|
||||||
|
spell.ebwizardry:invisibility=Invisibilidade
|
||||||
|
spell.ebwizardry:invoke_weather=Invocar Clima
|
||||||
|
spell.ebwizardry:ironflesh=Carne de Ferro
|
||||||
|
spell.ebwizardry:leap=Pulo
|
||||||
|
spell.ebwizardry:levitation=Levitação
|
||||||
|
spell.ebwizardry:life_drain=Drenar Vida
|
||||||
|
spell.ebwizardry:light=Luz
|
||||||
|
spell.ebwizardry:lightning_arrow=Flecha Relâmpago
|
||||||
|
spell.ebwizardry:lightning_bolt=Disparo de Relâmpago
|
||||||
|
spell.ebwizardry:lightning_disc=Disco de Relâmpago
|
||||||
|
spell.ebwizardry:lightning_hammer=Martelo Relâmpago
|
||||||
|
spell.ebwizardry:lightning_pulse=Pulso Relâmpago
|
||||||
|
spell.ebwizardry:lightning_ray=Raio de Relâmpago
|
||||||
|
spell.ebwizardry:lightning_sigil=Sigilo de Relâmpago
|
||||||
|
spell.ebwizardry:lightning_web=Teia Relâmpago
|
||||||
|
spell.ebwizardry:magic_missile=Míssil Mágico
|
||||||
|
spell.ebwizardry:metamorphosis=Metamorfose
|
||||||
|
spell.ebwizardry:meteor=Meteoro
|
||||||
|
spell.ebwizardry:mind_control=Controle Mental
|
||||||
|
spell.ebwizardry:mind_trick=Truque Mental
|
||||||
|
spell.ebwizardry:none=[Espaço Vazio]
|
||||||
|
spell.ebwizardry:oakflesh=Carne de Carvalho
|
||||||
|
spell.ebwizardry:petrify=Petrificar
|
||||||
|
spell.ebwizardry:phase_step=Etapa de Fase
|
||||||
|
spell.ebwizardry:plague_of_darkness=Praga da Escuridão
|
||||||
|
spell.ebwizardry:pocket_furnace=Fornalha de Bolso
|
||||||
|
spell.ebwizardry:pocket_workbench=Mesa de Trabalho de Bolso
|
||||||
|
spell.ebwizardry:poison=Veneno
|
||||||
|
spell.ebwizardry:poison_bomb=Bomba de Veneno
|
||||||
|
spell.ebwizardry:replenish_hunger=Reabastecer a Fome
|
||||||
|
spell.ebwizardry:ring_of_fire=Anel de Fogo
|
||||||
|
spell.ebwizardry:shadow_ward=Guarda das Sombras
|
||||||
|
spell.ebwizardry:shield=Escudo
|
||||||
|
spell.ebwizardry:shockwave=Onda de Choque
|
||||||
|
spell.ebwizardry:silverfish_swarm=Enxame de Traças
|
||||||
|
spell.ebwizardry:sixth_sense=Sexto Sentido
|
||||||
|
spell.ebwizardry:slime=Slime
|
||||||
|
spell.ebwizardry:smoke_bomb=Bomba de Fumaça
|
||||||
|
spell.ebwizardry:snare=Armadilha
|
||||||
|
spell.ebwizardry:snowball=Bola de Neve
|
||||||
|
spell.ebwizardry:spark_bomb=Bomba de Faíscas
|
||||||
|
spell.ebwizardry:spectral_pathway=Caminho Espectral
|
||||||
|
spell.ebwizardry:spider_swarm=Enxame de Aranhas
|
||||||
|
spell.ebwizardry:static_aura=Aura Estática
|
||||||
|
spell.ebwizardry:summon_blaze=Invocar Blaze
|
||||||
|
spell.ebwizardry:summon_ice_giant=Invocar Gigante de Ego
|
||||||
|
spell.ebwizardry:summon_ice_wraith=Invocar Espectro de Gelo
|
||||||
|
spell.ebwizardry:summon_iron_golem=Invocar Golem de Ferro
|
||||||
|
spell.ebwizardry:summon_lightning_wraith=Invocar Espectro de Relâmpago
|
||||||
|
spell.ebwizardry:summon_phoenix=Invocar Fênix
|
||||||
|
spell.ebwizardry:summon_shadow_wraith=Espectro de Sombra
|
||||||
|
spell.ebwizardry:summon_skeleton=Invocar Esqueleto
|
||||||
|
spell.ebwizardry:summon_skeleton_legion=Invocar Legião de Esqueletos
|
||||||
|
spell.ebwizardry:summon_snow_golem=Invocar Golem de Neve
|
||||||
|
spell.ebwizardry:summon_spirit_horse=Invocar Cavalo Espiritual
|
||||||
|
spell.ebwizardry:summon_spirit_wolf=Invocar Lobo Espiritual
|
||||||
|
spell.ebwizardry:summon_storm_elemental=Invocar Elemental da Tempestade
|
||||||
|
spell.ebwizardry:summon_wither_skeleton=Invocar Esqueleto Wither
|
||||||
|
spell.ebwizardry:summon_zombie=Invocar Zumbi
|
||||||
|
spell.ebwizardry:telekinesis=Telequinesia
|
||||||
|
spell.ebwizardry:thunderbolt=Disparo de Trovão
|
||||||
|
spell.ebwizardry:thunderstorm=Tempestade de Trovões
|
||||||
|
spell.ebwizardry:tornado=Tornado
|
||||||
|
spell.ebwizardry:transience=Transitoriedade
|
||||||
|
spell.ebwizardry:transportation=Transportação
|
||||||
|
spell.ebwizardry:vanishing_box=Caixa Desaparecente
|
||||||
|
spell.ebwizardry:wall_of_frost=Parede de Geada
|
||||||
|
spell.ebwizardry:water_breathing=Respiração Aquática
|
||||||
|
spell.ebwizardry:whirlwind=Redemoinho
|
||||||
|
spell.ebwizardry:wither=Wither
|
||||||
|
spell.ebwizardry:wither_skull=Crânio de Wither
|
||||||
|
|
||||||
|
spell.ebwizardry:agility.desc=Garante ao mago velocidade de movimento mais rápido e um salto mais alto por 30 segundos.
|
||||||
|
spell.ebwizardry:arc.desc=Dispara uma faísca de raio no alvo.
|
||||||
|
spell.ebwizardry:arcane_jammer.desc=Não permite que o alvo use magia nos próximos 15 segundos.
|
||||||
|
spell.ebwizardry:arrow_rain.desc=Arqueiros, fogo!
|
||||||
|
spell.ebwizardry:banish.desc=Teletransporta o alvo contra sua vontade a uma localização aleatória a uma certa distância.
|
||||||
|
spell.ebwizardry:black_hole.desc=Rasga a realidade em pedaços.
|
||||||
|
spell.ebwizardry:blink.desc=Teleporta o mago a uma curta distância para onde ele está apontando.
|
||||||
|
spell.ebwizardry:blizzard.desc=Cria uma zona de vento gelado que retarda e continuamente danifica qualquer coisa presa no interior. O conjurador é imune ao dano, mas ainda é retardado.
|
||||||
|
spell.ebwizardry:bubble.desc=Dispara um jato de bolhas que faz com que qualquer coisa que ele acerte flutue para cima, impotente. O alvo cairá após um certo tempo ou se for danificado.
|
||||||
|
spell.ebwizardry:chain_lightning.desc=Dispara uma faísca de relâmpago no alvo, que então encadeia a alvos adicionais em até duas vezes.
|
||||||
|
spell.ebwizardry:clairvoyance.desc=Revela o caminho para um local lembrado. Com esta magia selecionada, clique com o botão direito agachado em um bloco para definir a localização. Lance esta magia normalmente para revelar o caminho. O caminho desaparecerá após 90 segundos.
|
||||||
|
spell.ebwizardry:cobwebs.desc=Cria teias de aranha onde você está apontando, o que dificulta muito o movimento de quaisquer criaturas pegas entre elas. As teias de aranha desaparecerão após 20 segundos ou se quebradas.
|
||||||
|
spell.ebwizardry:conjure_armour.desc=Cria Armadura Espectral ao redor do mago a qual oferece proteção similar a armadura de ferro. A armadura dura 60 segundos. O mago deve ter o espaço de armadura vazio.
|
||||||
|
spell.ebwizardry:conjure_bow.desc=Cria um arco espectral com setas ilimitadas que dura 30 segundos.
|
||||||
|
spell.ebwizardry:conjure_pickaxe.desc=Cria um arco espectral com setas ilimitadas que dura 30 segundos.
|
||||||
|
spell.ebwizardry:conjure_sword.desc=Cria uma espada espectral de força igual a uma espada de ferro que dura 30 segundos.
|
||||||
|
spell.ebwizardry:cure_effects.desc=Remove todos os efeitos de poção atualmente afetando o mago, bons ou ruins.
|
||||||
|
spell.ebwizardry:curse_of_soulbinding.desc=Faz com que a alma do alvo esteja inextricavelmente ligada a do conjurador, significando que todo dano causado ao conjurador também é causado à vítima. Dura até que a vítima ou o conjurador morra.
|
||||||
|
spell.ebwizardry:darkness_orb.desc=Dispara um raio lento de energia escura na direção que você está apontando, que decompõe o que quer que acerte.
|
||||||
|
spell.ebwizardry:darkvision.desc=Garante ao mago visão noturna por 45 segundos.
|
||||||
|
spell.ebwizardry:dart.desc=Dispara um dardo na direção em que você está apontando, o que danifica e enfraquece seu alvo.
|
||||||
|
spell.ebwizardry:decay.desc=Cria um caminho de apodrecimento na chão que infecta qualquer criatura que toque isto, causando dano prolongado ao longo do tempo e espalhando mais apodrecimento por onde anda.
|
||||||
|
spell.ebwizardry:decoy.desc=Cria um clone ilusório do conjurador que engana os monstros para atacá-lo. O chamariz desaparecerá após 30 segundos.
|
||||||
|
spell.ebwizardry:detonate.desc=Causa uma explosão onde você está apontando, danificando todas as criaturas próximas - incluindo o conjurador, se elas estiverem muito próximas.
|
||||||
|
spell.ebwizardry:diamondflesh.desc=Suas flechas não são páreo para mim!
|
||||||
|
spell.ebwizardry:earthquake.desc=Um verdadeiro mestre de magia de terra pode mover montanhas.
|
||||||
|
spell.ebwizardry:entrapment.desc=Aprisiona o alvo em uma esfera de escuridão que puxa-o indefeso para cima e causa dano continuamente nele.
|
||||||
|
spell.ebwizardry:fireball.desc=Lança uma bola de fogo na direção que você está apontando.
|
||||||
|
spell.ebwizardry:firebolt.desc=Atira um jato de fogo a uma curta distância em frente a você.
|
||||||
|
spell.ebwizardry:firebomb.desc=Lança uma bomba de fogo na direção que você está apontando que explode no impacto, colocando fogo nos alvos.
|
||||||
|
spell.ebwizardry:fire_resistance.desc=Garante ao conjurador resistência a fogo por 30 segundos.
|
||||||
|
spell.ebwizardry:fire_sigil.desc=Coloca uma armadilha mágica de fogo no chão que danifica e coloca fogo na criatura que aciona-la.
|
||||||
|
spell.ebwizardry:fireskin.desc=Envolve o conjurador em chamas por 30 segundos, fazendo qualquer coisa que o ataque pegar fogo.
|
||||||
|
spell.ebwizardry:firestorm.desc=Eu sou um dragão.
|
||||||
|
spell.ebwizardry:flame_ray.desc=Cria um fluxo de chamas na direção que você está apontando que coloca fogo nos alvos e continuamente danifica-os.
|
||||||
|
spell.ebwizardry:flaming_axe.desc=Cria um machado flamejante que coloca fogo nos inimigos que são acertados. Dura por 30 segundos.
|
||||||
|
spell.ebwizardry:flaming_weapon.desc=Temporariamente imbue a primeira arma na barra de inventário do conjurador com o poder da chama, fazendo com que ele ateie fogo a suas vitimas. A magia desaparece após 45 segundos.
|
||||||
|
spell.ebwizardry:flight.desc=Suba como uma águia.
|
||||||
|
spell.ebwizardry:font_of_mana.desc="Fomos preenchidos com uma intensa energia mágica que parecia emanar do centro do..." - Extraído do diário de um mago esquecido; o resto da página foi queimada.
|
||||||
|
spell.ebwizardry:font_of_vitality.desc=Me sinto incrível.
|
||||||
|
spell.ebwizardry:force_arrow.desc=Atira uma flecha de força na direção que você está apontando.
|
||||||
|
spell.ebwizardry:forcefield.desc=Cria um campo de força ao redor do conjurador que repele criaturas e desvia projéteis.
|
||||||
|
spell.ebwizardry:force_orb.desc=Lança uma esfera de força que danifica e repele quaisquer criaturas no impacto.
|
||||||
|
spell.ebwizardry:forests_curse.desc=Como ousa entrar na minha floresta!
|
||||||
|
spell.ebwizardry:freeze.desc=Congela o alvo por 10 segundos. Também congelará a água e criar neve no chão.
|
||||||
|
spell.ebwizardry:freezing_weapon.desc=Temporariamente imbue a primeira arma na barra de inventário do conjurador com o poder da geada, causando com isso o congelar de suas vítimas. A magia desaparece após 45 segundos.
|
||||||
|
spell.ebwizardry:frost_axe.desc=Cria um machado congelante que congela os inimigos acertados por ele. Dura por 30 segundos.
|
||||||
|
spell.ebwizardry:frost_ray.desc=Cria um fluxo de geada na direção que você está apontando que retarda e continuamente danifica os alvos.
|
||||||
|
spell.ebwizardry:frost_sigil.desc=Coloca uma armadilha mágica de gelo no chão que causa dano e congela a criatura que aciona-la.
|
||||||
|
spell.ebwizardry:glide.desc=Permite ao conjurador a planar para baixo enquanto no ar e segurando o botão de usar item.
|
||||||
|
spell.ebwizardry:greater_fireball.desc=Lança uma grande bola de fogo na direção que você está apontando que explode no impacto.
|
||||||
|
spell.ebwizardry:greater_heal.desc=Cura o conjurador em 4 corações.
|
||||||
|
spell.ebwizardry:group_heal.desc=Cura o conjurador e todos os aliado próximos e criaturas invocadas em 3 corações.
|
||||||
|
spell.ebwizardry:growth_aura.desc=Cresce todos as plantações próximas ao conjurador. Também cresce grama alta e flores na grama.
|
||||||
|
spell.ebwizardry:hailstorm.desc=Foi durante o grande inverno da terceira era que os magos do gelo descobriram seu verdadeiro poder.
|
||||||
|
spell.ebwizardry:heal.desc=Cura o conjurador em 2 corações.
|
||||||
|
spell.ebwizardry:heal_ally.desc=Cura o alvo em 2 corações e meio.
|
||||||
|
spell.ebwizardry:healing_aura.desc=Cria uma zona de energia curativa que regenera a vida de qualquer aliado dentro dela. Qualquer morto-vivo dentro da aura curativa vai lentamente tomar dano.
|
||||||
|
spell.ebwizardry:homing_spark.desc=Cria uma faísca flutuante que se move em direção aos inimigos.
|
||||||
|
spell.ebwizardry:ice_age.desc=Você ficará congelado por uma eternidade!
|
||||||
|
spell.ebwizardry:ice_charge.desc=Lança uma carga de gelo que explode no impacto, congelando quaisquer criaturas próximas e liberando fragmentos em todas as direções.
|
||||||
|
spell.ebwizardry:ice_lance.desc=Dispara uma grande lança de gelo na direção em que você está apontando, que sobrepenetra os alvos, danificando-os e congelando-os no processo.
|
||||||
|
spell.ebwizardry:ice_shard.desc=Dispara um fragmento de gelo na direção em que você está apontando, que danifica e retarda os alvos quando atingidos.
|
||||||
|
spell.ebwizardry:ice_shroud.desc=Cria uma mortalha de gelo ao redor do conjurador por 30 segundos, fazendo qualquer coisa que o ataque ser congelado.
|
||||||
|
spell.ebwizardry:ice_spikes.desc=Faz pontas de gelo afiadas que sobem a partir do chão para onde você está apontando, espetando quaisquer criaturas pegas entre elas.
|
||||||
|
spell.ebwizardry:ice_statue.desc=Congela o alvo num sólido por 20 segundo ou até que seja quebrado. O alvo não pode se mover ou fazer qualquer coisa enquanto congelado, mas também é invulnerável a todos os danos.
|
||||||
|
spell.ebwizardry:ignite.desc=Coloca fogo no alvo por 10 segundos. Também funciona como um sílex e aço.
|
||||||
|
spell.ebwizardry:imbue_weapon.desc=Temporiamente imbui a primeira arma na barra do inventário do conjurador com magia, tornando-a mais efetiva. A mágica desaparece após 45 segundos.
|
||||||
|
spell.ebwizardry:intimidate.desc=Emite um grunhido intimidante que faz com que as criaturas próximas fujam de medo. Criaturas atingidas pelo medo se recuperam depois de 30 segundos.
|
||||||
|
spell.ebwizardry:invigorating_presence.desc=Garante ao conjurador e todos os aliados próximos aumento de força por 45 segundos.
|
||||||
|
spell.ebwizardry:invisibility.desc=Faz o conjurador invisível por 30 segundos.
|
||||||
|
spell.ebwizardry:invoke_weather.desc=Muda o clima no mundo.
|
||||||
|
spell.ebwizardry:ironflesh.desc=Melhora significativamente a resistência a dano do conjurador por 30 segundos.
|
||||||
|
spell.ebwizardry:leap.desc=Faz com que o conjurador pule para cima vários blocos e avance ligeiramente.
|
||||||
|
spell.ebwizardry:levitation.desc=Eleva o conjurador para cima enquanto o botão de usar item é pressionado. Também irá negar o dano de queda se usado antes de atingir o solo.
|
||||||
|
spell.ebwizardry:life_drain.desc=Cria um fluxo de energia decompositora na direção que você está apontando que drena a vida do alvo e o utiliza para regenerar gradualmente sua vida.
|
||||||
|
spell.ebwizardry:light.desc=Cria um ponto de luz mágico que ilumina a área circundante. Dura por 30 segundos.
|
||||||
|
spell.ebwizardry:lightning_arrow.desc=Atira uma flecha de relâmpago na direção em que você está apontando.
|
||||||
|
spell.ebwizardry:lightning_bolt.desc=Faz um relâmpago para atingir onde você está apontando.
|
||||||
|
spell.ebwizardry:lightning_disc.desc=Envia um disco de relâmpago voando na direção que você está apontando, que busca alvos.
|
||||||
|
spell.ebwizardry:lightning_hammer.desc=Eu te farei pela ira dos céus!
|
||||||
|
spell.ebwizardry:lightning_pulse.desc=Carrega o chão ao redor do conjurador com relâmpagos, danificando e repelindo criaturas próximas.
|
||||||
|
spell.ebwizardry:lightning_ray.desc=Cria um fluxo de relâmpago na direção que você está apontando que continuamente danifica os alvos.
|
||||||
|
spell.ebwizardry:lightning_sigil.desc=Coloca uma armadilha mágica de relâmpago no chão que causa dano na criatura que aciona-la e encadeia relâmpagos nas outras criaturas próximas.
|
||||||
|
spell.ebwizardry:lightning_web.desc=Foco. Canalize a tempestade em sua mente através de sua varinha e libere sua fúria.
|
||||||
|
spell.ebwizardry:magic_missile.desc=Dispara um raio de energia mágica na direção que você está apontando.
|
||||||
|
spell.ebwizardry:metamorphosis.desc=Altera o alvo em outra forma. Só funciona em algumas criaturas.
|
||||||
|
spell.ebwizardry:meteor.desc=Alguns magos só querem ver o mundo queimando...
|
||||||
|
spell.ebwizardry:mind_control.desc=Tome o controle da mente do alvo por 30 segundos, fazendo com que ele mude de lado e lute pelo conjurador. Não vai funcionar em criaturas que tem muita força de vontade.
|
||||||
|
spell.ebwizardry:mind_trick.desc=Confunde e desorienta o alvo por 15 segundos, tornando-o incapaz de atacar efetivamente. O efeito será dissipado se o alvo receber dano.
|
||||||
|
spell.ebwizardry:none.desc=Para obter um livro de feitiços com o comando /give, usar metadados: /give [jogador] ebwizardry:spell_book 1 [feitiço id] (se você encontrou este livro em um baú, algum outro mod estragou tudo).
|
||||||
|
spell.ebwizardry:oakflesh.desc=Melhora a resistência a dano do conjurador por 30 segundos.
|
||||||
|
spell.ebwizardry:petrify.desc=Transforma o alvo em pedra até que seja quebrado, com a chance de ele se soltar quando estiver escuro. O alvo não pode se mover ou fazer nada enquanto petrificado, mas também é imune a todos os danos.
|
||||||
|
spell.ebwizardry:phase_step.desc=Teleporta o conjurador através de uma parede de um bloco de espessura na frente dele. Atualizações de alcance irão aumentar a espessura pela qual você pode atravessar por teletransporte.
|
||||||
|
spell.ebwizardry:plague_of_darkness.desc=A escuridão vai consumir todos eles...
|
||||||
|
spell.ebwizardry:pocket_furnace.desc=Funda até 5 itens que podem ser fundidos no inventário do conjurador. Itens na barra do inventário serão os primeiros a ser fundidos.
|
||||||
|
spell.ebwizardry:pocket_workbench.desc=Permite ao conjurador craftar como se estivessem em uma mesa de trabalho.
|
||||||
|
spell.ebwizardry:poison.desc=Dispare veneno na direção que você está apontando.
|
||||||
|
spell.ebwizardry:poison_bomb.desc=Lance uma bomba de veneno na direção que você está apontando que explode no impacto, envenenando criaturas próximas.
|
||||||
|
spell.ebwizardry:replenish_hunger.desc=Restabelece o nível de alimento do conjurador em 6 pontos de fome.
|
||||||
|
spell.ebwizardry:ring_of_fire.desc=Crie um anel de fogo ao redor do conjurador, danificando todos os inimigos próximos e colocando fogo neles.
|
||||||
|
spell.ebwizardry:shadow_ward.desc=Crie uma parede de escuridão na frente do conjurador que causa metade de todos os danos recebidos seren infligidos ao atacante.
|
||||||
|
spell.ebwizardry:shield.desc=Cria uma barreira protetora de força que bloqueia projéteis e magia. Também concede ao conjurador uma fraca resistência a efeitos.
|
||||||
|
spell.ebwizardry:shockwave.desc=Boom.
|
||||||
|
spell.ebwizardry:silverfish_swarm.desc=Ahhhh! Eles estão MULTIPLICANDO!
|
||||||
|
spell.ebwizardry:sixth_sense.desc=Permite ao conjurador sentir os locais de criaturas próximas, mesmo através de paredes, por 20 segundos.
|
||||||
|
spell.ebwizardry:slime.desc=Engolfa o alvo em um slime que retarda e danifica continuamente ele. O slime explode após 10 segundos.
|
||||||
|
spell.ebwizardry:smoke_bomb.desc=Lança uma bomba de fumaça na direção que você está apontando que explode no impacto, liberando fumaça e cegando criaturas próximas por pouco tempo.
|
||||||
|
spell.ebwizardry:snare.desc=Pôe uma armadilha no chão que danifica retarda brevemente a criatura que acionou-a.
|
||||||
|
spell.ebwizardry:snowball.desc=Lança uma bola de neve na direção que você está apontando.
|
||||||
|
spell.ebwizardry:spark_bomb.desc=Lança uma carga de choque na direção que você está apontando que libera faíscas no impacto em inimigos próximos.
|
||||||
|
spell.ebwizardry:spectral_pathway.desc=Cria uma ponte mágica indestrutível à sua frente que se estende por 15 blocos. A ponte desaparece após 60 segundos.
|
||||||
|
spell.ebwizardry:spider_swarm.desc=Invoca um enxame de aranhas venenosas para lutar por você. As aranhas irão desaparecer após 30 segundos ou se elas forem mortas.
|
||||||
|
spell.ebwizardry:static_aura.desc=Envolve o conjurador com relâmpago por 30 segundos, disparando uma faísca de relâmpago em qualquer coisa que o atinge.
|
||||||
|
spell.ebwizardry:summon_blaze.desc=Invoca um blaze para lutar por você. O blaze irá desaparecer após 30 segundos ou se for morto.
|
||||||
|
spell.ebwizardry:summon_ice_giant.desc=Esmague eles!
|
||||||
|
spell.ebwizardry:summon_ice_wraith.desc=Invoca um espectro do gelo para lutar por você. O espectro do gelo irá desaparecer após 30 segundos ou se for morto.
|
||||||
|
spell.ebwizardry:summon_iron_golem.desc=Autômato autônomo automatizado automático.
|
||||||
|
spell.ebwizardry:summon_lightning_wraith.desc=Invoca um espectro do relâmpago para lutar por você. O espectro do relâmpago irá desaparecer após 30 segundos ou se for morto.
|
||||||
|
spell.ebwizardry:summon_phoenix.desc=Vindo das cinzas...
|
||||||
|
spell.ebwizardry:summon_shadow_wraith.desc=Invoque um espectro da sombra para lutar por você.
|
||||||
|
spell.ebwizardry:summon_skeleton.desc=Invoca um esqueleto para lutar por você. O esqueleto irá desaparecer após 30 segundos ou se for morto.
|
||||||
|
spell.ebwizardry:summon_skeleton_legion.desc=Ascenda, exército morto-vivo!
|
||||||
|
spell.ebwizardry:summon_snow_golem.desc=Cria um golem de neve para lutar por você. Dura até que o golem de neve morra.
|
||||||
|
spell.ebwizardry:summon_spirit_horse.desc=Invoca um cavalo espiritual para você montar. O cavalo espiritual irá desaparecer um pouco depois de ser desmontado, ou você poderá dispensá-lo clicando com o botão direito e shift sobre elecom qualquer varinha.
|
||||||
|
spell.ebwizardry:summon_spirit_wolf.desc=Invoca um companheiro lobo espiritual para lutar por você. O lobo espiritual irá somente desaparecer se for morto, ou você pode dispensá-lo clicando com o botão direito e shift sobre ele com qualquer varinha.
|
||||||
|
spell.ebwizardry:summon_storm_elemental.desc="Elemental da Tempestade: Uma antiga manifestação dos elementos, dificilmente pode conter o poder bruto que se agita dentro dele." - Guia do Mago para Seres Arcanos, Volume I_i
|
||||||
|
spell.ebwizardry:summon_wither_skeleton.desc=Invoque um esqueleto wither para lutar por você. O esqueleto wither irá desaparecer após 30 segundos ou se for morto.
|
||||||
|
spell.ebwizardry:summon_zombie.desc=Invoca um zumbi para lutar por você. O zumbi irá desaparecer após 30 segundos ou se for morto.
|
||||||
|
spell.ebwizardry:telekinesis.desc=Move um item ou outro objeto pequeno para você, ou clique direito no bloco que você estiver olhando. Também pode ser usado para desarmar jogadores.
|
||||||
|
spell.ebwizardry:thunderbolt.desc=Atira um raio de trovão que derruba alvos.
|
||||||
|
spell.ebwizardry:thunderstorm.desc=Mwahahahahahaha!
|
||||||
|
spell.ebwizardry:tornado.desc=Libera um tornado na direção que você está apontando que atira violentamente qualquer coisa em seu caminho para o céu.
|
||||||
|
spell.ebwizardry:transience.desc=Faz o conjurador transitório por 20 segundos. O conjurador é imune a todos os danos enquanto transiente, mas não pode quebrar ou colocar blocos ou causar qualquer dano.
|
||||||
|
spell.ebwizardry:transportation.desc=Transporta o conjurador para um círculo de pedra lembrado. Para usar esse feitiço, faça um círculo de pedras de transportação, e com uma varinha clique com o botão direito.
|
||||||
|
spell.ebwizardry:vanishing_box.desc=Concede ao conjurador acessa o armazenamento do seu baú do ender.
|
||||||
|
spell.ebwizardry:wall_of_frost.desc=Inverno na ponta dos seus dedos.
|
||||||
|
spell.ebwizardry:water_breathing.desc=Permite que o conjurador respire debaixo d'água por 60 segundos.
|
||||||
|
spell.ebwizardry:whirlwind.desc=Faz o alvo ser soprado para cima e longe de você em velocidade.
|
||||||
|
spell.ebwizardry:wither.desc=Dispara um raio de escuridão que decompõe tudo o que toca.
|
||||||
|
spell.ebwizardry:wither_skull.desc=Lança um crânio de wither na direção que você está apontando.
|
||||||
|
|
||||||
|
spell.ebwizardry:invoke_weather.sun=A chuva começa a parar...
|
||||||
|
spell.ebwizardry:invoke_weather.rain=Os céus abem...
|
||||||
|
spell.ebwizardry:transportation.missing=Seu círculo de pedra lembrado está faltando ou está obstruído...
|
||||||
|
spell.ebwizardry:transportation.undefined=Você deve se lembrar da localização de um círculo de pedra primeiro!
|
||||||
|
spell.ebwizardry:transportation.wrongdimension=Seu círculo de pedra lembrado está em outro dimensão...
|
||||||
|
spell.ebwizardry:clairvoyance.searching=Procurando...
|
||||||
|
spell.ebwizardry:clairvoyance.confirm=O caminho revelado sobre conjuração %1$s irá agora levar de volta a este ponto
|
||||||
|
spell.ebwizardry:clairvoyance.outofrange=Sua localização lembrada está muito longe ou está inacessível...
|
||||||
|
spell.ebwizardry:clairvoyance.undefined=Você deve se lembrar de um local primeiro!
|
||||||
|
spell.ebwizardry:clairvoyance.wrongdimension=Seu local lembrado está em outra dimensão...
|
||||||
|
|
||||||
|
potion.ebwizardry:frost=Congelamento
|
||||||
|
potion.ebwizardry:fireskin=Pele de Fogo
|
||||||
|
potion.ebwizardry:ice_shroud=Mortalha de Gelo
|
||||||
|
potion.ebwizardry:static_aura=Aura Estática
|
||||||
|
potion.ebwizardry:transience=Transitoriedade
|
||||||
|
potion.ebwizardry:decay=Apodrecimento
|
||||||
|
potion.ebwizardry:sixth_sense=Sexto Sentido
|
||||||
|
potion.ebwizardry:arcane_jammer=Bloqueador Arcano
|
||||||
|
potion.ebwizardry:mind_trick=Truque Mental
|
||||||
|
potion.ebwizardry:mind_control=Controle Mental
|
||||||
|
potion.ebwizardry:font_of_mana=Fonte de Mana
|
||||||
|
potion.ebwizardry:fear=Medo
|
||||||
|
|
||||||
|
enchantment.ebwizardry:magic_sword=Imbuimento
|
||||||
|
enchantment.ebwizardry:magic_bow=Imbuimento
|
||||||
|
enchantment.ebwizardry:flaming_weapon=Imbuimento de Fogo
|
||||||
|
enchantment.ebwizardry:freezing_weapon=Imbuimento de Geada
|
||||||
|
|
||||||
|
key.categories.ebwizardry=Wizardry
|
||||||
|
|
||||||
|
key.ebwizardry.next_spell=Próximo Feitiço
|
||||||
|
key.ebwizardry.previous_spell=Feitiço Anterior
|
||||||
|
|
||||||
|
death.attack.wizardry_magic=%1$s foi morto por %2$s usando magia
|
||||||
|
death.attack.indirect_wizardry_magic=%1$s foi morto por %2$s usando magia
|
||||||
|
|
||||||
|
commands.ebwizardry:cast.usage=/%1$s <spell> [jogador] [multiplicador de dano] [multiplicador de alcance] [multiplicador de duração] [multiplicador de onda destrutiva]
|
||||||
|
commands.ebwizardry:cast.success=Com sucesso conjura %1$s
|
||||||
|
commands.ebwizardry:cast.success_continuous=Com sucesso conjura %1$s; repita o comando para parar
|
||||||
|
commands.ebwizardry:cast.success_remote=Com sucesso conjura %1$s como %2$s
|
||||||
|
commands.ebwizardry:cast.success_remote_continuous=Com sucesso conjura %1$s como %2$s; repita o comando para parar
|
||||||
|
commands.ebwizardry:cast.fail=Não é possível conjurar %1$s
|
||||||
|
commands.ebwizardry:cast.not_found=Não existe tal feitiço com ID %1$s
|
||||||
|
commands.ebwizardry:cast.tag_error=Análise da tag de dados falhou: %s
|
||||||
|
|
||||||
|
commands.ebwizardry:ally.usage=/%1$s <player> [jogador]
|
||||||
|
commands.ebwizardry:ally.addally=%1$s foi adicionado a lista de aliados de %2$s
|
||||||
|
commands.ebwizardry:ally.removeally=%1$s foi removido da lista de aliados de %2$s
|
||||||
|
commands.ebwizardry:ally.self=Os jogadores não podem ser um aliado deles mesmos!
|
||||||
|
commands.ebwizardry:ally.permission=Você não tem permissão para mudar os aliados de outros jogadores
|
||||||
|
|
||||||
|
commands.ebwizardry:allies.usage=/%1$s [jogador]
|
||||||
|
commands.ebwizardry:allies.list=Jogadores aliados a você: %1$s
|
||||||
|
commands.ebwizardry:allies.list_other=Jogadores aliados a %1$s: %2$s
|
||||||
|
commands.ebwizardry:allies.permission=Você não tem permissão para ver aliados de outros jogadores
|
||||||
|
commands.ebwizardry:allies.none=Nenhum
|
||||||
|
|
||||||
|
commands.ebwizardry:discoverspell.usage=/%1$s <spell/all/clear> [jogador]
|
||||||
|
commands.ebwizardry:discoverspell.not_found=Não existe tal mágica com ID %1$s
|
||||||
|
commands.ebwizardry:discoverspell.clear=Limpou todos os dados de descoberta de feitiços para %1$s
|
||||||
|
commands.ebwizardry:discoverspell.all=Adicionado todos os feitiços para os dados de descoberta de feitiços de %1$s
|
||||||
|
commands.ebwizardry:discoverspell.addspell=Adicionado %1$s para os dados de descoberta de feitiços de %2$s
|
||||||
|
commands.ebwizardry:discoverspell.removespell=Removido %1$s dos dados de descoberta de feitiços de %2$s
|
||||||
|
|
||||||
|
config.ebwizardry.title.general=Opções do Mod
|
||||||
|
|
||||||
|
config.ebwizardry.category.gameplay=Definições de Jogabilidade
|
||||||
|
config.ebwizardry.category.gameplay.tooltip=Configure a jogabilidade geral de wizardry
|
||||||
|
config.ebwizardry.title.gameplay=Definições de Jogabilidade
|
||||||
|
config.ebwizardry.subtitle.gameplay=Definições globais que afetam as mecânicas do jogo.
|
||||||
|
|
||||||
|
config.ebwizardry.category.worldgen=Definições de Geração de Mundo
|
||||||
|
config.ebwizardry.category.worldgen.tooltip=Configure os recursos de geração de mundo de wizardry
|
||||||
|
config.ebwizardry.title.worldgen=Definições de Geração de Mundo
|
||||||
|
config.ebwizardry.subtitle.worldgen=Definições que afetam a geração de mundo.
|
||||||
|
|
||||||
|
config.ebwizardry.category.commands=Definições de Comando
|
||||||
|
config.ebwizardry.category.commands.tooltip=Configure os comandos de wizardry
|
||||||
|
config.ebwizardry.title.commands=Definições de Comando
|
||||||
|
config.ebwizardry.subtitle.commands=Definições para os comandos adicionados pelo Wizardry.
|
||||||
|
|
||||||
|
config.ebwizardry.category.client=Definições de Cliente
|
||||||
|
config.ebwizardry.category.client.tooltip=Configure o vídeo e controles de wizardry
|
||||||
|
config.ebwizardry.title.client=Definições de Cliente
|
||||||
|
config.ebwizardry.subtitle.client=Definições do lado do cliente que somente afetam o jogo de minecraft local.
|
||||||
|
|
||||||
|
config.ebwizardry.category.spells=Configuração de Feitiço
|
||||||
|
config.ebwizardry.category.spells.tooltip=Selecione que feitiços estão habiliados
|
||||||
|
config.ebwizardry.title.spells=Configuração de Feitiço
|
||||||
|
config.ebwizardry.subtitle.spells=Defina um feitiço para falso para desabilitá-lo.
|
||||||
|
|
||||||
|
config.ebwizardry.category.resistances=Configuração de Resistência
|
||||||
|
config.ebwizardry.category.resistances.tooltip=Configure quais mobs são imunes aos diferentes tipos de magia
|
||||||
|
config.ebwizardry.title.resistances=Configuração de Resistência
|
||||||
|
config.ebwizardry.subtitle.resistances=Definições que permitem que entidades sejam imunes a certos tipos de magia.
|
||||||
|
|
||||||
|
config.ebwizardry.tower_rarity=Raridade de Torre
|
||||||
|
config.ebwizardry.ore_dimensions=Dimensões do Minério
|
||||||
|
config.ebwizardry.flower_dimensions=Dimensões da Flor
|
||||||
|
config.ebwizardry.tower_dimensions=Dimensões da Torre
|
||||||
|
config.ebwizardry.spell_book_drop_chance=Chance de Drop de Livro de Feitiços
|
||||||
|
config.ebwizardry.generate_loot=Gerar Loot
|
||||||
|
config.ebwizardry.firebomb_is_craftable=Bomba de Fogo É Craftável
|
||||||
|
config.ebwizardry.poison_bomb_is_craftable=Bomba de Veneno É Craftável
|
||||||
|
config.ebwizardry.smoke_bomb_is_craftable=Bomba de Fumaça É Craftável
|
||||||
|
config.ebwizardry.use_alternate_scroll_recipe=Usar Receita de Pergaminho Alternativa
|
||||||
|
config.ebwizardry.teleport_through_unbreakable_blocks=Teletransportar Através de Blocos Inquebráveis
|
||||||
|
config.ebwizardry.show_summoned_creature_names=Mostrar Nomes de Criaturas Invocadas
|
||||||
|
config.ebwizardry.friendly_fire=Fogo Amigo
|
||||||
|
config.ebwizardry.telekinetic_disarmament=Desarmamento Telequinético
|
||||||
|
config.ebwizardry.discovery_mode=Modo de Descoberta
|
||||||
|
config.ebwizardry.enable_shift_scrolling=Habilitar Rolagem com shift
|
||||||
|
config.ebwizardry.minion_revenge_targeting=Na Mira da Vingança Minion
|
||||||
|
config.ebwizardry.player_damage_scaling=Fator de Escala de Dano de Jogador
|
||||||
|
config.ebwizardry.npc_damage_scaling=Fator de Escala de Dano de NPC
|
||||||
|
config.ebwizardry.cast_command_multiplier_limit=Limite do Multiplicador de Lançar Comando
|
||||||
|
config.ebwizardry.summoned_creature_targets_whitelist=Lista de permissões de Alvo de Criatura Invocada
|
||||||
|
config.ebwizardry.summoned_creature_targets_blacklist=Lista negra de Alvo de Criatura Invocada
|
||||||
|
config.ebwizardry.spell_hud_position=Posição de HUD de Feitiços
|
||||||
|
config.ebwizardry.cast_command_name=Nome de Comando de Lançar Feitiço
|
||||||
|
config.ebwizardry.discoverspell_command_name=Nome de Comando de Descobrir Feitiço
|
||||||
|
config.ebwizardry.ally_command_name=Definir Nome de Comando Aliado
|
||||||
|
config.ebwizardry.allies_command_name=Ver Nome de Comando Aliados
|
||||||
|
config.ebwizardry.mind_control_targets_blacklist=Lista negra de Alvos de Controle Mental
|
||||||
|
config.ebwizardry.evil_wizard_dimensions=Dimensões do Mago Malvado
|
||||||
|
|
||||||
|
config.ebwizardry.mobs_immune_to_fire=Mobs Imunes a Fogo
|
||||||
|
config.ebwizardry.mobs_immune_to_ice=Mobs Imunes a Gelo
|
||||||
|
config.ebwizardry.mobs_immune_to_lightning=Mobs Imunes a Relâmpago
|
||||||
|
config.ebwizardry.mobs_immune_to_wither=Mobs Imunes a Wither
|
||||||
|
config.ebwizardry.mobs_immune_to_poison=Mobs Imunes a Veneno
|
||||||
|
|
||||||
|
config.ebwizardry.tower_rarity.tooltip=Raridade das torres de mago. Números mais altos são mais raros. Defina como 0 para desabilitar completamente as torres de mago.
|
||||||
|
config.ebwizardry.ore_dimensions.tooltip=Lista de IDs de dimensão em que o minério de cristal será gerado. Note que removendo o mundo superior (id 0) desta lista tornará o mod MUITO difícil de jogar!
|
||||||
|
config.ebwizardry.flower_dimensions.tooltip=Lista de IDs de dimensão em que as flores de cristal serão geradas.
|
||||||
|
config.ebwizardry.tower_dimensions.tooltip=Lista de IDs de dimensão em que as torres de mago serão geradas.
|
||||||
|
config.ebwizardry.spell_book_drop_chance.tooltip=A chance de mobs droparem um livro de feitiços quando mortos. Quanto maior esse número, mais freqüentemente eles irão dropar. Defina como 0 para desativar os drops de livro de feitiços. Defina como 200 para drop garantidos.
|
||||||
|
config.ebwizardry.generate_loot.tooltip=Se deve gerar loot mágico em baús de masmorras.
|
||||||
|
config.ebwizardry.firebomb_is_craftable.tooltip=Se as bombas de fogo podem ser craftadas ou não.
|
||||||
|
config.ebwizardry.poison_bomb_is_craftable.tooltip=Se as bombas de veneno podem ser craftadas ou não.
|
||||||
|
config.ebwizardry.smoke_bomb_is_craftable.tooltip=Se as bombas de fumaça podem ser craftadas ou não.
|
||||||
|
config.ebwizardry.use_alternate_scroll_recipe.tooltip=Seja para exigir um cristal mágico na receita de fabricação disforme para pergaminhos em branco. Defina como verdadeiro se outro mod adicionar uma receita conflitante.
|
||||||
|
config.ebwizardry.teleport_through_unbreakable_blocks.tooltip=Se os jogadores podem se teletransportar através de blocos inquebráveis (por exemplo, rocha matriz) usando o feitiço de etapa de fase.
|
||||||
|
config.ebwizardry.show_summoned_creature_names.tooltip=Seja para mostrar nomes e proprietários de criaturas invocadas acima de suas cabeças.
|
||||||
|
config.ebwizardry.friendly_fire.tooltip=Seja para permitir que os jogadores danifiquem seus aliados designados usando magia.
|
||||||
|
config.ebwizardry.telekinetic_disarmament.tooltip=Seja para permitir que os jogadores desarmem outros jogadores usando o feitiço telequinesia. Defina como falso para evitar roubo de itens.
|
||||||
|
config.ebwizardry.discovery_mode.tooltip=Para quem gosta de um senso de mistério! Quando definido como verdadeiro, as mágicas que você ainda não tiver lançado serão ilegíveis até que você as lance (em uma base mundial). Não tem efeito quando no modo criativo. Feitiços de identificação serão impossíveis de obter no modo de sobrevivência se isso for falso.
|
||||||
|
config.ebwizardry.enable_shift_scrolling.tooltip=Se você pode alternar entre magias em uma varinha rolando com a roda do mouse enquanto se agacha. Note que isso só afetará você; outros jogadores conectados ao mesmo servidor obedecem às suas próprias configurações.
|
||||||
|
config.ebwizardry.minion_revenge_targeting.tooltip=Se as criaturas convocadas podem se vingar atacando seu dono se seu dono as atacar.
|
||||||
|
config.ebwizardry.player_damage_scaling.tooltip=Fator de escala de dano global para o dano causado por jogadores lançando feitiços, em relação a 1.
|
||||||
|
config.ebwizardry.npc_damage_scaling.tooltip=Fator de escala de dano global para o dano causado por feitiços de conjuração de NPCs, relativo a 1.
|
||||||
|
config.ebwizardry.cast_command_multiplier_limit.tooltip=Limite superior para os multiplicadores passados para o comando / conjurar. Isso está aqui para impedir que os jogadores quebrem acidentalmente um mundo / servidor. Grandes mutiplicadores de onda destrutiva podem causar lags extremos - você foi avisado!
|
||||||
|
config.ebwizardry.summoned_creature_targets_whitelist.tooltip=Lista de nomes de entidades cujas criaturas invocadas e magos podem atacar, além dos padrões. Adicione criaturas de mod a esta lista se você quiser criaturas invocadas a atacá-los e eles já não estiverem fazendo isso. Nomes de entidades não diferenciam maiúsculas de minúsculas. Para entidades de mod, prefixar com o ID do mod (por exemplo, ebwizardry: wizard).
|
||||||
|
config.ebwizardry.summoned_creature_targets_blacklist.tooltip=Lista de nomes de entidades que criaturas invocadas e magos especificamente não têm permissão para atacar, substituindo os padrões e a lista de desbloqueio. Adicione criaturas a esta lista se permitir que elas sejam atacadas causem problemas ou sejam muito destrutivas (remover creepers desta lista é feito para por sua conta em risco!). Nomes de entidades não diferenciam maiúsculas de minúsculas. Para entidades de mod, prefixar com o ID mod (por exemplo, ebwizardry: wizard).
|
||||||
|
config.ebwizardry.spell_hud_position.tooltip=A posição do HUD de Feitiços.
|
||||||
|
config.ebwizardry.cast_command_name.tooltip=O nome do comando /cast. Isto é o que você digita diretamente após o /; por exemplo se isso for definido para 'magic' então, ao invés de estar digitando /cast em vez disso você digitará /magic.
|
||||||
|
config.ebwizardry.discoverspell_command_name.tooltip=O nome do comando /discoverspell. Isso é o que você digita diretamente após o /; por exemplo se isso for definido para 'magic' então, ao invés de estar digitando /discoverspell você em vez disso irá digitar /magic.
|
||||||
|
config.ebwizardry.ally_command_name.tooltip=O nome do comando /ally. Isso é o que você digita diretamente após o /; por exemplo se isso for definido para 'magic' então, ao invés de estar digitando /ally você em vez disso irá digitar /magic.
|
||||||
|
config.ebwizardry.allies_command_name.tooltip=O nome do comando /allies. Isso é o que você digita diretamente após o /; por exemplo se isso for definido para 'magic' então, ao invés de estar digitando /allies você em vez disso irá digitar /magic.
|
||||||
|
config.ebwizardry.mind_control_targets_blacklist.tooltip=Lista de nomes de entidades que não podem ter a mente controlada, além das padrões. Adicione criaturas a essa lista se permitir que elas sejam controladas mentalmente que causem problemas ou que isso possa ser exploradas. Nomes de entidades não diferenciam maiúsculas de minúsculas. Para entidades de mod, prefixar com o ID mod (por exemplo, ebwizardry: wizard).
|
||||||
|
config.ebwizardry.evil_wizard_dimensions.tooltip=Lista de ids de dimensões em que magos malvados podem ser gerar.
|
||||||
|
|
||||||
|
config.ebwizardry.mobs_immune_to_fire.tooltip=Lista de nomes de entidades que são imunes a fogo, em adição aos padrões. Adicione criaturas de mod nessa lista se você deseja que elas sejam imunes a magia de fogo e elas não estiverem sendo. Nomes de entidades não diferenciam maiúsculas de minúsculas. Para entidades de mod, prefixar com o ID mod (por exemplo, ebwizardry: wizard).
|
||||||
|
config.ebwizardry.mobs_immune_to_ice.tooltip=Lista de nomes de entidades que são imunes a gelo, em adição aos padrões. Adicione criaturas de mod nessa lista se você deseja que elas sejam imunes a magia de gelo e elas não estiverem sendo. Nomes de entidades não diferenciam maiúsculas de minúsculas. Para entidades de mod, prefixar com o ID mod (por exemplo, ebwizardry: wizard).
|
||||||
|
config.ebwizardry.mobs_immune_to_lightning.tooltip=Lista de nomes de entidades que são imunes a relâmpago, em adição aos padrões. Adicione criaturas de mod nessa lista se você deseja que elas sejam imunes a magia de relâmpago e elas não estiverem sendo. Nomes de entidades não diferenciam maiúsculas de minúsculas. Para entidades de mod, prefixar com o ID mod (por exemplo, ebwizardry: wizard).
|
||||||
|
config.ebwizardry.mobs_immune_to_wither.tooltip=Lista de nomes de entidades que são imunes a efeitos de wither, em adição aos padrões. Adicione criaturas de mod nessa lista se você deseja que elas sejam imunes a magia de wither e elas não estiverem sendo. Nomes de entidades não diferenciam maiúsculas de minúsculas. Para entidades de mod, prefixar com o ID mod (por exemplo, ebwizardry: wizard).
|
||||||
|
config.ebwizardry.mobs_immune_to_poison.tooltip=Lista de nomes de entidades que são imunes a veneno, em adição aos padrões. Adicione criaturas de mod nessa lista se você deseja que elas sejam imunes a magia de veneno e elas não estiverem sendo. Nomes de entidades não diferenciam maiúsculas de minúsculas. Para entidades de mod, prefixar com o ID mod (por exemplo, ebwizardry: wizard).
|
||||||
|
|
||||||
|
wizard.debug=%1$s, %2$s, %3$s
|
||||||
@@ -18,6 +18,6 @@
|
|||||||
"cooldown": 300,
|
"cooldown": 300,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"resistance_duration": 600,
|
"resistance_duration": 600,
|
||||||
"resistance_strength": 3
|
"resistance_strength": 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -18,6 +18,6 @@
|
|||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"resistance_duration": 600,
|
"resistance_duration": 600,
|
||||||
"resistance_strength": 2
|
"resistance_strength": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -18,6 +18,6 @@
|
|||||||
"cooldown": 50,
|
"cooldown": 50,
|
||||||
"base_properties": {
|
"base_properties": {
|
||||||
"resistance_duration": 600,
|
"resistance_duration": 600,
|
||||||
"resistance_strength": 1
|
"resistance_strength": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -732,11 +732,11 @@
|
|||||||
|
|
||||||
"Code:",
|
"Code:",
|
||||||
|
|
||||||
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- Tora-B \n- Avatair \n- Aeronica",
|
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica",
|
||||||
|
|
||||||
"Translations:",
|
"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",
|
"- 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",
|
||||||
|
|
||||||
"Lightning ray sound effect from OhhWowProductions",
|
"Lightning ray sound effect from OhhWowProductions",
|
||||||
|
|
||||||
|
|||||||
@@ -732,11 +732,11 @@
|
|||||||
|
|
||||||
"Code:",
|
"Code:",
|
||||||
|
|
||||||
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- Tora-B \n- Avatair \n- Aeronica",
|
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica",
|
||||||
|
|
||||||
"Translations:",
|
"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",
|
"- 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",
|
||||||
|
|
||||||
"Lightning ray sound effect from OhhWowProductions",
|
"Lightning ray sound effect from OhhWowProductions",
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,225 @@
|
|||||||
|
PAGEBREAK
|
||||||
|
LINEBREAK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
O Manual do Mago
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
por Electroblob
|
||||||
|
PAGEBREAK
|
||||||
|
Introdução
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Saudações, mago! Este livro explica os muitos caminhos do arcano e como usá-los.
|
||||||
|
|
||||||
|
Se você perder este livro, pode obter um novo, craftando um livro com um cristal mágico.
|
||||||
|
PAGEBREAK
|
||||||
|
Conteúdo
|
||||||
|
--------------------
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Iniciando
|
||||||
|
Iniciando
|
||||||
|
--------------------
|
||||||
|
Para começar com wizardry, você precisará de algumas coisas:
|
||||||
|
|
||||||
|
- Uma varinha mágica, craftada com uma pepita de ouro, um graveto, e um cristal mágico.
|
||||||
|
|
||||||
|
- Uma mesa de trabalho arcana, craftada com 3 pedras, 1 bloco de lápis-lazuli, 2 cristais mágicos, 2 pepitas de ouro e 1 tapete roxo.
|
||||||
|
|
||||||
|
- Um livro de feitiços. Estes podem ser encontrados em baús, dropados como saque, comprados de magos, ou você pode fazer um feitiço de principiante, um míssil mágico, com um livro e 4 cristais mágicos.
|
||||||
|
|
||||||
|
Você também precisará de um monte a mais de cristais mágicos para abastecer sua varinha com mana.
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Mana
|
||||||
|
Mana
|
||||||
|
--------------------
|
||||||
|
Mana é a energia arcana que dá aos magos seus poderes. Ela se manifesta em cristais naturais, que podem ser encontrados em rochas subterrâneas. As varinhas podem armazenar mana dentro delas e esta mana é canalizada para as magias que você conjura. Feitiços diferentes custam diferentes quantidades de mana, dependendo de quão poderosos eles são e por quanto tempo duram.
|
||||||
|
|
||||||
|
Passe o mouse sobre uma varinha para ver quanto mana está armazenada nela.
|
||||||
|
IMAGE CRYSTAL
|
||||||
|
LINEBREAK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Magia
|
||||||
|
Minério de Cristal Cristal
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Varinhas
|
||||||
|
Varinhas
|
||||||
|
--------------------
|
||||||
|
A varinha é o acessório preferido para um mago. Com ela, você pode conjurar qualquer feitiço provido desde que a varinha possa conter seu poder (consulte Níveis para uma explicação mais detalhada).
|
||||||
|
Varinhas vêm em diversas variedades diferentes mas você quase certamente começará com uma varinha mágica básica.
|
||||||
|
|
||||||
|
Ao segurar uma varinha, uma pequena tela de aviso irá aparecerá no canto da tela. Isto indica o feitiço que está atualmente selecionado junto com uma representação pictórica dele, e, se a feitiço foi conjurado, uma barra de recarga indicando o tempo até que a feitiço possa ser conjurado novamente.
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Feitiços
|
||||||
|
Feitiços
|
||||||
|
--------------------
|
||||||
|
Uma varinha é inútil sem feitiços para conjurar com ela. Magias são gravadas em duas formas: em livros, que são permanentes, e em pergaminhos, que são temporários.
|
||||||
|
|
||||||
|
Os livros de feitiços são de pouca utilidade sozinhos; ao invés disso eles são usados para vincular o feitiço que eles contêm para varinhas. Livros de feitiços podem ser encontrados em todo o mundo e não demorará muito para você encontrar um. Quando você encontrar um, você pode passar o mouse sobre o livro de feitiços para ver informações básicas sobre o feitiço de relance. Você também pode clicar com o botão direito do mouse enquanto segura um livro de feitiços para ler informações mais detalhadas sobre o feitiço.
|
||||||
|
|
||||||
|
Os pergaminhos, por outro lado, servem a um propósito diferente: clicar com o botão direito do mouse enquanto você segura um, lançará o feitiço que está vinculado a ele, destruindo o pergaminho no processo. Como os livros de feitiços, os pergaminhos podem ser encontrados em todo o mundo, mas você também pode criá-los criando um pergaminho em branco a partir de um pedaço de papel e de uma sequencia de caracteres. Você pode então vincular um feitiço ao pergaminho usando mesa de trabalho arcano, mas somente se você tiver conhecimento desse feitiço. Fazer isso consumirá um número de cristais mágicos igual ao custo de mana da magia (arredondado para o MANA_PER_CRYSTAL mais próximo).
|
||||||
|
|
||||||
|
Para o olho destreinado, as runas mágicas com as quais as magias são escritas são ilegíveis. Para identificar um feitiço, você pode, é claro, conjurar e ver o que acontece - embora isso possa causar efeitos colaterais indesejados, e muitos feitiços precisam de certas condições para funcionar. Uma opção mais segura e confiável é usar um pergaminho de identificação, que pode ser encontrado em baús ou comprado de um mago. Clicar com o botão direito enquanto segura um, irá identificar o primeiro livro de feitiços desconhecido ou rolar em sua barra de inventário, consumindo o pergaminho de identificação.
|
||||||
|
|
||||||
|
Os pergaminhos são bastante úteis quando você precisa usar uma mágica uma ou duas vezes em uma determinada missão, mas não quer que ela ocupe um espaço na sua varinha. Deve-se notar, no entanto, que os pergaminhos são, na melhor das hipóteses, um método ineficiente de lançar feitiços.
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Mesa de Trabalho Arcana
|
||||||
|
Mesa de Trabalho Arcana
|
||||||
|
--------------------
|
||||||
|
A mesa de trabalho arcana é um bloco de aparência semelhante à mesa de encantamento, onde você pode carregar, atualizar e vincular feitiços para sua varinha. Simplesmente coloque-o em qualquer lugar e clique com o botão direito, e você verá um igu como o da direita.
|
||||||
|
PAGEBREAK
|
||||||
|
IMAGE WORKBENCH
|
||||||
|
LINEBREAK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
A Mesa de Trabalho Arcana
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Vinculando Feitiços
|
||||||
|
Vinculando Feitiços
|
||||||
|
--------------------
|
||||||
|
Para vincular um feitiço para a sua varinha, basta colocar sua varinha no espaço central da bancada, em seguida, coloque o livro de feitiços em um dos espaços circundantes e pressione Aplicar. Você pode vincular até cinco feitiços a uma varinha de uma só vez, embora isso possa ser aumentado com atualizações de sintonização. Ao segurar uma varinha, você pode alternar entre as mágicas com as teclas de NEXT_SPELL_KEY e PREVIOUS_SPELL_KEY (elas podem ser alteradas em opções -> controles). Você também pode alternar feitiços rolando a roda do mouse enquanto se esgueira.
|
||||||
|
|
||||||
|
SECTION Carregamento de Varinhas
|
||||||
|
Carregamento de Varinhas
|
||||||
|
--------------------
|
||||||
|
Para carregar sua varinha, coloque a varinha no espaço central da mesa de trabalho arcana e coloque alguns cristais mágicos na parte superior dos dois espaços à esquerda e, em seguida, pressione aplicar. Cada cristal é no valor de MANA_PER_CRYSTAL, e a varinha só aceita o que precisa, para que você possa manter um suprimento de cristais na mesa de trabalho para quando precisar deles. No entanto, tenha em mente que a varinha só pode receber um número inteiro de cristais, portanto, se a varinha precisar, por exemplo, de mais 30 mana, MANA_PER_CRYSTAL_MINUS_30 de mana será perdida ao carregá-la. Todas as varinhas terão um número exato de cristais para carregar se estiverem vazias, a menos que tenham uma atualização de armazenamento aplicada.
|
||||||
|
|
||||||
|
SECTION Atualizando Varinhas
|
||||||
|
Atualizando sua varinha
|
||||||
|
--------------------
|
||||||
|
Para atualizar sua varinha, você precisará de um tomo de arcana do nível apropriado (consulte Níveis) ou de uma atualização especial de varinha. Ambos podem ser encontrados como saque ou comprados de um mago. Para atualizar sua varinha, coloque-a no espaço central e a atualização na parte inferior dos dois espaços à esquerda e, em seguida, pressione aplicar.
|
||||||
|
|
||||||
|
Atualizações na varinha especial melhoram um aspecto particular de uma varinha. Cada tipo de atualização pode acumular até três vezes, e o número total de atualizações que uma varinha pode levar depende do seu nível. Atualizações não podem ser removidas.
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Flores e Frascos
|
||||||
|
Flores e Frascos
|
||||||
|
--------------------
|
||||||
|
Você provavelmente vai encontrar curiosas flores brilhantes que crescem na natureza de tempos em tempos. Estas são flores de cristal, uma fonte natural de mana. Elas podem ser colhidas e craftadas para extrair o mana dos cristais.
|
||||||
|
|
||||||
|
Precisa recarregar sua varinha em movimento? Sem problemas! O mana agora pode ser engarrafado. Simplesmente crafteie um frasco de mana com uma frasco de vidro e oito cristais mágicos e leve-o com você. Quando você precisar usá-lo, simplesmente crafteie-o com sua varinha e ele restaurará parte da carga. Este processo consumirá o frasco. Alguma mana é perdida durante o engarrafamento.
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Níveis
|
||||||
|
Níveis
|
||||||
|
--------------------
|
||||||
|
As varinhas e as magias vêm em quatro níveis: BASIC_COLOURnovatoRESET_COLOUR, APPRENTICE_COLOURaprendizRESET_COLOUR, ADVANCED_COLOURavançado RESET_COLOURe MASTER_COLOURmestreRESET_COLOUR. Cada nível é mais poderoso que o anterior.
|
||||||
|
|
||||||
|
Varinhas BASIC_COLOURNovata RESET_COLOURsão as que podem ser craftadas. Elas têm até BASIC_MAX_CHARGE de mana e só podem conjurar feitiços de novato. Os feitiços de novato são simples o suficiente para serem conjurados por qualquer um e geralmente não custam muita mana. Isso não significa necessariamente que elas são inúteis em níveis mais altos; seu baixo custo torna alguns feitiços de novato úteis mesmo quando você tem acesso a feitiços mestres.
|
||||||
|
|
||||||
|
Varinhas APPRENTICE_COLOURAprendiz RESET_COLOURsão o próximo nível acima de varinhas novatos. Elas têm até APPRENTICE_MAX_CHARGE de mana e podem conjurar feitiços de aprendiz e novato. Os feitiços de aprendiz são um pouco mais impressionantes do que os feitiços de novato, mas geralmente custam mais.
|
||||||
|
|
||||||
|
Varinhas ADVANCED_COLOURAvançada RESET_COLOURsão bastante raras e são muito mais poderosas. Elas podem conjurar todas as magias, exceto feitiços mestre, e segurar ADVANCED_MAX_CHARGE de mana. Magias avançadas podem conceder poderes sobrenaturais, como invisibilidade, e causar pequenos estragos em inimigos..
|
||||||
|
|
||||||
|
Varinhas MASTER_COLOURMestre RESET_COLOURsão as varinhas mais poderosas em existência. Elas seguram até MASTER_MAX_CHARGE de mana e podem conjurar qualquer feitiço. Os livros de feitiços são muito raros e os feitiços podem causar completa devastação não apenas para os inimigos, mas até mesmo para o próprio mundo. Use com cuidado.
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Elementos
|
||||||
|
Elementos
|
||||||
|
--------------------
|
||||||
|
Feitiços pertencem a elementos diferentes, que descrevem a natureza do feitiço e também têm vantagens quando usadas com certas varinhas.
|
||||||
|
|
||||||
|
FIRE_COLOURFogo
|
||||||
|
Talvez o elemento mais destrutivo, o fogo diz respeito ao ardente, lava e explosões. Um poderoso piromante lançará o inferno sobre seus inimigos e provavelmente incendiará o mundo no processo. A maioria dos feitiços de ataque de fogo atearam fogo ao alvo, causando dano contínuo ao longo do tempo. No entanto, tenha cuidado com o fato de que as magias de fogo podem não ter efeito nos mobs inferiores.
|
||||||
|
|
||||||
|
ICE_COLOURGelo
|
||||||
|
O elemento de gelo é feito de tudo que é frio. Os feitiços de geada geralmente reduzem a velocidade dos inimigos ou os congelam completamente, e são especialmente eficazes em criaturas de fogo. A magia do gelo pode ser igualmente útil fora do combate, como o congelamento da água para atravessar um rio.
|
||||||
|
|
||||||
|
LIGHTNING_COLOURRelâmpago
|
||||||
|
Este elemento diz respeito a relâmpagos, tempestades e o clima. Um poderoso mago da tempestade é uma força a ser considerada, e alguns possuem a habilidade de chamar os raios à vontade. Magias de raios frequentemente danificam vários inimigos de uma só vez e geralmente buscam seu alvo, tornando-os um ataque efetivo contra qualquer mob... mas cuidado com creepers.
|
||||||
|
|
||||||
|
NECROMANCY_COLOURNecromancia
|
||||||
|
A necromancia é o elemento da escuridão, do caos e dos mortos-vivos. Os necromantes são misteriosos e muitas vezes considerados maus, embora isso geralmente não seja o caso. Magias de necromancia são comumente usadas para convocar criaturas para lutar por você ou até mesmo dobrar a vontade de seus inimigos.
|
||||||
|
|
||||||
|
EARTH_COLOURTerra
|
||||||
|
O elemento da terra está focado no mundo natural: animais, plantas, o vento e coisas semelhantes. A magia da terra é diversa e assume uma grande variedade de formas, desde envenenar inimigos até libertar a fúria do tempo. Feitiços de terra são uma mistura de ataque, defesa e utilidade.
|
||||||
|
|
||||||
|
SORCERY_COLOURFeitiçaria
|
||||||
|
A feitiçaria é o elemento de força e mudança. Os feiticeiros manipulam a luz, a gravidade e até a própria realidade para atender às suas necessidades. Os feitiços de feitiçaria podem ser usados, entre outras coisas, para conceder aos seu conjurador poderes mágicos ou mover objetos para sua vontade.
|
||||||
|
|
||||||
|
HEALING_COLOURCura
|
||||||
|
O elemento de cura está relacionado à defesa e regeneração. Os curandeiros procuram proteger-se e aos seus aliados o máximo possível e, como tal, podem ser adversários muito difíceis. Embora geralmente não seja usado como ataque, a luz purificadora de alguns feitiços de cura causará danos consideráveis aos mortos-vivos. Feitiços de cura são indispensáveis quando em combate.
|
||||||
|
|
||||||
|
As fronteiras entre os diferentes elementos nem sempre são distintas, e alguns feitiços carregam características de outros elementos do que os seus.
|
||||||
|
|
||||||
|
Se você for sortudo, você pode encontrar uma varinha elemental. Essas varinhas permitem que você conjure magias do elemento certo para obter mais potência do que o normal.
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Armadura Mágica
|
||||||
|
Armadura Mágica
|
||||||
|
--------------------
|
||||||
|
Como um mago, você precisará de algo para protegê-lo das criaturas que você luta. Nenhuma armadura comum vai fazer mesmo. Para aproveitar ao máximo seus feitiços, você precisará de armadura de mago: chapéu, roupas, calças e botas. Ao contrário da armadura comum, estas não serão quebradas. Em vez disso, eles usam energia arcana para proteger o usuário. Isso, claro, significa que eles devem ser carregadas com cristais mágicos, assim como as varinhas. Felizmente, essas roupas não consomem muito mana. Carregue-as como faria com uma varinha na bancada arcana ou com um frasco de mana, mas tenha cuidado - se ficarem sem mana, você se achará indefeso.
|
||||||
|
|
||||||
|
Você pode obter armadura de mago, criando-a de seda mágica, obtida ao estar craftando linha com um cristal mágico.
|
||||||
|
|
||||||
|
Aqueles magos que se dedicam à prática de um elemento às vezes usam roupas especiais que concedem bônus para aquele elemento. Conjuntos completos de tais roupas são muito procurados entre os magos e não são fáceis de encontrar.
|
||||||
|
|
||||||
|
A lenda fala de um selo arcano usado pelos magos mais poderosos para melhorar sua armadura.
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Magos e Torres
|
||||||
|
Magos e Torres
|
||||||
|
--------------------
|
||||||
|
Não temais - não és o único praticante de magia neste mundo. Em suas viagens, você pode encontrar torres altas com telhados pontiagudos. Estas são as residências dos colegas magos. Uma vida de solidão pode tornar os magos um pouco amuados, às vezes, mas eles são geralmente pessoas amigáveis que estão dispostos a compartilhar seus conhecimentos com você - ainda que por um preço. Espere pagar metais e pedras preciosas e, em troca, você receberá muitas maravilhas misteriosas. Se, no entanto, é um feitiço mestre que você procura, você precisará falar com um especialista.
|
||||||
|
|
||||||
|
Infelizmente, existem alguns magos por aí que não recebem visitantes. Esses magos são tipicamente rejeitados e são hostis a qualquer um que cruze seu caminho. Aborde esses indivíduos com cautela e esteja preparado para se defender contra magias poderosas. Derrote-os, no entanto, e o conhecimento deles é seu para ser tomado.
|
||||||
|
PAGEBREAK
|
||||||
|
SECTION Receitas de Craftagem
|
||||||
|
Receitas de Craftagem
|
||||||
|
--------------------
|
||||||
|
PAGEBREAK
|
||||||
|
PAGEBREAK
|
||||||
|
Receitas de Craftagem
|
||||||
|
--------------------
|
||||||
|
PAGEBREAK
|
||||||
|
PAGEBREAK
|
||||||
|
Receitas de Craftagem
|
||||||
|
--------------------
|
||||||
|
PAGEBREAK
|
||||||
|
PAGEBREAK
|
||||||
|
Receitas de Craftagem
|
||||||
|
--------------------
|
||||||
|
PAGEBREAK
|
||||||
|
PAGEBREAK
|
||||||
|
Créditos
|
||||||
|
--------------------
|
||||||
|
Electroblob's Wizardry
|
||||||
|
Versão VERSION
|
||||||
|
Para Minecraft MCVERSION
|
||||||
|
|
||||||
|
Projetado, codificado e texturizado por Electroblob
|
||||||
|
|
||||||
|
Agradecimentos a Minecraft Forge e MCP, sem os quais este mod não teria sido possível.
|
||||||
|
|
||||||
|
Obrigado também ao Minecraft modding community, que sempre tem uma resposta aos meus problemas de modificação!
|
||||||
|
|
||||||
|
Em adição, Eu gostaria de agradecer as seguintes pessoas por suas contribuições para o mod:
|
||||||
|
|
||||||
|
Código:
|
||||||
|
|
||||||
|
- Corail31
|
||||||
|
- 12foo
|
||||||
|
- Shadows-of-Fire
|
||||||
|
- HellFirePvP
|
||||||
|
|
||||||
|
Traduções:
|
||||||
|
|
||||||
|
- Russian: VilagVil
|
||||||
|
- Spanish and Mexican Spanish: MadWrist
|
||||||
|
- Chinese: ZHENGLOC and dragon-evol
|
||||||
|
|
||||||
|
Efeito de som do Raio de Relâmpago de OhhWowProductions
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 31 KiB |
@@ -2,10 +2,10 @@
|
|||||||
{
|
{
|
||||||
"modid" : "ebwizardry",
|
"modid" : "ebwizardry",
|
||||||
"name" : "Electroblob's Wizardry",
|
"name" : "Electroblob's Wizardry",
|
||||||
"version" : "4.2.0",
|
"version" : "4.2.3",
|
||||||
"mcversion" : "1.12.2",
|
"mcversion" : "1.12.2",
|
||||||
"url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry",
|
"url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry",
|
||||||
"credits" : "\nDesigned, coded and textured by Electroblob.\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica.\nTranslators: MadWrist (Spanish, Mexican Spanish), VilagVil & kellixon (Russian), Hahdrim (French), lorrampi (Brazilian Portuguese), ZHENGLOC & dragon-evol (Chinese), shejery & rewi_wire (Korean).",
|
"credits" : "\nDesigned, coded and textured by Electroblob.\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica.\nTranslators: MadWrist (Spanish, Mexican Spanish), VilagVil & kellixon (Russian), Hahdrim (French), lorrampi (Brazilian Portuguese), ZHENGLOC & dragon-evol (Chinese), shejery & rewi_wire (Korean), Trozuu (Polish).",
|
||||||
"authorList" : [
|
"authorList" : [
|
||||||
"Electroblob"
|
"Electroblob"
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user