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
164 changed files with 1099 additions and 1014 deletions
@@ -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);
}
}
@@ -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)){
@@ -4,6 +4,7 @@ import electroblob.wizardry.registry.WizardryPotions;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.GlStateManager.DestFactor;
import net.minecraft.client.renderer.GlStateManager.SourceFactor;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.entity.RenderLivingBase;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.ResourceLocation;
@@ -4,6 +4,7 @@ import electroblob.wizardry.registry.WizardryPotions;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.GlStateManager.DestFactor;
import net.minecraft.client.renderer.GlStateManager.SourceFactor;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.entity.RenderLivingBase;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.ResourceLocation;
@@ -4,6 +4,7 @@ import electroblob.wizardry.registry.WizardryPotions;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.GlStateManager.DestFactor;
import net.minecraft.client.renderer.GlStateManager.SourceFactor;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.entity.RenderLivingBase;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.ResourceLocation;
@@ -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; }
}
@@ -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,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);
@@ -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);
@@ -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");
}
@@ -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,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()));
}
}
}
}
@@ -687,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.
@@ -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()))));
}
}
}
@@ -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!");
}
@@ -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
@@ -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=Obumary 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_earth"
"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_magic"
"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
}
}
@@ -3,13 +3,11 @@
"group": "magic_crystal",
"ingredients": [
{
"item": "ebwizardry:crystal_block",
"data": 7
"item": "ebwizardry:healing_crystal_block"
}
],
"result": {
"item": "ebwizardry:magic_crystal",
"data": 7,
"item": "ebwizardry:healing_crystal",
"count": 9
}
}
@@ -3,13 +3,11 @@
"group": "magic_crystal",
"ingredients": [
{
"item": "ebwizardry:crystal_block",
"data": 2
"item": "ebwizardry:ice_crystal_block"
}
],
"result": {
"item": "ebwizardry:magic_crystal",
"data": 2,
"item": "ebwizardry:ice_crystal",
"count": 9
}
}
@@ -3,13 +3,11 @@
"group": "magic_crystal",
"ingredients": [
{
"item": "ebwizardry:crystal_block",
"data": 3
"item": "ebwizardry:lightning_crystal_block"
}
],
"result": {
"item": "ebwizardry:magic_crystal",
"data": 3,
"item": "ebwizardry:lightning_crystal",
"count": 9
}
}
@@ -3,13 +3,11 @@
"group": "magic_crystal",
"ingredients": [
{
"item": "ebwizardry:crystal_block",
"data": 4
"item": "ebwizardry:necromancy_crystal_block"
}
],
"result": {
"item": "ebwizardry:magic_crystal",
"data": 4,
"item": "ebwizardry:necromancy_crystal",
"count": 9
}
}
@@ -3,13 +3,11 @@
"group": "magic_crystal",
"ingredients": [
{
"item": "ebwizardry:crystal_block",
"data": 6
"item": "ebwizardry:sorcery_crystal_block"
}
],
"result": {
"item": "ebwizardry:magic_crystal",
"data": 6,
"item": "ebwizardry:sorcery_crystal",
"count": 9
}
}
@@ -8,7 +8,6 @@
],
"result": {
"item": "ebwizardry:magic_crystal",
"data": 0,
"count": 2
}
}
@@ -2,8 +2,7 @@
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "ebwizardry:magic_crystal",
"data": 0
"item": "ebwizardry:magic_crystal"
}
],
"result": {
@@ -10,8 +10,7 @@
"item": "ebwizardry:grand_crystal"
},
"w": {
"item": "ebwizardry:gilded_wood",
"data": 5
"item": "ebwizardry:dark_oak_gilded_wood"
}
},
"result": {
@@ -13,8 +13,7 @@
"item": "ebwizardry:grand_crystal"
},
"w": {
"item": "ebwizardry:gilded_wood",
"data": 5
"item": "ebwizardry:dark_oak_gilded_wood"
}
},
"result": {
@@ -7,12 +7,10 @@
],
"key": {
"z": {
"item": "ebwizardry:magic_crystal",
"data": 0
"item": "ebwizardry:earth_crystal"
}
},
"result": {
"item": "ebwizardry:crystal_block",
"data": 0
"item": "ebwizardry:earth_crystal_block"
}
}
@@ -7,8 +7,7 @@
],
"key": {
"y": {
"item": "ebwizardry:magic_crystal",
"data": 5
"item": "ebwizardry:earth_crystal"
},
"z": {
"type": "forge:ore_dict",
@@ -16,8 +15,7 @@
}
},
"result": {
"item": "ebwizardry:runestone",
"data": 5,
"item": "ebwizardry:earth_runestone",
"count": 8
}
}
@@ -7,8 +7,7 @@
],
"key": {
"y": {
"item": "ebwizardry:magic_crystal",
"data": 5
"item": "ebwizardry:earth_crystal"
},
"z": {
"type": "forge:ore_dict",
@@ -16,8 +15,7 @@
}
},
"result": {
"item": "ebwizardry:runestone_pedestal",
"data": 5,
"item": "ebwizardry:earth_runestone_pedestal",
"count": 2
}
}
@@ -7,12 +7,10 @@
],
"key": {
"z": {
"item": "ebwizardry:magic_crystal",
"data": 5
"item": "ebwizardry:fire_crystal"
}
},
"result": {
"item": "ebwizardry:crystal_block",
"data": 5
"item": "ebwizardry:fire_crystal_block"
}
}
@@ -7,8 +7,7 @@
],
"key": {
"y": {
"item": "ebwizardry:magic_crystal",
"data": 1
"item": "ebwizardry:fire_crystal"
},
"z": {
"type": "forge:ore_dict",
@@ -16,8 +15,7 @@
}
},
"result": {
"item": "ebwizardry:runestone",
"data": 1,
"item": "ebwizardry:fire_runestone",
"count": 8
}
}
@@ -7,8 +7,7 @@
],
"key": {
"y": {
"item": "ebwizardry:magic_crystal",
"data": 1
"item": "ebwizardry:fire_crystal"
},
"z": {
"type": "forge:ore_dict",
@@ -16,8 +15,7 @@
}
},
"result": {
"item": "ebwizardry:runestone_pedestal",
"data": 1,
"item": "ebwizardry:fire_runestone_pedestal",
"count": 2
}
}
@@ -16,8 +16,7 @@
}
},
"result": {
"item": "ebwizardry:gilded_wood",
"data": 4,
"item": "ebwizardry:acacia_gilded_wood",
"count": 8
}
}
@@ -16,8 +16,7 @@
}
},
"result": {
"item": "ebwizardry:gilded_wood",
"data": 2,
"item": "ebwizardry:birch_gilded_wood",
"count": 8
}
}
@@ -16,8 +16,7 @@
}
},
"result": {
"item": "ebwizardry:gilded_wood",
"data": 5,
"item": "ebwizardry:dark_oak_gilded_wood",
"count": 8
}
}

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