Compare commits

..

10 Commits

Author SHA1 Message Date
WinDanesz 461df00048 fix: Fixed some advancements 2022-09-10 02:04:41 +02:00
WinDanesz dcf60a8b4b fix: Fixed spruce_gilded_wood recipe 2022-09-10 02:03:53 +02:00
WinDanesz 739a1573e1 feat: added support for custom Elements 2022-09-10 02:01:49 +02:00
WinDanesz b7ffd61020 feat: flattened the gilded wood blocks 2022-09-10 00:59:57 +02:00
WinDanesz b6682e1c52 feat: Added the IElemental interface 2022-09-09 23:52:00 +02:00
WinDanesz 5d337b93a6 refactor: Flattened the runestone blocks 2022-09-09 23:51:30 +02:00
WinDanesz b1e70c01f0 refactor: Flattened the magic crystal blocks, renamed crystal items 2022-09-09 22:51:18 +02:00
WinDanesz d30a40bdc4 refactor: Flattened arcane tome item registry 2022-09-05 23:14:51 +02:00
WinDanesz 25b2b0b8a5 fix: Fix flesh spell imports 2022-09-05 22:48:51 +02:00
WinDanesz 3eef93b599 refactor: Flattened magic crystal item and spectral dust registries 2022-09-05 22:47:32 +02:00
185 changed files with 1127 additions and 1397 deletions
+2 -2
View File
@@ -1,7 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/electroblobs-wizardry",
"promos": {
"1.12.2-latest": "4.3.11",
"1.12.2-recommended": "4.3.11"
"1.12.2-latest": "4.3.7",
"1.12.2-recommended": "4.3.7"
}
}
+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.
version = "4.3.11"
version = "4.3.8"
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "ElectroblobsWizardry"
@@ -156,12 +156,6 @@ public final class Settings {
public Pair<ResourceLocation, Short>[] treeBlocks = parseItemMetaStrings(DEFAULT_TREE_BLOCKS);
/** <b>[Server-only]</b> The chance for wizard towers to generate with an evil wizard and chest inside. */
public double evilWizardChance = 0.2;
public double cooldownReductionPerLevel = 0.15;
public double potencyIncreasePerTier = 0.15;
public double durationIncreasePerLevel = 0.25;
public double rangeIncreasePerLevel = 0.25;
public double blastIncreasePerLevel = 0.25;
public double frostSlownessIncreasePerLevel = 0.5;
/** <b>[Server-only]</b> List of dimension ids in which to generate crystal ore. */
public int[] oreDimensions = {0};
/** <b>[Server-only]</b> List of dimension ids in which to generate crystal flowers. */
@@ -198,21 +192,12 @@ public final class Settings {
public boolean playerBlockDamage = true;
/** <b>[Server-only]</b> Whether spells cast by dispensers can destroy blocks in the world. */
public boolean dispenserBlockDamage = true;
/** <b>[Server-only]</b> Whether damage should be registered with the old system (wizardry_magic/indirect_wizardry_magic) prefixed damage with the elements like
* necromancy_indirect_wizardry_magic, necromancy_wizardry_magic*/
public boolean damageTypePerElement = false;
/** <b>[Server-only]</b> Whether spell books are consumed when they are bound to a wand.*/
public boolean singleUseSpellBooks = false;
/** <b>[Server-only]</b> Whether to prevent binding the same spell to a wand multiple times*/
public boolean preventBindingSameSpellTwiceToWands = false;
/** <b>[Server-only]</b> Whether to revert to the old wand upgrade system, which only requires tomes of arcana. */
public boolean legacyWandLevelling = false;
/** <b>[Server-only]</b> Whether to tweak the blindness effect to reduce follow distance when used on non-players. */
public boolean blindnessTweak = true;
/** <b>[Server-only]</b> Whether using bonemeal on grass blocks has a chance to grow crystal flowers. */
public boolean bonemealGrowsCrystalFlowers = true;
/** <b>[Server-only]</b> Whether wands only decrement their cooldowns if a player holds them. */
public boolean wandsMustBeHeldToDecrementCooldown = false;
/** <b>[Server-only]</b> Whether to enable Wizardry mob loot injection. Allows an easier switch instead of blacklisting all entities. */
public boolean injectMobDrops = true;
/**
@@ -632,29 +617,6 @@ public final class Settings {
dispenserBlockDamage = property.getBoolean();
propOrder.add(property.getName());
property = config.get(GAMEPLAY_CATEGORY, "damageTypePerElement", false,
"Whether damage should be registered with the old system (wizardry_magic/indirect_wizardry_magic) prefixed damage with the elements like "
+ "necromancy_indirect_wizardry_magic, necromancy_wizardry_magic. This is disabled by default to not break existing modpacks."
+ "The intention of this setting is to allow differentiating various damage types for e.g. the Distinct Damage Descriptions mod");
property.setLanguageKey("config." + Wizardry.MODID + ".damage_type_per_element");
Wizardry.proxy.setToNamedBooleanEntry(property);
damageTypePerElement = property.getBoolean();
propOrder.add(property.getName());
property = config.get(GAMEPLAY_CATEGORY, "singleUseSpellBooks", false,
"Whether spell books are consumed when they are bound to a wand.");
property.setLanguageKey("config." + Wizardry.MODID + ".single_use_spell_books");
Wizardry.proxy.setToNamedBooleanEntry(property);
singleUseSpellBooks = property.getBoolean();
propOrder.add(property.getName());
property = config.get(GAMEPLAY_CATEGORY, "preventBindingSameSpellTwiceToWands", false,
"Whether to prevent binding the same spell to a wand multiple times");
property.setLanguageKey("config." + Wizardry.MODID + ".prevent_binding_same_spell_twice_to_wands");
Wizardry.proxy.setToNamedBooleanEntry(property);
preventBindingSameSpellTwiceToWands = property.getBoolean();
propOrder.add(property.getName());
property = config.get(GAMEPLAY_CATEGORY, "playersMoveEachOther", true,
"Whether to allow players to move other players around using magic.");
property.setLanguageKey("config." + Wizardry.MODID + ".players_move_each_other");
@@ -706,13 +668,6 @@ public final class Settings {
bonemealGrowsCrystalFlowers = property.getBoolean();
propOrder.add(property.getName());
property = config.get(GAMEPLAY_CATEGORY, "wandsMustBeHeldToDecrementCooldown", false,
"Whether wands only decrement their cooldowns if a player holds them.");
property.setLanguageKey("config." + Wizardry.MODID + ".wands_must_be_held_to_decrement_cooldown");
Wizardry.proxy.setToNamedBooleanEntry(property);
wandsMustBeHeldToDecrementCooldown = property.getBoolean();
propOrder.add(property.getName());
checkForRedundantOptions(GAMEPLAY_CATEGORY, propOrder); // Must be before the order is set!
config.setCategoryPropertyOrder(GAMEPLAY_CATEGORY, propOrder);
@@ -971,50 +926,6 @@ public final class Settings {
}
}
property = config.get(TWEAKS_CATEGORY, "cooldown_reduction_per_level", 0.15,
"The fraction by which cooldowns are reduced for each level of cooldown upgrade.",
0.05, Integer.MAX_VALUE); // Sure, I mean you COULD set it to 2^31-1... what could possibly go wrong?
property.setLanguageKey("config." + Wizardry.MODID + ".cast_command_multiplier_limit");
cooldownReductionPerLevel = property.getDouble();
propOrder.add(property.getName());
property = config.get(TWEAKS_CATEGORY, "potency_increase_per_tier", 0.15,
"The fraction by which potency is increased for each tier of matching wand. May cause extreme lag with high values!",
0.05, Integer.MAX_VALUE);
property.setLanguageKey("config." + Wizardry.MODID + ".potency_increase_per_tier");
potencyIncreasePerTier = property.getDouble();
propOrder.add(property.getName());
property = config.get(TWEAKS_CATEGORY, "duration_increase_per_level", 0.25,
"The fraction by which spell duration is increased for each level of duration upgrade.",
0.05, Integer.MAX_VALUE);
property.setLanguageKey("config." + Wizardry.MODID + ".duration_increase_per_level");
durationIncreasePerLevel = property.getDouble();
propOrder.add(property.getName());
property = config.get(TWEAKS_CATEGORY, "range_increase_per_level", 0.25,
"The fraction by which spell range is increased for each level of range upgrade. May cause extreme lag with high values!",
0.05, Integer.MAX_VALUE);
property.setLanguageKey("config." + Wizardry.MODID + ".range_increase_per_level");
rangeIncreasePerLevel = property.getDouble();
propOrder.add(property.getName());
property = config.get(TWEAKS_CATEGORY, "blast_increase_per_level", 0.25,
"The fraction by which spell blast is increased for each level of blast upgrade. May cause extreme lag with high values!",
0.05, Integer.MAX_VALUE);
property.setLanguageKey("config." + Wizardry.MODID + ".blast_increase_per_level");
blastIncreasePerLevel = property.getDouble();
propOrder.add(property.getName());
property = config.get(TWEAKS_CATEGORY, "frost_slowness_increase_per_level", 0.5,
"The fraction by which movement speed is reduced per level of frost effect.",
0.05, Integer.MAX_VALUE);
property.setLanguageKey("config." + Wizardry.MODID + ".frost_slowness_increase_per_level");
frostSlownessIncreasePerLevel = property.getDouble();
propOrder.add(property.getName());
checkForRedundantOptions(TWEAKS_CATEGORY, propOrder); // Must be before the order is set!
config.setCategoryPropertyOrder(TWEAKS_CATEGORY, propOrder);
@@ -82,7 +82,7 @@ public class Wizardry {
* 1.x.x represents Minecraft 1.7.x versions, 2.x.x represents Minecraft 1.10.x versions, 3.x.x represents Minecraft
* 1.11.x versions, and so on.
*/
public static final String VERSION = "4.3.11";
public static final String VERSION = "4.3.7";
/**
* Json file used by Forge's built-in <a href="https://mcforge.readthedocs.io/en/1.12.x/gettingstarted/autoupdate/">update checker</a>.
@@ -203,6 +203,7 @@ public final class WizardryEventHandler {
// Find the angle between the direction the mob is looking and the direction the player is in
// Angle between a and b = acos((a.b) / (|a|*|b|))
double angle = Math.acos(vec.dotProduct(event.getEntity().getLookVec()) / vec.length());
System.out.println(angle);
// If the player is not within the 144-degree arc in front of the mob, it won't detect them
if(angle > 0.4 * Math.PI){
((EntityLiving)event.getEntityLiving()).setAttackTarget(null);
@@ -268,7 +269,7 @@ public final class WizardryEventHandler {
// Fireskin
if(event.getEntityLiving().isPotionActive(WizardryPotions.fireskin)
&& !MagicDamage.isEntityImmune(DamageType.FIRE, event.getEntityLiving()))
attacker.setFire(Spells.fire_breath.getProperty(Spell.BURN_DURATION).intValue() * 20);
attacker.setFire(Spells.fire_breath.getProperty(Spell.BURN_DURATION).intValue());
// Ice Shroud
if(event.getEntityLiving().isPotionActive(WizardryPotions.ice_shroud)
@@ -490,4 +491,4 @@ public final class WizardryEventHandler {
}
}
}
}
@@ -0,0 +1,8 @@
package electroblob.wizardry.api;
import electroblob.wizardry.constants.Element;
public interface IElemental {
Element getElement();
}
@@ -18,7 +18,7 @@ public final class WizardryEnumHelper {
// Make sure these are updated if the relevant constructors are updated!
// Can't we do some kind of reflection to access them and generate these arrays?
private static final Class[] TIER_ARGUMENTS = new Class[]{Integer.class, Integer.class, Integer.class, Style.class, String.class};
private static final Class[] ELEMENT_ARGUMENTS = new Class[]{Style.class, String.class, String.class};
private static final Class[] ELEMENT_ARGUMENTS = new Class[]{Style.class, String.class, String.class, boolean.class, boolean.class};
private static final Class[] SPELL_TYPE_ARGUMENTS = new Class[]{String.class};
private static final Class[] SPELL_CONTEXT_ARGUMENTS = new Class[]{String.class};
@@ -55,12 +55,14 @@ public final class WizardryEnumHelper {
* @param colour The colour of text associated with this element, as a style object.
* @param name The unlocalised name of this element, as used in translation keys.
* @param modID The mod ID of the mod that added this element, for icon rendering purposes.
* @param worldgen Whether this element should have obelisks and shrines.
* @param wizards Whether this element should have naturally occurring evil and good wizards.
* @return The resulting {@code Element} enum constant.
*/
// This is the only one that needs the mod ID argument because elements are the only ones that have icons
// For some reason Minecraft doesn't seem to care about the resource domain for lang files, it just pools them
public static Element addElement(String codeName, Style colour, String name, String modID){
return EnumHelper.addEnum(Element.class, codeName, ELEMENT_ARGUMENTS, colour, name, modID);
public static Element addElement(String codeName, Style colour, String name, String modID, boolean worldgen, boolean wizards){
return EnumHelper.addEnum(Element.class, codeName, ELEMENT_ARGUMENTS, colour, name, modID, worldgen, wizards);
}
/**
@@ -256,7 +256,9 @@ public class BlockBookshelf extends BlockHorizontal implements ITileEntityProvid
// Wizardry books
registerBookModelTexture(() -> WizardryItems.spell_book, new ResourceLocation(Wizardry.MODID, "blocks/books_red"));
registerBookModelTexture(() -> WizardryItems.wizard_handbook, new ResourceLocation(Wizardry.MODID, "blocks/books_blue"));
registerBookModelTexture(() -> WizardryItems.arcane_tome, new ResourceLocation(Wizardry.MODID, "blocks/books_purple"));
registerBookModelTexture(() -> WizardryItems.arcane_tome_apprentice,new ResourceLocation(Wizardry.MODID, "blocks/books_purple"));
registerBookModelTexture(() -> WizardryItems.arcane_tome_advanced, new ResourceLocation(Wizardry.MODID, "blocks/books_purple"));
registerBookModelTexture(() -> WizardryItems.arcane_tome_master, new ResourceLocation(Wizardry.MODID, "blocks/books_purple"));
registerBookModelTexture(() -> WizardryItems.ruined_spell_book, new ResourceLocation(Wizardry.MODID, "blocks/books_brown"));
registerBookModelTexture(() -> WizardryItems.scroll, new ResourceLocation(Wizardry.MODID, "blocks/scrolls_blue"));
registerBookModelTexture(() -> WizardryItems.blank_scroll, new ResourceLocation(Wizardry.MODID, "blocks/scrolls_blue"));
@@ -1,29 +1,23 @@
package electroblob.wizardry.block;
import electroblob.wizardry.api.IElemental;
import electroblob.wizardry.constants.Element;
import electroblob.wizardry.registry.WizardryTabs;
import net.minecraft.block.Block;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import java.util.EnumMap;
public class BlockCrystal extends Block {
public class BlockCrystal extends Block implements IElemental {
public static final PropertyEnum<Element> ELEMENT = PropertyEnum.create("element", Element.class);
private static final EnumMap<Element, MapColor> map_colours = new EnumMap<>(Element.class);
private static final EnumMap<Element, MapColor> map_colours = new EnumMap<>(Element.class);
static {
map_colours.put(Element.MAGIC, MapColor.PINK);
static {
map_colours.put(Element.MAGIC, MapColor.PINK);
map_colours.put(Element.FIRE, MapColor.ORANGE_STAINED_HARDENED_CLAY);
map_colours.put(Element.ICE, MapColor.LIGHT_BLUE);
map_colours.put(Element.LIGHTNING, MapColor.CYAN);
@@ -32,45 +26,22 @@ public class BlockCrystal extends Block {
map_colours.put(Element.SORCERY, MapColor.LIME);
map_colours.put(Element.HEALING, MapColor.YELLOW);
}
public BlockCrystal(Material material){
super(material);
this.setDefaultState(this.blockState.getBaseState().withProperty(ELEMENT, Element.MAGIC));
this.setCreativeTab(WizardryTabs.WIZARDRY);
@Override
public Element getElement() { return element; }
private final Element element;
public BlockCrystal(Element element) {
super(Material.IRON);
this.setCreativeTab(WizardryTabs.WIZARDRY);
this.setHarvestLevel("pickaxe", 2);
}
@Override
public int damageDropped(IBlockState state){
return (state.getValue(ELEMENT)).ordinal();
}
@Override
public MapColor getMapColor(IBlockState state, IBlockAccess world, BlockPos pos){
return map_colours.get(state.getProperties().get(ELEMENT));
this.element = element;
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> items){
if(this.getCreativeTab() == tab){
for(Element element : Element.values()){
items.add(new ItemStack(this, 1, element.ordinal()));
}
}
public MapColor getMapColor(IBlockState state, IBlockAccess world, BlockPos pos) {
return map_colours.get(state.getProperties().get(element));
}
@Override
public IBlockState getStateFromMeta(int metadata){
return this.getDefaultState().withProperty(ELEMENT, Element.values()[metadata]);
}
@Override
public int getMetaFromState(IBlockState state){
return (state.getValue(ELEMENT)).ordinal();
}
@Override
protected BlockStateContainer createBlockState(){
return new BlockStateContainer(this, ELEMENT);
}
}
@@ -1,17 +1,30 @@
package electroblob.wizardry.block;
import electroblob.wizardry.registry.WizardryTabs;
import net.minecraft.block.Block;
import net.minecraft.block.BlockPlanks;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
public class BlockGildedWood extends BlockPlanks {
public class BlockGildedWood extends Block {
public BlockGildedWood(){
super();
public BlockGildedWood()
{
super(Material.WOOD);
this.setCreativeTab(WizardryTabs.WIZARDRY);
this.setHardness(2.0F);
this.setResistance(5.0F);
this.setSoundType(SoundType.WOOD); // Why is this protected?!
}
}
}
@@ -1,6 +1,7 @@
package electroblob.wizardry.block;
import com.google.common.collect.Maps;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.constants.Element;
import electroblob.wizardry.item.ItemSpectralDust;
import electroblob.wizardry.registry.*;
@@ -20,12 +21,14 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import javax.annotation.Nullable;
import java.util.Arrays;
@@ -110,7 +113,7 @@ public class BlockReceptacle extends BlockTorch implements ITileEntityProvider {
if(tileEntity instanceof TileEntityReceptacle){
Element element = ((TileEntityReceptacle)tileEntity).getElement();
if(element != null) drops.add(new ItemStack(WizardryItems.spectral_dust, 1, element.ordinal()));
if(element != null) drops.add(new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(Wizardry.MODID, "spectral_dust_" + element.name().toLowerCase())), 1));
}
}
@@ -219,7 +222,7 @@ public class BlockReceptacle extends BlockTorch implements ITileEntityProvider {
((TileEntityReceptacle)tileEntity).setElement(null);
ItemStack dust = new ItemStack(WizardryItems.spectral_dust, 1, currentElement.ordinal());
ItemStack dust = new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(Wizardry.MODID, "spectral_dust_" + currentElement.name().toLowerCase())));
if(stack.isEmpty()){
player.setHeldItem(hand, dust);
@@ -5,24 +5,15 @@ import electroblob.wizardry.registry.WizardryTabs;
import net.minecraft.block.Block;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import java.util.Arrays;
import java.util.EnumMap;
public class BlockRunestone extends Block {
public static final PropertyEnum<Element> ELEMENT = PropertyEnum.create("element", Element.class,
Arrays.copyOfRange(Element.values(), 1, Element.values().length)); // Everything except MAGIC
private static final EnumMap<Element, MapColor> map_colours = new EnumMap<>(Element.class);
static {
@@ -34,54 +25,24 @@ public class BlockRunestone extends Block {
map_colours.put(Element.SORCERY, MapColor.GRAY);
map_colours.put(Element.HEALING, MapColor.YELLOW_STAINED_HARDENED_CLAY);
}
public BlockRunestone(Material material){
private final Element element;
public BlockRunestone(Material material, Element element) {
super(material);
this.setDefaultState(this.blockState.getBaseState().withProperty(ELEMENT, Element.FIRE));
this.setCreativeTab(WizardryTabs.WIZARDRY);
this.setCreativeTab(WizardryTabs.WIZARDRY);
this.setHardness(1.5F);
this.setResistance(10.0F);
}
@Override
public int damageDropped(IBlockState state){
return state.getValue(ELEMENT).ordinal();
}
@Override
public MapColor getMapColor(IBlockState state, IBlockAccess world, BlockPos pos){
return map_colours.get(state.getProperties().get(ELEMENT));
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> items){
if(this.getCreativeTab() == tab){
for(Element element : Arrays.copyOfRange(Element.values(), 1, Element.values().length)){
items.add(new ItemStack(this, 1, element.ordinal()));
}
}
this.element = element;
}
public Element getElement() { return element; }
@Override
public BlockRenderLayer getRenderLayer(){
public MapColor getMapColor(IBlockState state, IBlockAccess world, BlockPos pos) { return map_colours.get(element); }
@Override
public BlockRenderLayer getRenderLayer() {
return BlockRenderLayer.CUTOUT; // Required to shade parts of the block faces differently to others
}
@Override
public IBlockState getStateFromMeta(int metadata){
Element element = Element.values()[metadata];
if(!ELEMENT.getAllowedValues().contains(element)) return this.getDefaultState();
return this.getDefaultState().withProperty(ELEMENT, element);
}
@Override
public int getMetaFromState(IBlockState state){
return state.getValue(ELEMENT).ordinal();
}
@Override
protected BlockStateContainer createBlockState(){
return new BlockStateContainer(this, ELEMENT);
}
}
@@ -1,5 +1,6 @@
package electroblob.wizardry.block;
import electroblob.wizardry.api.IElemental;
import electroblob.wizardry.constants.Element;
import electroblob.wizardry.registry.WizardryTabs;
import electroblob.wizardry.tileentity.TileEntityShrineCore;
@@ -8,28 +9,20 @@ import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.Explosion;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.EnumMap;
public class BlockPedestal extends Block implements ITileEntityProvider {
public static final PropertyEnum<Element> ELEMENT = PropertyEnum.create("element", Element.class,
Arrays.copyOfRange(Element.values(), 1, Element.values().length)); // Everything except MAGIC
public class BlockRunestonePedestal extends Block implements ITileEntityProvider, IElemental {
// A 'natural' pedestal is one that was generated as part of a structure, is unbreakable and has a tileentity
public static final PropertyBool NATURAL = PropertyBool.create("natural");
@@ -46,80 +39,66 @@ public class BlockPedestal extends Block implements ITileEntityProvider {
map_colours.put(Element.HEALING, MapColor.YELLOW_STAINED_HARDENED_CLAY);
}
public BlockPedestal(Material material){
private final Element element;
public BlockRunestonePedestal(Material material, Element element) {
super(material);
this.setDefaultState(this.blockState.getBaseState().withProperty(ELEMENT, Element.FIRE).withProperty(NATURAL, false));
this.setDefaultState(this.blockState.getBaseState().withProperty(NATURAL, false));
this.setCreativeTab(WizardryTabs.WIZARDRY);
this.setHardness(1.5F);
this.setResistance(10.0F);
this.element = element;
}
@Override
public int damageDropped(IBlockState state){
return state.getValue(ELEMENT).ordinal(); // Ignore the NATURAL state here, it's unobtainable
public Element getElement() {
return element;
}
@Override
public MapColor getMapColor(IBlockState state, IBlockAccess world, BlockPos pos){
return map_colours.get(state.getProperties().get(ELEMENT));
public MapColor getMapColor(IBlockState state, IBlockAccess world, BlockPos pos) {
return map_colours.get(element);
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> items){
// Ignore the NATURAL state here, it's unobtainable
if(this.getCreativeTab() == tab){
for(Element element : Arrays.copyOfRange(Element.values(), 1, Element.values().length)){
items.add(new ItemStack(this, 1, element.ordinal()));
}
}
}
@Override
public BlockRenderLayer getRenderLayer(){
public BlockRenderLayer getRenderLayer() {
return BlockRenderLayer.CUTOUT; // Required to shade parts of the block faces differently to others
}
@Override
public float getBlockHardness(IBlockState state, World world, BlockPos pos){
public float getBlockHardness(IBlockState state, World world, BlockPos pos) {
return state.getValue(NATURAL) ? -1 : super.getBlockHardness(state, world, pos);
}
@Override
public float getExplosionResistance(World world, BlockPos pos, @Nullable Entity exploder, Explosion explosion){
public float getExplosionResistance(World world, BlockPos pos, @Nullable Entity exploder, Explosion explosion) {
return world.getBlockState(pos).getValue(NATURAL) ? 6000000.0F : super.getExplosionResistance(world, pos, exploder, explosion);
}
@Override
public boolean hasTileEntity(IBlockState state){
public boolean hasTileEntity(IBlockState state) {
return state.getValue(NATURAL); // Only naturally-generated pedestals have a (shrine core) tile entity
}
@Nullable
@Override
public TileEntity createNewTileEntity(World world, int meta){
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityShrineCore();
}
@Override
public IBlockState getStateFromMeta(int metadata){
boolean natural = false;
if(metadata > ELEMENT.getAllowedValues().size()){
natural = true;
metadata -= ELEMENT.getAllowedValues().size();
}
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);
public IBlockState getStateFromMeta(int meta) {
return this.getDefaultState().withProperty(NATURAL, meta == 1);
}
@Override
public int getMetaFromState(IBlockState state){
return state.getValue(ELEMENT).ordinal() + (state.getValue(NATURAL) ? ELEMENT.getAllowedValues().size() : 0);
public int getMetaFromState(IBlockState state) {
return state.getValue(NATURAL) ? 1 : 0;
}
@Override
protected BlockStateContainer createBlockState(){
return new BlockStateContainer(this, ELEMENT, NATURAL);
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, NATURAL);
}
}
@@ -93,7 +93,6 @@ public class GuiArcaneWorkbench extends GuiContainer {
private ContainerArcaneWorkbench arcaneWorkbenchContainer;
private GuiButton applyBtn;
private GuiButton clearBtn;
private GuiButton[] sortButtons = new GuiButton[3];
private GuiTextField searchField;
@@ -127,7 +126,6 @@ public class GuiArcaneWorkbench extends GuiContainer {
this.buttonList.clear();
this.buttonList.add(this.applyBtn = new GuiButtonApply(0, this.width / 2 + 64, this.height / 2 + 3));
this.buttonList.add(this.clearBtn = new GuiButtonClear(0, this.width / 2 + 64, this.height / 2 - 16));
this.buttonList.add(sortButtons[0] = new GuiButtonSpellSort(1, this.guiLeft - 44, this.guiTop + 8, ISpellSortable.SortType.TIER, arcaneWorkbenchContainer, this));
this.buttonList.add(sortButtons[1] = new GuiButtonSpellSort(2, this.guiLeft - 31, this.guiTop + 8, ISpellSortable.SortType.ELEMENT, arcaneWorkbenchContainer, this));
this.buttonList.add(sortButtons[2] = new GuiButtonSpellSort(3, this.guiLeft - 18, this.guiTop + 8, ISpellSortable.SortType.ALPHABETICAL, arcaneWorkbenchContainer, this));
@@ -207,7 +205,6 @@ public class GuiArcaneWorkbench extends GuiContainer {
// Show/hide the relevant gui elements
this.applyBtn.enabled = centreSlot.getHasStack();
this.clearBtn.enabled = centreSlot.getHasStack() && centreSlot.getStack().getItem() instanceof IWorkbenchItem && ((IWorkbenchItem) centreSlot.getStack().getItem()).isClearable();
for(GuiButton button : this.sortButtons) button.visible = arcaneWorkbenchContainer.hasBookshelves();
this.searchField.setVisible(arcaneWorkbenchContainer.hasBookshelves());
@@ -447,17 +444,6 @@ public class GuiArcaneWorkbench extends GuiContainer {
animationTimer = 20;
}
if(button == clearBtn){
// Packet building
IMessage msg = new PacketControlInput.Message(PacketControlInput.ControlType.CLEAR_BUTTON);
WizardryPacketHandler.net.sendToServer(msg);
// Sound
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(
WizardrySounds.BLOCK_ARCANE_WORKBENCH_SPELLBIND, 0.8f));
// Animation
animationTimer = 20;
}
if(button instanceof GuiButtonSpellSort) this.arcaneWorkbenchContainer.setSortType(((GuiButtonSpellSort)button).sortType);
}
}
@@ -1020,36 +1006,4 @@ public class GuiArcaneWorkbench extends GuiContainer {
}
}
private static class GuiButtonClear extends GuiButton {
public GuiButtonClear(int id, int x, int y){
super(id, x, y, 16, 16, I18n.format("container." + Wizardry.MODID + ":arcane_workbench.clear"));
}
@Override
public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks){
// Whether the button is highlighted
this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height;
int k = 72;
int l = 236;
//int colour = 14737632;
if(this.enabled){
if(this.hovered){
k += this.width * 2;
//colour = 16777120;
}
}else{
k += this.width;
//colour = 10526880;
}
DrawingUtils.drawTexturedRect(this.x, this.y, k, l, this.width, this.height, TEXTURE_WIDTH, TEXTURE_HEIGHT);
//this.drawCenteredString(minecraft.fontRenderer, this.displayString, this.x + this.width / 2,
// this.y + (this.height - 8) / 2, colour);
}
}
}
@@ -1,13 +1,9 @@
package electroblob.wizardry.client.model;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.block.BlockCrystal;
import electroblob.wizardry.block.BlockPedestal;
import electroblob.wizardry.block.BlockRunestone;
import electroblob.wizardry.block.BlockRunestonePedestal;
import electroblob.wizardry.item.IMultiTexturedItem;
import electroblob.wizardry.item.ItemBlockMultiTextured;
import electroblob.wizardry.item.ItemCrystal;
import electroblob.wizardry.item.ItemSpectralDust;
import electroblob.wizardry.registry.WizardryBlocks;
import electroblob.wizardry.registry.WizardryItems;
import net.minecraft.block.BlockPlanks;
@@ -50,35 +46,12 @@ public final class WizardryModels {
@SubscribeEvent
public static void register(ModelRegistryEvent event){
// ItemBlocks
ModelLoader.setCustomStateMapper(WizardryBlocks.crystal_block, new StateMap.Builder()
.withName(BlockCrystal.ELEMENT).withSuffix("_crystal_block").build());
// Yay unchecked casting! But we know it's always ok here, and it makes everything much neater.
ItemBlockMultiTextured crystalBlockItem = (ItemBlockMultiTextured)Item.getItemFromBlock(WizardryBlocks.crystal_block);
registerMultiTexturedModel(crystalBlockItem);
ModelLoader.setCustomStateMapper(WizardryBlocks.runestone, new StateMap.Builder()
.withName(BlockRunestone.ELEMENT).withSuffix("_runestone").build());
ItemBlockMultiTextured runestoneItem = (ItemBlockMultiTextured)Item.getItemFromBlock(WizardryBlocks.runestone);
registerMultiTexturedModel(runestoneItem);
ModelLoader.setCustomStateMapper(WizardryBlocks.runestone_pedestal, new StateMap.Builder()
.withName(BlockPedestal.ELEMENT).ignore(BlockPedestal.NATURAL).withSuffix("_runestone_pedestal").build()); // Don't care about NATURAL property
ItemBlockMultiTextured pedestalItem = (ItemBlockMultiTextured)Item.getItemFromBlock(WizardryBlocks.runestone_pedestal);
registerMultiTexturedModel(pedestalItem);
ModelLoader.setCustomStateMapper(WizardryBlocks.gilded_wood, new StateMap.Builder()
.withName(BlockPlanks.VARIANT).withSuffix("_gilded_wood").build());
ItemBlockMultiTextured gildedWoodItem = (ItemBlockMultiTextured)Item.getItemFromBlock(WizardryBlocks.gilded_wood);
registerMultiTexturedModel(gildedWoodItem);
// Explanation for all this here -> https://github.com/TheGreyGhost/MinecraftByExample/tree/master/src/main/java/minecraftbyexample/mbe05_block_dynamic_block_model2
ModelLoaderRegistry.registerLoader(new ModelLoaderBookshelf());
// Items
registerMultiTexturedModel((ItemCrystal)WizardryItems.magic_crystal);
//registerMultiTexturedModel((ItemCrystal)WizardryItems.magic_crystal);
registerWandModel(WizardryItems.magic_wand);
registerWandModel(WizardryItems.apprentice_wand);
@@ -121,8 +94,6 @@ public final class WizardryModels {
registerWandModel(WizardryItems.master_sorcery_wand);
registerWandModel(WizardryItems.master_healing_wand);
registerMultiTexturedModel((ItemSpectralDust)WizardryItems.spectral_dust);
// Automatic item model registry
for(Item item : Item.REGISTRY){
if(!registeredItems.contains(item) && item.getRegistryName().getNamespace().equals(Wizardry.MODID)){
@@ -42,8 +42,8 @@ public class LayerDiamond extends LayerTiledOverlay<EntityLivingBase> {
int j = entity.getBrightnessForRender();
int k = j % 65536;
int l = j / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) k, (float) l);
int l = j / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) k, (float) l);
super.doRenderLayer(entity, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale);
@@ -43,7 +43,7 @@ public class LayerOak extends LayerTiledOverlay<EntityLivingBase> {
int j = entity.getBrightnessForRender();
int k = j % 65536;
int l = j / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) k, (float) l);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) k, (float) l);
super.doRenderLayer(entity, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale);
@@ -1,6 +1,5 @@
package electroblob.wizardry.constants;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.WizardryEventHandler;
/** Stores various global constants used in Wizardry. */
@@ -18,17 +17,17 @@ public final class Constants {
/** The bonus amount of wand upgrades that can be applied to a non-elemental wand. */
public static final int NON_ELEMENTAL_UPGRADE_BONUS = 3;
/** The fraction by which cooldowns are reduced for each level of cooldown upgrade. */
public static float COOLDOWN_REDUCTION_PER_LEVEL = 0.15f;
public static final float COOLDOWN_REDUCTION_PER_LEVEL = 0.15f;
/** The fraction by which maximum charge is increased for each level of storage upgrade. */
public static final float STORAGE_INCREASE_PER_LEVEL = 0.15f;
/** The fraction by which potency is increased for each tier of matching wand. */
public static float POTENCY_INCREASE_PER_TIER = 0.15f;
public static final float POTENCY_INCREASE_PER_TIER = 0.15f;
/** The fraction by which spell duration is increased for each level of duration upgrade. */
public static float DURATION_INCREASE_PER_LEVEL = 0.25f;
public static final float DURATION_INCREASE_PER_LEVEL = 0.25f;
/** The fraction by which spell range is increased for each level of range upgrade. */
public static float RANGE_INCREASE_PER_LEVEL = 0.25f;
public static final float RANGE_INCREASE_PER_LEVEL = 0.25f;
/** The fraction by which spell blast radius is increased for each level of range upgrade. */
public static float BLAST_RADIUS_INCREASE_PER_LEVEL = 0.25f;
public static final float BLAST_RADIUS_INCREASE_PER_LEVEL = 0.25f;
/** The fraction by which movement speed is reduced per level of frost effect. */
public static final double FROST_SLOWNESS_PER_LEVEL = 0.5;
/** The fraction by which movement speed is reduced per level of decay effect. */
@@ -48,14 +47,4 @@ public final class Constants {
*/
public static final int DECAY_SPREAD_INTERVAL = 8;
// making this as an update to the existing values to not break addons directly relying on the fields
static {
POTENCY_INCREASE_PER_TIER = (float) Wizardry.settings.potencyIncreasePerTier;
COOLDOWN_REDUCTION_PER_LEVEL = (float) Wizardry.settings.cooldownReductionPerLevel;
DURATION_INCREASE_PER_LEVEL = (float) Wizardry.settings.durationIncreasePerLevel;
RANGE_INCREASE_PER_LEVEL = (float) Wizardry.settings.rangeIncreasePerLevel;
BLAST_RADIUS_INCREASE_PER_LEVEL = (float) Wizardry.settings.blastIncreasePerLevel;
RANGE_INCREASE_PER_LEVEL = (float) Wizardry.settings.frostSlownessIncreasePerLevel;
}
}
@@ -30,14 +30,23 @@ public enum Element implements IStringSerializable {
/** The {@link ResourceLocation} for this element's 8x8 icon (displayed in the arcane workbench GUI) */
private final ResourceLocation icon;
private String modid;
/** true if this element should have worldgen structures generated (Obelisk, Shrine) */
private final boolean worldgen;
/** true if evil/good wizards of this element should naturally spawn */
private final boolean wizards;
Element(Style colour, String name){
this(colour, name, Wizardry.MODID);
this(colour, name, Wizardry.MODID, true, true);
}
Element(Style colour, String name, String modid){
Element(Style colour, String name, String modid, boolean worldgen, boolean wizards){
this.colour = colour;
this.unlocalisedName = name;
this.icon = new ResourceLocation(modid, "textures/gui/container/element_icon_" + unlocalisedName + ".png");
this.modid = modid;
this.worldgen = worldgen;
this.wizards = wizards;
}
/** Returns the element with the given name, or throws an {@link java.lang.IllegalArgumentException} if no such
@@ -93,4 +102,10 @@ public enum Element implements IStringSerializable {
public ResourceLocation getIcon(){
return icon;
}
public boolean hasWorldgen() { return worldgen; }
public boolean hasWizards() { return wizards; }
public String getModid() { return modid; }
}
@@ -382,7 +382,6 @@ public class WizardData implements INBTSerializable<NBTTagCompound> {
activeImbuements.add((Imbuement)enchantment);
}else{
// Otherwise, removes the enchantment from the item
((Imbuement) enchantment).onImbuementRemoval(stack);
iterator.remove(); // FIXME: Apparently this can cause a CME
}
}
@@ -365,7 +365,8 @@ public class EntityEvilWizard extends EntityMob implements ISpellCaster, IEntity
if(getElement() == null){
if(rand.nextBoolean()){
this.setElement(Element.values()[rand.nextInt(Element.values().length - 1) + 1]);
Element[] elements = (Element[]) Arrays.stream(Element.values()).filter(Element::hasWizards).toArray();
this.setElement(elements[rand.nextInt(elements.length - 1) + 1]);
}else{
this.setElement(Element.MAGIC);
}
@@ -72,7 +72,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
/** The wizard's current customer. */
@Nullable
private EntityPlayer customer;
private int timeUntilReset;
/** addDefaultEquipmentAndRecipies is called if this is true */
@@ -258,11 +258,11 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
@Override
public ITextComponent getDisplayName(){
if(this.hasCustomName()){
return super.getDisplayName();
}
return this.getElement().getWizardName();
}
@@ -270,7 +270,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
protected boolean canDespawn(){
return false;
}
@Override
protected SoundEvent getAmbientSound(){
if(Wizardry.tisTheSeason) return WizardrySounds.ENTITY_WIZARD_HOHOHO;
@@ -673,7 +673,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
WizardryItems.getWand(tier, Element.values()[rand.nextInt(Element.values().length)]));
}
}else if(randomiser < 8){
return new ItemStack(WizardryItems.arcane_tome, 1, 1);
return new ItemStack(WizardryItems.arcane_tome_apprentice, 1);
}else if(randomiser < 10){
EntityEquipmentSlot slot = InventoryUtils.ARMOUR_SLOTS[rand.nextInt(InventoryUtils.ARMOUR_SLOTS.length)];
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
@@ -709,7 +709,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
WizardryItems.getWand(tier, Element.values()[rand.nextInt(Element.values().length)]));
}
}else if(randomiser < 8){
return new ItemStack(WizardryItems.arcane_tome, 1, 2);
return new ItemStack(WizardryItems.arcane_tome_advanced, 1);
}else{
List<Item> upgrades = new ArrayList<Item>(WandHelper.getSpecialUpgrades());
randomiser = rand.nextInt(upgrades.size());
@@ -732,7 +732,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
return new ItemStack(WizardryItems.master_wand);
}
}else{
return new ItemStack(WizardryItems.arcane_tome, 1, 3);
return new ItemStack(WizardryItems.arcane_tome_master, 1);
}
}
@@ -747,7 +747,8 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
textureIndex = this.rand.nextInt(6);
if(rand.nextBoolean()){
this.setElement(Element.values()[rand.nextInt(Element.values().length - 1) + 1]);
Element[] elements = (Element[]) Arrays.stream(Element.values()).filter(Element::hasWizards).toArray();
this.setElement(elements[rand.nextInt(elements.length - 1) + 1]);
}else{
this.setElement(Element.MAGIC);
}
@@ -884,7 +885,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
/**
* Sets the list of blocks that are part of this wizard's tower. If a player breaks any of these blocks, the wizard
* will get angry and attack them.
*
*
* @param blocks A Set of BlockPos objects representing the blocks in the tower.
*/
public void setTowerBlocks(Set<BlockPos> blocks){
@@ -916,11 +917,11 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
}
}
}
// Copied from their respective AI classes
public static class EntityAILookAtTradePlayer extends EntityAIWatchClosest {
private final EntityWizard wizard;
public EntityAILookAtTradePlayer(EntityWizard wizard){
@@ -938,9 +939,9 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
}
}
}
public static class EntityAITradePlayer extends EntityAIBase {
private final EntityWizard wizard;
public EntityAITradePlayer(EntityWizard wizard){
@@ -950,7 +951,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
@Override
public boolean shouldExecute(){
if(!this.wizard.isEntityAlive()){
return false;
}else if(this.wizard.isInWater()){
@@ -960,7 +961,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
}else if(this.wizard.velocityChanged){
return false;
}else{
EntityPlayer entityplayer = this.wizard.getCustomer();
if(entityplayer == null){
@@ -1,45 +0,0 @@
package electroblob.wizardry.event;
import electroblob.wizardry.item.ItemArtefact;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.fml.common.eventhandler.Cancelable;
import net.minecraftforge.fml.common.eventhandler.Event;
/**
* SpellBindEvent is fired when a check happens for an ItemArtefact using {@link electroblob.wizardry.item.ItemArtefact#isArtefactActive(net.minecraft.entity.player.EntityPlayer, net.minecraft.item.Item)}
* <i>Fired on both sides.</i><br>
* <br>
* This event is {@link Cancelable}. <br>
* <br>
* This event has a result. {@link HasResult}. Set the result to Result.ALLOW to consider an artefact "active"<br>
* <br>
* This event is fired on the {@link MinecraftForge#EVENT_BUS}.
*
* @author WinDanesz
* @since Wizardry 4.3.10
*/
@Cancelable
@Event.HasResult
public class ArtefactCheckEvent extends PlayerEvent {
ItemArtefact artefact;
EntityPlayer player;
public ArtefactCheckEvent(EntityPlayer player, ItemArtefact artefact) {
super(player);
this.player = player;
this.artefact = artefact;
setResult(Result.DENY);
}
public ItemArtefact getArtefact() {
return artefact;
}
public EntityPlayer getPlayer() {
return player;
}
}
@@ -46,10 +46,6 @@ public final class WizardryBaublesIntegration {
ARTEFACT_TYPE_MAP.put(ItemArtefact.Type.RING, BaubleType.RING);
ARTEFACT_TYPE_MAP.put(ItemArtefact.Type.AMULET, BaubleType.AMULET);
ARTEFACT_TYPE_MAP.put(ItemArtefact.Type.CHARM, BaubleType.CHARM);
ARTEFACT_TYPE_MAP.put(ItemArtefact.Type.BELT, BaubleType.BELT);
ARTEFACT_TYPE_MAP.put(ItemArtefact.Type.BODY, BaubleType.BODY);
ARTEFACT_TYPE_MAP.put(ItemArtefact.Type.HEAD, BaubleType.HEAD);
ARTEFACT_TYPE_MAP.put(ItemArtefact.Type.TRINKET, BaubleType.TRINKET);
}
public static boolean enabled(){
@@ -1,5 +1,6 @@
package electroblob.wizardry.integration.jei;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.client.DrawingUtils;
import electroblob.wizardry.constants.Constants;
import electroblob.wizardry.constants.Element;
@@ -11,7 +12,9 @@ import mezz.jei.api.ingredients.VanillaTypes;
import mezz.jei.api.recipe.IRecipeWrapper;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import java.util.ArrayList;
import java.util.Collections;
@@ -95,8 +98,8 @@ public class ArcaneWorkbenchRecipe implements IRecipeWrapper {
// A stack of crystals will almost certainly be enough mana, but you never know!
// Using ItemStack.EMPTY to avoid deprecated method; crystals' stack size is not stack-sensitive so it doesn't matter
if(count <= WizardryItems.magic_crystal.getItemStackLimit(ItemStack.EMPTY)){
for(int meta = 0; meta < Element.values().length; meta++){
crystalStacks.add(new ItemStack(WizardryItems.magic_crystal, count, meta));
for (Element element : Element.values()) {
crystalStacks.add(new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(Wizardry.MODID, element.name().toLowerCase() + "_crystal")), count));
}
}
@@ -23,6 +23,7 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import java.util.ArrayList;
import java.util.Collection;
@@ -214,7 +215,9 @@ public class ArcaneWorkbenchRecipeCategory implements IRecipeCategory<ArcaneWork
List<ArcaneWorkbenchRecipe> recipes = new ArrayList<>();
List<ItemStack> crystals = new ArrayList<>();
for(int meta = 0; meta < Element.values().length; meta++) crystals.add(new ItemStack(WizardryItems.magic_crystal, 1, meta));
for (Element element : Element.values()) {
crystals.add(new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(Wizardry.MODID, "crystal_" + element.name().toLowerCase()))));
}
List<ItemStack> shard = Collections.singletonList(new ItemStack(WizardryItems.crystal_shard));
List<ItemStack> grandCrystal = Collections.singletonList(new ItemStack(WizardryItems.grand_crystal));
@@ -19,6 +19,7 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.oredict.OreDictionary;
import java.util.ArrayList;
@@ -118,7 +119,13 @@ public class ImbuementAltarRecipeCategory implements IRecipeCategory<ImbuementAl
List<ImbuementAltarRecipe> recipes = new ArrayList<>();
NonNullList<ItemStack> variants = NonNullList.create();
WizardryItems.spectral_dust.getSubItems(WizardryItems.spectral_dust.getCreativeTab(), variants);
variants.add(new ItemStack(WizardryItems.spectral_dust_earth));
variants.add(new ItemStack(WizardryItems.spectral_dust_fire));
variants.add(new ItemStack(WizardryItems.spectral_dust_healing));
variants.add(new ItemStack(WizardryItems.spectral_dust_ice));
variants.add(new ItemStack(WizardryItems.spectral_dust_lightning));
variants.add(new ItemStack(WizardryItems.spectral_dust_necromancy));
variants.add(new ItemStack(WizardryItems.spectral_dust_sorcery));
List<List<ItemStack>> dusts = new ArrayList<>();
// Generate 4 separate lists, each in a different order to make it obvious they can be any element
@@ -139,9 +146,10 @@ public class ImbuementAltarRecipeCategory implements IRecipeCategory<ImbuementAl
ItemStack input = new ItemStack(WizardryItems.magic_crystal);
for(int meta = 1; meta < Element.values().length; meta++){
List<List<ItemStack>> dusts = Collections.nCopies(4, Collections.singletonList(new ItemStack(WizardryItems.spectral_dust, 1, meta)));
ItemStack output = new ItemStack(WizardryItems.magic_crystal, 1, meta);
for(Element element : Element.values()){
List<List<ItemStack>> dusts = Collections.nCopies(4, Collections.singletonList(new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(Wizardry.MODID,
"spectral_dust_" + element.name().toLowerCase())))));
ItemStack output = new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(Wizardry.MODID, element.name().toLowerCase() + "_crystal")));
recipes.add(new ImbuementAltarRecipe(input, dusts, output));
}
@@ -153,11 +161,16 @@ public class ImbuementAltarRecipeCategory implements IRecipeCategory<ImbuementAl
List<ImbuementAltarRecipe> recipes = new ArrayList<>();
ItemStack input = new ItemStack(WizardryBlocks.crystal_block);
ItemStack input = new ItemStack(WizardryBlocks.magic_crystal_block);
for(int meta = 1; meta < Element.values().length; meta++){
List<List<ItemStack>> dusts = Collections.nCopies(4, Collections.singletonList(new ItemStack(WizardryItems.spectral_dust, 1, meta)));
ItemStack output = new ItemStack(WizardryBlocks.crystal_block, 1, meta);
for (Element element : Element.values()) {
if (element == Element.MAGIC) { continue; }
List<List<ItemStack>> dusts = Collections.nCopies(4, Collections.singletonList(new ItemStack(ForgeRegistries.ITEMS.getValue(
new ResourceLocation(Wizardry.MODID, "spectral_dust_" + element.name().toLowerCase())))));
ItemStack output = new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(Wizardry.MODID, element.getName().toLowerCase()
+ "_crystal_block")));
recipes.add(new ImbuementAltarRecipe(input, dusts, output));
}
@@ -179,7 +192,8 @@ public class ImbuementAltarRecipeCategory implements IRecipeCategory<ImbuementAl
if(e == Element.MAGIC) continue;
List<List<ItemStack>> dusts = Collections.nCopies(4, Collections.singletonList(new ItemStack(WizardryItems.spectral_dust, 1, e.ordinal())));
List<List<ItemStack>> dusts = Collections.nCopies(4, Collections.singletonList(new ItemStack(
ForgeRegistries.ITEMS.getValue(new ResourceLocation(Wizardry.MODID, "spectral_dust_" + e.name().toLowerCase())))));
ItemStack output = TileEntityImbuementAltar.getImbuementResult(input, new Element[]{e, e, e, e}, false, null, null);
if(!output.isEmpty()) recipes.add(new ImbuementAltarRecipe(input, dusts, output));
@@ -98,7 +98,9 @@ public class ContainerArcaneWorkbench extends Container implements ISpellSortabl
this.addSlotToContainer(new SlotWorkbenchItem(tileentity, CENTRE_SLOT, 80, 64, this));
Set<Item> upgrades = new HashSet<>(WandHelper.getSpecialUpgrades()); // Can't be done statically.
upgrades.add(WizardryItems.arcane_tome);
upgrades.add(WizardryItems.arcane_tome_apprentice);
upgrades.add(WizardryItems.arcane_tome_advanced);
upgrades.add(WizardryItems.arcane_tome_master);
upgrades.add(WizardryItems.resplendent_thread);
upgrades.add(WizardryItems.crystal_silver_plating);
upgrades.add(WizardryItems.ethereal_crystalweave);
@@ -452,24 +454,6 @@ public class ContainerArcaneWorkbench extends Container implements ISpellSortabl
}
}
/**
* Called (via {@link electroblob.wizardry.packet.PacketControlInput PacketControlInput}) when the clear button in
* the arcane workbench GUI is pressed.
*/
// As of 2.1, for the sake of events and neatness of code, this was moved here from TileEntityArcaneWorkbench.
// As of 4.2, the spell binding/charging/upgrading code was delegated (via IWorkbenchItem) to the items themselves.
public void onClearButtonPressed(EntityPlayer player){
Slot centre = this.getSlot(CENTRE_SLOT);
if(centre.getStack().getItem() instanceof IWorkbenchItem){ // Should always be true, but no harm in checking.
Slot[] spellBooks = this.inventorySlots.subList(0, 8).toArray(new Slot[8]);
((IWorkbenchItem) centre.getStack().getItem()).onClearButtonPressed(player, centre, this.getSlot(CRYSTAL_SLOT), this.getSlot(UPGRADE_SLOT), spellBooks);
}
}
/** Scrolls to the given row number. */
public void scrollTo(int row){
this.scroll = row;
@@ -127,7 +127,9 @@ public class ContainerBookshelf extends Container {
registerBookItem(Items.WRITABLE_BOOK);
registerBookItem(Items.ENCHANTED_BOOK);
registerBookItem(WizardryItems.spell_book);
registerBookItem(WizardryItems.arcane_tome);
registerBookItem(WizardryItems.arcane_tome_apprentice);
registerBookItem(WizardryItems.arcane_tome_advanced);
registerBookItem(WizardryItems.arcane_tome_master);
registerBookItem(WizardryItems.wizard_handbook);
registerBookItem(WizardryItems.ruined_spell_book);
registerBookItem(WizardryItems.scroll);
@@ -55,26 +55,6 @@ public interface IWorkbenchItem {
*/
boolean onApplyButtonPressed(EntityPlayer player, Slot centre, Slot crystals, Slot upgrade, Slot[] spellBooks);
/**
* Called when this item is in the central slot of an arcane workbench and the apply clear is pressed. Items must
* implement this method to define what happens when the apply button is pressed.
* @param player The player that pressed the apply button.
* @param centre The central slot in the arcane workbench. This slot will always contain a stack of the implementing
* item, or in other words, <i>it is guaranteed that</i> {@code this == centre.getStack().getItem()}.
* @param crystals The magic crystal slot of the arcane workbench.
* @param upgrade The upgrade slot of the arcane workbench.
* @param spellBooks An array of the <i>active</i> (visible) spell book slots in the arcane workbench. The length of
* the array will be equal to the value returned by {@link IWorkbenchItem#getSpellSlotCount(ItemStack)}.
* */
default void onClearButtonPressed(EntityPlayer player, Slot centre, Slot crystals, Slot upgrade, Slot[] spellBooks){};
/**
* Must be overridden in the item class to make the clear button in the Arcane Workbench clickable.
* */
default boolean isClearable() {
return false;
}
/**
* Returns whether the tooltip (dark grey box) should be drawn when this item is in an arcane workbench. Only
* called client-side.
@@ -3,11 +3,9 @@ package electroblob.wizardry.item;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.constants.Tier;
import electroblob.wizardry.registry.WizardryTabs;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -16,54 +14,33 @@ import java.util.List;
public class ItemArcaneTome extends Item {
public ItemArcaneTome(){
private final EnumRarity rarity;
private final Tier tier;
public ItemArcaneTome(EnumRarity rarity, Tier tier){
super();
setHasSubtypes(true);
setMaxStackSize(1);
setCreativeTab(WizardryTabs.WIZARDRY);
this.rarity = rarity;
this.tier = tier;
}
@Override
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> list){
if(tab == WizardryTabs.WIZARDRY){ // Don't use isInCreativeTab here.
for(int i = 1; i < Tier.values().length; i++){
list.add(new ItemStack(this, 1, i));
}
}
}
public Tier getTier() { return tier; }
@Override
@SideOnly(Side.CLIENT)
public boolean hasEffect(ItemStack stack){
return true;
}
public boolean hasEffect(ItemStack stack){ return true; }
@Override
public EnumRarity getRarity(ItemStack stack){
switch(this.getDamage(stack)){
case 1:
return EnumRarity.UNCOMMON;
case 2:
return EnumRarity.RARE;
case 3:
return EnumRarity.EPIC;
}
return EnumRarity.COMMON;
}
public EnumRarity getRarity(ItemStack stack){ return rarity; }
@SideOnly(Side.CLIENT)
@Override
public void addInformation(ItemStack stack, World world, List<String> tooltip, net.minecraft.client.util.ITooltipFlag showAdvanced){
if(stack.getItemDamage() < 1){
return; // If something's up with the metadata it will display a 'generic' tome of arcana with no info
}
Tier tier = Tier.values()[stack.getItemDamage()];
Tier tier2 = Tier.values()[stack.getItemDamage() - 1];
tooltip.add(tier.getDisplayNameWithFormatting());
Wizardry.proxy.addMultiLineDescription(tooltip, "item." + this.getRegistryName() + ".desc",
Tier tier2 = Tier.values()[tier.ordinal() - 1];
Wizardry.proxy.addMultiLineDescription(tooltip, "item." + Wizardry.MODID + ":arcane_tome.desc",
tier2.getDisplayNameWithFormatting() + "\u00A77", tier.getDisplayNameWithFormatting() + "\u00A77");
}
@@ -10,7 +10,6 @@ import electroblob.wizardry.entity.living.ISummonedCreature;
import electroblob.wizardry.entity.projectile.EntityDart;
import electroblob.wizardry.entity.projectile.EntityForceOrb;
import electroblob.wizardry.entity.projectile.EntityIceShard;
import electroblob.wizardry.event.ArtefactCheckEvent;
import electroblob.wizardry.event.SpellCastEvent;
import electroblob.wizardry.event.SpellCastEvent.Source;
import electroblob.wizardry.integration.DamageSafetyChecker;
@@ -38,7 +37,6 @@ import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingEvent;
@@ -90,11 +88,7 @@ public class ItemArtefact extends Item {
/** An artefact that improves attacking spells. Two of these can be active at any one time. */ RING(2),
/** An artefact that improves defensive spells. One of these can be active at any one time. */ AMULET(1),
/** An artefact that improves utility spells. One of these can be active at any one time. */ CHARM(1),
/** Added for add-on artefacts. */ BELT(1),
/** Added for add-on artefacts. */ BODY(1),
/** Added for add-on artefacts. */ HEAD(1),
/** Added for add-on artefacts. */ TRINKET(1);
/** An artefact that improves utility spells. One of these can be active at any one time. */ CHARM(1);
public final int maxAtOnce;
@@ -184,13 +178,6 @@ public class ItemArtefact extends Item {
if(!((ItemArtefact)artefact).enabled) return false; // Disabled in the config
ArtefactCheckEvent event = new ArtefactCheckEvent(player, (ItemArtefact) artefact);
if(MinecraftForge.EVENT_BUS.post(event)) return false;
if (event.getResult() == Event.Result.ALLOW) {
return true;
}
if(WizardryBaublesIntegration.enabled()){
return WizardryBaublesIntegration.isBaubleEquipped(player, artefact);
}else{
@@ -1,44 +1,21 @@
package electroblob.wizardry.item;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.api.IElemental;
import electroblob.wizardry.constants.Element;
import electroblob.wizardry.registry.WizardryTabs;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
/** Note that in 1.13, <i>the flattening</i> will make this class redundant, much like ItemCoal, which is probably its
* closest analog in vanilla. */
public class ItemCrystal extends Item implements IMultiTexturedItem {
public class ItemCrystal extends Item implements IElemental {
public ItemCrystal(){
private final Element element;
public ItemCrystal(Element element) {
super();
this.setHasSubtypes(true);
this.setMaxDamage(0);
this.setCreativeTab(WizardryTabs.WIZARDRY);
}
@Override
public ResourceLocation getModelName(ItemStack stack){
int metadata = stack.getMetadata();
if(metadata >= Element.values().length) metadata = 0;
return new ResourceLocation(Wizardry.MODID, "crystal_" + Element.values()[metadata].getName());
this.setMaxDamage(0);
this.setCreativeTab(WizardryTabs.WIZARDRY);
this.element = element;
}
@Override
public String getTranslationKey(ItemStack stack){
return "item." + this.getModelName(stack).toString();
}
@Override
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items){
if(tab == WizardryTabs.WIZARDRY){
for(Element element : Element.values()){
items.add(new ItemStack(this, 1, element.ordinal()));
}
}
}
public Element getElement() { return element; }
}
@@ -1,7 +1,6 @@
package electroblob.wizardry.item;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.entity.projectile.EntityConjuredArrow;
import electroblob.wizardry.registry.Spells;
import electroblob.wizardry.util.InventoryUtils;
import net.minecraft.enchantment.EnchantmentHelper;
@@ -15,7 +14,6 @@ import net.minecraft.init.SoundEvents;
import net.minecraft.item.IItemPropertyGetter;
import net.minecraft.item.ItemArrow;
import net.minecraft.item.ItemBow;
import net.minecraft.item.ItemSpectralArrow;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.util.*;
@@ -199,7 +197,8 @@ public class ItemSpectralBow extends ItemBow implements IConjuredItem {
if(!world.isRemote){
EntityConjuredArrow entityarrow = new EntityConjuredArrow(world, entityplayer);
ItemArrow itemarrow = (ItemArrow)Items.ARROW;
EntityArrow entityarrow = itemarrow.createArrow(world, new ItemStack(itemarrow), entityplayer);
entityarrow.shoot(entityplayer, entityplayer.rotationPitch, entityplayer.rotationYaw, 0.0F,
f * 3.0F, 1.0F);
@@ -1,39 +1,13 @@
package electroblob.wizardry.item;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.constants.Element;
import electroblob.wizardry.registry.WizardryTabs;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import java.util.Arrays;
public class ItemSpectralDust extends Item implements IMultiTexturedItem {
public class ItemSpectralDust extends Item {
public ItemSpectralDust(){
super();
this.setHasSubtypes(true);
this.setMaxDamage(0);
this.setCreativeTab(WizardryTabs.WIZARDRY);
}
@Override
public ResourceLocation getModelName(ItemStack stack){
int metadata = stack.getMetadata();
if(metadata >= Element.values().length) metadata = 0;
return new ResourceLocation(Wizardry.MODID, "spectral_dust_" + Element.values()[metadata].getName());
}
@Override
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items){
if(tab == WizardryTabs.WIZARDRY){
for(Element element : Arrays.copyOfRange(Element.values(), 1, Element.values().length)){
items.add(new ItemStack(this, 1, element.ordinal()));
}
}
}
}
@@ -28,7 +28,6 @@ import net.minecraft.inventory.Slot;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
@@ -46,7 +45,6 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
@@ -228,15 +226,9 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
}
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isHeldInMainhand){
boolean isHeld = isHeldInMainhand || entity instanceof EntityLivingBase && ItemStack.areItemStacksEqual(stack, ((EntityLivingBase) entity).getHeldItemOffhand());
// If Wizardry.settings.wandsMustBeHeldToDecrementCooldown is false, the cooldowns will be decremented.
// If Wizardry.settings.wandsMustBeHeldToDecrementCooldown is true and isHeld is true, the cooldowns will also be decremented.
// If Wizardry.settings.wandsMustBeHeldToDecrementCooldown is true and isHeld is false, the cooldowns will not be decremented.
if (!Wizardry.settings.wandsMustBeHeldToDecrementCooldown || isHeld) {
WandHelper.decrementCooldowns(stack);
}
public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isHeld){
if(isHeld) WandHelper.decrementCooldowns(stack);
// Decrements wand damage (increases mana) every 1.5 seconds if it has a condenser upgrade
if(!world.isRemote && !this.isManaFull(stack) && world.getTotalWorldTime() % Constants.CONDENSER_TICK_INTERVAL == 0){
@@ -695,9 +687,9 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
// Upgrades wand if necessary. Damage is copied, preserving remaining durability,
// and also the entire NBT tag compound.
if(upgrade.getItem() == WizardryItems.arcane_tome){
if(upgrade.getItem() instanceof ItemArcaneTome){
Tier tier = Tier.values()[upgrade.getItemDamage()];
Tier tier = ((ItemArcaneTome) upgrade.getItem()).getTier();
// Checks the wand upgrade is for the tier above the wand's tier, and that either the wand has enough
// progression or the player is in creative mode.
@@ -844,19 +836,8 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
Spell spell = Spell.byMetadata(spellBooks[i].getStack().getItemDamage());
// If the wand is powerful enough for the spell, it's not already bound to that slot and it's enabled for wands
if(!(spell.getTier().level > this.tier.level) && spells[i] != spell && spell.isEnabled(SpellProperties.Context.WANDS)){
// Decide if we can bind this multiple times
if (Wizardry.settings.preventBindingSameSpellTwiceToWands && Arrays.stream(spells).anyMatch(s -> s == spell)) {
continue;
}
spells[i] = spell;
changed = true;
// setting to consume books upon use
if (Wizardry.settings.singleUseSpellBooks) {
spellBooks[i].getStack().shrink(1);
}
}
}
}
@@ -894,19 +875,6 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
return changed;
}
@Override
public void onClearButtonPressed(EntityPlayer player, Slot centre, Slot crystals, Slot upgrade, Slot[] spellBooks){
ItemStack stack = centre.getStack();
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(WandHelper.SPELL_ARRAY_KEY)) {
NBTTagCompound nbt = stack.getTagCompound();
nbt.removeTag(WandHelper.SPELL_ARRAY_KEY);
stack.setTagCompound(nbt);
}
}
@Override
public boolean isClearable() { return true; }
// hitEntity is only called server-side, so we'll have to use events
@SubscribeEvent
public static void onAttackEntityEvent(AttackEntityEvent event){
@@ -51,17 +51,6 @@ public class PacketControlInput implements IMessageHandler<Message, IMessage> {
break;
case CLEAR_BUTTON:
if(!(player.openContainer instanceof ContainerArcaneWorkbench)){
Wizardry.logger.warn("Received a PacketControlInput, but the player that sent it was not " +
"currently using an arcane workbench. This should not happen!");
}else{
((ContainerArcaneWorkbench)player.openContainer).onClearButtonPressed(player);
}
break;
case NEXT_SPELL_KEY:
if(wand.getItem() instanceof ISpellCastingItem){
@@ -144,7 +133,7 @@ public class PacketControlInput implements IMessageHandler<Message, IMessage> {
}
public enum ControlType {
APPLY_BUTTON, NEXT_SPELL_KEY, PREVIOUS_SPELL_KEY, RESURRECT_BUTTON, CANCEL_RESURRECT, POSSESSION_PROJECTILE, CLEAR_BUTTON
APPLY_BUTTON, NEXT_SPELL_KEY, PREVIOUS_SPELL_KEY, RESURRECT_BUTTON, CANCEL_RESURRECT, POSSESSION_PROJECTILE
}
public static class Message implements IMessage {
@@ -1,7 +1,6 @@
package electroblob.wizardry.potion;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.item.ItemWizardArmour;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemStack;
@@ -46,12 +45,8 @@ public class CurseUndeath extends Curse {
} else {
itemstack.setItemDamage(itemstack.getItemDamage() + entitylivingbase.world.rand.nextInt(2));
if (itemstack.getItemDamage() >= itemstack.getMaxDamage()) {
if (itemstack.getItem() instanceof ItemWizardArmour) {
entitylivingbase.setFire(8);
} else {
entitylivingbase.renderBrokenItemStack(itemstack);
entitylivingbase.setItemStackToSlot(EntityEquipmentSlot.HEAD, ItemStack.EMPTY);
}
entitylivingbase.renderBrokenItemStack(itemstack);
entitylivingbase.setItemStackToSlot(EntityEquipmentSlot.HEAD, ItemStack.EMPTY);
}
}
}
@@ -2,6 +2,7 @@ package electroblob.wizardry.registry;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.block.*;
import electroblob.wizardry.constants.Element;
import electroblob.wizardry.tileentity.*;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
@@ -43,7 +44,15 @@ public final class WizardryBlocks {
public static final Block crystal_ore = placeholder();
public static final Block crystal_flower = placeholder();
public static final Block transportation_stone = placeholder();
public static final Block crystal_block = placeholder();
public static final Block magic_crystal_block = placeholder();
public static final Block fire_crystal_block = placeholder();
public static final Block ice_crystal_block = placeholder();
public static final Block lightning_crystal_block = placeholder();
public static final Block necromancy_crystal_block = placeholder();
public static final Block earth_crystal_block = placeholder();
public static final Block sorcery_crystal_block = placeholder();
public static final Block healing_crystal_block = placeholder();
public static final Block petrified_stone = placeholder();
public static final Block ice_statue = placeholder();
@@ -59,9 +68,28 @@ public final class WizardryBlocks {
public static final Block permafrost = placeholder();
public static final Block runestone = placeholder();
public static final Block runestone_pedestal = placeholder();
public static final Block fire_runestone = placeholder();
public static final Block ice_runestone = placeholder();
public static final Block lightning_runestone = placeholder();
public static final Block necromancy_runestone = placeholder();
public static final Block earth_runestone = placeholder();
public static final Block sorcery_runestone = placeholder();
public static final Block healing_runestone = placeholder();
public static final Block gilded_wood = placeholder();
public static final Block fire_runestone_pedestal = placeholder();
public static final Block ice_runestone_pedestal = placeholder();
public static final Block lightning_runestone_pedestal = placeholder();
public static final Block necromancy_runestone_pedestal = placeholder();
public static final Block earth_runestone_pedestal = placeholder();
public static final Block healing_runestone_pedestal = placeholder();
public static final Block sorcery_runestone_pedestal = placeholder();
public static final Block acacia_gilded_wood = placeholder();
public static final Block birch_gilded_wood = placeholder();
public static final Block dark_oak_gilded_wood = placeholder();
public static final Block jungle_gilded_wood = placeholder();
public static final Block oak_gilded_wood = placeholder();
public static final Block spruce_gilded_wood = placeholder();
public static final Block oak_bookshelf = placeholder();
public static final Block spruce_bookshelf = placeholder();
@@ -108,7 +136,15 @@ public final class WizardryBlocks {
registerBlock(registry, "crystal_ore", new BlockCrystalOre(Material.ROCK).setHardness(3.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "crystal_flower", new BlockCrystalFlower(Material.PLANTS).setHardness(0.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "transportation_stone", new BlockTransportationStone(Material.ROCK).setHardness(0.3F).setLightLevel(0.5f).setLightOpacity(0).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "crystal_block", new BlockCrystal(Material.IRON).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "magic_crystal_block", new BlockCrystal(Element.MAGIC).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "fire_crystal_block", new BlockCrystal(Element.MAGIC).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "ice_crystal_block", new BlockCrystal(Element.MAGIC).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "lightning_crystal_block", new BlockCrystal(Element.MAGIC).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "necromancy_crystal_block", new BlockCrystal(Element.MAGIC).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "earth_crystal_block", new BlockCrystal(Element.MAGIC).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "sorcery_crystal_block", new BlockCrystal(Element.MAGIC).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "healing_crystal_block", new BlockCrystal(Element.MAGIC).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY));
registerBlock(registry, "petrified_stone", new BlockStatue(Material.ROCK).setHardness(1.5F).setResistance(10.0F));
registerBlock(registry, "ice_statue", new BlockStatue(Material.ICE).setHardness(0.5F).setLightOpacity(3));
@@ -123,10 +159,28 @@ public final class WizardryBlocks {
registerBlock(registry, "crystal_flower_pot", new BlockCrystalFlowerPot());
registerBlock(registry, "permafrost", new BlockPermafrost());
registerBlock(registry, "runestone", new BlockRunestone(Material.ROCK));
registerBlock(registry, "runestone_pedestal", new BlockPedestal(Material.ROCK));
registerBlock(registry, "fire_runestone", new BlockRunestone(Material.ROCK, Element.FIRE));
registerBlock(registry, "ice_runestone", new BlockRunestone(Material.ROCK, Element.ICE));
registerBlock(registry, "lightning_runestone", new BlockRunestone(Material.ROCK, Element.LIGHTNING));
registerBlock(registry, "necromancy_runestone", new BlockRunestone(Material.ROCK, Element.NECROMANCY));
registerBlock(registry, "earth_runestone", new BlockRunestone(Material.ROCK, Element.EARTH));
registerBlock(registry, "sorcery_runestone", new BlockRunestone(Material.ROCK, Element.SORCERY));
registerBlock(registry, "healing_runestone", new BlockRunestone(Material.ROCK, Element.HEALING));
registerBlock(registry, "gilded_wood", new BlockGildedWood());
registerBlock(registry, "fire_runestone_pedestal", new BlockRunestonePedestal(Material.ROCK, Element.FIRE));
registerBlock(registry, "ice_runestone_pedestal", new BlockRunestonePedestal(Material.ROCK, Element.ICE));
registerBlock(registry, "lightning_runestone_pedestal", new BlockRunestonePedestal(Material.ROCK, Element.LIGHTNING));
registerBlock(registry, "necromancy_runestone_pedestal", new BlockRunestonePedestal(Material.ROCK, Element.NECROMANCY));
registerBlock(registry, "earth_runestone_pedestal", new BlockRunestonePedestal(Material.ROCK, Element.EARTH));
registerBlock(registry, "healing_runestone_pedestal", new BlockRunestonePedestal(Material.ROCK, Element.HEALING));
registerBlock(registry, "sorcery_runestone_pedestal", new BlockRunestonePedestal(Material.ROCK, Element.SORCERY));
registerBlock(registry, "acacia_gilded_wood", new BlockGildedWood());
registerBlock(registry, "birch_gilded_wood", new BlockGildedWood());
registerBlock(registry, "dark_oak_gilded_wood", new BlockGildedWood());
registerBlock(registry, "jungle_gilded_wood", new BlockGildedWood());
registerBlock(registry, "oak_gilded_wood", new BlockGildedWood());
registerBlock(registry, "spruce_gilded_wood", new BlockGildedWood());
registerBlock(registry, "oak_bookshelf", new BlockBookshelf());
registerBlock(registry, "spruce_bookshelf", new BlockBookshelf());
@@ -26,11 +26,13 @@ import net.minecraft.item.ItemArmor.ArmorMaterial;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.BannerPattern;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder;
import net.minecraftforge.registries.IForgeRegistry;
@@ -79,12 +81,21 @@ public final class WizardryItems {
// which means you lose the individual fields...
public static final Item magic_crystal = placeholder();
public static final Item earth_crystal = placeholder();
public static final Item fire_crystal = placeholder();
public static final Item healing_crystal = placeholder();
public static final Item ice_crystal = placeholder();
public static final Item lightning_crystal = placeholder();
public static final Item necromancy_crystal = placeholder();
public static final Item sorcery_crystal = placeholder();
public static final Item grand_crystal = placeholder();
public static final Item crystal_shard = placeholder();
public static final Item wizard_handbook = placeholder();
public static final Item arcane_tome = placeholder();
public static final Item arcane_tome_apprentice = placeholder();
public static final Item arcane_tome_advanced = placeholder();
public static final Item arcane_tome_master = placeholder();
public static final Item spell_book = placeholder();
public static final Item scroll = placeholder();
public static final Item ruined_spell_book = placeholder();
@@ -162,7 +173,13 @@ public final class WizardryItems {
public static final Item smoke_bomb = placeholder();
public static final Item spark_bomb = placeholder();
public static final Item spectral_dust = placeholder();
public static final Item spectral_dust_earth = placeholder();
public static final Item spectral_dust_fire = placeholder();
public static final Item spectral_dust_healing = placeholder();
public static final Item spectral_dust_ice = placeholder();
public static final Item spectral_dust_lightning = placeholder();
public static final Item spectral_dust_necromancy = placeholder();
public static final Item spectral_dust_sorcery = placeholder();
public static final Item wizard_hat = placeholder();
public static final Item wizard_robe = placeholder();
@@ -543,10 +560,37 @@ public final class WizardryItems {
String[] elements = Arrays.stream(Element.values()).map(Element::getName).toArray(String[]::new);
String[] woodTypes = Arrays.stream(BlockPlanks.EnumType.values()).map(BlockPlanks.EnumType::getName).toArray(String[]::new);
registerMultiTexturedItemBlock(registry, WizardryBlocks.crystal_block, true, elements);
registerMultiTexturedItemBlock(registry, WizardryBlocks.runestone, false, elements);
registerMultiTexturedItemBlock(registry, WizardryBlocks.runestone_pedestal, false, elements);
registerMultiTexturedItemBlock(registry, WizardryBlocks.gilded_wood, true, woodTypes);
registerItemBlock(registry, WizardryBlocks.magic_crystal_block);
registerItemBlock(registry, WizardryBlocks.fire_crystal_block);
registerItemBlock(registry, WizardryBlocks.ice_crystal_block);
registerItemBlock(registry, WizardryBlocks.lightning_crystal_block);
registerItemBlock(registry, WizardryBlocks.necromancy_crystal_block);
registerItemBlock(registry, WizardryBlocks.earth_crystal_block);
registerItemBlock(registry, WizardryBlocks.sorcery_crystal_block);
registerItemBlock(registry, WizardryBlocks.healing_crystal_block);
registerItemBlock(registry, WizardryBlocks.fire_runestone);
registerItemBlock(registry, WizardryBlocks.ice_runestone);
registerItemBlock(registry, WizardryBlocks.lightning_runestone);
registerItemBlock(registry, WizardryBlocks.necromancy_runestone);
registerItemBlock(registry, WizardryBlocks.earth_runestone);
registerItemBlock(registry, WizardryBlocks.sorcery_runestone);
registerItemBlock(registry, WizardryBlocks.healing_runestone);
registerItemBlock(registry, WizardryBlocks.fire_runestone_pedestal);
registerItemBlock(registry, WizardryBlocks.ice_runestone_pedestal);
registerItemBlock(registry, WizardryBlocks.lightning_runestone_pedestal);
registerItemBlock(registry, WizardryBlocks.necromancy_runestone_pedestal);
registerItemBlock(registry, WizardryBlocks.earth_runestone_pedestal);
registerItemBlock(registry, WizardryBlocks.healing_runestone_pedestal);
registerItemBlock(registry, WizardryBlocks.sorcery_runestone_pedestal);
registerItemBlock(registry, WizardryBlocks.acacia_gilded_wood);
registerItemBlock(registry, WizardryBlocks.birch_gilded_wood);
registerItemBlock(registry, WizardryBlocks.dark_oak_gilded_wood);
registerItemBlock(registry, WizardryBlocks.jungle_gilded_wood);
registerItemBlock(registry, WizardryBlocks.oak_gilded_wood);
registerItemBlock(registry, WizardryBlocks.spruce_gilded_wood);
registerItemBlock(registry, WizardryBlocks.oak_bookshelf);
registerItemBlock(registry, WizardryBlocks.spruce_bookshelf);
@@ -567,13 +611,22 @@ public final class WizardryItems {
// Items
registerItem(registry, "magic_crystal", new ItemCrystal());
registerItem(registry, "magic_crystal", new ItemCrystal(Element.MAGIC));
registerItem(registry, "earth_crystal", new ItemCrystal(Element.EARTH));
registerItem(registry, "fire_crystal", new ItemCrystal(Element.FIRE));
registerItem(registry, "healing_crystal", new ItemCrystal(Element.HEALING));
registerItem(registry, "ice_crystal", new ItemCrystal(Element.ICE));
registerItem(registry, "lightning_crystal", new ItemCrystal(Element.LIGHTNING));
registerItem(registry, "necromancy_crystal", new ItemCrystal(Element.NECROMANCY));
registerItem(registry, "sorcery_crystal", new ItemCrystal(Element.SORCERY));
registerItem(registry, "crystal_shard", new Item().setCreativeTab(WizardryTabs.WIZARDRY));
registerItem(registry, "grand_crystal", new Item().setCreativeTab(WizardryTabs.WIZARDRY));
registerItem(registry, "wizard_handbook", new ItemWizardHandbook(), true);
registerItem(registry, "arcane_tome", new ItemArcaneTome());
registerItem(registry, "arcane_tome_apprentice", new ItemArcaneTome(EnumRarity.UNCOMMON, Tier.APPRENTICE));
registerItem(registry, "arcane_tome_advanced", new ItemArcaneTome(EnumRarity.RARE, Tier.ADVANCED));
registerItem(registry, "arcane_tome_master", new ItemArcaneTome(EnumRarity.EPIC, Tier.MASTER));
registerItem(registry, "spell_book", new ItemSpellBook(), true);
registerItem(registry, "scroll", new ItemScroll());
registerItem(registry, "ruined_spell_book", new Item().setCreativeTab(WizardryTabs.WIZARDRY).setMaxStackSize(16));
@@ -654,7 +707,13 @@ public final class WizardryItems {
registerItem(registry, "smoke_bomb", new ItemSmokeBomb());
registerItem(registry, "spark_bomb", new ItemSparkBomb());
registerItem(registry, "spectral_dust", new ItemSpectralDust());
registerItem(registry, "spectral_dust_earth", new ItemSpectralDust());
registerItem(registry, "spectral_dust_fire", new ItemSpectralDust());
registerItem(registry, "spectral_dust_healing", new ItemSpectralDust());
registerItem(registry, "spectral_dust_ice", new ItemSpectralDust());
registerItem(registry, "spectral_dust_lightning", new ItemSpectralDust());
registerItem(registry, "spectral_dust_necromancy", new ItemSpectralDust());
registerItem(registry, "spectral_dust_sorcery", new ItemSpectralDust());
registerItem(registry, "wizard_hat", new ItemWizardArmour(ArmourClass.WIZARD, EntityEquipmentSlot.HEAD, null), true);
registerItem(registry, "wizard_robe", new ItemWizardArmour(ArmourClass.WIZARD, EntityEquipmentSlot.CHEST, null));
@@ -991,9 +1050,11 @@ public final class WizardryItems {
/** Called from init() in the main mod class to register wizardry's banner patterns. */
public static void registerBannerPatterns(){
for(Element element : Element.values()){
if(element != Element.MAGIC) addBannerPattern("WIZARDRY_" + element.getName().toUpperCase(Locale.ROOT),
"wizardry_" + element.getName(), "eb" + element.getName().charAt(0),
new ItemStack(WizardryItems.magic_crystal, 1, element.ordinal()));
if (element != Element.MAGIC) {
addBannerPattern("WIZARDRY_" + element.getName().toUpperCase(Locale.ROOT),
"wizardry_" + element.getName(), "eb" + element.getName().charAt(0),
new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(Wizardry.MODID, "crystal_" + element.name().toLowerCase()))));
}
}
}
@@ -63,7 +63,7 @@ public class MarkSacrifice extends SpellRay {
PotionEffect effect = event.getEntityLiving().getActivePotionEffect(WizardryPotions.mark_of_sacrifice);
if(effect != null && event.getSource().isMagicDamage()){
event.setAmount(event.getAmount() * (1 + (1 + effect.getAmplifier()) * DAMAGE_INCREASE_PER_LEVEL));
event.setAmount(event.getAmount() * (1 + effect.getAmplifier()) * DAMAGE_INCREASE_PER_LEVEL);
event.getEntityLiving().removePotionEffect(WizardryPotions.mark_of_sacrifice);
}
}
@@ -125,8 +125,7 @@ public class SpellBuff extends Spell {
@Override
public boolean cast(World world, EntityLiving caster, EnumHand hand, int ticksInUse, EntityLivingBase target, SpellModifiers modifiers){
// Wizards can only cast a buff spell if they don't already have its effects.
// Some buff spells doesn't add any potion effects, those are ignored by this check
if(!potionSet.isEmpty() && caster.getActivePotionMap().keySet().containsAll(potionSet)) return false;
if(caster.getActivePotionMap().keySet().containsAll(potionSet)) return false;
// Only return on the server side or the client probably won't spawn particles
if(!this.applyEffects(caster, modifiers) && !world.isRemote) return false;
if(world.isRemote) this.spawnParticles(world, caster, modifiers);
@@ -188,7 +188,9 @@ public class TileEntityArcaneWorkbench extends TileEntity implements IInventory,
}else if(slotNumber == ContainerArcaneWorkbench.UPGRADE_SLOT){
Set<Item> upgrades = new HashSet<>(WandHelper.getSpecialUpgrades());
upgrades.add(WizardryItems.arcane_tome);
upgrades.add(WizardryItems.arcane_tome_apprentice);
upgrades.add(WizardryItems.arcane_tome_advanced);
upgrades.add(WizardryItems.arcane_tome_master);
upgrades.add(WizardryItems.resplendent_thread);
upgrades.add(WizardryItems.crystal_silver_plating);
upgrades.add(WizardryItems.ethereal_crystalweave);
@@ -256,8 +256,7 @@ public class TileEntityImbuementAltar extends TileEntity implements ITickable {
}
}
if((input.getItem() == WizardryItems.magic_crystal || input.getItem() == Item.getItemFromBlock(WizardryBlocks.crystal_block))
&& input.getMetadata() == 0){
if((input.getItem() == WizardryItems.magic_crystal || input.getItem() == Item.getItemFromBlock(WizardryBlocks.magic_crystal_block))){
if(Arrays.stream(receptacleElements).distinct().count() == 1 && receptacleElements[0] != null){ // All the same element
return new ItemStack(input.getItem(), input.getCount(), receptacleElements[0].ordinal());
@@ -1,7 +1,9 @@
package electroblob.wizardry.tileentity;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.block.BlockPedestal;
import electroblob.wizardry.api.IElemental;
import electroblob.wizardry.block.BlockRunestonePedestal;
import electroblob.wizardry.constants.Element;
import electroblob.wizardry.entity.living.EntityEvilWizard;
import electroblob.wizardry.entity.living.EntityWizard;
import electroblob.wizardry.packet.PacketConquerShrine;
@@ -101,7 +103,8 @@ public class TileEntityShrineCore extends TileEntity implements ITickable {
}
wizard.setLocationAndAngles(x1, y1 + 0.5, z1, 0, 0);
wizard.setElement(world.getBlockState(pos).getValue(BlockPedestal.ELEMENT));
wizard.setElement(world.getBlockState(pos).getBlock() instanceof IElemental
? ((IElemental) world.getBlockState(pos).getBlock()).getElement() : Element.MAGIC);
wizard.onInitialSpawn(world.getDifficultyForLocation(pos), null);
wizard.hasStructure = true;
@@ -144,9 +147,8 @@ public class TileEntityShrineCore extends TileEntity implements ITickable {
WizardryPacketHandler.net.sendToAllAround(new PacketConquerShrine.Message(this.pos),
new NetworkRegistry.TargetPoint(this.world.provider.getDimension(), x, y, z, 64));
if(world.getBlockState(pos).getBlock() == WizardryBlocks.runestone_pedestal){
world.setBlockState(pos, WizardryBlocks.runestone_pedestal.getDefaultState()
.withProperty(BlockPedestal.ELEMENT, world.getBlockState(pos).getValue(BlockPedestal.ELEMENT)));
if(world.getBlockState(pos).getBlock() instanceof BlockRunestonePedestal){
world.setBlockState(pos, world.getBlockState(pos).getBlock().getDefaultState());
}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!");
}
@@ -201,7 +201,7 @@ public final class AllyDesignationSystem {
// Owned entities inherit their owner's allies
if(allyOf instanceof IEntityOwnable){
Entity owner = ((IEntityOwnable)allyOf).getOwner();
if(owner instanceof EntityLivingBase && (owner == possibleAlly || isAllied((EntityLivingBase)owner, possibleAlly))) return true;
if(owner instanceof EntityLivingBase && isAllied((EntityLivingBase)owner, possibleAlly)) return true;
}
if(allyOf instanceof EntityPlayer && possibleAlly instanceof EntityPlayer
@@ -1,7 +1,5 @@
package electroblob.wizardry.util;
import electroblob.wizardry.Settings;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.entity.living.*;
import net.minecraft.entity.Entity;
import net.minecraft.entity.boss.EntityDragon;
@@ -197,7 +195,7 @@ public class MagicDamage extends EntityDamageSource implements IElementalDamage
* @return A damagesource object of type EntityDamageSource
*/
public static DamageSource causeDirectMagicDamage(Entity caster, DamageType type, boolean isRetaliatory){
return new MagicDamage(getDirectDamageNameForType(type), caster, type, isRetaliatory);
return new MagicDamage(DIRECT_MAGIC_DAMAGE, caster, type, isRetaliatory);
}
/**
@@ -243,15 +241,7 @@ public class MagicDamage extends EntityDamageSource implements IElementalDamage
*/
public static DamageSource causeIndirectMagicDamage(Entity magic, Entity caster, DamageType type,
boolean isRetaliatory){
return new IndirectMagicDamage(getIndirectDamageNameForType(type), magic, caster, type, isRetaliatory);
}
public static String getIndirectDamageNameForType(DamageType type) {
return Wizardry.settings.damageTypePerElement ? type.name().toLowerCase() + "_" + INDIRECT_MAGIC_DAMAGE : INDIRECT_MAGIC_DAMAGE;
}
public static String getDirectDamageNameForType(DamageType type) {
return Wizardry.settings.damageTypePerElement ? type.name().toLowerCase() + "_" + DIRECT_MAGIC_DAMAGE : DIRECT_MAGIC_DAMAGE;
return new IndirectMagicDamage(INDIRECT_MAGIC_DAMAGE, magic, caster, type, isRetaliatory);
}
@Override
@@ -1,5 +1,6 @@
package electroblob.wizardry.worldgen;
import electroblob.wizardry.block.BlockGildedWood;
import electroblob.wizardry.registry.WizardryBlocks;
import electroblob.wizardry.util.BlockUtils;
import net.minecraft.block.Block;
@@ -89,11 +90,24 @@ public class WoodTypeTemplateProcessor implements ITemplateProcessor {
public Template.BlockInfo processBlock(World world, BlockPos pos, Template.BlockInfo info){
// Why do these each have their own property key?
if(info.blockState.getBlock() instanceof BlockPlanks){ // This covers gilded wood too
if(info.blockState.getBlock() instanceof BlockPlanks){ // This doesn't cover gilded wood
return new Template.BlockInfo(info.pos, info.blockState.withProperty(BlockPlanks.VARIANT, woodType), info.tileentityData);
}else if(info.blockState.getBlock() instanceof BlockWoodSlab){
return new Template.BlockInfo(info.pos, info.blockState.withProperty(BlockWoodSlab.VARIANT, woodType), info.tileentityData);
// This is a mess, no wonder the flattening happened
}else if(info.blockState.getBlock() instanceof BlockGildedWood){
switch (woodType) {
case OAK:
return new Template.BlockInfo(info.pos, WizardryBlocks.oak_gilded_wood.getDefaultState(), info.tileentityData);
case SPRUCE:
return new Template.BlockInfo(info.pos, WizardryBlocks.spruce_gilded_wood.getDefaultState(), info.tileentityData);
case BIRCH:
return new Template.BlockInfo(info.pos, WizardryBlocks.birch_gilded_wood.getDefaultState(), info.tileentityData);
case JUNGLE:
return new Template.BlockInfo(info.pos, WizardryBlocks.jungle_gilded_wood.getDefaultState(), info.tileentityData);
case ACACIA:
return new Template.BlockInfo(info.pos, WizardryBlocks.acacia_gilded_wood.getDefaultState(), info.tileentityData);
case DARK_OAK:
return new Template.BlockInfo(info.pos, WizardryBlocks.dark_oak_gilded_wood.getDefaultState(), info.tileentityData);
}
// This is a mess, no wonder the flattening happened
}else if(DOORS.containsValue(info.blockState.getBlock())){
return new Template.BlockInfo(info.pos, BlockUtils.copyState(DOORS.get(woodType), info.blockState), info.tileentityData);
}else if(STAIRS.containsValue(info.blockState.getBlock())){
@@ -5,6 +5,7 @@ import electroblob.wizardry.block.BlockRunestone;
import electroblob.wizardry.constants.Element;
import electroblob.wizardry.entity.living.EntityRemnant;
import electroblob.wizardry.integration.antiqueatlas.WizardryAntiqueAtlasIntegration;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.MobSpawnerBaseLogic;
@@ -17,8 +18,10 @@ import net.minecraft.world.World;
import net.minecraft.world.gen.structure.template.ITemplateProcessor;
import net.minecraft.world.gen.structure.template.PlacementSettings;
import net.minecraft.world.gen.structure.template.Template;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;
import java.util.Map;
import java.util.Random;
@@ -57,10 +60,12 @@ public class WorldGenObelisk extends WorldGenSurfaceStructure {
@Override
public void spawnStructure(Random random, World world, BlockPos origin, Template template, PlacementSettings settings, ResourceLocation structureFile){
final Element element = Element.values()[1 + random.nextInt(Element.values().length-1)];
Element[] elements = (Element[]) Arrays.stream(Element.values()).filter(Element::hasWorldgen).toArray();
final Element element = elements[1 + random.nextInt(elements.length-1)];
Block runeStone = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(element.getModid(), element.getName().toLowerCase() + "_runestone"));
ITemplateProcessor processor = (w, p, i) -> i.blockState.getBlock() instanceof BlockRunestone ? new Template.BlockInfo(
i.pos, i.blockState.withProperty(BlockRunestone.ELEMENT, element), i.tileentityData) : i;
i.pos, runeStone.getDefaultState(), i.tileentityData) : i;
template.addBlocksToWorld(world, origin, processor, settings, 2 | 16);
@@ -1,13 +1,13 @@
package electroblob.wizardry.worldgen;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.block.BlockPedestal;
import electroblob.wizardry.block.BlockRunestone;
import electroblob.wizardry.block.BlockRunestonePedestal;
import electroblob.wizardry.constants.Element;
import electroblob.wizardry.integration.antiqueatlas.WizardryAntiqueAtlasIntegration;
import electroblob.wizardry.registry.WizardryBlocks;
import electroblob.wizardry.spell.ArcaneLock;
import electroblob.wizardry.tileentity.TileEntityShrineCore;
import net.minecraft.block.Block;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
@@ -15,8 +15,10 @@ import net.minecraft.world.World;
import net.minecraft.world.gen.structure.template.ITemplateProcessor;
import net.minecraft.world.gen.structure.template.PlacementSettings;
import net.minecraft.world.gen.structure.template.Template;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
@@ -49,10 +51,12 @@ public class WorldGenShrine extends WorldGenSurfaceStructure {
@Override
public void spawnStructure(Random random, World world, BlockPos origin, Template template, PlacementSettings settings, ResourceLocation structureFile){
final Element element = Element.values()[1 + random.nextInt(Element.values().length-1)];
Element[] elements = (Element[]) Arrays.stream(Element.values()).filter(Element::hasWorldgen).toArray();
final Element element = elements[1 + random.nextInt(elements.length-1)];
Block runeStone = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(element.getModid(), element.getName().toLowerCase() + "_runestone"));
ITemplateProcessor processor = (w, p, i) -> i.blockState.getBlock() instanceof BlockRunestone ? new Template.BlockInfo(
i.pos, i.blockState.withProperty(BlockRunestone.ELEMENT, element), i.tileentityData) : i;
i.pos, runeStone.getDefaultState(), i.tileentityData) : i;
template.addBlocksToWorld(world, origin, processor, settings, 2 | 16);
@@ -65,8 +69,8 @@ public class WorldGenShrine extends WorldGenSurfaceStructure {
if(entry.getValue().equals(CORE_DATA_BLOCK_TAG)){
// This bit could have been done with a template processor, but we also need to link the chest and lock it
world.setBlockState(entry.getKey(), WizardryBlocks.runestone_pedestal.getDefaultState()
.withProperty(BlockPedestal.ELEMENT, element).withProperty(BlockPedestal.NATURAL, true));
world.setBlockState(entry.getKey(), ForgeRegistries.BLOCKS.getValue(new ResourceLocation(Wizardry.MODID, element.getName().toLowerCase()
+ "_runestone_pedestal")).getDefaultState().withProperty(BlockRunestonePedestal.NATURAL, true));
TileEntity core = world.getTileEntity(entry.getKey());
TileEntity container = world.getTileEntity(entry.getKey().up());
@@ -7,8 +7,7 @@
"translate": "advancement.ebwizardry:crystal.desc"
},
"icon": {
"item": "ebwizardry:magic_crystal",
"data": 0
"item": "ebwizardry:magic_crystal"
}
},
"parent": "ebwizardry:root",
@@ -18,8 +17,28 @@
"conditions": {
"items": [
{
"item": "ebwizardry:magic_crystal",
"data": 0
"item": "ebwizardry:magic_crystal"
},
{
"item": "ebwizardry:fire_crystal"
},
{
"item": "ebwizardry:ice_crystal"
},
{
"item": "ebwizardry:lightning_crystal"
},
{
"item": "ebwizardry:necromancy_crystal"
},
{
"item": "ebwizardry:earth_crystal"
},
{
"item": "ebwizardry:sorcery_crystal"
},
{
"item": "ebwizardry:healing_crystal"
}
]
}
@@ -7,8 +7,7 @@
"translate": "advancement.ebwizardry:defeat_remnant.desc"
},
"icon": {
"item": "ebwizardry:spectral_dust",
"data": 6
"item": "ebwizardry:spectral_dust_sorcery"
}
},
"parent": "ebwizardry:arcane_initiate",
@@ -18,8 +17,7 @@
"conditions": {
"items": [
{
"item": "ebwizardry:spectral_dust",
"data": 1
"item": "ebwizardry:spectral_dust_fire"
}
]
}
@@ -29,8 +27,7 @@
"conditions": {
"items": [
{
"item": "ebwizardry:spectral_dust",
"data": 2
"item": "ebwizardry:spectral_dust_ice"
}
]
}
@@ -40,8 +37,7 @@
"conditions": {
"items": [
{
"item": "ebwizardry:spectral_dust",
"data": 3
"item": "ebwizardry:spectral_dust_lightning"
}
]
}
@@ -51,8 +47,7 @@
"conditions": {
"items": [
{
"item": "ebwizardry:spectral_dust",
"data": 4
"item": "ebwizardry:spectral_dust_necromancy"
}
]
}
@@ -62,8 +57,7 @@
"conditions": {
"items": [
{
"item": "ebwizardry:spectral_dust",
"data": 5
"item": "ebwizardry:spectral_dust_earth"
}
]
}
@@ -73,8 +67,7 @@
"conditions": {
"items": [
{
"item": "ebwizardry:spectral_dust",
"data": 6
"item": "ebwizardry:spectral_dust_sorcery"
}
]
}
@@ -84,7 +77,7 @@
"conditions": {
"items": [
{
"item": "ebwizardry:spectral_dust",
"item": "ebwizardry:spectral_dust_healing",
"data": 7
}
]
@@ -5,7 +5,13 @@
"conditions": {
"items": [
{
"item": "ebwizardry:arcane_tome"
"item": "ebwizardry:arcane_tome_apprentice"
},
{
"item": "ebwizardry:arcane_tome_advanced"
},
{
"item": "ebwizardry:arcane_tome_master"
}
]
}
@@ -7,7 +7,7 @@
"translate": "advancement.ebwizardry:max_out_wand.desc"
},
"icon": {
"item": "ebwizardry:arcane_tome"
"item": "ebwizardry:arcane_tome_master"
},
"frame": "goal"
},
@@ -7,8 +7,7 @@
"translate": "advancement.ebwizardry:visit_shrine.desc"
},
"icon": {
"item": "ebwizardry:runestone",
"data": 5
"item": "ebwizardry:ice_runestone"
}
},
"parent": "ebwizardry:defeat_evil_wizard",
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=Position %s, %s, %s in der dimens
tile.ebwizardry\:transportation_stone.forget=Position %s, %s, %s in der dimension %s vergessen
tile.ebwizardry\:transportation_stone.invalid=Du musst zuerst einen Kreis mit 8 Teleportsteinen bilden!
tile.ebwizardry\:spectral_block.name=Spektralblock
tile.ebwizardry\:runestone.name=Runenstein
tile.ebwizardry\:runestone_pedestal.name=Runenstein Sockel
tile.ebwizardry\:fire_runestone.name=Runenstein
tile.ebwizardry\:ice_runestone.name=Runenstein
tile.ebwizardry\:lightning_runestone.name=Runenstein
tile.ebwizardry\:necromancy_runestone.name=Runenstein
tile.ebwizardry\:earth_runestone.name=Runenstein
tile.ebwizardry\:healing_runestone.name=Runenstein
tile.ebwizardry\:sorcery_runestone.name=Runenstein
tile.ebwizardry\:fire_runestone_pedestal.name=Runenstein Sockel
tile.ebwizardry\:ice_runestone_pedestal.name=Runenstein Sockel
tile.ebwizardry\:lightning_runestone_pedestal.name=Runenstein Sockel
tile.ebwizardry\:necromancy_runestone_pedestal.name=Runenstein Sockel
tile.ebwizardry\:earth_runestone_pedestal.name=Runenstein Sockel
tile.ebwizardry\:healing_runestone_pedestal.name=Runenstein Sockel
tile.ebwizardry\:sorcery_runestone_pedestal.name=Runenstein Sockel
tile.ebwizardry\:thorns.name=Dornen
tile.ebwizardry\:obsidian_crust.name=Obsidian Kruste
tile.ebwizardry\:dry_frosted_ice.name=Gefrohrenes Trockeneis
@@ -53,14 +65,14 @@ tile.ebwizardry\:dark_oak_lectern.name=Schwarzeichenholz Pult
tile.ebwizardry\:receptacle.name=Gefäß
tile.ebwizardry\:imbuement_altar.name=Ermächtungsaltar
item.ebwizardry\:crystal_magic.name=Magischer Kristall
item.ebwizardry\:crystal_fire.name=Feuriger Kristall
item.ebwizardry\:crystal_ice.name=Eisiger Kristall
item.ebwizardry\:crystal_lightning.name=Stürmischer Kristall
item.ebwizardry\:crystal_necromancy.name=Dunkler Kristall
item.ebwizardry\:crystal_earth.name=Erdkristall
item.ebwizardry\:crystal_sorcery.name=Mystischer Kristall
item.ebwizardry\:crystal_healing.name=Strahlender Kristall
item.ebwizardry\:magic_crystal.name=Magischer Kristall
item.ebwizardry\:fire_crystal.name=Feuriger Kristall
item.ebwizardry\:ice_crystal.name=Eisiger Kristall
item.ebwizardry\:lightning_crystal.name=Stürmischer Kristall
item.ebwizardry\:necromancy_crystal.name=Dunkler Kristall
item.ebwizardry\:earth_crystal.name=Erdkristall
item.ebwizardry\:sorcery_crystal.name=Mystischer Kristall
item.ebwizardry\:healing_crystal.name=Strahlender Kristall
item.ebwizardry\:magic_wand.name=Magischer Zauberstab
item.ebwizardry\:apprentice_wand.name=Lehrlingszauberstab
@@ -184,7 +196,13 @@ item.ebwizardry\:armour_upgrade.desc_extended=%1$sum sie %2$slegendär zu machen
item.ebwizardry\:magic_silk.name=Magische Seide
item.ebwizardry\:spectral_dust.name=Spektraler Staub
item.ebwizardry\:spectral_dust_fire.name=Spektraler Staub
item.ebwizardry\:spectral_dust_ice.name=Spektraler Staub
item.ebwizardry\:spectral_dust_lightning.name=Spektraler Staub
item.ebwizardry\:spectral_dust_healing.name=Spektraler Staub
item.ebwizardry\:spectral_dust_sorcery.name=Spektraler Staub
item.ebwizardry\:spectral_dust_necromancy.name=Spektraler Staub
item.ebwizardry\:spectral_dust_healing.name=Spektraler Staub
item.ebwizardry\:wizard_armour.legendary=Legendär
item.ebwizardry\:wizard_armour.buff=-%1$s %2$s Kosten
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=Remembered the location %s, %s, %
tile.ebwizardry\:transportation_stone.forget=Forgot the location %s, %s, %s in dimension %s
tile.ebwizardry\:transportation_stone.invalid=You must make a circle with 8 stones of transportation first!
tile.ebwizardry\:spectral_block.name=Spectral Block
tile.ebwizardry\:runestone.name=Runestone
tile.ebwizardry\:runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:fire_runestone.name=Runestone
tile.ebwizardry\:ice_runestone.name=Runestone
tile.ebwizardry\:lightning_runestone.name=Runestone
tile.ebwizardry\:necromancy_runestone.name=Runestone
tile.ebwizardry\:earth_runestone.name=Runestone
tile.ebwizardry\:healing_runestone.name=Runestone
tile.ebwizardry\:sorcery_runestone.name=Runestone
tile.ebwizardry\:fire_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:ice_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:lightning_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:necromancy_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:earth_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:healing_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:sorcery_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:thorns.name=Thorns
tile.ebwizardry\:obsidian_crust.name=Obsidian Crust
tile.ebwizardry\:dry_frosted_ice.name=Dry Frosted Ice
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=Dark Oak Lectern
tile.ebwizardry\:receptacle.name=Receptacle
tile.ebwizardry\:imbuement_altar.name=Imbuement Altar
item.ebwizardry\:crystal_magic.name=Magic Crystal
item.ebwizardry\:crystal_magic.desc=The iridescent colours of this crystal seem to slowly shift and swirl, hinting at a magical energy within. Perhaps this magic could be harnessed in some way?
item.ebwizardry\:crystal_fire.name=Fiery Crystal
item.ebwizardry\:crystal_fire.desc=A crystal that glows a fiery orange. Maybe it is the key to unlocking the element of fire...
item.ebwizardry\:crystal_ice.name=Icy Crystal
item.ebwizardry\:crystal_ice.desc=A crystal with a cold, bluish tint. Perhaps it holds the secrets to the power of frost...
item.ebwizardry\:crystal_lightning.name=Stormy Crystal
item.ebwizardry\:crystal_lightning.desc=A crystal that seems to swirl and flash with a chaotic energy. Maybe it hides a greater power within...
item.ebwizardry\:crystal_necromancy.name=Dark Crystal
item.ebwizardry\:crystal_necromancy.desc=A crystal with a deep, purplish appearance that seems to draw you in. Perhaps it is a gateway to something darker...
item.ebwizardry\:crystal_earth.name=Verdant Crystal
item.ebwizardry\:crystal_earth.desc=A crystal patterened with a great many greens and browns. Perhaps it holds a connection to the forces of nature...
item.ebwizardry\:crystal_sorcery.name=Mystical Crystal
item.ebwizardry\:crystal_sorcery.desc=A crystal that glimmers with a bluish-green light. Maybe it conceals the secrets of an ancient force...
item.ebwizardry\:crystal_healing.name=Radiant Crystal
item.ebwizardry\:crystal_healing.desc=A crystal that glints a golden yellow in the sunlight. Perhaps it possesses the link to a divine power...
item.ebwizardry\:magic_crystal.name=Magic Crystal
item.ebwizardry\:magic_crystal.desc=The iridescent colours of this crystal seem to slowly shift and swirl, hinting at a magical energy within. Perhaps this magic could be harnessed in some way?
item.ebwizardry\:fire_crystal.name=Fiery Crystal
item.ebwizardry\:fire_crystal.desc=A crystal that glows a fiery orange. Maybe it is the key to unlocking the element of fire...
item.ebwizardry\:ice_crystal.name=Icy Crystal
item.ebwizardry\:ice_crystal.desc=A crystal with a cold, bluish tint. Perhaps it holds the secrets to the power of frost...
item.ebwizardry\:lightning_crystal.name=Stormy Crystal
item.ebwizardry\:lightning_crystal.desc=A crystal that seems to swirl and flash with a chaotic energy. Maybe it hides a greater power within...
item.ebwizardry\:necromancy_crystal.name=Dark Crystal
item.ebwizardry\:necromancy_crystal.desc=A crystal with a deep, purplish appearance that seems to draw you in. Perhaps it is a gateway to something darker...
item.ebwizardry\:earth_crystal.name=Verdant Crystal
item.ebwizardry\:earth_crystal.desc=A crystal patterened with a great many greens and browns. Perhaps it holds a connection to the forces of nature...
item.ebwizardry\:sorcery_crystal.name=Mystical Crystal
item.ebwizardry\:sorcery_crystal.desc=A crystal that glimmers with a bluish-green light. Maybe it conceals the secrets of an ancient force...
item.ebwizardry\:healing_crystal.name=Radiant Crystal
item.ebwizardry\:healing_crystal.desc=A crystal that glints a golden yellow in the sunlight. Perhaps it possesses the link to a divine power...
item.ebwizardry\:spell_book.name=Spell Book
item.ebwizardry\:spell_book.desc=A book filled with the runes and glyphs of an ancient script. Perhaps with dedication, one might be able to decipher its contents...\n\nRight-click while holding this book to read it.
@@ -11,15 +11,27 @@ tile.ebwizardry\:transportation_stone.remember=Remembered the location %s, %s, %
tile.ebwizardry\:transportation_stone.forget=Forgot the location %s, %s, %s in dimension %s
tile.ebwizardry\:transportation_stone.invalid=You must make a circle with 8 stones of transportation first!
tile.ebwizardry\:spectral_block.name=Spectral Block
tile.ebwizardry\:runestone.name=Runestone
tile.ebwizardry\:runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:fire_runestone.name=Runestone
tile.ebwizardry\:ice_runestone.name=Runestone
tile.ebwizardry\:lightning_runestone.name=Runestone
tile.ebwizardry\:necromancy_runestone.name=Runestone
tile.ebwizardry\:earth_runestone.name=Runestone
tile.ebwizardry\:healing_runestone.name=Runestone
tile.ebwizardry\:sorcery_runestone.name=Runestone
tile.ebwizardry\:fire_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:ice_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:lightning_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:necromancy_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:earth_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:healing_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:sorcery_runestone_pedestal.name=Runestone Pedestal
tile.ebwizardry\:thorns.name=Thorns
tile.ebwizardry\:obsidian_crust.name=Obsidian Crust
tile.ebwizardry\:dry_frosted_ice.name=Dry Frosted Ice
tile.ebwizardry\:crystal_flower_pot.name=Flower Pot
tile.ebwizardry\:permafrost.name=Permafrost
tile.ebwizardry\:magic_crystal_block.name=Block of Crystal
tile.ebwizardry\:magic_crystal_block.name=Block of Magic Crystal
tile.ebwizardry\:fire_crystal_block.name=Block of Fiery Crystal
tile.ebwizardry\:ice_crystal_block.name=Block of Icy Crystal
tile.ebwizardry\:lightning_crystal_block.name=Block of Stormy Crystal
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=Dark Oak Lectern
tile.ebwizardry\:receptacle.name=Receptacle
tile.ebwizardry\:imbuement_altar.name=Imbuement Altar
item.ebwizardry\:crystal_magic.name=Magic Crystal
item.ebwizardry\:crystal_magic.desc=The iridescent colors of this crystal seem to slowly shift and swirl, hinting at a magical energy within. Perhaps this magic could be harnessed, somehow...
item.ebwizardry\:crystal_fire.name=Fiery Crystal
item.ebwizardry\:crystal_fire.desc=A crystal that glows a fiery orange. Maybe it is the key to unlocking the element of fire...
item.ebwizardry\:crystal_ice.name=Icy Crystal
item.ebwizardry\:crystal_ice.desc=A crystal with a cold, bluish tint. Perhaps it holds the secrets to the power of frost...
item.ebwizardry\:crystal_lightning.name=Stormy Crystal
item.ebwizardry\:crystal_lightning.desc=A crystal that seems to swirl and flash with a chaotic energy. Maybe it hides a greater power within...
item.ebwizardry\:crystal_necromancy.name=Dark Crystal
item.ebwizardry\:crystal_necromancy.desc=A crystal with a deep, purplish appearance that seems to draw you in. Perhaps it is a gateway to something darker...
item.ebwizardry\:crystal_earth.name=Verdant Crystal
item.ebwizardry\:crystal_earth.desc=A crystal patterened with a great many greens and browns. Perhaps it holds a connection to the forces of nature...
item.ebwizardry\:crystal_sorcery.name=Mystical Crystal
item.ebwizardry\:crystal_sorcery.desc=A crystal that glimmers with a bluish-green light. Maybe it conceals the secrets of an ancient force...
item.ebwizardry\:crystal_healing.name=Radiant Crystal
item.ebwizardry\:crystal_healing.desc=A crystal that glints a golden yellow in the sunlight. Perhaps it possesses the link to a divine power...
item.ebwizardry\:magic_crystal.name=Magic Crystal
item.ebwizardry\:magic_crystal.desc=The iridescent colors of this crystal seem to slowly shift and swirl, hinting at a magical energy within. Perhaps this magic could be harnessed, somehow...
item.ebwizardry\:fire_crystal.name=Fiery Crystal
item.ebwizardry\:fire_crystal.desc=A crystal that glows a fiery orange. Maybe it is the key to unlocking the element of fire...
item.ebwizardry\:ice_crystal.name=Icy Crystal
item.ebwizardry\:ice_crystal.desc=A crystal with a cold, bluish tint. Perhaps it holds the secrets to the power of frost...
item.ebwizardry\:lightning_crystal.name=Stormy Crystal
item.ebwizardry\:lightning_crystal.desc=A crystal that seems to swirl and flash with a chaotic energy. Maybe it hides a greater power within...
item.ebwizardry\:necromancy_crystal.name=Dark Crystal
item.ebwizardry\:necromancy_crystal.desc=A crystal with a deep, purplish appearance that seems to draw you in. Perhaps it is a gateway to something darker...
item.ebwizardry\:earth_crystal.name=Verdant Crystal
item.ebwizardry\:earth_crystal.desc=A crystal patterened with a great many greens and browns. Perhaps it holds a connection to the forces of nature...
item.ebwizardry\:sorcery_crystal.name=Mystical Crystal
item.ebwizardry\:sorcery_crystal.desc=A crystal that glimmers with a bluish-green light. Maybe it conceals the secrets of an ancient force...
item.ebwizardry\:healing_crystal.name=Radiant Crystal
item.ebwizardry\:healing_crystal.desc=A crystal that glints a golden yellow in the sunlight. Perhaps it possesses the link to a divine power...
item.ebwizardry\:spell_book.name=Spell Book
item.ebwizardry\:spell_book.desc=A book filled with the runes and glyphs of an ancient script. Perhaps with dedication, one might be able to decipher its contents...\n\nRight-click while holding this book to read it.
@@ -77,7 +89,9 @@ item.ebwizardry\:spell_book.apply_to_wizard=Replaced %1$s's spell %2$s with %3$s
item.ebwizardry\:ruined_spell_book.name=Ruined Spell Book
item.ebwizardry\:ruined_spell_book.desc=The pages of this tattered spell book are too damaged to be read properly, but somehow, you feel there is still magic left within it - if only it could be restored...
item.ebwizardry\:arcane_tome.name=Tome of Arcana
item.ebwizardry\:arcane_tome_apprentice.name=Tome of Arcana
item.ebwizardry\:arcane_tome_advanced.name=Tome of Arcana
item.ebwizardry\:arcane_tome_master.name=Tome of Arcana
item.ebwizardry\:arcane_tome.desc=Upgrades any %1$s wand with sufficient progression to %2$s tier
item.ebwizardry\:wizard_handbook.name=The Wizard's Handbook
@@ -216,6 +230,13 @@ item.ebwizardry\:ethereal_crystalweave.desc_extended=An enchanted fabric that is
item.ebwizardry\:magic_silk.name=Magical Silk
item.ebwizardry\:spectral_dust.name=Spectral Dust
item.ebwizardry\:spectral_dust_earth.name=Spectral Dust
item.ebwizardry\:spectral_dust_fire.name=Spectral Dust
item.ebwizardry\:spectral_dust_healing.name=Spectral Dust
item.ebwizardry\:spectral_dust_ice.name=Spectral Dust
item.ebwizardry\:spectral_dust_lightning.name=Spectral Dust
item.ebwizardry\:spectral_dust_necromancy.name=Spectral Dust
item.ebwizardry\:spectral_dust_sorcery.name=Spectral Dust
item.ebwizardry\:wizard_armour.element_cost_reduction=-%1$s%% %2$s cost
item.ebwizardry\:wizard_armour.cooldown_reduction=-%1$s%% Cooldown
@@ -403,10 +424,6 @@ item.ebwizardry\:generic.disabled=This item has been disabled in the config
item.ebwizardry\:ring.generic.desc=Equip this ring in the Baubles inventory or by placing it on your hotbar. Up to 2 rings may be equipped at once.
item.ebwizardry\:amulet.generic.desc=Equip this amulet in the Baubles inventory or by placing it on your hotbar. Only one amulet may be equipped at a time.
item.ebwizardry\:charm.generic.desc=Equip this charm in the Baubles inventory or by placing it on your hotbar. Only one charm may be equipped at a time.
item.ebwizardry\:belt.generic.desc=Equip this belt in the Baubles inventory or by placing it on your hotbar. Only one belt may be equipped at a time.
item.ebwizardry\:body.generic.desc=Equip this body item in the Baubles inventory or by placing it on your hotbar. Only one body item may be equipped at a time.
item.ebwizardry\:trinket.generic.desc=Equip this trinket in the Baubles inventory or by placing it on your hotbar. Only one trinklet may be equipped at a time.
item.ebwizardry\:head.generic.desc=Equip this headgear in the Baubles inventory or by placing it on your hotbar. Only one headgear may be equipped at a time.
item.ebwizardry\:ring_condensing.name=Ring of Condensing
item.ebwizardry\:ring_condensing.desc=Slowly regenerates mana for all wands on your hotbar
@@ -882,7 +899,6 @@ container.ebwizardry\:arcane_workbench.sort_tier=Sort by Tier
container.ebwizardry\:arcane_workbench.sort_element=Sort by Element
container.ebwizardry\:arcane_workbench.sort_alphabetical=Sort Alphabetically
container.ebwizardry\:arcane_workbench.search_tooltip=%1$sSearch Tips\n\ntier=%2$s, %1$st=%2$s: match tiers\n%1$selement=%2$s, %1$se=%2$s: match elements\n%1$stype=%2$s, %1$sp=%2$s: match spell types\n%1$sdiscovered=true/false%2$s, %1$sd=t/f%2$s: include only (un)discovered\n%1$smodid=%2$s, %1$sm=%2$s: match mod IDs\n\nSeparate multiple values with %1$s,%2$s\nSeparate multiple criteria with %1$s;
container.ebwizardry\:arcane_workbench.clear=Clear Spell Slots
container.ebwizardry\:bookshelf=Bookshelf
@@ -1371,7 +1387,6 @@ forfeit.ebwizardry\:bury_self=The ground collapses beneath you!
forfeit.ebwizardry\:spill_inventory=Your items spill themselves everywhere!
forfeit.ebwizardry\:teleport_self=You are instantly teleported somewhere!
forfeit.ebwizardry\:teleport_self_large_distance=You are instantly teleported somewhere far away!
forfeit.ebwizardry\:levitate_self=You begin to float upwards helplessly!
forfeit.ebwizardry\:vex_horde=A horde of vexes materializes around you!
forfeit.ebwizardry\:black_hole=A swirling vortex appears in front of you!
@@ -1448,25 +1463,6 @@ key.ebwizardry.spell_8=Spell Slot 8
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.magic_wizardry_magic=%1$s was killed by %2$s using magic
death.attack.magic_indirect_wizardry_magic=%1$s was killed by %2$s using magic
death.attack.fire_wizardry_magic=%1$s was killed by %2$s using fire magic
death.attack.fire_indirect_wizardry_magic=%1$s was killed by %2$s using fire magic
death.attack.frost_wizardry_magic=%1$s was killed by %2$s using frost magic
death.attack.frost_indirect_wizardry_magic=%1$s was killed by %2$s using frost magic
death.attack.shock_wizardry_magic=%1$s was killed by %2$s using a shock magic
death.attack.shock_indirect_wizardry_magic=%1$s was killed by %2$s using shock magic
death.attack.wither_wizardry_magic=%1$s was killed by %2$s using withering magic
death.attack.wither_indirect_wizardry_magic=%1$s was killed by %2$s withering magic
death.attack.poison_wizardry_magic=%1$s was killed by %2$s using poison magic
death.attack.poison_indirect_wizardry_magic=%1$s was killed by %2$s poison magic
death.attack.force_wizardry_magic=%1$s was killed by %2$s using a magical force
death.attack.force_indirect_wizardry_magic=%1$s was killed by %2$s using magical force
death.attack.blast_wizardry_magic=%1$s was killed by %2$s using a magical blast
death.attack.blast_indirect_wizardry_magic=%1$s was killed by %2$s using magical blast
death.attack.radiant_wizardry_magic=%1$s was killed by %2$s using radiant magic
death.attack.radiant_indirect_wizardry_magic=%1$s was killed by %2$s using radiant magic
soundCategory.ebwizardry_spells=Spells
@@ -1535,12 +1531,6 @@ config.ebwizardry.player_block_damage.true=Yes - kaboom!
config.ebwizardry.player_block_damage.false=No - activate anti-grief (TM)
config.ebwizardry.dispenser_block_damage=Dispenser Block Damage
config.ebwizardry.dispenser_block_damage.tooltip=Whether spells cast by dispensers can destroy blocks in the world. Wizardry makes every attempt to respect protection mods and plugins, but cannot guarantee it will work in all cases for every mod. If you need absolutely watertight anti-grief, disable this setting.
config.ebwizardry.damage_type_per_element=Damage Type Per Element
config.ebwizardry.damage_type_per_element.tooltip=Whether damage should be registered with the old system (wizardry_magic/indirect_wizardry_magic) prefixed damage with the elements like necromancy_indirect_wizardry_magic, necromancy_wizardry_magic. This is disabled by default to not break existing modpacks. The intention of this setting is to allow differentiating various damage types for e.g. the Distinct Damage Descriptions mod
config.ebwizardry.single_use_spell_books=Spell Books Are Consumed By Wands
config.ebwizardry.single_use_spell_books.tooltip=Whether spell books are consumed when they are bound to a wand.
config.ebwizardry.prevent_binding_same_spell_twice_to_wands=Prevent Binding The Same Spell To A Wand Multiple Times
config.ebwizardry.prevent_binding_same_spell_twice_to_wands.tooltip=Whether to prevent binding the same spell to a wand multiple times
config.ebwizardry.telekinetic_disarmament=Telekinetic Disarmament
config.ebwizardry.telekinetic_disarmament.tooltip=Whether to allow players to disarm other players using the telekinesis spell. Disable to prevent stealing of items.
config.ebwizardry.telekinetic_disarmament.true=Yes - let people steal things
@@ -1561,20 +1551,6 @@ config.ebwizardry.slow_time_affects_players=Slow Time Affects Players
config.ebwizardry.slow_time_affects_players.tooltip=Whether players are slowed when another nearby player uses the slow time spell. If this is disabled, mobs and projectiles will still be affected but players will move at normal speed.
config.ebwizardry.bonemeal_grows_crystal_flowers=Bonemeal Grows Crystal Flowers
config.ebwizardry.bonemeal_grows_crystal_flowers.tooltip=Whether using bonemeal on grass blocks has a chance to grow crystal flowers.
config.ebwizardry.wands_must_be_held_to_decrement_cooldown=Wands Must Be Held To Decrement Cooldown
config.ebwizardry.wands_must_be_held_to_decrement_cooldown.tooltip=Whether wands only decrement their cooldowns if a player holds them.
config.ebwizardry.cooldown_reduction_per_level=Cooldown Reduction Per Level
config.ebwizardry.cooldown_reduction_per_level.tooltip=The fraction by which cooldowns are reduced for each level of cooldown upgrade.
config.ebwizardry.potency_increase_per_tier=Potency Increase Per Tier
config.ebwizardry.potency_increase_per_tier.tooltip=The fraction by which potency is increased for each tier of matching wand. May cause extreme lag with high values!
config.ebwizardry.duration_increase_per_level=Duration Increase Per Level
config.ebwizardry.duration_increase_per_level.tooltip=The fraction by which spell duration is increased for each level of duration upgrade.
config.ebwizardry.range_increase_per_level=Range Increase Per Level
config.ebwizardry.range_increase_per_level.tooltip=The fraction by which spell range is increased for each level of range upgrade. May cause extreme lag with high values!
config.ebwizardry.blast_increase_per_level=Blast Increase Per Level
config.ebwizardry.blast_increase_per_level.tooltip=The fraction by which spell blast is increased for each level of blast upgrade. May cause extreme lag with high values!
config.ebwizardry.frost_slowness_increase_per_level=Frost Slowness Increase Per Level
config.ebwizardry.frost_slowness_increase_per_level.tooltip=The fraction by which movement speed is reduced per level of frost effect.
config.ebwizardry.category.difficulty=Difficulty Settings
config.ebwizardry.category.difficulty.tooltip=Configure wizardry's difficulty
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=La position %s, %s, %s a été ma
tile.ebwizardry\:transportation_stone.forget=La position %s, %s, %s a été effacée dans la dimension %s
tile.ebwizardry\:transportation_stone.invalid=Vous devez d'abord créer un cercle avec 8 pierres de téléportation!
tile.ebwizardry\:spectral_block.name=Bloc spectral
tile.ebwizardry\:runestone.name=Pierre runique
tile.ebwizardry\:runestone_pedestal.name=Piédestal runique
tile.ebwizardry\:fire_runestone.name=Pierre runique
tile.ebwizardry\:ice_runestone.name=Pierre runique
tile.ebwizardry\:lightning_runestone.name=Pierre runique
tile.ebwizardry\:necromancy_runestone.name=Pierre runique
tile.ebwizardry\:earth_runestone.name=Pierre runique
tile.ebwizardry\:healing_runestone.name=Pierre runique
tile.ebwizardry\:sorcery_runestone.name=Pierre runique
tile.ebwizardry\:fire_runestone_pedestal.name=Piédestal runique
tile.ebwizardry\:ice_runestone_pedestal.name=Piédestal runique
tile.ebwizardry\:lightning_runestone_pedestal.name=Piédestal runique
tile.ebwizardry\:necromancy_runestone_pedestal.name=Piédestal runique
tile.ebwizardry\:earth_runestone_pedestal.name=Piédestal runique
tile.ebwizardry\:healing_runestone_pedestal.name=Piédestal runique
tile.ebwizardry\:sorcery_runestone_pedestal.name=Piédestal runique
tile.ebwizardry\:thorns.name=Épines
tile.ebwizardry\:obsidian_crust.name=Croûte d'obsidienne
tile.ebwizardry\:dry_frosted_ice.name=Glace dépolie
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=Lutrin de chêne noir
tile.ebwizardry\:receptacle.name=Receptacle
tile.ebwizardry\:imbuement_altar.name=Autel d'infusion
item.ebwizardry\:crystal_magic.name=Cristal magique
item.ebwizardry\:crystal_magic.desc=Les couleurs iridescentes du cristal tourbillonnent doucement, révélant sa magie. Il y a sûrement un moyen de l'utiliser...
item.ebwizardry\:crystal_fire.name=Cristal embrasé
item.ebwizardry\:crystal_fire.desc=Un cristal brillant d'un orange chatoyant. C'est sûrement la clef pour déverrouiller l'élément du feu...
item.ebwizardry\:crystal_ice.name=Cristal gelé
item.ebwizardry\:crystal_ice.desc=Un cristal teinté d'un bleu glacial. Il renferme sûrement les secrets du froid...
item.ebwizardry\:crystal_lightning.name=Cristal foudroyant
item.ebwizardry\:crystal_lightning.desc=Un cristal vibrant d'une énergie chaotique. Il cache probablement un pouvoir grandiose...
item.ebwizardry\:crystal_necromancy.name=Cristal ténébreux
item.ebwizardry\:crystal_necromancy.desc=Un cristal sombre et violacé. Il s'agit sûrement d'une clef pour un sombre pouvoir...
item.ebwizardry\:crystal_earth.name=Cristal verdoyant
item.ebwizardry\:crystal_earth.desc=Un cristal empreint de filaments verdoyants. Il doit sûrement contenir les pouvoirs de la nature...
item.ebwizardry\:crystal_sorcery.name=Cristal mystique
item.ebwizardry\:crystal_sorcery.desc=Un cristal luisant d'un vert bleuté. Il semble recéler une magie antique...
item.ebwizardry\:crystal_healing.name=Cristal rayonnant
item.ebwizardry\:crystal_healing.desc=Un cristal au rayonnement doré. Il doit être lié à un pouvoir divin...
item.ebwizardry\:magic_crystal.name=Cristal magique
item.ebwizardry\:magic_crystal.desc=Les couleurs iridescentes du cristal tourbillonnent doucement, révélant sa magie. Il y a sûrement un moyen de l'utiliser...
item.ebwizardry\:fire_crystal.name=Cristal embrasé
item.ebwizardry\:fire_crystal.desc=Un cristal brillant d'un orange chatoyant. C'est sûrement la clef pour déverrouiller l'élément du feu...
item.ebwizardry\:ice_crystal.name=Cristal gelé
item.ebwizardry\:ice_crystal.desc=Un cristal teinté d'un bleu glacial. Il renferme sûrement les secrets du froid...
item.ebwizardry\:lightning_crystal.name=Cristal foudroyant
item.ebwizardry\:lightning_crystal.desc=Un cristal vibrant d'une énergie chaotique. Il cache probablement un pouvoir grandiose...
item.ebwizardry\:necromancy_crystal.name=Cristal ténébreux
item.ebwizardry\:necromancy_crystal.desc=Un cristal sombre et violacé. Il s'agit sûrement d'une clef pour un sombre pouvoir...
item.ebwizardry\:earth_crystal.name=Cristal verdoyant
item.ebwizardry\:earth_crystal.desc=Un cristal empreint de filaments verdoyants. Il doit sûrement contenir les pouvoirs de la nature...
item.ebwizardry\:sorcery_crystal.name=Cristal mystique
item.ebwizardry\:sorcery_crystal.desc=Un cristal luisant d'un vert bleuté. Il semble recéler une magie antique...
item.ebwizardry\:healing_crystal.name=Cristal rayonnant
item.ebwizardry\:healing_crystal.desc=Un cristal au rayonnement doré. Il doit être lié à un pouvoir divin...
item.ebwizardry\:spell_book.name=Livre de sorts
item.ebwizardry\:spell_book.desc=Un livre rempli de glyphes et de runes antiques. Avec de l'agnégation, il devrait être possible de le décrypter...\n\nClic droit en tenant le livre pour le lire.
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=egjegyezve a hely: %s, %s, %s, %s
tile.ebwizardry\:transportation_stone.forget=Elfelejtve a hely: %s, %s, %s, %s dimenzióban
tile.ebwizardry\:transportation_stone.invalid=Előbb egy kört kell építened 8 Transzportáció Kövéből!
tile.ebwizardry\:spectral_block.name=Spektrálblokk
tile.ebwizardry\:runestone.name=Rúnakő
tile.ebwizardry\:runestone_pedestal.name=Rúnakő Pedesztál
tile.ebwizardry\:fire_runestone.name=Rúnakő
tile.ebwizardry\:ice_runestone.name=Rúnakő
tile.ebwizardry\:lightning_runestone.name=Rúnakő
tile.ebwizardry\:necromancy_runestone.name=Rúnakő
tile.ebwizardry\:earth_runestone.name=Rúnakő
tile.ebwizardry\:healing_runestone.name=Rúnakő
tile.ebwizardry\:sorcery_runestone.name=Rúnakő
tile.ebwizardry\:fire_runestone_pedestal.name=Rúnakő Pedesztál
tile.ebwizardry\:ice_runestone_pedestal.name=Rúnakő Pedesztál
tile.ebwizardry\:lightning_runestone_pedestal.name=Rúnakő Pedesztál
tile.ebwizardry\:necromancy_runestone_pedestal.name=Rúnakő Pedesztál
tile.ebwizardry\:earth_runestone_pedestal.name=Rúnakő Pedesztál
tile.ebwizardry\:healing_runestone_pedestal.name=Rúnakő Pedesztál
tile.ebwizardry\:sorcery_runestone_pedestal.name=Rúnakő Pedesztál
tile.ebwizardry\:thorns.name=Tövisek
tile.ebwizardry\:obsidian_crust.name=Obszidián Kéreg
tile.ebwizardry\:dry_frosted_ice.name=Száraz Fagyott Jég
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=Sötéttölgy Olvasóállvány
tile.ebwizardry\:receptacle.name=Receptákulum
tile.ebwizardry\:imbuement_altar.name=Oltár
item.ebwizardry\:crystal_magic.name=Varázskristály
item.ebwizardry\:crystal_magic.desc=A kristály belsejében lassan kavargó, irizáló színek mágikus energiáról tanúskodnak. Ezt az energiát ha ki lehetne nyerni, valahogy...
item.ebwizardry\:crystal_fire.name=Tüzes Kristály
item.ebwizardry\:crystal_fire.desc=Tüzes narancsszínnel izzó kristály. Ez lehet a kulcs a tűz elem titkainak feltárásához...
item.ebwizardry\:crystal_ice.name=Jeges Kristály
item.ebwizardry\:crystal_ice.desc=Hideg, kékes árnyalatú kristály. A fagy erejének titkait rejtheti...
item.ebwizardry\:crystal_lightning.name=Viharos Kristály
item.ebwizardry\:crystal_lightning.desc=Gomolygó és kaotikus energiával villogó kristály. Hatalmas erőt rejthet magában...
item.ebwizardry\:crystal_necromancy.name=Sötét Kristály
item.ebwizardry\:crystal_necromancy.desc=Mélységes lila kristály, mely ha ránézel szinte magába szippant. Valami még sötétebb kapuja lehet...
item.ebwizardry\:crystal_earth.name=Viruló Kristály
item.ebwizardry\:crystal_earth.desc=Zöld és barna temérdek árnyalatával mintázott kristály. Kapcsolata lehet a természet erőivel...
item.ebwizardry\:crystal_sorcery.name=Misztikus Kristály
item.ebwizardry\:crystal_sorcery.desc=Kékeszöld fénnyel csillogó kristály. Ősi erők titkait rejtheti magában...
item.ebwizardry\:crystal_healing.name=Sugárzó Kristály
item.ebwizardry\:crystal_healing.desc=A napsugárban aranyszín sárgán megcsillanó kristály. Tán isteni hatalomhoz rejt kapcsot...
item.ebwizardry\:magic_crystal.name=Varázskristály
item.ebwizardry\:magic_crystal.desc=A kristály belsejében lassan kavargó, irizáló színek mágikus energiáról tanúskodnak. Ezt az energiát ha ki lehetne nyerni, valahogy...
item.ebwizardry\:fire_crystal.name=Tüzes Kristály
item.ebwizardry\:fire_crystal.desc=Tüzes narancsszínnel izzó kristály. Ez lehet a kulcs a tűz elem titkainak feltárásához...
item.ebwizardry\:ice_crystal.name=Jeges Kristály
item.ebwizardry\:ice_crystal.desc=Hideg, kékes árnyalatú kristály. A fagy erejének titkait rejtheti...
item.ebwizardry\:lightning_crystal.name=Viharos Kristály
item.ebwizardry\:lightning_crystal.desc=Gomolygó és kaotikus energiával villogó kristály. Hatalmas erőt rejthet magában...
item.ebwizardry\:necromancy_crystal.name=Sötét Kristály
item.ebwizardry\:necromancy_crystal.desc=Mélységes lila kristály, mely ha ránézel szinte magába szippant. Valami még sötétebb kapuja lehet...
item.ebwizardry\:earth_crystal.name=Viruló Kristály
item.ebwizardry\:earth_crystal.desc=Zöld és barna temérdek árnyalatával mintázott kristály. Kapcsolata lehet a természet erőivel...
item.ebwizardry\:sorcery_crystal.name=Misztikus Kristály
item.ebwizardry\:sorcery_crystal.desc=Kékeszöld fénnyel csillogó kristály. Ősi erők titkait rejtheti magában...
item.ebwizardry\:healing_crystal.name=Sugárzó Kristály
item.ebwizardry\:healing_crystal.desc=A napsugárban aranyszín sárgán megcsillanó kristály. Tán isteni hatalomhoz rejt kapcsot...
item.ebwizardry\:spell_book.name=Varázskönyv
item.ebwizardry\:spell_book.desc=Egy könyv, egy ősi nyelv rúnáival és szimbólumaival tele. Elegendő eltökéltséggel talán meg lehetne fejteni tartalmát...\n\nJobb-kattintással nyisd meg a könyvet, hogy elolvashasd.
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=%s, %s, %s의 %s의 위치를 지
tile.ebwizardry\:transportation_stone.forget=%s, %s, %s의 %s의 위치를 지웠습니다
tile.ebwizardry\:transportation_stone.invalid=먼저 전이의 돌 8개로 전이진을 만들어야 합니다!
tile.ebwizardry\:spectral_block.name=허상 블록
tile.ebwizardry\:runestone.name=룬스톤
tile.ebwizardry\:runestone_pedestal.name=룬스톤 초석
tile.ebwizardry\:fire_runestone.name=룬스톤
tile.ebwizardry\:ice_runestone.name=룬스톤
tile.ebwizardry\:lightning_runestone.name=룬스톤
tile.ebwizardry\:necromancy_runestone.name=룬스톤
tile.ebwizardry\:earth_runestone.name=룬스톤
tile.ebwizardry\:healing_runestone.name=룬스톤
tile.ebwizardry\:sorcery_runestone.name=룬스톤
tile.ebwizardry\:fire_runestone_pedestal.name=룬스톤 초석
tile.ebwizardry\:ice_runestone_pedestal.name=룬스톤 초석
tile.ebwizardry\:lightning_runestone_pedestal.name=룬스톤 초석
tile.ebwizardry\:necromancy_runestone_pedestal.name=룬스톤 초석
tile.ebwizardry\:earth_runestone_pedestal.name=룬스톤 초석
tile.ebwizardry\:healing_runestone_pedestal.name=룬스톤 초석
tile.ebwizardry\:sorcery_runestone_pedestal.name=룬스톤 초석
tile.ebwizardry\:thorns.name=가시
tile.ebwizardry\:obsidian_crust.name=흑요석 껍질
tile.ebwizardry\:dry_frosted_ice.name=마른 반투명 얼음
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=짙은 참나무 독서대
tile.ebwizardry\:receptacle.name=받침
tile.ebwizardry\:imbuement_altar.name=고취의 제단
item.ebwizardry\:crystal_magic.name=마법수정
item.ebwizardry\:crystal_magic.desc=무지갯빛의 아름다운 수정, 마법의 기운이 내부에서 서서히 변화하며 소용돌이치고 있습니다. 어쩌면 이 수정은 사용하면...
item.ebwizardry\:crystal_fire.name=화염의 수정
item.ebwizardry\:crystal_fire.desc=주황빛으로 불타는 수정, 어쩌면 불의 원소를 푸는 열쇠일지도 모릅니다...
item.ebwizardry\:crystal_ice.name=얼음의 수정
item.ebwizardry\:crystal_ice.desc=푸르스름한 색조의 차가운 수정, 어쩌면 서리의 힘의 비밀을 간직하고 있을지도 모릅니다...
item.ebwizardry\:crystal_lightning.name=폭풍의 수정
item.ebwizardry\:crystal_lightning.desc=어지럽게 소용돌이치고 번쩍이는 수정, 어쩌면 더 큰 힘을 숨기고 있을지도 모릅니다...
item.ebwizardry\:crystal_necromancy.name=어둠의 수정
item.ebwizardry\:crystal_necromancy.desc=마치 끌어당기는 듯한 깊고 푸르스름한 수정, 어쩌면 더 어두운 곳으로 가는 관문일지도 모릅니다...
item.ebwizardry\:crystal_earth.name=신록의 수정
item.ebwizardry\:crystal_earth.desc=녹색과 약간의 갈색으로 이루어진 수정, 어쩌면 자연의 힘과 연관이 있을지도 모릅니다...
item.ebwizardry\:crystal_sorcery.name=신령의 수정
item.ebwizardry\:crystal_sorcery.desc=푸르스름한 초록빛의 반짝거리는 수정, 어쩌면 고대의 힘의 비밀을 감추고 있을지도 모릅니다...
item.ebwizardry\:crystal_healing.name=복사의 수정
item.ebwizardry\:crystal_healing.desc=금빛 햇살처럼 노랗게 반짝이는 수정, 어쩌면 신성한 힘의 연결고리일지도 모릅니다...
item.ebwizardry\:magic_crystal.name=마법수정
item.ebwizardry\:magic_crystal.desc=무지갯빛의 아름다운 수정, 마법의 기운이 내부에서 서서히 변화하며 소용돌이치고 있습니다. 어쩌면 이 수정은 사용하면...
item.ebwizardry\:fire_crystal.name=화염의 수정
item.ebwizardry\:fire_crystal.desc=주황빛으로 불타는 수정, 어쩌면 불의 원소를 푸는 열쇠일지도 모릅니다...
item.ebwizardry\:ice_crystal.name=얼음의 수정
item.ebwizardry\:ice_crystal.desc=푸르스름한 색조의 차가운 수정, 어쩌면 서리의 힘의 비밀을 간직하고 있을지도 모릅니다...
item.ebwizardry\:lightning_crystal.name=폭풍의 수정
item.ebwizardry\:lightning_crystal.desc=어지럽게 소용돌이치고 번쩍이는 수정, 어쩌면 더 큰 힘을 숨기고 있을지도 모릅니다...
item.ebwizardry\:necromancy_crystal.name=어둠의 수정
item.ebwizardry\:necromancy_crystal.desc=마치 끌어당기는 듯한 깊고 푸르스름한 수정, 어쩌면 더 어두운 곳으로 가는 관문일지도 모릅니다...
item.ebwizardry\:earth_crystal.name=신록의 수정
item.ebwizardry\:earth_crystal.desc=녹색과 약간의 갈색으로 이루어진 수정, 어쩌면 자연의 힘과 연관이 있을지도 모릅니다...
item.ebwizardry\:sorcery_crystal.name=신령의 수정
item.ebwizardry\:sorcery_crystal.desc=푸르스름한 초록빛의 반짝거리는 수정, 어쩌면 고대의 힘의 비밀을 감추고 있을지도 모릅니다...
item.ebwizardry\:healing_crystal.name=복사의 수정
item.ebwizardry\:healing_crystal.desc=금빛 햇살처럼 노랗게 반짝이는 수정, 어쩌면 신성한 힘의 연결고리일지도 모릅니다...
item.ebwizardry\:spell_book.name=주문서
item.ebwizardry\:spell_book.desc=고대의 상형문자와 룬 문자로 채워진 책. 노력을 통해 그 내용을 해독할 수 있을 것 같습니다...\n\n책을 읽으려면 오른쪽 버튼을 누르세요.
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=Zapamiętano lokalizację %s, %s,
tile.ebwizardry\:transportation_stone.forget=Zapomniano lokalizację %s, %s, %s w wymiarze %s
tile.ebwizardry\:transportation_stone.invalid=Najpierw musisz zrobić krąg z 8 kamieniami transportu!
tile.ebwizardry\:spectral_block.name=Blok Spektralny
tile.ebwizardry\:runestone.name=Kamień Runiczny
tile.ebwizardry\:runestone_pedestal.name=Pilar Runicznego Kamienia
tile.ebwizardry\:fire_runestone.name=Kamień Runiczny
tile.ebwizardry\:ice_runestone.name=Kamień Runiczny
tile.ebwizardry\:lightning_runestone.name=Kamień Runiczny
tile.ebwizardry\:necromancy_runestone.name=Kamień Runiczny
tile.ebwizardry\:earth_runestone.name=Kamień Runiczny
tile.ebwizardry\:healing_runestone.name=Kamień Runiczny
tile.ebwizardry\:sorcery_runestone.name=Kamień Runiczny
tile.ebwizardry\:fire_runestone_pedestal.name=Pilar Runicznego Kamienia
tile.ebwizardry\:ice_runestone_pedestal.name=Pilar Runicznego Kamienia
tile.ebwizardry\:lightning_runestone_pedestal.name=Pilar Runicznego Kamienia
tile.ebwizardry\:necromancy_runestone_pedestal.name=Pilar Runicznego Kamienia
tile.ebwizardry\:earth_runestone_pedestal.name=Pilar Runicznego Kamienia
tile.ebwizardry\:healing_runestone_pedestal.name=Pilar Runicznego Kamienia
tile.ebwizardry\:sorcery_runestone_pedestal.name=Pilar Runicznego Kamienia
tile.ebwizardry\:thorns.name=Ciernie
tile.ebwizardry\:obsidian_crust.name=Obsydianowa Skorupa
tile.ebwizardry\:dry_frosted_ice.name=Zaschły Lód
@@ -55,14 +67,14 @@ tile.ebwizardry\:imbuement_altar.name=Nasycony Ołtarz
item.ebwizardry\:crystal_magic.name=Magiczny Kryształ
item.ebwizardry\:crystal_fire.name=Ognisty Kryształ
item.ebwizardry\:crystal_ice.name=Lodowy Kryształ
item.ebwizardry\:crystal_lightning.name=Sztormowy Kryształ
item.ebwizardry\:crystal_necromancy.name=Mroczny Kryształ
item.ebwizardry\:crystal_earth.name=Zielny Kryształ
item.ebwizardry\:crystal_sorcery.name=Mistyczny Kryształ
item.ebwizardry\:crystal_healing.name=Promienisty Kryształ
item.ebwizardry\:magic_crystal.name=Magiczny Kryształ
item.ebwizardry\:fire_crystal.name=Ognisty Kryształ
item.ebwizardry\:ice_crystal.name=Lodowy Kryształ
item.ebwizardry\:lightning_crystal.name=Sztormowy Kryształ
item.ebwizardry\:necromancy_crystal.name=Mroczny Kryształ
item.ebwizardry\:earth_crystal.name=Zielny Kryształ
item.ebwizardry\:sorcery_crystal.name=Mistyczny Kryształ
item.ebwizardry\:healing_crystal.name=Promienisty Kryształ
item.ebwizardry\:magic_wand.name=Magiczna Różdżka
item.ebwizardry\:apprentice_wand.name=Uczniowska Różdżka
@@ -454,7 +466,7 @@ entity.ebwizardry\:skeleton_minion.name=Szkielet
entity.ebwizardry\:stray_minion.name=Tułacz
entity.ebwizardry\:spider_minion.name=Pająk
entity.ebwizardry\:blaze_minion.name=Płomyk
entity.ebwizardry\:wither_skeleton_minion.name=Obumarły Szkielet
entity.ebwizardry\:wither_skeleton_minion.name=Obumary Szkielet
entity.ebwizardry\:ice_wraith.name=Sługa Lodu
entity.ebwizardry\:lightning_wraith.name=Sługa Piorunów
entity.ebwizardry\:shadow_wraith.name=Sługa Cienia
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=Запомнил местопол
tile.ebwizardry\:transportation_stone.forget=Забыл местоположение %s, %s, %s в измерении %s
tile.ebwizardry\:transportation_stone.invalid=Первое, что Вы должны сделать, это круг с 8-ю камнями перемещения!
tile.ebwizardry\:spectral_block.name=Спектральный блок
tile.ebwizardry\:runestone.name=Рунный камень
tile.ebwizardry\:runestone_pedestal.name=Пьедестал из рунного камня
tile.ebwizardry\:fire_runestone.name=Рунный камень
tile.ebwizardry\:ice_runestone.name=Рунный камень
tile.ebwizardry\:lightning_runestone.name=Рунный камень
tile.ebwizardry\:necromancy_runestone.name=Рунный камень
tile.ebwizardry\:earth_runestone.name=Рунный камень
tile.ebwizardry\:healing_runestone.name=Рунный камень
tile.ebwizardry\:sorcery_runestone.name=Рунный камень
tile.ebwizardry\:fire_runestone_pedestal.name=Пьедестал из рунного камня
tile.ebwizardry\:ice_runestone_pedestal.name=Пьедестал из рунного камня
tile.ebwizardry\:lightning_runestone_pedestal.name=Пьедестал из рунного камня
tile.ebwizardry\:necromancy_runestone_pedestal.name=Пьедестал из рунного камня
tile.ebwizardry\:earth_runestone_pedestal.name=Пьедестал из рунного камня
tile.ebwizardry\:healing_runestone_pedestal.name=Пьедестал из рунного камня
tile.ebwizardry\:sorcery_runestone_pedestal.name=Пьедестал из рунного камня
tile.ebwizardry\:thorns.name=Шипы
tile.ebwizardry\:obsidian_crust.name=Обсидиановая кора
tile.ebwizardry\:dry_frosted_ice.name=Сухой матовый лёд
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=Кафедра из тёмного дуб
tile.ebwizardry\:receptacle.name=Вместилище
tile.ebwizardry\:imbuement_altar.name=Алтарь наполнения
item.ebwizardry\:crystal_magic.name=Волшебный кристалл
item.ebwizardry\:crystal_magic.desc=Переливающиеся цвета этого кристалла, кажется, медленно меняются и кружатся, намекая на волшебную энергию внутри. Возможно, эту магию можно задействовать, как-нибудь...
item.ebwizardry\:crystal_fire.name=Огненный кристалл
item.ebwizardry\:crystal_fire.desc=Кристалл, который светится оранжево-огненным цветом. Возможно, он - ключ к разблокировки элемента огня...
item.ebwizardry\:crystal_ice.name=Ледяной кристалл
item.ebwizardry\:crystal_ice.desc=Кристалл с холодным, синим оттенком. Вероятно, он хранит в себе тайны силы мороза...
item.ebwizardry\:crystal_lightning.name=Грозовой кристалл
item.ebwizardry\:crystal_lightning.desc=Кристалл, который, кажется, вращается и вспыхивает с хаотической энергией. Может быть, он скрывает большую силу внутри...
item.ebwizardry\:crystal_necromancy.name=Тёмный кристалл
item.ebwizardry\:crystal_necromancy.desc=Кристалл с глубоким, пурпурным внешним видом, который, по-видимому, привлекает Вас. Вероятно, это врата к чему-то более тёмному...
item.ebwizardry\:crystal_earth.name=Зелёный кристалл
item.ebwizardry\:crystal_earth.desc=Узорчатый кристалл, со множеством оттенками зелёного и коричневого. Возможно, он держит связь с силами природы...
item.ebwizardry\:crystal_sorcery.name=Мистический кристалл
item.ebwizardry\:crystal_sorcery.desc=Кристалл, который мерцает голубовато-зелёным светом. Возможно, он таит в себе тайны древней силы...
item.ebwizardry\:crystal_healing.name=Сияющий кристалл
item.ebwizardry\:crystal_healing.desc=Кристалл, который блестит золотистым жёлтым светом в дневном свете. Наверное, он владеет связь с божественной силой...
item.ebwizardry\:magic_crystal.name=Волшебный кристалл
item.ebwizardry\:magic_crystal.desc=Переливающиеся цвета этого кристалла, кажется, медленно меняются и кружатся, намекая на волшебную энергию внутри. Возможно, эту магию можно задействовать, как-нибудь...
item.ebwizardry\:fire_crystal.name=Огненный кристалл
item.ebwizardry\:fire_crystal.desc=Кристалл, который светится оранжево-огненным цветом. Возможно, он - ключ к разблокировки элемента огня...
item.ebwizardry\:ice_crystal.name=Ледяной кристалл
item.ebwizardry\:ice_crystal.desc=Кристалл с холодным, синим оттенком. Вероятно, он хранит в себе тайны силы мороза...
item.ebwizardry\:lightning_crystal.name=Грозовой кристалл
item.ebwizardry\:lightning_crystal.desc=Кристалл, который, кажется, вращается и вспыхивает с хаотической энергией. Может быть, он скрывает большую силу внутри...
item.ebwizardry\:necromancy_crystal.name=Тёмный кристалл
item.ebwizardry\:necromancy_crystal.desc=Кристалл с глубоким, пурпурным внешним видом, который, по-видимому, привлекает Вас. Вероятно, это врата к чему-то более тёмному...
item.ebwizardry\:earth_crystal.name=Зелёный кристалл
item.ebwizardry\:earth_crystal.desc=Узорчатый кристалл, со множеством оттенками зелёного и коричневого. Возможно, он держит связь с силами природы...
item.ebwizardry\:sorcery_crystal.name=Мистический кристалл
item.ebwizardry\:sorcery_crystal.desc=Кристалл, который мерцает голубовато-зелёным светом. Возможно, он таит в себе тайны древней силы...
item.ebwizardry\:healing_crystal.name=Сияющий кристалл
item.ebwizardry\:healing_crystal.desc=Кристалл, который блестит золотистым жёлтым светом в дневном свете. Наверное, он владеет связь с божественной силой...
item.ebwizardry\:spell_book.name=Книга с заклинанием
item.ebwizardry\:spell_book.desc=Книга наполненная рунами и символами древней рукописи. Возможно, с самоотверженностью можно расшифровать её содержание...\n\nНажмите пкм, пока держите эту книгу, чтобы прочитать её.
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=你记住了位于 %4$s 维度 %1
tile.ebwizardry\:transportation_stone.forget=你遗忘了位于 %4$s 维度 %1$s%2$s%3$s的传送坐标
tile.ebwizardry\:transportation_stone.invalid=你必须用8个传送石围成一个圈!
tile.ebwizardry\:spectral_block.name=幽冥方块
tile.ebwizardry\:runestone.name=符石
tile.ebwizardry\:runestone_pedestal.name=符石基座
tile.ebwizardry\:fire_runestone.name=符石
tile.ebwizardry\:ice_runestone.name=符石
tile.ebwizardry\:lightning_runestone.name=符石
tile.ebwizardry\:necromancy_runestone.name=符石
tile.ebwizardry\:earth_runestone.name=符石
tile.ebwizardry\:healing_runestone.name=符石
tile.ebwizardry\:sorcery_runestone.name=符石
tile.ebwizardry\:fire_runestone_pedestal.name=符石基座
tile.ebwizardry\:ice_runestone_pedestal.name=符石基座
tile.ebwizardry\:lightning_runestone_pedestal.name=符石基座
tile.ebwizardry\:necromancy_runestone_pedestal.name=符石基座
tile.ebwizardry\:earth_runestone_pedestal.name=符石基座
tile.ebwizardry\:healing_runestone_pedestal.name=符石基座
tile.ebwizardry\:sorcery_runestone_pedestal.name=符石基座
tile.ebwizardry\:thorns.name=荆棘
tile.ebwizardry\:obsidian_crust.name=黑曜石层
tile.ebwizardry\:dry_frosted_ice.name=干燥霜冰
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=深色橡木览术台
tile.ebwizardry\:receptacle.name=容杯
tile.ebwizardry\:imbuement_altar.name=注灵祭坛
item.ebwizardry\:crystal_magic.name=魔力水晶
item.ebwizardry\:crystal_magic.desc=水晶闪耀斑斓的色彩似乎在缓慢地变幻流转,暗示着其内蕴含的魔法能量。或许能以某种方法来驾驭这种魔力......
item.ebwizardry\:crystal_fire.name=赤焰水晶
item.ebwizardry\:crystal_fire.desc=发出烈火般橙色光彩的水晶。也许是揭示火焰元素奥秘的关键......
item.ebwizardry\:crystal_ice.name=寒霜水晶
item.ebwizardry\:crystal_ice.desc=具有寒冷的霜蓝色调的水晶。或许它蕴藏着冰霜力量的奥秘......
item.ebwizardry\:crystal_lightning.name=风暴水晶
item.ebwizardry\:crystal_lightning.desc=似乎有混沌能量在其中流转闪烁的水晶。也许它内部蕴藏着更强大的力量......
item.ebwizardry\:crystal_necromancy.name=邃暗水晶
item.ebwizardry\:crystal_necromancy.desc=暗紫色外观的水晶,凝视它时仿佛被吸入其中。或许它是通往邃暗的门户......
item.ebwizardry\:crystal_earth.name=苍翠水晶
item.ebwizardry\:crystal_earth.desc=遍布翠绿与褐色图案的水晶。或许它蕴含着与自然之力的联系......
item.ebwizardry\:crystal_sorcery.name=秘源水晶
item.ebwizardry\:crystal_sorcery.desc=散发着碧绿微光的水晶。也许它封存着远古之力的奥秘......
item.ebwizardry\:crystal_healing.name=光辉水晶
item.ebwizardry\:crystal_healing.desc=在日光下闪耀金黄色光芒的水晶。或许它连结着神圣之力......
item.ebwizardry\:magic_crystal.name=魔力水晶
item.ebwizardry\:magic_crystal.desc=水晶闪耀斑斓的色彩似乎在缓慢地变幻流转,暗示着其内蕴含的魔法能量。或许能以某种方法来驾驭这种魔力......
item.ebwizardry\:fire_crystal.name=赤焰水晶
item.ebwizardry\:fire_crystal.desc=发出烈火般橙色光彩的水晶。也许是揭示火焰元素奥秘的关键......
item.ebwizardry\:ice_crystal.name=寒霜水晶
item.ebwizardry\:ice_crystal.desc=具有寒冷的霜蓝色调的水晶。或许它蕴藏着冰霜力量的奥秘......
item.ebwizardry\:lightning_crystal.name=风暴水晶
item.ebwizardry\:lightning_crystal.desc=似乎有混沌能量在其中流转闪烁的水晶。也许它内部蕴藏着更强大的力量......
item.ebwizardry\:necromancy_crystal.name=邃暗水晶
item.ebwizardry\:necromancy_crystal.desc=暗紫色外观的水晶,凝视它时仿佛被吸入其中。或许它是通往邃暗的门户......
item.ebwizardry\:earth_crystal.name=苍翠水晶
item.ebwizardry\:earth_crystal.desc=遍布翠绿与褐色图案的水晶。或许它蕴含着与自然之力的联系......
item.ebwizardry\:sorcery_crystal.name=秘源水晶
item.ebwizardry\:sorcery_crystal.desc=散发着碧绿微光的水晶。也许它封存着远古之力的奥秘......
item.ebwizardry\:healing_crystal.name=光辉水晶
item.ebwizardry\:healing_crystal.desc=在日光下闪耀金黄色光芒的水晶。或许它连结着神圣之力......
item.ebwizardry\:spell_book.name=法术书
item.ebwizardry\:spell_book.desc=一本写满了远古文稿里符号与雕文的书。通过刻苦钻研,或许能破译它的内容......\n\n手持这本书时右击即可阅读。
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=記憶座標位置 %s, %s, %s 於
tile.ebwizardry\:transportation_stone.forget=消除記憶座標位置 %s, %s, %s 於世界: %s
tile.ebwizardry\:transportation_stone.invalid=你必須先用8個傳送石圍成一圈!
tile.ebwizardry\:spectral_block.name=具現化方塊
tile.ebwizardry\:runestone.name=符文石
tile.ebwizardry\:runestone_pedestal.name=符文石
tile.ebwizardry\:fire_runestone.name=符文石
tile.ebwizardry\:ice_runestone.name=符文石
tile.ebwizardry\:lightning_runestone.name=符文石
tile.ebwizardry\:necromancy_runestone.name=符文石
tile.ebwizardry\:earth_runestone.name=符文石
tile.ebwizardry\:healing_runestone.name=符文石
tile.ebwizardry\:sorcery_runestone.name=符文石
tile.ebwizardry\:fire_runestone_pedestal.name=符文石座
tile.ebwizardry\:ice_runestone_pedestal.name=符文石座
tile.ebwizardry\:lightning_runestone_pedestal.name=符文石座
tile.ebwizardry\:necromancy_runestone_pedestal.name=符文石座
tile.ebwizardry\:earth_runestone_pedestal.name=符文石座
tile.ebwizardry\:healing_runestone_pedestal.name=符文石座
tile.ebwizardry\:sorcery_runestone_pedestal.name=符文石座
tile.ebwizardry\:thorns.name=荊棘
tile.ebwizardry\:obsidian_crust.name=黑曜石殼
tile.ebwizardry\:dry_frosted_ice.name=乾的結凍冰
@@ -26,14 +38,14 @@ tile.ebwizardry\:earth_crystal_block.name=碧綠水晶方塊
tile.ebwizardry\:sorcery_crystal_block.name=神秘水晶方塊
tile.ebwizardry\:healing_crystal_block.name=聖光水晶方塊
item.ebwizardry\:crystal_magic.name=魔法水晶
item.ebwizardry\:crystal_fire.name=火焰水晶
item.ebwizardry\:crystal_ice.name=寒冰水晶
item.ebwizardry\:crystal_lightning.name=雷電水晶
item.ebwizardry\:crystal_necromancy.name=黑暗水晶
item.ebwizardry\:crystal_earth.name=碧綠水晶
item.ebwizardry\:crystal_sorcery.name=神秘水晶
item.ebwizardry\:crystal_healing.name=聖光水晶
item.ebwizardry\:magic_crystal.name=魔法水晶
item.ebwizardry\:fire_crystal.name=火焰水晶
item.ebwizardry\:ice_crystal.name=寒冰水晶
item.ebwizardry\:lightning_crystal.name=雷電水晶
item.ebwizardry\:necromancy_crystal.name=黑暗水晶
item.ebwizardry\:earth_crystal.name=碧綠水晶
item.ebwizardry\:sorcery_crystal.name=神秘水晶
item.ebwizardry\:healing_crystal.name=聖光水晶
item.ebwizardry\:magic_wand.name=基礎法杖
item.ebwizardry\:apprentice_wand.name=學徒法杖
@@ -6,7 +6,7 @@
"entries": [
{
"type": "item",
"name": "ebwizardry:spectral_dust",
"name": "ebwizardry:spectral_dust_earth",
"weight": 1,
"functions": [
{
@@ -15,11 +15,7 @@
"min": 0,
"max": 1
}
},
{
"function": "minecraft:set_data",
"data": 5
}
}
]
}
]
@@ -6,7 +6,7 @@
"entries": [
{
"type": "item",
"name": "ebwizardry:spectral_dust",
"name": "ebwizardry:spectral_dust_fire",
"weight": 1,
"functions": [
{
@@ -15,11 +15,7 @@
"min": 0,
"max": 1
}
},
{
"function": "minecraft:set_data",
"data": 1
}
}
]
}
]
@@ -6,7 +6,7 @@
"entries": [
{
"type": "item",
"name": "ebwizardry:spectral_dust",
"name": "ebwizardry:spectral_dust_healing",
"weight": 1,
"functions": [
{
@@ -15,11 +15,7 @@
"min": 0,
"max": 1
}
},
{
"function": "minecraft:set_data",
"data": 7
}
}
]
}
]
@@ -6,7 +6,7 @@
"entries": [
{
"type": "item",
"name": "ebwizardry:spectral_dust",
"name": "ebwizardry:spectral_dust_ice",
"weight": 1,
"functions": [
{
@@ -15,11 +15,7 @@
"min": 0,
"max": 1
}
},
{
"function": "minecraft:set_data",
"data": 2
}
}
]
}
]
@@ -6,7 +6,7 @@
"entries": [
{
"type": "item",
"name": "ebwizardry:spectral_dust",
"name": "ebwizardry:spectral_dust_lightning",
"weight": 1,
"functions": [
{
@@ -15,11 +15,7 @@
"min": 0,
"max": 1
}
},
{
"function": "minecraft:set_data",
"data": 3
}
}
]
}
]
@@ -6,7 +6,7 @@
"entries": [
{
"type": "item",
"name": "ebwizardry:spectral_dust",
"name": "ebwizardry:spectral_dust_necromancy",
"weight": 1,
"functions": [
{
@@ -15,11 +15,7 @@
"min": 0,
"max": 1
}
},
{
"function": "minecraft:set_data",
"data": 4
}
}
]
}
]
@@ -6,7 +6,7 @@
"entries": [
{
"type": "item",
"name": "ebwizardry:spectral_dust",
"name": "ebwizardry:spectral_dust_sorcery",
"weight": 1,
"functions": [
{
@@ -15,11 +15,7 @@
"min": 0,
"max": 1
}
},
{
"function": "minecraft:set_data",
"data": 6
}
}
]
}
]
@@ -6,39 +6,18 @@
"entries": [
{
"type": "item",
"entryName": "apprentice_tome",
"name": "ebwizardry:arcane_tome",
"weight": 4,
"functions": [
{
"function": "set_data",
"data": 1
}
]
"name": "ebwizardry:arcane_tome_apprentice",
"weight": 4
},
{
"type": "item",
"entryName": "advanced_tome",
"name": "ebwizardry:arcane_tome",
"weight": 2,
"functions": [
{
"function": "set_data",
"data": 2
}
]
"name": "ebwizardry:arcane_tome_advanced",
"weight": 2
},
{
"type": "item",
"entryName": "master_tome",
"name": "ebwizardry:arcane_tome",
"weight": 1,
"functions": [
{
"function": "set_data",
"data": 3
}
]
"name": "ebwizardry:arcane_tome_master",
"weight": 1
}
]
}
@@ -6,17 +6,38 @@
"entries": [
{
"type": "item",
"name": "ebwizardry:magic_crystal",
"weight": 1,
"functions": [
{
"function": "set_data",
"data": {
"min": 1,
"max": 7
}
}
]
"name": "ebwizardry:earth_crystal",
"weight": 1
},
{
"type": "item",
"name": "ebwizardry:fire_crystal",
"weight": 1
},
{
"type": "item",
"name": "ebwizardry:healing_crystal",
"weight": 1
},
{
"type": "item",
"name": "ebwizardry:ice_crystal",
"weight": 1
},
{
"type": "item",
"name": "ebwizardry:lightning_crystal",
"weight": 1
},
{
"type": "item",
"name": "ebwizardry:necromancy_crystal",
"weight": 1
},
{
"type": "item",
"name": "ebwizardry:sorcery_crystal",
"weight": 1
}
]
}
@@ -1,6 +1,6 @@
{
"parent": "block/cube_all",
"textures": {
"all": "ebwizardry:blocks/crystal_block"
"all": "ebwizardry:blocks/magic_crystal_block"
}
}
@@ -1,6 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/crystal_ice"
"layer0": "ebwizardry:items/arcane_tome"
}
}
@@ -1,6 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/crystal_fire"
"layer0": "ebwizardry:items/arcane_tome"
}
}
@@ -1,6 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/crystal_magic"
"layer0": "ebwizardry:items/arcane_tome"
}
}
@@ -1,6 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/crystal_lightning"
}
}
@@ -1,6 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/crystal_necromancy"
}
}
@@ -1,6 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/crystal_sorcery"
}
}
@@ -1,6 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/crystal_earth"
"layer0": "ebwizardry:items/earth_crystal"
}
}
@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/fire_crystal"
}
}
@@ -1,6 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/crystal_healing"
"layer0": "ebwizardry:items/healing_crystal"
}
}
@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/ice_crystal"
}
}
@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/lightning_crystal"
}
}
@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/magic_crystal"
}
}
@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/necromancy_crystal"
}
}
@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "ebwizardry:items/sorcery_crystal"
}
}
@@ -10,8 +10,7 @@
"item": "ebwizardry:grand_crystal"
},
"w": {
"item": "ebwizardry:gilded_wood",
"data": 4
"item": "ebwizardry:acacia_gilded_wood"
}
},
"result": {
@@ -13,8 +13,7 @@
"item": "ebwizardry:grand_crystal"
},
"w": {
"item": "ebwizardry:gilded_wood",
"data": 4
"item": "ebwizardry:acacia_gilded_wood"
}
},
"result": {
@@ -10,8 +10,7 @@
"item": "ebwizardry:grand_crystal"
},
"w": {
"item": "ebwizardry:gilded_wood",
"data": 2
"item": "ebwizardry:birch_gilded_wood"
}
},
"result": {
@@ -13,8 +13,7 @@
"item": "ebwizardry:grand_crystal"
},
"w": {
"item": "ebwizardry:gilded_wood",
"data": 2
"item": "ebwizardry:birch_gilded_wood"
}
},
"result": {
@@ -1,18 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"zzz",
"zzz",
"zzz"
],
"key": {
"z": {
"item": "ebwizardry:magic_crystal",
"data": 2
}
},
"result": {
"item": "ebwizardry:crystal_block",
"data": 2
}
}
@@ -1,18 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"zzz",
"zzz",
"zzz"
],
"key": {
"z": {
"item": "ebwizardry:magic_crystal",
"data": 3
}
},
"result": {
"item": "ebwizardry:crystal_block",
"data": 3
}
}
@@ -1,18 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"zzz",
"zzz",
"zzz"
],
"key": {
"z": {
"item": "ebwizardry:magic_crystal",
"data": 4
}
},
"result": {
"item": "ebwizardry:crystal_block",
"data": 4
}
}
@@ -1,18 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"zzz",
"zzz",
"zzz"
],
"key": {
"z": {
"item": "ebwizardry:magic_crystal",
"data": 6
}
},
"result": {
"item": "ebwizardry:crystal_block",
"data": 6
}
}
@@ -3,13 +3,11 @@
"group": "magic_crystal",
"ingredients": [
{
"item": "ebwizardry:crystal_block",
"data": 0
"item": "ebwizardry:magic_crystal_block"
}
],
"result": {
"item": "ebwizardry:magic_crystal",
"data": 0,
"count": 9
}
}
@@ -3,13 +3,11 @@
"group": "magic_crystal",
"ingredients": [
{
"item": "ebwizardry:crystal_block",
"data": 5
"item": "ebwizardry:earth_crystal_block"
}
],
"result": {
"item": "ebwizardry:magic_crystal",
"data": 5,
"item": "ebwizardry:earth_crystal",
"count": 9
}
}
@@ -3,13 +3,11 @@
"group": "magic_crystal",
"ingredients": [
{
"item": "ebwizardry:crystal_block",
"data": 1
"item": "ebwizardry:fire_crystal_block"
}
],
"result": {
"item": "ebwizardry:magic_crystal",
"data": 1,
"item": "ebwizardry:fire_crystal",
"count": 9
}
}

Some files were not shown because too many files have changed in this diff Show More