Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 461df00048 | |||
| dcf60a8b4b | |||
| 739a1573e1 | |||
| b7ffd61020 | |||
| b6682e1c52 | |||
| 5d337b93a6 | |||
| b1e70c01f0 | |||
| d30a40bdc4 | |||
| 25b2b0b8a5 | |||
| 3eef93b599 | |||
| 7888b92129 | |||
| 5b48dffa77 | |||
| 5bf4650da1 | |||
| 8e9c270b77 | |||
| 00080331df | |||
| 27e40e2069 | |||
| 3a93877de3 | |||
| 7f70784cd3 | |||
| ed6e3df66e | |||
| eb5becbbd4 | |||
| 9599316fbc | |||
| cc1c951ef8 | |||
| d23c4cba18 | |||
| 3d30b0b96f | |||
| ad1e5d555a | |||
| 14ea5f1c72 | |||
| 709d44e4d9 | |||
| 8df00e9c41 | |||
| 8dbb0ec058 | |||
| b8310eedae |
+1
-1
@@ -11,7 +11,7 @@ apply plugin: 'net.minecraftforge.gradle.forge'
|
||||
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
||||
|
||||
|
||||
version = "4.3.7"
|
||||
version = "4.3.8"
|
||||
group= "electroblob.wizardry"// http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
archivesBaseName = "ElectroblobsWizardry"
|
||||
|
||||
|
||||
@@ -379,6 +379,9 @@ public final class Settings {
|
||||
public boolean showSpellHUD = true;
|
||||
/** <b>[Client-only]</b> Whether to show the charge meter when charging up a spell. */
|
||||
public boolean showChargeMeter = true;
|
||||
/** <b>[Client-only]</b> Whether to initialise the handbook's data. Setting this to false will break the in-game handbook, but might help with some
|
||||
* startup crashes */
|
||||
public boolean loadHandbook = true;
|
||||
/** <b>[Client-only]</b> The position of the spell HUD. */
|
||||
public GuiPosition spellHUDPosition = GuiPosition.BOTTOM_LEFT;
|
||||
|
||||
@@ -1112,6 +1115,13 @@ public final class Settings {
|
||||
showChargeMeter = property.getBoolean();
|
||||
propOrder.add(property.getName());
|
||||
|
||||
property = config.get(CLIENT_CATEGORY, "loadHandbook", true, "Whether to initialise the in-game handbook. Setting this to false will brick the in-game handbook, but it might help if you have startup crashes.");
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".load_handbook");
|
||||
property.setRequiresWorldRestart(false);
|
||||
Wizardry.proxy.setToNamedBooleanEntry(property);
|
||||
loadHandbook = property.getBoolean();
|
||||
propOrder.add(property.getName());
|
||||
|
||||
property = config.get(CLIENT_CATEGORY, "spellHUDPosition", GuiPosition.BOTTOM_LEFT.name, "The position of the spell HUD.", GuiPosition.names);
|
||||
property.setLanguageKey("config." + Wizardry.MODID + ".spell_hud_position");
|
||||
spellHUDPosition = GuiPosition.fromName(property.getString());
|
||||
|
||||
@@ -127,11 +127,10 @@ public class Wizardry {
|
||||
public void preInit(FMLPreInitializationEvent event){
|
||||
|
||||
logger = event.getModLog();
|
||||
|
||||
proxy.registerResourceReloadListeners();
|
||||
|
||||
configDirectory = new File(event.getModConfigurationDirectory(), Wizardry.MODID);
|
||||
settings.initConfig(event);
|
||||
proxy.registerResourceReloadListeners();
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
tisTheSeason = calendar.get(Calendar.MONTH) + 1 == 12 && calendar.get(Calendar.DAY_OF_MONTH) >= 24
|
||||
|
||||
@@ -307,7 +307,7 @@ public final class WizardryEventHandler {
|
||||
PotionEffect effect = event.getEntityLiving().getActivePotionEffect(WizardryPotions.ward);
|
||||
|
||||
if(effect != null && event.getSource().isMagicDamage()){
|
||||
event.setAmount(event.getAmount() * Math.max(0, 1 - 0.4f * effect.getAmplifier())); // Resistance is 20%
|
||||
event.setAmount(event.getAmount() * Math.max(0, 1 - 0.2f * (1 + effect.getAmplifier()))); // Resistance is 20%
|
||||
}
|
||||
|
||||
// Flaming and freezing swords
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+22
-43
@@ -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,6 +1,7 @@
|
||||
package electroblob.wizardry.client;
|
||||
|
||||
import electroblob.wizardry.CommonProxy;
|
||||
import electroblob.wizardry.Settings;
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.block.BlockBookshelf;
|
||||
import electroblob.wizardry.client.animation.ActionAnimation;
|
||||
@@ -19,6 +20,7 @@ import electroblob.wizardry.client.model.ModelSageArmour;
|
||||
import electroblob.wizardry.client.model.ModelWizardArmour;
|
||||
import electroblob.wizardry.client.particle.*;
|
||||
import electroblob.wizardry.client.particle.ParticleWizardry.IWizardryParticleFactory;
|
||||
import electroblob.wizardry.client.renderer.RenderSpectralGolem;
|
||||
import electroblob.wizardry.client.renderer.entity.*;
|
||||
import electroblob.wizardry.client.renderer.entity.layers.*;
|
||||
import electroblob.wizardry.client.renderer.overlay.RenderBlinkEffect;
|
||||
@@ -164,7 +166,8 @@ public class ClientProxy extends CommonProxy {
|
||||
IResourceManager manager = Minecraft.getMinecraft().getResourceManager();
|
||||
if(manager instanceof IReloadableResourceManager){
|
||||
((IReloadableResourceManager)manager).registerReloadListener(GuiSpellDisplay::loadSkins);
|
||||
((IReloadableResourceManager)manager).registerReloadListener(GuiWizardHandbook::loadHandbookFile);
|
||||
if (Wizardry.settings.loadHandbook)
|
||||
((IReloadableResourceManager)manager).registerReloadListener(GuiWizardHandbook::loadHandbookFile);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -728,6 +731,9 @@ public class ClientProxy extends CommonProxy {
|
||||
LayerTiledOverlay.initialiseLayers(LayerMindControl::new);
|
||||
LayerTiledOverlay.initialiseLayers(LayerSummonAnimation::new);
|
||||
LayerTiledOverlay.initialiseLayers(LayerDisintegrateAnimation::new);
|
||||
LayerTiledOverlay.initialiseLayers(LayerOak::new);
|
||||
LayerTiledOverlay.initialiseLayers(LayerIron::new);
|
||||
LayerTiledOverlay.initialiseLayers(LayerDiamond::new);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -766,6 +772,7 @@ public class ClientProxy extends CommonProxy {
|
||||
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityIceGiant.class, RenderIceGiant::new);
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityPhoenix.class, RenderPhoenix::new);
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntitySpectralGolem.class, RenderSpectralGolem::new);
|
||||
|
||||
// Projectiles
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityMagicMissile.class, manager -> new RenderMagicArrow(manager,
|
||||
@@ -780,6 +787,7 @@ public class ClientProxy extends CommonProxy {
|
||||
new ResourceLocation(Wizardry.MODID, "textures/entity/ice_lance.png"), false, 16.0, 3.0, 22, 5, false));
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityFlamecatcherArrow.class, manager -> new RenderMagicArrow(manager,
|
||||
new ResourceLocation(Wizardry.MODID, "textures/entity/flamecatcher_arrow.png"), false, 8, 2.0, 16, 5, true));
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityConjuredArrow.class, RenderConjuredArrow::new);
|
||||
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityForceArrow.class, RenderForceArrow::new);
|
||||
|
||||
|
||||
@@ -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)){
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package electroblob.wizardry.client.renderer;
|
||||
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import net.minecraft.client.model.ModelIronGolem;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.entity.RenderLiving;
|
||||
import net.minecraft.client.renderer.entity.RenderManager;
|
||||
import net.minecraft.entity.monster.EntityIronGolem;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderSpectralGolem extends RenderLiving<EntityIronGolem>
|
||||
{
|
||||
private static final ResourceLocation SPECTRAL_GOLEM_TEXTURES = new ResourceLocation(Wizardry.MODID, "textures/entity/spectral_golem.png");
|
||||
|
||||
public RenderSpectralGolem(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn, new ModelIronGolem(), 0.5F);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
|
||||
*/
|
||||
protected ResourceLocation getEntityTexture(EntityIronGolem entity)
|
||||
{
|
||||
return SPECTRAL_GOLEM_TEXTURES;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void preRenderCallback(EntityIronGolem entity, float partialTickTime){
|
||||
super.preRenderCallback(entity, partialTickTime);
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GlStateManager.color(1, 1, 1, 0.7f);
|
||||
}
|
||||
|
||||
protected void applyRotations(EntityIronGolem entityLiving, float ageInTicks, float rotationYaw, float partialTicks)
|
||||
{
|
||||
super.applyRotations(entityLiving, ageInTicks, rotationYaw, partialTicks);
|
||||
|
||||
if ((double)entityLiving.limbSwingAmount >= 0.01D)
|
||||
{
|
||||
float f = 13.0F;
|
||||
float f1 = entityLiving.limbSwing - entityLiving.limbSwingAmount * (1.0F - partialTicks) + 6.0F;
|
||||
float f2 = (Math.abs(f1 % 13.0F - 6.5F) - 3.25F) / 3.25F;
|
||||
GlStateManager.rotate(6.5F * f2, 0.0F, 0.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package electroblob.wizardry.client.renderer.entity;
|
||||
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.entity.projectile.EntityConjuredArrow;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.entity.RenderArrow;
|
||||
import net.minecraft.client.renderer.entity.RenderManager;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderConjuredArrow extends RenderArrow<EntityConjuredArrow> {
|
||||
|
||||
public static final ResourceLocation CONJURED_ARROW_TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/entity/conjured_arrow.png");
|
||||
|
||||
public RenderConjuredArrow(RenderManager manager) {
|
||||
super(manager);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntityConjuredArrow entity) {
|
||||
return CONJURED_ARROW_TEXTURE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doRender(EntityConjuredArrow entity, double x, double y, double z, float entityYaw, float partialTicks) {
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GlStateManager.color(1, 1, 1, 0.4f);
|
||||
super.doRender(entity, x, y, z, entityYaw, partialTicks);
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package electroblob.wizardry.client.renderer.entity.layers;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* Layer used to render the diamondflesh texture on creatures with the diamondflesh effect.
|
||||
*
|
||||
* @author WinDanesz
|
||||
* @since Wizardry 4.3.7
|
||||
*/
|
||||
public class LayerDiamond extends LayerTiledOverlay<EntityLivingBase> {
|
||||
|
||||
private static final ResourceLocation TEXTURE = new ResourceLocation("textures/blocks/diamond_block.png");
|
||||
|
||||
public LayerDiamond(RenderLivingBase<?> renderer){
|
||||
super(renderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender(EntityLivingBase entity, float partialTicks){
|
||||
return !entity.isInvisible() && entity.isPotionActive(WizardryPotions.diamondflesh);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTexture(EntityLivingBase entity, float partialTicks){
|
||||
return TEXTURE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doRenderLayer(EntityLivingBase entity, float limbSwing, float limbSwingAmount, float partialTicks,
|
||||
float ageInTicks, float netHeadYaw, float headPitch, float scale){
|
||||
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
int j = entity.getBrightnessForRender();
|
||||
int k = j % 65536;
|
||||
int l = j / 65536;
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) k, (float) l);
|
||||
|
||||
super.doRenderLayer(entity, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale);
|
||||
|
||||
GlStateManager.disableBlend();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package electroblob.wizardry.client.renderer.entity.layers;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* Layer used to render the ironflesh texture on creatures with the ironflesh effect.
|
||||
*
|
||||
* @author WinDanesz
|
||||
* @since Wizardry 4.3.7
|
||||
*/
|
||||
public class LayerIron extends LayerTiledOverlay<EntityLivingBase> {
|
||||
|
||||
private static final ResourceLocation TEXTURE = new ResourceLocation("textures/blocks/iron_block.png");
|
||||
|
||||
public LayerIron(RenderLivingBase<?> renderer){
|
||||
super(renderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender(EntityLivingBase entity, float partialTicks){
|
||||
return !entity.isInvisible() && entity.isPotionActive(WizardryPotions.ironflesh);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTexture(EntityLivingBase entity, float partialTicks){
|
||||
return TEXTURE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doRenderLayer(EntityLivingBase entity, float limbSwing, float limbSwingAmount, float partialTicks,
|
||||
float ageInTicks, float netHeadYaw, float headPitch, float scale){
|
||||
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
int j = entity.getBrightnessForRender();
|
||||
int k = j % 65536;
|
||||
int l = j / 65536;
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) k, (float) l);
|
||||
|
||||
super.doRenderLayer(entity, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale);
|
||||
|
||||
GlStateManager.disableBlend();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package electroblob.wizardry.client.renderer.entity.layers;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* Layer used to render the oakflesh texture on creatures with the oakflesh effect.
|
||||
*
|
||||
* @author WinDanesz
|
||||
* @since Wizardry 4.3.7
|
||||
*/
|
||||
public class LayerOak extends LayerTiledOverlay<EntityLivingBase> {
|
||||
|
||||
private static final ResourceLocation TEXTURE = new ResourceLocation("textures/blocks/log_oak.png");
|
||||
|
||||
public LayerOak(RenderLivingBase<?> renderer){
|
||||
super(renderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender(EntityLivingBase entity, float partialTicks){
|
||||
return !entity.isInvisible() && entity.isPotionActive(WizardryPotions.oakflesh);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTexture(EntityLivingBase entity, float partialTicks){
|
||||
return TEXTURE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doRenderLayer(EntityLivingBase entity, float limbSwing, float limbSwingAmount, float partialTicks,
|
||||
float ageInTicks, float netHeadYaw, float headPitch, float scale){
|
||||
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
int j = entity.getBrightnessForRender();
|
||||
int k = j % 65536;
|
||||
int l = j / 65536;
|
||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) k, (float) l);
|
||||
|
||||
super.doRenderLayer(entity, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale);
|
||||
|
||||
GlStateManager.disableBlend();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -46,7 +46,5 @@ public final class Constants {
|
||||
* won't spawn again if something is already standing in it.
|
||||
*/
|
||||
public static final int DECAY_SPREAD_INTERVAL = 8;
|
||||
/** The fraction by which potency is increased per level of the empowerment effect. */
|
||||
public static final float EMPOWERMENT_POTENCY_PER_LEVEL = 0.25f;
|
||||
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package electroblob.wizardry.entity.construct;
|
||||
|
||||
import electroblob.wizardry.entity.projectile.EntityConjuredArrow;
|
||||
import electroblob.wizardry.registry.Spells;
|
||||
import electroblob.wizardry.spell.Spell;
|
||||
import net.minecraft.entity.projectile.EntityTippedArrow;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
@@ -30,7 +28,7 @@ public class EntityArrowRain extends EntityScaledConstruct {
|
||||
double y = posY + world.rand.nextDouble() * (double)height;
|
||||
double z = posZ + (world.rand.nextDouble() - 0.5D) * (double)width;
|
||||
|
||||
EntityTippedArrow arrow = new EntityTippedArrow(world, x, y, z);
|
||||
EntityConjuredArrow arrow = new EntityConjuredArrow(world, x, y, z);
|
||||
|
||||
arrow.motionX = MathHelper.cos((float)Math.toRadians(this.rotationYaw + 90));
|
||||
arrow.motionY = -0.6;
|
||||
@@ -38,7 +36,6 @@ public class EntityArrowRain extends EntityScaledConstruct {
|
||||
|
||||
arrow.shootingEntity = this.getCaster();
|
||||
arrow.setDamage(7.0d * damageMultiplier);
|
||||
arrow.setPotionEffect(new ItemStack(Items.ARROW));
|
||||
|
||||
this.world.spawnEntity(arrow);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public class EntityFireRing extends EntityScaledConstruct {
|
||||
|
||||
super.onUpdate();
|
||||
|
||||
if(!this.world.isRemote){
|
||||
if(this.ticksExisted % 5 == 0 && !this.world.isRemote){
|
||||
|
||||
List<EntityLivingBase> targets = EntityUtils.getLivingWithinRadius(width/2, this.posX, this.posY, this.posZ, this.world);
|
||||
|
||||
|
||||
@@ -168,6 +168,10 @@ public class EntityForcefield extends EntityMagicConstruct implements ICustomHit
|
||||
((EntityPlayerMP)target).connection.sendPacket(new SPacketEntityVelocity(target));
|
||||
}
|
||||
|
||||
if (this.ticksExisted % 5 == 0) {
|
||||
this.lifetime = (int) (lifetime * 0.99);
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
Vec3d relativeImpactPos = targetRelativePos.normalize().scale(radius);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,192 @@
|
||||
package electroblob.wizardry.entity.living;
|
||||
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.util.ParticleBuilder;
|
||||
import net.minecraft.entity.EntityFlying;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.ai.EntityAIAttackMelee;
|
||||
import net.minecraft.entity.ai.EntityAIHurtByTarget;
|
||||
import net.minecraft.entity.ai.EntityAILookAtVillager;
|
||||
import net.minecraft.entity.ai.EntityAILookIdle;
|
||||
import net.minecraft.entity.ai.EntityAIMoveThroughVillage;
|
||||
import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction;
|
||||
import net.minecraft.entity.ai.EntityAIMoveTowardsTarget;
|
||||
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
|
||||
import net.minecraft.entity.ai.EntityAIWanderAvoidWater;
|
||||
import net.minecraft.entity.ai.EntityAIWatchClosest;
|
||||
import net.minecraft.entity.monster.EntityIronGolem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.datasync.DataParameter;
|
||||
import net.minecraft.network.datasync.DataSerializers;
|
||||
import net.minecraft.network.datasync.EntityDataManager;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.EnumParticleTypes;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.world.DifficultyInstance;
|
||||
import net.minecraft.world.EnumDifficulty;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class EntitySpectralGolem extends EntityIronGolem implements ISummonedCreature {
|
||||
|
||||
private static final DataParameter<Boolean> SPAWN_PARTICLES = EntityDataManager.createKey(EntitySpectralGolem.class, DataSerializers.BOOLEAN);
|
||||
|
||||
// Field implementations
|
||||
private int lifetime = -1;
|
||||
private UUID casterUUID;
|
||||
|
||||
// Setter + getter implementations
|
||||
@Override public int getLifetime(){ return lifetime; }
|
||||
@Override public void setLifetime(int lifetime){ this.lifetime = lifetime; }
|
||||
@Override public UUID getOwnerId(){ return casterUUID; }
|
||||
@Override public void setOwnerId(UUID uuid){ this.casterUUID = uuid; }
|
||||
|
||||
/** Creates a new golem minion in the given world. */
|
||||
public EntitySpectralGolem(World world){
|
||||
super(world);
|
||||
this.experienceValue = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void entityInit(){
|
||||
super.entityInit();
|
||||
this.dataManager.register(SPAWN_PARTICLES, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initEntityAI() {
|
||||
this.tasks.addTask(1, new EntityAIAttackMelee(this, 1.0D, true));
|
||||
this.tasks.addTask(2, new EntityAIMoveTowardsTarget(this, 0.9D, 32.0F));
|
||||
this.tasks.addTask(3, new EntityAIMoveThroughVillage(this, 0.6D, true));
|
||||
this.tasks.addTask(4, new EntityAIMoveTowardsRestriction(this, 1.0D));
|
||||
this.tasks.addTask(5, new EntityAILookAtVillager(this));
|
||||
this.tasks.addTask(6, new EntityAIWanderAvoidWater(this, 0.6D));
|
||||
this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
|
||||
this.tasks.addTask(8, new EntityAILookIdle(this));
|
||||
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));
|
||||
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget<>(this, EntityLivingBase.class,
|
||||
0, false, true, this.getTargetSelector()));
|
||||
}
|
||||
|
||||
@Override protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty){} // They don't have equipment!
|
||||
|
||||
// Implementations
|
||||
|
||||
@Override
|
||||
public void setRevengeTarget(EntityLivingBase entity){
|
||||
if(this.shouldRevengeTarget(entity)) super.setRevengeTarget(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate(){
|
||||
super.onUpdate();
|
||||
this.updateDelegate();
|
||||
|
||||
// Adds a dust particle effect
|
||||
if(this.world.isRemote){
|
||||
double x = this.posX - this.width / 2 + this.rand.nextFloat() * width;
|
||||
double y = this.posY + this.height * this.rand.nextFloat() + 0.2f;
|
||||
double z = this.posZ - this.width / 2 + this.rand.nextFloat() * width;
|
||||
ParticleBuilder.create(ParticleBuilder.Type.DUST).pos(x, y, z).clr(0.7f, 0.9f, 1).shaded(true).spawn(world);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSpawn(){
|
||||
if(this.dataManager.get(SPAWN_PARTICLES)) this.spawnParticleEffect();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDespawn(){
|
||||
this.spawnParticleEffect();
|
||||
}
|
||||
|
||||
private void spawnParticleEffect(){
|
||||
if(this.world.isRemote){
|
||||
for(int i = 0; i < 15; i++){
|
||||
this.world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX + this.rand.nextFloat() - 0.5f,
|
||||
this.posY + this.rand.nextFloat() * 2, this.posZ + this.rand.nextFloat() - 0.5f, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasParticleEffect(){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAnimation(){
|
||||
return this.dataManager.get(SPAWN_PARTICLES) || this.ticksExisted > 20;
|
||||
}
|
||||
|
||||
public void hideParticles(){
|
||||
this.dataManager.set(SPAWN_PARTICLES, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean processInteract(EntityPlayer player, EnumHand hand){
|
||||
// In this case, the delegate method determines whether super is called.
|
||||
// Rather handily, we can make use of Java's short-circuiting method of evaluating OR statements.
|
||||
return this.interactDelegate(player, hand) || super.processInteract(player, hand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeEntityToNBT(NBTTagCompound nbttagcompound){
|
||||
super.writeEntityToNBT(nbttagcompound);
|
||||
this.writeNBTDelegate(nbttagcompound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readEntityFromNBT(NBTTagCompound nbttagcompound){
|
||||
super.readEntityFromNBT(nbttagcompound);
|
||||
this.readNBTDelegate(nbttagcompound);
|
||||
}
|
||||
|
||||
// Recommended overrides
|
||||
|
||||
@Override protected int getExperiencePoints(EntityPlayer player){ return 0; }
|
||||
@Override protected boolean canDropLoot(){ return false; }
|
||||
@Override protected Item getDropItem(){ return null; }
|
||||
@Override protected ResourceLocation getLootTable(){ return null; }
|
||||
@Override public boolean canPickUpLoot(){ return false; }
|
||||
|
||||
// This vanilla method has nothing to do with the custom despawn() method.
|
||||
@Override protected boolean canDespawn(){
|
||||
return getCaster() == null && getOwnerId() == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getCanSpawnHere(){
|
||||
return this.world.getDifficulty() != EnumDifficulty.PEACEFUL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canAttackClass(Class<? extends EntityLivingBase> entityType){
|
||||
// Returns true unless the given entity type is a flying entity.
|
||||
return !EntityFlying.class.isAssignableFrom(entityType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITextComponent getDisplayName(){
|
||||
if(getCaster() != null){
|
||||
return new TextComponentTranslation(NAMEPLATE_TRANSLATION_KEY, getCaster().getName(),
|
||||
new TextComponentTranslation("entity." + this.getEntityString() + ".name"));
|
||||
}else{
|
||||
return super.getDisplayName();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCustomName(){
|
||||
// If this returns true, the renderer will show the nameplate when looking directly at the entity
|
||||
return Wizardry.settings.summonedCreatureNames && getCaster() != null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -47,6 +47,7 @@ import net.minecraftforge.common.util.FakePlayer;
|
||||
import net.minecraftforge.event.world.BlockEvent;
|
||||
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.IEntityAdditionalSpawnData;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
@@ -71,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 */
|
||||
@@ -257,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();
|
||||
}
|
||||
|
||||
@@ -269,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;
|
||||
@@ -637,10 +638,9 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
||||
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0 && !specialismSpells.isEmpty()){
|
||||
// This means it is more likely for spell books sold to be of the same element as the wizard if the
|
||||
// wizard has an element.
|
||||
return new ItemStack(WizardryItems.spell_book, 1,
|
||||
specialismSpells.get(rand.nextInt(specialismSpells.size())).metadata());
|
||||
return getBookStackForSpell(specialismSpells.get(rand.nextInt(specialismSpells.size())));
|
||||
}else{
|
||||
return new ItemStack(WizardryItems.spell_book, 1, spells.get(rand.nextInt(spells.size())).metadata());
|
||||
return getBookStackForSpell(spells.get(rand.nextInt(spells.size())));
|
||||
}
|
||||
}else{
|
||||
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
|
||||
@@ -659,10 +659,9 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
||||
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0 && !specialismSpells.isEmpty()){
|
||||
// This means it is more likely for spell books sold to be of the same element as the wizard if the
|
||||
// wizard has an element.
|
||||
return new ItemStack(WizardryItems.spell_book, 1,
|
||||
specialismSpells.get(rand.nextInt(specialismSpells.size())).metadata());
|
||||
return getBookStackForSpell(specialismSpells.get(rand.nextInt(specialismSpells.size())));
|
||||
}else{
|
||||
return new ItemStack(WizardryItems.spell_book, 1, spells.get(rand.nextInt(spells.size())).metadata());
|
||||
return getBookStackForSpell(spells.get(rand.nextInt(spells.size())));
|
||||
}
|
||||
}else if(randomiser < 6){
|
||||
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
|
||||
@@ -674,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){
|
||||
@@ -696,10 +695,9 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
||||
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0 && !specialismSpells.isEmpty()){
|
||||
// This means it is more likely for spell books sold to be of the same element as the wizard if the
|
||||
// wizard has an element.
|
||||
return new ItemStack(WizardryItems.spell_book, 1,
|
||||
specialismSpells.get(rand.nextInt(specialismSpells.size())).metadata());
|
||||
return getBookStackForSpell(specialismSpells.get(rand.nextInt(specialismSpells.size())));
|
||||
}else{
|
||||
return new ItemStack(WizardryItems.spell_book, 1, spells.get(rand.nextInt(spells.size())).metadata());
|
||||
return getBookStackForSpell(spells.get(rand.nextInt(spells.size())));
|
||||
}
|
||||
}else if(randomiser < 6){
|
||||
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
|
||||
@@ -711,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());
|
||||
@@ -724,8 +722,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
||||
|
||||
if(randomiser < 5 && this.getElement() != Element.MAGIC && !specialismSpells.isEmpty()){
|
||||
// Master spells can only be sold by a specialist in that element.
|
||||
return new ItemStack(WizardryItems.spell_book, 1,
|
||||
specialismSpells.get(rand.nextInt(specialismSpells.size())).metadata());
|
||||
return getBookStackForSpell(specialismSpells.get(rand.nextInt(specialismSpells.size())));
|
||||
|
||||
}else if(randomiser < 6){
|
||||
if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){
|
||||
@@ -735,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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -750,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);
|
||||
}
|
||||
@@ -801,7 +799,6 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
||||
Tier maxTier = Tier.NOVICE;
|
||||
|
||||
List<Spell> npcSpells = Spell.getSpells(s -> s.canBeCastBy(wizard, false));
|
||||
npcSpells.removeIf(s -> !s.applicableForItem(WizardryItems.spell_book));
|
||||
|
||||
for(int i = 0; i < n; i++){
|
||||
|
||||
@@ -849,6 +846,22 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp
|
||||
return maxTier;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to handle addon spell books.
|
||||
* @param spell the spell to look up.
|
||||
* @return Checks all items of the spell's namespace (modid) if they are applicable for the spell and returns the first match, or falls back to WizardryItems.spell_book if no match was found.
|
||||
*/
|
||||
public static ItemStack getBookStackForSpell(Spell spell) {
|
||||
String modid = spell.getRegistryName().getNamespace();
|
||||
if (modid.equals(Wizardry.MODID)) {
|
||||
return new ItemStack(WizardryItems.spell_book, 1, spell.metadata());
|
||||
}
|
||||
Optional<Item> firstMatch = ForgeRegistries.ITEMS.getValuesCollection().stream().filter(v -> v instanceof ItemSpellBook && spell.applicableForItem(v)
|
||||
&& v.getRegistryName().getNamespace().equals(modid)).findFirst();
|
||||
|
||||
return firstMatch.map(item -> new ItemStack(item, 1, spell.metadata())).orElseGet(() -> new ItemStack(WizardryItems.spell_book, 1, spell.metadata()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeSpawnData(ByteBuf data){
|
||||
data.writeInt(textureIndex);
|
||||
@@ -872,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){
|
||||
@@ -904,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){
|
||||
@@ -926,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){
|
||||
@@ -938,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()){
|
||||
@@ -948,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){
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package electroblob.wizardry.entity.projectile;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.projectile.EntityArrow;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityConjuredArrow extends EntityArrow {
|
||||
|
||||
public EntityConjuredArrow(World worldIn) {
|
||||
super(worldIn);
|
||||
}
|
||||
|
||||
public EntityConjuredArrow(World worldIn, double x, double y, double z) {
|
||||
super(worldIn, x, y, z);
|
||||
}
|
||||
|
||||
public EntityConjuredArrow(World worldIn, EntityLivingBase shooter) {
|
||||
super(worldIn, shooter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
super.onUpdate();
|
||||
if (this.timeInGround > 400) {
|
||||
this.setDead();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemStack getArrowStack() {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -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));
|
||||
|
||||
|
||||
+23
-9
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
@@ -769,6 +769,7 @@ public class ItemArtefact extends Item {
|
||||
&& Streams.stream(player.getHeldEquipment()).anyMatch(s -> s.getItem() instanceof ISpellCastingItem
|
||||
&& ((ISpellCastingItem)s.getItem()).getCurrentSpell(s).getElement() == Element.NECROMANCY))){
|
||||
|
||||
event.getEntityLiving().addPotionEffect(new PotionEffect(WizardryPotions.curse_of_soulbinding, 400));
|
||||
CurseOfSoulbinding.getSoulboundCreatures(WizardData.get(player)).add(event.getEntity().getUniqueID());
|
||||
}
|
||||
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
@@ -244,7 +244,7 @@ public class ItemScroll extends Item implements ISpellCastingItem, IWorkbenchIte
|
||||
MinecraftForge.EVENT_BUS.post(new SpellCastEvent.Finish(Source.SCROLL, spell, user, modifiers, castingTick));
|
||||
spell.finishCasting(user.world, user, Double.NaN, Double.NaN, Double.NaN, null, castingTick, modifiers);
|
||||
|
||||
if(user instanceof EntityPlayer){
|
||||
if(user instanceof EntityPlayer && !((EntityPlayer)user).isCreative()){
|
||||
((EntityPlayer)user).getCooldownTracker().setCooldown(this, spell.getCooldown());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -227,8 +227,8 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
|
||||
|
||||
@Override
|
||||
public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isHeld){
|
||||
|
||||
WandHelper.decrementCooldowns(stack);
|
||||
|
||||
if(isHeld) WandHelper.decrementCooldowns(stack);
|
||||
|
||||
// Decrements wand damage (increases mana) every 1.5 seconds if it has a condenser upgrade
|
||||
if(!world.isRemote && !this.isManaFull(stack) && world.getTotalWorldTime() % Constants.CONDENSER_TICK_INTERVAL == 0){
|
||||
@@ -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.
|
||||
@@ -849,7 +849,12 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem,
|
||||
|
||||
int chargeDepleted = this.getManaCapacity(centre.getStack()) - this.getMana(centre.getStack());
|
||||
|
||||
int manaPerItem = Constants.MANA_PER_CRYSTAL;
|
||||
// Not too pretty but allows addons implementing the IManaStoringItem interface to provide their mana amount for custom crystals,
|
||||
// previously this was defaulted to the regular crystal's amount, allowing players to exploit it if a crystal was worth less mana than that.
|
||||
int manaPerItem = crystals.getStack().getItem() instanceof IManaStoringItem ?
|
||||
((IManaStoringItem) crystals.getStack().getItem()).getMana(crystals.getStack()) :
|
||||
crystals.getStack().getItem() instanceof ItemCrystal ? Constants.MANA_PER_CRYSTAL : Constants.MANA_PER_SHARD;
|
||||
|
||||
if(crystals.getStack().getItem() == WizardryItems.crystal_shard) manaPerItem = Constants.MANA_PER_SHARD;
|
||||
if(crystals.getStack().getItem() == WizardryItems.grand_crystal) manaPerItem = Constants.GRAND_CRYSTAL_MANA;
|
||||
|
||||
|
||||
@@ -209,8 +209,8 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
||||
|
||||
@Override
|
||||
public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack){
|
||||
if(armorType == EntityEquipmentSlot.HEAD && isWearingFullSet(player, element, ArmourClass.BATTLEMAGE)
|
||||
&& player.ticksExisted % 20 == 0){
|
||||
if(armorType == EntityEquipmentSlot.HEAD && player.ticksExisted % 20 == 0
|
||||
&& isWearingFullSet(player, element, ArmourClass.BATTLEMAGE) && doAllArmourPiecesHaveMana(player)){
|
||||
player.addPotionEffect(new PotionEffect(WizardryPotions.ward, 219, 0, true, false));
|
||||
}
|
||||
}
|
||||
@@ -237,7 +237,7 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
||||
modifiers.set(WizardryItems.cooldown_upgrade, modifiers.get(WizardryItems.cooldown_upgrade) - armourClass.cooldownReduction, true);
|
||||
|
||||
// Full set bonuses
|
||||
if(this.armorType == EntityEquipmentSlot.HEAD && isWearingFullSet(caster, element, armourClass)){
|
||||
if(this.armorType == EntityEquipmentSlot.HEAD && isWearingFullSet(caster, element, armourClass) && doAllArmourPiecesHaveMana(caster)){
|
||||
if(armourClass == ArmourClass.SAGE && spell.getElement() != this.element){
|
||||
modifiers.set(SpellModifiers.COST, 1 - SAGE_OTHER_COST_REDUCTION, false);
|
||||
}
|
||||
@@ -334,7 +334,12 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
||||
|
||||
int chargeDepleted = this.getManaCapacity(centre.getStack()) - this.getMana(centre.getStack());
|
||||
|
||||
int manaPerItem = Constants.MANA_PER_CRYSTAL;
|
||||
// Not too pretty but allows addons implementing the IManaStoringItem interface to provide their mana amount for custom crystals,
|
||||
// previously this was defaulted to the regular crystal's amount, allowing players to exploit it if a crystal was worth less mana than that.
|
||||
int manaPerItem = crystals.getStack().getItem() instanceof IManaStoringItem ?
|
||||
((IManaStoringItem) crystals.getStack().getItem()).getMana(crystals.getStack()) :
|
||||
crystals.getStack().getItem() instanceof ItemCrystal ? Constants.MANA_PER_CRYSTAL : Constants.MANA_PER_SHARD;
|
||||
|
||||
if(crystals.getStack().getItem() == WizardryItems.crystal_shard) manaPerItem = Constants.MANA_PER_SHARD;
|
||||
if(crystals.getStack().getItem() == WizardryItems.grand_crystal) manaPerItem = Constants.GRAND_CRYSTAL_MANA;
|
||||
|
||||
@@ -363,7 +368,7 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
||||
|
||||
IAttributeInstance movementSpeed = event.getEntityLiving().getAttributeMap().getAttributeInstance(SharedMonsterAttributes.MOVEMENT_SPEED);
|
||||
|
||||
if(isWearingFullSet(event.getEntityLiving(), null, ArmourClass.WARLOCK)){
|
||||
if(isWearingFullSet(event.getEntityLiving(), null, ArmourClass.WARLOCK) && doAllArmourPiecesHaveMana(event.getEntityLiving())){
|
||||
// Only apply the modifier once (can't just check this is the helmet since it might not be the last piece equipped)
|
||||
if(movementSpeed.getModifier(WARLOCK_SPEED_BOOST_UUID) == null){
|
||||
movementSpeed.applyModifier(new AttributeModifier(WARLOCK_SPEED_BOOST_UUID, "Warlock set bonus", WARLOCK_SPEED_BOOST, Operations.MULTIPLY_FLAT));
|
||||
@@ -433,7 +438,7 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
||||
* @param armourClass The class to check, or null to accept any class as long as they are all the same.
|
||||
* @return True if the entity is wearing a full set of the given element and class, false otherwise.
|
||||
*/
|
||||
private static boolean isWearingFullSet(EntityLivingBase entity, @Nullable Element element, @Nullable ArmourClass armourClass){
|
||||
public static boolean isWearingFullSet(EntityLivingBase entity, @Nullable Element element, @Nullable ArmourClass armourClass){
|
||||
ItemStack helmet = entity.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
|
||||
if(!(helmet.getItem() instanceof ItemWizardArmour)) return false;
|
||||
Element e = element == null ? ((ItemWizardArmour)helmet.getItem()).element : element;
|
||||
@@ -444,6 +449,16 @@ public class ItemWizardArmour extends ItemArmor implements IWorkbenchItem, IMana
|
||||
&& ((ItemWizardArmour)entity.getItemStackFromSlot(s).getItem()).armourClass == ac);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the given entity's armour pieces which implement {@link IManaStoringItem} has mana. Ignores pieces which doesn't have a mana storage.
|
||||
* @param entity The entity to query.
|
||||
* @return True if all armour pieces which implement {@link IManaStoringItem} has mana, false otherwise.
|
||||
*/
|
||||
public static boolean doAllArmourPiecesHaveMana(EntityLivingBase entity){
|
||||
return Arrays.stream(InventoryUtils.ARMOUR_SLOTS).noneMatch(s -> entity.getItemStackFromSlot(s).getItem() instanceof IManaStoringItem
|
||||
&& ((IManaStoringItem) entity.getItemStackFromSlot(s).getItem()).isManaEmpty(entity.getItemStackFromSlot(s)));
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onLivingSetAttackTargetEvent(LivingSetAttackTargetEvent event){
|
||||
// Undo the mob detection penalty for wearing armour when invisible
|
||||
|
||||
@@ -10,6 +10,7 @@ import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.EnumActionResult;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.text.Style;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
@@ -36,7 +37,11 @@ public class ItemWizardHandbook extends Item {
|
||||
@Override
|
||||
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand){
|
||||
ItemStack stack = player.getHeldItem(hand);
|
||||
player.openGui(Wizardry.instance, WizardryGuiHandler.WIZARD_HANDBOOK, world, 0, 0, 0);
|
||||
if (Wizardry.settings.loadHandbook) {
|
||||
player.openGui(Wizardry.instance, WizardryGuiHandler.WIZARD_HANDBOOK, world, 0, 0, 0);
|
||||
} else if (!world.isRemote){
|
||||
player.sendStatusMessage(new TextComponentTranslation("item." + Wizardry.MODID + ":wizard_handbook.disabled"), false);
|
||||
}
|
||||
return ActionResult.newResult(EnumActionResult.SUCCESS, stack);
|
||||
}
|
||||
|
||||
|
||||
@@ -59,10 +59,9 @@ public class PotionContainment extends PotionMagicEffect {
|
||||
|
||||
if(x != target.posX || y != target.posY || z != target.posZ)
|
||||
{
|
||||
target.addVelocity(0.15 * Math.signum(x - target.posX), 0.15 * Math.signum(y - target.posY), 0.15 * Math.signum(z - target.posZ));
|
||||
EntityUtils.undoGravity(target);
|
||||
if(target.world.isRemote){
|
||||
EntityUtils.undoGravity(target);
|
||||
target.addVelocity(0.15 * Math.signum(x - target.posX), 0.15 * Math.signum(y - target.posY), 0.15 * Math.signum(z - target.posZ));
|
||||
|
||||
target.world.playSound(target.posX, target.posY, target.posZ, WizardrySounds.ENTITY_FORCEFIELD_DEFLECT,
|
||||
WizardrySounds.SPELLS, 0.3f, 1f, false);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package electroblob.wizardry.potion;
|
||||
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.util.EntityUtils;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
|
||||
@Mod.EventBusSubscriber
|
||||
public class PotionDiamondflesh extends PotionMagicEffect {
|
||||
|
||||
public PotionDiamondflesh(boolean isBadEffect, int liquidColour) {
|
||||
super(isBadEffect, liquidColour, new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons/diamondflesh.png"));
|
||||
// This needs to be here because registerPotionAttributeModifier doesn't like it if the potion has no name yet.
|
||||
this.setPotionName("potion." + Wizardry.MODID + ":ironflesh");
|
||||
this.registerPotionAttributeModifier(SharedMonsterAttributes.MOVEMENT_SPEED,
|
||||
"158a8af2-6db0-4340-a01c-a7b60d10ddf4", -0.1f, EntityUtils.Operations.MULTIPLY_CUMULATIVE);
|
||||
this.registerPotionAttributeModifier(SharedMonsterAttributes.ARMOR_TOUGHNESS,
|
||||
"a68d4532-5847-426c-9b03-d541b113cec2", 3.0f, EntityUtils.Operations.ADD);
|
||||
this.registerPotionAttributeModifier(SharedMonsterAttributes.ARMOR,
|
||||
"46a095be-82dd-43fd-8b67-13f51591eb8e", 4.0f, EntityUtils.Operations.ADD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReady(int duration, int amplifier) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package electroblob.wizardry.potion;
|
||||
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.util.EntityUtils;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
|
||||
@Mod.EventBusSubscriber
|
||||
public class PotionIronflesh extends PotionMagicEffect {
|
||||
|
||||
public PotionIronflesh(boolean isBadEffect, int liquidColour) {
|
||||
super(isBadEffect, liquidColour, new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons/ironflesh.png"));
|
||||
// This needs to be here because registerPotionAttributeModifier doesn't like it if the potion has no name yet.
|
||||
this.setPotionName("potion." + Wizardry.MODID + ":ironflesh");
|
||||
this.registerPotionAttributeModifier(SharedMonsterAttributes.MOVEMENT_SPEED,
|
||||
"fe607d55-50e3-4f4f-a959-6571503f92f4", -0.1f, EntityUtils.Operations.MULTIPLY_CUMULATIVE);
|
||||
this.registerPotionAttributeModifier(SharedMonsterAttributes.KNOCKBACK_RESISTANCE,
|
||||
"6f78206e-8dd4-4d44-9792-d7a882111951", 0.3f, EntityUtils.Operations.ADD);
|
||||
this.registerPotionAttributeModifier(SharedMonsterAttributes.ARMOR,
|
||||
"e1adff1e-8510-4a09-96ed-ef677cad20c1", 4.0f, EntityUtils.Operations.ADD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReady(int duration, int amplifier) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package electroblob.wizardry.potion;
|
||||
|
||||
import electroblob.wizardry.Wizardry;
|
||||
import electroblob.wizardry.util.EntityUtils;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
|
||||
@Mod.EventBusSubscriber
|
||||
public class PotionOakflesh extends PotionMagicEffect {
|
||||
|
||||
public PotionOakflesh(boolean isBadEffect, int liquidColour) {
|
||||
super(isBadEffect, liquidColour, new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons/oakflesh.png"));
|
||||
// This needs to be here because registerPotionAttributeModifier doesn't like it if the potion has no name yet.
|
||||
this.setPotionName("potion." + Wizardry.MODID + ":ironflesh");
|
||||
this.registerPotionAttributeModifier(SharedMonsterAttributes.MOVEMENT_SPEED,
|
||||
"98b4ba66-7c50-4a4c-9f3f-40bcb37313b5", -0.1f, EntityUtils.Operations.MULTIPLY_CUMULATIVE);
|
||||
this.registerPotionAttributeModifier(SharedMonsterAttributes.MAX_HEALTH,
|
||||
"ed9d0423-60f4-4998-bd8d-dc7c33bd45b8", 0.2f, EntityUtils.Operations.MULTIPLY_FLAT);
|
||||
this.registerPotionAttributeModifier(SharedMonsterAttributes.ARMOR,
|
||||
"0b607c3f-fb14-43d7-96b5-1c1b6f6da242", 3.0f, EntityUtils.Operations.ADD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReady(int duration, int amplifier) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -359,7 +359,7 @@ public final class Spells {
|
||||
registry.register(new GreaterHeal());
|
||||
registry.register(new SpellConstruct<>("healing_aura", SpellActions.POINT_DOWN, EntityHealAura::new, false).addProperties(Spell.EFFECT_RADIUS, Spell.DAMAGE, Spell.HEALTH));
|
||||
registry.register(new Forcefield());
|
||||
registry.register(new SpellBuff("ironflesh", 0.4f, 0.5f, 0.6f, () -> MobEffects.RESISTANCE).soundValues(0.7f, 1.2f, 0.4f));
|
||||
registry.register(new SpellBuff("ironflesh", 0.4f, 0.5f, 0.6f, () -> WizardryPotions.ironflesh).soundValues(0.7f, 1.2f, 0.4f));
|
||||
registry.register(new Transience());
|
||||
|
||||
registry.register(new Meteor());
|
||||
@@ -378,9 +378,10 @@ public final class Spells {
|
||||
registry.register(new SpellMinion<>("silverfish_swarm", EntitySilverfishMinion::new).soundValues(1, 1.1f, 0.1f));
|
||||
registry.register(new SpellConstructRanged<>("black_hole", EntityBlackHole::new, false).addProperties(Spell.EFFECT_RADIUS).soundValues(2, 0.7f, 0));
|
||||
registry.register(new Shockwave());
|
||||
registry.register(new SummonIronGolem());
|
||||
registry.register(new SpellMinion<>("summon_iron_golem", EntitySpectralGolem::new).soundValues(1, 1.1f, 0.1f));
|
||||
|
||||
registry.register(new ArrowRain());
|
||||
registry.register(new SpellBuff("diamondflesh", 0.1f, 0.7f, 1, () -> MobEffects.RESISTANCE).soundValues(0.7f, 1.2f, 0.4f));
|
||||
registry.register(new SpellBuff("diamondflesh", 0.1f, 0.7f, 1, () -> WizardryPotions.diamondflesh).soundValues(0.7f, 1.2f, 0.4f));
|
||||
registry.register(new SpellBuff("font_of_vitality", 1, 0.8f, 0.3f, () -> MobEffects.ABSORPTION, () -> MobEffects.REGENERATION).soundValues(0.7f, 1.2f, 0.4f));
|
||||
|
||||
// Wizardry 1.1 spells
|
||||
@@ -398,7 +399,7 @@ public final class Spells {
|
||||
registry.register(new PocketWorkbench());
|
||||
registry.register(new ImbueWeapon());
|
||||
registry.register(new InvigoratingPresence());
|
||||
registry.register(new SpellBuff("oakflesh", 0.6f, 0.5f, 0.4f, () -> MobEffects.RESISTANCE).soundValues(0.7f, 1.2f, 0.4f));
|
||||
registry.register(new SpellBuff("oakflesh", 0.6f, 0.5f, 0.4f, () -> WizardryPotions.oakflesh).soundValues(0.7f, 1.2f, 0.4f));
|
||||
|
||||
registry.register(new SpellProjectile<>("greater_fireball", EntityLargeMagicFireball::new).addProperties(Spell.DAMAGE, EntityLargeMagicFireball.EXPLOSION_POWER));//new GreaterFireball());
|
||||
registry.register(new FlamingWeapon());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -88,6 +88,7 @@ public class WizardryEntities {
|
||||
registry.register(createEntry(EntitySpiritHorse.class, "spirit_horse", TrackingType.LIVING).egg(0x5464c6, 0xbcc2e8).build());
|
||||
registry.register(createEntry(EntityPhoenix.class, "phoenix", TrackingType.LIVING).egg(0xff4900, 0xfde535).build());
|
||||
registry.register(createEntry(EntityIceGiant.class, "ice_giant", TrackingType.LIVING).egg(0x5bacd9, 0xeffaff).build());
|
||||
registry.register(createEntry(EntitySpectralGolem.class, "spectral_golem", TrackingType.LIVING).egg(0x5bacd9, 0xeffaff).build());
|
||||
|
||||
registry.register(createEntry(EntityMagicSlime.class, "magic_slime", TrackingType.LIVING).build());
|
||||
registry.register(createEntry(EntityDecoy.class, "decoy", TrackingType.LIVING).build());
|
||||
@@ -113,6 +114,7 @@ public class WizardryEntities {
|
||||
registry.register(createEntry(EntityDart.class, "dart", TrackingType.PROJECTILE).build());
|
||||
registry.register(createEntry(EntityIceLance.class, "ice_lance", TrackingType.PROJECTILE).build());
|
||||
registry.register(createEntry(EntityFlamecatcherArrow.class, "flamecatcher_arrow", TrackingType.PROJECTILE).build());
|
||||
registry.register(createEntry(EntityConjuredArrow.class, "conjured_arrow", TrackingType.PROJECTILE).build());
|
||||
|
||||
// Directionless projectiles
|
||||
registry.register(createEntry(EntityFirebomb.class, "firebomb", TrackingType.PROJECTILE).build());
|
||||
|
||||
@@ -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()))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,9 @@ public final class WizardryPotions {
|
||||
public static final Potion frost_step = placeholder();
|
||||
public static final Potion mark_of_sacrifice = placeholder();
|
||||
public static final Potion mirage = placeholder();
|
||||
public static final Potion oakflesh = placeholder();
|
||||
public static final Potion ironflesh = placeholder();
|
||||
public static final Potion diamondflesh = placeholder();
|
||||
|
||||
/**
|
||||
* Sets both the registry and unlocalised names of the given potion, then registers it with the given registry. Use
|
||||
@@ -201,6 +204,10 @@ public final class WizardryPotions {
|
||||
public void spawnCustomParticle(World world, double x, double y, double z){} // We only want the syncing
|
||||
}.setBeneficial());
|
||||
|
||||
registerPotion(registry, "oakflesh", new PotionOakflesh(false, 0).setBeneficial());
|
||||
registerPotion(registry, "ironflesh", new PotionIronflesh(false, 0).setBeneficial());
|
||||
registerPotion(registry, "diamondflesh", new PotionDiamondflesh(false, 0).setBeneficial());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import electroblob.wizardry.constants.Constants;
|
||||
import electroblob.wizardry.entity.living.ISpellCaster;
|
||||
import electroblob.wizardry.event.SpellCastEvent;
|
||||
import electroblob.wizardry.item.SpellActions;
|
||||
import electroblob.wizardry.registry.Spells;
|
||||
import electroblob.wizardry.registry.WizardryItems;
|
||||
import electroblob.wizardry.registry.WizardryPotions;
|
||||
import electroblob.wizardry.util.ParticleBuilder;
|
||||
@@ -24,11 +25,14 @@ import javax.annotation.Nullable;
|
||||
@Mod.EventBusSubscriber
|
||||
public class EmpoweringPresence extends SpellAreaEffect {
|
||||
|
||||
/** The fraction by which potency is increased per level of the empowerment effect. */
|
||||
public static final String POTENCY_PER_LEVEL = "potency_per_level";
|
||||
|
||||
public EmpoweringPresence(){
|
||||
super("empowering_presence", SpellActions.POINT_UP, false);
|
||||
this.alwaysSucceed(true);
|
||||
this.targetAllies(true);
|
||||
addProperties(EFFECT_DURATION, EFFECT_STRENGTH);
|
||||
addProperties(EFFECT_DURATION, EFFECT_STRENGTH, POTENCY_PER_LEVEL);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -62,7 +66,7 @@ public class EmpoweringPresence extends SpellAreaEffect {
|
||||
if(event.getCaster() != null && event.getCaster().isPotionActive(WizardryPotions.empowerment)
|
||||
&& !(event.getSpell() instanceof EmpoweringPresence)){ // Prevent exponential empowerment stacking!
|
||||
|
||||
float potency = 1 + Constants.EMPOWERMENT_POTENCY_PER_LEVEL
|
||||
float potency = 1 + Spells.empowering_presence.getProperty(POTENCY_PER_LEVEL).floatValue()
|
||||
* (event.getCaster().getActivePotionEffect(WizardryPotions.empowerment).getAmplifier() + 1);
|
||||
|
||||
event.getModifiers().set(SpellModifiers.POTENCY,
|
||||
|
||||
@@ -30,9 +30,14 @@ public class Paralysis extends SpellRay {
|
||||
* will end. */
|
||||
private static final String CRITICAL_HEALTH = "critical_health";
|
||||
|
||||
/**
|
||||
* Multiplier for affecting players
|
||||
*/
|
||||
private static final String PLAYER_EFFECT_DURATION_MULTIPLIER = "player_effect_duration_multiplier";
|
||||
|
||||
public Paralysis(){
|
||||
super("paralysis", SpellActions.POINT, false);
|
||||
addProperties(DAMAGE, EFFECT_DURATION, CRITICAL_HEALTH);
|
||||
addProperties(DAMAGE, EFFECT_DURATION, CRITICAL_HEALTH, PLAYER_EFFECT_DURATION_MULTIPLIER);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,9 +62,10 @@ public class Paralysis extends SpellRay {
|
||||
target.attackEntityFrom(MagicDamage.causeDirectMagicDamage(caster, DamageType.SHOCK),
|
||||
getProperty(DAMAGE).floatValue() * modifiers.get(SpellModifiers.POTENCY));
|
||||
}
|
||||
|
||||
|
||||
float durationMultiplier = target instanceof EntityPlayer ? modifiers.get(PLAYER_EFFECT_DURATION_MULTIPLIER) : 1.0f;
|
||||
((EntityLivingBase)target).addPotionEffect(new PotionEffect(WizardryPotions.paralysis,
|
||||
(int)(getProperty(EFFECT_DURATION).floatValue() * modifiers.get(WizardryItems.duration_upgrade)), 0));
|
||||
(int)(getProperty(EFFECT_DURATION).floatValue() * durationMultiplier * modifiers.get(WizardryItems.duration_upgrade)), 0));
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
package electroblob.wizardry.spell;
|
||||
|
||||
import electroblob.wizardry.item.SpellActions;
|
||||
import electroblob.wizardry.util.BlockUtils;
|
||||
import electroblob.wizardry.util.ParticleBuilder;
|
||||
import electroblob.wizardry.util.ParticleBuilder.Type;
|
||||
import electroblob.wizardry.util.SpellModifiers;
|
||||
import net.minecraft.entity.monster.EntityIronGolem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class SummonIronGolem extends Spell {
|
||||
|
||||
public SummonIronGolem(){
|
||||
super("summon_iron_golem", SpellActions.SUMMON, false);
|
||||
addProperties(SpellMinion.SUMMON_RADIUS);
|
||||
soundValues(1, 1.1f, 0.2f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cast(World world, EntityPlayer caster, EnumHand hand, int ticksInUse, SpellModifiers modifiers){
|
||||
|
||||
BlockPos pos = BlockUtils.findNearbyFloorSpace(caster, getProperty(SpellMinion.SUMMON_RADIUS).intValue(),
|
||||
getProperty(SpellMinion.SUMMON_RADIUS).intValue());
|
||||
|
||||
if(pos == null) return false;
|
||||
|
||||
if(!world.isRemote){
|
||||
|
||||
EntityIronGolem golem = new EntityIronGolem(world);
|
||||
golem.setPosition(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5);
|
||||
golem.setPlayerCreated(true);
|
||||
world.spawnEntity(golem);
|
||||
|
||||
}else{
|
||||
|
||||
for(int i=0; i<10; i++){
|
||||
double x = pos.getX() + world.rand.nextDouble() * 2 - 1;
|
||||
double y = pos.getY() + 0.5 + world.rand.nextDouble();
|
||||
double z = pos.getZ() + world.rand.nextDouble() * 2 - 1;
|
||||
ParticleBuilder.create(Type.SPARKLE).pos(x, y, z).clr(0.6f, 0.6f, 1).spawn(world);
|
||||
}
|
||||
}
|
||||
|
||||
this.playSound(world, caster, ticksInUse, -1, modifiers);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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,12 +89,15 @@ 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
|
||||
item.ebwizardry\:wizard_handbook.author=by %1$s
|
||||
item.ebwizardry\:wizard_handbook.desc=Your not-so-pocket-sized guide to the arcane arts! A must-have for any aspiring wizard who seeks to learn the secrets of magic.\n\nRight-click while holding this book to read it.
|
||||
item.ebwizardry\:wizard_handbook.disabled=This item was disabled in the config!
|
||||
|
||||
item.ebwizardry\:wand.generic=wand
|
||||
|
||||
@@ -215,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
|
||||
@@ -438,7 +460,7 @@ item.ebwizardry\:ring_hammer.desc=Lightning hammers can be picked up and thrown
|
||||
item.ebwizardry\:ring_stormcloud.name=Lokenzen's Ring
|
||||
item.ebwizardry\:ring_stormcloud.desc=Stormcloud moves towards targets and lasts longer with every strike
|
||||
item.ebwizardry\:ring_soulbinding.name=Soulwalker's Ring
|
||||
item.ebwizardry\:ring_soulbinding.desc=Creatures damaged by necromancy spells become soulbound to you
|
||||
item.ebwizardry\:ring_soulbinding.desc=Creatures damaged by necromancy spells become soulbound to you for 20 seconds
|
||||
item.ebwizardry\:ring_leeching.name=Ring of Leeching
|
||||
item.ebwizardry\:ring_leeching.desc=All necromancy attacks have a 30%% chance to trigger a life drain effect
|
||||
item.ebwizardry\:ring_necromancy_melee.name=Ring of Necrotic Touch
|
||||
@@ -732,6 +754,7 @@ entity.ebwizardry\:evil_wizard.name=Wizard
|
||||
entity.ebwizardry\:decoy.name=Decoy
|
||||
entity.ebwizardry\:vex_minion.name=Vex
|
||||
entity.ebwizardry\:remnant.name=Remnant
|
||||
entity.ebwizardry\:spectral_golem.name=Spectral Golem
|
||||
|
||||
entity.ebwizardry\:magic_missile.name=Magic
|
||||
entity.ebwizardry\:arc.name=Magic
|
||||
@@ -758,6 +781,7 @@ entity.ebwizardry\:smoke_bomb.name=Magic
|
||||
entity.ebwizardry\:ice_spike.name=Magic
|
||||
entity.ebwizardry\:combustion_rune.name=Magic
|
||||
entity.ebwizardry\:flamecatcher_arrow.name=Magic
|
||||
entity.ebwizardry\:conjured_arrow.name=Magic
|
||||
|
||||
entity.ebwizardry\:black_hole.name=Black Hole
|
||||
entity.ebwizardry\:shield.name=Shield
|
||||
@@ -1075,7 +1099,7 @@ spell.ebwizardry\:stormcloud=Stormcloud
|
||||
spell.ebwizardry\:summon_blaze=Summon Blaze
|
||||
spell.ebwizardry\:summon_ice_giant=Summon Ice Giant
|
||||
spell.ebwizardry\:summon_ice_wraith=Summon Ice Wraith
|
||||
spell.ebwizardry\:summon_iron_golem=Summon Iron Golem
|
||||
spell.ebwizardry\:summon_iron_golem=Summon Spectral Golem
|
||||
spell.ebwizardry\:summon_lightning_wraith=Summon Lightning Wraith
|
||||
spell.ebwizardry\:summon_phoenix=Summon Phoenix
|
||||
spell.ebwizardry\:summon_shadow_wraith=Summon Shadow Wraith
|
||||
@@ -1203,7 +1227,7 @@ spell.ebwizardry\:intimidate.desc=Emits an intimidating growl which causes nearb
|
||||
spell.ebwizardry\:invigorating_presence.desc=Grants the caster and all nearby allies increased strength for 45 seconds.
|
||||
spell.ebwizardry\:invisibility.desc=Makes the caster invisible for 30 seconds.
|
||||
spell.ebwizardry\:invoke_weather.desc=Changes the weather in the world.
|
||||
spell.ebwizardry\:ironflesh.desc=Greatly improves the caster's damage resistance for 30 seconds.
|
||||
spell.ebwizardry\:ironflesh.desc=Greatly improves the caster's armor and knockback resistance for 30 seconds.
|
||||
spell.ebwizardry\:leap.desc=Causes the caster to jump upwards several blocks and slightly forward.
|
||||
spell.ebwizardry\:levitation.desc=Raises the caster upwards while the use item button is held. Will also negate fall damage if used before hitting the ground.
|
||||
spell.ebwizardry\:life_drain.desc=Creates a stream of withering energy in the direction you are pointing which drains the life of the target and uses it to gradually regenerate your health.
|
||||
@@ -1226,7 +1250,7 @@ spell.ebwizardry\:mine.desc=Breaks the block the caster is looking at. Potency w
|
||||
spell.ebwizardry\:mirage.desc=Creates an illusion where the caster appears to be a few blocks away from their actual position, blinking around every few seconds. The illusion lasts for 20 seconds.
|
||||
spell.ebwizardry\:muffle.desc=Silences any sounds made by the caster for 30 seconds. When muffled, mobs can only detect you when looking towards you.
|
||||
spell.ebwizardry\:none.desc=To get a spell book with the /give command, use id\: /give [player] ebwizardry\:spell_book 1 [spell id] (if you found this book in a chest, some other mod has messed things up).
|
||||
spell.ebwizardry\:oakflesh.desc=Improves the caster's damage resistance for 30 seconds.
|
||||
spell.ebwizardry\:oakflesh.desc=Slightly improves the caster's vitality and damage resistance for 30 seconds.
|
||||
spell.ebwizardry\:paralysis.desc=Delivers a powerful lightning bolt that paralyses targets for 5 seconds. Paralysed creatures cannot move and will still take damage - but too much will snap the creature out of paralysis.
|
||||
spell.ebwizardry\:permafrost.desc=Spreads a layer of slippery ice on the ground where you are pointing, the extreme cold of which causes creatures to slowly take damage.
|
||||
spell.ebwizardry\:petrify.desc=Turns the target to stone until broken out, with a chance for it to break out when it is dark. The target cannot move or do anything while petrified but is also impervious to all damage.
|
||||
@@ -1400,6 +1424,9 @@ potion.ebwizardry\:containment=Containment
|
||||
potion.ebwizardry\:frost_step=Frost Step
|
||||
potion.ebwizardry\:mark_of_sacrifice=Mark of Sacrifice
|
||||
potion.ebwizardry\:mirage=Mirage
|
||||
potion.ebwizardry\:oakflesh=Oakflesh
|
||||
potion.ebwizardry\:ironflesh=Ironflesh
|
||||
potion.ebwizardry\:diamondflesh=Diamondflesh
|
||||
|
||||
enchantment.ebwizardry\:magic_sword=Imbuement
|
||||
enchantment.ebwizardry\:magic_bow=Imbuement
|
||||
|
||||
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=La position %s, %s, %s a été ma
|
||||
tile.ebwizardry\:transportation_stone.forget=La position %s, %s, %s a été effacée dans la dimension %s
|
||||
tile.ebwizardry\:transportation_stone.invalid=Vous devez d'abord créer un cercle avec 8 pierres de téléportation!
|
||||
tile.ebwizardry\:spectral_block.name=Bloc spectral
|
||||
tile.ebwizardry\:runestone.name=Pierre runique
|
||||
tile.ebwizardry\:runestone_pedestal.name=Piédestal runique
|
||||
tile.ebwizardry\:fire_runestone.name=Pierre runique
|
||||
tile.ebwizardry\:ice_runestone.name=Pierre runique
|
||||
tile.ebwizardry\:lightning_runestone.name=Pierre runique
|
||||
tile.ebwizardry\:necromancy_runestone.name=Pierre runique
|
||||
tile.ebwizardry\:earth_runestone.name=Pierre runique
|
||||
tile.ebwizardry\:healing_runestone.name=Pierre runique
|
||||
tile.ebwizardry\:sorcery_runestone.name=Pierre runique
|
||||
tile.ebwizardry\:fire_runestone_pedestal.name=Piédestal runique
|
||||
tile.ebwizardry\:ice_runestone_pedestal.name=Piédestal runique
|
||||
tile.ebwizardry\:lightning_runestone_pedestal.name=Piédestal runique
|
||||
tile.ebwizardry\:necromancy_runestone_pedestal.name=Piédestal runique
|
||||
tile.ebwizardry\:earth_runestone_pedestal.name=Piédestal runique
|
||||
tile.ebwizardry\:healing_runestone_pedestal.name=Piédestal runique
|
||||
tile.ebwizardry\:sorcery_runestone_pedestal.name=Piédestal runique
|
||||
tile.ebwizardry\:thorns.name=Épines
|
||||
tile.ebwizardry\:obsidian_crust.name=Croûte d'obsidienne
|
||||
tile.ebwizardry\:dry_frosted_ice.name=Glace dépolie
|
||||
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=Lutrin de chêne noir
|
||||
tile.ebwizardry\:receptacle.name=Receptacle
|
||||
tile.ebwizardry\:imbuement_altar.name=Autel d'infusion
|
||||
|
||||
item.ebwizardry\:crystal_magic.name=Cristal magique
|
||||
item.ebwizardry\:crystal_magic.desc=Les couleurs iridescentes du cristal tourbillonnent doucement, révélant sa magie. Il y a sûrement un moyen de l'utiliser...
|
||||
item.ebwizardry\:crystal_fire.name=Cristal embrasé
|
||||
item.ebwizardry\:crystal_fire.desc=Un cristal brillant d'un orange chatoyant. C'est sûrement la clef pour déverrouiller l'élément du feu...
|
||||
item.ebwizardry\:crystal_ice.name=Cristal gelé
|
||||
item.ebwizardry\:crystal_ice.desc=Un cristal teinté d'un bleu glacial. Il renferme sûrement les secrets du froid...
|
||||
item.ebwizardry\:crystal_lightning.name=Cristal foudroyant
|
||||
item.ebwizardry\:crystal_lightning.desc=Un cristal vibrant d'une énergie chaotique. Il cache probablement un pouvoir grandiose...
|
||||
item.ebwizardry\:crystal_necromancy.name=Cristal ténébreux
|
||||
item.ebwizardry\:crystal_necromancy.desc=Un cristal sombre et violacé. Il s'agit sûrement d'une clef pour un sombre pouvoir...
|
||||
item.ebwizardry\:crystal_earth.name=Cristal verdoyant
|
||||
item.ebwizardry\:crystal_earth.desc=Un cristal empreint de filaments verdoyants. Il doit sûrement contenir les pouvoirs de la nature...
|
||||
item.ebwizardry\:crystal_sorcery.name=Cristal mystique
|
||||
item.ebwizardry\:crystal_sorcery.desc=Un cristal luisant d'un vert bleuté. Il semble recéler une magie antique...
|
||||
item.ebwizardry\:crystal_healing.name=Cristal rayonnant
|
||||
item.ebwizardry\:crystal_healing.desc=Un cristal au rayonnement doré. Il doit être lié à un pouvoir divin...
|
||||
item.ebwizardry\:magic_crystal.name=Cristal magique
|
||||
item.ebwizardry\:magic_crystal.desc=Les couleurs iridescentes du cristal tourbillonnent doucement, révélant sa magie. Il y a sûrement un moyen de l'utiliser...
|
||||
item.ebwizardry\:fire_crystal.name=Cristal embrasé
|
||||
item.ebwizardry\:fire_crystal.desc=Un cristal brillant d'un orange chatoyant. C'est sûrement la clef pour déverrouiller l'élément du feu...
|
||||
item.ebwizardry\:ice_crystal.name=Cristal gelé
|
||||
item.ebwizardry\:ice_crystal.desc=Un cristal teinté d'un bleu glacial. Il renferme sûrement les secrets du froid...
|
||||
item.ebwizardry\:lightning_crystal.name=Cristal foudroyant
|
||||
item.ebwizardry\:lightning_crystal.desc=Un cristal vibrant d'une énergie chaotique. Il cache probablement un pouvoir grandiose...
|
||||
item.ebwizardry\:necromancy_crystal.name=Cristal ténébreux
|
||||
item.ebwizardry\:necromancy_crystal.desc=Un cristal sombre et violacé. Il s'agit sûrement d'une clef pour un sombre pouvoir...
|
||||
item.ebwizardry\:earth_crystal.name=Cristal verdoyant
|
||||
item.ebwizardry\:earth_crystal.desc=Un cristal empreint de filaments verdoyants. Il doit sûrement contenir les pouvoirs de la nature...
|
||||
item.ebwizardry\:sorcery_crystal.name=Cristal mystique
|
||||
item.ebwizardry\:sorcery_crystal.desc=Un cristal luisant d'un vert bleuté. Il semble recéler une magie antique...
|
||||
item.ebwizardry\:healing_crystal.name=Cristal rayonnant
|
||||
item.ebwizardry\:healing_crystal.desc=Un cristal au rayonnement doré. Il doit être lié à un pouvoir divin...
|
||||
|
||||
item.ebwizardry\:spell_book.name=Livre de sorts
|
||||
item.ebwizardry\:spell_book.desc=Un livre rempli de glyphes et de runes antiques. Avec de l'agnégation, il devrait être possible de le décrypter...\n\nClic droit en tenant le livre pour le lire.
|
||||
|
||||
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=egjegyezve a hely: %s, %s, %s, %s
|
||||
tile.ebwizardry\:transportation_stone.forget=Elfelejtve a hely: %s, %s, %s, %s dimenzióban
|
||||
tile.ebwizardry\:transportation_stone.invalid=Előbb egy kört kell építened 8 Transzportáció Kövéből!
|
||||
tile.ebwizardry\:spectral_block.name=Spektrálblokk
|
||||
tile.ebwizardry\:runestone.name=Rúnakő
|
||||
tile.ebwizardry\:runestone_pedestal.name=Rúnakő Pedesztál
|
||||
tile.ebwizardry\:fire_runestone.name=Rúnakő
|
||||
tile.ebwizardry\:ice_runestone.name=Rúnakő
|
||||
tile.ebwizardry\:lightning_runestone.name=Rúnakő
|
||||
tile.ebwizardry\:necromancy_runestone.name=Rúnakő
|
||||
tile.ebwizardry\:earth_runestone.name=Rúnakő
|
||||
tile.ebwizardry\:healing_runestone.name=Rúnakő
|
||||
tile.ebwizardry\:sorcery_runestone.name=Rúnakő
|
||||
tile.ebwizardry\:fire_runestone_pedestal.name=Rúnakő Pedesztál
|
||||
tile.ebwizardry\:ice_runestone_pedestal.name=Rúnakő Pedesztál
|
||||
tile.ebwizardry\:lightning_runestone_pedestal.name=Rúnakő Pedesztál
|
||||
tile.ebwizardry\:necromancy_runestone_pedestal.name=Rúnakő Pedesztál
|
||||
tile.ebwizardry\:earth_runestone_pedestal.name=Rúnakő Pedesztál
|
||||
tile.ebwizardry\:healing_runestone_pedestal.name=Rúnakő Pedesztál
|
||||
tile.ebwizardry\:sorcery_runestone_pedestal.name=Rúnakő Pedesztál
|
||||
tile.ebwizardry\:thorns.name=Tövisek
|
||||
tile.ebwizardry\:obsidian_crust.name=Obszidián Kéreg
|
||||
tile.ebwizardry\:dry_frosted_ice.name=Száraz Fagyott Jég
|
||||
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=Sötéttölgy Olvasóállvány
|
||||
tile.ebwizardry\:receptacle.name=Receptákulum
|
||||
tile.ebwizardry\:imbuement_altar.name=Oltár
|
||||
|
||||
item.ebwizardry\:crystal_magic.name=Varázskristály
|
||||
item.ebwizardry\:crystal_magic.desc=A kristály belsejében lassan kavargó, irizáló színek mágikus energiáról tanúskodnak. Ezt az energiát ha ki lehetne nyerni, valahogy...
|
||||
item.ebwizardry\:crystal_fire.name=Tüzes Kristály
|
||||
item.ebwizardry\:crystal_fire.desc=Tüzes narancsszínnel izzó kristály. Ez lehet a kulcs a tűz elem titkainak feltárásához...
|
||||
item.ebwizardry\:crystal_ice.name=Jeges Kristály
|
||||
item.ebwizardry\:crystal_ice.desc=Hideg, kékes árnyalatú kristály. A fagy erejének titkait rejtheti...
|
||||
item.ebwizardry\:crystal_lightning.name=Viharos Kristály
|
||||
item.ebwizardry\:crystal_lightning.desc=Gomolygó és kaotikus energiával villogó kristály. Hatalmas erőt rejthet magában...
|
||||
item.ebwizardry\:crystal_necromancy.name=Sötét Kristály
|
||||
item.ebwizardry\:crystal_necromancy.desc=Mélységes lila kristály, mely ha ránézel szinte magába szippant. Valami még sötétebb kapuja lehet...
|
||||
item.ebwizardry\:crystal_earth.name=Viruló Kristály
|
||||
item.ebwizardry\:crystal_earth.desc=Zöld és barna temérdek árnyalatával mintázott kristály. Kapcsolata lehet a természet erőivel...
|
||||
item.ebwizardry\:crystal_sorcery.name=Misztikus Kristály
|
||||
item.ebwizardry\:crystal_sorcery.desc=Kékeszöld fénnyel csillogó kristály. Ősi erők titkait rejtheti magában...
|
||||
item.ebwizardry\:crystal_healing.name=Sugárzó Kristály
|
||||
item.ebwizardry\:crystal_healing.desc=A napsugárban aranyszín sárgán megcsillanó kristály. Tán isteni hatalomhoz rejt kapcsot...
|
||||
item.ebwizardry\:magic_crystal.name=Varázskristály
|
||||
item.ebwizardry\:magic_crystal.desc=A kristály belsejében lassan kavargó, irizáló színek mágikus energiáról tanúskodnak. Ezt az energiát ha ki lehetne nyerni, valahogy...
|
||||
item.ebwizardry\:fire_crystal.name=Tüzes Kristály
|
||||
item.ebwizardry\:fire_crystal.desc=Tüzes narancsszínnel izzó kristály. Ez lehet a kulcs a tűz elem titkainak feltárásához...
|
||||
item.ebwizardry\:ice_crystal.name=Jeges Kristály
|
||||
item.ebwizardry\:ice_crystal.desc=Hideg, kékes árnyalatú kristály. A fagy erejének titkait rejtheti...
|
||||
item.ebwizardry\:lightning_crystal.name=Viharos Kristály
|
||||
item.ebwizardry\:lightning_crystal.desc=Gomolygó és kaotikus energiával villogó kristály. Hatalmas erőt rejthet magában...
|
||||
item.ebwizardry\:necromancy_crystal.name=Sötét Kristály
|
||||
item.ebwizardry\:necromancy_crystal.desc=Mélységes lila kristály, mely ha ránézel szinte magába szippant. Valami még sötétebb kapuja lehet...
|
||||
item.ebwizardry\:earth_crystal.name=Viruló Kristály
|
||||
item.ebwizardry\:earth_crystal.desc=Zöld és barna temérdek árnyalatával mintázott kristály. Kapcsolata lehet a természet erőivel...
|
||||
item.ebwizardry\:sorcery_crystal.name=Misztikus Kristály
|
||||
item.ebwizardry\:sorcery_crystal.desc=Kékeszöld fénnyel csillogó kristály. Ősi erők titkait rejtheti magában...
|
||||
item.ebwizardry\:healing_crystal.name=Sugárzó Kristály
|
||||
item.ebwizardry\:healing_crystal.desc=A napsugárban aranyszín sárgán megcsillanó kristály. Tán isteni hatalomhoz rejt kapcsot...
|
||||
|
||||
item.ebwizardry\:spell_book.name=Varázskönyv
|
||||
item.ebwizardry\:spell_book.desc=Egy könyv, egy ősi nyelv rúnáival és szimbólumaival tele. Elegendő eltökéltséggel talán meg lehetne fejteni tartalmát...\n\nJobb-kattintással nyisd meg a könyvet, hogy elolvashasd.
|
||||
|
||||
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=%s, %s, %s의 %s의 위치를 지
|
||||
tile.ebwizardry\:transportation_stone.forget=%s, %s, %s의 %s의 위치를 지웠습니다
|
||||
tile.ebwizardry\:transportation_stone.invalid=먼저 전이의 돌 8개로 전이진을 만들어야 합니다!
|
||||
tile.ebwizardry\:spectral_block.name=허상 블록
|
||||
tile.ebwizardry\:runestone.name=룬스톤
|
||||
tile.ebwizardry\:runestone_pedestal.name=룬스톤 초석
|
||||
tile.ebwizardry\:fire_runestone.name=룬스톤
|
||||
tile.ebwizardry\:ice_runestone.name=룬스톤
|
||||
tile.ebwizardry\:lightning_runestone.name=룬스톤
|
||||
tile.ebwizardry\:necromancy_runestone.name=룬스톤
|
||||
tile.ebwizardry\:earth_runestone.name=룬스톤
|
||||
tile.ebwizardry\:healing_runestone.name=룬스톤
|
||||
tile.ebwizardry\:sorcery_runestone.name=룬스톤
|
||||
tile.ebwizardry\:fire_runestone_pedestal.name=룬스톤 초석
|
||||
tile.ebwizardry\:ice_runestone_pedestal.name=룬스톤 초석
|
||||
tile.ebwizardry\:lightning_runestone_pedestal.name=룬스톤 초석
|
||||
tile.ebwizardry\:necromancy_runestone_pedestal.name=룬스톤 초석
|
||||
tile.ebwizardry\:earth_runestone_pedestal.name=룬스톤 초석
|
||||
tile.ebwizardry\:healing_runestone_pedestal.name=룬스톤 초석
|
||||
tile.ebwizardry\:sorcery_runestone_pedestal.name=룬스톤 초석
|
||||
tile.ebwizardry\:thorns.name=가시
|
||||
tile.ebwizardry\:obsidian_crust.name=흑요석 껍질
|
||||
tile.ebwizardry\:dry_frosted_ice.name=마른 반투명 얼음
|
||||
@@ -52,22 +64,22 @@ tile.ebwizardry\:dark_oak_lectern.name=짙은 참나무 독서대
|
||||
tile.ebwizardry\:receptacle.name=받침
|
||||
tile.ebwizardry\:imbuement_altar.name=고취의 제단
|
||||
|
||||
item.ebwizardry\:crystal_magic.name=마법수정
|
||||
item.ebwizardry\:crystal_magic.desc=무지갯빛의 아름다운 수정, 마법의 기운이 내부에서 서서히 변화하며 소용돌이치고 있습니다. 어쩌면 이 수정은 사용하면...
|
||||
item.ebwizardry\:crystal_fire.name=화염의 수정
|
||||
item.ebwizardry\:crystal_fire.desc=주황빛으로 불타는 수정, 어쩌면 불의 원소를 푸는 열쇠일지도 모릅니다...
|
||||
item.ebwizardry\:crystal_ice.name=얼음의 수정
|
||||
item.ebwizardry\:crystal_ice.desc=푸르스름한 색조의 차가운 수정, 어쩌면 서리의 힘의 비밀을 간직하고 있을지도 모릅니다...
|
||||
item.ebwizardry\:crystal_lightning.name=폭풍의 수정
|
||||
item.ebwizardry\:crystal_lightning.desc=어지럽게 소용돌이치고 번쩍이는 수정, 어쩌면 더 큰 힘을 숨기고 있을지도 모릅니다...
|
||||
item.ebwizardry\:crystal_necromancy.name=어둠의 수정
|
||||
item.ebwizardry\:crystal_necromancy.desc=마치 끌어당기는 듯한 깊고 푸르스름한 수정, 어쩌면 더 어두운 곳으로 가는 관문일지도 모릅니다...
|
||||
item.ebwizardry\:crystal_earth.name=신록의 수정
|
||||
item.ebwizardry\:crystal_earth.desc=녹색과 약간의 갈색으로 이루어진 수정, 어쩌면 자연의 힘과 연관이 있을지도 모릅니다...
|
||||
item.ebwizardry\:crystal_sorcery.name=신령의 수정
|
||||
item.ebwizardry\:crystal_sorcery.desc=푸르스름한 초록빛의 반짝거리는 수정, 어쩌면 고대의 힘의 비밀을 감추고 있을지도 모릅니다...
|
||||
item.ebwizardry\:crystal_healing.name=복사의 수정
|
||||
item.ebwizardry\:crystal_healing.desc=금빛 햇살처럼 노랗게 반짝이는 수정, 어쩌면 신성한 힘의 연결고리일지도 모릅니다...
|
||||
item.ebwizardry\:magic_crystal.name=마법수정
|
||||
item.ebwizardry\:magic_crystal.desc=무지갯빛의 아름다운 수정, 마법의 기운이 내부에서 서서히 변화하며 소용돌이치고 있습니다. 어쩌면 이 수정은 사용하면...
|
||||
item.ebwizardry\:fire_crystal.name=화염의 수정
|
||||
item.ebwizardry\:fire_crystal.desc=주황빛으로 불타는 수정, 어쩌면 불의 원소를 푸는 열쇠일지도 모릅니다...
|
||||
item.ebwizardry\:ice_crystal.name=얼음의 수정
|
||||
item.ebwizardry\:ice_crystal.desc=푸르스름한 색조의 차가운 수정, 어쩌면 서리의 힘의 비밀을 간직하고 있을지도 모릅니다...
|
||||
item.ebwizardry\:lightning_crystal.name=폭풍의 수정
|
||||
item.ebwizardry\:lightning_crystal.desc=어지럽게 소용돌이치고 번쩍이는 수정, 어쩌면 더 큰 힘을 숨기고 있을지도 모릅니다...
|
||||
item.ebwizardry\:necromancy_crystal.name=어둠의 수정
|
||||
item.ebwizardry\:necromancy_crystal.desc=마치 끌어당기는 듯한 깊고 푸르스름한 수정, 어쩌면 더 어두운 곳으로 가는 관문일지도 모릅니다...
|
||||
item.ebwizardry\:earth_crystal.name=신록의 수정
|
||||
item.ebwizardry\:earth_crystal.desc=녹색과 약간의 갈색으로 이루어진 수정, 어쩌면 자연의 힘과 연관이 있을지도 모릅니다...
|
||||
item.ebwizardry\:sorcery_crystal.name=신령의 수정
|
||||
item.ebwizardry\:sorcery_crystal.desc=푸르스름한 초록빛의 반짝거리는 수정, 어쩌면 고대의 힘의 비밀을 감추고 있을지도 모릅니다...
|
||||
item.ebwizardry\:healing_crystal.name=복사의 수정
|
||||
item.ebwizardry\:healing_crystal.desc=금빛 햇살처럼 노랗게 반짝이는 수정, 어쩌면 신성한 힘의 연결고리일지도 모릅니다...
|
||||
|
||||
item.ebwizardry\:spell_book.name=주문서
|
||||
item.ebwizardry\:spell_book.desc=고대의 상형문자와 룬 문자로 채워진 책. 노력을 통해 그 내용을 해독할 수 있을 것 같습니다...\n\n책을 읽으려면 오른쪽 버튼을 누르세요.
|
||||
|
||||
@@ -11,8 +11,20 @@ tile.ebwizardry\:transportation_stone.remember=Zapamiętano lokalizację %s, %s,
|
||||
tile.ebwizardry\:transportation_stone.forget=Zapomniano lokalizację %s, %s, %s w wymiarze %s
|
||||
tile.ebwizardry\:transportation_stone.invalid=Najpierw musisz zrobić krąg z 8 kamieniami transportu!
|
||||
tile.ebwizardry\:spectral_block.name=Blok Spektralny
|
||||
tile.ebwizardry\:runestone.name=Kamień Runiczny
|
||||
tile.ebwizardry\:runestone_pedestal.name=Pilar Runicznego Kamienia
|
||||
tile.ebwizardry\:fire_runestone.name=Kamień Runiczny
|
||||
tile.ebwizardry\:ice_runestone.name=Kamień Runiczny
|
||||
tile.ebwizardry\:lightning_runestone.name=Kamień Runiczny
|
||||
tile.ebwizardry\:necromancy_runestone.name=Kamień Runiczny
|
||||
tile.ebwizardry\:earth_runestone.name=Kamień Runiczny
|
||||
tile.ebwizardry\:healing_runestone.name=Kamień Runiczny
|
||||
tile.ebwizardry\:sorcery_runestone.name=Kamień Runiczny
|
||||
tile.ebwizardry\:fire_runestone_pedestal.name=Pilar Runicznego Kamienia
|
||||
tile.ebwizardry\:ice_runestone_pedestal.name=Pilar Runicznego Kamienia
|
||||
tile.ebwizardry\:lightning_runestone_pedestal.name=Pilar Runicznego Kamienia
|
||||
tile.ebwizardry\:necromancy_runestone_pedestal.name=Pilar Runicznego Kamienia
|
||||
tile.ebwizardry\:earth_runestone_pedestal.name=Pilar Runicznego Kamienia
|
||||
tile.ebwizardry\:healing_runestone_pedestal.name=Pilar Runicznego Kamienia
|
||||
tile.ebwizardry\:sorcery_runestone_pedestal.name=Pilar Runicznego Kamienia
|
||||
tile.ebwizardry\:thorns.name=Ciernie
|
||||
tile.ebwizardry\:obsidian_crust.name=Obsydianowa Skorupa
|
||||
tile.ebwizardry\:dry_frosted_ice.name=Zaschły Lód
|
||||
@@ -55,14 +67,14 @@ tile.ebwizardry\:imbuement_altar.name=Nasycony Ołtarz
|
||||
|
||||
|
||||
|
||||
item.ebwizardry\:crystal_magic.name=Magiczny Kryształ
|
||||
item.ebwizardry\:crystal_fire.name=Ognisty Kryształ
|
||||
item.ebwizardry\:crystal_ice.name=Lodowy Kryształ
|
||||
item.ebwizardry\:crystal_lightning.name=Sztormowy Kryształ
|
||||
item.ebwizardry\:crystal_necromancy.name=Mroczny Kryształ
|
||||
item.ebwizardry\:crystal_earth.name=Zielny Kryształ
|
||||
item.ebwizardry\:crystal_sorcery.name=Mistyczny Kryształ
|
||||
item.ebwizardry\:crystal_healing.name=Promienisty Kryształ
|
||||
item.ebwizardry\:magic_crystal.name=Magiczny Kryształ
|
||||
item.ebwizardry\:fire_crystal.name=Ognisty Kryształ
|
||||
item.ebwizardry\:ice_crystal.name=Lodowy Kryształ
|
||||
item.ebwizardry\:lightning_crystal.name=Sztormowy Kryształ
|
||||
item.ebwizardry\:necromancy_crystal.name=Mroczny Kryształ
|
||||
item.ebwizardry\:earth_crystal.name=Zielny Kryształ
|
||||
item.ebwizardry\:sorcery_crystal.name=Mistyczny Kryształ
|
||||
item.ebwizardry\:healing_crystal.name=Promienisty Kryształ
|
||||
|
||||
item.ebwizardry\:magic_wand.name=Magiczna Różdżka
|
||||
item.ebwizardry\:apprentice_wand.name=Uczniowska Różdżka
|
||||
@@ -454,7 +466,7 @@ entity.ebwizardry\:skeleton_minion.name=Szkielet
|
||||
entity.ebwizardry\:stray_minion.name=Tułacz
|
||||
entity.ebwizardry\:spider_minion.name=Pająk
|
||||
entity.ebwizardry\:blaze_minion.name=Płomyk
|
||||
entity.ebwizardry\:wither_skeleton_minion.name=Obumarły Szkielet
|
||||
entity.ebwizardry\:wither_skeleton_minion.name=Obumar�y 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
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "ebwizardry:items/crystal_ice"
|
||||
"layer0": "ebwizardry:items/arcane_tome"
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "ebwizardry:items/crystal_fire"
|
||||
"layer0": "ebwizardry:items/arcane_tome"
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "ebwizardry:items/crystal_magic"
|
||||
"layer0": "ebwizardry:items/arcane_tome"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "ebwizardry:items/crystal_lightning"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "ebwizardry:items/crystal_necromancy"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "ebwizardry:items/crystal_sorcery"
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "ebwizardry:items/crystal_earth"
|
||||
"layer0": "ebwizardry:items/earth_crystal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "ebwizardry:items/fire_crystal"
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -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": {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user