Compare commits

...

57 Commits

Author SHA1 Message Date
Electroblob77 937617d7af Update credits 2020-04-13 22:02:21 +01:00
Electroblob77 94751a6fd5 Remove the debug particle from the divination spell 2020-04-13 21:08:47 +01:00
Electroblob77 01ab50cb27 Make targets dismount whatever they are riding when they get possessed 2020-04-13 21:04:11 +01:00
Electroblob77 d0bcbc8ed8 Let's do this properly, shall we? Fixes #397 2020-04-13 20:53:14 +01:00
Electroblob77 b660b02e0e Fix crash when throwing things with greater telekinesis using commands 2020-04-13 19:10:20 +01:00
Electroblob77 153ea74966 The translators seem to have used exotic characters that require fancy encoding 🤷‍♂️ 2020-04-13 19:07:57 +01:00
Electroblob77 c81830efec Neither of these should be null. I should not have to check they aren't null. But apparently they can be. So I do. Fixes #402. 2020-04-13 19:04:01 +01:00
Electroblob77 6ec2e716cb Register artefact loot tables properly so addon mods can inject loot into them, fixes #403 2020-04-13 19:00:21 +01:00
Electroblob77 96e7c5885b Try to optimise arcane lock rendering, fixes #399 2020-04-13 18:59:07 +01:00
Electroblob77 41d575c9c9 Add config options to disable the screen shake and blink effects
We're all about that accessibility here!
2020-04-13 18:48:30 +01:00
Electroblob77 7f31fc6259 Thanks for warning me, IntelliJ :/ 2020-04-13 18:38:06 +01:00
Electroblob77 817fd26dcf Merge branch '1.12.2' of https://github.com/Electroblob77/Wizardry into 1.12.2 2020-04-13 18:35:40 +01:00
Electroblob 7237840a2a Merge pull request #400 from Hokorizero/1.12.2
Update Simplified Chinese Translation
2020-04-12 16:12:18 +01:00
Clefal 8ad6b5590b Merge branch '1.12.2' into 1.12.2 2020-04-10 14:03:56 +08:00
Hokorizero 1c2c267e1a Update handbook_zh_cn.json 2020-04-10 12:47:00 +08:00
Hokorizero e45bfb9248 Update zh_cn.lang 2020-04-10 12:45:51 +08:00
Clefal 0d48606b51 Merge pull request #4 from Hokorizero/Mineversion
Update zh_cn.lang
2020-04-03 13:21:07 +08:00
Determancer 3c0b65c485 Update zh_cn.lang 2020-04-03 12:15:31 +08:00
Hokorizero 771118afde Merge pull request #2 from Hokorizero/TUsama-patch-2
比对1
2020-04-03 11:49:45 +08:00
Determancer 29b9e0de8b Update zh_cn.lang 2020-04-03 11:45:47 +08:00
Clefal f26f537f50 比对1 2020-04-03 11:40:50 +08:00
Electroblob77 91c9a5392b Make replenish hunger and satiety fill the correct amount of food, and make them say the correct number in their descriptions 2020-03-31 23:16:44 +01:00
Electroblob77 6ae9df1204 Only receive RenderGameOverlayEvent.Post, and only process when it will actually draw something 2020-03-31 23:16:21 +01:00
Electroblob77 d46600ac86 Update version number 2020-03-31 22:06:49 +01:00
Electroblob77 004782a1e4 Update credits 2020-03-31 22:05:00 +01:00
Electroblob77 b2b48cd8a1 Remove old handbook translations 2020-03-31 21:59:02 +01:00
Electroblob77 2277f6b278 Helps if you actually copy the setting over after synchronising it... fixes #395 2020-03-31 21:57:37 +01:00
Electroblob77 ba59d9786f Add null check for grapple target when cast by NPCs, fixes #394 2020-03-31 21:56:20 +01:00
Electroblob77 bdf5aa5b64 Skip spells with missing glyph data and print a warning to the console instead, fixes #384 2020-03-31 21:54:15 +01:00
Electroblob77 a384a57622 Prevent mending enchantment being applied to wizard armour, closes #383 2020-03-31 21:47:53 +01:00
Electroblob77 586840aa53 Add safety checks to prevent itemblocks with invalid metadata turning into invalid blockstates, fixes #382
(Because *some* mod authors are not very careful...)
2020-03-31 21:42:16 +01:00
Electroblob77 1ab674136b Add null check for riding entity to magic slimes, fixes #379 2020-03-31 21:37:38 +01:00
Electroblob 64e7e3844e Merge pull request #391 from rafasoares/patch-1
Make Magic Silk recipe use ore_dict for string
2020-03-31 18:14:12 +01:00
Clefal 51a3d2a63e Update zh_cn.lang 2020-03-30 13:42:27 +08:00
Rafael Soares 7c2e786d0b Remove whitespace changes 2020-03-27 20:53:25 -03:00
Rafael Soares a7ee0ad847 Make Magic Silk recipe use ore_dict for string
Currently, the recipe requires string to be a Vanilla string, which might cause problems in packs with different methods for obtaining strings (eg: Mystical World's Silk Thread from silkworms).

This PR makes it compatible with Ore Dictionary, so the recipe accepts any type of string.
2020-03-27 20:49:51 -03:00
Clefal 033d90ed3e Update zh_cn.lang 2020-03-26 16:39:59 +08:00
Clefal 52214f81cf Update zh_cn.lang 2020-03-25 11:49:38 +08:00
Clefal 516d7948ee Update zh_cn.lang
附魔
2020-03-25 11:21:18 +08:00
Hokorizero 5477725b7e Update zh_cn.lang 2020-03-19 23:08:18 +08:00
Clefal 3dc3a3a378 二次润色,改掉了所有的“咒语”,修改了部分的语法排序 2020-03-19 11:05:59 +08:00
Hokorizero 2456589fa7 Update zh_cn.lang 2020-03-18 17:27:03 +08:00
Hokorizero d7849a94b1 Update zh_cn.lang 2020-03-18 17:13:11 +08:00
Hokorizero cfb9f4fe25 Update zh_cn.lang 2020-03-18 16:47:49 +08:00
Hokorizero a269cf339b Update zh_cn.lang 2020-03-18 16:20:48 +08:00
Hokorizero 1c8e4f86ee Update zh_cn.lang 2020-03-18 15:35:56 +08:00
Hokorizero f2835c245f Update zh_cn.lang 2020-03-18 15:30:49 +08:00
Hokorizero 462512ad30 Update zh_cn.lang 2020-03-18 15:17:43 +08:00
Hokorizero db5a7dcfde Update zh_cn.lang 2020-03-18 15:13:30 +08:00
Hokorizero 17bba5dea8 Update zh_cn.lang 2020-03-18 15:09:18 +08:00
Clefal fbdb5cd844 医命师修改 2020-03-18 14:58:13 +08:00
Hokorizero 393fb1c1b0 Merge pull request #1 from Hokorizero/润色1
润色
2020-03-18 14:56:42 +08:00
Hokorizero 08e89b1aef Update zh_cn.lang 2020-03-18 14:49:55 +08:00
Clefal 1f25d95b1b 润色 2020-03-18 14:48:27 +08:00
Hokorizero 1f3a71797e Update zh_cn.lang 2020-03-18 14:10:51 +08:00
Clefal a821ef2aef 小修改,图片标题,语法润色 2020-03-18 14:07:57 +08:00
Clefal 6845279c49 手册进度→进度 2020-03-18 13:37:24 +08:00
44 changed files with 1509 additions and 1947 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ assignees: ''
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting. Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting.
Minecraft version: 1.12.2 [change as necessary] Minecraft version: 1.12.2 [change as necessary]
Wizardry version: 4.2.10 [change as necessary] Wizardry version: 4.2.11 [change as necessary]
Environment: Singleplayer/LAN game/Server [delete as necessary] Environment: Singleplayer/LAN game/Server [delete as necessary]
Issue details: [describe what you were doing when the issue occurred, what went wrong, what you expected to happen, etc.] Issue details: [describe what you were doing when the issue occurred, what went wrong, what you expected to happen, etc.]
+1 -1
View File
@@ -10,7 +10,7 @@ assignees: ''
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting. Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/CONTRIBUTING.md) before posting.
Minecraft version: 1.12.2 [change as necessary] Minecraft version: 1.12.2 [change as necessary]
Wizardry version: 4.2.10 [change as necessary] Wizardry version: 4.2.11 [change as necessary]
Question details: [explain your question here] Question details: [explain your question here]
+3 -2
View File
@@ -1,7 +1,7 @@
# Credits # Credits
Electroblob's Wizardry Electroblob's Wizardry
Version 4.2.10 Version 4.2.11
For Minecraft 1.12.2 For Minecraft 1.12.2
Designed, coded and textured by Electroblob Designed, coded and textured by Electroblob
@@ -24,6 +24,7 @@ In addition, I'd like to thank the following individuals for their contributions
- UltraHex - UltraHex
- Azim-Palmer - Azim-Palmer
- raoulvdberge - raoulvdberge
- rafasoares
#### Translations #### Translations
@@ -32,7 +33,7 @@ In addition, I'd like to thank the following individuals for their contributions
- Russian: VilagVil, kellixon, bigenergy - Russian: VilagVil, kellixon, bigenergy
- French: Hahdrim - French: Hahdrim
- Brazilian Portuguese: lorrampi - Brazilian Portuguese: lorrampi
- Chinese: ZHENGLOC, dragon-evol, Hokorizero, TUsama - Chinese: ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer
- Korean: shejery, rewi_wire - Korean: shejery, rewi_wire
- Polish: Trozuu - Polish: Trozuu
- German: BirdyDragon - German: BirdyDragon
+1 -1
View File
@@ -1,7 +1,7 @@
Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/guide_for_contributing.md) before posting. Please read the [guide for contributing](https://github.com/Electroblob77/Wizardry/blob/1.12.2/guide_for_contributing.md) before posting.
Minecraft version: 1.12.2 [change as necessary] Minecraft version: 1.12.2 [change as necessary]
Wizardry version: 4.2.10 [change as necessary] Wizardry version: 4.2.11 [change as necessary]
Environment: Singleplayer/LAN game/Server [delete as necessary] Environment: Singleplayer/LAN game/Server [delete as necessary]
Issue details: [describe what you were doing when the issue occurred, what went wrong, what you expected to happen, etc.] Issue details: [describe what you were doing when the issue occurred, what went wrong, what you expected to happen, etc.]
+1 -1
View File
@@ -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.10" // There, it matches semver, happy now? version = "4.2.11" // There, it matches semver, happy now?
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "ElectroblobsWizardry" archivesBaseName = "ElectroblobsWizardry"
@@ -247,6 +247,13 @@ public class CommonProxy {
* @param intensity The amplitude of the shaking (around 10 looks about right) * @param intensity The amplitude of the shaking (around 10 looks about right)
*/ */
public void shakeScreen(EntityPlayer player, float intensity){} public void shakeScreen(EntityPlayer player, float intensity){}
/**
* Loads the given shader for the given player, if they have shaders enabled.
* @param player The player to load the shader for
* @param shader The location of the shader to load
*/
public void loadShader(EntityPlayer player, ResourceLocation shader){}
/** /**
* Gets the client side world using Minecraft.getMinecraft().world. <b>Only to be called client side!</b> Returns * Gets the client side world using Minecraft.getMinecraft().world. <b>Only to be called client side!</b> Returns
@@ -300,6 +300,10 @@ public final class Settings {
public boolean booksPauseGame = true; public boolean booksPauseGame = true;
/** <b>[Client-only]</b> Whether to use custom shaders for certain spells. */ /** <b>[Client-only]</b> Whether to use custom shaders for certain spells. */
public boolean useShaders = true; public boolean useShaders = true;
/** <b>[Client-only]</b> Whether to use the screen shake effect for certain spells. */
public boolean screenShake = true;
/** <b>[Client-only]</b> Whether to use the screen blink effect for teleportation spells. */
public boolean blinkEffect = true;
/** <b>[Client-only]</b> The position of the spell HUD. */ /** <b>[Client-only]</b> The position of the spell HUD. */
public GuiPosition spellHUDPosition = GuiPosition.BOTTOM_LEFT; public GuiPosition spellHUDPosition = GuiPosition.BOTTOM_LEFT;
@@ -878,6 +882,18 @@ public final class Settings {
useShaders = property.getBoolean(); useShaders = property.getBoolean();
propOrder.add(property.getName()); propOrder.add(property.getName());
property = config.get(CLIENT_CATEGORY, "screenShake", true, "Whether to use the screen shake effect for certain spells.");
property.setLanguageKey("config." + Wizardry.MODID + ".screen_shake");
Wizardry.proxy.setToNamedBooleanEntry(property);
screenShake = property.getBoolean();
propOrder.add(property.getName());
property = config.get(CLIENT_CATEGORY, "blinkEffect", true, "Whether to use the screen blink effect for teleportation spells.");
property.setLanguageKey("config." + Wizardry.MODID + ".blink_effect");
Wizardry.proxy.setToNamedBooleanEntry(property);
blinkEffect = property.getBoolean();
propOrder.add(property.getName());
config.setCategoryPropertyOrder(CLIENT_CATEGORY, propOrder); config.setCategoryPropertyOrder(CLIENT_CATEGORY, propOrder);
} }
@@ -1125,7 +1141,7 @@ public final class Settings {
} }
public static boolean containsMetaThing(Pair<ResourceLocation, Short>[] array, ResourceLocation id, short metadata){ public static boolean containsMetaThing(Pair<ResourceLocation, Short>[] array, ResourceLocation id, short metadata){
return Arrays.asList(array).contains(Pair.of(id, metadata)) || Arrays.asList(array).contains(Pair.of(id, OreDictionary.WILDCARD_VALUE)); return Arrays.asList(array).contains(Pair.of(id, metadata)) || Arrays.asList(array).contains(Pair.of(id, (short)OreDictionary.WILDCARD_VALUE));
} }
} }
@@ -64,7 +64,7 @@ public class Wizardry {
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft * 1.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.10"; public static final String VERSION = "4.2.11";
// 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
@@ -107,7 +107,9 @@ public class BlockPedestal extends Block implements ITileEntityProvider {
natural = true; natural = true;
metadata -= ELEMENT.getAllowedValues().size(); metadata -= ELEMENT.getAllowedValues().size();
} }
return this.getDefaultState().withProperty(ELEMENT, Element.values()[metadata]).withProperty(NATURAL, natural); Element element = Element.values()[metadata];
if(!ELEMENT.getAllowedValues().contains(element)) return this.getDefaultState().withProperty(NATURAL, natural);
return this.getDefaultState().withProperty(ELEMENT, element).withProperty(NATURAL, natural);
} }
@Override @Override
@@ -69,7 +69,9 @@ public class BlockRunestone extends Block {
@Override @Override
public IBlockState getStateFromMeta(int metadata){ public IBlockState getStateFromMeta(int metadata){
return this.getDefaultState().withProperty(ELEMENT, Element.values()[metadata]); Element element = Element.values()[metadata];
if(!ELEMENT.getAllowedValues().contains(element)) return this.getDefaultState();
return this.getDefaultState().withProperty(ELEMENT, element);
} }
@Override @Override
@@ -199,6 +199,13 @@ public class ClientProxy extends CommonProxy {
if(Minecraft.getMinecraft().player == player) WizardryClientEventHandler.shakeScreen(intensity); if(Minecraft.getMinecraft().player == player) WizardryClientEventHandler.shakeScreen(intensity);
} }
@Override
public void loadShader(EntityPlayer player, ResourceLocation shader){
if(Minecraft.getMinecraft().player == player && Wizardry.settings.useShaders
&& !Minecraft.getMinecraft().entityRenderer.isShaderActive())
Minecraft.getMinecraft().entityRenderer.loadShader(shader);
}
@Override @Override
public Set<String> getSpellHUDSkins(){ public Set<String> getSpellHUDSkins(){
return GuiSpellDisplay.getSkinKeys(); return GuiSpellDisplay.getSkinKeys();
@@ -553,6 +560,12 @@ public class ClientProxy extends CommonProxy {
data.randomDescriptions = new HashMap<>(); data.randomDescriptions = new HashMap<>();
for(Spell spell : Spell.getAllSpells()){ for(Spell spell : Spell.getAllSpells()){
if(spell.networkID() > message.names.size()){
Wizardry.logger.warn("Received no glyph data for spell {}, skipping", spell.getRegistryName());
continue;
}
// -1 because the none spell isn't included // -1 because the none spell isn't included
// This is a case where we must use the network ID, not the metadata // This is a case where we must use the network ID, not the metadata
data.randomNames.put(spell, message.names.get(spell.networkID() - 1)); data.randomNames.put(spell, message.names.get(spell.networkID() - 1));
@@ -75,13 +75,15 @@ public final class WizardryClientEventHandler {
/** Starts the first-person blink overlay effect. */ /** Starts the first-person blink overlay effect. */
public static void playBlinkEffect(){ public static void playBlinkEffect(){
blinkEffectTimer = BLINK_EFFECT_DURATION; if(Wizardry.settings.blinkEffect) blinkEffectTimer = BLINK_EFFECT_DURATION;
} }
/** Starts the client-side screen shake effect. */ /** Starts the client-side screen shake effect. */
public static void shakeScreen(float intensity){ public static void shakeScreen(float intensity){
screenShakeCounter = (int)(intensity / SHAKINESS); if(Wizardry.settings.screenShake){
Minecraft.getMinecraft().player.rotationPitch -= intensity * 0.5f; // Start halfway down screenShakeCounter = (int)(intensity / SHAKINESS);
Minecraft.getMinecraft().player.rotationPitch -= intensity * 0.5f; // Start halfway down
}
} }
@SubscribeEvent @SubscribeEvent
@@ -89,12 +91,20 @@ public final class WizardryClientEventHandler {
if(event.player == Minecraft.getMinecraft().player && event.phase == TickEvent.Phase.END){ if(event.player == Minecraft.getMinecraft().player && event.phase == TickEvent.Phase.END){
if(blinkEffectTimer > 0) blinkEffectTimer--; if(Wizardry.settings.blinkEffect){
if(blinkEffectTimer > 0) blinkEffectTimer--;
}else{
blinkEffectTimer = 0;
}
if(screenShakeCounter > 0){ if(Wizardry.settings.screenShake){
float magnitude = screenShakeCounter * SHAKINESS; if(screenShakeCounter > 0){
Minecraft.getMinecraft().player.rotationPitch += screenShakeCounter % 2 == 0 ? magnitude : -magnitude; float magnitude = screenShakeCounter * SHAKINESS;
screenShakeCounter--; Minecraft.getMinecraft().player.rotationPitch += screenShakeCounter % 2 == 0 ? magnitude : -magnitude;
screenShakeCounter--;
}
}else{
screenShakeCounter = 0;
} }
// Only seems to work here... // Only seems to work here...
@@ -96,7 +96,10 @@ public class GuiSpellDisplay {
// Normally when extending Gui, you'd have to have an instance to access its methods. However, we're not actually // Normally when extending Gui, you'd have to have an instance to access its methods. However, we're not actually
// using any of them, so this class may as well not bother and just be a static event handler. Neat! // using any of them, so this class may as well not bother and just be a static event handler. Neat!
@SubscribeEvent @SubscribeEvent
public static void draw(RenderGameOverlayEvent event){ public static void draw(RenderGameOverlayEvent.Post event){
if(event.getType() != RenderGameOverlayEvent.ElementType.TEXT
&& event.getType() != RenderGameOverlayEvent.ElementType.HOTBAR) return;
Minecraft mc = Minecraft.getMinecraft(); Minecraft mc = Minecraft.getMinecraft();
@@ -20,9 +20,6 @@ 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 {
@@ -39,36 +36,44 @@ public class RenderArcaneLock {
EntityPlayer player = Minecraft.getMinecraft().player; EntityPlayer player = Minecraft.getMinecraft().player;
World world = Minecraft.getMinecraft().world; World world = Minecraft.getMinecraft().world;
GlStateManager.pushMatrix();
GlStateManager.enableBlend();
boolean lighting = GL11.glIsEnabled(GL11.GL_LIGHTING);
GlStateManager.disableLighting();
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
Vec3d origin = player.getPositionEyes(event.getPartialTicks()); Vec3d origin = player.getPositionEyes(event.getPartialTicks());
GlStateManager.translate(-origin.x, -origin.y + player.getEyeHeight(), -origin.z);
GlStateManager.color(1, 1, 1, 1);
Minecraft.getMinecraft().renderEngine.bindTexture(textures[(player.ticksExisted % (textures.length * 2))/2]);
Tessellator tessellator = Tessellator.getInstance(); Tessellator tessellator = Tessellator.getInstance();
BufferBuilder buffer = tessellator.getBuffer(); BufferBuilder buffer = tessellator.getBuffer();
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
// Someone managed to get a CME here so let's just copy the list to be safe boolean flag = false;
boolean lighting = false;
// Someone managed to get a CME here so let's iterate manually to be safe (don't copy the list, it's expensive!)
// It's only cosmetic so if a tileentity somehow gets removed while we're rendering them it's not a big deal // It's only cosmetic so if a tileentity somehow gets removed while we're rendering them it's not a big deal
List<TileEntity> tileentities = new ArrayList<>(world.loadedTileEntityList); for(int i=0; i<world.loadedTileEntityList.size(); i++){
for(TileEntity tileentity : tileentities){ TileEntity tileentity = world.loadedTileEntityList.get(i);
if(tileentity == null) continue; // What the heck VoxelMap if(tileentity == null) continue; // What the heck VoxelMap
if(tileentity.getDistanceSq(origin.x, origin.y, origin.z) <= tileentity.getMaxRenderDistanceSquared() if(tileentity.getDistanceSq(origin.x, origin.y, origin.z) <= tileentity.getMaxRenderDistanceSquared()
&& tileentity.getTileData().hasUniqueId(ArcaneLock.NBT_KEY)){ && tileentity.getTileData().hasUniqueId(ArcaneLock.NBT_KEY)){
if(!flag){
flag = true;
GlStateManager.pushMatrix();
GlStateManager.enableBlend();
lighting = GL11.glIsEnabled(GL11.GL_LIGHTING);
GlStateManager.disableLighting();
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.translate(-origin.x, -origin.y + player.getEyeHeight(), -origin.z);
GlStateManager.color(1, 1, 1, 1);
Minecraft.getMinecraft().renderEngine.bindTexture(textures[(player.ticksExisted % (textures.length * 2))/2]);
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
}
Vec3d[] vertices = WizardryUtilities.getVertices(world.getBlockState(tileentity.getPos()).getBoundingBox(world, tileentity.getPos()).grow(0.05).offset(tileentity.getPos())); Vec3d[] vertices = WizardryUtilities.getVertices(world.getBlockState(tileentity.getPos()).getBoundingBox(world, tileentity.getPos()).grow(0.05).offset(tileentity.getPos()));
drawFace(buffer, vertices[0], vertices[1], vertices[3], vertices[2], 0, 0, 1, 1); // Bottom drawFace(buffer, vertices[0], vertices[1], vertices[3], vertices[2], 0, 0, 1, 1); // Bottom
@@ -81,15 +86,19 @@ public class RenderArcaneLock {
} }
} }
tessellator.draw(); if(flag){
GlStateManager.disableBlend(); tessellator.draw();
GlStateManager.enableTexture2D();
if (lighting) { GlStateManager.disableBlend();
GlStateManager.enableLighting(); GlStateManager.enableTexture2D();
if(lighting){
GlStateManager.enableLighting();
}
GlStateManager.disableRescaleNormal();
GlStateManager.popMatrix();
} }
GlStateManager.disableRescaleNormal();
GlStateManager.popMatrix();
} }
private static void drawFace(BufferBuilder buffer, Vec3d topLeft, Vec3d topRight, Vec3d bottomLeft, Vec3d bottomRight, float u1, float v1, float u2, float v2){ private static void drawFace(BufferBuilder buffer, Vec3d topLeft, Vec3d topRight, Vec3d bottomLeft, Vec3d bottomRight, float u1, float v1, float u2, float v2){
@@ -120,8 +120,10 @@ public class EntityMagicSlime extends EntitySlime implements ISummonedCreature {
&& ((EntityLivingBase)this.getRidingEntity()).getHealth() > 0){ && ((EntityLivingBase)this.getRidingEntity()).getHealth() > 0){
if(this.ticksExisted % 16 == 1){ if(this.ticksExisted % 16 == 1){
this.getRidingEntity().attackEntityFrom(DamageSource.MAGIC, 1); this.getRidingEntity().attackEntityFrom(DamageSource.MAGIC, 1);
((EntityLivingBase)this.getRidingEntity()) if(this.getRidingEntity() != null){ // Some mobs force-dismount when attacked (normally when dying)
.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 20, 2)); ((EntityLivingBase)this.getRidingEntity())
.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 20, 2));
}
this.playSound(WizardrySounds.ENTITY_MAGIC_SLIME_ATTACK, 1.0f, 1.0f); this.playSound(WizardrySounds.ENTITY_MAGIC_SLIME_ATTACK, 1.0f, 1.0f);
this.squishAmount = 0.5F; this.squishAmount = 0.5F;
} }
@@ -13,6 +13,8 @@ import electroblob.wizardry.registry.WizardryRecipes;
import electroblob.wizardry.registry.WizardryTabs; import electroblob.wizardry.registry.WizardryTabs;
import electroblob.wizardry.util.SpellModifiers; import electroblob.wizardry.util.SpellModifiers;
import electroblob.wizardry.util.WizardryUtilities; import electroblob.wizardry.util.WizardryUtilities;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentMending;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
@@ -194,7 +196,13 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
public boolean getIsRepairable(ItemStack stack, ItemStack material){ public boolean getIsRepairable(ItemStack stack, ItemStack material){
return false; return false;
} }
// This is misleadingly-named, it also applies to enchanting with books at an anvil
@Override
public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment){
return !(enchantment instanceof EnchantmentMending) && super.canApplyAtEnchantingTable(stack, enchantment);
}
/** /**
* Properly handles the defence value of the armour. This method is responsible for the tooltip on top of * Properly handles the defence value of the armour. This method is responsible for the tooltip on top of
* the armour value. It is also what handles armour toughness. * the armour value. It is also what handles armour toughness.
@@ -31,6 +31,7 @@ public class PacketSyncSettings implements IMessageHandler<Message, IMessage> {
Wizardry.settings.discoveryMode = message.settings.discoveryMode; Wizardry.settings.discoveryMode = message.settings.discoveryMode;
Wizardry.settings.creativeBypassesArcaneLock = message.settings.creativeBypassesArcaneLock; Wizardry.settings.creativeBypassesArcaneLock = message.settings.creativeBypassesArcaneLock;
Wizardry.settings.slowTimeAffectsPlayers = message.settings.slowTimeAffectsPlayers; Wizardry.settings.slowTimeAffectsPlayers = message.settings.slowTimeAffectsPlayers;
Wizardry.settings.replaceVanillaFireballs = message.settings.replaceVanillaFireballs;
Wizardry.settings.forfeitChance = message.settings.forfeitChance; Wizardry.settings.forfeitChance = message.settings.forfeitChance;
} }
@@ -172,9 +172,9 @@ public class PotionSlowTime extends PotionMagicEffect implements ISyncedPotion {
@SubscribeEvent @SubscribeEvent
public static void onPotionAddedEvent(PotionEvent.PotionAddedEvent event){ public static void onPotionAddedEvent(PotionEvent.PotionAddedEvent event){
if(event.getEntity().world.isRemote && event.getPotionEffect().getPotion() == WizardryPotions.slow_time if(event.getEntity().world.isRemote && event.getPotionEffect().getPotion() == WizardryPotions.slow_time
&& event.getEntity() == net.minecraft.client.Minecraft.getMinecraft().player){ && event.getEntity() instanceof EntityPlayer){
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SlowTime.SHADER); Wizardry.proxy.loadShader((EntityPlayer)event.getEntity(), SlowTime.SHADER);
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); Wizardry.proxy.playBlinkEffect((EntityPlayer)event.getEntity());
} }
} }
@@ -67,6 +67,9 @@ public final class WizardryLoot {
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/wizard_armour")); LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/wizard_armour"));
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/arcane_tomes")); LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/arcane_tomes"));
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/wand_upgrades")); LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/wand_upgrades"));
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/uncommon_artefacts"));
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/rare_artefacts"));
LootTableList.register(new ResourceLocation(Wizardry.MODID, "subsets/epic_artefacts"));
LootTableList.register(new ResourceLocation(Wizardry.MODID, "entities/evil_wizard")); LootTableList.register(new ResourceLocation(Wizardry.MODID, "entities/evil_wizard"));
LootTableList.register(new ResourceLocation(Wizardry.MODID, "entities/mob_additions")); LootTableList.register(new ResourceLocation(Wizardry.MODID, "entities/mob_additions"));
@@ -91,9 +91,6 @@ public class Divination extends Spell {
(float)(target.getY() + 0.5 - (caster.getEntityBoundingBox().minY + caster.getEyeHeight())), (float)(target.getY() + 0.5 - (caster.getEntityBoundingBox().minY + caster.getEyeHeight())),
(float)(target.getZ() + 0.5 - caster.posZ)); (float)(target.getZ() + 0.5 - caster.posZ));
if(world.isRemote) ParticleBuilder.create(ParticleBuilder.Type.SPARKLE).pos(target.getX() + 0.5,
target.getY() + 1.5, target.getZ() + 0.5).spawn(world);
strength = Strength.forWeight(calculateWeight(world, caster, target, range, modifiers)); strength = Strength.forWeight(calculateWeight(world, caster, target, range, modifiers));
} }
@@ -210,6 +210,8 @@ public class Grapple extends Spell {
@Override @Override
public boolean cast(World world, EntityLiving caster, EnumHand hand, int ticksInUse, EntityLivingBase target, SpellModifiers modifiers){ public boolean cast(World world, EntityLiving caster, EnumHand hand, int ticksInUse, EntityLivingBase target, SpellModifiers modifiers){
if(target == null) return false;
Vec3d origin = new Vec3d(caster.posX, caster.getEntityBoundingBox().minY + caster.getEyeHeight(), caster.posZ); Vec3d origin = new Vec3d(caster.posX, caster.getEntityBoundingBox().minY + caster.getEyeHeight(), caster.posZ);
// If the target is an entity, we need to use the entity's centre rather than the original hit position // If the target is an entity, we need to use the entity's centre rather than the original hit position
@@ -18,6 +18,7 @@ import net.minecraft.item.EnumAction;
import net.minecraft.network.play.server.SPacketEntityVelocity; import net.minecraft.network.play.server.SPacketEntityVelocity;
import net.minecraft.tileentity.TileEntityDispenser; import net.minecraft.tileentity.TileEntityDispenser;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
@@ -86,7 +87,8 @@ public class GreaterTelekinesis extends SpellRay {
Vec3d look = caster.getLookVec().scale(getProperty(THROW_VELOCITY).floatValue() * modifiers.get(WizardryItems.range_upgrade)); Vec3d look = caster.getLookVec().scale(getProperty(THROW_VELOCITY).floatValue() * modifiers.get(WizardryItems.range_upgrade));
target.addVelocity(look.x, look.y, look.z); target.addVelocity(look.x, look.y, look.z);
if(caster instanceof EntityPlayer) caster.swingArm(caster.getActiveHand()); // No IntelliJ, it's not always false, that's not how polymorphism works
if(caster instanceof EntityPlayer) caster.swingArm(caster.getActiveHand() == null ? EnumHand.MAIN_HAND : caster.getActiveHand());
}else{ }else{
@@ -212,6 +212,7 @@ public class Possession extends SpellRay {
possessor.eyeHeight = target.getEyeHeight(); possessor.eyeHeight = target.getEyeHeight();
setSize(possessor, target.width, target.height); setSize(possessor, target.width, target.height);
target.dismountRidingEntity();
target.setDead(); target.setDead();
target.setNoAI(true); target.setNoAI(true);
target.setAttackTarget(null); target.setAttackTarget(null);
@@ -251,10 +252,10 @@ public class Possession extends SpellRay {
} }
} }
if(possessor.world.isRemote && possessor == net.minecraft.client.Minecraft.getMinecraft().player){ if(possessor.world.isRemote){
// Shaders and effects // Shaders and effects
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER); Wizardry.proxy.loadShader(possessor, SHADER);
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); // Looks quite nice... Wizardry.proxy.playBlinkEffect(possessor);
}else{ }else{
@@ -348,7 +349,7 @@ public class Possession extends SpellRay {
if(player.world.isRemote && player == net.minecraft.client.Minecraft.getMinecraft().player){ 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... Wizardry.proxy.playBlinkEffect(player);
} }
for(IAttribute attribute : INHERITED_ATTRIBUTES.keySet()){ for(IAttribute attribute : INHERITED_ATTRIBUTES.keySet()){
@@ -399,9 +400,7 @@ public class Possession extends SpellRay {
if(player.world.isRemote){ if(player.world.isRemote){
ParticleBuilder.create(Type.DARK_MAGIC, player).clr(0.1f, 0, 0.3f).spawn(player.world); ParticleBuilder.create(Type.DARK_MAGIC, player).clr(0.1f, 0, 0.3f).spawn(player.world);
// TODO: This (and a few other similar uses) needs ClientProxy-ing. Wizardry.proxy.loadShader(player, SHADER);
if(!net.minecraft.client.Minecraft.getMinecraft().entityRenderer.isShaderActive())
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER);
} }
}else{ }else{
@@ -39,9 +39,9 @@ public class SixthSense extends Spell {
(int)(getProperty(EFFECT_DURATION).floatValue() * modifiers.get(WizardryItems.duration_upgrade)), (int)(getProperty(EFFECT_DURATION).floatValue() * modifiers.get(WizardryItems.duration_upgrade)),
(int)((modifiers.get(WizardryItems.range_upgrade) - 1f) / Constants.RANGE_INCREASE_PER_LEVEL))); (int)((modifiers.get(WizardryItems.range_upgrade) - 1f) / Constants.RANGE_INCREASE_PER_LEVEL)));
if(world.isRemote && caster == net.minecraft.client.Minecraft.getMinecraft().player){ if(world.isRemote){
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER); Wizardry.proxy.loadShader(caster, SHADER);
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); Wizardry.proxy.playBlinkEffect(caster);
} }
this.playSound(world, caster, ticksInUse, -1, modifiers); this.playSound(world, caster, ticksInUse, -1, modifiers);
@@ -51,9 +51,9 @@ public class SixthSense extends Spell {
@SubscribeEvent @SubscribeEvent
public static void onPotionAddedEvent(PotionEvent.PotionAddedEvent event){ public static void onPotionAddedEvent(PotionEvent.PotionAddedEvent event){
if(event.getEntity().world.isRemote && event.getPotionEffect().getPotion() == WizardryPotions.sixth_sense if(event.getEntity().world.isRemote && event.getPotionEffect().getPotion() == WizardryPotions.sixth_sense
&& event.getEntity() == net.minecraft.client.Minecraft.getMinecraft().player){ && event.getEntity() instanceof EntityPlayer){
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER); Wizardry.proxy.loadShader((EntityPlayer)event.getEntity(), SHADER);
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); Wizardry.proxy.playBlinkEffect((EntityPlayer)event.getEntity());
} }
} }
@@ -24,8 +24,8 @@ public class SlowTime extends SpellBuff {
@Override @Override
public boolean cast(World world, EntityPlayer caster, EnumHand hand, int ticksInUse, SpellModifiers modifiers){ public boolean cast(World world, EntityPlayer caster, EnumHand hand, int ticksInUse, SpellModifiers modifiers){
if(caster.world.isRemote && caster == net.minecraft.client.Minecraft.getMinecraft().player){ if(caster.world.isRemote){
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER); Wizardry.proxy.loadShader(caster, SHADER);
} }
return super.cast(world, caster, hand, ticksInUse, modifiers); return super.cast(world, caster, hand, ticksInUse, modifiers);
@@ -38,9 +38,9 @@ public class Transience extends Spell {
@Override @Override
public boolean cast(World world, EntityPlayer caster, EnumHand hand, int ticksInUse, SpellModifiers modifiers){ public boolean cast(World world, EntityPlayer caster, EnumHand hand, int ticksInUse, SpellModifiers modifiers){
if(world.isRemote && caster == net.minecraft.client.Minecraft.getMinecraft().player){ if(world.isRemote){
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER); Wizardry.proxy.loadShader(caster, SHADER);
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); Wizardry.proxy.playBlinkEffect(caster);
} }
if(!caster.isPotionActive(WizardryPotions.transience)){ if(!caster.isPotionActive(WizardryPotions.transience)){
@@ -87,9 +87,9 @@ public class Transience extends Spell {
@SubscribeEvent @SubscribeEvent
public static void onPotionAddedEvent(PotionEvent.PotionAddedEvent event){ public static void onPotionAddedEvent(PotionEvent.PotionAddedEvent event){
if(event.getEntity().world.isRemote && event.getPotionEffect().getPotion() == WizardryPotions.transience if(event.getEntity().world.isRemote && event.getPotionEffect().getPotion() == WizardryPotions.transience
&& event.getEntity() == net.minecraft.client.Minecraft.getMinecraft().player){ && event.getEntity() instanceof EntityPlayer){
if(Wizardry.settings.useShaders) net.minecraft.client.Minecraft.getMinecraft().entityRenderer.loadShader(SHADER); Wizardry.proxy.loadShader((EntityPlayer)event.getEntity(), SHADER);
electroblob.wizardry.client.WizardryClientEventHandler.playBlinkEffect(); Wizardry.proxy.playBlinkEffect((EntityPlayer)event.getEntity());
} }
} }
@@ -635,7 +635,7 @@ public final class WizardryUtilities {
// This is a perfect example of where you need to use .equals() and not ==. For most applications, // This is a perfect example of where you need to use .equals() and not ==. For most applications,
// this was unnoticeable until world reload because the UUID instance or entity instance is stored. // this was unnoticeable until world reload because the UUID instance or entity instance is stored.
// Fixed now though. // Fixed now though.
if(entity.getUniqueID().equals(id)){ if(entity != null && entity.getUniqueID() != null && entity.getUniqueID().equals(id)){
return entity; return entity;
} }
} }
@@ -836,7 +836,7 @@ spell.ebwizardry\:poison_bomb.desc=Schießt eine Giftbombe in die Richtung, in d
spell.ebwizardry\:possession.desc="Werde dein Feind." spell.ebwizardry\:possession.desc="Werde dein Feind."
spell.ebwizardry\:ray_of_purification.desc=Sendet einen blendenden Lichtstrahl aus, der seine Ziele verletzt und blendet. Untote Kreaturen erleiden doppelten Schaden und werden in Brand gesteckt. spell.ebwizardry\:ray_of_purification.desc=Sendet einen blendenden Lichtstrahl aus, der seine Ziele verletzt und blendet. Untote Kreaturen erleiden doppelten Schaden und werden in Brand gesteckt.
spell.ebwizardry\:remove_curse.desc=Entfernt alle Flüche, die den Magier derzeit betreffen. spell.ebwizardry\:remove_curse.desc=Entfernt alle Flüche, die den Magier derzeit betreffen.
spell.ebwizardry\:replenish_hunger.desc=Füllt den Hungerbalken des Magiers um 4 Hungerpunkte auf. spell.ebwizardry\:replenish_hunger.desc=Füllt den Hungerbalken des Magiers um 3 Hungerpunkte auf.
spell.ebwizardry\:resurrection.desc=Mit einem Meisterheiler an Ihrer Seite, ist tot zu sein... optional. spell.ebwizardry\:resurrection.desc=Mit einem Meisterheiler an Ihrer Seite, ist tot zu sein... optional.
spell.ebwizardry\:reversal.desc=Entfernt einen zufälligen negativen Trankeffekt und fügt ihn dem Ziel zu, das diesen Effekt für die verbleibende Dauer erleiden wird. Die Stufe erhöht die Anzahl der Effekte, die umgekehrt werden. spell.ebwizardry\:reversal.desc=Entfernt einen zufälligen negativen Trankeffekt und fügt ihn dem Ziel zu, das diesen Effekt für die verbleibende Dauer erleiden wird. Die Stufe erhöht die Anzahl der Effekte, die umgekehrt werden.
spell.ebwizardry\:ring_of_fire.desc=Erzeugt einen Feuerring um den Magier, der alle Feinde in der Nähe schädigt und sie in Brand setzt. spell.ebwizardry\:ring_of_fire.desc=Erzeugt einen Feuerring um den Magier, der alle Feinde in der Nähe schädigt und sie in Brand setzt.
@@ -843,7 +843,7 @@ spell.ebwizardry\:poison_bomb.desc=Lanches a poison bomb in the direction you ar
spell.ebwizardry\:possession.desc="Become thy enemy." spell.ebwizardry\:possession.desc="Become thy enemy."
spell.ebwizardry\:ray_of_purification.desc=Emits a ray of blinding light that damages and blinds its targets. Undead creatures take double damage and are set on fire. spell.ebwizardry\:ray_of_purification.desc=Emits a ray of blinding light that damages and blinds its targets. Undead creatures take double damage and are set on fire.
spell.ebwizardry\:remove_curse.desc=Removes any curse currently affecting the caster. spell.ebwizardry\:remove_curse.desc=Removes any curse currently affecting the caster.
spell.ebwizardry\:replenish_hunger.desc=Replenishes the caster's food level by 4 hunger points. spell.ebwizardry\:replenish_hunger.desc=Replenishes the caster's food level by 3 hunger points.
spell.ebwizardry\:resurrection.desc=With a master healer by your side, being dead is... optional. spell.ebwizardry\:resurrection.desc=With a master healer by your side, being dead is... optional.
spell.ebwizardry\:reversal.desc=Removes a random negative potion effect and inflicts it upon the target, which will suffer that effect for the remaining duration. Potency increases the number of effects that are reversed. spell.ebwizardry\:reversal.desc=Removes a random negative potion effect and inflicts it upon the target, which will suffer that effect for the remaining duration. Potency increases the number of effects that are reversed.
spell.ebwizardry\:ring_of_fire.desc=Creates a ring of fire around the caster, damaging all nearby enemies and setting them on fire. spell.ebwizardry\:ring_of_fire.desc=Creates a ring of fire around the caster, damaging all nearby enemies and setting them on fire.
@@ -1234,6 +1234,10 @@ config.ebwizardry.use_shaders=Use Custom Shaders
config.ebwizardry.use_shaders.tooltip=Whether to use custom shaders for certain spells. These use the vanilla shader system (like mob spectating shaders) and shouldn't have much of an effect on performance in most cases, but they may conflict with other shaders. config.ebwizardry.use_shaders.tooltip=Whether to use custom shaders for certain spells. These use the vanilla shader system (like mob spectating shaders) and shouldn't have much of an effect on performance in most cases, but they may conflict with other shaders.
config.ebwizardry.use_shaders.true=Yes - gimme those sweet shaders! config.ebwizardry.use_shaders.true=Yes - gimme those sweet shaders!
config.ebwizardry.use_shaders.false=No - I'm running this on a potato config.ebwizardry.use_shaders.false=No - I'm running this on a potato
config.ebwizardry.screen_shake=Screen Shake
config.ebwizardry.screen_shake.tooltip=Whether to use the screen shake effect for certain spells.
config.ebwizardry.blink_effect=Blink Effect
config.ebwizardry.blink_effect.tooltip=Whether to use the screen blink effect for teleportation spells.
config.ebwizardry.category.commands=Command Settings config.ebwizardry.category.commands=Command Settings
config.ebwizardry.category.commands.tooltip=Configure wizardry's commands config.ebwizardry.category.commands.tooltip=Configure wizardry's commands
@@ -843,7 +843,7 @@ spell.ebwizardry\:poison_bomb.desc=Lanches a poison bomb in the direction you ar
spell.ebwizardry\:possession.desc="Become thy enemy." spell.ebwizardry\:possession.desc="Become thy enemy."
spell.ebwizardry\:ray_of_purification.desc=Emits a ray of blinding light that damages and blinds its targets. Undead creatures take double damage and are set on fire. spell.ebwizardry\:ray_of_purification.desc=Emits a ray of blinding light that damages and blinds its targets. Undead creatures take double damage and are set on fire.
spell.ebwizardry\:remove_curse.desc=Removes any curse currently affecting the caster. spell.ebwizardry\:remove_curse.desc=Removes any curse currently affecting the caster.
spell.ebwizardry\:replenish_hunger.desc=Replenishes the caster's food level by 4 hunger points. spell.ebwizardry\:replenish_hunger.desc=Replenishes the caster's food level by 3 hunger points.
spell.ebwizardry\:resurrection.desc=With a master healer by your side, being dead is... optional. spell.ebwizardry\:resurrection.desc=With a master healer by your side, being dead is... optional.
spell.ebwizardry\:reversal.desc=Removes a random negative potion effect and inflicts it upon the target, which will suffer that effect for the remaining duration. Potency increases the number of effects that are reversed. spell.ebwizardry\:reversal.desc=Removes a random negative potion effect and inflicts it upon the target, which will suffer that effect for the remaining duration. Potency increases the number of effects that are reversed.
spell.ebwizardry\:ring_of_fire.desc=Creates a ring of fire around the caster, damaging all nearby enemies and setting them on fire. spell.ebwizardry\:ring_of_fire.desc=Creates a ring of fire around the caster, damaging all nearby enemies and setting them on fire.
@@ -1234,6 +1234,10 @@ config.ebwizardry.use_shaders=Use Custom Shaders
config.ebwizardry.use_shaders.tooltip=Whether to use custom shaders for certain spells. These use the vanilla shader system (like mob spectating shaders) and shouldn't have much of an effect on performance in most cases, but they may conflict with other shaders. config.ebwizardry.use_shaders.tooltip=Whether to use custom shaders for certain spells. These use the vanilla shader system (like mob spectating shaders) and shouldn't have much of an effect on performance in most cases, but they may conflict with other shaders.
config.ebwizardry.use_shaders.true=Yes - gimme those sweet shaders! config.ebwizardry.use_shaders.true=Yes - gimme those sweet shaders!
config.ebwizardry.use_shaders.false=No - I'm running this on a potato config.ebwizardry.use_shaders.false=No - I'm running this on a potato
config.ebwizardry.screen_shake=Screen Shake
config.ebwizardry.screen_shake.tooltip=Whether to use the screen shake effect for certain spells.
config.ebwizardry.blink_effect=Blink Effect
config.ebwizardry.blink_effect.tooltip=Whether to use the screen blink effect for teleportation spells.
config.ebwizardry.category.commands=Command Settings config.ebwizardry.category.commands=Command Settings
config.ebwizardry.category.commands.tooltip=Configure wizardry's commands config.ebwizardry.category.commands.tooltip=Configure wizardry's commands
@@ -837,7 +837,7 @@ spell.ebwizardry\:poison_bomb.desc=Wystrzeliwuje trującą bombę w pożądanym
spell.ebwizardry\:possession.desc="Zostań swoim wrogiem." spell.ebwizardry\:possession.desc="Zostań swoim wrogiem."
spell.ebwizardry\:ray_of_purification.desc=Emituje promień oślepiającego światła, który uszkadza i oślepia cele. Nieumarłe stworzenia otrzymują podwójne obrażenia i zostają podpalone. spell.ebwizardry\:ray_of_purification.desc=Emituje promień oślepiającego światła, który uszkadza i oślepia cele. Nieumarłe stworzenia otrzymują podwójne obrażenia i zostają podpalone.
spell.ebwizardry\:remove_curse.desc=Usuwa wszelkie klątwy, które dzierży rzucający. spell.ebwizardry\:remove_curse.desc=Usuwa wszelkie klątwy, które dzierży rzucający.
spell.ebwizardry\:replenish_hunger.desc=Uzupełnia poziom głodu rzucającego o 4 punkty. spell.ebwizardry\:replenish_hunger.desc=Uzupełnia poziom głodu rzucającego o 3 punkty.
spell.ebwizardry\:resurrection.desc=U boku głównego uzdrowiciela jest martwe... opcjonalne. spell.ebwizardry\:resurrection.desc=U boku głównego uzdrowiciela jest martwe... opcjonalne.
spell.ebwizardry\:reversal.desc=Usuwa losowy zły efekt mikstury i przekazuje go celowi, który odczuje ten efekt przez pozostały czas. Potencja zwiększa liczbę odwróconych efektów. spell.ebwizardry\:reversal.desc=Usuwa losowy zły efekt mikstury i przekazuje go celowi, który odczuje ten efekt przez pozostały czas. Potencja zwiększa liczbę odwróconych efektów.
spell.ebwizardry\:ring_of_fire.desc=Tworzy pierścień ognia wokół rzucającego, uszkadzając wszystkich pobliskich wrogów i podpalając ich. spell.ebwizardry\:ring_of_fire.desc=Tworzy pierścień ognia wokół rzucającego, uszkadzając wszystkich pobliskich wrogów i podpalając ich.
File diff suppressed because it is too large Load Diff
@@ -837,7 +837,7 @@ spell.ebwizardry\:poison_bomb.desc=朝你所指的方向發射一顆毒液炸彈
spell.ebwizardry\:possession.desc=『變成敵人!』 spell.ebwizardry\:possession.desc=『變成敵人!』
spell.ebwizardry\:ray_of_purification.desc=射出一道刺眼的陽光,傷害目標並使其暫時失明。不死生物會受到兩倍的傷害且著火。 spell.ebwizardry\:ray_of_purification.desc=射出一道刺眼的陽光,傷害目標並使其暫時失明。不死生物會受到兩倍的傷害且著火。
spell.ebwizardry\:remove_curse.desc=驅除施法者身上所有的詛咒。 spell.ebwizardry\:remove_curse.desc=驅除施法者身上所有的詛咒。
spell.ebwizardry\:replenish_hunger.desc=為施法者補充4點(2支雞腿)的飽食度。 spell.ebwizardry\:replenish_hunger.desc=為施法者補充6點(3支雞腿)的飽食度。
spell.ebwizardry\:resurrection.desc=身邊有個治療大師,就算死了...也沒關係。 spell.ebwizardry\:resurrection.desc=身邊有個治療大師,就算死了...也沒關係。
spell.ebwizardry\:reversal.desc=隨機移除一種負面的藥水效果,將其加諸在目標身上,持續原本剩餘的效果時間。潛能可增加逆轉的效果數量。 spell.ebwizardry\:reversal.desc=隨機移除一種負面的藥水效果,將其加諸在目標身上,持續原本剩餘的效果時間。潛能可增加逆轉的效果數量。
spell.ebwizardry\:ring_of_fire.desc=在施法者四周製造一個火焰圈,傷害所有靠近的敵人並使它們著火。 spell.ebwizardry\:ring_of_fire.desc=在施法者四周製造一個火焰圈,傷害所有靠近的敵人並使它們著火。
@@ -7,7 +7,8 @@
], ],
"key": { "key": {
"x": { "x": {
"item": "minecraft:string" "type": "forge:ore_dict",
"ore": "string"
}, },
"y": [ "y": [
{ {
@@ -48,4 +49,4 @@
"item": "ebwizardry:magic_silk", "item": "ebwizardry:magic_silk",
"count": 2 "count": 2
} }
} }
@@ -17,7 +17,7 @@
"chargeup": 0, "chargeup": 0,
"cooldown": 30, "cooldown": 30,
"base_properties": { "base_properties": {
"hunger_points": 3, "hunger_points": 6,
"saturation_modifier": 0.1 "saturation_modifier": 0.1
} }
} }
@@ -17,7 +17,7 @@
"chargeup": 0, "chargeup": 0,
"cooldown": 50, "cooldown": 50,
"base_properties": { "base_properties": {
"hunger_points": 8, "hunger_points": 16,
"saturation_modifier": 0.1 "saturation_modifier": 0.1
} }
} }
@@ -732,11 +732,11 @@
"Code:", "Code:",
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica", "- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica \n- UltraHex \n- Azim-Palmer \n- raoulvdberge \n- rafasoares",
"Translations:", "Translations:",
"- Spanish: MadWrist, Alsentar \n- Mexican Spanish: MadWrist \n- Russian: VilagVil, kellixon, bigenergy \n- French: Hahdrim \n- Brazilian Portuguese: lorrampi \n- Chinese: ZHENGLOC, dragon-evol, Hokorizero, TUsama \n- Korean: shejery, rewi_wire \n- Polish: Trozuu \n-German: BirdyDragon", "- Spanish: MadWrist, Alsentar \n- Mexican Spanish: MadWrist \n- Russian: VilagVil, kellixon, bigenergy \n- French: Hahdrim \n- Brazilian Portuguese: lorrampi \n- Chinese: ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Korean: shejery, rewi_wire \n- Polish: Trozuu \n-German: BirdyDragon \n-Taiwanese: chesterccj305",
"Lightning ray sound effect from OhhWowProductions", "Lightning ray sound effect from OhhWowProductions",
@@ -732,11 +732,11 @@
"Code:", "Code:",
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica", "- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica \n- UltraHex \n- Azim-Palmer \n- raoulvdberge \n- rafasoares",
"Translations:", "Translations:",
"- Spanish: MadWrist, Alsentar \n- Mexican Spanish: MadWrist \n- Russian: VilagVil, kellixon, bigenergy \n- French: Hahdrim \n- Brazilian Portuguese: lorrampi \n- Chinese: ZHENGLOC, dragon-evol, Hokorizero, TUsama \n- Korean: shejery, rewi_wire \n- Polish: Trozuu \n-German: BirdyDragon", "- Spanish: MadWrist, Alsentar \n- Mexican Spanish: MadWrist \n- Russian: VilagVil, kellixon, bigenergy \n- French: Hahdrim \n- Brazilian Portuguese: lorrampi \n- Chinese: ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Korean: shejery, rewi_wire \n- Polish: Trozuu \n-German: BirdyDragon \n-Taiwanese: chesterccj305",
"Lightning ray sound effect from OhhWowProductions", "Lightning ray sound effect from OhhWowProductions",
@@ -732,11 +732,11 @@
"Codigo:", "Codigo:",
"- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica", "- Corail31 \n- 12foo \n- Shadows-of-Fire \n- HellFirePvP \n- Tora-B \n- Avatair \n- Aeronica \n- UltraHex \n- Azim-Palmer \n- raoulvdberge \n- rafasoares",
"Traducciones:", "Traducciones:",
"- Español: MadWrist, Alsentar \n- Español de Mexico: MadWrist \n- Ruso: VilagVil, kellixon, bigenergy \n- Frances: Hahdrim \n- Portuges Brasileño: lorrampi \n- Chino: ZHENGLOC, dragon-evol, Hokorizero, TUsama \n- Koreano: shejery, rewi_wire \n- Polaco: Trozuu, \nAlemán: BirdyDragon", "- Español: MadWrist, Alsentar \n- Español de Mexico: MadWrist \n- Ruso: VilagVil, kellixon, bigenergy \n- Frances: Hahdrim \n- Portuges Brasileño: lorrampi \n- Chino: ZHENGLOC, dragon-evol, Hokorizero, TUsama, Determancer \n- Koreano: shejery, rewi_wire \n- Polaco: Trozuu, \nAlemán: BirdyDragon",
"Efecto de sonido para los relámpagos por OhhWowProductions", "Efecto de sonido para los relámpagos por OhhWowProductions",
@@ -1,319 +0,0 @@
PAGEBREAK
LINEBREAK
El Manual del Mago
Por Electroblob
PAGEBREAK
Introduccion
--------------------
Saludos, mago! Este libro explica las diferentes formas de lo arcano y como
usarlas.
Si alguna vez pierde este libro, lo puede volver a fabricar con un libro y un cristal magico.
PAGEBREAK
Contents
--------------------
PAGEBREAK
SECTION Comenzando
Comenzando
--------------------
Para iniciar con Wizardry, necesitaras algunas cosas:
- Una varita magica, crafteada con una pepita de oro, un palo y un cristal magico.
- Una Mesa de Trabajo Arcana, crafteada con 3 piedras, 1 bloque de lapis lazuli,
2 cristales magicos, 2 pepitas de oro y 1 alfombra morada.
- Un libro de hechizos. Estos pueden ser encontrados en cofres, arrojados como botin,
comprados a magos, o puedes hacer el hechizo del aprendiz, Misil Magico, con un
libro y 4 cristales magicos.
Tambien necesitaras un monton de cristales magicos para suplir tu varita con mana.
PAGEBREAK
SECTION Mana
Mana
--------------------
Mana es la energia arcana que le da a los magos sus poderes. Se manifiesta en cristales que aparecen naturalmente, los cuales aparecen incrustados bajo roca. Las varitas almacenan mana dentro de ellas, y este mana es canalizado en los hechizos que tu lanzas. Cada hechizo cuesta una cantidad diferente de mana, dependiendo de que tan
poderosos sean y que tanto duran.
Coloca tu raton sobre una varita para ver la cantidad de mana que tiene.
IMAGE CRYSTAL
LINEBREAK
Mena
de Cristal Magico Cristal
PAGEBREAK
SECTION Varitas
Varitas
--------------------
La varita es la herramienta de eleccion de un mago. Con ella, puedes lanzar cualquier
hechizo, solo si la varita contiene dicho poder (ver Nivel de varitas para entender mejor).
Las varitas vienen en variedades diferentes, es muy probable que empieces con la varita magica
basica.
Cuando tienes una varita en tu mano, aparecera una pequena ventana en el esquina de la
pantalla. Esto indica el hechizo que esta seleccionado actualmente con una representacion
de este, y, si el hechizo ha sido lanzado, una barra con el tiempo de reactivacion para que
el hechizo pueda volcver a ser lanzado de nuevo.
PAGEBREAK
SECTION Hechizos
Hechizos
--------------------
Una varita es inservible sin hechizos que lanzar. Los hechizos estan guardados en dos
formas: en libros, los cuales son permanentes, y en pergaminos, que son temporales.
Los libros de hechizos son poco utiles ellos solos, por eso se suele ligar el hechizo
que contienen a las varitas. Los libros de hechizos pueden ser encontrados por todo el
mundo. Cuando encuentres uno, puedes colocar el raton sobre el libro para ver su informacion.
Tambien puede hacer clic derecho mientras lo tiene en su mano para ver mas informacion.
Pergaminos, por otro lado, sirven un proposito diferente: hacer clic derecho con
el en la mano, lanzara el hechizo que tenga ligado a el, destruyendo el papel en el
proceso. Como los libros, los hechizos pueden ser encontrados por todo el mundo, pero
tambien puedes hacerlos tu mismo al craftear un pergamino vacio con papel y un poco de
hilo. Puedes ligarle un hechizo usando una Mesa de Trabajo Arcana, pero solo si ya conoces
dicho hechizo. Hacer esto consumira un cantidad de cristales magicos equivalente al mana
que cuesta lanzar el hechizo (redondeado al MANA_PER_CRYSTAL mas cercano).
Para el ojo sin experiencia, las runas magicas con las cuales los hechizos son escritos
son ilegibles. Por eso, para identificar un hechizo, podrias lanzarlo y ver sus efectos
pero quizas ocasione efectos no deseados, y algunos hechizos necesitan condicione necesarias
para funcionar. Una forma mas segura, es usar un Pergamino de la Identificacion, el cual
puede ser comprado a magos. Hacer clic derecho con uno en la mano identificara el
primer hechizo desconocido en tu barra.
Los pergaminos son utiles cuando necesitas lanzar un hechizo una o dos veces en una
ocasion en particular pero no quieres que te ocupe un espacio en tu varita. Hay que
resaltar, como sea, que los pergaminos son un metodo ineficiente de lanzar hechizos.
PAGEBREAK
SECTION Mesa de Trabajo Arcana
La Mesa de Trabajo Arcana
--------------------
La Mesa de Trabajo Arcana es un bloque similar en apariencia a la mesa de encantamiento
donde puedes cargar, mejorar y ligar hechizos a una varita. Simplemente coloca donde sea
y haz clic derecho, y veras una interfaz aparecer parecida a la de la derecha.
PAGEBREAK
IMAGE WORKBENCH
LINEBREAK
La Mesa de Trabajo Arcana
PAGEBREAK
SECTION Ligando Hechizos
Ligando Hechizos
--------------------
Para ligar un hechizo a tu varita, simplemente coloca tu varita en el espacio central
de la Mesa de Trabajo Arcana, luego coloca el libro de hechizo en uno de los espacios
que estan alrededor y pulsa Aplicar. Puedes ligar 5 hechizos a la vez, esto puede ser
aumentado con mejoras. Cuando tienes una varita en la mano, puedes cambiar los hechizos
con las NEXT_SPELL_KEY y PREVIOUS_SPELL_KEY teclas. Tambien puedes cambiarlo al agacharte
y moviendo la rueda del raton.
SECTION Cargando varitas
Cargando varitas
--------------------
Para cargar tu varita, coloca la varita en el espacio central de la Mesa de Trabajo Arcana
y coloca algunos cristales magicos en el espacio mas arriba en la izquierda, y despues
pulsa Aplicar. Cada cristal vale MANA_PER_CRYSTAL mana, y la varita solo toma lo que
necesita, asi que puedes mantener cristales en la Mesa de Trabajo Arcana para cuando
los necesites. Todas las varitas tomaran un numero exacto de cristales para cargarla si esta
vacia, a menos que tengan una mejora de almacenamiento aplicada.
SECTION Mejorando varitas
Mejorando tu varita
--------------------
Para mejorar tu varita, necesitaras un Tomo de lo Arcano de tu nivel apropiado (ver
Niveles) o una mejora de varita especial. Ambos pueden ser encontrados como botin o
comprado a un mago. Para mejorar tu varita, colocala en el espacio central de la
Mesa de Trabajo Arcana y la mejora en el espacio inferior a la izquierda, y pulsar Aplicar.
Mejoras de varita especiales mejorar un aspecto particular de la varita. Cada tipo de mejora
se puede apilar 3 veces, y el total de mejoras que puede tener una varita depende del nivel.
Las mejoras no pueden ser removidas.
PAGEBREAK
SECTION Flores y Frascos
Flores y Frascos
--------------------
Es probable que te encuentres con flores brillantes creciendo en el suelo de tiempo
en tiempo. Esas son flores de cristal magico, una fuente de mana natural. Pueden ser
cosechadas y crafteadas para extraer mana en cristales.
Necesitas recargar tu varita de camino? No hay problema! El mana puede ser enfrascado.
Simplemente craftea un frasco de mana con una botella de cristal y ocho cristales magicos
y llevatelo contigo. Cuando necesites mana, solo craftea la varita con el frasco para
recargar un poco. Este proceso consumira la botella. Un poco de mana se perdera en el
proceso de enfrascamiento.
PAGEBREAK
SECTION Niveles
Niveles
--------------------
Las varitas y los hechizos vienen en cuatro niveles: BASIC_COLOURBasicoRESET_COLOUR, APPRENTICE_COLOURAprendizRESET_COLOUR, ADVANCED_COLOURAvanzadoRESET_COLOUR y MASTER_COLOURMaestroRESET_COLOUR. Cada nivel es mejor que el anterior.
Las varitas BASIC_COLOURBasico RESET_COLOURson las que pueden ser crafteadas. Almacenan
BASIC_MAX_CHARGE mana, y solo pueden lanzar hechizos basicos. Hechizos basicos son suficientemente simples para ser lanzados por cualquiera y no usan mucho mana. Esto
no significa que son inservibles en niveles mas altos, sin embargo; su costo pequeno
hace que algunos hechizos basicos sean utiles cuando tienes acceso a hechizos maestros.
Las varitas APPRENTICE_COLOURAprendiz RESET_COLOURson el siguiente nivel despues de las
varitas basicas. Almacenan APPRENTICE_MAX_CHARGE mana y pueden lanzar hechizos basicos y de
aprendiz. Los hechizos de aprendiz son mas llamativos que los basicos, pero cuestan mas.
Las varitas ADVANCED_COLOURAvanzado RESET_COLOURson muy raras y mucho mas poderosas.
Pueden lanzar todos los hechizos excepto los maestros, y almacenar ADVANCED_MAX_CHARGE mana.
Los hechizos avanzados pueden otorgar poderes de superhumano como invisibilidad y causar
mucho dano a los enemigos.
Las varitas MASTER_COLOURMaestro RESET_COLOURson las mas poderosas varitas que existen. Almacenan MASTER_MAX_CHARGE mana, y pueden lanzar cualquier hechizo. Los libros de hechizos
maestros son muy raros y los hechizos pueden causar una gran devastacion, no solo a los enemigos
si no al mundo en si. Usar con precaucion.
PAGEBREAK
SECTION Elementos
Elementos
--------------------
Los hechizos pertenecen a diferentes elementos, los cuales describen la naturaleza
del hechizo y tambien tienen ventajas cuando son lanzados con ciertas varitas.
FIRE_COLOURFuego
Quizas el elemento mas destructivo, fuego conlleva quemaduras, lava, y explosiones. Un piromano poderoso desatara el infierno sobre sus enemigos y probablemente encienda
el mundo en el proceso. La mayoria de los ataques de fuego queman a sus objetivos,
causando dano extra sobre el tiempo. Sin embargo, te en cuenta que no tendran efecto
en monstruos del Nether.
ICE_COLOURHielo
El elemento de hielo esta formado por todo lo que es frio. Los hechizos de hielo
frencuentemente ralentizan a los enemigos o los congelan completamente, y son
efectivos contra criaturas de fuego. La magia de hielo puede ser util fuera de
combate, como para congelar un rio para poder cruzarlo a pie.
LIGHTNING_COLOURRayo
Este elemento conlleva relampagos, tormentas y el clima. Un mago de tormenta poderoso
es una fuerza dura de vencer, y algunos son capaces de llamar rayos a voluntad. Los
hechizos de rayo con frecuencia hacen dano a varios enemigos a la vez y usualmente
persiguen a su objetivo, haciendolos efectivos para atacar a cualquier monstruo...
pero cuidado con los creepers.
NECROMANCY_COLOURNigromancia
Nigromancia es el elemento de oscuridad, caos y lo no-muerto. Nigromantes son
misteriosos y a veces considerados malos, aunque no siempre es el casp. Los
hechizos de nigromancia son usados para invocar criaturas que pelearan por ti o
hasta controlar la voluntad de tus enemigos.
EARTH_COLOURTierra
El elemento de tierra esta enfocado en el mundo natural: animales, plantas, el viento, y cosas asi. La magia de tierra es diversa y toma una gran variedad de formas, desde envenerar enemigos hasta desatar la furia del clima. Los hechizos de tierra son una liga de ataque, defensa y utilidad.
SORCERY_COLOURHechiceria
La hechiceria es el elemento de la fuerza y el cambio. Los hechiceros manipulan la luz,
la gravedad y hasta la realidad para su beneficio. Los hechizos de hechiceria pueden
ser usados, entre otras cosas, para conceder poderes magicos y mover objetos.
HEALING_COLOURCuracion
El elemento de curacion conlleva defensa y regeneracion. Los sanadores buscan
protegerse y a sus aliados lo mas posble, lo cual puede ser dificil para los
oponentes. A pesar de no considerarse como un ataque, la luz purificadora de sus
hechizos de curacion puede ser letales para los no-muertos. Los hechizos de
curacion son indispensables cuando se esta dentro de combate.
Los limites entre los diferentes elementos no siempre son distintos, y algunos hechizos
tienen atributos de otros elementos mas que del suyo.
Si eres suertudo, puedes que te encuentres una varita elemental. Estas varitas te
permiten lanzar hechizos del elemento correcto con mas potencia de lo usual.
PAGEBREAK
SECTION Armadura de Mago
Armadura de Mago
--------------------
Como mago, necesitaras algo para protegerte de las criaturas que combates.
Ninguna armadura ordinal valdra. Para sacarle provecho a tus hechizos, necesitas
armadura de mago: sombrero, tunica, pantalones y botas. A diferencia de las otras,
estas no se romperan. Sin embargo, usaran energia arcana para proteger al usuario.
Esto significa que deben ser cargados con cristales magicos. Ventajosamente no
consumen mucho mana. Recargalos en la mesa o con frascos.
Puedes obtener armadura de mago crafteandola con Seda Magica, obtenida al craftear
hilo con un cristal magico.
Esos magos que se dedican a practicar un solo elemento algunas veces visten
piezas especiales las cuales ofrecen bonus a dicho elemento. Los sets completos
de esta armadura son muy codiciados entre magos y no son faciles de conseguir.
Hay una legenda que habla sobre un sello arcano usado por los magos mas poderosos
para mejorar en sobre manera su armadura.
PAGEBREAK
SECTION Magos y Torres
Magos y Torres
--------------------
No temas - no eres el unico que practica magia en este mundo. En tus viajes, te encontraras con torres altas con unos distintivos techos puntiagudos.
Estas son las residencias de varios magos. Una vida de soledad puede hacer que los magos se vuelvan grunones, pero usualmente son seres amigables que estan
dispuestos a compartir su conocimiento contigo - con un precio. Preparate para pagar con gemas y metales preciosos, y a cambio recibiras grandezas arcanas.
Si, en dado caso, un hechizo maestro es lo que buscas, deberar hablar con un especialista en dicho elemento.
Desafortunadamente, hay algunos magos que no le dan la bienvenida a los visitantes. Estos magos son marginados y son hostiles hacia cualquiera que cruce su camino. Aproximate a ellos con cautela, y preparate para defenderte contra magia sumamente poderosa. Derrotalos, y su conocimiento sera tuyo.
PAGEBREAK
SECTION Recetas de Crafteo
Recetas de Crafteo
--------------------
PAGEBREAK
PAGEBREAK
Recetas de Crafteo
--------------------
PAGEBREAK
PAGEBREAK
Recetas de Crafteo
--------------------
PAGEBREAK
PAGEBREAK
Recetas de Crafteo
--------------------
PAGEBREAK
PAGEBREAK
Creditos
--------------------
Electroblob's Wizardry
Version VERSION
Para Minecraft MCVERSION
Disenado, codificado y texturizado por Electroblob
Gracias a Minecraft Forge y MCP, porque sin estos esto no hubiese sido posible.
Gracias tambien a la comunidad de Minecraft que crea mods, la cual siempre tiene una respuesta para mis problemas!
In addition, I'd like to thank the following individuals for their contributions to the mod:
Code:
- Corail31
- 12foo
- Shadows-of-Fire
- HellFirePvP
Translations:
- Russian: VilagVil
- Spanish and Mexican Spanish: MadWrist
- Chinese: ZHENGLOC and dragon-evol
Lightning ray sound effect from OhhWowProductions
File diff suppressed because it is too large Load Diff
@@ -1,225 +0,0 @@
PAGEBREAK
LINEBREAK
巫师手册
作者 Electroblob
PAGEBREAK
简介
--------------------
欢迎您,伟大的巫师!本书将会向您阐释奥术的工作原理以及使用它们的方法。
如果您不慎遗失了本书,您可以在工作台上用书和魔法水晶制作一本新的。
PAGEBREAK
内容
--------------------
PAGEBREAK
SECTION 准备工作
准备工作
--------------------
要打开通向巫术的大门,您将会需要以下几样东西:
- 一根法杖,由一粒金粒,一根木棍和一块魔法水晶合成。
- 一个奥术工作台,由三块石头,一块青金石块,两块魔法水晶,两粒金粒和一块紫色地毯合成。
- 一本法术书,它们可以在箱子中找到,由怪物掉落或向巫师们购买。当然您也可以用一本书和四块魔法水晶制作一个初学者的法术“魔法飞弹”。
此外,您将会需要更多的魔法水晶来为您的法杖提供魔力。
PAGEBREAK
SECTION 魔力
魔力
--------------------
魔力是给予巫师们力量的奥术能量。它在自然界中以水晶的形式存在,这些水晶嵌在石缝中,可以在地下被找到。法杖中可以储存魔力,而这些魔力将被塑造为您施展的法术。不同的法术会消耗不同数量的魔力,这取决于它们有多么强大以及它们会持续多久。
将鼠标悬停在法杖上就可以看到其中的魔力储量。
IMAGE CRYSTAL
LINEBREAK
魔法
水晶矿 水晶
PAGEBREAK
SECTION 法杖
法杖
--------------------
法杖是一个巫师的实用之选。有了法杖,您就可以施展任何法术,只要法杖能够承受它的力量(更深入的解释在“等级”一节中)。
法杖有许多不同的种类,但您将从最基本的法杖开始。
拿着法杖时,屏幕的角落会出现一个小小的提示,它会显示当前选择的法术及其图标。此外,如果一个法术被施展了,会有一个冷却条显示还有多久才能再次施展这个法术。
PAGEBREAK
SECTION 法术
法术
--------------------
一根没有法术可施展的法杖是毫无用处的。法术可以通过两种方式被记录下来:永久地记录在书上,或者暂时地记录在卷轴上。
法术书本身没有什么用处,它们是用来将其中记录的法术绑定到法杖上的。法术书可以在世界各处被发现,而且您肯定很快就会找到一本。当您发现了一本法术书时,您可以将鼠标悬停在上面来看一下法术的基本信息,您也可以拿着法术书按下右键来阅读法术的详细信息。
与之相反,卷轴的使用方式是不一样的:拿着卷轴右击将会施展其中绑定的法术,而在这个过程中卷轴将会被摧毁。像法术书一样,卷轴可以在世界各处被发现,但您也可以自己制作它们。首先拿一张纸和一些线合成空白卷轴,然后您可以在奥术工作台上将法术绑定到卷轴上,前提是您拥有关于这个法术的知识。这么做将会消耗与法术的魔力消耗相对应数量的魔法水晶(消耗的魔法水晶个数是向上取整的)。
对于未经训练的人来说,用于书写法术的魔法符文是无法辨识的。为了鉴定一个法术,您当然可以施展它然后看看发生了什么 - 但这么做可能会产生您不想看到的副作用,而且许多法术需要在特定的条件下才能起作用。一种更安全可靠的选择是使用鉴定卷轴,它可以在箱子里找到或向巫师购买。拿着它右击将会鉴定您热键栏中第一个未知的法术书或卷轴,并消耗鉴定卷轴。
如果您需要在一次探险中使用某个法术一两次但又不希望它占用您法杖的一个槽,那卷轴是十分有用的。但值得注意的是卷轴是一种相当没有效率的施法方式。
PAGEBREAK
SECTION 奥术工作台
奥术工作台
--------------------
奥术工作台的外观和附魔台很像,您可以在其中给法杖充能、升级或绑定法术。只要放下它并右击,您就会看到一个界面出现,就像右边展示的一样。
PAGEBREAK
IMAGE WORKBENCH
LINEBREAK
奥术工作台
PAGEBREAK
SECTION 绑定法术
绑定法术
--------------------
要把一个法术绑定到法杖上,只要把法杖放在奥术工作台中央的格子里,然后把法术书放在周围的任意一个格子里并按下“应用”。您至多可以在一根法杖上绑定五个法术,当然这一数量可以通过法杖协调升级来增加。拿着法杖时,您可以通过 NEXT_SPELL_KEY 键和 PREVIOUS_SPELL_KEY 键在不同的法术间切换(按键可以在选项 -> 控制里调整)。您也可以在潜行时上下滚动鼠标滚轮来切换法术。
SECTION 法杖充能
法杖充能
--------------------
要给法杖充能,只要把法杖放在奥术工作台中央的格子里,然后在左侧两个格子靠上的那个放一些魔法水晶并按下“应用”。每个水晶等同于 MANA_PER_CRYSTAL 魔力,而法杖只会吸收它所需要的数量,所以您可以在奥术工作台中储备一些魔力水晶以便随时使用。然而,谨记法杖只能整块地吸收魔法水晶。所以如果法杖仅仅还需要 30 魔力,那么 MANA_PER_CRYSTAL_MINUS_30 魔力就会在充能过程中流失。在内部没有魔力时,所有的法杖都会吸收确定数量的魔法水晶来充能,除非它们拥有法杖存储升级。
SECTION 升级法杖
升级法杖
--------------------
要升级法杖,您需要一本对应等级的(参见“等级”)奥法宝典或者某种法杖升级。这两种东西都可以作为战利品得到或者向巫师购买。要升级法杖,只要把法杖放在奥术工作台中央的格子里,然后在左侧两个格子靠下的那个放上法杖升级并按下“应用”。
法杖升级会提升法杖某一方面的性能。每种法杖升级可以叠加至多三次,而法杖能升级的总次数取决于其等级。升级是不可逆的,无法被重新移除。
PAGEBREAK
SECTION 鲜花与烧瓶
鲜花与烧瓶
--------------------
您很可能时不时在野外见到一些神秘的闪着光芒的花。这些是水晶花,是一种自然产生的魔力来源。它们可以被采集,其中的魔力可以像魔力水晶一样被提取出来。
需要在路上给您的法杖充能?没问题!魔力现在可以被装瓶了。用一个玻璃瓶和八个魔力水晶制作一个魔力瓶并带在身上,当您需要使用它时,将它和您的法杖放在一起合成,法杖就会回复一些魔力,而魔力瓶会被消耗掉。在装瓶过程中魔力会有耗损。
PAGEBREAK
SECTION 等级
等级
--------------------
法杖和法术有四个等级:BASIC_COLOUR新手RESET_COLOURAPPRENTICE_COLOUR学徒RESET_COLOURADVANCED_COLOUR进阶RESET_COLOUR和MASTER_COLOUR大师RESET_COLOUR。每一个等级都比上一个等级更加强大。
BASIC_COLOUR新手RESET_COLOUR法杖是可以被合成出来的法杖。它们至多储存 BASIC_MAX_CHARGE 魔力,并且只能施展新手级的法术。新手法术非常简单,可以被任何人施展并且一般不消耗很多魔力。然而这并不一定意味着等级很高时他们就毫无用处,它们的低消耗使得一些新手法术在您达到大师级之后仍十分有用。
APPRENTICE_COLOUR学徒RESET_COLOUR法杖是新手法杖的下一等级。它们至多储存 APPRENTICE_MAX_CHARGE 魔力,并且可以施展新手和学徒级的法术。学徒法术比起新手法术更令人印象深刻,但通常消耗更高。
ADVANCED_COLOUR进阶RESET_COLOUR法杖十分稀有且比前两级强大得多。它们可以施展除了大师级之外的所有法术,并储存 ADVANCED_MAX_CHARGE 魔力。进阶法术可以赋予巫师超人的力量,例如隐身,并在敌人头上倾泻毁灭。
MASTER_COLOUR大师RESET_COLOUR法杖是现存最强大的法杖。他们至多储存 MASTER_MAX_CHARGE 魔力,并且可以施展任何法术。大师级法术书非常稀有,而大师级法术可以给敌人带来完全的湮灭,甚至可以摧毁世界本身。慎重使用。
PAGEBREAK
SECTION 元素
元素
--------------------
法术分属不同的元素,元素表现了法术的本质,并且在被特定的法杖使用时会有额外的效果。
FIRE_COLOUR火
这也许是最具毁灭性的元素。火元素掌控燃烧、熔岩和爆炸。一位强大的烈焰法师能够在敌人头顶打开地狱之门,并能在这个过程中点燃世界。绝大多数火属性攻击法术会点燃其目标,造成持续伤害。但是,注意火属性法术也许对下界生物毫无效果。
ICE_COLOUR冰
冰元素是一切寒冷之物的集合。冰属性法术通常会减速敌人或完全冻住他们,并且对火属性生物极为有效。冰属性魔法在战斗外同样有用,例如冻结水面来顺利过河。
LIGHTNING_COLOUR闪电
这一元素掌控闪电、风暴和天气。一位强大的风暴法师是一股不可忽视的力量,而且他们中的某些人拥有随意降下闪电的能力。闪电法术通常会同时伤害多个敌人并且自动寻找目标,这使它们成为攻击任何生物的有效手段...但小心爬行者。
NECROMANCY_COLOUR死灵
死灵是属于黑暗、混沌和不死生物的元素。死灵法师十分神秘并且常常被认为是邪恶的,虽然一般不是这回事。死灵法术通常被用来召唤为您而战的生物,甚至可以扭曲敌人的意志。
EARTH_COLOUR大地
大地元素专注于自然界:动物,植物,风,凡此种种。大地魔法差异巨大且呈现形式多种多样,从让敌人中毒到释放大气的怒火。大地法术是攻击、防御和实用的综合。
SORCERY_COLOUR妖术
妖术是操纵力和变化的元素。妖术法师操纵光、重力甚至是现实本身来迎合他们的需要。妖术也可以用在别的领域,例如赋予施法者魔法力量或者用意念移动物体。
HEALING_COLOUR治愈
治愈元素掌控防御和再生。治愈法师尽可能地保护他们自己以及他们的盟友,因此可能是非常难缠的对手。尽管一般不用来攻击,某些治愈法术的净化光芒会对不死生物造成可观的伤害。治愈法术在战斗中是不可或缺的。
不同元素之间并不总是泾渭分明的,并且有些法术展现出除自身外的其他元素的特点。
如果您很幸运,您可能会邂逅一根元素法杖。这些法杖会让您在施展正确元素的法术时比平时拥有更强的能力。
PAGEBREAK
SECTION 巫师护甲
巫师护甲
--------------------
作为一名巫师,您需要一些东西来保护您免受与您作战的生物的伤害。普通的护甲无法做到这一点。为了最大化利用您的法术,您将会需要巫师护甲:帽子,法袍,护腿和靴子。不像普通的护甲,这些护甲不会损坏。作为替代,它们使用奥术能量来保护穿戴者。这当然意味着它们需要像法杖一样用魔法水晶充能。幸运的是,这些服装并不会消耗很多魔力。像法杖一样用奥术工作台或魔力瓶充能它们,但小心了 - 如果它们没有了魔力,您将发现自己毫无防御力。
您可以用魔法丝绸来制作巫师护甲,魔法丝绸可以用线和一块魔法水晶合成。
那些完全专注于一种元素的巫师有时会穿上特殊的服装来让这一元素获得额外的增强。整套的此类服装十分受某些巫师的追捧而且不容易找到。
传说中最强大的巫师用一种奥术戳记来极大地强化他们的护甲。
PAGEBREAK
SECTION 巫师和巫师塔
巫师和巫师塔
--------------------
别害怕 - 您不是这个世界里唯一的魔法使用者。在您的旅途中,您可能会遇到拥有标志性尖顶的高塔。这些是您巫师同僚的居所。孤独的生活有时可能会让巫师们变得有些性情乖戾,但他们通常是友好的人,并且乐意与您分享他们的知识 - 尽管要付出些代价。交给他们一些珍贵的金属和宝石,您将收获数不尽的奥术奇迹作为回报。但如果您要寻找的是大师级的法术,您需要与专家谈谈才行。
不幸的是,少数巫师并不欢迎访客。这些巫师通常是被放逐的人,并且对任何挡路者都怀有敌意。小心地接近他们,并准备好在强大的魔法洗礼下防卫自己。然而,如果您击败了他们,您就可以将他们的知识全部收入囊中。
PAGEBREAK
SECTION 合成配方
合成配方
--------------------
PAGEBREAK
PAGEBREAK
合成配方
--------------------
PAGEBREAK
PAGEBREAK
合成配方
--------------------
PAGEBREAK
PAGEBREAK
合成配方
--------------------
PAGEBREAK
PAGEBREAK
鸣谢
--------------------
Electroblob's Wizardry
Version VERSION
For Minecraft MCVERSION
Designed, coded and textured by Electroblob
Thanks to Minecraft Forge and MCP, without which this mod would not have been possible.
Thanks also to the Minecraft modding community, which always has an answer to my modding problems!
In addition, I'd like to thank the following individuals for their contributions to the mod:
Code:
- Corail31
- 12foo
- Shadows-of-Fire
- HellFirePvP
Translations:
- Russian: VilagVil
- Spanish and Mexican Spanish: MadWrist
- Chinese: ZHENGLOC and dragon-evol
Lightning ray sound effect from OhhWowProductions
@@ -732,7 +732,7 @@
"程式碼:", "程式碼:",
"》Corail31 \n》12foo \n》Shadows-of-Fire \n》HellFirePvP \n》Tora-B \n》Avatair \n》Aeronica", "》Corail31 \n》12foo \n》Shadows-of-Fire \n》HellFirePvP \n》Tora-B \n》Avatair \n》Aeronica \n》UltraHex \n》Azim-Palmer \n》raoulvdberge \n》rafasoares",
"\n\n翻譯:", "\n\n翻譯:",
+1 -1
View File
@@ -2,7 +2,7 @@
{ {
"modid" : "ebwizardry", "modid" : "ebwizardry",
"name" : "Electroblob's Wizardry", "name" : "Electroblob's Wizardry",
"version" : "4.2.10", "version" : "4.2.11",
"mcversion" : "1.12.2", "mcversion" : "1.12.2",
"url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry", "url" : "https://minecraft.curseforge.com/projects/electroblobs-wizardry",
"credits" : "\nDesigned, coded and textured by Electroblob.\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica, UltraHex, Azim-Palmer, raoulvdberge.\nTranslators: MadWrist (Spanish, Mexican Spanish), VilagVil, kellixon & bigenergy (Russian), Hahdrim (French), lorrampi (Brazilian Portuguese), ZHENGLOC & dragon-evol (Chinese), shejery & rewi_wire (Korean), Trozuu (Polish), chesterccj305 (Taiwanese).", "credits" : "\nDesigned, coded and textured by Electroblob.\nCode contributed by: Corail31, 12foo, Shadows-of-Fire, Tora-B, Avatair, Aeronica, UltraHex, Azim-Palmer, raoulvdberge.\nTranslators: MadWrist (Spanish, Mexican Spanish), VilagVil, kellixon & bigenergy (Russian), Hahdrim (French), lorrampi (Brazilian Portuguese), ZHENGLOC & dragon-evol (Chinese), shejery & rewi_wire (Korean), Trozuu (Polish), chesterccj305 (Taiwanese).",